From 6a6f363893b53a774349a0a55e533cb7aab31348 Mon Sep 17 00:00:00 2001
From: Edward Moyse <edward.moyse@cern.ch>
Date: Thu, 20 Dec 2018 14:38:09 +0100
Subject: [PATCH 001/163] Removing Atlantis, as this is now hosted elsewhere.

---
 graphics/AtlantisJava/CMakeLists.txt          |   31 -
 graphics/AtlantisJava/ant/build.xml           |  469 ---
 .../AtlantisJava/configuration/PSProlog.txt   |  156 -
 .../AtlantisJava/configuration/colormap.xml   |  369 ---
 .../AtlantisJava/configuration/config.dtd     |  169 --
 .../AtlantisJava/configuration/epusti.csv     |    5 -
 graphics/AtlantisJava/configuration/pdg.xml   |  109 -
 .../configuration/rpsplt_fcal.csv             |  498 ---
 .../AtlantisJava/configuration/rpsplt_hec.csv |  329 --
 .../configuration/rpsplt_tile.csv             |  169 --
 graphics/AtlantisJava/events/event.dtd        |  506 ----
 graphics/AtlantisJava/geometry/AGeometry.xml  |  233 --
 .../AtlantisJava/geometry/AMuonGeometry.xml   |  220 --
 graphics/AtlantisJava/geometry/ATLAS_IDS.xml  |   27 -
 graphics/AtlantisJava/geometry/IdDict.dtd     |  118 -
 .../AtlantisJava/geometry/IdDictATLAS.xml     |   56 -
 .../geometry/IdDictCalorimeter.xml            |  731 -----
 .../geometry/IdDictForwardDetectors.xml       |  140 -
 .../geometry/IdDictInnerDetector.xml          |  559 ----
 .../geometry/IdDictLArCalorimeter.xml         |  694 -----
 .../geometry/IdDictLArElectrode.xml           |  327 --
 .../geometry/IdDictLArHighVoltage.xml         |  222 --
 .../geometry/IdDictTileCalorimeter.xml        |  398 ---
 graphics/AtlantisJava/img/atlantis_icon.gif   |  Bin 2939 -> 0 bytes
 graphics/AtlantisJava/img/atlantis_log.gif    |  Bin 18919 -> 0 bytes
 graphics/AtlantisJava/img/atlas.jpg           |  Bin 32018 -> 0 bytes
 graphics/AtlantisJava/img/atlas_logo_big.png  |  Bin 7956 -> 0 bytes
 .../img/cursor_DnD_invalid_32x32.gif          |  Bin 153 -> 0 bytes
 .../img/cursor_DnD_invalid_64x64.gif          |  Bin 204 -> 0 bytes
 .../img/cursor_DnD_valid_32x32.gif            |  Bin 147 -> 0 bytes
 .../img/cursor_DnD_valid_64x64.gif            |  Bin 202 -> 0 bytes
 .../AtlantisJava/img/cursor_fisheye_32x32.gif |  Bin 1191 -> 0 bytes
 .../AtlantisJava/img/cursor_fisheye_64x64.gif |  Bin 1259 -> 0 bytes
 .../img/cursor_fisheye_bw_32x32.gif           |  Bin 167 -> 0 bytes
 .../img/cursor_fisheye_bw_64x64.gif           |  Bin 220 -> 0 bytes
 .../AtlantisJava/img/cursor_move_32x32.gif    |  Bin 235 -> 0 bytes
 .../AtlantisJava/img/cursor_move_64x64.gif    |  Bin 286 -> 0 bytes
 .../AtlantisJava/img/cursor_pick_32x32.gif    |  Bin 142 -> 0 bytes
 .../AtlantisJava/img/cursor_pick_64x64.gif    |  Bin 194 -> 0 bytes
 .../AtlantisJava/img/cursor_rectsel_32x32.gif |  Bin 176 -> 0 bytes
 .../AtlantisJava/img/cursor_rectsel_64x64.gif |  Bin 207 -> 0 bytes
 .../AtlantisJava/img/cursor_rotate_32x32.gif  |  Bin 1126 -> 0 bytes
 .../AtlantisJava/img/cursor_rotate_64x64.gif  |  Bin 1190 -> 0 bytes
 .../img/cursor_rotate_bw_32x32.gif            |  Bin 238 -> 0 bytes
 .../img/cursor_rotate_bw_64x64.gif            |  Bin 300 -> 0 bytes
 .../AtlantisJava/img/cursor_sync_32x32.gif    |  Bin 916 -> 0 bytes
 .../AtlantisJava/img/cursor_sync_64x64.gif    |  Bin 973 -> 0 bytes
 .../AtlantisJava/img/cursor_zoom_32x32.gif    |  Bin 335 -> 0 bytes
 .../AtlantisJava/img/cursor_zoom_64x64.gif    |  Bin 394 -> 0 bytes
 .../AtlantisJava/img/cursor_zoom_bw_32x32.gif |  Bin 161 -> 0 bytes
 .../AtlantisJava/img/cursor_zoom_bw_64x64.gif |  Bin 212 -> 0 bytes
 graphics/AtlantisJava/img/downarrow.png       |  Bin 183 -> 0 bytes
 .../AtlantisJava/img/interaction_clock.png    |  Bin 1033 -> 0 bytes
 .../AtlantisJava/img/interaction_fisheye.png  |  Bin 694 -> 0 bytes
 .../AtlantisJava/img/interaction_pick.png     |  Bin 260 -> 0 bytes
 .../AtlantisJava/img/interaction_rotate.png   |  Bin 608 -> 0 bytes
 .../img/interaction_rubberband.png            |  Bin 699 -> 0 bytes
 .../img/interaction_rubberbandyx.png          |  Bin 699 -> 0 bytes
 .../AtlantisJava/img/interaction_scale.png    |  Bin 422 -> 0 bytes
 .../AtlantisJava/img/interaction_skew.png     |  Bin 271 -> 0 bytes
 .../img/interaction_synccursors.png           |  Bin 455 -> 0 bytes
 graphics/AtlantisJava/img/interaction_zmr.png |  Bin 1010 -> 0 bytes
 graphics/AtlantisJava/img/interaction_zr.png  |  Bin 234 -> 0 bytes
 graphics/AtlantisJava/img/left.gif            |  Bin 172 -> 0 bytes
 graphics/AtlantisJava/img/minerva_log.gif     |  Bin 19469 -> 0 bytes
 graphics/AtlantisJava/img/mode_loop.png       |  Bin 470 -> 0 bytes
 graphics/AtlantisJava/img/mode_loop_on.png    |  Bin 475 -> 0 bytes
 graphics/AtlantisJava/img/mode_random.png     |  Bin 1032 -> 0 bytes
 graphics/AtlantisJava/img/mode_random_on.png  |  Bin 1045 -> 0 bytes
 graphics/AtlantisJava/img/mode_sequential.png |  Bin 387 -> 0 bytes
 .../AtlantisJava/img/mode_sequential_on.png   |  Bin 386 -> 0 bytes
 graphics/AtlantisJava/img/right.gif           |  Bin 172 -> 0 bytes
 graphics/AtlantisJava/img/toolbar_next.png    |  Bin 659 -> 0 bytes
 graphics/AtlantisJava/img/toolbar_open.png    |  Bin 550 -> 0 bytes
 .../AtlantisJava/img/toolbar_previous.png     |  Bin 634 -> 0 bytes
 graphics/AtlantisJava/img/uparrow.png         |  Bin 189 -> 0 bytes
 graphics/AtlantisJava/lib/Jama.jar            |  Bin 33329 -> 0 bytes
 graphics/AtlantisJava/lib/batik-anim.jar      |  Bin 95479 -> 0 bytes
 graphics/AtlantisJava/lib/batik-ext.jar       |  Bin 10261 -> 0 bytes
 graphics/AtlantisJava/lib/batik-extension.jar |  Bin 68051 -> 0 bytes
 graphics/AtlantisJava/lib/batik-parser.jar    |  Bin 73710 -> 0 bytes
 graphics/AtlantisJava/lib/batik-script.jar    |  Bin 61893 -> 0 bytes
 graphics/AtlantisJava/lib/batik-xml.jar       |  Bin 30862 -> 0 bytes
 graphics/AtlantisJava/lib/commons-cli-1.0.jar |  Bin 30117 -> 0 bytes
 .../AtlantisJava/lib/commons-codec-1.4.jar    |  Bin 58160 -> 0 bytes
 .../AtlantisJava/lib/commons-logging-1.1.jar  |  Bin 52915 -> 0 bytes
 graphics/AtlantisJava/lib/jas-aida-dev.jar    |  Bin 3738 -> 0 bytes
 graphics/AtlantisJava/lib/jas-aida.jar        |  Bin 40424 -> 0 bytes
 graphics/AtlantisJava/lib/jas-jel.jar         |  Bin 33570 -> 0 bytes
 graphics/AtlantisJava/lib/jlibeps.jar         |  Bin 17486 -> 0 bytes
 graphics/AtlantisJava/lib/oncrpc.jar          |  Bin 86081 -> 0 bytes
 .../lib/ostermillerutils_1_05_00.jar          |  Bin 34346 -> 0 bytes
 .../AtlantisJava/lib/test/fest-assert-1.2.jar |  Bin 89901 -> 0 bytes
 .../lib/test/fest-reflect-1.2.jar             |  Bin 37208 -> 0 bytes
 .../AtlantisJava/lib/test/fest-util-1.1.2.jar |  Bin 18962 -> 0 bytes
 .../lib/test/jcip-annotations-1.0.jar         |  Bin 2255 -> 0 bytes
 .../lib/ws-commons-util-1.0.2.jar             |  Bin 34407 -> 0 bytes
 graphics/AtlantisJava/lib/xml-apis-ext.jar    |  Bin 85686 -> 0 bytes
 .../AtlantisJava/lib/xmlrpc-client-3.1.jar    |  Bin 45124 -> 0 bytes
 .../AtlantisJava/lib/xmlrpc-server-3.1.jar    |  Bin 75310 -> 0 bytes
 .../AtlantisJava/share/InteractiveServer.py   |  483 ---
 graphics/AtlantisJava/share/MINERVA.jnlp      |   84 -
 graphics/AtlantisJava/share/atlantis          |   13 -
 graphics/AtlantisJava/share/atlantis.jnlp     |   81 -
 graphics/AtlantisJava/share/atlantis_online   |   15 -
 graphics/AtlantisJava/share/ntupleXML.h       | 1351 ---------
 .../AtlantisJava/share/specificconfig.jnlp    |   83 -
 .../src/atlantis/ACommandLine.java            |  399 ---
 .../src/atlantis/AOpenGLTools.java            |   22 -
 .../AtlantisJava/src/atlantis/Atlantis.java   |  770 -----
 .../src/atlantis/canvas/ACanvas.java          | 1113 -------
 .../canvas/ADrawCalorimeterSummedEndcaps.java |  937 ------
 .../src/atlantis/canvas/AGLGraphics.java      |  486 ---
 .../src/atlantis/canvas/ALayout.java          |  231 --
 .../canvas/ALayoutChangeListener.java         |   16 -
 .../src/atlantis/canvas/ALegendWindow.java    |  197 --
 .../src/atlantis/canvas/AOverlay.java         |  193 --
 .../src/atlantis/canvas/AScale.java           |  356 ---
 .../src/atlantis/canvas/AScaleBorder.java     | 1282 --------
 .../src/atlantis/canvas/ATitleMenuBar.java    |   92 -
 .../src/atlantis/canvas/AWindow.java          | 1549 ----------
 .../src/atlantis/canvas/AWindowGLView.java    |  337 ---
 .../src/atlantis/canvas/AWindowSwingView.java |   57 -
 .../src/atlantis/canvas/package.html          |   23 -
 .../src/atlantis/config/AConfig.java          |  432 ---
 .../src/atlantis/config/AConfigNode.java      |  263 --
 .../src/atlantis/config/AConfigUpdater.java   |  405 ---
 .../src/atlantis/config/ADefaultValues.java   |  206 --
 .../src/atlantis/config/package.html          |    6 -
 .../src/atlantis/data/A3DPointData.java       |  254 --
 .../src/atlantis/data/AAODData.java           |  359 ---
 .../src/atlantis/data/ABJetData.java          |  134 -
 .../src/atlantis/data/ACSCDData.java          |  304 --
 .../src/atlantis/data/ACSCData.java           |  197 --
 .../src/atlantis/data/ACalorimeterData.java   | 2662 -----------------
 .../src/atlantis/data/ACalorimeterRPSPLT.java |  260 --
 .../src/atlantis/data/AClusterData.java       |  385 ---
 .../atlantis/data/ACompositeParticleData.java |  114 -
 .../src/atlantis/data/ADHelix.java            |  539 ----
 .../src/atlantis/data/AETMisData.java         |  562 ----
 .../src/atlantis/data/AElectronData.java      |  180 --
 .../src/atlantis/data/AEmTauROIData.java      |   34 -
 .../src/atlantis/data/AEventFromXML.java      |  786 -----
 .../src/atlantis/data/AFCALData.java          | 1228 --------
 .../src/atlantis/data/AG4StepData.java        |  559 ----
 .../src/atlantis/data/AHECData.java           |  574 ----
 .../src/atlantis/data/AHelix.java             |  854 ------
 .../src/atlantis/data/AHelixAODData.java      |  178 --
 .../src/atlantis/data/AHistogram.java         |  422 ---
 .../src/atlantis/data/AHistogramData.java     |   15 -
 .../src/atlantis/data/AHitData.java           |  487 ---
 .../src/atlantis/data/AInDetSegmentData.java  |   30 -
 .../src/atlantis/data/AInDetTrackData.java    |  164 -
 .../src/atlantis/data/AJetData.java           |  782 -----
 .../src/atlantis/data/AJetROIData.java        |   38 -
 .../src/atlantis/data/ALArData.java           | 1032 -------
 .../atlantis/data/ALVL1JetElementData.java    |  446 ---
 .../src/atlantis/data/ALVL1ResultData.java    |  292 --
 .../atlantis/data/ALVL1TriggerTowerData.java  |  800 -----
 .../src/atlantis/data/ALegoData.java          | 1042 -------
 .../src/atlantis/data/AMBTSData.java          |  595 ----
 .../src/atlantis/data/AMDTData.java           |  338 ---
 .../src/atlantis/data/AMuonData.java          |   95 -
 .../src/atlantis/data/AMuonHitData.java       |  192 --
 .../src/atlantis/data/AMuonROIData.java       |   34 -
 .../src/atlantis/data/AMuonSegmentData.java   |   56 -
 .../src/atlantis/data/AMuonTrackData.java     |  200 --
 .../src/atlantis/data/AOldHelix.java          |  338 ---
 .../src/atlantis/data/APDGTable.java          |  107 -
 .../src/atlantis/data/AParticle.java          |   57 -
 .../src/atlantis/data/APhotonData.java        |  166 -
 .../src/atlantis/data/APixelClusterData.java  |  403 ---
 .../src/atlantis/data/APixelRDOData.java      |  160 -
 .../src/atlantis/data/APulseShapePlot.java    |  513 ----
 .../src/atlantis/data/AROIData.java           |  334 ---
 .../src/atlantis/data/ARPCData.java           |  311 --
 .../src/atlantis/data/ARVxData.java           | 1043 -------
 .../src/atlantis/data/AS3DData.java           |  486 ---
 .../src/atlantis/data/ASMTrData.java          |  626 ----
 .../src/atlantis/data/ASNPData.java           |  659 ----
 .../src/atlantis/data/ASTrData.java           |  254 --
 .../src/atlantis/data/ASVxData.java           |  167 --
 .../src/atlantis/data/ASegmentData.java       |  164 -
 .../src/atlantis/data/ASiClusterData.java     |  385 ---
 .../src/atlantis/data/ASiClusterRDOData.java  |  481 ---
 .../src/atlantis/data/ATGCData.java           |  340 ---
 .../src/atlantis/data/ATILEData.java          |  843 ------
 .../src/atlantis/data/ATRTData.java           |  752 -----
 .../src/atlantis/data/ATauJetData.java        |  198 --
 .../src/atlantis/data/ATrackData.java         | 1389 ---------
 .../src/atlantis/data/ATrackResidualData.java |  323 --
 .../src/atlantis/data/ATrigS3DData.java       |  252 --
 .../src/atlantis/data/ATriggerInfoData.java   |  213 --
 .../src/atlantis/data/AVertex.java            |  328 --
 .../src/atlantis/data/AVertexFit.java         |  289 --
 .../src/atlantis/data/package.html            |    8 -
 .../src/atlantis/event/AAssociation.java      |  298 --
 .../atlantis/event/AAssociationManager.java   |  118 -
 .../atlantis/event/ABufferedEventSource.java  |  263 --
 .../src/atlantis/event/AData.java             | 1661 ----------
 .../src/atlantis/event/AEpsImageProducer.java |  117 -
 .../src/atlantis/event/AEvent.java            | 1051 -------
 .../src/atlantis/event/AEventInfo.java        |  212 --
 .../src/atlantis/event/AEventInfoPrinter.java |   60 -
 .../src/atlantis/event/AEventManager.java     |  319 --
 .../src/atlantis/event/AEventSource.java      |  114 -
 .../atlantis/event/AEventSourceException.java |   65 -
 .../src/atlantis/event/AFileEventSource.java  |  309 --
 .../src/atlantis/event/AFilter.java           |  275 --
 .../src/atlantis/event/AImageProducer.java    |  129 -
 .../src/atlantis/event/ANewEventListener.java |   18 -
 .../event/ANewEventSourceListener.java        |   16 -
 .../atlantis/event/AObjectsAssociation.java   |   26 -
 .../src/atlantis/event/APngImageProducer.java |  119 -
 .../atlantis/event/AStreamedEventSource.java  |   52 -
 .../src/atlantis/event/ASvgImageProducer.java |  117 -
 .../src/atlantis/event/AURLEventSource.java   |  385 ---
 .../src/atlantis/event/AZipEventSource.java   |  478 ---
 .../event/oncrpc/AONCRPCEventSource.java      |  304 --
 .../src/atlantis/event/oncrpc/Event.java      |   86 -
 .../atlantis/event/oncrpc/EventRequest.java   |   79 -
 .../src/atlantis/event/oncrpc/Server.java     |   47 -
 .../src/atlantis/event/oncrpc/Streams.java    |   53 -
 .../src/atlantis/event/package.html           |    9 -
 .../atlantis/event/xmlrpc/AClientXMLRPC.java  |  244 --
 .../event/xmlrpc/ARemoteCallerException.java  |   22 -
 .../atlantis/event/xmlrpc/AServerXMLRPC.java  |   43 -
 .../xmlrpc/AServerXMLRPCEventSource.java      |  146 -
 .../event/xmlrpc/AXMLRPCEventSource.java      |  238 --
 .../src/atlantis/geometry/AAtlasDetector.java |  119 -
 .../geometry/ABarrelCalorimeterDetector.java  |  284 --
 .../geometry/ABarrelSiliconDetector.java      |  276 --
 .../atlantis/geometry/ABarrelTRTDetector.java |  184 --
 .../src/atlantis/geometry/ABoxDetector.java   |  172 --
 .../src/atlantis/geometry/ABoxDetectors.java  |  168 --
 .../geometry/ACalorimeterDetector.java        |  699 -----
 .../src/atlantis/geometry/ADetector.java      |  157 -
 .../atlantis/geometry/ADetectorSystem.java    |  122 -
 .../src/atlantis/geometry/ADetectors.java     |  114 -
 .../src/atlantis/geometry/ADiscDetector.java  |   57 -
 .../geometry/AEndcapCalorimeterDetector.java  |  328 --
 .../geometry/AEndcapCryostatDetector.java     |  158 -
 .../geometry/AEndcapSiliconDetector.java      |  220 --
 .../atlantis/geometry/AEndcapTRTDetector.java |  173 --
 .../geometry/AGapCalorimeterDetector.java     |  179 --
 .../atlantis/geometry/AGeneralDetectors.java  |   71 -
 .../geometry/AGeometryFromXMLReader.java      |  286 --
 .../atlantis/geometry/ARectangleDetector.java |   49 -
 .../src/atlantis/geometry/ATBxDetector.java   |   81 -
 .../atlantis/geometry/ATrapezoidDetector.java |  211 --
 .../geometry/ATrapezoidDetectors.java         |  163 -
 .../src/atlantis/geometry/package.html        |    8 -
 .../src/atlantis/globals/AGlobals.java        |  202 --
 .../src/atlantis/globals/package.html         |   13 -
 .../graphics/AAbstractGraphics2D.java         |  315 --
 .../src/atlantis/graphics/AClipper.java       |  226 --
 .../src/atlantis/graphics/ACoord.java         |  355 ---
 .../src/atlantis/graphics/ACursorFactory.java |  227 --
 .../atlantis/graphics/ADrawParameters.java    |   98 -
 .../src/atlantis/graphics/ADrawable.java      |   24 -
 .../atlantis/graphics/ADrawnGraphics2D.java   |  149 -
 .../atlantis/graphics/ADummyGraphics2D.java   |  215 --
 .../atlantis/graphics/AGLPixelGraphics.java   |   47 -
 .../src/atlantis/graphics/AGraphics.java      |  407 ---
 .../src/atlantis/graphics/AIcon.java          |   28 -
 .../src/atlantis/graphics/ALegoDraw.java      | 1150 -------
 .../atlantis/graphics/APickingGraphics2D.java |  432 ---
 .../src/atlantis/graphics/APixelGraphics.java |  304 --
 .../graphics/ATemplateGraphics2D.java         |   47 -
 .../atlantis/graphics/AVectorGraphics.java    |  309 --
 .../atlantis/graphics/colormap/AColorMap.java |  365 ---
 .../graphics/colormap/MappedColor.java        |   93 -
 .../src/atlantis/graphics/dnd/ACallBack.java  |    9 -
 .../src/atlantis/graphics/dnd/ADnDButton.java |   88 -
 .../src/atlantis/graphics/dnd/ADnDLabel.java  |  184 --
 .../atlantis/graphics/dnd/ADragListener.java  |    9 -
 .../graphics/dnd/AObjectTransferable.java     |   62 -
 .../graphics/encoders/AImageEncoder.java      |  167 --
 .../graphics/encoders/PngEncoder.java         |  582 ----
 .../atlantis/graphics/layout/AFlowLayout.java |  115 -
 .../atlantis/graphics/layout/AGridLayout.java |  214 --
 .../graphics/layout/ARunAnotherLayout.java    |   26 -
 .../src/atlantis/graphics/package.html        |    6 -
 .../src/atlantis/gui/AAboutDialog.java        |  214 --
 .../src/atlantis/gui/ACheckBox.java           |   33 -
 .../src/atlantis/gui/ACheckNode.java          |   86 -
 .../gui/AClosingConfirmationDialog.java       |   63 -
 .../atlantis/gui/AColorComboBoxRenderer.java  |  126 -
 .../src/atlantis/gui/AColorHelpDialog.java    |  260 --
 .../src/atlantis/gui/AColorMapDialog.java     |  109 -
 .../src/atlantis/gui/AColorMapEditor.java     |  281 --
 .../src/atlantis/gui/AComboBox.java           |   51 -
 .../src/atlantis/gui/AConfigWriter.java       |  417 ---
 .../src/atlantis/gui/AControlButton.java      |   84 -
 .../src/atlantis/gui/ACrashReporter.java      |  232 --
 .../atlantis/gui/ADefaultCellAttribute.java   |  129 -
 .../src/atlantis/gui/ADemoDialog.java         |  434 ---
 .../src/atlantis/gui/ADemoFileChooser.java    |   41 -
 .../src/atlantis/gui/ADemoLoop.java           |  200 --
 .../src/atlantis/gui/AEventLoopDialog.java    |  346 ---
 .../atlantis/gui/AEventPropertiesDialog.java  |  721 -----
 .../src/atlantis/gui/AEventQueue.java         |  165 -
 .../src/atlantis/gui/AEventSourceToolBar.java |  523 ----
 .../src/atlantis/gui/AFileControl.java        |  210 --
 .../AtlantisJava/src/atlantis/gui/AGUI.java   |  572 ----
 .../src/atlantis/gui/AGUILayoutManager.java   |  131 -
 .../src/atlantis/gui/AGUIUtilities.java       |  167 --
 .../src/atlantis/gui/AHelpControl.java        |   45 -
 .../src/atlantis/gui/AHelpSystem.java         |  118 -
 .../src/atlantis/gui/AInteractionToolBar.java |  429 ---
 .../src/atlantis/gui/AItemTabbedPane.java     |  144 -
 .../src/atlantis/gui/ALayoutDialog.java       |  109 -
 .../src/atlantis/gui/ALazyPanel.java          |  109 -
 .../src/atlantis/gui/AListsControl.java       |   28 -
 .../src/atlantis/gui/ALogPane.java            |  205 --
 .../src/atlantis/gui/AMainLogPane.java        |   13 -
 .../src/atlantis/gui/AMenuButton.java         |   46 -
 .../src/atlantis/gui/AMouseHelpDialog.java    |  312 --
 .../atlantis/gui/AMultiSpanCellTableUI.java   |   81 -
 .../src/atlantis/gui/AMutableCheckBox.java    |  183 --
 .../src/atlantis/gui/AOpenGLControl.java      |  160 -
 .../src/atlantis/gui/AParamGUIDataModel.java  |  173 --
 .../src/atlantis/gui/AParametersPage.java     |   44 -
 .../src/atlantis/gui/AParametersTable.java    |  253 --
 .../src/atlantis/gui/APasswordDialog.java     |  203 --
 .../atlantis/gui/APointerPositionWindow.java  |  175 --
 .../src/atlantis/gui/APopupHelper.java        |   48 -
 .../src/atlantis/gui/APreferencesControl.java |  429 ---
 .../atlantis/gui/AReadColorMapChooser.java    |   35 -
 .../src/atlantis/gui/AReadFileChooser.java    |  103 -
 .../atlantis/gui/AReadGeometryChooser.java    |   79 -
 .../src/atlantis/gui/ASaveCanvasDialog.java   |  477 ---
 .../src/atlantis/gui/AStartupWindow.java      |   86 -
 .../src/atlantis/gui/ATabbedPaneUI.java       |   35 -
 .../src/atlantis/gui/ATextField.java          |   31 -
 .../src/atlantis/gui/ATreeCellRenderer.java   |   34 -
 .../atlantis/gui/ATreeExpansionListener.java  |   43 -
 .../src/atlantis/gui/AWindowControl.java      |  190 --
 .../src/atlantis/gui/AXMLFileChooser.java     |  108 -
 .../src/atlantis/gui/AXMLGeometryChooser.java |   73 -
 .../src/atlantis/gui/package.html             |    8 -
 .../atlantis/interactions/A3DBoxGroup.java    |   14 -
 .../interactions/A3DBoxInteraction.java       |  202 --
 .../atlantis/interactions/AClockGroup.java    |   62 -
 .../interactions/AClockInteraction.java       |  103 -
 .../interactions/AEnterExitListener.java      |   13 -
 .../interactions/AFishEyeChangeListener.java  |   17 -
 .../atlantis/interactions/AFishEyeGroup.java  |  116 -
 .../interactions/AFishEyeInteraction.java     |  389 ---
 .../atlantis/interactions/AInteraction.java   |  323 --
 .../interactions/AInteractionGroup.java       |  143 -
 .../AInteractionsConfigReader.java            |   69 -
 .../interactions/AInteractionsManager.java    |  535 ----
 .../atlantis/interactions/ALineSegment.java   |  165 -
 .../src/atlantis/interactions/AModifier.java  |   85 -
 .../interactions/AMouseDragListener.java      |   20 -
 .../interactions/AMousePressListener.java     |   16 -
 .../src/atlantis/interactions/ANZMRGroup.java |   16 -
 .../interactions/ANZMRInteraction.java        |   80 -
 .../interactions/AParallelogramSelection.java |  119 -
 .../src/atlantis/interactions/APickGroup.java |  102 -
 .../interactions/APickInteraction.java        |  419 ---
 .../atlantis/interactions/APopupListener.java |   16 -
 .../interactions/ARectangleSelection.java     |   95 -
 .../interactions/ARectangleVPSelection.java   |  524 ----
 .../interactions/ARectangleYXSelection.java   |  320 --
 .../ARotatedRectangleSelection.java           |  211 --
 .../interactions/ARubberbandGroup.java        |  109 -
 .../interactions/ARubberbandYXGroup.java      |  109 -
 .../interactions/AScaleCopyGroup.java         |   14 -
 .../interactions/AScaleCopyInteraction.java   |   24 -
 .../src/atlantis/interactions/ASelection.java |  455 ---
 .../src/atlantis/interactions/ASkewGroup.java |   14 -
 .../interactions/ASkewInteraction.java        |  123 -
 .../interactions/ASleepMouseDragListener.java |   13 -
 .../interactions/ASquareSelection.java        |   87 -
 .../interactions/ASynchroCursorsGroup.java    |   15 -
 .../ASynchroCursorsInteraction.java           |  483 ---
 .../interactions/AVPSelectionGroup.java       |   15 -
 .../interactions/AWindowInfoInteraction.java  |   73 -
 .../interactions/AXSkewSelection.java         |  124 -
 .../interactions/AXSliceSelection.java        |   79 -
 .../interactions/AYSkewSelection.java         |  124 -
 .../interactions/AYSliceSelection.java        |   79 -
 .../src/atlantis/interactions/AZMRGroup.java  |   14 -
 .../interactions/AZMRInteraction.java         |  700 -----
 .../src/atlantis/interactions/package.html    |   11 -
 .../src/atlantis/list/AColorIcon.java         |   69 -
 .../AtlantisJava/src/atlantis/list/AList.java |  128 -
 .../src/atlantis/list/AListManager.java       | 1765 -----------
 .../src/atlantis/list/AListProcessor.java     |   10 -
 .../src/atlantis/list/package.html            |    6 -
 .../src/atlantis/nge/ANAnimInterpolate.java   |   47 -
 .../src/atlantis/nge/ANAnimSegment.java       |   13 -
 .../src/atlantis/nge/ANAnimSetProjection.java |   38 -
 .../src/atlantis/nge/ANAnimThread.java        |   67 -
 .../src/atlantis/nge/ANAnimVar.java           |   27 -
 .../src/atlantis/nge/ANAnimationManager.java  |   92 -
 .../src/atlantis/nge/ANCacheToken.java        |   11 -
 .../src/atlantis/nge/ANColor.java             |   87 -
 .../src/atlantis/nge/ANFrameManager.java      |  190 --
 .../src/atlantis/nge/ANGlobalFlags.java       |   17 -
 .../src/atlantis/nge/ANLinearProjection.java  |  229 --
 .../src/atlantis/nge/ANLinearTransition.java  |  140 -
 .../src/atlantis/nge/ANManager.java           |  122 -
 .../src/atlantis/nge/ANObjectGenerator.java   |  151 -
 .../src/atlantis/nge/ANPickDrawer.java        |   59 -
 .../src/atlantis/nge/ANPickHandler.java       |   11 -
 .../src/atlantis/nge/ANPickHandlerSimple.java |   19 -
 .../src/atlantis/nge/ANPickHelper.java        |   51 -
 .../src/atlantis/nge/ANPickListener.java      |   15 -
 .../src/atlantis/nge/ANPickResult.java        |   21 -
 .../src/atlantis/nge/ANPickResultPrinter.java |   17 -
 .../src/atlantis/nge/ANProjection.java        |   20 -
 .../src/atlantis/nge/ANProjection3D.java      |   90 -
 .../src/atlantis/nge/ANProjectionPhysics.java |  181 --
 .../src/atlantis/nge/ANProjectionYX.java      |   46 -
 .../src/atlantis/nge/ANRenderHints.java       |   33 -
 .../src/atlantis/nge/ANRenderer.java          |   22 -
 .../src/atlantis/nge/ANRendererBasic.java     |   88 -
 .../src/atlantis/nge/ANSelectionList.java     |   81 -
 .../src/atlantis/nge/ANTerribleHacks.java     |  119 -
 .../src/atlantis/nge/ANTestWindow.java        |  119 -
 .../src/atlantis/nge/object/ANObject.java     |   27 -
 .../src/atlantis/nge/object/ANObjectList.java |   30 -
 .../atlantis/nge/object/ANObjectTestAxes.java |   44 -
 .../src/atlantis/nge/object/ANObjectVL.java   |   66 -
 .../nge/object/data/ANObjectDataCell.java     |  170 --
 .../nge/object/data/ANObjectDataJet.java      |  146 -
 .../nge/object/data/ANObjectPointing.java     |  147 -
 .../nge/object/data/ANObjectTracks.java       |   82 -
 .../nge/object/geometry/ANObjectBeamLine.java |   21 -
 .../nge/object/geometry/ANObjectGeomCalo.java |  159 -
 .../nge/object/geometry/ANObjectGeomMuon.java |  229 --
 .../atlantis/output/AExceptionHandler.java    |   61 -
 .../src/atlantis/output/ALogInterface.java    |   25 -
 .../src/atlantis/output/AOutput.java          |   54 -
 .../AtlantisJava/src/atlantis/package.html    |    8 -
 .../parameters/AAbstractParameter.java        |  913 ------
 .../atlantis/parameters/AColorParameter.java  |   92 -
 .../src/atlantis/parameters/ACommand.java     |   31 -
 .../parameters/ACommandProcessor.java         |  451 ---
 .../atlantis/parameters/ACutParameter.java    |  171 --
 .../parameters/AEnumeratorParameter.java      |  278 --
 .../atlantis/parameters/ALinkParameter.java   |  151 -
 .../parameters/AListIntegerParameter.java     |   98 -
 .../atlantis/parameters/ANumberParameter.java |  104 -
 .../src/atlantis/parameters/APar.java         |  657 ----
 .../src/atlantis/parameters/AParameter.java   |  107 -
 .../parameters/AParameterChangeListener.java  |   11 -
 .../parameters/AParameterConfigReader.java    |  114 -
 .../atlantis/parameters/AParameterData.java   |  202 --
 .../atlantis/parameters/AParameterState.java  |   38 -
 .../parameters/AParameterSuperGroup.java      |  241 --
 .../parameters/AParameterUtilities.java       |  102 -
 .../atlantis/parameters/AParametersGroup.java |  157 -
 .../parameters/AStatusGroupParameter.java     |  213 --
 .../atlantis/parameters/AStatusParameter.java |   58 -
 .../parameters/AStatusRootParameter.java      |  435 ---
 .../src/atlantis/parameters/package.html      |    7 -
 .../src/atlantis/projection/AProjection.java  |   32 -
 .../atlantis/projection/AProjection2D.java    |  348 ---
 .../atlantis/projection/AProjection3D.java    |  167 --
 .../atlantis/projection/AProjection3DBox.java |  569 ----
 .../projection/AProjectionEventInfo.java      |  197 --
 .../atlantis/projection/AProjectionFR.java    |  127 -
 .../atlantis/projection/AProjectionFZ.java    |   76 -
 .../atlantis/projection/AProjectionInfo.java  |  102 -
 .../projection/AProjectionLegoPlot.java       |  402 ---
 .../atlantis/projection/AProjectionN3D.java   |   66 -
 .../atlantis/projection/AProjectionNGE.java   |  143 -
 .../projection/AProjectionNPhysics.java       |   95 -
 .../atlantis/projection/AProjectionNYX.java   |   71 -
 .../atlantis/projection/AProjectionPhi.java   |   73 -
 .../atlantis/projection/AProjectionRZ.java    |   68 -
 .../projection/AProjectionTrackResidual.java  |  167 --
 .../atlantis/projection/AProjectionVP.java    |  169 --
 .../atlantis/projection/AProjectionXZ.java    |   81 -
 .../atlantis/projection/AProjectionYX.java    |  307 --
 .../atlantis/projection/AProjectionYZ.java    |   72 -
 .../projection/AProjectionsManager.java       |  110 -
 .../src/atlantis/projection/package.html      |    9 -
 .../src/atlantis/utils/A3Vector.java          |   98 -
 .../src/atlantis/utils/A4Vector.java          |  127 -
 .../atlantis/utils/AAtlantisException.java    |   41 -
 .../src/atlantis/utils/AClipPolygon.java      |   98 -
 .../src/atlantis/utils/ACommandHistory.java   |  213 --
 .../src/atlantis/utils/AHashMap.java          |  201 --
 .../src/atlantis/utils/AIdDictionary.java     |  152 -
 .../src/atlantis/utils/AIdField.java          |  537 ----
 .../src/atlantis/utils/AIdHelper.java         |  599 ----
 .../src/atlantis/utils/AIdRange.java          |  392 ---
 .../src/atlantis/utils/AIntHashtable.java     |   79 -
 .../src/atlantis/utils/ALogger.java           |  213 --
 .../src/atlantis/utils/ALoggerFactory.java    |   25 -
 .../src/atlantis/utils/AMath.java             |  328 --
 .../src/atlantis/utils/ANewIdHelper.java      |  157 -
 .../src/atlantis/utils/APoint.java            |   72 -
 .../src/atlantis/utils/APolygon.java          |  238 --
 .../src/atlantis/utils/AUtilities.java        |  243 --
 .../src/atlantis/utils/AVector.java           |   84 -
 .../src/atlantis/utils/package.html           |    6 -
 .../src/atlantis/utils/xml/AArrayParser.java  |   36 -
 .../atlantis/utils/xml/AFloatArrayParser.java |  255 --
 .../atlantis/utils/xml/AIntArrayParser.java   |  126 -
 .../utils/xml/AStringArrayParser.java         |  103 -
 .../utils/xml/AXMLEntityResolver.java         |   40 -
 .../atlantis/utils/xml/AXMLErrorHandler.java  |  127 -
 .../src/atlantis/utils/xml/AXMLUtils.java     |   38 -
 graphics/AtlantisJava/src/overview.html       |   25 -
 .../AtlantisJava/test/events/emptyEvent.xml   |    6 -
 .../test/events/muonCollections.xml           |  240 --
 .../test/events/muonCollections2.xml          |  291 --
 .../AtlantisJava/test/events/rvxEvent.xml     |   44 -
 .../test/events/rvxInconsistentEvent.xml      |  258 --
 .../atlantis/AtlantisHeadlessTestCase.java    |   38 -
 .../test/src/atlantis/HeadlessTest.java       |   21 -
 .../src/atlantis/InconsistentEventTest.java   |   36 -
 .../src/atlantis/NoTracksElementTest.java     |   36 -
 .../src/atlantis/canvas/AScaleBorderTest.java |   19 -
 .../test/src/atlantis/canvas/AScaleTest.java  |  104 -
 .../test/src/atlantis/canvas/AWindowTest.java |   14 -
 .../test/src/atlantis/data/AHelixTest.java    |  100 -
 .../test/src/atlantis/data/AOldHelixTest.java |   92 -
 .../src/atlantis/event/AEventInfoTest.java    |   68 -
 .../src/atlantis/graphics/ACoordTest.java     |   73 -
 .../src/atlantis/list/AListManagerTest.java   |   51 -
 .../parameters/AAbstractParameterTest.java    |  120 -
 .../parameters/AParameterDataTest.java        |   84 -
 .../test/src/atlantis/utils/A3VectorTest.java |  101 -
 .../test/src/atlantis/utils/A4VectorTest.java |  128 -
 .../test/src/atlantis/utils/AIdRangeTest.java |   90 -
 .../test/src/atlantis/utils/AMathTest.java    |   69 -
 .../src/atlantis/utils/ANewIdHelperTest.java  |  130 -
 .../test/src/guitest/AAssert.java             |   28 -
 .../test/src/guitest/AtlantisGUIFixture.java  |  141 -
 .../test/src/guitest/AtlantisGuiTestCase.java |  100 -
 .../src/guitest/EnumeratorParameterTest.java  |   17 -
 .../src/guitest/EventSourceToolBarTest.java   |   14 -
 .../src/guitest/InteractionToolBarTest.java   |   48 -
 .../src/guitest/LoadEventFailureTest.java     |   22 -
 .../test/src/guitest/LoadEventTest.java       |   25 -
 ...LoadEventWithInvalidRecVertexDataTest.java |   29 -
 .../LoadEventWithValidRecVertexDataTest.java  |   29 -
 .../src/guitest/LoadEventsManyTimesTest.java  |   31 -
 .../MuonTrackCollectionsEmptyTest.java        |   39 -
 .../src/guitest/MuonTrackCollectionsTest.java |   40 -
 .../test/src/guitest/OverlayTest.java         |   27 -
 .../test/src/guitest/ProjectionsTest.java     |   24 -
 .../guitest/ReadNextAndPreviousEventTest.java |   27 -
 .../test/src/guitest/StartAndExitTest.java    |   19 -
 .../test/src/guitest/TabsTest.java            |   23 -
 .../test/src/testutils/AtlantisInit.java      |   20 -
 .../test/src/testutils/TeeOutputStream.java   |   34 -
 .../test/src/testutils/TestUtils.java         |   17 -
 555 files changed, 103264 deletions(-)
 delete mode 100644 graphics/AtlantisJava/CMakeLists.txt
 delete mode 100755 graphics/AtlantisJava/ant/build.xml
 delete mode 100755 graphics/AtlantisJava/configuration/PSProlog.txt
 delete mode 100755 graphics/AtlantisJava/configuration/colormap.xml
 delete mode 100644 graphics/AtlantisJava/configuration/config.dtd
 delete mode 100644 graphics/AtlantisJava/configuration/epusti.csv
 delete mode 100755 graphics/AtlantisJava/configuration/pdg.xml
 delete mode 100644 graphics/AtlantisJava/configuration/rpsplt_fcal.csv
 delete mode 100644 graphics/AtlantisJava/configuration/rpsplt_hec.csv
 delete mode 100644 graphics/AtlantisJava/configuration/rpsplt_tile.csv
 delete mode 100755 graphics/AtlantisJava/events/event.dtd
 delete mode 100755 graphics/AtlantisJava/geometry/AGeometry.xml
 delete mode 100755 graphics/AtlantisJava/geometry/AMuonGeometry.xml
 delete mode 100755 graphics/AtlantisJava/geometry/ATLAS_IDS.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDict.dtd
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictATLAS.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictCalorimeter.xml
 delete mode 100644 graphics/AtlantisJava/geometry/IdDictForwardDetectors.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictInnerDetector.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictLArCalorimeter.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictLArElectrode.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictLArHighVoltage.xml
 delete mode 100755 graphics/AtlantisJava/geometry/IdDictTileCalorimeter.xml
 delete mode 100755 graphics/AtlantisJava/img/atlantis_icon.gif
 delete mode 100755 graphics/AtlantisJava/img/atlantis_log.gif
 delete mode 100755 graphics/AtlantisJava/img/atlas.jpg
 delete mode 100644 graphics/AtlantisJava/img/atlas_logo_big.png
 delete mode 100755 graphics/AtlantisJava/img/cursor_DnD_invalid_32x32.gif
 delete mode 100755 graphics/AtlantisJava/img/cursor_DnD_invalid_64x64.gif
 delete mode 100755 graphics/AtlantisJava/img/cursor_DnD_valid_32x32.gif
 delete mode 100755 graphics/AtlantisJava/img/cursor_DnD_valid_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_fisheye_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_fisheye_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_fisheye_bw_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_fisheye_bw_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_move_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_move_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_pick_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_pick_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rectsel_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rectsel_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rotate_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rotate_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rotate_bw_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_rotate_bw_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_sync_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_sync_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_zoom_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_zoom_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_zoom_bw_32x32.gif
 delete mode 100644 graphics/AtlantisJava/img/cursor_zoom_bw_64x64.gif
 delete mode 100644 graphics/AtlantisJava/img/downarrow.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_clock.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_fisheye.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_pick.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_rotate.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_rubberband.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_rubberbandyx.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_scale.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_skew.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_synccursors.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_zmr.png
 delete mode 100644 graphics/AtlantisJava/img/interaction_zr.png
 delete mode 100755 graphics/AtlantisJava/img/left.gif
 delete mode 100644 graphics/AtlantisJava/img/minerva_log.gif
 delete mode 100644 graphics/AtlantisJava/img/mode_loop.png
 delete mode 100644 graphics/AtlantisJava/img/mode_loop_on.png
 delete mode 100644 graphics/AtlantisJava/img/mode_random.png
 delete mode 100644 graphics/AtlantisJava/img/mode_random_on.png
 delete mode 100644 graphics/AtlantisJava/img/mode_sequential.png
 delete mode 100644 graphics/AtlantisJava/img/mode_sequential_on.png
 delete mode 100755 graphics/AtlantisJava/img/right.gif
 delete mode 100755 graphics/AtlantisJava/img/toolbar_next.png
 delete mode 100755 graphics/AtlantisJava/img/toolbar_open.png
 delete mode 100755 graphics/AtlantisJava/img/toolbar_previous.png
 delete mode 100644 graphics/AtlantisJava/img/uparrow.png
 delete mode 100755 graphics/AtlantisJava/lib/Jama.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-anim.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-ext.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-extension.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-parser.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-script.jar
 delete mode 100644 graphics/AtlantisJava/lib/batik-xml.jar
 delete mode 100755 graphics/AtlantisJava/lib/commons-cli-1.0.jar
 delete mode 100644 graphics/AtlantisJava/lib/commons-codec-1.4.jar
 delete mode 100644 graphics/AtlantisJava/lib/commons-logging-1.1.jar
 delete mode 100755 graphics/AtlantisJava/lib/jas-aida-dev.jar
 delete mode 100755 graphics/AtlantisJava/lib/jas-aida.jar
 delete mode 100755 graphics/AtlantisJava/lib/jas-jel.jar
 delete mode 100644 graphics/AtlantisJava/lib/jlibeps.jar
 delete mode 100644 graphics/AtlantisJava/lib/oncrpc.jar
 delete mode 100644 graphics/AtlantisJava/lib/ostermillerutils_1_05_00.jar
 delete mode 100644 graphics/AtlantisJava/lib/test/fest-assert-1.2.jar
 delete mode 100644 graphics/AtlantisJava/lib/test/fest-reflect-1.2.jar
 delete mode 100644 graphics/AtlantisJava/lib/test/fest-util-1.1.2.jar
 delete mode 100644 graphics/AtlantisJava/lib/test/jcip-annotations-1.0.jar
 delete mode 100644 graphics/AtlantisJava/lib/ws-commons-util-1.0.2.jar
 delete mode 100644 graphics/AtlantisJava/lib/xml-apis-ext.jar
 delete mode 100644 graphics/AtlantisJava/lib/xmlrpc-client-3.1.jar
 delete mode 100644 graphics/AtlantisJava/lib/xmlrpc-server-3.1.jar
 delete mode 100755 graphics/AtlantisJava/share/InteractiveServer.py
 delete mode 100644 graphics/AtlantisJava/share/MINERVA.jnlp
 delete mode 100755 graphics/AtlantisJava/share/atlantis
 delete mode 100644 graphics/AtlantisJava/share/atlantis.jnlp
 delete mode 100755 graphics/AtlantisJava/share/atlantis_online
 delete mode 100644 graphics/AtlantisJava/share/ntupleXML.h
 delete mode 100644 graphics/AtlantisJava/share/specificconfig.jnlp
 delete mode 100644 graphics/AtlantisJava/src/atlantis/ACommandLine.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/AOpenGLTools.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/Atlantis.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/ACanvas.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/ADrawCalorimeterSummedEndcaps.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/AGLGraphics.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/ALayout.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/ALayoutChangeListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/ALegendWindow.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/AOverlay.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/AScale.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/AScaleBorder.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/ATitleMenuBar.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/canvas/AWindow.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/AWindowGLView.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/AWindowSwingView.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/canvas/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/config/AConfig.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/config/AConfigNode.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/config/AConfigUpdater.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/config/ADefaultValues.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/config/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/A3DPointData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AAODData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ABJetData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ACSCDData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ACSCData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ACalorimeterData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ACalorimeterRPSPLT.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AClusterData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ACompositeParticleData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ADHelix.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AETMisData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AElectronData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AEmTauROIData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AEventFromXML.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AFCALData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AG4StepData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AHECData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AHelix.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AHelixAODData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AHistogram.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AHistogramData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AHitData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AInDetSegmentData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AInDetTrackData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AJetData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AJetROIData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ALArData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ALVL1JetElementData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ALVL1ResultData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ALVL1TriggerTowerData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ALegoData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AMBTSData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AMDTData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AMuonData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AMuonHitData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AMuonROIData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AMuonSegmentData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AMuonTrackData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AOldHelix.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/APDGTable.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AParticle.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/APhotonData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/APixelClusterData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/APixelRDOData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/APulseShapePlot.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AROIData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ARPCData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ARVxData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/AS3DData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASMTrData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASNPData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASTrData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASVxData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ASegmentData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASiClusterData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ASiClusterRDOData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ATGCData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ATILEData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ATRTData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/ATauJetData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ATrackData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ATrackResidualData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ATrigS3DData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/ATriggerInfoData.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AVertex.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/data/AVertexFit.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/data/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AAssociation.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AAssociationManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/ABufferedEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AEpsImageProducer.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AEvent.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AEventInfo.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AEventInfoPrinter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AEventManager.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AEventSourceException.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AFileEventSource.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/AFilter.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AImageProducer.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/ANewEventListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/ANewEventSourceListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AObjectsAssociation.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/APngImageProducer.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AStreamedEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/ASvgImageProducer.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AURLEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/AZipEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/oncrpc/AONCRPCEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/oncrpc/Event.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/oncrpc/EventRequest.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/oncrpc/Server.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/oncrpc/Streams.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/xmlrpc/AClientXMLRPC.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/event/xmlrpc/ARemoteCallerException.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPC.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPCEventSource.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/event/xmlrpc/AXMLRPCEventSource.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AAtlasDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ABarrelCalorimeterDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ABarrelSiliconDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ABarrelTRTDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ABoxDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ABoxDetectors.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ACalorimeterDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ADetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ADetectorSystem.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ADetectors.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ADiscDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AEndcapCalorimeterDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AEndcapCryostatDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AEndcapSiliconDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AEndcapTRTDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AGapCalorimeterDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AGeneralDetectors.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/AGeometryFromXMLReader.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ARectangleDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ATBxDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetectors.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/geometry/package.html
 delete mode 100644 graphics/AtlantisJava/src/atlantis/globals/AGlobals.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/globals/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/AAbstractGraphics2D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/AClipper.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ACoord.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ACursorFactory.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ADrawParameters.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ADrawable.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ADrawnGraphics2D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ADummyGraphics2D.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/graphics/AGLPixelGraphics.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/AGraphics.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/graphics/AIcon.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ALegoDraw.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/APickingGraphics2D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/APixelGraphics.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/ATemplateGraphics2D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/AVectorGraphics.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/colormap/AColorMap.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/colormap/MappedColor.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/dnd/ACallBack.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDButton.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDLabel.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/dnd/ADragListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/dnd/AObjectTransferable.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/graphics/encoders/AImageEncoder.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/encoders/PngEncoder.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/layout/AFlowLayout.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/layout/AGridLayout.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/graphics/layout/ARunAnotherLayout.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/graphics/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AAboutDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ACheckBox.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ACheckNode.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AClosingConfirmationDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AColorComboBoxRenderer.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AColorHelpDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AColorMapDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AColorMapEditor.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AComboBox.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AConfigWriter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AControlButton.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/ACrashReporter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ADefaultCellAttribute.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ADemoDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ADemoFileChooser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ADemoLoop.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AEventLoopDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AEventPropertiesDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AEventQueue.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AEventSourceToolBar.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AFileControl.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AGUI.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AGUILayoutManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AGUIUtilities.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AHelpControl.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AHelpSystem.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AInteractionToolBar.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AItemTabbedPane.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ALayoutDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ALazyPanel.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AListsControl.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/ALogPane.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AMainLogPane.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AMenuButton.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AMouseHelpDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AMultiSpanCellTableUI.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AMutableCheckBox.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/AOpenGLControl.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AParamGUIDataModel.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AParametersPage.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AParametersTable.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/APasswordDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/APointerPositionWindow.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/APopupHelper.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/APreferencesControl.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AReadColorMapChooser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AReadFileChooser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AReadGeometryChooser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ASaveCanvasDialog.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AStartupWindow.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ATabbedPaneUI.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ATextField.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ATreeCellRenderer.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/ATreeExpansionListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AWindowControl.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AXMLFileChooser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/gui/AXMLGeometryChooser.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/gui/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/A3DBoxGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/A3DBoxInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AClockGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AClockInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AEnterExitListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/AFishEyeChangeListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AFishEyeGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AFishEyeInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AInteractionGroup.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/AInteractionsConfigReader.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AInteractionsManager.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ALineSegment.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/AModifier.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AMouseDragListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AMousePressListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/ANZMRGroup.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/ANZMRInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AParallelogramSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/APickGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/APickInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/APopupListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARectangleSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARectangleVPSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARectangleYXSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARotatedRectangleSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARubberbandGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ARubberbandYXGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASkewGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASkewInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASleepMouseDragListener.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASquareSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AVPSelectionGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AWindowInfoInteraction.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AXSkewSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AXSliceSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AYSkewSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AYSliceSelection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AZMRGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/interactions/AZMRInteraction.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/interactions/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/list/AColorIcon.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/list/AList.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/list/AListManager.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/list/AListProcessor.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/list/package.html
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimInterpolate.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimSegment.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimSetProjection.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimThread.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimVar.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANAnimationManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANCacheToken.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANColor.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANFrameManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANGlobalFlags.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANLinearProjection.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANLinearTransition.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANObjectGenerator.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickDrawer.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickHandler.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickHandlerSimple.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickHelper.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickResult.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANPickResultPrinter.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANProjection.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANProjection3D.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANProjectionPhysics.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANProjectionYX.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANRenderHints.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANRenderer.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANRendererBasic.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANSelectionList.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANTerribleHacks.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/ANTestWindow.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/ANObject.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/ANObjectList.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/ANObjectTestAxes.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/ANObjectVL.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataCell.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataJet.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectPointing.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectTracks.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectBeamLine.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomCalo.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomMuon.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/output/AExceptionHandler.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/output/ALogInterface.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/output/AOutput.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AAbstractParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AColorParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/ACommand.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/ACommandProcessor.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/ACutParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AEnumeratorParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/ALinkParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AListIntegerParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/ANumberParameter.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/APar.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AParameter.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterChangeListener.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterConfigReader.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterData.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterState.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterSuperGroup.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/AParameterUtilities.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AParametersGroup.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AStatusGroupParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AStatusParameter.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/parameters/AStatusRootParameter.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/parameters/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjection.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjection2D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjection3D.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjection3DBox.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionEventInfo.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionFR.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionFZ.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionInfo.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionLegoPlot.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionN3D.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionNGE.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionNPhysics.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionNYX.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionPhi.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionRZ.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/AProjectionTrackResidual.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionVP.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionXZ.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionYX.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionYZ.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/projection/AProjectionsManager.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/projection/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/A3Vector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/A4Vector.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AAtlantisException.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AClipPolygon.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/ACommandHistory.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AHashMap.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/AIdDictionary.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/AIdField.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AIdHelper.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/AIdRange.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AIntHashtable.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/ALogger.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/ALoggerFactory.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AMath.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/ANewIdHelper.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/APoint.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/APolygon.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AUtilities.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/AVector.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/package.html
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AArrayParser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AFloatArrayParser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AIntArrayParser.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AStringArrayParser.java
 delete mode 100644 graphics/AtlantisJava/src/atlantis/utils/xml/AXMLEntityResolver.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AXMLErrorHandler.java
 delete mode 100755 graphics/AtlantisJava/src/atlantis/utils/xml/AXMLUtils.java
 delete mode 100644 graphics/AtlantisJava/src/overview.html
 delete mode 100644 graphics/AtlantisJava/test/events/emptyEvent.xml
 delete mode 100644 graphics/AtlantisJava/test/events/muonCollections.xml
 delete mode 100644 graphics/AtlantisJava/test/events/muonCollections2.xml
 delete mode 100644 graphics/AtlantisJava/test/events/rvxEvent.xml
 delete mode 100644 graphics/AtlantisJava/test/events/rvxInconsistentEvent.xml
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/AtlantisHeadlessTestCase.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/HeadlessTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/InconsistentEventTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/NoTracksElementTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/canvas/AScaleBorderTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/canvas/AScaleTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/canvas/AWindowTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/data/AHelixTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/data/AOldHelixTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/event/AEventInfoTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/graphics/ACoordTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/list/AListManagerTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/parameters/AAbstractParameterTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/parameters/AParameterDataTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/utils/A3VectorTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/utils/A4VectorTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/utils/AIdRangeTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/utils/AMathTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/atlantis/utils/ANewIdHelperTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/AAssert.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/AtlantisGUIFixture.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/AtlantisGuiTestCase.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/EnumeratorParameterTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/EventSourceToolBarTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/InteractionToolBarTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/LoadEventFailureTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/LoadEventTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/LoadEventWithInvalidRecVertexDataTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/LoadEventWithValidRecVertexDataTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/LoadEventsManyTimesTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsEmptyTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/OverlayTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/ProjectionsTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/ReadNextAndPreviousEventTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/StartAndExitTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/guitest/TabsTest.java
 delete mode 100644 graphics/AtlantisJava/test/src/testutils/AtlantisInit.java
 delete mode 100644 graphics/AtlantisJava/test/src/testutils/TeeOutputStream.java
 delete mode 100644 graphics/AtlantisJava/test/src/testutils/TestUtils.java

diff --git a/graphics/AtlantisJava/CMakeLists.txt b/graphics/AtlantisJava/CMakeLists.txt
deleted file mode 100644
index 7d9ae4dd6008..000000000000
--- a/graphics/AtlantisJava/CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-################################################################################
-# Package: AtlantisJava
-################################################################################
-
-# Declare the package name:
-atlas_subdir( AtlantisJava )
-
-# External dependencies:
-find_package( Java )
-
-# Install files from the package:
-atlas_install_joboptions( share/InteractiveServer.py )
-atlas_install_scripts( share/atlantis share/atlantis_online )
-atlas_install_generic( lib/*.jar
-                       DESTINATION "share/AtlantisJava/lib"
-                       EXECUTABLE )
-atlas_install_generic( img/*.gif img/*.png img/*.jpg
-                       DESTINATION "share/AtlantisJava/img"
-                       EXECUTABLE )
-atlas_install_generic( configuration/*.xml configuration/*.csv configuration/PSProlog.txt
-                       DESTINATION "share/AtlantisJava/configuration"
-                       EXECUTABLE )
-atlas_install_generic( events/event.dtd events/*.zip
-                       DESTINATION "share/AtlantisJava/events"
-                       EXECUTABLE )
-atlas_install_generic( geometry/*.xml
-                       DESTINATION "share/AtlantisJava/geometry"
-                       EXECUTABLE )
-atlas_install_generic( help/help.jar help/online.xml help/*.png
-                       DESTINATION "share/AtlantisJava/help"
-                       EXECUTABLE )
diff --git a/graphics/AtlantisJava/ant/build.xml b/graphics/AtlantisJava/ant/build.xml
deleted file mode 100755
index 1172e921def8..000000000000
--- a/graphics/AtlantisJava/ant/build.xml
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Main Ant build file for Atlantis -->
-
-<!-- basedir attribute to be adjusted - target build directory - - - - -  -->
-<project name="Atlantis" default="usage" basedir="..">
-    <!-- begin properties - - - - - - - - - - - - - - - - - - - - - - - - -->
-    <!-- read in overriden properties from ant.properties file  - - - - - -->
-    <property file="ant.properties"/>
-    <property name="appName" value="Atlantis"/>
-
-    <!-- Use Java 1.6.
-	 Note that this controls the source code accepted and bytecode generated but
-	 does NOT ensure that the correct libraries are available so in principle you
-	 could still build code that requires different libraries to run.
-	 This was added when we needed to enforve Java 1.5 but 1.6 was already
-	 the most commonly installed version.  -->
-    <property name="ant.build.javac.source" value="1.6"/>
-
-    <!-- webstart codebase with appropriate default -->        
-    <property name="codebase" value="http://www.cern.ch/atlantis/webstart"/>
-
-    <!-- password for webstart certificate - certificate is created in
-         webstart target, used to sign *.jar files and erased afterwards -->
-    <property name="password" value="webstart_certificate_atlantis_password"/>
-
-    <!-- list of "specific system configurations" in configurations/config-*.xml -->
-    <!-- NOT including MINERVA since this needs a slightly different JNLP file to load events from a URL -->
-    <property name="configs"
-      value="acr-general,acr-public,l1calo-acr,lar-acr,lar-publications,mbts-acr,mdt-acr,pixel-acr,pixel-publications,sct-acr,sct-publications,tgc-acr,tile-acr,tile-publications,trt-acr,trt-publications"/>
-
-    <!-- timeout in milliseconds for JUnit tests, applies to each forked JVM instance -->
-    <property name="test.timeout" value="300000"/>
-
-    <!-- directories - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <property name="src.src"       value="src"/>
-    <property name="lib.src"       value="lib"/>
-    <property name="test.src"       value="test/src"/>
-    <property name="test.events"       value="test/events"/>
-    <!-- runtime directories and files -->
-    <property name="conf"          value="configuration"/>
-    <property name="events"        value="events"/>
-    <property name="geom"          value="geometry"/>
-    <property name="help"          value="help"/>
-    <property name="img"           value="img"/>
-    <property name="share"         value="share"/>
-    
-    <property name="conf.src"      value="${conf}"/>
-    <property name="events.src"    value="${events}"/>
-    <property name="geom.src"      value="${geom}"/>
-    <property name="help.src"      value="${help}"/>
-    <property name="img.src"       value="${img}"/>
-    <property name="share.src"     value="${share}"/>
-    
-    <property name="conf.run"      value="${targetDir}/${conf}"/>
-    <property name="events.run"    value="${targetDir}/${events}"/>
-    <property name="geom.run"      value="${targetDir}/${geom}"/>
-    <property name="help.run"      value="${targetDir}/${help}"/>
-    <property name="img.run"       value="${targetDir}/${img}"/>
-    <property name="share.run"     value="${targetDir}/${share}"/>
-    
-    <property name="class.run"     value="${targetDir}/classes"/>
-    <property name="lib.run"       value="${targetDir}/lib"/>
-    <property name="test.run"     value="${targetDir}/classes-test"/>
-
-    <!-- directories for test libraries and output -->
-    <property name="lib.test"       value="${targetDir}/lib/test"/>
-    <property name="report.test" value="${targetDir}/report"/>
-
-    <!-- Atlantis  - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <property name="atlantis.jar"         value="${targetDir}/atlantis.jar"/>
-    <property name="atlantis.main.class"  value="atlantis.Atlantis"/>
-
-    <!-- Classpath for manifest in Jar file -->
-    <path id="classpath.mf">
-      <fileset dir="${lib.run}">
-	<include name="**/*.jar"/>
-      </fileset>
-      <fileset dir="${help.run}">
-	<include name="**/*.jar"/>
-      </fileset>
-    </path>
-
-    <!-- "foreach" task needed to generate specific system configs, provided by ant-contrib -->
-    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
-      <classpath>
-        <pathelement location="${lib.src}/build/ant-contrib-1.0b3.jar"/>
-      </classpath>
-    </taskdef>
-    
-    
-    <!-- ===============================================================  -->
-    
-    <!-- targets begin  - - - - - - - - - - - - - - - - - - - - - - - - - -->
-
-    <!-- preinit target - - - - - - - - - - - - - - - - - - - - - - - - - -->
-    <target name="preinit" description="Test if targetDir argument is set">
-        <fail unless="targetDir">
-            targetDir variable must be set - try: ant usage
-            example: ant -DtargetDir="test" all
-        </fail>
-        <echo>Atlantis build will be made into ${targetDir} directory</echo>
-    </target>
-        
-    
-    <!-- init target - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <target name="init" depends="preinit"
-            description="Makes required directories, copies libs">
-        <mkdir dir="${lib.run}"/>
-        <!-- For runtime libraries use include element to take only Jar files from lib directory,
-             not build subdirectory -->
-        <copy todir="${lib.run}">
-            <fileset dir="${lib.src}">
-                <include name="*.jar"/>
-            </fileset>	
-        </copy>
-        
-        <mkdir dir="${conf.run}"/>
-        <copy todir="${conf.run}">
-            <fileset dir="${conf.src}"/>
-        </copy>
-        
-        <mkdir dir="${events.run}"/>
-        <copy todir="${events.run}">
-            <fileset dir="${events.src}"/>
-        </copy>
-        
-        <mkdir dir="${geom.run}"/>
-        <copy todir="${geom.run}">
-            <fileset dir="${geom.src}"/>
-        </copy>
-        
-        <mkdir dir="${help.run}"/>
-        <copy todir="${help.run}">
-            <fileset dir="${help.src}">
-                <include name="help.jar"/>
-            </fileset>
-        </copy>
-
-        <mkdir dir="${img.run}"/>
-        <copy todir="${img.run}">
-            <fileset dir="${img.src}"/>
-        </copy>
-
-        <mkdir dir="${share.run}"/>
-        <copy todir="${share.run}">
-            <fileset dir="${share.src}"/>
-        </copy>
-
-        <mkdir dir="${class.run}"/>
-
-    </target>
-
-    
-    
-    <!-- compile target -->
-    <target name="compile" depends="init" 
-        description="Compiles all source files">
-        
-        <javac includeAntRuntime="false" srcdir="${src.src}" destdir="${class.run}" deprecation="on" verbose="no">
-            <!-- <compilerarg value="-Xlint:unchecked"/> -->
-            <include name="**/*.java"/>
-            <classpath> 
-                <fileset dir="${lib.run}">
-                    <include name="**/*.jar"/>
-                </fileset>
-            </classpath>
-        </javac>
-    </target>
-
-
-    <!-- all target  - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <target name="all" depends="jar, clean" 
-                       description="Copy runtime files, build and clean up"/>
-
-    <!-- jar-atlantis target - - - - - - - - - - - - - - - - - - - - - -  -->
-    <!-- Keep for compatibility with existing CMT requirements file -->
-    <target name="jar-atlantis" depends="all"
-        description="Create jar file of Atlantis">
-    </target>
-
-    <!-- jar target - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-    <target name="jar" depends="compile"
-	    description="Create all jar files for deployment">
-      <manifestclasspath property="jar.classpath" jarfile="${atlantis.jar}">
-	<classpath refid="classpath.mf"/>
-      </manifestclasspath>        
-
-        <!-- jar - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-        <jar destfile="${atlantis.jar}">
-            <fileset dir="${class.run}" />
-            <fileset dir="${targetDir}">
-                <exclude name="classes/*"/>
-                <exclude name="lib/*"/>
-                <exclude name="help/*"/>
-                <include name="*/*"/>
-            </fileset>
-            <manifest>
-                <attribute name="Built-By"   value="${user.name}"/>
-                <attribute name="Main-Class" value="${atlantis.main.class}"/>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-                <attribute name="Implementation-Title" value="Atlantis"/>
-            </manifest>
-        </jar>
-    </target>
-
-    <!-- webstartcommon target  - - - - - - - - - - - - - - - - - - - - -->
-    <target name="webstartcommon" depends="compile">
-        <manifestclasspath property="jar.classpath" jarfile="${atlantis.jar}">
-            <classpath refid="classpath.mf"/>
-        </manifestclasspath>        
-
-        <jar destfile="${atlantis.jar}">
-            <fileset dir="${class.run}" />
-            
-            <fileset dir="${targetDir}">
-                <exclude name="classes/*"/>
-                <exclude name="lib/*"/>
-                <exclude name="help/*"/>
-                <include name="*/*"/>
-            </fileset>
-
-            <manifest>
-                <attribute name="Built-By"   value="${user.name}"/>
-                <attribute name="Main-Class" value="${atlantis.main.class}"/>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-                <attribute name="Implementation-Title" value="Atlantis"/>
-            </manifest>
-        </jar>
-
-        <!-- clean up, leave only lib/*.jar, help/*.jar, atlantis.jar -->
-        <delete dir="${conf.run}"/>
-        <delete dir="${events.run}"/>
-        <delete dir="${geom.run}"/>
-        <delete dir="${img.run}"/>
-        <delete dir="${share.run}"/>
-
-        <antcall target="clean"/>
-        <antcall target="webstartjarsigner"/>
-    </target>
-
-
-    <!-- webstart - distribution via webstart (lib/*.jar, help/*.jar and
-         atlantis.jar (includes all data files) -->
-    <target name="webstart" depends="webstartcommon"
-        description="atlantis distribution for Java WebStart">
-
-        <!-- copy webstart .jnlp files -->
-        <copy file="${share.src}/atlantis.jnlp" todir="${targetDir}">
-            <filterset>
-                <filter token="CODEBASE" value="${codebase}"/>
-            </filterset>
-        </copy>
- 
-    </target>
-
-
-    <!-- webstart - MINERVA version -->
-    <target name="webstart-minerva" depends="compile"
-        description="Atlantis MINERVA distribution for Java WebStart">
-
-        <!-- copy webstart .jnlp files -->
-        <copy file="${share.src}/MINERVA.jnlp" todir="${targetDir}">
-            <filterset>
-                <filter token="CODEBASE" value="${codebase}"/>
-            </filterset>
-        </copy>
- 
-    </target>
-
-
-    <target name="webstart-config">
-        <!-- copy webstart .jnlp files -->
-        <copy file="${share.src}/specificconfig.jnlp" tofile="${targetDir}/${config}.jnlp">
-            <filterset>
-                <filter token="CODEBASE" value="${codebase}"/>
-                <filter token="HREF" value="${config}.jnlp"/>
-                <filter token="CONFIG" value="config-${config}.xml"/>
-            </filterset>
-        </copy>
-    </target>
-
-
-    <!-- webstart including basic atlantis.jnlp and "specific system configurations" -->
-    <target name="webstart-all" depends="webstart,webstart-specificconfigs,webstart-minerva"
-       description="Atlantis for Java Webstart including basic atlantis.jnlp and specific system configurations"/>
-
-
-    <target name="webstart-specificconfigs">
-        <foreach param="config" list="${configs}" target="webstart-config"/>
-    </target>
-
-
-    <!-- webstartjarsigner target  - - - - - - - - - - - - - - - - - - - -->
-    <target name="webstartjarsigner" description="Sign all jar files">
-        <delete file="${targetDir}/keystore"/>
-        <exec executable="${java.home}/bin/keytool">
-            <arg line="-genkey -dname 'cn=Atlantis team' -alias Atlantis
-                -keypass ${password} -keystore ${targetDir}/keystore
-                -storepass ${password} -validity 180"/>
-        </exec>
-        <signjar alias="Atlantis"
-            keystore="${targetDir}/keystore"
-            keypass="${password}"
-            storepass="${password}">
-        
-            <fileset file="${lib.run}/*.jar" />
-            <fileset file="${help.run}/*.jar"/>
-            <fileset file="${atlantis.jar}"/>
-        </signjar>
-        <delete file="${targetDir}/keystore"/>
-    </target>
-
-
-
-    <!-- updateconfigurations target - - - - - - - - - - - - - - - - - -  -->
-    <!-- update special configurations - jython script performs update of
-    all special / customised configurations shipped with atlantis and then
-    runs Atlantis with each configuration file -->
-    <target name="updateconfigs" depends="jar"
-        description="Update / synchronise customised configuration files">
-        <echo>Requires jython available in PATH, otherwise fails.</echo>
-
-        <!-- arg to exec - arguments to specify atlantis distribution direct.
-        and where the configuration files for updating are located -->
-        <!-- exec for unix, mac -->
-        <exec executable="jython" osfamily="unix" failonerror="true">
-            <arg line="share/configupdater.py --atlantis ${targetDir}
-                --update ${conf.src}"/>
-        </exec>
-        <!-- exec for windows -->
-        <exec executable="cmd" osfamily="windows" failonerror="true">
-            <arg value="/c"/>
-            <arg value="jython.bat"/>
-            <arg value="share\configupdater.py"/>
-            <arg value="--atlantis"/>
-            <arg line="${targetDir}"/>
-            <arg line="--update"/>
-            <arg line="${conf.src}"/>
-        </exec>
-
-        <echo>Deleting build directory ${targetDir}, calling delete ...</echo>
-        <delete dir="${targetDir}"/>
-    </target>
-
-    <!-- javadoc target  - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <target name="javadoc" description="Make Javadoc documentation">
-        <mkdir dir="${targetDir}" />
-
-        <javadoc packagenames="atlantis.*"
-                 sourcepath="${src.src}"
-                 destdir="${targetDir}"
-		 overview="${src.src}/overview.html"
-		 doctitle="Atlantis event display for ATLAS"
-        >
-          <classpath> 
-            <fileset dir="${lib.src}">
-              <include name="**/*.jar"/>
-            </fileset>
-          </classpath>
-	</javadoc>
-    </target>
-
-    <!-- clean target  - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-    <target name="clean" description="Erase *.class generated files">
-        <delete dir="${class.run}"/>
-    </target>
-
-    <target name="test" depends="unit-tests,gui-tests" description="Run all tests">
-      <!-- If testcase is set, specified test is run here. -->
-      <junit printsummary="yes" haltonerror="no" haltonfailure="no" failureProperty="test.failed" errorProperty="test.failed"
-		fork="yes" timeout="${test.timeout}">
-	<sysproperty key="atlantis.test.events" file="${test.events}"/>
-	<formatter type="xml"/>
-	<test name="${testcase}" toDir="${report.test}" if="testcase"/> 
-	<classpath refid="classpath.test"/>
-      </junit>
-
-      <mkdir dir="${report.test}/html"/>
-      <junitreport todir="${report.test}">
-	<fileset dir="${report.test}">
-	  <include name="TEST-*.xml"/>
-	</fileset>
-	<report todir="${report.test}/html"/>
-      </junitreport>
-
-      <fail message="Failed JUnit test(s)" if="test.failed"/>
-    </target>
-
-    <!-- Has to continue on failure or error so report target can run. -->
-    <!-- Not sure why need haltonerror="no" even if failures occur but no errors -->
-    <target name="unit-tests" depends="compile-tests,jar" description="Run unit tests">
-      <mkdir dir="${report.test}"/>
-      <junit printsummary="yes" haltonerror="no" haltonfailure="no" failureProperty="test.failed" errorProperty="test.failed"
-	     fork="yes" timeout="${test.timeout}">
-	<sysproperty key="atlantis.test.events" file="${test.events}"/>
-	<formatter type="xml"/>
-	<!-- If testcase is set, specified test will be run in "test" target. Otherwise run all of them. -->
-	<batchtest toDir="${report.test}" unless="testcase">
-	  <fileset dir="${test.run}" includes="atlantis/**/*Test.class"/>
-	</batchtest>
-	<classpath refid="classpath.test"/>
-      </junit>
-    </target>
-
-    <!-- Has to continue on failure or error so report target can run. -->
-    <!-- Not sure why need haltonerror="no" even if failures occur but no errors -->
-    <target name="gui-tests" depends="compile-tests,jar" description="Run GUI tests">
-      <mkdir dir="${report.test}"/>
-      <junit printsummary="yes" haltonerror="no" haltonfailure="no" failureProperty="test.failed" errorProperty="test.failed"
-	     fork="yes" timeout="${test.timeout}">
-	<sysproperty key="atlantis.test.events" file="${test.events}"/>
-	<formatter type="xml"/>
-	<!-- If testcase is set, specified test will be run in "test" target. Otherwise run all of them. -->
-	<batchtest toDir="${report.test}" unless="testcase">
-	  <fileset dir="${test.run}" includes="guitest/**/*Test.class">
-	  </fileset>
-	</batchtest>
-	<classpath refid="classpath.test"/>
-      </junit>
-    </target>
-
-    <!-- compile-tests target: compile JUnit tests -->
-    <target name="compile-tests" depends="compile"
-	    description="Compiles source files for all tests">
-      <mkdir dir="${lib.run}/test"/>
-      <copy todir="${lib.run}/test">
-	<fileset dir="${lib.src}/test">
-	  <include name="*.jar"/>
-	</fileset>	
-      </copy>
-      <mkdir dir="${test.run}"/>
-      <javac includeAntRuntime="false" srcdir="${test.src}" destdir="${test.run}" deprecation="on" verbose="no">
-	<include name="**/*.java"/>
-	<classpath> 
-	  <fileset dir="${lib.run}">
-	    <include name="**/*.jar"/>
-	  </fileset>
-	  <fileset dir="${lib.test}">
-	    <include name="**/*.jar"/>
-	  </fileset>
-	  <pathelement path="${class.run}"/>
-	</classpath>
-      </javac>
-      <path id="classpath.test">
-	<fileset dir="${lib.run}">
-	  <include name="**/*.jar"/>
-	</fileset>
-	<fileset dir="${lib.test}">
-	  <include name="**/*.jar"/>
-	</fileset>
-	<pathelement path="${targetDir}/atlantis.jar"/>
-	<pathelement path="${test.run}"/>
-      </path>
-    </target>
-
-    <!-- usage target - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-    <target name="usage" description="Prints usage hint">
-        <echo level="info" message="Usage:"/>
-        <echo>targetDir - directory to build atlantis distribution in</echo>
-        <echo>ant -DtargetDir=[target directory] [all|jar|javadoc|test|report|updateconfigs]</echo>
-	<echo>and -DtargetDir=[target directory] -Dtestcase=[test-case class] test</echo>
-        <echo>ant -DtargetDir=[target directory] [-Dcodebase="Webstart codebase URL"] [webstart|webstart-specificconfigs|webstart-all]</echo>
-    </target>
-
-    <!-- help  target - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-    <target name="help" depends="usage" description="Prints usage hint"/>
-
-</project>
diff --git a/graphics/AtlantisJava/configuration/PSProlog.txt b/graphics/AtlantisJava/configuration/PSProlog.txt
deleted file mode 100755
index ca7483a2aebb..000000000000
--- a/graphics/AtlantisJava/configuration/PSProlog.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-100 dict dup begin
-
-% Author: Charles Loomis
-
-% Redefinitions which save some space in the output file.  These are also
-% the same as the PDF operators.
-/q {gsave} def
-/Q {grestore} def
-
-/n {newpath} def
-/m {moveto} def
-/l {lineto} def
-/c {curveto} def
-/h {closepath} def
-
-/re {4 -2 roll moveto
-     dup 0 exch rlineto exch 0 rlineto
-     neg 0 exch rlineto closepath} def
-
-/f {fill} def
-/f* {eofill} def
-/F {gsave vg&FC fill grestore} def
-/F* {gsave vg&FC eofill grestore} def
-
-/s {closepath stroke} def
-/S {stroke} def
-
-/b {closepath gsave vg&FC fill grestore
-    gsave stroke grestore newpath} def
-/B {gsave vg&FC fill grestore gsave stroke grestore newpath} def
-/b* {closepath gsave vg&FC eofill grestore
-    gsave stroke grestore newpath} def
-/B* {gsave vg&FC eofill grestore gsave stroke grestore newpath} def
-
-/g {1 array astore /vg&fcolor exch def} def
-/G {setgray} def
-/k {4 array astore /vg&fcolor exch def} def
-/K {setcmykcolor} def
-/rg {3 array astore /vg&fcolor exch def} def
-/RG {setrgbcolor} def
-
-% Initialize the fill color.
-0 0 0 rg
-
-/vg&FC {mark vg&fcolor aload pop
-        counttomark 1 eq {G} if
-        counttomark 3 eq {RG} if
-        counttomark 4 eq {K} if
-        cleartomark } def
-
-/vg&DFC {/vg&fcolor exch def} def
-
-/vg&C {mark exch aload pop
-       counttomark 1 eq {G} if
-       counttomark 3 eq {RG} if
-       counttomark 4 eq {K} if
-       cleartomark } def
-
-/w {setlinewidth} def
-/j {setlinejoin} def
-/J {setlinecap} def
-/M {setmiterlimit} def
-/d {setdash} def
-/i {setflat} def
-
-/W {clip} def
-/W* {eoclip} def
-
-% Setup the default graphics state.
-% (black; 1 pt. linewidth; miter join; butt-ends; solid)
-/defaultGraphicsState {0 g 1 w 0 j 0 J [] 0 d} def
-
-% Emulation of the rectangle operators for PostScript implementations
-% which do not implement all Level 2 features.  This is an INCOMPLETE
-% emulation; only the "x y width height rect..." form is emulated.
-/*rf {gsave newpath re fill grestore} def
-/*rs {gsave newpath re stroke grestore} def
-/*rc {newpath re clip} def
-/rf  /rectfill where {pop /rectfill}{/*rf} ifelse load def
-/rs  /rectstroke where {pop /rectstroke}{/*rs} ifelse load def
-/rc  /rectclip where {pop /rectclip}{/*rc} ifelse load def
-
-% Emulation of the selectfont operator.  This includes a 20% increase in
-% the fontsize which is necessary to get sizes similar to the Java fonts.
-/*sf {exch findfont exch
-      dup type /arraytype eq {makefont}{scalefont} ifelse setfont} bind def
-/sf /selectfont where {pop {1.2 mul selectfont}}{{1.2 mul *sf}} ifelse def
-
-% Initialize variables for safety.
-/delta 0 def
-/xv 0 def  /yv 0 def  /width 0 def  /height 0 def
-
-% Initialize to portrait A4 page.
-/pw 595 def  /ph 842  def  /po true def /ftp false def
-
-% Initialize margins to 20 points.
-/ml 20 def  /mr 20 def  /mt 20 def  /mb 20 def
-
-% set page size (usage: <page width><page height> setpagesize)
-/setpagesize {/ph exch def /pw exch def} def
-
-% set page orientation (usage: portrait or landscape)
-/portrait {/po true def} def
-/landscape {/po false def} def
-
-% force natural size for image (usage: naturalsize)
-/naturalsize {/ftp false def} def
-
-% resize image to fill page (usage: fittopage)
-/fittopage {/ftp true def} def
-
-% set margins of the page (usage: <left><bottom><top><right> setmargins)
-/setmargins {/mr exch def /mt exch def /mb exch def /ml exch def} def
-
-% set the graphic's size (usage: <width><height> setsize)
-/setsize {/gh exch def /gw exch def} def
-
-% set the graphic's origin (usage: <x0><y0> setorigin)
-/setorigin {/gy exch def /gx exch def} def
-
-% calculate image center
-/imagecenter {pw ml sub mr sub 2 div ml add
-              ph mt sub mb sub 2 div mb add} def
-
-% calculate the necessary scaling
-/imagescale {po {gw}{gh} ifelse pw ml sub mr sub div
-             po {gh}{gw} ifelse ph mt sub mb sub div
-             2 copy lt {exch} if pop
-             ftp not {1 2 copy lt {exch} if pop} if
-             1 exch div /sfactor exch def
-             /gw gw sfactor mul def /gh gh sfactor mul def} def
-
-% calculate image origin
-/imageorigin {pw ml sub mr sub 2 div ml add
-              po {gw}{gh} ifelse 2 div sub
-              ph mt sub mb sub 2 div mb add
-              po {gh}{gw} ifelse 2 div po {add}{sub} ifelse} def
-
-% calculate the clipping origin
-/cliporigin  {pw ml sub mr sub 2 div ml add
-              po {gw}{gh} ifelse 2 div sub floor
-              ph mt sub mb sub 2 div mb add
-              po {gh}{gw} ifelse 2 div sub floor} def
-
-% Set the clipping region to the bounding box.
-/cliptobounds {cliporigin po {gw}{gh} ifelse 1 add
-                          po {gh}{gw} ifelse 1 add rc} def
-
-% set the base transformation matrix (usage: setbasematrix)
-/setbasematrix {imageorigin translate
-                po {0}{90} ifelse rotate
-                sfactor sfactor neg scale
-                /defaultmatrix matrix currentmatrix def} def
-
-
-
diff --git a/graphics/AtlantisJava/configuration/colormap.xml b/graphics/AtlantisJava/configuration/colormap.xml
deleted file mode 100755
index 1160b07c23b9..000000000000
--- a/graphics/AtlantisJava/configuration/colormap.xml
+++ /dev/null
@@ -1,369 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE colormap  [
- <!ELEMENT colormap (Mapping*)>
- <!ATTLIST colormap
-   numMaps   CDATA #REQUIRED
-   numColors CDATA #REQUIRED>
- <!ELEMENT Mapping EMPTY>
- <!ATTLIST Mapping
-   map   CDATA #REQUIRED
-   index CDATA #REQUIRED
-   r     CDATA #REQUIRED
-   g     CDATA #REQUIRED
-   b     CDATA #REQUIRED>
-]>
-
-<colormap numMaps="9" numColors="29" >
-<!-- map 0 - Default(1) -->
-  <!-- white -->
-  <Mapping  map="0" index="0"  r="176" g="176" b="176"/>
- <!-- geometry -->
-  <Mapping  map="0" index="1"  r="58" g="58" b="58"/>
-  <Mapping  map="0" index="2"  r="32" g="32" b="32"/>
-  <Mapping  map="0" index="3"  r="205" g="92" b="92"/>
-  <Mapping  map="0" index="4"  r="55" g="101" b="140"/>
-  <Mapping  map="0" index="5"  r="130" g="200" b="130"/>
-  <Mapping  map="0" index="6"  r="70" g="130" b="180"/>
-  <Mapping  map="0" index="7"  r="200" g="200" b="200"/>
-  <!-- background -->
-  <Mapping  map="0" index="8"  r="255" g="255" b="255"/>
-  <!-- frames -->
-  <Mapping  map="0" index="9"  r="189" g="34" b="50"/>
-  <Mapping  map="0" index="10"  r="180" g="180" b="81"/>
-  <Mapping  map="0" index="11"  r="33" g="182" b="92"/>
-  <Mapping  map="0" index="12"  r="89" g="206" b="223"/>
-  <Mapping  map="0" index="13"  r="140" g="40" b="140"/>
-  <!-- grey -->
-  <Mapping  map="0" index="14"  r="153" g="153" b="153"/>
-  <!-- cells -->
-  <Mapping  map="0" index="15"  r="125" g="0" b="0"/>
-  <Mapping  map="0" index="16"  r="255" g="255" b="128"/>
-  <Mapping  map="0" index="17"  r="0" g="125" b="0"/>
-  <Mapping  map="0" index="18"  r="181" g="229" b="251"/>
-  <Mapping  map="0" index="19"  r="255" g="128" b="255"/>
-   <!-- red -->
-  <Mapping  map="0" index="20"  r="255" g="0" b="0"/>
-  <!-- green -->
-  <Mapping  map="0" index="21"  r="0" g="255" b="0"/>
-  <!-- blue -->
-  <Mapping  map="0" index="22"  r="0" g="0" b="255"/>
-  <!-- yellow -->
-  <Mapping  map="0" index="23"  r="255" g="255" b="0"/> 
-  <!-- magenta -->
-  <Mapping  map="0" index="24"  r="255" g="0" b="255"/>
-  <!-- cyan -->
-  <Mapping  map="0" index="25"  r="0" g="255" b="255"/>
-  <!-- black -->
-  <Mapping  map="0" index="26"  r="0" g="0" b="0"/>
-  <!-- orange -->
-  <Mapping  map="0" index="27"  r="255" g="115" b="0"/>
-  <!-- cornflower blue -->
-  <Mapping  map="0" index="28"  r="135" g="206" b="250"/>
-<!-- map 1 - Default(2) -->
-  <!-- white -->
-  <Mapping  map="1" index="0"  r="176" g="176" b="176"/>
-  <!-- geometry -->
-  <Mapping  map="1" index="1"  r="58" g="58" b="58"/>
-  <Mapping  map="1" index="2"  r="32" g="32" b="32"/>
-  <Mapping  map="1" index="3"  r="254" g="102" b="0"/>
-  <Mapping  map="1" index="4"  r="0" g="24" b="71"/>
-  <Mapping  map="1" index="5"  r="130" g="200" b="130"/>
-  <Mapping  map="1" index="6"  r="0" g="51" b="153"/>
-  <Mapping  map="1" index="7"  r="200" g="200" b="200"/>
-  <!-- background -->
-  <Mapping  map="1" index="8"  r="255" g="255" b="255"/>
-  <!-- frames -->
-  <Mapping  map="1" index="9"  r="189" g="34" b="50"/>
-  <Mapping  map="1" index="10"  r="180" g="180" b="81"/>
-  <Mapping  map="1" index="11"  r="33" g="182" b="92"/>
-  <Mapping  map="1" index="12"  r="89" g="206" b="223"/>
-  <Mapping  map="1" index="13"  r="140" g="40" b="140"/>
-  <!-- grey -->
-  <Mapping  map="1" index="14"  r="153" g="153" b="153"/>
-  <!-- cells -->
-  <Mapping  map="1" index="15"  r="185" g="0" b="0"/>
-  <Mapping  map="1" index="16"  r="255" g="255" b="128"/>
-  <Mapping  map="1" index="17"  r="0" g="125" b="0"/>
-  <Mapping  map="1" index="18"  r="181" g="229" b="251"/>
-  <Mapping  map="1" index="19"  r="255" g="128" b="255"/>
-  <!-- red -->
-  <Mapping  map="1" index="20"  r="255" g="0" b="0"/>
-  <!-- green -->
-  <Mapping  map="1" index="21"  r="0" g="255" b="0"/>
-  <!-- blue -->
-  <Mapping  map="1" index="22"  r="0" g="0" b="255"/>
-  <!-- yellow -->
-  <Mapping  map="1" index="23"  r="255" g="255" b="0"/> 
-  <!-- magenta -->
-  <Mapping  map="1" index="24"  r="255" g="0" b="255"/>
-  <!-- cyan -->
-  <Mapping  map="1" index="25"  r="0" g="255" b="255"/>
-  <!-- black -->
-  <Mapping  map="1" index="26"  r="0" g="0" b="0"/>
-  <!-- orange -->
-  <Mapping  map="1" index="27"  r="255" g="170" b="0"/>
-  <!-- cornflower blue -->
-  <Mapping  map="1" index="28"  r="0" g="102" b="255"/>
-<!-- map 2 - Default(M4+M5) -->
- <!-- white -->
- <Mapping  map="2" index="0"  r="255" g="255" b="255"/>
- <!-- geometry -->
- <Mapping  map="2" index="1"  r="40" g="0" b="0"/>
- <Mapping  map="2" index="2"  r="0" g="35" b="0"/>
- <Mapping  map="2" index="3"  r="132" g="39" b="32"/>
- <Mapping  map="2" index="4"  r="138" g="138" b="68"/>
- <Mapping  map="2" index="5"  r="98" g="134" b="122"/>
- <Mapping  map="2" index="6"  r="78" g="139" b="170"/>
- <Mapping  map="2" index="7"  r="97" g="65" b="97"/>
- <!-- background -->
- <Mapping  map="2" index="8"  r="44" g="47" b="50"/>
- <!-- frames -->
- <Mapping  map="2" index="9"  r="189" g="34" b="50"/>
- <Mapping  map="2" index="10"  r="180" g="180" b="81"/>
- <Mapping  map="2" index="11"  r="33" g="182" b="92"/>
- <Mapping  map="2" index="12"  r="89" g="206" b="223"/>
- <Mapping  map="2" index="13"  r="140" g="40" b="140"/>
- <!-- grey -->
- <Mapping  map="2" index="14"  r="153" g="153" b="153"/>
- <!-- cells -->
- <Mapping  map="2" index="15"  r="245" g="135" b="138"/>
- <Mapping  map="2" index="16"  r="255" g="255" b="128"/>
- <Mapping  map="2" index="17"  r="123" g="212" b="194"/>
- <Mapping  map="2" index="18"  r="181" g="229" b="251"/> 
- <Mapping  map="2" index="19"  r="255" g="128" b="255"/>
- <!-- red -->
- <Mapping  map="2" index="20"  r="255" g="0" b="0"/>
- <!-- green -->
- <Mapping  map="2" index="21"  r="0" g="255" b="0"/>
- <!-- blue -->
- <Mapping  map="2" index="22"  r="0" g="0" b="255"/>
- <!-- yellow -->
- <Mapping  map="2" index="23"  r="255" g="255" b="0"/> 
- <!-- magenta -->
- <Mapping  map="2" index="24"  r="255" g="0" b="255"/>
- <!-- cyan -->
- <Mapping  map="2" index="25"  r="0" g="255" b="255"/>
- <!-- black -->
- <Mapping  map="2" index="26"  r="0" g="0" b="0"/>
- <!-- orange -->
- <Mapping  map="2" index="27"  r="255" g="115" b="0"/>
- <!-- cornflower blue -->
- <Mapping  map="2" index="28"  r="102" g="128" b="255"/>
-<!-- map 3 - Gray detector -->  
- <!-- white -->
- <Mapping  map="3" index="0"  r="255" g="255" b="255"/>
- <!-- geometry -->
- <Mapping  map="3" index="1"  r="0" g="0" b="0"/>
- <Mapping  map="3" index="2"  r="0" g="0" b="0"/>
- <Mapping  map="3" index="3"  r="32" g="32" b="32"/>
- <Mapping  map="3" index="4"  r="80" g="80" b="80"/>
- <Mapping  map="3" index="5"  r="16" g="16" b="16"/>
- <Mapping  map="3" index="6"  r="48" g="48" b="48"/>
- <Mapping  map="3" index="7"  r="64" g="64" b="64"/>
- <!-- background -->
- <Mapping  map="3" index="8"  r="112" g="112" b="112"/>
- <!-- frames -->
- <Mapping  map="3" index="9"  r="189" g="34" b="50"/>
- <Mapping  map="3" index="10"  r="180" g="180" b="81"/>
- <Mapping  map="3" index="11"  r="33" g="182" b="92"/>
- <Mapping  map="3" index="12"  r="89" g="206" b="223"/>
- <Mapping  map="3" index="13"  r="140" g="40" b="140"/>
- <!-- grey -->
- <Mapping  map="3" index="14"  r="153" g="153" b="153"/>
- <!-- cells -->
- <Mapping  map="3" index="15"  r="245" g="135" b="138"/>
- <Mapping  map="3" index="16"  r="255" g="255" b="128"/>
- <Mapping  map="3" index="17"  r="123" g="212" b="194"/>
- <Mapping  map="3" index="18"  r="181" g="229" b="251"/> 
- <Mapping  map="3" index="19"  r="255" g="128" b="255"/>
- <!-- red -->
- <Mapping  map="3" index="20"  r="255" g="0" b="0"/>
- <!-- green -->
- <Mapping  map="3" index="21"  r="0" g="255" b="0"/>
- <!-- blue -->
- <Mapping  map="3" index="22"  r="0" g="0" b="255"/>
- <!-- yellow -->
- <Mapping  map="3" index="23"  r="255" g="255" b="0"/> 
- <!-- magenta -->
- <Mapping  map="3" index="24"  r="255" g="0" b="255"/>
- <!-- cyan -->
- <Mapping  map="3" index="25"  r="0" g="255" b="255"/>
- <!-- black -->
- <Mapping  map="3" index="26"  r="0" g="0" b="0"/>
- <!-- orange -->
- <Mapping  map="3" index="27"  r="255" g="115" b="0"/>
- <!-- cornflower blue -->
- <Mapping  map="3" index="28"  r="102" g="128" b="255"/>
-<!-- map 4 - Original -->
- <!-- white -->
- <Mapping  map="4" index="0"  r="255" g="255" b="255"/>
- <!-- geometry -->
- <Mapping  map="4" index="1"  r="0" g="0" b="0"/>
- <Mapping  map="4" index="2"  r="0" g="0" b="0"/>
- <Mapping  map="4" index="3"  r="255" g="0" b="0"/>
- <Mapping  map="4" index="4"  r="0" g="0" b="255"/>
- <Mapping  map="4" index="5"  r="0" g="255" b="0"/>
- <Mapping  map="4" index="6"  r="0" g="0" b="0"/>
- <Mapping  map="4" index="7"  r="255" g="0" b="255"/>
- <!-- background -->
- <Mapping  map="4" index="8"  r="0" g="204" b="255"/>
- <!-- frames -->
- <Mapping  map="4" index="9"  r="189" g="34" b="50"/>
- <Mapping  map="4" index="10"  r="180" g="180" b="81"/>
- <Mapping  map="4" index="11"  r="33" g="182" b="92"/>
- <Mapping  map="4" index="12"  r="89" g="206" b="223"/>
- <Mapping  map="4" index="13"  r="140" g="40" b="140"/>
- <!-- grey -->
- <Mapping  map="4" index="14"  r="153" g="153" b="153"/>
- <!-- cells -->
- <Mapping  map="4" index="15"  r="245" g="135" b="138"/>
- <Mapping  map="4" index="16"  r="255" g="255" b="128"/>
- <Mapping  map="4" index="17"  r="123" g="212" b="194"/>
- <Mapping  map="4" index="18"  r="181" g="229" b="251"/> 
- <Mapping  map="4" index="19"  r="255" g="128" b="255"/>
- <!-- red -->
- <Mapping  map="4" index="20"  r="255" g="0" b="0"/>
- <!-- green -->
- <Mapping  map="4" index="21"  r="0" g="255" b="0"/>
- <!-- blue -->
- <Mapping  map="4" index="22"  r="0" g="0" b="255"/>
- <!-- yellow -->
- <Mapping  map="4" index="23"  r="255" g="255" b="0"/> 
- <!-- magenta -->
- <Mapping  map="4" index="24"  r="255" g="0" b="255"/>
- <!-- cyan -->
- <Mapping  map="4" index="25"  r="0" g="255" b="255"/>
- <!-- black -->
- <Mapping  map="4" index="26"  r="0" g="0" b="0"/>
- <!-- orange -->
- <Mapping  map="4" index="27"  r="255" g="115" b="0"/>
- <!-- cornflower blue -->
- <Mapping  map="4" index="28"  r="102" g="128" b="255"/>
-<!-- map 5 - Grey -->
- <!-- white -->
- <Mapping  map="5" index="0"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="1"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="2"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="3"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="4"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="5"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="6"  r="255" g="255" b="255"/>
- <Mapping  map="5" index="7"  r="255" g="255" b="255"/>
- <!-- grey -->
- <Mapping  map="5" index="8"  r="204" g="204" b="204"/>
- <!-- black -->
- <Mapping  map="5" index="9"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="10"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="11"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="12"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="13"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="14"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="15"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="16"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="17"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="18"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="19"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="20"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="21"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="22"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="23"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="24"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="25"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="26"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="27"  r="0" g="0" b="0"/>
- <Mapping  map="5" index="28"  r="0" g="0" b="0"/>
-<!-- map 6 - BW -->
- <!-- white -->
- <Mapping  map="6" index="0"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="1"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="2"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="3"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="4"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="5"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="6"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="7"  r="255" g="255" b="255"/>
- <Mapping  map="6" index="8"  r="255" g="255" b="255"/>
- <!-- black -->
- <Mapping  map="6" index="9"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="10"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="11"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="12"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="13"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="14"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="15"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="16"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="17"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="18"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="19"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="20"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="21"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="22"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="23"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="24"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="25"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="26"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="27"  r="0" g="0" b="0"/>
- <Mapping  map="6" index="28"  r="0" g="0" b="0"/>
-<!-- map 7 - HITCOL --> 
- <Mapping  map="7" index="0"  r="0" g="0" b="85"/>
- <Mapping  map="7" index="1"  r="0" g="0" b="255"/>
- <Mapping  map="7" index="2"  r="85" g="85" b="170"/>
- <Mapping  map="7" index="3"  r="0" g="170" b="255"/>
- <Mapping  map="7" index="4"  r="0" g="255" b="255"/>
- <Mapping  map="7" index="5"  r="0" g="85" b="85"/>
- <Mapping  map="7" index="6"  r="0" g="85" b="0"/>
- <Mapping  map="7" index="7"  r="0" g="170" b="0"/>
- <Mapping  map="7" index="8"  r="0" g="255" b="0"/>
- <Mapping  map="7" index="9"  r="170" g="255" b="0"/>
- <Mapping  map="7" index="10"  r="255" g="255" b="0"/>
- <Mapping  map="7" index="11"  r="255" g="170" b="0"/>
- <Mapping  map="7" index="12"  r="170" g="85" b="0"/>
- <Mapping  map="7" index="13"  r="255" g="85" b="85"/>
- <Mapping  map="7" index="14"  r="255" g="0" b="0"/>
- <Mapping  map="7" index="15"  r="170" g="0" b="0"/>
- <Mapping  map="7" index="16"  r="85" g="0" b="0"/>
- <!-- not used -->
- <Mapping  map="7" index="17"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="18"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="19"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="20"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="21"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="22"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="23"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="24"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="25"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="26"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="27"  r="0" g="0" b="0"/>
- <Mapping  map="7" index="28"  r="0" g="0" b="0"/>
-<!-- map 8 - GREY HITCOL -->  
- <Mapping  map="8" index="0"  r="255" g="255" b="255"/>
- <Mapping  map="8" index="1"  r="240" g="240" b="240"/>
- <Mapping  map="8" index="2"  r="224" g="224" b="224"/>
- <Mapping  map="8" index="3"  r="208" g="208" b="208"/>
- <Mapping  map="8" index="4"  r="192" g="192" b="192"/>
- <Mapping  map="8" index="5"  r="176" g="176" b="176"/>
- <Mapping  map="8" index="6"  r="160" g="160" b="160"/>
- <Mapping  map="8" index="7"  r="144" g="144" b="144"/>
- <Mapping  map="8" index="8"  r="128" g="128" b="128"/>
- <Mapping  map="8" index="9"  r="112" g="112" b="112"/>
- <Mapping  map="8" index="10"  r="96" g="96" b="96"/>
- <Mapping  map="8" index="11"  r="80" g="80" b="80"/>
- <Mapping  map="8" index="12"  r="64" g="64" b="64"/>
- <Mapping  map="8" index="13"  r="48" g="48" b="48"/>
- <Mapping  map="8" index="14"  r="32" g="32" b="32"/>
- <Mapping  map="8" index="15"  r="16" g="16" b="16"/>
- <!-- not used -->
- <Mapping  map="8" index="16"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="17"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="18"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="19"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="20"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="21"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="22"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="23"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="24"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="25"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="26"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="27"  r="0" g="0" b="0"/>
- <Mapping  map="8" index="28"  r="0" g="0" b="0"/>
-</colormap>
diff --git a/graphics/AtlantisJava/configuration/config.dtd b/graphics/AtlantisJava/configuration/config.dtd
deleted file mode 100644
index 189f117e0911..000000000000
--- a/graphics/AtlantisJava/configuration/config.dtd
+++ /dev/null
@@ -1,169 +0,0 @@
-<!ELEMENT AtlantisConfiguration (Initialization, Parameters,ParameterDifferences*, WindowCorners*)>
-
-<!ELEMENT Initialization (Interactions, Canvas)>
-
-<!ELEMENT Interactions (Panel*, InteractionControl+)>
-
-<!ELEMENT InteractionControl (Panel*)>
-    <!ATTLIST InteractionControl
-        projectionName    CDATA #REQUIRED
-        availableInDemoMode     CDATA "YES"
-        defaultInDemoMode CDATA "NO" >
-
-<!ELEMENT Panel EMPTY>
-    <!ATTLIST Panel
-        screenName CDATA #REQUIRED
-        fileName   CDATA #REQUIRED
-        toolTip    CDATA "">
-
-<!ELEMENT Canvas (UsedWindow+, Layout+)>
-    <!ATTLIST Canvas
-        startupLayout CDATA #REQUIRED
-        aspectRatio   CDATA #REQUIRED>
-
-<!ELEMENT UsedWindow EMPTY>
-    <!ATTLIST UsedWindow
-        name       CDATA #REQUIRED
-        projection CDATA "EP"
-        group      CDATA "Data">
-
-<!ELEMENT Layout (Window+, Page+)>
-    <!ATTLIST Layout
-        name          CDATA #REQUIRED
-        startup       CDATA #REQUIRED
-        startupWindow CDATA #REQUIRED>
-
-<!ELEMENT Window EMPTY>
-    <!ATTLIST Window
-        name   CDATA #REQUIRED
-        hPos   CDATA #REQUIRED
-        vPos   CDATA #REQUIRED
-        width  CDATA #REQUIRED
-        height CDATA #REQUIRED>
-
-<!ELEMENT Page EMPTY>
-    <!ATTLIST Page
-        name    CDATA #REQUIRED
-        content CDATA #REQUIRED>
-
-<!ELEMENT Parameters (SuperGroup*)>
-    <!ATTLIST Parameters
-        userLevel CDATA #REQUIRED>
-
-<!ELEMENT SuperGroup (Group*)>
-    <!ATTLIST SuperGroup
-        name    CDATA #REQUIRED
-        toolTip CDATA ""
-        userLevel CDATA "0">
-
-<!ELEMENT Group (Command*,((ENUM)*, (SENUM)*, (ICUT)*, (SICUT)*, (FCUT)*, (SFCUT)*, (INT)*, (SINT)*,(LINT)*, (SLINT)*, (FLOAT)*, (SFLOAT)*, (COLOR)*, (SCOLOR)*, (StatusRoot)*, (STATUS)*, (LINK)*)* )>
-    <!ATTLIST Group
-        name      CDATA #REQUIRED
-        sname     CDATA ""
-        guiUsage  (NO_USE|TABLE|PROJECTION|BRAIN_TEST) "NO_USE"
-        scope     (LOCAL|GLOBAL) "GLOBAL"
-        userLevel CDATA "0"
-        toolTip   CDATA "">
-
-<!ELEMENT Command EMPTY>
-    <!ATTLIST Command
-        name    CDATA #REQUIRED
-        command CDATA #REQUIRED
-        ul      CDATA "0"
-        toolTip CDATA "">
-
-<!ENTITY none "0">
-
-<!ELEMENT ENUM   EMPTY>	<!ATTLIST ENUM   fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                                                                           tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT SENUM  EMPTY> <!ATTLIST SENUM  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED                                                     tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT ICUT   EMPTY> <!ATTLIST ICUT   fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                       isMod (YES|NO) "NO" op CDATA #REQUIRED dop CDATA "" tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT SICUT  EMPTY> <!ATTLIST SICUT  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED isMod (YES|NO) "NO" op CDATA #REQUIRED dop CDATA "" tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT FCUT   EMPTY> <!ATTLIST FCUT   fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                       isMod (YES|NO) "NO" op CDATA #REQUIRED dop CDATA "" tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT SFCUT  EMPTY> <!ATTLIST SFCUT  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED isMod (YES|NO) "NO" op CDATA #REQUIRED dop CDATA "" tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT INT    EMPTY> <!ATTLIST INT    fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                       isMod (YES|NO) "NO"                                 tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT SINT   EMPTY> <!ATTLIST SINT   fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED isMod (YES|NO) "NO"                                 tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT FLOAT  EMPTY> <!ATTLIST FLOAT  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                       isMod (YES|NO) "NO"                                 tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT SFLOAT EMPTY> <!ATTLIST SFLOAT fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED isMod (YES|NO) "NO"                                 tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT LINT   EMPTY> <!ATTLIST LINT   fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                                                                           tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT SLINT  EMPTY> <!ATTLIST SLINT  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED                                                     tip CDATA "" ul CDATA "0" scope CDATA "" u CDATA "&none;">
-<!ELEMENT COLOR  EMPTY> <!ATTLIST COLOR  fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf"                                                                           tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT SCOLOR EMPTY> <!ATTLIST SCOLOR fn CDATA #REQUIRED sn CDATA "" va CDATA #REQUIRED pv CDATA "-inf : inf" st (ON|OFF) #REQUIRED                                                     tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT StatusRoot (StatusGroup*, STATUS*)>  <!ATTLIST StatusRoot  fn CDATA #REQUIRED sn CDATA "" st (ON|OFF) "OFF"     tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT StatusGroup (StatusGroup*, STATUS*)> <!ATTLIST StatusGroup fn CDATA #REQUIRED sn CDATA "" st (ON|OFF) "OFF"     tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT STATUS EMPTY>                        <!ATTLIST STATUS      fn CDATA #REQUIRED sn CDATA "" st (ON|OFF) #REQUIRED tip CDATA "" ul CDATA "0" scope CDATA "">
-<!ELEMENT LINK   EMPTY> <!ATTLIST LINK to CDATA #REQUIRED>
-
-<!ELEMENT ParameterDifferences (DIFFERENCE*)>
-
-<!ELEMENT DIFFERENCE EMPTY>
-    <!ATTLIST DIFFERENCE
-        group      CDATA #REQUIRED
-        name       CDATA #REQUIRED
-        windowName CDATA "*"
-        va         CDATA ""
-        st         CDATA "" 
-        op         CDATA "">
-
-<!ELEMENT WindowCorners (CORNERS*)>
-
-<!ELEMENT CORNERS EMPTY>
-    <!ATTLIST CORNERS
-        windowName CDATA #REQUIRED
-        x0         CDATA #REQUIRED
-        y0         CDATA #REQUIRED
-        x1         CDATA #REQUIRED
-        y1         CDATA #REQUIRED
-        x2         CDATA #REQUIRED
-        y2         CDATA #REQUIRED>
-
-<!ENTITY length "1">
-<!ENTITY energy "2">
-<!ENTITY energyMEV "3">
-
-<!ENTITY user "0">
-<!ENTITY superuser "1">
-<!ENTITY debug "3">
-
-<!ENTITY assocCutOptions "All=0, Connected=1, Unconnected=2">
-<!ENTITY drawTo          "Pixels = 0, Silicon Strips = 1, TRT_DriftCircle=2, LAr = 3, TILE = 4, Muon System = 5">
-<!ENTITY colorFn         "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Track Segment = 4">
-<!ENTITY colorFnTRT      "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Track Segment = 4, isOutlier = 5, driftSign = 6, threshold = 7">
-<!ENTITY colorFnMTr      "Constant = 0, Index = 1, Pt = 2">
-<!ENTITY colorFnCal      "Constant = 0, SubDetector = 1, Cluster = 2, Layer = 3, Energy = 4, Jet = 5, ECAL/HCAL = 6, Time = 7">
-<!ENTITY colorFnS3D      "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Group = 4, Layer = 5">
-<!ENTITY colorFnTrigS3D  "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Layer = 4">
-<!ENTITY colorFnSiCluster "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Layer = 4, Orientation=5">
-<!ENTITY colorFnPixCluster "Constant = 0, Simulated Track = 1, Reconstructed Track = 2, SubDetector = 3, Layer = 4, Orientation=5, dE/dx=6">
-<!ENTITY colorFnSTr      "Constant = 0, Index = 1, Pt = 2, Particle Type = 3, Origin Vertex = 4">
-<!ENTITY colorFnRTr      "Constant = 0, Index = 1, Pt = 2, Collection = 3, Simulated Track = 4, RecVertex = 5, Objects = 7">
-<!ENTITY colorFnBasic    "Constant = 0, Index = 1">
-<!ENTITY colorFnBasicVtx    "Constant = 0, Index = 1 , VertexType = 2">
-<!ENTITY colorFnBasicCollection "Constant = 0, Index = 1, Collection = 2">
-<!ENTITY colorFnBasicCollectionBJets "Constant = 0, Index = 1, Collection = 2, BJets = 3">
-
-<!ENTITY energyMode      "Sum (Linear) = 0, Max (Linear) = 1, Sum (Logarithmic) = 2, Max (Logarithmic) = 3, Sum (Square Root) = 4, Max (Square Root) = 5">
-<!ENTITY symbol          "Filled Square=0,Filled Circle=4,Horizontal Line=1,Vertical Line=2,Plus=3">
-<!ENTITY pickingModes    "Event Data=0, Detectors=1">
-<!ENTITY frameCol        "0,8:14">
-<!ENTITY detectCol       "0:8,14">
-<!ENTITY dataCol         "0,8,14:28">
-<!ENTITY histoCol        "0,8,14:28">
-<!ENTITY real            "&lt;,&gt;">
-<!ENTITY eta             "&#x03B7;">
-<!ENTITY rho             "&#x03C1;">
-<!ENTITY phi             "&#x03A6;">
-<!ENTITY delta           "&#x0394;">
-<!ENTITY lambda          "&#x03BB;">
-<!ENTITY sigma           "&#x03C3;">
-<!ENTITY prime           "'">
-<!ENTITY ne              "!=">
-<!ENTITY le              "&lt;=">
-<!ENTITY ge              "&gt;=">
-<!ENTITY int             "=,&ne;,&lt;,&le;,&gt;,&ge;">
-<!ENTITY intEqual        "=">
-<!ENTITY modesFZ         "Standard = 0, RPC Middle 1 = 1, RPC Middle 2 = 2, RPC Outer = 3, MDT Inner and Extension = 4, MDT Middle = 5, MDT Outer = 6">
-<!ENTITY modesYX         "Standard = 0, TGC Inner 1 = 1,TGC Middle 1 = 2, TGC Middle 2 = 3, TGC Middle 3 = 4, MDT/CSC Inner 1 = 5, MDT Extension = 6, MDT Middle = 7, MDT Outer = 8, FCAL EM= 9, FCAL HAD 1= 10, FCAL HAD 2= 11, LAr Ecap Presamp= 12, LAr Ecap 1= 13, LAr Ecap 2= 14, LAr Ecap 3= 15, HEC 1= 16, HEC 2= 17, HEC 3= 18, HEC 4= 19, LAr Ecap Summed=20, HEC Summed=21, MBTS=22">
-
-<!-- Entities for including blocks of common data -->
-<!ENTITY CommonInteractions SYSTEM "common-interactions.xml">
-<!ENTITY CommonParameters   SYSTEM "common-parameters.xml">
diff --git a/graphics/AtlantisJava/configuration/epusti.csv b/graphics/AtlantisJava/configuration/epusti.csv
deleted file mode 100644
index 0c0b9051835d..000000000000
--- a/graphics/AtlantisJava/configuration/epusti.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-# Event Properties User Selected Trigger Items
-
-# example: "L1_EM7, L2_e10, EF_e10, L2_g10, EF_g10, L1_J70, EF_tau100"
-
-""
\ No newline at end of file
diff --git a/graphics/AtlantisJava/configuration/pdg.xml b/graphics/AtlantisJava/configuration/pdg.xml
deleted file mode 100755
index 20f87414de89..000000000000
--- a/graphics/AtlantisJava/configuration/pdg.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE PDG [
-
-	<!ELEMENT PDG (Particle*)>
-
-	<!ELEMENT Particle EMPTY>
-
-	<!ATTLIST Particle
-		charge (-1 | 0 | 1 | 10) #REQUIRED
-		type CDATA #REQUIRED
-		code CDATA #REQUIRED
-		name CDATA #REQUIRED
-	>
-
-	<!--
-		charge = 10 : unknown particle or bug
-	-->
-
-	<!ENTITY eta    "&#x03B7;">
-	<!ENTITY rho    "&#x03C1;">
-	<!ENTITY phi    "&#x03A6;">
-	<!ENTITY delta  "&#x0394;">
-	<!ENTITY pi     "&#x03C0;">
-	<!ENTITY sigma  "&#x03A3;">
-	<!ENTITY tau    "&#x03C4;">
-	<!ENTITY xi     "&#x039E;">
-	<!ENTITY omega  "&#x03A9;">
-	<!ENTITY mu     "&#x03BC;">
-	<!ENTITY gamma  "&#x03B3;">
-	<!ENTITY nu     "&#x03BD;">
-	<!ENTITY lambda "&#x039B;">
-	<!ENTITY psi	"&#x03C8;">
-	<!ENTITY upsilon	"&#x03A5;">
-	
-]>
-
-<PDG>
-
-	<!--
-		'type' used for InDet selection cuts
-	-->
-
-	<Particle  charge="10"  type="0"  code="1"	 name="unknown" />
-    <Particle  charge="10"  type="0"  code="0"   name="Bug" />
- 	
-    <Particle  charge="1"  type="1"  code="211"  name="&pi;" />
-    <Particle  charge="1"  type="1"  code="2212" name="Proton" />
-    <Particle  charge="1"  type="1"  code="321"  name="K" />
-    <Particle  charge="1"  type="1"  code="3222" name="&sigma;" />
-    <Particle  charge="-1" type="1"  code="3112" name="Anti-&sigma;" />
-    <Particle  charge="1"  type="1"  code="411"  name="D" />
-    <Particle  charge="1"  type="1"  code="431"  name="Ds" />
-    <Particle  charge="-1" type="1"  code="3312" name="&xi;" />
-    <Particle  charge="-1" type="1"  code="3334" name="&omega;" />
-    <Particle  charge="-1" type="2"  code="15"   name="&tau;" />
-    <Particle  charge="-1" type="3"  code="11"   name="e" />
-    <Particle  charge="-1" type="4"  code="13"   name="&mu;" />
-    <Particle  charge="0"  type="5"  code="111"  name="&pi;0" />
-    <Particle  charge="0"  type="5"  code="2112" name="Neutron" />
-    <Particle  charge="0"  type="5"  code="130"  name="K0_L" />
-    <Particle  charge="0"  type="5"  code="310"  name="K0_S" />
-    <Particle  charge="0"  type="5"  code="3212" name="&sigma;0" />
-    <Particle  charge="0"  type="5"  code="221"  name="&eta;" />
-    <Particle  charge="0"  type="5"  code="3122" name="&lambda;" />
-    <Particle  charge="0"  type="5"  code="3322" name="&xi;0" />
-    <Particle  charge="0"  type="5"  code="421"  name="D0" />
-    <Particle  charge="0"  type="6"  code="22"   name="&gamma;" />
-    <Particle  charge="0"  type="7"  code="12"   name="&nu;" />
-    <Particle  charge="0"  type="7"  code="14"   name="&nu;" />
-    <Particle  charge="0"  type="7"  code="16"   name="&nu;" />
-    <Particle  charge="0"  type="7"  code="1000022" name="neutralino" />
-    <Particle  charge="0"  type="7"  code="1000039" name="gravitino" />
-    <Particle  charge="0"  type="8"  code="1"       name="u" />
-    <Particle  charge="0"  type="8"  code="2"       name="d" />
-    <Particle  charge="0"  type="8"  code="3"       name="s" />
-    <Particle  charge="0"  type="8"  code="4"       name="c" />
-    <Particle  charge="0"  type="8"  code="5"       name="b" />
-    <Particle  charge="0"  type="8"  code="6"       name="t" />
-    <Particle  charge="-1" type="9"  code="1000015" name="stau" />
-    <Particle  charge="-1" type="9"  code="2000011" name="selectron" />
-    <Particle  charge="-1" type="9"  code="2000013" name="smuon" />
-    <Particle  charge="1"  type="10" code="24"      name="W" />
-    <Particle  charge="-1" type="11" code="601"     name="From Ntuple: d" />
-    <Particle  charge="1"  type="11" code="602"     name="From Ntuple: u" />
-    <Particle  charge="-1" type="11" code="603"     name="From Ntuple: s" />
-    <Particle  charge="1"  type="11" code="604"     name="From Ntuple: c" />
-    <Particle  charge="-1" type="11" code="605"     name="From Ntuple: b" />
-    <Particle  charge="1"  type="11" code="606"     name="From Ntuple: t" />
-    <Particle  charge="0"  type="12"  code="21"       name="gluon" />
-    <Particle  charge="0"  type="13"  code="23"       name="Z" />
-    
-    <!--
-    	fragmentation types
-    -->
-    
-    <Particle  charge="0"  type="14"  code="91"       name="cluster fragmentation" />
-    <Particle  charge="0"  type="14"  code="92"       name="string fragmentation" />
-    <Particle  charge="0"  type="14"  code="93"       name="independent fragmentation" />
-    
-    <!--
-    	extra particles (Higgs (h0), J/psi, upsilon)
-    -->
-    
-    <Particle  charge="0"  type="15"  code="25"       name="h0" />
-    <Particle  charge="0"  type="15"  code="443"       name="J/&psi;" />
-    <Particle  charge="0"  type="15"  code="553"       name="&upsilon;" />
-    
-</PDG>
diff --git a/graphics/AtlantisJava/configuration/rpsplt_fcal.csv b/graphics/AtlantisJava/configuration/rpsplt_fcal.csv
deleted file mode 100644
index f5c29d694923..000000000000
--- a/graphics/AtlantisJava/configuration/rpsplt_fcal.csv
+++ /dev/null
@@ -1,498 +0,0 @@
-# Real Pulse Shape Plots Lookup Table values for FCAL calorimeter
-
-
-# FCAL, lookup table layer 0, amplitude values
-FCAL_LAYER0_AMPLITUDE
-    "0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
-    0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
-    0.0f, 0.0f, 0.00145f, -0.0002f, -0.00052f, 
-    -9e-05f, 0.00017f, 0.00022f, 3e-05f, -0.00031f, 
-    -0.00061f, -0.00046f, -0.00033f, 0.00012f, -0.00013f, 
-    -0.00025f, -0.0005f, -0.00038f, -0.00035f, -0.0002f, 
-    -0.00042f, -0.00031f, -0.00022f, 0.0001f, -0.00017f, 
-    -0.00033f, 0.00028f, 0.00017f, 2e-05f, 9e-05f, 
-    -0.00018f, -0.00023f, 6e-05f, -3e-05f, -0.00037f, 
-    -0.00029f, -0.00021f, -0.00042f, -0.00047f, -0.00032f, 
-    -0.00041f, -0.0002f, 0.0001f, 0.00032f, 0.0006f, 
-    0.00147f, 0.00234f, 0.00409f, 0.00701f, 0.01124f, 
-    0.01704f, 0.02441f, 0.0349f, 0.04655f, 0.06027f, 
-    0.07674f, 0.09489f, 0.11624f, 0.13948f, 0.16603f, 
-    0.19516f, 0.22665f, 0.25946f, 0.29534f, 0.3334f, 
-    0.37421f, 0.41508f, 0.45488f, 0.49473f, 0.53529f, 
-    0.5759f, 0.61356f, 0.65022f, 0.68584f, 0.72121f, 
-    0.75454f, 0.78585f, 0.81642f, 0.84443f, 0.8694f, 
-    0.89244f, 0.9134f, 0.93157f, 0.94811f, 0.96263f, 
-    0.9756f, 0.98573f, 0.99294f, 0.99721f, 0.99958f, 
-    0.99937f, 0.99596f, 0.99067f, 0.98339f, 0.97312f, 
-    0.96037f, 0.94624f, 0.93069f, 0.9126f, 0.89226f, 
-    0.87097f, 0.84789f, 0.82241f, 0.79715f, 0.7696f, 
-    0.74111f, 0.713f, 0.68302f, 0.65322f, 0.62221f, 
-    0.58901f, 0.55499f, 0.52119f, 0.48651f, 0.45161f, 
-    0.41474f, 0.37863f, 0.34418f, 0.31038f, 0.2759f, 
-    0.24106f, 0.20725f, 0.17425f, 0.14223f, 0.10914f, 
-    0.07784f, 0.04664f, 0.01518f, -0.01539f, -0.04403f, 
-    -0.07252f, -0.1007f, -0.12714f, -0.15365f, -0.17955f, 
-    -0.20587f, -0.23009f, -0.25359f, -0.27704f, -0.29989f, 
-    -0.32317f, -0.34403f, -0.3634f, -0.3812f, -0.39806f, 
-    -0.41503f, -0.42994f, -0.4448f, -0.45808f, -0.46945f, 
-    -0.47926f, -0.48934f, -0.50054f, -0.51152f, -0.52073f, 
-    -0.52908f, -0.53691f, -0.5431f, -0.55034f, -0.55776f, 
-    -0.56445f, -0.56952f, -0.57341f, -0.57756f, -0.58138f, 
-    -0.58532f, -0.58718f, -0.58934f, -0.5898f, -0.59049f, 
-    -0.59047f, -0.5886f, -0.58601f, -0.58368f, -0.58009f, 
-    -0.57595f, -0.56963f, -0.55958f, -0.54925f, -0.5387f, 
-    -0.52797f, -0.5171f, -0.50614f, -0.49513f, -0.4841f, 
-    -0.47308f, -0.46212f, -0.45122f, -0.44041f, -0.42973f, 
-    -0.41916f, -0.40875f, -0.39851f, -0.38846f, -0.37862f, 
-    -0.36901f, -0.35965f, -0.35054f, -0.34168f, -0.33306f, 
-    -0.32471f, -0.31661f, -0.30876f, -0.30117f, -0.29382f, 
-    -0.28672f, -0.27987f, -0.27327f, -0.2669f, -0.26077f, 
-    -0.25487f, -0.2492f, -0.24375f, -0.23855f, -0.23358f, 
-    -0.22884f, -0.22433f, -0.22007f, -0.21602f, -0.21221f, 
-    -0.20861f, -0.20521f, -0.20199f, -0.19895f, -0.19609f, 
-    -0.19337f, -0.19079f, -0.18833f, -0.186f, -0.18376f, 
-    -0.1816f, -0.17953f, -0.17753f, -0.17557f, -0.17367f, 
-    -0.1718f, -0.16996f, -0.16814f, -0.16634f, -0.16454f, 
-    -0.16276f, -0.16097f, -0.15917f, -0.15737f, -0.15555f, 
-    -0.15372f, -0.15186f, -0.14997f, -0.14801f, -0.14599f, 
-    -0.14389f, -0.1417f, -0.13943f, -0.13712f, -0.13482f, 
-    -0.13255f, -0.13036f, -0.12824f, -0.12623f, -0.12429f, 
-    -0.12243f, -0.12061f, -0.11882f, -0.11704f, -0.11527f, 
-    -0.11349f, -0.11167f, -0.10983f, -0.10794f, -0.10603f, 
-    -0.10406f, -0.10205f, -0.1f, -0.09791f, -0.09578f, 
-    -0.09361f, -0.09141f, -0.08918f, -0.08694f, -0.08466f, 
-    -0.08238f, -0.08009f, -0.0778f, -0.0755f, -0.07321f, 
-    -0.07093f, -0.06867f, -0.06642f, -0.06421f, -0.06202f, 
-    -0.05986f, -0.05774f, -0.05566f, -0.0536f, -0.05158f, 
-    -0.04959f, -0.04764f, -0.04572f, -0.04385f, -0.04203f, 
-    -0.04025f, -0.03853f, -0.03687f, -0.03526f, -0.0337f, 
-    -0.03218f, -0.03072f, -0.0293f, -0.02794f, -0.02663f, 
-    -0.02536f, -0.02413f, -0.02294f, -0.02181f, -0.0207f, 
-    -0.01964f, -0.01861f, -0.01761f, -0.01665f, -0.01573f, 
-    -0.01484f, -0.01399f, -0.01319f, -0.01242f, -0.01168f, 
-    -0.011f, -0.01034f, -0.00973f, -0.00914f, -0.00861f, 
-    -0.00808f, -0.00761f, -0.00716f, -0.00673f, -0.00632f, 
-    -0.00595f, -0.00559f, -0.00526f, -0.00494f, -0.00464f, 
-    -0.00436f, -0.00409f, -0.00383f, -0.00359f, -0.00335f, 
-    -0.00312f, -0.00291f, -0.00271f, -0.00252f, -0.00234f, 
-    -0.00219f, -0.00204f, -0.0019f, -0.00174f, -0.00158f, 
-    -0.00139f, -0.00118f, -0.00094f, -0.00068f, -0.00042f, 
-    -0.00016f, 8e-05f, 0.00032f, 0.00052f, 0.0007f, 
-    0.00088f, 0.00102f, 0.00114f, 0.0013f, 0.0014f, 
-    0.00148f, 0.00159f, 0.00171f, 0.0018f, 0.00191f, 
-    0.00197f, 0.00207f, 0.00218f, 0.00232f, 0.00243f, 
-    0.00254f, 0.00267f, 0.0028f, 0.00292f, 0.00305f, 
-    0.00318f, 0.00331f, 0.00347f, 0.00363f, 0.00376f, 
-    0.00388f, 0.00405f, 0.00421f, 0.00433f, 0.00446f, 
-    0.00458f, 0.00473f, 0.00488f, 0.00497f, 0.00514f, 
-    0.00522f, 0.00538f, 0.00553f, 0.00563f, 0.00573f, 
-    0.00588f, 0.00596f, 0.00608f, 0.0062f, 0.00629f, 
-    0.00636f, 0.00646f, 0.00654f, 0.00663f, 0.00669f, 
-    0.00674f, 0.00679f, 0.00688f, 0.00688f, 0.00696f, 
-    0.00702f, 0.00704f, 0.00711f, 0.00712f, 0.0072f, 
-    0.0072f, 0.00727f, 0.00729f, 0.00729f, 0.00737f, 
-    0.00737f, 0.00737f, 0.00737f, 0.00746f, 0.00746f, 
-    0.00746f, 0.00746f, 0.00746f, 0.00746f, 0.00746f, 
-    0.00746f, 0.00746f, 0.00737f, 0.00737f, 0.00737f, 
-    0.00737f, 0.00737f, 0.00737f, 0.00729f, 0.00729f, 
-    0.00729f, 0.00729f, 0.00729f, 0.0072f, 0.0072f, 
-    0.00717f, 0.00712f, 0.00708f, 0.00704f, 0.00704f, 
-    0.00696f, 0.00696f, 0.00696f, 0.00696f, 0.00696f, 
-    0.00696f, 0.00696f, 0.00696f, 0.00696f, 0.00696f, 
-    0.00688f, 0.00688f, 0.00688f, 0.00688f, 0.00688f, 
-    0.00684f, 0.00679f, 0.00679f, 0.00679f, 0.00671f, 
-    0.00671f, 0.00671f, 0.00671f, 0.00663f, 0.00663f, 
-    0.00663f, 0.00663f, 0.00659f, 0.00655f, 0.00655f, 
-    0.00655f, 0.00655f, 0.00655f, 0.00651f, 0.00646f, 
-    0.00646f, 0.00646f, 0.00646f, 0.00646f, 0.00646f, 
-    0.00646f, 0.00646f, 0.00639f, 0.00638f, 0.00638f, 
-    0.00638f, 0.00638f, 0.00638f, 0.00638f, 0.00638f, 
-    0.00638f, 0.00638f, 0.00638f, 0.00638f, 0.0063f, 
-    0.00629f, 0.00629f, 0.00629f, 0.00629f, 0.00629f, 
-    0.00629f, 0.00629f, 0.00629f, 0.00629f, 0.00622f, 
-    0.00622f, 0.00622f, 0.00622f, 0.00622f, 0.00622f, 
-    0.00622f, 0.00622f, 0.00612f, 0.00612f, 0.00612f, 
-    0.00612f, 0.00612f, 0.00612f, 0.00612f, 0.00612f, 
-    0.00606f, 0.00605f, 0.00605f, 0.00605f, 0.00605f, 
-    0.00605f, 0.00605f, 0.00601f, 0.00596f, 0.00596f, 
-    0.00596f, 0.00596f, 0.00596f, 0.00596f, 0.00596f, 
-    0.00588f, 0.00588f, 0.00588f, 0.00588f, 0.00588f, 
-    0.00588f, 0.00585f, 0.00579f, 0.00579f, 0.00579f, 
-    0.00579f, 0.00579f, 0.00572f, 0.00572f, 0.00572f, 
-    0.00572f, 0.00572f, 0.00572f, 0.00572f, 0.00572f, 
-    0.00572f, 0.00563f, 0.00563f, 0.00563f, 0.00563f, 
-    0.00563f, 0.00563f, 0.00563f, 0.00563f, 0.00563f, 
-    0.00563f, 0.00563f, 0.00563f, 0.00563f, 0.00563f"
-
-
-# FCAL lookup table layer 1, amplitude values
-FCAL_LAYER1_AMPLITUDE
-    "0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
-    0.0f, 0.0f, 0.0f, 0.0f, -0.00014f, 
-    -0.00015f, -0.00019f, -0.00024f, -2e-05f, 8e-05f, 
-    0.00012f, -3e-05f, -0.00012f, -0.00011f, -0.0002f, 
-    -4e-05f, 7e-05f, 5e-05f, -1e-05f, -9e-05f, 
-    -3e-05f, -0.00012f, -3e-05f, -3e-05f, -1e-05f, 
-    -3e-05f, -1e-05f, -0.00011f, -0.00021f, -0.00017f, 
-    -0.00016f, -6e-05f, 1e-05f, 1e-05f, -3e-05f, 
-    -0.00018f, -0.0002f, -0.00018f, -8e-05f, -2e-05f, 
-    -5e-05f, 0.00011f, 4e-05f, 0.00032f, 0.00076f, 
-    0.00136f, 0.00271f, 0.00417f, 0.00696f, 0.01099f, 
-    0.01602f, 0.02229f, 0.02963f, 0.03936f, 0.05282f, 
-    0.06928f, 0.08819f, 0.10857f, 0.12914f, 0.15221f, 
-    0.17682f, 0.20343f, 0.23335f, 0.26583f, 0.29864f, 
-    0.33272f, 0.36835f, 0.40457f, 0.44149f, 0.47595f, 
-    0.51049f, 0.54648f, 0.5816f, 0.61676f, 0.65114f, 
-    0.68367f, 0.7141f, 0.74147f, 0.76915f, 0.79855f, 
-    0.82565f, 0.85105f, 0.87379f, 0.89366f, 0.9111f, 
-    0.927f, 0.94162f, 0.95496f, 0.96664f, 0.97688f, 
-    0.98534f, 0.99109f, 0.99601f, 0.99887f, 0.99964f, 
-    0.99962f, 0.99681f, 0.99299f, 0.98726f, 0.98f, 
-    0.97158f, 0.96249f, 0.95187f, 0.9393f, 0.92385f, 
-    0.90628f, 0.88827f, 0.86996f, 0.85269f, 0.83453f, 
-    0.81503f, 0.79519f, 0.77368f, 0.74984f, 0.72628f, 
-    0.70228f, 0.67716f, 0.65181f, 0.62399f, 0.59774f, 
-    0.57129f, 0.54263f, 0.51398f, 0.48417f, 0.45309f, 
-    0.42268f, 0.39325f, 0.36432f, 0.33302f, 0.29777f, 
-    0.26282f, 0.22816f, 0.19507f, 0.16394f, 0.13389f, 
-    0.10437f, 0.07385f, 0.04319f, 0.01199f, -0.01883f, 
-    -0.04912f, -0.07801f, -0.10802f, -0.13734f, -0.16453f, 
-    -0.19169f, -0.2182f, -0.24487f, -0.27109f, -0.29671f, 
-    -0.32083f, -0.34391f, -0.36456f, -0.38568f, -0.40796f, 
-    -0.428f, -0.44835f, -0.46643f, -0.48286f, -0.49816f, 
-    -0.51161f, -0.5248f, -0.5374f, -0.54928f, -0.5608f, 
-    -0.57103f, -0.57868f, -0.58697f, -0.59288f, -0.59803f, 
-    -0.60282f, -0.60532f, -0.60756f, -0.60862f, -0.60882f, 
-    -0.60828f, -0.60572f, -0.60473f, -0.60353f, -0.60196f, 
-    -0.6001f, -0.59736f, -0.59308f, -0.58847f, -0.5836f, 
-    -0.57846f, -0.57308f, -0.56749f, -0.56171f, -0.55576f, 
-    -0.54966f, -0.54343f, -0.5371f, -0.53066f, -0.52415f, 
-    -0.51757f, -0.51094f, -0.50428f, -0.4976f, -0.4909f, 
-    -0.4842f, -0.47749f, -0.47078f, -0.4641f, -0.45745f, 
-    -0.45081f, -0.44422f, -0.43769f, -0.43118f, -0.42475f, 
-    -0.41838f, -0.41207f, -0.40583f, -0.39965f, -0.39355f, 
-    -0.38752f, -0.38156f, -0.37568f, -0.36988f, -0.36414f, 
-    -0.35848f, -0.35292f, -0.34744f, -0.34205f, -0.33676f, 
-    -0.33155f, -0.32642f, -0.32135f, -0.31634f, -0.31139f, 
-    -0.30648f, -0.30164f, -0.29688f, -0.29227f, -0.28779f, 
-    -0.28349f, -0.27937f, -0.27541f, -0.2716f, -0.26792f, 
-    -0.26432f, -0.26084f, -0.25743f, -0.25406f, -0.25074f, 
-    -0.24743f, -0.24413f, -0.24086f, -0.23757f, -0.23428f, 
-    -0.23096f, -0.22764f, -0.22429f, -0.22092f, -0.21754f, 
-    -0.21414f, -0.21072f, -0.20729f, -0.20385f, -0.20038f, 
-    -0.19692f, -0.19344f, -0.18993f, -0.18644f, -0.18293f, 
-    -0.17943f, -0.17592f, -0.17244f, -0.16898f, -0.16553f, 
-    -0.16211f, -0.1587f, -0.15533f, -0.15198f, -0.14866f, 
-    -0.14538f, -0.14213f, -0.13891f, -0.13573f, -0.13259f, 
-    -0.12948f, -0.12641f, -0.1234f, -0.12042f, -0.11747f, 
-    -0.11457f, -0.11173f, -0.10891f, -0.10617f, -0.10345f, 
-    -0.10079f, -0.09819f, -0.09562f, -0.09311f, -0.09065f, 
-    -0.08823f, -0.08586f, -0.08354f, -0.08125f, -0.07903f, 
-    -0.07685f, -0.07471f, -0.07262f, -0.07057f, -0.06857f, 
-    -0.06662f, -0.06471f, -0.06284f, -0.06102f, -0.05926f, 
-    -0.05751f, -0.05582f, -0.05416f, -0.05254f, -0.05096f, 
-    -0.04942f, -0.04792f, -0.04647f, -0.04507f, -0.04369f, 
-    -0.04235f, -0.04104f, -0.03974f, -0.03845f, -0.03717f, 
-    -0.03591f, -0.03467f, -0.03347f, -0.03231f, -0.03119f, 
-    -0.03012f, -0.0291f, -0.02812f, -0.02718f, -0.02629f, 
-    -0.02542f, -0.0246f, -0.02381f, -0.02304f, -0.0223f, 
-    -0.02157f, -0.02088f, -0.0202f, -0.01953f, -0.01888f, 
-    -0.01824f, -0.01761f, -0.017f, -0.0164f, -0.0158f, 
-    -0.01523f, -0.01466f, -0.0141f, -0.01355f, -0.01301f, 
-    -0.01247f, -0.01195f, -0.01141f, -0.0109f, -0.01039f, 
-    -0.00989f, -0.0094f, -0.0089f, -0.00842f, -0.00796f, 
-    -0.0075f, -0.00705f, -0.0066f, -0.00616f, -0.00575f, 
-    -0.00533f, -0.00493f, -0.00452f, -0.00413f, -0.00375f, 
-    -0.00338f, -0.003f, -0.00265f, -0.00228f, -0.00195f, 
-    -0.00162f, -0.00128f, -0.00096f, -0.00064f, -0.00035f, 
-    -5e-05f, 0.00023f, 0.0005f, 0.00079f, 0.00105f, 
-    0.00131f, 0.00156f, 0.00181f, 0.00201f, 0.0023f, 
-    0.0025f, 0.00267f, 0.00287f, 0.00315f, 0.00335f, 
-    0.00346f, 0.00367f, 0.0039f, 0.0041f, 0.00421f, 
-    0.00441f, 0.00458f, 0.00473f, 0.0049f, 0.00505f, 
-    0.00516f, 0.00522f, 0.00537f, 0.00551f, 0.00552f, 
-    0.00569f, 0.00579f, 0.0059f, 0.00601f, 0.00615f, 
-    0.00628f, 0.00632f, 0.00648f, 0.00653f, 0.00664f, 
-    0.00679f, 0.0068f, 0.00696f, 0.00696f, 0.007f, 
-    0.00711f, 0.00711f, 0.00724f, 0.00728f, 0.00728f, 
-    0.00728f, 0.00743f, 0.00743f, 0.00743f, 0.00743f, 
-    0.00744f, 0.00759f, 0.00759f, 0.00759f, 0.00759f, 
-    0.00759f, 0.00759f, 0.00774f, 0.00775f, 0.00775f, 
-    0.00775f, 0.00775f, 0.00775f, 0.00775f, 0.00775f, 
-    0.00789f, 0.00791f, 0.00791f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00791f, 0.00791f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00792f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00807f, 0.00807f, 
-    0.00807f, 0.00807f, 0.00807f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00791f, 0.00791f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00791f, 0.00791f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00791f, 0.00791f, 0.00791f, 0.00791f, 
-    0.00791f, 0.00775f, 0.00775f, 0.00775f, 0.00775f, 
-    0.00775f, 0.00775f, 0.00775f, 0.00775f, 0.00775f, 
-    0.00775f, 0.00775f, 0.00775f, 0.00775f, 0.0076f, 
-    0.00759f, 0.00759f, 0.00759f, 0.00759f, 0.00759f, 
-    0.00759f, 0.00759f, 0.00759f, 0.00759f, 0.00759f, 
-    0.00759f, 0.00753f, 0.00743f, 0.00743f, 0.00743f, 
-    0.00743f, 0.00743f, 0.00743f, 0.00743f, 0.00743f, 
-    0.00743f, 0.00743f, 0.00743f, 0.00743f, 0.00743f, 
-    0.00728f, 0.00728f, 0.00728f, 0.00728f, 0.00728f, 
-    0.00728f, 0.00728f, 0.00728f, 0.00728f, 0.00728f, 
-    0.00728f, 0.00728f, 0.00728f, 0.00727f, 0.00711f, 
-    0.00711f, 0.00711f, 0.00711f, 0.00711f, 0.00711f, 
-    0.00711f, 0.00711f, 0.00711f, 0.00711f, 0.00711f, 
-    0.00711f, 0.00711f, 0.00711f, 0.00711f, 0.00711f"
-
-
-# FCAL lookup table layer 2, amplitude values
-FCAL_LAYER2_AMPLITUDE
-    "0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
-    0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
-    0.0f, -0.00128f, -0.00011f, 0.00018f, 2e-05f, 
-    0.00012f, -6e-05f, -5e-05f, -4e-05f, -4e-05f, 
-    -6e-05f, -0.00031f, 3e-05f, -0.00022f, 7e-05f, 
-    -3e-05f, 2e-05f, 0.00011f, 9e-05f, -0.00025f, 
-    -5e-05f, -0.00026f, -3e-05f, -3e-05f, -5e-05f, 
-    -3e-05f, 8e-05f, 0.00016f, 0.00025f, 0.00015f, 
-    0.00018f, 9e-05f, -0.00016f, -0.00017f, 0.00012f, 
-    0.00031f, 0.00061f, 0.00137f, 0.00259f, 0.00487f, 
-    0.00807f, 0.01106f, 0.01611f, 0.02298f, 0.03195f, 
-    0.04154f, 0.05328f, 0.06624f, 0.08155f, 0.09926f, 
-    0.11723f, 0.13765f, 0.16233f, 0.18937f, 0.21701f, 
-    0.24599f, 0.27675f, 0.30806f, 0.34205f, 0.3763f, 
-    0.40922f, 0.44335f, 0.47795f, 0.51151f, 0.54584f, 
-    0.58035f, 0.61246f, 0.64345f, 0.67427f, 0.70516f, 
-    0.73373f, 0.75953f, 0.78417f, 0.80817f, 0.83037f, 
-    0.85125f, 0.87108f, 0.88998f, 0.9072f, 0.92291f, 
-    0.93755f, 0.95053f, 0.96236f, 0.97239f, 0.9802f, 
-    0.9869f, 0.99293f, 0.99661f, 0.99861f, 0.99968f, 
-    0.99958f, 0.99822f, 0.99567f, 0.9913f, 0.98539f, 
-    0.97946f, 0.97165f, 0.96321f, 0.95356f, 0.943f, 
-    0.93288f, 0.92124f, 0.90748f, 0.8924f, 0.87741f, 
-    0.86239f, 0.84699f, 0.83096f, 0.81354f, 0.79568f, 
-    0.77812f, 0.75942f, 0.73898f, 0.71895f, 0.6979f, 
-    0.67584f, 0.65541f, 0.63427f, 0.61183f, 0.58872f, 
-    0.56582f, 0.54277f, 0.51966f, 0.49662f, 0.47374f, 
-    0.45068f, 0.42633f, 0.40063f, 0.37501f, 0.35003f, 
-    0.32551f, 0.30122f, 0.27643f, 0.2508f, 0.22669f, 
-    0.2018f, 0.1756f, 0.15017f, 0.12637f, 0.102f, 
-    0.07617f, 0.05128f, 0.02768f, 0.00478f, -0.01868f, 
-    -0.0427f, -0.06341f, -0.08504f, -0.10568f, -0.12438f, 
-    -0.14567f, -0.16618f, -0.18641f, -0.20502f, -0.22295f, 
-    -0.24012f, -0.2569f, -0.27256f, -0.28823f, -0.30194f, 
-    -0.31542f, -0.33028f, -0.34304f, -0.35301f, -0.36387f, 
-    -0.37478f, -0.38515f, -0.39437f, -0.4023f, -0.41029f, 
-    -0.41949f, -0.42512f, -0.43117f, -0.43628f, -0.44007f, 
-    -0.4454f, -0.45203f, -0.45813f, -0.46382f, -0.46907f, 
-    -0.4739f, -0.47832f, -0.48235f, -0.48597f, -0.4892f, 
-    -0.49207f, -0.49454f, -0.49666f, -0.49841f, -0.49984f, 
-    -0.50092f, -0.50166f, -0.50208f, -0.50221f, -0.50202f, 
-    -0.50155f, -0.50082f, -0.49982f, -0.49856f, -0.49706f, 
-    -0.49533f, -0.49338f, -0.49122f, -0.48885f, -0.48628f, 
-    -0.48354f, -0.48064f, -0.47755f, -0.47432f, -0.47094f, 
-    -0.46742f, -0.46379f, -0.46001f, -0.45611f, -0.45208f, 
-    -0.4479f, -0.44361f, -0.43919f, -0.43467f, -0.43006f, 
-    -0.42543f, -0.42077f, -0.41613f, -0.4115f, -0.4069f, 
-    -0.40233f, -0.39778f, -0.39325f, -0.38873f, -0.38422f, 
-    -0.37971f, -0.37519f, -0.37068f, -0.36616f, -0.36163f, 
-    -0.3571f, -0.35256f, -0.34802f, -0.34347f, -0.33892f, 
-    -0.33436f, -0.32982f, -0.32529f, -0.32077f, -0.31626f, 
-    -0.31179f, -0.30733f, -0.30289f, -0.2985f, -0.29413f, 
-    -0.2898f, -0.28552f, -0.28129f, -0.27709f, -0.27294f, 
-    -0.26885f, -0.26479f, -0.26078f, -0.25685f, -0.25293f, 
-    -0.24906f, -0.24524f, -0.24147f, -0.23772f, -0.23403f, 
-    -0.23038f, -0.22676f, -0.22318f, -0.21964f, -0.21614f, 
-    -0.21268f, -0.20925f, -0.20586f, -0.20249f, -0.19916f, 
-    -0.19588f, -0.19261f, -0.1894f, -0.18622f, -0.18305f, 
-    -0.17994f, -0.17686f, -0.1738f, -0.17078f, -0.16779f, 
-    -0.16484f, -0.1619f, -0.15902f, -0.15615f, -0.15333f, 
-    -0.15054f, -0.14777f, -0.14504f, -0.14234f, -0.13967f, 
-    -0.13704f, -0.13444f, -0.13187f, -0.12934f, -0.12684f, 
-    -0.12439f, -0.12197f, -0.11959f, -0.11724f, -0.11494f, 
-    -0.11265f, -0.1104f, -0.10815f, -0.10592f, -0.10371f, 
-    -0.10151f, -0.09934f, -0.0972f, -0.09509f, -0.09302f, 
-    -0.09099f, -0.08899f, -0.08705f, -0.08514f, -0.08327f, 
-    -0.08145f, -0.07966f, -0.0779f, -0.07617f, -0.07448f, 
-    -0.07282f, -0.07119f, -0.06958f, -0.06801f, -0.06646f, 
-    -0.06493f, -0.06344f, -0.06196f, -0.06051f, -0.05908f, 
-    -0.05768f, -0.05629f, -0.05495f, -0.0536f, -0.05229f, 
-    -0.051f, -0.04974f, -0.04849f, -0.04726f, -0.04607f, 
-    -0.0449f, -0.04375f, -0.04262f, -0.04151f, -0.04044f, 
-    -0.03937f, -0.03834f, -0.03732f, -0.03634f, -0.03536f, 
-    -0.0344f, -0.03347f, -0.03256f, -0.03166f, -0.03079f, 
-    -0.02993f, -0.02908f, -0.02826f, -0.02745f, -0.02666f, 
-    -0.02588f, -0.02512f, -0.02437f, -0.02364f, -0.02293f, 
-    -0.02223f, -0.02154f, -0.02087f, -0.02021f, -0.01957f, 
-    -0.01892f, -0.0183f, -0.01768f, -0.0171f, -0.01651f, 
-    -0.01594f, -0.01536f, -0.01482f, -0.01428f, -0.01375f, 
-    -0.01323f, -0.01271f, -0.01221f, -0.01171f, -0.01123f, 
-    -0.01076f, -0.01029f, -0.00984f, -0.0094f, -0.00898f, 
-    -0.00857f, -0.00817f, -0.00777f, -0.00739f, -0.007f, 
-    -0.00663f, -0.00624f, -0.00587f, -0.00551f, -0.00514f, 
-    -0.00479f, -0.00444f, -0.0041f, -0.00377f, -0.00344f, 
-    -0.00313f, -0.00282f, -0.00252f, -0.00223f, -0.00195f, 
-    -0.00168f, -0.0014f, -0.00114f, -0.00089f, -0.00063f, 
-    -0.00039f, -0.00015f, 9e-05f, 0.00031f, 0.00053f, 
-    0.00076f, 0.00096f, 0.00117f, 0.00138f, 0.00158f, 
-    0.00178f, 0.00194f, 0.00216f, 0.00234f, 0.00251f, 
-    0.00269f, 0.0029f, 0.00298f, 0.00319f, 0.00338f, 
-    0.00353f, 0.00368f, 0.00383f, 0.00398f, 0.00408f, 
-    0.00427f, 0.00438f, 0.00447f, 0.00458f, 0.00472f, 
-    0.00488f, 0.00501f, 0.00512f, 0.00517f, 0.00532f, 
-    0.00546f, 0.00547f, 0.00561f, 0.00572f, 0.00576f, 
-    0.0059f, 0.00594f, 0.00606f, 0.0062f, 0.0062f, 
-    0.00635f, 0.00636f, 0.0065f, 0.0065f, 0.00664f, 
-    0.00665f, 0.0068f, 0.0068f, 0.00684f, 0.00695f, 
-    0.00695f, 0.0071f, 0.0071f, 0.00721f, 0.00725f, 
-    0.00725f, 0.00739f, 0.0074f, 0.0074f, 0.00751f, 
-    0.00755f, 0.00755f, 0.00759f, 0.00769f, 0.00769f, 
-    0.00769f, 0.00769f, 0.00783f, 0.00783f, 0.00783f, 
-    0.00783f, 0.00795f, 0.00799f, 0.00799f, 0.00799f, 
-    0.00799f, 0.00812f, 0.00813f, 0.00813f, 0.00813f, 
-    0.00813f, 0.00813f, 0.00828f, 0.00829f, 0.00829f, 
-    0.00829f, 0.00829f, 0.00829f, 0.00829f, 0.00829f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00844f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00858f, 0.00858f, 0.00858f, 
-    0.00858f, 0.00858f, 0.00854f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f, 
-    0.00843f, 0.00843f, 0.00843f, 0.00843f, 0.00843f"
-
-
-# FCAL lookup table time values
-FCAL_TIME
-    "0.5f, 1.5f, 2.5f, 3.5f, 4.5f, 
-    5.5f, 6.5f, 7.5f, 8.5f, 9.5f, 
-    10.5f, 11.5f, 12.5f, 13.5f, 14.5f, 
-    15.5f, 16.5f, 17.5f, 18.5f, 19.5f, 
-    20.5f, 21.5f, 22.5f, 23.5f, 24.5f, 
-    25.5f, 26.5f, 27.5f, 28.5f, 29.5f, 
-    30.5f, 31.5f, 32.5f, 33.5f, 34.5f, 
-    35.5f, 36.5f, 37.5f, 38.5f, 39.5f, 
-    40.5f, 41.5f, 42.5f, 43.5f, 44.5f, 
-    45.5f, 46.5f, 47.5f, 48.5f, 49.5f, 
-    50.5f, 51.5f, 52.5f, 53.5f, 54.5f, 
-    55.5f, 56.5f, 57.5f, 58.5f, 59.5f, 
-    60.5f, 61.5f, 62.5f, 63.5f, 64.5f, 
-    65.5f, 66.5f, 67.5f, 68.5f, 69.5f, 
-    70.5f, 71.5f, 72.5f, 73.5f, 74.5f, 
-    75.5f, 76.5f, 77.5f, 78.5f, 79.5f, 
-    80.5f, 81.5f, 82.5f, 83.5f, 84.5f, 
-    85.5f, 86.5f, 87.5f, 88.5f, 89.5f, 
-    90.5f, 91.5f, 92.5f, 93.5f, 94.5f, 
-    95.5f, 96.5f, 97.5f, 98.5f, 99.5f, 
-    100.5f, 101.5f, 102.5f, 103.5f, 104.5f, 
-    105.5f, 106.5f, 107.5f, 108.5f, 109.5f, 
-    110.5f, 111.5f, 112.5f, 113.5f, 114.5f, 
-    115.5f, 116.5f, 117.5f, 118.5f, 119.5f, 
-    120.5f, 121.5f, 122.5f, 123.5f, 124.5f, 
-    125.5f, 126.5f, 127.5f, 128.5f, 129.5f, 
-    130.5f, 131.5f, 132.5f, 133.5f, 134.5f, 
-    135.5f, 136.5f, 137.5f, 138.5f, 139.5f, 
-    140.5f, 141.5f, 142.5f, 143.5f, 144.5f, 
-    145.5f, 146.5f, 147.5f, 148.5f, 149.5f, 
-    150.5f, 151.5f, 152.5f, 153.5f, 154.5f, 
-    155.5f, 156.5f, 157.5f, 158.5f, 159.5f, 
-    160.5f, 161.5f, 162.5f, 163.5f, 164.5f, 
-    165.5f, 166.5f, 167.5f, 168.5f, 169.5f, 
-    170.5f, 171.5f, 172.5f, 173.5f, 174.5f, 
-    175.5f, 176.5f, 177.5f, 178.5f, 179.5f, 
-    180.5f, 181.5f, 182.5f, 183.5f, 184.5f, 
-    185.5f, 186.5f, 187.5f, 188.5f, 189.5f, 
-    190.5f, 191.5f, 192.5f, 193.5f, 194.5f, 
-    195.5f, 196.5f, 197.5f, 198.5f, 199.5f, 
-    200.5f, 201.5f, 202.5f, 203.5f, 204.5f, 
-    205.5f, 206.5f, 207.5f, 208.5f, 209.5f, 
-    210.5f, 211.5f, 212.5f, 213.5f, 214.5f, 
-    215.5f, 216.5f, 217.5f, 218.5f, 219.5f, 
-    220.5f, 221.5f, 222.5f, 223.5f, 224.5f, 
-    225.5f, 226.5f, 227.5f, 228.5f, 229.5f, 
-    230.5f, 231.5f, 232.5f, 233.5f, 234.5f, 
-    235.5f, 236.5f, 237.5f, 238.5f, 239.5f, 
-    240.5f, 241.5f, 242.5f, 243.5f, 244.5f, 
-    245.5f, 246.5f, 247.5f, 248.5f, 249.5f, 
-    250.5f, 251.5f, 252.5f, 253.5f, 254.5f, 
-    255.5f, 256.5f, 257.5f, 258.5f, 259.5f, 
-    260.5f, 261.5f, 262.5f, 263.5f, 264.5f, 
-    265.5f, 266.5f, 267.5f, 268.5f, 269.5f, 
-    270.5f, 271.5f, 272.5f, 273.5f, 274.5f, 
-    275.5f, 276.5f, 277.5f, 278.5f, 279.5f, 
-    280.5f, 281.5f, 282.5f, 283.5f, 284.5f, 
-    285.5f, 286.5f, 287.5f, 288.5f, 289.5f, 
-    290.5f, 291.5f, 292.5f, 293.5f, 294.5f, 
-    295.5f, 296.5f, 297.5f, 298.5f, 299.5f, 
-    300.5f, 301.5f, 302.5f, 303.5f, 304.5f, 
-    305.5f, 306.5f, 307.5f, 308.5f, 309.5f, 
-    310.5f, 311.5f, 312.5f, 313.5f, 314.5f, 
-    315.5f, 316.5f, 317.5f, 318.5f, 319.5f, 
-    320.5f, 321.5f, 322.5f, 323.5f, 324.5f, 
-    325.5f, 326.5f, 327.5f, 328.5f, 329.5f, 
-    330.5f, 331.5f, 332.5f, 333.5f, 334.5f, 
-    335.5f, 336.5f, 337.5f, 338.5f, 339.5f, 
-    340.5f, 341.5f, 342.5f, 343.5f, 344.5f, 
-    345.5f, 346.5f, 347.5f, 348.5f, 349.5f, 
-    350.5f, 351.5f, 352.5f, 353.5f, 354.5f, 
-    355.5f, 356.5f, 357.5f, 358.5f, 359.5f, 
-    360.5f, 361.5f, 362.5f, 363.5f, 364.5f, 
-    365.5f, 366.5f, 367.5f, 368.5f, 369.5f, 
-    370.5f, 371.5f, 372.5f, 373.5f, 374.5f, 
-    375.5f, 376.5f, 377.5f, 378.5f, 379.5f, 
-    380.5f, 381.5f, 382.5f, 383.5f, 384.5f, 
-    385.5f, 386.5f, 387.5f, 388.5f, 389.5f, 
-    390.5f, 391.5f, 392.5f, 393.5f, 394.5f, 
-    395.5f, 396.5f, 397.5f, 398.5f, 399.5f, 
-    400.5f, 401.5f, 402.5f, 403.5f, 404.5f, 
-    405.5f, 406.5f, 407.5f, 408.5f, 409.5f, 
-    410.5f, 411.5f, 412.5f, 413.5f, 414.5f, 
-    415.5f, 416.5f, 417.5f, 418.5f, 419.5f, 
-    420.5f, 421.5f, 422.5f, 423.5f, 424.5f, 
-    425.5f, 426.5f, 427.5f, 428.5f, 429.5f, 
-    430.5f, 431.5f, 432.5f, 433.5f, 434.5f, 
-    435.5f, 436.5f, 437.5f, 438.5f, 439.5f, 
-    440.5f, 441.5f, 442.5f, 443.5f, 444.5f, 
-    445.5f, 446.5f, 447.5f, 448.5f, 449.5f, 
-    450.5f, 451.5f, 452.5f, 453.5f, 454.5f, 
-    455.5f, 456.5f, 457.5f, 458.5f, 459.5f, 
-    460.5f, 461.5f, 462.5f, 463.5f, 464.5f, 
-    465.5f, 466.5f, 467.5f, 468.5f, 469.5f, 
-    470.5f, 471.5f, 472.5f, 473.5f, 474.5f, 
-    475.5f, 476.5f, 477.5f, 478.5f, 479.5f, 
-    480.5f, 481.5f, 482.5f, 483.5f, 484.5f, 
-    485.5f, 486.5f, 487.5f, 488.5f, 489.5f, 
-    490.5f, 491.5f, 492.5f, 493.5f, 494.5f, 
-    495.5f, 496.5f, 497.5f, 498.5f, 499.5f, 
-    500.5f, 501.5f, 502.5f, 503.5f, 504.5f, 
-    505.5f, 506.5f, 507.5f, 508.5f, 509.5f, 
-    510.5f, 511.5f, 512.5f, 513.5f, 514.5f, 
-    515.5f, 516.5f, 517.5f, 518.5f, 519.5f, 
-    520.5f, 521.5f, 522.5f, 523.5f, 524.5f, 
-    525.5f, 526.5f, 527.5f, 528.5f, 529.5f, 
-    530.5f, 531.5f, 532.5f, 533.5f, 534.5f, 
-    535.5f, 536.5f, 537.5f, 538.5f, 539.5f, 
-    540.5f, 541.5f, 542.5f, 543.5f, 544.5f, 
-    545.5f, 546.5f, 547.5f, 548.5f, 549.5f, 
-    550.5f, 551.5f, 552.5f, 553.5f, 554.5f, 
-    555.5f, 556.5f, 557.5f, 558.5f, 559.5f, 
-    560.5f, 561.5f, 562.5f, 563.5f, 564.5f, 
-    565.5f, 566.5f, 567.5f, 568.5f, 569.5f, 
-    570.5f, 571.5f, 572.5f, 573.5f, 574.5f, 
-    575.5f, 576.5f, 577.5f, 578.5f, 579.5f, 
-    580.5f, 581.5f, 582.5f, 583.5f, 584.5f, 
-    585.5f, 586.5f, 587.5f, 588.5f, 589.5f, 
-    590.5f, 591.5f, 592.5f, 593.5f, 594.5f, 
-    595.5f, 596.5f, 597.5f, 598.5f, 599.5f"
-
diff --git a/graphics/AtlantisJava/configuration/rpsplt_hec.csv b/graphics/AtlantisJava/configuration/rpsplt_hec.csv
deleted file mode 100644
index 0b1285de75ed..000000000000
--- a/graphics/AtlantisJava/configuration/rpsplt_hec.csv
+++ /dev/null
@@ -1,329 +0,0 @@
-# Real Pulse Shape Plots Lookup Table values for HEC calorimeter
-
-
-# HEC lookup table, amplitude values
-HEC_AMPLITUDE
-"0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0.000101187f,  0.00664058f,  0.00527695f,  0.0002041f,  
-0.000215028f,  0.000293915f,  0.000490323f,  0.000903528f,  0.00170435f,  
-0.00314031f,  0.00552285f,  0.00920343f,  0.0145539f,  0.0219273f,  
-0.0316359f,  0.043942f,  0.059033f,  0.0770143f,  0.0978915f,  
-0.121549f,  0.147763f,  0.17623f,  0.206609f,  0.238601f,  
-0.272f,  0.306696f,  0.342649f,  0.379813f,  0.418056f,  
-0.457117f,  0.496607f,  0.536044f,  0.57493f,  0.612812f,  
-0.649334f,  0.684243f,  0.717392f,  0.748708f,  0.778165f,  
-0.805768f,  0.831539f,  0.85551f,  0.877704f,  0.898131f,  
-0.916774f,  0.933594f,  0.948547f,  0.961595f,  0.972719f,  
-0.98191f,  0.989184f,  0.994564f,  0.998103f,  0.99988f,  
-1f,  0.998581f,  0.995722f,  0.991483f,  0.985877f,  
-0.978879f,  0.970462f,  0.960624f,  0.949425f,  0.936981f,  
-0.92346f,  0.909059f,  0.893975f,  0.878385f,  0.862425f,  
-0.846174f,  0.829654f,  0.812831f,  0.795626f,  0.777953f,  
-0.759737f,  0.740952f,  0.721636f,  0.701896f,  0.681887f,  
-0.661787f,  0.64177f,  0.621975f,  0.602503f,  0.583422f,  
-0.564766f,  0.54655f,  0.528765f,  0.511376f,  0.494318f,  
-0.477505f,  0.460853f,  0.444298f,  0.427826f,  0.411478f,  
-0.395336f,  0.379494f,  0.364017f,  0.348923f,  0.334176f,  
-0.319715f,  0.305481f,  0.291443f,  0.277605f,  0.263994f,  
-0.250654f,  0.237625f,  0.224942f,  0.21263f,  0.200696f,  
-0.189132f,  0.177913f,  0.166995f,  0.156325f,  0.145848f,  
-0.135522f,  0.125326f,  0.115279f,  0.105427f,  0.0958465f,  
-0.0866154f,  0.0777954f,  0.0694189f,  0.0614767f,  0.0539207f,  
-0.0466707f,  0.0396293f,  0.0327093f,  0.0258526f,  0.0190475f,  
-0.0123301f,  0.00576636f,  -0.000577978f,  -0.00665906f,  -0.0124708f,  
--0.0180326f,  -0.023372f,  -0.0285029f,  -0.0334147f,  -0.0380814f,  
--0.0424744f,  -0.0465814f,  -0.0504199f,  -0.0540364f,  -0.0574984f,  
--0.060883f,  -0.0642531f,  -0.06764f,  -0.0710355f,  -0.0743926f,  
--0.0776445f,  -0.0807294f,  -0.0836115f,  -0.0862943f,  -0.0888135f,  
--0.091227f,  -0.0935885f,  -0.0959315f,  -0.0982592f,  -0.100547f,  
--0.102752f,  -0.104836f,  -0.106781f,  -0.108595f,  -0.110316f,  
--0.112001f,  -0.113707f,  -0.115471f,  -0.117302f,  -0.119178f,  
--0.121058f,  -0.122894f,  -0.124646f,  -0.126288f,  -0.127819f,  
--0.129262f,  -0.130658f,  -0.132056f,  -0.133495f,  -0.134988f,  
--0.136514f,  -0.138027f,  -0.139477f,  -0.140829f,  -0.142082f,  
--0.143263f,  -0.144417f,  -0.145579f,  -0.146758f,  -0.147944f,  
--0.149106f,  -0.150203f,  -0.151199f,  -0.152063f,  -0.152785f,  
--0.153383f,  -0.153917f,  -0.154483f,  -0.155185f,  -0.156098f,  
--0.157233f,  -0.158526f,  -0.159851f,  -0.161065f,  -0.162059f,  
--0.162781f,  -0.163253f,  -0.163543f,  -0.163732f,  -0.163889f,  
--0.164059f,  -0.164269f,  -0.164541f,  -0.1649f,  -0.165369f,  
--0.165963f,  -0.166671f,  -0.167457f,  -0.168261f,  -0.169021f,  
--0.169687f,  -0.170237f,  -0.170686f,  -0.171074f,  -0.171449f,  
--0.171844f,  -0.172271f,  -0.172716f,  -0.173152f,  -0.173545f,  
--0.173864f,  -0.174091f,  -0.174214f,  -0.174244f,  -0.174208f,  
--0.174145f,  -0.174091f,  -0.174075f,  -0.174109f,  -0.174199f,  
--0.174347f,  -0.174556f,  -0.174822f,  -0.175124f,  -0.175427f,  
--0.175685f,  -0.175868f,  -0.175971f,  -0.176023f,  -0.17607f,  
--0.17616f,  -0.176313f,  -0.176514f,  -0.176721f,  -0.176879f,  
--0.176951f,  -0.176934f,  -0.176855f,  -0.17676f,  -0.176689f,  
--0.176655f,  -0.176648f,  -0.176647f,  -0.176639f,  -0.176628f,  
--0.176632f,  -0.176673f,  -0.176754f,  -0.176855f,  -0.176936f,  
--0.176952f,  -0.176875f,  -0.176706f,  -0.17647f,  -0.176211f,  
--0.175972f,  -0.175794f,  -0.175711f,  -0.175755f,  -0.175946f,  
--0.176285f,  -0.176742f,  -0.177258f,  -0.177757f,  -0.17817f,  
--0.17845f,  -0.178579f,  -0.178566f,  -0.178437f,  -0.178227f,  
--0.177974f,  -0.177712f,  -0.177464f,  -0.177238f,  -0.177031f,  
--0.176835f,  -0.176652f,  -0.176495f,  -0.176386f,  -0.176349f,  
--0.176395f,  -0.176518f,  -0.176694f,  -0.176894f,  -0.177086f,  
--0.177248f,  -0.177368f,  -0.177442f,  -0.177475f,  -0.177466f,  
--0.177409f,  -0.177287f,  -0.177085f,  -0.176805f,  -0.176481f,  
--0.176177f,  -0.175968f,  -0.175917f,  -0.176041f,  -0.176305f,  
--0.176639f,  -0.176956f,  -0.177192f,  -0.177313f,  -0.177318f,  
--0.17723f,  -0.177084f,  -0.176912f,  -0.176746f,  -0.176605f,  
--0.176497f,  -0.176412f,  -0.176339f,  -0.176273f,  -0.176226f,  
--0.176224f,  -0.176294f,  -0.176444f,  -0.176653f,  -0.176876f,  
--0.177061f,  -0.17717f,  -0.177187f,  -0.177116f,  -0.176969f,  
--0.17676f,  -0.176495f,  -0.176185f,  -0.175846f,  -0.175501f,  
--0.175181f,  -0.174914f,  -0.174722f,  -0.174603f,  -0.174535f,  
--0.174484f,  -0.174419f,  -0.174334f,  -0.174257f,  -0.174241f,  
--0.174339f,  -0.174568f,  -0.174897f,  -0.175247f,  -0.175527f,  
--0.175668f,  -0.175649f,  -0.175504f,  -0.175302f,  -0.175115f,  
--0.17499f,  -0.174941f,  -0.174946f,  -0.174966f,  -0.174962f,  
--0.174908f,  -0.174796f,  -0.174638f,  -0.174464f,  -0.174308f,  
--0.174196f,  -0.174135f,  -0.174112f,  -0.174105f,  -0.174099f,  
--0.1741f,  -0.174129f,  -0.174211f,  -0.174347f,  -0.174508f,  
--0.174639f,  -0.174693f,  -0.174653f,  -0.174547f,  -0.17444f,  
--0.174397f,  -0.17446f,  -0.174621f,  -0.174834f,  -0.175026f,  
--0.175129f,  -0.175111f,  -0.174973f,  -0.174755f,  -0.174506f,  
--0.174263f,  -0.174042f,  -0.173832f,  -0.173617f,  -0.173383f,  
--0.173135f,  -0.172888f,  -0.172667f,  -0.172506f,  -0.172432f,  
--0.172467f,  -0.172611f,  -0.172834f,  -0.173088f,  -0.173314f,  
--0.173464f,  -0.173523f,  -0.173511f,  -0.173469f,  -0.17344f,  
--0.173454f,  -0.173512f,  -0.173588f,  -0.173645f,  -0.173641f,  
--0.173557f,  -0.173396f,  -0.173188f,  -0.172974f,  -0.172789f,  
--0.172649f,  -0.172556f,  -0.172492f,  -0.17244f,  -0.172391f,  
--0.172346f,  -0.17231f,  -0.172284f,  -0.172267f,  -0.172255f,  
--0.172249f,  -0.172253f,  -0.172273f,  -0.17231f,  -0.172352f,  
--0.172388f,  -0.172401f,  -0.172379f,  -0.172311f,  -0.172176f,  
--0.171942f,  -0.171573f,  -0.17104f,  -0.17034f,  -0.169499f,  
--0.168562f,  -0.16757f,  -0.166543f,  -0.165477f,  -0.164352f,  
--0.163143f,  -0.161835f,  -0.160427f,  -0.158922f,  -0.157329f,  
--0.155643f,  -0.153858f,  -0.15196f,  -0.149937f,  -0.147782f,  
--0.145494f,  -0.143082f,  -0.14057f,  -0.137992f,  -0.135393f,  
--0.132824f,  -0.130331f,  -0.127944f,  -0.12568f,  -0.123532f,  
--0.121472f,  -0.119454f,  -0.117412f,  -0.115278f,  -0.112998f,  
--0.110548f,  -0.107945f,  -0.105239f,  -0.102501f,  -0.0997942f,  
--0.0971684f,  -0.0946474f,  -0.0922345f,  -0.0899178f,  -0.087684f,  
--0.0855244f,  -0.0834364f,  -0.0814211f,  -0.0794707f,  -0.0775634f,  
--0.0756617f,  -0.0737202f,  -0.0717019f,  -0.0695945f,  -0.0674152f,  
--0.0652053f,  -0.0630127f,  -0.0608754f,  -0.0588116f,  -0.056822f,  
--0.0549011f,  -0.0530426f,  -0.0512422f,  -0.049497f,  -0.0478024f,  
--0.0461557f,  -0.0445622f,  -0.0430403f,  -0.0416186f,  -0.0403259f,  
--0.0391799f,  -0.0381777f,  -0.0372926f,  -0.0364776f,  -0.0356725f,  
--0.0348179f,  -0.0338654f,  -0.0327897f,  -0.0315966f,  -0.0303215f,  
--0.0290217f,  -0.0277614f,  -0.0265938f,  -0.0255459f,  -0.0246139f,  
--0.0237676f,  -0.0229666f,  -0.0221815f,  -0.0214062f,  -0.0206548f,  
--0.0199489f,  -0.0192999f,  -0.0186995f,  -0.0181225f,  -0.0175376f,  
--0.0169217f,  -0.0162671f,  -0.015582f,  -0.0148865f,  -0.0142068f,  
--0.013571f,  -0.0130013f,  -0.0125088f,  -0.0120878f,  -0.0117106f,  
--0.0113307f,  -0.010896f,  -0.0103706f,  -0.00975524f,  -0.00909709f,  
--0.00847957f,  -0.00799095f,  -0.00768947f,  -0.00757594f,  -0.00759465f,  
--0.007658f,  -0.00768306f,  -0.00761927f,  -0.00745677f,  -0.00721301f,  
--0.0069087f,  -0.00655204f,  -0.00613803f,  -0.00565728f,  -0.0051098f,  
--0.00451485f,  -0.00390879f,  -0.00333665f,  -0.00284016f,  -0.00244591f,  
--0.00216087f,  -0.00197292f,  -0.00185468f,  -0.00177376f,  -0.0017025f,  
--0.00162463f,  -0.00153632f,  -0.00144381f,  -0.00135502f,  -0.00127151f,  
--0.00118363f,  -0.00107486f,  -0.000933489f,  -0.000765153f,  -0.000595878f,  
--0.000462136f,  -0.000391149f,  -0.000381636f,  -0.00039948f,  -0.000392457f,  
--0.00031506f,  -0.000148614f,  9.0048e-05f,  0.00035786f,  0.000604245f,  
-0.000786303f,  0.000878787f,  0.000875978f,  0.000791694f,  0.000657695f,  
-0.00051893f,  0.000425818f,  0.000426074f,  0.000551054f,  0.000806885f,  
-0.00117476f,  0.00161695f,  0.00208652f,  0.00253376f,  0.00290882f,  
-0.00316028f,  0.00323814f,  0.00310475f,  0.00275044f,  0.00220837f,  
-0.00155712f,  0.000907431f,  0.000374364f,  4.94567e-05f,  -2.10426e-05f,  
-0.000152468f,  0.000507839f,  0.000947469f,  0.00136192f,  0.00165448f,  
-0.00176273f,  0.00167267f,  0.00141913f,  0.00107273f,  0.000722145f,  
-0.000454802f,  0.000340469f,  0.000418315f,  0.000688105f,  0.00110894f,  
-0.00160413f,  0.00207832f,  0.00244585f,  0.00265788f,  0.0027142f,  
-0.00265461f,  0.00253537f,  0.00240031f,  0.00226566f,  0.00212575f,  
-0.00197065f,  0.00180602f,  0.00166146f,  0.00158237f,  0.00160939f,  
-0.00175419f,  0.00198981f,  0.00225835f,  0.00249251f,  0.00264239f,  
-0.00268974f,  0.00264634f,  0.00253697f,  0.00238428f,  0.00220657f,  
-0.00202457f,  0.00187327f,  0.00179975f,  0.00184459f,  0.00201759f,  
-0.00228424f,  0.00257413f,  0.00280859f,  0.00293672f,  0.00295574f,  
-0.00290479f,  0.0028433f,  0.00282479f,  0.00288132f,  0.00302619f,  
-0.00326351f,  0.00359044f,  0.00398678f,  0.00440043f,  0.00474437f,  
-0.00491837f,  0.00484987f,  0.00453341f,  0.00404398f,  0.00351183f,  
-0.00306889f,  0.00279655f,  0.00270115f,  0.0027279f,  0.00280162f,  
-0.00286887f,  0.00291904f,  0.00297615f,  0.00307301f,  0.00322684f,  
-0.00343021f,  0.00365863f,  0.003885f,  0.00409031f,  0.00426691f,  
-0.00441451f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f,  
-0f,  0f,  0f,  0f,  0f"
-
-
-# HEC lookup table, time values
-HEC_TIME
-"0f,  1.03959f,  2.07917f,  3.11876f,  4.15835f,  
-5.19794f,  6.23752f,  7.27711f,  8.3167f,  9.35629f,  
-10.3959f,  11.4355f,  12.475f,  13.5146f,  14.5542f,  
-15.5938f,  16.6334f,  17.673f,  18.7126f,  19.7522f,  
-20.7917f,  21.8313f,  22.8709f,  23.9105f,  24.9501f,  
-25.9897f,  27.0293f,  28.0689f,  29.1084f,  30.148f,  
-31.1876f,  32.2272f,  33.2668f,  34.3064f,  35.346f,  
-36.3856f,  37.4251f,  38.4647f,  39.5043f,  40.5439f,  
-41.5835f,  42.6231f,  43.6627f,  44.7023f,  45.7418f,  
-46.7814f,  47.821f,  48.8606f,  49.9002f,  50.9398f,  
-51.9794f,  53.019f,  54.0585f,  55.0981f,  56.1377f,  
-57.1773f,  58.2169f,  59.2565f,  60.2961f,  61.3357f,  
-62.3752f,  63.4148f,  64.4544f,  65.494f,  66.5336f,  
-67.5732f,  68.6128f,  69.6524f,  70.6919f,  71.7315f,  
-72.7711f,  73.8107f,  74.8503f,  75.8899f,  76.9295f,  
-77.9691f,  79.0086f,  80.0482f,  81.0878f,  82.1274f,  
-83.167f,  84.2066f,  85.2462f,  86.2858f,  87.3253f,  
-88.3649f,  89.4045f,  90.4441f,  91.4837f,  92.5233f,  
-93.5629f,  94.6025f,  95.642f,  96.6816f,  97.7212f,  
-98.7608f,  99.8004f,  100.84f,  101.88f,  102.919f,  
-103.959f,  104.998f,  106.038f,  107.078f,  108.117f,  
-109.157f,  110.196f,  111.236f,  112.275f,  113.315f,  
-114.355f,  115.394f,  116.434f,  117.473f,  118.513f,  
-119.553f,  120.592f,  121.632f,  122.671f,  123.711f,  
-124.75f,  125.79f,  126.83f,  127.869f,  128.909f,  
-129.948f,  130.988f,  132.028f,  133.067f,  134.107f,  
-135.146f,  136.186f,  137.226f,  138.265f,  139.305f,  
-140.344f,  141.384f,  142.423f,  143.463f,  144.503f,  
-145.542f,  146.582f,  147.621f,  148.661f,  149.701f,  
-150.74f,  151.78f,  152.819f,  153.859f,  154.899f,  
-155.938f,  156.978f,  158.017f,  159.057f,  160.096f,  
-161.136f,  162.176f,  163.215f,  164.255f,  165.294f,  
-166.334f,  167.374f,  168.413f,  169.453f,  170.492f,  
-171.532f,  172.572f,  173.611f,  174.651f,  175.69f,  
-176.73f,  177.769f,  178.809f,  179.849f,  180.888f,  
-181.928f,  182.967f,  184.007f,  185.047f,  186.086f,  
-187.126f,  188.165f,  189.205f,  190.245f,  191.284f,  
-192.324f,  193.363f,  194.403f,  195.442f,  196.482f,  
-197.522f,  198.561f,  199.601f,  200.64f,  201.68f,  
-202.72f,  203.759f,  204.799f,  205.838f,  206.878f,  
-207.917f,  208.957f,  209.997f,  211.036f,  212.076f,  
-213.115f,  214.155f,  215.195f,  216.234f,  217.274f,  
-218.313f,  219.353f,  220.393f,  221.432f,  222.472f,  
-223.511f,  224.551f,  225.59f,  226.63f,  227.67f,  
-228.709f,  229.749f,  230.788f,  231.828f,  232.868f,  
-233.907f,  234.947f,  235.986f,  237.026f,  238.066f,  
-239.105f,  240.145f,  241.184f,  242.224f,  243.263f,  
-244.303f,  245.343f,  246.382f,  247.422f,  248.461f,  
-249.501f,  250.541f,  251.58f,  252.62f,  253.659f,  
-254.699f,  255.739f,  256.778f,  257.818f,  258.857f,  
-259.897f,  260.936f,  261.976f,  263.016f,  264.055f,  
-265.095f,  266.134f,  267.174f,  268.214f,  269.253f,  
-270.293f,  271.332f,  272.372f,  273.412f,  274.451f,  
-275.491f,  276.53f,  277.57f,  278.609f,  279.649f,  
-280.689f,  281.728f,  282.768f,  283.807f,  284.847f,  
-285.887f,  286.926f,  287.966f,  289.005f,  290.045f,  
-291.084f,  292.124f,  293.164f,  294.203f,  295.243f,  
-296.282f,  297.322f,  298.362f,  299.401f,  300.441f,  
-301.48f,  302.52f,  303.56f,  304.599f,  305.639f,  
-306.678f,  307.718f,  308.757f,  309.797f,  310.837f,  
-311.876f,  312.916f,  313.955f,  314.995f,  316.035f,  
-317.074f,  318.114f,  319.153f,  320.193f,  321.233f,  
-322.272f,  323.312f,  324.351f,  325.391f,  326.43f,  
-327.47f,  328.51f,  329.549f,  330.589f,  331.628f,  
-332.668f,  333.708f,  334.747f,  335.787f,  336.826f,  
-337.866f,  338.906f,  339.945f,  340.985f,  342.024f,  
-343.064f,  344.103f,  345.143f,  346.183f,  347.222f,  
-348.262f,  349.301f,  350.341f,  351.381f,  352.42f,  
-353.46f,  354.499f,  355.539f,  356.579f,  357.618f,  
-358.658f,  359.697f,  360.737f,  361.776f,  362.816f,  
-363.856f,  364.895f,  365.935f,  366.974f,  368.014f,  
-369.054f,  370.093f,  371.133f,  372.172f,  373.212f,  
-374.251f,  375.291f,  376.331f,  377.37f,  378.41f,  
-379.449f,  380.489f,  381.529f,  382.568f,  383.608f,  
-384.647f,  385.687f,  386.727f,  387.766f,  388.806f,  
-389.845f,  390.885f,  391.924f,  392.964f,  394.004f,  
-395.043f,  396.083f,  397.122f,  398.162f,  399.202f,  
-400.241f,  401.281f,  402.32f,  403.36f,  404.4f,  
-405.439f,  406.479f,  407.518f,  408.558f,  409.597f,  
-410.637f,  411.677f,  412.716f,  413.756f,  414.795f,  
-415.835f,  416.875f,  417.914f,  418.954f,  419.993f,  
-421.033f,  422.073f,  423.112f,  424.152f,  425.191f,  
-426.231f,  427.27f,  428.31f,  429.35f,  430.389f,  
-431.429f,  432.468f,  433.508f,  434.548f,  435.587f,  
-436.627f,  437.666f,  438.706f,  439.746f,  440.785f,  
-441.825f,  442.864f,  443.904f,  444.943f,  445.983f,  
-447.023f,  448.062f,  449.102f,  450.141f,  451.181f,  
-452.221f,  453.26f,  454.3f,  455.339f,  456.379f,  
-457.418f,  458.458f,  459.498f,  460.537f,  461.577f,  
-462.616f,  463.656f,  464.696f,  465.735f,  466.775f,  
-467.814f,  468.854f,  469.894f,  470.933f,  471.973f,  
-473.012f,  474.052f,  475.091f,  476.131f,  477.171f,  
-478.21f,  479.25f,  480.289f,  481.329f,  482.369f,  
-483.408f,  484.448f,  485.487f,  486.527f,  487.567f,  
-488.606f,  489.646f,  490.685f,  491.725f,  492.764f,  
-493.804f,  494.844f,  495.883f,  496.923f,  497.962f,  
-499.002f,  500.042f,  501.081f,  502.121f,  503.16f,  
-504.2f,  505.24f,  506.279f,  507.319f,  508.358f,  
-509.398f,  510.437f,  511.477f,  512.517f,  513.556f,  
-514.596f,  515.635f,  516.675f,  517.715f,  518.754f,  
-519.794f,  520.833f,  521.873f,  522.913f,  523.952f,  
-524.992f,  526.031f,  527.071f,  528.11f,  529.15f,  
-530.19f,  531.229f,  532.269f,  533.308f,  534.348f,  
-535.388f,  536.427f,  537.467f,  538.506f,  539.546f,  
-540.585f,  541.625f,  542.665f,  543.704f,  544.744f,  
-545.783f,  546.823f,  547.863f,  548.902f,  549.942f,  
-550.981f,  552.021f,  553.061f,  554.1f,  555.14f,  
-556.179f,  557.219f,  558.258f,  559.298f,  560.338f,  
-561.377f,  562.417f,  563.456f,  564.496f,  565.536f,  
-566.575f,  567.615f,  568.654f,  569.694f,  570.734f,  
-571.773f,  572.813f,  573.852f,  574.892f,  575.931f,  
-576.971f,  578.011f,  579.05f,  580.09f,  581.129f,  
-582.169f,  583.209f,  584.248f,  585.288f,  586.327f,  
-587.367f,  588.407f,  589.446f,  590.486f,  591.525f,  
-592.565f,  593.604f,  594.644f,  595.684f,  596.723f,  
-597.763f,  598.802f,  599.842f,  600.882f,  601.921f,  
-602.961f,  604f,  605.04f,  606.08f,  607.119f,  
-608.159f,  609.198f,  610.238f,  611.277f,  612.317f,  
-613.357f,  614.396f,  615.436f,  616.475f,  617.515f,  
-618.555f,  619.594f,  620.634f,  621.673f,  622.713f,  
-623.752f,  624.792f,  625.832f,  626.871f,  627.911f,  
-628.95f,  629.99f,  631.03f,  632.069f,  633.109f,  
-634.148f,  635.188f,  636.228f,  637.267f,  638.307f,  
-639.346f,  640.386f,  641.425f,  642.465f,  643.505f,  
-644.544f,  645.584f,  646.623f,  647.663f,  648.703f,  
-649.742f,  650.782f,  651.821f,  652.861f,  653.901f,  
-654.94f,  655.98f,  657.019f,  658.059f,  659.098f,  
-660.138f,  661.178f,  662.217f,  663.257f,  664.296f,  
-665.336f,  666.376f,  667.415f,  668.455f,  669.494f,  
-670.534f,  671.574f,  672.613f,  673.653f,  674.692f,  
-675.732f,  676.771f,  677.811f,  678.851f,  679.89f,  
-680.93f,  681.969f,  683.009f,  684.049f,  685.088f,  
-686.128f,  687.167f,  688.207f,  689.247f,  690.286f,  
-691.326f,  692.365f,  693.405f,  694.444f,  695.484f,  
-696.524f,  697.563f,  698.603f,  699.642f,  700.682f,  
-701.722f,  702.761f,  703.801f,  704.84f,  705.88f,  
-706.919f,  707.959f,  708.999f,  710.038f,  711.078f,  
-712.117f,  713.157f,  714.197f,  715.236f,  716.276f,  
-717.315f,  718.355f,  719.395f,  720.434f,  721.474f,  
-722.513f,  723.553f,  724.592f,  725.632f,  726.672f,  
-727.711f,  728.751f,  729.79f,  730.83f,  731.87f,  
-732.909f,  733.949f,  734.988f,  736.028f,  737.068f,  
-738.107f,  739.147f,  740.186f,  741.226f,  742.265f,  
-743.305f,  744.345f,  745.384f,  746.424f,  747.463f,  
-748.503f,  749.543f,  750.582f,  751.622f,  752.661f,  
-753.701f,  754.741f,  755.78f,  756.82f,  757.859f,  
-758.899f,  759.938f,  760.978f,  762.018f,  763.057f,  
-764.097f,  765.136f,  766.176f,  767.216f,  768.255f,  
-769.295f,  770.334f,  771.374f,  772.414f,  773.453f,  
-774.493f,  775.532f,  776.572f,  777.611f,  778.651f,  
-779.691f,  780.73f,  781.77f,  782.809f,  783.849f,  
-784.889f,  785.928f,  786.968f,  788.007f,  789.047f,  
-790.086f,  791.126f,  792.166f,  793.205f,  794.245f,  
-795.284f,  796.324f,  797.364f,  798.403f,  799.443f,  
-800.482f,  801.522f,  802.562f,  803.601f,  804.641f,  
-805.68f,  806.72f,  807.759f,  808.799f,  809.839f,  
-810.878f,  811.918f,  812.957f,  813.997f,  815.037f,  
-816.076f,  817.116f,  818.155f,  819.195f,  820.235f,  
-821.274f,  822.314f,  823.353f,  824.393f,  825.432f,  
-826.472f,  827.512f,  828.551f,  829.591f,  830.63f"  
diff --git a/graphics/AtlantisJava/configuration/rpsplt_tile.csv b/graphics/AtlantisJava/configuration/rpsplt_tile.csv
deleted file mode 100644
index 213666c43c9f..000000000000
--- a/graphics/AtlantisJava/configuration/rpsplt_tile.csv
+++ /dev/null
@@ -1,169 +0,0 @@
-# Real Pulse Shape Plots Lookup Table values for TILE calorimeter
-
-# TILE, time values
-TILE_TIME
-"-75.5f,  -75f,  -74.5f,  -74f,  -73.5f,  
--73f,  -72.5f,  -72f,  -71.5f,  -71f,  
--70.5f,  -70f,  -69.5f,  -69f,  -68.5f,  
--68f,  -67.5f,  -67f,  -66.5f,  -66f,  
--65.5f,  -65f,  -64.5f,  -64f,  -63.5f,  
--63f,  -62.5f,  -62f,  -61.5f,  -61f,  
--60.5f,  -60f,  -59.5f,  -59f,  -58.5f,  
--58f,  -57.5f,  -57f,  -56.5f,  -56f,  
--55.5f,  -55f,  -54.5f,  -54f,  -53.5f,  
--53f,  -52.5f,  -52f,  -51.5f,  -51f,  
--50.5f,  -50f,  -49.5f,  -49f,  -48.5f,  
--48f,  -47.5f,  -47f,  -46.5f,  -46f,  
--45.5f,  -45f,  -44.5f,  -44f,  -43.5f,  
--43f,  -42.5f,  -42f,  -41.5f,  -41f,  
--40.5f,  -40f,  -39.5f,  -39f,  -38.5f,  
--38f,  -37.5f,  -37f,  -36.5f,  -36f,  
--35.5f,  -35f,  -34.5f,  -34f,  -33.5f,  
--33f,  -32.5f,  -32f,  -31.5f,  -31f,  
--30.5f,  -30f,  -29.5f,  -29f,  -28.5f,  
--28f,  -27.5f,  -27f,  -26.5f,  -26f,  
--25.5f,  -25f,  -24.5f,  -24f,  -23.5f,  
--23f,  -22.5f,  -22f,  -21.5f,  -21f,  
--20.5f,  -20f,  -19.5f,  -19f,  -18.5f,  
--18f,  -17.5f,  -17f,  -16.5f,  -16f,  
--15.5f,  -15f,  -14.5f,  -14f,  -13.5f,  
--13f,  -12.5f,  -12f,  -11.5f,  -11f,  
--10.5f,  -10f,  -9.5f,  -9f,  -8.5f,  
--8f,  -7.5f,  -7f,  -6.5f,  -6f,  
--5.5f,  -5f,  -4.5f,  -4f,  -3.5f,  
--3f,  -2.5f,  -2f,  -1.5f,  -1f,  
--0.5f,  0f,  0.5f,  1f,  1.5f,  
-2f,  2.5f,  3f,  3.5f,  4f,  
-4.5f,  5f,  5.5f,  6f,  6.5f,  
-7f,  7.5f,  8f,  8.5f,  9f,  
-9.5f,  10f,  10.5f,  11f,  11.5f,  
-12f,  12.5f,  13f,  13.5f,  14f,  
-14.5f,  15f,  15.5f,  16f,  16.5f,  
-17f,  17.5f,  18f,  18.5f,  19f,  
-19.5f,  20f,  20.5f,  21f,  21.5f,  
-22f,  22.5f,  23f,  23.5f,  24f,  
-24.5f,  25f,  25.5f,  26f,  26.5f,  
-27f,  27.5f,  28f,  28.5f,  29f,  
-29.5f,  30f,  30.5f,  31f,  31.5f,  
-32f,  32.5f,  33f,  33.5f,  34f,  
-34.5f,  35f,  35.5f,  36f,  36.5f,  
-37f,  37.5f,  38f,  38.5f,  39f,  
-39.5f,  40f,  40.5f,  41f,  41.5f,  
-42f,  42.5f,  43f,  43.5f,  44f,  
-44.5f,  45f,  45.5f,  46f,  46.5f,  
-47f,  47.5f,  48f,  48.5f,  49f,  
-49.5f,  50f,  50.5f,  51f,  51.5f,  
-52f,  52.5f,  53f,  53.5f,  54f,  
-54.5f,  55f,  55.5f,  56f,  56.5f,  
-57f,  57.5f,  58f,  58.5f,  59f,  
-59.5f,  60f,  60.5f,  61f,  61.5f,  
-62f,  62.5f,  63f,  63.5f,  64f,  
-64.5f,  65f,  65.5f,  66f,  66.5f,  
-67f,  67.5f,  68f,  68.5f,  69f,  
-69.5f,  70f,  70.5f,  71f,  71.5f,  
-72f,  72.5f,  73f,  73.5f,  74f,  
-74.5f,  75f,  75.5f,  76f,  76.5f,  
-77f,  77.5f,  78f,  78.5f,  79f,  
-79.5f,  80f,  80.5f,  81f,  81.5f,  
-82f,  82.5f,  83f,  83.5f,  84f,  
-84.5f,  85f,  85.5f,  86f,  86.5f,  
-87f,  87.5f,  88f,  88.5f,  89f,  
-89.5f,  90f,  90.5f,  91f,  91.5f,  
-92f,  92.5f,  93f,  93.5f,  94f,  
-94.5f,  95f,  95.5f,  96f,  96.5f,  
-97f,  97.5f,  98f,  98.5f,  99f,  
-99.5f,  100f,  100.5f,  101f,  101.5f,  
-102f,  102.5f,  103f,  103.5f,  104f,  
-104.5f,  105f,  105.5f,  106f,  106.5f,  
-107f,  107.5f,  108f,  108.5f,  109f,  
-109.5f,  110f,  110.5f,  111f,  111.5f,  
-112f,  112.5f,  113f,  113.5f,  114f,  
-114.5f,  115f,  115.5f,  116f,  116.5f,  
-117f,  117.5f,  118f,  118.5f,  119f,  
-119.5f,  120f,  120.5f,  121f,  121.5f,  
-122f,  122.5f,  123f,  123.5f,  124f,  
-124.5f"
-
-# TILE, amplitude values
-TILE_AMPLITUDE
-"0f,  2.304e-05f,  5.178e-05f,  8.592e-05f,  0.00012515f,  
-0.00016918f,  0.0002177f,  0.00027043f,  0.00032705f,  0.00038728f,  
-0.00045081f,  0.00051733f,  0.00058656f,  0.00065819f,  0.00073193f,  
-0.00080746f,  0.0008845f,  0.00096275f,  0.0010419f,  0.00112166f,  
-0.00120172f,  0.00128179f,  0.00136157f,  0.00144076f,  0.00151905f,  
-0.00159642f,  0.0016754f,  0.00176001f,  0.00185428f,  0.00196225f,  
-0.00208795f,  0.00223542f,  0.00240868f,  0.00261177f,  0.00284873f,  
-0.00312358f,  0.00344037f,  0.00380312f,  0.00421586f,  0.00468264f,  
-0.00520748f,  0.00579479f,  0.00645263f,  0.00719117f,  0.00802059f,  
-0.00895106f,  0.00999278f,  0.0111559f,  0.0124507f,  0.0138872f,  
-0.0154757f,  0.0172264f,  0.0191494f,  0.0212549f,  0.0235531f,  
-0.0260541f,  0.0287667f,  0.0316991f,  0.0348593f,  0.0382556f,  
-0.041896f,  0.0457887f,  0.0499419f,  0.0543637f,  0.0590621f,  
-0.0640455f,  0.0693218f,  0.0748993f,  0.0807861f,  0.0869903f,  
-0.09352f,  0.100383f,  0.107581f,  0.115115f,  0.122983f,  
-0.131184f,  0.139719f,  0.148586f,  0.157786f,  0.167316f,  
-0.177177f,  0.187369f,  0.19789f,  0.208739f,  0.219917f,  
-0.231423f,  0.243248f,  0.255385f,  0.267822f,  0.28055f,  
-0.29356f,  0.306842f,  0.320385f,  0.334181f,  0.348219f,  
-0.362489f,  0.376982f,  0.391688f,  0.406597f,  0.421699f,  
-0.436986f,  0.452445f,  0.46806f,  0.483808f,  0.499668f,  
-0.515617f,  0.531635f,  0.547698f,  0.563786f,  0.579876f,  
-0.595946f,  0.611975f,  0.62794f,  0.64382f,  0.659592f,  
-0.675236f,  0.69073f,  0.706053f,  0.721186f,  0.736109f,  
-0.7508f,  0.76524f,  0.779408f,  0.793285f,  0.806849f,  
-0.82008f,  0.832959f,  0.845464f,  0.857576f,  0.869274f,  
-0.880538f,  0.891349f,  0.901693f,  0.911564f,  0.920954f,  
-0.929854f,  0.938257f,  0.946156f,  0.953541f,  0.960406f,  
-0.966742f,  0.972542f,  0.977798f,  0.982501f,  0.986645f,  
-0.990222f,  0.993234f,  0.995685f,  0.997581f,  0.998929f,  
-0.999733f,  1f,  0.999735f,  0.998944f,  0.997632f,  
-0.995806f,  0.99347f,  0.99063f,  0.987293f,  0.983464f,  
-0.979148f,  0.974352f,  0.969089f,  0.963376f,  0.957231f,  
-0.95067f,  0.943711f,  0.936371f,  0.928666f,  0.920615f,  
-0.912235f,  0.903542f,  0.894553f,  0.885287f,  0.875759f,  
-0.865988f,  0.855985f,  0.845763f,  0.835332f,  0.824704f,  
-0.81389f,  0.8029f,  0.791746f,  0.780439f,  0.768991f,  
-0.757412f,  0.745713f,  0.733906f,  0.722002f,  0.710012f,  
-0.697947f,  0.685818f,  0.673635f,  0.66141f,  0.649153f,  
-0.636873f,  0.624581f,  0.612288f,  0.600004f,  0.587739f,  
-0.575503f,  0.563307f,  0.551161f,  0.539076f,  0.527062f,  
-0.515129f,  0.503286f,  0.491542f,  0.479906f,  0.468386f,  
-0.456991f,  0.445729f,  0.434609f,  0.42364f,  0.412831f,  
-0.402189f,  0.391724f,  0.381444f,  0.371358f,  0.361474f,  
-0.351802f,  0.342348f,  0.333115f,  0.3241f,  0.315301f,  
-0.306715f,  0.298339f,  0.290172f,  0.282211f,  0.274453f,  
-0.266897f,  0.259539f,  0.252377f,  0.245409f,  0.238632f,  
-0.232044f,  0.225642f,  0.219421f,  0.213379f,  0.207511f,  
-0.201813f,  0.196283f,  0.190915f,  0.185707f,  0.180655f,  
-0.175755f,  0.171003f,  0.166395f,  0.161928f,  0.157598f,  
-0.153402f,  0.149335f,  0.145394f,  0.141575f,  0.137874f,  
-0.134288f,  0.130813f,  0.127445f,  0.12418f,  0.121015f,  
-0.117947f,  0.11497f,  0.112082f,  0.109278f,  0.106556f,  
-0.103911f,  0.10134f,  0.0988427f,  0.0964156f,  0.0940569f,  
-0.0917646f,  0.0895367f,  0.0873709f,  0.0852652f,  0.0832176f,  
-0.0812259f,  0.0792881f,  0.0774021f,  0.0755657f,  0.0737769f,  
-0.0720337f,  0.0703338f,  0.0686753f,  0.0670561f,  0.065474f,  
-0.0639269f,  0.0624129f,  0.0609298f,  0.0594755f,  0.0580479f,  
-0.0566449f,  0.0552645f,  0.0539046f,  0.052563f,  0.0512377f,  
-0.0499268f,  0.0486296f,  0.0473466f,  0.0460778f,  0.0448235f,  
-0.0435841f,  0.0423598f,  0.0411508f,  0.0399573f,  0.0387798f,  
-0.0376183f,  0.0364732f,  0.0353447f,  0.0342331f,  0.0331386f,  
-0.0320615f,  0.0310021f,  0.0299605f,  0.0289372f,  0.0279322f,  
-0.0269459f,  0.0259786f,  0.0250305f,  0.0241018f,  0.0231928f,  
-0.0223038f,  0.021435f,  0.0205867f,  0.0197591f,  0.0189525f,  
-0.0181671f,  0.017403f,  0.01666f,  0.0159379f,  0.0152367f,  
-0.0145562f,  0.0138962f,  0.0132567f,  0.0126374f,  0.0120383f,  
-0.0114592f,  0.0109f,  0.0103606f,  0.00984081f,  0.00934049f,  
-0.00885952f,  0.00839776f,  0.00795509f,  0.00753137f,  0.00712647f,  
-0.00674024f,  0.00637256f,  0.0060233f,  0.00569231f,  0.00537947f,  
-0.00508463f,  0.00480767f,  0.00454845f,  0.00430684f,  0.0040827f,  
-0.00387587f,  0.00368583f,  0.00351191f,  0.00335339f,  0.0032096f,  
-0.00307982f,  0.00296336f,  0.00285953f,  0.00276764f,  0.00268698f,  
-0.00261686f,  0.00255658f,  0.00250545f,  0.00246277f,  0.00242785f,  
-0.00239998f,  0.00237849f,  0.00236265f,  0.00235179f,  0.00234521f,  
-0.0023422f,  0.00234208f,  0.00234415f,  0.0023477f,  0.00235206f,  
-0.00235651f,  0.00236036f,  0.00236293f,  0.0023635f,  0.00236139f,  
-0.00235594f,  0.00234693f,  0.00233436f,  0.00231825f,  0.00229862f,  
-0.00227549f,  0.00224886f,  0.00221876f,  0.0021852f,  0.00214819f,  
-0.00210775f,  0.0020639f,  0.00201666f,  0.00196603f,  0.00191204f,  
-0.0018547f"
diff --git a/graphics/AtlantisJava/events/event.dtd b/graphics/AtlantisJava/events/event.dtd
deleted file mode 100755
index e9937b30976e..000000000000
--- a/graphics/AtlantisJava/events/event.dtd
+++ /dev/null
@@ -1,506 +0,0 @@
-<!-- -kine element is alias to barcode resp. to new-style truth association
-        using barcodes + numBarcodes (1 hits - to more tracks) at hits
-        (2006/08), kine should be removed completely on turn 2006/2007
--->     
-
-<!ENTITY % string.Type "CDATA">
-
-<!ENTITY % eventAttributes
-    "version     %string.Type; #IMPLIED
-     runNumber   %string.Type; #IMPLIED
-     eventNumber %string.Type; #IMPLIED
-     dateTime    %string.Type; #IMPLIED
-     lumiBlock   %string.Type; #IMPLIED
-     eventProperties %string.Type; #IMPLIED">
-
-
-<!ELEMENT Event
-    (BJet|CaloETMis|Cluster|CompositeParticle|CSC|CSCD|Electron|EmTauROI|
-     ETMis|FCAL|HEC|IDScan|iPat|Jet|JetROI|LAr|LVL1JetElement|LVL1Result|
-     LVL1TriggerTower|MBTS|MDT|MSeg|Muon|MuonETMis|MuonROI|ParticleJet|
-     Photon|PixelRDO|RMTr|RPC|RTr|RVx|S3D|SCTRDO|Segment|SiHit|SMTr|STC|STr|
-     TauJet|TGC|TILE|Track|TrigS3D|TriggerInfo|TRT|xKal)+>
-<!ATTLIST Event %eventAttributes;>
-
-<!ENTITY % attributes 'count CDATA "" storeGateKey CDATA ""'>
-
-<!ENTITY % type 'type (FLOAT|INT|STRING) #FIXED'>
-<!ENTITY % unit 'unit (NONE | CM | RAD | GEV)'>
-<!ENTITY % integer
-         ' %type; "INT"
-           multiple CDATA "1"
-           %unit; "NONE" '>
-<!ENTITY % float
-         ' %type; "FLOAT"
-           multiple CDATA "1"
-           %unit; "NONE" '>
-<!ENTITY % string
-         ' %type; "STRING"
-           multiple CDATA "1"
-           %unit; "NONE" '>
-
-<!ELEMENT BJet	        (charge|clusterIndex|clusterKey|clusterLinkCount|energy|
-                         eta|label|lhSig|mass|phi|pt|secVtxCount|secVtxFitProb|secVtxMass|
-                         secVtxMult|secVtxRPhiDist|secVtxTagLh|secVtxTagLhErr|
-                         trackIndex|trackKey|trackLinkCount|weight)+>
-<!ATTLIST BJet			%attributes;>
-
-<!ELEMENT CaloETMis     (et|etx|ety)+>
-<!ATTLIST CaloETMis     %attributes;>
-
-<!ELEMENT Cluster       (cells|energy|emfrac|et|eta|id|numCells|phi)+>
-<!ATTLIST Cluster       %attributes;>
-
-<!ELEMENT CompositeParticle     (author|charge|dataType|daughterIndex|daughterKey|
-                                 daughterPdgId|eta|label|pdgId|phi|pt|typeEV)+>
-<!ATTLIST CompositeParticle     %attributes;>
-
-<!ELEMENT CSC           (barcode|hitsFull|id|identifier|kine|length|numHits|sigma|
-                         x|y|z)+>
-<!ATTLIST CSC           %attributes;>
-
-<!ELEMENT CSCD          (barcode|charge|id|identifier|kine|length|x|y|z)+>
-<!ATTLIST CSCD          %attributes;>
-
-<!ELEMENT Electron      (author|clusterIndex|clusterKey|clusterLinkCount|dataType|
-                         emWeight|eOverp|et37|eta|etCone|etCone20|etHad1|f1|fracs1|
-                         hasTrack|hitsBLayer|hitsHighThresTRT|hitsPixel|hitsSCT|
-                         hitsTRT|isEM|isEMString|pdgId|phi|pionWeight|pt|trackIndex|trackKey|
-                         trackLinkCount)+>
-<!ATTLIST Electron      %attributes;>
-
-<!ELEMENT EmTauROI      (energy|energyEM|energyTAU|eta|phi|roiWord|thrPattern)+>
-<!ATTLIST EmTauROI      %attributes;>
-
-<!ELEMENT ETMis         (et|etx|ety)+>
-<!ATTLIST ETMis         %attributes;>
-
-<!ELEMENT FCAL          (adc2Mev|adcCounts|cluster|dx|dy|energy|id|layer|sub|
-                         x|y|channel|feedThrough|slot)+>
-<!ATTLIST FCAL          %attributes;>
-
-<!ELEMENT HEC           (adc2Mev|adcCounts|energy|eta|id|layer|phi|sub|
-                         cluster|channel|feedThrough|slot)+>
-<!ATTLIST HEC           %attributes;>
-
-<!ELEMENT IDScan        (barcode|chi2|cotTheta|covMatrix|d0|hits|id|numHits|
-                         phi0|pt|z0)+>
-<!ATTLIST IDScan        %attributes;>
-
-<!ELEMENT InDetSegment  (hits|numHits|phi|theta|x|y|z)+>
-<!ATTLIST InDetSegment  %attributes;>
-
-<!ELEMENT iPat          (barcode|chi2|cotTheta|covMatrix|d0|hits|
-                         id|kine|numHits|numPolyline|phi0|polylineX|polylineY|
-                         polylineZ|pt|z0)+>
-<!ATTLIST iPat          %attributes;>
-
-<!-- cluster should be an array of calo Cluster IDs, but it's not provided in
-     the event files nor any processing exists in the Jet handling code -->
-<!ELEMENT Jet           (OutOfTimeEfrac|bTagName|bTagValue|cells|cluster|clusterIndex|clusterKey|clusterLinkCount|
-                         emfrac|et|eta|fcorCell|fcorDotx|fcorJet|fcorJetForCell|fracSamplingMax|hecf|
-			 isBad|isGood|isUgly|n90cells|n90const|nbadcells|id|jvf|numCells|phi|pt|
-			 quality|qualityLAr|qualityTile|sMax|tileGap3f|time|timeClusters|trackIndex|trackKey|
-                         trackLinkCount|mass|px|py|pz)+>
-<!ATTLIST Jet           %attributes;>
-
-<!ELEMENT JetROI        (energy|eta|phi)+>
-<!ATTLIST JetROI        %attributes;>
-
-<!ELEMENT LAr           (adc2Mev|adcCounts|BadCell|cellGain|cellPedestal|cellTime|cluster|
-                         energy|eta|id|layer|phi|sub|channel|feedThrough|slot)+>
-<!ATTLIST LAr           %attributes;>
-
-<!ELEMENT LVL1JetElement    (energy|eta|phi)+>
-<!ATTLIST LVL1JetElement    %attributes;>
-
-<!ELEMENT LVL1Result    (ctpItemList|ctpWord0|ctpWord1|ctpWord2|
-                         energyEtMiss|energyEx|energyEy|energySumEt|
-                         itemListEF|itemListL2|passedEF|passedL1|passedL2|
-                         passedTrigger|prescaleListEF|prescaleListL1|prescaleListL2)+>
-<!ATTLIST LVL1Result    %attributes;>
-
-<!ELEMENT LVL1TriggerTower  (emADC|emBCID|emEnergy|eta|hadADC|hadBCID|hadEnergy|
-                             isEMSaturated|isHadSaturated|numADC|phi|sumEnergy)+>
-<!ATTLIST LVL1TriggerTower  %attributes;>
-
-<!ELEMENT MBTS          (channel|energy|eta|label|module|phi|quality|sampling|time|type|
-                         adcCounts|cellPedestal|cellRawAmplitude|cellRawTime)+>
-<!ATTLIST MBTS          %attributes;>
-
-<!ELEMENT MDT           (barcode|driftR|id|identifier|kine|length|x|y|z)+>
-<!ATTLIST MDT           %attributes;>
-
-<!ELEMENT MSeg          (cotTheta|hits|numHits|phi0|x|y|z)+>
-<!ATTLIST MSeg          %attributes;>
-
-<!ELEMENT Muon          (author|chi2|dataType|eta|etConeIsol|pdgId|phi|pt|
-                         trackIndex|trackKey|trackLinkCount)+>
-<!ATTLIST Muon          %attributes;>
-
-<!ELEMENT MuonETMis     (et|etx|ety)+>
-<!ATTLIST MuonETMis     %attributes;>
-
-<!ELEMENT MuonROI       (energy|eta|phi|roiWord|thrName|thrNumber|thrValue)+>
-<!ATTLIST MuonROI       %attributes;>
-
-<!ELEMENT MuonSegment   (hits|numHits|phi|theta|x|y|z)+>
-<!ATTLIST MuonSegment   %attributes;>
-
-<!ELEMENT ParticleJet   (cells|cluster|et|eta|id|numCells|phi|pt)+>
-<!ATTLIST ParticleJet   %attributes;>
-
-<!ELEMENT PixCluster	(barcode|barcodes|eloss|etaModule|id|numBarcodes|
-                         phiModule|widthx|widthy|x0|y0|z0)+>
-<!ATTLIST PixCluster    %attributes;>
-
-<!ELEMENT Photon        (clusterIndex|clusterKey|clusterLinkCount|emWeight|et37|
-                         eta|etCone|etHad1|f1|fracs1|isEM|isEMString|phi|pionWeight|pt)+>
-<!ATTLIST Photon        %attributes;>
-
-<!-- PixelRDO - object derived from S3D -->
-<!ELEMENT PixelRDO      (etaModule|id|phiModule|x|y|z)+>
-<!ATTLIST PixelRDO      %attributes;>
-
-<!ELEMENT RMTr          (barcode|cotTheta|hits|hitsFull|id|kine|numHits|
-                         numPolyline|phi0|polylineX|polylineY|polylineZ|pt|
-                         x|y|z)+>
-<!ATTLIST RMTr          %attributes;>
-
-<!ELEMENT RPC           (barcode|id|identifier|kine|length|width|x|y|z)+>
-<!ATTLIST RPC           %attributes;>
-
-<!ELEMENT RTr           (barcode|chi2|cotTheta|covMatrix|d0|kine|phi0|pt|z0)+>
-<!ATTLIST RTr           %attributes;>
-
-<!ELEMENT RVx           (chi2|covMatrix|numTracks|vertexType|primVxCand|
-                         sgkey|tracks|x|y|z)+>
-<!ATTLIST RVx           %attributes;>
-
-<!ELEMENT S3D           (barcode|barcodes|clusters|etaModule|kine|numBarcodes|phi|
-                         phiModule|rho|x|y|z)+>
-<!ATTLIST S3D           %attributes;>
-
-<!-- SCTRDO - object derived from STC (SiCluster) -->
-<!ELEMENT SCTRDO        (BCIDError|etaModule|firstHitError|formatterError|id|
-                         lvl1Error|phiModule|preambleError|secondHitError|
-                         syncError|timeBin|x0|x1|y0|y1|z0|z1)+>
-<!ATTLIST SCTRDO        %attributes;>
-
-<!ELEMENT Segment       (hits|numHits|phi|theta|x|y|z)+>
-<!ATTLIST Segment       %attributes;>
-
-<!ELEMENT SiHit         (energyloss|trackid|x|y|z)+>
-<!ATTLIST SiHit         %attributes;>
-
-<!ELEMENT SMTr          (barcode|cotTheta|id|kine|phi0|pt|x|y|z)+>
-<!ATTLIST SMTr          %attributes;>
-
-<!ELEMENT STC           (barcode|barcodes|etaModule|id|kine|numBarcodes|
-                         phiModule|widthside|x0|x1|y0|y1|z0|z1)+>
-<!ATTLIST STC           %attributes;>
-
-<!ELEMENT STr           (barcode|code|eta|id|phi|phiEndVertex|phiVertex|pt|
-                         rhoEndVertex|rhoVertex|zVertex|zEndVertex)+>
-<!ATTLIST STr           %attributes;>
-
-<!ELEMENT TauJet        (author|charge|clusterIndex|clusterKey|clusterLinkCount|
-                         emRadius|eta|etEMCalib|etHadCalib|isolFrac|isTau|isTauString|
-                         logLhRatio|numTracks|phi|pt|stripWidth|trackIndex|
-                         trackKey|trackLinkCount)+>
-<!ATTLIST TauJet        %attributes;>
-
-<!ELEMENT TGC           (barcode|id|identifier|kine|length|lwidth|swidth|
-                         x|y|z)+>
-<!ATTLIST TGC           %attributes;>
-
-<!ELEMENT TILE          (adcCounts1|adcCounts2|BadCell|cluster|energy|eta|id|layer|phi|
-                         pmt1Chi2|pmt1Energy|pmt1Gain|pmt1Number|pmt1Pedestal|
-                         pmt1Time|pmt2Chi2|pmt2Energy|pmt2Gain|pmt2Number|
-                         pmt2Pedestal|pmt2Time|sub|pmt1ADCStatus|pmt2ADCStatus|
-                         pmt1RawTime|pmt2RawTime|pmt1RawAmplitude|pmt2RawAmplitude)+>
-<!ATTLIST TILE          %attributes;>
-
-<!ELEMENT Track         (author|barcode|chi2|cotTheta|covMatrix|d0|driftSign|hits|id|
-                         isOutlier|kine|numHits|numPolyline|numTsos|phi0|polylineX|
-                         polylineY|polylineZ|pt|tsosDetType|tsosPosR|tsosPullLoc1|
-                         tsosPullLoc2|tsosResLoc1|tsosResLoc2|trackAuthor|z0|numDoF|
-                         nBLayerHits|nPixHits|nSCTHits|nTRTHits)+>
-<!ATTLIST Track         %attributes;>
-
-<!ELEMENT TrigS3D       (barcodes|cluster|dphi|dr|dz|eta|id|layer|numBarcodes|phi|
-                         r|x|y|z)+>
-<!ATTLIST TrigS3D       %attributes;>
-
-<!ELEMENT TriggerInfo   (energyEtMiss|energyEx|energyEy|energySumEt|
-                        trigInfoEF|trigInfoExtL1ID|trigInfoL1|trigInfoL2|
-                        trigInfoLvl1Type|trigInfoStatus|trigInfoStreamTag)+>
-<!ATTLIST TriggerInfo   %attributes;>
-
-<!ELEMENT TRT           (barcode|barcodes|driftR|id|kine|numBarcodes|phi|rhoz|sub|
-                         threshold|noise|bitPattern|timeOverThreshold)+>
-<!ATTLIST TRT           %attributes;>
-
-<!ELEMENT xKal          (barcode|chi2|cotTheta|covMatrix|d0|hits|
-                         id|numHits|numPolyline|phi0|polylineX|polylineY|
-                         polylineZ|pt|z0)+>
-<!ATTLIST xKal          %attributes;>
-
-<!ELEMENT OutOfTimeEfrac    (#PCDATA)> <!ATTLIST OutOfTimeEfrac     %float;>
-<!ELEMENT adc2Mev           (#PCDATA)> <!ATTLIST adc2Mev            %float;>
-<!ELEMENT adcCounts         (#PCDATA)> <!ATTLIST adcCounts          %integer;>
-<!ELEMENT adcCounts1        (#PCDATA)> <!ATTLIST adcCounts1         %integer;>
-<!ELEMENT adcCounts2        (#PCDATA)> <!ATTLIST adcCounts2         %integer;>
-<!ELEMENT author            (#PCDATA)> <!ATTLIST author             %string;>
-<!ELEMENT BadCell			(#PCDATA)> <!ATTLIST BadCell			%integer;>
-<!ELEMENT barcode           (#PCDATA)> <!ATTLIST barcode            %integer;>
-<!ELEMENT barcodes          (#PCDATA)> <!ATTLIST barcodes           %integer;>
-<!ELEMENT bitPattern        (#PCDATA)> <!ATTLIST bitPattern         %integer;>
-<!ELEMENT BCIDError         (#PCDATA)> <!ATTLIST BCIDError          %integer;>
-<!ELEMENT bTagName          (#PCDATA)> <!ATTLIST bTagName           %string;>
-<!ELEMENT bTagValue         (#PCDATA)> <!ATTLIST bTagValue          %float;>
-<!ELEMENT cellTime          (#PCDATA)> <!ATTLIST cellTime           %float;>
-<!ELEMENT cellGain          (#PCDATA)> <!ATTLIST cellGain           %integer;>
-<!ELEMENT cellPedestal      (#PCDATA)> <!ATTLIST cellPedestal       %float;>
-<!ELEMENT cells             (#PCDATA)> <!ATTLIST cells              %integer;>
-<!ELEMENT channel           (#PCDATA)> <!ATTLIST channel            %integer;>
-<!ELEMENT feedThrough       (#PCDATA)> <!ATTLIST feedThrough        %integer;>
-<!ELEMENT slot              (#PCDATA)> <!ATTLIST slot            %integer;>
-<!ELEMENT charge            (#PCDATA)> <!ATTLIST charge             %float;>
-<!ELEMENT chi2              (#PCDATA)> <!ATTLIST chi2               %float;>
-<!ELEMENT cluster           (#PCDATA)> <!ATTLIST cluster            %integer;>
-<!ELEMENT clusters          (#PCDATA)> <!ATTLIST clusters           %integer;>
-<!ELEMENT clusterIndex      (#PCDATA)> <!ATTLIST clusterIndex       %integer;>
-<!ELEMENT clusterKey        (#PCDATA)> <!ATTLIST clusterKey         %string;>
-<!ELEMENT clusterLinkCount  (#PCDATA)> <!ATTLIST clusterKey         %integer;>
-<!ELEMENT code              (#PCDATA)> <!ATTLIST code               %integer;>
-<!ELEMENT cotTheta          (#PCDATA)> <!ATTLIST cotTheta           %float;>
-<!ELEMENT covMatrix         (#PCDATA)> <!ATTLIST covMatrix          %float;>
-<!ELEMENT ctpItemList       (#PCDATA)> <!ATTLIST ctpItemList        %string;>
-<!ELEMENT ctpWord0          (#PCDATA)> <!ATTLIST ctpWord0           %integer;>
-<!ELEMENT ctpWord1          (#PCDATA)> <!ATTLIST ctpWord1           %integer;>
-<!ELEMENT ctpWord2          (#PCDATA)> <!ATTLIST ctpWord2           %integer;>
-<!ELEMENT d0                (#PCDATA)> <!ATTLIST d0                 %float;>
-<!ELEMENT dataType          (#PCDATA)> <!ATTLIST dataType           %integer;>
-<!ELEMENT daughterIndex     (#PCDATA)> <!ATTLIST daughterIndex      %integer;>
-<!ELEMENT daughterKey       (#PCDATA)> <!ATTLIST daughterKey        %string;>
-<!ELEMENT daughterPdgId     (#PCDATA)> <!ATTLIST daughterPdgId      %integer;>
-<!ELEMENT deta              (#PCDATA)> <!ATTLIST deta               %float;>
-<!ELEMENT dphi              (#PCDATA)> <!ATTLIST dphi               %float;>
-<!ELEMENT dr                (#PCDATA)> <!ATTLIST dr                 %float;>
-<!ELEMENT driftR            (#PCDATA)> <!ATTLIST driftR             %float;>
-<!ELEMENT driftSign         (#PCDATA)> <!ATTLIST driftSign          %integer;>
-<!ELEMENT dx                (#PCDATA)> <!ATTLIST dx                 %float;>
-<!ELEMENT dy                (#PCDATA)> <!ATTLIST dy                 %float;>
-<!ELEMENT dz                (#PCDATA)> <!ATTLIST dz                 %float;>
-<!ELEMENT eloss		    (#PCDATA)> <!ATTLIST eloss              %float;>
-<!ELEMENT emfrac            (#PCDATA)> <!ATTLIST emfrac             %float;>
-<!ELEMENT emADC             (#PCDATA)> <!ATTLIST emADC              %integer;>
-<!ELEMENT emBCID            (#PCDATA)> <!ATTLIST emBCID             %integer;>
-<!ELEMENT emEnergy          (#PCDATA)> <!ATTLIST emEnergy           %float;>
-<!ELEMENT emRadius          (#PCDATA)> <!ATTLIST emRadius           %float;>
-<!ELEMENT emWeight          (#PCDATA)> <!ATTLIST emWeight           %float;>
-<!ELEMENT energy            (#PCDATA)> <!ATTLIST energy             %float;>
-<!ELEMENT energyEM          (#PCDATA)> <!ATTLIST energyEM           %float;>
-<!ELEMENT energyTAU         (#PCDATA)> <!ATTLIST energyTAU          %float;>
-<!ELEMENT energyEtMiss      (#PCDATA)> <!ATTLIST energyEtMiss       %float;>
-<!ELEMENT energyEx          (#PCDATA)> <!ATTLIST energyEx           %float;>
-<!ELEMENT energyEy          (#PCDATA)> <!ATTLIST energyEy           %float;>
-<!ELEMENT energyloss        (#PCDATA)> <!ATTLIST energyloss         %float;>
-<!ELEMENT energySumEt       (#PCDATA)> <!ATTLIST energySumEt        %float;>
-<!ELEMENT eOverp            (#PCDATA)> <!ATTLIST eOverp             %float;>
-<!ELEMENT et                (#PCDATA)> <!ATTLIST et                 %float;>
-<!ELEMENT et37              (#PCDATA)> <!ATTLIST et37               %float;>
-<!ELEMENT eta               (#PCDATA)> <!ATTLIST eta                %float;>
-<!ELEMENT etaModule         (#PCDATA)> <!ATTLIST etaModule          %integer;>
-<!ELEMENT etCone            (#PCDATA)> <!ATTLIST etCone             %float;>
-<!ELEMENT etCone20          (#PCDATA)> <!ATTLIST etCone20           %float;>
-<!ELEMENT etEMCalib         (#PCDATA)> <!ATTLIST etEMCalib          %float;>
-<!ELEMENT etHad1            (#PCDATA)> <!ATTLIST etHad1             %float;>
-<!ELEMENT etHadCalib        (#PCDATA)> <!ATTLIST etHadCalib         %float;>
-<!ELEMENT etx               (#PCDATA)> <!ATTLIST etx                %float;>
-<!ELEMENT ety               (#PCDATA)> <!ATTLIST ety                %float;>
-<!ELEMENT etConeIsol        (#PCDATA)> <!ATTLIST etConeIsol         %float;>
-<!ELEMENT f1                (#PCDATA)> <!ATTLIST f1                 %float;>
-<!ELEMENT firstHitError     (#PCDATA)> <!ATTLIST firstHitError      %integer;>
-<!ELEMENT fcorCell          (#PCDATA)> <!ATTLIST fcorCell           %float;>
-<!ELEMENT fcorDotx          (#PCDATA)> <!ATTLIST fcorDotx           %float;>
-<!ELEMENT fcorJet           (#PCDATA)> <!ATTLIST fcorJet            %float;>
-<!ELEMENT fcorJetForCell    (#PCDATA)> <!ATTLIST fcorJetForCell     %float;>
-<!ELEMENT formatterError    (#PCDATA)> <!ATTLIST formatterError     %integer;>
-<!ELEMENT fracs1            (#PCDATA)> <!ATTLIST fracs1             %float;>
-<!ELEMENT fracSamplingMax   (#PCDATA)> <!ATTLIST fracSamplingMax    %float;>
-<!ELEMENT hadADC            (#PCDATA)> <!ATTLIST hadADC             %integer;>
-<!ELEMENT hadBCID           (#PCDATA)> <!ATTLIST hadBCID            %integer;>
-<!ELEMENT hadEnergy         (#PCDATA)> <!ATTLIST hadEnergy          %float;>
-<!ELEMENT hasTrack          (#PCDATA)> <!ATTLIST hasTrack           %integer;>
-<!ELEMENT hecf              (#PCDATA)> <!ATTLIST hecf               %float;>
-<!ELEMENT hits              (#PCDATA)> <!ATTLIST hits               %integer;>
-<!ELEMENT hitsBLayer        (#PCDATA)> <!ATTLIST hitsBLayer         %integer;>
-<!ELEMENT hitsFull          (#PCDATA)> <!ATTLIST hitsFull           %string;>
-<!ELEMENT hitsHighThresTRT  (#PCDATA)> <!ATTLIST hitsHighThresTRT   %integer;>
-<!ELEMENT hitsPixel         (#PCDATA)> <!ATTLIST hitsPixel          %integer;>
-<!ELEMENT hitsSCT           (#PCDATA)> <!ATTLIST hitsSCT            %integer;>
-<!ELEMENT hitsTRT           (#PCDATA)> <!ATTLIST hitsTRT            %integer;>
-<!ELEMENT id                (#PCDATA)> <!ATTLIST id                 %integer;>
-<!ELEMENT identifier        (#PCDATA)> <!ATTLIST identifier         %string;>
-<!ELEMENT isBad             (#PCDATA)> <!ATTLIST isBad              %float;>
-<!ELEMENT isEM              (#PCDATA)> <!ATTLIST isEM               %integer;>
-<!ELEMENT isEMString        (#PCDATA)> <!ATTLIST isEMString         %string;>
-<!ELEMENT isEMSaturated     (#PCDATA)> <!ATTLIST isEMSaturated      %integer;>
-<!ELEMENT isGood            (#PCDATA)> <!ATTLIST isGood             %float;>
-<!ELEMENT isHadSaturated    (#PCDATA)> <!ATTLIST isHadSaturated     %integer;>
-<!ELEMENT isTau             (#PCDATA)> <!ATTLIST isTau              %integer;>
-<!ELEMENT isTauString       (#PCDATA)> <!ATTLIST isTauString        %string;>
-<!ELEMENT isUgly            (#PCDATA)> <!ATTLIST isUgly             %float;>
-<!ELEMENT isolated          (#PCDATA)> <!ATTLIST isolated           %integer;>
-<!ELEMENT isolFrac          (#PCDATA)> <!ATTLIST isolFrac           %float;>
-<!ELEMENT isOutlier         (#PCDATA)> <!ATTLIST isOutlier          %integer;>
-<!ELEMENT itemListEF        (#PCDATA)> <!ATTLIST itemListEF         %string;>
-<!ELEMENT itemListL2        (#PCDATA)> <!ATTLIST itemListL2         %string;>
-<!ELEMENT jvf               (#PCDATA)> <!ATTLIST jvf                %float;>
-<!ELEMENT kine              (#PCDATA)> <!ATTLIST kine               %integer;>
-<!ELEMENT label             (#PCDATA)> <!ATTLIST label              %string;>
-<!ELEMENT layer             (#PCDATA)> <!ATTLIST layer              %integer;>
-<!ELEMENT length            (#PCDATA)> <!ATTLIST length             %float;>
-<!ELEMENT lhSig             (#PCDATA)> <!ATTLIST lhSig              %float;>
-<!ELEMENT logLhRatio        (#PCDATA)> <!ATTLIST logLhRatio         %float;>
-<!ELEMENT lvl1Error         (#PCDATA)> <!ATTLIST lvl1Error          %integer;>
-<!ELEMENT lwidth            (#PCDATA)> <!ATTLIST lwidth             %float; >
-<!ELEMENT mass              (#PCDATA)> <!ATTLIST mass               %float;>
-<!ELEMENT module            (#PCDATA)> <!ATTLIST module             %integer;>
-<!ELEMENT nbadcells         (#PCDATA)> <!ATTLIST nbadcells          %integer;>
-<!ELEMENT noise             (#PCDATA)> <!ATTLIST noise              %integer;>
-<!ELEMENT nBLayerHits       (#PCDATA)> <!ATTLIST nBLayerHits        %integer;>
-<!ELEMENT nPixHits          (#PCDATA)> <!ATTLIST nPixHits           %integer;>
-<!ELEMENT nSCTHits          (#PCDATA)> <!ATTLIST nSCTHits           %integer;>
-<!ELEMENT nTRTHits          (#PCDATA)> <!ATTLIST nTRTHits           %integer;>
-<!ELEMENT n90cells          (#PCDATA)> <!ATTLIST n90cells           %integer;>
-<!ELEMENT n90const          (#PCDATA)> <!ATTLIST n90const           %integer;>
-<!ELEMENT numADC            (#PCDATA)> <!ATTLIST numADC             %integer;>
-<!ELEMENT numBarcodes       (#PCDATA)> <!ATTLIST numBarcodes        %integer;>
-<!ELEMENT numCells          (#PCDATA)> <!ATTLIST numCells           %integer;>
-<!ELEMENT numDoF            (#PCDATA)> <!ATTLIST numDoF             %integer;>
-<!ELEMENT numHits           (#PCDATA)> <!ATTLIST numHits            %integer;>
-<!ELEMENT numPolyline       (#PCDATA)> <!ATTLIST numPolyline        %integer;>
-<!ELEMENT numTracks         (#PCDATA)> <!ATTLIST numTracks          %integer;>
-<!ELEMENT numTsos           (#PCDATA)> <!ATTLIST numTsos            %integer;>
-<!ELEMENT passedEF          (#PCDATA)> <!ATTLIST passedEF           %integer;>
-<!ELEMENT passedL1          (#PCDATA)> <!ATTLIST passedL1           %integer;>
-<!ELEMENT passedL2          (#PCDATA)> <!ATTLIST passedL2           %integer;>
-<!ELEMENT passedTrigger     (#PCDATA)> <!ATTLIST passedTrigger      %integer;>
-<!ELEMENT pdgId             (#PCDATA)> <!ATTLIST pdgId              %integer;>
-<!ELEMENT phi               (#PCDATA)> <!ATTLIST phi                %float;>
-<!ELEMENT phi0              (#PCDATA)> <!ATTLIST phi0               %float;>
-<!ELEMENT phiEndVertex      (#PCDATA)> <!ATTLIST phiEndVertex       %float;>
-<!ELEMENT phiModule         (#PCDATA)> <!ATTLIST phiModule          %integer;>
-<!ELEMENT phiVertex         (#PCDATA)> <!ATTLIST phiVertex          %float;>
-<!ELEMENT pionWeight        (#PCDATA)> <!ATTLIST pionWeight         %float;>
-<!ELEMENT pmt1Energy        (#PCDATA)> <!ATTLIST pmt1Energy         %float;>
-<!ELEMENT pmt2Energy        (#PCDATA)> <!ATTLIST pmt2Energy         %float;>
-<!ELEMENT pmt1Chi2          (#PCDATA)> <!ATTLIST pmt1Chi2           %float;>
-<!ELEMENT pmt2Chi2          (#PCDATA)> <!ATTLIST pmt2Chi2           %float;>
-<!ELEMENT pmt1Time          (#PCDATA)> <!ATTLIST pmt1Time           %float;>
-<!ELEMENT pmt2Time          (#PCDATA)> <!ATTLIST pmt2Time           %float;>
-<!ELEMENT cellRawAmplitude  (#PCDATA)> <!ATTLIST cellRawAmplitude   %float;> 
-<!ELEMENT cellRawTime       (#PCDATA)> <!ATTLIST cellRawTime        %float;>
-<!ELEMENT pmt1RawTime       (#PCDATA)> <!ATTLIST pmt1RawTime        %float;>
-<!ELEMENT pmt2RawTime       (#PCDATA)> <!ATTLIST pmt2RawTime        %float;>
-<!ELEMENT pmt1RawAmplitude  (#PCDATA)> <!ATTLIST pmt1RawAmplitude   %float;> 
-<!ELEMENT pmt2RawAmplitude  (#PCDATA)> <!ATTLIST pmt2RawAmplitude   %float;> 
-<!ELEMENT pmt1Gain          (#PCDATA)> <!ATTLIST pmt1Gain           %integer;>
-<!ELEMENT pmt2Gain          (#PCDATA)> <!ATTLIST pmt2Gain           %integer;>
-<!ELEMENT pmt1Pedestal      (#PCDATA)> <!ATTLIST pmt1Pedestal       %float;>
-<!ELEMENT pmt2Pedestal      (#PCDATA)> <!ATTLIST pmt2Pedestal       %float;>
-<!ELEMENT pmt1Number        (#PCDATA)> <!ATTLIST pmt1Number         %integer;>
-<!ELEMENT pmt2Number        (#PCDATA)> <!ATTLIST pmt2Number         %integer;>
-<!ELEMENT pmt1ADCStatus     (#PCDATA)> <!ATTLIST pmt1ADCStatus      %integer;>
-<!ELEMENT pmt2ADCStatus     (#PCDATA)> <!ATTLIST pmt2ADCStatus      %integer;>
-<!ELEMENT polylineX         (#PCDATA)> <!ATTLIST polylineX          %float;>
-<!ELEMENT polylineY         (#PCDATA)> <!ATTLIST polylineY          %float;>
-<!ELEMENT polylineZ         (#PCDATA)> <!ATTLIST polylineZ          %float;>
-<!ELEMENT preambleError     (#PCDATA)> <!ATTLIST preambleError      %integer;>
-<!ELEMENT prescaleListEF    (#PCDATA)> <!ATTLIST prescaleListEF     %string;>
-<!ELEMENT prescaleListL1    (#PCDATA)> <!ATTLIST prescaleListL1     %string;>
-<!ELEMENT prescaleListL2    (#PCDATA)> <!ATTLIST prescaleListL2     %string;>
-<!ELEMENT vertexType        (#PCDATA)> <!ATTLIST vertexType         %integer;>
-<!ELEMENT primVxCand        (#PCDATA)> <!ATTLIST primVxCand         %integer;>
-<!ELEMENT pt                (#PCDATA)> <!ATTLIST pt                 %float;>
-<!ELEMENT px                (#PCDATA)> <!ATTLIST px                 %float;>
-<!ELEMENT py                (#PCDATA)> <!ATTLIST py                 %float;>
-<!ELEMENT pz                (#PCDATA)> <!ATTLIST pz                 %float;>
-<!ELEMENT quality           (#PCDATA)> <!ATTLIST quality            %float;>
-<!ELEMENT qualityLAr        (#PCDATA)> <!ATTLIST qualityLAr         %float;>
-<!ELEMENT qualityTile       (#PCDATA)> <!ATTLIST qualityTile        %float;>
-<!ELEMENT r                 (#PCDATA)> <!ATTLIST r                  %float;>
-<!ELEMENT rho               (#PCDATA)> <!ATTLIST rho                %float;>
-<!ELEMENT rhoEndVertex      (#PCDATA)> <!ATTLIST rhoEndVertex       %float;>
-<!ELEMENT rhoVertex         (#PCDATA)> <!ATTLIST rhoVertex          %float;>
-<!ELEMENT rhoz              (#PCDATA)> <!ATTLIST rhoz               %float;>
-<!ELEMENT roiWord           (#PCDATA)> <!ATTLIST roiWord            %float;>
-<!ELEMENT sampling          (#PCDATA)> <!ATTLIST sampling           %integer;>
-<!ELEMENT secondHitError    (#PCDATA)> <!ATTLIST secondHitError     %integer;>
-<!ELEMENT secVtxCount       (#PCDATA)> <!ATTLIST secVtxCount        %float;>
-<!ELEMENT secVtxFitProb     (#PCDATA)> <!ATTLIST secVtxFitProb      %float;>
-<!ELEMENT secVtxMass        (#PCDATA)> <!ATTLIST secVtxMass         %float;>
-<!ELEMENT secVtxMult        (#PCDATA)> <!ATTLIST secVtxMult         %integer;>
-<!ELEMENT secVtxRPhiDist    (#PCDATA)> <!ATTLIST secVtxRPhiDist     %float;>
-<!ELEMENT secVtxTagLh       (#PCDATA)> <!ATTLIST secVtxTagLh        %float;>
-<!ELEMENT secVtxTagLhErr    (#PCDATA)> <!ATTLIST secVtxTagLhErr     %float;>
-<!ELEMENT sgkey             (#PCDATA)> <!ATTLIST sgkey              %string;>
-<!ELEMENT side              (#PCDATA)> <!ATTLIST side               %integer;>
-<!ELEMENT sigma             (#PCDATA)> <!ATTLIST sigma              %float;>
-<!ELEMENT sMax              (#PCDATA)> <!ATTLIST sMax               %float;>
-<!ELEMENT stripWidth        (#PCDATA)> <!ATTLIST stripWidth         %float;>
-<!ELEMENT sub               (#PCDATA)> <!ATTLIST sub                %integer;>
-<!ELEMENT sumEnergy         (#PCDATA)> <!ATTLIST sumEnergy          %float;>
-<!ELEMENT swidth            (#PCDATA)> <!ATTLIST swidth             %float;>
-<!ELEMENT syncError         (#PCDATA)> <!ATTLIST syncError          %integer;>
-<!ELEMENT theta             (#PCDATA)> <!ATTLIST theta              %float;>
-<!ELEMENT threshold         (#PCDATA)> <!ATTLIST threshold          %integer;>
-<!ELEMENT timeOverThreshold (#PCDATA)> <!ATTLIST timeOverThreshold  %float;>
-<!ELEMENT thrName           (#PCDATA)> <!ATTLIST thrName            %string;>
-<!ELEMENT thrNumber         (#PCDATA)> <!ATTLIST thrNumber          %float;>
-<!ELEMENT thrValue          (#PCDATA)> <!ATTLIST thrValue           %float;>
-<!ELEMENT thrPattern        (#PCDATA)> <!ATTLIST thrPattern         %float;>
-<!ELEMENT tileGap3f         (#PCDATA)> <!ATTLIST tileGap3f          %float;>
-<!ELEMENT time              (#PCDATA)> <!ATTLIST time               %float;>
-<!ELEMENT timeClusters      (#PCDATA)> <!ATTLIST timeClusters       %float;>
-<!ELEMENT timeBin           (#PCDATA)> <!ATTLIST timeBin            %integer;>
-<!ELEMENT trackAuthor       (#PCDATA)> <!ATTLIST trackAuthor        %integer;>
-<!ELEMENT trackid           (#PCDATA)> <!ATTLIST trackid            %integer;>
-<!ELEMENT trackIndex        (#PCDATA)> <!ATTLIST trackIndex         %integer;>
-<!ELEMENT trackKey          (#PCDATA)> <!ATTLIST trackKey           %string;>
-<!ELEMENT trackLinkCount    (#PCDATA)> <!ATTLIST trackLinkCount     %integer;>
-<!ELEMENT tracks            (#PCDATA)> <!ATTLIST tracks             %integer;>
-<!ELEMENT trigInfoEF        (#PCDATA)> <!ATTLIST trigInfoEF         %string;>
-<!ELEMENT trigInfoExtL1ID   (#PCDATA)> <!ATTLIST trigInfoExtL1ID    %string;>
-<!ELEMENT trigInfoL1        (#PCDATA)> <!ATTLIST trigInfoL1         %string;>
-<!ELEMENT trigInfoL2        (#PCDATA)> <!ATTLIST trigInfoL2         %string;>
-<!ELEMENT trigInfoLvl1Type  (#PCDATA)> <!ATTLIST trigInfoLvl1Type   %string;>
-<!ELEMENT trigInfoStatus    (#PCDATA)> <!ATTLIST trigInfoStatus     %string;>
-<!ELEMENT trigInfoStreamTag (#PCDATA)> <!ATTLIST trigInfoStreamTag  %string;>
-<!ELEMENT tsosDetType       (#PCDATA)> <!ATTLIST tsosDetType        %string;>
-<!ELEMENT tsosPosR          (#PCDATA)> <!ATTLIST tsosPosR           %float;>
-<!ELEMENT tsosPullLoc1      (#PCDATA)> <!ATTLIST tsosPullLoc1       %float;>
-<!ELEMENT tsosPullLoc2      (#PCDATA)> <!ATTLIST tsosPullLoc2       %float;>
-<!ELEMENT tsosResLoc1       (#PCDATA)> <!ATTLIST tsosResLoc1        %float;>
-<!ELEMENT tsosResLoc2       (#PCDATA)> <!ATTLIST tsosResLoc2        %float;>
-<!ELEMENT type              (#PCDATA)> <!ATTLIST type               %integer;>
-<!ELEMENT typeEV            (#PCDATA)> <!ATTLIST typeEV             %string;>
-<!ELEMENT weight            (#PCDATA)> <!ATTLIST weight             %float;>
-<!ELEMENT width             (#PCDATA)> <!ATTLIST width              %float;>
-<!ELEMENT widthside         (#PCDATA)> <!ATTLIST widthside          %float;>
-<!ELEMENT widthx	    (#PCDATA)> <!ATTLIST widthx		    %float;>
-<!ELEMENT widthy            (#PCDATA)> <!ATTLIST widthy             %float;>
-<!ELEMENT x                 (#PCDATA)> <!ATTLIST x                  %float;>
-<!ELEMENT x0                (#PCDATA)> <!ATTLIST x0                 %float;>
-<!ELEMENT x1                (#PCDATA)> <!ATTLIST x1                 %float;>
-<!ELEMENT y                 (#PCDATA)> <!ATTLIST y                  %float;>
-<!ELEMENT y0                (#PCDATA)> <!ATTLIST y0                 %float;>
-<!ELEMENT y1                (#PCDATA)> <!ATTLIST y1                 %float;>
-<!ELEMENT z                 (#PCDATA)> <!ATTLIST z                  %float;>
-<!ELEMENT z0                (#PCDATA)> <!ATTLIST z0                 %float;>
-<!ELEMENT z1                (#PCDATA)> <!ATTLIST z1                 %float;>
-<!ELEMENT zEndVertex        (#PCDATA)> <!ATTLIST zEndVertex         %float;>
-<!ELEMENT zVertex           (#PCDATA)> <!ATTLIST zVertex            %float;>
diff --git a/graphics/AtlantisJava/geometry/AGeometry.xml b/graphics/AtlantisJava/geometry/AGeometry.xml
deleted file mode 100755
index 0d903668879f..000000000000
--- a/graphics/AtlantisJava/geometry/AGeometry.xml
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE AGeometry [
-<!ELEMENT AGeometry (ADisc | ARectangle | ABarrelCalorimeter |
-                     AEndcapCalorimeter | AGapCalorimeter |
-                     ABarrelSiliconDetector | AEndcapSiliconDetector |
-                     ABarrelTRTDetector | AEndcapTRTDetector)* >
-<!ELEMENT ADisc EMPTY >
-<!ATTLIST ADisc
-          p          CDATA     #REQUIRED
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          rIn        CDATA     #REQUIRED
-          rOut       CDATA     #REQUIRED
-          nIn        CDATA     "256"
-          nOut       CDATA     "256">
-<!ELEMENT ARectangle EMPTY >
-<!ATTLIST ARectangle
-          p          CDATA     #REQUIRED
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          xMin       CDATA     #REQUIRED
-          xMax       CDATA     #REQUIRED
-          yMin       CDATA     #REQUIRED
-          yMax       CDATA     #REQUIRED
-          xR         (YES|NO)  "YES"
-          yR         (YES|NO)  "YES">
-<!ELEMENT ABarrelCalorimeter EMPTY >
-<!ATTLIST ABarrelCalorimeter
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          sampling   CDATA     #REQUIRED
-          region     CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED
-          eta0       CDATA     #REQUIRED
-          deta       CDATA     #REQUIRED
-          neta       CDATA     #REQUIRED
-          meta       CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED>
-<!ELEMENT AEndcapCalorimeter EMPTY >
-<!ATTLIST AEndcapCalorimeter
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          sampling   CDATA     #REQUIRED
-          region     CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED
-          eta0       CDATA     #REQUIRED
-          deta       CDATA     #REQUIRED
-          neta       CDATA     #REQUIRED
-          meta       CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED>
-<!ELEMENT AGapCalorimeter EMPTY >
-<!ATTLIST AGapCalorimeter
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          sampling   CDATA     #REQUIRED
-          region     CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED
-          eta        CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED>
-<!ELEMENT AEndcapCryostat EMPTY >
-<!ATTLIST AEndcapCryostat
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          sampling   CDATA     #REQUIRED
-          region     CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED
-          neta       CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED>
-<!ELEMENT ABarrelSiliconDetector EMPTY >
-<!ATTLIST ABarrelSiliconDetector
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          layer      CDATA     #REQUIRED
-          length     CDATA     #REQUIRED
-          width      CDATA     #REQUIRED
-          thickness  CDATA     #REQUIRED
-          tilt       CDATA     #REQUIRED
-          nz         CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED
-          r0         CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED>
-<!ELEMENT AEndcapSiliconDetector EMPTY >
-<!ATTLIST AEndcapSiliconDetector
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          layer      CDATA     #REQUIRED
-          length     CDATA     #REQUIRED
-          width      CDATA     #REQUIRED
-          thickness  CDATA     #REQUIRED
-          nz         CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED>
-<!ELEMENT ABarrelTRTDetector EMPTY >
-<!ATTLIST ABarrelTRTDetector
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          layer      CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          phiIn      CDATA     #REQUIRED
-          phiOut     CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED>
-<!ELEMENT AEndcapTRTDetector EMPTY >
-<!ATTLIST AEndcapTRTDetector
-          c          CDATA     #REQUIRED
-          n          CDATA     #REQUIRED
-          layer      CDATA     #REQUIRED
-          nphi       CDATA     #REQUIRED
-          rMin       CDATA     #REQUIRED
-          rMax       CDATA     #REQUIRED
-          phi0       CDATA     #REQUIRED
-          zMin       CDATA     #REQUIRED
-          zMax       CDATA     #REQUIRED>
-]>
-
-<AGeometry>
-<ABarrelSiliconDetector c="PIX" n="Pixel" layer="0" length="2" width="1.9" thickness="0.270702" tilt="-14.0063" nz="20" nphi="14" r0="3.32803" phi0="22.2819" zMin="-33.6323" zMax="33.6323" />
-<ABarrelSiliconDetector c="PIX" n="Pixel" layer="1" length="6.08" width="1.64" thickness="0.306424" tilt="-19.9962" nz="13" nphi="22" r0="5.10491" phi0="-0.391852" zMin="-40.5702" zMax="40.5702" />
-<ABarrelSiliconDetector c="PIX" n="Pixel" layer="2" length="6.08" width="1.64" thickness="0.307646" tilt="-19.9962" nz="13" nphi="38" r0="8.88103" phi0="-0.12952" zMin="-40.5702" zMax="40.5702" />
-<ABarrelSiliconDetector c="PIX" n="Pixel" layer="3" length="6.08" width="1.64" thickness="0.30793" tilt="-19.9962" nz="13" nphi="52" r0="12.2722" phi0="3.38916" zMin="-40.5702" zMax="40.5702" />
-<AEndcapSiliconDetector c="PIX" n="Pixel" layer="0" length="6.08" width="1.64" thickness="1.51617" nz="1" nphi="48" rMin="8.91479" rMax="14.9795" phi0="3.75" zMin="48.79" zMax="49.79" />
-<AEndcapSiliconDetector c="PIX" n="Pixel" layer="1" length="6.08" width="1.64" thickness="1.51617" nz="1" nphi="48" rMin="8.91479" rMax="14.9795" phi0="3.75" zMin="57.29" zMax="58.29" />
-<AEndcapSiliconDetector c="PIX" n="Pixel" layer="2" length="6.08" width="1.64" thickness="1.51617" nz="1" nphi="48" rMin="8.91479" rMax="14.9795" phi0="3.75" zMin="64.29" zMax="65.29" />
-<ABarrelSiliconDetector c="SIL" n="Silicon" layer="0" length="12.609" width="6.144" thickness="0.83814" tilt="11.0677" nz="6" nphi="32" r0="30.134" phi0="3.24616" zMin="-74.8273" zMax="74.8273" />
-<ABarrelSiliconDetector c="SIL" n="Silicon" layer="1" length="12.609" width="6.144" thickness="0.75531" tilt="11.0546" nz="6" nphi="40" r0="37.2063" phi0="2.63207" zMin="-74.8273" zMax="74.8273" />
-<ABarrelSiliconDetector c="SIL" n="Silicon" layer="2" length="12.609" width="6.144" thickness="0.836751" tilt="11.2967" nz="6" nphi="48" r0="44.4326" phi0="2.10644" zMin="-74.8273" zMax="74.8273" />
-<ABarrelSiliconDetector c="SIL" n="Silicon" layer="3" length="12.609" width="6.144" thickness="0.776445" tilt="11.2902" nz="6" nphi="56" r0="51.4693" phi0="1.80488" zMin="-74.8273" zMax="74.8273" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="0" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.03842" zMin="83.5567" zMax="84.6532" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="0" length="11.77" width="6.31592" thickness="24.099" nz="1" nphi="40" rMin="33.7464" rMax="45.7959" phi0="4.46486" zMin="86.5567" zMax="87.6532" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="1" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.01417" zMin="91.5768" zMax="92.6732" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="1" length="11.77" width="6.31592" thickness="36.6061" nz="2" nphi="40" rMin="27.4929" rMax="45.7959" phi0="4.5" zMin="91.5768" zMax="95.6732" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="2" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.03842" zMin="107.327" zMax="108.423" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="2" length="11.77" width="6.31592" thickness="36.6061" nz="2" nphi="40" rMin="27.4929" rMax="45.7959" phi0="4.46486" zMin="107.327" zMax="111.423" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="3" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.01417" zMin="128.167" zMax="129.263" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="3" length="11.77" width="6.31592" thickness="36.6061" nz="2" nphi="40" rMin="27.4929" rMax="45.7959" phi0="4.5" zMin="128.167" zMax="132.263" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="4" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.03842" zMin="138.147" zMax="139.243" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="4" length="11.77" width="6.31592" thickness="36.6061" nz="2" nphi="40" rMin="27.4929" rMax="45.7959" phi0="4.46486" zMin="138.147" zMax="142.243" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="5" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.01417" zMin="175.317" zMax="176.413" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="5" length="11.77" width="6.31592" thickness="36.6061" nz="2" nphi="40" rMin="27.4929" rMax="45.7959" phi0="4.5" zMin="175.317" zMax="179.413" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="6" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.03842" zMin="209.697" zMax="210.793" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="6" length="11.77" width="6.31592" thickness="24.099" nz="1" nphi="40" rMin="33.7464" rMax="45.7959" phi0="4.46486" zMin="212.697" zMax="213.793" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="7" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="-1.01417" zMin="248.677" zMax="249.773" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="7" length="5.2475" width="6.83547" thickness="11.0247" nz="1" nphi="40" rMin="40.2836" rMax="45.7959" phi0="4.5" zMin="251.677" zMax="252.773" />
-<AEndcapSiliconDetector c="SIL" n="Silicon" layer="8" length="12.1235" width="6.2019" thickness="24.7693" nz="1" nphi="52" rMin="43.8426" rMax="56.2272" phi0="1.01417" zMin="273.747" zMax="274.843" />
-<ABarrelTRTDetector c="TRT" n="TRT" layer="0" nphi="32" rMin="56.7302" rMax="69.8248" phiIn="-6.17382" phiOut="-10.7369" zMin="-70.975" zMax="70.975" />
-<ABarrelTRTDetector c="TRT" n="TRT" layer="1" nphi="32" rMin="70.1346" rMax="86.6458" phiIn="-10.7202" phiOut="-5.99874" zMin="-70.975" zMax="70.975" />
-<ABarrelTRTDetector c="TRT" n="TRT" layer="2" nphi="32" rMin="86.9559" rMax="107.232" phiIn="-6.00171" phiOut="-10.9221" zMin="-70.975" zMax="70.975" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="0" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="85.85" zMax="98.55" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="1" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="100.18" zMax="112.88" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="2" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="114.565" zMax="127.265" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="3" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="128.86" zMax="141.56" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="4" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="143.12" zMax="155.82" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="5" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="157.388" zMax="170.088" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="6" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="175.008" zMax="185.408" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="7" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="187.185" zMax="197.585" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="8" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="199.34" zMax="209.74" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="9" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="211.49" zMax="221.89" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="10" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="223.64" zMax="234.04" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="11" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="235.795" zMax="246.195" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="12" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="247.96" zMax="258.36" />
-<AEndcapTRTDetector c="TRT" n="TRT" layer="13" nphi="34" rMin="64.67" rMax="100.1" phi0="0" zMin="260.083" zMax="270.483" />
-<ADisc p="YX" c="Sol"  n="Solenoid" rIn="122.9" rOut="127.4" />
-<ARectangle p="RZ" c="Sol" n="Solenoid" xMin="-265" xMax="265" yMin="122.9" yMax="127.4" xR="NO" />
-<ABarrelCalorimeter c="ECAL" n="LAr Presampler" sampling="0" region="0" rMin="142.173" rMax="143.858" zMin="0" zMax="325.0" eta0="3.1225e-17" deta="0.025" neta="61" meta="0" phi0="-0.175783" nphi="64" />
-<ABarrelCalorimeter c="ECAL" n="LAr" sampling="1" region="0" rMin="148.175" rMax="158" zMin="0" zMax="325.0" eta0="0.003125" deta="0.003125" neta="447" meta="1" phi0="-0.175783" nphi="64" />
-<ABarrelCalorimeter c="ECAL" n="LAr" sampling="1" region="1" rMin="148.175" rMax="158" zMin="0" zMax="325.0" eta0="1.4" deta="0.025" neta="3" meta="0" phi0="-0.175783" nphi="256" />
-<ABarrelCalorimeter c="ECAL" n="LAr" sampling="2" region="0" rMin="158" rMax="184" zMin="0" zMax="325.0" eta0="0.0" deta="0.025" neta="56" meta="0" phi0="-0.175783" nphi="256" />
-<ABarrelCalorimeter c="ECAL" n="LAr" sampling="2" region="1" rMin="158" rMax="184" zMin="0" zMax="325.0" eta0="1.4" deta="0.075" neta="1" meta="0" phi0="-0.175783" nphi="256" />
-<ABarrelCalorimeter c="ECAL" n="LAr" sampling="3" region="0" rMin="184" rMax="198.47" zMin="0" zMax="325.0" eta0="0.0" deta="0.05" neta="27" meta="0" phi0="-0.175783" nphi="256" />
-<AEndcapCalorimeter c="ECAL" n="LAr Endcap Presampler" sampling="0" region="0" rMin="29.0" rMax="203.4" zMin="368.075" zMax="371.425" eta0="1.50988" deta="0.025" neta="12" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="0" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="1.38444" deta="0.05" neta="1" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="1" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="1.43452" deta="0.025" neta="3" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="2" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="1.50965" deta="0.003125" neta="96" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="3" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="1.81009" deta="0.00416667" neta="48" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="4" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="2.01027" deta="0.00625" neta="64" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="1" region="5" rMin="29.0" rMax="203.4" zMin="375.424" zMax="380.073" eta0="2.41048" deta="0.025" neta="4" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Inner Endcap" sampling="1" region="0" rMin="29.0" rMax="203.4" zMin="375.424" zMax="420.125" eta0="2.51004" deta="0.1" neta="7" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="2" region="0" rMin="29.0" rMax="203.4" zMin="380.073" zMax="424.326" eta0="1.38381" deta="0.05" neta="7" meta="0" phi0="-0.234375" nphi="256" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="2" region="1" rMin="29.0" rMax="203.4" zMin="380.073" zMax="415.624" eta0="1.43388" deta="0.025" neta="43" meta="0" phi0="-0.234375" nphi="256" />
-<AEndcapCalorimeter c="ECAL" n="LAr Inner Endcap" sampling="2" region="0" rMin="29.0" rMax="203.4" zMin="420.125" zMax="424.326" eta0="2.5094" deta="0.1" neta="7" meta="0" phi0="-0.234375" nphi="64" />
-<AEndcapCalorimeter c="ECAL" n="LAr Outer Endcap" sampling="3" region="0" rMin="29.0" rMax="203.4" zMin="415.624" zMax="424.326" eta0="1.50867" deta="0.05" neta="20" meta="0" phi0="-0.234375" nphi="256" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="0" region="0" rMin="37.2" rMax="203.4" zMin="435" zMax="463" eta0="1.50824" deta="0.1" neta="10" meta="0" phi0="0" nphi="64" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="0" region="1" rMin="37.2" rMax="203.4" zMin="435" zMax="463" eta0="2.50892" deta="0.2" neta="4" meta="0" phi0="0" nphi="32" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="1" region="0" rMin="48.5" rMax="203.4" zMin="463" zMax="510" eta0="1.50755" deta="0.1" neta="10" meta="0" phi0="0" nphi="64" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="1" region="1" rMin="48.5" rMax="203.4" zMin="463" zMax="510" eta0="2.50817" deta="0.2" neta="3" meta="0" phi0="0" nphi="32" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="2" region="0" rMin="48.5" rMax="203.4" zMin="513" zMax="559" eta0="1.6" deta="0.1" neta="9" meta="1" phi0="0" nphi="64" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="2" region="1" rMin="48.5" rMax="203.4" zMin="513" zMax="559" eta0="2.5" deta="0.2" neta="3" meta="0" phi0="-7.95139e-16" nphi="32" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="3" region="0" rMin="48.5" rMax="203.4" zMin="559" zMax="605" eta0="1.7" deta="0.1" neta="8" meta="2" phi0="-3.97569e-16" nphi="64" />
-<AEndcapCalorimeter c="HCAL" n="HEC" sampling="3" region="1" rMin="48.5" rMax="203.4" zMin="559" zMax="605" eta0="2.5" deta="0.2" neta="4" meta="0" phi0="-7.95139e-16" nphi="32" />
-<ADisc p="YX" c="ECAL" n="FCAL EM" rIn="7.84392" rOut="47.5" />
-<ARectangle p="RZ" c="ECAL" n="FCAL EM" xMin="466.85" xMax="511.85" yMin="7.84392" yMax="47.5" />
-<ADisc p="YX" c="HCAL" n="FCAL HAD 1" rIn="7.90558" rOut="47.5" />
-<ARectangle p="RZ" c="HCAL" n="FCAL HAD 1" xMin="512.3" xMax="557.3" yMin="7.90558" yMax="47.5" />
-<ADisc p="YX" c="HCAL" n="FCAL HAD 2" rIn="7.96007" rOut="47.5" />
-<ARectangle p="RZ" c="HCAL" n="FCAL HAD 2" xMin="559.75" xMax="604.75" yMin="7.96007" yMax="47.5" />
-<ABarrelCalorimeter c="HCAL" n="TILE Barrel" sampling="0" region="0" rMin="229" rMax="260" zMin="0" zMax="282" eta0="0" deta="0.1" neta="10" meta="0" phi0="0" nphi="64" />
-<ABarrelCalorimeter c="HCAL" n="TILE Barrel" sampling="1" region="0" rMin="260" rMax="344" zMin="0" zMax="282" eta0="0" deta="0.1" neta="9" meta="0" phi0="0" nphi="64" />
-<ABarrelCalorimeter c="HCAL" n="TILE Barrel" sampling="2" region="0" rMin="344" rMax="386" zMin="-36.5199" zMax="282" eta0="-0.1" deta="0.2" neta="4" meta="0" phi0="0" nphi="64" />
-<ABarrelCalorimeter c="HCAL" n="Extended TILE" sampling="0" region="0" rMin="229" rMax="260" zMin="355.95" zMax="615" eta0="1.1" deta="0.1" neta="5" meta="11" phi0="0" nphi="64" />
-<ABarrelCalorimeter c="HCAL" n="Extended TILE" sampling="1" region="0" rMin="260" rMax="314" zMin="355.95" zMax="615" eta0="1" deta="0.1" neta="5" meta="10" phi0="0" nphi="64" />
-<ABarrelCalorimeter c="HCAL" n="Extended TILE" sampling="2" region="0" rMin="314" rMax="386" zMin="355.95" zMax="615" eta0="0.9" deta="0.2" neta="2" meta="10" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="1" region="0" rMin="299" rMax="344" zMin="346.435" zMax="355.92" eta="9" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="2" region="0" rMin="344" rMax="386" zMin="325.05" zMax="355.95" eta="8" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="3" region="0" rMin="264.6" rMax="295.9" zMin="354.45" zMax="355.95" eta="10" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="3" region="0" rMin="230.5" rMax="264.6" zMin="354.45" zMax="355.95" eta="11" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="3" region="0" rMin="182.7" rMax="230.5" zMin="353.2" zMax="354" eta="13" phi0="0" nphi="64" />
-<AGapCalorimeter c="HCAL" n="ITC Gap" sampling="3" region="0" rMin="146.5" rMax="182.7" zMin="353.2" zMax="354" eta="15" phi0="0" nphi="64" />
-<AEndcapCryostat c="HCAL" n="Minimum Bias Trigger Scintillators" sampling="0" region="0" rMin="15.3" rMax="42.6" zMin="319.187" zMax="321.187" neta="1" nphi="8" />
-<AEndcapCryostat c="HCAL" n="Minimum Bias Trigger Scintillators" sampling="1" region="0" rMin="42.6" rMax="89" zMin="319.187" zMax="321.187" neta="1" nphi="8" />
-</AGeometry>
diff --git a/graphics/AtlantisJava/geometry/AMuonGeometry.xml b/graphics/AtlantisJava/geometry/AMuonGeometry.xml
deleted file mode 100755
index bf6ea122c013..000000000000
--- a/graphics/AtlantisJava/geometry/AMuonGeometry.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE AMuonGeometry [
-<!ELEMENT AMuonGeometry (ABox | ATBx | ATrd)*>
-<!ELEMENT ABox   EMPTY >
-<!ATTLIST ABox
-          n          CDATA #REQUIRED
-          zi         CDATA #REQUIRED
-          zo         CDATA #REQUIRED
-          ri         CDATA #REQUIRED
-          ro         CDATA #REQUIRED
-          w          CDATA #REQUIRED
-          eta        CDATA #REQUIRED
-          phi        CDATA #REQUIRED
-          dphi       CDATA "0"
-          sh         CDATA "0"
-          RPCi       CDATA "0"
-          RPCo       CDATA "0">
-<!ELEMENT ATBx   EMPTY >
-<!ATTLIST ATBx
-          n          CDATA #REQUIRED
-          zi         CDATA #REQUIRED
-          zo         CDATA #REQUIRED
-          ri         CDATA #REQUIRED
-          ro         CDATA #REQUIRED
-          w          CDATA #REQUIRED
-          eta        CDATA #REQUIRED
-          phi        CDATA #REQUIRED
-          sh         CDATA "0"
-          dphi       CDATA "0"
-          RPCi       CDATA "0"
-          RPCo       CDATA "0"
-          zis        CDATA #REQUIRED
-          zos        CDATA #REQUIRED
-          ws         CDATA #REQUIRED
-          or         CDATA "0">
-<!ELEMENT ATrd   EMPTY >
-<!ATTLIST ATrd
-          n          CDATA #REQUIRED
-          zi         CDATA #REQUIRED
-          zo         CDATA #REQUIRED
-          ri         CDATA #REQUIRED
-          ro         CDATA #REQUIRED
-          wi         CDATA #REQUIRED
-          wo         CDATA #REQUIRED
-          eta        CDATA #REQUIRED
-          phi        CDATA #REQUIRED
-          dphi       CDATA "0"
-          sh         CDATA "0"
-          a          CDATA "0">
-]>
-<AMuonGeometry>
-<ABox n="MDT_BIL" zi="33" zo="124.607" ri="474.091" ro="515.705" w="267.15" eta="1" phi="1 2 3 7" />
-<ABox n="MDT_BIL" zi="51" zo="124.586" ri="474.091" ro="515.705" w="267.15" eta="1" phi="4" />
-<ABox n="MDT_BIL" zi="56" zo="147.607" ri="525.691" ro="567.305" w="267.15" eta="1" phi="5" />
-<ABox n="MDT_BIL" zi="125" zo="234.628" ri="474.091" ro="515.705" w="267.15" eta="2" phi="1 2 3 4 5 7" />
-<ABox n="MDT_BIL" zi="235" zo="326.607" ri="474.091" ro="515.705" w="267.15" eta="3" phi="1 2 4 5 7" />
-<ABox n="MDT_BIL" zi="235" zo="344.628" ri="474.091" ro="515.705" w="267.15" eta="3" phi="3" />
-<ABox n="MDT_BIL" zi="345" zo="454.628" ri="474.091" ro="515.705" w="267.15" eta="4" phi="1 2 3 4 5" />
-<ABox n="MDT_BIL" zi="345" zo="436.607" ri="474.091" ro="515.705" w="267.15" eta="4" phi="7" />
-<ABox n="MDT_BIL" zi="455" zo="546.607" ri="474.091" ro="515.705" w="267.15" eta="5" phi="1 2 3 4 5" />
-<ABox n="MDT_BIL" zi="437" zo="528.607" ri="474.091" ro="515.705" w="267.15" eta="5" phi="7" />
-<ABox n="MDT_BIL" zi="547" zo="656.628" ri="474.091" ro="515.705" w="267.15" eta="6" phi="1 2 3 5" />
-<ABox n="MDT_BIL" zi="547" zo="638.607" ri="474.091" ro="515.705" w="267.15" eta="6" phi="4 7" />
-<ABox n="MDT_BIS" zi="1" zo="110.628" ri="440.793" ro="469.207" w="167.15" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="111" zo="202.607" ri="440.793" ro="469.207" w="167.15" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="203" zo="294.607" ri="440.793" ro="469.207" w="167.15" eta="3" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="295" zo="386.607" ri="440.793" ro="469.207" w="167.15" eta="4" phi="1 2 3" dphi="22.5" />
-<ABox n="MDT_BIS" zi="313" zo="404.607" ri="440.793" ro="469.207" w="167.15" eta="4" phi="4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="387" zo="478.607" ri="440.793" ro="469.207" w="167.15" eta="5" phi="1 2 3" dphi="22.5" />
-<ABox n="MDT_BIS" zi="405" zo="496.607" ri="440.793" ro="469.207" w="167.15" eta="5" phi="4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="479" zo="570.607" ri="440.793" ro="469.207" w="167.15" eta="6" phi="1 2 3" dphi="22.5" />
-<ABox n="MDT_BIS" zi="497" zo="588.607" ri="440.793" ro="469.207" w="167.15" eta="6" phi="4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="571" zo="680.628" ri="440.793" ro="469.207" w="167.15" eta="7" phi="1 2 3" dphi="22.5" />
-<ABox n="MDT_BIS" zi="589" zo="680.607" ri="440.793" ro="469.207" w="167.15" eta="7" phi="4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIS" zi="681" zo="730.558" ri="454.864" ro="466.145" w="85.15" eta="8" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BML" zi="15" zo="184.698" ri="675.194" ro="754.205" w="357.6" eta="1" phi="1 2" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="39" zo="184.67" ri="675.194" ro="754.205" w="357.6" eta="1" phi="3 7" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="87" zo="184.614" ri="675.194" ro="753.005" w="357.6" eta="1" phi="4 5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="63" zo="184.642" ri="675.194" ro="753.005" w="357.6" eta="1" phi="6 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="185" zo="354.698" ri="675.194" ro="754.205" w="357.6" eta="2" phi="1 2 3 4 5 6 7 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="355" zo="524.698" ri="675.194" ro="754.205" w="357.6" eta="3" phi="1 2 3 4 5 6 7 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="525" zo="646.642" ri="675.194" ro="753.005" w="357.6" eta="4" phi="1 2 3 4 5 6 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="647" zo="768.642" ri="675.194" ro="753.005" w="357.6" eta="4" phi="7" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="647" zo="768.642" ri="675.194" ro="753.005" w="357.6" eta="5" phi="1 2 3 4 5 6 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="769" zo="914.67" ri="675.194" ro="754.205" w="357.6" eta="5" phi="7" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="769" zo="914.67" ri="675.194" ro="754.205" w="357.6" eta="6" phi="1 2 3 4 5 6 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="918" zo="966" ri="743.8" ro="753.8" w="304" eta="6" phi="7" RPCi="15" RPCo="15" />
-<ABox n="MDT_BML" zi="918" zo="966" ri="743.8" ro="753.8" w="304" eta="7" phi="1 2 3 4 5 6 8" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="15" zo="184.698" ri="777.694" ro="842.905" w="309.6" eta="1" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="185" zo="364.5" ri="777.694" ro="845.705" w="309.6" eta="2" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="368" zo="513.67" ri="777.694" ro="841.705" w="309.6" eta="3" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="514" zo="691.35" ri="777.694" ro="851.305" w="309.6" eta="4" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="692.5" zo="790.114" ri="777.694" ro="841.705" w="309.6" eta="5" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMS" zi="790.5" zo="936.17" ri="777.694" ro="842.905" w="309.6" eta="6" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BOL" zi="15" zo="232.754" ri="924.444" ro="989.055" w="498.6" eta="1" phi="1 2" RPCo="15" />
-<ABox n="MDT_BOL" zi="39" zo="232.726" ri="924.444" ro="989.055" w="498.6" eta="1" phi="3" RPCo="15" />
-<ABox n="MDT_BOL" zi="87" zo="232.67" ri="924.444" ro="989.055" w="498.6" eta="1" phi="4 5" RPCo="15" />
-<ABox n="MDT_BOL" zi="63" zo="232.698" ri="924.444" ro="989.055" w="498.6" eta="1" phi="6 7 8" RPCo="15" />
-<ABox n="MDT_BOL" zi="233" zo="450.754" ri="924.444" ro="989.055" w="498.6" eta="2" phi="1 2 3 4 5 6 8" RPCo="15" />
-<ABox n="MDT_BOL" zi="233" zo="378.67" ri="924.444" ro="989.055" w="498.6" eta="2" phi="7" RPCo="15" />
-<ABox n="MDT_BOL" zi="451" zo="620.698" ri="924.444" ro="989.055" w="498.6" eta="3" phi="1 2 3 4 5 6 8" RPCo="15" />
-<ABox n="MDT_BOL" zi="379" zo="524.67" ri="924.444" ro="989.055" w="498.6" eta="3" phi="7" RPCo="15" />
-<ABox n="MDT_BOL" zi="621" zo="838.754" ri="924.444" ro="989.055" w="498.6" eta="4" phi="1 2 3 4 5 6 7 8" RPCo="15" />
-<ABox n="MDT_BOL" zi="839" zo="1056.75" ri="924.444" ro="989.055" w="498.6" eta="5" phi="1 2 3 4 5 6 7 8" RPCo="15" />
-<ABox n="MDT_BOL" zi="1057" zo="1226.7" ri="924.444" ro="989.055" w="498.6" eta="6" phi="1 2 3 4 5 6 7 8" RPCo="15" />
-<ABox n="MDT_BOS" zi="1" zo="218.754" ri="1019.19" ro="1082.46" w="379.6" eta="1" phi="1 2 3 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="73" zo="218.67" ri="1019.19" ro="1082.46" w="379.6" eta="1" phi="4" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="219" zo="436.754" ri="1019.19" ro="1082.46" w="379.6" eta="2" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="437" zo="654.754" ri="1019.19" ro="1082.46" w="379.6" eta="3" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="655" zo="872.754" ri="1019.19" ro="1082.46" w="379.6" eta="4" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="873" zo="1090.75" ri="1019.19" ro="1082.46" w="379.6" eta="5" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BOS" zi="1091" zo="1284.73" ri="1019.19" ro="1082.46" w="379.6" eta="6" phi="1 2 3 4 5 8" dphi="22.5" RPCi="15" />
-<ABox n="MDT_BEE" zi="877.9" zo="1023.57" ri="433.023" ro="452.33" w="91.15" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BEE" zi="1023.9" zo="1169.57" ri="433.023" ro="452.33" w="91.15" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ABox n="MDT_BIR" zi="52" zo="143.607" ri="592.407" ro="634.021" w="267.15" eta="1" phi="6" sh="11.65" />
-<ABox n="MDT_BIR" zi="52" zo="143.607" ri="592.407" ro="634.021" w="267.15" eta="1" phi="8" sh="-11.65" />
-<ABox n="MDT_BIR" zi="200" zo="291.607" ri="596.1" ro="637.714" w="153.65" eta="2" phi="6" sh="68.4" />
-<ABox n="MDT_BIR" zi="200" zo="291.607" ri="596.1" ro="637.714" w="153.65" eta="2" phi="8" sh="-68.4" />
-<ABox n="MDT_BIR" zi="292" zo="392.617" ri="594.083" ro="635.697" w="110.55" eta="3" phi="6" sh="46.85" />
-<ABox n="MDT_BIR" zi="292" zo="392.617" ri="594.083" ro="635.697" w="110.55" eta="3" phi="8" sh="-46.85" />
-<ABox n="MDT_BIR" zi="394" zo="485.607" ri="596.1" ro="637.714" w="153.65" eta="4" phi="6" sh="68.4" />
-<ABox n="MDT_BIR" zi="394" zo="485.607" ri="596.1" ro="637.714" w="153.65" eta="4" phi="8" sh="-68.4" />
-<ABox n="MDT_BIR" zi="541" zo="614.586" ri="596.1" ro="637.714" w="153.65" eta="5" phi="6" sh="68.4" />
-<ABox n="MDT_BIR" zi="541" zo="614.586" ri="596.1" ro="637.714" w="153.65" eta="5" phi="8" sh="-68.4" />
-<ABox n="MDT_BIR" zi="616" zo="725.628" ri="594.083" ro="635.697" w="110.55" eta="6" phi="6" sh="46.85" />
-<ABox n="MDT_BIR" zi="616" zo="725.628" ri="594.083" ro="635.697" w="110.55" eta="6" phi="8" sh="-46.85" />
-<ABox n="MDT_BMF" zi="62.5" zo="280.254" ri="777.694" ro="841.705" w="309.6" eta="1" phi="6 7" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMF" zi="406" zo="599.726" ri="777.694" ro="841.705" w="309.6" eta="2" phi="6 7" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BMF" zi="728" zo="873.67" ri="777.694" ro="841.705" w="309.6" eta="3" phi="6 7" dphi="22.5" RPCi="15" RPCo="15" />
-<ABox n="MDT_BOF" zi="62.57" zo="280.324" ri="1028.19" ro="1093.06" w="379.6" eta="1" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOF" zi="405.46" zo="599.186" ri="1028.19" ro="1106.21" w="379.6" eta="2" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOF" zi="727.92" zo="873.59" ri="1028.19" ro="1107.41" w="379.6" eta="3" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOF" zi="1002.6" zo="1124.24" ri="1028.19" ro="1106.21" w="379.6" eta="4" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOG" zi="-60.821" zo="60.8208" ri="1028.19" ro="1093.06" w="379.6" eta="0" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOG" zi="282.07" zo="403.712" ri="1028.19" ro="1093.06" w="379.6" eta="1" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOG" zi="602.75" zo="724.392" ri="1028.19" ro="1093.06" w="379.6" eta="2" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOG" zi="877.14" zo="998.782" ri="1028.19" ro="1106.21" w="379.6" eta="3" phi="6 7" dphi="22.5" RPCo="15" />
-<ABox n="MDT_BOG" zi="1147.2" zo="1268.84" ri="1028.19" ro="1106.21" w="379.6" eta="4" phi="6 7" dphi="22.5" RPCo="15" />
-<ATrd n="MDT_EIL1" zi="749.146" zo="785.86" ri="207.6" ro="317.228" wi="132.15" wo="186.9" eta="1" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EIL2" zi="749.146" zo="785.86" ri="319.1" ro="428.728" wi="186.15" wo="240.9" eta="2" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EIL3" zi="749.146" zo="785.86" ri="427.23" ro="464.774" wi="207.15" wo="207.15" eta="3" phi="1 2 3 4 5 7" />
-<ATrd n="MDT_EIL3" zi="749.146" zo="785.86" ri="427.535" ro="465.079" wi="174.15" wo="174.15" eta="3" phi="6" sh="-16.5" />
-<ATrd n="MDT_EIL3" zi="749.146" zo="785.86" ri="427.535" ro="465.079" wi="174.15" wo="174.15" eta="3" phi="8" sh="16.5" />
-<ATrd n="MDT_EIL4" zi="745.796" zo="782.51" ri="472" ro="509.544" wi="153.65" wo="153.65" eta="4" phi="1 5" />
-<ATrd n="MDT_EIL4" zi="745.796" zo="782.51" ri="472" ro="635.691" wi="235.15" wo="316.9" eta="4" phi="2 3 7" />
-<ATrd n="MDT_EIL4" zi="745.796" zo="782.51" ri="473.105" ro="636.796" wi="165.15" wo="246.9" eta="4" phi="4" sh="35" />
-<ATrd n="MDT_EIL4" zi="745.796" zo="782.51" ri="511.445" ro="639.094" wi="128.15" wo="191.9" eta="4" phi="6" sh="-62.5" />
-<ATrd n="MDT_EIL4" zi="745.796" zo="782.51" ri="511.445" ro="639.094" wi="128.15" wo="191.9" eta="4" phi="8" sh="62.5" />
-<ATrd n="MDT_EIL5" zi="745.796" zo="782.51" ri="508.04" ro="635.689" wi="253.15" wo="316.9" eta="5" phi="1 5" />
-<ATrd n="MDT_EEL1" zi="1116.5" zo="1148.11" ri="651.3" ro="772.942" wi="336.15" wo="396.9" eta="1" phi="1 2 4 5 6 7 8" />
-<ATrd n="MDT_EEL1" zi="1066.09" zo="1097.7" ri="671.8" ro="817.47" wi="244.65" wo="288.3" eta="1" phi="3" />
-<ATrd n="MDT_EEL2" zi="1116.5" zo="1148.11" ri="774.97" ro="896.612" wi="396.15" wo="456.9" eta="2" phi="1 2 4 5 6 7 8" />
-<ATrd n="MDT_EES1" zi="1011.9" zo="1043.51" ri="589.3" ro="734.97" wi="201.45" wo="245.1" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EES2" zi="1011.9" zo="1043.51" ri="737" ro="858.642" wi="244.65" wo="281.1" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EML1" zi="1411.25" zo="1447.66" ri="177" ro="346.698" wi="118.65" wo="203.4" eta="1" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EML2" zi="1411.25" zo="1447.66" ri="348.5" ro="542.226" wi="202.65" wo="299.4" eta="2" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EML3" zi="1411.25" zo="1447.66" ri="544" ro="737.726" wi="298.65" wo="395.4" eta="3" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EML4" zi="1411.25" zo="1447.66" ri="739.5" ro="933.226" wi="394.65" wo="491.4" eta="4" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EML5" zi="1411.25" zo="1447.66" ri="935" ro="1128.73" wi="490.65" wo="587.4" eta="5" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EMS1" zi="1369.65" zo="1406.06" ri="177" ro="370.726" wi="83.55" wo="141.6" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EMS2" zi="1369.65" zo="1406.06" ri="372.5" ro="566.226" wi="141.15" wo="199.2" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EMS3" zi="1369.65" zo="1406.06" ri="568" ro="761.726" wi="198.75" wo="256.8" eta="3" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EMS4" zi="1369.65" zo="1406.06" ri="763.5" ro="957.226" wi="256.35" wo="314.4" eta="4" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EMS5" zi="1369.65" zo="1406.06" ri="959" ro="1152.73" wi="313.95" wo="372" eta="5" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOL1" zi="2124.25" zo="2160.66" ri="277" ro="446.698" wi="168.15" wo="252.9" eta="1" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOL2" zi="2124.25" zo="2160.66" ri="448.5" ro="618.198" wi="264.15" wo="348.9" eta="2" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOL3" zi="2124.25" zo="2160.66" ri="620" ro="765.67" wi="348.15" wo="420.9" eta="3" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOL4" zi="2124.25" zo="2160.66" ri="767.5" ro="913.17" wi="420.15" wo="492.9" eta="4" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOL5" zi="2124.25" zo="2160.66" ri="915" ro="1060.67" wi="492.15" wo="564.9" eta="5" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOL6" zi="2124.25" zo="2160.66" ri="1062.5" ro="1208.17" wi="564.15" wo="636.9" eta="6" phi="1 2 3 4 5 6 7 8" />
-<ATrd n="MDT_EOS1" zi="2165.85" zo="2202.26" ri="277" ro="446.698" wi="124.95" wo="175.8" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOS2" zi="2165.85" zo="2202.26" ri="448.5" ro="618.198" wi="175.35" wo="226.2" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOS3" zi="2165.85" zo="2202.26" ri="620" ro="789.698" wi="225.75" wo="276.6" eta="3" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOS4" zi="2165.85" zo="2202.26" ri="791.5" ro="937.17" wi="276.15" wo="319.8" eta="4" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOS5" zi="2165.85" zo="2202.26" ri="939" ro="1084.67" wi="319.35" wo="363" eta="5" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EOS6" zi="2165.85" zo="2202.26" ri="1086.5" ro="1232.17" wi="362.55" wo="406.2" eta="6" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="TGC_T1F1" zi="1327.15" zo="1334.15" ri="190" ro="397.54" wi="57.69" wo="112.34" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23" dphi="7.5" />
-<ATrd n="TGC_T1F1" zi="1345.05" zo="1352.05" ri="190" ro="397.54" wi="57.69" wo="112.34" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24" dphi="7.5" />
-<ATrd n="TGC_T1E1" zi="1345.05" zo="1359.95" ri="388" ro="1068.2" wi="64.49" wo="154.85" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47" dphi="3.75" />
-<ATrd n="TGC_T1E1" zi="1327.15" zo="1342.05" ri="388" ro="1068.2" wi="64.49" wo="154.85" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48" dphi="3.75" />
-<ATrd n="TGC_T2F1" zi="1460.05" zo="1464.42" ri="252.59" ro="432.15" wi="75.51" wo="122.78" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23" dphi="7.5" />
-<ATrd n="TGC_T2F1" zi="1475.55" zo="1479.92" ri="252.59" ro="432.15" wi="75.51" wo="122.78" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24" dphi="7.5" />
-<ATrd n="TGC_T2E1" zi="1475.55" zo="1485.42" ri="418.4" ro="1191.7" wi="68.47" wo="170.84" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47" dphi="3.75" />
-<ATrd n="TGC_T2E1" zi="1460.05" zo="1469.92" ri="418.4" ro="1191.7" wi="68.47" wo="170.84" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48" dphi="3.75" />
-<ATrd n="TGC_T3F1" zi="1502.05" zo="1506.42" ri="261" ro="440.56" wi="75.51" wo="122.79" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23" dphi="7.5" />
-<ATrd n="TGC_T3F1" zi="1517.55" zo="1521.92" ri="261" ro="440.56" wi="75.51" wo="122.79" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24" dphi="7.5" />
-<ATrd n="TGC_T3E1" zi="1517.55" zo="1527.42" ri="436.56" ro="1191.7" wi="70.84" wo="170.84" eta="1" phi="1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47" dphi="3.75" />
-<ATrd n="TGC_T3E1" zi="1502.05" zo="1511.92" ri="436.56" ro="1191.7" wi="70.84" wo="170.84" eta="1" phi="2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48" dphi="3.75" />
-<ATrd n="TGC_T4F1" zi="698.06" zo="702.43" ri="217" ro="443.4" wi="62.38" wo="121.99" eta="1" phi="1 3 4 6 7 9 10 12 13 15 16 18 19 21 22 24" dphi="7.5" />
-<ATrd n="TGC_T4F1" zi="693.04" zo="697.41" ri="217" ro="433.4" wi="62.38" wo="119.36" eta="1" phi="2 5 8 11 14 17 20 23" dphi="7.5" />
-<ATrd n="TGC_T4E1" zi="730.87" zo="735.24" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="1 4 7" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="2" dphi="-5.5" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="3 6" dphi="5.5" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="5 8" dphi="-5.5" />
-<ATrd n="TGC_T4E1" zi="730.87" zo="735.24" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="9 12" dphi="15" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="10" dphi="9.5" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="11 14" dphi="20.5" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="13" dphi="9.5" />
-<ATrd n="TGC_T4E1" zi="730.87" zo="735.24" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="15" dphi="15" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="16" dphi="35.5" />
-<ATrd n="TGC_T4E1" zi="730.87" zo="735.24" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="17" dphi="30" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="470" ro="619" wi="83.33" wo="108.09" eta="1" phi="18" dphi="24.5" />
-<ATrd n="TGC_T4E1" zi="730.87" zo="735.24" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="19" dphi="45" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="20" dphi="39.5" />
-<ATrd n="TGC_T4E1" zi="737.53" zo="741.9" ri="520" ro="619" wi="91.64" wo="108.09" eta="1" phi="21" dphi="50.5" />
-<ATrd n="MDT_EIS1" zi="707.746" zo="744.46" ri="207.6" ro="335.249" wi="89.85" wo="128.1" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="MDT_EIS2" zi="707.746" zo="744.46" ri="337.1" ro="446.728" wi="127.65" wo="160.5" eta="2" phi="1 2 3 4 5 6 7 8" dphi="22.5" />
-<ATrd n="CSC_CSS1" zi="708.102" zo="738.022" ri="86.6016" ro="207.832" wi="40.29" wo="75.7865" eta="1" phi="1 2 3 4 5 6 7 8" dphi="22.5" a="-11.587" />
-<ATrd n="CSC_CSL1" zi="744.539" zo="774.459" ri="92.0422" ro="206.732" wi="61.01" wo="117.027" eta="1" phi="1 2 3 4 5 6 7 8" a="-11.587" />
-<ABox n="MDT_BIM" zi="107" zo="216.628" ri="519.465" ro="561.079" w="153.65" eta="1" phi="6" sh="-56.6" />
-<ABox n="MDT_BIM" zi="107" zo="216.628" ri="519.465" ro="561.079" w="153.65" eta="1" phi="8" sh="56.6" />
-<ABox n="MDT_BIM" zi="217" zo="326.628" ri="519.465" ro="561.079" w="153.65" eta="2" phi="6" sh="-56.6" />
-<ABox n="MDT_BIM" zi="217" zo="326.628" ri="519.465" ro="561.079" w="153.65" eta="2" phi="8" sh="56.6" />
-<ABox n="MDT_BIM" zi="327" zo="436.628" ri="519.465" ro="561.079" w="153.65" eta="3" phi="6" sh="-56.6" />
-<ABox n="MDT_BIM" zi="327" zo="436.628" ri="519.465" ro="561.079" w="153.65" eta="3" phi="8" sh="56.6" />
-<ABox n="MDT_BIM" zi="437" zo="546.628" ri="519.465" ro="561.079" w="153.65" eta="4" phi="6" sh="-56.6" />
-<ABox n="MDT_BIM" zi="437" zo="546.628" ri="519.465" ro="561.079" w="153.65" eta="4" phi="8" sh="56.6" />
-<ABox n="MDT_BIM" zi="547" zo="656.628" ri="519.465" ro="561.079" w="153.65" eta="5" phi="6" sh="-56.6" />
-<ABox n="MDT_BIM" zi="547" zo="656.628" ri="519.465" ro="561.079" w="153.65" eta="5" phi="8" sh="56.6" />
-</AMuonGeometry>
diff --git a/graphics/AtlantisJava/geometry/ATLAS_IDS.xml b/graphics/AtlantisJava/geometry/ATLAS_IDS.xml
deleted file mode 100755
index 81f4d7c3a445..000000000000
--- a/graphics/AtlantisJava/geometry/ATLAS_IDS.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE IdDict SYSTEM "IdDict.dtd" [
-  <!ENTITY InnerDetector           SYSTEM "IdDictInnerDetector.xml">
-  <!ENTITY LArCalorimeter          SYSTEM "IdDictLArCalorimeter.xml">
-  <!ENTITY TileCalorimeter         SYSTEM "IdDictTileCalorimeter.xml">
-  <!ENTITY Calorimeter             SYSTEM "IdDictCalorimeter.xml">
-  <!ENTITY MuonSpectrometer        SYSTEM "IdDictMuonSpectrometer.xml">
-  <!ENTITY ATLAS                   SYSTEM "IdDictATLAS.xml">
-  <!ENTITY LArHighVoltage          SYSTEM "IdDictLArHighVoltage.xml">
-  <!ENTITY LArElectrode            SYSTEM "IdDictLArElectrode.xml">
-  <!ENTITY ForwardDetectors        SYSTEM "IdDictForwardDetectors.xml">
-]>
-
-<IdDict IdDictVersion="v1">
-
-&InnerDetector;
-&LArCalorimeter;
-&TileCalorimeter;
-&Calorimeter;
-&MuonSpectrometer;
-&ATLAS;
-&LArHighVoltage;
-&LArElectrode;
-&ForwardDetectors;
-
-</IdDict>
-
diff --git a/graphics/AtlantisJava/geometry/IdDict.dtd b/graphics/AtlantisJava/geometry/IdDict.dtd
deleted file mode 100755
index 5077ec98a636..000000000000
--- a/graphics/AtlantisJava/geometry/IdDict.dtd
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml encoding="US-ASCII"?>
-
-<!-- IdDict: Identifier Dictionary
-     ==========================
-
-   o This describes the possible identifier ranges.
-
-   o One may describe several identifier dictionaries, each by a IdDictionary element.
-     A dictionary is identified by its name.
-
-   o Each dictionary may describe :
-
-      + individual identifier fields ("field"). 
-
-          - This is useful when the field values are individually labelled.
-          - purely numeric fields do not need to be explicitly
-            described, in which case, their possible ranges will be deduced from the defined
-            regions.
-
-      + identifier regions ("region").
-
-          - they are the alternate identifier ranges for this dictionary.
-          - a region specifies a contiguous range of identifiers, complete for the dictionary.
-          - it may be labelled with a "name".
-	  - it may also have a "tag" (see alternate regions)
-          - it contains the ordered list of fields with their explicit value range.
-          - each entry in this list may be 
-             - a range assigned to a given field ("range")
-             - a reference to a subregion ("reference") (see below)
-             - a reference to a complete identifier domain ("identifiers")
-	     - a list of alternative ranges which are differentiated according 
-	       to their tag ("alternate_ranges")
-
-      + alternate regions ("alternate_regions").
-
-          - this contains two or more alternate region specifications
-          which are differentiated by their "tag". An empty tag is
-          default. This allows at generation time to select a specific
-          tag.
-
-      + subregions ("subregion")
-
-          - A subregion speficies a contiguous range of identifiers, describing a 
-            subset of the identifier fields in the dictionary.
-          - it must identified by a name.
-          - the role of subregions is to be referenced by regions, and they typically describe
-            the parts that are common to several regions.
-
--->
-
-
-
-<!ENTITY % DTD_constraint 'IdDictVersion ( v1 ) #REQUIRED'>
-
-<!ELEMENT  IdDict        ( IdDictionary )* >
-<!ATTLIST  IdDict
-           %DTD_constraint;>
-
-<!ELEMENT  IdDictionary ( field | subregion | region | alternate_regions )* >
-<!ATTLIST  IdDictionary
-           name       ID     #REQUIRED
-           version    CDATA  #IMPLIED
-           date       CDATA  #IMPLIED
-           author     CDATA  #IMPLIED>
-
-
-<!ELEMENT  field      ( label )* >
-<!ATTLIST  field
-           name       CDATA  #REQUIRED >
-
-<!ELEMENT  label      EMPTY>
-<!ATTLIST  label
-           name       CDATA  #REQUIRED
-           value      CDATA  #IMPLIED> 
-
-<!ELEMENT  alternate_regions ( region )* >
-<!ATTLIST  alternate_regions
-           name       CDATA  #IMPLIED>
-
-<!ELEMENT  region     ( range | reference | dictionary )* >
-<!ATTLIST  region
-           name       CDATA  #IMPLIED
-           group      CDATA  #IMPLIED
-           tag        CDATA  #IMPLIED
-           next_abs_eta CDATA  #IMPLIED
-	   prev_samp  CDATA  #IMPLIED
-	   next_samp  CDATA  #IMPLIED
-	   prev_subdet  CDATA  #IMPLIED
-	   next_subdet  CDATA  #IMPLIED
-	   eta0       CDATA  #IMPLIED
-	   deta       CDATA  #IMPLIED
-	   phi0       CDATA  #IMPLIED
-	   dphi       CDATA  #IMPLIED>
-
-<!ELEMENT  range      EMPTY>
-<!ATTLIST  range
-           field      CDATA  #REQUIRED
-           value      CDATA  #IMPLIED
-           minvalue   CDATA  #IMPLIED
-           maxvalue   CDATA  #IMPLIED
-           values     CDATA  #IMPLIED
-           prev_value CDATA  #IMPLIED
-           next_value CDATA  #IMPLIED
-           wraparound (TRUE | false) "false">
-
-<!ELEMENT  reference  EMPTY>
-<!ATTLIST  reference
-           subregion  IDREF  #REQUIRED>
-
-<!ELEMENT  dictionary EMPTY>
-<!ATTLIST  dictionary
-           name       IDREF  #REQUIRED>
-
-<!ELEMENT  subregion  ( range | reference | dictionary )* >
-<!ATTLIST  subregion
-           name       ID     #REQUIRED>
-
-
diff --git a/graphics/AtlantisJava/geometry/IdDictATLAS.xml b/graphics/AtlantisJava/geometry/IdDictATLAS.xml
deleted file mode 100755
index 95314ee2c0db..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictATLAS.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<IdDictionary name="ATLAS">
-
-  <field name="subdet">
-    <label name="InnerDetector"    value="2"  />
-    <label name="LArCalorimeter"   value="4"  />
-    <label name="TileCalorimeter"  value="5"  />
-    <label name="MuonSpectrometer" value="7"  />
-    <label name="Calorimeter"      value="10" />
-    <label name="LArHighVoltage"   value="11" /> 
-    <label name="LArElectrode"     value="12" /> 
-    <label name="ForwardDetectors" value="13" /> 
- </field>
-
-  <region>
-    <range field="subdet" value="InnerDetector" />
-    <dictionary name="InnerDetector" />
-  </region>
-
-  <region>
-    <range field="subdet" value="LArCalorimeter" />
-    <dictionary name="LArCalorimeter" />
-  </region>
-
-  <region>
-    <range field="subdet" value="TileCalorimeter" />
-    <dictionary name="TileCalorimeter" />
-  </region>
-
-  <region>
-    <range field="subdet" value="MuonSpectrometer" />
-    <dictionary name="MuonSpectrometer" />
-  </region>
-
-  <region>
-    <range field="subdet" value="Calorimeter" />
-    <dictionary name="Calorimeter" />
-  </region>
-
-  <region>
-    <range field="subdet" value="LArHighVoltage" />
-    <dictionary name="LArHighVoltage" />
-  </region>
-
-  <region>
-    <range field="subdet" value="LArElectrode" />
-    <dictionary name="LArElectrode" />
-  </region>
-
-  <region>
-    <range field="subdet" value="ForwardDetectors" />
-    <dictionary name="ForwardDetectors" />
-  </region>
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictCalorimeter.xml b/graphics/AtlantisJava/geometry/IdDictCalorimeter.xml
deleted file mode 100755
index f94f801d91ea..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictCalorimeter.xml
+++ /dev/null
@@ -1,731 +0,0 @@
-
-<IdDictionary name="Calorimeter" >
-
-
-<field name="DetZside" >
-  <label name="negative_DMTile_side" value="-5" />
-  <label name="negative_DMLar_side" value="-4" />
-  <label name="negative_eta_side" value="-2" />
-  <label name="negative_lvl1_side" value="-1" />
-  <label name="positive_lvl1_side" value="+1" />
-  <label name="positive_eta_side" value="+2" />
-  <label name="positive_DMLar_side" value="+4" />
-  <label name="positive_DMTile_side" value="+5" />
-</field>
-
-
-<!--  Dead Material Types -->
-<!-- xxxxxxxxxxxxxxxxxxxx -->
-
-<!-- 3 types of LAr Dead Material -->
-
- <subregion name="DMLArOutside" >
-  <range field="DetZside" values="negative_DMLar_side positive_DMLar_side" />
-  <range field="DMvalue"  value="1" />
- </subregion>
-
- <subregion name="DMLarInside" >
-  <range field="DetZside" values="negative_DMLar_side positive_DMLar_side" />
-  <range field="DMvalue"  value="2" />
- </subregion>
-
- <subregion name="DMLArBeamTest">
-  <range field="DetZside" values="negative_DMLar_side positive_DMLar_side" />
-  <range field="DMvalue" value="3" />
- </subregion>
-
-<!-- 2 types of Tile Dead Material -->
-
- <subregion name="DMTileOutside" >
-  <range field="DetZside" values="negative_DMTile_side positive_DMTile_side" />
-  <range field="DMvalue"  value="1" />
- </subregion>
-
- <subregion name="DMTileDefHits" >
-  <range field="DetZside" values="negative_DMTile_side positive_DMTile_side" />
-  <range field="DMvalue"  value="2" />
- </subregion>
-
- <subregion name="DMTileBeamTest" >
-  <range field="DetZside" values="negative_DMTile_side positive_DMTile_side" />
-  <range field="DMvalue"  value="3" />
- </subregion>
-
-
-
-<!--  Dead Material Phi regions -->
-<!-- xxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-<!-- 3 types of Phi region -->
-
-  <subregion name="DMPhi-1" >
-    <range field="phivalue" minvalue="0" maxvalue="63" wraparound="TRUE" />
-  </subregion> 
-
- <subregion name="DMPhi-2" >
-    <range field="phivalue" minvalue="0" maxvalue="31" wraparound="TRUE" />
-  </subregion>
-
-  <subregion name="DMPhi-3" >
-    <range field="phivalue" value="0" wraparound="TRUE" />
-  </subregion>
-
-
-
-<!-- LAr DM Samplings -->
-<!-- xxxxxxxxxxxxxxxxx -->
-
-
-<!-- 4 sampling region: 0 to 3 -->
-
-  <subregion name="DMLArSampling-0" >
-    <range field="samplingvalue" value="0" />
-  </subregion>
-
-  <subregion name="DMLArSampling-1" >
-    <range field="samplingvalue" value="1" />
-  </subregion>
-
-  <subregion name="DMLArSampling-2" >
-    <range field="samplingvalue" value="2" />
-  </subregion>
-
-  <subregion name="DMLArSampling-3" >
-    <range field="samplingvalue" value="3" />
-  </subregion>
-
-
-<!-- Tile DM Samplings -->
-<!-- xxxxxxxxxxxxxxxxx -->
- 
-
-<!-- 4 sampling region: 0 to 3 -->
-
-
- <subregion name="DMTileSampling-0" >
-   <range field="samplingvalue" value="0" />
-  </subregion> 
-
- <subregion name="DMTileSampling-1" >
-   <range field="samplingvalue" value="1" />
-  </subregion> 
-
- <subregion name="DMTileSampling-2" >
-   <range field="samplingvalue" value="2" />
-  </subregion> 
-
- <subregion name="DMTileSampling-3" >
-   <range field="samplingvalue" value="3" />
-  </subregion> 
-
-
-
-<!-- LAr DM regions -->
-<!-- xxxxxxxxxxxxxx -->
-
-<!-- type 1, sampling 0, regions 0 to 5 -->
-
-  <region group="DM_Reg" name="DM_4_1_0_0" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" minvalue="0" maxvalue="5" /> 
-    <range field="DMEta" minvalue="0" maxvalue="49" />
-    <reference subregion="DMPhi-1" />
-   </region>
-
-<!-- type 1, sampling 1, region 0 to 7-->
-
-  <region group="DM_Reg" name="DM_4_1_1_0" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="0" />
-  <range field="DMEta" minvalue="0" maxvalue="14" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_1" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="1" />
-   <range field="DMEta" minvalue="0" maxvalue="14" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_2" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="2" />
-    <range field="DMEta" minvalue="0" maxvalue="15" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_3" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="15" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-   <region group="DM_Reg" name="DM_4_1_1_4" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="4" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_5" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="2" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_6" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="6" />
-    <range field="DMEta" minvalue="0" maxvalue="18" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_1_7" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="7" />
-    <range field="DMEta" minvalue="0" maxvalue="17" /> 
-    <reference subregion="DMPhi-1" />
-  </region>
-
-<!-- type 1, sampling 2, region 0 to 5-->
- 
-  <region group="DM_Reg" name="DM_4_1_2_0" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="0" />
-  <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_2_1" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="1" />
-   <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_2_2" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="2" />
-    <range field="DMEta" minvalue="0" maxvalue="4" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_2_3" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="17" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_2_4" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="4" />
-  <range field="DMEta" minvalue="0" maxvalue="17" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_2_5" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="6" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
-<!-- type 1, sampling 3, region 0 to 2-->
-
-  <region group="DM_Reg" name="DM_4_1_3_0" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="0" />
-  <range field="DMEta" minvalue="0" maxvalue="32" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_3_1" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="1" />
-   <range field="DMEta" minvalue="0" maxvalue="14" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_1_3_2" >
-    <reference subregion="DMLArOutside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="2" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-3" />
-  </region>
-
-
-<!-- type 2, sampling [0,3], region 0 to 5-->
-
-  <region group="DM_Reg" name="DM_4_2_0_0" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="0" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_0_1" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="1" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
- <region group="DM_Reg" name="DM_4_2_0_2" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="2" />
-    <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_0_3" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_0_4" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="4" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_0_5" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-0" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="19" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
-  <region group="DM_Reg" name="DM_4_2_1_0" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="0" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_1_1" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="1" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_1_2" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="2" />
-    <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_1_3" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_1_4" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="4" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_1_5" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-1" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="19" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
-  <region group="DM_Reg" name="DM_4_2_2_0" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="0" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_2_1" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="1" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_2_2" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="2" />
-  <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_2_3" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_2_4" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="4" />
-  <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_2_5" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-2" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="19" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
-  <region group="DM_Reg" name="DM_4_2_3_0" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="0" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_3_1" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="1" />
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_3_2" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="2" />
-  <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_3_3" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="3" />
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-2" />
-  </region>
-
- <region group="DM_Reg" name="DM_4_2_3_4" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="4" />
-  <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-  <region group="DM_Reg" name="DM_4_2_3_5" >
-    <reference subregion="DMLarInside" />
-    <reference subregion="DMLArSampling-3" />
-    <range field="DMregion" value="5" />
-    <range field="DMEta" minvalue="0" maxvalue="19" />
-    <reference subregion="DMPhi-1" />
-  </region>
-
-
-<!-- TILE DM regions -->
-<!-- xxxxxxxxxxxxxxx -->
-
-<!-- type 1, sampling 0, region 0 to 1 -->
-
-   <region group="DM_Reg" name="DM_5_1_0_0" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-0" /> 
-    <range field="DMregion" value="0" /> 
-    <range field="DMEta" minvalue="0" maxvalue="9" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-   <region group="DM_Reg" name="DM_5_1_0_1" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-0" /> 
-    <range field="DMregion" value="1" /> 
-    <range field="DMEta" minvalue="0" maxvalue="4" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-<!-- type 1, sampling 1, region 0 to 2 -->
-
-   <region group="DM_Reg" name="DM_5_1_1_0" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-1" /> 
-    <range field="DMregion" value="0" /> 
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-   <region group="DM_Reg" name="DM_5_1_1_1" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-1" /> 
-    <range field="DMregion" value="1" /> 
-    <range field="DMEta" minvalue="0" maxvalue="2" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-   <region group="DM_Reg" name="DM_5_1_1_2" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-1" /> 
-    <range field="DMregion" value="2" /> 
-    <range field="DMEta" minvalue="0" maxvalue="3" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-
-<!-- type 1, sampling 2, region 0 to 2 -->
-
-  <region group="DM_Reg" name="DM_5_1_2_0" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-2" /> 
-    <range field="DMregion" value="0" /> 
-    <range field="DMEta" minvalue="0" maxvalue="7" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-   <region group="DM_Reg" name="DM_5_1_2_1" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-2" /> 
-    <range field="DMregion" value="1" /> 
-    <range field="DMEta" minvalue="0" maxvalue="4" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-   <region group="DM_Reg" name="DM_5_1_2_2" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-2" /> 
-    <range field="DMregion" value="2" /> 
-    <range field="DMEta" minvalue="0" maxvalue="1" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-<!-- type 1, sampling 3, region 0  -->
-
-   <region group="DM_Reg" name="DM_5_1_3_0" >
-    <reference subregion="DMTileOutside" />
-    <reference subregion="DMTileSampling-3" /> 
-    <range field="DMregion" value="0" /> 
-    <range field="DMEta" minvalue="0" maxvalue="16" />
-    <reference subregion="DMPhi-1" />
-   </region> 
-
-<!-- type 2, sampling 0, region 0  -->
-
-   <region group="DM_Reg" name="DM_5_2_0_0" >
-    <reference subregion="DMTileDefHits" />
-    <reference subregion="DMTileSampling-0" /> 
-    <range field="DMregion" value="0" /> 
-    <range field="DMEta" value="0" />
-    <reference subregion="DMPhi-3" />
-   </region> 
-
-
-<!--       LVL1 part   -->
-<!-- xxxxxxxxxxxxxxxxx -->
-
-  <field name="LVL1sampling" >
-    <label name="EM"       value="0" />
-    <label name="Hadronic" value="1" />
-  </field>
-
-  <subregion name="LVL1" >
-     <range field="DetZside" values="negative_lvl1_side positive_lvl1_side" /> 
-    <range field="LVL1sampling" values="EM Hadronic" />
-  </subregion>
-
- 
-  <region group="Reg_Lvl1" name="Lvl1_0" >
-    <reference subregion="LVL1" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="24" />
-    <range field="phi" minvalue="0" maxvalue="63" wraparound="TRUE" />
-    <range field="layer" minvalue="0" maxvalue="3" />
-  </region>
-
-  <region group="Reg_Lvl1" name="Lvl1_1" >
-    <reference subregion="LVL1" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="2" />
-    <range field="phi" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer" minvalue="0" maxvalue="3" />
-  </region>
-
-  <region group="Reg_Lvl1" name="Lvl1_2" >
-    <reference subregion="LVL1" />
-    <range field="region" value="2" />
-    <range field="eta" value="0" />
-    <range field="phi" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer" minvalue="0" maxvalue="3" />
-  </region>
-
-
-  <region group="Reg_Lvl1" name="Lvl1_3" >
-    <reference subregion="LVL1" />
-    <range field="region" value="3" />
-    <range field="eta" minvalue="0" maxvalue="3"/>
-    <range field="phi" minvalue="0" maxvalue="15" wraparound="TRUE" />
-    <range field="layer" minvalue="0" maxvalue="1" />
-  </region> 
-
-
-
-<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-<!--  Online L1 Trigger Tower regions -->
-<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
-
-
-<!-- Fields used to describe a TTower -->
-
-  <field name="barrel_endcap_fcal" >
-       <label name="barrel" value="0" />
-       <label name="endcap" value="1" />
-       <label name="fcal"   value="2" />
-  </field> 
-
-  <field name="em_had" >
-       <label name="em"     value="0" />
-       <label name="had"    value="1" />
-  </field>
-
-
-<!-- Subregion definition -->
-
- <subregion name="OnlineL1-barrel" >
-      <range field="DetZside" values="negative_eta_side positive_eta_side" /> 
-      <range field="barrel_endcap_fcal" value="barrel" />
- </subregion>
-
- <subregion name="OnlineL1-endcap" >
-      <range field="DetZside" values="negative_eta_side positive_eta_side" /> 
-      <range field="barrel_endcap_fcal" value="endcap" />
- </subregion>
-
- <subregion name="OnlineL1-fcal" >
-      <range field="DetZside" values="negative_eta_side positive_eta_side" /> 
-      <range field="barrel_endcap_fcal" value="fcal" />
- </subregion>
-
-
-<!--  Online L1 EM-Barrel -->
-<!-- xxxxxxxxxxxxxxxxxxxx -->
-
-<region group="Online_L1" name="l1_barrel" >
-    <reference subregion="OnlineL1-barrel" />
-    <range field="em_had"      value="em" />
-    <range field="tower_eta"   minvalue="1" maxvalue="15" />
-    <range field="tower_phi"   minvalue="1" maxvalue="64" />
-    <range field="tower_layer" minvalue="0" maxvalue="3" />
-  </region>
-
-
-<!--  Online L1 EM Endcap -->
-<!-- xxxxxxxxxxxxxxxxxxxx -->
-
-<region group="Online_L1" name="l1_emec_region1" >
-    <reference subregion="OnlineL1-endcap" />
-    <range field="em_had"      value="em" />
-    <range field="tower_eta"   minvalue="1" maxvalue="11" />
-    <range field="tower_phi"   minvalue="1" maxvalue="64" />
-    <range field="tower_layer" minvalue="0" maxvalue="3" />
-</region>
-
-<region group="Online_L1" name="l1_emec_region2" >
-    <reference subregion="OnlineL1-endcap" />
-    <range field="em_had"      value="em" />
-    <range field="tower_eta"   minvalue="12" maxvalue="15" />
-    <range field="tower_phi"   minvalue="1" maxvalue="32" />
-    <range field="tower_layer" minvalue="0" maxvalue="3" />
-</region>
-
-<!--  Online L1 HEC Endcap -->
-<!-- xxxxxxxxxxxxxxxxxxxxx -->
-
-<region group="Online_L1" name="l1_hec_region1" >
-    <reference subregion="OnlineL1-endcap" />
-    <range field="em_had"      value="had" />
-    <range field="tower_eta"   minvalue="2" maxvalue="11" />
-    <range field="tower_phi"   minvalue="1" maxvalue="64" />
-    <range field="tower_layer" minvalue="0" maxvalue="3" />
-</region>
-
-<region group="Online_L1" name="l1_hec_region2" >
-    <reference subregion="OnlineL1-endcap" />
-    <range field="em_had"      value="had" />
-    <range field="tower_eta"   minvalue="12" maxvalue="15" />
-    <range field="tower_phi"   minvalue="1" maxvalue="32" />
-    <range field="tower_layer" minvalue="0" maxvalue="3" />
-</region>
-
-
-<!--  Online L1 FCAL -->
-<!-- xxxxxxxxxxxxxxx -->
-  
-<region group="Online_L1" name="l1_fcal_em" >
-    <reference subregion="OnlineL1-fcal" />
-    <range field="em_had"      value="em" />
-    <range field="tower_eta"   minvalue="1" maxvalue="4" />
-    <range field="tower_phi"   minvalue="1" maxvalue="16" />
-    <range field="tower_layer" value="0" />
-</region>
-
-<region group="Online_L1" name="l1_fcal_had" >
-    <reference subregion="OnlineL1-fcal" />
-    <range field="em_had"      value="had" />
-    <range field="tower_eta"   minvalue="1" maxvalue="4" />
-    <range field="tower_phi"   minvalue="1" maxvalue="16" />
-    <range field="tower_layer" minvalue="0" maxvalue="1" />
-</region>
-
-
-</IdDictionary>
diff --git a/graphics/AtlantisJava/geometry/IdDictForwardDetectors.xml b/graphics/AtlantisJava/geometry/IdDictForwardDetectors.xml
deleted file mode 100644
index 588eb81db1c6..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictForwardDetectors.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-<!--
-
-   The ForwardDetectors identifier is arranged as follows
-
-   ForwardDetectors
-     part=BCM
-       <to be defined>
-
-     part=BCM_Online
-       <to be defined>
-
-     part=LUCID
-       <to be defined>
-
-     part=LUCID_Online
-       <to be defined>
-
-     part=ZDC
-       side module type channel
-
-     part=ZDC_Online
-       side module type channel gain delay
-
-  -->
-
-<IdDictionary name="ForwardDetectors" >
-
-  <!--
-     Start by defining some symbolic labels used for some fields
-     (other fields will be specified by numeric ranges)
-   -->
-
-  <field name="part" >
-    <label name="ALFA"         value="1" />
-    <label name="ALFA_Online"  value="2" />
-    <label name="BCM"          value="3" />
-    <label name="BCM_Online"   value="4" />
-    <label name="LUCID"        value="5" />
-    <label name="LUCID_Online" value="6" />
-    <label name="ZDC"          value="7" />
-    <label name="ZDC_Online"   value="8" />
-    <label name="Extra"        value="9" />
-    <label name="Extra_Online" value="10" />
-  </field>
-
-  <field name="side">
-    <label name="negative" value="-1" />
-    <label name="positive" value="+1"  />
-  </field>
-
-
-  <!--
-
-      ALFA - to do
-
-    -->
-
-  <region group="ALFA" name = "alfa">
-    <range field="part"    value="ALFA" />
-  </region>
-
-  <region group="ALFA_Online" name = "alfa">
-    <range field="part"    value="ALFA_Online" />
-  </region>
-
-  <!--
-
-      BCM - to do
-
-    -->
-
-  <region group="BCM" name = "bcm">
-    <range field="part"    value="BCM" />
-  </region>
-
-  <region group="BCM_Online" name = "bcm">
-    <range field="part"    value="BCM_Online" />
-  </region>
-
-  <!--
-
-      LUCID - to do
-
-    -->
-
-  <region group="LUCID" name = "lucid">
-    <range field="part"    value="LUCID" />
-  </region>
-
-  <region group="LUCID_Online" name = "lucid">
-    <range field="part"    value="LUCID_Online" />
-  </region>
-
-  <!--
-
-      ZDC
-
-    -->
-
-  <!-- ZDC - offline -->
-
-  <region group="ZDC" name = "zdc">
-    <range field="part"    value="ZDC" />
-    <range field="side"    values="negative positive"/>
-    <range field="module"  minvalue="0" maxvalue="3"/>
-    <range field="type"    minvalue="0" maxvalue="1" />
-    <range field="channel" minvalue="0" maxvalue="63" />
-  </region>
-
-  <!-- ZDC - online -->
-
-  <region group="ZDC_Online" name = "zdc_online">
-    <range field="part"    value="ZDC_Online" />
-    <range field="side"    values="negative positive"/>
-    <range field="module"  minvalue="0" maxvalue="3"/>
-    <range field="type"    minvalue="0" maxvalue="1" />
-    <range field="channel" minvalue="0" maxvalue="63" />
-    <range field="gain"    minvalue="0" maxvalue="1" />
-    <range field="delay"   minvalue="0" maxvalue="1" />
-  </region>
-
-  <!--
-
-      EXTRA - to do
-
-    -->
-
-  <region group="EXTRA" name = "extra">
-    <range field="part"    value="Extra" />
-  </region>
-
-  <region group="EXTRA_Online" name = "extra">
-    <range field="part"    value="Extra_Online" />
-  </region>
-
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictInnerDetector.xml b/graphics/AtlantisJava/geometry/IdDictInnerDetector.xml
deleted file mode 100755
index 98c405c193ab..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictInnerDetector.xml
+++ /dev/null
@@ -1,559 +0,0 @@
-
-
-<!--
-
-   The InnerDetector identifier is arranged as follows
-
-   InnerDetector
-     part=Pixel
-       side=barrel
-         layer phi_module eta_module phi_index eta_index 
-       side=endcap
-         disk phi_module eta_module phi_index eta_index 
-
-     part=SCT
-       side=barrel
-         layer phi_module eta_module side strip
-       side=endcap
-         disk phi_module eta_module side strip
-
-     part=TRT
-       side=barrel
-         layer phi_module straw_layer straw
-       side=endcap
-         wheel phi_module straw_layer straw
-
-
-  -->
-
-<IdDictionary name="InnerDetector" >
-
-  <!--
-     Start by defining some symbolic labels used for some fields
-     (other fields will be specified by numeric ranges)
-   -->
-
-  <field name="part" >
-    <label name="Pixel" value="1" />
-    <label name="SCT"   value="2" />
-    <label name="TRT"   value="3" />
-  </field>
-
-  <field name="barrel_endcap">
-    <label name="negative_endcap" value="-2" />
-    <label name="negative_barrel" value="-1" />
-    <label name="barrel"          value="0" />
-    <label name="positive_barrel" value="+1"  />
-    <label name="positive_endcap" value="+2"  />
-  </field>
-
-
-
-  <!--
-
-      Pixel
-
-    -->
-
-  <!-- Dummy region: This forces the bit packing to be the same for all layouts -->
-
-  <region group="pixel" name = "dummy">
-    <range field="part" value="Pixel" />
-    <range field="barrel_endcap" values="negative_endcap barrel positive_endcap"/>
-    <range field="layer" minvalue="0" maxvalue="2"/>
-    <range field="phi_module" minvalue="0" maxvalue="51" />
-    <range field="eta_module" minvalue="-6" maxvalue="+6" />
-    <range field="phi_index" minvalue="0" maxvalue="327" />
-    <range field="eta_index" minvalue="0" maxvalue="191" />
-  </region>
-
-
-  <!--
-      Define few subregions which are re-used in several id-ranges.
-   -->
-
-  <subregion name="pixel_barrel">
-    <range field="part" value="Pixel" />
-    <range field="barrel_endcap" value="barrel" />
-  </subregion>
-
-  <subregion name="pixel_endcap">
-    <range field="part" value="Pixel" />
-    <range field="barrel_endcap" values="negative_endcap positive_endcap" />
-  </subregion>
-
-  <subregion name="pixel_default_eta_module">
-    <range field="phi_index" minvalue="0" maxvalue="327" />
-    <range field="eta_index" minvalue="0" maxvalue="143" />
-  </subregion>
-
-  <subregion name="pixel_phi_barrel_module">
-    <range field="eta_module" minvalue="-6" maxvalue="+6" />
-    <reference subregion="pixel_default_eta_module" />
-  </subregion>
-
-  <subregion name="pixel_phi_endcap_module">
-    <range field="eta_module" value="0" />
-    <reference subregion="pixel_default_eta_module" />
-  </subregion>
-
-  <!--
-    Then enumerate all the possible regions of the Pixel subdetector.
-    Each region corresponds to an identifier range.
-    -->
-
-  <!--
-    The follow region is the pixel b-layer. Normally, the correct
-    phi_index max should be 319, but we set it to 327 as for the other
-    layers to allow to calculate the pixel_id from SiDigit, i.e. using
-    the G3 numbering which is not completely correct. This should be a
-    temporary fix. Correct specif:
-    <range field="phi_index" minvalue="0" maxvalue="319" />
-    -->
-  <alternate_regions>
-    <region group="pixel" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="0" />
-      <range field="phi_module" minvalue="0" maxvalue="21" wraparound="TRUE" />
-      <range field="eta_module" minvalue="-6" maxvalue="+6" />
-      <range field="phi_index" minvalue="0" maxvalue="327" />
-      <range field="eta_index" minvalue="0" maxvalue="191" />
-    </region>
-    <region group="pixel" tag="initial_layout" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="0" />
-      <range field="phi_module" minvalue="0" maxvalue="21" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-    <region group="pixel" tag="final_layout" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="0" />
-      <range field="phi_module" minvalue="0" maxvalue="21" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-    <region group="pixel" tag="destaged_layout" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="0" />
-      <range field="phi_module" minvalue="0" maxvalue="21" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-  </alternate_regions>
-
-  <alternate_regions>
-    <region group="pixel" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="1" />
-      <range field="phi_module" minvalue="0" maxvalue="37" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-    <region group="pixel" tag="initial_layout" />
-    <region group="pixel" tag="final_layout" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="1" />
-      <range field="phi_module" minvalue="0" maxvalue="37" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-    <region group="pixel" tag="destaged_layout" >
-      <reference subregion="pixel_barrel" />
-      <range field="layer" value="1" />
-      <range field="phi_module" minvalue="0" maxvalue="37" wraparound="TRUE" />
-      <reference subregion="pixel_phi_barrel_module" />
-    </region>
-  </alternate_regions>
-
-  <region group="pixel" >
-    <reference subregion="pixel_barrel" />
-    <range field="layer" value="2" />
-    <range field="phi_module" minvalue="0" maxvalue="51" wraparound="TRUE" />
-    <reference subregion="pixel_phi_barrel_module" />
-  </region>
-
-  <alternate_regions>
-    <region group="pixel" >
-      <reference subregion="pixel_endcap" />
-      <range field="disk" minvalue="0" maxvalue="2" />
-      <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-      <reference subregion="pixel_phi_endcap_module" />
-    </region>
-    <region group="pixel"  tag="initial_layout" >
-      <reference subregion="pixel_endcap" />
-      <range field="disk" values="0 2" />
-      <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-      <reference subregion="pixel_phi_endcap_module" />
-    </region>
-    <region group="pixel"  tag="final_layout" >
-      <reference subregion="pixel_endcap" />
-      <range field="disk" minvalue="0" maxvalue="2" />
-      <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-      <reference subregion="pixel_phi_endcap_module" />
-    </region>
-    <region group="pixel"  tag="destaged_layout" >
-      <reference subregion="pixel_endcap" />
-      <range field="disk" minvalue="0" maxvalue="2" />
-      <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-      <reference subregion="pixel_phi_endcap_module" />
-    </region>
-  </alternate_regions>
-
-
-
-  <!--
-
-      SCT
-
-    -->
-
-
-  <subregion name="SCT_barrel">
-    <range field="part" value="SCT" />
-    <range field="barrel_endcap" value="barrel" />
-  </subregion>
-
-  <subregion name="SCT_endcap">
-    <range field="part" value="SCT" />
-    <range field="barrel_endcap" values="negative_endcap positive_endcap" />
-  </subregion>
-
-  <subregion name="SCT_eta_module">
-    <range field="side" minvalue="0" maxvalue="1" />
-    <range field="strip" minvalue="0" maxvalue="767" />
-  </subregion>
-
-
-
-
-  <subregion name="SCT_phi_negative_barrel_module">
-    <range field="eta_module" minvalue="-6" maxvalue="-1" next_value="1" />
-    <reference subregion="SCT_eta_module" />
-  </subregion>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="0" />
-    <range field="phi_module" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <reference subregion="SCT_phi_negative_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="1" />
-    <range field="phi_module" minvalue="0" maxvalue="39" wraparound="TRUE" />
-    <reference subregion="SCT_phi_negative_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="2" />
-    <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-    <reference subregion="SCT_phi_negative_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="3" />
-    <range field="phi_module" minvalue="0" maxvalue="55"  wraparound="TRUE"/>
-    <reference subregion="SCT_phi_negative_barrel_module" />
-  </region>
-
-
-
-
-
-  <subregion name="SCT_phi_positive_barrel_module">
-    <range field="eta_module" minvalue="+1" maxvalue="+6" prev_value="-1" />
-    <reference subregion="SCT_eta_module" />
-  </subregion>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="0" />
-    <range field="phi_module" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <reference subregion="SCT_phi_positive_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="1" />
-    <range field="phi_module" minvalue="0" maxvalue="39" wraparound="TRUE" />
-    <reference subregion="SCT_phi_positive_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="2" />
-    <range field="phi_module" minvalue="0" maxvalue="47" wraparound="TRUE" />
-    <reference subregion="SCT_phi_positive_barrel_module" />
-  </region>
-
-  <region group="sct" >
-    <reference subregion="SCT_barrel" />
-    <range field="layer" value="3" />
-    <range field="phi_module" minvalue="0" maxvalue="55" wraparound="TRUE" />
-    <reference subregion="SCT_phi_positive_barrel_module" />
-  </region>
-
-  <subregion name="SCT_ring_0">
-    <range field="phi_module" minvalue="0" maxvalue="51" wraparound="TRUE" />
-    <range field="eta_module" value="0" />
-    <reference subregion="SCT_eta_module" />
-  </subregion>
-
-  <subregion name="SCT_ring_1">
-    <range field="phi_module" minvalue="0" maxvalue="39" wraparound="TRUE" />
-    <range field="eta_module" value="1" />
-    <reference subregion="SCT_eta_module" />
-  </subregion>
-
-  <subregion name="SCT_ring_1_2">
-    <range field="phi_module" minvalue="0" maxvalue="39" wraparound="TRUE" />
-    <range field="eta_module" minvalue="1" maxvalue="2" />
-    <reference subregion="SCT_eta_module" />
-  </subregion>
-
-   <region group="sct"  name="SCT_endcap_ring0_disks08">
-    <reference subregion="SCT_endcap" />
-    <range field="disk" minvalue="0" maxvalue="8" />
-    <reference subregion="SCT_ring_0" />
-  </region>
-
-
-  <region group="sct"  name="SCT_endcap_ring1_disk0">
-    <reference subregion="SCT_endcap" />
-    <range field="disk" value="0" />
-    <reference subregion="SCT_ring_1" />
-  </region>
-
-  <region group="sct"  name="SCT_endcap_rings12_disks15">
-    <reference subregion="SCT_endcap" />
-    <range field="disk" minvalue="1" maxvalue="5" />
-    <reference subregion="SCT_ring_1_2" />
-  </region>
-
-  <region group="sct"  name="SCT_endcap_ring1_disks67">
-    <reference subregion="SCT_endcap" />
-    <range field="disk" minvalue="6" maxvalue="7" />
-    <reference subregion="SCT_ring_1" />
-  </region>
-
-  <!--
-
-      TRT
-
-    -->
-
-  <subregion name="TRT_barrel">
-    <range field="part" value="TRT" />
-    <range field="barrel_endcap" values="negative_barrel positive_barrel" />
-  </subregion>
-
-  <subregion name="TRT_endcap">
-    <range field="part" value="TRT" />
-    <range field="barrel_endcap" values="negative_endcap positive_endcap" />
-  </subregion>
-
-
-
-  <subregion name="TRT_layer_0">
-    <reference subregion="TRT_barrel" />
-    <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer_or_wheel" value="0" />
-  </subregion>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" value="0" />
-    <range field="straw" minvalue="0" maxvalue="14" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" minvalue="1" maxvalue="4" />
-    <range field="straw" minvalue="0" maxvalue="15" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" minvalue="5" maxvalue="9" />
-    <range field="straw" minvalue="0" maxvalue="16" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" minvalue="10" maxvalue="14" />
-    <range field="straw" minvalue="0" maxvalue="17" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" minvalue="15" maxvalue="17" />
-    <range field="straw" minvalue="0" maxvalue="18" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_0" />
-    <range field="straw_layer" value="18" />
-    <range field="straw" minvalue="0" maxvalue="17" />
-  </region>
-
-
-
-
-
-  <subregion name="TRT_layer_1">
-    <reference subregion="TRT_barrel" />
-    <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer_or_wheel" value="1" />
-  </subregion>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" value="0" />
-    <range field="straw" minvalue="0" maxvalue="18" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" minvalue="1" maxvalue="5" />
-    <range field="straw" minvalue="0" maxvalue="19" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" minvalue="6" maxvalue="10" />
-    <range field="straw" minvalue="0" maxvalue="20" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" minvalue="11" maxvalue="15" />
-    <range field="straw" minvalue="0" maxvalue="21" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" minvalue="16" maxvalue="20" />
-    <range field="straw" minvalue="0" maxvalue="22" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" minvalue="21" maxvalue="22" />
-    <range field="straw" minvalue="0" maxvalue="23" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_1" />
-    <range field="straw_layer" value="23" />
-    <range field="straw" minvalue="0" maxvalue="22" />
-  </region>
-
-
-
-
-
-  <subregion name="TRT_layer_2">
-    <reference subregion="TRT_barrel" />
-    <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer_or_wheel" value="2" />
-  </subregion>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" value="0" />
-    <range field="straw" minvalue="0" maxvalue="22" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="1" maxvalue="4" />
-    <range field="straw" minvalue="0" maxvalue="23" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="5" maxvalue="9" />
-    <range field="straw" minvalue="0" maxvalue="24" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="10" maxvalue="14" />
-    <range field="straw" minvalue="0" maxvalue="25" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="15" maxvalue="19" />
-    <range field="straw" minvalue="0" maxvalue="26" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="20" maxvalue="24" />
-    <range field="straw" minvalue="0" maxvalue="27" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" minvalue="25" maxvalue="28" />
-    <range field="straw" minvalue="0" maxvalue="28" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_layer_2" />
-    <range field="straw_layer" value="29" />
-    <range field="straw" minvalue="0" maxvalue="27" />
-  </region>
-
-
-
-
-  <region group="trt" >
-    <reference subregion="TRT_endcap" />
-    <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer_or_wheel" minvalue="0" maxvalue="5" />
-    <range field="straw_layer" minvalue="0" maxvalue="15" />
-    <range field="straw" minvalue="0" maxvalue="23" />
-  </region>
-
-  <region group="trt" >
-    <reference subregion="TRT_endcap" />
-    <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-    <range field="layer_or_wheel" minvalue="6" maxvalue="13" />
-    <range field="straw_layer" minvalue="0" maxvalue="7" />
-    <range field="straw" minvalue="0" maxvalue="23" />
-  </region>
-
-  <alternate_regions>
-    <region group="trt" >
-      <reference subregion="TRT_endcap" />
-      <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-      <range field="layer_or_wheel" minvalue="14" maxvalue="17" />
-      <range field="straw_layer" minvalue="0" maxvalue="15" />
-      <range field="straw" minvalue="0" maxvalue="17" />
-    </region>
-    <region group="trt"  tag="initial_layout" />
-    <region group="trt" tag="final_layout" >
-      <reference subregion="TRT_endcap" />
-      <range field="phi_sector" minvalue="0" maxvalue="31" wraparound="TRUE" />
-      <range field="layer_or_wheel" minvalue="14" maxvalue="17" />
-      <range field="straw_layer" minvalue="0" maxvalue="15" />
-      <range field="straw" minvalue="0" maxvalue="17" />
-    </region>
-    <region group="trt"  tag="destaged_layout" />
-  </alternate_regions>
-
-  <!-- Dummy region: This forces the bit packing to be the same for all layouts -->
-
-  <region group="trt" name = "dummy">
-    <range field="part" value="TRT" />
-    <range field="barrel_endcap" values="negative_endcap negative_barrel positive_barrel positive_endcap"/>
-    <range field="phi_sector" minvalue="0" maxvalue="31" />
-    <range field="layer_or_wheel" minvalue="0" maxvalue="17" />
-    <range field="straw_layer" minvalue="0" maxvalue="29" />
-    <range field="straw" minvalue="0" maxvalue="28" />
-  </region>
-
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictLArCalorimeter.xml b/graphics/AtlantisJava/geometry/IdDictLArCalorimeter.xml
deleted file mode 100755
index 9eac43e86363..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictLArCalorimeter.xml
+++ /dev/null
@@ -1,694 +0,0 @@
-<IdDictionary name="LArCalorimeter" version="fullAtlas" >
-
-  <field name="part" >
-    <label name="LArEM"   value="1" />
-    <label name="LArHEC"  value="2" />
-    <label name="LArFCAL" value="3" />
-    <label name="LArOnline" value="4" />
-    <label name="LArOnlineCalib" value="5" />
-    <label name="LArEMdisc"   value="-1" />
-    <label name="LArHECdisc"  value="-2" />
-    <label name="LArFCALdisc" value="-3" />
-  </field>
-
-  <field name="barrel-endcap">
-    <label name="negative-endcap-inner-wheel" value="-3" />
-    <label name="negative-endcap-outer-wheel" value="-2" />
-    <label name="negative-barrel"             value="-1" />
-    <label name="barrel"                      value="0"  />
-    <label name="positive-barrel"             value="+1" />
-    <label name="positive-endcap-outer-wheel" value="+2" />
-    <label name="positive-endcap-inner-wheel" value="+3" />
-  </field>
-
-  <field name="barrel-ec">
-    <label name="barrel" value="0" />
-    <label name="endcap" value="1" />
-  </field>    
-
-  <field name="pos_neg">
-    <label name="negative-side" value="0" />
-    <label name="positive-side" value="1" />
-  </field>    
-
-  <subregion name="LArFCAL-module" >
-    <range field="phi-fcal" minvalue="0" maxvalue="15" wraparound="TRUE" />
-  </subregion>
-
-  <subregion name="LArEM-extralarge-module" >
-    <range field="phi" minvalue="0" maxvalue="31" wraparound="TRUE" />
-  </subregion>
-
-  <subregion name="LArEM-large-module" >
-    <range field="phi" minvalue="0" maxvalue="63" wraparound="TRUE" />
-  </subregion>
-
-  <subregion name="LArEM-thin-module" >
-    <range field="phi" minvalue="0" maxvalue="255" wraparound="TRUE" />
-  </subregion>
-
-
-
-        <!-- EM Barrel -->
-
-  <subregion name="LArEM-barrel" >
-    <range field="part" value="LArEM" />
-    <range field="barrel-endcap" values="negative-barrel positive-barrel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-barrel-00"
-          next_samp="LArEM-barrel-10 LArEM-barrel-11" 
-          next_subdet="LArEM-outer-wheel-10 LArEM-outer-wheel-00" 
-	  eta0="0.0" deta="0.025" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="0" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="60" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-10" next_abs_eta="LArEM-barrel-11" 
-          prev_samp="LArEM-barrel-00" 
-          next_samp="LArEM-barrel-20" 
-	  eta0="0.003125" deta="0.003125" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="1" maxvalue="447" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-11"
-          prev_samp="LArEM-barrel-00" 
-          next_samp="LArEM-barrel-21" 
-	  eta0="1.4" deta="0.025" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="2" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-20" next_abs_eta="LArEM-barrel-21" 
-          prev_samp="LArEM-barrel-10" 
-          next_samp="LArEM-barrel-30" 
-	  eta0="0.0" deta="0.025" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="2" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="55" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-21"
-          prev_samp="LArEM-barrel-11" 
-          next_subdet="LArEM-outer-wheel-10" 
-	  eta0="1.4" deta="0.075" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="2" />
-    <range field="region" value="1" />
-    <range field="eta" value="0" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-30"
-          prev_samp="LArEM-barrel-20" eta0="0.0" deta="0.05" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-barrel" />
-    <range field="sampling" value="3" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="26" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-
-
-        <!-- EM outer wheel -->
-
-  <subregion name="LArEM-outer-wheel" >
-    <range field="part" value="LArEM" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-outer-wheel-00" 
-          next_samp="LArEM-outer-wheel-12" 
-          prev_subdet="LArEM-barrel-00" 
-	  eta0="1.5" deta="0.025" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="0" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="11" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-10" next_abs_eta="LArEM-outer-wheel-11" 
-          next_samp="LArEM-outer-wheel-20" 
-          prev_subdet="LArEM-barrel-00 LArEM-barrel-21" 
-	  eta0="1.375" deta="0.05" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" value="0" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-11" next_abs_eta="LArEM-outer-wheel-12" 
-          next_samp="LArEM-outer-wheel-21" eta0="1.425" deta="0.025" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="2" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-12" next_abs_eta="LArEM-outer-wheel-13" 
-          prev_samp="LArEM-outer-wheel-00" 
-          next_samp="LArEM-outer-wheel-21" eta0="1.5" deta="0.003125" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="2" />
-    <range field="eta" minvalue="0" maxvalue="95" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-13" next_abs_eta="LArEM-outer-wheel-14" 
-          next_samp="LArEM-outer-wheel-21" eta0="1.8" deta="0.0041666666667" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="3" />
-    <range field="eta" minvalue="0" maxvalue="47" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-14" next_abs_eta="LArEM-outer-wheel-15" 
-          next_samp="LArEM-outer-wheel-21" eta0="2.0" deta="0.00625" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="4" />
-    <range field="eta" minvalue="0" maxvalue="63" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-15"
-          next_samp="LArEM-outer-wheel-21" eta0="2.4" deta="0.025" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="5" />
-    <range field="eta" minvalue="0" maxvalue="3" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-20" next_abs_eta="LArEM-outer-wheel-21" 
-          prev_samp="LArEM-outer-wheel-10" eta0="1.375" deta="0.05" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="2" />
-    <range field="region" value="0" />
-    <range field="eta" value="0" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-21" next_abs_eta="LArEM-inner-wheel-10" 
-          prev_samp="LArEM-outer-wheel-11 LArEM-outer-wheel-12 LArEM-outer-wheel-13 LArEM-outer-wheel-14 LArEM-outer-wheel-15" 
-          next_samp="LArEM-outer-wheel-30" eta0="1.425" deta="0.025" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="2" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="42" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-30" next_abs_eta="LArEM-inner-wheel-20"  
-          prev_samp="LArEM-outer-wheel-21" eta0="1.5" deta="0.05" phi0="0.0" dphi="256" >
-    <reference subregion="LArEM-outer-wheel" />
-    <range field="sampling" value="3" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="19" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-
-
-
-
-
-        <!-- EM inner wheel -->
-
-  <subregion name="LArEM-inner-wheel" >
-    <range field="part" value="LArEM" />
-    <range field="barrel-endcap" values="negative-endcap-inner-wheel positive-endcap-inner-wheel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-inner-wheel-10" 
-          next_samp="LArEM-inner-wheel-20" eta0="2.5" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-inner-wheel" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="6" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-inner-wheel-20" 
-          prev_samp="LArEM-inner-wheel-10" eta0="2.5" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArEM-inner-wheel" />
-    <range field="sampling" value="2" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="6" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-
-
-
-
-      <!--
-
-          LArHEC
-
-        -->
-
-  <subregion name="LArHEC" >
-    <range field="part" value="LArHEC" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_hec" name="LArHEC-00" next_abs_eta="LArHEC-01"
-     next_samp="LArHEC-10" eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="0" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="9" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-10" next_abs_eta="LArHEC-11"
-     next_samp="LArHEC-20" prev_samp="LArHEC-00" eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="9" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-20" next_abs_eta="LArHEC-21"
-     next_samp="LArHEC-30" prev_samp="LArHEC-10" eta0="1.6" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" values="2" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="1" maxvalue="9" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-30" next_abs_eta="LArHEC-31"
-     prev_samp="LArHEC-20" eta0="1.7" deta="0.1" phi0="0.0" dphi="64" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" values="3" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="2" maxvalue="9" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-01"
-     next_samp="LArHEC-11" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="0" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="3" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-11" next_abs_eta="LArFCAL-1"
-     next_samp="LArHEC-21" prev_samp="LArHEC-01" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="1" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="2" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-21" 
-     next_samp="LArHEC-31" prev_samp="LArHEC-11" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="2" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="2" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-31" 
-     prev_samp="LArHEC-21" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
-    <reference subregion="LArHEC" />
-    <range field="sampling" value="3" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="0" maxvalue="3" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-
-
-
-      <!--
-
-          LArFCAL
-
-        -->
-
-  <subregion name="LArFCAL" >
-    <range field="part" value="LArFCAL" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_fcal" name="LArFCAL-1"
-     eta0="3.2" deta="0.025" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="1" />
-    <range field="eta-fcal" minvalue="0" maxvalue="62" />
-    <reference subregion="LArFCAL-module" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-2a"
-     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="2" />
-    <range field="eta-fcal" minvalue="0" maxvalue="29" />
-    <range field="phi-fcal" values="0 7 8 15" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-2b"
-     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="2" />
-    <range field="eta-fcal" minvalue="0" maxvalue="30" />
-    <range field="phi-fcal" values="3 4 11 12" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-2c"
-     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="2" />
-    <range field="eta-fcal" minvalue="0" maxvalue="31" />
-    <range field="phi-fcal" values="1 2 5 6 9 10 13 14" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-3a"
-     eta0="3.2" deta="0.1" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="3" />
-    <range field="eta-fcal" minvalue="0" maxvalue="14" />
-    <range field="phi-fcal" values="2 10" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-3b"
-     eta0="3.2" deta="0.1" phi0="0.0" dphi="16" >
-    <reference subregion="LArFCAL" />
-    <range field="module" value="3" />
-    <range field="eta-fcal" minvalue="0" maxvalue="15" />
-    <range field="phi-fcal" values="0 1 3 4 5 6 7 8 9 11 12 13 14 15" />
-  </region>
-
-
-
-      <!--
-
-          Disconnected Channels
-
-        -->
-
-  <subregion name="LArEM-barreldisc" >
-    <range field="part" value="LArEMdisc" />
-    <range field="barrel-endcap" values="negative-barrel positive-barrel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-barrel-00disconnected" >
-    <reference subregion="LArEM-barreldisc" />
-    <range field="sampling" value="0" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="61" maxvalue="63" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-10disconnected" > 
-    <reference subregion="LArEM-barreldisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" value="0" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-barrel-30disconnected" >
-    <reference subregion="LArEM-barreldisc" />
-    <range field="sampling" value="3" />
-    <range field="region" value="0" />
-    <range field="eta" value="27" />
-    <reference subregion="LArEM-thin-module" />
-  </region>
-
-
-  <subregion name="LArEM-outer-wheeldisc" >
-    <range field="part" value="LArEMdisc" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-outer-wheel-00disconnected" > 
-    <reference subregion="LArEM-outer-wheeldisc" />
-    <range field="sampling" value="0" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="12" maxvalue="19" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-11disconnected" >
-    <reference subregion="LArEM-outer-wheeldisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="1" />
-    <range field="eta" minvalue="3" maxvalue="6" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-13disconnected" > 
-    <reference subregion="LArEM-outer-wheeldisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="3" />
-    <range field="eta" minvalue="48" maxvalue="63" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-outer-wheel-15disconnected" >
-    <reference subregion="LArEM-outer-wheeldisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="5" />
-    <range field="eta" minvalue="4" maxvalue="7" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-
-  <subregion name="LArEM-inner-wheeldisc" >
-    <range field="part" value="LArEMdisc" />
-    <range field="barrel-endcap" values="negative-endcap-inner-wheel positive-endcap-inner-wheel" />
-  </subregion>
-
-  <region group="lar_em" name="LArEM-inner-wheel-10disconnected" > 
-    <reference subregion="LArEM-inner-wheeldisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="0" />
-    <range field="eta" value="7" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_em" name="LArEM-inner-wheel-20disconnected" >
-    <reference subregion="LArEM-inner-wheeldisc" />
-    <range field="sampling" value="2" />
-    <range field="region" value="0" />
-    <range field="eta" value="7" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-
-
-  <subregion name="LArHECdisc" >
-    <range field="part" value="LArHECdisc" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_hec" name="LArHEC-20disconnected" >
-    <reference subregion="LArHECdisc" />
-    <range field="sampling" values="2" />
-    <range field="region" value="0" />
-    <range field="eta" value="0" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-30disconnected" > 
-    <reference subregion="LArHECdisc" />
-    <range field="sampling" values="3" />
-    <range field="region" value="0" />
-    <range field="eta" minvalue="0" maxvalue="1" />
-    <reference subregion="LArEM-large-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-11disconnected" >
-    <reference subregion="LArHECdisc" />
-    <range field="sampling" value="1" />
-    <range field="region" value="1" />
-    <range field="eta" value="3" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-  <region group="lar_hec" name="LArHEC-21disconnected" >
-    <reference subregion="LArHECdisc" />
-    <range field="sampling" value="2" />
-    <range field="region" value="1" />
-    <range field="eta" value="3" />
-    <reference subregion="LArEM-extralarge-module" />
-  </region>
-
-
-  <subregion name="LArFCALdisc" >
-    <range field="part" value="LArFCALdisc" />
-    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
-  </subregion>
-
-  <region group="lar_fcal" name="LArFCAL-1disconnected" >
-    <reference subregion="LArFCALdisc" />
-    <range field="module" value="1" />
-    <range field="eta-fcal" value="63" />
-    <reference subregion="LArFCAL-module" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-2adisconnected" >
-    <reference subregion="LArFCALdisc" />
-    <range field="module" value="2" />
-    <range field="eta-fcal" minvalue="30" maxvalue="31" />
-    <range field="phi-fcal" values="0 7 8 15" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-2bdisconnected"
-     eta0="3.2" deta="0.05" phi0="0.0" dphi="0.4" >
-    <reference subregion="LArFCALdisc" />
-    <range field="module" value="2" />
-    <range field="eta-fcal" value="31" />
-    <range field="phi-fcal" values="3 4 11 12" />
-  </region>
-
-  <region group="lar_fcal" name="LArFCAL-3adisconnected" >
-    <reference subregion="LArFCALdisc" />
-    <range field="module" value="3" />
-    <range field="eta-fcal" value="15" />
-    <range field="phi-fcal" values="2 10" />
-  </region>
-
-
-   <!-- LAr Online -->
-
-
-  <!-- LArOnline -Barrel -->
-
-   <subregion name="LArOnline-Barrel">
-      <range field="part" value="LArOnline" />
-      <range field="barrel-ec" values="barrel" />    
-   </subregion>
-
-   <region group="LArOnline" name="laronline-barrel">
-      <reference subregion="LArOnline-Barrel" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" minvalue="0" maxvalue="31" />
-      <range field="slot" minvalue="1" maxvalue="14" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-EndCap Standard -->
-
-  <subregion name="LArOnline-Endcap">
-      <range field="part" value="LArOnline" />
-      <range field="barrel-ec" values="endcap" />
-  </subregion>
-
-   <region group="LArOnline" name="laronline-endcap-standard">
-      <reference subregion="LArOnline-Endcap" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="0 1 4 5 7 8 11 12 13 14 17 18 19 20 23 24" />
-      <range field="slot" minvalue="1" maxvalue="13" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-Endcap-Special -->
-
-   <region group="LArOnline" name="laronline-endcap-special" >
-      <reference subregion="LArOnline-Endcap" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="2 9 15 21" />
-      <range field="slot" minvalue="1" maxvalue="15" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-HEC-->
-  
-   <region group="LArOnline" name="laronline-hec">
-      <reference subregion="LArOnline-Endcap" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="3 10 16 22" />
-      <range field="slot" values="1 2 5 6 7 8 9 10" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-FCAL-->
-  
-   <region group="LArOnline" name="laronlinefcal" >
-      <reference subregion="LArOnline-Endcap" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" value="6" />
-      <range field="slot" minvalue="1" maxvalue="14" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline -Barrel Calib -->
-
-   <subregion name="LArOnline-Barrel-Calib">
-      <range field="part" value="LArOnlineCalib" />
-      <range field="barrel-ec" values="barrel" />    
-   </subregion>
-
-   <region group="LArOnline" name="laronline-barrel-calib">
-      <reference subregion="LArOnline-Barrel-Calib" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" minvalue="0" maxvalue="31" />
-      <range field="slot" value="15" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-EndCap Standard Calib -->
-
-  <subregion name="LArOnline-Endcap-Calib">
-      <range field="part" value="LArOnlineCalib" />
-      <range field="barrel-ec" values="endcap" />
-  </subregion>
-
-   <region group="LArOnline" name="laronline-endcap-standard">
-      <reference subregion="LArOnline-Endcap-Calib" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="0 1 4 5 7 8 11 12 13 14 17 18 19 20 23 24" />
-      <range field="slot" value="15" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-HEC CALIB -->
-  
-   <region group="LArOnline" name="laronline-hec-calib">
-      <reference subregion="LArOnline-Endcap-Calib" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="3 10 16 22" />
-      <range field="slot" values="3 4 12" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-  <!-- LArOnline-FCAL CALIB -->
-  
-   <region group="LArOnline" name="laronline-fcal-calib">
-      <reference subregion="LArOnline-Endcap-Calib" />
-      <range field="pos_neg" values="negative-side positive-side" />
-      <range field="feedthrough" values="6" />
-      <range field="slot" value="16" />
-      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
-   </region>
-
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictLArElectrode.xml b/graphics/AtlantisJava/geometry/IdDictLArElectrode.xml
deleted file mode 100755
index 948ccf3d0996..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictLArElectrode.xml
+++ /dev/null
@@ -1,327 +0,0 @@
-<IdDictionary name="LArElectrode" version="fullAtlas" >
-
-   <field name="detector" >
-    <label name="EMB"    value="0" />
-    <label name="EMBPS"  value="1" />
-    <label name="EMEC"   value="2" />
-    <label name="EMECPS" value="3" />
-    <label name="HEC"    value="4" />
-    <label name="FCAL"   value="5" />
-    <label name="EMBPUR" value="6" />
-    <label name="ECPUR"  value="7" />
-   </field>
-
-   <field name="configuration" >
-    <label name="Atlas" value="1" />
-    <label name="TestBeam" value="2" />
-   </field>
-
-  <field name="zside">
-   <label name="A" value="0" />
-   <label name="C" value="1" />
-  </field>    
-
-  <field name="module">
-  </field>    
-
-  <field name="hvphi" >
-  </field>
-
-  <field name="hveta" >
-  </field>
-
-  <field name="hvgap" >
-  </field>
-
-  <field name="electrode">
-  </field>    
-
-
-   <!-- LAr Electrodes-->
-
-  <subregion name="AtlasLArElectrode">
-     <range field="configuration" value="Atlas" />    
-  </subregion>
-
-   <!--EMB-FT=-1 -->
-   <region group="LArElec" name="EM-BARREL-ALL">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMB" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="15" />
-     <range field="hvphi" values="1" />
-     <range field="hveta" minvalue="1" maxvalue="7" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="0" maxvalue="31" />
-   </region>
-
-   <!--EMB-FT=0 -->
-   <region group="LArElec" name="EM-BARREL-FT0">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMB" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="15" />
-     <range field="hvphi" values="0" />
-     <range field="hveta" minvalue="1" maxvalue="7" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="32" maxvalue="63" />
-   </region>
-
-   <!--EMBPS -->
-   <region group="LArElec" name="EM-BARREL-PS">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMBPS" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" values="0 1" />
-     <range field="hveta" minvalue="1" maxvalue="4" />
-     <range field="hvgap" values="0 1" />
-  <!--note that this value 'electrode' is DUMMY until confirmation by Hostachy-->
-     <range field="electrode" value="0" />
-   </region>
-
-   <!--EMEC-INNER-WHEEL-->
-   <region group="LArElec" name="EM-ENDCAP-INNER-S1">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="1" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="0" maxvalue="3" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S2">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="2" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="4" maxvalue="7" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S3">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="3" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="8" maxvalue="11" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S4">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="4" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="12" maxvalue="15" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S5">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="5" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="16" maxvalue="19" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S6">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="6" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="20" maxvalue="23" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S7">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="7" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="24" maxvalue="27" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-INNER-S8">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="8" />
-     <range field="hveta" minvalue="7" maxvalue="8" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="28" maxvalue="31" />
-   </region>
-
-   <!--EMEC-OUTER-WHEEL-->
-   <region group="LArElec" name="EM-ENDCAP-OUTER-S1">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="1" />
-     <range field="hveta" minvalue="0" maxvalue="6" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="0" maxvalue="23" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-OUTER-S2">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="2" />
-     <range field="hveta" minvalue="0" maxvalue="6" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="24" maxvalue="47" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-OUTER-S3">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="3" />
-     <range field="hveta" minvalue="0" maxvalue="6" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="48" maxvalue="71" />
-   </region>
-   <region group="LArElec" name="EM-ENDCAP-OUTER-S4">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="4" />
-     <range field="hveta" minvalue="0" maxvalue="6" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" minvalue="72" maxvalue="95" />
-   </region>
-
-   <!--EMEC-PS-->
-   <region group="LArElec" name="EM-ENDCAP-PS">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMECPS" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="0" />
-     <range field="hvgap" values="0 1" />
-     <range field="electrode" value="0" />
-   </region>
-
-   <!--HEC-->
-   <region group="LArElec" name="HEC-ETA1">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="HEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="1" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" minvalue="1" maxvalue="8" />
-   </region>
-
-   <region group="LArElec" name="HEC-ETA2">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="HEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="2" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" minvalue="9" maxvalue="24" />
-   </region>
-
-   <region group="LArElec" name="HEC-ETA3">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="HEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="3" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" minvalue="25" maxvalue="32" />
-   </region>
-
-   <region group="LArElec" name="HEC-ETA4">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="HEC" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="31" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="4" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" minvalue="33" maxvalue="40" />
-   </region>
-
-   <!--FCAL-->
-
-   <!--FCAL1-->
-   <region group="LArElec" name="FCAL-S1">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="FCAL" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="15" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="1" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" value="0" />
-   </region>
-
-   <region group="LArElec" name="FCAL-S2">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="FCAL" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="7" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="2" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" value="0" />
-   </region>
-
-   <region group="LArElec" name="FCAL-S3">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="FCAL" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="0" maxvalue="3" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" value="3" />
-     <range field="hvgap" minvalue="0" maxvalue="3" />
-     <range field="electrode" value="0" />
-   </region>
-
-
-   <!--EMBPUR-->
-   <region group="LArElec" name="EMB-PUR">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="EMBPUR" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="1" maxvalue="5" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" minvalue="0" />
-     <range field="hvgap" minvalue="0" maxvalue="1" />
-     <range field="electrode" value="0" />
-   </region>
-
-   <!--ECPUR-->
-   <region group="LArElec" name="EC-PUR">
-     <reference subregion="AtlasLArElectrode" />
-     <range field="detector" value="ECPUR" />
-     <range field="zside" values="0 1" />
-     <range field="module" minvalue="1" maxvalue="10" />
-     <range field="hvphi" value="0" />
-     <range field="hveta" minvalue="0" />
-     <range field="hvgap" minvalue="0" maxvalue="1" />
-     <range field="electrode" value="0" />
-   </region>
-
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictLArHighVoltage.xml b/graphics/AtlantisJava/geometry/IdDictLArHighVoltage.xml
deleted file mode 100755
index b0a26c9558ed..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictLArHighVoltage.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-
-<IdDictionary name="LArHighVoltage" version="fullAtlas" >
-
-   <field name="configuration" >
-    <label name="Atlas" value="1" />
-    <label name="TestBeam" value="2" />
-   </field>
-
-  <field name="cannode">
-  </field>    
-
-  <field name="hvline">
-  </field>    
-
-  <field name="partition" >
-  </field>
-
-  <field name="canline">
-  </field>    
-
-
-   <!-- HighVoltage Lines-->
-
-  <subregion name="AtlasHighVoltage">
-     <range field="configuration" value="Atlas" />    
-  </subregion>
-
-  
-   <!-- LArHV HEC -->
-
-   <region group="LArHV" name="LArHV-HEC-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="48" maxvalue="79" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-   <region group="LArHV" name="LArHV-HEC-C">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="148" maxvalue="179" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-   <!-- LArHV FCAL -->
-
-   <region group="LArHV" name="LArHV-FCAL-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="80" maxvalue="93" />
-     <range field="hvline" minvalue="0" maxvalue="7" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-   <region group="LArHV" name="LArHV-FCAL-C">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="180" maxvalue="193" />
-     <range field="hvline" minvalue="0" maxvalue="7" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-   <!-- LArHV EMB -->
-
-   <!-- EMB-A-SIDE-->
-   <region group="LArHV" name="LArHV-EMB-A-STD">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="200" maxvalue="231" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMB-C-STD">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="232" maxvalue="263" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMB-A-SPE">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="296 297 306 307" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMB-C-SPE">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="299 304 305 308 309" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-
-   <!-- LArHV EMBPS -->
-
-   <region group="LArHV" name="LArHV-EMBPS-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="264" maxvalue="279" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-   <region group="LArHV" name="LArHV-EMBPS-C">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="280" maxvalue="295" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-   <!-- LArHV EMEC -->
-
-   <region group="LArHV" name="LArHV-EMEC-A1">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="0" maxvalue="47" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMEC-A2">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="320" maxvalue="322" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMEC-C1">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="100" maxvalue="147" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="LArHV-EMEC-C2">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="324 325" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-   <!-- LArHV EMECPS -->
-
-   <region group="LArHV" name="LArHV-EMECPS-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="312" maxvalue="315" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-   <region group="LArHV" name="LArHV-EMECPS-C">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="316" maxvalue="319" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-   <!-- LArHV EMPUR -->
-
-   <region group="LArHV" name="LArEMBPUR-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="300" maxvalue="303" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-   <!-- All these lines are free to use -->
-
-   <region group="LArHV" name="NOCONN-NEW">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="310 311" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="NOCONN-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="323" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="NOCONN-C">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" values="326 327" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="FREE-A">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="94" maxvalue="99" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-   <region group="LArHV" name="FREE-B">
-     <reference subregion="AtlasHighVoltage" />
-     <range field="cannode" minvalue="194" maxvalue="199" />
-     <range field="hvline" minvalue="0" maxvalue="15" />
-     <range field="partition" value="1" />
-     <range field="canline" value="1" />
-   </region>
-
-
-
-</IdDictionary>
-
diff --git a/graphics/AtlantisJava/geometry/IdDictTileCalorimeter.xml b/graphics/AtlantisJava/geometry/IdDictTileCalorimeter.xml
deleted file mode 100755
index 76ab90dd0d52..000000000000
--- a/graphics/AtlantisJava/geometry/IdDictTileCalorimeter.xml
+++ /dev/null
@@ -1,398 +0,0 @@
-<IdDictionary name="TileCalorimeter" version="fullAtlasAndTestBeam" >
-
-  <field name="section" >
-    <label name="Online"               value="0" />
-    <label name="Barrel"               value="1" />
-    <label name="Extended-barrel"      value="2" />
-    <label name="ITC-gap-scintillator" value="3" />
-    <label name="Testbeam"             value="4" />
-  </field>
-
-  <field name="side" >
-    <label name="positive"         value="+1" />
-    <label name="negative"         value="-1" />
-  </field>
-
-  <subregion name="cylinder-pos" >
-    <range field="side" value="positive" />
-    <range field="module" minvalue="0" maxvalue="63" />
-  </subregion>
-
-  <subregion name="cylinder-neg" >
-    <range field="side" value="negative" />
-    <range field="module" minvalue="0" maxvalue="63" />
-  </subregion>
-
-  <subregion name="cylinder" >
-    <range field="side" />
-    <range field="module" minvalue="0" maxvalue="63" />
-  </subregion>
-
-  <subregion name="pmt1" >
-    <range field="pmt" value="0" />
-    <range field="adc" minvalue="0" maxvalue="1" />
-  </subregion>
-
-  <subregion name="pmt2" >
-    <range field="pmt" minvalue="0" maxvalue="1" />
-    <range field="adc" minvalue="0" maxvalue="1" />
-  </subregion>
-
-  <subregion name="tower0AB" >
-    <range field="tower"    value="0" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower0" >
-    <range field="tower"    value="0" />
-    <range field="sampling" minvalue="0" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower1" >
-    <range field="tower"    value="1" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower2" >
-    <range field="tower"    value="2" />
-    <range field="sampling" minvalue="0" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower3" >
-    <range field="tower"    value="3" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower4" >
-    <range field="tower"    value="4" />
-    <range field="sampling" minvalue="0" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower5" >
-    <range field="tower"    value="5" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower6" >
-    <range field="tower"    value="6" />
-    <range field="sampling" minvalue="0" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower7" >
-    <range field="tower"    value="7" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower8" >
-    <range field="tower"    value="8" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower9" >
-    <range field="tower"    value="9" />
-    <range field="sampling" value="0" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower10" >
-    <range field="tower"    value="10" />
-    <range field="sampling" minvalue="1" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower11" >
-    <range field="tower"    value="11" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower12" >
-    <range field="tower"    value="12" />
-    <range field="sampling" minvalue="0" maxvalue="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower13" >
-    <range field="tower"    value="13" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower14" >
-    <range field="tower"    value="14" />
-    <range field="sampling" minvalue="0" maxvalue="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="tower15" >
-    <range field="tower"    value="15" />
-    <range field="sampling" value="0" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="D4" >
-    <range field="tower"    value="8" />
-    <range field="sampling" value="2" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="C10" >
-    <range field="tower"    value="9" />
-    <range field="sampling" value="1" />
-    <reference subregion="pmt2" />
-  </subregion>
-
-  <subregion name="E1" >
-    <range field="tower"    value="10" />
-    <range field="sampling" value="3" />
-    <reference subregion="pmt1" />
-  </subregion>
-
-  <subregion name="E2" >
-    <range field="tower"    value="11" />
-    <range field="sampling" value="3" />
-    <reference subregion="pmt1" />
-  </subregion>
-
-  <subregion name="E3" >
-    <range field="tower"    value="13" />
-    <range field="sampling" value="3" />
-    <reference subregion="pmt1" />
-  </subregion>
-
-  <subregion name="E4" >
-    <range field="tower"    value="15" />
-    <range field="sampling" value="3" />
-    <reference subregion="pmt1" />
-  </subregion>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower0AB" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower0" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower1" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower1" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower2" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower2" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower3" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower3" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower4" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower4" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower5" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower5" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower6" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower6" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower7" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower7" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower8" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower8" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-neg" />
-    <reference subregion="tower9" />
-  </region>
-
-  <region>
-    <range field="section" value="Barrel" />
-    <reference subregion="cylinder-pos" />
-    <reference subregion="tower9" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower10" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower11" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower12" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower13" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower14" />
-  </region>
-
-  <region>
-    <range field="section" value="Extended-barrel" />
-    <reference subregion="cylinder" />
-    <reference subregion="tower15" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="D4" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="C10" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="E1" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="E2" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="E3" />
-  </region>
-
-  <region>
-    <range field="section" value="ITC-gap-scintillator" />
-    <reference subregion="cylinder" />
-    <reference subregion="E4" />
-  </region>
-
-
-  <region>
-    <range field="section" value="Online" />
-    <range field="ros"     minvalue="1" maxvalue="4"  />
-    <range field="drawer"  minvalue="0" maxvalue="63" />
-    <range field="channel" minvalue="0" maxvalue="47" />
-    <range field="gain"    minvalue="0" maxvalue="1"  />
-  </region>
-
-  <region>
-    <range field="section" value="Online" />
-    <range field="ros"     value="0"  />
-    <range field="drawer"  values="0 1 2 3 4 5 6 7 8 9 10 11 16 17 18 19 20 21 22 255" />
-    <range field="channel" minvalue="0" maxvalue="15"  />
-    <range field="gain"    minvalue="0" maxvalue="0"   />
-  </region>
-
-  <region>
-    <range field="section" value="Testbeam" />
-    <range field="type"      minvalue="-1" maxvalue="10"  />
-    <range field="tbmodule"  minvalue="0"  maxvalue="255" />
-    <range field="tbchannel" minvalue="0"  maxvalue="63"  />
-    <range field="tbdummy1"  minvalue="0"  maxvalue="15"  />
-    <range field="tbdummy2"  minvalue="0"  maxvalue="3"   />
-    <range field="tbdummy3"  minvalue="0"  maxvalue="3"   />
-  </region>
-
-</IdDictionary>
diff --git a/graphics/AtlantisJava/img/atlantis_icon.gif b/graphics/AtlantisJava/img/atlantis_icon.gif
deleted file mode 100755
index ea1ad1a27796918182df08347719cf5efdfb8723..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2939
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

diff --git a/graphics/AtlantisJava/img/atlantis_log.gif b/graphics/AtlantisJava/img/atlantis_log.gif
deleted file mode 100755
index 7afe0dde1b99cc58b127f5ffb0c12f622a5f6326..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18919
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
J?sGr@06SDv1aSZW

diff --git a/graphics/AtlantisJava/img/atlas.jpg b/graphics/AtlantisJava/img/atlas.jpg
deleted file mode 100755
index fc381ca49e94fa5a0cfa5a3c64aa925e9239c761..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 32018
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
Br{4eo

diff --git a/graphics/AtlantisJava/img/atlas_logo_big.png b/graphics/AtlantisJava/img/atlas_logo_big.png
deleted file mode 100644
index b41fa2deb8cbd1f2cf2163c921f70966e684c3ba..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7956
zcmWkz1zZzvAHUH864KJ$-Q6HaN{6I$HzLUB1_{Yg6Qn^wx*Mchy8d)`!+Y<x+imx`
z?S9X5zx&ojX{af_Mt_SA0KjXdcXA)VwK=$OqoIKBe<S;~!4<^ggQ5&jIZCz%enGK#
zuP6t+{QsHPT9gcKdFA@fzykm<@czF*fJ_)MxDnM;NmU+o9t{<X8h;?ew+sL%Qk3MR
zwS5<k{6A}J_n*HMJ*<fG4*&XFNfTXcI}DE`PF_oDAiYWN-ASf{Gi)=fCl@Kj8pTG<
z^F>8TM~xw;HJB~I`<U#FaR`=NAw>8{NJuGO*2hQBPuv(j;hm?$C$N(n*vWy%{_xVG
z&Wz5-<(Zjfe#FQ6$1$S5e}SUwfekpL!a_TtI0&Pk#gRsZnF?F-@}z34M=~ke+S=GS
zIF6xji{S8JUteEW(khgNjg(0gWRmuTJ+w&M0Bzzee#xtn?u5l5K7fy^z%A1trE~*I
z2ra0D!}J&~i{g$8&K^jp(Yc|(8t|j|xrEcs^-}F$_b-2F*h^2VSZGMZ8yQd71q*^Z
zYrf>5-e%Nn{7&dMznYCOB9o5J5Y$fLIZl(7Tk+95#d_!E4}A%gfeKY~X=$mcIoKE&
zi|gy_ZjU`tctNPx6y;2;tYs7u{z8$ZHScIe)YgPBgBjV$BgI&f`vGDdF+yB39;kxq
zM>Q&sjs(E;jaf^n0xRC`bjypj07<vh9U(MbIxjy~9rA0Mz<H?()0&sdjZ+Z1Nrgu9
zN(#V|K|}3eJT}h&6zDMX1Oez9nZs<){b^<mWohQ#{h6|?%iW1hm#LqsqTH5!v4;$*
znJr~=2Xm~^=kZL@xgV5$xci3X<>hnx`umBTSKFRkt*y7OHGe2b;~<GrF7Ep950Nd?
z(2#_ra@&&ZuoH~(yF6M{9*CeMa=-J2NkT>=Q83pqgDuG+R&m*Cvvz}Le3qexpK-#>
zRb(4jQ9ft{DRRftpm<tgPRqP!su`f+`o>5yfIu2oY>h)s9w!@t^}5w<vk#k|o?dln
zX(=)-ZO#WU?CI}MK-HKSH_MO+xSwRzt5h+pbDX!~=H~XG{BrnvA&yjV<GY^8ofiG-
zKW526AtDVMCJ31(YlIT&i(vUj*ac&w6+Z4kjPvXDw#N5_5J&6S#(4%e#Nz9WciC?-
znq1er!VeD*f9mMy<c3B><epw#9SM2vj(cEp0|1k0z}1XV5*>f5`<C*<^z^g??84@)
zB><S2$rALf0mdX-<ACLYpHS=>N}H^?ihGbtL|;m~OI2-M#UCwV+G}qi#X~jA&;x_+
z6<uNsuMQu_ETN$_vrrg}Y&A#xOVju7-vdsEdB^ab7yj6F{`+l->bTnW5$v5h9tnxI
zPCFH5c~@80PQg`wUOs;QtGQZ-x#L#<yJ|&Ch3c+<tg*}*AzlBd6nzT)yVBoO1PAi|
z#36WXu0m2;dh$2j_+WSrC63u4e4oqOp>O~^zC9}XX12+q;hu7ux=sU(JB&%ipl)A2
zs@zYrdeAq7J4}SQbGxeEah_+vmJeQ9x_{plhQTY~yyOc28=IRpltQj%TSJ`f{s@5g
z@sa`OuvM)2_HYJadxJ%9=wiJK=i_<=<tU|yr!7E@6in5ieOX)a9c5JCp^v!!%se)T
zcXk8ZKml+$N8o~GIaiRBzOR8;vYE!Ygn6*Qv>d{lI*~^Mw-?Yzwv!^@a+Q>O$K^4c
zHYz6tL(jFcUM^*r&4{pio7jr#s#kV)c9HS%eUEn+;>4E8<?FWZl$HPfOl3EsVPr%#
zH#hfvdAdo6Clx$iPDx48Y4y8`))8#8oq!kbO%*8;5E6#Jjq5XOH96Va+0i2;B=ipK
zk0&n!FW=Q<9QS#H_C(TSX>(=bO<2=;Hmrt&RxssfIR(68POuuzXYcl%V2iT?wHhAl
zMY8O+()i4#k;yd#WhlK`gT~BT7z%cM<6&q-KTsg1QczU1oPf)Fw6?TZXnpv=Q17xT
zVRw7FzKBgB776wN&;hnE0F>!gh%}jXBIFv?J0HDz{hIuA*2pEUE%4=;NUzG|$qFp)
zJ@}|OA~dZ*NoG`^{hpe-?eg!}I?qmvNpaJaj%n<I{sIh#p@BGPE!J!P-aZ*WjYB1o
zlxUvs%?b5o0CQm_ym^#Epsj~GxNg_Xz0XLnYwc7C($U>*X&@~veKzq!(T76Fb<N~t
zr8R;{jdp<Wudbe6(MTpg>&CLrs;a2_fA6;LuMWC(D-8K{oB$)c)wTdur6d(ZRIFGR
z+o}%ySyfGZI1@UVRI0F+et)>AqT8#4=$%qbbrvj(*r;l@i~DnClkVhb@oejn07i1~
z2LwQPIfvsfa&*A2)ns&V@GfAwSd)5YX2#><{9FM~28W2qMiItq6TbsO=;|sscQ+1m
zl}FRRE&C@2lNoa%Yk3og^ED9QeJY!s*VFx#=^w)*SEZ!qnG!9=hzSWQ?l}fuN&{Up
zWM|}oYMD<4UuEJB@?6Q|5XD$>JV?H!W5{cEeKN==G{7II?m84>%NF~fT64tT-pq36
z<lBu>#d5mJ&9S?#(BQVIkoD!}IJ>N*Wbd~{Z!`f280%mM1%Mv`D2Q7lLjJd>^&})D
zSyNL}iV&uRxVR%q9GqX(4Grlk>0A)tTVi6+-Nnx4#hBztW=2M%5HoYhMKl4c+PkFx
zW?MdcP+o1c*!V{lCJ%2H5g3Hi3>ha{CDRPi&)P6WpQpT?GY?&Kg{^6x!G?0qs5S5l
zf6xqR%ll}I$m*tWb1Xc}mavoC9RAJAJ#Ts7XrK9o3qttv^wd;M>Cc}GNPwKCvERe>
z(N!{os{PCP5NFlM@Nmobq@*`lsj1$oI7oahD`ddh-d;vJ3?}AycfJKci*o$XPg*WU
zjcmqpva7){n@2@O=>SwplY`aO)eNJ~dFnE1L>b)a1YubOVd(^g|H_%_E5^83(M|Mo
z@V1m)jaqrZX&w^z)R-2nz|HzsV1`$aRk=Q$vhvN9u#uJ1k!KBDOyj^z7oRd2e#kF7
zAz&LiK0e;;?Cg9D_J9H)6mWm(0#XvENvj_}IG%t_wOonTvu<ojBx<B+I29)+HdxZ`
zV*QDLCO(mZygbSI`S~B0mNSI~usb|vt4v=60b&tPrt;(Cz7SOGM`O8H0iWc9%9(oZ
zKO5?%(9H0rcbPaa?Yki-L>F;<Y!h<%5nw29nM$w)y%J3$Kt{KO1Dz78sE;WT-7fXI
zpX5I;mLk?qu*S;cArpOJZ!g)qzmku*mIG|(tGAXmHZ}sbwzjNb9_EMte*XqLRXi;{
zeRr<O%i((7CU^b@xR!Ugb&aKzq$n&bOr%weSIOpgnEm~++50sUGjn78=L_qW%gOg%
z4<0{$M}OGgE_XDs+oKAaW&f8lzAEgCv*Rz7o$nh6ym<a(XJU1lwsmI9X@Y${d9^m8
zni*VOt)a8#Xn(Nf#{cluiU3vc-@Uq~{<odsltpZbgRs_3+3|<|EFqzinWjopQ%6m6
zK8`=I=7mvHToVVLlSbj9#fz(0*Z&3*DFgid6=LANR>SGsdNtM6;aG3^cGaw{t>?=P
zYOKd#!o2+o<3CkNKiSyON=W3WWsC414rlO2JwHF!{~sL4rTBqn2(e{e3cR{{Qa#lw
z;;68H82=-vmZ({%A!d}&cV2v0RMVE$(fJ!SCOTLsZ0)PXSWav?9%rXFl$k!OL3P{b
z4~eJgZl`3><7-}y;CO=EE43PGa@aJw(@r6clVQKQxHZ`!+8X~%P7vbm5jU?D#-?Km
z)4PUtE|klS-WdHx_bpu?pBr7(Og<8Su%CCp*2%uxFRMz82n%yMzq)$50yR+*`~KkQ
zXy5L{kKD1bv6uVl60Hi5@BU5A&D}iRtb94~u#qR^G{FRz*x3UX=H}`Lu2&91Bmo(5
zDP&WPASgOeSgb$&@D^3v@iSpVtr}83`@ZOhPJS^Klhy!q@;#{fE;DPpB-tv)6HKXQ
zTYvP1h46}^`_<E5B}yzA#Sbi4?d@EBT|87&Kz{-y5e7Q?5(^8<<3g>2o`dD~<|c1G
z*hRQXN=mZAI}7IB;k75L?Jr&6wmXoEsh)4oHXmABTe*FXmtu~OkIjGo{+&}{SX+(3
z8*uM=xY8=BomB8EFE4L05^X4B?kQ|6=tHM^Ua)i?0uqZ9)rK%oY&>0~L6!1Kn`%}>
zGf$?>ufI+}gwa=9%<Js_lnJ+Z+#nA@Z{o1JY1mS&<zAqt|LCc^__2Ja86m&9{N8oO
zrg~1X|4(O)x?!yA-elo($|McI4#4V{<H5#0{Hmlh*byBaJ(9-pG1I`<_;GEi(W3^$
zN5O@+ES#LE!0p{#D+vX~%GUNs7FMwT&9cvnr;pFr<7R>+g>j>M@3RSOBqDz>8tFT@
zt!V|FrdW9?Z4#A&C~NUgo$enSB{8}<;(Woog}8DS-9^E_NC7(OrV3m+gWe%gSMSnh
zRtf&xYXHzzn#4(rW`tRdzcF`Ijm)JN0Z)JHYURgf`NYJ;_L=EvK1zQ3>0S_>)xSPn
z&AnWK#}7wEL3%#k+Pdlj$>tb@LD8$=L({K!$m~XSEk#p%IjGQ%4k@F7?d{{^=Q_3_
z)9sxd(ZdI1&A05)Z?wP7c}n}aP9c*#!<h<2XReT-<74}9^ddh|p|rk@dF92bDp`Da
zY|WI+f3C=yp;@C9)qBC0Ka=RB@#zglVxlLZ5hOFo+-maFy7=@o(Qotut~nAMUjG$V
z{PgL+3CsTY<?_<f1w#V^13Y5lf9vD<va4aCp|Ir|o3Y6oN#AyCYC2FsKDS~^KK?RE
z>iA{e&1E}IrL{AfoeMyleNGSn&_8`Io!To{ZuWUO^uMNw`k<#d`Hvt`ZqJm4;3QJJ
zfi)`A&YqrLGa3Rl;uV!>@t_|u6_A<zGm9gy%BVRR>2>5lg_EycV39+oOaf=xn|4x$
zUv6~Ax}IzvGiBm^r&rEoD}$Il#r`_MGyG%Q3A&@qr>!(o4oYqdIYFf)GcIB@OUKnk
zm-beN`D&{K9X&lCHa50Le^3gC0BipZCR2qXRT|ZEa5FRSSpmB%tzVptjh6u6b|Z%K
ztHkH?0=25S9V40JCatkLQ{$u3<Uiw4Z!44k{6cU;So{Khuzl#AVVsFB**}mfcR@<?
zO}frMe#dC1cpw+Y8^=2DDB@{<V>O#=jkPN`qQsbU@0TXBSm)FY9(gPVe(RPc;B@@4
z&7TAUfrRkz@^aSMO<4zlt|a#H@$uuu_J{*6Xj^gvpFeMhzb0J~b6xA$0rF<-IYAqN
zy;A42xbpOH<8wG!81sJ$o5Gg3HCqD5009zTA>;68j=~iXHGfdU6}l@{KSJs^q^51d
zg<?-pZ1+b(6*hz?F1?cSslgg=F_H>Up^T|348ZtZKZ2frK(_C|)p2?RHf6lJ#2wPn
zLamYO<E>jj1Qz-IYRl(~-^ImDD?e4U^xi8gE5L+3!i#?XG`Za?%FP)W7}%v#dV@wC
z>{Yb90S?m*lq+T6u7m;(vuvi>YI=S*$IBNW-OnHvi|}$2XQys?`KUBg>mZ5YLD?P6
z$s*}`*5mUTp$SJZMGE%XEvx!sMtgq_<B2*DbsmVige%|VO@0-D*rHLZ>uUf&8%!1>
z?*mTgH?^VTmUIc`+b>2|b3GQHh|=?B%<`g9V6;^^xIoALg(|R;E#PF>q*fHOSYx9;
z*ZSpV-^0VBmR!UW$~Ke(mbn9RlIzpGmjtLnt3pGOHo>XnR~I`&0wFW{;dV1&qVl6C
z5-MuoIoM*>#V2@t@VZv58dmkbJ9W2rBJbFq$;rmb1f1C6crpBp{SR5?VsB?kDo-P&
zvLsror>VEXLWW9QZdYa^GjljNb|121FMNaoVoWr9beL$+L?E{xY3=2J_doDrA~a=o
zg1#XD&Q2lxrukpH1}FTE2Xx!+wn>4GIn%&a2^t!UKyV&SKgCv1hpvGR%66ud01k(1
z=<7%J^vIq6vrK60@9D9np`r1OA!N60_C7jY@)$b<MGiG5C+Ca-v(n_BG`iQ0RMC^y
zep-6pyo+5U>FgfqH7$1=+ZOt|>4k{&glGtOky(tjLf-Wv>OK+^a1hbI?m1-jM)dsM
zM4~ilEqY48|ATx1kDn7Q*!NwY%ulH>Po?S0?{u&0&uaHunOX92I1sl>w2Babwx??&
zl?)!M^;i<#CdsGEsW0{p4wS~t-cFxD;yDGmNSHdbr?<CrXb8i)h6Fq}4B+s(LHJzT
z+3~RiF~t%T=3i-8S%*fO=k7Ccu!vzC6Y(>PpX>_ogEX$z&JfmocKPdhvZ`EE>;Uy0
z`$_#X(FJ2%2pX!S&+f&}{^)lG<i%SP1f0sZ#+;D!wdtHZ_utn)Fc5J1=99WDF%3AD
z6Pr{rEY5Jig8END5+UnQ0AA9$%w?Dhr;8dIh;wps#%=k=?Q3D&-s_{;qGcc>Hg=`b
z$TG`=m+^i<QbA(RS)~9rbaQ1hL`#UL&ozIHfp^+2fs7c*Eb7X)MN`3+EeBn4xRZdp
zZH7LFDhHKbR;Q{Zca`nShrE2Y`X>JH-`&o^*SX??(`(~p&bHbz+u5Q%WH|u=0TCF%
zz^E{>WpR0V=-?-d&d$y%u*M4qulOVn>kz3hr4;mEAyg}ca;`!~U)Kj2EBg6lQs3(3
zbwxJelS;d<SwajY2^7a0Iy{h@z7DFuwb6W1)QfFGiM|R1MR&>DP|y(M;7WTi<#TGW
zEENU=1USmbwDg|UIm)ep<nnI2I`vI4k&^E<wbM@8UnoGQhzFYWF%FZKbf1%zY(+V_
zQ}A3>)4xxReR+O3d4f$*I7M|OD#f`Jt?JI%F+U{>-!opc_iReCKh-}oy3eg+E%X__
zR<Y&;7fTcd-Uo@I6GFwt$cmbQz|@?m!uM&<-Wxqp5_*-!L7iqDAX#G76l#Nh_I7e0
zk+!)k&de^@^^uZ8D~Y5MxOGCR2rRi^>h153xIS7W+S}Vh!@!UQ@w1aS8T1iiRi^FF
zm$MZ{U&2E}$@Uj&%Mh1)0+uk=IE5I{zP%m#h;)NIkQn;4z;n{1ax)aWE_8^FbnOVz
z#pWr-nNK<L>pTV+hpeg8UT;B!u=6CPihC(9zPzDkOueR$4vY6feTUQG@#cQwGU_26
zTgnf50S|q?Z1`S}3S9v>)pr%KjrQ&l<%-;&;9C@-e-Oq|Ix0fH{&(3Epn{!;EoBcW
zKosjkW2#^ibM#B2zod<z97KyD;+zH5a2*&PAv``kX&M>D?C;wjF4kiY8YK_bnbxg?
zHrYcVp6oM|gv1K74Z1lnA1uO-21P(|gi~n=Z{`B&^sJ7U1hzDY%FJAdRIK~9Xnik#
z1?aH~s$Ape0DmML0?BHM4s9UIQ4?EAqwI9Zt@*neE6OW|(LrMe#tP(9A9-r^57D1S
zl_;QuRVQ51n&b2L$0E==!n?tC2vX^+Gs2o1fCs2-lMw)7!i>^D9l(Ti8lF5_=Z-FQ
zNlUW+{PbX9Zk|tSi3tiCq#d$@xhk+zkhVv&FnoM`Y-<;CJius&$7Q9(#VJh`FymQ7
z%(s{Mg-(SoMB#ecof^NX#jc>Sf^0)YhVkj4d>tJ!-yK8*X%TadaQi;UW)wkC^)r-X
z6N&=MT}Ps6pnppp>fbLMh$n?QdZz(o>A34_Sq`u0=8~P)lh-=GP{2!~mhGaUGE7h^
z#=BP#?~rc}fM@7$i!XKJLDb$6C9Q*Oq(}92QW9vhkkd6XSs(>Bn0&3_dEj_panT4A
z@dDBC$dnX(kbP-cSkN0A8;dI|1!|p_4LzP8Kl6cVloDw38ZhHp#G7OxwtQLQ`rG|X
z8_GSX1FStS%>IqCo?k+MRy&89pQZm-`l^m~$BPzIwvSFv2QuzqCImUJ@WP&r<7z3|
zAb>Y*=9JFZhX5@-LG6hD%9FY$8>{EDrYp=_A%_APDr2}Z9T04y^Ory1zh#w*lL~K1
zVg5FrK>%8_v$F2`rz6|rlq&bp%+R2sU_@jAd7r}`fKS`g*Oy6bNdRiVBs#EOOutr&
z{QUf(X0L-f3D6&aewU7}U`57}FXPZG)vB|^xvutD>&IXLZ>GxNC?BBVz?1V^;-Pf^
zo$L`5Cx6zq#XR8Jvv<mt?|y!jB<@GKP@+QeD~9A(w6m+cLK73=3%qaR@KhPJYLA4u
zxW4JT$z_%Q5J-Im{PK&up0Mr$F{1zq1p;(+30qoQH8nNeHo>d3Dp&l=^#I5e_F!G%
zfBx{LELJX0*Q?fEFKXRBJcwfU?`LKr$qa}g-0D}<&t#wg_6~6s6{Z;30<s*7^W>y#
z*oHc0%`~kWNktRH#qQ_gkPdw#(#{I!a9%>pwamD9At$bxN3`)MH;O|tH<9|gH29Cq
z%(uN`W9n^wS1da)yf}rLdoc7-1gHcBeQbPvZ;K}<KY)?#dJ1pF;HQ%tsAyxO&%>jy
z76MnmOM$LrhRRPK1Y-#GQK#^=y5n69?Q5cYx}{;h3>DQ*VWDqwXuntN&pIR|S6Upz
z8HhjeWSr|LSu3hCSPCAP_gF9rv$>PRNtZ4+D&~g5q!nrmTIcLA)-to>Yxo1cw%8$Q
zv;}@BtMfV$mO?|jjUbbAmbz(o4sB=<`n=NenN&<nY#WTxWUJ;*ep8Y=)P{kv<>~dc
z!iNu&$~Frgjg9*~ypjhv*C^0c#yY--Ku^9j;7C}p3F9p;6?up7ANcLZ<0a=32qigr
z@dlAuv!xG=`acqAw`$5yQk6bdH8BWab8()DGvvsFFzykL+jAb%j(~;a5%0<<V#M<+
z;a(ha?Uu(0HOHQ4{fe?e8(QoPW)Cj5wT5yE3Yof9CIO|#T=DpytgVAROfoYw{eG^f
zn0Yht46=2w@v0kGuOdKiA{1X+hcl{TE)7r2KXm^X$+jI<s96f*rP&@m66h^C=3p+v
zALhB>%bKSwz3J%@;^kgz8-xYyB@^2Svte+^;^85xppWr!?+%k8s$g=l_{T*-teszJ
z>Udg?SZ~`2)G+MdD1<8~cU7em)3N?r)Tp<!ND#tXsB?-bFK1f<1xGd*z11?Yumr0W
z8CCV!E&SO#yS(%S`|U(mo^jlsedivfBH$a3%s@y>g2>|7)oa6gMq!-d^Ma~WMAKrs
z<KcKQL}2BFQu?ll8|(3yEg*G%v?6mv@`p&srUMi8Z{V5Q-_vuaH6d4LDt~Fx8;YDp
zUJ$C_PDQ*%0NX^Vm3!y(mwc<LjaRf<hQ8TpLDThXFwTan&4!#qpp77cWqBuW0US<)
zgp9ln20i?Ic9R7qMMXtE^76eGxVX3tzGpPxXh=cR^50%G+!nO>DKHpJLtR}x623e2
zLoq=jiH-n^gs0%Ne)TIW3gFW!>mAwscdOFp<!|Xb76=@|L)<~6#z%-O5f_9fX=B0?
zD7TGsst<g`biHXn)fT$&oNGok_;^ntbDHCoKek2odA1PlMY}k~9sWIK<MobNCm6d^
zy^+z-(n8Eu+c|$^Vq!uAtwW6cZ29~Nm}MRZ1qJ<SX(5}d{J05c0@)pJ3_bX?JZ`qX
z9~Df_wyW8&+rSvb?8gKefQ^Dp(P9Pe>C!}cNG&+pGV`bIxSFp0_0Db|dx%AnlpPB+
zeIOLU=T~?FO#886>I=M-iMoRxAeVZF4Kz=?>z`c#4TGN~80_fuQxX4jk2lht5t})3
z8;yHCu<pHG@v~oqbEy8zHB2ke+}p$BOEGCvz{7P2c*g`CL_}>IBrwsJ!k3=}Q&SD)
z{0Unr<}kIQ5b(t|RA4vt^BdhOD=RBd5B}dc&;Z1a%0L^p1FM=*7SlS}7q-DnvCV|`
zFF9YFM?xHs3TRO!P`}NNpTY6kwHFPrcKoBBqBA>sgjdz2L|oTMfo4pWP4P7CLfTo{
z8(x>s={ZIhYiN+D^|cHb?P^ku3fX_Cok{7n1RlUHqy^2H63GzY+Ffp^303i-KcJOY
z<mcztD=RH+0h0wi7fH$XA~A7sQ4kU$l#~8*;UX48mUi8QX$cAnCaV>dl~z`AfOo+Z
zzUu1gdh6=W-bF@69)jWm57=G0y#9haP5(lu{~ZF|0`jKzcJO2bAd$7b*Odsbva@oE
zo%<X!{N`sf%)1#?1jh2=d<0VZ?IVY7SZX@Xh2Ix?8yZQx5hB-Nl*^KaYzNH-5I}Wx
zB)VW@-f+2{<))zabeuDy7fqYK?7iOXZrJCcRCZ-2r=wQzW*nmHSxisF_pYuc@$XdQ
zWk6HcnIwyfuDQI7Ysq4@`)*4pyE_5AqTX2^Q0v$$GSK}x1UUM*D;CaraW0hpcwBtn
z^njT3neo6wLTaVjBqJ3k_{}J;(<Wy$UyuhGH4;&|lbpc;zJ8bb#2)&^Tc|vs3n@kb
zG~YP8#;fUyH!9yS4MlN3FN`U_7(KtFzM!JK*d$nJ>Ck|;tN|r?HMvR|v*7;$o_A8`

diff --git a/graphics/AtlantisJava/img/cursor_DnD_invalid_32x32.gif b/graphics/AtlantisJava/img/cursor_DnD_invalid_32x32.gif
deleted file mode 100755
index 64c265d3e9f3f1d8e9486b0c6562beb6249452e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 153
zcmV;K0A~M3Nk%w1VITk?0FnOy|NsA)nVA3p0KmY&A^8LW00093EC2ui03ZM$0007N
zoIjw8?QfKrRKbe?-4$P5EgRrDpkN)+M3xcPW}OS3vC7injOSkc^7U>IU=Srk{)7ph
z5%WB@qD7w6rc)+SOsMtP^|Ed&t*aSQ1it4JCwxx0$MMf1RnP19{J#GW7$`VMSZH_{
HSO5S!I%Gk4

diff --git a/graphics/AtlantisJava/img/cursor_DnD_invalid_64x64.gif b/graphics/AtlantisJava/img/cursor_DnD_invalid_64x64.gif
deleted file mode 100755
index f0da1d0b3a4529cc22d74c22e7e9c64b174ab157..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 204
zcmV;-05ktbNk%w1VL$*t0HFW?|NsA)nVA3p0RR90A^8LW00093EC2ui06+jh0007=
zoIjw8?GK}TO4zHW-u!?IV%<o3;PQ#(I;BG9xd2N$t~EDu%_q2uNacDf*)9kqj)aDz
z>7^_&o5^XkWA)*l!|Nuig=)LrRx(`KmN{Uwdi_0z-*AmF=&Z*vi-25j7IFe8b%R4j
zh=qcf*y#8O87VnQS!sERnW?$S+3EQS8Y((UT55WVnyR|W+UoiW8!J0YTWfoZo2v_1
G0028RE?e0E

diff --git a/graphics/AtlantisJava/img/cursor_DnD_valid_32x32.gif b/graphics/AtlantisJava/img/cursor_DnD_valid_32x32.gif
deleted file mode 100755
index a2d986bab98db68aec96f8a155c2bc7079ad7486..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmZ?wbhEHblxI+2nE0RJ|Ns9C3=9Vj8~~DvKUo+V7?>DzfNTbkJOfjTPs_^Fx{Q6Z
zMcle(?%kPxFZ6(g*TT<J)xEYoo3-Q#_i1C9?Mo9MoL}?lsgjr!pOPk*plw=!N3fpw
zrIm}gdNVqsl9zeAWcBabB)(a<KRZiYFPCk??eoGBI%<#KU)%SeUxFi;fx#L8@_08!

diff --git a/graphics/AtlantisJava/img/cursor_DnD_valid_64x64.gif b/graphics/AtlantisJava/img/cursor_DnD_valid_64x64.gif
deleted file mode 100755
index 167754d0f3c04bc1c9e24829957dd640c15b7a2f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 202
zcmZ?wbhEHbbYO5`SjfQe|NnmmFbQNR{$ycfU|?d<0g3=+9f0iFAxbMxzvW-d&2X~2
zcuDB*`a)TcX>1LB&$>ES96i?m`;?jU_3v|ESKs;k*Jo#Q;SQm~gcDD)Z?g0)2vq8c
zQZ@8nwPy2cRj$KQi+}D>J+GD1CB0@Ii}p(kz1HK`-*!32?LU6}>vW+L&)q%LcYM3X
zu|1=qjm<MMv$AvM%AF@~zWm84rDf$6l~vU>Yt^n(w_g3?lGe8Nj?S*`o*lrzU=09%
C&t1m=

diff --git a/graphics/AtlantisJava/img/cursor_fisheye_32x32.gif b/graphics/AtlantisJava/img/cursor_fisheye_32x32.gif
deleted file mode 100644
index 274cae270ef0f05f0ffe6e2c4bb40f2ab81d9121..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1191
zcmV;Y1X%k=Nk%w1VITk?0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c
z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM
z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7
zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?
zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy
zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj
zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T
za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD
zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}
zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(
zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p
zxVX5vxw*Q!y1To(yu7@<y}iD^zQ4b}z`(%4!NJ19!o$PE#KgqK#l^<P#>dCU$jHda
z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1<F+1c9K
z+S}XP+}zyV-QC{a-rwKf;Nall;o;)q;^X7v<mBY#<>lt)=I7_<=;-L_>FMg~>g((4
z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg=
z{r&#_{{R2~A^8LW3IP59EC2ui03ZM$000R70R0IZNU)&6gZ}>gLzqyZLxl_lD#X!Y
zVL^pSaD-_S1%-|z5D)%)BEyJ9g8zQ}fRv2eG;Pk1xiT{3<iLMIWVw1_GvNtN<=ip*
z)k_wvRLH3P(P8snm{0n4^!x{d*}HVprgh6Ss8T0T)xweDVeuamQ2%_vXv(5iK7GV~
zk#kpwN0CB=IN5^-Y=%N1;1v2<dlLqkdi(U<;$`a75f?13>`^q%-nmI+l63k9Z4cR-
zAY|0z*Y6%BPDmOwSfJnpktoLS(d%a8#pceRZ_+4JuirjKn(9PQfIvZzBVWATtCmFu
z&cOc$H|2oop1oa|Abn9$;>eUFtL}wGTa#j;S+r`WazIq?-K<1~=CJuPWeq!VL`>d%
z8ntJ_5j_NR&M<z&0ml`Hd~?hXE=-lvPX7I40}dygBFr?y%yP;IGd$v7LL}*DkV8EP
zv4agBbWj98A4>EOMJ+b;P>d+i7}1S5=BVS2Jof10k3a?~<d8%bY2=YeCaL6-Oad7Y
F06RyhM6Lh;

diff --git a/graphics/AtlantisJava/img/cursor_fisheye_64x64.gif b/graphics/AtlantisJava/img/cursor_fisheye_64x64.gif
deleted file mode 100644
index bd9f9e8f6fe33b42f1bad61e8ae8f64970c5a51f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1259
zcmV<H1Qh#6Nk%w1VL$*t0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c
z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM
z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7
zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?
zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy
zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj
zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T
za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD
zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}
zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(
zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p
zxVX5vxw*Q!y1To(yu7@<y}iD^zQ4b}z`(%4!NJ19!o$PE#KgqK#l^<P#>dCU$jHda
z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1<F+1c9K
z+S}XP+}zyV-QC{a-rwKf;Nall;o;)q;^X7v<mBY#<>lt)=I7_<=;-L_>FMg~>g((4
z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg=
z{r&#_{{R2~A^8LW3IP59EC2ui06+jh000R70R0IZNU)&6gZ}>gL&&h9!+{DTMs%nU
zM~8(EGd@(91V@-QQBdeeq7dP~Co+s+)X4JSzaKv!CF3?tn=@ptj0{-`QHU&8FL<^b
z`tJm%a_*S@>Lm+SDrD6D=-~M;%qM+2gbro-4+gV$>84HVmT6F>PN1rVBgF&bKPI65
z`GTQ!>qZu}^64Y?i=4YcJc<+|#K|5!U^5g70jJOpUAry2lBu^(-z{FIJ{@tv;>sRH
z<LsTAL?%h6f6(@{h0GO%jC%a~-J`?_NrMIp6r3Ou#TY(%-E6!#oq9EEjsIwrsn>5G
zBTaQ8C_tbf$dNDJ?p4bo<KN=OkB`Y`{Ko;)J$t(_LHeSi#E~gUR^5xXCdI<Hap%?*
z?~((edhg7VNFj5u@x>Htup<r;DnVowR{Qa1&_5&e5X?El_z?#jS0M7uF+aE<ly^S`
zCE<8B;Bdkz!b~&FET@bx!y|Q_lv0Ez5)@GnLhN9J2OSi_PlOd+lp}Hym9!C#M>gr?
zlTbz}<&;!bY2}qzW~t?tTz2W@mtck|=9pxbY37+|rm5zdY_{p<n{dV{=bUubY3H4I
V=BekNeD>+*pMVA`sGR`;06VT9WwQVP

diff --git a/graphics/AtlantisJava/img/cursor_fisheye_bw_32x32.gif b/graphics/AtlantisJava/img/cursor_fisheye_bw_32x32.gif
deleted file mode 100644
index 31b8d566e033c12980fea7c35d4814ffc71832f3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 167
zcmZ?wbhEHbRA5kGSjfl#1pi?`@h1x-7XuT64oDOv&%jhMrGKTi;GH=o7c3a!cI`;s
z#WJ_8<NlF}?G-D}W**9!dDcYg@XXS8*}b0`vK?-7s|)(2>{ISq;qxkF&C-G?YqsTG
z(*BZotH|==d4C`6q{GsSUT^i=`|zyLO=hl*k|$1Oy%X24@QBE$=$Nr$$B7#+esD-?
NT6#uiMlvv10|3B^Nkaet

diff --git a/graphics/AtlantisJava/img/cursor_fisheye_bw_64x64.gif b/graphics/AtlantisJava/img/cursor_fisheye_bw_64x64.gif
deleted file mode 100644
index 817fee3d0bc475f0c82ed063cc40d8d994ff2b00..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 220
zcmZ?wbhEHbbYO5`Sjfl#1pi?`@h1x-7XuT64oDOv&%m^HO8-i2L7v4n>%v|#RBS%K
zrghd~7RBdFyDg&>ymHmnT+307k~TX3HUGuSBFS@S*+V#El_Jk~`jk!cdBp8L*=fc3
zXBT!}_FK3nZ8ZmPw_#>+_LYkC>#MhY7t_9Uyljq@#^>$fNu{Ce<{gYh+gqpqcxbfT
z;ZsCrW#`P5J5Szx`IA#h%gQS%tEy|(s$HjUz52x^t!?ccon75Md-d+qw_pF}meH~C
QiOH$ynX_h37z2Yf05A??I{*Lx

diff --git a/graphics/AtlantisJava/img/cursor_move_32x32.gif b/graphics/AtlantisJava/img/cursor_move_32x32.gif
deleted file mode 100644
index fb4d30e49177e62158f4e654cc3d6ac44ca82995..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 235
zcmZ?wbhEHbRA5kGXyIo7f(9^d08<S>UIPdmIB?)UQ2al`e=r54fh;nB;!hSv1_nL`
z9iU-A8x<HBSThzV_dRi*m$AyOVdXvp?kxqir;Ky2SFC%#x_yIc31hxn*rke)zBx)7
z0n`2jF5mempgVb8&4Uf+XTQqoJgRf;)W5e&3chdIWwYp9RCT1!HS4OPI{&Pu_}W(g
Wj;`*W-oE|`6DLicGPO&Q!5RP%)qnc{

diff --git a/graphics/AtlantisJava/img/cursor_move_64x64.gif b/graphics/AtlantisJava/img/cursor_move_64x64.gif
deleted file mode 100644
index 1312c63e98e5b27e17c32c04111bbc8880568a17..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 286
zcmZ?wbhEHbbYO5`XyIo7f(9^d08<S>UIPdmIB?)UQ2al`e=r54fh;nB;!hSv1_nL`
z9iU-A8yy%JSZ6O#?t9`qFJslZ9BsRXm*+}q4>{z#ujzWeYu<%#%xvu**OEDtPffaT
zX|rXN+u|$N4XZ^TExUbZvp0*?Y(L|jIXSzpX5V@*<K6u@$KXfD^!Bf{Hepf0$&D^P
zrOoZOt_3~4xos1yi>G+TOn06<Ywo=H3l=U~ykzOJ<ttXMTD@lNy7e12ZrZ$M>$dGX
bcJA7}XYaoK2M!)OeB|h{<0n=tGFSruJQJW=

diff --git a/graphics/AtlantisJava/img/cursor_pick_32x32.gif b/graphics/AtlantisJava/img/cursor_pick_32x32.gif
deleted file mode 100644
index 381e8e27aeeebf84f1b6d6b308471777ca4917c4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 142
zcmZ?wbhEHbRA5kGSjfl#1pi?`@h1x-7XuT64oDOv&%hKvMZWO#+tm$KQ`jog?{awa
zaYc$1Jq{0BKFuoo(6(coS7zv_&8u6O`hOBfvKBvE+n1Sr?kf7GO}yo6GtxYo%$DEO
m`h4rF)%+bd&2(PhY)EA>y54vC`IlXP`_8}qUK7K}U=08S{XCBV

diff --git a/graphics/AtlantisJava/img/cursor_pick_64x64.gif b/graphics/AtlantisJava/img/cursor_pick_64x64.gif
deleted file mode 100644
index 933ee9025e4ffa057890de5c5681cb3faa9e6ef8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 194
zcmZ?wbhEHbbYO5`SjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5i)8r}gg{R;0D~C9o?EcI>
zHJZ0AI=u6lW`*3TtgM^IF8)6G%}M>M?EVAyA8svK;_`I6@U982=M7g*`B4(0Y-06t
z#i}r!jO^NVd%Rz5_Rtfa`?w^nI&Zh(gReF$b@%o=sO9{3n_9#gkx|hxW5tdWH(vbU
skkqvFjLfX;oVjx6$(t{Ka!P4gc|~Pab<J9}>(s4Rzqob>FfdpH02n${2><{9

diff --git a/graphics/AtlantisJava/img/cursor_rectsel_32x32.gif b/graphics/AtlantisJava/img/cursor_rectsel_32x32.gif
deleted file mode 100644
index 735e03ad7ed142cfc3c718381ecc73112c91a385..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 176
zcmZ?wbhEHbRA5kGSjYeZ|Ns97(+rCLM4gLL6H8K46v{J8G895GQWe}ieFGR2f3h%g
zF)%UcfYgCBGB9OK=@&cscIUh~2~pwe?FwJNi;UEmB%WcFajGZhah@XsLvd~R5AK^^
zX8rnGAu~V!nDDh}9+!M77vFRWdU4+DuSEa(^lv3k%G!-ST6mfE@4r<%J+^GI?;%rz
XcdG2ucihd^x!_{r5m6Dqz+epkb<adM

diff --git a/graphics/AtlantisJava/img/cursor_rectsel_64x64.gif b/graphics/AtlantisJava/img/cursor_rectsel_64x64.gif
deleted file mode 100644
index 6af540579930f5b3fe343ccb10159401343bf607..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 207
zcmZ?wbhEHbbYO5`SjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5i(}F4eVkh77Cr59(^_t;c
z%qzaOE{~#+&Z?JOwQsuT80ef|lYM`uB!k0+->j_rZt-1V{@1r8Ws+tQS7X5B3++q8
zR2^0tW!yQ|b^U$5W}3(HyLwi(W!s<U|2Sy5y#3*iKiAhCn-<Pqp?<?HVnxA^B^C$E
zwk?;K68hwYf%<~dlQ&=f<do8~@`}o;>YBA`*Qr~tesM`_TYE=mS9i}|z5Dd-(*X<&
F)&O_rTOR-b

diff --git a/graphics/AtlantisJava/img/cursor_rotate_32x32.gif b/graphics/AtlantisJava/img/cursor_rotate_32x32.gif
deleted file mode 100644
index 61b6efdc627f8271344f4822dfbc560f0bdea2b9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1126
zcmV-s1eyCsNk%w1VITk?0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c
z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM
z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7
zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?
zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy
zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj
zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T
za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD
zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}
zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(
zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p
zxVX5vxw*Q!y1To(yu7@<y}iD^zQ4b}z`(%4!NJ19!o$PE#KgqK#l^<P#>dCU$jHda
z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1<F+1c9K
z+S}XP+}zyV-QC{a-rwKf;Nall;o;)q;^X7v<mBY#<>lt)=I7_<=;-L_>FMg~>g((4
z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg=
z{r&#_{{R2~A^8LW3IO;3EC2ui03ZM$000R70PzVNND$vYaLSq$T*$B?!74Wf8FR?+
zU%!6;GX5jjC{U6rOOipONDv)>lP5P4+$O4(7c){OlEl{!8UvIn7v2I!hfA@U0<jcG
zNf8{EYd|R(SP%g~PKMsZC^<$loCXG-bU7uNtw)Y^6frTVgU_G2rwz}+$mWpO2@Ab|
z5>!G%Awym?1j!{hY)7(&%UsmjJFplLqzt2tSVmajFdp9;R`UU@F}_na)HQ@wB$j19
zF4{F@cf>_G!j3-d(C6@)ke?*~`Rj*IiiEfh$yL$um*PJF+%91t;f^FVEv;e`sPRF;
zt(obPbQ$K%;lBhE21t=x?n)Ris2W86BQPKVfp2IV(nHpS39Cd4{{@(TGTz>2OQJM6
sWQf&3jq}Wt5n;CMp~N0!Sw@j3dXRF8f)GY1;e-@cXyJtzHWUy5JDGV9h5!Hn

diff --git a/graphics/AtlantisJava/img/cursor_rotate_64x64.gif b/graphics/AtlantisJava/img/cursor_rotate_64x64.gif
deleted file mode 100644
index a376b6b532e11f4472aab2b577d2da106b4c0601..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1190
zcmV;X1X=q>Nk%w1VL$*t0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c
z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM
z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7
zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?
zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy
zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj
zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T
za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD
zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}
zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(
zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p
zxVX5vxw*Q!y1To(yu7@<y}iD^zQ4b}z`(%4!NJ19!o$PE#KgqK#l^<P#>dCU$jHda
z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1<F+1c9K
z+S}XP+}zyV-QC{a-rwKf;Nall;o;)q;^X7v<mBY#<>lt)=I7_<=;-L_>FMg~>g((4
z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg=
z{r&#_{{R2~A^8LW3IO;3EC2ui06+jh000R70PzVNND$vYaLSq$T*$DY!-o(TR=F|A
zSj3AM9scXr@1Mti1RDiPQe{apXc<#xL<gW{OOOP&iE8D=j1-G1b2{t?je$#;3vU6V
z!=;$cqYSYWc=-?<mupC)3Z!IUK?DFm8F~|=<e1c>;WRMtqzfy=Y&~+U`<fFIgF5*9
znakSn9E@yiQ}Q}tp_fV}G!*8&$cu)coWph`8+>t@i&{C05rN7WVzd#<5cBv}8Dcdb
zz;d3lp|0~oXhmY><l~~9X@~5NxG0y>(T5%SUOT)d#3;mn{`%pQBEhfjhUBW~Sp4uG
z0B)BskZ^b0AvG<neiNwiLBXx+4%37s=`zfj#sm`vNCE$_+?6n3P&NEVU_b%_-{`U*
zNDo;PCaff~&_4kb*it<EIrPjDQ8aOgA*>Aa(LD2bl%PYl?4iUSa9wzmCwh=_iiaeY
zXyS<|rl{hIEVk(4i!jD0<BT-cXyc7I=BVS2Jof10k3a?~<d8%bY2=YeCaL6-C<X)o
EJ0^8NZ2$lO

diff --git a/graphics/AtlantisJava/img/cursor_rotate_bw_32x32.gif b/graphics/AtlantisJava/img/cursor_rotate_bw_32x32.gif
deleted file mode 100644
index 6833e4bb8a3619f0bb523896726efb0ed8713672..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZ?wbhEHbRA5kGc+3C>j0_A+49pCy><kR-oU9z&?6UGQ|NsAoNTQL7KUo;L82A}<
zK;j@X7+7Y1IH@^tZ^x^%>P+qeG7VQtBf2_M%Yx(;_}8UNI{&=2X+g1Ad~W-PzX44T
zIUOg+HZn97eb$VacYrCZnIlDSw|n_3#)`wU4s6?`w#`1JT&C~YzT5g%CiC{sf1Q+7
zlbo2);>{3N#1T~^8kA==A<whfw$FgUNn@6gS}O-L+k68{zZo-?v{pAH$tx;XtX;Eq
T>$dGXcJA7}XYW2)K?Z98b8t+t

diff --git a/graphics/AtlantisJava/img/cursor_rotate_bw_64x64.gif b/graphics/AtlantisJava/img/cursor_rotate_bw_64x64.gif
deleted file mode 100644
index 5ba49f2c75c5ea37270b345b1bdb4505dea40816..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 300
zcmZ?wbhEHbbYO5`c+3C>j0_A+49pCy><kR-oU9z&?6UGQ|NsAoNTQL7KUo;L82A}<
zK;j@X7+7w8IH@^tZ^x^%yZ_5F$v74;h^<(s^(;ws*2WTDrXL3W(+wAFO?a)wP^5Eo
zZoy7RkzU2dNuI6(1s9YX43@IFvU-1ukf_e=aCmkpXnw0wxo$#Tz02LOyK=Yg|E-a#
zC}?Q3X^pCEYwGarZ7l3kESc18Q&g^*Idz&SL!v?jN9vrp{9$v<qn9pI3Yz4yX4!HE
z&su-Y%?ml0*>;NTiRj;4n5D13OD9Q1?eIzW6X!2ozH;^2^&2;D-M(}8-u(v;A3c8Z
j^x5+lFJHZW^Y-2Q4<A2${_^$P_a8rh{r;mZ$Y2cs!q9rk

diff --git a/graphics/AtlantisJava/img/cursor_sync_32x32.gif b/graphics/AtlantisJava/img/cursor_sync_32x32.gif
deleted file mode 100644
index c383ec1293a38aa62b98f1fb5095a73eceb8b700..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 916
zcmb`GziX6n48~J%xQe3Sbx@?7KPpxfhb%3nLkBBPRd8_Vpbi0xgVoLHY`v|Miv&BJ
zh=YTmxXOVbRwE(~PR_01;8+KVpM3uY1IK&0Bu}2_$$J+sEzZo|=t)nu4+zn3pMHDv
z$@&$e(J1*nCEJ51-w1yDf1x5K;v!L-$W%p5)I~!yt7s}_VlEb9S-q~}Chp=Po;4aO
zVG=G862(+fB~8*L1KI^#&|oo4ch;T?Q+3r)&00%lrsis)mc@dio4TuqdKM{q!!%qY
zG!l-CYMQ2Nh9+BK4H%?h2`y?Y1{-Lw7|s$@IpJnumZguiWbWo+o+TF+6vHjTB2f=1
zdM({DERlyF&}14r&<_a|!WuA0!;)5buo!Hh!OC*3%H%}2XBmk;){;edB)%dS78E_h
z6CZIJ1K>qFMxz!h@dKJnV+WiNj6zrg25Bat1rHX34RqFts+%%7kz5QT(Z^b{XfIj$
z+U{M&cEYl`U8Q=P(dBycu11?3b%ds{kQ(W_N#jw#4Vu@1D`6g*Sas~rp0RrQ&emI9
z{|V`=N{%0$`TbyFt#jzi)m<5_4-TH#dwcit@WR9H`IXI`J5S$lOrBfYcX;*W*5K6q
zk>#ydy-$y)#y)IL-|KyTGI8bY^3S{53y-FkZvHymo%%W)UqAl$dH2@0;nHAnes*H#
X%d=~*SAKka^Wyu<>+kOG@5tOgZNZLs

diff --git a/graphics/AtlantisJava/img/cursor_sync_64x64.gif b/graphics/AtlantisJava/img/cursor_sync_64x64.gif
deleted file mode 100644
index 1853af35b54f06708257342985a282853ba158e1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 973
zcmb_by=#+k5I)hNQn5%7v4|*A4N+WfiLFSCT0atX5CuUBMZKxu7f2DLuLZ$Dqe2l6
zQBhnf*pCdR;Lu1=i@i}@Y!R)XbSgMGozMOL1`ooU%iTTqJkPy3c(}K?tG`4g`qe>*
zEPb-{$dF|b&1Tc_yOXB}p7@5qZ~rftNQjikViPiEVj)&yBlai?lL(2D7>P%(GO3U%
zsgZh&8j}f`k{MYrC1-LWS8@aG01jwiVHn*Wdm@BcnT^?FEiw@nWib{H7AUH)Dyy-2
zkV3Bso3a_3gCj=Sg<aW=9b3T~U?2^apoJP10~^r5!mx*+$Pp@HA|Cp%7MZH3iF(Kd
z3lvSoOw6Gkq|hs_;wBDx@B=h44LhJ8B%lzi0S3}wiB|ByVqgOrSRT$r89BmKJ&c4t
ztVL#~=I|AA!2(5fQ-_am8U}zD+F>-*!b<o7nwW+i-~_=?2-W}tX-t9^cwjNG0qt?3
z=tdbi!f`Pe34K_L%+gC1zNULeF`Y1MPFIQEWOTTmyo=FfM;sw345UOlZjyKeaDv9`
zfGfc~Xu_(^e^)Gvmv2YB)$yO8wwL59Hx!p{>>X~)70%2|JZlYg(C)!Qlg|&_T(hlj
zZsvaf``V^`<&k{-=exUGPjv4et)DMH*m<`0DW7}s_EE9@$K2^FUD?yp(CSr3M&$VI
zo(qfBYfHa-A0Dfe?{r=+e6F1u-_tdE^4yoPwbR4b^H&F2by-(9I{W(7*T%(#kB=*j
svH3THe-`Iw8{^-mv*qm@t5Xx-TeouC`)q1*;lsTxl_%BpmrB(055haHy8r+H

diff --git a/graphics/AtlantisJava/img/cursor_zoom_32x32.gif b/graphics/AtlantisJava/img/cursor_zoom_32x32.gif
deleted file mode 100644
index 6880193d449f3c7f2e895ed742024d78d2bc460c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 335
zcmZ?wbhEHbRA5kGXc1sgS64SSHnz97_xJaYjg8I9%Brug@9OHBHf`FHB}+DM-hAlL
zp^FzU-n)12&6_v>{{8z;B2fIv!pOxSz@Wnb1Ry&ZSkEY^^!aD@Wvp8DRA7%oz&aCe
zo@1XZ&ImH}&-!4fVBpoA+{qxaPL8!{@s((ek_*d(T|;L1^iFaRxZ|{-ZGF{ui;V3q
zN2}geSa;s|dEHLs$ye1H)4~R|($oUh%vOGmre@~2Dkh^eC4LsxR<?d;*TigAhRkU(
z%og0iJRD369L7skTo{uLC-%<T7*ou^z-P6qnT>~sjiuwDCO_w5mlG#d^f-A^F6eCG
s<k)#FhLM?b=J{*<j4W(Sx9?16WS#Qp@xAwVHoW@!?fZ|P(-ax30hG$1m;e9(

diff --git a/graphics/AtlantisJava/img/cursor_zoom_64x64.gif b/graphics/AtlantisJava/img/cursor_zoom_64x64.gif
deleted file mode 100644
index 72d75f2a100a07b6a5173a1461dde5d071718b17..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 394
zcmZ?wbhEHbbYO5`Xc1sgS64SSHnz97_xJaYjg8I9%Brug@9OHBHf`FHB}+DM-hAlL
zp^FzU-n)12&6_v>{{8z;B2fIv!pOxSz@Wnb1Ry&ZSpO-g^!aD@Wvp74^Lo)!fin&P
z`zqE=K9Zor&;D3|!KUnlN~S}?6tQzc2Uo0lB*)sc*d#`yA!1eOnkt?}YQc+D1Y}MY
ztWoskx8qCtabwMj>#~(qp=k+qnT<`J{4A|)svVuyHGOIg`4hWXi>L5&OqgMrmeIy!
zw!o{Kbqd@3<>5ZrrK}9a>zbMExTASEm>4+Bx2;HH%r#A)yXsJL9RmZO!|5u1HXa@}
zmg$$m_&K+v-MYQPh?6JpQT0(yj#Dq18JRg*-oEQ%WMO0a@^um;>(YlmTARcJ5>_;^
z32Vii*s$<$yMVIS9FL8Qj&@5JXWcomaq;nf1?Mgq&rM5CPS)TEUKMk4)6(Mt4AuZ9
ChPv4R

diff --git a/graphics/AtlantisJava/img/cursor_zoom_bw_32x32.gif b/graphics/AtlantisJava/img/cursor_zoom_bw_32x32.gif
deleted file mode 100644
index 9e2afd655574cbbe2991ba2b52ca0e71a7ddff91..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 161
zcmZ?wbhEHbRA5kGSjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5iQ_&RpmB-)CYnbyg(j#=j
z!(Y4^QqOH~&v1=BIVZ_$Q<JvVLap=VvF(;;rPoFrQ1A;g`87diajwT5&FLppxK2&k
zCuYg);oVuPJejB6YTZk}7wa^8O3nAF|7^XtP5HsE@0RzzPrbg}*u#RkV#SUVH(vb6
J2xnlh1^`V8K-~ZU

diff --git a/graphics/AtlantisJava/img/cursor_zoom_bw_64x64.gif b/graphics/AtlantisJava/img/cursor_zoom_bw_64x64.gif
deleted file mode 100644
index 2efd87e0d4d1a5f4cb08e46a16fe2bd9199564a2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 212
zcmZ?wbhEHbbYO5`SjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5i)6yyOE04eBU!1~uWA?Ip
zGKr!Qj_%Xs7@8KH%v$&>G}+raUuyl=y5(G2w?8)6$$Le-77aC4@!rW}HUG$pk|?gw
z#qMi3qpnnX8s(MG5!LN{k-tVsXuIWyZmWB9F4s1RzgpwI`0I3WkJj`VEsQf}wB4xi
z;E+6N;i;bP88+kO&6htprL?TPqOz*GX06(F>ej1YT+-Us-qG3B-LqHkK7IT3Z*Cc#
JKLHF3)&K`XRH^^~

diff --git a/graphics/AtlantisJava/img/downarrow.png b/graphics/AtlantisJava/img/downarrow.png
deleted file mode 100644
index 17b7273d22a682f1fe269ed260d78559fe342144..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 183
zcmeAS@N?(olHy`uVBq!ia0vp^oFFy_8<4DKZ~;+_#X;^)4C~IxyaaOClDyqr82*Fc
zg1yTp14TFsJR*x382FBWFymBhK53vJdx@v7EBj4O9zks(HNN^6Kp}Ha7sn8Z%gKNK
z|F>sWJaEK;<v_@h6F=sAsa^CG+|@ksM~}wCmNg&#*So#Bc2H%4h`?Jlw^gp(3>$U`
V3)nnaa~5a>gQu&X%Q~loCIGGWIavSz

diff --git a/graphics/AtlantisJava/img/interaction_clock.png b/graphics/AtlantisJava/img/interaction_clock.png
deleted file mode 100644
index 0078909d9bd3ec15a13d2c8fe542faa1618e61d5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1033
zcmV+k1or!hP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5(zIU_!C_K00W6hL_t(I%T1C|NE>$m#=rkRcNcSNa?2ST4NVtk77X3Aahi-6jq^b$
zgFySBTU~|}L6}TO9D5q9dly=Y4>N<#!XB2!M%V`Kp&L!Ngke)!R;xJDX~D@@NbWE(
z%iSfn2fMQG^@AVZ4?cqbB@hVw(%;|Da~zif@cHQITWD!*37+Zf48DK)@|q+`Nt?~4
zO;1n90HmYQC<p*dO}&Smo$WXF_V#{FCX=+Osi~UF<(2?^8jr`lPN#EGRn-gg^Ya##
zWgFFM^#=gwlh>bt0f3Qk7>^(SHnhCFOg$bC6h%?8*=#hQ&wpexnV3SM@aOpWc%`?u
z*TS+aWm&cZ0Fu|g2J^w(9Cn`l1DDHngHk%5PN!`f8yl8jFxcwo=+p(l0>9tye7(2N
zuzGW~HZd`A|LExG_J7)p#cal-zX-lhr7Cv2z1?~GwCT89)}>;Rp6lyHn<%2)X2XNr
z{l;r&&$0&x2XD^I%!~touVWS@7K`DD)`yps%+KB3-ND`MZH$eLVI&knO;K=Mt>RRB
zI|!xF0X=c+76Bo@19&yFrh#U&S%@tJk|g=%l2jiFg%BPd1~nL9G#Wt&0ihI>QfR75
z&N!XN-X3qax5o<rFqBFX*yDYN!{JzT*zI_GY>ZS74p80SM^RN#*L7H}RuD?T8I7=7
zt>l|T!mzoy`7I~@eaMu{N6>ZM7Y>JE00?Wb06Y(dQhXPSfvPGxmzKcWY@n2)-e?%s
z*VnPQxHt^p0RsR-Lqk7SDit_7I#gZPxx@W^boKP${FN&(o6RVcO3?CoxIG@ovaB>W
zHyaCu!c71tM`|^jF&YjlQ<pB0z~CUm^E_CN1AXo;$ucZF4~-C9y>?9#1fdR~X<=aj
z)aUcz;iDW(Ces&!@Dj7TyQ>-)2GDirx{i9i4$*1_SQcAbTUsKKVBBu^4Y%8k7Yo{K
zZ3qPXU>WW(5{cOV$mf;0xjByKc}S83zPTA+t*&aRREn9LoIC{3IWRDQm6eqfKxjCG
zd+B=^2@j*)b}BbGFz8#my#`HHb&DWCmSrLcf`0MB#fJcVT3v(7<$@@RCjbEGdZi0b
z^H15$Oy<jXqS337NaPc@+dbOQ8mifB&fNLw&SxLa&VGE(@1F%wi^t=TW%&hw0N_MX
z43*1eZ>?5K0$>2p=Y0c!Mk#$)5QHbiV(~5j1%Uc5q{3DVVE(Lr00000NkvXXu0mjf
DX)M-h

diff --git a/graphics/AtlantisJava/img/interaction_fisheye.png b/graphics/AtlantisJava/img/interaction_fisheye.png
deleted file mode 100644
index 6ddbd1b556a528d332b6e98e3272b4ed832b56d8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 694
zcmV;n0!jUeP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5(*j3Z`B6?00K5iL_t(I%axM7OIu+S#(%dYgJ=|?LlEN-k}4=QH=z!x1ZpTm(Lsj_
zLU7Db^A`v%>Rh^CAsrM<X`n-(ba83PP=^M(IQW4>f*+M@9irEmr$aO}!P5GJcR1&H
z-{-uCa|~|j>+9oxIXpb%O&UIYeT)krkw~z)nZ5UNS63(J=f9eAv$L-VJPY#V=XTw|
zaU711PySl5RdXDN&tJatGX4VB>xBjO_x6!$0F=vR%H=Wuk^tD={?=q*+vj}zbV4q_
zhpVfz6Tjb2Fc<*f^z?-B@$sey6B85n#y2-NxUR0Qn#AShWqG|`Y}@AO=!j@EYP7Zx
z2>2C=L;ws|p-><kjsUQ>wx;#<b&ACz7Z(>)DisC?2Q@#R1TZq0cLak0WilDs+S=-F
z9UUGP7SiPNc{z@wt*tGcot<fPbX2RWtFkOhwrwjCiAa(T4h|$qp-@PnP^fMa4u@5(
zR#mA~WLcIx9*^4F+tuISuj%P&U0z;lcXwCA!^4uK#l=P4!Xtoa^toYK7Luq|tIW*I
z(9_ey(9jTbb93zM>@YbwiQ_oN)YKF!D=V0$iD{bkJunPNrBX&L7E?BxrBo`>-QA7X
z>!r81mt-=D+wC@r#Ug+akH@vNwAA=M>2w-NNTN_EFg7-(k&zMkd_MVnzJ}I%YPA~1
z-DphH1YlrbfQ^lf#>foAXe?AKlIktwayd$+67Hu7e!PFnLwNLOkctI(D8_xsyLSG?
c_4PHs0UEs*fFkCv7ytkO07*qoM6N<$f;Kfbng9R*

diff --git a/graphics/AtlantisJava/img/interaction_pick.png b/graphics/AtlantisJava/img/interaction_pick.png
deleted file mode 100644
index 5bb9411ccf89581a77f9a6a4ddec694bb70562c9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@
z;DWu&Cj&(|3p^r=f!eQwFr$;k><XYDdx@v7EBj4OMj>w1-_kP<0)<*UT^vI!PA?61
z<U63i!Mu5Kas9{W&-3@46t>Q>a%R|m;m8TbRa+Pon&)k1@jB{KuB((~$;>#1BVE(3
zNm*6iG5f6RhO1HGmML9wkI$`L%qQplZBa^Wf9QMl>c3|DmfYBXC|+v2$An@wzfbHd
xdOxl?zJ^;qzgS%7<C<83=!>@w^B+!r7WXK}u15OnQIH=QJYD@<);T3K0RSc+TpR!Z

diff --git a/graphics/AtlantisJava/img/interaction_rotate.png b/graphics/AtlantisJava/img/interaction_rotate.png
deleted file mode 100644
index 511c2837239dc8849ab31e74e1a9a3178ad12a86..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 608
zcmV-m0-ybfP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5(_$Z6O}Xo00H1hL_t(I%Z-yiXcR#d#((#x^6(B6QAiWGXiyMOM36wN0*i@_g@q7s
zMFr1BltT&Hsw5$%kUi1_>_QL`H3~tj6hwt^o(e%YD+Li$WHY-nJM50lZrE(@Ag}u7
z&3qs4z4=~_9&z*h!!w?zb^y-o!g#M|<g$soSC{%cq2@fHPOiEBW2Mv`U<HUCEMM*|
zaBpHcr*(MI7i!uQs_Y4cCww9k8Q?cC3CsW{EtF3{6h(td2G^ww%1UaK)My<h*E@kJ
z;2BW1t>$Kd#^i}r<?Dk=>KQ46P)Usr!dE~iRq-e=oo*ptuh-WPx93m$vkT)5<?A6S
zgU`ZMZ-9NktrX`1a6GA^&~CR0!*Ii3THls_4D1@2m%je#{*%8Ry}S0hHZax?)Z)2C
zz|&UeIYq5?*YA0<(g=VrsnmVoY>W@Dw_uE6i}5vu_ih^E7Gf}kSGx+>mQ%1Tr<Xw5
zMIRDSv@K^FPzFjs6<D*a=G(+Dw$;o76TrEcV}QjCPP8p&7&r>KKHvaQ0ow7KVPJn|
zm{$@v7Gs_Fz^T|MRiFSI>(a){xSH<EWLwQkvFEpEh%Rsgn9D9yb{k8T((cNk>S(P}
u+H=I1DF4U(-ul>i@kz+PE+7CeP52LK!o?=qzBp|F0000<MNUMnLSTaCunB$u

diff --git a/graphics/AtlantisJava/img/interaction_rubberband.png b/graphics/AtlantisJava/img/interaction_rubberband.png
deleted file mode 100644
index c101f8ccd9fb2b067b6debd4d7bff251884d6dc0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 699
zcmV;s0!00ZP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5)2c2;G3TS00KKnL_t(I%axK{Xp&JF$N%Tu>t|-07OTbRV<HtbnD$}9EW?YzmN5y5
zMifa?h(Ux!27?F}L9AU#tzG1mP?^D6BvQ%-(>K_xB%)RWTlHdFq8BfP=(LOA&5t?g
zxjN7J{h$9i=Q$5SS&ToOz>Og{v|25MLLrRCBQTqfA{>ceOG^t*+ib{Yv#=T8ZGJqx
zeh`3z1OkB)%d!AKyk0Mo$t3)KKg41&SeE5kC=^0IpGWVW=Z%|o4@^G^&g=p}cmqLu
z7ph~!&jc#i@^5TS4`U)U5B-5o03h_saG11PFO>Q_+pg6(pp9P@^1m8By*OdMGrrJ#
z-PJesaLHl?0D7HV&Wjj^ImvOHy4I)!NoEYbXNx#@s{2Rdj!W;cG!FovbGaNZ<2X)j
zGMQ@1zc5!Y@*oBG)ian~P&Jn`Di(`jwRjtGV|a8DgBPu6Qafrm<#akr`9yHV;@6WN
zc*Y*VHP8*^&hr&46ZIn#^@FN+@`o88?v38XWyfJ`>~H}fE9z*A#X?4>K9|Zj<Fl{e
z^^CyY*MaQ^Z-S79n!+ai@xM=~2E}3#sjnZQ(d>iz&}~ox$*Mh~H5v_{$YioPN54(I
zt#vK->U$Ao-u#<`LIH#j$mR063WIn&&L=vZ&X-DkZ|&(h_AQ-G3uu}yNhFe@R4QGr
zcZ2^M<*Hu*K=>Zy6G37(sEFO5A{u&;+&bGu%GsJELzw$RWWOj)>;@I7+Z3fz36V%t
hms1o4g+jsSe*n`u)A`6UA=>}|002ovPDHLkV1mM>Fp>ZO

diff --git a/graphics/AtlantisJava/img/interaction_rubberbandyx.png b/graphics/AtlantisJava/img/interaction_rubberbandyx.png
deleted file mode 100644
index eefdf1e4425d59f0b758beef4d94654db23d5f22..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 699
zcmV;s0!00ZP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5)3XQh}Vt)00KKnL_t(I%axK{Xp&JF$N%Tu>t|-07OTbRV<HtbnD$}9EW?YzmN5y5
zMifa?h(Ux!27?F}L9AU#tzG1mP?^D6BvQ%-(>K_xB%)RWTlHdFq8BfP=(LOA&5t?g
zxjN7J{h$9i=Q$5SS&ToOz>Og{v|25MLLrRCBQTqfA{>ceOG^t*+ib{Yv#=T8ZGJqx
zeh`3z1OkB)%d!AKyk0Mo$t3)KKg41&SeE5kC=^0IpGWVW=Z%|o4@^G^&g=p}cmqLu
z7ph~!&jc#i@^5TS4`U)U5B-5o03h_saG11PFO>Q_+pg6(pp9P@^1m8By*OdMGrrJ#
z-PJesaLHl?0D7HV&Wjj^ImvOHy4I)!NoEYbXNx#@s{2Rdj!W;cG!FovbGaNZ<2X)j
zGMQ@1zc5!Y@*oBG)ian~P&Jn`Di(`jwRjtGV|a8DgBPu6Qafrm<#akr`9yHV;@6WN
zc*Y*VHP8*^&hr&46ZIn#^@FN+@`o88?v38XWyfJ`>~H}fE9z*A#X?4>K9|Zj<Fl{e
z^^CyY*MaQ^Z-S79n!+ai@xM=~2E}3#sjnZQ(d>iz&}~ox$*Mh~H5v_{$YioPN54(I
zt#vK->U$Ao-u#<`LIH#j$mR063WIn&&L=vZ&X-DkZ|&(h_AQ-G3uu}yNhFe@R4QGr
zcZ2^M<*Hu*K=>Zy6G37(sEFO5A{u&;+&bGu%GsJELzw$RWWOj)>;@I7+Z3fz36V%t
hms1o4g+jsSe*n`u)A`6UA=>}|002ovPDHLkV1mlNFem^3

diff --git a/graphics/AtlantisJava/img/interaction_scale.png b/graphics/AtlantisJava/img/interaction_scale.png
deleted file mode 100644
index 6a4699d2530b7a1ecc737e10e23055bd2be2e433..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 422
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@
z;DWu&Cj&(|3p^r=f!eQwFr$;k><XYDdx@v7EBj4OMj>7)X?3A0pebseE{-7<r;kqF
z=yf<iqILgj&LtNDkEe0;mKAEap3n-)c>QF-(S6N7n4U?>{1Oqp;wi8&`i@M@W($)G
z4#Erh^vv(YuxmyH&c1YTv)sAkmVf>*t+=smFE59fcfZ?Wfet;thp!Tu7hlaXWotey
z&9&;btsTpvSL;q+JFVO{WztC%%~|eVoCj(@xD?m(AKv7(?3yJ*p^WhHkLlrS>sfr3
zukSVSy>}?!>GkdBoevkz+4MS$(c^MU+3vsT&3?;^`4&v6djHk0uV?+Tpvs4qUYbj$
zoMGH@Zsys@3cj_isZ-BbHe}8^^Gt+cjdfpeT(aw0J^`k`>v?<X_S^F`Jzx;n8nyOi
z<-MCh3<{rW?WOvUw<PY^=@Y^6<&^Ng{RK<o*1!Mr=&a^xBi1{$3|#UB(OH|t-U9=X
N!PC{xWt~$(699D`tXcp7

diff --git a/graphics/AtlantisJava/img/interaction_skew.png b/graphics/AtlantisJava/img/interaction_skew.png
deleted file mode 100644
index db0c357a0f7014f917abe4dd102b4fdedcc0b886..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 271
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@
z;DWu&Cj&(|3p^r=f!eQwFr$;k><XYDdx@v7EBj4OMj>8(-znE3fkOSBE{-7<r;`&T
zG7fMY{qJ$5nc=3TWg8C<&v6L}38#(=Jq!Cf`=?*;Z){vRABa0Rm<_HN*8ceLP=uNJ
za26XIo3|3rfso_JjvebbUFlNUJW)_iZDD|?6T|vl|6Pu;#K;=YYOw|?b!TI1%Vyy@
zu(Gct|HX?J0Z(|Jg|Ck@40yrI^MKcMuEd_o1IEhC4CV)PZU_X2sREtG;OXk;vd$@?
F2>_m;Tc`j4

diff --git a/graphics/AtlantisJava/img/interaction_synccursors.png b/graphics/AtlantisJava/img/interaction_synccursors.png
deleted file mode 100644
index d19b2253e87ad4b95163fd50e26c924cd322f7c2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 455
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@
z;DWu&Cj&(|3p^r=f!eQwFr$;k><XYDdx@v7EBj4OMj?KlyGM_%1e)UR>Eak-aeC?G
z^IlAWBFE~>XKdS*Y0G`FK(yzASqF!kyn_5f*Izmpy*b2qw{R>fHSA_#j@8~#;J};n
z^2FZdt(kpiRc^Agzx#R4wtipn&Mtk6K4&4e=0=OY#by@kUKM=b)X)2%Qts?C-=xMI
zGw0=(dke3=vi!N2iT%B9&VjB)CwknHFKv+QUevMtx%oLi{|)-trkCG;6*OdMN%W9t
zW9Z;uSbHsd&4H3%2md~n_`k4y?%9+RPm4sjDjC!!8$K<voEES$M5uPH>9-uSZq}`4
z_HKTYmv24B)uiCoHDd;2*5u!2i9c;7ZL;5br#Z+gXnV}+tAc_qEeafA&vVmy4kmHe
zz2)g<^4e&;CTQi6`VFt%?$Tp8nl#aEvEXC{rB36n6OZ(N>^omzk@Eh+;_B+Z=A5t3
v9WAUY=X@P;iZNsR?MJ)v9_{^Eb54Dw@WBk3uP>Q_q0Hdv>gTe~DWM4ftv<bj

diff --git a/graphics/AtlantisJava/img/interaction_zmr.png b/graphics/AtlantisJava/img/interaction_zmr.png
deleted file mode 100644
index 06e95704d7442d5bdc2f7606e93ca4badc0bd7c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1010
zcmV<O0}cF%P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXY$
z5)Ubs!4d8N00VMKL_t(I%YBevOj~6D#m{$dOADo?YZ<M<F<TG<b1pDt)P;72IZS~y
z5n@S-@kK)TqnMa<n&9FlXtLn422&rpMcAV=8b{4!8APW|J8)S*$0jZEf2Ad(Ev&b_
zExn&FZXufN_jYn}PEHQNF0PKcOSBqo1H&@UWHOmxXnp<1lP8-3UwkxHvK5JYqLFyP
zR`d}sP$2}Me&l-heF6Y&ZEuOKt*wL8{%F^oK$J-cgo<ef75ikgsw~fW?-yK)MUv-Z
z54rM0GPx$sVhbsyln`>903fc5mz)#R$#)Wp!fn%QhnO9yBrQs%;QjfokXZKbF(1yp
z)Y;k5_2yB><*jJq8|||S6@Xy?9NXQ~QyER|ary=Aa!u2bm3{lwTv#Gm)2L-}Nr8H8
zDVRv6BAdqzmBsF_zdhr8PI+wUyU7o3A1XG#KnST2<tY@F=@5A&KJvVGNhFDi!K&h7
zLRLYsBFfs>Db>sVy1APFiZ;&z;LZ(y9}fV8kN^Od;d%ZOK`M_j%G^jsED8dEgim=W
zr6et+*R%4n<C$zl1b}w;;gnJ{r8F(_dcDxUS}6@NBn<#jPMFMQ3Ehq-y@X+M*as0=
zVQNPeo|Eg|KH+QtC<r0%Q%YY1aFdyt`2z<F1SPi^(xk;KfA?H(!(O#?L#C9)GC4VX
zOvFGL=T)hg`~)Fz6GGeo>IfloBiFl4Y$}z)!E#-`p}6RcQP)?>E9Xwto#}a3$<~-x
z!m|%b%<QJ+Xmu_Vm<ybZZF2XM>G<u)_L}3?y({)DE|e4jfWvX&bNeajW?6dqG{+@S
zB$Lz{f{XhVl91ZxasSC{3QX^P-2CCf-}AP{#>T6=zhD6%S1#{Vsg<psUp>|1Hzv|A
zAAV`{hmkLfe7}v)`h3170_23lVN;F4(9&wPZVV3(|Nf+*s;cVz{DPmZhl3Qr0msk<
z3ZVC=v1{~UG)(JXuOHLtbi`(}o$l-F%lK|h3O=9jQ;WsIJnmrf_vZIDHZ{!ttE~V~
zT2|^RKTvUY_uP(-j;?`$f%N#q1f80iy4c>{o&^A?HP$i!U^-@;SzcYDZEdy{0BCM$
zCio9_yS-&-Xoz#W-PG&#e*eVK7wZWC>%!tZ)#>%0;VJa@_t&{xuE^lvV9)=|>gwvJ
gh96@z8Z`j$4+}VgyZ<SIYXATM07*qoM6N<$g8K#F#Q*>R

diff --git a/graphics/AtlantisJava/img/interaction_zr.png b/graphics/AtlantisJava/img/interaction_zr.png
deleted file mode 100644
index c6f46cc29f0c9381097e522bebaef22c65ce5b1e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 234
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@
z;DWu&Cj&(|3p^r=f!eQwFr$;k><XYDdx@v7EBj4OMj-*lJiYB*K%p#87sn8b)5!@E
zpBe;bDj(hOz~1P;q%)JUT_GC~sFj>OFCiqsndu^ye(KB_m6Io5v~4&u*IN8=<PwHy
z_xINuKj30d;z|AW|G#~kaA7NB7_&yN+mr}}V{SamB_$;uml|a5hIo1$23nQQZ7@4F
S=%YB0$>8bg=d#Wzp$PyGeMznW

diff --git a/graphics/AtlantisJava/img/left.gif b/graphics/AtlantisJava/img/left.gif
deleted file mode 100755
index 279e6710d4961d7644ea2e3e39e6afd300147aa8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 172
zcmZ?wbhEHb6k!l!SjfQe|Ns9p|Nk?9f#N^Ekc`Y?g~Xx~1t67~r%;lSs!&jxl#`jP
zkdmL9n3<=i;GJ3ql<+7`&qyuSQOE}IG8|GfOZ1ZSb9EGgQwvH`bCXhw6bvmbO&Jt_
zvM@3*Ff!<X%m>-Xz@**Nzw-3iM{+%$5nXSNI_AHs_0#Z5ammWC>ec*qNb!1QNo>>3
NI{94w6cGjnYXFzvI#mDw

diff --git a/graphics/AtlantisJava/img/minerva_log.gif b/graphics/AtlantisJava/img/minerva_log.gif
deleted file mode 100644
index b7ba3677b6b3ad098bbbbf5c7b639d41de2aac10..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19469
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

diff --git a/graphics/AtlantisJava/img/mode_loop.png b/graphics/AtlantisJava/img/mode_loop.png
deleted file mode 100644
index c4573849c5c3555e80b5f91df2659d592a11d9ba..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 470
zcmV;{0V)28P)<h;3K|Lk000e1NJLTq000;O000mO1^@s63?#pm00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV&
z5DqFI>3sPB00CA>L_t(I%jMKDYgADX1>i5cWHm)%WN{&oI)#!-5DET;blTX8R+d7l
z{DE|-V`Jfu5Fw2iL<oU&!6Gr}rb)L&^g-0-EDVp0Bm`_681B7im~-Bpx%2oR?KzgS
ze~kV39^T;2q@*eIa4SBC>EP8?(BKdQyuk04e?q4wbuf?PBp%=>=eZ&>z_&uQgL`-y
zU&nc3530Zb!}tRFS%)}@NC%tv5`qyv<_6W?CB9n0(~$L3CRzKzj|+Z31n)2C&)dYG
z)bjL_I7)qG9R>e|o0oh5(`}#=vZjzLA`N~{X!fOTe1l#ogHonR_>~13>|(angW2F+
zoLxs`;V-Xfm?u2dYVuBtV->IQHSrJF7zeu{JuGuD-p{v&=57ei@htEC5tee>@r*Qh
zSihi)nF#f98#me$8T&k8de^Xs?>WD`PDvNBjUPqeRVm@tKm9ZQ0egvCbyUn(761SM
M07*qoM6N<$f`~84z5oCK

diff --git a/graphics/AtlantisJava/img/mode_loop_on.png b/graphics/AtlantisJava/img/mode_loop_on.png
deleted file mode 100644
index 1a6b5bed230293c52fa71d78d228a3a7fc2ac3e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 475
zcmV<10VMv3P)<h;3K|Lk000e1NJLTq000;O000mO1^@s63?#pm00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV&
z5Dq6{SO7!-00CP`L_t(I%jMKPOI%S92H?kC){jDCSh65&ZDFtyLJ0W_cBV-iVr3}^
zf{2Ypy410;@JEC|nh*&A38V`aCSukmorSufrg<+ME*lXR(l{`jGw<A)IrDY7kMtVz
zxi8^+_#1ZdXpqqeM)4p#g;wyAo}rH;bg+z@8h=5fG-_ZP$1(hYpOL4EARU|(j`r~w
zFT)$Sitb4npo3m`2JM_ZoF+&EZ*dq0XZV~9N_rptVhR3<vv$fPXFK?DfiJ|thkx{E
zFZvf{c}8P+hV^`~9(e)R7{B8HwCX@3O{;h__-27!4runBsmh?@t>9ZV+%N(9IKU*f
z^V;pm2WaAam>@H^Oi?c*JW^}&e$B@scJM3uPk2))n{j$n>_K&(t}V@699-d5=KVQl
zlWnyleLO8+(8NRnweb*R^^FXD9k9J?=;C+em0?QS#YbEe0al9=zWc9##=kQhUUfCu
RORoR`002ovPDHLkV1m->!f^lq

diff --git a/graphics/AtlantisJava/img/mode_random.png b/graphics/AtlantisJava/img/mode_random.png
deleted file mode 100644
index d7861bd112a56079c81778995267ee6d15259878..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1032
zcmV+j1o!)iP)<h;3K|Lk000e1NJLTq000;O000mO1^@s63?#pm00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV&
z5Ed~Pmn}>H00W3gL_t(I%bk>8Nb6-7$3MSKH?{5TgvDT}sf7kP?QkT>JFkw2ghL`T
z4hJ;I2z3{`aSkuMP;Zopqa}D_ricc?h8!nYL{Nv8n^=xhEB43jVxyc##WT14e!njI
z?J&fk(*qB@&-?OzKhN_%ypO<h*wob2*O^S_^;j&Xcez||h@u$tcsx=#9KL95Y`ix*
zI{N7P9o2sox7lprL?Y2*Fc=>Bd_G-1pD*)xJUAQ<mDOs!6_3ZiU0GS_{NI3RG+MW@
zvGH<EP0fe>{rw4m`uciICKGD4nvszaO)M7s^xpsipaBeu-vY{&eH5|dwzf8LXlUp{
zk|Y&CYilbzJ3IdfsZ^v=shXPrDn;~n-~jj$I0XIx^hJmyNoV)(-+ymyZEa+IecdFA
zq6mmZp=>sb-|v6nCcsNT2q*(O6n|TZe^nr=LZR@Y)oT6HU@&~s)z$U%^z^j<=;$cD
zx3`De?WVoGooF;F%+1Yxb{!B>)@I<Z5;p@f@C#6;)9EgZMk6MZ>9);gD{O6T&4$C_
zN}WzeRaF&UuNS-B&i3~9N5jLzm$EDiC|PP0v2!4&z;a4_7x)3F5CkE=xw-l9<m6;8
zl}aH=QoOgf_v3+qf$f8X1M2GP2nK_MLLoXjIw~Cw$77&b0R9A;m8`E@HSj&~*7*4N
zesy*At1T@pc)ecP<#K5RK`0y_A8%%}*>`t$cj@fxM3!ZimX^?JwPI~;?E?WgD*@z6
z#5E;=H-RV9)6-uZ9v;5m)YP<JQBkp>)oM@s`uZL^ozBGa^0LZevCz=az~bT}Jv}`b
zjm9U%3Ub$;NuxCPXP^MQR)kxv)`-*TY%rV6Qh9l~90&x|$z<|QE|*)my1Ft02!eoG
zt!8y~HC?6%?<-<=O91;yC9OcdSe9O||7~Vw=5xQ_e<lb5fk1#*EcVs;`S~ldEE5Wa
zh(scEcXxAnd08z0YT!2TQ%Qq0%KDD-gi>i^#>U1H3kwT10Ks6;l}@KWk!2ZxiHQlK
z(I{4{6-ko5EB;iqB3h-y5^$+xF5NKnJQ|HAVX;^yL!nSQ9*+yn&CSow1wp{)^JVAf
z=PQe&LIj?c{DBN`b(1*2<mBW#@p!y1lgaGa?RLR#x06gJpPhTXUb(5M$wKL@d0un7
z-S;Aq$cA38&-?v;(eL-C08tc01_uWp&(6+%0Pr`641u;s+#A*a0000<MNUMnLSTY6
CspO9U

diff --git a/graphics/AtlantisJava/img/mode_random_on.png b/graphics/AtlantisJava/img/mode_random_on.png
deleted file mode 100644
index 19c332640d439e2f44b055430f1326603626be51..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1045
zcmV+w1nT>VP)<h;3K|Lk000e1NJLTq000;O000mO1^@s63?#pm00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV&
z5EmcPS`oqk00WgtL_t(I%bk?nOCwhp#($G&{Me+~qD3~<Zgg!F>Id!GKftRMkz$Zi
z%OV9WR48gLa$^)rz3>C7D27_W8*3HOLLouc2zDvGSr|5g)F4f1W@3UEs9M+BsF|5w
z>`5z&g?0}d-Z}5#JkN99_n9N{KgRIz@b|~Z$JMH;+Wdb1Tbib+fj~fyMx$pH6%`M9
zdwZX}c*gW!!M$E@G?7Tu*zNWwp-{+rb#;{!2m}}$95i`6o>$`W_zw#U3ym*LpeV{4
zD=RCnm6n!%+}_@v0B|~;I2;blW-~oKJr-3}zx+1>6JQ0(#C#nnye`1$bne&J*K1u}
zU1z$kn*i$S>e$%Wcn)APad>!GdJ{p806hVI1%3e(;1sx%CDC>Lw4<ZrgQcaVp5^6b
zho)&7pk;y5=`^w|-@1vwC4eR1U7$up35W}loJ=P3s>kE`)^4{yZfa`!^W@~DeRp>^
zwY9ay?CdNJ4Gk!YB27$8eDxy1PvW~;sE>+RE%GXmZ?#&_N=iy_I2^aVUT<b?ZEY+X
zjTTs~RtgIX2?m4sd_LCK*FWj*?mjmRL%QCB`@jL<1q=}nMBV`Gk|bTNuC6{hIy%}?
zRn?~Jdc3u@_2KmNG~?srD2l@N_BN47gyQ1jg2BPTJwzFFph_q=uH8-o-V`^i?C<Y?
zTvSwaucoGkU@&O-{eFuiNtylq{nd0j{r=|WCXJ1a7>2>z+#Gp%d0JUn*+*G|cSKpd
zz-Pecz!yLzAOjV^{>aG4H#<8!AG%zwr}_E$D|vZ&Cv9zQkEW)k67%!(Cb!#7d3iZA
zGc&Zbv`|t~@_UxR5H&vl&V*&}0DEHZw#ei0cw$piQ{}a_wR&!Dt`QE0&B<i)?aRx{
zg^P=eS^!CsFq_RRE-t2Wg!-of>^|@Za7*L>?g8i7y4h^DpGQYWzm{eBRFWjZ;V`PI
ze)sIzv%7|25Q#*H#bPu!H*<b|UL*k);4Tmm82Yv5R{}{ObKQD<eSL}P>FH8{?d@%U
zDwX=wFrK$>U|;}6QSf*?=(_%+B+ghwS&GCu1N<hGXKr}(0v3xU;dZ-+B9TZc9*;{^
zRaO7ELy`!ELg~rL$%3rXOW;U2DGJ2IpPaerT^br1dM_T2w;dlJZ~1&a$>;NtOeX){
z4+evV%jI%st@u)7c6RnbEEZd_*=$#`ENikX9|D@DX>@jW?v0I&Jp}j*RH}o%%uq|M
P00000NkvXXu0mjf7Ov<J

diff --git a/graphics/AtlantisJava/img/mode_sequential.png b/graphics/AtlantisJava/img/mode_sequential.png
deleted file mode 100644
index e4c2d857205282a26b8e45ca5427cf8d14d47acb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 387
zcmeAS@N?(olHy`uVBq!ia0vp^5<o1#!3HFGRQ68=QjEnx?oJHr&dIz4a@dl*-CY>|
zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgga4i*7nrFU^NfO3q?o-U3d7N_4{
z+3R&AK!EkZ`Chj_j;#%wdY76h{a|Q{=-#n(t$*T6=AQyd${ka0+=x2j<|<MjVY+c<
ztH3o47HwODJ7?~kJ~Pw!ds}@?^TbnDZJi&y_dKxO7cKfCf$jMZ2l>Z>@duM{D}6q3
zc-M)fvxTxpt?f^2ZthJ?&sU0UGfB$)VYyE0quQHRuISQExeYzHC%CUY!5Q{ArmI$`
zZ4UFEM9$Ycj_dWUl1+)<aH^p5=7;6Ysg_6L76)`D`y9;JAQiE<d5h9{rw!IeGM(AW
zEe>4HKl6a;_SfFL!@8#o!z=ZDUnB~9)}HWGvFwi6f2cyYEqY7sNl%rzJo^t6XGH&b
cJO8fwVkM^wOt<Bi14D?x)78&qol`;+02^MQjQ{`u

diff --git a/graphics/AtlantisJava/img/mode_sequential_on.png b/graphics/AtlantisJava/img/mode_sequential_on.png
deleted file mode 100644
index c083bef019f8924502fcfff9cce53910dbcfb8b2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 386
zcmeAS@N?(olHy`uVBq!ia0vp^5<o1#!3HFGRQ68=QjEnx?oJHr&dIz4a@dl*-CY>|
zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgga4i*7XLz`W7{XkQgJY5_^EKa|@
zZ0pVJD8Tl>oi}_&_K`zM89FxHs}uA)wsuV0_LEnvY}UQ`kNO3?-!?5>yHvh+Qo+fi
zX?%UoJ_=DUxewR8d3R>d=G}jixx}3GlO(ktidP&}c(e0@gS7G!i8i@~qDP+};yb1&
zo3ik9g!Zf%ZOL!yuLcNq8Z8m@J}l2ZxulIL_Df;J{${4#6-OlXE*uu!R?zQjqj=EL
zY*9t0%<UV8rTq$nQzx|AuI%XG-x!y8ZT(yARDo8t9j?Kt+s<0tS#98<9Cxlnch~M?
zcg=a?3Oc{v-_gu2b5-0bI4-dI*z&3-W}U0zlRRc!|K})oQriCG<jE3;vwkSsJXU^V
b-{Zeq*n6+ci%TlN0AlcT^>bP0l+XkK$IX_4

diff --git a/graphics/AtlantisJava/img/right.gif b/graphics/AtlantisJava/img/right.gif
deleted file mode 100755
index b256e5f75fb1f5467251abbf9442f338892e6ab5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 172
zcmZ?wbhEHb6k!l!SjfQe|Ns9p|Nk?9f#N^Ekc`Y?g~Xx~1t67~r%;lSs!&jxl#`jP
zkdmL9n3<=i;GJ3ql<+7`&qyuSQOE}IG8|GfOZ1ZSb9EGgQwvH`bCXhw6bvmbO&Jt_
zvM@3*Ff!<X%m>-Xz@**Nzw)%~qgf4szES6oR(^g_8+4;}QR+O8Rat3Y55;}UDY3n~
OBkprQ{}oXN25SJ<qdqzS

diff --git a/graphics/AtlantisJava/img/toolbar_next.png b/graphics/AtlantisJava/img/toolbar_next.png
deleted file mode 100755
index bd1b428684b001ef8ebe6fad7b5d10b3271953eb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 659
zcmV;E0&M+>P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02{9W02{9XUK)`c00007bV*G`2iXV%
z3jiBk5G7>*00I+9L_t(I%e9kBNL5i3hQG7-d0dT?rdE<f5N1wmpwqB%H7iXLsR(LT
zgUBGLrVW||5lvFm8d^jUWb_zFL@5r8Gz+!NdwpH6=iGaqdpGDYD1;>Xr~l$xi?!Ad
z|0rWEqyBLBB}2+dVaWdX{cURk#9Bt|Wv|BGLSGUTdUqY^-nec+n4jkSnf=sn&$Op;
zX}F=SuX$a7Xl0h#EtQ<=XyHIh{Z2{pa#w3_S3_IB_+tk(O{eohS`|7CNs5c4K^_$q
zx!KnPTBEflx8N}__<`(V_!J>JChoR>`30!j)2X{IoWyoASeA{H5<~oGq%}$@(ljB8
zV}^!j85z$nXvB$$d&eF~0DE)eWw)XR*L4xnL?cidQl*I#O%x}DVN4iCRJnp`m-4T<
z)mC@+p(+zV#Q~F_auiA?b#+^*-sG~O+{Us5hM`FlMHD3jrGUapf#t;|lF|xF*_Z%n
z93V{#CsRh63JP9|UkXu55yvs5AjJ1P^2<xiOi!`uhx5Y99RK{}%0mMnvtwUgNUH*s
zpdt?)d+4~t*=qv?VTkV+$z|sleftXE_a6(>>C6t@m;=5~5KKL*{QZnhO`|T$IHW3N
z=HnP|hMtEh;-Vp~>+`Q~>z{Sznm;OSqQGbHeh=egqwl0$ezY+DXymW6;MDHb2!Rmh
tEkoMpic>F&>q?nZ*L=s>)^w2nt#1c?_#WV$fCK;l002ovPDHLkV1f)JA;|y$

diff --git a/graphics/AtlantisJava/img/toolbar_open.png b/graphics/AtlantisJava/img/toolbar_open.png
deleted file mode 100755
index c2d8efa7b0707f148900b981c51a5fc9adc92067..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 550
zcmV+>0@?kEP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H10i#JoK~y-6jg!4@6G0S(zxmmjStGAyq99zLM4_Ofh=fE(LGl0~
z<rz|;yh2*?BB>}SXem-sKm%n8Tl|P3u@#b#*s*;nW;V_)(ZZ3gMw*%P%{{X_N<;uq
zO057ZETs5blE#6E4C0Ik3Gz(-Q)w?Eg5B6VoQROEZ|?)}?fVamF{w04sYL;uPN&k6
z1@!LAdwluWjT6>jtwn1cODUArF^`I=*0=W$p1(c>Km#2AnsRbJO@L^=?!sEEiBM|{
z09#Mm>}=jm9SG{;N*G7~!mKqqjb(&V<0)KR#rw2EWi0{{q>NDq)bF5@?>c+UT!Gwx
zsfVu)1Ymx7g7)oOPpNA@K1GN4HLS}FFP^S4`q^h|<1wd~^G0(!Xx_a4O!xjOZ$I?0
z!8yh==pRiuKASN*pEUv|Q$zn~LTed<bJ*NxIHPF?L&!9_lSV+u;$CMoxzDh<cPtf-
z-(649vJ@@*&pYUKJxhfn_YNC;#&XBeTI(?wHRmt&XsySc!V$_2-hCRTrD3D7sv)^|
oDB=@-K>Dq@{TbIKz#RDc2lQW)UGczGVE_OC07*qoM6N<$f|ic$PXGV_

diff --git a/graphics/AtlantisJava/img/toolbar_previous.png b/graphics/AtlantisJava/img/toolbar_previous.png
deleted file mode 100755
index 940797b8a588cd4a74ce79ffd8c3957041c319e6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 634
zcmV-=0)_pFP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY8?OKW8?OOg8j&0T000McNliru*9;sHE){3)r;z{v0tZP%
zK~#9!wbRXO6G0fq@!#xjvfJGdgDFi(6@{khsiCQ0jE5?%BKA-!2-+6$D2NI@sNk&#
z)|28z4_b&y75oSE=vma>Btj8dji$CWjoEB=citM4UJ9wN_<`s6d|`$e{40W==$&{9
zA^C*lynEr<+3RRQ!!~+OJq$DV`&~|Jlal+WYZ*|`LUMdAQ(v4<>^3H^oF9g_zJ%>)
zTNj@wQi`i8*!1zCL|`!63j)9|fBto#XMC<p3jQb-)rZE06X<9U!Ku0cA@D0jgcC=k
zYDA!!Q4m#!;IzE@>RyC2mQOz(B@nay$w+%P9Y-(_fU0Ux6r~aPK?(uRIVknvdoE^f
zKESv69MQT@&fd`#@8ZE!l*D5p)M`E$1GE4(Bh7#i5{z=#wu^lJ12}V=M-bEj<337j
z1VI%D?*NQ81wo-g)i|Uipj4ph_*g4dP$(>8rT7(sHUsMV`{yr=UD-EFAD54QDy&$x
z1C(vvn2OC{I~<NH;Ccd-a!|%mwQYP^%!8H|rU^F1vKKl9^KzDD9ZL;l&=Ko|WtlK^
z9k(x!fdty>6M_;90gBeRM0fFJWXnt3nLa}#r&B7#jeXfedf&hSgiI4NQzzi9<_UgR
zI62a9?LGW1J#tB2yZ>71v6TGdzhLeeG$r?M3Bk@m2zbS}1b;)1?;q8>GCBM&8?MXX
UHoH%CfB*mh07*qoM6N<$f(*zK!2kdN

diff --git a/graphics/AtlantisJava/img/uparrow.png b/graphics/AtlantisJava/img/uparrow.png
deleted file mode 100644
index 339e331a52746b8c5d30b968cacbe4e6745576be..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 189
zcmeAS@N?(olHy`uVBq!ia0vp^oFFy_8<4DKZ~;+_#X;^)4C~IxyaaOClDyqr82*Fc
zg1yTp14TFsJR*x382FBWFymBhK53vJdx@v7EBj4O9zks;>z(;MKp|UC7sn8Z%Udsc
zb1^9JI3HZ{egEg;&_7K|vtkoDTBI)MEo?q>;+bRcHlEyzj2l!q?;Pq9(s_5fG=Adz
by-OJmToo4S`}f)kXb^*^tDnm{r-UW|tsOe{

diff --git a/graphics/AtlantisJava/lib/Jama.jar b/graphics/AtlantisJava/lib/Jama.jar
deleted file mode 100755
index 4c76beca1d5499cd3f996b3e3f30d77b02c7d319..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33329
zcmaI61CS*_v@O~*ZQHhOPusTLr)}G|ZQI7QZB5%aZA}|*?!E8+cjLwXzcMnbqGD&{
zu2>a2SMI$OWkA8uK%o9L+jI#UkpFQ(gMfj^iKz<FOUa8feocaafPyH>Ktlb8#n1n3
zruhFk8SS6N|1()mNM1@@OhuJJPW(Y`dP-J?o?!uAhMs12dahZSX_<BJ*oi?}j!sH$
z!L<qu8ViU`Z2^{kLj7V+fq9InfstNvf<fzXLVjU+?{w$%<3GKqD&Dpc{kO({^#9|9
zx(hA!|90&^Z|MI<X(L-BMpqY08%8-J7Yk<w6B{FEXETK<`N3ak{30^2rD%7N&<t#W
zXfX$A!x>n(k;7v@5B;KIQ#8<{A_eytkvQ%2a5PXb{Q?Nh_-te7a!jwepSM__XFuP*
zUP6NKYc9rtnk$XwOl$CD2~oluq8MS3W~Q=e3CN0<lc@n#yyy}{mb}bX?_cwXh!uq3
zYk9xws3Ds;pg;YtWW#cqQ&s%Waup!zIJ;8p@(D=mF5QlM(Z<_wD4ijrYYkbfyvO{G
zR7<81CT53hkzh0zqO}bW><@N+!aDB{UU}JiE#GZZ4O6^eEJ!6dB8o?^Lnt97ueev(
zlU)u}j1&d2sT+Q26DAfRuuZWtO!4}PFEBv5vZFYGw-!8Yuv+wXy#*!N%H=E4ZPIOi
zPi3hAzTP<NClLdeWQ_^1Z4%QnY#*w<bNnQ)=huIeU}{FKjVDV~eEcT{l6<5XLO(!2
zy8iY5gMr%rg#pEXV_@cCWb0sK=KK!_fTf9wqpOjVnb?25`!7&@HLM*_*U-P}TC4S<
zTj_0T8$(3Vh=>{n{#fGE1$j;=B7=^ODl$Q9*R-}2V0r}vQjk@mg6=1_5EC>0w$yHI
zks`J=!)#~sEy<<u=be6(D8G7?0KAod?q+tJUQbqFwddV&1Lh8SpSQf9E>{2sTb;1D
z>ih02i!3ZGaTDW{;}hdkRO4I>hwRY1DYsoAv?x0Xw`C#EWFNl<!%+m1ZbhKm$+psN
z8$$@CUK&I4x#k1P@ic!&W}`xS;bn|T!Bf(>aTOR+rn@;-t_5meo|Mc5Qan0u6A&=}
zF74Ib7&GagobZct4<JQ!8WMuk^~f3%7|KO-M5z=fWn;j1D<BZr!g2jQ5&1Ls6zk+7
z+7acHCpekZM@RxcBOc6O)+wpU{sneg@LfD5RH1Fof<cD|y#ByCC+F}8U7mrqBkTdD
z?l2?>*F$N5YZR>~{uJE@mXY=aq#Vr$7ZcqFa*mqne(c8So}aIJk3yd2MZllVNOS<K
zuWqlLt9lP%EPGG~#&49+KMoUZ>zLYq;8S1#9K3&62F7n>qTVqK_5K}R-kGIpPX*yt
zC&$<jK^$_Q^IMr>2GB~pt^AU_F;2W4k(jcgEHNeht;mDkS|Ylys6MB4-$<8^AJRTL
zyjgsD|Ml45AD%XcL;6JzO`mRkhv_6vBi_MmGM>+?K2K%J9?FHk4NafCRQ$y+uKZm8
zyfk@ckSPU3EDyux=~%A62$8z`H1~LpNSh{mT#=fQ1Xq6vU()JNyT2gK3`twO7v~w-
zum0rDt>=+wqHiEEU2KqQXI%zYf3#Uk(yne@c7<bD#9N57t_4G}zM{0HX`6M~ogxBL
zhYO<<N1FX*;np&#<{T0os2Fjoj|3Gu<m|--x*tAp;)X8SpKgMJX2b#U1zEy*3$kb9
zaZ1N3)CNW{>WSs$Y~-Oimj#<Mw7pdZn!^qTF|;3EWd#Q}i*JSqhY%*aFGXs0)Ghf3
zjeYTBFN7XgArGD@xh*cMfWL+U&M!)tJze4qA!x(Hv$Vy^B*TBxe?P}{b)9{D#JSS7
zqSUz>-W}srIwlF^g`F7ka*KD%uvV=`BHiAQQ9G){(34S)ggvoPzMfEA>ZjKYG;(+>
zhg~Q3tsdC73GV5<)TSsdFH&W**9j{#G7*ixW-WU4pwcVod2MO6gu9NS&Y8Sm=GSRl
z2f9jHc?!n@MZt^sA32b+*P%0y^bb9{Y_@G11;V^$UFen8&+vjprN4r-^+8>_oR?>r
z`kh*i$(fhcT~c`Eb2XGMd3;0(Cj|?#DhnL1`@H9$O&RJ{Ho(hh>f?`efQGRpX@9gC
z`WuZKIebSAYpW7CQEG|l6<pU*y=X?$DYICkV2*=B1#v2WUIk<njdN_wy9C;6Q4FNE
z$-aSQviKlMP5{VVrRC@Br^;ZlwI4y`ICzHfcAt?+wIuCIiKo07OowB9>THU_@`uPy
zEQcbeQcciju;n17_)?3%R_>^Lw{dC^QLw&IkUt^#Un5u#4kn>J?2>;wv|fTqR-ELQ
zHeEEkKsKP><P8RWqH1EHZ3WebxKj8o(*Kc$>IyX@r-O|WW0M!!Hei(heS;yRsXG`}
zFkZ^Oa|i729?^MLp)V%;jZnm^6t4H^dNm?^Ig0X_SWB2Y%xMyE`RGW;cucJw75joR
zN5*kYHRvj+6`g7gdB+YrR{p)9EVT@kct*4koN&js4Ue$chDT!f=A`{wZLM<96YUld
zf2y*q_Sa)L#sRdOPgqp8hH}H~0x9aO!BsJIDqF2l51p^70tVTBI61PKB=RmI{wM+o
z`vMm|lg4Yb{F{r0$q6t2t7d%GqhxyXthJWWIJ!2v!3R%g+JoK=)T+6D`{Hhxzt3YC
z7yp8G(9+7su^!yYL?GzRrzOfWa+kgd1JNJ{D-}g=N2&!J+}ShS2LFk~YdgqF!*Vy>
zU3#XfR}VeAL_p?NJd11r_jz<ItYZ|HIrd2l=lYnPz1U5>>kg=6u0<A;jm^@AP#KX*
zQMSBFts~5>YnA;YDeI_DDY7!j-sdfE3=^FM|6Vp@YgNk@+6?gOm$9X~%}K+mR;GM2
zQ?sYGfuw_rE?ToLVaIXL$;~*scHL|vpmIvP>0_E5)YR|!GhRLGfRqijwopA^!CsPI
z4;A<9;B=7We5iDpWqa6t@j;-8FaQ(T%fzLLV1SehUT_w*KVrlq+vO(tisIELBDF)V
z1J$CidyS?`w|4YqAxh8?{wsvz1NACq-*GiyWjb2zlG&xfoNr*GAq^hMA3_LYjK?kT
z1-(g61hYFB{*r)0sagI&xl>DIxrPSascnZNlJcBfzA8d?K<=izeJs=tvrVpu)TX@7
zELwFyN+3QloaR=5d3Q`Mo#(P@8`uD+;&ADn{We4HvmQ!MUXvfdNYz=2q7H7>UIQcC
zGNWakKdgLznwN{eV)Yk}MS~9L!p4366Igvy)HboN+F_4u+`BEy6ptcnsHEsfOAZ#q
zp3@3p&8>r7<Gj{kEpt}HzP#>Hg`%D^PvFv(OU_pZV-i>loPCvhpjSk#A0754`?F_9
zRmgpIP!sx7m#-wc{`5O!jg{nN6Zq(VJ7O@!3%Hs-H-B53>qe4y-<bJ9Iv-%!q%*(<
zI5)HY<B(%Tl6vQv%mXsMSTV71lfXCAdiY3s02Z5#OgAQV9=N0_1L{heH{{j>0zYRG
z0da+lBU*loVyQn$%Oz9p6KD5z3Y_(iV|c?n%kxj<IY-f3WIS}vI`AK|e!=wo#I0xL
zt!u#P8PN4erXN*XjcV6Kx@myNGBWBJdvl0|-{+CpgWwhU5Q}MMKG%Z$wp7fkmQgZ8
z@Ow4!u{49WrbXu-|7lbFd_+suE8~Rz_k))r{R{Lz$ZZ+0cEkT4#U)1gpOohRrj<DV
zO=(=roLv}I{|*1BrIV${f6<syU1$%~m8bq^*`&@)*)}N{c<Vn_Kxt&!klM?Fn$n0?
zh7gXFU)d>SX3jsrl)&04uMZ~ge^o_j({vC;MG5Q<T>(KI#T<R@6!H%Szqc}_SS(@R
z`UH2~XZfG=cD1f^yJy%489)2psYw!qU!oQyuzXV%#;|P7T`-I3V+3Z;?8Kj$-cX7e
zS>HIt4U8UdVn|+gV+a6`nBx9skDTKEfL~aO5WjyJ8X6m#8yXR@7{b-S*}$1XxIt*a
z@i3hY7qA91z;&^ljTZ0*6To>fpA8X(4_LxEVIMJ5na{@y`9qYmas>-f2M5AIFk?*{
zLIoSag|TAI7}5pb!BH@AMGvgQQLto88`1<@!j-XB7&;&XJ7edJ?fF17V}W5$n=8%~
zgb76q;6b#)onwn)v$1H78zKjfz@;&1PVN~)q%(D-44A>CF>B5mf(K7w*O)d$4WPr-
znKmR2P(bKleWVVkLm)E!ncWkDKxFpF7$}A#FlmSuf(_<}%QL)%3;u-512_Z>$iV5F
z-*Q6KGrjNz`!jKk@3BMJGkGKr2x5Ok4-i90VD*gc`9csfy@U)fL*%o(#0+4<^`Q+A
z2dRLiL)jstA@h-Vh>c_J(;%-#IJ81pi)m60vXki24!V-)G7iF%e29hMifJ+q%8_i*
z4bqcr(G1#>Y%vVtlWb8BLLgr!jk{?RC+Yy<W@i(}eO<~#ugg!RO;G{37Nw%sMW<3n
zcC**}HIdDb+};_@xh+wfd2{RF>i1B+iX@2h(Ojk&_OMPI+09n7R$Q=-91<k%^V+i~
zP8cUP1RB$)0~Z~tb6O$IQ~>xK`aQZ)t(;~sKx__u%J_^+qNrU_G`SNjpnZ`%hyM7|
zc$Oh?9KnlvO`jrh^NeLS&3Oc7mLYxo%7q+I&2<FBpf`|Pcd}@O(3#X+&80Ks?a2<X
z_H@MutU0*R1J)efdQ<sC?e`W9xVjUA*PMYAvvwz+y<#M|+?zu7$F}W`ZoB|@2RBN8
z0^AN4Ov20VP8USLvy&Sk;Q8Up?r2f`+7C6I!?`WAx&OYrL5)P`j3d&f81c64Du?}U
z57Frf3Bc>IIrK4b(~^RGm0ub|4z8hmOA&fmGEYwZk}Nz|GS5qWL>9VLl8}xTl{DB;
zqS&U3`jnSyQ@LIZ+uBuSqpzhbSw$k{F!bKlU{yr{m(Sz9XuWIqxuWcrYsY?h-rm>!
z85usRleY+-nO899{KNtHKDZQ_6*#y=ofSB|l$q^2xunE?3sMOC`G$xM11x7jTX;65
z+P47#0Gu%PY^VTckFK*jr<XdjerZNvzS3cdSeW7ql%`lB-?T$qZ!vJm9<DIH+F?#_
zWpJ!#Kd{Z6)TQ!M3ZwdnhQRUMi2;}kB00T7>+U(95@DS#{cuKaMQ{&XrUC%hEsjB3
zTo2bD>BhQI&S?eq6Af81?n}KaTQUa8`vPwY*w?4)_9r&Db5)Ve_&HZ0HrNFFQRcG*
zrx@Li9|^wG>i`x$srboTv~9|vrL9l>ya9o?K)AWZQ&SIwF>L(;gYjDu{^@n(*}l_D
zNNoLMd4tp9cMM<kuy&x(Y{M1P&8E>C4Zwc<7GdsKFYhJ%Q4d?7D1XW!MTYR9Z4SsR
z4Mnb6R8p*p97Rb1j@o!@?C;vrSICe8wSrbip|cV~+WG}OqVn;#aCpl?uBRfRnx|ZK
z;QU;XFR$_{Z*|mofIQT7|Fuw7)DlJsKXw?kar9i24dWS-lzlYJ4bHn1?qV=ek?90+
zbtTMvEGUyIdbfXAa9JTTVbi^3l2UPzzWrvnIq2`efs%8vYvIcWd9g@O_ksr(a-2AX
z%7Mbq(GY8q#L$7RQAKM>Hxw2}aqCpp%Ehons66!@oGseQtT;W(8racUOU5irrH3Hc
z;1SmWN!z=W^#|dVNRF8$X6+KUhK(s_D(2&-TAW(+KLA#Yp7U9Hy#2Z7_}gc!a|4_x
zu|r=^cZof$RLmDo<{~P4(?EYWlb@vriFoREAu*EyF^j~cNQ>MWE3dGhQskpjmfh_u
z2s5G?P7)6iM}tKxw`O-`Zf};e__bLT$J}_F`(z!^sBCy?s4rNC>oj3iB7_)pY5)SX
zjlmu(YjG14-4%w8DtazXcj14h^0r&q?jv*Uc9?l~m2HYe%g(G#hZYah!yN8H&5ANU
zv>ND<4Ub8AQc6)A9MlXED$RPHyHYh39Mnvn;B{5mjS3pe(kyIPN~VU@3@CbeGzGhw
zeEg``*wORg$N|(ABiVJb2USAr&Ca<^Sf@?w77jV>G01kO<Pcm4AY$Gqw@)oj(-=8U
z9pb7bP{BZ1kXIXXPO_aDxsEmus}^B3blFYfx}@kp%BM|&l(_HGW9W4hLdI^z!WB=H
zp`?VyS3td$m#}&xKVI!>cC6~@#3X#H>gm1u=pb!jBT~#(v^EvC%g4@6PBYga@jOA0
zXN<58S`5YLvdf@#D0qM{?wxc2YS#&-1Q^?VSO^{)amP8T7X0Q=!h9V+7t67_@&X9|
zxEu8V6#(=-933COo`Maz#x^3Qmm2x~-6i9*32H42FbJoE8728(vmi7EYAhpu8?9zB
zg-xXq?@Mwq!(sMY1$Zmy3@svm>}4TULer0~3!2T2TbPtk2$(y%Rs`P6e9ar@0V>3|
zmq->u1erN8^w0`RJVZ&5tL%S=Rd{7UFn@*;U%3n+P>#{=*Tafgp*kO?pvA&aRGq#J
zef)-AJG;{S%L!I}8qP8+!neiL?lVJ#QBy1Cno+MqpB0ylEkBKqZmU^T`2O*O2iV%+
zt1D+A-_XdgfN^90jP`e|*cDc!(-%2-Q?wgN%?t;<7FucXnT)bl5R+2QM~a`|oGX^i
zo||%{?I*%KM!A<1)QGY6VDzA?>zAla<af;iARR6B#iWosVlbIARk=KQ7v4caV5Ju%
zUDMnBr?gENdkR=<7wjJLE97%PiP6s+{t;j`PMyk5jvZAL2Sr1p8j96g4(eT9$yGP{
zz`85ft=5&@-d4{HMHp^@A2-}e==tmN@dN)(#m@T)+v*Da-IxegCsSn9t<fwz=JdrT
z2KLY?8Vn=ciebNNPZadXAlG|()e=9(&|l^DkfZ^gpU%~HbCF^fpU#7>#Qt(@Xd1QW
zE7;Y+I39xY1gCTo``mZ`&b6g0!Ag*`0=`=zkAL<jyzj?K4oZOwqnfT3HCX}G#*52R
zq%@P1IXWeO5eY-~9q$51kF}UNk2o)jqG8i-`B{-;-<aWcV=$^QwFJk+947De$ey<b
zC;Ms*Jre69C>$=-%6;%4Yl(4&;+$d?md?D*$`H(D$6UEclW;OrZhS0$-y{n=aM<ak
z8H$Kd1<fs1?mSS2osfx#V}`v>UN2RJ+7tPVfO}F_pN3VPT5m>_qsv>*Sgr7w3z;+^
zfS$B(`myZxxh-VPmYz=zwK}U%pSIZXWE$987p!g-x;nF51U;csI`3Bcc9f;4nu&D?
zgv5OUCns{a7m-ZHR>DmExNEcJw;e$htvRZZww9|MAC6YKEck}2l>|6zdgc|t+_Obs
z^8ZR9FtDAT_w^`hSV3Vz=NIbgp~`}N!VcXrU7P!Dy&RmQUKVgT+t|rbEze`VFCd+G
z%hjilm~dK!(!8NkeP5DOt+203ytsTMLv#!gX;<uTl8MyChathN9h`+LXRCM#-XGqU
z*MXfI$x3;4|LUPCfl%BG``SA%+T5QQb7w0|qdXSQi+%_EP&TlAan|81Y__ll;G__%
z!b?Zyps~wURq<P;H&zj&+2EAMom%9mCw6p=xL9mf++a|TsQz^->Ad<QUo8->$f`|C
zaUeTP;_2ZgGch5LVfxg6xg4N^*mP1P)6G!DFi#4{oBHPeY~U(XP4FL&b1yf`alxuj
zBJy<~tbOEmb=&Q&&}{5IOj+{;D{Qq?W6q(N3u0lF`<5$3_Ey@}j>;Z7oTUIT0uMWV
zthxJ+vaCY%7rUXB^h~g>Nx3M$!_<+EgX+7eq&=O8oDi!82gS#C+4HU#POHOX^m@&e
zH+nRKyv;%Djh#AHTc<@1R6x$8ryov*YcZ3nbJXhI$(_U**LiT`(?S?oS!zBFG-v`L
zEDlN0P8~}i|KhJLCJ|;I6*zHiv8$}nJ$3A;5gquMy_TI9o_z&_Lxof;%3}7NZuznp
zaMB0X)X$~K4uP=`e=NI#fiwT<7UvB%WLWif9B?H<Tmf!&DM3G;mhVKU=cSUMT@(1-
z(A(JA3T8iy!Pu<|X|MZ|J_b4FEh67aM45Aq+!&}_7S~K>zN?;=7P}PzuKgl8|IL?T
z+*(?Ae0*Eg-FQAA1!x1H%T-uUuYyC9lSF-Ud^Zw~sQpKXJy|OswnP`a#?n?yg0@65
zzee^Xt|MY4B6g0O#rL~<STRuMAX3p+{2KkEX6@g%<Q?H+5QLV0b*07_c~B0g2Xu*V
zQC|cbP0LjvGMwa0ng5MOke9lenw7dvR9CB>;82s-7xTulqHK1<VR{oIOm9b?em>P?
z!aL<{%4FO@;d5A4&VQ4wtthG@tiBk-`D>!4baW6hj;AZomD1B&d9zs-#<R04-@~Of
z7(@HlBtCj#_H8LOS$}s4saD7$f?=>^rCskjFul_^`jytn&cNU9TQXL#!Z+~zVy$i~
z6Y0wPS8$u(txe4yE`-1wI9EDdN9u~GBShv)URZo2W>;inw#iqI<gBKU@68RCf&m(=
z)$-qB1LP=$BJNkYq<1TS1nom$w@&`cM4dUfb~AzhR{r2;=B9ML8~=VOCFxFvVBp(s
zaVeu+dDN=F`JCv*LR|hTKknb~3_;Y18hrx?6l_71tOHnMu4u0@T)<lXk(=3z#qt#z
zlPd>HuhhYkGqJ%p^p)OvX<8>RMMVyn8F>;}(bn%IVrwaBRSB>jktW+I=-YLZocJ1*
z<U!SKp$@epFUMJ~qDR(oO8m0bsRy2T$$cvZ(>5vXDwK*3rE&K&f3}8wo2h>us02ve
z=H~f>M6-*x<O=CM`h6WcG#G5Ee?-5$p4snlR&n+Js%A`xW&WG(BF9zcSEXO{MVyAn
zyW>adPoaGes;}rh^5G9Y%?zd*>=@nl!=XlXZDPBky0FaNeIknI+&9+C7Y9oTm?`9y
zz&q~tmlByn_*H=j3LM&6?=^qAk?r(~BwirqXK37qJF1llC&^tt>)AX2YRFC4?talu
zpQj}BgJV49u;ZA61V$%fB4tzf$=gz?&GM_({Y)<XUse_Iw2YXWGVthVwTumKNUt^F
z=5*Hyb7E5@i{?22k~Vcv?+BQKk+mY5r%^NR#NL_d<(^ocCtto3NlCqol#N6pHi*X}
zS3&-FP`61xqulM(x0lzuk(YvQt-OnsxIXiPGuKvNm8pD7ec}WVaK8b0OneTh#?I|7
zFy=tpE90xIM>EJko>+c4BTWKbE!pS*UWufh3_h58ByJSDk!}BXCnw$)xq)uno94UH
zTT;X54C7$>LOE%-v?R2r3C1G5r~I1#?h3>BbOGJKJjG6Qm`dqV2sAMioD6o#PV<JC
zOtP;*G4`>Uz!GY7|1hmLd`mmB`D9&6cU;2ANyrHH)qA6Q&~b2Nm_}C^ZC`m&sUt>n
zpWv<dq;ie@1#A@gz*mLJ6}r?e{Ubz^nrn(y?nQKxc1Hi4vA)H_a_(MwLB=~>gN1R1
zy57Y|g#qJFS~xfdhN00&ctGe;>1RWOr{(wkFUaDtys9zX6_dpC#_aRP_7i4>hd&Ar
zXKQ>X76h=$1iadLWbW!P2NPTJ^=y?qE1goVcIv)59T&h<bG-|VR_>~{Un@_H`2^!n
zW{^HbI0K7rRP*g(&DWN<xkJ6@SDjYgdDpI9rDFDs%A4<%SA6o6&OBk~lx8b)NaPZ>
zjFMWeZ7s8O>(Ac?_1!J^(WY)?_ZIvR<|5UC+&=^Bu;;|)#*So1PriO`52KBy3_2*B
znOLDj>Q6DV*0q<=b?d|&vdhNmm2Jeb#b{)12x!|9T6@rtt~@nby?Z>KtcmZISVB4=
zcIifK5M-^|T#}Pak5b0Wam+6%Z^+PH%}BpPm2w*cEz=ft8(Zot+2(Y!>}lv5QZTae
z6PPB^T5?gSq}AwDevYKIKs4u|oTV=i$wQ}jSQ;w&GvaeufS9vaEX&N{uqh(zQ0>cX
zuMt<zF*Mm5r^x_IVr&chlrgW_0|OQ(FfAw~bSx;*SHRsvB44$*waVF(+aalSBsoJ|
z<b>yqDR|C`VpQ;7x>^!AHwt*$h22*dyf8ZXVAW<%HWdSjD%$#N3j6n{824~5Ok0y`
zQ{J1He_2bm{mTK~e{RM82%|Og@+V877FSQ~LlBng#HqlAfYJ29i2ftoH!ve#sjB4V
zmpa*5)oCn`kea5+`pQ<lwrv&S%%vY+Fqy09%~joAmTNIz<x~#G_zeT*^TXhY0^K|9
zhqwCT5;1&ZCKr-p8;daR7Rb$~Pz|mVzYcaK&B9skZ^K<fgK&&{M6)Dh7Afr15T7z(
z9;b0xQqwXP?ciI1`@9UR<safJ9;Nkpy9Jq58>&M;Y*%v4X;5PXl5v6)&sWlG*&o-m
zr5^zt`V$NIuZpv`DoJ_txv#;=FirPO_nqllWm;O`TA?#Xp8@cN$*DHmV-1-!VYHrD
z!>uERgDNqBNm(hSRtL#G90DQ~7xQ*FF0M`k7Ar|DrS&D5J_TV}SupITWz1#<{cTXP
z=2^^{m7}IE!KO4Sv6ZqjvSwB+=mw3ep@=KLjz?8}#IO$+aRMu4Im?ok&)lknSW=x#
zXpS>0Q_5BL@n0n2RT5#Gc@#nr)vdut^NnH*665OMrNrx*#Oudn^b=$9@)qOFCl#F?
zttJuJX3sdZrw>s~2&CZs$-wbyVa|oe)$u&|MM8-4qf-S&eHb`oO`1m<quC&BYEK*I
zR%OYD^}V7zw=jY|_06Xr7FQoM+3(h49&nyjZJ`)vT6&sNOGDDAOO2As%~_sj2zQ%Q
zc>vSP=|Vc_=3QG@_F5-o8t{*NE7bXuPFiIv)J?i+SuSF=5OU&IFeYgmFqYMWbc~#%
zI*HuhYM|3BtvJeBb>l5OVrjICT2_aqW233qGR2y>@v`7$ZIf80rH+;r4(!aXnI((b
zmN}`ke_NChT13%g-qhzY=MF)JOrBLrhUk~kkbDn@eF#P3fAoo-P$O@L+ft}^Jp1HV
z^nR1Y@4ZIxy4K9B#TknBa4Ug-ajE#O&68e|#DmLLy%Ty$yNchqcDbvRJ$nT|dlf&s
zEGEC;eHt~LKV!0Ag)BG<w;ntkruzs;#*P}<s$SA4I}Zr;&#K~oPPW3v`e9i4sS-xV
z2w?1|736IgvtAXszGLP`4%M*^)~S?`!98#yL?_!Lo3Gr0*Wxl(Y@gY~?Ha(|usV;G
z<KpMnb+iaLOksLXffVltJeqhTzn5*~8?^|Ev?~a3JURumr{nadl=b3e)BqgI7N#<z
zSaU~YddvzI{0uj~N=-3>W1fOt-rWcopI@4INPZMg1)QMduTPyPdrSGU1;@%m(mL@}
z_TQxuizA9C6MS(bKcxGRxHB)G8CMuDt;R~}aUyEaXmyY8{6^YM;5P*v%inJ?+{?1I
zUK3~k+u*usQ}w&YQM<<v0}EgK3j2r|Dl>C#;cY4EuZVGx9O7X-oG{n7h3S7Vw`TOX
z9Mrm_bT^42ZighMQ+0Y(xz9~Inf!gj*yvpD4b`11z9AdSrmnc+UvXpSWSq0L$Tkf-
zeh+&MvzmZ=&riNHVTo3mpvs(p!rly5M*8j8X%KsjTO@7|4L6ebyLG`8u@e#9y)ufw
zd%W&9lWbU&_e8DF%59=Sy#(D6X}><V9O8Oxc#l%25F&87#eX3WR^|$jwtOK*>F1g9
zkZsvE>dW%%S9{l~UtF_P22lmLkLO?id>z;^92QN*!58tHCHTGKSj>~B{++_#5Zc8>
zVlGN2No+B8sa&UTty-^kVrAuuB**Smn78q*dV_5ebIUBv<SY2}z_9V)`8KnB*!+M{
z$6T~Vg=sN+_p{jIePKoXb7e9#%$+qc9-jyGWyy+S?8W8xJ?hsU-xkN5MRvJv%4NDv
zuI|hc?X1A*r8PbIHp8w(di}K2*y9}mmrq9CtMt*4$}B>A!gq#M-I1?>Rf}#_$YL6Q
z>l!UVHsl8h6CUQxMc=+~q`k*IO2r#>q?5!@Ok5asa}wf}gQZqqf?C+&EOy-6u#eE*
z8vn8{CRXAN?t-kqsw?6Bq<4;QrF%{Lg0=neN6DH!=&DaXx)4V6*CaLv$<XAbiv-zM
zPwSOI?em_<!J|}AS*29k$LH{M^Lx(Ba^+R7#+iWgPtpY-dSBwXcYBvMUv0MPn%+wL
zyZOD9A=z3FE>`Ld?lEpDKkap6H}ll>r00empYoL$t7{8Tjgz!5TRHXeTPJX#Z(-(0
z(h!dE3m+@{26qZ@rn!s7uZ&o1hFHpxYwFHFA^5b<`F2aYvY}5@;XM$XDt*Ur?}9;K
zjsG$RnD1MnaQ*C<-Tqgps6=mro`af8tQ{2EuW*oM^e4-fGgOw<GOgBr8ht}pVl6wB
zOnxPC?(O_BH8r!AZ9nXk{EF<%n)W^|F@2Lf)6*hpTKx+8P=A7I+FTlJ7FCKj)nFED
zmaBhFtV6%1nMKFj@Ktt9Iz?GBaUXOHIfZE2EIDG+*sLE%sWZZ0{0lGYua>c>?ysz2
z7{|^Iyo-zB_mLT|SDu5mi1!i9#;?$q<`>$79TN_7(rhgW_1{r{op{zK-x`^1_*RE(
zkaeW9{)pMY>jeMJ{v%>ju1_GoMS6+uhIBDjTcjqu#aumiPMTdyzG}G&)2l1hrVY@<
zt&MK%8|d16BeQJM2l!5TL0#laQb;XN2{)-3E4x=xuG7UPnoF&eNa2v_(HIGqxGr*3
zN-;JPE(S09LBA9G8a4l^iSV9Vok|no*nHa@U7uZ?f?BuY-Q<{3kNvCG2H)l_nQU8m
zMZ77ZDQNsY`ozCZgP2G;wbY=?XrI__)Ty#Vc|$38kNj%=%3DL&u5)>|yR)uuaT9Kq
z%5QA&t8F9wkH+Sj;U~pA2Jgl?VY{HcV8Gv@r~1oX!_N>AH!i8<;^yM{g?JlRICohW
z*#WO!lTOgFA;;iD{W0;H8;48h%dxkMxZ*ey&F=}V8ylkMs$-UWjZ>IY$5Z<w{WZ3=
z&^jVZCs$YY4#oPk3U^y~{(Uc;O~kGpci)iXwK`NgB00P8?(lBTw9hTGYb8y2M~Q7_
zy0s3@4oAGL&25FQXJgOh&t}}yzyn3;lpmUTv7CRQ(m1K&X}TLe{*ZcJmP{;dv;KCb
zNQ=#@=ChtqZ|#A-c;^r2lW6!Dp!GyPrGJcjiW_nYe5Se4UM%^1{f!Yg6q2AXO4J(}
zdX(TiVQGpxQ5y4D$}&+5PnK^-0siQ&3`Hu1JWc$$$Dj=NoPhGe31l2UaxntICITDB
z9#mAONl9c4RWdDLN`ph8NC;pGhQlyVCKgVCLr+UK8iY6PaA2iIy(S_J@gA2nLd~SH
zAzex+gPkc6{v&4&rC|69*Tyd~i=0Qv8j3m5IY_HXKz2&3M}$X$2_vB-AkKgyK-wI_
zD5>}YF?G{;CBdTe!dQvnN6bEGU$OyailF>wc$_ae$O$9U{#^20mS6E&?p)4Sa(FqO
zjtQQac}Ww6Q;q_932xD%iUd|}#Wayx79$%YfxK+Qw9=BjbJztm?P9{LjCb5=iK1z+
zC0IAEWw9l@hJ`=)-uVb-$**a{CBcTNSL&LxSAru;fIM4v*W{IS-S`dO9RqgV+|2|?
zzB!XS5qu(WMC>fEZgj0cz=1f@6vJmsAVI*YKr(Xz(=_FS?1^XD?uoE&QYX<F$Y-Sg
zE04`UIFG|X{)vR&L|^17vtHs={JzGM-*eW7({raMvM1oN$di}b&=1V4hc4SaF@5HJ
zoL17GvtRtnNFeC`{ixs-^qywX`ow<X;>18nKxn4{>Ap;itp336C2d4}r_F^ZJOM$+
zX`DArnGW<Q;$K<uaKbx{x`LLHP_rx<ksdRtIF0EQ3y3;pc9dZTKY1};o@PA`kj&S)
zCN<E^Qrr>hYvGga8yo_%ZYlM*@d@=c_WbG-dE2?Cctu=9OmiQPPm5Rl3i()biuo{o
zMK~rLcbtkp!c0usO_YytlODE7;Z>n=D-0lu7+EHRP$ZC^IbgCv9xLF>V{!c18il?b
zMi$*%fj>dKs$7mG<oUxjlKC8iQOuM3Zv<_HhOPuJkt>>g>H5JZm3^6jBkWbkveuSd
zcf`ArU!og2;=J8~P>Mmh-yQshh)?{J@HxGo&^ys_#O}h<aK6%4>Pb}pLSM{+z_j>7
zrYx+cgm#GPwAZ{}4ao7o4Ds8-mt=V}2>$QUf8OK`P|PcHpdSNWh^h;M|A@ITEh1r*
zi6n+KLh$6!3wu)2n_w;>+ptespHaE7<ImU?0Z8Rcae-t{NRzxk(<i9hAhy)2;-x>d
zRD>nRmuft@y|MR3Ji)ypb4Fulosy}SxLyRj^3@5m?I>P>Y9(swk@^;`3(+<Bicbp#
zt*E)SS0dIm<ZK~qV?1fA+U141LZ{k*d8S3a3qGFRjfi_=ZGfKeMeUT5zEtt5TFZbJ
zek}1wEw07S%7r&5J&Wzw`(&5IztmlSyaE_n`$98B9*r-IydwXidSNfJT+F$2nii!?
zk?0XKdvPyHPsnIUZ7W?%)hBo@tSA#qhCb3%M${!jEVN2qlrTTylvtNad*!mh9$R_!
zs*2br6g`Rqm51rdFG|rLDJ=1O!GY>PJFn~(_+tvM?nk0tP@ude=Qh!m#H*NBx=X+g
zJ-+Cxt5^LaM6ZHZyq)L<nXk|tTZv8y>SH|z?6ytwVl79cU9;K3Rhzy`F?~44x_mL>
z#@iCUB;sb+d~TZ~RlXQuW3C*bnAbE%Fvq5Op{|_!x|Kz=t-vI5*Cs}(w~Y)iSyEwL
zeW5(@X~V8;?hi+S58^hUJ6*tfGwxo*rQa6Pcc(49&vsMh+sr$Zpb5Vy+*aa@S5m@;
zaLL_vx8Q@{ckYSst?vr+t<a{Fa6+GscQO9h?lEI4+mGgSY3_*l(Yb{2Na<0=lVx)0
zOv8!$vt3uJKhYZ4?gTd_{?_XQ{i)QK^QF<3_C;1-E=Y=>epAvvuA{gk?w?9n&_BTo
zg!ZIF@<dehB%FNzadaw_U;y6yfuVUsN<_l^N~L*Ruk?jL_Uhd*F*Xo)l%No>WcQ<c
z8-}49%+4Fb<1%+3I>l@*5aCHU<y}a^8`^X;{1@fB<e5!<0K*f_S=923KK%9-atda^
zE<rHC6Zt%BWxFr-V`IIzC;ZW$`mm)-P9cL5zW3Y&``w^>4yp!0kkF@GMH_#-H{#Sk
z`C(sAr%D1K<(mdUKb|-Xm;JD2MR6>?ks#Llg<o-@{`7|qJmni!e1gG=;9N6_WQv3t
zAyCFRbQqQtv&M+y9G*d&;D=H@2Rp{0VBKIr0l344)+JH#O$?JvNG4Sbn@nhA9aRU|
zB#<WY|1#lM4lY2k;{E$|p-;Kg2V}>zD_pifPKnjH?ZO}MpNo2s860eaVDWhkF_h;U
zVa<7;3VR5v@aIHg579FYJ@Bm(Pk7>f{c%J)Hes5(qn>v6L4?H@93Uwfk^hm#h2HUJ
z9hbooW1w_)X`kiPL-T|WGmV#V(1}C$x+Yv~7DDq_7es@LQOFa!#;q=ZHnGmBE|7ip
zuS4sDo#urP)++b&Z}!<<huR0Zj@egc-J1`Tsrr4!*~5r$_*Gv2@N8Z6jz#hzTL!|d
z>vI@)qHQ2e7<`>_#}qrkwVNDhPv(GcU8Y0-g>Xu6!vZ@lN9VbcT>yO@_^rkoxkWo%
zTUXi;$C|dssw+R=X&2~IH^<OJ-PP^S#pt@Ry?_hol>D%CUGIIfwW-^v3!)EvAYq;V
zkDV*UFDQLi{LnRBgCSf=`!2sA|1SC8xOM^UTR(fQ+<p_63|-6L#&ttZ_U=b?BlcWe
zL*9`3?h$|yc1<Y~fD?8~3@JUMy?_BTycvAX<BITt=e8VQwtTUDfcl^Y#GjkKtUgye
z0r&j3vG4jXtG)Pr5^wR{*nSRzk@xy93!iWwYoDB4*M6{mj)Z{*+Y<YnCA-_Z1JKWN
zRNpj6&-OpnGKi=U20~2L@4=##gYH3uRA-Sglqn=9*Ms1t)UCj}SqP6K_7sbPRJ3S1
zQq_Wrbm=`(aKRXr(-z5G6bZyU)8~~ek(*Khq4JYI3Y+iS=EXb}&Z>OqTtv>Vk-_>U
zP`W%Xg%RUL&VYB&z5Lsu0+QT$!uxD<ASrWbPW+&ueR)d4eSj{-y-r1{M>ZHS$&oyC
zVZk{ys(N&3zBQ;%e)j^Obce1}0;7Oap~B@Qk{qC?G}hTVBb+ddhdw5RH$tJ0DAs|e
z2G;qjEY|g_5S0kdK6*%^z7*BNMyQg0IMc=j>Zn&Y>|qc0poe`S(+?osjpDw|jYY~B
zG-~f*sMHQ{5bXwhP}RPbX@*yU>X`wlj8x4-1B$grqp(MvYph#71K2CZHRoNfcx;P2
z``kyY`-|+$pz}=d9w_(g6CA6r4S&wMjP0|S0GeI2BQ0XkwQ7X3ODyvXw1mMTuznz=
zN)VCdisYTg-IAi8wxACc@WpoaV=&~ZBzRtw2NtoY9TC{w)t-13?LDPr(8#+->n7me
ztDb;v+6Sm7X<2$wU*DGUg2J8OmG~#aHbD0hf#+sDW{mIdq&cQAD9n}wsBJQ1&%ChY
zXTEqP(Qk=%?OzC2I?zJ!yh%iQf9W1Pn;hUmgM8bkf_Q;``=<rCybJz^Ow3o9Sag>h
z1Y}F@f6ByE|1ae`(SOUtL@ez8>E5k9Ma@j?Z5`~LEnO__?fy$FW~*u-t7C@t?fba1
zvnhxcrb`zy8|0i;H{Y7QZ8#1=FUz5*f&q_!%6Qe<J^y6<{hMjDT;R1Rl41%YQYcq$
z`7AA_G2jQ`qZzaJ-9-AUq47bmeV=8`X*VVnslcOq-;GcIL+-=pEYSD%W)#EbY@{S+
ziDg!ji+VpLL<kxhx)^1YOgG^+2o=F2H(~xdBsn+$0TP_xq*@+906~I_Zv^o}e*Em9
z+OE%QBbF)7@$7j1bkrHk<<Jvs3+uoEL1G*01Zhl*a}?R-kfg{?wjg`};|v>M0rM!U
ztLkj!p-hkdXbq72rlsf`C4%s()0JX^3KUfcvPUhug5$$*z70D89dpS=$;eQ_TyapJ
z0Su}f%>rcm@e1C@#$Fc%Do+0{B8f<RR3)xNJxoE<n;l`q6zMO<`VhvKOCN}9n;5Ek
zg=Zf5Pr%jrq9geR>GKqxwqj0oYSlVu<<2aU3tjxF$NcmxK4N4zb;99R_PfXuo5^3@
zITEw<h126b3Tix3xZtM$w^4}s*Xh!|uE+`<=8RUt9{#0+o24$+m9#YBnH!Z<$gV8Q
zS&$wI4eFZS+tC}11>b0!=dd%K>hv+@1n1Ap>G5NcGO^qZtiUYSm(OVHNHDixCtr=d
zO;Mj;srhRAJAK`Cf4E+grqnzXDw}CX9jh;637e*$#}i55m71mL-owUQUMfxIv7JhH
zDx*5y2W!Kf3Oh4JgR?F+NsG2ilQJ)Mcn;E<ZUdUH7(f?WXlcnb0pmg-9>MgpA$!<0
znIA<r{Njb5O#uQrUsFVf$s;|$Pf*xKQv~(7{q~bG!A1>g5J%fqM2(NcAeoVe$m2~+
zN4Cm1kr$1chsgU4zb&IWile?*PhB_BEznS4<))$|<3PD&WrOf2Nw}|qM64%nTAs)@
zCeu%1k=6@eAM#F2U&cBj&IdW#=W|pZ`9>KXJ(4=fzV(S9_mxDSxfyj2oqtW^>8?iD
z_oxr?SRhaKEriq934LZYki<I)J(HTn|H$fUE-Lo5rt}*DIEqA?BLcbasN9&Iay>-6
z*aS-{c|ir?fI`X@s<fd;@?@4XTFn)_wh)iEPQLgpay|j$%fS)(0P4#|aKPtRd^2i*
z_KJ8g9f!OcMD<`4!;&|~s-9nAKvEm9DhIXHv$K6&Gvw@D&(l58DbE!Ia3}FK?bJ9*
z^6?FL6WAyBierb%UkaZUdZHryQN0qIolvHOv%0@?a>v;@#JxSZy3iq4Ba-Yx6K2C)
z2&0EAsn8e|L2q7P#9I=fG$McsP5pB{VqNzhD)Cje$ruootNm0#!Xnn9`ZWP}(Qw9!
zVX)_86945bW*B9-Ab21y`49r!mTV-Dl5zAe;m%Ucv{4rqp?H{#AiudIZ)OqrVQ%JA
zh344$)IhR|c6Yb|lP)ma{6>JvA3qe5KNvb!u!q5O2OhUCqx_c^C&oVFfu8-1BX$J8
z!t~UlKcd?M()uOf68>Oo5F*#+fS_*(v`Nqew%-u9|G@hr)|SFB+OuI`!@>f`V*X|K
z6)YCLJ@)&@e*`vWoJ+rGFc1(h$p62<M)Kc*P0SKtX6I&P<7)Q*652|6EDhC0R!(y|
z?f*4K#tCxHquv@DXsW)7`re3$pH`a3g%MC$w<sb|NK!wMRjWAEl&rRYh=G;#(b%af
zX}5RP*W%g=j+EB5YP(mjzyLElpXoK<eFX*XW-_@qb27P|Po}r{dT-hh0|G$zYzU|C
z{z<7bE`l)#=^ljI5xsuy1uOj^;`)UFc^<%|jR6V%8#WST4ae-kPz#SFTEr|dWm+(4
zB%VAPe~(~Pa?nWGriKn7eS|BLR~X}vd^ZurJ%x^9{6ths_C5~sRPYA*raN_4Zq``9
z&vPD}l={f`Rt*w02n~-m8oMb2J7|3#B}m1z5u_}H2!2U;9%d}OKn|l^$Qf$GtPzPK
zyZ|%~VL-XE0Jbb_&xMN}thZ?uc1ff`7lU?h80k?el9g;%T1t<cJ)b%oFwh8PEb5CY
zY%2P>JV7s`Ev{e<yt?K(WD3oXEr_iU^dt!i4-DCei2Pf{tt3P!Qa6*9QASZIA!LUc
z`$r*H^i`q(Cj1<Kv$3Vv9q%H0eq|#ppoW&Cvbfh47?n0MwMo%d+MSlOv$C|XxzPIf
zTa2DoJ0nz1?3$=-`3qA&#89Z7k7h-CXR}eW2;+&#+-hvG4LFrfXK^9WXEtDb&C7R@
zQO1Wt%v5dd>E3m9h9D)%fpJQbfY+m_LZpq+KtR8}(HIm?D-;f^g{AX4=JfT{wnN(8
zt)otY=IkoGc5p0{CV#29*w!MES;_2FBx0?-xR^&MA0I5++Df;BNDY4EM5nvDJ-$t^
z>*=Mz7~fW04meICx8>Vl6RymuT)@{W2DG}mx6oZ{9>dKmo{iAUY_5>qZX6-AV$fO1
zG?O%z9K&h3HQ0^|F09OGGN!|t-5fmD30(I8GKZ~tr!Zu2y}CEGaSOw8cg6$}&wBj-
z?Ea~hdMgULY=mj+PSDdCSZBCYd3h-Dru|b@uq8>&6*r{?@&a=4#KPCGPjDOGgDYLe
z?x59$N`r%QeGudyA1KaCT(a@}>L$#lL2EbfCY*_t9_UC?X;x5Wlv2q)iduXSTb8ET
z{=<g^H0ubsHosi*2Lp5LZ_~;eT+cis(--IqFZmV-YRZOJ;-hInj1sZBy_a|;OXB%+
z0Z?fW^yZis>(7ix<-UO{#EG9h(m)Qd@x~G%i=fRjh2~ph#_=nY*Mk6A{=|u0^+$xt
zFVylNhAd(l?E-PSfJ74b@F)%}Qu$y~QC?XT*nPAx->t7uO*oBc@&+Zk(Apx{Ytt8^
z_I%{t+nlrD^o%dcMwlH`z+m}-&5LwR*v+s46P>zACl_vblwS=d=H3ru_<ELbW&r)Z
z#wD#$7%cr91C)*c!>Vmi$Z<2DUYngK-S)j}*_GjtgG~L6tj<7PuHv$yJ#dJ3Q;jq!
z5Hxd!veS3^N@*)eKmRx_X-Mz-gANZ$sICqi)E|LD|EJmuELLcG&`d|82e<5RT0<Ot
zXy-c`i!oQaR;W0~T0b1NC!xFv??CxUhBf{I1+^WjT<bpV>V|t7Qndzxd=_ah1-3j%
zW~w+!I0A>rVXGMgl2j!aa?4L~D&-RO^puC*Kzh=f@mMoBte&FwUx^*)vW~cL80{jh
z9iU;Xe3~CwdY|$ZDDDF`VU&@%^EB6CX4CFzFYwl9Ar$Vqj$z}9Z%U5(y&5DV91NJ>
zMAnb*HMpI+N!hhZd>Tou%el3RexpBk(|eM7gB6%0nvP)fixWXcNt3*7LRY;yu*S@k
zX+t-ZvD#p1Y~zjI;dD4J3yi|yd5!-l4b>q{ctBue+<CagXE~~L57g#2|1e&(Vy)vq
zW=!nHFyE5Q<XbbwOrfM@HPk}aikk%UHs7c_s~2rf0(^gdab-Ey*`Q1V1<BHCCV!ib
z=#{o|ObSbLLD}&fAk!MxbVK;4hvH8p;>kblOP;=26E7RE8>)}kV|8rSMA?Rkkm=Mg
zpZwgxvb3~f3s(#q`!izkOZ%WZbEIW;hHcKw@TzK5d;}%8Ez{Z*I>zo4nDQR}?W#?2
zLr6Q0aTP?v`!=)<U`L~wO3avHXbu|fvUaR4W!)P9s<YWjup%Y2x|RNOM;-gn`7kj<
zbTSGDFBBi4EL**$dK<fB)yh;Nn-I@kjiQ|KT;3rQJy9f58p%a`cnByvwIInmn1qw^
zOFQo<fR~&XrkQ6SL6bd$cEb`VuOWLe9jB0VugP6B`=sj6p0#p`$Sc+~x?;J?g(3bB
z`!g3MafSLKP98FQMJw1`&SvxXtVh%80yc~F1JAa&ez|Z5kD4CPrBN%l)nYYkqb;zT
z%i$zl$UU7{BX!AEEH?}NN@j$w=k?D3pWLe$$EDK{$NGNTV1%$n!_;^5LuRU2;0#kf
zsH@h-)5!59Z8%%CC(S8&4U0R0=QQDoTF1Mj<y}h`ZzWpTZCEBCebcOT{<qqffvaLC
z_FIjUdTCCUdrnE__0A?3r4BL>26<v|VZ~nTEoCi(8=E%i+Nz!O+fuLOHxGeuNVp;l
z>B)Lo(_qbV*1wu|LCQN7<(Le4Z%=M+y>3thx;jKFFP?Vu5pc56dM2`^7IPkJz*xN_
zx4Ru5v+}6}3^>2|d~7GDW8@BbHj4no!%IXb^rwcSx-MMhew&L~0*1#a_r78VqQ>g@
zn<0Kf^BuPY%(MaKSp!jWMF%pfRBiF$LXVNdny*K11}AcNG~5B>!pvs1{@X^q*<^{*
zycSN&&P9H;(O=yF5nsBbZJ{QW;8<3ww&hoAu=zFwm1_b4=EUMCq8zjY6t*&5UM35`
zd@?7~2uYpooIV0g7K-;S=yY-XT~d@K&ON3XCdQ;nZFM5tEmw=&vhk<(KGvJEljS1K
z?0r@WH?8V*jbe&Umq{waS~UkZ8ECrMNI2QnSpkJ1l)a-)I;ukjoW-k@0~Gj`a8mcT
zGYzcEL(dVFw!Zw-Wa?B0GuR9<-fowu6P1oRH}shz0Zw?@y>4)C@qC9x+@9qu?r96G
zloOs7Dj7}v)*|e@wzH809a>5nyqL4abj@Fmo1lSB2#nF>p(cp1X(Lb2+)+fVGo*V6
z^Uctbo<M|ulh~Q6dmD;t0*B`DC`7K6(S6p}+OJ}V4|Mv!dew-Re%OXj+prK&;_>$B
zPcu;=E?D1U=IC?`FeN$7(p^rBVP5ZYtl!MgbbeOp`Wq_C742m-4z0^Qmrc4<so7a-
zQh4kCi8F0TdNx)|8x|+0Q?bjk0g2Jt7nr&<X57_^xYI<>Md|Eh3RpJ_ZIr`@P#T-}
zsa?971ZS~KmvE;f+%igC-z4w!lU9Bu%_H^TE8k|Gq%jI)u^id^DJ@FyGYREN+KheT
zw^@3_0(tI-e~4?WA~F=s)=a{7SI$|A3%3OM+@EfmN!u-VDRJF#nI^wtE)50|H>Eyz
zVRAg$F-*LObr+!~x8sL$UFFjDXLJ_Ry$T4@`g;3*I+@dnPRN*_cpA}9DmWA65}mTt
zNlx+<UgHhcaM>biO#+}MHCdN~E4(|(^<MkO6^-X#$z;&3pMNb@A6odn_zCH5tBsE}
z*zxo({<K@%Kl@x1Kvb8_RV7=e<45b}1r?5$;YdN)zxa2j!CYKD&GW$$KHy#QUhS_c
zlDZ$ahn-$jbN+@p-b%|9l$%u5s*`r5ach!)+Gu#(zyY?Z<3FEtIpzvWJ}O$jd^1n>
z`19&De$$P=v+yD*q-Sa*Bvd*7ufo1D+_ELx^4PX*+qP}nwvorSZ7Yv$+jbs1kKK9u
zRaf0tUHy8lKM_CX*lT}#eLG^!5pxVV+RmxBHmA=HpyN*sT*+qDQr59<<sN=grGSJh
zi~ipnp(yEeh@9rmuD_5V%&{+ltiP|^NVtWBN7|RtVb`&Pm6f&WHm8Kl@!9g%`{16d
z8{wa0Pdepn4qH1zx}0SXCY7!e)th%o?K!wTn~_n4ewV6l@9DKyBDcGIc7IW^RJA$T
zhd5(%@X-yPiu8z87I$v&5?Yy*&*EiJ>51mZbZjgwHQY<3#*k)%h>LxAr;Oj#0Jr|a
z!)pR}U{Uvn#Op$InG!(o2Nm@|R@s|Yh}hf*=)#2?;3kORHX!@LLfgx!hj16d-+{Hp
z(3@$pzT;a9ejY^gfoRzujPDoUlk`E!9UR>w^#S4=D%&?6@sF4tY<&R=y%VkOORGn7
zKUDZ2j_o^fB<YC;Kcwcsd^W)DiPU|;svTN&r0ogB{D8jhb9X@RiGn}ye&HA_yY)?d
z3ux#2<?lZ_dq)iP5$y7j9C^zexqqS(r#~n7Li!2uEjYTT&Vt)pihQfjg5O&t+LlJw
z=i8LBxhXjZw{Qyhdk*jSg8CL-e*Ue31d6goG?}o>@zdQ)EJuQrD0N0*6j(%x3fWAN
zlOrE2n)R(|L#oyAvI;rd9701vXk-nG%$DHbFfxnOM<5)6e=+bd9u_U1!3!v9labZZ
zflEEx55MXdGHq;O<E99gbheNYD@rb%Ea}50Wy`J=VR0+!Gm0yr(6o6GTVB}(yL_@M
zvdq$LvBhRw7U9mk*hRdOj1A`G1-=4JJbv7phEtGPiOeg@Vq{*n>AUE%B%aYZo>`#G
z8_qDfJDrhRDZ9EdwAp5s?Zy->-pz{X#wfXa9+9hDeuwwjrlET-+D9J|-CX)J7y5Z7
zdq!7paiutSoJTM6d8Zo{t^FKP-<|fRiA^DM?{|x4ch=9LcV(_sZ^WFF?r6XB?!f(+
zrJL>)zhmEQy4$Z@x`*ph)*W7#glF20wRd){i_c`bM?cxLSE*B{JW=%*vH6sqahK-0
zl$F<+B57arMX_B|mz*28jbEFRtM9pm(>=WlYP)<L{rE*OUy2XZ{>0nA@+8^c%@^Ii
zi8_Y;3Ac}XbM2mYXPd|^BEChtcE8Oxj{I}{4*i3!?|a3c-}y_yKlJAZzq%j7;U3Cs
z7mdA=@m8zOAiHC8m#|MMeSrom9-{fea+go$ZywER%g#8vb8=U`PeFZAyUXhg+fv;w
zvM^dh^ycl$c;7xBD!<^mOZ_G5E`T4z2xR;rVGKF4cc7w+o`IFm>;scdg9Mm;F*Ifz
zSb5Pn^6=oQ3+RE;7SaN%PV)k}&$9X&A8hxCYyG8mL5rH$HH6=P6oG<_Lcqu&pkxy@
z?YZnj&Y<k<;p{^{LHIk+uGS$1?y(_4?GO(1cLpPFkrMU4w|(Y^gW)3%_n(MJ-m)rU
zeRMJe?K-@3GjgCHpb|<C2_=c}u!yUKdWou*>#KyVFm#3QFT=2hZ_E)F(mfPnAbAPH
z!1@w~hFA~Z-oh}lWFtN9H;M?qoEVvS6iEc%pvLTz5BKk%3=!@>4;Sor9~cZ$k1?F`
z4Wfu+pc-{0pon9IMHNM7z??AA(Pl==F|KQnm11-oRW?Y;FxQ%R1f?5p&AjX~d>SSI
zCFaFugL64zzZ75uuthZBe4Ait7qG@n?r9CK97x)OP0-4U%GUV|y3}54^`gttkKXrc
zVdb@P?AH4>6z2xcPhm3WQ2(fXp{=1deZ_GZ0LAh0{d^0ka8~gZ<ik*32b6TeQ~FfP
zpM~RKx(i0#`_tiIj(An!!IT{6nawzwm;f`RI)KAWEawu(l1WIe8w-<;czs~olkoZ?
zh9-|@y0z38?s-hA(_R=nbsIHDbAZ^rjW49kYj20SMwDo{9EYe}n7aR)8h2leGNUEt
zs}QhJ;?a1_FWQ4C^D4}<a4U`&UG-CBKDyFxz#_E$r!1`WG-F(?a!%fP``UuX<$1G)
z9{bZ{`N=8pa#@gu@KaH6MFw7voA|Hc_S^UVEYO?f*>RP$l4~_G&p!evqGVFq?JL!(
z8tW&nX`1uO?WAnHlKNnB>^A(XKu%a6k-YH=Y9Ls$dD&q8{s7YfI2qE<ZT3WVVY*U$
zr&BUxFh4P7qX)5)>GeJZS%R$0d@TMfB9^`8eGm2QcDNjD->1Fsv3pj;2zXQGHw8Y|
z8wx*+^KsyV6k*_p2MuZPAjS6-86e5~bh06&+jqjm2d#KQXLpVFk+Na19iePS4-LR)
zf;$;Ndxte|fd<uYK|GMn2lekn*1{U+!$u7ubEA(q;Eg%*W_Ok6%sf!ojFDURU~~e?
z7%z=-nO{(P0<_f+3)(Qz4`bRu?E6bz7zY3R;h<iQwAO?7_UV1Vr744Wj}P!w4ltLa
zssCQ@j2vOM8ECWwtSyE6fXo?mfW6m=-FCr!y5Het?sRX~CIAukfS;WoF<VlWatyi8
zDEP4o-!P#04No$%z9}|gap0Td@BJKE%r9&^@mW~9EBpPYe5PgQpLv$X-KkUH`k4Ex
zxoPGxi(sLyXyamQl)KdKtraoSqz|TE8C1vjygQ2eHx+KOWM|c%#dkB9xYHosM{bgT
zo@0wH$wytXDq6{sV#w{d{<rJQ70J9^TDqUS^TJd)ptx+3ZgntwPDJS$#@jwb70GsS
zxYq!j_@&?q!REoPfq1tH2J@xVU@e>L4tushkEQ05!LX{Ox^@tXzHMPrU1!kCLEo9<
znrOv5hilDx<u7TGiITDB0;!V>i}(cuReP+Ib2VhQ4H~6^biwFGszw^i9SkDPw7|oq
z+6req(xqvxO{FQhAXT^no^4;=RE%ZKSPja$#fmR3mW%B5w&q^90A_>ll|ZSgpR<+M
zO<?X?4KtTSchj40pMj=>>yqk+az~#coI@QKPp{5Z<mkpC8>ahxzr;go*M7Qp$L}<a
zFX^Js9|`Br;0-3UXc-P%QvNQ=z;x3bm?|tRF}}Ap>szV|<BUvIJ<urC7R;q329B{>
z5-U>5t1_n!6roZ#jqn4O9i0D^nJH;rp#{EoRt!5Fb=3K$_1M#+Fw}s276#^lDB5#p
zz{2~%c*_v|=jp=Z0i3=iDc+~l0Gu6=s?7tZAHec}Tp7UMck;lj4N*5Bzchrc8z{QP
za_;Fr(%*yjNGjUY#t3L_0NLrM3MJm><$>Va!+0i)4e34fcnLpTALRh%+t+xc9Ic$a
zMR~zN??d;%+C@d{=XU`02{9jB^<ex!X76M7k$*+A5A@#$zQr~F3a}?WFqg=_gXRJV
zw0Vgp%TGHlh(jyP^I{y*>=C?R5Lz7^Y{Hec1kY?j2A>Dk5R=ar?QF>Y0ta8r+WLYx
zd>~bW8lXZPvO*ljLLAjf=;LzaXw9lu$qpanbjnGI(aBXr07xQU)itU{)-Ghy2+7W{
z-=g>Fz9=Qd%ruo@vx$ozRg~=3a>#>HPRc<xp6nBU{B0|AeSPq;N`bj=pfbZMe7+dJ
z>lmm}<RX6r^EHxwQC@A~4)#pJc{1G3Pp>#@89n-FgMM3ZG7fb)?nd70F&Ruo(VI1H
zLbg`MQ_rC`i_Kla7d9z-;|OZf$XkL0D{Py_pk1I8L<^ipt<NXzYEE)l{XIgny{;)n
zbTJ|}uy6#NZFwtqV6uns+^ASQZy4$1RNPZ3-7wZAl1p)<^ohtq%ruGNv7wl~jcOy(
zYj`1aj+2Vo!o!2!u}Gy*%dOP{(?!&~ubu0Xrc07IJag5(Mq}1bG^|_wJKu;UD&v(m
zfo8l<NR+}6U(S@&B9%m%`MgMFjK-ElT4Rea)k((*h;MbFx&mcd$@C)+hqhgmZk*N$
zQr-$OlXPp}i}fy5+|MpXxAocWwc=YIw5MzVS*{O9v$p&s!9pigSGJ_HUTmzmLg?{W
z6>MUwP4lRO$~Mv-+e5wmOfs7lGJ|EgTt?hXI`Ix1i5$&S_`|>pCFM-9GYN0F@eEO&
zX(IB#=Uc4yKCaQ<n4oBlA%%mDLRPC^;7C9Fa&_w_4o8oQfKy;vxPd|GwcG<Md+1RT
z2Q>~X$`Ds35ZC}reCRMA(QF`&aCj|)0XO!<pS%w!9Ts|DL<7`0KhKnY|B0(q2e@p&
zEH-PiAjJ5*g37N4q6UY0lY=f7?B?eZ`5fSGAJKyld8h$nDpT|zQ+1FX4k+&n@#*kc
zeRg9DYFlz+cb?;?lEyfq1EyUFGbdDT$mYIHS6E}8d0P+mO#kY>jt}_Ep#MO7@SHr~
z3nps+s|p;t0;`UMIAb;#`h0~0qbox<HeG=#L&!`B^{G!=Vr@v31-6cCYd_Zp<i(lZ
zn!qgcFARD6J~1!o+M;K}Bm{>Xh<-Cg7;O>WL9sS99I###@qrj4tig4M5Q#zALSQ?z
zD#Okf&Q<olngg^p*)7Oc=U>@%UrpyAeEK9bpX`5e215Ps1;5Y%0GR(sul-8~?BB`I
ze`;pPsQw48z*f!LMrRrEEB2<_`}qi5&JJnQdepP7yCFw+42is<e~56$#5jyq5)v}5
z*|%}sWHsxOxZuO$-B^|CE$Ru}b_q>~swOyIiv%aE6sQ?RNQsKjZyrgcq*8UVs9Z@^
zK=sh?WJ|Zs`lW&S4{4B*ai5dX?tQpIuOAr7N3y+kGE$EHE(?>@HaWzItj~NG5OGL`
z_b?C?fDXph%`kryg072qs&Ny7z3pTiM1oDaPBLyL+2UdOQ+2~O$xV>*QDT8wax9J)
zBc6n6JRjek_;^%sYhN6v_1#e;(edHc5#Q~dk+P&{ZGRLJ=G762`_n^03f_1sPMm=x
zAJkh6H3pIe-1`7LY5iB<z6oQVpH18XzVd@0An%&9(UM^k>sa<txr+gaaYL>~%Dn`^
zi+`@#o2_QUG_o3lADJg1XT0Q0DHvHrt}Nwe<z57aZ>_`LMpmvYdKjj^zTF5KLUgxQ
z#!y`B#$x+ryAGkQ%!wJO&!ij_%TU~cQ;1@3^wj(4V&jtsCAaCxjl7)csauM3HMj05
z9YcW<S;h^zhVrtRbcoS&^0qFAzSOa;olUvjFK6^l^94=s7J(DcQM!zY&4p6O-vZTm
z;(gp1)JJ7k-iu6nLBVRueOBWYKxfgqC=O+p2NHaF9~}X`WY?29hd)y$egC}lb8~A&
zk<W=7S=0_;<4Ed{-F3-{>huY#4GMNtU$ZI8{Gy|CCb)uBHtt}U`KUrCw>b}7Xb+U+
z&XY4+h~p-(t?t#PNor6YpOWBHEo?ma8ZEtYo}p%0j!7S|Ocl^&WON<LH6yxmRV`%E
zHsPDZ38$GKD=itybEESW>?5HqR@T7|(K-GR18ai>uYqS%0=A9=z!{}~7gqU^KxK{|
z-)Y$k-YM~{<e6|GCeXFg37~I(%A|ENPt(pC*PK|FDXwjQBdzgHeZ#ZSTmXgDZUqlQ
zHUUdSz<!MOy<Rn2B#fES=}K#*A|e*mK~=xuGAZiYcoeB2#-Zp2*?gSQYpK}ygR$9C
zY=m}^sn$SuX`AJAzK{=3_vEb6$B^qbWL6H|Yl6@4mF9WtAj~&au*Q?AYbMEyBY`4o
zfC)G6J{8ebJM_z9Nm&p*hG(DJg3w+1>p|W?E4RG!5;1j@^EOcQ-rPYf%8NR@TxSb$
z5*zP<c3g^~n5luJ_MUV?ui$Cp7|oyju72xNF^`zS>Or1k>$j}L3s<Db7?X-dx)x}M
zp0jyyR&I~VvhQISh61_)U(Q6IbWqZMhpinY%l)_VI>LnI=2lIa-mgQbE#Wt15J~rX
zj_Uw??glJH5C`&>-|NB{BEdf4q7Lw9g3)^rPlp)SA+mmWVGaq4k6BB8VaAW05_^<#
zE9T>QWy_OW{yC&>Ifsw9scZV0YWPZD?1?Y*rNN<=i~>F2EgXT$MquW{Nn_zR#MHUu
zz0rtw*kXtejoXw$*=D6&uXLW&o>}H|9;nB6E1{q)Jyi4FMl#s7do8v|VKWluFP9pc
z$T@Idc{cB_3)7u1SAlc;$Y3;vg~GRo#5@oQ;vsQr$Pns9ct$cYK1s@Lj+&da1p$@U
zU*t%SzrVy!(WL=b>K6lMF^-*u-a%LM8lk@jw~0^dxcnkwOP0^77-Cmzn*jW?uUs|_
zJrjVnRO$@O%SygsR-R_UOSsV+9~=sQxSi*T7A>$lU#Ti77gj@?j&b*DcJnoAYou=5
zu_W|_qJ5yD<yGL?=VPzF+}i(ysl8jTGsa+lnOfz9-XX%Uzopb4rR<W0heQi?4hmAW
zVB?CZ%eSl*Y^=WH|3qTKN6d(em?Dq<W;FJn*nUroe-%W{0IwWt@`cRcMrG0t?{n4<
zoKh#av+G8vrJXFr=UZ@(7{X5<$B!8Do;oH=@W_+cB0<96qdSLlyutXIQvTRgm}VNG
z!5(9`@a7CN`G}PWvr-cFE}#(!L%zOwgQlkI74QPBxlCA2UOl98$2Z-jY(3D%Y1VUU
z&8|i2)k?9hoS-+JCat)|vqy!t@KT-GDToi&fj(tUYw+rdBj7wlHMWv)7}%*DIW^-n
zCw3xJ+Dm5`d@S&0JBl9b+d7!u_%MB9KQA(N)MN4$dy}U0$CduF^3!p;RoVU!jp|S}
zi9^mXUMM13oI$RYl}n4HF|UcdM9XfjZ69u(s1==jEE<;feH`TqVT-h0Yqnl*wuK0H
zvq9Cp+<06g?O>!~GgPq|F>C-$GNPVI;-7hJt@zG`*dI0G&PDcZ6Z*22%d<8D_oE+p
z3IEX7*+nAUN8)}h2VV+v2yT@7o%#>*+(OT=9}ECs8|v>1;lJx)BK{xp{O_7kHJXq<
z+QS*&$GnoWsi>Qdg+pP<;W~ecg(Gkr4bJ2<g!P98Cw-ECdaUSM>S-_~X9VMpBqkMO
z>3CDQA!V&CI1|yb1vD0&z&q-@IVP@KNLltNo*M)TcD~tf&gw7c`ktN}&32~V&5rrM
zUu!-64sM=d6Qxv*jNv{h!u+y@{ih1}kLI#CAJpKwlZ0<h=Dw{S62<)IPt(OlS-mui
z)LFb#i{M!mD<ha>+gSEjhDc;(R)WQm%Pfo{$x5w^GRaD<jY7#LSQQH*GBR(i2F%Nt
zxK`zo+S4b7G0t0(at7Qc4hQ;0`OraiqKojjIVp|Gh$1&EfzU~H+S+dw=;a;s=pr@f
zWDDAIq$vBDpBu*5=vo@b;BxKB`EzFNdncfMr{#tpT<!dVR$tJ$bA-_A$3k>;Ov;2h
z((~Nb$3=I4vGxov>JJQ;=;)02rrodE-#@7TS|I62WYixXtUW&9-uh6dtKCQ3HEqAS
zOWZv%<ToJtidpSW&8s~;@S?LbNWjMYCCf7@D>E+Jj^W6BW5ND>wSTO)GeFC;4Bx(X
zlK))_ti#hcT%^M@Gn}NuGd*nI=Fu<sEsW1~3hXr~h(FH@_m=K=l;1n=tHX1I05t+d
z{m30G*2*mc$9sd&zSZQspYM%p1oOE<`1>qh7-jAgPEms2Jv_o?j4;x2j*#k1Ei7GB
z9Jes@z4B}q_dtct%z4-Hqb0VivaFYD$fqMKidcuIe|QnD0pJ}WO2dQ^n*QjRi7s`~
zpKAz8&j%IP4T2xt+`*A-l69UKt|3#;JzQ<$2EiKhlS|JD_%lp68&*$*o0q^MnjGbs
zq)<_w1M4iCl!AXf)?L&X(xn`g8Qb&>ou$IaY!NdsSK#qyt%XLM`;E;KcOh^0yaxqh
zq}Va!ZxYbdFs{e37J)YTSu{$yNS2yOKh=1jWgLkiA#SFSS*vNZ+)STkv`Cky5a5Q#
zq8c_lr4z6g(8|F;33J!UROiRoq3~<AYP7R#a`$$<_!6UIGMn|tNNed~rlQt_2nvxD
z(1mf`qA9Z)i)7(!)GtNBWY`<_5!$QG4%N8n!^e-V>gIu)ymgBejvoy==78}x1lGda
zWAKN!3`#a#m$)k#C_5~bx1|XKwUPU}nnh65V$l?J3{M!5YS`Y3K{Z|k;k;(>bh6Sd
z52Rl2NCqPC4^x|CizZz<z`01+Mg<_p3~YMLZ_-7~1ve5Zb=Mc`g`;XB#=L<;JiQH9
zOX(!Jk3MR|@{#Z6D$zXqQ-jvgPqvU3Ya&Pd2vc09Cl&`6nw`vj!WF{2f%Snsw&t^`
z796=eF|!*+PQQCZD0H?_t{?yk3MQ~&UDuZ^lo~8mT-RATI&831b=hJ{>5!?|VrI-0
zL2anLk+Lp_HgWtIT)q4#kfdl(NKyk*NcZc>(YEoPA0CF0b8Gw9wv$d5c<%(_t|2cH
zW<=0=Rvt(jGz`kt*+^PXa{+P(A{6X3o<&-{ya>!S(O}PiTu!>XoOWN*A83G*sd*Wp
zgHP~Jb_a&d>tyA3MaPhZ{M5<JAOG&l=@*oO^vq7Lg7$#U6hhqQcx?u>Ab|62qfBQ5
z84-6@6eUI#iQnuygADb0kjVCAlz?#=al!49W!()ULgaN5s^Af}LZb($)h^oP4QI2Z
z{<Iw0>!IC1znD`G#&}(8>7nHvuLvrD!+lp?X(qg^jymP`D&X>(YwR)&A;-E)cUseq
zH%@k0vNC`cTLbRj`&|#G0BIqg->M!5(ytugS}3`jX#rykeb>O<=#`qciVk7yQ*dby
z>*`h_LT=(tYI^m1Sc@SZivoN6c_x;wyJ(Z3kZ~A!?KHrt-`<_z^n5FtX{4e2AVNc5
z+(?*WzL{pDQ@Q7WDva8n1aX)yh>I;1JsD1%3i9nip)6l#d+iCSi+-ud(7%gz2@}#5
z))j;VUAx3Oz=eD^K1c~Gl0f|TyhbC$wCTKqzC1|?rdi&(4)W>gN>Hc;omY~UZh(2V
z(@45d5xH|fv$eT>vO0KFf(S(*9WBaw>FB}QNL%soo3;{L#(dWPhN1BI4jV5TRIu;~
z_69%WGVP<EZIgCf@XQGys^w#v_oMiaH@KmU)Eem`-vk4np-3ec%)EF;SHqT8bQaR>
zBlxh#837N;>c+TP0^^pCCIsxO`Usdfj_S#JS&HpbM&q{284sZw$!jl@>VPvJHxx-a
zW}*O+wDDV*!HyMRHxvV#(6o?((DyywK+!A6%RQ#x8g0cV!vr2p@*1H%SvndnLV0i{
zL>f)wm1eVUpveAa{-3CgqVEA?3)siwmpY^;Kc9Xo38<|YPL*bl)*A&%FhH@O@whmH
ziUUGNo$=1wautT35n^b|#9izWC&srO+F&Cq#>%M!?o>yMzI!<mTpVy6PsNnU=4<fX
zKs-J?R)>Rfy?kH`=Md_N^$1a5A1x0(P^Y);RE#Ft(>R{ev0=uAwie8!J!;ud#-{hh
z631c;<+lQcvl_k>bcvKgPe_U+VVTMr7)DRX7Ms_TA#r;vZoW+wEtsfS1D=6yb{bgS
z=|yX<poZ`3UO!pTP~<r(Vh6of2_akZTu(#o7KTggXT?^VPkJFj_WUULVAhf*s3@en
z!z;Gj`RP4&<GL+8y~DIh%%avFCdVI;_CrsYGq9RMdtAsiS=!q1Ogrp-+lzCXe(J0z
zuodgPggjHOrtv9Byr%JSQR8OYrDIX+qG{S@+Z0(Y%lc+6tFwB*l6I5(q3oeUPp2<p
zrhiJmzay)`4&cJB-?b&ER589%aaPnD(p8G4m$~7RJWB*8RYM19($(Y{wqxMaL=kWj
z6l7Yrr+=H}m?5PJT@y}e8dz^VE4Z^h&#cll)h~0*V!K%`YWAwBt%Gf~>G~%`S%~Q~
z9PVZb6#E{3nwW0X1>-!bfG??nz9^{+>zrSh**q&tT#t0rnRnBV9(im9_xx?yRjCL1
z^wamLAWee#cQDKz`5MvfYP!=hro1Y*cyxIqb<B4<Q3kK?oq{60-TJ{SKm-xRzBACA
z6Gg<~d~(N3A;`+1dz=lqd&{ukTYa+N*EvGy^E)t*Df9YMuuz-kHh@HQqnIcM9`r?y
zjgZ#7IpSlP-9g1Q1^@92Zi#!i#dJ5Z@mqK$Pv;{5T76ncKH19AWU8`~70bs4uUp|i
zZGkAZDNsiBUqZh@>UW7#-otKG&&aEss5w(M%T-<>J(KemV2<3hBE48Quv0n-J}sdP
z>2L4!(4~W?99Z){P4qTYFP<<}W7bV@I2?gT@E5E3uVjnTheGplfc`Wy*KUb}P8e1S
z@M2$uOb`@*eSII2Pe<NF-8w_Y>q7a_0rRH?<=F@2QTNTZ_Rk*eomff0=g{y=>iOiQ
z<yi*;iB;&p``H2TuLk8^^vzC_fPCJ+p7DA5aRpXGe+2i<w(pf;e+2i-v%hene~1Js
z_$c~y$fxGv3N#>pWW)RQK>5vp^K<vlvhU5Jda(>fQJ2f#VK%)yEAZiEG2;fO;EHV6
z+^=_PKw17UrSYUWtjA2TV=m(cz3JmS!XxwMj_xIjnHZs8x<hE4(=BboW{uMB25usd
zPA2@_%BAd*$=P_wfO<Q{(edhTD!U`sJ|O1LApWryO@ZAVbl-jJ5B>5msl)NStjh5W
z7RB?MQx7CjaFxNFA}G3Xh)6hEJ(aaW;9iSq4yQtj*babN<UQa{JUJ*ODxfpnZdh?k
z?C1gc_q==slq>8uV3;TQ$20EIk7x5mz)Pi~P1z}ZU^BPKs-G;)<KRQn)#yh`x;ZI0
z3W<TH8X}(SOYjuKjXf*_lzpNu;ZSFKP7A&&Qeor5&%|JOVk+(M;RtK5#-|cJxKr$M
z7K&`Ue$iutwPM-6cyZ|&zE8{qdI6+K2azz!?OjnnwbW%-E`P9A#ryFIsS@PYP{|9r
z*hsO!Agvc3lSBTB-x^9~O~J%DnPjMfvG$_1m8F0ASsjrp82UgH`^Y)eb0Rq7OmMA<
z!%dV+F(4QVvhL%(;^#!b73-JE<Q--CL^f9Y&KlA1gAwgr=Qm6zTO81X2G%JvaX?S-
z<vu-2YAj(FUK!L<<Gh|kozdgngS7J_cfKjk3UIY~?azGE#>E3MNLB0lKb#Yfjj5{^
zziP*Y)7!YJk+YR)zm|C{H$_fSsJOrc;tWoi>F(UTZl;4(t*>zJMcD^zn5B@n;*22I
zV<6InAB~2Xb^MF$n2ddJ*hrLexr|J|Jyi}-sbYJ&9JE56h&SxprU+;aD)Sl6e$pI1
zQ^79SY4wD@oM0W6$yzEB^k7SB!<||s%#Ny&>jp*(nc${XRrUr=pIN<Xkc2Bt79Qm0
zKs~t<vW*MJr5P1Um1UttzddaGuqKOYlM?T_sResMuV^*!$77RXHm%{eAIn;gVC$p_
zH>CC(P98NVcD`<+b>1QyG%Rw9_wJlDQZxLEJeC_my{o`Zq&~TUJD?jxeWwNGhU}?5
zqG8`P;AMI6XEmfZzCoi_j%{Bp&XiML3Q{Ze88xZiMfHYM0GqB^2}!0enef+@!<cGx
zTe#YMhGzK17~!!(LVA=wFKQH6Cdu)<WjT6bH`J$jWQagd_(~M1z$MNy*ylQ1I6ve5
zFI$DDcK%k_o*>#TXlx(&EH8Yv7d)F=-L<{2aQR^ti`pJoYiFyU$rZG;*tu~k5^mDb
zK0}ah&+%#jlj45XOdmLDe7z{@VG}g;b$SABk3v)m^h9M|j42hJ7HH?37W8WLfWV{`
z9?FJqmqK-tf!_!<IQarC7iN)F2!moCUc_uBQPc=^uO}x4IpldkH6l-qP@L)boNJh4
z{WBtPE5SIIGQSMW3BauZ2R7(4gIsfM;M~|0nux(S!*Ohoo$6!8`Zp4Sa)OrS<wG`d
z%nE;!_@mZwarf>J)mRxd3_oaJX9}~F73~ngPH0?ecs3j%<TOyl{2Kq=8Ja}!6|Hh3
zx-g{pGb(Kl=nF{v9Z5Cfkf9jeGQk6s;hc|p&}uw(+}?O7dnr6WqbA!7AdgVq(Z`dD
zmQ#dU&D4afu9!LLgsC1&<tVXmO;Y){Mf5>F)6$W}Dix@P<Mp`G(Xoszhw3zO`R_Qf
zW%2xTV}(a{g-6KpHxw0Lpvq8z<<TaIK>5I%*D`CD(Q#`RPL~QGEM8=+s}QmG{P~nQ
z3w)Lh=$Klt0Z)CEB5pagq7xudUX~6(EM9o5ZGf2CFfsa}^Lypp&@Kh&nXAaIFiV~H
zS&Nt>0@ajuu=2+~hY+Q@gu~eM!$OQvC{QW#R{Y{K9NdIbqtK2Z7ViMIR1E~$S;~es
z@KfoZA5IaXxcRbr`VqsX+dKlcXP_|p9>hnL?1~Lu%(6=Ei!842p3B`Xm0r-S<^0J}
z{DyRV0Atz6IZ-;^IXpeCzhBT)OXckXQd!q%u8}qYYM}56nJ-vU?uo<d=9mS{F<;|b
z+)s7!rK_hoHU)E84t?y8+_0*;_{-rFM13)O-Vv!(@JZv|FjOnz7Hu9OmW%XC`2_vC
zw9CFCHweqB<P{}+wXXM9^F+I5S)<W|JV5k7=D5YY9(-DS^;^Veg-^ATp>%o8PAl<g
zU1U?MQL&`_!&l0PR<y^%A5RbwsUvltiHvf>!cm2XA{Skj8s~D0?0^@BD{lEB(>CH!
zkCqz&+#q>Fp~1w$iN%gdE8&uo#HS7>RXXKyrG<e}epmRo=<=PS0^O-tY)2paDG~nc
znCtOAHP#qYGlk!Ui`s~Cf>(M3PB}g25Xk{%QJ3=V@IIBzf0+<^{>;okmHp*Yz7WCV
zHBMjd5rBq`)3y&x=;=m!;^X{o=}j8i#O?sBH)ZL3Q&Q12W9Zb1ZV6tIT85kdM#Lxp
z3ykt>nXwVJhc?8}(HdzeD19##Sth@jTq4pxYWJ?P4L1U;=BEgDeuz&lDTasETL9fC
zV!|7E`g|0N7;hx7SA-6gP=r^sS!Lba*?CoyfNzXiWu0=>8<?%qZsGL#royayxwdaw
zPv~3LxwlKk8=r2CpTKH4{zA;Tc$4-g_I9bCP_M{m_!}i})mP3}G2DC=8d4+|iOo59
zVPBzu@m>ZE8soB233}it5wjQ}mU3RKdAi}4-42PlnFl7f|2D#jFkw$5BlVe}^OUIq
zs@!PW<b_a5*1cUTrfp89qrE^2E>6A}@!hfYOw{<hkQ$n|fRzdEa#^Cr>yf6;kKGaz
z<TS#JZXC*IQwWMQCET}*;gltU+Cs5AT*!-k6dK}fFq(43lxSPKduw-8C#w}|fJR9T
zn9w>#dZ{BWPYw8kX9NRY7>zi9mBE0=KSKzOIN%k;J};#KFR~z7$jPx+T}ln6b@vSn
zv~b8$gZAefjuU>wYVNyE==vw%6~Mj?`4o%Qf?mBXSdC|Z6+y_0c9<3$Fq){YNPz6g
z0MmW$a91_dvKb`QAjVpv%V0k6>WjNhz<N87>MRSWbE&3_Ieq#kfEB&I1A&F)$ZqOs
zd#j`IVgq<oQf5<)-D5v0i4IMc)?!&%KTYMT3Kd?|aTM@}<E7$722%O+Te$dG!#4^|
zFJ7^xxg28Oj(y6;VMpbG64ySIUDMpV%xV|2U$%8iT~{e(U$BGvq>HaB^Cnxu+3&8Z
zsa5KDMM6i8nfW+`X}>{a6?2QZmZazPYIsNyGqlk{1ctt$*6sbWWPIbB?!-GtWc1Be
zhLtGkx3b=1&F?c(ZEMCs-hO^a)%SfA&c`R|=T)s7JuU_xY$f8D>%od0FT1!e{V||H
zp5ZZ`x}*AfF{GVg-TKimsgKb?2U<I|=gAr~7#pXU>x7fBNzJ0`nbI|3En)pF<(#sb
zz}_u5UA~#pdP+U9xm40;PIa^3IpOU>cut)He+us54*ly!g%60^ykv&j;w#CD?!+}^
z0Z1w-!<`HCX6A#%gCz&>n~b=T+LTx+SJdnoC!S9}N%4KIR{7;ZO`Gaf&sHzZ9Ao@h
z!x_~iu3{;3l~Y7E+qsO{=G7mMRUon>grzwsQbAtXb*lR*7@zMIxXFJBK2L&rEAM@<
z>;=~8Z8uT*BUWnoW}G;;z-sA!PLD7bJn@l|M4vt3Mg9e{MTjVa;RE^dNrqx{Q6YCc
zv`{7(5JebQDt;`DD1p96S#eg}yMzgn?F)|t)hlZ!<#Fr#e=G5mM?6Zv{qb*_rum<W
zssCgZ6_x%2tLUnx?X0Yd^5rIf4QWfktFaf1hGOGYP%O|MBmk;CQ9_w7kU?17fFt1~
zMTdfe4-!NH563(+W~xvgiHVDs+<+otsDcp>?$QT70uDY(zJ&P*Zt?lV2}z5J-?74H
zUDy1qb@BcrW&dZ-j!I$CM~05pUcVOMDL3VA6o`D0t#R|GJZ=cDlYUyTNdlie$KxPf
zK(H4In^aPsn76DXlVDVdA}@894DKd#KWEzU;H?#jg@2qc7b!+*Cds%NMrv`lk6C@Y
zugUUKuN0{Y@irHk!Phjoj5T#@NPF&kI;4ZoW>6dOXSan)Q3cu3DvFda!kQo>wc9$^
zWY2Vj2Iwv8aIu0`p{@0!)Xp}g^RT=f3$<dI#|WeQ3cq>Uc`5TrH=#RW#DipgaZS?s
z=V()>l}C+hig7~j60<aj4R!Q&dVs;g4&n)fO1eJoeyYZj!~>QkZxObnnptKeCNCYY
zd#R=6YEnb<`cSNfm9U9;c9?AaO!>;<a)pGGyQ}-9C~xIxVg@FVGL$!EQC)|&{7|AL
zURJG~$zsO2ggg~mk-VgM`g2@|S13(HH<bHD0$w0vPL);|J=(1c*18Hyi&7e7^4K+%
zS)49!!_-d|s-OCO>N>RyUay)nv#4S`SrRQM_XgY+K5~7ssy4wat{Rb+DUzlSF%S(m
zTf5dK>4CX=88M@S)#>Y50H<Qc<}@YZ2XE49=B03d)Y{@ky@>8iD{^V#CU`pOu`Zgm
zF7e&8T8-6dCK}1%vIf>oLet`I(ILOaMHa+->|vD0EYTqtT_cJa1!O}ry@Umm)|cSk
zrUj8rnF;uevg5cExFO_iw?UKP^JT1D0aBFWu=|2HHf9<2p-%ulCjRs((%UX(UU{m3
zSkft9$!eVvjkF$J3N<e(t@A$+Xn0+M(2d*1be4?D_aj~!Clkjxn#C7MUO<7yILr{L
zg#GEH?eC^mL4&n!xtgBgK`Ob|)oLV<tCUK^JlS^)2|0(kik)#k;t_h(ApcM~JEz{U
z921}imbItv?i31P?%LYHg+1vKdPD<qmMh>gP52ZRulUfar_ZKF%rvF?PPRqXka$HR
zQ=T!&%35pDEbp_iusLy=62?Vyh@>rcMNCz!>sJ!0huLhvQ4}h4uDmSa8_W1jwsFg*
zb_h~7Vd<q;+!N~B7WCK_2KOQQ$-WVcjXkU}g^ZPJ4mMk`@&k4>BQWPJWKw}`lE|bq
z=(Yv9p}{(t)N@KT)7Dc4y1d1&{4tPhnJg-e3uR`|SW9Y<GmC*;<ET4Z2rd1yP4Rhr
zFw(qFIwKe#Oy$9d=qVqIQZ3tTn{p+`G{;**nx4&&zi1;;Gm<NDa_|&8Zd%E2ts~=H
zlX;o(v9gAeAsgxbB}o%(VgPWwB|62AfTUtsmunZ%!tJO)l}koOcdNWi<th;+He0%!
z?jkym8rOGNL0GIEQ?;(+OiD~+-tJmbtS#i6P6Ty*YNRVcITWZYv?azuD!nfV;LR~w
zmNS+Lh!d7vQJxpR>;-6-aP9_aY|+QpydLz^W)`z6`q>c#e~)73K=}Orp>yEn;w7ED
z&JW_I1gI-Q=#cCKe8;WP92(-rJ1(#_@`;&(e&aLnyZ<8#=vXHgUvUR0Sqaa;6I^qr
zYKTXC3Lf!(HT;z@)gzs>N3Iw?sZ(6TD3-<_wR7B>&>t7tw3=xYQK5w9Cti;~(mpq2
zrxP9d5Xr^CuFVOa9?wp-7r1G1ntM_91%TeKYq4Oc;ttaUDVj84sX|vQW4gii_AV2I
zo~mZ_+aXCy2YWj7APi^K*!p3o+8S2wr=LXQL+u9&wuu6PVIW2)Sa_59@1S4_xets}
z5{VRZ44EQZzR9A`vS^l{!uBzzuYgg{Oflg^<Oj&G*#(tF(r|42b@Vc#p}Y#e5MU^o
z<||+;8zo&`LuBmJSV42lI(QA4wQD%WRJ_0EuCje4n)9%@h%uK4>XyJ1D>dAyGi%;~
zs6qjEC+UEJea<f_!xF^6{%n?TEY&$KdyIB_j}_iS;XkpysXJnAm$>Y1+jobkUsCJ#
z$TB`zXXc-Y>=y62wR%V6mU<n^dHZxf0`Y^<-9<sK!^hibOP%LZ99SmwOG|K)l;S?o
z|2p0hwNPd&_=nYl{U2GqKVks?<us^lX=m<gW9X#z|LBU1;ed8gIm*~&f98DN@gz&z
zA^|ZH7=s=F!Niz*IiOX{fG`4_WEjG@$B+p}q&`oruqY9y)dFlt$MHU1YH4~JE0U@)
zSZ>z6(!6ZxsO@YHsHweJS>C47&H3#4-pP<zSafFNeE!D!e*WtH{=Ui4_qm&LCg`V;
zuy&{bOS5!n2UE9jr~$iRX`2CnEyW5@m>l%<yA{NRUxZOG<hq|ZF$9BW_AF-~(*llS
z`6+=6Kg}~`v|}@(g^@L=A=3@A#sB!4LT4n1J#}b^2#>B=k5gN30197a5D2P1-~(NI
zuy2)a-EW1rA~f)WzMmAW+T4bhrpW*p9y{aN^ti;J1T@PK@Q2E7y+$-Og3u#um0IbW
z675xmE%0_L9nwcLgp==}7m^YLL-GYWJA_jMxO%mLEubWq4*v{9<Aaxyi}^Bi=X+;s
zb3)1_vo;rEJj*naXK=-j^V91ataDk|YS~9PSGsE%^S2f=u+COj^EXO4LdK?=&a@Oe
z9FmzoME(qQ*c+QWoKDilmb4o%?xb2Y<M{b58^?R;5-lZ25iv7M{I$-;^m$t-9@Oe6
zq%@H&Wpf74_?gT%+C+Jk^JWP!aK#mb8elh1W6BssLYlc(*xMVr`?Kp4d<P;ja|R~e
z{@Bo&KsW<MjLlq*)*(=&K)d7n$`o6$Q|!+Y?!|?9&bgfPtDfm;W{S1$iZ41vXsU0F
z!^&xP*HTH;cZ#>3r5YZ$B>Q6VvssvjW+ZcKvveQW;x})LAKmafJoT_MMY&7m{-|%y
zj*E))Z*4aq#ZQRwnKFGbK<6a8VCV}Ti~_$vUJT&`2<AOd9!iN3tn7;!oiHXaLg9r)
z4;O>^VNpj7l(dPFf0M=W)Z&Ip^;dc#n(P`fWEg}%rL|!2*3u?xhUOEEs&dvs5^M7i
zJL($A7<NRT8XJs$Ds7Fu&a8*l#0?a&C|Y9o7uya^<H$Hlx<|8ano$QDBgmS`Hp#Lv
zC4RHpv%QS*S=hJ0qCsBs0?a#h4BE_32#Pk^CJcq9kIs@bqHUyFpX;jo3ezOZeWkQ?
zMG$+%AL0PYP6X1R^WHpTxL*dTFc>CO8NgNIRIS6cMD{_ZH{`kuOn}Y9b?nG-uhgU4
zi=75bl&!-hoQ7gtgnCqx=S+pp!Fh6}{IrE4WmcmR8kXo;Rg(rT;xO}iUFf1zazl=b
znM`x}D0)F<qLPxMOpF{P;b+96Y2C{GlSXaUwl;~8#2#S;9>t|s0mMl`%vDcF)~0d{
zumQL_^j=#?aSy_an3fiNQeND$OPk(8h02XUvr(+Vhor3X$O%-Sq?RNj(FQ*vLK}o^
z_4+=br65s<)<j42s$jDwO`8M}6+xj|vL4&=Q;=LHv}iyL<*MBJ!ls{Y-D_t><aJxY
z)=0}OU$q!BJY{7+P7~O3*@pirC}FmLQ@-iMqbj{+CR#B(oNY17wtIQScq`qsg%b*}
zpY4dY$;r<XxsmACz^=`^b_VX@M#thg-<HKiS4$&lEG1Fq52HWrkheiXbsB{3!`5QI
z%WQOagt#;aw?Ky`zGvXthVfv?gxm=5#szDTkv0<45-AOI?nEfC1-TErJT@U=(S5+n
zJE~=xYfyQp?Bge}sSpAoS^c!D(T5*k7Y;ztel*nw5((+5bo7a;7ciEc6{EnTOCi{y
z+M<YY%TU@DApOdhJeb;g&FAKCG3Uo%mQ0!43<TEinw^}kr7BlYIZ$pfeV6uH!`dBu
zUQ6A?*bIuu?;F(V&bL609F0U}nBhl6>2Lr1-GYpRmQ+0a19Mhjs3xB@QXUls4MJLF
zj+!4EAxai?OVtM0S_oUEjZ<rwZESNT&<C1bX^W`Fshln>(|C{M2j`>krb>&$N7QBg
z4FOG|&7g}OhzLju-L+9u8if4wrEl~Tog`>dQ$*uF&sof|e(`xy!DxS-Bi%Ek`4Za2
zWjQV%MS!OQ4x?g=PzcQL=&mz@;0(#`>xRV$rhWQzvHj!*VfJ*2P8gFSPc_`>6O4HA
z6kfHT;2FU287#>jL$M=+I&Wi1565MTvXKvC4@+}N<iAl8$UVX+wT&Xmqvq5Oe<Yvm
z1>b7oITyP4kX-_qnj@jgB@32JI$aj)&Pe8-sQfNamTP~2a1Q1~1(i$mz9gg6%L#gv
z3(?3sS7TZ`R6&E-xm%)lgOnwc7Ns7EB8zfH5oy7?vT}bFZ#?phwPe{%RUR@L*9$dt
zOb_PlE&Kj{^^8DWa7sEzUb>^qD4~QT;z?BsbW>)MR;EIfMLUsFqC%!5EHR1wRW~*s
zG0?7gDW@ki5GUB)noGyHGI%WmC@T_$mTf_%sMplLL^2C<7;7GQM`ak$Fg`<4#xpIf
z9w+S2Yq_DEF@#c<?ZEgzVigp@Wj?XizP}W^?|v18IfG&@6{noV2c{|%Z)dPwflbzx
zT6(^KIZ(MKopP&`CMQGg;v{bbMyu}&r|(|M&Fpc61z|Zxl9`POW48Xd71ee6sB#fn
zyhx%{UZyl_L`FaAB9={-=3<5l(vb+7{lvvdwFinkMcd>EUFVr}+MBvkh?!>4?owC~
z>}Cd=7ReTaE{i4^$-eo+EoybdpIDR~D`E2mMQ3y|%5fI!=~x;`f_$5+jj|)%dQ>(}
z%WJIGUEfoD)YK}~%t~%-2`8;WGqZw|Pubb1w6OCc0WJ2;@mG{s>u2_vq@(C!clUzz
zz~0WNLrWAoCwRVt0{s2i_+(J%khpzwIhF3fKGA?Xwf;!UqsW(x+?GeRCeJQDC&2fw
zyDnTLx*1aFbYxUshi2~*$AnY~pWLC4tlw&cv`f$`h%uy56q<<K8@gv{?U%K~Kkv|{
z9nq#4qmI)>oeM=PPbaUj16dR63aII=kDUqDkB#$EcuDDg47)t+{_sI;T1Y`Ci>rJ^
z2n1Dtgyg_SLu!FYofBWhY76HZ+{jPj>#-}IZNNL&0h8Xxu7`P=1K;wq2vclB>Va18
zhx}1DVC8|F=zzwxhrI9wT`dZ|k`H|0faL?JZ3s;FBc=^d>BV#{nq2_Pp4fxk<p8e@
z@L3ogkLU&F;ZT~y8>;016Jx+XO#9Z~aI9?5O&{X=cHN=O9%}0-OZZmkrP7}A@`04_
zViUss-7Y}4NAQRHKzC2wpl?r@Ve1VB&mK1*{F@%x3)kh{Cp6D5ZfN-TnSS9!DDPs5
z%alsPyd{wL66ifeOUizdyV|fn6n$>I*FN`xI>hx4(}mVO@CEn1cozsi3f!==V)Xsd
zg}Ob<GguCqZfNlm_<hYYV-C8Upu7d!_iP)a>VT6YE)F{Oe#uuL55XP~Kf1aA^dr^V
z#4SMjNneoGLF(V#x6rSEFC`x&{lp~q%pS6Skbb1SqPOt3alcO-q!RXANhRu`^c1Z2
z*e6(CYM8S2gglfrfyh(bUUCwH-IHT(y^q{DYJ6a4D4zQ?j|4r`U-9~jZpDvKJ>)q-
zZ>aGRK2YSUAn+@(KFY92IY9Z8u=j9T!Ti-u2FuQcUSxEEPL_^N)zym%^r8S=!NHbu
zFqCe{c0MswpN%r!DEjRWNmBHhmW4G+a{H_vVSm`~n>-3vD}IBQmFMk~$PV1I0ADl#
z^fSmUQaN_8W$dYB7cB3~*n+WH!E$J8$2vDJdjz`S&MdMS>ug5eH*Y!ywjd*K*y)sC
z^^0yCdK5gNv{;JY8eMVd6?TWDokQuB{+V@yot!Z{X6%GlJ+!aY(hpESPTo>|T6Jmd
z22?$=kUi>M&V}7!@kUucc>mFK;Mc3dA8>uc_Q>%IJ>^fB;q21;#_9ZE+u3u6SV82$
zw|{6wupw=W-y2@LvLDU*xM&#N4e9<8yu82Z^ZOP~zl+;b`$qO?{Px7T?Trlj(m!PT
z&hm)*X4yIa#%O(?-G>9dgB$GQj)B-Q<#=%)QTeD;jMF?M`p9emyJ1^sn`}e9VRYN;
z9+CU#V2pgm{0``hVGrjEddB_^gvZF+3mVbC%_@!dp0e^8(+P*qlD^YEZhi@05AmMn
z+cLi%`8-DSS>lm=ux=atFz2zz9T}Z|c3AoV$YbFjzR^T|@wI09>Z=?SUh(;nc3^1D
zh}W>PFJFzqXS^LftJQkwXwCk$^hU;Ko<s72m0SOXDz9aJ8zR7&3$t_}9cbynF&FNS
zpB_>Na=b?m?7XjI0N5i|CeNM2b#Q|7BhrJm=3r43iQMsU?S}oqEAiEEzY8dZ)YlIy
z$sw?;H%X2@WDj)~NbkhgM-2z`yYkPj&?areX^vvp)XUng*0TA`Yiz<|@;c+4+-SLe
z5bLclrGDh-tK&>uG>rLF1LOl@;6>lya8w~APk{D|eTsww{Ts%1NINhu!37+*z)pY_
zgp)9Y_S?ee@&zwu6~#F3#HnB;YWsl+|God50s~pLOY$(YFv6_P=O`D_x*Ej4<P|Pv
z6&;!%)kjF#8JfRgB72A|{Q`1VPIU!>j^2-p7GImxJI%V#+-z2gvR1-z`ExjbLCqL8
z&Ify``iCZ}ZHnh?%&%_)>Ro!TD&RMUJJG&d(Sj9qutlGvIf1fwo?Q|RffpowQqT^W
z51h8-YrN3;|0*piwNQNe!vX-v{b^cIkOl-o0YCwO_;cB&iBtV~jr*s&JtV*%C8Ylr
z|8%tfn)ts{|87Z-^54>U|IGfGDk~@_DJH6{LMJQs_YeQeWAyKa>VH|+|0@Rn4F98%
z{of(}I%)cM1Jl2p*Z&pbK>vXF|N5~19rLf-`n%fQUj^5H1s3!_F#n?w>fdqxY6tnd
zxD>&^K>myb8UKOvKPct>JKEpdPW}?4`d47F{R8cPl&AW4JjTDB-u>_2Qcmt4c>l3=
z<?lFu{Q`e4T>o{}_g|r|`VXAHpZxvz^uL!I{`+kdTm2*bKi0bc9p~>4`Cr9}e+8}M
eKXCqkr3wXU&_8t#008Je7Y;B0z_;IDv;PJ5^mrox

diff --git a/graphics/AtlantisJava/lib/batik-anim.jar b/graphics/AtlantisJava/lib/batik-anim.jar
deleted file mode 100644
index 6913e421c916241b2c96081e5402191b6e18e1db..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 95479
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

diff --git a/graphics/AtlantisJava/lib/batik-ext.jar b/graphics/AtlantisJava/lib/batik-ext.jar
deleted file mode 100644
index 8c904e1f2ab5de46eec36952299a181769e867c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10261
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

diff --git a/graphics/AtlantisJava/lib/batik-extension.jar b/graphics/AtlantisJava/lib/batik-extension.jar
deleted file mode 100644
index 106e4ac3cbd922d89f6b08087a30485ad0d2799b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 68051
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
D5d`4g

diff --git a/graphics/AtlantisJava/lib/batik-parser.jar b/graphics/AtlantisJava/lib/batik-parser.jar
deleted file mode 100644
index 286b3799c3f922a0ddf66a99eec096f4ab01429b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 73710
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

diff --git a/graphics/AtlantisJava/lib/batik-script.jar b/graphics/AtlantisJava/lib/batik-script.jar
deleted file mode 100644
index 433f02e67c5561b54ae05161e9578cc6f474bbee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 61893
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%0D^F!FMsLy;1}Q~>nkrO
zL~J0QL}VTjG${?im&<<uBf<%ch_7FbhNbw^BYP8wcmkFf<c$q1wrayXQ4xxmv~d*P
zs_Wxa*sMv)Eax5*p;#8l>zjrJ<UFaj2SY-C?CE5mzm%Xr-|Ay1_r{O?fvx+rqo0Rq
z-_9T8hx&~v&2F5S7zMt(%=NR>&|!NV-{>ui&16f3|HQY?$UhR;;1!#@!Me{Sir-#C
zraLkJ0ddXRy?f$>cX)2rP1rPbwqZw2^@&79el>5hVQ0-xC0wYI6cKy>$h#*>LsHRC
zv(qGn{jIfja0cSkiikdr_{5g=Yru-#Ps&$>aM;;YQ>XM7t!IzYsM=#5*Qhd~lMPTL
zUkZMghbP<XdWlz)$3Gs_sZDKGsNuLIt}de0^GUWe*dR6i5J|pDphx&)f9&34J^5od
zhOO_!Y<iUSM)es^NB(c2*2iUSh5iorR(oDH)7C_Z4V<}w4&BFHt>2cjqs@N$^+A~p
zz14%OuEnQ5^Obg(?mDQ-y+bz2w)_OQ%?vcIy^5_s>&nKbJYwkZkB~;A@cVqBp>p0M
z`RbT8Y%jE(BaZYJKhw5X%6At&Qc!AJ_d>cV!RD>>#m8cKBW$>#5g!OuVj&ZLC9zxA
z;1XG=Y#@p^UNdDX;H|Gieu}6(DyLcWyv)cff8w-vQJZ!9Y_EM@I!CtU;r3YD-tKnW
zsWwk<JJcnq!#o?_Ufh%6LpsXdN09Szy!e27>w4qS5BKkfj6Ds=evm88Uw`j<pV!cH
zSu9cQcDiYSini8gmAyI==a1Y8*_&nRF`TTUH?=OQ=u-qfLV0ZL_w+!$wBY-}wc9qP
zKQhZuP5Ax^>L=CV_37b7E_oyB$q%QleoUM`m>*dZTQQZE+qu^fL!K)3btv@sTVFQH
z!t?b_;+fC3H6HIol8+ldb$<u${j;qSS`Fe$fkd`reuG~Nfzy+7i4U5fouY&v7k@QF
zzylpUD;E?DvOZFO=m-J#nEv1+G@ozoCzYbWnAJ=VgElg>vQ{!PVw6AtV{7#v>ioXE
zU~DNu5Fe8SCm{37v&R&zZ-}unWXw%2%iPnnaf<&4_`9FM=mbK(Br4?t5cVZE=Abpm
z4`+s;euU+MUTaz*CiJ4gbCPDqSS|-JRxBi14(dXV1<MCxMx>F1pPp|H^?*6!-1C%)
zi_E@>Df@pH%f4W7feXO}4S@PO<m^-24wPjIlqLT~3ItIpYJy8ojSLU<`4u@*ET;0d
zNjMPsC(xl9lh})(ODts$Vi0Q>auiFToxWXM{`JvcTkZn6{GjM6O!ECVu1G$UZwkiJ
z(>lS1YKuZ%aJVcN901tKBs~&ndIhC7$K(C}S#VmbX;vibCIOMR!H2ovJzJL+Z8c{u
zGYkgqb(zdtj0LAj=Wq8ZxBw(S03X_5qbDk*T;gleQLZ?5KYAc}M!~dh!hR!6xd}*<
z1o~!NJW?syl1mGoKV>8f&bL}(0||IsAa+>@|1@7?9{`*Mk5rn~ke;ZNTT)+xAhrEZ
zJ0wu=LZXe$E^w}6sfL`lN;0Z|rdugrk0v+JrGEpZ+ea4#zNr)eP}t>V?WY+%t*}Q)
zMDL(u`gq^~81DykP4_~9L~SfRuQ3B&m)XI5Oj}#f6P5B%?i*1^{mj3Y=RkHvTA)t(
zV3?}YDd3w*kpkUk1$CnJ#wCXmO>4<Rzh-R(gg1b|XcneYO2Eiko-o(ntzC(pSbDEt
zN@2fX10Gj`0h<CQcr;Tzq`@F#nL<Avs^{*Gu`(y(Ll)dMBiqU4tm6A7fDHgx+Cfx$
zqEd9hAo(}gWuW;sf}-X?qa2_gn$n5jn@YiH{|o4xvQ51MgRr>8CIMPoDpn_!g@JY)
z1P*2mn8@4p{snoNx{|tThb4f5xp<Iu<uLjeL`$qcJ{Y@f(~9SYm<$08JA=9!Gu1T-
zDE*t8cAmUUjZHf1F|D9=F`(AW+#bts;LgvtD`?vTPBM40LEA=xB@8VRA3aeiJcn85
zE<W4n`dG1bgJ~_C3xdGP?n|Ol{<8lX!;Jpgbkxr^Fc3KqqwZw}NCJ(SfYxH3$0Uw?
zP4b+HQJ*H&6z}@QZ#|MwF(OJ*2klY|%Fp-)Nu`{|uAE@yMG6X9YIq^zpwsn3rEKzA
z5rSd)wA4h2jGYWKP<|{k7F@F+RfUXJ3o|tFEHf6|b08VWz>zRRFo<Qwg8u*{0~vJ>
zW@wUGW-QziM>3FM$zVoAD9en68>&bKGDsB6u!>-ru@Eu}$w0>Mff-^^EHf6O`5+m{
z=qxZJFPde>LaY`f0~rGYX5_}Q%vd}k1`>&kCIKUxPOyw*h%JHSAVVI&oKtZubCzB6
zA)U~}B=?i7k`{lGApH`;gt81)3CmUm>0%BBS!90=#C*p>b@7@YU1Pz3S@0sa{5pdf
zu*7VP^o;}q?DJRyEHM=$J-5IB@yo0MmY9c;&N*N}Rv~MEB_?5{R{$6g^D}FJC1zmc
zEo2xFRLUBF{${eQ6##i16~^^lXAQUX<y7SCg1nOlGtm{_!dy{Bk$0Y8sB_h~Ko_|I
zg{&v?UI>gVu4V~|oDTkJu#lz8p0f$Q2IiOLrvv&iD%cuJduc-+q@oL@Qg#B{?Mfsr
za;yre73BUt4Eg+UWsqfd`(YRmwaDJ(Jd9@4In}{n-(}dzgf+6*UM5`F>P7Pd9j$O@
zld+_W?KHt9jqCcFTHqZcSSr`t{uOfP2`+yt3sM)^hcY+e0Pj!`qznGB14HN4UfTcu
E4>EvKeE<Le

diff --git a/graphics/AtlantisJava/lib/batik-xml.jar b/graphics/AtlantisJava/lib/batik-xml.jar
deleted file mode 100644
index d05eb25f7778d3463f07380cf5ec1df675d534bd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30862
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
BOe_EZ

diff --git a/graphics/AtlantisJava/lib/commons-cli-1.0.jar b/graphics/AtlantisJava/lib/commons-cli-1.0.jar
deleted file mode 100755
index 22a004e14e16720cae9af97d4d1475b12d2388aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30117
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
F{{Zietb70f

diff --git a/graphics/AtlantisJava/lib/commons-codec-1.4.jar b/graphics/AtlantisJava/lib/commons-codec-1.4.jar
deleted file mode 100644
index 458d432da88b0efeab640c229903fb5aad274044..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 58160
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

diff --git a/graphics/AtlantisJava/lib/commons-logging-1.1.jar b/graphics/AtlantisJava/lib/commons-logging-1.1.jar
deleted file mode 100644
index 2ff9bbd90d63f92cdffea944869ed9bea7ead49c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 52915
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
TS2tko1Nh1OwZ!fF_38fs60)DA

diff --git a/graphics/AtlantisJava/lib/jas-aida-dev.jar b/graphics/AtlantisJava/lib/jas-aida-dev.jar
deleted file mode 100755
index a698fcb714e42754a7e62a44c5934d5767d1aac4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3738
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

diff --git a/graphics/AtlantisJava/lib/jas-aida.jar b/graphics/AtlantisJava/lib/jas-aida.jar
deleted file mode 100755
index b539738f665293379179708c453af1b88deb7d95..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40424
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
H{`CI=ECbWP

diff --git a/graphics/AtlantisJava/lib/jas-jel.jar b/graphics/AtlantisJava/lib/jas-jel.jar
deleted file mode 100755
index 384f9eeb7a4e3652719925331a5f94fc0d1e0def..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33570
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
PKmRa1$BpKl{(Sm>VgE-2

diff --git a/graphics/AtlantisJava/lib/jlibeps.jar b/graphics/AtlantisJava/lib/jlibeps.jar
deleted file mode 100644
index 6d049b27ce2c17e20455e390b0c554680c49808a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17486
zcma&O1CVC1x-Q(d?Vh%6+qU_&r)~GNZQHhO+qT`)#<c#~XYYN^x%HoW>ZX#ctg7cp
zvXZLQ`>rI9q6{b)4A4J<Ln|7`e-!?eK?8vS$%&~7(MidRGki?|0V)0q3I$~U7Ydbi
z5vThXYV|jv{Z0P~l@pSe5*JfZrI!<bkeiy6m7$}bhnJzFo|&3$RAyXa**kWe5<zjG
zm6V;4R0E0tCYu&om=P-vCo8AwkWc>cRN@J77b4yv1wjsj(_icX(~~|f_BNb6Ojh1L
z43pzA?wQf0+ok)Ty#WG3je-6@Iu7=?H+GKZ4FB%${~v+$FNBkwizC3)>@V2#e?epY
z4`?fEOJh@er~idT`oFOLGR+;0>@6$-|5XDNP;dhp$0Yfn<<#H#z()rHV*7urLCoGs
z)DGZcV`}S653n|Ja>~|#cGp!y|FUD&A+OzRl3G;0NOGMpSuoL#_yG-~C6muOoHU14
zC!3IJvT@#Jw3FF%6{cxQRS-}W@T>R-Pl6QDM2WJAftV=L77`M=kf82u?@PB<f^09M
zO;7tvm(y(bY1Vg^*Ufq1cl!%J5WH~<rYVRL2_F_)v}}h0;g50&4)TL;&xxpej<lHK
zkOLpHCO*>^Y@hUL&xQK|GDaVOH7ADLP(tAR%ucjtF4^7&o<a>O5<dGnN$J{(%kvP!
zcSzfMMp$WwGfd<YNDjREmh>5jzgqBON0l=#*BU9KX<+#nV9`NF0akTW*kKU4{tYdw
zC7*+ZF|YLLE6YMozsYn<I&mpIEPVyW|G1LBc#{UtvzNX7bI+aG7N1xVJ;&O~hQr5(
z?T?GVgi@gq#tBqX=+91?A9bk^0@P&9ts&=WMCG#<P=+N%7#4Gk!!9RUzdm$}`r%`X
zFn-<+9R3;7DqG%b#Jpf-=G9+<ouUShB9u`i0Z+9`i?Gzcl7NyKJQ!uZVwnD{>YK7B
z;DKa0Uv5&nE9&8HY}Zhzjego7V)<hnexu1v--}-|i4&0tGRaTZ)E-4#XG?)zKxRL!
zvy@)1j2)@V*V1lD_ARyfajo<In1s%eP=XmXHI?-^G4m0D845i`=OT;XFEUSzY=NGJ
zN?%>uvZ=tj$>uDXwWV_;4m?enKqbH6;FbQH2HZQaqj|;ENxiK_b>?Tfs^8RtPLymz
zu3*QYjm?5seR41Rm%JIoh%y!5I)lCY>-X56vef0MwzHQ59O#PxVcEXsZHU)-de_EO
zWEP;FPQB?TWy(V4(c2{(Ug#l}#R-^GxO!Y8-CIEjJm)+_<+3E!IkY)7!R(b-FQyNO
z%4n^{9Ft(uV<K~X5Z8XrMsh{DYqu(E5m8LEs>umD`liWcy^XZR8m&!+aHh7gPbS17
zv!LVfTwFq^EE7e|913d6^=O7Buch3r$X$j>vEqRatM%}B3tNnPJzGnY&2%}A{NTAP
zM)2H8l2L_h6+vvmpvGBl`97_8IM0*=k6EaUO<l6L)*#nw1pYdLNCr#ctM~Z9yg{<i
zE6z4y>yMY*(tU4TL&&WiLMVkbTbd5V!BvNNL2z^?vS_)E$1curG?lkIIr!ay;UqTL
zhQ@(J(VywlyEAH?1-h-3IfSYEFbwpBFCpt7I5k6RO&**nV`tg2g~P=S=J)vbhbX#q
zlM=~@yT@!#G9xZHF(XePGSb~>iJC1o7e)9uwtexk;FEQ$CO$n%E7{ZxJ+lE{RCbm<
zf8Ok2bCc9b63-CH;c3dGHRhNDR^kYnE;a0b<jmm)Du3E6+-y>;bxZ6%xb6m3p1=Jd
z^atC8S)o78MlY&VPc9pm<Bz&8N1)SORNLLMd%Sp>#7%+NTy=Jl3_#im#O-e5a2tF;
zOh6Psvw#lP*3zOQ*~W6-LZr9RY$4?|(V}W((vDIPQEn|LZzAGjd@y|TX^TxqgDH>L
z!g|~XHVbm1o&E{Hw}tb(Q=It~g{~k<wi*kmbU3JxUYZ|Ay^I10_zAG5`u<pp&h@yH
zw9Op2C`%i5e4r#C;q~$4?WfvO-z4An6(0B`eGj~y;48QsTm(xX=bzM|MVsKuWF=q0
zvX(omKk}z@h$P^f%_*qsA-8!vFDa)^U&peRsuNT?JMCh9RB?=D0t7xP&+EQ{M<WDt
zFW&XLD|?9SFo08w<g+CmB2SLJqF;th@3kIuO+XN#St&d>hDmmp<W8+>20>1*)!n3G
z-f-MoeX6G%#_(<B?#keO{cxZpiXYvNZ6dcQ21v0Gkr3I9=-}+6M5lQDh-V5l*?foz
z5jbRUm8y3`X+c4>ozM2t7~H)jkh{T+D9$uxnY3@3!29UzawlAivZeYHAL6$Mh#-GF
z%3~|y?n-W8drb}Tn_S6L-mXO$RE!?xbB}D$$(nKgGjtQNJc5N~$fuK9x<>8giQoA1
z*@X3h=mu5)+(eth1CbO<Sk+>HfqI<Is@ZbaGdGQR@+7XFY`E{u#~23~FvY!I)%lJR
zGG3)m4w8{ZpZ~~H+q7{5Q>$U4p4y>=@37t@%V4#GQxvQz2sA;Ixx~EQkwBdoU76uC
zqq{$K6}UVVqcLr*usl_xIeit*rExE+t{Sua(Sc2010*3X&cvh4AJC4>6yV{QMp%w3
z#E7zH4hFl76#@2)FQgeAKZcd^7*${drj#)0N$f_#9dW$nRjTX?H2P@)GbfAw#OlZe
z&mBkJQ~+U<7VAoD3?o_xBICfBQHLUN`&;m)tVM3%)E+6XOuU0MX<ts4Cyf`gm%mom
zJ^RLs%k5@9xVu#fvqE>X2vP0EW+9w<mVGnQln=n!WIj%rVe>%pXrhl{gSxHB(;scy
z;Xu2s8H(iT&a>il%*pM{t9}S}JhI=S<-x&?&q3N8P-z<BxOnF%<{{ONc1&`tt_n_t
z*tiE3U?@Rb@e63HiN#%FM>5uUB-wZx!yb*Hj~egTx+etYsDJw1(art6Sfh}*;kVe3
zh%dvI@4DK|%Ye48#MRT^?8t3QKXo@BggerbgmLO>b3k@8qMZ|4C~KfEXQD4hJXc}V
zh*Ja`Lp6u}6xotoJ$qu!tcplY9uPZ%X$=@AVNG_25^$N_jh4oqdgHlM%>LN%_d0IU
zX1Z)Rt2niTq`oB07DFsW9pfg7TtjD1J^E29cVtU#FGbFkEqWuRWr9aPZX{nC=Oyhg
zb05X$I7|L=Mccxqn{ev5A%F86Ks#<n8EKjjy`PXn)@grE*@N0f9{IEJRUd=L&3Na6
zX={l@1C+xlnqq6BSZT}QJ6rUGt1GaV`N`&y1I2ES_hja+>w1$ZQ*W17R}_!IOkO|W
z(}7C+RT0mhCaqlKKvXxBw8p&4wGO!(7;{g&W=r&Dx(&3|5Yu*Wunk|~fZl3Cd69Bw
zn6Cf?KppTt`H1|b3nsNa-uVN~1+%d;YUB3+;uy_o56)IJGP>H=sqMiqUE;jyG0HXb
zOUN-6&P^GtN#mLtCRSqMz@EgA;0ZS}b>C6d_G~i~@0jo-pn%o#jpBLbwqWPF^Y%7a
zi<iJXf|$8g1YCW-rjNzSTRxhh>`siWr)VT~`85K^Z(0eXJ2d^L@_K=uyPmi*HI(UH
zXCLkx;5y>IBx&YAA-d)sbc=_n&^D%WLN2J${Tr{f%yHJi^lra7w+p`<cUZu!z;~g1
z!5Vr&(8BQJO}6SAjlL)wr4#y^ByL&>D3%E+mc>~iFVde6Q-Mh;$IOv;FvuNam3fZm
zj@Nb=7H%ujTgzYo)E&EaAHB<8BORo6AGC`e%qzCsn!RFO9&aQjAKtDaiE{|Sn4fIp
zE_@2oeJFqHFdi|1Q!*)@`cx}YtlggJ_O}tkzPf3REdTGsia*##V<78_94hXlAzJ&L
zc)q8Ri6sU0(Vt8%C@}AJVF6TU#U<tLxrjTEveSs;-%!n0tQU6<^E!)h3{vnhPp~F0
zEaMfRSqGO+!rF7Esi$)?wUi7M{XM$yDe!$oi!1RY#U^ZFHzRmYkBqOu-s!36EHK;^
z%g2>PF;r<InyQhOYdTYu3mm)i6egX@2mNVYldq5>Q&e|`P)sUQj_ia7LH(%fk%*U~
zZZG~iw6p>9iJ|i(9~Fy81=2Uj%irMtHsYcF!_0TmKf?e61_Da`o7n%~&0{flfT_K+
zrJe0R?c-$mPWeGWq%5`(2vn$WFmUv9cS)uKc<Df4QzfLNFKdKT;&<!q^|0Ln;etKT
zSIVJ3g1<zEt8Ljjd3bp2elyepjbMe`LYXIz19Y0n6JOv=yQo#Ef8svOMwg{hH{MmX
zG>*!yL{~UN<=WSwAQICD%^YT`b5tblItkn7H(8Ygbr&9ma@a*JydAj<-7-}2U>m__
z@>P-ictkBecF`$W*otV13o=qREzpE2?D$i8&LLw8eLC*PrvPO{RgK=B_yveSn$F%z
zzPN$&{T;)@F8<?rlkdQAF-xST<d*Z--q9mAu0j;AXcoyTpUDZ7PSmr2)|t^}IoO)e
zuH|({c0c5QjVnbt8pq7A!f$RCAfQEiAfSKvQvYzD{=0MZZ+GXvJ1&3S4vBv`G0dX>
z9N1!ANN=>!Wj~h2Rxj@AAQ%b<VG#eiczKk9HBF3?NMhOu;6U(}ebVfr!36mp9$?4X
zy$~;8V}QMi?m@sbH0@|N550pFUg{8;yzW68Y0Tje!md}NmzP&5YMl3n@7B!BOxN3N
z=F3jki`m}rH}3}}P?XAvWgoUIRET!vK>v+mVlQ~)SB1;9zqp@98_ai0h_{}Ne~JBa
zR?RJMBX7MrXt2-?_pYZwvYki~^_RbYi}B2YsY@g#(^z>b{Dx0<wb~?czM%Of8U%J@
zVD^4kElb0|>dv*BFb*h_?-m$@h}rUNmd{m2dZg8ARhB`kHv*_S1rjMBj@|BjD#WzW
zd}THt28=dkCR0qTUr=um%^EQT%Vb%{-b@8PCb_v}e$`p}C*|7qI`5`Man1QXI5!FO
zbgCjeyBkq?OpPHY(j5zy6@~eVF|LgqCkjkX0Q~&{yxH4;e~D=WK_=%)6PRTX(H(?S
zpd-*|M#;0F#=zR-hPU1lm5Q%6!M#g}12i{QR8*_w6C_WCSxXZb_oq52^xx$=r+Z{|
zX$k*c>|^p1mjpI&IxMc*IL@}NbY&OaQbfGQ5`o>t?G<__=#Pl*lXfF4LOMxl%hK-p
z72-a(xIHCA;eq6NWtO!t>eU%9MCmGanCxIP4V_NEV0ttXTUlQ?K~XF0gi#iP8Y6+m
zZ>+?zw1vPr^W};Lbjv=&0))^(O>MZ3uCmU;c|z@*pVlvl&Jda2*EHVwK;4tl6td!F
zqi*6L@veT2u$>x<eG)A8sR&7?T+xy`Kc);9^6!~zC{=WS7*fYGEE;kLR(w0M=`zAs
zScWt@V}XVi3(-w212vPgD8W0YL2^-g;%+GZD)-4oXpa*q2DnfL5yN9JQ*!^{&{ITI
zDIZ0_k1!%lPPt$lprl(hLW?R{fWepkksX(nClZL)T#t_)ht;kfin>pFWV=Slq{h_B
zss)%-S6pP{t^&`UcMi|5dM*iRQC=h$gtjt^v-8PZ-&sCsTv7|gun<GHc#^m%nzkG;
zWuUF5sU$2KM8o0F8|3B;_NR~6e*V$Rnk@7K3m<7I50y?QpyP55ytH75{XMgYIi)Be
zj}%sDFw`YXkOKz?&$p(DgsWI;dP3cz4wz1r`u#BAi81*st7P!p9-@MGLCY+oDxY1t
zq@9?^Rno(pksVyLkQ}Kh1J~k3p?pwaX^_nvfU2DYl;H?J6MYS~R$*KJBo_F94cF*q
zu!VnqLC)w)7_sDGPbBqC-lSI?UWjFEkL=Tpg?=blc123(EG_e^Br#nQ{gMYHn*u8q
z!t<3q$B-9CGM#>a3~^&j3xnSS3nEeG8`7s#YkAOxTNjbz$86?CV78;wg!Q7%R@=-j
zTDtH=lU%5^h@4-^prXCXIXV9Qk6dYvOGTi;@+O&3qdg%&Y(mcBU-KF~6BC?dvZJ#j
zAU~{ED{vD#N<g$}WrHg}wLcz~todNZun4O)1qmnnIp@GW%FzL!P%l;L-YtMOVmsUx
z-?_)$Ami50_t#L+$+o%n96<I9Md<zI<$!q`ItSK9hrrP963vt*xm7y|T8De>ntBI3
z4V6Knyk}HQ#WO#^^1*wjm^zX{OK(9>Jw65eUaH(Nfi&FBeH9p5ul2LStS!H~Kt1;C
zR>mETt(C2$eZ6=bCk6|5UU?`gubqyjSlLz!)z?byBWUPSQCoYXbI^vgc=r4jE(!Y{
z^?9*wR_RHGn^$4EqP7y2L!rV`EYzUC67J-iVSszgHq?t#o^$%d4UQq3r<K-{K_6wv
zREQX-D;!?g7nh}#?`)9o3jP(o{LRimSX8oN?6>nPTi2kW{yhO<A&=yfA*1ds!H0g}
zi_(@d``kX_EwDTSmtTO1JKfW(WN0j48D8}+9KkO@;LtT7QlbVl9HGCaI{9ZS^7qVe
zFJBuJkzZRU{;Gf<lBi@e*O3USucl=KMOwt&P*SbSYl!F^I@BuL`?$z?{zdQkt=lVt
zoEj>%5NQwKJ(G+Jq7X7lF-3Pj=r=M_doKMe@K<$zFUqp|z}&vXD|G3JK=bA*fxKgw
zY@=EWHU2Y82@$5Xei)vpc@{K)CP!?iEeb6{Ix*FnDnTgV+E<(X#4uw-6(UCn_k3!c
z@z)rWnL+56F=dp&@q{WxWNh{;Fl5LRt)4meWFI~-aN=nj^PIKSq3!^isJRv?UeN`t
zgGzn}UiR_E1y0#abt7*jLMv_sZV5|lb<8sXyRLaKsg9?c28;ZVVSHkApL+Heyj~B~
z1wUZ8XkG#}R^qZMC|c-pO`2Z0s2YLdCNfTi?a46a4v4PaB{yLP!Mqqp#IN1(R-Ky$
zps#D>q@a0X#|8o;aemQm>LMS)?~~CaAEW~~ROC)9wp4eMi4+Jr7#X>=2FVP2&{f#q
zJHSY&YBvRK?i;4g-x!Y(U8f#l=7I6(ufSG?yHSV7iVds7x!@GTsS(=bT32-zuw2yn
z9Sc^z>YP1o$WqUY!m3UFd+TIQo*nm8S=N;q#kqm&aRHf>dcyg)o*T{LO~<9Jv19fO
zMqIZ#w*zi|gl9G#>EEUQY(FvH)TrU4gtjzPDjcp}@C*`3e@kcuasU|4%(z;wXnh5i
zNax}wf^#U9`#BM6K0A0I(VsDmLf}JS-H8EEXy}&puzIZD*b19SC^3rDU={hf(WvF3
z0=N`P(0)TWe`r@8#|*4~nZ9)@`4+RE$M1Q6k6<}%r=;dkf?Zds0MKqmdgE7G|A;gR
z3ZXSGbg1%W!}&O{=aAA@HA3-5FWSDiwInFBnAAmH-4$sckkUI+c_fVN%z8Sz;_%?p
z=v4QSjoP+GjRkAxls7i6ty6wfJH+y=?kqXCkN0Fnb`tQ!y85=CFE_wCyXNDSFriu4
zM8-KTHB57NhEXq@8JwY27+;}e>rK!Px`MUo+m32mPTjd!GfpLKoKO%qp}v6_34};u
z3z6cUJvL{mj74>i{xU=S6)r0z(6Mb8F;X+=p(95d?o|JC9iBCHGRr!1-=h^(_ED=h
zs8{)%JiFQ)7e$2Ai9~zfga;Wwo1Y-AQgM0PZ0r$U-CQNT^O!iT{o(X012-FkBjmGe
z0829=aKv_T{rU=Fuxyi=t`NdnWPGUnVRoLz$c@~#tQ@`yEwj_5C31VvaN$?@(lS2G
zikFKkA-sfA8GI#_a})VdEL=w0BknXrzxdJ-G9&@W@`8jk?nv(6Mac%9<jhX~#4DmU
zva=-asJPLm$^c-|BaYYBJVRjAJ47bIB!p~kfADQ?|E`{L!SYAqiYZ}wRH<dIvq)g%
zfLAKgNd|_U3`GzDyb}wJFbbUVrH$5Nvq35#`Y8D=xjzb6Mb^Tev3*1{w;Kz#u9L+7
zx#F$IUMHwQjs6)#R?eKEQG@LnX5$JJzOZq1tyal?%m50!^CMq!me?TFfZNfu5^_U^
z_&sE1$HWd>UZ)B*a1gO!KcnYI0HAkyee=qVG7*bs^pnY}5{>_;k9y#~W@ZQQdvkyU
zrh6k%R}!#uH`{PZ====)js$O}Qde2Jf_Yc0osgXW%j8^{Fr+NsKOp&04?u``<QAaX
zwnlL^i}Rki?I9OZ+NfYTN{9nBNxPH~*9%%0BB<fjw|iwwSU)S}+G|*64Wzq?h8W<i
z<^$88E{yZe{GO1tR$Bgu-d>}S*yCN;Xt%zLq&g+qBGb#A!b_8Hahf;MkmFO@=oj}i
zaRu{c4#~r$dGGdzGLl{J5G5J-C5v8U0YsTyr9c9(YB^?W3o}0a$@?o}b18n00)7vd
zeH}@9tfBOXFa~+mvVx=8bN?3`w3b{&f;OS<@M8ObS~L$<5<at9_RlR#aNp)H3__UL
zd2vt0VNf=b_*Dz2b{X^8`cv$rZ_Gxf?BcZ2l-vP=xg5cx&@<grt@6z{I`PF{nY|-U
zfIEoe_ewMIIx&D77(jD<Y1k=`JNop_2xqpH0`15H_}Hk5fcxbZgmu&jlR-OXB>xLY
zuJnhNe%S+Yj8e+YPurFr#<ZUYase!z)0o1sTZ9qq1Av1iWz7b3R^j>?iMx3-l#Pgm
z3FAnoI^-kjXd-q3j93?hjqyFYmtZ;telkGm2PP>z<RW%m3F9*ok5w0O3WU67n5Th4
z9gpxLZs`Lx|4tnjsJ!3UNfKH0VIL?tCc`P}ysjf0X$;>I6@C(RwIP>)@@e9m66F(=
zorBwuq`%xN!+`bRW^p=!Tzd5?6V$#6<JIx#+>K5q_uBCyqx|tAmAu?MF~MvBWS{w+
zb~IqiV~uE9=hW#{SDFe!_~<))p<$hM#~Y_MW+apE%$;?q9;^Mn9mMe4m%<=urDbV6
zHBUxE9nTilHm^>ap4Q44=9&c~o7R0zQh{r;S~g>Y5>m(r+uEJ^60LS$H8c)7V|8b7
zxdp@}`l!B*)slBpqa2CemsmjSkYc^{=qRLV=_h5Af~3{Rj72D+A()8?uGma5JC=G9
zD_QyqbvpIoH22E`hV;cSv&K;;A){S0Otp@rc)5rQd=MVI>xgj&Z_=9f_a8yj>wY?a
z^$8sr_1Kn5RoctUIS96jKuES7%NHkOx>M&G#Grueq^Efg%+WDV_sV!w8-;mNOB(5U
zVFZj7k03W(`U~c*rH^a~=LVycNGl3M?~xu{_t+7RjaXpR%(D;H7$N5tXM7tcIGN3a
z07qg9#S86Bl!9OVn`EAx<s}i03)1Z=0sZEpL5wCZczOO7Ho`cC2*91f8aRr(N7axN
zy;yo@#&A^Q5#uKQuqzKTF22}gJS-+BC}j2gbI5%osfC~t(L7}}*%xI`$=tmW_Y~)5
zR?b3<b5i8jI1@+JPWPAgJkjv=^1eE=c5`p)7b4~HT-no&K6>&!_)<d~Y)Zq?N&eI&
zCp^x+EW4Iq7tLoc({RDwd`YxaI()0+O!feZ`LNb_<ZeDHQYmDKAxFV3OtorvUighD
z)w|-sjB442piRlGg^WWHGb5eJ@(hOA0t#}Awrdslsrs*+q!=L3YIxkeQ?OD}F+03$
z?TJpNa7+tX<B$MSp$vONNh)J%)zG8#;6sY(g?;_AOJ@1d&8S$BgdQU3$BYCi6N<t@
z?_#}gRDlAoIlI-Zp<4Pc#&0s4OT=M>><v@2eadK$G=;MdCF!gOsO;V)Wg&t-Fp`G+
zfXq_sm#&%IeTF?uI76#wmf!4tL!tFB-^nuuC$(u~roHZ6EaL0}W9kZ>*cto+$nVWF
z2Boj#b;g?5rNe``=cN+1zP<)w8Q<!sb~@AL%saY4o9q(?+^74$&p&)%$`&%O=Ftp#
z;`x0A{SUImBNn<C<KqgVw(S;lP;FU{$V!+F-LlTy9aCH!q{%%@7vio&x^mY3q|XSL
z^F&R;G;V_G;e1E($ywCFf}&x52Ye?h-sCN;a({>TMao#&c!jUhRN0Q?7b40)Z|Z&U
zkky)gkUU_4R_8x<d`VG6t>y`_-4_Km{b`-)J^Z%6%YF5Y{-#JVYT*!3I*c^}?RV}s
zMMz=36rbSaU{l+l+oy`C`WajTTPn*V18!MDol3t@9<gFWaP6*|o*yY&QFNHEWdXi~
zjk^Q!=Mas{nbJSYR&23oNj?{N;;ONnf3~SDe?{D>81E7uv|zMm4vS)$-kZ<pPT7;l
ze$b^Y8G*=s5v;V2GEA*KPXz7K7!BVgu3En#szFp<NjL<xxF`K1$JojxjUFMkUl)UO
zI+nhOQVdf$DZZyvvVSy2U6e~&vR)NS3XTYS^%(6i-clSG)`1^*<2ZzjuprZb)Nk~%
zKv_1-KrehZ9=izfT~b!q14$x|F3!@aBBLs@@Kqp+kFLeHX#p#l@o^RpnB*dLonq5c
zTED<3lFJCpI)lC>5*xzLY*NM#n%c6>{|q!jt0RprhH1@auK32u`IR6U{9>3_Z>qG&
zMf@r%@kV<ufwu4S`&AxhGLod<_(~U#kslpWCxXYDb32;NS(*I8QVoMVI|;r+CS$TF
ze7L@-@WVncMKDCPYDo5gBI|{<UKVqbsxlb^YOyKxjYM9^AMkUGP+S1pKlj&%HT?U^
zd-)r+UR6jLQM#EIiyDWDl~2Z!7Rl?;w25G*7wbN*J-<{;m`kN#6}nv0$h0%Nv8j((
zB!WRgz2gE=u*U*`)U7OSWhv%4bz<omE&DrNUZ2?nR2#zshS>fKkkIw8Cb1|MYjkE9
zOXOovHqOf}KX~B%ph+%59OlAmL@S=XEc)`R)7@z!p1}zBILv~XLP*a(X35K}ObWFW
zo|9(u!hMv$0iym`)}%EZfrH*@KLs^niu4u2xUp;=NfKxpD!PtzZ3h6>JF~FtQfVp2
z>d^lS`Sgv4X~wz~RV0;@u;d_ittv9|EGAT1B7ZVa)g_#sK3PrF@$bZKQrbz30VLr>
znse4FSFmZQobz~ZUl-YlZK2MYs;c|t<#cg7Cw{yL6|RugAg`j5%tRUh>U`L3QCzfk
zQa@1>C`!_5PvX(V){fXyYI1DCsQ;80L&Dp$K>t|A0cnf8=frk?6Di4mvw|~OHk6S`
z3(AS<HxZUw$XZ6d!(}xew%n0o{hh#So=#owiGlnTJmVVfg*xj9LBNhpkqpV>T>!P<
z4X`(X2?%xeC38hBg2bNUf(jM^Jx1{o%_T2*_97F<P`yHbkHTMCYE%McZj>6j2-EDP
zC&-U6aRF$Tv$afIC+-P|-x8WDrlNd(GlN4&5Q0?q|A{d32-u-jn9Dqd_H5)8LY(|l
zSM@iupB0ts3KH_&5?yU>eb@0Ro2<USu>Z)&bx&_-$E841$kdKf)jJR?bB$OXBgaaX
zT%gh~73UK#B=Gi2?7{u*Shu^D*f0W@0>=J_3VUwt46%Jk=fDPKdpG`PTm)n#Jo2dP
z?~4OIk7;P1EO9APS%MqXCe$yX)7pXD<<Xv$8zjZ$(T>-`*CEZ3V8_|SRmHhMH<&0G
zEcp|brG$g!rV@j*f@HlDG=l<Q{_U<VVGgm#>;oDIl1O-P+7X}9_UYbv?@JihY^|-Z
zoLH45PH^sO5tI)3ff+w@MdhveZC^!@GsB~%*Nwp?Iq8g}WSI|@4;fT}HQV`(8@7vs
z-CMAUk}imKdcL9Dv0R@4s^`NgZS5?W!PD0}P7$#)+P;-}pX9odvie2M%M?+{rET;(
zj?L%$CbO+%xnTz-t`b<Q)FVFS8!NdmElB#`XfzzmXM#tiZfTPutsJjbQA^A?pz*gT
zeirGqg)%q1{m*Lx3v(HuMp5D)j+vK_&53@{!VZ_x^huV|zE?La4HLK8XG;*^a^r=a
zvx`X}de}8+3qE0SQO?G0h;`lb$^;9!gCzh&cKrTvSEBc51D<WF=g5i{+!+-UUAqpq
z6FN9%-w7k`mpgHYouu);esA$&RZNv3CVE%8j~rkA0m5S8PywSQ|6&J=%RNx){KfY$
zrHnF~#8-g$hnPNR1E%@@UkBB5Cb>1w35DJ@rZC?@r1o-%&&jou0q?o649`Ym&mS6$
zmHM@kYIN;;Tw$wQkY5H;M5Sa?<W2NcOvP-&u4*%jT`t|Gmm}`)CQ1?)T*cQU3pScv
zC0rqpxxYFIF7F-?`Y!9AQqjF3H_RfP-`qXsYdb7=K4I5<u-|4PF|?-{v-x`|v%F)e
zvqo#7IpB=C{IL0w{1SbVZ?x>Wg@#SuDL;HXWBdn;^my<_4jQrRlZCNku7+E~!!o{1
zo<%%BQKbo0`Jqq=;y%g8_3``^B(7-optNAu8YeFNNLLuWt#-0V-uKFmVlv~&Fvnv$
z=HaXiBcu*25{GE=##-oh_&G;55f^bL-VH|x($2Tx8(;do88$&->w0?f5izd)hwly?
z^i2_IA1b`|+^svAVJf3W$MsDaSjF?FC!dAA(1h1a`CQkrf^#?raCE_b{j`6)jQd<A
zNwgD8u@xh?5oxgwE!;D=hueZ`+$Yxr;xVM!f~z#7cr{ARQp)k)$U;t@Ndggc;(_fo
zf{Sj#&LT1QV4ulO*|?_r9r}Pn{bw(Lxb?ubZJB>9YpMm({@QI)=ma;rN@(lkhiV5H
zeRB1-J$6k~Trr)dvdOt4EtknT3~f2e$}p&*9+;(L5C{YFCuQI}Iz}Ch1Ny-l^D&kJ
z@p7pmN^Z+OP2DZJ<}1t|b({9Vzsj`U;N<+l4OAtP9|-SCvns`sNdjOjQh2vqxktdc
zu#%*=9=d2XK6n>WXty>FS2j%DHrt>&=j}d-)}^P>UVGx6H*26gXYEdiS4F4H2}Irm
zvBpWX__f4U28CBWF|hX#(xaJBzv;?CcKhI7>Eyp`Gy@D3ez_Uab-~))5;*t2v!8P=
z8&8$n!=~8B7HoxaO^c18StTzbwz3^<%|i;*GVH>;iSPHAl=#I2+=1hS^{!c*rZwr6
z%^?nmDBnK|E*1H7jSIKBaZWS9_-qnwN6z{#g>t^(X~UQN3M|iKfe&FWwSnr~;tNp^
z4q1al%oI@_cLNH=Om~kJQ>GWdwOaHHEq;m}L^V4-G=2@K<PaILAD!OAtGNQB=;!0N
z{A0}uXG9ieGxcLFCn+UKNuCzG<uI{cPBQ!&TQ}9@Da|^;fjB)~$(>zFY2A5l4Gx#B
zRP6c<ZK))E$yql96E1>*T)_pI(weELk&L~fLn?WZ&&DaBQFh${8Q;zWO<#V*mAI%r
z(HhQ43(l$kX98+gOthRQZX9Y+8rkQqxX5@Kzxz*QWqn;O?BG_+`QM$dFN5$(uYluE
zsRdLZOr6k5CzvSXYe&Iap$VKiF#h1#BUNd|B!R&l`lcTSd7O)+Jwd%VKazHdptc@f
z*^X!LE4!5QdpBaP22f^hH~&Or`HAl5ZtgeT``i*jL{k4m`)JwI8Y>K~s&r8G#8WC6
zW8f*AN}kuczNJ)3@i6TvEY>bIZlSeO#fumov7$hKFlCB<O|P{bUtO^aZvc5a*-FSY
z>pE^I;AdBsom3`N`kCa|5*vNMY2w+Op<f+7KBNEK1SzpOig3s{T^M$^Y)K%7-P^Nq
ztb})1xyTn0!O$TwKcZpojz-aAf?>%+1WT1latxbQm71+ybOV;#nybcsRC;Zy=3}i)
z&qF*xe%e`ZWzm>Mz;JPAEZ&ty6*+3iG*N<G^uSWF{4r%!oqCL!UxUx}iqweGQEbG4
z=^BU_(Lz|JVRNDHhR)?WP~**(Iz6p0siCvNrj9tidN!S0JFlbet4*Jonwyg=ZnyqM
z@45J(_n4BHtDl`&tAWTCf}g->t?u2ierGJ-m4?fJAlDzO8^oFP!%A#Z&>io6%^Tv8
zGo`=fTh)uEF1!6C#gz&3f}n0uQDOF%tSk9Zqf=g5HY8yEZO;^Q0IUT&#t2i0t`iNT
zancZd6U5h*%ekIr&)Jnscd8};cMfs4za}vI%CjwS8|bCJx-Qcukk6Xu%9KM`U=w(@
zE_0u(1y$d?bI-;V_QQW0Cbw>LkKqd8HRKcTYy3vkzc&=xl|g6Z20*j+X^rmn>upV>
zDp+ittSZ*V$ZK7VvRG%G<VyUR(kqK^BxhjvbPe?i{h8GZREDtObY0^L{2A3NzO*s*
z73rBKXHx$}?h1WpK>zr1?dON;GsJJR-*+r)(cY-<e7#AZ{sz<hq^1&ux}wy$Dz3ip
z8+F9WuC#RGJcILv7sfJc4rN#RXNEHMMS14OqD!Os0}LT=)?7H?ke(VU^J=ef@2~Tq
zn*n6-FN^hO)ZQT}PtIF@wSCGsj@LS_UCvZDhJO7XwW6Lc^|9;FRlwy}W`uQW2@?d*
z{5o{ySEj%7_+%xh8HhsV6IAuh-RcwTkA!b_Mpg`|@IAaybt1{|xqLt$jHp20e8_$d
zDU;8<NUsDH6J618#<BsZB0s^9Pezs56+$sq0*dkY!Em%_QXD<#v!*ucSkX9x=Sr%h
ze>iR|BNFB$H>YMd)M0LsZnamziggae%>}>0ak*Z9R}tIVK8zU|8yw_3pl58=<|E|-
z)>;>iFmTc661_Mt*#{%zEi5e2vGme7km?HSN5ZRH+zYJ%(Gk7oOBM?<EAMMuXXKsu
zn}%Vlh2raPXX-Bn@Fn-;j`g9K2n^afSf-dN<#W|l!^T~2<T?)zrcTyT(Z+PuZix^r
zgW?2q{cO3x2wb0jaMYt?;WUg<m5M`bl!um#$k;w`t40K~L7pa0(7d?bV`nOFikzXR
z{p2}_sdq*RR5H<0+Oq2b?}{B;p)Gs-N%XD5bk>pQ*|tWhnLFngs>}1tIh#>1nSl!U
zGh$*LIP2qUY)tF}P9-V=qlSmTX)CieHdy*$F)oCi{HZqAfX(UjNokH7O^%ULfegb3
zCeF`6qU_jUZ+(d2E<Ex(7|sk0VLC!{r=C;I#Y}*lT?|_{*UIC`KVLey_{1f!PKwMj
za>O!Pc~iHeBopyq^+DzNhfg$%w15_5m(86KcSzmB@t_RB?$6Y>l9g(_x{rlb#n<%`
z@%1-6{Ptak^jN8myb0ue`Q>{Mw!DGiPDdy1O0biv?!@!Py#(dm!8W4<W=zk8o{{8*
zf{m~^V}_tRku_B1)9jzp+t?4S!?dNqZ4SM_Z4dQh1C3?)`1BYyj?~$o@`s}uDAdW{
zEIz>O?;x<IHP!{!v+%*5lJ>9if_=mTsN-o!WFf=Uf$@Jl)3%T({{0Oo*Nqq2v{1LK
z^?4N>!vDNbaPM=aakfNh+)#)aqT#8iN}e*g>vQFTp!A%XjLDgX>k}j4cKwZ|(<?%c
zG=27RmR9z8RS4lMsp=U1rMW)JUpZelZGdGxGHP&FpX#G`_{iy?^c5q0=0HB}MhwG$
zi=lg~K6U^+c6gbGmz(IpBYTKn7L;8V0hu4@CX|*7V}2iZBn3NzXl`_OM0+&;l0ade
z4tpH*bd`Grc_fA5+~8O5N21^u4-lBBv&Wh0`#clS%z%`r|IFfjQM0%V1K>Cdw&-e8
zFwStcim3>Dt{%U)87d+lTaFiaVMHvgvwM~6K)JXIa5zhFATx8TF<I6MI!8RVOu}-Y
z+eF+?nM|Y#<Md9Qd~9^tuquj6UL`0Sz8>Vtc;qoPOfl8;`Jy3dqzJ$sA6tC7^`-gd
zEGq7dhOST&m~yyH-bN!*6z`La;$a+<IbenCSPw(nN@TxbM;&kogYOa%;Ts{f{7@^%
z!HJ_THlHyK=XLVmNSH;GC@hq;FAikNBTWZ(BLcl42m&_U@&bauGlTiY4oiUBh(xQl
z4ZQc&-%-4YzMtUd_s3#1n>5l<)Gz#iDz6B^z7EcmMV#h2spHp=#t3;<K0@m1OkLIN
zAy)IoI##*Xr)Il4WKlGDzDtKAuk2PlQE!yCgTUmUa24(tjdw9ln$<aXXjAhv9t2;S
zt3J8^ll{J%064x6=7cL>V<pX=#MA*D@?eDzF|0>q?LpKyHKN@AR2(K05%a`DKZmwB
zR5(C*X3gr)4VHOzvS;%HZaI9{`_Q-r@e{j$61Bw9Z+iVxFuaOct>!(iJq+TDXAnW7
z6u@)F+%!?7ntFeX<wRvqeUmZzfUda;iux+eYC#F#1q`22zi}<;PfA{z6=cnJzf_2I
zCC?uGJI~S`GduUi+A#${H07`JsvXWaDx3x&b}rCGqEBLJp?f-MWE(ztph9?E_vav#
zPRKk;F~mg?HwUlLMGY;I1^S*Lual2N(dOAP8+u3}Pjvy_5|%Vvy;G6Bh~39TStHT<
z)Zd9Az(u4(NlezqQaV>BU*S|Fef@*8T*%)6nnj={+w~0++@37Wx=ffdy3NgiEz|E0
zyVV>7axNTfy&vQq4?!Zz9fi!DWVB7nG}LlUXh{Z6e#i2f4kaZP&J8<_D=~e4@ATRZ
z#es^DNUrAZ?JPTcczOsEEr{y?+^g7Nh(AQmGA%n+wsX&C4?x)zBjOZ|kG`%LrcJgJ
z-bh;0gzW(yrzmRf{(vsqhB)83AI-<m%PBfaq!d{=&WnV>qNY}%aDO%PE+mo<WswCq
zbndG&hAgex1rmn;@tin|7thG=#iqHBqzz6Yd?j-lIa}R@Lhy;P<|ALRmFdbB3pS`v
zHK6O&&%C&Ns;}KlsGca8(EVbm(zRsm3a4FbWE8SJB1;a5cH|k^Jk%QewZ{JF7C%BS
z6}VA2%4);VtA^kv0fXBJ#i58K5lCLrhs1<VJ<Q6fJoSspm|PaUao=4D)`$tR2Iavp
zGYzp*6n~2>Ciq>H?+O`q-^II!0b`KD82VGg!r?TeeodKi1S21FO7V~Wfj}xwH@x;+
zwuKDX7C6nT9y8V^{PBtS%<J|CfeLlWp~0I#?J$uH9okQ8o(48F*H7?X4J)F<m%I1l
zm=B;`8<b4i2Msi`tz6OSZE}&Vf)P2ZD1kA;1_XvF&}b9E(sju-;Ol)Qse<2or0j%2
zL;71#a43mm6>*;zr-&SN{9lsyK{fToAb^vY`C_5OzWOn9BAb)j>EO)5k2{m&ZD{%W
z$q_*2bQ5t1D~qwA^W8G3ZfwwaUS}6z(&EsxdpyYx*z!Oh*Yv&Qo0Ox=5YrDw#)K=k
ze|kEP7gP?b+0Ap*%uM{vY25iGA4$OaFmIc^m+~B?8B^AZBF!i*hBK7w`94+ohY!Z|
zg%kTvyN3_i2-TNzQR(8@_Q&aSD?w`8+g0VLI|#?aX`!~ekl|<!IomEasN>zDyboaI
zFMFhk-bTt^fMSWCqOG#N1<rvrN$|w(lQLQevc>{G{Z|C>J-SJFt&Qw#3&i+IuS9Cv
zLB~7o0`3%`v*P~r?<p$x8cY#GPm$IqL}wI{c5t{GNCG~zI7?)K0Ak+&ym~@$N<0J&
zuqYKY+%Rfb(PZ!gSJzNeaJcPxOVJDxgp4A7Y4r$M?nA=+SY<qPYlR!#q>Hj&epBCR
z1rO2V+1*q;ejpTD$dUEj>0`n+9931N*N(mmUuAgU5z6rL#SqMBUTfKw4&;g7(3=VJ
zAL-dSAZs5ch7ZcXh2N&cVyD^T*{P+xd~Z9B`!nK8q=m^ziGDH9pOoKCm=W)9m`$Rv
ze_m5zY0kjOjwUI;Cn9|pOQnqSSp!N~`;m&lLujfQ)hz>IOta;HQ2^ME?;(XrU(w%s
z8Fhd6nZQ_Pvcem1$w?JVx^0Lfnt6Bc{NNa;`f$2@KHg10FiTjccJByfK~B@lV?p4I
zzr=3#ZU-p8=MRwz#;QfZ-SMO(s3zF*s8<iT4Itkp;9IT&K7X;9)x%cdDflNJQZYL5
zQo{x71jVffFDg$AtsISS<v407L_yPJn%ywZZUnnja!{k0QmB^BQpLicf0tAb6Z%}A
z<QtE{^FXv|5^vt?c<$3)T&+Q)qITL&ptom3p0O+V7Vxh*T9j`46B9QqNWY_sRf@N%
zxXUFHiA01J@P<jZK&J0P+L{v53ks-G#|kFjQ_?Et{3@PMnJeIhKc$}SXPJ0tsXo&B
z>5vmlQA~VNSewJpO_F5LI5fm~x!0<D@0z!o_c77}#Z>DL9c#)|lA#|vxJdz%zz%&(
zk~KKW4!U1w&o$?l3K8%{(T+AyN1}z*BTWT|d=}zf6A+RXI<QwHgQ1M$iZwbVfu&U6
zm*<Uw92*gjh8a2k`m-xGJfgmRAk&x)?s`;C=nZ-y=`-%!aL?5~?GmXaeY(+%9dR&Z
zpA}V!YDCNP=a!Td%QK!*GAqw$oT{e`=9e4@-HDb3LGdh_*f}aHQyZ!TeTAq)MT|<K
zPH7?10=`(>F_tB2I4`Ur0rwFYBmQSB&NJGa8ll<+ISyt=s%Z?@sBVnzpcVJpXBocA
zOL#h50%R4?v=X#s4D}|fW3{EdYr0eedN#2mO#^DftddeDDQ64-=~Gn)$ZqqM?q{Nn
zR;KmjhDqj1$lWX=d)f8?Zs5v(9_*Ju;DSI9BV;!;m15<&!^!-9eVUHJO|cB|hn^>W
z*g)&c>Y^U32>&JA+mP#M0@lFnc)on$rHXMpv<ui<at!*|ZSvUda@;j1a`p2#<3>G(
zG+uNIyk!Tp0ItXj*@6O<zp%R^9>vS?Z1wh?3rl}}&4-rekKaIH#hZp@92$5Gh`7Vj
zmPd|fs5i*)X3?#@e>cW06y-4ux>_pfN1p~LBW2~I;MAcmWHm|?Zkjkd1Ra7D>xs)W
zw;31aK>_%s{hXue_C<%ZWe!>Jquev0hxnKS;W2V^S8Z4zF)}t2tuxwXF1OwB4#*S{
zX~8f74#jlI!H!$MMC_W68LcrUw4FkmPY`}i<FCvIi)2~v;5r(vQT}F|_tP~+kavr<
z=zM&PY=$4?P%24Scr8#OhbtV&J$mN04a6J0W}I>ewW)p5%;UWxMNJCLwhp+jV<V?T
z)S(eN{$)nKhNTC_o}XnTjBTa?s<Xq4J#MQT4@tCp7Y9Gi2s_Rg$u~&*4A;2EGG(Gr
zlCDfbYJ-tLfEw-vlz;~3foH@EEP}7FVYp_uF=W_Ahh+;JvKfGEF4-600J%`WRvTw-
ziqJG|tcRvf_Di{&fX$WrL{buc+^7EzrYvR^X}>mq?v5Mp#2s}4-){Y=d_Y*+h^V?Q
zPF+)yhL+>p-UH}FP;ELPO({pTlWdB^a8HUNjO1NRLN{kCM$Q(!m|C-NzW-Q|+&2v6
z2|3E%+nOf`&r%5Yzhd|w$$8U=Kavg=XirAu05&k}20>d6p%{Lku_fjg^n(u^aju^F
zeLS20Av$Yu4wfge7;DTt1&$Mk1jl^;82T(vUJN*`-}9h#CqT{7<Koa%oMFmGD+x+S
z(6Zt_D&vOJV6nD<p<@lk$Pk8=%MUJ@6GqjTi(Ub-9hM8#G}vPBOu$rp3}1vqW?2R$
zXa*9m7_^zxuqL8zK|<FFi=Y!7Ub#n)Y@9l#!7!gZepnm2!h=1Yl}#d}Qsg$KRB5!O
z1)&R`w@Qb%I5=hmwFn1q8UoQa2Bxe3m7*zl=;&I*ISaNyfsX5TRDjReY>>4(M?qh7
z^s^nSwH)MIe3(2qq0Y9-k*6-kx8T4y-IZ>m`5Ts7ztKsDV6;*qpnw1z+lmdXj7_mh
z-k;iAy;8*}gL|7Cb+I~J4l^~J&e3>r_*gT6AfioJo)(lmjAmF3su?O|)Uo)$>L&`m
znKWgqfvyOL<NJ`yJsNp179MPecI-g=+==Y5_76uoq;`xjUDP03`X=Jg9$*MOFw!XU
zR{LgPyo-t@NMPg2HS%u%>lN0HDa#`=Ig;kAraf8h{_2)>Gvk*c0LyrzS%UfW5V!2W
zJb;C3%_so}xO5}?594^o)a+0+c{}X%!}y2qYkqzg5`|OZR{hZ@d_9W?`{{x8Od#)*
z_a;QL9ef;vEpqF``cdSjZ27D?vdYCnu{>qNV>=oG{$c25@w)K=!aNUUQ7$3W0y@;W
zbdd9MUfj*s?vHstX-i@4z~4>w*!n|_xMqn{JBiLWB|9cM`*5&=Auib@gWQxejEE8S
zq&EP>@xuYV1K%(*qHIT$byh673<%Z21OFr7-wo4i7?zr#W;*|fI831+^=TsFR474N
z^=+$Q4&Cj*v6SXYcXKAm1c(YNq@>H$9%vie)?rc2XP|Q1u;~~4nM$%Ajl;t11H$aW
z9}ALLM&Y+{NJlbF)XK977Hr{nLSfqj^T$x&K@m3w=<WDFgMXxWsBY*H$epY;vg@`y
zCI(mb4X7FJQ`d2-8#+`88YfH9hA;P_cS7vQC<iGhSObRxY)g5fF&2_RR&Y_&Q|HG|
z%0~@7h7y^~1$oh(AchvnX=B|-f{yc1fd`9`{vPR3I`{C9h?8b8q>@X4YLW@?-2%F{
z7<~Z&Vj{q9hh=^rj>MAts!-^<$0~5sW~)_(zhAF-ZMH6GU#!aDC>w#hvtO}#Fxk#N
zS;?R<Z%ZCH8BcE`VpAYESlPz5iEXoL_%o~ne@q^_WVXJLNVesf`)VWCLcv45qqPpJ
zEf>=^nu1t6es_dsOTU4K{@crOD?M}j&q<!wn3>ziiJ|HTzl@J)<@nQ)VV!Q`A}q<z
z5ORpIM=}foFUJr#bV5T4g%}DBYW@jyzY3<C;|`YxJXP}TE$pOSrW!rC<nmmF@-!Oq
zF<7hyevSHG&MStBPqD^c&f`d46gCB8sucTCV`zp5#S$+`Rqvapw)1UC`IPjxvfdwp
zt@J7ie$gsp=mwKvUhV18yiF^inbkevt$#ARm)&01;N4KB%U=0i=SdZ0XMP8}4IdeG
z-zp0%vAZ{H4cfarY_7yyq6)0I%MMAn^D5;pC~Ro|X}&KP;q_=g5O5~mf-N=F0xs+t
z0W&xle?T~^Y<Z#DvT#eHP{`4nWY_$OM=`m|S{P4zDZb7d`+OvZPWE%eX7AaUY5zoa
z2Ye7~+Hm!YgnrEY#@lVA<`ZD@j_>@=G<yJPN|xlM$k5uyX5W4A3v-XneQ=`j1GXDM
zQ2<Qs6RKfZV1V%nl~U;&&h(<xKIjjZtWxi<_KVay#ZQ=&N`pbGC*0feUE#_<ZfDB9
zfpiy$_T7IN)+)ZBHkUu=A}_pqNA{?q2VpZ{>@0A)ii`U-G7!F(m<@YV#?c<tXP39E
z8&m$CA-G>>x54VvqA~2&M)s1%?blxsuWxNad5&fe`P88~e$&P#%vZZrw!zEIi$0aG
zM151ehVso~Pv@|ZxQkPto?WndCEH;7u(F}vt(H6WTQIw?ZC?L?tX8+TDVS@%BUY$H
zC20aTu2N?hv5Y*zzW{;5oy!@zO2;B>G&lC1$}t*mGS_6j#!iv-3L#tkKVO+g>9vR_
zQxGQKycVo4>oR)Drd=UkUn?U*ie)X187Spx;r;2q+7d#1H88CATdC>E@LMOU!>)wH
zBqF*$jLASrHt^j2TdC70kRFA0g=wU)>+)sy(P57HLK~*9<b%KR3o{jdecs|20DF8u
zy-L~=y>&t8r*2L#`r`5aP-y1uOTwdZ@C{1eP@`&OV;Rq0lm`iQZJ?vVd62{YeAlPp
z!jtiOp%O`it^yU~Av<1QgJWMLwNLh#wpZ>=Se+|{t1LCq@ld@>`xYJhaO3NaYmTF}
z6jP-l-VCP`k6S$$vhhZP$ZPp1SOJy4mK|G|3GlwQ#wyMREo^=;%yP}A>*X8|ItX$!
zEmDq35+@mhOja5~Hf>TiHuZ}7xRhi;uh>eA3oF(ptB8`i7jLQ*TCDMBz2?pYJnxp!
zrll3&*$!|{@`6<{8YS)ij;01+rjYPV(2o-SK2|Eu+MzzLhS?=wvlSh;j&+4K?m%bS
zMo8blS1fx9(CAzoLD6ZE;1bqfn+QU_zrcWCjOa?wmsO7ek@mKdX7kf57XrRfDxp-F
z?~SEgJaVdL4$QfQ=%U!=Nz!^$wR)p9r7!v<RFnY*K?D823o-n?lk+zq0bL9I<N2Rj
z3;&d5_&4=`7H0Sd;UA&MpXP7=pVa>*)9~LL|DVJZ{)7G>jko_T{!?1v-);WS;tK!8
z*!&mczuzYM-`e|!*up=<KRy=v?>(>o+g+spZ}?0B9ln4t#U76-$UB-4CSpH~0cPfs
z#zrDd#5kG(*$Pllqi<+KSh0Wyx7U#!4YUGndmFMH*fw_|?D)Y;v>oVMy#l;h*+2$y
O0^vp`28MQU!UO>Q&vP08

diff --git a/graphics/AtlantisJava/lib/oncrpc.jar b/graphics/AtlantisJava/lib/oncrpc.jar
deleted file mode 100644
index 3910ab9f555e0a3cf6f8bcc3d2ef7fbacc09e6e3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86081
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
A=Kufz

diff --git a/graphics/AtlantisJava/lib/ostermillerutils_1_05_00.jar b/graphics/AtlantisJava/lib/ostermillerutils_1_05_00.jar
deleted file mode 100644
index 79be1c0549dbce8d17fe99aa94815a442b81dc33..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 34346
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

diff --git a/graphics/AtlantisJava/lib/test/fest-assert-1.2.jar b/graphics/AtlantisJava/lib/test/fest-assert-1.2.jar
deleted file mode 100644
index dcd667e53566009670eb087365eb064727f1525a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 89901
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

diff --git a/graphics/AtlantisJava/lib/test/fest-reflect-1.2.jar b/graphics/AtlantisJava/lib/test/fest-reflect-1.2.jar
deleted file mode 100644
index d33ddb65349ebd5b6ee159a2cf7d569bf7f5d4ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 37208
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%0DX)y0o)U;4(#N*Jt_MWgdCi`%FGOoUVC*
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
DWLVZo

diff --git a/graphics/AtlantisJava/lib/test/fest-util-1.1.2.jar b/graphics/AtlantisJava/lib/test/fest-util-1.1.2.jar
deleted file mode 100644
index c5f608bfabb4b04653c0c6384e9a4ad28aba2d08..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18962
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

diff --git a/graphics/AtlantisJava/lib/test/jcip-annotations-1.0.jar b/graphics/AtlantisJava/lib/test/jcip-annotations-1.0.jar
deleted file mode 100644
index 9ca41331f9d84cd668a8620850fdc5b1724a10b8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2255
zcmWIWW@h1H0D<%f6EiRaN^ml;F!;KLIO=-(x#|Bq#lR2%RmuTY`sf$azBr)LEFcyE
zVz^RYM?X(D*WeI6U$@V`XHNTg>*`(P_14uocjo-&AcHH$51tmCaTY4n@$fn45z5fT
zsCxE`Pvy=z-9f_MLBS<+wH#mhe&u<@d!}SEkB_KHllNzl8so{`pSrcXy@QIoMQuJ$
z`f5_SvtlRQJ(x~s0lFtIwL~B0VoVjBP!(CpnFV;1i6SdY%*)F!Ni50C&nt#&frP~w
zomf3?Mh1p0K&*mGi+gEeQA%oxQ>9*VPGWI!>jZ!QLk<E*?<Xwm>iY5gk)x_yM_i6g
z^`(d@EJvoiI(j)s?W|d<_bpw{__NLO2l!KEY#7*u_^p3$`dppA>GR*uKUp7$9oL(s
z#}_LjxXO6yG#`tdyWXj0E!z_^^M>@TnAt!20_4+D<qF-GA2ONeHMPI;kHP-P1ud5s
zn1uQNh!wAz@@cQ(%+Rp(WeRiF9$lGwm^)N%^VBD&&(_*M<&>5_w_GP+>*cT2{Vh@V
z`RB7MMa_<7j5h2P^8YRW#MHagMEnBpy|_bp_tob}Z;KOp`Eu6657YLmnuJem4m>nb
zH6~}yrYOhR4l7RFoHTc`b3uS;sN>u9yKYR|t(xU7@tj%IO?G$pruM%_g%>wA$HSrt
z5|~R8d)EB|2I4w=f$5o>TUwHsl#>bz%=2E%h62a-uUxx2H2do_$JKIGB_H2-ZfI?)
zKedbNk!G*+$w|Im=Fu-!SAJlu(RjJ0{o3KC#*-<}em|9-@qYe!eTM56eFYK=r5|=&
zsQdOb=JSOJwGy|=I5yLbHB(o%D$P+@%B}W1JXqr8J*(%<T*r1d6%@uBZVb(nTD?`^
zer4>lH%#?+1pHpl3^}`8#wA~Oif-zMR9o{6F_BA8OLE`wxqpoLP^Inc0)db?r*Hoq
zkKL2nD`MakCwKW`^Nx9ze1*%-zB%8n6!*UQ!rcfvU!!Y{7go>R6d5$%A;TkQp%t%5
z{d=)(s^6DLd)^bQ{VsbXBbonq=ur!YbXL@`+j3KO?>}JJZ3Bj#2CjtYmtPW+QIwjP
z5}cTZ6n=*tz~OiC*ZObI99P+X$@l;aKPSg*&&3M!w!Mrn&nfrbr1|Bl%@2lJjlxF<
zwOC?i%)R-y?lbS1U!VUnA5gu;*vGVmNk({9a(D{o{j9?+-!A<8p_^<fyE=TI$JHP~
zzeR_tY@e&oeckymJ9}<;ob_zsbML*>OirD1`l{SwuBZ7d$JT#6$MUN_Yc@$%UzGMv
z<&wO&_SvsC@6{Ds6B=KC{Jg^7Vs)DGw<a&ul=t!}PkQ{qnAk2pHjum1oqc^1|792b
zI@2c)=g$?0lD^&Ud8$*rL`ywa?5eUrmQb{YKkwJ~yBl*)%Kqe4dEc?`H&c?y#`eFT
zj#?aeD2^J2s_hRd{s6;n127C#afKmf0Q!0Z6JXo@E7vmqW&ji5Do6s%Xl;^Dm1g}o
zWm)psNol9^wq4l&?4bMwdDU}O1-3d89%{z#jo%;0*=J|R81pb<k@Cf<7D5^Rmz0c4
zvSm3-u2j2KnO)2;nfYR>m_;YI{F|nExp~X`^7i;Q^O=3!dEjU4Nf*E0l}qYdGbYSR
za<sefChEbKd4X25gA?{{y|nJZN%60DE(B&Sz2=>?V`bbi=f=%dX3Gv}{GajWe{)Z8
z`q^2IlJ>SMF52$?X49%+SoU+dV*jdEjuP$j$1|PO3WDFx$nvgbY-GEyJ7sy}v-7tP
znH`r4S3NF!tvp_lBlk_>{xclx7Jt|RycwB9m~mGkz%T>?0fx7ZAR1mzK&lj&R_v7u
zNCOBgY19UiaIHvH3_i<2)c^#5EZ+@eLMjEAo!F}dgpRvV9neYww>D5U0RbS3Sbzx!
zWD!^!YNY`)0(-RqGh|7lIW8m6DiMV5v6r0)6I+;YI0~&KMK=+>L_wH%fEkC0Sjrc4
hQ&rLO7{XK*Rvf0H=ePiGRyL3}P9Q7;dd?Zl0|0#=814W7

diff --git a/graphics/AtlantisJava/lib/ws-commons-util-1.0.2.jar b/graphics/AtlantisJava/lib/ws-commons-util-1.0.2.jar
deleted file mode 100644
index 3fc364e7f605b580850530c281998a1f861cc0c5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 34407
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
b7v1ZoM@AeJ>=!c8%a=P00KlB<uiyS3FvepM

diff --git a/graphics/AtlantisJava/lib/xml-apis-ext.jar b/graphics/AtlantisJava/lib/xml-apis-ext.jar
deleted file mode 100644
index a7869d68aacd655c782bb373c7334e5ff667ca58..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 85686
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
KSr6gFI^h3trdb>S

diff --git a/graphics/AtlantisJava/lib/xmlrpc-client-3.1.jar b/graphics/AtlantisJava/lib/xmlrpc-client-3.1.jar
deleted file mode 100644
index a76e6ec96dd62265a199eb3ab72c54b7ebb99368..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 45124
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
J03a6D{{SgA>IVP-

diff --git a/graphics/AtlantisJava/lib/xmlrpc-server-3.1.jar b/graphics/AtlantisJava/lib/xmlrpc-server-3.1.jar
deleted file mode 100644
index bb64a504ee8997cca1f08ae0814b6cdf90d0cdbb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 75310
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
G0R4YsfpO>n

diff --git a/graphics/AtlantisJava/share/InteractiveServer.py b/graphics/AtlantisJava/share/InteractiveServer.py
deleted file mode 100755
index 1b1adeb2a9cd..000000000000
--- a/graphics/AtlantisJava/share/InteractiveServer.py
+++ /dev/null
@@ -1,483 +0,0 @@
-#!/usr/bin/env python
-
-# InteractiveServer.py
-#
-# author: Zdenek Maxa, UCL HEP group (zdenek.maxa --at-- hep.ucl.ac.uk)
-#
-# CVS location: offline/graphics/AtlantisJava/share/InteractiveServer.py
-#
-# Interface between the Athena Python interactive prompt and the Atlantis
-# event display. This server script takes over the interactive prompt of
-# Athena. The Atlantis user can then type Athena commands directly in the
-# Atlantis dialog from where they are sent to Athena through this server.
-# Commands: e.g. changing/querying job options and executing .initialize(),
-# .execute() and .finalize() methods of algorithms, etc.
-#
-#
-# setting up Atlantis - Interactive Athena:
-#  0) get_files InteractiveServer.py [from 'run' directory]
-#  1) athena -i <job_options.py> [launch Athena in the interactive mode]
-#  2) theApp.initialize()
-#  3) execfile ("InteractiveServer.py")
-#  4) if the server started successfully an info message is printed and
-#     denoted string has to be copied into the Atlantis Interactive Athena
-#     dialog (Atlantis menu: File -> Interactive Athena)
-#
-#     Once the InteractiveServer is started, the Athena prompt is taken over
-#     by the server and the user can no longer access it. The server can be
-#     shut down by Ctrl+C after which the interactive prompt should be given
-#     back to the user.
-#
-#
-# setting up for Athenaeum:
-#  argumentInteractiveServerNoAlgTools = True
-#  argumentInteractiveServerServerPort = 2323
-#  argumentInteractiveServerServerKey = "someKey"
-#  execfile ("InteractiveServer.py")
-
-# Multithreaded version, modification made by Julius.Hrivnac -- at -- cern.ch
-# Athenaeum commands can be executed in several parallel threads.
-# Unlike in the single-thread version, all stdout and stderr output
-# goes into system streams, so into the server log file. The result
-# of the "remote script" should be put into answer array so that
-# they are given to the client.
-
-
-# ---------------------------------------------------------------------------
-
-import os, sys, math, traceback, random, time, StringIO, getopt, md5, base64
-import SocketServer
-from SimpleXMLRPCServer import SimpleXMLRPCServer,SimpleXMLRPCRequestHandler
-import cppyy
-
-class AsyncXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer): pass
-
-# ---------------------------------------------------------------------------
-class InteractiveServer:
-     """ """
-
-     # <configuration attributes -------->
-     debug = False           # debug messages to print  (False / True)
-     keyLength = 15
-     minCharValue = 33       # ascii table range (generating key)
-     maxCharValue = 126      # ascii table range (generating key)
-     minPortNumber = 2000
-     maxPortNumber = 20000
-     maxAttempts = 5         # number of attempts when creating the server
-     resultLengthLimit = 400
-     # </configuration attributes -------->
-
-     # other attributes
-     serverName = ""
-     serverPort = 0
-     key = ""
-     server = None       # XMLRPC server instance
-
-     vxTool = None       # access to vertexing tool (Athena AlgTool)
-     visTool = None      # access to JiveXML (EventData2XML) (Athena AlgTool)
-
-     keyForbiddenChars = ("'", '"', ':')
-     noAlgTools = False  # if False, AlgTools will be initialised
-
-     # answer in a multhreaded invironment are passed in the global array
-     global answer
-     answer = {}
-
-     # -----------------------------------------------------------------------
-     def __init__(self, noAlgTools = False, serverPort = 0, key = ""):
-         """ """
-
-         self.serverName = os.uname()[1]
-         self.noAlgTools = noAlgTools
-         self.serverPort = serverPort
-         self.key = key
-         SocketServer.ThreadingTCPServer.daemon_threads = True
-
-     # __init__() ------------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def makeServer(self):
-         """ """
-
-         try:
-             SimpleXMLRPCServer.allow_reuse_address = 1
-             self.server = AsyncXMLRPCServer((self.serverName, self.serverPort), SimpleXMLRPCRequestHandler)
-
-         except Exception, why:
-             print "\n%s\nCould not create the server on '%s' port: " \
-                   "'%s'" % (why, self.serverName, self.serverPort)
-             if self.debug:
-                 trace = traceback.format_exception(*sys.exc_info())
-                 traceString = '\n '.join(trace)
-                 errorMsg = "ERROR:\n%s\n" % (traceString)
-                 print errorMsg
-             raise
-         else:
-             print "XMLRPC server created"
-
-     # makeServer() ----------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def generatePortAndMakeServer(self):
-         """ """
-
-         alreadyTriedPorts = []  # already tried port numbers
-
-         for i in range(self.maxAttempts):
-             while 1:
-                 self.serverPort = random.randint(self.minPortNumber,
-                         self.maxPortNumber)
-                 if self.serverPort not in alreadyTriedPorts:
-                     break
-             alreadyTriedPorts.append(self.serverPort)
-
-             try:
-                 self.makeServer()
-             except:
-                 continue
-             else:
-                 break
-         else:
-             # for loop iterated through exhaustion of the list and wasn't
-             # terminated by the break, so the server wasn't created, notify
-             # the caller by raising an exception
-             raise
-
-     # generatePortAndMakeServer() -------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def registerMethod(self, name):
-         """ """
-
-         methodName = name.__name__
-         try:
-             self.server.register_function(name)
-         except Exception, why:
-             print "%s\nCould not register method (%s)" % (why, methodName)
-             raise
-         else:
-             if self.debug:
-                 print "method '%s()' registered" % methodName
-
-     # registerMethod() ------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def runServer(self):
-         """ """
-         # this will probably have to be in a thread if the interactive
-         # prompt is to remain at the user's disposal
-
-         print "Waiting for requests..."
-         try:
-             self.server.serve_forever()
-         except KeyboardInterrupt:
-             try:
-                 print "Stopped from keyboard, exit"
-                 print "Closing InteractiveServer:",
-                 self.server.server_close()
-             except:
-                 print "can't close the server"
-             else:
-                 print "server closed"
-         except Exception, why:
-             print "%s\nException occured" % why
-             raise
-
-     # runServer() -----------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def execute(self, param = "<empty>"):
-
-         print "execute(param = '%s')" % param
-         resultMsg = "SUCCESS"
-
-         try:
-             exec param
-         except Exception, why:
-             trace = traceback.format_exception(*sys.exc_info())
-             traceString = '\n '.join(trace)
-             resultMsg = "ERROR:\n%s\n%s\n" % (traceString, why)
-             print resultMsg
-
-         return str(resultMsg)
-
-     # execute() -------------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def get(self, name = "<empty>"):
-         """ """
-
-         print "get(name = '%s')" % name
-         resultMsg = "SUCCESS"
-
-         try:
-             result = eval(name)
-         except Exception, why:
-             trace = traceback.format_exception(*sys.exc_info())
-             traceString = '\n '.join(trace)
-             resultMsg = "ERROR:\n%s\n%s\n" % (traceString, why)
-             print resultMsg
-             return str(resultMsg)
-         else:
-             return str(result)
-
-     # get() -----------------------------------------------------------------
-
-
-
-     # -----------------------------------------------------------------------
-     def callVertexFit(self, tracksId):
-         """Track IDs (tracksId array) are passed to vertex fit algtool"""
-
-         print "callVertexFit(tracksId = '%s')" % tracksId
-
-         cppyy.loadDictionary('SealSTLDict')
-
-         g.std.vector(int)
-         vi = g.std.vector(int)(0)
-
-         for i in tracksId:
-             vi.push_back(i)
-
-         print "    calling vertexing tool: vxTool.fitAtlantisTracks(",vi,")"
-
-         r = self.vxTool.fitAtlantisTracks(vi)
-         if r:
-             resultMsg = "SUCCESS (get updated event data)"
-         else:
-             resultMsg = "ERROR while calling vertexing tool"
-
-         return resultMsg
-
-     # callVertexFit() -------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def executeScript(self, param = "<empty>", pid = ""):
-         """Execute Python code snippets from Athenaeum plugin"""
-
-         errorMsg = "SUCCESS"
-         resultMsg = ""
-
-         try:
-           exec param
-           global answer
-           try:
-             resultMsg = answer[pid]
-             del answer[pid]
-           except:
-             resultMsg = "No resultMsg"
-         except Exception, why:
-             trace = traceback.format_exception(*sys.exc_info())
-             traceString = '\n '.join(trace)
-             errorMsg = "ERROR:\n%s\n%s\n" % (traceString, why)
-
-         return resultMsg + "\n" + str(errorMsg)
-
-     # executeScript() -------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     # the only method which is exposed (registred) for remote calling
-     def process(self, digest = "", request = "<empty>", tracksId = ''):
-         """ """
-
-         print "\n\n<incoming request> " + 50 * '-'
-         if self.debug:
-             print "process(request = '%s', tracksId = '%s')" % (request,
-                     tracksId)
-         result = "<empty_result>"
-
-         # generate message digest and compare
-         md5My = md5.new()
-         md5My.update(request)
-         md5My.update(self.key)
-         myDigest = md5My.digest()
-         # received digest is BAE64 encoded, so encode mine as well
-         myDigest = base64.encodestring(myDigest)[:-1] # without list '\n'
-
-         if digest == myDigest:
-             # determine the nature of the request
-             # request 'runVertexFit' -> pass tracksId to the algorithm
-             if str(request) == "runVertexFit":
-                 result = self.callVertexFit(tracksId)
-
-             # request to process Python code snippet (e.g. from Athenaeum)
-             # multiline request
-             # tracksId is the client identifier
-             elif len(str(request).split('\n')) > 1:
-                 result = self.executeScript(request, tracksId)
-
-             # get event data from JiveXML
-             elif str(request) == "eventData":
-                 self.visTool.execute()
-                 result = self.visTool.getXML()
-
-             # two last characters must be '()' if it's a method to execute
-             elif request[-2:] == "()":
-                 result = self.execute(request)
-
-             # if the request contains '=' - it's an assignment to execute
-             elif request.find('=') > -1:
-                 result = self.execute(request)
-
-             # it's likely name of a variable to evaluate (or wrong request)
-             else:
-                 result = self.get(request)
-         else:
-             result = "Request not processed, keys (digests) don't match"
-
-
-         # don't print out result messages longer than resultLengthLimit chars
-         # in such a case print just the beginning and the end of the message
-         limit = self.resultLengthLimit
-         print "result to send:"
-         if len(result) < limit:
-             print "%s" % result
-         else:
-             print "%s" % result[:limit/2]
-             print "\n+++ %s other characters +++\n" % (len(result) - limit)
-             print "%s" % result[-limit/2:]
-
-         print "</incoming request> " + 50 * '-'
-         return result
-
-     # process() -------------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def generateKey(self):
-         """ """
-
-         # generate keyLength characters long key
-         random.seed()
-         while len(self.key) < self.keyLength:
-             k = str(chr(random.randint(self.minCharValue, self.maxCharValue)))
-             if k in self.keyForbiddenChars:
-                 continue
-             self.key += k
-
-     # generateKey() ---------------------------------------------------------
-
-     # -----------------------------------------------------------------------
-     def printInfo(self):
-         """ """
-
-         print "String between the quotation marks to copy & paste",
-         print "into the dialog:"
-         print "\t '%s:%s:%s'" % (self.serverName, self.serverPort, self.key)
-
-     # printInfo() -----------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def createAlgTools(self):
-
-         print "Getting vertexing AlgTool (ToolSvc.VxWrapperTool)"
-         # self.vxTool = \
-         #       theApp.toolsvc().retrieve('ToolSvc.VxWrapperTool')._itool
-         self.vxTool = \
-                 theApp.toolsvc().create('VxWrapperTool','VxWrapperTool',
-                         cppyy.Pointer(g.IInterface)(0))._itool
-
-         print "Getting JiveXML AlgTool (ToolSvc.EventData2XML)"
-         # self.visTool = \
-         #       theApp.toolsvc().retrieve('ToolSvc.EventData2XML')._itool
-         self.visTool = \
-                 theApp.toolsvc().create('EventData2XML','EventData2XML',
-                         cppyy.Pointer(g.IInterface)(0))._itool
-
-     # createAlgTools() ------------------------------------------------------
-
-
-     # -----------------------------------------------------------------------
-     def start(self):
-         """ """
-
-         print "Starting Multithreaded InteractiveServer:",
-         try:
-             # generate key if it wasn't specified as a command line option
-             if self.key == "":
-                 self.generateKey()
-
-             # choose random port before creating the server if the port number
-             # wasn't specified as a command line option
-             if self.serverPort == 0:
-                 self.generatePortAndMakeServer()
-             else:
-                 self.makeServer()
-
-             self.registerMethod(self.process)
-             # self.server.register_introspection_functions() # what for?
-
-             # don't initialise algtools if --no_algtools command line argument
-             if self.noAlgTools == False:
-                 self.createAlgTools()
-
-             self.printInfo()
-             self.runServer()
-         except Exception, why:
-             print "Exception occured."
-             print "Reason: %s" % why
-
-     # start() ---------------------------------------------------------------
-
-
-# class InteractiveServer ===================================================
-
-
-# ---------------------------------------------------------------------------
-def getArguments():
-     """Reading arguments when executing by execfile()"""
-
-     # default values
-     noAlgTools = False
-     serverPort = 0
-     serverKey = ""
-
-     if globals().has_key("argumentInteractiveServerNoAlgTools"):
-         if argumentInteractiveServerNoAlgTools:
-             noAlgTools = True
-
-     if globals().has_key("argumentInteractiveServerServerPort"):
-         port = argumentInteractiveServerServerPort
-         try:
-             serverPort = int(port)
-         except ValueError:
-             msg = "Incorrectly specified port number: %s" % port
-             raise Exception(msg)
-
-     if globals().has_key("argumentInteractiveServerServerKey"):
-         serverKey = argumentInteractiveServerServerKey
-
-     return (noAlgTools, serverPort, serverKey)
-
-# getArguments() ------------------------------------------------------------
-
-
-# ---------------------------------------------------------------------------
-def main():
-
-     try:
-         (noAlgTools, serverPort, key) = getArguments()
-     except Exception, why:
-         print "Exception occured while reading variable arguments, exit"
-         print "Reason: %s" % why
-         return
-
-     server = InteractiveServer(noAlgTools, serverPort, key)
-     server.start()
-
-# main() --------------------------------------------------------------------
-
-
-# ---------------------------------------------------------------------------
-if __name__ == "__main__":
-     main()
-# ---------------------------------------------------------------------------
diff --git a/graphics/AtlantisJava/share/MINERVA.jnlp b/graphics/AtlantisJava/share/MINERVA.jnlp
deleted file mode 100644
index f3e3897fe74f..000000000000
--- a/graphics/AtlantisJava/share/MINERVA.jnlp
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- JNLP webstart file for Atlantis event display for ATLAS -->
-<!-- MINERVA version -->
-<jnlp
-  spec="1.0+"
-  codebase="@CODEBASE@"
-  href="MINERVA.jnlp">
-  <information>
-    <title>Atlantis event display for ATLAS</title>
-    <vendor>Atlantis team</vendor>
-    <homepage href=""/> <!-- should be used from codebase -->
-    <description>Atlantis event display for ATLAS</description>
-    <!--    <icon href="files/goofy_favicon.ico"/>
-    <icon kind="splash" href="files/logo.gif"/> -->
-    <offline-allowed/> 
-    <shortcut online="false">
-      <desktop/>
-      <menu submenu="Atlantis event display"/>
-    </shortcut>
-  </information>
-  <security>
-      <all-permissions/>
-  </security>
-  <resources>
-      <j2se version="1.6+" max-heap-size="512m"/>
-
-      <jar href="lib/commons-cli-1.0.jar"/>
-      <jar href="lib/Jama.jar"/>
-      <jar href="lib/jas-aida-dev.jar"/>
-      <jar href="lib/jas-aida.jar"/>
-      <jar href="lib/jas-freehep-base.jar"/>
-      <jar href="lib/jas-freehep-hep.jar"/>
-      <jar href="lib/jas-jas-plotter.jar"/>
-      <jar href="lib/jas-jel.jar"/>
-      <jar href="lib/jas-JMinuit.jar"/>
-      <jar href="lib/jogl.jar"/>
-      <jar href="lib/jh.jar"/>
-      <jar href="lib/oncrpc.jar"/>
-      <jar href="lib/log4j-1.2.15.jar"/>
-      <jar href="lib/ostermillerutils_1_05_00.jar"/>
-      <jar href="lib/wired-base-4.0.beta.3-SNAPSHOT.jar"/>
-      <jar href="lib/ws-commons-util-1.0.2.jar"/>
-      <jar href="lib/xercesImpl.jar"/>
-      <jar href="lib/xml-apis.jar"/>
-      <jar href="lib/xmlrpc-client-3.1.jar"/>
-      <jar href="lib/xmlrpc-common-3.1.jar"/>
-      <jar href="lib/jlibeps.jar"/>
-      <jar href="lib/xmlrpc-server-3.1.jar"/>
-      <jar href="lib/commons-logging-1.1.jar"/>
-      <jar href="lib/commons-codec-1.4.jar"/>
-      <jar href="lib/xml-apis-ext.jar"/>
-      <jar href="lib/batik-dom.jar"/>
-      <jar href="lib/batik-anim.jar"/>
-      <jar href="lib/batik-svggen.jar"/>
-      <jar href="lib/batik-css.jar"/>
-      <jar href="lib/batik-bridge.jar"/>
-      <jar href="lib/batik-parser.jar"/>
-      <jar href="lib/batik-xml.jar"/>
-      <jar href="lib/batik-gui-util.jar"/>
-      <jar href="lib/batik-script.jar"/>
-      <jar href="lib/batik-transcoder.jar"/>
-      <jar href="lib/batik-svg-dom.jar"/>
-      <jar href="lib/batik-extension.jar"/>
-      <jar href="lib/batik-codec.jar"/>
-      <jar href="lib/batik-util.jar"/>
-      <jar href="lib/batik-swing.jar"/>
-      <jar href="lib/batik-ext.jar"/>
-      <jar href="lib/batik-gvt.jar"/>
-      <jar href="lib/batik-awt-util.jar"/>
-      <jar href="help/help.jar"/>
-
-      <jar href="atlantis.jar" main="true"/> <!-- look for main class here -->
-  </resources>
-
-  <application-desc main-class="atlantis.Atlantis">
-    <argument>--config</argument>
-    <argument>configuration/config-MINERVA.xml</argument>
-    <argument>--debug</argument>
-    <argument>DEBUG</argument>
-    <argument>--source</argument>
-    <argument>http://www.cern.ch/atlas-minerva/MINERVA_tutorial_events.zip</argument>
-  </application-desc>
-
-</jnlp> 
diff --git a/graphics/AtlantisJava/share/atlantis b/graphics/AtlantisJava/share/atlantis
deleted file mode 100755
index d9e99ce0a1c3..000000000000
--- a/graphics/AtlantisJava/share/atlantis
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-# running Atlantis in the Athena environment
-
-# Check JRE version. Workaround because "java -version:1.6+" does not work on lxplus
-JAVAVERSION=`java -version 2>&1 | grep "java version" | awk '{print $3}' | tr -d \" | awk '{split($0, array, ".")} END{print array[2]}'`
-if [[ $JAVAVERSION -lt 6 ]]; then
-    echo "Atlantis required Java version 1.6 or greater"
-    exit 1
-fi
-
-ATLANTISJAVA_HOME=`dirname $0`/../AtlantisJava
-java -Xms128m -Xmx1024m -jar $ATLANTISJAVA_HOME/atlantis.jar $*
diff --git a/graphics/AtlantisJava/share/atlantis.jnlp b/graphics/AtlantisJava/share/atlantis.jnlp
deleted file mode 100644
index 39612b50c59d..000000000000
--- a/graphics/AtlantisJava/share/atlantis.jnlp
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- JNLP webstart file for Atlantis event display for ATLAS -->
-<jnlp
-  spec="1.0+"
-  codebase="@CODEBASE@"
-  href="atlantis.jnlp">
-  <information>
-    <title>Atlantis event display for ATLAS</title>
-    <vendor>Atlantis team</vendor>
-    <homepage href=""/> <!-- should be used from codebase -->
-    <description>Atlantis event display for ATLAS</description>
-    <!--    <icon href="files/goofy_favicon.ico"/>
-    <icon kind="splash" href="files/logo.gif"/> -->
-    <offline-allowed/> 
-    <shortcut online="false">
-      <desktop/>
-      <menu submenu="Atlantis event display"/>
-    </shortcut>
-  </information>
-  <security>
-      <all-permissions/>
-  </security>
-  <resources>
-      <j2se version="1.6+" max-heap-size="512m"/>
-
-      <jar href="lib/commons-cli-1.0.jar"/>
-      <jar href="lib/Jama.jar"/>
-      <jar href="lib/jas-aida-dev.jar"/>
-      <jar href="lib/jas-aida.jar"/>
-      <jar href="lib/jas-freehep-base.jar"/>
-      <jar href="lib/jas-freehep-hep.jar"/>
-      <jar href="lib/jas-jas-plotter.jar"/>
-      <jar href="lib/jas-jel.jar"/>
-      <jar href="lib/jas-JMinuit.jar"/>
-      <jar href="lib/jogl.jar"/>
-      <jar href="lib/jh.jar"/>
-      <jar href="lib/oncrpc.jar"/>
-      <jar href="lib/log4j-1.2.15.jar"/>
-      <jar href="lib/ostermillerutils_1_05_00.jar"/>
-      <jar href="lib/wired-base-4.0.beta.3-SNAPSHOT.jar"/>
-      <jar href="lib/ws-commons-util-1.0.2.jar"/>
-      <jar href="lib/xercesImpl.jar"/>
-      <jar href="lib/xml-apis.jar"/>
-      <jar href="lib/xmlrpc-client-3.1.jar"/>
-      <jar href="lib/xmlrpc-common-3.1.jar"/>
-      <jar href="lib/jlibeps.jar"/>
-      <jar href="lib/xmlrpc-server-3.1.jar"/>
-      <jar href="lib/commons-logging-1.1.jar"/>
-      <jar href="lib/commons-codec-1.4.jar"/>
-      <jar href="lib/xml-apis-ext.jar"/>
-      <jar href="lib/batik-dom.jar"/>
-      <jar href="lib/batik-anim.jar"/>
-      <jar href="lib/batik-svggen.jar"/>
-      <jar href="lib/batik-css.jar"/>
-      <jar href="lib/batik-bridge.jar"/>
-      <jar href="lib/batik-parser.jar"/>
-      <jar href="lib/batik-xml.jar"/>
-      <jar href="lib/batik-gui-util.jar"/>
-      <jar href="lib/batik-script.jar"/>
-      <jar href="lib/batik-transcoder.jar"/>
-      <jar href="lib/batik-svg-dom.jar"/>
-      <jar href="lib/batik-extension.jar"/>
-      <jar href="lib/batik-codec.jar"/>
-      <jar href="lib/batik-util.jar"/>
-      <jar href="lib/batik-swing.jar"/>
-      <jar href="lib/batik-ext.jar"/>
-      <jar href="lib/batik-gvt.jar"/>
-      <jar href="lib/batik-awt-util.jar"/>
-
-      <jar href="help/help.jar"/>
-
-      <jar href="atlantis.jar" main="true"/> <!-- look for main class here -->
-  </resources>
-
-  <application-desc main-class="atlantis.Atlantis">
-    <argument>--debug</argument>
-    <argument>DEBUG</argument>
-  </application-desc>
-
-</jnlp> 
-
diff --git a/graphics/AtlantisJava/share/atlantis_online b/graphics/AtlantisJava/share/atlantis_online
deleted file mode 100755
index 1d9cace7cfa0..000000000000
--- a/graphics/AtlantisJava/share/atlantis_online
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-# running Atlantis in the TDAQ online environment
-# This requires the TDAQ_JAVA_HOME to be defined in the enviroment
-
-JAVA=$TDAQ_JAVA_HOME/bin/java
-
-# Check JRE version. Workaround because "java -version:1.6+" does not work on lxplus
-JAVAVERSION=`$JAVA -version 2>&1 | grep "java version" | awk '{print $3}' | tr -d \" | awk '{split($0, array, ".")} END{print array[2]}'`
-if [[ $JAVAVERSION -lt 6 ]]; then
-    echo "Atlantis required Java version 1.6 or greater"
-    exit 1
-fi
-
-exec $JAVA -Xms128m -Xmx1024m -jar $EVENTDISPLAY_SW_INST_PATH/share/AtlantisJava/atlantis.jar $*
diff --git a/graphics/AtlantisJava/share/ntupleXML.h b/graphics/AtlantisJava/share/ntupleXML.h
deleted file mode 100644
index c1282f14004b..000000000000
--- a/graphics/AtlantisJava/share/ntupleXML.h
+++ /dev/null
@@ -1,1351 +0,0 @@
-//ntupleXML v1.0 - Tim Martin - Aug 07 - tamartin@cern.ch
-//Classes TopViewXML and EventViewXML to output ntuple
-//events to a Atlantis readable xml file
-
-#include "TXMLEngine.h"
-#include <TChain.h>
-#include <TFriendElement.h>
-#include <TFile.h>
-
-#include <iostream>
-#include <string>
-#include <sstream>
-#include <vector>
-#include <iomanip>
-
-//Main class, TopView and EventView classes inherit from this
-class ntupleXML  {
-	protected:
-		std::string 	dataTypeCon, etaCon, labelCon, pdgIdCon, phiCon, ptCon, typeEVCon, mainTreeName;
-		Bool_t 		FR_Active, TR_Active, FRA_Active, TRA_Active, TA_Active, isTopView;
-		Int_t		nParticles, Warn, truthPref, Append;
-		TChain* 	activeFile;
-		vector<TChain*>	fileStore;
-		TTree*		activeTree;
-		TFriendElement*	friendTree;
-		TXMLEngine* 	TVXMLEng;
-		XMLNodePointer_t	event;
-   		Int_t           FR_eventNumber;
-   		Int_t           FR_runNumber;
-		Double_t	FR_MET_Final_ex;
-		Double_t	FR_MET_Final_ey;
-		Double_t	FR_MET_Final_et;
-		Double_t	TR_MET_Truth_ex;
-		Double_t	TR_MET_Truth_ey;
-		Double_t	TR_MET_Truth_et;
-   		Int_t           FR_El_N;
-   		vector<double>*  FR_El_pdgId;
-  		vector<double>*  FR_El_p_T;
-  		vector<double>*  FR_El_phi;
-   		vector<double>*  FR_El_eta;
-   		Int_t            FR_Mu_N;
-   		vector<double>*  FR_Mu_pdgId;
-  		vector<double>*  FR_Mu_p_T;
-  		vector<double>*  FR_Mu_phi;
-   		vector<double>*  FR_Mu_eta;
-   		Int_t            FR_Tau_N;
-   		vector<double>*  FR_Tau_pdgId;
-  		vector<double>*  FR_Tau_p_T;
-  		vector<double>*  FR_Tau_phi;
-   		vector<double>*  FR_Tau_eta;
-   		Int_t            FR_Ph_N;
-   		vector<double>*  FR_Ph_pdgId;
-  		vector<double>*  FR_Ph_p_T;
-  		vector<double>*  FR_Ph_phi;
-   		vector<double>*  FR_Ph_eta;
-   		Int_t            FR_PJet_N;
-   		vector<double>*  FR_PJet_pdgId;
-   		vector<double>*  FR_PJet_p_T;
-   		vector<double>*  FR_PJet_phi;
-   		vector<double>*  FR_PJet_eta;
-   		vector<int>*	 FR_PJet_BTagged;
-		Int_t		 FRA_El_N;
-   		vector<double>*  FRA_El_pdgId;
-  		vector<double>*  FRA_El_p_T;
-  		vector<double>*  FRA_El_phi;
-   		vector<double>*  FRA_El_eta;
-   		Int_t            FRA_Mu_N;
-   		vector<double>*  FRA_Mu_pdgId;
-  		vector<double>*  FRA_Mu_p_T;
-  		vector<double>*  FRA_Mu_phi;
-   		vector<double>*  FRA_Mu_eta;
-   		Int_t            FRA_Nu_N;
-   		vector<double>*  FRA_Nu_pdgId;
-  		vector<double>*  FRA_Nu_p_T;
-  		vector<double>*  FRA_Nu_phi;
-   		vector<double>*  FRA_Nu_eta;
-   		Int_t            FRA_HadW_N;
-   		vector<double>*  FRA_HadW_pdgId;
-  		vector<double>*  FRA_HadW_p_T;
-  		vector<double>*  FRA_HadW_phi;
-   		vector<double>*  FRA_HadW_eta;
-   		Int_t            FRA_LepW_N;
-   		vector<double>*  FRA_LepW_pdgId;
-  		vector<double>*  FRA_LepW_p_T;
-  		vector<double>*  FRA_LepW_phi;
-   		vector<double>*  FRA_LepW_eta;
-   		Int_t            FRA_HadTop_N;
-   		vector<double>*  FRA_HadTop_pdgId;
-  		vector<double>*  FRA_HadTop_p_T;
-  		vector<double>*  FRA_HadTop_phi;
-   		vector<double>*  FRA_HadTop_eta;
-   		Int_t            FRA_LepTop_N;
-   		vector<double>*  FRA_LepTop_pdgId;
-  		vector<double>*  FRA_LepTop_p_T;
-  		vector<double>*  FRA_LepTop_phi;
-   		vector<double>*  FRA_LepTop_eta;
-   		Int_t            FRA_Lepb_N;
-   		vector<double>*  FRA_Lepb_pdgId;
-  		vector<double>*  FRA_Lepb_p_T;
-  		vector<double>*  FRA_Lepb_phi;
-   		vector<double>*  FRA_Lepb_eta;
-   		Int_t            FRA_Hadb_N;
-   		vector<double>*  FRA_Hadb_pdgId;
-  		vector<double>*  FRA_Hadb_p_T;
-  		vector<double>*  FRA_Hadb_phi;
-   		vector<double>*  FRA_Hadb_eta;
-   		Int_t            FRA_Hadj_N;
-   		vector<double>*  FRA_Hadj_pdgId;
-  		vector<double>*  FRA_Hadj_p_T;
-  		vector<double>*  FRA_Hadj_phi;
-   		vector<double>*  FRA_Hadj_eta;
-		Int_t		 TRA_El_N;
-   		vector<double>*  TRA_El_pdgId;
-  		vector<double>*  TRA_El_p_T;
-  		vector<double>*  TRA_El_phi;
-   		vector<double>*  TRA_El_eta;
-   		Int_t            TRA_Mu_N;
-   		vector<double>*  TRA_Mu_pdgId;
-  		vector<double>*  TRA_Mu_p_T;
-  		vector<double>*  TRA_Mu_phi;
-   		vector<double>*  TRA_Mu_eta;
-   		Int_t            TRA_Tau_N;
-   		vector<double>*  TRA_Tau_pdgId;
-  		vector<double>*  TRA_Tau_p_T;
-  		vector<double>*  TRA_Tau_phi;
-   		vector<double>*  TRA_Tau_eta;
-   		Int_t            TRA_HadW_N;
-   		vector<double>*  TRA_HadW_pdgId;
-  		vector<double>*  TRA_HadW_p_T;
-  		vector<double>*  TRA_HadW_phi;
-   		vector<double>*  TRA_HadW_eta;
-   		Int_t            TRA_LepW_N;
-   		vector<double>*  TRA_LepW_pdgId;
-  		vector<double>*  TRA_LepW_p_T;
-  		vector<double>*  TRA_LepW_phi;
-   		vector<double>*  TRA_LepW_eta;
-   		Int_t            TRA_HadTop_N;
-   		vector<double>*  TRA_HadTop_pdgId;
-  		vector<double>*  TRA_HadTop_p_T;
-  		vector<double>*  TRA_HadTop_phi;
-   		vector<double>*  TRA_HadTop_eta;
-   		Int_t            TRA_LepTop_N;
-   		vector<double>*  TRA_LepTop_pdgId;
-  		vector<double>*  TRA_LepTop_p_T;
-  		vector<double>*  TRA_LepTop_phi;
-   		vector<double>*  TRA_LepTop_eta;
-   		Int_t            TRA_Bot_N;
-   		vector<double>*  TRA_Bot_pdgId;
-  		vector<double>*  TRA_Bot_p_T;
-  		vector<double>*  TRA_Bot_phi;
-   		vector<double>*  TRA_Bot_eta;
-   		Int_t            TRA_LQ_N;
-   		vector<double>*  TRA_LQ_pdgId;
-  		vector<double>*  TRA_LQ_p_T;
-  		vector<double>*  TRA_LQ_phi;
-   		vector<double>*  TRA_LQ_eta;
-		vector<double>*	 TA_Tru_p_T;
-		vector<double>*	 TA_Tru_phi;
-		vector<double>*	 TA_Tru_eta;
-		vector<double>*	 TA_Tru_pdgId;
-		vector<int>*	 TA_Tru_barcode;
-   		TBranch*	b_FR_eventNumber;
-   		TBranch*	b_FR_runNumber;
-   		TBranch*	b_FR_MET_Final_ex;
-   		TBranch*	b_FR_MET_Final_ey;
-   		TBranch*	b_FR_MET_Final_et;
-   		TBranch*	b_TR_MET_Truth_ex;
-   		TBranch*	b_TR_MET_Truth_ey;
-   		TBranch*	b_TR_MET_Truth_et;
-   		TBranch*        b_FR_El_N;
-   		TBranch*        b_FR_El_pdgId;
-   		TBranch*        b_FR_El_p_T;
-   		TBranch*        b_FR_El_phi;
-   		TBranch*        b_FR_El_eta;
-   		TBranch*        b_FR_Mu_N;
-   		TBranch*        b_FR_Mu_pdgId;
-   		TBranch*        b_FR_Mu_p_T;
-   		TBranch*        b_FR_Mu_phi;
-   		TBranch*    	b_FR_Mu_eta;
-		TBranch*        b_FR_Tau_N;
-   		TBranch*        b_FR_Tau_pdgId;
-   		TBranch*        b_FR_Tau_p_T;
-   		TBranch*        b_FR_Tau_phi;
-   		TBranch*        b_FR_Tau_eta;
-   		TBranch*        b_FR_Ph_N;
-   		TBranch*        b_FR_Ph_pdgId;
-   		TBranch*        b_FR_Ph_p_T;
-   		TBranch*        b_FR_Ph_phi;
-   		TBranch*        b_FR_Ph_eta;
-   		TBranch*        b_FR_PJet_N;
-   		TBranch*        b_FR_PJet_pdgId;
-   		TBranch*        b_FR_PJet_p_T;
-   		TBranch*        b_FR_PJet_phi;
-   		TBranch*        b_FR_PJet_eta;
-   		TBranch* 	b_FR_PJet_BTagged;
-		TBranch*	b_FRA_El_N;
-   		TBranch*	b_FRA_El_pdgId;
-  		TBranch*	b_FRA_El_p_T;
-  		TBranch*	b_FRA_El_phi;
-   		TBranch*  	b_FRA_El_eta;
-   		TBranch*	b_FRA_Mu_N;
-   		TBranch*  	b_FRA_Mu_pdgId;
-  		TBranch*	b_FRA_Mu_p_T;
-  		TBranch*	b_FRA_Mu_phi;
- 		TBranch*	b_FRA_Mu_eta;
-   		TBranch*	b_FRA_Nu_N;
-   		TBranch*  	b_FRA_Nu_pdgId;
-  		TBranch*	b_FRA_Nu_p_T;
-  		TBranch*	b_FRA_Nu_phi;
- 		TBranch*	b_FRA_Nu_eta;
-   		TBranch*	b_FRA_HadW_N;
-   		TBranch*	b_FRA_HadW_pdgId;
-  		TBranch*	b_FRA_HadW_p_T;
-  		TBranch*	b_FRA_HadW_phi;
-   		TBranch*	b_FRA_HadW_eta;
-   		TBranch*	b_FRA_LepW_N;
-   		TBranch*	b_FRA_LepW_pdgId;
-  		TBranch*	b_FRA_LepW_p_T;
-  		TBranch*	b_FRA_LepW_phi;
-   		TBranch*	b_FRA_LepW_eta;
-   		TBranch*	b_FRA_HadTop_N;
-   		TBranch*	b_FRA_HadTop_pdgId;
-  		TBranch*	b_FRA_HadTop_p_T;
-  		TBranch*	b_FRA_HadTop_phi;
-   		TBranch*	b_FRA_HadTop_eta;
-   		TBranch*	b_FRA_LepTop_N;
-   		TBranch*	b_FRA_LepTop_pdgId;
-  		TBranch*	b_FRA_LepTop_p_T;
-  		TBranch*	b_FRA_LepTop_phi;
-   		TBranch*	b_FRA_LepTop_eta;
-   		TBranch*	b_FRA_Lepb_N;
-   		TBranch*	b_FRA_Lepb_pdgId;
-  		TBranch*	b_FRA_Lepb_p_T;
-  		TBranch*	b_FRA_Lepb_phi;
-   		TBranch*	b_FRA_Lepb_eta;
-   		TBranch*	b_FRA_Hadb_N;
-   		TBranch*	b_FRA_Hadb_pdgId;
-  		TBranch*	b_FRA_Hadb_p_T;
-  		TBranch*	b_FRA_Hadb_phi;
-   		TBranch*	b_FRA_Hadb_eta;
-   		TBranch*	b_FRA_Hadj_N;
-   		TBranch*	b_FRA_Hadj_pdgId;
-  		TBranch*	b_FRA_Hadj_p_T;
-  		TBranch*	b_FRA_Hadj_phi;
-   		TBranch*	b_FRA_Hadj_eta;
-		TBranch*	b_TRA_El_N;
-   		TBranch*	b_TRA_El_pdgId;
-  		TBranch*	b_TRA_El_p_T;
-  		TBranch*	b_TRA_El_phi;
-   		TBranch*	b_TRA_El_eta;
-   		TBranch*        b_TRA_Mu_N;
-   		TBranch*	b_TRA_Mu_pdgId;
-  		TBranch*	b_TRA_Mu_p_T;
-  		TBranch*	b_TRA_Mu_phi;
-   		TBranch*	b_TRA_Mu_eta;
-   		TBranch*        b_TRA_Tau_N;
-   		TBranch*	b_TRA_Tau_pdgId;
-  		TBranch*	b_TRA_Tau_p_T;
-  		TBranch*	b_TRA_Tau_phi;
-   		TBranch*	b_TRA_Tau_eta;
-   		TBranch*        b_TRA_HadW_N;
-   		TBranch*	b_TRA_HadW_pdgId;
-  		TBranch*	b_TRA_HadW_p_T;
-  		TBranch*	b_TRA_HadW_phi;
-   		TBranch*	b_TRA_HadW_eta;
-   		TBranch*        b_TRA_LepW_N;
-   		TBranch*	b_TRA_LepW_pdgId;
-  		TBranch*	b_TRA_LepW_p_T;
-  		TBranch*	b_TRA_LepW_phi;
-   		TBranch*	b_TRA_LepW_eta;
-   		TBranch*        b_TRA_HadTop_N;
-   		TBranch*	b_TRA_HadTop_pdgId;
-  		TBranch*	b_TRA_HadTop_p_T;
-  		TBranch*	b_TRA_HadTop_phi;
-   		TBranch*	b_TRA_HadTop_eta;
-   		TBranch*        b_TRA_LepTop_N;
-   		TBranch*	b_TRA_LepTop_pdgId;
-  		TBranch*	b_TRA_LepTop_p_T;
-  		TBranch*	b_TRA_LepTop_phi;
-   		TBranch*	b_TRA_LepTop_eta;
-   		TBranch*        b_TRA_Bot_N;
-   		TBranch*	b_TRA_Bot_pdgId;
-  		TBranch*	b_TRA_Bot_p_T;
-  		TBranch*	b_TRA_Bot_phi;
-   		TBranch*	b_TRA_Bot_eta;
-   		TBranch*        b_TRA_LQ_N;
-   		TBranch*	b_TRA_LQ_pdgId;
-  		TBranch*	b_TRA_LQ_p_T;
-  		TBranch*	b_TRA_LQ_phi;
-   		TBranch*	b_TRA_LQ_eta;
-		TBranch*	b_TA_Tru_p_T;
-		TBranch*	b_TA_Tru_phi;
-		TBranch*	b_TA_Tru_eta;
-		TBranch*	b_TA_Tru_pdgId;
-		TBranch*	b_TA_Tru_barcode;
-		//Protected memeber functions
-		template<typename TYPE>
-		std::string	asString(const TYPE&);
-		void 	SetBranches(void);
-		void	FillBranches(Int_t entryNumber);
-		void	SetActiveFile(Int_t fileNumber);
-		void	GetFullReco(void);
-		void	GetFullRecoAna(void);
-		void	GetTruthAll(Bool_t onlyMuons);
-		void	GetTruthAna(Bool_t onlyMuons);
-		void	GetMET(Bool_t getTruth);
-		void 	StartXML(void);
-		void 	FillXML_ParticleDump(Char_t* nodeName, Char_t* storeGateKey);
-		void 	FillXML_TruthDump(Char_t* nodeName, Char_t* storeGateKey);
-		void 	FillXML_MET(Char_t* storeGateKey);
-		void 	EndXML(Char_t* outputFilename);
-	public:
-		Bool_t 	ntuple2XML(Char_t* outputFilename, UInt_t entryNumber, UInt_t fileNumber);
-		void	Add(Char_t* fileLocation);
-		void	Clear(void);
-		Int_t	GetNfiles(void) { return fileStore.size(); }
-		Int_t	GetNentries(UInt_t fileNumber);
-		Bool_t	SetWarnLevel(UInt_t warnLevel);
-		Bool_t 	SetTruthPreference(UInt_t truthPreference);
-		Bool_t	SetFilenameAppend(UInt_t filenameAppend);
-		
-};
-
-struct TopViewXML: public ntupleXML {
-	TopViewXML(Char_t* fileLocation);
-	TopViewXML(void);
-	~TopViewXML(void) {}
-};
-
-struct EventViewXML: public ntupleXML {
-	EventViewXML(Char_t* fileLocation);
-	EventViewXML(void);
-	~EventViewXML(void) {}
-};
-
-//Constructors//
-
-TopViewXML::TopViewXML(Char_t* fileLocation) {
-	isTopView=1;
-	Append=1; Warn=1; truthPref=2;
-	mainTreeName = "FullReco0";
-	ntupleXML::Add(fileLocation);
-}
-
-TopViewXML::TopViewXML(void) {
-	isTopView=1;
-	Append=1; Warn=1; truthPref=2;
-	mainTreeName = "FullReco0";
-}
-
-EventViewXML::EventViewXML(Char_t* fileLocation) {
-	isTopView=0;
-	Append=1; Warn=1; truthPref=2;
-	mainTreeName = "CollectionTree";
-	ntupleXML::Add(fileLocation);
-}
-
-EventViewXML::EventViewXML(void) {
-	isTopView=0;
-	Append=1; Warn=1; truthPref=2;
-	mainTreeName = "CollectionTree";
-}		
-
-//Inherited public methods//
-
-//ntuple2XML takes an entry from a file loaded in the internal File Chain and writes an
-//atlantis xml file for the event.
-Bool_t ntupleXML::ntuple2XML(Char_t* outputFilename, UInt_t entryNumber, UInt_t fileNumber) {
-
-	if (fileNumber >= fileStore.size()) {
-		if (Warn>0) {	std::cout << "\nntupleXML: Error cannot access file #" << fileNumber
-			  		  << ", " << fileStore.size() << " file(s) currently loaded. ";
-		}
-		return 0;
-	}
-
-	//Set the required file as activeFile, main tree as activeTree & associate branches
-	ntupleXML::SetActiveFile(fileNumber);
-
-	if (entryNumber >= activeTree->GetEntries()) {
-		if (Warn>0) {	std::cout << "\nntupleXML: Error cannot access entry #" << entryNumber
-			  	<< ", file #" << fileNumber << " contains " << activeTree->GetEntries() << " entries. ";
-		}
-		return 0;
-	}
-
-	//Cannot proceed without FullReco/CollectionTree branches set
-	if (!FR_Active) { 
-		if (Warn>0) { std::cout << "\nntupleXML: Error unable to access " << mainTreeName << " Tree. "; }
-		return 0;
-	}
-
-	//Retrieve event
-	ntupleXML::FillBranches(entryNumber);
-	nParticles=0;
-
-	//Prepare XML document
-	ntupleXML::StartXML();
-
-	ntupleXML::GetFullReco();
-	if (nParticles) { ntupleXML::FillXML_ParticleDump("CompositeParticle","RecoView"); }
-
-	ntupleXML::GetMET(0);
-	ntupleXML::FillXML_MET("MET_Final");
-	if (TR_Active) {
-		ntupleXML::GetMET(1);
-		ntupleXML::FillXML_MET("MET_Truth");
-	} else if (Warn>1) { std::cout << "\nntupleXML: Warning unable to output MET_Truth. "; }
-
-	if (FRA_Active) {
-		ntupleXML::GetFullRecoAna(); 
-		if (nParticles) { ntupleXML::FillXML_ParticleDump("CompositeParticle","RecoAnaView"); }
-	} else if (Warn>1 && isTopView) { std::cout << "\nntupleXML: Warning unable to output FullRecoAna Tree. "; }
-	
-	if (TA_Active && truthPref == 1) {
-		ntupleXML::GetTruthAll(0); 
-		if (nParticles) { ntupleXML::FillXML_TruthDump("STr",""); } 
-		ntupleXML::GetTruthAll(1); //Get only muons
-		if (nParticles) { ntupleXML::FillXML_TruthDump("SMTr",""); }
-	} else if (TRA_Active && truthPref) { 
-		ntupleXML::GetTruthAna(0);
-		if (nParticles) { ntupleXML::FillXML_TruthDump("STr",""); }	
-		ntupleXML::GetTruthAna(1);
-		if (nParticles) { ntupleXML::FillXML_TruthDump("SMTr",""); }
-	} else if (Warn>1 && truthPref && isTopView) { 
-		std::cout << "\nntupleXML: Warning unable to output TruthAna or TruthAll Tree. ";
-	}
-
-	//Construct filename
-	std::string filenameStr(outputFilename), ext;
-	ext = filenameStr.substr(filenameStr.length() - 4, 4);
-	if (Append) { 
-			if (ext == ".xml" || ext == ".Xml" || ext == ".XML") {
-				filenameStr = filenameStr.substr(0, filenameStr.length() - 4) ;
-				if (Append==1) { filenameStr += "_" + asString(FR_eventNumber) + ext; }
-				else { filenameStr += "_" + asString(entryNumber) + ext; }
-			} else { 
-				if (Append==1) { filenameStr += "_" + asString(FR_eventNumber) + ".xml"; }
-				else { filenameStr += "_" + asString(entryNumber) + ".xml"; }
-			 }
-	} else {
-			if (!(ext == ".xml" || ext == ".Xml" || ext == ".XML")) {
-				filenameStr += ".xml";
-			}
-	}
-
-	//Write .xml file
-	ntupleXML::EndXML((Char_t*) filenameStr.c_str());
-	if (Warn>1) { std::cout << "\nntupleXML: Output to " << filenameStr; }
-
-	//Return success
-	return 1;
-}
-
-Bool_t ntupleXML::SetWarnLevel(UInt_t warnLevel) {
-	if (warnLevel <= 2) {
-		Warn=warnLevel;
-		return 1;
-	} else { return 0; }
-}
-
-Bool_t ntupleXML::SetTruthPreference(UInt_t truthPreference) {
-	if (truthPreference <= 2) {
-		truthPref=truthPreference;
-		return 1;
-	} else { return 0; }
-}
-
-Bool_t ntupleXML::SetFilenameAppend(UInt_t filenameAppend) {
-	if (filenameAppend <= 2) {
-		Append=filenameAppend;
-		return 1;
-	} else { return 0; }
-}
-		
-Int_t ntupleXML::GetNentries(UInt_t fileNumber) {
-	if (fileNumber >= fileStore.size()) {
-		if (Warn>0) { std::cout << "\nntupleXML: Error cannot access file #" << fileNumber
-			                << ", " << fileStore.size() << " file(s) currently loaded. ";
-		}
-		return 0;
-	} else {
-		ntupleXML::SetActiveFile(fileNumber);
-		return activeTree->GetEntries();
-	}
-}
-
-void ntupleXML::Add(Char_t* fileLocation) {
-	TChain* tf;
-	if (isTopView) {
-		tf = new TChain("FullReco0");
-		tf->Add(fileLocation);
-		tf->AddFriend("FullRecoAna0");
-		tf->AddFriend("TruthAna0");
-		tf->AddFriend("TruthAll0");
-		tf->AddFriend("Truth0");
-		if ( tf->LoadTree(0) < 0 ) {
-			if (Warn>0) { std::cout << "\nntupleXML: Error, file was not added. "; }
-			return; 
-		}
-	} else {
-		tf = new TChain("CollectionTree");
-		tf->Add(fileLocation);
-		if ( tf->LoadTree(0) < 0 ) {			
-			if (Warn>0) { std::cout << "\nntupleXML: Error, file was not added. "; }
-			return; 
-		}
-
-	}
-	fileStore.push_back(tf);
-}
-
-void ntupleXML::Clear(void) {
-	for (UInt_t i=0; i<fileStore.size(); i++) {
-		delete fileStore[i];
-	}
-	fileStore.clear();
-	activeFile = NULL;
-}
-
-//XML File Construction Members//
-
-void ntupleXML::StartXML(void) {
-	//Create XML engine
-   	TVXMLEng = new TXMLEngine();
-   	event = TVXMLEng->NewChild(0, 0, "Event");
-   	TVXMLEng->NewAttr(event, 0, "version", "ntuple");
-   	TVXMLEng->NewIntAttr(event, "runNumber", FR_runNumber);
-   	TVXMLEng->NewIntAttr(event, "eventNumber", FR_eventNumber);
-	TDatime* makeTime = new TDatime();
-	Char_t makeTimeStr[26];
-	makeTime->AsString(makeTimeStr);	//This 'AsString' is member of TDatime
-	delete makeTime;
-   	TVXMLEng->NewAttr(event, 0, "dateTime", makeTimeStr);
-}
-
-void ntupleXML::FillXML_ParticleDump(Char_t* nodeName, Char_t* storeGateKey) {
-	//Create Composite particle subnode
-      	XMLNodePointer_t compPart = TVXMLEng->NewChild(event, 0, nodeName);
-      	TVXMLEng->NewIntAttr(compPart, "count", nParticles);
-     	TVXMLEng->NewAttr(compPart, 0, "storeGateKey", storeGateKey);
-		TVXMLEng->NewChild(compPart, 0, "dataType", dataTypeCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "eta", etaCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "label", labelCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "pdgId", pdgIdCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "phi", phiCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "pt", ptCon.c_str());
-		TVXMLEng->NewChild(compPart, 0, "typeEV", typeEVCon.c_str());
-	dataTypeCon=""; etaCon=""; phiCon=""; labelCon=""; pdgIdCon=""; ptCon=""; typeEVCon="";
-	nParticles=0;
-}
-
-void ntupleXML::FillXML_TruthDump(Char_t* nodeName, Char_t* storeGateKey) {
-	//Create truth subnode
-      	XMLNodePointer_t truBlock = TVXMLEng->NewChild(event, 0, nodeName);
-      	TVXMLEng->NewIntAttr(truBlock, "count", nParticles);
-     	TVXMLEng->NewAttr(truBlock, 0, "storeGateKey", storeGateKey);
-		TVXMLEng->NewChild(truBlock, 0, "code", pdgIdCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "eta", etaCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "id", labelCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "phi", phiCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "phiVertex", dataTypeCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "pt", ptCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "rhoVertex", dataTypeCon.c_str());
-		TVXMLEng->NewChild(truBlock, 0, "zVertex", dataTypeCon.c_str());
-	dataTypeCon=""; etaCon=""; phiCon=""; labelCon=""; pdgIdCon=""; ptCon="";
-	nParticles=0;
-}
-
-void ntupleXML::FillXML_MET(Char_t* storeGateKey) {
-	//Create MET subnode
-      	XMLNodePointer_t MET = TVXMLEng->NewChild(event, 0, "ETMis");
-      	TVXMLEng->NewIntAttr(MET, "count", 1);
-     	TVXMLEng->NewAttr(MET, 0, "storeGateKey", storeGateKey);
-		TVXMLEng->NewChild(MET, 0, "et", etaCon.c_str());
-		TVXMLEng->NewChild(MET, 0, "etx", phiCon.c_str());
-		TVXMLEng->NewChild(MET, 0, "ety", ptCon.c_str());
-	etaCon=""; phiCon=""; ptCon="";
-}
-
-void ntupleXML::EndXML(Char_t* outputFilename) {
-	//Create document 
-   	XMLDocPointer_t xmldoc = TVXMLEng->NewDoc();
-   	TVXMLEng->DocSetRootElement(xmldoc, event);
-   	TVXMLEng->AddDocRawLine(xmldoc, "<?ATLAS Release: \"RELEASE#\"?>");
-   	TVXMLEng->AddDocRawLine(xmldoc, "<!DOCTYPE Event SYSTEM \"event.dtd\">");
-   	// Save document to file
-   	TVXMLEng->SaveDoc(xmldoc, outputFilename);
-   	// Release memory before exit
-   	TVXMLEng->FreeDoc(xmldoc);
-   	delete TVXMLEng;
-}
-
-//String Filling Members//
-
-void ntupleXML::GetFullReco(void) {
-	std::string id;
-	if (isTopView) { id = "FR_"; }
-	else { id = "EV_"; }
-	for (Int_t i=0; i<FR_El_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVElectron ";
-		labelCon    += id + "Electron ";
-		etaCon      += asString(FR_El_eta->at(i)) + " ";
-		phiCon      += asString(FR_El_phi->at(i)) + " ";
-		ptCon       += asString(FR_El_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FR_El_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FR_Mu_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVMuon ";
-		labelCon    += id + "Muon ";
-		etaCon      += asString(FR_Mu_eta->at(i)) + " ";
-		phiCon      += asString(FR_Mu_phi->at(i)) + " ";
-		ptCon       += asString(FR_Mu_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FR_Mu_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FR_Tau_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVTauJet ";
-		labelCon    += id + "Tau ";
-		etaCon      += asString(FR_Tau_eta->at(i)) + " ";
-		phiCon      += asString(FR_Tau_phi->at(i)) + " ";
-		ptCon       += asString(FR_Tau_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FR_Tau_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FR_Ph_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVPhoton ";
-		labelCon    += id + "Photon ";
-		etaCon      += asString(FR_Ph_eta->at(i)) + " ";
-		phiCon      += asString(FR_Ph_phi->at(i)) + " ";
-		ptCon       += asString(FR_Ph_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FR_Ph_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FR_PJet_N; i++) {
-		if (isTopView) {
-			if (FR_PJet_BTagged->at(i)) { 
-				typeEVCon   += "EVBJet ";
-				labelCon    += id + "BTaggedJet ";
-				pdgIdCon    += "5 ";		
-			} else {
-				typeEVCon   += "EVParticleJet ";
-				labelCon    += id + "ParticleJet ";
-				pdgIdCon    += "0 ";	
-			}
-		} else {
-			typeEVCon   += "EVParticleJet ";
-			labelCon    += id + "ParticleJet ";
-			pdgIdCon    += "5 ";	
-		}
-		nParticles++;
-		dataTypeCon += "1 ";
-		etaCon      += asString(FR_PJet_eta->at(i)) + " ";
-		phiCon      += asString(FR_PJet_phi->at(i)) + " ";
-		ptCon       += asString(FR_PJet_p_T->at(i)/1000.)  + " ";
-	}
-}
-
-void ntupleXML::GetMET(Bool_t getTruth) {
-	if (!getTruth) {
-		etaCon	+= asString(FR_MET_Final_et/1000.) + " ";
-		phiCon	+= asString(FR_MET_Final_ex/1000.) + " ";
-		ptCon	+= asString(FR_MET_Final_ey/1000.) + " ";
-	} else {
-		etaCon	+= asString(TR_MET_Truth_et/1000.) + " ";
-		phiCon	+= asString(TR_MET_Truth_ex/1000.) + " ";
-		ptCon	+= asString(TR_MET_Truth_ey/1000.) + " ";
-	}
-}
-
-void ntupleXML::GetFullRecoAna(void) {
-	for (Int_t i=0; i<FRA_El_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVElectron ";
-		labelCon    += "FRA_Electron ";
-		etaCon      += asString(FRA_El_eta->at(i)) + " ";
-		phiCon      += asString(FRA_El_phi->at(i)) + " ";
-		ptCon       += asString(FRA_El_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_El_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_Mu_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVMuon ";
-		labelCon    += "FRA_Muon ";
-		etaCon      += asString(FRA_Mu_eta->at(i)) + " ";
-		phiCon      += asString(FRA_Mu_phi->at(i)) + " ";
-		ptCon       += asString(FRA_Mu_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_Mu_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_Nu_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVNeutrino ";
-		labelCon    += "FRA_Neutrino ";
-		etaCon      += asString(FRA_Nu_eta->at(i)) + " ";
-		phiCon      += asString(FRA_Nu_phi->at(i)) + " ";
-		ptCon       += asString(FRA_Nu_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_Nu_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_HadW_N; i++) {
-		nParticles++;
-		dataTypeCon += "0 ";
-		typeEVCon   += "EVCompositeParticle ";
-		labelCon    += "FRA_HadronicW ";
-		etaCon      += asString(FRA_HadW_eta->at(i)) + " ";
-		phiCon      += asString(FRA_HadW_phi->at(i)) + " ";
-		ptCon       += asString(FRA_HadW_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_HadW_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_LepW_N; i++) {
-		nParticles++;
-		dataTypeCon += "0 ";
-		typeEVCon   += "EVCompositeParticle ";
-		labelCon    += "FRA_LeptonicW ";
-		etaCon      += asString(FRA_LepW_eta->at(i)) + " ";
-		phiCon      += asString(FRA_LepW_phi->at(i)) + " ";
-		ptCon       += asString(FRA_LepW_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_LepW_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_HadTop_N; i++) {
-		nParticles++;
-		dataTypeCon += "0 ";
-		typeEVCon   += "EVCompositeParticle ";
-		labelCon    += "FRA_HadronicTop ";
-		etaCon      += asString(FRA_HadTop_eta->at(i)) + " ";
-		phiCon      += asString(FRA_HadTop_phi->at(i)) + " ";
-		ptCon       += asString(FRA_HadTop_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_HadTop_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_LepTop_N; i++) {
-		nParticles++;
-		dataTypeCon += "0 ";
-		typeEVCon   += "EVCompositeParticle ";
-		labelCon    += "FRA_LeptonicTop ";
-		etaCon      += asString(FRA_LepTop_eta->at(i)) + " ";
-		phiCon      += asString(FRA_LepTop_phi->at(i)) + " ";
-		ptCon       += asString(FRA_LepTop_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)FRA_LepTop_pdgId->at(i))  + " ";
-	}
-	for (Int_t i=0; i<FRA_Lepb_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVBJet ";
-		labelCon    += "FRA_LeptonicBJet ";
-		etaCon      += asString(FRA_Lepb_eta->at(i)) + " ";
-		phiCon      += asString(FRA_Lepb_phi->at(i)) + " ";
-		ptCon       += asString(FRA_Lepb_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += "5 ";
-	}
-	for (Int_t i=0; i<FRA_Hadb_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVBJet ";
-		labelCon    += "FRA_HadronicBJet ";
-		etaCon      += asString(FRA_Hadb_eta->at(i)) + " ";
-		phiCon      += asString(FRA_Hadb_phi->at(i)) + " ";
-		ptCon       += asString(FRA_Hadb_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += "5 ";
-	}
-	for (Int_t i=0; i<FRA_Hadj_N; i++) {
-		nParticles++;
-		dataTypeCon += "1 ";
-		typeEVCon   += "EVParticleJet ";
-		labelCon    += "FRA_HadronicParticleJet ";
-		etaCon      += asString(FRA_Hadj_eta->at(i)) + " ";
-		phiCon      += asString(FRA_Hadj_phi->at(i)) + " ";
-		ptCon       += asString(FRA_Hadj_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += "0 ";
-	}
-}
-
-//onlyMouns is set true when filling SMTr
-void ntupleXML::GetTruthAna(Bool_t onlyMuons) {
-	Int_t sign;
-	for (Int_t i=0; i<TRA_Mu_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_Mu_eta->at(i)) + " ";
-		phiCon      += asString(TRA_Mu_phi->at(i)) + " ";
-		ptCon       += asString(TRA_Mu_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)TRA_Mu_pdgId->at(i))  + " ";
-		labelCon    += "0 ";		//Barcode
-		dataTypeCon += "0.000001 ";	//Used to fill vertexes
-	}
-
-	if (onlyMuons) { return; }
-
-	for (Int_t i=0; i<TRA_El_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_El_eta->at(i)) + " ";
-		phiCon      += asString(TRA_El_phi->at(i)) + " ";
-		ptCon       += asString(TRA_El_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)TRA_El_pdgId->at(i))  + " ";
-		labelCon    += "0 ";
-		dataTypeCon += " 0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_Tau_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_Tau_eta->at(i)) + " ";
-		phiCon      += asString(TRA_Tau_phi->at(i)) + " ";
-		ptCon       += asString(TRA_Tau_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)TRA_Tau_pdgId->at(i))  + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_HadW_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_HadW_eta->at(i)) + " ";
-		phiCon      += asString(TRA_HadW_phi->at(i)) + " ";
-		ptCon       += asString(TRA_HadW_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)TRA_HadW_pdgId->at(i))  + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_LepW_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_LepW_eta->at(i)) + " ";
-		phiCon      += asString(TRA_LepW_phi->at(i)) + " ";
-		ptCon       += asString(TRA_LepW_p_T->at(i)/1000.)  + " ";
-		pdgIdCon    += asString((Int_t)TRA_LepW_pdgId->at(i))  + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_HadTop_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_HadTop_eta->at(i)) + " ";
-		phiCon      += asString(TRA_HadTop_phi->at(i)) + " ";
-		ptCon       += asString(TRA_HadTop_p_T->at(i)/1000.)  + " ";
-		sign 	     = (Int_t) (fabs(TRA_HadTop_pdgId->at(i))/TRA_HadTop_pdgId->at(i));
-		pdgIdCon    += asString((Int_t)(TRA_HadTop_pdgId->at(i)+(600*sign))) + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_LepTop_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_LepTop_eta->at(i)) + " ";
-		phiCon      += asString(TRA_LepTop_phi->at(i)) + " ";
-		ptCon       += asString(TRA_LepTop_p_T->at(i)/1000.)  + " ";
-		sign 	     = (Int_t) (fabs(TRA_LepTop_pdgId->at(i))/TRA_LepTop_pdgId->at(i));
-		pdgIdCon    += asString((Int_t)(TRA_LepTop_pdgId->at(i)+(600*sign))) + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_Bot_N; i++) {
-		nParticles++;
-		etaCon      += asString(TRA_Bot_eta->at(i)) + " ";
-		phiCon      += asString(TRA_Bot_phi->at(i)) + " ";
-		ptCon       += asString(TRA_Bot_p_T->at(i)/1000.)  + " ";
-		sign 	     = (Int_t) (fabs(TRA_Bot_pdgId->at(i))/TRA_Bot_pdgId->at(i));
-		pdgIdCon    += asString((Int_t)(TRA_Bot_pdgId->at(i)+(600*sign))) + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-	for (Int_t i=0; i<TRA_LQ_N; i++) {	//LQ - Light Quarks
-		nParticles++;
-		etaCon      += asString(TRA_LQ_eta->at(i)) + " ";
-		phiCon      += asString(TRA_LQ_phi->at(i)) + " ";
-		ptCon       += asString(TRA_LQ_p_T->at(i)/1000.)  + " ";
-		sign 	     = (Int_t) (fabs(TRA_LQ_pdgId->at(i))/TRA_LQ_pdgId->at(i));
-		pdgIdCon    += asString((Int_t)(TRA_LQ_pdgId->at(i)+(600*sign))) + " ";
-		labelCon    += "0 ";
-		dataTypeCon += "0.000001 ";
-	}
-}
-
-void ntupleXML::GetTruthAll(Bool_t onlyMuons) {
-	//Loop over entire truth block (if present)
-	Int_t id, sign;
-	for (UInt_t i=0; i<TA_Tru_p_T->size(); i++) {
-		if (!onlyMuons || (onlyMuons && fabs(TA_Tru_pdgId->at(i)) == 13)) {
-			nParticles++;
-			etaCon      += asString(TA_Tru_eta->at(i)) + " ";
-			phiCon      += asString(TA_Tru_phi->at(i)) + " ";
-			ptCon       += asString(TA_Tru_p_T->at(i)/1000.)  + " ";
-			id 	     = (Int_t) TA_Tru_pdgId->at(i);
-			sign 	     = (Int_t) (fabs(TA_Tru_pdgId->at(i))/TA_Tru_pdgId->at(i));
-			//Atlantis' True Particle Simulation ignores quarks, however with TopView
-			//we are interested in t and b quarks, 6 special pdgIds have therefore
-			//been set up in Atlantis (601-606) so as to display quarks from ntuples
-			if (abs(id) <= 6) { id += (600 * sign); }	
-			pdgIdCon    += asString(id)  + " ";
-			labelCon    += asString(TA_Tru_barcode->at(i))  + " ";
-			dataTypeCon += "0.000001 ";	//If zero, Atlantis crashes on eta-phi plot due to rhoVertex
-		}
-	}
-}
-
-//Branch Association//
-
-void ntupleXML::SetBranches(void) {
-	FR_El_pdgId = 0;
-	FR_El_p_T = 0;
-	FR_El_phi = 0;
-	FR_El_eta = 0;
-	FR_Mu_pdgId = 0;
-	FR_Mu_p_T = 0;
-	FR_Mu_phi = 0;
-	FR_Mu_eta = 0;
-	FR_Tau_pdgId = 0;
-	FR_Tau_p_T = 0;
-	FR_Tau_phi = 0;
-	FR_Tau_eta = 0;
-	FR_Ph_pdgId = 0;
-	FR_Ph_p_T = 0;
-	FR_Ph_phi = 0;
-	FR_Ph_eta = 0;
-	FR_PJet_pdgId = 0;
-	FR_PJet_p_T = 0;
-	FR_PJet_phi = 0;
-	FR_PJet_eta = 0;
-	FR_PJet_BTagged = 0;
-   	FRA_El_pdgId = 0;
-  	FRA_El_p_T = 0;
-  	FRA_El_phi = 0;
-   	FRA_El_eta = 0;
-   	FRA_Mu_pdgId = 0;
-  	FRA_Mu_p_T = 0;
-  	FRA_Mu_phi = 0;
-   	FRA_Mu_eta = 0;
-   	FRA_Nu_pdgId = 0;
-  	FRA_Nu_p_T = 0;
-  	FRA_Nu_phi = 0;
-   	FRA_Nu_eta = 0;
-   	FRA_HadW_pdgId = 0;
-  	FRA_HadW_p_T = 0;
-  	FRA_HadW_phi = 0;
-   	FRA_HadW_eta = 0;
-   	FRA_LepW_pdgId = 0;
-  	FRA_LepW_p_T = 0;
-  	FRA_LepW_phi = 0;
-   	FRA_LepW_eta = 0;
-   	FRA_HadTop_pdgId = 0;
-  	FRA_HadTop_p_T = 0;
-  	FRA_HadTop_phi = 0;
-   	FRA_HadTop_eta = 0;
-   	FRA_LepTop_pdgId = 0;
-  	FRA_LepTop_p_T = 0;
-  	FRA_LepTop_phi = 0;
-   	FRA_LepTop_eta = 0;
-   	FRA_Lepb_pdgId = 0;
-  	FRA_Lepb_p_T = 0;
-  	FRA_Lepb_phi = 0;
-   	FRA_Lepb_eta = 0;
-   	FRA_Hadb_pdgId = 0;
-  	FRA_Hadb_p_T = 0;
-  	FRA_Hadb_phi = 0;
-   	FRA_Hadb_eta = 0;
-   	FRA_Hadj_pdgId = 0;
-  	FRA_Hadj_p_T = 0;
-  	FRA_Hadj_phi = 0;
-   	FRA_Hadj_eta = 0;
-   	TRA_El_pdgId = 0;
-  	TRA_El_p_T = 0;
-  	TRA_El_phi = 0;
-   	TRA_El_eta = 0;
-   	TRA_Mu_pdgId = 0;
-  	TRA_Mu_p_T = 0;
-  	TRA_Mu_phi = 0;
-   	TRA_Mu_eta = 0;
-   	TRA_Tau_pdgId = 0;
-  	TRA_Tau_p_T = 0;
-  	TRA_Tau_phi = 0;
-   	TRA_Tau_eta = 0;
-   	TRA_HadW_pdgId = 0;
-  	TRA_HadW_p_T = 0;
-  	TRA_HadW_phi = 0;
-   	TRA_HadW_eta = 0;
-   	TRA_LepW_pdgId = 0;
-  	TRA_LepW_p_T = 0;
-  	TRA_LepW_phi = 0;
-   	TRA_LepW_eta = 0;
-   	TRA_HadTop_pdgId = 0;
-  	TRA_HadTop_p_T = 0;
-  	TRA_HadTop_phi = 0;
-   	TRA_HadTop_eta = 0;
-   	TRA_LepTop_pdgId = 0;
-  	TRA_LepTop_p_T = 0;
-  	TRA_LepTop_phi = 0;
-   	TRA_LepTop_eta = 0;
-   	TRA_Bot_pdgId = 0;
-  	TRA_Bot_p_T = 0;
-  	TRA_Bot_phi = 0;
-   	TRA_Bot_eta = 0;
-   	TRA_LQ_pdgId = 0;
-  	TRA_LQ_p_T = 0;
-  	TRA_LQ_phi = 0;
-   	TRA_LQ_eta = 0;
-	TA_Tru_p_T = 0;
-	TA_Tru_phi = 0;
-	TA_Tru_eta = 0;
-	TA_Tru_pdgId = 0;
-	TA_Tru_barcode = 0;
-	FR_Active=0;
-	TR_Active=0;
-	FRA_Active=0;
-	TRA_Active=0;
-	TA_Active=0;
-
-	activeTree = activeFile->GetTree();
-
-	if (activeTree) { 
-		FR_Active = 1;
-   		activeTree->SetBranchAddress("eventNumber", &FR_eventNumber, &b_FR_eventNumber);
-   		activeTree->SetBranchAddress("runNumber", &FR_runNumber, &b_FR_runNumber);
-		activeTree->SetBranchAddress("MET_Final_ex", &FR_MET_Final_ex, &b_FR_MET_Final_ex);
-   		activeTree->SetBranchAddress("MET_Final_ey", &FR_MET_Final_ey, &b_FR_MET_Final_ey);
-   		activeTree->SetBranchAddress("MET_Final_et", &FR_MET_Final_et, &b_FR_MET_Final_et);
-		if (!isTopView) {
-			//With EventView ntuples, MET Truth is in the CollectionTree
-			activeTree->SetBranchAddress("MET_Truth_ex", &TR_MET_Truth_ex, &b_TR_MET_Truth_ex);
-   			activeTree->SetBranchAddress("MET_Truth_ey", &TR_MET_Truth_ey, &b_TR_MET_Truth_ey);
-   			activeTree->SetBranchAddress("MET_Truth_et", &TR_MET_Truth_et, &b_TR_MET_Truth_et);
-			TR_Active=1;
-		}	
-  		activeTree->SetBranchAddress("El_N", &FR_El_N, &b_FR_El_N);
-   		activeTree->SetBranchAddress("El_p_T", &FR_El_p_T, &b_FR_El_p_T);
-   		activeTree->SetBranchAddress("El_pdgId", &FR_El_pdgId, &b_FR_El_pdgId);
-   		activeTree->SetBranchAddress("El_phi", &FR_El_phi, &b_FR_El_phi);
-   		activeTree->SetBranchAddress("El_eta", &FR_El_eta, &b_FR_El_eta);	
-  		activeTree->SetBranchAddress("Mu_N", &FR_Mu_N, &b_FR_Mu_N);
-   		activeTree->SetBranchAddress("Mu_p_T", &FR_Mu_p_T, &b_FR_Mu_p_T);
-   		activeTree->SetBranchAddress("Mu_pdgId", &FR_Mu_pdgId, &b_FR_Mu_pdgId);
-   		activeTree->SetBranchAddress("Mu_phi", &FR_Mu_phi, &b_FR_Mu_phi);
-   		activeTree->SetBranchAddress("Mu_eta", &FR_Mu_eta, &b_FR_Mu_eta);
-  		activeTree->SetBranchAddress("Tau_N", &FR_Tau_N, &b_FR_Tau_N);
-   		activeTree->SetBranchAddress("Tau_p_T", &FR_Tau_p_T, &b_FR_Tau_p_T);
-   		activeTree->SetBranchAddress("Tau_pdgId", &FR_Tau_pdgId, &b_FR_Tau_pdgId);
-   		activeTree->SetBranchAddress("Tau_phi", &FR_Tau_phi, &b_FR_Tau_phi);
-   		activeTree->SetBranchAddress("Tau_eta", &FR_Tau_eta, &b_FR_Tau_eta);
-  		activeTree->SetBranchAddress("Ph_N", &FR_Ph_N, &b_FR_Ph_N);
-   		activeTree->SetBranchAddress("Ph_p_T", &FR_Ph_p_T, &b_FR_Ph_p_T);
-   		activeTree->SetBranchAddress("Ph_pdgId", &FR_Ph_pdgId, &b_FR_Ph_pdgId);
-   		activeTree->SetBranchAddress("Ph_phi", &FR_Ph_phi, &b_FR_Ph_phi);
-   		activeTree->SetBranchAddress("Ph_eta", &FR_Ph_eta, &b_FR_Ph_eta);
-   		activeTree->SetBranchAddress("PJet_N", &FR_PJet_N, &b_FR_PJet_N);
-   		activeTree->SetBranchAddress("PJet_p_T", &FR_PJet_p_T, &b_FR_PJet_p_T);
-   		activeTree->SetBranchAddress("PJet_pdgId", &FR_PJet_pdgId, &b_FR_PJet_pdgId);
-   		activeTree->SetBranchAddress("PJet_phi", &FR_PJet_phi, &b_FR_PJet_phi);
-   		activeTree->SetBranchAddress("PJet_eta", &FR_PJet_eta, &b_FR_PJet_eta);
-		if (isTopView) { activeTree->SetBranchAddress("PJet_BTagged", &FR_PJet_BTagged, &b_FR_PJet_BTagged); }
-	} else if (Warn>1) { std::cout << "\nntupleXML: Warning cannot find " << mainTreeName << " tree. "; }
-
-	//Stop here with EventView
-	if (!isTopView) { return; }
-
-	friendTree = (TFriendElement*) (activeFile->GetListOfFriends()->FindObject("FullRecoAna0"));
-	activeTree = friendTree->GetTree();
-   	if (activeTree) {
-		FRA_Active=1;
-  		activeTree->SetBranchAddress("El_N", &FRA_El_N, &b_FRA_El_N);
-   		activeTree->SetBranchAddress("El_p_T", &FRA_El_p_T, &b_FRA_El_p_T);
-   		activeTree->SetBranchAddress("El_pdgId", &FRA_El_pdgId, &b_FRA_El_pdgId);
-   		activeTree->SetBranchAddress("El_phi", &FRA_El_phi, &b_FRA_El_phi);
-   		activeTree->SetBranchAddress("El_eta", &FRA_El_eta, &b_FRA_El_eta);	
-  		activeTree->SetBranchAddress("Mu_N", &FRA_Mu_N, &b_FRA_Mu_N);
-   		activeTree->SetBranchAddress("Mu_p_T", &FRA_Mu_p_T, &b_FRA_Mu_p_T);
-   		activeTree->SetBranchAddress("Mu_pdgId", &FRA_Mu_pdgId, &b_FRA_Mu_pdgId);
-   		activeTree->SetBranchAddress("Mu_phi", &FRA_Mu_phi, &b_FRA_Mu_phi);
-   		activeTree->SetBranchAddress("Mu_eta", &FRA_Mu_eta, &b_FRA_Mu_eta);
-  		activeTree->SetBranchAddress("Nu_N", &FRA_Nu_N, &b_FRA_Nu_N);
-   		activeTree->SetBranchAddress("Nu_p_T", &FRA_Nu_p_T, &b_FRA_Nu_p_T);
-   		activeTree->SetBranchAddress("Nu_pdgId", &FRA_Nu_pdgId, &b_FRA_Nu_pdgId);
-   		activeTree->SetBranchAddress("Nu_phi", &FRA_Nu_phi, &b_FRA_Nu_phi);
-   		activeTree->SetBranchAddress("Nu_eta", &FRA_Nu_eta, &b_FRA_Nu_eta);
-   		activeTree->SetBranchAddress("HadW_N", &FRA_HadW_N, &b_FRA_HadW_N);
-   		activeTree->SetBranchAddress("HadW_p_T", &FRA_HadW_p_T, &b_FRA_HadW_p_T);
-   		activeTree->SetBranchAddress("HadW_pdgId", &FRA_HadW_pdgId, &b_FRA_HadW_pdgId);
-   		activeTree->SetBranchAddress("HadW_phi", &FRA_HadW_phi, &b_FRA_HadW_phi);
-   		activeTree->SetBranchAddress("HadW_eta", &FRA_HadW_eta, &b_FRA_HadW_eta);
-   		activeTree->SetBranchAddress("LepW_N", &FRA_LepW_N, &b_FRA_LepW_N);
-   		activeTree->SetBranchAddress("LepW_p_T", &FRA_LepW_p_T, &b_FRA_LepW_p_T);
-   		activeTree->SetBranchAddress("LepW_pdgId", &FRA_LepW_pdgId, &b_FRA_LepW_pdgId);
-   		activeTree->SetBranchAddress("LepW_phi", &FRA_LepW_phi, &b_FRA_LepW_phi);
-   		activeTree->SetBranchAddress("LepW_eta", &FRA_LepW_eta, &b_FRA_LepW_eta);
-   		activeTree->SetBranchAddress("HadTop_N", &FRA_HadTop_N, &b_FRA_HadTop_N);
-   		activeTree->SetBranchAddress("HadTop_p_T", &FRA_HadTop_p_T, &b_FRA_HadTop_p_T);
-   		activeTree->SetBranchAddress("HadTop_pdgId", &FRA_HadTop_pdgId, &b_FRA_HadTop_pdgId);
-   		activeTree->SetBranchAddress("HadTop_phi", &FRA_HadTop_phi, &b_FRA_HadTop_phi);
-   		activeTree->SetBranchAddress("HadTop_eta", &FRA_HadTop_eta, &b_FRA_HadTop_eta);
-   		activeTree->SetBranchAddress("LepTop_N", &FRA_LepTop_N, &b_FRA_LepTop_N);
-   		activeTree->SetBranchAddress("LepTop_p_T", &FRA_LepTop_p_T, &b_FRA_LepTop_p_T);
-   		activeTree->SetBranchAddress("LepTop_pdgId", &FRA_LepTop_pdgId, &b_FRA_LepTop_pdgId);
-   		activeTree->SetBranchAddress("LepTop_phi", &FRA_LepTop_phi, &b_FRA_LepTop_phi);
-   		activeTree->SetBranchAddress("LepTop_eta", &FRA_LepTop_eta, &b_FRA_LepTop_eta);
-   		activeTree->SetBranchAddress("Lepb_N", &FRA_Lepb_N, &b_FRA_Lepb_N);
-   		activeTree->SetBranchAddress("Lepb_p_T", &FRA_Lepb_p_T, &b_FRA_Lepb_p_T);
-   		activeTree->SetBranchAddress("Lepb_pdgId", &FRA_Lepb_pdgId, &b_FRA_Lepb_pdgId);
-   		activeTree->SetBranchAddress("Lepb_phi", &FRA_Lepb_phi, &b_FRA_Lepb_phi);
-   		activeTree->SetBranchAddress("Lepb_eta", &FRA_Lepb_eta, &b_FRA_Lepb_eta);
-   		activeTree->SetBranchAddress("Hadb_N", &FRA_Hadb_N, &b_FRA_Hadb_N);
-   		activeTree->SetBranchAddress("Hadb_p_T", &FRA_Hadb_p_T, &b_FRA_Hadb_p_T);
-   		activeTree->SetBranchAddress("Hadb_pdgId", &FRA_Hadb_pdgId, &b_FRA_Hadb_pdgId);
-   		activeTree->SetBranchAddress("Hadb_phi", &FRA_Hadb_phi, &b_FRA_Hadb_phi);
-   		activeTree->SetBranchAddress("Hadb_eta", &FRA_Hadb_eta, &b_FRA_Hadb_eta);
-   		activeTree->SetBranchAddress("Hadj_N", &FRA_Hadj_N, &b_FRA_Hadj_N);
-   		activeTree->SetBranchAddress("Hadj_p_T", &FRA_Hadj_p_T, &b_FRA_Hadj_p_T);
-   		activeTree->SetBranchAddress("Hadj_pdgId", &FRA_Hadj_pdgId, &b_FRA_Hadj_pdgId);
-   		activeTree->SetBranchAddress("Hadj_phi", &FRA_Hadj_phi, &b_FRA_Hadj_phi);
-   		activeTree->SetBranchAddress("Hadj_eta", &FRA_Hadj_eta, &b_FRA_Hadj_eta);
-   	} else if (Warn>1) { std::cout << "\nntupleXML: Warning, cannot find FullRecoAna tree. "; }
-
-	friendTree = (TFriendElement*) (activeFile->GetListOfFriends()->FindObject("TruthAna0"));
-	activeTree = friendTree->GetTree();
-   	if (activeTree) {
-		TRA_Active=1;
-  		activeTree->SetBranchAddress("El_N", &TRA_El_N, &b_TRA_El_N);
-   		activeTree->SetBranchAddress("El_p_T", &TRA_El_p_T, &b_TRA_El_p_T);
-   		activeTree->SetBranchAddress("El_pdgId", &TRA_El_pdgId, &b_TRA_El_pdgId);
-   		activeTree->SetBranchAddress("El_phi", &TRA_El_phi, &b_TRA_El_phi);
-   		activeTree->SetBranchAddress("El_eta", &TRA_El_eta, &b_TRA_El_eta);	
-  		activeTree->SetBranchAddress("Mu_N", &TRA_Mu_N, &b_TRA_Mu_N);
-   		activeTree->SetBranchAddress("Mu_p_T", &TRA_Mu_p_T, &b_TRA_Mu_p_T);
-   		activeTree->SetBranchAddress("Mu_pdgId", &TRA_Mu_pdgId, &b_TRA_Mu_pdgId);
-   		activeTree->SetBranchAddress("Mu_phi", &TRA_Mu_phi, &b_TRA_Mu_phi);
-   		activeTree->SetBranchAddress("Mu_eta", &TRA_Mu_eta, &b_TRA_Mu_eta);
-  		activeTree->SetBranchAddress("Tau_N", &TRA_Tau_N, &b_TRA_Tau_N);
-   		activeTree->SetBranchAddress("Tau_p_T", &TRA_Tau_p_T, &b_TRA_Tau_p_T);
-   		activeTree->SetBranchAddress("Tau_pdgId", &TRA_Tau_pdgId, &b_TRA_Tau_pdgId);
-   		activeTree->SetBranchAddress("Tau_phi", &TRA_Tau_phi, &b_TRA_Tau_phi);
-   		activeTree->SetBranchAddress("Tau_eta", &TRA_Tau_eta, &b_TRA_Tau_eta);
-   		activeTree->SetBranchAddress("HadW_N", &TRA_HadW_N, &b_TRA_HadW_N);
-   		activeTree->SetBranchAddress("HadW_p_T", &TRA_HadW_p_T, &b_TRA_HadW_p_T);
-   		activeTree->SetBranchAddress("HadW_pdgId", &TRA_HadW_pdgId, &b_TRA_HadW_pdgId);
-   		activeTree->SetBranchAddress("HadW_phi", &TRA_HadW_phi, &b_TRA_HadW_phi);
-   		activeTree->SetBranchAddress("HadW_eta", &TRA_HadW_eta, &b_TRA_HadW_eta);
-   		activeTree->SetBranchAddress("LepW_N", &TRA_LepW_N, &b_TRA_LepW_N);
-   		activeTree->SetBranchAddress("LepW_p_T", &TRA_LepW_p_T, &b_TRA_LepW_p_T);
-   		activeTree->SetBranchAddress("LepW_pdgId", &TRA_LepW_pdgId, &b_TRA_LepW_pdgId);
-   		activeTree->SetBranchAddress("LepW_phi", &TRA_LepW_phi, &b_TRA_LepW_phi);
-   		activeTree->SetBranchAddress("LepW_eta", &TRA_LepW_eta, &b_TRA_LepW_eta);
-   		activeTree->SetBranchAddress("HadTop_N", &TRA_HadTop_N, &b_TRA_HadTop_N);
-   		activeTree->SetBranchAddress("HadTop_p_T", &TRA_HadTop_p_T, &b_TRA_HadTop_p_T);
-   		activeTree->SetBranchAddress("HadTop_pdgId", &TRA_HadTop_pdgId, &b_TRA_HadTop_pdgId);
-   		activeTree->SetBranchAddress("HadTop_phi", &TRA_HadTop_phi, &b_TRA_HadTop_phi);
-   		activeTree->SetBranchAddress("HadTop_eta", &TRA_HadTop_eta, &b_TRA_HadTop_eta);
-   		activeTree->SetBranchAddress("LepTop_N", &TRA_LepTop_N, &b_TRA_LepTop_N);
-   		activeTree->SetBranchAddress("LepTop_p_T", &TRA_LepTop_p_T, &b_TRA_LepTop_p_T);
-   		activeTree->SetBranchAddress("LepTop_pdgId", &TRA_LepTop_pdgId, &b_TRA_LepTop_pdgId);
-   		activeTree->SetBranchAddress("LepTop_phi", &TRA_LepTop_phi, &b_TRA_LepTop_phi);
-   		activeTree->SetBranchAddress("LepTop_eta", &TRA_LepTop_eta, &b_TRA_LepTop_eta);
-   		activeTree->SetBranchAddress("Bot_N", &TRA_Bot_N, &b_TRA_Bot_N);
-   		activeTree->SetBranchAddress("Bot_p_T", &TRA_Bot_p_T, &b_TRA_Bot_p_T);
-   		activeTree->SetBranchAddress("Bot_pdgId", &TRA_Bot_pdgId, &b_TRA_Bot_pdgId);
-   		activeTree->SetBranchAddress("Bot_phi", &TRA_Bot_phi, &b_TRA_Bot_phi);
-   		activeTree->SetBranchAddress("Bot_eta", &TRA_Bot_eta, &b_TRA_Bot_eta);
-   		activeTree->SetBranchAddress("LQ_N", &TRA_LQ_N, &b_TRA_LQ_N);
-   		activeTree->SetBranchAddress("LQ_p_T", &TRA_LQ_p_T, &b_TRA_LQ_p_T);
-   		activeTree->SetBranchAddress("LQ_pdgId", &TRA_LQ_pdgId, &b_TRA_LQ_pdgId);
-   		activeTree->SetBranchAddress("LQ_phi", &TRA_LQ_phi, &b_TRA_LQ_phi);
-   		activeTree->SetBranchAddress("LQ_eta", &TRA_LQ_eta, &b_TRA_LQ_eta);
-   	} else if (Warn>1) { std::cout << "\nntupleXML: Warning, cannot find TruthAna tree. "; }
-
-	friendTree = (TFriendElement*) (activeFile->GetListOfFriends()->FindObject("TruthAll0"));
-	activeTree = friendTree->GetTree();
-   	if (activeTree) {
-		TA_Active=1;
-  		activeTree->SetBranchAddress("Tru_p_T", &TA_Tru_p_T, &b_TA_Tru_p_T);
-   		activeTree->SetBranchAddress("Tru_phi", &TA_Tru_phi, &b_TA_Tru_phi);
-   		activeTree->SetBranchAddress("Tru_eta", &TA_Tru_eta, &b_TA_Tru_eta);
-   		activeTree->SetBranchAddress("Tru_pdgId", &TA_Tru_pdgId, &b_TA_Tru_pdgId);
-   		activeTree->SetBranchAddress("Tru_barcode", &TA_Tru_barcode, &b_TA_Tru_barcode);	
-   	} else if (Warn>1) { std::cout << "\nntupleXML: Warning, cannot find TruthAll tree. "; }
-
-	//If using TopView ntuples, MET_Truth must be fetched from Truth0
-	friendTree = (TFriendElement*) (activeFile->GetListOfFriends()->FindObject("Truth0"));
-	activeTree = friendTree->GetTree();
-   	if (activeTree) {
-		TR_Active=1;
-  		activeTree->SetBranchAddress("MET_Truth_ex", &TR_MET_Truth_ex, &b_TR_MET_Truth_ex);
-   		activeTree->SetBranchAddress("MET_Truth_ey", &TR_MET_Truth_ey, &b_TR_MET_Truth_ey);
-   		activeTree->SetBranchAddress("MET_Truth_et", &TR_MET_Truth_et, &b_TR_MET_Truth_et);
-   	} else if (Warn>1) { std::cout << "\nntupleXML: Warning, cannot find Truth tree. "; }
-}
-
-void ntupleXML::FillBranches(Int_t entryNumber) {
-	if (FR_Active) {
-   		b_FR_eventNumber->GetEntry(entryNumber);
-   		b_FR_runNumber->GetEntry(entryNumber);
-   		b_FR_MET_Final_ex->GetEntry(entryNumber);
-   		b_FR_MET_Final_ey->GetEntry(entryNumber);
-   		b_FR_MET_Final_et->GetEntry(entryNumber);
-   		if (TR_Active) {
-			b_TR_MET_Truth_ex->GetEntry(entryNumber);
-   			b_TR_MET_Truth_ey->GetEntry(entryNumber);
-   			b_TR_MET_Truth_et->GetEntry(entryNumber);
-		}
-   		b_FR_El_N->GetEntry(entryNumber);
-   		b_FR_El_pdgId->GetEntry(entryNumber);
-	   	b_FR_El_p_T->GetEntry(entryNumber);
-   		b_FR_El_phi->GetEntry(entryNumber);
-   		b_FR_El_eta->GetEntry(entryNumber);
-   		b_FR_Mu_N->GetEntry(entryNumber);
-   		b_FR_Mu_pdgId->GetEntry(entryNumber);
-   		b_FR_Mu_p_T->GetEntry(entryNumber);
-   		b_FR_Mu_phi->GetEntry(entryNumber);
-   		b_FR_Mu_eta->GetEntry(entryNumber);
-		b_FR_Tau_N->GetEntry(entryNumber);
-   		b_FR_Tau_pdgId->GetEntry(entryNumber);
-   		b_FR_Tau_p_T->GetEntry(entryNumber);
-   		b_FR_Tau_phi->GetEntry(entryNumber);
-   		b_FR_Tau_eta->GetEntry(entryNumber);
-   		b_FR_Ph_N->GetEntry(entryNumber);
-   		b_FR_Ph_pdgId->GetEntry(entryNumber);
-   		b_FR_Ph_p_T->GetEntry(entryNumber);
-   		b_FR_Ph_phi->GetEntry(entryNumber);
-   		b_FR_Ph_eta->GetEntry(entryNumber);
-   		b_FR_PJet_N->GetEntry(entryNumber);
-   		b_FR_PJet_pdgId->GetEntry(entryNumber);
-  	 	b_FR_PJet_p_T->GetEntry(entryNumber);
-  	 	b_FR_PJet_phi->GetEntry(entryNumber);
- 	  	b_FR_PJet_eta->GetEntry(entryNumber);
-	}
-
-	if (!isTopView) { return; }
-
-   	if (FR_Active) { b_FR_PJet_BTagged->GetEntry(entryNumber); }
-
-	if (FRA_Active) {
-		b_FRA_El_N->GetEntry(entryNumber);
-	   	b_FRA_El_pdgId->GetEntry(entryNumber);	
-  		b_FRA_El_p_T->GetEntry(entryNumber);
-    		b_FRA_El_phi->GetEntry(entryNumber);
-   		b_FRA_El_eta->GetEntry(entryNumber);
-   		b_FRA_Mu_N->GetEntry(entryNumber);
-   		b_FRA_Mu_pdgId->GetEntry(entryNumber);
-  		b_FRA_Mu_p_T->GetEntry(entryNumber);
-  		b_FRA_Mu_phi->GetEntry(entryNumber);
- 		b_FRA_Mu_eta->GetEntry(entryNumber);
-   		b_FRA_Nu_N->GetEntry(entryNumber);
-   		b_FRA_Nu_pdgId->GetEntry(entryNumber);
-  		b_FRA_Nu_p_T->GetEntry(entryNumber);
-  		b_FRA_Nu_phi->GetEntry(entryNumber);
- 		b_FRA_Nu_eta->GetEntry(entryNumber);
-   		b_FRA_HadW_N->GetEntry(entryNumber);
-   		b_FRA_HadW_pdgId->GetEntry(entryNumber);
-  		b_FRA_HadW_p_T->GetEntry(entryNumber);
-  		b_FRA_HadW_phi->GetEntry(entryNumber);
-   		b_FRA_HadW_eta->GetEntry(entryNumber);
-   		b_FRA_LepW_N->GetEntry(entryNumber);
-   		b_FRA_LepW_pdgId->GetEntry(entryNumber);
-  		b_FRA_LepW_p_T->GetEntry(entryNumber);
-  		b_FRA_LepW_phi->GetEntry(entryNumber);
-   		b_FRA_LepW_eta->GetEntry(entryNumber);
-   		b_FRA_HadTop_N->GetEntry(entryNumber);
-   		b_FRA_HadTop_pdgId->GetEntry(entryNumber);
-  		b_FRA_HadTop_p_T->GetEntry(entryNumber);
-  		b_FRA_HadTop_phi->GetEntry(entryNumber);
-   		b_FRA_HadTop_eta->GetEntry(entryNumber);
-   		b_FRA_LepTop_N->GetEntry(entryNumber);
-   		b_FRA_LepTop_pdgId->GetEntry(entryNumber);
-  		b_FRA_LepTop_p_T->GetEntry(entryNumber);
-  		b_FRA_LepTop_phi->GetEntry(entryNumber);
-   		b_FRA_LepTop_eta->GetEntry(entryNumber);
-   		b_FRA_Lepb_N->GetEntry(entryNumber);
-   		b_FRA_Lepb_pdgId->GetEntry(entryNumber);
-  		b_FRA_Lepb_p_T->GetEntry(entryNumber);
-  		b_FRA_Lepb_phi->GetEntry(entryNumber);
-   		b_FRA_Lepb_eta->GetEntry(entryNumber);
-   		b_FRA_Hadb_N->GetEntry(entryNumber);
-   		b_FRA_Hadb_pdgId->GetEntry(entryNumber);
-  		b_FRA_Hadb_p_T->GetEntry(entryNumber);
-  		b_FRA_Hadb_phi->GetEntry(entryNumber);
-   		b_FRA_Hadb_eta->GetEntry(entryNumber);
-   		b_FRA_Hadj_N->GetEntry(entryNumber);
-   		b_FRA_Hadj_pdgId->GetEntry(entryNumber);
-  		b_FRA_Hadj_p_T->GetEntry(entryNumber);
-  		b_FRA_Hadj_phi->GetEntry(entryNumber);
-   		b_FRA_Hadj_eta->GetEntry(entryNumber);
-	}
-	if (TRA_Active) {
-		b_TRA_El_N->GetEntry(entryNumber);
-   		b_TRA_El_pdgId->GetEntry(entryNumber);
-  		b_TRA_El_p_T->GetEntry(entryNumber);
-  		b_TRA_El_phi->GetEntry(entryNumber);
-   		b_TRA_El_eta->GetEntry(entryNumber);
-   		b_TRA_Mu_N->GetEntry(entryNumber);
-   		b_TRA_Mu_pdgId->GetEntry(entryNumber);
-  		b_TRA_Mu_p_T->GetEntry(entryNumber);
-  		b_TRA_Mu_phi->GetEntry(entryNumber);
-   		b_TRA_Mu_eta->GetEntry(entryNumber);
-   		b_TRA_Tau_N->GetEntry(entryNumber);
-   		b_TRA_Tau_pdgId->GetEntry(entryNumber);
-  		b_TRA_Tau_p_T->GetEntry(entryNumber);
-  		b_TRA_Tau_phi->GetEntry(entryNumber);
-   		b_TRA_Tau_eta->GetEntry(entryNumber);
-   		b_TRA_HadW_N->GetEntry(entryNumber);
-   		b_TRA_HadW_pdgId->GetEntry(entryNumber);
-  		b_TRA_HadW_p_T->GetEntry(entryNumber);
-  		b_TRA_HadW_phi->GetEntry(entryNumber);
-   		b_TRA_HadW_eta->GetEntry(entryNumber);
-   		b_TRA_LepW_N->GetEntry(entryNumber);
-   		b_TRA_LepW_pdgId->GetEntry(entryNumber);
-  		b_TRA_LepW_p_T->GetEntry(entryNumber);
-  		b_TRA_LepW_phi->GetEntry(entryNumber);
-   		b_TRA_LepW_eta->GetEntry(entryNumber);
-   		b_TRA_HadTop_N->GetEntry(entryNumber);
-   		b_TRA_HadTop_pdgId->GetEntry(entryNumber);
-  		b_TRA_HadTop_p_T->GetEntry(entryNumber);
-  		b_TRA_HadTop_phi->GetEntry(entryNumber);
-   		b_TRA_HadTop_eta->GetEntry(entryNumber);
-   		b_TRA_LepTop_N->GetEntry(entryNumber);
-   		b_TRA_LepTop_pdgId->GetEntry(entryNumber);
-  		b_TRA_LepTop_p_T->GetEntry(entryNumber);
-  		b_TRA_LepTop_phi->GetEntry(entryNumber);
-   		b_TRA_LepTop_eta->GetEntry(entryNumber);
-   		b_TRA_Bot_N->GetEntry(entryNumber);
-   		b_TRA_Bot_pdgId->GetEntry(entryNumber);
-  		b_TRA_Bot_p_T->GetEntry(entryNumber);
-  		b_TRA_Bot_phi->GetEntry(entryNumber);
-   		b_TRA_Bot_eta->GetEntry(entryNumber);
-   		b_TRA_LQ_N->GetEntry(entryNumber);
-   		b_TRA_LQ_pdgId->GetEntry(entryNumber);
-  		b_TRA_LQ_p_T->GetEntry(entryNumber);
-  		b_TRA_LQ_phi->GetEntry(entryNumber);
-   		b_TRA_LQ_eta->GetEntry(entryNumber);
-	}
-	if (TA_Active) {
-		b_TA_Tru_p_T->GetEntry(entryNumber);
-		b_TA_Tru_phi->GetEntry(entryNumber);
-		b_TA_Tru_eta->GetEntry(entryNumber);
-		b_TA_Tru_pdgId->GetEntry(entryNumber);
-		b_TA_Tru_barcode->GetEntry(entryNumber);
-	}
-}
-
-void ntupleXML::SetActiveFile(Int_t fileNumber) {
-	if (activeFile != fileStore[fileNumber]) {
-		activeFile = fileStore[fileNumber];
-		if (Warn>1) { std::cout << "\nntupleXML: Setting New Active Tree. "; }
-		//Associates branches with their variables
-		ntupleXML::SetBranches();
-	}
-}
-
-template<typename TYPE>
-std::string ntupleXML::asString(const TYPE& x) {
-	std::ostringstream o;
-	o << std::setiosflags(ios::fixed);
-	if (!(o << x)) {
-		if (Warn>0) { std::cout << "\nntupleXML: Error in toString Conversion Function. "; }
-		return "ERROR";
- 	}
-	return o.str();
-}
-
diff --git a/graphics/AtlantisJava/share/specificconfig.jnlp b/graphics/AtlantisJava/share/specificconfig.jnlp
deleted file mode 100644
index 46f896703eed..000000000000
--- a/graphics/AtlantisJava/share/specificconfig.jnlp
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Template JNLP webstart file for Atlantis event display for ATLAS
-     with specific configuration file. -->
-<jnlp
-  spec="1.0+"
-  codebase="@CODEBASE@"
-  href="@HREF@">
-  <information>
-    <title>Atlantis event display for ATLAS</title>
-    <vendor>Atlantis team</vendor>
-    <homepage href=""/> <!-- should be used from codebase -->
-    <description>Atlantis event display for ATLAS</description>
-    <!--    <icon href="files/goofy_favicon.ico"/>
-    <icon kind="splash" href="files/logo.gif"/> -->
-    <offline-allowed/> 
-    <shortcut online="false">
-      <desktop/>
-      <menu submenu="Atlantis event display"/>
-    </shortcut>
-  </information>
-  <security>
-      <all-permissions/>
-  </security>
-  <resources>
-      <j2se version="1.6+" max-heap-size="512m"/>
-
-      <jar href="lib/commons-cli-1.0.jar"/>
-      <jar href="lib/Jama.jar"/>
-      <jar href="lib/jas-aida-dev.jar"/>
-      <jar href="lib/jas-aida.jar"/>
-      <jar href="lib/jas-freehep-base.jar"/>
-      <jar href="lib/jas-freehep-hep.jar"/>
-      <jar href="lib/jas-jas-plotter.jar"/>
-      <jar href="lib/jas-jel.jar"/>
-      <jar href="lib/jas-JMinuit.jar"/>
-      <jar href="lib/jogl.jar"/>
-      <jar href="lib/jh.jar"/>
-      <jar href="lib/oncrpc.jar"/>
-      <jar href="lib/log4j-1.2.15.jar"/>
-      <jar href="lib/ostermillerutils_1_05_00.jar"/>
-      <jar href="lib/wired-base-4.0.beta.3-SNAPSHOT.jar"/>
-      <jar href="lib/ws-commons-util-1.0.2.jar"/>
-      <jar href="lib/xercesImpl.jar"/>
-      <jar href="lib/xml-apis.jar"/>
-      <jar href="lib/xmlrpc-client-3.1.jar"/>
-      <jar href="lib/xmlrpc-common-3.1.jar"/>
-      <jar href="lib/jlibeps.jar"/>
-      <jar href="lib/xmlrpc-server-3.1.jar"/>
-      <jar href="lib/commons-logging-1.1.jar"/>
-      <jar href="lib/commons-codec-1.4.jar"/>
-      <jar href="lib/xml-apis-ext.jar"/>
-      <jar href="lib/batik-dom.jar"/>
-      <jar href="lib/batik-anim.jar"/>
-      <jar href="lib/batik-svggen.jar"/>
-      <jar href="lib/batik-css.jar"/>
-      <jar href="lib/batik-bridge.jar"/>
-      <jar href="lib/batik-parser.jar"/>
-      <jar href="lib/batik-xml.jar"/>
-      <jar href="lib/batik-gui-util.jar"/>
-      <jar href="lib/batik-script.jar"/>
-      <jar href="lib/batik-transcoder.jar"/>
-      <jar href="lib/batik-svg-dom.jar"/>
-      <jar href="lib/batik-extension.jar"/>
-      <jar href="lib/batik-codec.jar"/>
-      <jar href="lib/batik-util.jar"/>
-      <jar href="lib/batik-swing.jar"/>
-      <jar href="lib/batik-ext.jar"/>
-      <jar href="lib/batik-gvt.jar"/>
-      <jar href="lib/batik-awt-util.jar"/>
-      <jar href="help/help.jar"/>
-
-      <jar href="atlantis.jar" main="true"/> <!-- look for main class here -->
-  </resources>
-
-  <application-desc main-class="atlantis.Atlantis">
-    <argument>--config</argument>
-    <argument>configuration/@CONFIG@</argument>
-    <argument>--debug</argument>
-    <argument>DEBUG</argument>
-  </application-desc>
-
-</jnlp> 
-
diff --git a/graphics/AtlantisJava/src/atlantis/ACommandLine.java b/graphics/AtlantisJava/src/atlantis/ACommandLine.java
deleted file mode 100644
index 3c87dcf91062..000000000000
--- a/graphics/AtlantisJava/src/atlantis/ACommandLine.java
+++ /dev/null
@@ -1,399 +0,0 @@
-package atlantis;
-
-import atlantis.event.AEpsImageProducer;
-import atlantis.event.AImageProducer;
-import atlantis.event.AEventSource;
-import atlantis.event.APngImageProducer;
-import atlantis.event.ASvgImageProducer;
-import atlantis.globals.AGlobals;
-import atlantis.gui.AGUI;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-import java.awt.Dimension;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.ParseException;
-
-/**
- * This package-private class holds all the command line options
- * as well as providing verification
- * @author Sebastian Boeser
- */
-class ACommandLine {
-
-  //A help formatter
-  private final HelpFormatter formatter = new HelpFormatter();
-  
-  private AGlobals globals = AGlobals.instance();
-
-  //The set of command-line options
-  private final Options options = new Options();
-
-  //The usage line
-  private static final String usage = "Atlantis [OPTIONS] [[-s]SOURCE]";
-
-  //The help message header and footer
-  private final String headerMsg;
-  private final String footerMsg;
-
-
-  /**
-   * Create all the options in the constructor. Options are sorted alphabetically in here.
-   */
-  ACommandLine(){
-
-    //show HLTAutokey tracks
-    options.addOption(new Option("a", false, "show HLTAutoKey tracks"));
-
-    //configuration file
-    options.addOption(OptionBuilder.withArgName("file")
-      .hasArg()
-      .withDescription("read configuration from specified file")
-      .withLongOpt("config")
-      .create("c")
-    );
- 
-
-    //debug
-    String debugDescr = "log messages of level to " +
-                        "'stdout', optionally to file destination. " +
-                        "Message levels are "+ ALogger.getStringLevels() + " (INFO is default)";
-    options.addOption(OptionBuilder
-      .hasArg()
-      .hasOptionalArg()
-      .withArgName("level [destination]")
-      .withDescription(debugDescr)
-      .withLongOpt("debug")
-      .create('d')
-    );
-
- 
-    //help/usage
-    options.addOption(new Option("h", "help", false, "display this help message"));
-
-    //demo mode
-    options.addOption(OptionBuilder.withArgName("projections")
-      .hasOptionalArg()
-      .withDescription("colon seperated list of projections for the demo mode (e.g \"-j YX:VP\"). "
-          + "Available projections/actions are YX, "
-          + "VP(" + AMath.PHI + AMath.ETA + "), "
-          + "RZ(" + AMath.RHO + "Z), "
-          + "FR(" + AMath.PHI + AMath.RHO + "), "
-          + "FZ(" + AMath.PHI + "Z), "
-          + "XZ(X'Z), "
-          + "YZ(Y'Z), "
-          + "LegoPlot, "
-          + "NE(next event)")
-      .withLongOpt("projection")
-      .create("j")
-    );
-
-    //loop mode
-    String loopDescr = "Set event navigation mode, supported values are "
-                      +AEventSource.NavigationMode.LOOP.toString()+", "
-                      +AEventSource.NavigationMode.RANDOM.toString()+", "
-                      +AEventSource.NavigationMode.SEQUENTIAL.toString();
-    options.addOption(OptionBuilder.withArgName("mode")
-      .hasArg()
-      .withDescription(loopDescr)
-      .withLongOpt("loop")
-      .create("l")
-    );
-
-    //color map
-    options.addOption(OptionBuilder.withArgName("file")
-      .hasArg()
-      .withDescription("read colourmap from specified file")
-      .withLongOpt("colormap")
-      .create("m")
-    );
-
-    // output image files
-    String outputDescr = "Output event image " +
-    "into directory dir (default: current directory) "+
-    "of dimensions width x height (default: 800x828). "+
-    "If height is not specified the aspect ratio of the canvas is used. " +
-    "If scale is given, images will be scaled by that factor (use for thumbnails). "+
-    "If a filename is given, that file will be overwritten, "+
-    "otherwise a new file will be created for each event. "+
-    "The output format may be specified as PNG (the default) or EPS using" +
-    "the --outputformat option.";
-    options.addOption(OptionBuilder.hasOptionalArgs(4)
-     .withArgName("[dir] [width[xheight]] [scale] [filename]")
-     .withDescription(outputDescr)
-     .withLongOpt("output")
-     .create('o')
-    );
-    
-    String outputFormatDescr = "output format for -o option (eps or png, default is png)";
-    options.addOption(OptionBuilder.hasArg()
-    		.withArgName("format")
-    		.withDescription(outputFormatDescr)
-    		.withLongOpt("outputformat")
-    		.create('f')
-    );
-
-    //event loop intervall
-    options.addOption(OptionBuilder.withArgName("seconds")
-      .hasArg()
-      .withDescription("pause inbetween events and/or projections options")
-      .withLongOpt("pause")
-      .create("p")
-    );
-
-    //default source
-    String sourceDescr = "Set initial event source, e.g\n"+
-                         "*    [file://]<filename>\n"+
-                         "*     http://<url>\n"+
-                         "*   xmlrpc://<server>:<port>\n"+
-                         "*   oncrpc://<server>[:port][:stream]";
-    options.addOption(OptionBuilder.withArgName("source")
-      .hasArg()
-      .withDescription(sourceDescr)
-      .withLongOpt("source")
-      .create("s")
-    );
-
-    //update config
-    options.addOption(new Option("x", "updateconfig", false, "update user's configuration file"));
-
-    //max GUI width
-    options.addOption(OptionBuilder.withArgName("maxwidth")
-      .hasArg()
-      .withDescription("maximum screen width used by Atlantis")
-      .withLongOpt("maxwidth")
-      .create("w")
-    );
-
-
-    //image server
-    options.addOption(OptionBuilder.hasArgs(1)
-      .withArgName("port")
-      .withDescription("Run a server on port <port> which accepts " +
-                        "event data from a client and returns images")
-      .withLongOpt("imgserver")
-      .create('I')
-    );
-
-   
-    /**
-     * Now create header and footer Messages
-     */
-    headerMsg = "\nMandatory arguments to long options are " +
-                 "mandatory for short options too.\n";
-    footerMsg = "\nAtlFast objects were supported up to " +
-                "AtlantisJava-09-05-28 via \"Fast\" option.\n" +
-                "Beginner simplified GUI was supported up to " +
-                "AtlantisJava-09-05-28 via \"Beginner\" option.\n" +
-                "CTB 2004 geometry was supported up to " +
-                "AtlantisJava-09-07-42 via -t, --testbeam option.\n";
-
-  }
-  
-  /**
-   * Parse and validate the command line options
-   */
-  void process(String[] args){
-  
-    //Create GNU style parse
-    CommandLineParser parser = new GnuParser();  
-    
-    //Now try parsing the options
-    try {
-      
-      //invoke GNU parser
-      CommandLine cmdLine = parser.parse(options, args);
-
-      /**
-       * Now validate and process all options
-       */
-       
-      //auto-keys
-      if(cmdLine.hasOption('a')) globals.setHLTAutoKeys(true);
-       
-      //config
-      if(cmdLine.hasOption('c')){
-         Atlantis.configCommandLine = cmdLine.getOptionValue('c', null);
-      }
-
-      //debug
-      if(cmdLine.hasOption('d')){
-        //Get option values
-        String[] vals = cmdLine.getOptionValues('d');
-        //this arg will always be there
-        String level = vals[0];
-			  if (! ALogger.getStringLevels().contains(level))
-          throw new ParseException("Invalid logging level "+level);
-        //Check if there was also another argument
-        String destination = null;
-        if(vals.length == 2) destination = vals[1];
-        
-        //Finally initialize the logger
-        ALogger.initialize(level,destination);
-      }
-
-      //help
-      if(cmdLine.hasOption('h')) {
-        formatter.printHelp(usage, headerMsg, options, footerMsg);
-        System.exit(0);
-      }
-
-      //image server
-      if(cmdLine.hasOption('I')){
-        Atlantis.imageServerPort = Integer.parseInt(cmdLine.getOptionValue('I'));
-        if (Atlantis.imageServerPort < 0)
-          throw new ParseException("Port number "+cmdLine.getOptionValue('I')+
-                             " is not valid for -I option");
-         //Check for other mutual exclusive options
-        if (cmdLine.hasOption('j') || cmdLine.hasOption('p'))
-          throw new ParseException("Can not use option -I with -j or -p options");
-      }
-
-      //demo mode projections
-      if(cmdLine.hasOption('j')){
-        //NOTE: default is not null but "", so we can distinguish inbetween
-        //this flag being set or not w/o introducing more parameters
-        Atlantis.selectedProjections = cmdLine.getOptionValue('j', "");
-      }
-
-      //navigation mode
-      if(cmdLine.hasOption('l')){
-        //Get arguments
-        String loopMode = cmdLine.getOptionValue('l',null);
-        if (loopMode == null)
-          throw new ParseException("Option -l needs an argument");
-        Atlantis.initialMode = AEventSource.NavigationMode.valueOf(loopMode);
-      }
-
-                
-      //color map
-      if(cmdLine.hasOption('m')){
-        // retrieve the argument for options or assign default value
-        Atlantis.colormapCommandLine = cmdLine.getOptionValue('m', null);
-      }
-  
-      // generate PNG/EPS output files
-      if(cmdLine.hasOption('o'))
-      {
-        String format = "PNG";
-        if (cmdLine.hasOption('f')) {
-        	String formatVal = cmdLine.getOptionValue('f');
-        	format = formatVal.toUpperCase();
-        	if (!("EPS".equals(format)||"PNG".equals(format))) {
-                throw new ParseException("Invalid output format "+formatVal);
-        	}
-        }
-        String[] vals = cmdLine.getOptionValues('o');
-        this.processImageOutputOptions(vals,format);
-      }
-      
-      // generate PNG output files
-      if(cmdLine.hasOption('e'))
-      {
-        String[] vals = cmdLine.getOptionValues('e');
-        this.processImageOutputOptions(vals,"EPS");
-      }
-      
-      //source
-      if (cmdLine.hasOption('s')){
-        //Simply set this as default event source
-        Atlantis.initialEventSource = cmdLine.getOptionValue('s');
-      }
-
-      //pause
-      if (cmdLine.hasOption('p')){
-        //Check for integer value
-        String val = cmdLine.getOptionValue('p', null);
-        try {
-          Atlantis.loopInterval = Integer.parseInt(val);
-        } catch (NumberFormatException nfe) {
-            throw new ParseException("Invalid seconds value "+val+" for -p option");
-        }
-      }
-         
-      //GUI width
-      if(cmdLine.hasOption('w')){
-        String val = cmdLine.getOptionValue('w', null);
-         try {
-            int maxWidth = Integer.parseInt(val);
-        	AGUI.getGUI().setMaxWidth(maxWidth);
-         } catch (NumberFormatException e) {
-            throw new ParseException("Invalid width value "+val+" for -w option");
-         }
-      }
-
-      //update config
-      if(cmdLine.hasOption('x')) Atlantis.updateConfig = true;
-
-      //finally check for positional options (i.e w/o --opt)
-      String[] unspecifiedOpts=cmdLine.getArgs();
-      if (unspecifiedOpts.length > 0){
-        //We accept only one, which is a single string for the event source
-        if ((unspecifiedOpts.length != 1)
-            || cmdLine.hasOption('s')
-            || cmdLine.hasOption('I')){
-          throw new ParseException("Can only specify one event source");
-        }
-        Atlantis.initialEventSource = unspecifiedOpts[0];
-      }
-
-    } catch(ParseException ex) {
-      //Every error above should have thrown a parse exception
-      //Show help message and exit
-      System.err.println("\n" + ex.getMessage() + "\n");
-      formatter.printHelp(usage, headerMsg, options, footerMsg);
-      System.exit(1);
-    }
-
-  }
-  
-  private void processImageOutputOptions(String[] vals, String fileFormat) throws ParseException {
-	  try
-	  {
-		  //vals[0] - directory to store events and png into
-		  //Use current directory as default
-		  String dir=System.getProperty("user.dir");
-		  if ((vals!=null)&&(vals.length > 0)) dir = vals[0];
-		  // vals[1] - WidthxHeight string
-		  Dimension dim=new Dimension(800,828);
-		  if ((vals!=null)&&(vals.length > 1)){
-			  short width = Short.parseShort(vals[1].split("x")[0]);
-			  short height =-1;
-			  if (vals[1].split("x").length > 1)
-				  height = Short.parseShort(vals[1].split("x")[1]);
-			  dim = new Dimension(width,height);
-		  }
-		  // vals[2] - scale factor, default is one
-		  double scale = 1;
-		  if ((vals!=null)&&(vals.length > 2)) scale = Double.parseDouble(vals[2]);
-		  // vals[3] - fixed filename, default is null
-		  String fixedFile = null;
-		  if ((vals!=null)&&(vals.length > 3)) fixedFile = vals[3];
-		  //Now create a new image generator
-		  if ("EPS".equals(fileFormat)) {
-			  Atlantis.imageProducer = new AEpsImageProducer(dir,dim,scale,fixedFile);
-		  }
-		  else if ("PNG".equals(fileFormat)) {
-			  Atlantis.imageProducer = new APngImageProducer(dir,dim,scale,fixedFile);
-		  }
-		  else if ("SVG".equals(fileFormat)) {
-			  Atlantis.imageProducer = new ASvgImageProducer(dir,dim,scale,fixedFile);
-		  }
-		  else {
-			  throw new Error("Invalid file format for output: "+fileFormat);
-		  }
-	  } catch (NumberFormatException nfe){
-		  throw new ParseException("Invalid parameters to option -o");
-	  } catch (IndexOutOfBoundsException iob){
-		  throw new ParseException("Invalid dimension parameter to option -o");
-	  } catch (AImageProducer.InstantiationException iex){
-		  throw new ParseException("Invalid configuration for option -o: "+iex.getMessage());
-	  }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/AOpenGLTools.java b/graphics/AtlantisJava/src/atlantis/AOpenGLTools.java
deleted file mode 100644
index 02cbf863cc99..000000000000
--- a/graphics/AtlantisJava/src/atlantis/AOpenGLTools.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package atlantis;
-
-import javax.media.opengl.GLCanvas;
-import javax.media.opengl.GLCapabilities;
-
-/**
- * Provides utility method to check if OpenGL is available.
- * @author Adam
- */
-public class AOpenGLTools {
-
-    public static boolean isOpenGLAvailable() {
-        try {
-            GLCapabilities cap = new GLCapabilities();
-            GLCanvas canv = new GLCanvas(cap);
-        } catch (Error e) {
-            // Expect some kind of hard exception if the class can't be loaded
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/Atlantis.java b/graphics/AtlantisJava/src/atlantis/Atlantis.java
deleted file mode 100644
index e54be406c3aa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/Atlantis.java
+++ /dev/null
@@ -1,770 +0,0 @@
-package atlantis;
-
-import java.awt.Toolkit;
-import java.io.File;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-
-import atlantis.canvas.ACanvas;
-import atlantis.config.ADefaultValues;
-import atlantis.config.AConfigUpdater;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-
-import atlantis.geometry.AAtlasDetector;
-import atlantis.geometry.ADetectorSystem;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.gui.ADemoDialog;
-import atlantis.gui.AEventQueue;
-import atlantis.gui.AGUI;
-import atlantis.gui.AStartupWindow;
-import atlantis.gui.AEventLoopDialog;
-import atlantis.output.AExceptionHandler;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AUtilities;
-import atlantis.utils.xml.AXMLErrorHandler;
-import atlantis.utils.xml.AXMLEntityResolver;
-import atlantis.utils.xml.AXMLUtils;
-import atlantis.event.AImageProducer;
-import atlantis.event.AEventSource;
-import atlantis.utils.ALogger;
-import atlantis.event.xmlrpc.AServerXMLRPC;
-import atlantis.event.xmlrpc.AServerXMLRPCEventSource;
-import atlantis.gui.ACrashReporter;
-import atlantis.gui.ADemoLoop;
-import atlantis.interactions.AInteractionsConfigReader;
-import atlantis.utils.ANewIdHelper;
-import atlantis.utils.xml.AXMLEntityResolver;
-
-import java.util.Arrays;
-import java.util.Vector;
-import javax.swing.JOptionPane;
-
-
-/**
- * Main class of Atlantis application.
- * Initialises the application's main components and provides access to them.
- */
-public class Atlantis
-{    
-    // The main class logger gets initialized after command line options
-    // are processed. All other classes will just do
-    // logger = ALogger.getLogger(Class.class) in their attribute definitions
-    private static ALogger logger = null;
-    
-    /** Store for Atlantis global state. */
-    private static AGlobals globals = AGlobals.instance();
- 
-    // expands into SVN tag
-    private static String versionAtlantisJava = "$HeadURL: file:///atlas/scratch0/graemes/ao-mirror/graphics/AtlantisJava/tags/AtlantisJava-09-16-05-18/src/atlantis/Atlantis.java $";
-
-    private static final String FILE_SEPAR = System.getProperty("file.separator");
-    private static final String USER_HOME_DIR = System.getProperty("user.home");
-
-    // This is the URL that is used as default for "Read events from URL"
-    // The stream is set to "Default" as this is the only one guaranteed to be there.
-    private static final String LIVE_POINT_1_EVENTS_URL =
-        "http://atlas-live.cern.ch/event_files/Default";
-    
-    // expected file name of the user customised configuration file
-    // (stored in the user's home directory)
-    private static final String USER_CONFIG_FILE_PATH =
-        USER_HOME_DIR + FILE_SEPAR + ".Atlantis-config.xml";
-    
-    // configuration file from the Atlantis distribution (default config)
-    private static final String DISTRIB_DEFAULT_CONFIG_FILE = 
-        "configuration" + FILE_SEPAR + "config.xml";
-    
-    // this is checksum file of the distribution's main configuration file
-    // if it doesn't match, Atlantis tries to update user's configuration
-    // or the --config <configfile> configuration 
-    // it is an indicator that the master config.xml changed
-    private static final String CONFIG_CHECKSUM_FILE_PATH =
-        USER_HOME_DIR + FILE_SEPAR + ".Atlantis-config.chk";
-
-    // limit the total width of Atlantis to this number of pixels (0 = screen width)
-    private static int MAX_WIDTH = 0;
-
-    /**
-     * The list of parameters that can be set from the command line
-     */
-    // force Atlantis to update the personal configuration file
-    protected static boolean updateConfig = false;
-    // configuration file specified as command line argument
-    protected static String configCommandLine = null;
-    // colormap file specified as command line argument
-    protected static String colormapCommandLine = null;
-    // selected projections specified as command line argument for demo mode
-    protected static String selectedProjections = null;
-    // timer delay from command line for reading events in a loop
-    protected static Integer loopInterval = null;
-    // navigation mode from command line
-    protected static AEventSource.NavigationMode initialMode = null;
-    // initial event source, may be specified from command line
-    protected static String initialEventSource = "events"+FILE_SEPAR+"test_events.zip";
-    // Object for saving event images in a directory
-    protected static AImageProducer imageProducer = null;
-    // Port number for image server from command line
-    protected static int imageServerPort = -1;
-    
-    private static final boolean atlantisWithOpenGL = false;
-
-    private static final String INIT_ERROR_MSG = 
-        	"Error during Atlantis initialization.\n" +
-        	"(configuration file related issues might be\n" +
-        	"corrected by running with -x (updating customised configuration)).\n" +
-        	"See console output for more information.";
-    
-    // main Atlantis components
-    private static APar parameterStore = null;
-    private static AEventManager eventManager = null;
-    private static ADetectorSystem detector = null;
-    private static ACanvas canvas = null;
-    private static AGUI gui = null;
-
-    /**
-     * Returns the delay for timer for automatic event reading from server
-     * when this option was specified as command line argument 
-     * @return the delay in seconds
-     */
-    private static Integer getLoopInterval()
-    {
-    	return loopInterval;
-    }
- 
-    
-    /**
-     * Set the default java look and feel ("metal")
-     */
-    private static void setLookAndFeel()
-    {
-      try {
-         UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
-      } catch(Exception e) {
-          AExceptionHandler.processException("Error setting default Look and Feel", e);
-      }
-    }
-     
-
-    /**
-     * Check if the checksum file CONFIG_CHECKSUM_FILE_PATH is up-to-date.
-     * Create one if it does not exist or update it if it is not up-to-date.
-     */
-    private static void checkAndUpdateConfigCheckSumFile(String distribFile)
-    throws AAtlantisException
-    {
-        if(Atlantis.updateConfig)
-        {
-            logger.info("Checksum not checked, run with -x, configuration update " +
-            		    "forced anyway.");
-            return;
-        }
-
-        logger.info("Checking if the used configuration is up-to-date ...");
-        
-        logger.debug("Checking checksum of the configuration file from the " +
-                     "Atlantis distribution: " + distribFile);
-        logger.debug("Checksum file: " + CONFIG_CHECKSUM_FILE_PATH);
-        
-        boolean checkSumExists = new File(CONFIG_CHECKSUM_FILE_PATH).exists();
-        
-        if(checkSumExists)
-        {
-            boolean comparison = AConfigUpdater.compareChecksums(distribFile,
-                                                CONFIG_CHECKSUM_FILE_PATH);
-            if(comparison)
-            {
-                logger.debug("Checksum file - checksum match, no update necessary.");
-                Atlantis.updateConfig = false;
-                return;
-            }
-        }
-
-        // doesn't match, force update of custom configuration
-        // and re-generate checksum
-        AConfigUpdater.createChecksumFile(distribFile, CONFIG_CHECKSUM_FILE_PATH);
-        logger.debug("Checksum didn't match, updating customised " +
-                     "configuration forced.");
-        Atlantis.updateConfig = true;
-
-    } // checkAndUpdateConfigCheckSumFile() ---------------------------------
-    
-    
-    
-    /**
-     * Returns InputStream to read XML application configuration from.
-     * 
-     * Evaluates sources from which Atlantis XML configuration is
-     * possibly loaded from (prioritised):
-     * 1) -c, --config <configfile.xml> specified on the command line
-     *    here available in configCommandLine variable
-     * 2) if USER_CONFIG_FILE_PATH exists, read that one
-     * 3) or eventually read <ATLANTIS_DIRECTORY>/DISTRIB_DEFAULT_CONFIG_FILE
-     * 
-     * User's customised (in the home directory) or --config <configfile> are
-     * also tried to be updated when the checksum configuration file doesn't
-     * match. Atlantis calculates checksum of the main distribution
-     * configuration file and stores that checksum in CONFIG_CHECKSUM_FILE_PATH.
-     * If this checksum doesn't match when Atlantis is run on the user's
-     * home directory configuration or --config <configfile> configuration,
-     * automatic configuration file update process is executed.
-     * 
-     * Updating means that config.xml (main, base) contains some changes
-     * which are not consistent with the user's config or custom config
-     * and they need to be propagated there.
-     * Update process:
-     * AConfigUpdater.updateConfigurationFile(distribFilePath, configToUse)
-     * is then executed.
-     * 
-     * Do not try to update custom configuration which is located in the same
-     * directory as the base config file - it means that such custom config
-     * comes with AtlantisJava distribution - no need updating this one.
-     */
-    private static InputStream getXMLConfigAsStream() throws Exception
-    {
-        String configToUse = null;
-        
-        logger.info("Reading the XML configuration ...");
-        
-        // configuration file from the Atlantis distribution
-        String distribFilePath = getHomeDirectory() + DISTRIB_DEFAULT_CONFIG_FILE;
-        
-        // distribution config file checksum only taken into account when having
-        // --config command line argument or when running from user's (home
-        // directory) configuration
-        
-        // option / source 1) - command line argument - highest priority
-        if(configCommandLine != null)
-        {
-            logger.info("Using configuration file specified on the command " +
-                        "line: " + configCommandLine);
-            // sets Atlantis.updateConfig = true; accordingly
-            checkAndUpdateConfigCheckSumFile(distribFilePath);
-            configToUse = configCommandLine;
-        }
-        else
-        {
-            // check if we can read the user configuration file (in home dir.)
-            // option / source 2)
-            if(new File(USER_CONFIG_FILE_PATH).exists())
-            {
-                logger.info("Using user's configuration file: " +
-                             USER_CONFIG_FILE_PATH);
-                // sets Atlantis.updateConfig = true; accordingly
-                checkAndUpdateConfigCheckSumFile(distribFilePath);
-                configToUse = USER_CONFIG_FILE_PATH;
-            }
-            else
-            {
-                // // option / source 3)
-                logger.info("Using distribution configuration file: " +
-                             distribFilePath);
-                if(Atlantis.updateConfig)
-                {
-                    logger.warn("Update custom configuration flag is set, " +
-                                "that doesn't make sence - no custom config " +
-                                "file available, ignored.");
-                    Atlantis.updateConfig = false;
-                }
-                configToUse = distribFilePath;
-            }
-        }
-
-        
-        try
-        {
-            // try to update custom configuration before loading it
-            if(Atlantis.updateConfig)
-            {
-                logger.info("Updating customised configuration file ...");
-                // check if configToUse comes from atlantis home directory, if
-                // so, then configToUse is from AtlantisJava distribution, should
-                // already be up-to-date and no automatic update will be performed
-                String atlantisHome = Atlantis.getHomeDirectory();
-                String customConfigDir = new File(configToUse).getAbsolutePath();
-                
-                logger.info("Updating configuration - customised config directory: " +
-                             customConfigDir);
-                // if configToUse comes from AtlantisJava distribution, customConfigDir
-                // path start with atlantisHome path plus 'configuration' directory
-                // (does not filter off webstart since .getHomeDirectory() 
-                // returns user's home directory when running via webstart,
-                // the condition below should be improved to cover webstart situation
-                // as well ...)
-                if(customConfigDir.startsWith(atlantisHome))
-                {
-                    logger.debug("Updating configuration - Atlantis home: " + atlantisHome);
-                    logger.info("Updating configuration - customised config directory " +
-                                "is in the Atlantis home, no need updating it.");
-                }
-                else
-                {
-                    AConfigUpdater.updateConfigurationFile(distribFilePath, 
-                                                           configToUse);
-                }
-            }
-        }
-        catch(AAtlantisException aae)
-        {
-            logger.error(aae.getMessage());
-        }
-
-        
-        InputStream isConfig = null; // configuration file input stream
-        try 
-        {
-            isConfig = AUtilities.getFileAsStream(configToUse); 
-        }
-        catch(AAtlantisException aae)
-        {
-            String m = "Could not read " + configToUse + " reason: " +
-                       aae.getMessage();
-            throw new Exception(m);
-        }
-        
-        logger.info("Going to parse XML configuration: " + configToUse);
-        return isConfig;
-              
-    } // getXMLConfigAsStream() ---------------------------------------------
-
-        
-    
-    private static void initAtlantis() {
-    	
-    String homeDirectory = Atlantis.getHomeDirectory();
-    globals.setHomeDirectory(homeDirectory);
-
-    //Create startup window and set how often
-    //the progress bar will get update below
-    AStartupWindow startupWin = new AStartupWindow(9);
-    
-    try {
-      System.setProperty("sun.awt.exception.handler",
-              "AExceptionHandler");
-
-      startupWin.updateText("Atlantis initialisation");
-      
-      //Show atlantis home
-      logger.info("Atlantis home: "+homeDirectory);
-
-      //Create an event manager
-      eventManager = AEventManager.instance();
-      
-      // reading Atlantis runtime configuration (text file in the home directory)
-      logger.info("Reading Atlantis runtime configuration, file: " +
-                  ADefaultValues.CONFIGFILE);
-      ADefaultValues.readRuntimeValues();
-      
-      
-      // read the configuration xml files -------------------------
-      startupWin.updateText("Reading Atlantis configuration");
-      
-      // evaluate configuration sources options and get the configuration
-      InputStream isConfig = getXMLConfigAsStream();
-      
-      // prepare XML parser for parsing the XML configuration
-      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      factory.setValidating(true);
-      DocumentBuilder parser = factory.newDocumentBuilder();
-      parser.setErrorHandler(new AXMLErrorHandler());
-      parser.setEntityResolver(new AXMLEntityResolver());
-
-      // parse the XML configuration
-      String configBase = homeDirectory + FILE_SEPAR + "configuration" + FILE_SEPAR;
-      Document xmlConfigDoc = parser.parse(isConfig, configBase);
-      Node rootNode = xmlConfigDoc.getDocumentElement();
-      // read the XML initialization node, and performs initialization
-      Node initializationNode = AXMLUtils.getChild(rootNode, "Initialization");
-
-      // parse the ID dictionary
-      String geometryBase = homeDirectory + FILE_SEPAR + "geometry" + FILE_SEPAR;
-      InputStream isIdDict = AUtilities.getFileAsStream(geometryBase+"ATLAS_IDS.xml");
-      Document xmlDictDoc = parser.parse(isIdDict, geometryBase);
-      ANewIdHelper.construct(xmlDictDoc.getDocumentElement());
-      
-      
-      // read colour map (colormap.xml) configuration -----------------
-      startupWin.updateText( "Reading colour map");
-      AColorMap.readColorMap(Atlantis.colormapCommandLine);
-      
-      
-      // creating canvas ----------------------------------------------
-      startupWin.updateText("Building canvas and projections");
-      Node canvasNode = AXMLUtils.getChild(initializationNode, "Canvas");
-      canvas = ACanvas.construct(canvasNode);
-
-      // reading parameters ------------------------------------------
-      logger.info("Building parameters");
-      parameterStore = APar.construct(AXMLUtils.getChild(rootNode, "Parameters"));
-      parameterStore.update(AXMLUtils.getChild(rootNode, "ParameterDifferences"));
-      eventManager.addNewEventListener(parameterStore);
-      // creating the Projections Manager (reading the projections)
-      Node interactionsNode =
-              AXMLUtils.getChild(initializationNode, "Interactions");
-      AInteractionsConfigReader.readInteractions(interactionsNode);
-      AProjectionsManager.initialise();
-      
-      //set the output flag: 0 normal 1 eta/phi/pt 2 px/py/pz 3 eta/phi/pt/px/py/pz
-      if(parameterStore.get("Minerva","alternativesimpleoutput").getStatus()){
-    	  if(parameterStore.get("Minerva","simpleoutput").getStatus()){
-    		  globals.setSimpleOutput(3);
-    	  }else{
-    		  globals.setSimpleOutput(2);
-    	  }
-      }else if(parameterStore.get("Minerva","simpleoutput").getStatus()){
-    	  globals.setSimpleOutput(1);
-      }
-
-      // reading  the geometry ----------------------------------------
-      startupWin.updateText("Reading geometry");
-      String geomPrefix = Atlantis.getHomeDirectory() + "geometry" +
-              Atlantis.FILE_SEPAR;
-      String geomName = ADefaultValues.get("GeometryName");
-      if (!"".equals(geomName)) {
-        // name of the geometry considered after underscore
-        geomName = "_" + geomName;
-
-        // do the geometry files exist - just try loading the files
-        String geomNameFull1 = geomPrefix + "AGeometry" + geomName + ".xml";
-        String geomNameFull2 = geomPrefix + "AMuonGeometry" + geomName + ".xml";
-        try {
-          // just accessibility test
-          @SuppressWarnings("unused")
-		  InputStream i = AUtilities.getFileAsStream(geomNameFull1);
-          i = AUtilities.getFileAsStream(geomNameFull2);
-          i = null;
-        } catch (AAtlantisException ae) {
-          geomName = ""; // will fall back to default geometry
-        }
-      }
-      String geomIdCalo = geomPrefix + "AGeometry" + geomName + ".xml";
-      String geomMuon = geomPrefix + "AMuonGeometry" + geomName + ".xml";
-      detector = new AAtlasDetector(geomIdCalo, geomMuon);
-      AAtlasDetector.setDetector(detector);
-      
-      canvas.finalizeConstruction();
-      canvas.readCorners(AXMLUtils.getChild(rootNode, "WindowCorners"));
-      // This is needed here, design should be changed to remove this problem
-      canvas.setCurrentWindow(canvas.getCurrentWindowName());
-     
-      //Add the canvas as a NewEvent event listener
-      eventManager.addNewEventListener(canvas);
-
-      // reading the first event --------------------------------------
-      startupWin.updateText("Reading initial event");
-      getInitialEvent();
-     
-      // displaying GUI, Canvas ---------------------------------------
-      startupWin.updateText("Displaying GUI and Canvas");
-
-      // update colors to those selected in the config file
-      AColorMap.setColorMap(parameterStore.get("Prefs", "ColorMap").getI());
-      // NB: must calculate the size of GUI after calling
-      // canvas.setVisible(true), in which the real final size of Canvas
-      // will be calculated
-      canvas.setCanvasVisible(true);
-
-      // Now the canvas is on the screen and have a size, check if we need
-      // to rework the aspect ratio on YX projections at all as is the case
-      // when going to control room projectors for example - AD
-      canvas.correctAspectRatios();
-      
-      //Create the GUI
-      gui = AGUI.getGUI();
-      
-      //If we got one, show it (e.g. not in headless mode)
-      if (gui != null){
-    	gui.setMaxWidth(MAX_WIDTH);
-        gui.setName("Atlantis GUI"); // Name is used by JUnit/FEST tests
-        // Tell the parameter store about the GUI so it can inform the GUI of parameter changes
-        parameterStore.addParameterChangeListener(gui);
-        //Display it
-        gui.setVisible(true);
-        // and register as a layout change listener
-        canvas.addOverlay();
-        canvas.addLayoutChangeListener(gui);
-      }
-
-      //Before starting any loops, inform user we are ready to go
-      startupWin.updateText("Atlantis Ready");
-
-      // Set the navigation mode if given on the command line.
-      // Use SwingUtilities.invokeLater() to "defer until all pending events
-      // have been processed", avoiding the deadlock that otherwise occurs.
-      if (Atlantis.initialMode != null){
-    	  SwingUtilities.invokeLater(new Runnable() {
-			@Override
-			public void run() {
-		    	  try {
-					eventManager.setNavigationMode(initialMode);
-				} catch (InvalidEventSourceException e) {
-                    logger.error("Invalid event source", e);
-				}
-			}
-    	  });
-      }
-
-      //Set up event loop if requested
-      if ((Atlantis.loopInterval != null) 
-       && (Atlantis.selectedProjections == null )
-       && (!AGlobals.isAtlantisHeadless()) ) {
-        // A loop interval has been given, but no projections -
-        // so create an event loop dialog, but not in headless mode
-        AEventLoopDialog dialog =  AEventLoopDialog.getInstance();
-
-        //set all properties
-        dialog.setUpdateInterval(getLoopInterval());
-        dialog.showDialog();
-        dialog.startEventLoop();
-      }
-
-      //setup demo loop if requested
-      if (Atlantis.selectedProjections != null) {
-        //If user just gave -j, use default settings
-        if (Atlantis.selectedProjections.equals(""))
-          ADemoDialog.getInstance().setDefaultSequence();
-        //User may also give the update interval
-        if (getLoopInterval() != null)
-          ADemoDialog.getInstance().setTimerInterval(getLoopInterval());
-        ADemoDialog.getInstance().setVisible(true);
-        ADemoDialog.getInstance().startDemo();
-      }
- 
-      //Add an image server if requested on the command line
-      if (imageServerPort >= 0) {
-        AServerXMLRPC serv = new AServerXMLRPC(imageServerPort, AServerXMLRPCEventSource.class);
-        serv.start();
-      }
-      
-      //If we have a image saver, add it now as new event listener
-      if (imageProducer != null){
-    	eventManager.addNewEventListener(imageProducer);
-        //if we are also running in headless mode, add an automatic event loop
-        if (AGlobals.isAtlantisHeadless()){
-          //Check whether the event source is a file or an ONCRPC server
-          //For a server, start the loop in a "try hard" mode, i.e only stop on ReadEventException
-          boolean stopOnFailure = !(eventManager.getEventSource() instanceof atlantis.event.oncrpc.AONCRPCEventSource );
-          //If a loop interval is given on the command line, use it,
-          //otherwise, run in "as fast as can mode"
-          int sleepTime = (Atlantis.loopInterval != null) ? Atlantis.loopInterval*1000 : 0;
-          //Show warning in case of "as fast as we can mode"
-          if (sleepTime == 0) logger.info("No loop intervall given - processing events as fast as possible");
-          //Now create the loop
-          ADemoLoop loop = new ADemoLoop(sleepTime,new Vector<String>(Arrays.asList("NE")),stopOnFailure);
-          //And start it right away
-          loop.startDemoLoop();
-          //also wait for it to finish before the program finishes
-          synchronized (loop) { loop.wait(); }
-        }
-      }
-
-    } catch (Exception e) {
-      logger.fatal(INIT_ERROR_MSG);
-      logger.fatal(e.getMessage(), e);
-      AExceptionHandler.processException(INIT_ERROR_MSG, e);
-    } finally {
-      if (startupWin != null) {
-        startupWin.dispose();
-      }
-    }
-
-  } // initAtlantis() -----------------------------------------------------
-
-
-    protected static String getHomeDirectory()
-    {
-        // where was this class loaded from
-        String temp = Atlantis.class.getResource("Atlantis.class").getFile();
-
-        // remove "file://" or "file:"
-        if (temp.startsWith("file://")) {
-            temp = temp.substring(7);
-        } else if (temp.startsWith("file:")) {
-            temp = temp.substring(5);
-        }
-
-        if(temp.indexOf("!") > -1)
-        {
-            // atlantis is in a .jar file
-            temp = temp.substring(0, temp.indexOf("!"));
-            temp = temp.replaceAll("%20", " ");
-            return temp.substring(0, temp.lastIndexOf('/') + 1);
-        }
-        // must be the current working directory of the user
-        return System.getProperty("user.dir") + FILE_SEPAR;
-
-    } // getHomeDirectory() -------------------------------------------------
-
-    /**
-     * Process the options passed on the command line
-     * @param args the command line arguments
-     */
-    private static void processCommandLineParameters(String args[])
-    {
-
-      //echo the given command line options
-      System.out.println("Command line arguments:");
-      for(String arg : args) System.out.print(arg + " ");
-      System.out.println("\n");
-
-      //Then go and process the command line
-      (new ACommandLine()).process(args);
-      
-    } // processCommandLineParameters() -------------------------------------
-
-
-    /**
-     * Try to read the initial event
-     *  - from the given event source
-     *  - from the default event
-     */
-    private static void getInitialEvent()
-    {
-        //Get the file where the default event is stored
-        //if not a special source
-        String eventPath = Atlantis.initialEventSource;
-        
-        // if this is not a special source then consider it
-        // a) to be a file with relative or absolute path
-        // b) to be a file relative to the Atlantis directory
-        if (! eventPath.contains("://") ) {
-          //This should be a file, see if it exists
-          if(! new File(eventPath).exists()) {
-            //try prepending atlantis home directory
-            logger.info("File "+eventPath+" does not exist - trying in "+Atlantis.getHomeDirectory());
-            eventPath = Atlantis.getHomeDirectory()+eventPath;
-          }
-
-          //All non specified sources are assumed to be files
-          eventPath = "file://" + eventPath;
-        }
-      
-        //be verbose
-        logger.info("Reading the default event from " + eventPath);
-        //set the event source and read an event
-        try {
-          eventManager.setEventSource(eventPath);
-          eventManager.nextEvent();
-        } catch (InvalidEventSourceException ies){
-          //Write error message
-          String msg = "Can not access "+eventPath+": "+ies.getMessage();
-          logger.error(msg);
-          //Show error dialog
-          if (AGlobals.isAtlantisHeadless()) return;
-          JOptionPane.showMessageDialog(ACanvas.getCanvas(), msg,
-                "Invalid Event Source",JOptionPane.ERROR_MESSAGE);
-        } catch (NoMoreEventsException nme){
-          String msg = "No events in "+eventPath+": "+nme.getMessage();
-          logger.error(msg);
-          //Show error dialog
-          if (AGlobals.isAtlantisHeadless()) return;
-          JOptionPane.showMessageDialog(ACanvas.getCanvas(), msg,
-                "No Events found",JOptionPane.ERROR_MESSAGE);
-        } catch (ReadEventException rex){
-          String msg = "Can not read events from "+eventPath+": "+rex.getMessage();
-          logger.error(msg);
-          //Show error dialog
-          if (AGlobals.isAtlantisHeadless()) return;
-          JOptionPane.showMessageDialog(ACanvas.getCanvas(), msg,
-                "Can not read event",JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-    /**
-     * Get the SVN tag version from the HeadURL, which is automatically
-     * substituted by SVN.
-     */
-    private static void setSVNTagInfo()
-    {
-        // SVN expands into $HeadURL: file:///atlas/scratch0/graemes/ao-mirror/graphics/AtlantisJava/tags/AtlantisJava-09-16-05-18/src/atlantis/Atlantis.java $,
-        // we only want the tag name
-        String s = Atlantis.versionAtlantisJava;
-        // 0) Check we are in a tagged version
-        if (!s.contains("tags")){
-          Atlantis.versionAtlantisJava = "AtlantisJava (SVN tag n/a)";
-          return;
-        }
-        // 1) Replace anything after src
-        s=s.substring(0,s.indexOf("/src"));
-        // 2) Next find the "tags" subdir and cut after that
-        s=s.substring(s.indexOf("tags/")+5);
-        //this should be the version
-        Atlantis.versionAtlantisJava = s;
-    } 
-
-    public static void main(String[] args)
-    {
-
-        /**
-         * First thing always: say hello with a version number
-         */
-        //Retrieve the SVN version tag number
-        setSVNTagInfo();
-        globals.setVersion(versionAtlantisJava);
-        globals.setLivePoint1EventsURL(LIVE_POINT_1_EVENTS_URL);
-        globals.setUserConfigFile(USER_CONFIG_FILE_PATH);
-        globals.setUseOpenGL(atlantisWithOpenGL);
-        System.out.println("AtlantisJava version (SVN tag): " + Atlantis.versionAtlantisJava);
-
-        // Any uncaught exception should be reported to the developers
-        Thread.setDefaultUncaughtExceptionHandler(new ACrashReporter());
-
-        /**
-         * Now run all the checks for system properties
-         */
-
-        //Now set the default look and feel
-        setLookAndFeel();
-
-        // Disable rename file/make new directory from the file chooser
-        UIManager.put("FileChooser.readOnly", Boolean.TRUE);
-
-        /**
-         * Process the command line parameters
-         */
-        //process args
-        processCommandLineParameters(args);
-
-        //Logger can be created only after cmdl opts to catch settings
-        logger = ALogger.getLogger(Atlantis.class);
-
-        //Do some OGL checks
-        if (Atlantis.atlantisWithOpenGL) {
-          logger.info("Testing for OpenGL");
-          logger.info(AOpenGLTools.isOpenGLAvailable() ? "Open GL Available" : "Open GL Unavailable");
-        }
-
-        /**
-         * Now go and create the manifold Atlantis classes and singletons.
-         * Has to run on main thread so display is updated during initialization.
-         */
-        initAtlantis();
-        // Replace event queue by AEventQueue, but only after initialization.
-        try {
-			SwingUtilities.invokeAndWait(new Runnable() {
-				@Override
-				public void run() {
-					logger.debug("Waiting for AWT event queue to be empty.");
-				}
-			});
-		} catch (InterruptedException e) {
-			logger.error("Interrupted while waiting for event queue.", e);
-		} catch (InvocationTargetException e) {
-			logger.error("Error while waiting for event queue.",e);
-		}
-        Toolkit.getDefaultToolkit().getSystemEventQueue().push(new AEventQueue());
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ACanvas.java b/graphics/AtlantisJava/src/atlantis/canvas/ACanvas.java
deleted file mode 100755
index 41b32a59cbc3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ACanvas.java
+++ /dev/null
@@ -1,1113 +0,0 @@
-package atlantis.canvas;
-
-import atlantis.event.AEvent;
-import atlantis.event.ANewEventListener;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.Insets;
-import java.awt.Toolkit;
-import java.awt.geom.Point2D;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Stack;
-import java.util.Vector;
-import java.util.Set;
-
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JLayeredPane;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACursorFactory;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.layout.AGridLayout;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.utils.xml.AXMLUtils;
-import atlantis.gui.AClosingConfirmationDialog;
-import atlantis.gui.AInteractionToolBar;
-import atlantis.gui.APreferencesControl;
-import atlantis.interactions.AZMRInteraction;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionEventInfo;
-import atlantis.utils.ALogger;
-import java.awt.Graphics;
-import java.awt.event.WindowFocusListener;
-import java.util.Iterator;
-import javax.swing.JMenuBar;
-import javax.swing.JPanel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * ACanvas is a singleton class that acts as a sort of WindowManager It knows the currentLayout (of the
- * windows), their history and the currentWindow. It also contains the title (Menu Bar).
- * Window changes are given via two letter commands e.g. "W5" inserted into the
- * CommandProcessor (static). The command processor informs ACanvas.
- * Each window also has its own layer that is stored in a JLayeredPane object.
- */
-public class ACanvas extends JPanel implements ANewEventListener {
-    
-    //Singleton instance
-    private static ACanvas instance;
-    
-    private final static ALogger logger = ALogger.getLogger(ACanvas.class);
-    
-    /** The fraction of the screen width used by default. */
-    public final double SCREEN_USAGE = 0.73;
-    /** Temporary flag to set the window corners from config file. */
-    protected boolean customisedCorner = false;
-    
-    //the layeredPane
-    private JLayeredPane layeredPane;
-    //from some reason we count or layers from 1000 on?
-    private final int baseLayer = 1000;
-    
-    //A list of layout names and layouts
-    private Hashtable<String, ALayout> layouts = new Hashtable<String, ALayout>();
-    //The current canvas layout
-    private ALayout currentLayout;
-    //The name of the startup layout
-    private String startupLayoutName;
-    //Everyone that should get informed if the layout is changed
-    private Vector<ALayoutChangeListener> layoutChangeListeners = new Vector<ALayoutChangeListener>();
-    
-    //Save a history of the windows layouts
-    // - this is used for "Zoom/Unzoom colorimters" in VPlot
-    private Stack<ALayout> windowLayoutHistory = new Stack<ALayout>();  //History of ALayout objects
-    private Stack<String> windowNameHistory = new Stack<String>();    //History of the selected window
-    private Stack<Vector<String>> windowsActive = new Stack<Vector<String>>();        //History of active (i.e. visible windows)
-    
-    private Hashtable<String,AWindow> windowsList;   // A list of all window <name,object> pairs
-    private AWindow currentWindow;   // The currently selected window
-    private AWindow paintingWindow;  // The window we are currently painting in
-    //Everyone that should get informed about changes of the active window
-    private Vector<ChangeListener> windowChangeListeners = new Vector<ChangeListener>();
-    //Everyone that should get informed about window freeze/unfreeze changes
-    private Vector<ChangeListener> lockChangeListeners = new Vector<ChangeListener>();
-    
-    //The title bar showing Event/Run numbers etc.
-    private ATitleMenuBar title;
-    
-    //If constructed from a config file, this stores the aspect ratio of the
-    //canvas layout which was saved into the config file, this is then used
-    //later to correct if the current screen is different
-    private double oldaspect = 1.0;
-
-    private JFrame parentWindow = null;
-    
-    private APar parameterStore;
-    
-    /**
-     * Get the singleton instance.
-     * @return
-     */
-    public static synchronized ACanvas getCanvas() {
-    	if (instance==null) throw new Error("Attempted to access ACanvas instance before initialization.");
-        return instance;
-    }
-    
-    /**
-     * Create and return the singleton instance.
-     * @param parameters
-     */
-    public static synchronized ACanvas construct(Node node) {
-    	instance = new ACanvas(node);
-    	return instance;
-    }
-    
-    /**
-     * Constructs the singleton instance by reading the config file.
-     */
-    private ACanvas(Node node) {
-
-    	if (!AGlobals.isAtlantisHeadless()) {
-            // Create parent window
-            parentWindow = new JFrame("Atlantis Canvas");
-            parentWindow.add(this);
-        }
-            
-        //Create the title bar
-        title = new ATitleMenuBar();
-        
-        if (!AGlobals.isAtlantisHeadless()) {
-            parentWindow.setJMenuBar(title);
-        }
-
-        //instanciate instance pointer for singleton class
-        instance = this;
-        
-        if (!AGlobals.isAtlantisHeadless()) {
-            // AClosingConfirmationDialog class handles closing Atlantis
-            parentWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
-            parentWindow.addWindowListener(new AClosingConfirmationDialog(parentWindow));
-        
-            //Set the window icon
-            AIcon.setIconImage(parentWindow);
-        }
-        
-        // building the Layered Pane
-        layeredPane = new JLayeredPane();
-        
-        // reading all the content of Canvas configuration node
-        windowsList = new Hashtable<String,AWindow>();
-        // Allow null Node to generate partially initialized instance for unit tests of
-        // other classes that depend on ACanvas.
-        if (node!=null) readConfig(node);
-        
-    } // ACanvas() ----------------------------------------------------------
-
-    /**
-     * For testing only: create instance without initializing.
-     * @return
-     */
-    public static synchronized ACanvas constructDummyForTesting() {
-    	instance = new ACanvas(null);
-    	return instance;
-    }
-    
-    void addParentWindowFocusListener(WindowFocusListener wfl) {
-        if (parentWindow != null) {
-            parentWindow.addWindowFocusListener(wfl);
-        }
-    }
-    
-    public void setCanvasVisible(boolean v) {
-        if (parentWindow != null) {
-            parentWindow.setVisible(v);
-        } else {
-            setVisible(v);
-        }
-    }
-    
-    public Rectangle getScreenSize() {
-        if (parentWindow != null) {
-            return parentWindow.getGraphicsConfiguration().getBounds();
-        } else {
-            // If we're headless then make up a size!
-            return new Rectangle(1024, 768);
-        }
-    }
-
-    public Rectangle getStartupCanvasSize() {
-        if (parentWindow == null) {
-            return null;
-        }
-        Rectangle canvpos = parentWindow.getBounds();
-        Dimension canvlayoutdim = parentWindow.getPreferredSize();
-        Rectangle canvbound = new Rectangle(canvpos.x, canvpos.y,
-                canvlayoutdim.width, canvlayoutdim.height);
-        
-        return canvbound;
-    }
-    
-    public JMenuBar getTitleBar() {
-        if (parentWindow == null) {
-            return null;
-        }
-        return parentWindow.getJMenuBar();
-    }
-    
-    public void bringToFront() {
-        if (parentWindow != null) {
-            parentWindow.toFront();
-        }
-    }
-    
-    /*public JFrame getParentWindow() {
-        return parentWindow;
-    }*/
-    
-    private void readConfig(Node node){
-        
-        //Get a list of subnodes
-        NodeList children = node.getChildNodes();
-        
-        //Loop over all subnodes
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-            //Check wether subnode is a Window or a Layout
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                String nodeName = child.getNodeName();
-                //Add a Window or a layout
-                if (nodeName.equals("UsedWindow")) readWindow(child);
-                else if (nodeName.equals("Layout")) readLayout(child);
-            }
-        }
-        
-        // reading all the attributes of Canvas node
-        NamedNodeMap attributes = node.getAttributes();
-        // The startupLayout:
-        startupLayoutName = attributes.getNamedItem("startupLayout").getNodeValue().trim();
-        
-        // Aspect ratio stuff:
-        oldaspect = Double.NaN;
-        Node n = attributes.getNamedItem("aspectRatio");
-        
-        if (n != null) {
-            oldaspect = Double.parseDouble(
-                    attributes.getNamedItem("aspectRatio").getNodeValue().trim());
-        }
-        
-        logger.debug("Read config file with aspectRatio: " + oldaspect);
-    }
-    
-    //Read window configuration
-    private void readWindow(Node node) {
-        AWindow w = AWindow.createFromXMLConfigNode(node, getWindowsCount());
-        
-        if (!windowsList.containsKey(w.getName())) {
-            windowsList.put(w.getName(), w);
-        } else
-            throw new Error("Redefinition of window: " + w.getName());
-    }
-    
-    //Read layout configuration
-    private void readLayout(Node node) {
-        ALayout layout = new ALayout(node);
-        
-        if (!layouts.containsKey(layout.getName()))
-            layouts.put(layout.getName(), layout);
-        else
-            throw new Error("Redefinition of layout: " + layout.getName());
-    }
-    
-    //Read window corners
-    public void readCorners(Node corners) {
-        if (corners == null)
-            return;
-        //Set flag to set default corners
-        customisedCorner = true;
-        //Get list of corners
-        NodeList children = corners.getChildNodes();
-        //Loop over corners
-        for (int i = 0; i < children.getLength(); i++) {
-            Node corner = children.item(i);
-            if (corner.getNodeType() == Node.ELEMENT_NODE) {
-                //Get corner attributes
-                NamedNodeMap attributes = corner.getAttributes();
-                String windowName = AXMLUtils.tryAttribut(attributes, "windowName");
-                double x0 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "x0"));
-                double y0 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "y0"));
-                double x1 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "x1"));
-                double y1 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "y1"));
-                double x2 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "x2"));
-                double y2 = Double.parseDouble(AXMLUtils.tryAttribut(attributes, "y2"));
-                //Create an array with new window corners
-                Point2D.Double[] c = new Point2D.Double[] { new Point2D.Double(x0, y0), new Point2D.Double(x1, y1), new Point2D.Double(x2, y2) };
-                //Set the corners for this window
-                
-                getWindow(windowName).setUserCorners(c);
-            }
-        }
-        customisedCorner = false;
-    }
-    
-    
-    //Finalize the canvas construction
-    public void finalizeConstruction() {
-    	parameterStore = APar.instance();
-
-        if (!parameterStore.get("Prefs", "CanvasTitle").getStatus()) {
-            title.setVisible(false);
-        }
-
-        //Bring the startup layout on screen
-        setCurrentLayout(startupLayoutName);
-    }
-    
-    public void addOverlay() {
-    	
-    	AOverlay overlay = new AOverlay();
-    	if(parentWindow != null)
-    		parentWindow.setGlassPane(overlay);
-    	overlay.setVisible(true);
-    }
-    
-    public void correctAspectRatios() {
-        
-        // If we didn't have a saved aspect ratio or didn't know it when
-        // the config was written
-        if (Double.isNaN(oldaspect)) {
-            return;
-        }
-
-        // Only correct aspect ratio for the full screen layout, the other
-        // layouts have fixed aspect ratios and should always be okay
-        if (!currentLayout.getName().equals("FULL SCREEN")) {
-            return;
-        }
-        
-        // If aspect ratios are the same, we can stop
-        if (java.lang.Math.abs(getAspectRatio() - oldaspect) < 1e-2) {
-            logger.debug("Aspect ratio of config file same as this display, no correction required");
-            return;
-        }
-        
-        logger.info("Aspect ratio of config file (" + oldaspect + ") does not match this display (" + getAspectRatio() + ") attempting to correct");
-        
-        // Else, iterate over all windows
-        Iterator<AWindow> it = windowsList.values().iterator();
-        while(it.hasNext()) {
-            AWindow w = (AWindow)(it.next());
-            AProjection p = w.getProjection();
-            if (p instanceof AProjection2D) {
-                ((AProjection2D)p).aspectRatioChange(w, oldaspect, getAspectRatio());
-            }
-        }
-    }
-
-    /**
-     * Mimics the behavior of a normal canvas paint, but with the canvas scaled to a predefined size.
-     * @param g Graphics object to draw on
-     * @param imageWidth width of the image
-     * @param imageHeight height of the image
-     * @param type extension of image
-     */
-    public void drawScaledCanvas(Graphics g, int imageWidth, int imageHeight, String type)
-    {
-        //hide red ZMR center dot
-        AZMRInteraction.setPaintCenterDot(false);
-
-        //anti-alias pictures by default
-        boolean aastatus = APreferencesControl.getAliasMenuItem();
-        if(!aastatus)
-        	APreferencesControl.setAliasMenuItem(true);
-        
-        // Calculate the scale factors.
-       double factorX = ((double)imageWidth) / (double)getWidth();
-       double factorY = ((double)imageHeight) / (double)getHeight();
-
-       // Add the title bar, if required.
-       if (title != null && parameterStore.get("Prefs", "CanvasTitle").getStatus()) {
-
-         //Get old dimensions          
-         int titleWidth = title.getWidth();
-         int titleHeight = title.getHeight();
-         
-         if (AGlobals.isAtlantisHeadless()) {
-             Dimension d = title.getLayout().preferredLayoutSize(title);
-             titleWidth = (int)d.getWidth();
-             titleHeight = (int)d.getHeight();
-         }
-         
-         //Scale to image width (height is constant) and draw
-         title.setSize(imageWidth, titleHeight);
-         title.paint(g);
-         //restore old
-         title.setSize(titleWidth, titleHeight);
-         g.translate(0, titleHeight);
-         //Re-adjust y-scale for title height
-         factorY = ((double)(imageHeight-titleHeight))/(double)getHeight();
-       }
-
-       // Loop over all windows.
-       String[] windows = getCurrentLayout().getWindowNames();
-       for (int i=0; i<windows.length; i++)
-       {
-           AWindow window = getWindow(windows[i]);
-           int x = window.getX();
-           int y = window.getY();
-           int width = window.getWidth();
-           int height = window.getHeight();
-           // If the window is visible resize it temporarily and then draw it.
-           if (isReallyOnScreen(window)){
-
-               g.translate((int)(factorX*x), (int)(factorY*y));
-               
-               // Perhaps I should override window.setSize to automatically validate
-               // This is because AWindow is now a container with a view inside
-               // - Adam
-               window.setSize((int)(factorX*width), (int)(factorY*height));
-               window.validate();
-               
-               // Needed in headless mode because normally components don't
-               // do layout until they're really drawn
-               if (AGlobals.isAtlantisHeadless()) {
-                   window.getLayout().layoutContainer(window);  
-                   window.invalidateQuietly();
-               }
-               
-               //Now print the actual windows
-               window.print(g);
-
-               // Show ATLAS logo only on the top left window if there's 
-               // enough room and if the checkbox is selected
-               if(x == 0 && y == 0 && (imageWidth > 300 || imageHeight > 250) &&
-                  APreferencesControl.getAtlasLogoMenuItem()){
-                 g.drawImage(ACursorFactory.getInstance().getAtlasLogo(),32,4,null);
-               }
-                //reset old dimensions
-                window.setSize(width, height);
-                window.validate();
-                g.translate(-(int)(factorX*x), -(int)(factorY*y));
-            }
-        }
-
-       // Overlay does not work in XMLRPC mode (no parentWindow)
-       if (this.parentWindow != null) {
-           //get the overlay, resize to our desired canvas size, draw it, then set it back to normal
-            AOverlay overlay = (AOverlay) this.parentWindow.getGlassPane();
-            int width = overlay.getWidth();
-            int height = overlay.getHeight();
-            overlay.setSize(imageWidth, imageHeight);
-            overlay.paintComponent(g);
-            overlay.setSize(width, height);
-       }
-
-        //do reset
-        AZMRInteraction.setPaintCenterDot(true);
-        if(!aastatus)
-        	APreferencesControl.setAliasMenuItem(aastatus);
-    }
-
-
-    //Restore canvas defaults
-    public void restoreDefaults() {
-        //Current layout should never be null
-        if (currentLayout != null) {
-            if (!currentLayout.getName().equals(startupLayoutName)) {
-                setCurrentLayout(startupLayoutName);
-            }
-            String[] frontWindows = currentLayout.getStartupSequence();
-            String[] windows = this.getKnownWindowNames();
-            for (String window : windows) windowsList.get(window).restoreDefaults();
-            for (String window : frontWindows) this.moveToFrontWindow(window);
-            setCurrentWindow(currentLayout.getStartupWindow());
-        } else
-            throw new Error("Current layout is not defined");
-        
-        // If an aspect ratio correction took place when we loaded this config
-        // make sure it is reapplied on a reset - AD
-        correctAspectRatios();
-    }
-    
-    /*
-     * Return a string containing the list of currently visible windows
-     * that is then written to the config file by AConfigWriter
-     */
-    public String getStartupString() {
-        StringBuilder s = new StringBuilder();
-        //Loop over all windows in all layers
-        int maxLayer = baseLayer + currentLayout.getWindowNames().length;
-        for (int i = baseLayer; i <= maxLayer; i++) {
-            Component[] c = layeredPane.getComponentsInLayer(i);
-            for (int j = 0; j < c.length; j++)
-                if (c[j] instanceof AWindow)
-                    if (isReallyOnScreen((AWindow) c[j]))
-                        s.append(((AWindow) c[j]).getName());
-        }
-        return s.toString();
-    }
-    
-    /*
-     * Bring this window to the front, i.e. make it the topmost window
-     */
-    public void moveToFrontWindow(String windowName) {
-        //Make sure the window exists
-        if (windowsList.containsKey(windowName)) {
-            //Get the window
-            AWindow w = windowsList.get(windowName);
-            //Get the current layer of the window
-            int layer = JLayeredPane.getLayer(w);
-            //Get the other components int the same layer
-            Component[] cc = layeredPane.getComponentsInLayer(layer);
-            //Check for the current uppermost window
-            int maxLayer = baseLayer + currentLayout.getWindowNames().length;
-            
-            //Now loop over all layers above the one the object is in
-            for (int i = layer + 1; i <= maxLayer; i++) {
-                //Get all components from this layers
-                Component[] c = layeredPane.getComponentsInLayer(i);
-                //Move them down one layer
-                for (int j = 0; j < c.length; j++)
-                    layeredPane.setLayer(c[j], i - 1);
-            }
-            //Finaly move all component from the current layer to the top
-            for (int j = 0; j < cc.length; j++)
-                layeredPane.setLayer(cc[j], maxLayer);
-            //validate and repaint
-            this.validate();
-            if (!w.isVisible()) {
-                w.setVisible(true);
-            }
-            hideNonVisible();
-            w.repaintFromScratch();
-        } else
-            throw new Error("Cannot find window: " + windowName);
-    }
-    
-    /*
-     * Return window by name
-     */
-    public AWindow getWindow(String windowName) {
-        //Search for the window in the list an return it
-        if (windowsList.containsKey(windowName))
-            return (AWindow) windowsList.get(windowName);
-        else
-            throw new Error("Cannot find window: " + windowName);
-    }
-    
-    /*
-     * Repaint all but the current window
-     * Used to update SynchroCursor in all windows.
-     */
-    public void repaintOthers(Component current) {
-        //Fill all windows in an enumeration object
-        Enumeration<AWindow> myenum = windowsList.elements();
-        
-        //Loop over windows
-        while (myenum.hasMoreElements()) {
-            AWindow window = (AWindow) myenum.nextElement();
-            //repaint those that are visible
-            if ((window != current) && this.isReallyOnScreen(window))
-                window.repaint();
-        }
-    }
-    
-    private void hideNonVisible() {
-    	for (AWindow window : windowsList.values()) {
-            if (this.isValidWindowName(window.getName())) {
-                if (!this.isReallyOnScreen(window)) {
-                    if (window.isVisible()) {
-                        window.setVisible(false);
-                    }
-                }
-            }
-    	}
-    }
-    
-    /*
-     * Repaint all windows from Scratch
-     */
-    public void repaintAllFromScratch() {
-        Enumeration<AWindow> myenum = windowsList.elements();
-        
-        hideNonVisible();
-        
-        while (myenum.hasMoreElements()) {
-            AWindow window = (AWindow) myenum.nextElement();
-            
-            if (this.isReallyOnScreen(window)) {
-                if (!window.isVisible()) {
-                    window.setVisible(true);
-                }
-                window.repaintFromScratch();
-            }
-        }
-        title.repaint();
-    }
-    
-    /*
-     * Return a string will the names of all layouts
-     * to be shown in the layout dialog
-     */
-    public String[] getLayoutNames() {
-        Enumeration<String> myenum = layouts.keys();
-        String[] s = new String[layouts.size()];
-        //Loop over all layouts and concatenate their names
-        for (int i = 0; i < s.length; i++)
-            s[i] = (String) myenum.nextElement();
-        
-        return s;
-    }
-    
-    /*
-     * Get Layout by name
-     */
-    public ALayout getLayout(String name) {
-        if (layouts.containsKey(name))
-            return layouts.get(name);
-        else
-            throw new Error("getLayout, unknown: " + name);
-    }
-    
-    /*
-     * Return the current layout
-     */
-    public ALayout getCurrentLayout() {
-        return currentLayout;
-    }
-    
-    /*
-     * Set the current layout and apply the changes right away
-     */
-    public void setCurrentLayout(String newLayout) {
-        //Make sure the new layout exists
-        if (layouts.containsKey(newLayout)) {
-            
-            //get current layout and its dimension
-            currentLayout = layouts.get(newLayout);
-            Dimension dim = currentLayout.getSize();
-            
-            // clear the frame
-            setLayout(null);
-            removeAll();
-            layeredPane.removeAll();
-            
-            //Toolkit is not aware of multi-screens, but "adds them all together".
-            //  Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
-            //getMaxWindowBounds gets max bounds, again added up over multiple screens. In contrast to the above,
-            //it will account for MenuBars, StatusBars, etc from the the WindowManager
-            //  Rectangle ScreenSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
-            //This is how to get the default screen, we should rather use the one we are on
-            //  GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
-            //  GraphicsDevice gscreen = genv.getDefaultScreenDevice();
-            //  GraphicsConfiguration gconf = gscreen.getDefaultConfiguration();
-            
-            //Final total Width, Height and position of the Canvas
-            int W, H, X, Y;
-            
-            //First get the screen size of the current screen
-            Rectangle ScreenSize = getScreenSize();
-            
-            //This is not a real full screen mode, rather a maximised Window mode.
-            //In proper full screen, some window managers (such as Cacao) will allow
-            //to have the title bar/menues disappear, etc.
-            if(newLayout.equals("FULL SCREEN")) {
-                //Really take the full screen in this mode
-                W = ScreenSize.width;
-                H = ScreenSize.height;
-                X = ScreenSize.x;
-                Y = ScreenSize.y;
-            } else {
-                //if not full screen then have to take account of task bars
-                //First gets the insets (borders) from all sides
-                Insets borders = new Insets(0, 0, 0, 0);
-                if (!AGlobals.isAtlantisHeadless()) {
-                    borders = Toolkit.getDefaultToolkit()
-                            .getScreenInsets(parentWindow.getGraphicsConfiguration());
-                }
-                //calculate new usable screen size
-                ScreenSize.width -= borders.left+borders.right;
-                ScreenSize.height -= borders.top+borders.bottom;
-                ScreenSize.x += borders.left;
-                ScreenSize.y += borders.top;
-                
-                W = (int) (ScreenSize.width * SCREEN_USAGE);
-                H = ScreenSize.height;
-                X = ScreenSize.x;
-                Y = ScreenSize.y;
-            }
-            
-            //Apply the new layout dimensions
-            layeredPane.setLayout(new AGridLayout(dim, null));
-            
-            //Now check for the existing windows
-            String[] usedWindowNames = currentLayout.getWindowNames();
-            
-            //Loop over windows and add them to the new layout
-            for (int i = 0; i < usedWindowNames.length; i++) {
-                //Get the window dimensions
-                Rectangle constraint = currentLayout.getWindowConstraints(usedWindowNames[i]);
-                //Get the window itself
-                AWindow window = windowsList.get(usedWindowNames[i]);
-                //Make sure its finalized
-                if (!window.finalized) {
-                    window.finalizeConstruction();
-                }
-                //Add window to a new layer with the given dimensions
-                layeredPane.setLayer(window, baseLayer + i);
-                layeredPane.add(window, constraint);
-            }
-            // adding the layeredPane to the frame
-            setLayout(new BorderLayout());
-            add(layeredPane);
-            
-            if (parentWindow != null) {
-                //Set the new window dimensions and position
-                parentWindow.setLocation(X, Y);
-                parentWindow.setSize(W, H);
-
-                //Validate and update
-                parentWindow.validate();
-                parentWindow.repaint();
-                
-            } else {
-                
-                // This is real voodoo to make the canvas lay itself out in the
-                // right way in headless mode
-                // It seems that because there's no repaint events things like
-                // layouts often don't work in the way you expect. I'm fully
-                // willing to believe I don't understand the best way to do this.
-                // This is rather a scattergun approach that seems to work...
-                // - Adam
-                
-                setSize(W, H);
-                layeredPane.setSize(W, H);
-                
-                Dimension d = layeredPane.getLayout().preferredLayoutSize(layeredPane);
-                
-                validate();
-                repaint();
-                
-                setSize(d);
-                layeredPane.setSize(d);
-                layeredPane.getLayout().layoutContainer(layeredPane);
-            }
-            
-            fireLayoutChange();
-            
-            //Now apply window ordering
-            String[] ss = currentLayout.getStartupSequence();
-            for (int i = 0; i < ss.length; i++)  this.moveToFrontWindow(ss[i]);
-            
-            //Finally set the current window to the same it was before, if it exists
-            if ((currentWindow != null) && (currentLayout.hasWindow(currentWindow.getName())))
-                setCurrentWindow(currentWindow.getName());
-            else
-                setCurrentWindow(currentLayout.getStartupWindow());
-        } else
-            throw new Error("setCurrentLayout: unknown layout name !?");
-    }
-    
-    /*
-     * Inform everyone on the LayoutChangeListener list about the layout change
-     */
-    private void fireLayoutChange() {
-    	for (ALayoutChangeListener changeListener : layoutChangeListeners) {
-    		changeListener.layoutChanged(getCanvas());
-    	}
-    }
-    
-    /*
-     * Store the current layout in the stack
-     * This is need for layout history, used by e.g. "Zoom/Unzoom LAr/Calorimeters"
-     */
-    public void saveLayout() {
-        //Add the current layout and active window name
-        windowLayoutHistory.push(getCurrentLayout());
-        windowNameHistory.push(currentWindow.getName());
-        
-        //Also store all windows that are actually on screen
-        Vector<String> windowsOnScreen = new Vector<String>();
-        String[] usedWindowNames = currentLayout.getWindowNames();
-        for (String windowName : usedWindowNames) {
-        	AWindow window = windowsList.get(windowName);
-        	if(isReallyOnScreen(window)) {
-                windowsOnScreen.add(windowName);
-            }
-        }
-        windowsActive.push(windowsOnScreen);
-    }
-    
-    /*
-     * Revert to the previous layout in the layout history
-     */
-    void unlayout() {
-        //Make sure there is a previous one
-        if(windowLayoutHistory.size() > 0) {
-            //Get the old layout and active window
-            ALayout newLayout=windowLayoutHistory.pop();
-            String windowName=windowNameHistory.pop();
-            //Only change layout if it has actually changed
-            if(!newLayout.getName().equals(currentLayout.getName())) {
-                //Set new layout and current window
-                setCurrentLayout(newLayout.getName());
-                setCurrentWindow(windowName);
-            }
-            //now bring windows in the proper order
-            Vector<String> windowsOnScreen = windowsActive.pop();
-            
-            for (String winName : windowsOnScreen) {
-            	this.moveToFrontWindow(winName);
-            }
-        }
-    }
-    
-    /*
-     * Add objects that shall be informed if there is a change in the lock status
-     */
-    public void addLockChangeListener(ChangeListener listener) {
-        lockChangeListeners.addElement(listener);
-        listener.stateChanged(new ChangeEvent(this));
-    }
-    /*
-     * Add objects that shall be informed if there is a change in the layout
-     */
-    public void addLayoutChangeListener(ALayoutChangeListener listener) {
-        layoutChangeListeners.addElement(listener);
-        listener.layoutChanged(getCanvas());
-    }
-    
-    /*
-     * Add objects that shall be informed if there is a
-     * change in the current window
-     */
-    public void addWindowChangeListener(ChangeListener listener) {
-        windowChangeListeners.addElement(listener);
-        listener.stateChanged(new ChangeEvent(this));
-    }
-    
-    /*
-     * Check if the given window name exists in the list of windows
-     */
-    public boolean isValidWindowName(String name) {
-        return windowsList.containsKey(name);
-    }
-    
-    /*
-     * Get a string with all the existing windows
-     */
-    public String[] getKnownWindowNames() {
-        Set<String> windowNames = windowsList.keySet();
-        return windowNames.toArray(new String[windowNames.size()]);
-    }
-    
-    /*
-     * Returns the name of the current window
-     */
-    public String getCurrentWindowName() {
-        return currentWindow.getName();
-    }
-    
-    /*
-     * Return the current window
-     */
-    public AWindow getCurrentWindow() {
-        return currentWindow;
-    }
-    
-    /*
-     * Return the window we are currently painting in
-     */
-    public AWindow getPaintingWindow() {
-        return paintingWindow;
-    }
-    
-    /*
-     * Notify everyone about a change in the active window
-     */
-    private void fireWindowChange() {
-        ChangeEvent changeEvent = new ChangeEvent(this);
-        for (ChangeListener changeListener : windowChangeListeners) {
-            changeListener.stateChanged(changeEvent);
-        }
-    }
-    
-    /*
-     * Notify everyone about a change in the lock status
-     */
-    void fireLockChange() {
-        ChangeEvent changeEvent = new ChangeEvent(this);
-        for (ChangeListener changeListener : lockChangeListeners) {
-            changeListener.stateChanged(changeEvent);
-        }
-    }
-    
-    /*
-     * Get number of windows
-     */
-    public int getWindowsCount() {
-        return windowsList.size();
-    }
-    
-    /**
-     * Sets the current window. Informs all registered listeners.
-     *
-     * @param newWindowName The name of the window to be set to current.
-     */
-    public void setCurrentWindow(String newWindowName) {
-        //Make sure window does exist
-        if (windowsList.containsKey(newWindowName)) {
-            //Deselect the current window
-            if (currentWindow != null) currentWindow.deselect();
-            //Get the new window
-            currentWindow = (AWindow) windowsList.get(newWindowName);
-            //Select it
-            currentWindow.select();
-            //Inform APar class about the new current window
-            parameterStore.setCurrentWindowIndex(currentWindow.getIndex());
-            //Move the current window on top of all others
-            moveToFrontWindow(currentWindow.getName());
-            //Inform everyone about the change
-            fireWindowChange();
-        } else
-            throw new Error("setCurrentWindow, window: " + newWindowName + " , doesn't exist !?");
-    }
-    
-    /**
-     * Sets the currently window currently being painted
-     *
-     * @param window the window being painted
-     */
-    public void setPaintingWindow(AWindow window) {
-        paintingWindow = window;
-    }
-    
-    /**
-     * Copy settings from one window to another window
-     *
-     * @param from the window to copy settings from
-     * @param to the window to copy settings to
-     */
-    public void copyWindowSettings(String from, String to) {
-        AWindow fromW = getWindow(from);
-        AWindow toW = getWindow(to);
-        
-        parameterStore.copyParameters(from, to);
-        
-        // IMPORTANT! Do not change the order
-        // setCurrentWindow() should be always before setProjection()
-        setCurrentWindow(to);
-        
-        // copy the projection, group and scales
-        toW.setProjection(fromW.getProjection());
-        toW.setGroup(fromW.getGroupName());
-        toW.setScaleStatus(fromW.getScaleStatus());
-        
-        // copy the interaction (no interactions valid for EventInfo projection)
-        if(!(fromW.getProjection() instanceof AProjectionEventInfo))
-        {
-        	AInteractionToolBar fromI = fromW.getInteractionToolBar();
-        	AInteractionToolBar toI = toW.getInteractionToolBar();
-        
-        	toI.setSelectedGroup(fromI.getSelectedGroupName());
-        	// copy the state of the panel
-        	toI.getSelectedGroup().setGroupState(fromI.getSelectedGroup());
-        }
-        // for LegoPlot windows we need to set the (x,y,z)-corners from the projection
-        // TODO: Check and understand this. Previously there was no check that toW was
-        //       an instance of AProjectionLegoPlot, put perhaps this works because only
-        //       ever copy settings from one projection to another of the same type?
-        if(fromW.getProjection() instanceof AProjectionLegoPlot
-        		&& toW.getProjection() instanceof AProjectionLegoPlot) {
-            AProjectionLegoPlot.setxz(toW.getIndex(), AProjectionLegoPlot.getxz(fromW.getIndex()));
-            AProjectionLegoPlot.setyz(toW.getIndex(), AProjectionLegoPlot.getyz(fromW.getIndex()));
-            //reset the center of detector dot on ZMR
-            toW.getInteractionManager().setContext(toW.getInteractionToolBar().getSelectedGroup());
-        }
-        //copy the user corners
-        toW.setUserCorners(fromW.getUserCorners());
-    }
-    
-    /**
-     * As each window has its own layer, find the window that is in this window
-     * 
-     * @param layer the layer which the window is in
-     */
-    private AWindow getWindowForLayer(int layer) {
-        //Get all the components in this layer
-        Component[] c = layeredPane.getComponentsInLayer(layer);
-        //Return the first instance of AWindow
-        for (int i = 0; i < c.length; i++)
-            if (c[i] instanceof AWindow) return (AWindow) c[i];
-        //Otherwise return 0
-        return null;
-    }
-    
-    /**
-     * Get the associated tile menu bar
-     */
-    public ATitleMenuBar getATitle() {
-        return title;
-    }
-    
-    /**
-     * Get the top-most window at a certain point
-     *
-     * @param x x-coordinate in pixels
-     * @param y y-coordinate in pixels
-     */
-    private AWindow getWindowForPoint(double x, double y) {
-        //Loop over all layers
-        int maxLayer = baseLayer + currentLayout.getWindowNames().length;
-        for (int lay = maxLayer; lay >= 0; lay--) {
-            //Get the window that is in this layer
-            AWindow w = getWindowForLayer(lay);
-            if (w == null || currentLayout == null) {
-                continue;
-            }
-            //Get the window rectangle
-            Rectangle r = currentLayout.getWindowConstraints(w.getName());
-            //Check if x,y is inside the rectangle
-            if (r.contains(x, y))
-                return w;
-        }
-        
-        return null;
-    }
-    
-    /**
-     * Check if a given window is partially visible
-     * 
-     * @param window the window to check
-     */
-    public boolean isReallyOnScreen(AWindow window) {
-        //The full area covered by the canvas
-        Dimension layoutSize = currentLayout.getSize();
-        
-        //Run over every single point on the canvas 
-        //until we hit one that belongs to the window -- aaaaaarrrrggghhh!!! (SB?)
-        
-        //This function almost always exits on the first pixel
-        //Profiling indicates it takes only a few miliseconds
-        //even in very rare worst cases - AD
-        for (int j = 0; j < layoutSize.height; j++)
-            for (int i = 0; i < layoutSize.width; i++)
-                if (getWindowForPoint(i + 0.5, j + 0.5).equals(window))
-                    return true;
-        
-        return false;
-    }
-
-  /**
-   * Implementation of the new event listener: gets called for each new event
-   * and repaints all the windows.
-   * 
-   * @param evt the new event
-   */
-    @Override
-    public void newEvent(AEvent evt) {
-    	repaintAllFromScratch();
-    }
-    
-    /** Return the aspect ratio of the canvas drawing area (hopefully) as h/w.
-     *  Sorry if this is usually defined as w/h? - AD */
-    public double getAspectRatio() {
-        Dimension d = layeredPane.getSize();
-        return d.getHeight() / d.getWidth();
-    }
-
-   /**
-    * Calculates the image height that will result if one resizes the current canvas to the given width.
-    * @param width target width
-    * @return corresponding height
-    */
-    public int getRespectiveHeight(int width){
-
-      //Get rootpane dimensions
-      int canvasWidth = getWidth();
-      int canvasHeight = getHeight();
-
-      //calculate factor
-      double factor = ((double)width) / canvasWidth;
-
-      //Account for menu bar if its there
-      if (title != null && parameterStore.get("Prefs", "CanvasTitle").getStatus()) {
-      //if (getTitleBar() != null && getTitleBar().isVisible()){
-            int height = title.getHeight();
-
-            if (AGlobals.isAtlantisHeadless()) {
-                // In headless mode the menu bar isn't really enabled
-                // So get the size it would be if it was
-                height = (int) (title.getLayout().preferredLayoutSize(title).getHeight());
-            }
-
-            return (int) (factor * canvasHeight) + height;
-
-        }
-
-      //Otherwise just scale
-      return (int)(factor*canvasHeight);
-   }
-
-} //ACanvas
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ADrawCalorimeterSummedEndcaps.java b/graphics/AtlantisJava/src/atlantis/canvas/ADrawCalorimeterSummedEndcaps.java
deleted file mode 100755
index c7b6a307a492..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ADrawCalorimeterSummedEndcaps.java
+++ /dev/null
@@ -1,937 +0,0 @@
-package atlantis.canvas;
-
-import java.awt.Color;
-
-import atlantis.data.ACalorimeterData;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.utils.AMath;
-import atlantis.utils.APolygon;
-
-/**
- * Contains the function for drawing the summed LAr and HEC endcaps
- * 
- * @author Mark Stockton
- */
-public class ADrawCalorimeterSummedEndcaps
-{
-    static int minEtaIndex,minPhiIndex,maxEtaIndex,maxPhiIndex,numCombinedCells,binvalue=1,SmallestEtaBinNumber,LargestEtaBinNumber;
-    static double etaBin, phiBin, SmallestZMin,maxCellEnergy,minCellEnergy;
-    static String name;
-    
-    protected static APar parameterStore = APar.instance();
-    
-    /**
-     * Draws the summed endcaps. This method is called
-     * from drawCalorimeters and should not be used directly.
-     *
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     * @param calorimeter ACalorimeterData current calorimeter
-     * @param etaIndex short[] index of eta values
-     * @param phiIndex short[] index of phi values
-     * @param side byte[] side of detector 
-     */
-    public static void drawCalorimeterSummedEndcaps(AWindow window, AGraphics ag, AProjection2D projection, ACalorimeterData calorimeter, short[] etaIndex, short[] phiIndex, byte[] side)
-    {
-        resetGlobalValues(calorimeter.getName());
-        ACoord data;
-        double[][] EndcapBinnedEnergy = new double[(36/binvalue)][(64/binvalue)];
-        calorimeter.makeDrawList();
-        //loop over drawlist to find z of first plane and smallest and largest eta
-        setSmallestAndLargest(calorimeter);
-        //now loop over drawlist to draw
-        for (int k = 0; k < calorimeter.getNumDraw(); k++)
-        {
-            int j = calorimeter.getDrawIndex(k);
-            short detectorIndex = (short) ACalorimeterDetector.getDetectorIndex(calorimeter.getIdFromIndex(j));
-            ACalorimeterDetector currentDetector=ACalorimeterDetector.get(detectorIndex);
-            if (detectorIndex >= 0)
-            {
-                ACoord coord = currentDetector.getCell(projection, etaIndex[j], phiIndex[j], side[j]);
-                if (coord.hv[0].length > 0)
-                {
-                    //has a cell so get its energy
-                    double cellEnergy=calorimeter.getEnergy(j);
-                    //find the eta min and max of each cell
-                    double[] etaminmax=findEtaMinAndMax(currentDetector,etaIndex[j],side[j]);
-                    //test to see if the cell overlaps the eta border
-                    if(etaminmax[2]==1)    
-                    {
-                        //Only want cells upto the eta split
-                        double middle=parameterStore.get("YX", "SplitEta").getD()-(0.5*etaBin);
-                        //find the min and max of each cell
-                        double[] minmax1=findMinAndMax(currentDetector,etaminmax[0],middle,phiIndex[j]);
-                        //has to find out how many cells overlap new binning border
-                        int totNumOfCells1 =findNumberOfCells(minmax1);
-                        //Only want cells above the eta split
-                        middle=parameterStore.get("YX", "SplitEta").getD()+(0.5*etaBin);
-                        //find the min and max of each cell
-                        double[] minmax2=findMinAndMax(currentDetector,middle,etaminmax[1],phiIndex[j]);
-                        //has to find out how many cells overlap new binning border
-                        int totNumOfCells2 =findNumberOfCells(minmax1);
-                        //check found positive number of cells
-                        int NumOfCellsTotal=0;
-                        if(totNumOfCells1>0)
-                            NumOfCellsTotal+=totNumOfCells1;
-                        else
-                            System.out.println("Found negative amount of cells!?!");
-                        if(totNumOfCells2>0)
-                            NumOfCellsTotal+=totNumOfCells2;
-                        else
-                            System.out.println("Found negative amount of cells!?!");
-                        if(NumOfCellsTotal>0)
-                        {
-                            //split energy between the cells
-                            cellEnergy/=NumOfCellsTotal;
-                            //now add on energy
-                            if(totNumOfCells1>0)
-                            {
-                                EndcapBinnedEnergy=AddOnToEnergy(EndcapBinnedEnergy, cellEnergy, minmax1);
-                            }
-                            if(totNumOfCells2>0)
-                            {
-                                EndcapBinnedEnergy=AddOnToEnergy(EndcapBinnedEnergy, cellEnergy, minmax2);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        //find the min and max of each cell
-                        double[] minmax=findMinAndMax(currentDetector,etaminmax[0],etaminmax[1],phiIndex[j]);
-                        //has to find out how many cells overlap new binning border
-                        int totNumOfCells =findNumberOfCells(minmax);
-                        //if found cells
-                        if(totNumOfCells>0)
-                        {
-                            //split energy between the cells
-                            cellEnergy/=totNumOfCells;
-                            //not overlapping eta split so just add on energy
-                            EndcapBinnedEnergy=AddOnToEnergy(EndcapBinnedEnergy, cellEnergy, minmax);
-                        }
-                        else
-                            System.out.println("Found negative amount of cells!?!");
-                    }
-                }
-            }
-        }
-        //if no cells then don't need to draw 
-        if(numCombinedCells==0)
-            return;
-        //now need to order energy into a list aswell as get the geometry of cells with energy
-        double[] EndcapBinnedEnergyList;
-        double[] YXBinnedEnergyList=new double[numCombinedCells];//needed as could be FR projection
-        double[][][] YXhv=new double[2][numCombinedCells][0];
-        int currentCount=0;
-        for(int a=minEtaIndex; a<=maxEtaIndex;a++)
-        {
-            for(int b=minPhiIndex; b<=maxPhiIndex;b++)
-            {
-                if(EndcapBinnedEnergy[a][b]>0.0)
-                {
-                    //has an energy so store its cell coordinates
-                    ACoord coord = calculateCellGeometry(a,b);
-                    YXhv[0][currentCount]=coord.hv[0][0];
-                    YXhv[1][currentCount]=coord.hv[1][0];
-                    //sorts energy into a list less blank cells
-                    YXBinnedEnergyList[currentCount]=EndcapBinnedEnergy[a][b];
-                    currentCount++;
-                    //check if is largest/smallest cell energy
-                    if(EndcapBinnedEnergy[a][b]>maxCellEnergy)
-                        maxCellEnergy=EndcapBinnedEnergy[a][b];
-                    if(EndcapBinnedEnergy[a][b]<minCellEnergy)
-                        minCellEnergy=EndcapBinnedEnergy[a][b];
-                }
-            }            
-        }
-        //store coords and scale for display
-        ACoord YXData = new ACoord(YXhv);
-        //now need to alter to FR projection if needed otherwise will continue with temp
-        if(projection instanceof AProjectionFR)
-        {
-            //convert data to FR and add data to loop in phi
-            data=convertToFR(YXData, window);
-            //now need to loop the energies
-            EndcapBinnedEnergyList=new double[3*numCombinedCells];
-            for(int j=0; j<numCombinedCells;j++)
-            {
-                EndcapBinnedEnergyList[j]=YXBinnedEnergyList[j];
-                EndcapBinnedEnergyList[j+numCombinedCells]=YXBinnedEnergyList[j];
-                EndcapBinnedEnergyList[j+(2*numCombinedCells)]=YXBinnedEnergyList[j];
-            }
-            numCombinedCells*=3;//now have 3 lots of cells
-        }
-        else
-        {
-            //If not FR then the YX values are correct
-            EndcapBinnedEnergyList=YXBinnedEnergyList;
-            data=YXData;
-        }
-        data = window.calculateDisplay(projection.nonLinearTransform(data));
-        // Draw the cell frames
-        boolean drawCells = parameterStore.get( name, "Cells").getStatus();
-        if (drawCells)
-            drawCells(window, ag, data, EndcapBinnedEnergyList);
-        // Draw the histograms.
-        ACalorimeterData.drawEndcapHistogram(calorimeter, window, ag, projection);
-    }
-
-    /**
-     * Resets gobal values
-     * @param CalName name of calorimeter
-     */
-    protected static void resetGlobalValues(String CalName)
-    {
-        name=CalName;
-        minEtaIndex=999;
-        minPhiIndex=999;
-        maxEtaIndex=0;
-        maxPhiIndex=0;
-        numCombinedCells=0;
-        SmallestZMin = 99999.0;
-        SmallestEtaBinNumber = 99999;
-        LargestEtaBinNumber = 0;
-        maxCellEnergy=0.0;
-        minCellEnergy = 99999.0;
-        //check if using 0.1 binning or 0.2 binning
-        if(name.equals("HEC"))
-            binvalue = parameterStore.get("YX", "HECBin").getI();
-        else
-            binvalue = parameterStore.get("YX", "LArBin").getI();
-        if(binvalue==3)
-        {
-            etaBin=0.1;
-            phiBin=(2*Math.PI/64);
-            binvalue=1;
-        }
-        else
-        {
-            etaBin=0.1*binvalue;
-            phiBin=(2*Math.PI/64)*binvalue;//(2*Math.PI/64)=0.098
-        }
-    }
-    
-    /**
-     * Set the smallest Z, smallest and largest eta
-     * 
-     * @param calorimeter ACalorimeterData current calorimeter
-     */
-    protected static void setSmallestAndLargest(ACalorimeterData calorimeter)
-    {
-        double largestRho=0.0,smallestRho=99999.0;
-        double largestEtaValue=0.0,smallestEtaValue=99999.0;
-        //to shorten detectors to loop over
-        short prevDetectorIndex=999;
-        //loop over drawlist
-        for (int k = 0; k < calorimeter.getNumDraw(); k++)
-        {
-            int j = calorimeter.getDrawIndex(k);
-            short detectorIndex = (short) ACalorimeterDetector.getDetectorIndex(calorimeter.getIdFromIndex(j));
-            ACalorimeterDetector currentDetector=ACalorimeterDetector.get(detectorIndex);
-            String detectorName=currentDetector.getName();
-            if (detectorIndex!=prevDetectorIndex && detectorIndex >= 0 
-                    && (detectorName.indexOf("Endcap")>0 || detectorName.indexOf("EC")>=0 || detectorName.equals("HEC")))
-            {
-                //in a different detector
-                prevDetectorIndex=detectorIndex;
-                //find z of the first plane
-                if(currentDetector.getZMin()<SmallestZMin)
-                {
-                    SmallestZMin=currentDetector.getZMin();
-                }
-                //find smallest rho
-                if(currentDetector.getRMin()<smallestRho)
-                {
-                    smallestRho=currentDetector.getRMin();
-                    largestEtaValue=AMath.etaAbs(currentDetector.getZMin(), smallestRho);
-                }
-                //find largest rho
-                if(currentDetector.getRMax()>largestRho)
-                {
-                    largestRho=currentDetector.getRMax();
-                    smallestEtaValue=AMath.etaAbs(currentDetector.getZMin(), largestRho);
-                }
-            }
-        }
-        //if drawing cell outlines then this will have already been done 
-        if (splitBinning() && !parameterStore.getUnknown("Det", "CaloDetail").getStatus())
-            ACalorimeterDetector.setEtaSplit();            
-        //if using split binning and eta is in inner section
-        if(splitBinning() && smallestEtaValue>=parameterStore.get("YX", "SplitEta").getD())
-        {
-            double belowSplit=parameterStore.get("YX", "SplitEta").getD()/0.1;
-            double aboveSplit=(smallestEtaValue-parameterStore.get("YX", "SplitEta").getD())/0.2;
-            SmallestEtaBinNumber=(int)Math.floor(belowSplit+aboveSplit);
-        }
-        else
-        {
-            SmallestEtaBinNumber=(int)Math.floor(smallestEtaValue/etaBin);
-        }
-        if(splitBinning() && largestEtaValue>=parameterStore.get("YX", "SplitEta").getD())
-        {
-            double belowSplit=parameterStore.get("YX", "SplitEta").getD()/0.1;
-            double aboveSplit=(largestEtaValue-parameterStore.get("YX", "SplitEta").getD())/0.2;
-            LargestEtaBinNumber=(int)Math.floor(belowSplit+aboveSplit);
-        }
-        else
-        {
-        LargestEtaBinNumber=(int)Math.floor(largestEtaValue/etaBin);
-        }
-    }
-    
-    /**
-     * Test to see if using split binning
-     * 
-     * @return Status of if using split binning
-     */
-    protected static boolean splitBinning()
-    {
-        int test=0;
-        if(name.equals("HEC"))
-            test = parameterStore.get("YX", "HECBin").getI();
-        else
-            test = parameterStore.get("YX", "LArBin").getI();
-        if(test==3)
-            return true;
-        else
-            return false;
-    }
-    
-    /**
-     * Finds the max and min values of the hit cell
-     * Also tests and sets the min and max indicies for eta and phi
-     * 
-     * @param currentDetector ACalorimeterDetector current detector 
-     * @param etaIndex short index of eta values
-     * @param side byte side of detector 
-     * 
-     * @return minAndMax[0] double minEta of cell
-     * @return minAndMax[1] double maxEta of cell
-     * @return minAndMax[2] double status of if is an overlapping cell
-     */
-    protected static double[] findEtaMinAndMax(ACalorimeterDetector currentDetector, short etaIndex, byte side)
-    {
-        double realEtaBin=etaBin;
-        //if using split binning and eta is in outer section
-        if(splitBinning() && Math.abs(currentDetector.getEtaMin(etaIndex, side))>=parameterStore.get("YX", "SplitEta").getD())
-        {
-            realEtaBin=0.2;
-        }
-        //used for x when taking arsinh(x)=ln(x+sqrt(x*x+1))
-        double asinhOf;
-        //have to alter eta so can be drawn at the front layer
-        double zFactor = SmallestZMin/currentDetector.getZMin();
-        //do for minimum of cell
-        double calcEtaMin=Math.abs(currentDetector.getEtaMin(etaIndex, side));
-        asinhOf = zFactor*Math.sinh(calcEtaMin);
-        calcEtaMin = Math.log(asinhOf + Math.sqrt(asinhOf*asinhOf+1));
-        //do for center of cell
-        double calcEta=Math.abs(currentDetector.getEta(etaIndex, side));
-        asinhOf = zFactor*Math.sinh(calcEta);
-        calcEta= Math.log(asinhOf + Math.sqrt(asinhOf*asinhOf+1));
-        //find cell size in eta and phi
-        double deta=currentDetector.getDeltaEta();
-        double minEta,maxEta;
-        //check for overlaping cells in eta and phi
-        if(deta>realEtaBin)
-        {
-            minEta=calcEtaMin;
-            maxEta=minEta+deta;
-        }
-        else
-        {
-            minEta=calcEta;
-            maxEta=minEta;//there is only 1 cell
-        }    
-
-        //make minEta in detector otherwise causes problems if SplitEta=SmallestEtaBinNumber*0.1
-        if(minEta<SmallestEtaBinNumber*0.1)
-        {
-            minEta=SmallestEtaBinNumber*0.1;
-        }
-        
-        //now store in variable to return
-        double[] minAndMax=new double[3];
-        minAndMax[0]= minEta;
-        minAndMax[1]= maxEta;
-        
-        if(splitBinning())
-        {
-            if(minEta<parameterStore.get("YX", "SplitEta").getD() && 
-                maxEta>parameterStore.get("YX", "SplitEta").getD())
-            {
-                minAndMax[2]=1;//overlapping cell
-            }
-            else
-                minAndMax[2]=0;
-        }
-        else
-            minAndMax[2]=0;
-        return minAndMax;
-    }
-    
-    /**
-     * Finds the max and min values of the hit cell
-     * Also tests and sets the min and max indicies for eta and phi
-     * 
-     * @param currentDetector ACalorimeterDetector current detector
-     * @param minEta double min eta of cell to draw
-     * @param maxEta double max eta of cell to draw 
-     * @param phiIndex short index of phi values 
-     * 
-     * @return minAndMax[0] double minEta of cell
-     * @return minAndMax[1] double maxEta of cell
-     * @return minAndMax[2] double minPhi of cell
-     * @return minAndMax[3] double maxPhi of cell
-     */
-    protected static double[] findMinAndMax(ACalorimeterDetector currentDetector, double minEta, double maxEta, short phiIndex)
-    {
-        double realEtaBin=etaBin, realPhiBin=phiBin;
-        //if using split binning
-        if(splitBinning())
-        {
-            //if eta is in inner section
-            if(minEta>=parameterStore.get("YX", "SplitEta").getD())
-            {
-                realEtaBin=0.2;
-                realPhiBin=(2*Math.PI/32);
-            }
-        }    
-        //find cell size in eta and phi
-        double deta=currentDetector.getDeltaEta();
-        double dphi=currentDetector.getDeltaPhi();
-        double minPhi,maxPhi;
-        //check for overlaping cells in eta and phi
-        if(deta>realEtaBin)
-        {
-            if(realEtaBin==etaBin)
-            {
-                minEta=Math.floor(minEta/realEtaBin);
-                maxEta=Math.floor(maxEta/realEtaBin);
-            }
-            else
-            {
-                //inside split binning
-                double belowSplit=parameterStore.get("YX", "SplitEta").getD()/0.1;
-                double aboveSplit=(minEta-parameterStore.get("YX", "SplitEta").getD())/0.2;
-                minEta=Math.floor(belowSplit+aboveSplit);
-                aboveSplit=(maxEta-parameterStore.get("YX", "SplitEta").getD())/0.2;
-                maxEta=Math.floor(belowSplit+aboveSplit);
-            }
-        }
-        else
-        {
-            if(realEtaBin==etaBin)
-            {
-                minEta=Math.floor(minEta/realEtaBin);
-            }
-            else
-            {
-                //split binning
-                double belowSplit=parameterStore.get("YX", "SplitEta").getD()/0.1;
-                double aboveSplit=(minEta-parameterStore.get("YX", "SplitEta").getD())/0.2;
-                minEta=Math.floor(belowSplit+aboveSplit);
-            }
-            maxEta=minEta;//there is only 1 cell
-        }    
-        if(dphi>realPhiBin)
-        {
-            minPhi=Math.abs(currentDetector.getPhiMin(phiIndex));
-            minPhi=Math.floor(minPhi/realPhiBin);
-            maxPhi=Math.floor(minPhi+(dphi/realPhiBin));
-        }
-        else
-        {
-            minPhi=Math.abs(currentDetector.getPhi(phiIndex));
-            minPhi=Math.floor(minPhi/realPhiBin);
-            maxPhi=minPhi;//there is only 1 cell
-        }    
-        //check for exceeding array limits
-        if(maxPhi>=(64/binvalue))
-        {
-            maxPhi=(64/binvalue)-1;
-            if(minPhi>=(64/binvalue)-1)
-                minPhi=(64/binvalue)-1;
-        }
-        if(minPhi<0)
-        {
-            minPhi=0;
-            if(maxPhi<0)
-                maxPhi=0;
-        }
-        //check not out of eta array size range
-        if(maxEta>=(36/binvalue))
-        {
-            maxEta=(36/binvalue)-1;
-            if(minEta>=(36/binvalue))
-                minEta=(36/binvalue)-1;
-        }
-        //check physical eta conditions 
-        if(maxEta>LargestEtaBinNumber)
-        {
-            maxEta=LargestEtaBinNumber;
-            if(minEta>LargestEtaBinNumber)
-                minEta=LargestEtaBinNumber;
-        }
-        if(minEta<SmallestEtaBinNumber)
-        {
-            minEta=SmallestEtaBinNumber;
-            if(maxEta<SmallestEtaBinNumber)
-                maxEta=SmallestEtaBinNumber;
-        }
-        //find min and max eta and phi indices
-        if(minEta<minEtaIndex)
-            minEtaIndex=(int)minEta;
-        if(maxEta>maxEtaIndex)
-            maxEtaIndex=(int)maxEta;
-        if(minPhi<minPhiIndex)
-            minPhiIndex=(int)minPhi;
-        if(maxPhi>maxPhiIndex)
-            maxPhiIndex=(int)maxPhi;
-        //now store in variable to return
-        double[] minAndMax=new double[4];
-        minAndMax[0]= minEta;
-        minAndMax[1]= maxEta;
-        minAndMax[2]= minPhi;
-        minAndMax[3]= maxPhi;
-        return minAndMax;
-    }
-       
-    /**
-     * Finds the number of cells in the new binning
-     * 
-     * @param minmax array containing: minEta, maxEta, minPhi, maxPhi
-     */
-    protected static int findNumberOfCells(double[] minmax)
-    {
-        int numOfEtaCells=0;
-        int numOfPhiCells=0;
-        double minEta=minmax[0];
-        double maxEta=minmax[1];
-        double minPhi=minmax[2];
-        double maxPhi=minmax[3];
-        //calculate the number of cells
-        //add one as difference in index is 1 less than number of cells
-        numOfEtaCells+=maxEta-minEta+1;
-        numOfPhiCells+=maxPhi-minPhi+1;
-        //get total number of cells 
-        int totNumOfCells = numOfEtaCells*numOfPhiCells;
-        return totNumOfCells;
-    }
-    
-    /**
-     * Adds on the energy to EndcapBinnedEnergy and then returns it
-     * 
-     *  @param EndcapBinnedEnergy double[][] energy listing of cells [eta][phi] 
-     *  @param cellEnergy double energy of each new cell
-     *  @param minmax double[] min and max of cell in eta and phi
-     *  
-     *  @return EndcapBinnedEnergy double[][] altered energy listing of cells [eta][phi] 
-     */
-    protected static double[][] AddOnToEnergy(double[][] EndcapBinnedEnergy, double cellEnergy, double[] minmax)
-    {
-        //now loop over the min to max for eta and phi
-        for(int a= (int) minmax[0]; a<=(int) minmax[1]; a++)
-        {
-            for(int b=(int) minmax[2]; b<=(int) minmax[3]; b++)
-            {
-                //add to cell count if no energy already stored in cell 
-                if(EndcapBinnedEnergy[a][b]==0.0)
-                    numCombinedCells++;
-                //add energy to cell
-                EndcapBinnedEnergy[a][b]+= cellEnergy;
-            }
-        }
-        return EndcapBinnedEnergy;
-    }
-
-    /**
-     * Calculates the cell geometry from its eta and phi bin numbers
-     * 
-     * @param a int eta bin number
-     * @param b int phi bin number
-     * 
-     * @return coord Acoord cell coords
-     */
-    protected static ACoord calculateCellGeometry(int a, int b)
-    {
-        double realEtaBin=etaBin, realPhiBin=phiBin;
-        double eta=a*etaBin;
-        double phi=b*phiBin;
-        //if using split binning and eta is in inner section
-        if(splitBinning() && eta>=parameterStore.get("YX", "SplitEta").getD())
-        {
-            realEtaBin=0.2;
-            realPhiBin=(2*Math.PI/32);
-            double belowSplit=parameterStore.get("YX", "SplitEta").getD()/0.1;
-            double aboveSplit=a-belowSplit;
-            eta=aboveSplit*0.2+belowSplit*0.1;
-            phi=b*realPhiBin;
-        }
-        double[][] temphv = new double[2][];
-
-        //all drawn on the front plane of the detector
-        double newrMax=SmallestZMin/Math.sinh(eta);
-        double newrMin=SmallestZMin/Math.sinh(eta+realEtaBin);
-        //store the cell coords
-        temphv[0] = new double[] {newrMax*Math.cos(phi), newrMax*Math.cos(phi+realPhiBin),
-                              newrMin*Math.cos(phi+realPhiBin), newrMin*Math.cos(phi)};
-        temphv[1] = new double[] {newrMax*Math.sin(phi), newrMax*Math.sin(phi+realPhiBin),
-                              newrMin*Math.sin(phi+realPhiBin), newrMin*Math.sin(phi)};
-        return new ACoord(temphv);
-    }
-    
-    /**
-     * Converts cells to FR using normal convertYXtoFR
-     * Then adds on data above and below so loops in phi
-     * 
-     * @param YXData ACoord data in YX projection
-     * @param window AWindow current window
-     * 
-     * @return coord Acoord cell coords
-     */
-    protected static ACoord convertToFR(ACoord YXData, AWindow window)
-    {
-        //convert to FR then have to loop data
-        YXData.convertYXToFR();
-        //new hv to store the values at + and - 2pi
-        double[][][] FRhv=new double[2][3*numCombinedCells][YXData.hv[0][0].length];
-        //get corners and then shift data to be inside corners
-        double phiTop = window.getUserCorners()[0].y;
-        double phiBottom = window.getUserCorners()[2].y;
-        int factor=0;
-        if(phiTop>720.0)
-            //-2 as already draws upto 720 so doensn't need this extra 2*360
-            factor=(int) Math.ceil(phiTop/360.0)-2;
-        if(phiBottom<-360.0)
-            //-1 as already draws down to -360 so doensn't need this extra -1*360
-            factor=(int) Math.floor(phiBottom/360.0)-1;
-        for(int j=0; j<numCombinedCells;j++)
-            for(int k=0; k<YXData.hv[0][j].length; k++)
-            {
-                FRhv[1][j][k]=YXData.hv[1][j][k]+360.0*(factor-1);
-                FRhv[1][numCombinedCells+j][k]=YXData.hv[1][j][k]+360.0*factor;
-                FRhv[1][(2*numCombinedCells)+j][k]=YXData.hv[1][j][k]+360.0*(factor+1);
-                FRhv[0][j][k]=YXData.hv[0][j][k];
-                FRhv[0][numCombinedCells+j][k]=YXData.hv[0][j][k];
-                FRhv[0][(2*numCombinedCells)+j][k]=YXData.hv[0][j][k];
-            }
-        //now store into data to be used to draw
-        return new ACoord(FRhv);
-    }
-    
-    /**
-     * Draws the cells 
-     * 
-     * @param ag AGraphics graphics to draw on
-     * @param data ACoord cell geometries
-     * @param EndcapBinnedEnergyList double[] energy of each cell
-     */
-    protected static void drawCells(AWindow window, AGraphics ag, ACoord data, double[] EndcapBinnedEnergyList)
-    {
-        //Storage of parameters to be used later
-        Color[] colorMap = AColorMap.getColors();
-        //AParameter frame = parameterStore.get(name, "Frame");
-        boolean drawFrame = parameterStore.get(name, "Frame").getStatus();
-        int frameColor = parameterStore.get(name, "Frame").getI();
-        //only draw frames for Grey/BW color maps if is selected to draw frames
-        if(drawFrame && AColorMap.drawFrames())
-            drawFrame=true;
-        else
-            drawFrame=false;
-        AParameter cellGeometry = parameterStore.get(name, "CellGeometry");
-        // Draw frames for the filled cells.
-        if (drawFrame && cellGeometry.getStatus())
-        {
-            for (int j = 0; j < numCombinedCells; j++)
-            {
-                ag.setColor(colorMap[frameColor]);
-                ag.drawPolygon(data.hv[0][j], data.hv[1][j], data.hv[0][j].length);
-            }
-        }
-        // Draw the cell geometry.
-        AParameter cellOutline = parameterStore.get(name, "CellOutline");
-        // Draw filled cells.
-        if (cellGeometry.getStatus())
-        {
-            for (int j = 0; j < numCombinedCells; j++)
-            {
-                ag.setColor(colorMap[cellGeometry.getI()]);
-                ag.fillPolygon(data.hv[0][j], data.hv[1][j], data.hv[0][j].length);
-            }
-        }
-        // Draw cell outlines.
-        if (cellOutline.getStatus())
-        {
-            ag.updateDrawParameters(new ADrawParameters(true, cellOutline.getI(), 0, 1, 0, 0, false, 1, 0));
-            for (int j = 0; j < numCombinedCells; ++j)
-            {
-                ag.drawPolygon(data.hv[0][j], data.hv[1][j], data.hv[0][j].length);
-            }
-        }
-        //Scale the cell polygons.
-        data = scaleEndcapPolygons(EndcapBinnedEnergyList, data, minCellEnergy, maxCellEnergy);
-        //Get the colours of the cells
-        byte[] EndcapColor= internalEndcapColor(EndcapBinnedEnergyList, minCellEnergy, maxCellEnergy);
-        // And draw them.
-        AParameter colorFunction = parameterStore.get(name, "ColorFunction");
-        if (colorFunction.getI() == ACalorimeterData.COLOR_FUNC_ENERGY)
-        {
-            switch (AColorMap.getColorMap())
-            {
-                case AColorMap.COLOR_MAP_DEFAULT1:
-                case AColorMap.COLOR_MAP_DEFAULT2:
-                case AColorMap.COLOR_MAP_M4M5:
-                case AColorMap.COLOR_MAP_GRAYDET:
-                case AColorMap.COLOR_MAP_ORIGINAL:
-                    // Use colors.
-                    colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_HITCOL);
-                    break;
-                case AColorMap.COLOR_MAP_GRAY:
-                case AColorMap.COLOR_MAP_BW:
-                    // Use grayscale.
-                    colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_GRAY_HITCOL);
-                    break;
-            }
-            //draw the legend
-            if(ALegendWindow.exists())
-            {
-                if (AColorMap.getColorMap() != AColorMap.COLOR_MAP_BW)
-                {
-                    double[] colorEnergy = energyOfEndcapColor(minCellEnergy,maxCellEnergy);
-                    ALegendWindow.getInstance().addEnergyText(window, colorEnergy,maxCellEnergy, colorMap);
-                }
-                else
-                    ALegendWindow.getInstance().addEnergyText(window, minCellEnergy,maxCellEnergy);
-            }
-        }
-        else if(ALegendWindow.exists())
-            ALegendWindow.getInstance().clearText(window);
-        //draw filled cell
-        for (int j = 0; j < numCombinedCells; j++)
-        {
-            ag.setColor(colorMap[EndcapColor[j]]);
-            ag.fillPolygon(data.hv[0][j],data.hv[1][j], data.hv[0][j].length);
-        }
-        //draw frame around cell
-        if (drawFrame && !cellGeometry.getStatus())
-        {
-            for (int j = 0; j < numCombinedCells; j++)
-            {
-                ag.setColor(colorMap[frameColor]);
-                ag.drawPolygon(data.hv[0][j], data.hv[1][j], data.hv[0][j].length);
-            }
-        }
-    }
-    
-    /**
-     * Scales a series of polygons according to the user settings.
-     * Used for summing over layer in the Endcaps in the YX projection
-     *
-     * @param cellEnergy double[] list of each cells energy
-     * @param coord ACoord polygons to be scaled
-     * @param minEnergy double min Energy in a cell
-     * @param maxEnergy double max Energy in a cell
-     * 
-     * @return ACoord scaled polygons
-     */
-    protected static ACoord scaleEndcapPolygons(double[] cellEnergy, ACoord coord, double minEnergy, double maxEnergy)
-    {
-        int energyMode = parameterStore.get(name, "EnergyMode").getI();
-
-        for (int i = 0; i < cellEnergy.length; i++)
-        {
-           if (cellEnergy[i] == 0)
-                continue;
-
-            double factor;
-            if (parameterStore.get(name, "ColorFunction").getI() != ACalorimeterData.COLOR_FUNC_ENERGY)
-            {
-                // The user has (implicitly) selected energy scaling.
-                
-                //each cell is scaled to the new 0.1*0.1 binning so 
-                //density for each just depends on energy
-                double density = cellEnergy[i];
-                double minDensity = minEnergy;
-                double maxDensity = maxEnergy;
-
-                switch (energyMode)
-                {
-                    case ACalorimeterData.ENERGY_MODE_MAX_LIN:
-                    case ACalorimeterData.ENERGY_MODE_SUM_LIN:
-                        factor = Math.sqrt(density / maxDensity);
-                        break;
-
-                    case ACalorimeterData.ENERGY_MODE_MAX_LOG:
-                    case ACalorimeterData.ENERGY_MODE_SUM_LOG:
-                        double magnitude = Math.floor(Math.log10(Math.sqrt(maxDensity / minDensity)) + 1.0);
-                        factor = (Math.log10(Math.sqrt(density / maxDensity)) + magnitude) / magnitude;
-                        break;
-
-                    case ACalorimeterData.ENERGY_MODE_MAX_SQRT:
-                    case ACalorimeterData.ENERGY_MODE_SUM_SQRT:
-                        factor = Math.sqrt(Math.sqrt(density / maxDensity));
-                        break;
-
-                    default:
-                        factor = ACalorimeterData.getNonScalingFactor();
-                }
-            }
-            else
-            {
-                // No energy scaling, scale all cells by the same factor.
-                factor = ACalorimeterData.getNonScalingFactor();
-            }
-
-            if (factor <= 1.0)
-            {
-                APolygon.scale(coord.hv[0][i], coord.hv[1][i], factor);
-            }
-        }
-        return coord;
-    }
-
-    /**
-     * Determines the color for each hit according to the color function set by
-     * the user. Used for summing over layer in the Endcaps in the YX projection
-     *
-     * @param cellEnergy double[] list of each cells energy
-     * @param minEnergy double min Energy in a cell
-     * @param maxEnergy double max Energy in a cell
-     * 
-     * @return byte[] colors for each energy 
-     */
-    protected static byte[] internalEndcapColor(double[] cellEnergy, double minEnergy, double maxEnergy)
-    {
-        byte[] EndcapColor= new byte[cellEnergy.length];
-        
-        int colorFunction = parameterStore.get(name, "ColorFunction").getI();
-        int constantColor = parameterStore.get(name, "Constant").getI();
-        switch (colorFunction)
-        {
-            case ACalorimeterData.COLOR_FUNC_CONSTANT:
-                //colorByConstant();
-                for(int i = 0; i < cellEnergy.length; i++)
-                    EndcapColor[i] = (byte) constantColor;
-                break;
-/*            case COLOR_FUNC_SUBDET:
-                colorBy(sub);
-                break;
-
-            case COLOR_FUNC_CLUSTER:
-                colorBy(getClusters());
-                break;
-
-            case COLOR_FUNC_SAMPLING:
-                colorBy(sampling);
-                break;
-*/
-            case ACalorimeterData.COLOR_FUNC_ENERGY:
-                EndcapColor=colorEndcapByEnergy( cellEnergy, minEnergy, maxEnergy);
-                break;
-/*
-            case COLOR_FUNC_JET:
-                colorBy(getJets());
-                break;
-*/
-            default:
-                for(int i = 0; i < cellEnergy.length; i++)
-                    EndcapColor[i] = (byte) constantColor;
-        }
-
-        return EndcapColor;
-    }
-    
-    /**
-     * Color cells by energy.
-     * Used for summing over layer in the Endcaps in the YX projection
-     *
-     * @param cellEnergy double[] list of each cells energy
-     * @param minEnergy double min Energy in a cell
-     * @param maxEnergy double max Energy in a cell
-     * 
-     * @return byte[] colors for each energy 
-     */
-    protected static byte[] colorEndcapByEnergy(double[] cellEnergy, double minEnergy, double maxEnergy)
-    {
-        byte[] EndcapColor= new byte[cellEnergy.length];
-        int numColors = 17;
-        for (int i = 0; i < cellEnergy.length; i++)
-        {
-            if (AColorMap.getColorMap() == AColorMap.COLOR_MAP_BW)
-            {
-                // Black and white colormap.
-                EndcapColor[i] = AColorMap.BK;
-            }
-            else
-            {
-                // We have numColors colors available.
-                switch (parameterStore.get(name, "EnergyMode").getI())
-                {
-                    case ACalorimeterData.ENERGY_MODE_MAX_LIN:
-                    case ACalorimeterData.ENERGY_MODE_SUM_LIN:
-                        EndcapColor[i] = (byte) (numColors * (cellEnergy[i] - minEnergy) / (maxEnergy - minEnergy));
-                        break;
-                    case ACalorimeterData.ENERGY_MODE_MAX_LOG:
-                    case ACalorimeterData.ENERGY_MODE_SUM_LOG:
-                        EndcapColor[i] = (byte) (numColors * (Math.log(cellEnergy[i]) - Math.log(minEnergy)) / (Math.log(maxEnergy) - Math.log(minEnergy)));
-                        break;
-                    case ACalorimeterData.ENERGY_MODE_MAX_SQRT:
-                    case ACalorimeterData.ENERGY_MODE_SUM_SQRT:
-                        EndcapColor[i] = (byte) (numColors * Math.sqrt((cellEnergy[i] - minEnergy) / (maxEnergy - minEnergy)));
-                        break;
-                }
-                if (EndcapColor[i] >= numColors)
-                    EndcapColor[i] = (byte) (numColors - 1);
-            }
-        }
-        return EndcapColor;
-    }
-    
-    /**
-     * Energy of each color.
-     * Used for summing over layer in the Endcaps in the YX projection
-     *
-     * @param minEnergy double min Energy in a cell
-     * @param maxEnergy double max Energy in a cell
-     * 
-     * @return byte[] colors for each energy 
-     */
-    protected static double[] energyOfEndcapColor(double minEnergy, double maxEnergy)
-    {
-        int numColors = 17;
-        double[] colorEnergy= new double[numColors];
-        for (int i = 0; i < numColors; i++)
-        {
-            // We have numColors colors available.
-            switch (parameterStore.get(name, "EnergyMode").getI())
-            {
-                case ACalorimeterData.ENERGY_MODE_MAX_LIN:
-                case ACalorimeterData.ENERGY_MODE_SUM_LIN:
-                    colorEnergy[i] = ((i * (maxEnergy - minEnergy))/numColors)+minEnergy;
-                    break;
-                case ACalorimeterData.ENERGY_MODE_MAX_LOG:
-                case ACalorimeterData.ENERGY_MODE_SUM_LOG:
-                    colorEnergy[i] = Math.exp(((i * (Math.log(maxEnergy) - Math.log(minEnergy)))/numColors)+Math.log(minEnergy));
-                    break;
-                case ACalorimeterData.ENERGY_MODE_MAX_SQRT:
-                case ACalorimeterData.ENERGY_MODE_SUM_SQRT:
-                    colorEnergy[i] = (Math.pow(i/numColors,2) * (maxEnergy - minEnergy))+minEnergy;
-                    break;
-            }
-            //may need check to see if lower or higher than min or max
-            if (colorEnergy[i] >= numColors)
-                colorEnergy[i] = (byte) (numColors -1);
-        }
-        return colorEnergy;
-    }
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AGLGraphics.java b/graphics/AtlantisJava/src/atlantis/canvas/AGLGraphics.java
deleted file mode 100644
index ee0c032ad052..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AGLGraphics.java
+++ /dev/null
@@ -1,486 +0,0 @@
-package atlantis.canvas;
-
-import atlantis.graphics.AAbstractGraphics2D;
-import com.sun.opengl.util.BufferUtil;
-import java.awt.*;
-import java.awt.RenderingHints.Key;
-import java.awt.color.ColorSpace;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.PathIterator;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.ImageObserver;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-import java.text.AttributedCharacterIterator;
-import javax.media.opengl.*;
-
-/**
- *
- * This class is an implementation of Graphics2D (although it actually subclasses
- * AAbstractGraphics2D). It wraps a GLAutoDrawable object to allow Swing based
- * components to paint and have their calls translated into OpenGL calls on the
- * underlying context.
- * 
- * Obviously emulating all the functionality of Graphics2D is a challenge
- * so expect some visual issues initially...
- * 
- * @author Adam Davison
- */
-public class AGLGraphics extends AAbstractGraphics2D {
-
-    private int m_clipx = 0;
-    private int m_clipy = 0;
-    private int m_clipw = 0;
-    private int m_cliph = 0;
-    private Color m_color = Color.BLACK;
-    private GLAutoDrawable m_d;
-    private GL m_gl;
-    private int m_depth = 1;
-    private ComponentColorModel m_colorModel =
-            new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-            new int[]{8, 8, 8, 8}, true, false, ComponentColorModel.TRANSLUCENT,
-            DataBuffer.TYPE_BYTE);
-
-    public AGLGraphics(AGLGraphics old) {
-        m_d = old.m_d;
-        m_gl = m_d.getGL();
-    }
-
-    /*
-     * Draw shapes, don't actually implement cubic or quadratic curves yet.
-     * For now we only draw straight lines.
-     * Having said that Atlantis uses such a huge number of segments that this
-     * doesn't seem to be an issue for visual quality as of yet...
-     */
-    @Override
-    public void draw(Shape z) {
-        PathIterator pi = z.getPathIterator(null);
-        float[] c = new float[6];
-        float xpos = 0.0f;
-        float ypos = 0.0f;
-        while (!pi.isDone()) {
-            int type = pi.currentSegment(c);
-            switch (type) {
-                case PathIterator.SEG_MOVETO:
-                    xpos = c[0];
-                    ypos = c[1];
-                    break;
-                case PathIterator.SEG_CLOSE:
-                    // Ignoring close lines for now I guess...
-                    break;
-                case PathIterator.SEG_CUBICTO:
-                    drawLine(c[2], c[3], c[4], c[5]);
-                case PathIterator.SEG_QUADTO:
-                    drawLine(c[0], c[1], c[2], c[3]);
-                case PathIterator.SEG_LINETO:
-                    // Just do lines...
-                    drawLine(xpos, ypos, c[0], c[1]);
-                    xpos = c[0];
-                    ypos = c[1];
-                    break;
-            }
-            pi.next();
-        }
-    //super.draw(z);
-    }
-
-    public AGLGraphics(GLAutoDrawable d) {
-        m_d = d;
-        m_gl = m_d.getGL();
-    }
-
-    /*
-     * This implementation of create()/dispose() is highly thread unsafe
-     * Since it's not trivial to duplicate the GL context we do the best we can
-     * and hopefully it's ok for Atlantis.
-     * 
-     * Essentially where Java2D would create a whole new object which would then
-     * have it's own state, we push the modelview stack. This means that
-     * we can perform transformations and then pop the modelview stack in dispose
-     * to emulate this functionality.
-     * 
-     * Obviously if you call create twice in two separate threads then one of
-     * you is destroying the other one's modelview matrix...
-     */
-    @Override
-    public Graphics create() {
-        m_gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);
-        m_gl.glPushMatrix();
-        m_depth++;
-        //System.err.println("PUSH: " + depth);
-        //return new AGLGraphics(this); //?????
-        return this;
-    }
-
-    @Override
-    public void translate(int x, int y) {
-        m_gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);
-        m_gl.glTranslatef(x, y, 0.0f);
-        return;
-    }
-
-    @Override
-    public Color getColor() {
-        return m_color;
-    }
-
-    @Override
-    public void setColor(Color c) {
-        m_color = c;
-        //System.out.println(c.toString());
-        float r = ((float) c.getRed()) / 255.0f;
-        float g = ((float) c.getGreen()) / 255.0f;
-        float b = ((float) c.getBlue()) / 255.0f;
-        float a = ((float) c.getAlpha()) / 255.0f;
-        m_d.getGL().glColor4f(r, g, b, a);
-    }
-
-    @Override
-    public void setPaintMode() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void setXORMode(Color c1) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-    
-    private Font m_font = Font.decode("Arial-BOLD-18");
-
-    @Override
-    public Font getFont() {
-        return m_font;
-    }
-
-    @Override
-    public void setFont(Font font) {
-        m_font = font;
-    }
-
-    @Override
-    public FontMetrics getFontMetrics(Font f) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public Rectangle getClipBounds() {
-        return new Rectangle(m_clipx, m_clipy, m_clipw, m_cliph);
-    }
-
-    @Override
-    public void clipRect(int x, int y, int width, int height) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    /*
-     * Sort of ignoring clip here...
-     */
-    @Override
-    public void setClip(int x, int y, int width, int height) {
-        m_clipx = x;
-        m_clipy = y;
-        m_clipw = width;
-        m_cliph = height;
-    //System.out.println("Who cares about clip for now??");
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public Shape getClip() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void setClip(Shape clip) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void copyArea(int x, int y, int width, int height, int dx, int dy) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void drawLine(int x1, int y1, int x2, int y2) {
-        drawLine((float) x1, (float) y1, (float) x2, (float) y2);
-    }
-
-    public void drawLine(float x1, float y1, float x2, float y2) {
-        m_gl.glBegin(m_gl.GL_LINES);
-        m_gl.glVertex2f(x1, y1);
-        m_gl.glVertex2f(x2, y2);
-        m_gl.glEnd();
-    }
-
-    @Override
-    public void fillRect(int x, int y, int width, int height) {
-        GL gl = m_d.getGL();
-
-        gl.glPolygonMode(gl.GL_FRONT_AND_BACK, gl.GL_FILL);
-
-        gl.glBegin(gl.GL_QUADS);
-        gl.glVertex2f(x, y);
-        gl.glVertex2f(x + width, y);
-        gl.glVertex2f(x + width, y + height);
-        gl.glVertex2f(x, y + height);
-        gl.glEnd();
-    }
-
-    @Override
-    public void clearRect(int x, int y, int width, int height) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void drawOval(int x, int y, int width, int height) {
-        throw new UnsupportedOperationException("Not supported yet.");
-
-    }
-
-    @Override
-    public void fillOval(int x, int y, int width, int height) {
-        //throw new UnsupportedOperationException("Not supported yet.");
-        return;
-    }
-
-    @Override
-    public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
-        m_gl.glPolygonMode(m_gl.GL_FRONT_AND_BACK, m_gl.GL_LINE);
-
-        m_gl.glBegin(m_gl.GL_POLYGON);
-
-        for (int i = 0; i < nPoints; i++) {
-            m_gl.glVertex2f(xPoints[i], yPoints[i]);
-        }
-
-        m_gl.glEnd();
-    }
-
-    public void fillPolygon(double[] xPoints, double[] yPoints, int nPoints) {
-
-        m_gl.glPolygonMode(m_gl.GL_FRONT_AND_BACK, m_gl.GL_FILL);
-
-        m_gl.glBegin(m_gl.GL_POLYGON);
-
-        for (int i = 0; i < nPoints; i++) {
-            m_gl.glVertex2d(xPoints[i], yPoints[i]);
-        }
-
-        m_gl.glEnd();
-    }
-
-    /*
-     * Bear in mind that although Java2D is capable of filling arbitrary
-     * polygons, OpenGL/graphics cards in general use a very simple fill
-     * algorithm which is only guaranteed to be valid for convex polygons
-     * If you want to render a concave polygon you have to tessellate it down
-     * into convex ones.
-     * 
-     * So far I've been able to do this by modifying the way geometry is
-     * represented but you can also have a go at tessellating automatically
-     * using GLUT if you really need to...
-     */
-    @Override
-    public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
-        
-        // Prototype code for vertex arrays, actually slower for single polys
-        // but will definitely improve importance if we start passing in big
-        // arrays of polygons, say for complex geometry
-        if (false) {
-            IntBuffer ib = BufferUtil.newIntBuffer(nPoints * 2);
-            for (int i = 0; i < nPoints; i++) {
-                ib.put(xPoints[i]);
-                ib.put(yPoints[i]);
-            }
-            ib.rewind();
-            m_gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
-            m_gl.glVertexPointer(2, GL.GL_INT, 0, ib);
-            m_gl.glDrawArrays(GL.GL_POLYGON, 0, nPoints);
-        } else {
-            // Draw the simple way
-            
-            m_gl.glPolygonMode(m_gl.GL_FRONT_AND_BACK, m_gl.GL_FILL);
-            m_gl.glBegin(m_gl.GL_POLYGON);
-
-            for (int i = 0; i < nPoints; i++) {
-                m_gl.glVertex2f(xPoints[i], yPoints[i]);
-            }
-
-            m_gl.glEnd();
-        }
-    }
-
-    @Override
-    public Stroke getStroke() {
-        return null;
-    }
-
-    @Override
-    public void setStroke(Stroke z) {
-    //super.setStroke(z);
-    }
-
-    @Override
-    public void drawString(String str, int x, int y) {
-        //FontRenderContext frc = new FontRenderContext(null, true, true);
-        //GlyphVector gv = m_font.layoutGlyphVector(frc, str.toCharArray(),
-        //        0, str.length(), Font.LAYOUT_LEFT_TO_RIGHT);
-        //int ng = gv.getNumGlyphs();
-        //Rectangle2D r = gv.getVisualBounds();
-        //m_gl.glColor3f(1.0f, 0.0f, 0.0f);
-        //this.fillRect((int) r.getX(), (int) r.getY(), (int) r.getWidth(), (int) r.getHeight());
-        //this.setColor(m_color);
-                
-        WritableRaster test = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
-                32, 32, 4, null);
-        BufferedImage testi = new BufferedImage(m_colorModel, test, false, null);
-        Graphics testg = testi.getGraphics();
-        FontMetrics fm = testg.getFontMetrics(m_font);
-        Rectangle2D r = fm.getStringBounds(str, testg);
-                
-        WritableRaster raster =
-                Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
-                (int)r.getWidth(), (int)r.getHeight(), 4, null);
-
-        BufferedImage bi = new BufferedImage(m_colorModel, raster, false, null);
-        
-        Graphics big = bi.getGraphics();
-        //big.setColor(Color.GREEN);
-        //big.fillRect(0, 0, bi.getWidth(), bi.getHeight());
-        big.setColor(m_color);
-        big.setFont(m_font);
-        big.drawString(str, -(int)r.getX(), -(int)r.getY());
-        drawImage(bi, x, (int)(y - r.getHeight()), null);
-    }
-
-    @Override
-    public void drawString(AttributedCharacterIterator iterator, int x, int y) {
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
-        WritableRaster raster =
-                Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
-                img.getWidth(observer), img.getHeight(observer), 4, null);
-
-        BufferedImage bi = new BufferedImage(m_colorModel, raster, false, null);
-
-        Graphics2D g = bi.createGraphics();
-        //g.setColor(Color.WHITE);
-        //g.drawLine(0, 0, bi.getWidth(), bi.getHeight());
-        AffineTransform gt = new AffineTransform();
-        gt.translate(0, img.getHeight(observer));
-        gt.scale(1, -1d);
-        g.transform(gt);
-        g.drawImage(img, null, null);
-
-        DataBufferByte imgbuf = (DataBufferByte) raster.getDataBuffer();
-
-        m_gl.glRasterPos2i(x, y + bi.getHeight());
-        //System.out.println(img.getWidth(observer) + ":" + img.getHeight(observer));
-        m_gl.glDrawPixels(img.getWidth(observer), img.getHeight(observer),
-                m_gl.GL_RGBA, m_gl.GL_UNSIGNED_BYTE, ByteBuffer.wrap(imgbuf.getData()));
-
-        //System.out.println("Ignoring drawImage for now...");
-        return true;
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
-        // Needed to render JComponent backgrounds
-        //throw new UnsupportedOperationException("Not supported yet.");
-        return true;
-    }
-
-    @Override
-    public Object getRenderingHint(Key z) {
-        return null;
-    }
-
-    @Override
-    public void setRenderingHint(Key a, Object z) {
-        return;
-    }
-
-    @Override
-    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void dispose() {
-        m_depth--;
-        if (m_depth == 0) {
-            m_depth = 1;
-        // This happens when the object is really finally destroyed...
-        // When this is actually happening if we pop we'll cause a crash...
-        //System.err.println("DISPOSE CALLED TWICE ON ONE OBJECT!!!");
-        //(new Exception()).printStackTrace();
-        } else {
-            m_gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);
-            m_gl.glPopMatrix();
-        }
-        return;
-    // We didn't create so no need to dispose... probably bad...
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void rotate(double a, double b, double z) {
-        super.rotate(a, b, z);
-    }
-
-    @Override
-    public void rotate(double z) {
-        m_gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);
-        m_gl.glRotated(z * 360 / (2 * Math.PI), 0.0, 0.0, 1.0);
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ALayout.java b/graphics/AtlantisJava/src/atlantis/canvas/ALayout.java
deleted file mode 100755
index 7710aff90f88..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ALayout.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package atlantis.canvas;
-
-
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.awt.Rectangle;
-import java.awt.Dimension;
-import org.w3c.dom.*;
-
-
-/**
- * This class is not an Layout Manager! It contains the possible window
- * configuration - i.e. the possible subdivision of the canvas area in windows.
- * Layouts are identified by names such as "SQUARE","FULL_SCREEN".
- * Windows are identified by single characters such as "W","1", etc.
- * Windows are furthermore grouped in pages such that they do not overlap.
- * Pages are identified by the sum of the windows they contain, such as "Full","Vert"
- * This class is used mainly by ACanvas and AWindowControl.
- */
-
-public class ALayout {
-    //The name of the layout
-    private String name;
-    //A table of the window constraints (i.e. corners) for all windows
-    private Hashtable windowConstraints;
-    //A table of the pages
-    private Hashtable pages;
-    //The default top window for this layout
-    private String startupWindow;
-    //The list of window names that by default are
-    //on the top in this layout
-    private String[] startupSequence;
-    
-    
-    /**
-     * Default constructor
-     * 
-     * @param node XML node with the configuration
-     */
-    public ALayout(Node node) {
-        //Create new hashtables for window corners and pages
-        windowConstraints=new Hashtable();
-        pages=new Hashtable();
-        
-        // reading the layout attributes
-        NamedNodeMap attributes=node.getAttributes();
-        name=attributes.getNamedItem("name").getNodeValue();
-        startupWindow=attributes.getNamedItem("startupWindow").getNodeValue();
-        startupSequence=decompose(attributes.getNamedItem("startup").getNodeValue());
-        
-        // reading all the content of Layout node
-        // - i.e pages and window settings
-        NodeList childrens=node.getChildNodes();    
-        for(int i=0; i<childrens.getLength(); i++) {
-            //get the subnode
-            Node child=childrens.item(i);
-            //read in window or page information
-            if(child.getNodeType()==Node.ELEMENT_NODE) {
-                //check wether it is a window or page configuration
-                String nodeName=child.getNodeName();
-                if(nodeName.equals("Window"))
-                    readWindow(child);
-                else if(nodeName.equals("Page"))
-                    readPage(child);
-            }
-        }
-    }
-    
-    /**
-     * Read the window configuration (name/size/position) from an XML node
-     * 
-     * @param node XML node with the configuration
-     */
-    private void readWindow(Node child) {
-        //Get the nodes attributes
-        NamedNodeMap attributes=child.getAttributes();
-        //retrieve window information
-        String name=attributes.getNamedItem("name").getNodeValue();
-        int hPos=Integer.parseInt(attributes.getNamedItem("hPos").getNodeValue());
-        int vPos=Integer.parseInt(attributes.getNamedItem("vPos").getNodeValue());
-        int width=Integer.parseInt(attributes.getNamedItem("width").getNodeValue());
-        int height=Integer.parseInt(attributes.getNamedItem("height").getNodeValue());
-        //Check if this is a valid window name
-        if(!ACanvas.getCanvas().isValidWindowName(name))
-            throw new Error("Undefined window name: "+name);
-        //Check if this window has been defined before
-        if(windowConstraints.containsKey(name))
-            throw new Error("Multiple usage of window name: "+name);
-        //Validate window size and position
-        if((hPos<0)||(vPos<0)||(width<0)||(height<0))
-            throw new Error("Wrong window constraints");
-        //Add window constraints to the list
-        windowConstraints.put(name, new Rectangle(hPos, vPos, width, height));
-    }
-    
-    /**
-     * Read the page configuration (windows it contains) from the XML node
-     */
-    private void readPage(Node child) {
-        //get the attributes
-        NamedNodeMap attributes=child.getAttributes();
-        //retrieve page configuration
-        String name=attributes.getNamedItem("name").getNodeValue();
-        String content=attributes.getNamedItem("content").getNodeValue();
-        
-        //Check if this page exists before
-        if(pages.containsKey(name))
-            throw new Error("Redefinition of page: "+name);
-        //Split the list of windows in single window names
-        //('S789' -> 'S','7','8','9')
-        String[] wContent=decompose(content);
-        
-        //Check that each of this is a valid window
-        for(int i=0; i<wContent.length; i++)
-            if(!ACanvas.getCanvas().isValidWindowName(wContent[i]))
-                throw new Error("Unknown window name: "+wContent[i]);
-        //Add this page
-        pages.put(name, wContent);
-    }
-    
-    /** 
-     * Break up a string of window names into a list of single window names
-     *
-     * @param s the string to break up
-     */
-    private String[] decompose(String s) {
-        String[] strings=new String[s.length()];
-        char[] characters=s.toCharArray();
-        
-        for(int i=0; i<characters.length; i++)
-            strings[i]=new String(new char[] {characters[i]});
-        
-        return strings;
-    }
-    
-    /**
-     * Return the layout name
-     */
-    public String getName() {
-        return name;
-    }
-    
-    /**
-     * Return the window selected on startup
-     */
-    public String getStartupWindow() {
-        return startupWindow;
-    }
-
-    /**
-     * Return the list of window names that are on top by default
-     */
-    public String[] getStartupSequence() {
-        return startupSequence;
-    }
-    
-    /**
-     * Check if window is part of this layout
-     */
-    public boolean hasWindow(String wName) {
-        return windowConstraints.containsKey(wName);
-    }
-    
-    /**
-     * Return window names in this layout
-     */
-    public String[] getWindowNames() {
-        // Loop over the window constraints and retrieve
-        // window names.
-        Enumeration wn=windowConstraints.keys();
-        int size=windowConstraints.size();
-        String[] names=new String[size];
-        //Add them all to the array
-        for(int i=0; i<size; i++)
-            names[i]=(String)wn.nextElement();
-        
-        return names;
-    }
-    
-    /**
-     * Return the constraints (i.e. position and size)
-     * for a particular window
-     *
-     * @param wName the name of the window
-     */
-    public Rectangle getWindowConstraints(String wName) {
-        return(Rectangle)windowConstraints.get(wName);
-    }
-    
-    /**
-     * Calculate the size of the layout from all its subwindows
-     */
-    public Dimension getSize() {
-       
-        Enumeration myenum=windowConstraints.elements();
-        int w=0, h=0;
-        //Loop over all windows
-        while(myenum.hasMoreElements()) {
-            Rectangle r=(Rectangle)myenum.nextElement();
-            //Check if they exceed the current size
-            if(r.x+r.width>w)
-                w=r.x+r.width;
-            if(r.y+r.height>h)
-                h=r.y+r.height;
-        }
-        
-        return new Dimension(w, h);
-    }
-    
-    /**
-     * Return a list of the page names
-     */
-    public String[] getPageNames() {
-        Enumeration myenum=pages.keys();
-        int size=pages.size();
-        String[] names=new String[size];
-        
-        for(int i=0; i<size; i++)
-            names[i]=(String)myenum.nextElement();
-        
-        return names;
-    }
-    
-    /**
-     * Return a list of the windows that a certain page consists of
-     */
-    public String[] getPageContent(String pageName) {
-        return(String[])pages.get(pageName);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ALayoutChangeListener.java b/graphics/AtlantisJava/src/atlantis/canvas/ALayoutChangeListener.java
deleted file mode 100644
index 521e31440d1e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ALayoutChangeListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package atlantis.canvas;
-
-/**
- * Interface for all LayoutChangeListener classes. Each time the layout is 
- * changed, the layoutChanged method is called with the layout as an argument
- * @author maillard
- */
-public interface ALayoutChangeListener {
-
-  /**
-   * This method gets called each time the layout is changed.
-   * @param canvas the canvas
-   */
-  abstract public void layoutChanged(ACanvas canvas);  
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ALegendWindow.java b/graphics/AtlantisJava/src/atlantis/canvas/ALegendWindow.java
deleted file mode 100755
index b6397cf61f94..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ALegendWindow.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package atlantis.canvas;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-
-import javax.swing.JFrame;
-import javax.swing.JTextField;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.colormap.AColorMap;
-
-/**
- * The legend window appears when selected in the preferences menu 
- * It displays the energy scale for the summed endcaps as these do not
- * have the pick interaction.
- * 
- * Moved from package atlantis.gui to atlantis.canvas because of closer
- * coupling with classes in atlantis.canvas and atlantis.data. Could move
- * back later if can be decoupled. (Ben Waugh, 2011-10-01)
- * 
- * @author Mark Stockton
- */
-public class ALegendWindow extends JFrame
-{
-    private static JTextField[] titleField = new JTextField[2];
-    private static JTextField[] textField;
-    private static ALegendWindow instance = null;
-
-    public static ALegendWindow getInstance()
-    {
-        if (instance == null)
-            instance = new ALegendWindow();
-        return instance;
-    }
-    
-    /**
-     * Check if ALegendWindow instance exists, without creating it if not.
-     * @return true if ALegendWindow instance exists
-     */
-    public static boolean exists() {
-    	return (instance != null);
-    }
-    
-    public void addEnergyText(AWindow window, double[] Energies, double Energy, Color[] colorMap)
-    {
-        if(window.equals(ACanvas.getCanvas().getCurrentWindow()))
-        {
-            getContentPane().removeAll();
-            validate();
-            getContentPane().setLayout(new GridLayout(Energies.length+titleField.length,1));
-            
-            titleField[0].setText("Color Energy thresholds:");
-            getContentPane().add(titleField[0]);
-            if(titleField[1]==null)
-                titleField[1]=new JTextField();
-            titleField[1].setEditable(false);
-            titleField[1].setBackground(Color.white);
-            titleField[1].setForeground(Color.black);
-            titleField[1].setText("Maximum Cell Energy: " + (Math.rint(1000. * Energy)/1000) + " GeV ");
-            getContentPane().add(titleField[1]);
-            
-            String s="";
-            for(int i=Energies.length-1;i>=0;i--)
-            {
-                if(textField[i]==null)
-                    textField[i]=new JTextField();
-                textField[i].setEditable(false);
-                //to even out the line spacing
-                if(i<10)
-                    s="0" + i;
-                else
-                    s="" + i;
-                s ="Color " + s + " Energy from: " + (Math.rint(1000. * Energies[i])/1000) + " GeV";
-                textField[i].setText(s);
-                textField[i].setBackground(colorMap[i]);
-                //find out if too dark for black text
-                if( colorMap[i].getRed() + colorMap[i].getGreen() +
-                        colorMap[i].getBlue()<=128)
-                    textField[i].setForeground(Color.white);
-                else
-                    textField[i].setForeground(Color.black);
-                getContentPane().add(textField[i]);
-            }
-            invalidate();
-            pack();       
-            setVisible(true);
-        }
-    }
-    
-    public void addEnergyText(AWindow window, double minEnergy, double maxEnergy)
-    {
-        if(window.equals(ACanvas.getCanvas().getCurrentWindow()))
-        {
-            getContentPane().removeAll();
-            validate();
-            getContentPane().setLayout(new GridLayout(3,1));
-            titleField[0].setText("Color Energy thresholds:");
-            getContentPane().add(titleField[0]);
-            if(titleField[1]==null)
-                titleField[1]=new JTextField();
-            titleField[1].setEditable(false);
-            titleField[1].setBackground(Color.white);
-            titleField[1].setForeground(Color.black);
-            titleField[1].setText("Maximum Cell Energy: " + (Math.rint(1000. * maxEnergy)/1000) + " GeV ");
-            getContentPane().add(titleField[1]);
-            
-            if(textField[0]==null)
-                textField[0]=new JTextField();
-            textField[0].setEditable(false);
-            textField[0].setText("Minimum Cell Energy: " + (Math.rint(1000. * minEnergy)/1000) + " GeV ");
-            textField[0].setBackground(Color.white);
-            textField[0].setForeground(Color.black);
-            getContentPane().add(textField[0]);
-            invalidate();
-            pack();
-            setVisible(true);
-        }
-    }
-    
-    public void clearText(AWindow window)
-    {
-        if(!titleField[0].getText().equals("Select colour by Energy to bring up scale")
-                && window.equals(ACanvas.getCanvas().getCurrentWindow()))
-        {
-            getContentPane().removeAll();
-            validate();
-            getContentPane().setLayout(new GridLayout(1,1));
-            titleField[0].setText("Select colour by Energy to bring up scale");
-            getContentPane().add(titleField[0]);
-            invalidate();
-            pack();
-            setVisible(true);    
-        }
-    }
-    
-    public void nothingToDisplay(AWindow window)
-    {
-        if(!titleField[0].getText().equals("Select LAr/HEC Summed and colour by Energy to bring up scale")
-                && window.equals(ACanvas.getCanvas().getCurrentWindow()))
-        {
-            getContentPane().removeAll();
-            validate();
-            getContentPane().setLayout(new GridLayout(1,1));
-            titleField[0].setText("Select LAr/HEC Summed and colour by Energy to bring up scale");
-            getContentPane().add(titleField[0]);
-            invalidate();
-            pack();
-            setVisible(true);            
-        }
-
-    }
-    
-    private ALegendWindow()
-    {
-        this.setTitle("Legend");
-        AIcon.setIconImage(this);
-        this.setResizable(false);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-        int numColors = AColorMap.getNumColors();
-        getContentPane().setLayout(new GridLayout(1,1));
-        textField = new JTextField[numColors];
-        titleField[0] =new JTextField();
-        titleField[0].setEditable(false);
-        titleField[0].setBackground(Color.white);
-        titleField[0].setForeground(Color.black);
-        titleField[0].setText("Select LAr/HEC Summed and colour by Energy to bring up scale");
-        getContentPane().add(titleField[0]);
-        
-        // set the initial location
-        Component gui = AGlobals.instance().getGuiFrame();
-        int guiWidth = gui.getWidth();
-        int guiHeight = gui.getHeight();
-        int guiX = gui.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit()
-                .getScreenSize().getWidth());
-        if (guiX + guiWidth + (dialogWidth - guiWidth) / 2 > screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(
-                    0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2),
-                    Math.max(0, (guiHeight - dialogHeight) / 3));
-        
-        pack();
-        setVisible(true);
-    }
-
-    public void dispose()
-    {
-        instance = null;
-        super.dispose();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AOverlay.java b/graphics/AtlantisJava/src/atlantis/canvas/AOverlay.java
deleted file mode 100644
index f4147695a913..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AOverlay.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package atlantis.canvas;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-
-import javax.swing.ImageIcon;
-import javax.swing.JPanel;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.APar;
-import atlantis.utils.AUtilities;
-
-/**
- * AOverlay should be used within a GlassPane in the ACanvas.
- * The overlay acts as a canvas on which images can be drawn over the existing display.
- * This is currently only used to draw the ATLAS logo and Run/Event info as a floating image.
- * Any drawing should be done with the paintComponent method, which is called as the Canvas is drawn.
- * @author Tom McLaughlan
- */
-public class AOverlay extends JPanel {
-
-	protected static APar parameterStore = APar.instance();
-	
-	public AOverlay() {
-		setOpaque(false);
-	}
-
-	/**
-	 * When the ACanvas GlassPane contains an Overlay instance, this is called 
-	 * after the Canvas is drawn.
-	 */
-	@Override public void paintComponent(Graphics g) {
-		super.paintComponent(g);
-		if(parameterStore.get("Logo","ShowATLAS").getStatus())
-			drawATLASLogo(g);
-	}
-
-	/**
-	 * Draws a scaled version of the ATLAS PNG in the Overlay
-	 * @param g The Graphics instance to draw to
-	 */
-	protected void drawATLASLogo(Graphics g) {
-
-		int windowWidth = getWidth();
-		int windowHeight = getHeight();
-
-		int logoWidth = 0;
-		int logoHeight = 0;
-
-		double size = parameterStore.get("Logo", "LogoSize").getD();
-
-		logoWidth = (int) (windowWidth*size);
-		logoHeight = (int) (logoWidth*0.6);
-
-		int logoX = 0;
-		int logoY = 0;
-
-		double hpos = parameterStore.get("Logo", "LogoHPos").getD();
-		logoX = (int) ((hpos * (windowWidth-logoWidth)));
-
-		double vpos = parameterStore.get("Logo", "LogoVPos").getD();
-
-		int heightOffset = 0;
-		if(parameterStore.get("Prefs", "CanvasTitle").getStatus()) {
-			windowHeight = this.getParent().getHeight() - 40;
-			heightOffset = 40;
-		}
-		logoY = (int) ((vpos * (windowHeight-logoHeight))) + heightOffset;
-		
-		
-		long EventNumber = 0;
-		long RunNumber = 0;
-		String DateTime = "";
-		Color textColor = Color.white,
-		backgroundColor = Color.black;
-
-		AEvent event = AEventManager.instance().getCurrentEvent();
-
-		if (event != null) {
-			RunNumber = event.getRunNumber();
-			EventNumber = event.getEventNumber();
-			DateTime = event.getDateTime();
-		}
-
-		// Begin drawing
-		AGraphics ag = AGraphics.makeAGraphics(g);
-		// Fill the background
-		ag.setColor(backgroundColor);
-		//ag.fillRect(logoX, logoY, logoWidth, logoHeight);
-
-		String iconPath = AGlobals.instance().getHomeDirectory() + "img" + System.getProperty("file.separator");
-
-		ImageIcon i = AUtilities.getFileAsImageIcon(iconPath + "atlas_logo_shadow.png");
-
-
-		// Determine height and width of current window, and width of ATLAS logo
-		// These are then used to determine a scaling factor which is used in the
-		// scale function.
-		//
-
-		int iwidth = i.getIconWidth();
-		double factor = (double) logoWidth / (double) iwidth;
-
-		// Call scale function to scale image to window size
-		ImageIcon iscale = AUtilities.scale(i.getImage(), factor, parameterStore.get("Prefs", "AntiAlias").getStatus());
-		// x, y calculated to position image exactly centred
-		int x = (logoWidth / 2) - (iscale.getIconWidth() / 2);
-		int y = (logoHeight / 2) - ((3 * iscale.getIconHeight()) / 4);
-
-		x += logoX;
-		y += logoY;
-
-		int dpi = 72;
-
-		// Set a scaling font size with window width
-		int fontSize = (int) Math.round(3.0 * logoWidth / (double) dpi) - 2;
-
-		Font f = new Font("SansSerif", Font.PLAIN, fontSize);
-
-		ag.drawImage(iscale.getImage(), x, y);
-
-		ag.setColor(textColor); // Set colour for text
-		ag.updateColor(); // Update current colour for drawing
-
-		String DateString = "", RunEventString = "";
-		if (event != null) {
-			DateString = "Date: " + DateTime;
-			RunEventString = "Run Number: " + RunNumber + ", Event Number: " + EventNumber;
-		} else {
-			RunEventString = "No event data available";
-		}
-
-		FontMetrics fm = g.getFontMetrics(f);
-		int DateWidth = fm.stringWidth(DateString);
-		int RunEventWidth = fm.stringWidth(RunEventString);
-
-		// Check if font is wider than the window and scale down til it fits.
-		while ((RunEventWidth > logoWidth - 20) || (DateWidth > logoWidth - 20))
-		{
-
-			fontSize = fontSize - 1;
-			f = new Font("SansSerif", Font.PLAIN, fontSize);
-			fm = g.getFontMetrics(f);
-			RunEventWidth = fm.stringWidth(RunEventString);
-			DateWidth = fm.stringWidth(DateString);
-		}
-
-		ag.setFont(f); // set font as defined above
-
-		if (event != null) {
-			drawStrokedString(ag, RunEventString, logoX + (logoWidth / 2) - RunEventWidth / 2, (int) (y + (1.1 * iscale.getIconHeight())), Color.WHITE, Color.BLACK);
-			//ag.drawString(RunEventString,
-			//		logoX + (logoWidth / 2) - RunEventWidth / 2, y + (1.1 * iscale.getIconHeight()));
-
-			if(!DateTime.equals("") && !DateTime.equals("n/a")) {
-				// If event contains Date/Time data, draw Run Number, Event Number and Date/Time
-				// and position text in centre of window
-				drawStrokedString(ag, DateString, logoX + (logoWidth / 2) - DateWidth / 2, (int) (y + (1.3 * iscale.getIconHeight())), Color.WHITE, Color.BLACK);
-
-				//ag.drawString(DateString,
-				//		logoX + (logoWidth / 2) - DateWidth / 2, y + (1.3 * iscale.getIconHeight()));
-			}
-		}
-	}
-	
-	/**
-	 * Draws text with an outline, crudely.
-	 * @param ag The AGraphics instance to draw to
-	 * @param str The String to draw
-	 * @param x x position of the string
-	 * @param y y position of the string
-	 * @param fg Text foreground colour
-	 * @param bg Text outline colour
-	 */
-	protected void drawStrokedString(AGraphics ag, String str, int x, int y, Color fg, Color bg) {
-		ag.setColor(Color.BLACK);
-		ag.updateColor();
-		ag.drawString(str, x-1, y-1);
-		ag.drawString(str, x+1, y+1);
-		ag.drawString(str, x+1, y-1);
-		ag.drawString(str, x-1, y+1);
-		ag.setColor(fg);
-		ag.updateColor();
-		ag.drawString(str, x, y);
-	}
-
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AScale.java b/graphics/AtlantisJava/src/atlantis/canvas/AScale.java
deleted file mode 100644
index 8359fe7cc7cc..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AScale.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package atlantis.canvas;
-
-import java.awt.geom.GeneralPath;
-
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjection;
-
-/**
- * This class contains static methods which are useful for the
- * AScaleBorder class and any potential subclasses.
- *
- * @author Charles Loomis, Ben Waugh
- **/
-public class AScale {
-	final GeneralPath primaryTicks;
-	final GeneralPath secondaryTicks;
-	final double[] labelValues;    // units are cm
-	final double[] labelPositions; // after transform
-
-	final static public int LEFT_TICKS=0;
-	final static public int RIGHT_TICKS=1;
-	final static public int BOTH_TICKS=2;
-
-	/**
-	 * The size in pixels of the primary tick marks.  This is a global
-	 * property for all scales. */
-	private static float primaryTickSize=8.f;
-
-	/**
-	 * The size in pixels of the secondary tick marks.  This is a
-	 * global property for all scales. */
-	private static float secondaryTickSize=5.f;
-
-	private AScale(GeneralPath primaryTicks, GeneralPath secondaryTicks,
-			double[] label, double[] position) {
-		this.primaryTicks = primaryTicks;
-		this.secondaryTicks = secondaryTicks;
-		this.labelValues = label;
-		this.labelPositions = position;
-	}
-
-	/**
-	 * Set the tick sizes (in pixels) for the primary and secondary
-	 * tick marks. */
-	static public void setTickSizes(float primaryTickSize,
-			float secondaryTickSize) {
-		AScale.primaryTickSize=primaryTickSize;
-		AScale.secondaryTickSize=secondaryTickSize;
-	}
-
-	/**
-	 * Get the primary tick size (in pixels). */
-	static public float getPrimaryTickSize() {
-		return AScale.primaryTickSize;
-	}
-
-	/**
-	 * Get the secondary tick size (in pixels). */
-	static public float getSecondaryTickSize() {
-		return AScale.secondaryTickSize;
-	}
-
-	/**
-	 * A utility method to add a tick mark to the given GeneralPath at
-	 * the given position. */
-	static private void addTickMark(GeneralPath gp,
-			int location,
-			float tickPosition,
-			float tickLength) {
-
-		switch(location) {
-
-		case(AScale.RIGHT_TICKS):
-			gp.moveTo(tickPosition, 0.f);
-		gp.lineTo(tickPosition, tickLength);
-		break;
-
-		case(AScale.LEFT_TICKS):
-			gp.moveTo(tickPosition, 0.f);
-		gp.lineTo(tickPosition, -tickLength);
-		break;
-
-		case(AScale.BOTH_TICKS):
-			gp.moveTo(tickPosition, -tickLength);
-		gp.lineTo(tickPosition, tickLength);
-		break;
-		}
-	}
-
-	/**
-	 * Get scale with given parameters.
-	 * 
-	 * @param minValueTransformed min value after (fish-eye) transformation
-	 * @param maxValueTransformed max value after (fish-eye) transformation
-	 * @param scaleSize length of the scale border
-	 * @param minPrimary minimum number of primary tick marks
-	 * @param minSeparation minimum separation between tick marks
-	 * @param location left,right,top,bottom
-	 * @param isVertical whether this is a horizontal or vertical scale
-	 * @param proj the projection this scale is drawn for
-	 * @return
-	 */
-	public static AScale calculateScale(
-			double minValueTransformed,
-			double maxValueTransformed,
-			int scaleSize,
-			int minPrimary, 
-			int minSeparation, 
-			int location,
-			int isVertical,
-			AProjection proj
-			){
-		// Setup the two paths which will contain the primary and secondary tick marks.
-		GeneralPath primaryTicks = new GeneralPath();
-		GeneralPath secondaryTicks = new GeneralPath();
-		resetScale(primaryTicks,scaleSize);
-		resetScale(secondaryTicks,scaleSize);
-
-		double minValue = invertTransformation(minValueTransformed,proj,isVertical);
-		double maxValue = invertTransformation(maxValueTransformed,proj,isVertical);
-
-		double[] labelValues;
-		double[] labelPositions;
-		double[] intervals = getScaleIntervals(minValue,maxValue);
-		if (intervals!=null) {
-			double labelInterval = intervals[0];
-			double primarySpacing = intervals[1];
-			double secondarySpacing = intervals[2];
-			addTickMarks(primaryTicks, proj, minValue, maxValue, primarySpacing, isVertical, location, primaryTickSize, scaleSize);
-			addTickMarks(secondaryTicks, proj, minValue, maxValue, secondarySpacing, isVertical, location, secondaryTickSize, scaleSize);
-
-			// Now the labels with the correct precision must be made.
-			labelValues = getScaleValues(minValue,maxValue,labelInterval);
-			int numLabels = labelValues.length;
-			labelPositions = new double[numLabels];
-			int ndigits=(int)(Math.floor(Math.log10(primarySpacing)));
-			ndigits=-Math.min(ndigits, 0);
-
-			for (int i=0; i<labelValues.length; ++i) {
-				double valueTrans = applyTransformation(labelValues[i],proj,isVertical);
-				labelPositions[i] = (double) interpolate(valueTrans, scaleSize, minValueTransformed, maxValueTransformed);
-			}
-		} else {
-			labelValues = new double[] {};
-			labelPositions = new double[] {};
-		}
-
-		return new AScale(primaryTicks,secondaryTicks,labelValues,labelPositions);
-	}
-  
-	/**
-	 * Add tick marks at multiples of given spacing.
-	 * 
-	 * @param path
-	 * @param proj
-	 * @param min
-	 * @param max
-	 * @param spacing
-	 * @param isVertical
-	 * @param location 
-	 * @param tickSize 
-	 * @param scaleSize 
-	 */
-	private static void addTickMarks(GeneralPath path,
-			AProjection proj, double min, double max, double spacing, int isVertical, int location, float tickSize, double scaleSize) {
-		int minMultiplier = (int) Math.ceil(min/spacing);
-		int maxMultiplier = (int) Math.floor(max/spacing);
-		double minTrans = applyTransformation(min,proj,isVertical);
-		double maxTrans = applyTransformation(max,proj,isVertical);
-		for (int i=minMultiplier; i<=maxMultiplier; ++i) {
-			double value = i * spacing;
-			double valTrans = applyTransformation(value,proj,isVertical);
-			float tickPosition=interpolate(valTrans, scaleSize, minTrans, maxTrans);        
-			addTickMark(path, location, tickPosition, tickSize);
-		}
-
-	}
-
-	private static void resetScale(GeneralPath path, double length) {
-		path.reset();
-		path.moveTo(0.f, 0.f);
-		path.lineTo((float)length, 0.f);
-	}
-
-	/**
-	 * Convert from physical detector coordinate to transformed (fish-eye) coordinate.
-	 * 
-	 * @param value
-	 * @param proj
-	 * @param isVertical
-	 * @return
-	 */
-	private static double applyTransformation(double value, AProjection proj, int isVertical) {
-		double valueTransformed = value;
-		//Apply non-linear transforms if necessary
-		if (proj instanceof AProjection2D) {
-			if (isVertical==1) {
-				valueTransformed = ((AProjection2D)proj).nonLinearTransform(0,value).getY();
-			} else {
-				valueTransformed = ((AProjection2D)proj).nonLinearTransform(value,0).getX();
-			}
-		}
-		return valueTransformed;
-	}
-
-	/**
-	 * Convert from transformed (fish-eye) coordinate back to physical detector coordinate.
-	 * 
-	 * @param valueTransformed
-	 * @param proj
-	 * @param isVertical
-	 * @return
-	 */
-	private static double invertTransformation(double valueTransformed, AProjection proj, int isVertical) {
-		double value = valueTransformed;
-		//Apply non-linear transforms if necessary
-		if (proj instanceof AProjection2D) {
-			if (isVertical==1) {
-				value = ((AProjection2D)proj).inverseNonLinearTransform(0,valueTransformed).getY();
-			} else {
-				value = ((AProjection2D)proj).inverseNonLinearTransform(valueTransformed,0).getX();
-			}
-		}
-		return value;
-	}
-
-	static float interpolate(double value, double size,
-			double value0, double value1) {
-		return(float)(size*(value-value0)/(value1-value0));
-	}
-
-	/**
-	 * Title is put between last two value labels on axis.
-	 * @return the position for the title on the scale
-	 */
-	public double getTitlePosition() {
-		double axisPosition;
-		int numLabels = labelPositions.length;
-		if (numLabels>=2) {
-			axisPosition = 0.5 * (labelPositions[numLabels-1] + labelPositions[numLabels-2]);
-		} else {
-			axisPosition = 0.0; // default to 0 if only one label (shouldn't happen)
-		}
-		return axisPosition;
-	}
-
-	/**
-	 * Get array of three intervals to use on scale.
-	 * @param min minimum value on scale
-	 * @param max maximum value on scale
-	 * @return intervals to use for [labels, primary tick marks, secondary tick marks]
-	 */
-	static double[] getScaleIntervals(double min, double max) {
-		if (min>=max) return null;
-		boolean rangeIncludesZero = (min<0.0 && max>0.0);
-		double labelInterval;
-		double labelIntervalUnit;
-		int labelIntervalMultiplier;
-		if (rangeIncludesZero) {
-			double maxAbsValue = Math.max(Math.abs(min), Math.abs(max));
-			double m=Math.floor(Math.log10(maxAbsValue));
-			labelIntervalUnit = Math.pow(10., m);
-			labelInterval = getRoundNumber(maxAbsValue);
-			labelIntervalMultiplier = (int) Math.round(labelInterval / labelIntervalUnit);
-			if (labelIntervalMultiplier==2 && 2*labelInterval<maxAbsValue) {
-				labelIntervalMultiplier = 4;
-				labelInterval = labelIntervalMultiplier * labelIntervalUnit;
-			}
-		} else {
-			double range = Math.abs(max-min);
-			labelInterval = getRoundNumber(range);
-			int minMultiplier = (int) Math.ceil(min/labelInterval);
-			int maxMultiplier = (int) Math.floor(max/labelInterval);
-			while (maxMultiplier==minMultiplier) {
-				labelInterval = getRoundNumber(labelInterval*0.99);
-				minMultiplier = (int) Math.ceil(min/labelInterval);
-				maxMultiplier = (int) Math.floor(max/labelInterval);
-			}
-			double m=Math.floor(Math.log10(labelInterval));
-			labelIntervalUnit = Math.pow(10., m);
-			minMultiplier = (int) Math.ceil(min/labelInterval);
-			maxMultiplier = (int) Math.floor(max/labelInterval);
-			labelIntervalMultiplier = (int) (labelInterval/labelIntervalUnit);
-		}
-
-		double primaryInterval, secondaryInterval;
-		switch (labelIntervalMultiplier) {
-		case 1:
-			primaryInterval = labelIntervalUnit * 0.5;
-			secondaryInterval = labelIntervalUnit * 0.1;
-			break;
-		case 2:
-			primaryInterval = labelIntervalUnit * 1.0;
-			secondaryInterval = labelIntervalUnit * 0.2;
-			break;
-		case 3:
-			primaryInterval = labelIntervalUnit * 0.2;
-			secondaryInterval = labelIntervalUnit * 0.1;
-			break;
-		case 4:
-			primaryInterval = labelIntervalUnit * 2.0;
-			secondaryInterval = labelIntervalUnit * 0.5;
-			break;
-		case 5:
-			primaryInterval = labelIntervalUnit * 1.0;
-			secondaryInterval = labelIntervalUnit * 0.5;
-			break;
-		default: // Should not happen
-			primaryInterval = labelIntervalUnit * 0.5;
-			secondaryInterval = labelIntervalUnit * 0.1;
-		}
-		return new double[] {labelInterval, primaryInterval, secondaryInterval};
-	}
-
-	/**
-	 * Get array of multiples of the given interval that lie in the given range.
-	 * @param minValue minimum value on scale
-	 * @param maxValue maximum value on scale
-	 * @param labelInterval interval between values
-	 * @return array of calculate values
-	 */
-	static double[] getScaleValues(double minValue, double maxValue,
-			double interval) {
-		int min = (int) Math.ceil(minValue/interval);
-		int max = (int) Math.floor(maxValue/interval);
-		int numValues = 1 + max - min;
-		double[] values = new double[numValues];
-		for (int i=0; i<numValues; ++i) {
-			values[i] = (min + i) * interval;
-		}
-		return values;
-	}
-
-	/**
-	 * Rounds number towards zero to nearest "round number", i.e. a power of ten
-	 * multiplied by 1, 2 or 5.
-	 * 
-	 * @param d number to round
-	 * @return next round number towards zero from input
-	 */
-	static double getRoundNumber(double d) {
-		double magnitude = Math.abs(d);
-		double m=Math.floor(Math.log10(magnitude));
-		double unit = Math.pow(10., m);
-		double multIn = magnitude / unit;
-		double multOut;
-		if (multIn >= 5.0) multOut = 5.0;
-		else if (multIn >= 2.0) multOut = 2.0;
-		else multOut = 1.0;
-		double magRound = unit * multOut;
-		double round;
-		if (d<0.0) round = -magRound;
-		else round = magRound;
-		return round;
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AScaleBorder.java b/graphics/AtlantisJava/src/atlantis/canvas/AScaleBorder.java
deleted file mode 100755
index 8610ee38bfa5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AScaleBorder.java
+++ /dev/null
@@ -1,1282 +0,0 @@
-package atlantis.canvas;
-
-import atlantis.graphics.AAbstractGraphics2D;
-import atlantis.graphics.ACursorFactory;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.Stroke;
-import java.awt.Image;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
-
-import javax.swing.border.Border;
-
-import atlantis.gui.APreferencesControl;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.parameters.ALinkParameter;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjectionEventInfo;
-import atlantis.projection.AProjectionNGE;
-import atlantis.projection.AProjectionTrackResidual;
-import atlantis.utils.AMath;
-import java.awt.RenderingHints;
-
-/**
- * This class implements a Border in which the left and bottom sides contain
- * numerical scales.
- *
- * @author Charles Loomis, Sebastian Boeser
- */
-public class AScaleBorder implements Border
-{
-	// Constants giving horizontal and vertical index of the data arrays.
-    final static private int HORIZONTAL = 0;
-    final static private int VERTICAL = 1;
-
-    /**
-     * Constant describing a transform in which the transformed x and y axes are
-     * parallel (or antiparallel) to the original axes.
-     */
-    final static public int TYPE_PARALLEL_TRANSFORM = 0;
-
-    /**
-     * Constant describing a transform in which the transformed x and y axes are
-     * parallel (or antiparallel) to the original y and x axes, respectively.
-     */
-    final static public int TYPE_SWITCHED_TRANSFORM = 1;
-
-    /**
-     * Constant describing a transform in which the transformed x-axis is
-     * parallel (or antiparallel) to the original x-axis and the transformed
-     * y-axis forms a non-zero angle with the original one.
-     */
-    final static public int TYPE_X_SKEW_TRANSFORM = 2;
-
-    /**
-     * Constant describing a transform in which the transformed y-axis is
-     * parallel (or antiparallel) to the original y-axis and the transformed
-     * x-axis forms a non-zero angle with the original one.
-     */
-    final static public int TYPE_Y_SKEW_TRANSFORM = 3;
-
-    /**
-     * Constant describing a transform in which the transformed x-axis is
-     * parallel (or antiparallel) to the original y-axis and the transformed
-     * y-axis forms a non-zero angle with the original x-axis.
-     */
-    final static public int TYPE_SWITCHED_X_SKEW_TRANSFORM = 4;
-
-    /**
-     * Constant describing a transform in which the transformed y-axis is
-     * parallel (or antiparallel) to the original x-axis and the transformed
-     * x-axis forms a non-zero angle with the original y-axis.
-     */
-    final static public int TYPE_SWITCHED_Y_SKEW_TRANSFORM = 5;
-
-    /**
-     * Constant describing a transform which does not fall into one of the other
-     * categories.
-     */
-    final static public int TYPE_GENERAL_TRANSFORM = 6;
-
-    /**
-     * Constant indicating that a string should be aligned vertically with the
-     * baseline of the text. This is the default in drawString calls which do
-     * not specify an alignment.
-     */
-    public static final int TEXT_BASELINE = 0;
-
-    /**
-     * Constant indicating that a string should be aligned vertically with the
-     * top of the text.
-     */
-    public static final int TEXT_TOP = 1;
-
-    /**
-     * Constant indicating that a string should be aligned vertically with the
-     * bottom of the text.
-     */
-    public static final int TEXT_BOTTOM = 3;
-
-    /**
-     * Constant indicating that a string should be aligned by the center. This
-     * is used for both horizontal and vertical alignment.
-     */
-    public static final int TEXT_CENTER = 2;
-
-    /**
-     * Constant indicating that a string should be aligned horizontally with the
-     * left side of the text. This is the default for drawString calls which do
-     * not specify an alignment.
-     */
-    public static final int TEXT_LEFT = 1;
-
-    /**
-     * Constant indicating that the string should be aligned horizontally with
-     * the right side of the text.
-     */
-    public static final int TEXT_RIGHT = 3;
-    
-    private AScale horizontalScale; // holds tick marks and labels
-    private AScale verticalScale;
-
-    /**
-     * String giving the axis labels.
-     */
-    private String[] axisLabels = new String[2];
-
-    /**
-     * String giving the axis units.
-     */
-    private String[] axisUnits = new String[2];
-
-    /**
-     * The initial font size for labeling.
-     */
-    private int fontSize = 12;
-
-    /**
-     * The initial font to use.
-     */
-    private Font labelFont = new Font("SansSerif", Font.BOLD, 12);
-
-    /**
-     * The width of the line used for the secondary tick marks.
-     */
-    final static private Stroke thinStroke = new BasicStroke(1.f);
-
-    /**
-     * The width of the line used for the primary tick marks.
-     */
-    final static private Stroke thickStroke = new BasicStroke(2.f);
-
-    /**
-     * An array to hold temporary point values for transformation.
-     */
-    private double[] axisPts = new double[6];
-
-    /**
-     * Flag to indicate that the scale has changed and that it needs to be
-     * redrawn.
-     */
-    private boolean scaleChanged;
-
-
-    /**
-     * The current width of the horizontal scale.
-     */
-    private int currentWidth;
-
-    /**
-     * The current width of the vertical scale.
-     */
-    private int currentHeight;
-
-    /**
-     * Minimum value on the horizontal axis.
-     */
-    private double minHoriz;
-
-    /**
-     * Maximum value of the horizontal axis.
-     */
-    private double maxHoriz;
-
-    /**
-     * Minimum value of the vertical axis.
-     */
-    private double minVert;
-
-    /**
-     * Maximum value on the vertical axis.
-     */
-    private double maxVert;
-
-    /**
-     * The calculated Insets for this border.
-     */
-    private Insets insets;
-
-    private boolean selected;
-    
-    /** 
-     * Wether to draw the scales for this window or not
-     */
-    private boolean drawScaleBorder;
-    
-    /** 
-     * Wether to draw the scales for this window or not
-     * independant of the projection being displayed
-     */
-    private boolean drawScaleBorder_preference;
-    
-    
-    /**
-     * The window this scale is drawn in.
-     */
-    private final AWindow aWindow;
-
-    /**
-     * Constructs a AScaleBorder
-     * @param theWindow the window this scale belongs to
-     */
-    public AScaleBorder(AWindow theWindow)
-    {
-        aWindow = theWindow;
-
-        // Give default values for the size of the axes.
-        minHoriz = 0.;
-        maxHoriz = 0.;
-        minVert = 0.;
-        maxVert = 0.;
-
-        // Make the new insets.
-        resetInsets();
-
-        // Set the current width and height.
-        currentWidth = 0;
-        currentHeight = 0;
-        scaleChanged = false;
-
-        selected = false;
-        drawScaleBorder = true;
-        drawScaleBorder_preference = true;
-    }
-
-    public void forceDraw()
-    {
-        scaleChanged = true;
-    }
-
-    public void toggleScale()
-    {
-        drawScaleBorder_preference = !drawScaleBorder_preference;
-        //only actually toggle scale if on a window with scale
-        AProjection p = aWindow.getProjection();
-
-        if(p instanceof AProjectionLegoPlot || p instanceof AProjectionNGE || p instanceof AProjectionEventInfo)
-            return;
-       
-        drawScaleBorder = !drawScaleBorder;
-        scaleChanged = true;
-        resetInsets();
-    }
-
-    public void hideScale()
-    {
-        //upon window change of projection check if scales need to hide or not
-        AProjection p = aWindow.getProjection();	
-        	
-        // Check global 'Hide Scales' option (in preferences menu)
-        // If hiding scales, set all scales to false
-        //
-        if(APreferencesControl.getHideScalesMenuItem())
-        {
-        		drawScaleBorder=false;
-        		resetInsets();
-        }
-        else 
-        	if(p instanceof AProjectionLegoPlot || p instanceof AProjectionNGE || p instanceof AProjectionEventInfo){
-            if(drawScaleBorder){
-                drawScaleBorder=false;
-                resetInsets();
-            }
-        }else if(drawScaleBorder!=drawScaleBorder_preference){
-            drawScaleBorder=drawScaleBorder_preference;
-            resetInsets();
-        }
-    }
-    
-    public boolean getScaleStatus()
-    {
-        return drawScaleBorder_preference;
-    }
-
-    /**
-     * Set the font for the labels.
-     */
-    public void setLabelFont(Font labelFont)
-    {
-        this.labelFont = labelFont;
-        fontSize = labelFont.getSize();
-        resetInsets();
-    }
-
-    public void setSelected()
-    {
-        selected = true;
-    }
-
-    public void setDeselected()
-    {
-        selected = false;
-    }
-
-    /**
-     * Get the current font for the labels.
-     */
-    public Font getLabelFont()
-    {
-        return labelFont;
-    }
-
-    /**
-     * Set the horizontal and vertical limits for the scales.
-     */
-    public void setLimits(double minHoriz, double maxHoriz, double minVert, double maxVert)
-    {
-        this.minHoriz = minHoriz;
-        this.maxHoriz = maxHoriz;
-        this.minVert = minVert;
-        this.maxVert = maxVert;
-        scaleChanged = true;
-    }
-
-    /**
-     * Set the axis labels.
-     */
-    public void setAxisLabels(String horizontalLabel, String verticalLabel)
-    {
-        axisLabels[HORIZONTAL] = horizontalLabel;
-        axisLabels[VERTICAL] = verticalLabel;
-    }
-
-    public String getHorizontalAxisLabel()
-    {
-        return axisLabels[HORIZONTAL];
-    }
-
-    public String getVerticalAxisLabel()
-    {
-        return axisLabels[VERTICAL];
-    }
-
-    /**
-     * Set the axis units.
-     */
-    public void setAxisUnits(String horizontalUnits, String verticalUnits)
-    {
-        if (horizontalUnits != null)
-        {
-            axisUnits[HORIZONTAL] = horizontalUnits;
-        }
-        else
-        {
-            axisUnits[HORIZONTAL] = "";
-        }
-
-        if (verticalUnits != null)
-        {
-            axisUnits[VERTICAL] = verticalUnits;
-        }
-        else
-        {
-            axisUnits[VERTICAL] = "";
-        }
-    }
-
-    /**
-     * Returns the insets of this border.
-     */
-    @Override
-    public Insets getBorderInsets(Component c)
-    {
-        return (Insets) insets.clone();
-    }
-
-    /**
-     * Returns whether or not the border is opaque. This always returns true.
-     */
-    @Override
-    public boolean isBorderOpaque() {return true;}
-    
-    /**
-     * Paints the border and window decorations for the specified component with the specified graphics
-     * context, position, and size.
-     */
-    @Override
-    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
-    {
-    	//Get the graphics context
-    	Graphics2D vg = (Graphics2D) g;
-    	//Sanity check
-    	if (vg==null) return;
-
-    	//Select background and frame colors
-    	Color bg = AWindow.BORDER_BACKGROUND_COLOR ;
-
-    	//Paint the border frame
-    	paintBorderFrame(vg,bg,width,height);
-
-    	//If drawing the border draw scales
-    	if (drawScaleBorder)
-    	{
-    		//Now check which projection we have
-    		AProjection p = aWindow.getProjection();
-
-    		// Set the flag indicating that the scales must be remade.
-    		scaleChanged = (scaleChanged || width != currentWidth || height != currentHeight);
-
-    		//set the Scales 
-    		setScales(p.getXLabel(), p.getYLabel(), p.getXUnits(), p.getYUnits(), makeTransform(aWindow.getUserCorners()), aWindow.getWidth(), aWindow.getHeight());
-
-    		//Paint the grid if there is one for this projection
-    		paintGrid(vg,p,width,height);
-
-    		//Paint the scales themselves
-    		paintScales(vg,p,width,height);
-
-    		// Reset the current width and height.
-    		currentWidth = width;
-    		currentHeight = height;
-    		scaleChanged = false;
-    	}
-
-    	//Check whether Window Title needs to be drawn
-    	if(APreferencesControl.getWindowTitleMenuItem()) {
-    		paintWindowTitle(g, width, height,true);
-    	}
-    	
-    	//Check whether FishEye Indicator needs to be drawn
-    	if(APreferencesControl.getFisheyeIndicatorMenuItem()) {
-    		paintFishEyeIndicator(g, false, width, height);
-    	}
-    }
-
-    /**
-     * Paints the part of the border that appears when the window is printed
-     */
-    void printBorder(Component c, Graphics g, int x, int y, int width, int height)
-    {
-    	paintBorder(c,g,x,y,width,height);
-    }
-
- 
-    /**
-     * Draw the part of the scales that shows up in printing
-     */
-    private void paintScales(Graphics2D g, AProjection p, int width, int height){
-    	APar parameterStore = APar.instance();
-
-        // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();
-        
-        Color foregroundColour = selected ? AWindow.BORDER_SELECTED_FOREGROUND_COLOR : AWindow.BORDER_FOREGROUND_COLOR;
-     
-        // Get the horizontal scale.
-        if (scaleChanged)
-        {
-        	int scaleLength = width - (insets.left + insets.right);
-        	horizontalScale = AScale.calculateScale(minHoriz, maxHoriz, scaleLength, 3, 7, AScale.RIGHT_TICKS,
-                    HORIZONTAL, p);
-        }
-
-        svg.translate(insets.left, height - insets.bottom + 2);
-
-        svg.setColor(foregroundColour);
-        svg.setFont(new Font("SansSerif", Font.BOLD, 12));
-
-        // Draw the primary and secondary tick marks.
-        svg.setStroke(thickStroke);
-        svg.draw(horizontalScale.primaryTicks);
-        svg.setStroke(thinStroke);
-        svg.draw(horizontalScale.secondaryTicks);
-
-        ScaleUnits hScaleUnits = new ScaleUnits(axisUnits[HORIZONTAL],minHoriz,maxHoriz);
-        double factorH = hScaleUnits.scaleFactor;
-        String unitsH = hScaleUnits.units;
-
-        ScaleUnits vScaleUnits = new ScaleUnits(axisUnits[VERTICAL],minVert,maxVert);
-        double factorV = vScaleUnits.scaleFactor;
-        String unitsV = vScaleUnits.units;
-
-        // Paint the tick labels.
-        int numLabelsH = horizontalScale.labelValues.length;
-        for (int i = 0; i < numLabelsH; i++)
-        {
-        	double valueScaled = horizontalScale.labelValues[i] * factorH;
-        	int nDecPlaces = getNumDecimalPlaces(valueScaled);
-        	String label = String.format("%."+nDecPlaces+"f", valueScaled);
-        	drawString(svg, label,
-        			(float) horizontalScale.labelPositions[i], AScale.getPrimaryTickSize() + 0.2f * fontSize, TEXT_CENTER, TEXT_TOP, width - insets.left - insets.right);
-        }
-
-        // Paint the axis label.
-        float axisPositionX = (float) horizontalScale.getTitlePosition();
-        drawString(svg, axisLabels[HORIZONTAL] + " " + unitsH, axisPositionX, AScale.getPrimaryTickSize() + 0.2f * fontSize, TEXT_CENTER, TEXT_TOP, width - insets.left - insets.right);
-
-        // End this context.
-        svg.dispose();
-
-        // Now create a new graphics context for the vertical axis.
-        svg = (Graphics2D) (g.create());
-
-        // Create the vertical scale.
-        if (scaleChanged)
-        {
-        	int scaleLength = height - (insets.top + insets.bottom);
-            verticalScale = AScale.calculateScale(minVert, maxVert, scaleLength, 3, 7, AScale.LEFT_TICKS,
-                    VERTICAL, p);
-        }
-
-        svg.translate(insets.left - 2, height - insets.bottom);
-        svg.rotate(-Math.PI / 2.);
-
-        svg.setColor(foregroundColour);
-        svg.setFont(new Font("SansSerif", Font.BOLD, 12));
-
-        // Draw the primary and secondary tick marks.
-        svg.setStroke(thickStroke);
-        svg.draw(verticalScale.primaryTicks);
-        svg.setStroke(thinStroke);
-        svg.draw(verticalScale.secondaryTicks);
-
-        // Paint the tick labels.
-        int numLabelsV = verticalScale.labelValues.length;
-        for (int i = 0; i < numLabelsV; i++)
-        {
-        	double valueScaled = verticalScale.labelValues[i] * factorV;
-        	int nDecPlaces = getNumDecimalPlaces(valueScaled);
-        	String label = String.format("%."+nDecPlaces+"f", valueScaled);
-        	if(p instanceof AProjectionTrackResidual && parameterStore.get("TrackResidual", "Scale").getI() == 1)
-        	{
-        		if(!label.equals("0"))
-        		{
-        			long tmp = Math.round(((AProjectionTrackResidual)p).getResidual().getLogMagnitudeMin() + Math.abs(Double.parseDouble(label)));
-        			if(label.indexOf("-") == -1) //positive
-        				label = "1E" + tmp;
-        			else
-        				label = "-1E" + tmp;
-        		}
-        	}
-        	drawString(svg, label, (float) verticalScale.labelPositions[i], -(AScale.getPrimaryTickSize() + 0.2f * fontSize), TEXT_CENTER, TEXT_BOTTOM, height - insets.top - insets.bottom);
-        }
-
-        // Paint the axis label.
-        float axisPositionY = (float) verticalScale.getTitlePosition();
-        drawString(svg, axisLabels[VERTICAL] + " " + unitsV, axisPositionY, -(AScale.getPrimaryTickSize() + 0.2f * fontSize), TEXT_CENTER, TEXT_BOTTOM, height - insets.top - insets.bottom);
-
-        // End this context.
-        svg.dispose();
-
-    }
-    
-    /**
-     * Calculate number of decimal places needed in formatting number.
-     * @param x number to format
-     * @return number of decimal places needed
-     */
-    static int getNumDecimalPlaces(double x) {
-    	int m = - (int) Math.floor(Math.log10(Math.abs(x)));
-		return Math.max(0, m);
-	}
-
-	/** 
-     * Draw the grid for the V-Plot
-     **/
-    private void paintGrid(Graphics2D g, AProjection p, int width, int height){
-        
-        // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();
- 
-        // next part draws the grid for the V-plot
-        if (p.getName().equals("VP"))
-        {
-            //Set color for grid lines
-            svg.setColor(Color.LIGHT_GRAY);
-            
-            // eta grid projections values - these particular values
-            // will be useful for calo people to see the eta grid lines at
-            float[] etaGridPositions = { -4.9f, -3.2f, -2.5f, -1.375f, -0.8f,
-                                         0.8f, 1.375f, 2.5f, 3.2f, 4.9f };
-
-            for(int i = 0; i < etaGridPositions.length; i++)
-            {
-                if (etaGridPositions[i] > minHoriz && etaGridPositions[i] < maxHoriz) {
-                    Point2D.Double startp = aWindow.calculateDisplay(etaGridPositions[i],minVert);
-                    Point2D.Double endp = aWindow.calculateDisplay(etaGridPositions[i],maxVert);
-                    svg.drawLine((int)startp.x,(int)startp.y,(int)endp.x,(int)endp.y);
-                }
-            }
-
-            for (int i = (int)Math.ceil(minVert/90.)*90; i <= maxVert; i += 90)
-            {
-                Point2D.Double startp = aWindow.calculateDisplay(minHoriz,i);
-                Point2D.Double endp = aWindow.calculateDisplay(maxHoriz,i);
-                if (Math.abs(i) % 360 == 0) {
-                    svg.setColor(Color.WHITE);
-                    svg.setStroke(thickStroke);
-                } else {
-                    svg.setColor(Color.LIGHT_GRAY);
-                    svg.setStroke(thinStroke);
-                }
-                svg.drawLine((int)startp.x,(int)startp.y,(int)endp.x,(int)endp.y);
-            }
-        }
-        
-        svg.dispose();
-        
-    }
-    
-    /**
-     * This bit of the frame that is drawn when printing (appart from scales)
-     */
-    private void printBorderFrame(Graphics2D g, Color bg, int width, int height){
-   
-        // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();
- 
-        svg.setColor(bg);
-        //simply draw rectangles all around window
-        svg.fillRect(0, 0, width, insets.top);
-        // Added -insets.bottom because sometimes this stuff is transparent -Adam
-        svg.fillRect(0, 0, insets.left, height - insets.bottom);
-        svg.fillRect(width - insets.right, 0, insets.right, height);
-        svg.fillRect(0, height - insets.bottom, width, insets.bottom);
-        
-        svg.dispose();
-    }
-    
-    /** 
-     * Paint the Frame of the border with the given colors
-     */
-    private void paintBorderFrame(Graphics2D g, Color bg, int width, int height){        
-        //Draw the frame same as for printing
-        printBorderFrame(g,bg,width,height);
-        
-       // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();
-        
-        // Add a bit of GUI-look-and-feel frame
-        if (selected){
-            //white triangle bottom left corner - clears any background colour
-            svg.setColor(AWindow.BORDER_SELECTED_FRAMELIGHT_COLOR);
-            int xp[]={0,0,11,0};
-            int yp[]={height-12,height,height,height-12};
-            svg.fillPolygon(xp,yp,4);          
-            //blue border around window
-            svg.setColor(AWindow.BORDER_SELECTED_FRAME_COLOR);
-            svg.drawLine(0, 0, width-1, 0);
-            svg.drawLine(0, 0, 0, height-10);
-            svg.drawLine(width-1, 0, width-1, height-1);
-            svg.drawLine(10, height-1, width-1, height-1);
-            svg.drawLine(0, height-10, 9, height-1);
-            //white inner border
-            svg.setColor(AWindow.BORDER_SELECTED_FRAMELIGHT_COLOR);
-            svg.drawLine(10, height-2, width-2, height-2);
-            svg.drawLine(1, 1, 1, height-10);
-            //grey triangle bottom left corner
-            svg.setColor(AWindow.BORDER_BACKGROUND_COLOR);
-            xp[2]=8;
-            yp[0]=height-9;
-            yp[3]=height-9;
-            svg.fillPolygon(xp,yp,4);
-        }
-        
-        svg.dispose();
-    }
-    
-    /**
-     * Paint a small box at the top of each window to describe what is on the window
-     */
-    private void paintWindowTitle(Graphics g, int width, int height, boolean highlight)
-    {
-    	APar parameterStore = APar.instance();
-
-        // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();
-        //Get Mode parameter
-        String s=aWindow.getProjection().getName();
-        parameterStore.selectWindowParameters(aWindow.getName());
-        AParameter param=parameterStore.get(s, "Mode");
-        int mode=param.getI();
-        s=aWindow.getProjection().getScreenName();
-        s+=" Projection";
-        //Add mode text if not on standard view 
-        if (param != null)
-        {
-            if(mode != 0)
-            {
-                s+=" viewing: ";
-                if(param instanceof ALinkParameter){
-                    s+=((ALinkParameter) param).getCurrentText();
-                }else{
-                    s+=((AEnumeratorParameter) param).getCurrentText();
-                }
-            }
-        }
-        parameterStore.restoreWindowParameters();
-        //Offset if indicator to window frame
-        int Offset=2;
-        
-        int boxsize,y;
-        // get the width of the text
-        boxsize = svg.getFontMetrics().stringWidth(s)+Offset*2;        
-        //Get y position from offset
-        y = Offset+svg.getFontMetrics().getHeight();
-        
-        //Get the x position from width of window
-        int x = insets.left + (int) Math.round(((width-insets.left-boxsize)/2.0));
-        //Draw background box and set text color
-        //highlighting the active window if desired
-        if(selected&&highlight)
-        {
-            //If selected and not printing eps 
-            //add a bit of GUI-look-and-feel frame
-            svg.setColor(AWindow.BORDER_SELECTED_BACKGROUND_COLOR);
-            svg.fillRect(x-2, 1, boxsize+4, y+1);
-            svg.setColor(AWindow.BORDER_SELECTED_FRAME_COLOR);
-            svg.fillRect(x-1, 0, boxsize+2, y+1);
-            svg.setColor(AWindow.BORDER_SELECTED_FRAMELIGHT_COLOR);
-            svg.fillRect(x, 1, boxsize, y-1);
-            svg.setColor(AWindow.BORDER_SELECTED_BACKGROUND_COLOR);
-            svg.fillRect(x+1, 1, boxsize-1, y-2);
-            svg.setColor(AWindow.BORDER_SELECTED_FOREGROUND_COLOR);
-        }
-        else
-        {
-            //If not selected draw background box
-            svg.setColor(AWindow.BORDER_BACKGROUND_COLOR);
-            svg.fillRect(x-2, 0, boxsize+4, y+2);
-            svg.setColor(AWindow.BORDER_FOREGROUND_COLOR);
-        }
-        //Draw text
-        svg.drawString(s, x+Offset, y-3);
-        //cleanup
-        svg.dispose();
-    }
-
-    /**
-     *  Paint a small FishEye Indicator if FishEye projection is active.
-     *  At the moment, the indicator is drawn in the top right corner of the canvas.
-     *  One might as well put it in on the scale. Eventually, if the scales shows
-     *  proper fisheyed coordinates, it might not be needed anymore at all.
-     */
-    private void paintFishEyeIndicator(Graphics g, boolean forceText, int width, int height){
-      APar parameterStore = APar.instance();
-
-      //Probe for fishEye status
-      boolean fishEyeStatus=false;
-      
-      //Check if FishEye is on for this particular window
-      parameterStore.selectWindowParameters(aWindow.getName());
-      
-      //Get FishEye parameter
-      AParameter fishEyePar = parameterStore.get(aWindow.getProjection().getName(), "FishEye");
-
-      //Check if there is a fish-eye parameter for this projection, and get status (enabled or not)
-      if (fishEyePar != null) fishEyeStatus=fishEyePar.getStatus();
-      
-      //Restore to active window
-      parameterStore.restoreWindowParameters();
-
-      // Now draw indicator if fisheye was on
-      if (fishEyeStatus){
- 
-        // Make our own graphics contex, so we don't cause trouble elsewhere
-        Graphics2D svg = (Graphics2D) g.create();            
-        //Offset if indicator to window frame
-        int Offset=4;
-        //Check if we have custom cursors - only then use indicator image
-        if (!forceText ){
-          //FishEye indicator image is provided by ACursorFactory as it is the same
-          //as the cursor used in FishEye transformation.
-          Image IndicatorImg = ACursorFactory.getInstance().getFishEyeIndicator();
-          //Get the x position from width of window and width of image
-          int x = width-Offset-IndicatorImg.getWidth(null);
-          //Get y position from offset
-          int y = Offset;
-          //Draw an fisheye indicator in top right corner with some space
-          svg.drawImage(IndicatorImg,x,y,null);
-        } else {
-          int x,y;
-          //Get the x position from width of window and width of image
-          x = width-Offset-svg.getFontMetrics().stringWidth("FishEye");
-          //Get y position from offset
-          y = Offset+svg.getFontMetrics().getHeight();
-          //Set color to red
-          svg.setColor(Color.red);
-          //Use small label to indicate fisheye
-          svg.drawString("FishEye",x,y);
-   
-        }
-        //cleanup
-        svg.dispose();
-      }
-    }
-
-    /**
-     * Recalculate the insets based on the current font size.
-     */
-    private void resetInsets()
-    {
-        int lb = (int) (2 + 2 + AScale.getPrimaryTickSize() + 1.5 * fontSize);
-        // int tr = (int) (2+2+AScale.getPrimaryTickSize());
-        int tr = 2;
-
-        if (drawScaleBorder)
-            insets = new Insets(tr, lb, lb, tr);
-        else
-            insets = new Insets(tr, tr, tr, tr);
-    }
-
-    /**
-     * Set the scale labels taking into account the given linear transformation.
-     */
-    public void setScales(String horizLabel, String vertLabel, String horizUnits, String vertUnits, AffineTransform transform, int panelWidth, int panelHeight)
-    {
-
-        // Determine the type of the tranform.
-        int type = classifyTransform(transform);
-
-        switch (type)
-        {
-            case TYPE_PARALLEL_TRANSFORM:
-                setAxisLabels(horizLabel, vertLabel);
-                setAxisUnits(horizUnits, vertUnits);
-                break;
-
-            case TYPE_SWITCHED_TRANSFORM:
-                setAxisLabels(vertLabel, horizLabel);
-                setAxisUnits(vertUnits, horizUnits);
-                break;
-
-            case TYPE_Y_SKEW_TRANSFORM:
-                setAxisLabels(horizLabel + AMath.PRIME, AMath.DELTA + vertLabel);
-                if (horizUnits.equals(vertUnits))
-                {
-                    setAxisUnits(horizUnits, vertUnits);
-                }
-                else
-                {
-                    setAxisUnits(horizUnits + AMath.DOT + vertUnits, vertUnits);
-                }
-                break;
-
-            case TYPE_X_SKEW_TRANSFORM:
-                setAxisLabels(AMath.DELTA + horizLabel, vertLabel + AMath.PRIME);
-                if (vertUnits.equals(horizUnits))
-                {
-                    setAxisUnits(horizUnits, vertUnits);
-                }
-                else
-                {
-                    setAxisUnits(horizUnits, vertUnits + AMath.DOT + horizUnits);
-                }
-                break;
-
-            case TYPE_SWITCHED_Y_SKEW_TRANSFORM:
-                setAxisLabels(vertLabel + AMath.PRIME, AMath.DELTA + horizLabel);
-                if (vertUnits.equals(horizUnits))
-                {
-                    setAxisUnits(vertUnits, horizUnits);
-                }
-                else
-                {
-                    setAxisUnits(vertUnits + AMath.DOT + horizUnits, horizUnits);
-                }
-                break;
-
-            case TYPE_SWITCHED_X_SKEW_TRANSFORM:
-                setAxisLabels(AMath.DELTA + vertLabel, horizLabel + AMath.PRIME);
-                if (horizUnits.equals(vertUnits))
-                {
-                    setAxisUnits(vertUnits, horizUnits);
-                }
-                else
-                {
-                    setAxisUnits(vertUnits, horizUnits + AMath.DOT + vertUnits);
-                }
-                break;
-
-            default:
-                setAxisLabels(horizLabel + AMath.PRIME, vertLabel + AMath.PRIME);
-                if (horizUnits.equals(vertUnits))
-                {
-                    setAxisUnits(horizUnits, vertUnits);
-                }
-                else
-                {
-                    setAxisUnits(horizUnits + AMath.DOT + vertUnits, vertUnits + AMath.DOT + horizUnits);
-                }
-                break;
-        }
-
-        // Get the size of the scales.
-        axisPts[0] = 0.;
-        axisPts[1] = panelHeight;
-        axisPts[2] = 0.;
-        axisPts[3] = panelHeight;
-        axisPts[4] = panelWidth;
-        axisPts[5] = 0.;
-        try
-        {
-            // Avoid using the following call because of a bug in
-            // AffineTransform. Instead create the inverse matrix
-            // explicitly as done below.
-            // transform.inverseTransform(physicsPt,0,physicsPt,0,3);
-            AffineTransform ixform = transform.createInverse();
-
-            ixform.transform(axisPts, 0, axisPts, 0, 1);
-            ixform.deltaTransform(axisPts, 2, axisPts, 2, 2);
-
-            // Calculate the values for the vertical axis and the distance.
-            double vdy = axisPts[3];
-            double vdx = axisPts[2];
-            double vdist = Math.sqrt(vdx * vdx + vdy * vdy);
-
-            // Calculate the values for the horizontal axis and the distance.
-            double hdy = axisPts[5];
-            double hdx = axisPts[4];
-            double hdist = Math.sqrt(hdx * hdx + hdy * hdy);
-
-            // Initialize the endpoints of the axes.
-            double vmin = 0.;
-            double vmax = 0.;
-            double hmin = 0.;
-            double hmax = 0.;
-
-            // Do what is necessary for the different types of transformations.
-            switch (type)
-            {
-                case (TYPE_PARALLEL_TRANSFORM):
-                {
-                    double vsign = (vdy < 0.) ? 1. : -1.;
-
-                    vmin = axisPts[1];
-                    vmax = axisPts[1] + vsign * vdist;
-
-                    double hsign = (hdx > 0.) ? 1. : -1.;
-
-                    hmin = axisPts[0];
-                    hmax = axisPts[0] + hsign * hdist;
-                    break;
-                }
-
-                case (TYPE_SWITCHED_TRANSFORM):
-                {
-                    double hsign = (hdy > 0.) ? 1. : -1.;
-
-                    hmin = axisPts[1];
-                    hmax = axisPts[1] + hsign * hdist;
-
-                    double vsign = (vdx < 0.) ? 1. : -1.;
-
-                    vmin = axisPts[0];
-                    vmax = axisPts[0] + vsign * vdist;
-                    break;
-                }
-
-                case (TYPE_Y_SKEW_TRANSFORM):
-                {
-                    double vsign = (vdy > 0.) ? 1. : -1.;
-
-                    vmax = -vsign * vdist / 2.;
-                    vmin = -vmax;
-
-                    hmin = 0.;
-                    hmax = hdist;
-                    break;
-                }
-
-                case (TYPE_X_SKEW_TRANSFORM):
-                {
-                    double hsign = (hdx > 0.) ? 1. : -1.;
-
-                    hmax = hsign * hdist / 2.;
-                    hmin = -hmax;
-
-                    vmin = 0.;
-                    vmax = vdist;
-                    break;
-                }
-
-                case (TYPE_SWITCHED_Y_SKEW_TRANSFORM):
-                {
-                    double vsign = (vdx > 0.) ? 1. : -1.;
-
-                    vmax = -vsign * vdist / 2.;
-                    vmin = -vmax;
-
-                    hmin = 0.;
-                    hmax = hdist;
-                    break;
-                }
-
-                case (TYPE_SWITCHED_X_SKEW_TRANSFORM):
-                {
-                    double hsign = (hdy > 0.) ? 1. : -1.;
-
-                    hmax = hsign * hdist / 2.;
-                    hmin = -hmax;
-
-                    vmin = 0.;
-                    vmax = vdist;
-                    break;
-                }
-
-                default:
-                {
-                    vmin = 0.;
-                    vmax = 0.;
-                    hmin = 0.;
-                    hmax = 0.;
-                    break;
-                }
-            }
-
-            // Actually set the limits.
-            setLimits(hmin, hmax, vmin, vmax);
-        }
-        catch (NoninvertibleTransformException e)
-        {
-            setLimits(0., 0., 0., 0.);
-        }
-    }
-
-    /**
-     * This is a protected utility method which classifies the given transform
-     * into seven categories: parallel, switched, x-skew, y-skew, switched
-     * x-skew, switched y-skew, and general. The parallel category describes
-     * transformations in which the transformed x and y axes are parallel or
-     * antiparallel to the original x and y axes, respectively. The switched
-     * category describes transformations in which the transformed x and y axes
-     * are parallel or antiparallel to the original y and x axes, respectively.
-     * That is, the x and y axes have been switched. The x-skew describes
-     * transformations in which the transformed x-axis is parallel (or
-     * antiparallel) to the original one while the transformed y-axis forms some
-     * non-zero angle to the original one. The y-skew is similar; the switch
-     * skews are just rotated (counter)clockwise by 90 degrees. The general
-     * category encompasses all transforms not falling into one of the other
-     * categories.
-     */
-    static protected int classifyTransform(AffineTransform xform)
-    {
-        // Set the default return type to a general matrix.
-        int category = TYPE_GENERAL_TRANSFORM;
-
-        // Get the four non-translation quantities from the transformation.
-        double sx = xform.getScaleX();
-        double sy = xform.getScaleY();
-        double kx = xform.getShearX();
-        double ky = xform.getShearY();
-
-        // Check the type.
-        if (kx == 0. && ky == 0.)
-        {
-            category = TYPE_PARALLEL_TRANSFORM;
-        }
-        else if (sx == 0. && sy == 0.)
-        {
-            category = TYPE_SWITCHED_TRANSFORM;
-        }
-        else if (kx == 0.)
-        {
-            category = TYPE_Y_SKEW_TRANSFORM;
-        }
-        else if (ky == 0.)
-        {
-            category = TYPE_X_SKEW_TRANSFORM;
-        }
-        else if (sx == 0.)
-        {
-            category = TYPE_SWITCHED_Y_SKEW_TRANSFORM;
-        }
-        else if (sy == 0.)
-        {
-            category = TYPE_SWITCHED_X_SKEW_TRANSFORM;
-        }
-
-        // Return the transformtion type.
-        return category;
-    }
-
-    /**
-     * A utility which makes an AffineTransform given three corner
-     * points. The first point must be the upper, left-hand corner
-     * point, the second, the upper, right-hand corner point, and the
-     * third, the lower, right-hand corner point.
-     *
-     * @return AffineTransform which does the appropriate mapping */
-    protected AffineTransform makeTransform(Point2D.Double[] corners)
-    {
-        double x0 = corners[0].x;
-        double y0 = corners[0].y;
-        double x1 = corners[1].x;
-        double y1 = corners[1].y;
-        double x2 = corners[2].x;
-        double y2 = corners[2].y;
-
-        double sx = 0.;
-        double kx = 0.;
-        double tx = 0.;
-        double sy = 0.;
-        double ky = 0.;
-        double ty = 0.;
-
-        double delta = (x2 * (y1 - y0) - x1 * (y2 - y0) + x0 * (y2 - y1));
-
-        if (delta == 0)
-        {
-            // cannot successfully create an AffineTransform
-            System.err.println("Fatal Error: AffineTransform creating failed.");
-            System.err.println("Possible cause: wrong user corner values are set.");
-            System.exit(1);
-            return null;
-        }
-        else
-        {
-            delta = 1. / delta;
-
-            double w = aWindow.getWidth();
-            double h = aWindow.getHeight();
-
-            sx = -(delta * w) * (y2 - y1);
-            kx = (delta * w) * (x2 - x1);
-            tx = -(x0 * sx + y0 * kx);
-
-            ky = (delta * h) * (y1 - y0);
-            sy = -(delta * h) * (x1 - x0);
-            ty = -(x0 * ky + y0 * sy);
-
-            return new AffineTransform(sx, ky, kx, sy, tx, ty);
-        }
-
-    }
-
-    public void drawString(Graphics2D g, String str, double x, double y, int horizontal, int vertical, int maxSize)
-    {
-        drawString(g, str, x, y, horizontal, vertical, false, null, 0, false, null, maxSize);
-    }
-
-    private void drawString(Graphics2D g, String str, double x, double y, int horizontal, int vertical, boolean framed, Color frameColor, double frameWidth, boolean banner, Color bannerColor, int maxSize)
-    {
-        Font sf = g.getFont();
-        int width = sf.getSize();
-        int descent = 0;
-        int height = sf.getSize();
-        int adjustment = 0;
-
-        // The metrics stuff did not work, so I made a work around and now
-        // even ps-printing works (CT 27/7/2004)
-        double xx = Math.min(x, maxSize - width / 2);
-        Rectangle textSize = new Rectangle(0, descent - height, width, height);
-        Point2D textUL = drawFrameAndBanner(xx, y, textSize, adjustment, framed, frameColor, frameWidth, banner, bannerColor, horizontal, vertical);
-
-        if (g instanceof AAbstractGraphics2D) {
-            // No antialiasing support needed for EPS output.
-            g.drawString(str, (int) textUL.getX(), (int) textUL.getY());
-        } else {
-            // For pixel graphics, switch on antialiasing for text.
-            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-            g.drawString(str, (int) textUL.getX(), (int) textUL.getY());
-            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
-        }
-    }
-
-    /** Draws frame and banner around a string. The method calculates and returns
-     *  the point to which the text curser should be set before drawing the string. */
-    private Point2D drawFrameAndBanner(double x, double y, Rectangle textSize, int adjustment, boolean framed, Color frameColor, double frameWidth, boolean banner, Color bannerColor, int horizontal, int vertical)
-    {
-        double descent = textSize.y + textSize.height;
-        x = getXalignment(x, textSize.width, horizontal);
-        y = getYalignment(y, textSize.height, (int) descent, vertical);
-        return new Point2D.Double(x, y);
-    }
-
-    private static double getYalignment(double y, int ascent, int descent, int alignment)
-    {
-        // vertical alignment
-        switch (alignment)
-        {
-            case TEXT_TOP:
-                y = y + ascent - descent;
-                break;
-
-            case TEXT_CENTER:
-                y = y + ((ascent + descent) / 2) - descent;
-                break;
-
-            case TEXT_BOTTOM:
-                y = y - descent;
-                break;
-
-            case TEXT_BASELINE:
-            default:
-                break;
-        }
-        return y;
-    }
-
-    private static double getXalignment(double x, int width, int alignment)
-    {
-        // horizontal alignment
-        switch (alignment)
-        {
-            case TEXT_CENTER:
-                x = x - (width / 2);
-                break;
-
-            case TEXT_RIGHT:
-                x = x - width;
-                break;
-
-            case TEXT_LEFT:
-            default:
-                break;
-        }
-        return x;
-    }
-    
-    /**
-     * Encapsulates units and range for an axis.
-     * Used for m->cm->mm->um autoscaling.
-     */
-    private static class ScaleUnits {
-    	final String units;
-    	final double scaleFactor;
-    	
-    	ScaleUnits(String units, double min, double max) {
-            double maxMod = Math.max(Math.abs(max), Math.abs(min));
-            if (!units.equals("(cm)")) {
-            	this.units = units;
-            	this.scaleFactor = 1.0;
-            	return;
-            }
-            else {
-                if (maxMod > 200.)
-                {
-                    this.scaleFactor= 0.01;
-                    this.units = "(m) ";
-                }
-                else if (maxMod > 2.)
-                {
-                    this.scaleFactor = 1.0;
-                    this.units = "(cm)";
-                }
-                else if (maxMod > .2)
-                {
-                    this.scaleFactor = 10.;
-                    this.units = "(mm)";
-                }
-                else
-                {
-                    this.scaleFactor = 10000.;
-                    this.units = "(" + AMath.MICRO + "m)";
-                }
-            }
-    	}
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/ATitleMenuBar.java b/graphics/AtlantisJava/src/atlantis/canvas/ATitleMenuBar.java
deleted file mode 100755
index 85ad9daab256..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/ATitleMenuBar.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package atlantis.canvas;
-
-import javax.swing.JLabel;
-import javax.swing.JMenuBar;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.APar;
-
-
-public class ATitleMenuBar extends JMenuBar 
-{
-
-  public ATitleMenuBar() 
-  {
-    // just to set the height of the title bar
-
-    JLabel atlas = new JLabel(" Atlantis ");
-    atlas.setFont(new Font("Courier", Font.PLAIN, 25));
-    add(atlas);
-  }
-
-  @Override
-  public void paint(Graphics g) 
-  {
-	AEventManager eventManager = AEventManager.instance();
-    AEvent event = eventManager.getCurrentEvent();
-    Font titleFont=new Font("Dialog", Font.BOLD, 15);
-    int availableSpace = (int) Math.floor(getWidth()-10);
-    FontMetrics fm = ACanvas.getCanvas().getFontMetrics(titleFont);
-    
-    AGraphics ag=AGraphics.makeAGraphics(g);
-    ag.setColor(AWindow.BORDER_BACKGROUND_COLOR);
-    ag.fillRect(0, 0, getWidth(), getHeight());
-    ag.setColor(AWindow.BORDER_FOREGROUND_COLOR);
-    ag.updateColor();
-    ag.setFont(titleFont);
-    availableSpace -= fm.stringWidth("ATLAS  Atlantis");
-    ag.drawString("ATLAS ", 5, getHeight()-10);
-    ag.drawString(" Atlantis", getWidth()-fm.stringWidth(" Atlantis")-5, getHeight()-10);
-    
-    String[] titleSections = new String[6];
-    if(event != null)
-    {
-      titleSections[0] = !event.getDateTime().equals("n/a") ? event.getDateTime() : "";
-      titleSections[1] = " source:" + event.getSourceName();
-      int extension_dot = titleSections[1].toLowerCase().lastIndexOf(".");
-      if(extension_dot > 0)
-        titleSections[1] = titleSections[1].substring(0,extension_dot);
-      titleSections[2] = " run:" + event.getRunNumber();
-      titleSections[3] = " ev:" + event.getEventNumber();
-      titleSections[4] = " lumiBlock:" + event.getLumiBlock();
-      titleSections[5] = " eventProperties: " + event.getEventProperties();
-    }
-    else
-    {
-      titleSections[0]="";
-      titleSections[1]=" event:n/a";
-      titleSections[2]=" run:n/a";
-      titleSections[3]=" ev:n/a";
-      titleSections[4]="";
-      titleSections[5]="";
-    }
-    
-
-    //for masterclass turn off some of the canvas title parts
-    APar parameterStore = APar.instance();
-    if(parameterStore.get("Minerva","hiderun").getStatus())
-      titleSections[2]="";
-    if(parameterStore.get("Minerva","hideev").getStatus())
-      titleSections[3]="";
-
- 
-    StringBuilder outputString = new StringBuilder();
-    int titleSectionSize=0;
-    for(int i=0; i<6; i++)
-    {
-      if(titleSectionSize+fm.stringWidth(titleSections[i])<availableSpace)
-      {
-	  if(!titleSections[i].endsWith("default")){
-	      titleSectionSize+=fm.stringWidth(titleSections[i]);
-	      outputString.append(titleSections[i]);
-	  }
-      }
-    }
-    ag.drawString(outputString.toString(), (getWidth()-titleSectionSize)/2, getHeight()-10);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AWindow.java b/graphics/AtlantisJava/src/atlantis/canvas/AWindow.java
deleted file mode 100755
index 159623e227c7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AWindow.java
+++ /dev/null
@@ -1,1549 +0,0 @@
-package atlantis.canvas;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.GraphicsEnvironment;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.dnd.DropTarget;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.geom.Point2D;
-import java.awt.geom.Point2D.Double;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
-
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.Stack;
-import java.util.Vector;
-
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JSeparator;
-import javax.swing.JToolTip;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.dnd.ACallBack;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.AObjectTransferable;
-import atlantis.gui.AColorHelpDialog;
-import atlantis.gui.AInteractionToolBar;
-import atlantis.gui.APreferencesControl;
-import atlantis.interactions.AInteraction;
-import atlantis.interactions.AInteractionsManager;
-import atlantis.interactions.ASelection;
-import atlantis.interactions.ARectangleVPSelection;
-import atlantis.interactions.ARectangleYXSelection;
-import atlantis.interactions.AZMRInteraction;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionNPhysics;
-import atlantis.projection.AProjectionTrackResidual;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.AMath;
-
-import atlantis.utils.ALogger;
-import java.awt.BorderLayout;
-import javax.swing.JComponent;
-
-/**
- * The objects of this class are single windows managed by ACanvas
- * This class manages the painting of each picture and is always
- * called by the java awt event thread. Programatic requests for
- * picture updates are handled by calls to repaintFromScratch() which
- * adds requests to the awt event thread.
- * It paints first into an off-screen buffer which is then copied
- * onto the screen.
- * It handles the linear transformation from user to display
- * coordinates and vice-versa. Non-linear transformations are handled by
- * by the projections. Windows have a scale (and scale border) which
- * may be visible or not. Each window has an associated projection
- * and an interactionManager which knows about the current interaction
- * and the state of all other interactions for this window.
- *
- * @author    taylorg
- */
-public class AWindow extends JPanel implements DropTargetListener,
-       DragSourceListener, DragGestureListener, ACallBack
-{   
-
-  private static ALogger logger = ALogger.getLogger(AWindow.class);
-  private static AGlobals globals = AGlobals.instance();
-  
-  //Whether horizontal or vertical scale is copied when window is dragged
-  private static enum dragActionType { COPY_VERTICAL_SCALE, COPY_HORIZONTAL_SCALE };
-
-  //these colors are used on the scale border and title bar
-  static final Color BORDER_FOREGROUND_COLOR = new Color(48,48,48);
-  static final Color BORDER_SELECTED_FOREGROUND_COLOR = new Color(48,48,48);
-  static final Color BORDER_SELECTED_FRAME_COLOR = new Color(99,130,191);
-  static final Color BORDER_SELECTED_FRAMELIGHT_COLOR = new Color(255,255,255);
-  // These ones must be public and cannot be final because AOpenGLControl messes with them.
-  public static Color BORDER_BACKGROUND_COLOR = new Color(224,224,224);
-  public static Color BORDER_SELECTED_BACKGROUND_COLOR = new Color(200,221,242);
-  private dragActionType dragAction;
-  private boolean canCopyScales = false;
-  private DragSource dragSource = null;
-  private Graphics2D backingGraphics = null;
-  private BufferedImage backingImage = null;
-  private Dimension backingDimension = new Dimension();
-
-  /**
-   * The border of the window holds a scale with units
-   **/
-  private AScaleBorder scaleBorder;
-
-  private boolean bufferValid = false;
-  private boolean borderValid = false;
-  private Insets insets = new Insets(0, 0, 0, 0);
-  private double m00, m01, m02, m10, m11, m12, n00, n01, n02, n10, n11, n12;
-  private AInteractionsManager interactionsManager;
-  private Hashtable<String, Double[]> corners;
-  private Point2D.Double[] userCorners;
-  private Point2D.Double[] defaultCorners;
-  private AProjection projection;
-  private String group;
-  private String defaultGroup;
-  private String defaultProjectionName;
-  private int index;
-  boolean finalized;
-  private Stack<Point2D.Double[]> cornersHistory = new Stack<Point2D.Double[]>();
-  private AProjection projectionHistory = null;
-  private Stack<Integer> zoomSummed = new Stack<Integer>();
-  private Stack<Integer> zoomLayers = new Stack<Integer>();
-  private Stack<Integer> zoomCalo = new Stack<Integer>();
-  private Stack<Integer> zoomCaloLAr = new Stack<Integer>();
-  private Stack<Integer> modeHistory = new Stack<Integer>();
-  private Stack<Integer> cutHistoryLAr = new Stack<Integer>();
-  private Stack<Integer> cutHistoryHEC = new Stack<Integer>();
-  private Stack<Integer> layoutHistory = new Stack<Integer>();
-  private boolean locked;
-  private static JPopupMenu popupMenu;
-  private final static String LOCK = "Freeze";
-  private final static String UNLOCK = "Unfreeze";
-  private final static String HORIZONTAL_FLIP = "Horizontal Flip";
-  private final static String VERTICAL_FLIP = "Vertical Flip";
-  private final static String ROTATE_BY_90_CLOCKWISE = "Rotate by 90";
-  private final static String ROTATE_BY_90_ANTICLOCKWISE = "Rotate by -90";
-  private final static String TOGGLE_SCALE = "Toggle Scale";
-  private final static String RESTORE_DEFAULTS = "Restore Initial Size";
-
-  private JComponent m_view = null;
-
-  static
-  {
-    popupMenu = new JPopupMenu();
-    ActionListener actionListener = new PopupMenuActionListener();
-    popupMenu.add(HORIZONTAL_FLIP).addActionListener(actionListener);
-    popupMenu.add(VERTICAL_FLIP).addActionListener(actionListener);
-    popupMenu.add(new JSeparator());
-    popupMenu.add(ROTATE_BY_90_CLOCKWISE).addActionListener(actionListener);
-    popupMenu.add(ROTATE_BY_90_ANTICLOCKWISE).addActionListener(
-        actionListener);
-    popupMenu.add(new JSeparator());
-    popupMenu.add(TOGGLE_SCALE).addActionListener(actionListener);
-    popupMenu.add(RESTORE_DEFAULTS).addActionListener(actionListener);
-    popupMenu.add(LOCK).addActionListener(actionListener);
-    popupMenu.add(UNLOCK).addActionListener(actionListener);
-  }
-
-
-  private static class PopupMenuActionListener
-      implements ActionListener
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        String action = e.getActionCommand();
-        AWindow window = ACanvas.getCanvas().getCurrentWindow();
-        if(action.equals(LOCK))
-        {
-          window.setLocked(true);
-        }
-        else if(action.equals(UNLOCK))
-        {
-          window.setLocked(false);
-        }
-        else if(action.equals(TOGGLE_SCALE))
-        {
-          window.toggleScale();
-        }
-        // temporary fix to avoid crashes
-        if(window.getProjection() instanceof AProjection2D)
-        {
-          if(action.equals(RESTORE_DEFAULTS))
-          {
-            window.unzoomFull();
-          }
-          else if(action.equals(HORIZONTAL_FLIP))
-          {
-            AZMRInteraction.performFlip(AZMRInteraction.
-                getMiddleVerticalLine(window),
-                window);
-          }
-          else if(action.equals(VERTICAL_FLIP))
-          {
-            AZMRInteraction.performFlip(AZMRInteraction.
-                getMiddleHorizontalLine(window),
-                window);
-          }
-          else if(action.equals(ROTATE_BY_90_CLOCKWISE))
-          {
-            AZMRInteraction.performPlus90Rotation(window);
-          }
-          else if(action.equals(ROTATE_BY_90_ANTICLOCKWISE))
-          {
-            AZMRInteraction.performMinus90Rotation(window);
-          }
-        }
-      }
-    }
-
-  /**
-   * Construct AWindow using information in XML configuration file.
-   * 
-   * @param node the XML configuration node for this window
-   * @param index identifier for the window
-   * @return the constructed window
-   */
-  static AWindow createFromXMLConfigNode(Node node, int index) {
-	  NamedNodeMap attributes = node.getAttributes();
-	  String name = attributes.getNamedItem("name").getNodeValue();
-	  String defaultProjectionName = attributes.getNamedItem("projection").
-	    	      getNodeValue();
-	  String defaultGroup = attributes.getNamedItem("group").getNodeValue();
-	  return new AWindow(name,defaultProjectionName,defaultGroup,index);
-  }
-  
-  /**
-   * Construct AWindow with given name, default projection and group name.
-   * Only non-private in order to allow test code to create an AWindow instance.
-   * 
-   * @param name title of window
-   * @param defaultProjection name of default projection
-   * @param defaultGroup name of group
-   * @param index identifier for window
-   */
-  AWindow(String name, String defaultProjection, String defaultGroup, int index)
-  {
-    super(new BorderLayout());
-    setName(name);
-    this.defaultProjectionName = defaultProjection;
-    this.defaultGroup = defaultGroup;
-    setOpaque(false);
-    if (!globals.getUseOpenGL()) {
-      m_view = new AWindowSwingView(this);
-    } else {
-      m_view = new AWindowGLView(this);
-    }
-    this.index = index;
-    scaleBorder = new AScaleBorder(this);
-    scaleBorder.setLabelFont(new Font("Dialog", Font.PLAIN, 12));
-    m_view.setBorder(scaleBorder);
-    add(m_view, BorderLayout.CENTER);
-    finalized = false;
-
-    if (!AGlobals.isAtlantisHeadless()) {
-      dragSource = new DragSource();
-      dragSource.createDefaultDragGestureRecognizer(this,
-          DnDConstants.ACTION_MOVE, this);
-
-      this.setDropTarget(new DropTarget(this, this));
-    }
-  }
-
-  /**
-   * Perform the steps that have to follow the ACanvas initialization.
-   * Despite its name, this method is called from ACanvas.setCurrentLayout()
-   * so may be called multiple times on the same window.
-   */
-  void finalizeConstruction()
-  {
-	setInteractionManager(new AInteractionsManager(this));
-	corners = new Hashtable<String, Double[]>();
-    String[] pName = AProjectionsManager.getKnownProjectionNames();
-    Point2D.Double[] pCorners;
-    ALayout l = ACanvas.getCanvas().getCurrentLayout();
-    Dimension size = l.getWindowConstraints(getName()).getSize();
-    for(int i = 0; i < pName.length; i++)
-    {
-      AProjection proj = AProjectionsManager.getProjection(pName[i]);
-      if(proj instanceof AProjection2D)
-      {
-        pCorners = ((AProjection2D) proj).calculateNoZoomCorners(size);
-        corners.put(pName[i], pCorners);
-      }
-    }
-    AProjection defaultProjection = AProjectionsManager.getProjection(
-        defaultProjectionName);
-    setGroup(defaultGroup);
-    setProjection(defaultProjection);
-    
-   	if (!AGlobals.isAtlantisHeadless()) {
-   		interactionsManager.setContext(getInteractionToolBar().getSelectedGroup());
-    }
-
-    finalized = true;
-  }
-
-
-  void restoreDefaults()
-  {
-    if(finalized)
-    {
-      corners = new Hashtable<String, Double[]>();
-      String[] pName = AProjectionsManager.getKnownProjectionNames();
-      Point2D.Double[] pCorners;
-      ALayout l = ACanvas.getCanvas().getCurrentLayout();
-      Rectangle r = l.getWindowConstraints(getName());
-      Dimension size = new Dimension(1, 1);
-      if(r != null)
-        size = r.getSize();
-      for(int i = 0; i < pName.length; i++)
-      {
-        AProjection proj = AProjectionsManager.getProjection(pName[i]);
-        if(proj instanceof AProjection2D)
-        {
-          if(pName[i].equals(defaultProjectionName) && defaultCorners != null)
-            pCorners = getDefaultCorners();
-          else
-            pCorners = ((AProjection2D) proj).calculateNoZoomCorners(size);
-          corners.put(pName[i], pCorners);
-        }
-      }
-      AProjection defaultProjection = AProjectionsManager.getProjection(
-          defaultProjectionName);
-      setGroup(defaultGroup);
-      projection = null;
-      setProjection(defaultProjection);
-      getInteractionManager().forgetContext();
-      AInteractionToolBar itb = getInteractionToolBar();
-      if (itb != null) {
-        itb.setDefaultGroup();
-        interactionsManager.setContext(itb.getSelectedGroup());
-      }
-      setScaleStatus(true);
-    }
-  }
-
-
-  public boolean isCurrent()
-  {
-    return ACanvas.getCanvas().getCurrentWindowName().equals(getName());
-  }
-
-
-  public static JPopupMenu getPopupMenu()
-  {
-    return popupMenu;
-  }
-
-
-  public int getIndex()
-  {
-    return index;
-  }
-
-
-  public String getGroupName()
-  {
-    return group;
-  }
-
-
-  public void setGroup(String group)
-  {
-    this.group = group;
-    this.fireGroupChange();
-  }
-
-
-  public synchronized AProjection getProjection()
-  {
-    return projection;
-  }
-
-
-  public AInteractionToolBar getInteractionToolBar()
-  {
-    return AInteractionToolBar.getInteractionToolBar(getName(),
-        projection.getName());
-  }
-
-
-  public synchronized void setProjection(AProjection newProjection)
-  {
-    if((projection == null) || (!newProjection.equals(projection))
-        || (newProjection instanceof AProjectionTrackResidual)
-        || (newProjection instanceof AProjectionNPhysics))
-    {
-      if(projection != null && projection instanceof AProjection2D)
-        corners.put(projection.getName(), userCorners);
-      this.projection = newProjection;
-      if(projection instanceof AProjection2D)
-        userCorners = (Point2D.Double[]) corners.get(projection.getName());
-      //check to see if the scales need hiding or not    
-      this.scaleBorder.hideScale();
-      this.repaintFromScratch();
-      this.fireProjectionChange();
-    }
-  }
-
-
-  private Point2D.Double[] clonedCopy(Point2D.Double[] corners)
-  {
-    if(corners == null)return null;
-    Point2D.Double[] newCorners = new Point2D.Double[corners.length];
-    for(int i = 0; i < corners.length; i++)
-      newCorners[i] = new Point2D.Double(corners[i].x, corners[i].y);
-    return newCorners;
-  }
-
-
-  public synchronized void setUserCorners(Point2D.Double[] corners)
-  {
-    if(projection != null)
-    {
-      Point2D.Double[] validCorners = null;
-      try
-      {
-        validCorners = ((AProjection2D) projection).validateCorners(
-            clonedCopy(corners));
-      }
-      catch(ClassCastException e)
-      {
-        logger.error("Not a 2D projection...");
-        validCorners = corners;
-      }
-      if(validCorners != null)
-      {
-        this.userCorners = validCorners;
-        if(ACanvas.getCanvas().customisedCorner)
-        {
-          this.defaultCorners = validCorners;
-        }
-        repaintFromScratch();
-      }
-    }
-  }
-
-
-  public boolean getUnzoomPossible()
-  {
-    if(zoomSummed.size()>0 && ((Integer) zoomSummed.peek()).intValue()==cornersHistory.size())
-      return false;
-    else if(zoomLayers.size()>0 && ((Integer) zoomLayers.peek()).intValue()==cornersHistory.size())
-      return false;
-    else if(zoomCalo.size()>0 && ((Integer) zoomCalo.peek()).intValue()==cornersHistory.size())
-      return false;
-    else if(zoomCaloLAr.size()>0 && ((Integer) zoomCaloLAr.peek()).intValue()==cornersHistory.size())
-      return false;
-    else
-      return projection == projectionHistory && cornersHistory.size() > 0;
-  }
-
-  public boolean getUnzoomFullPossible()
-  {
-    return projection == projectionHistory && cornersHistory.size() > 0;
-  }
-
-
-  public boolean getUnzoomAllPossible(String typeOfZoom)
-  {
-    if(cornersHistory.size()<=0)
-      return false;
-    else if(ARectangleVPSelection.ZOOM_LAR.equals(typeOfZoom) ||
-        ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom))
-    {
-      int indexOfZoomCalo=-1;
-      if(zoomCalo.size()>0)
-        indexOfZoomCalo=((Integer) zoomCalo.peek()).intValue();
-      int indexOfZoomCaloLAr=-1;
-      if(zoomCaloLAr.size()>0)
-        indexOfZoomCaloLAr=((Integer) zoomCaloLAr.peek()).intValue();
-      //make sure summed/layers is last in list
-      if(ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom) &&
-          indexOfZoomCalo > indexOfZoomCaloLAr)
-      {
-        return true;
-      }
-      else if(typeOfZoom.equals(ARectangleVPSelection.ZOOM_LAR) &&
-          indexOfZoomCaloLAr > indexOfZoomCalo)
-      {
-        return true;
-      }
-      else
-        return false;
-    }
-    else
-    {
-      int indexOfZoomSummed=-1;
-      if(zoomSummed.size()>0)
-        indexOfZoomSummed=((Integer) zoomSummed.peek()).intValue();
-      int indexOfZoomLayers=-1;
-      if(zoomLayers.size()>0)
-        indexOfZoomLayers=((Integer) zoomLayers.peek()).intValue();
-      //make sure summed/layers is last in list
-      if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_SUMMED) && indexOfZoomSummed>indexOfZoomLayers)
-      {
-        return true;
-      }
-      else if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_LAYERS) && indexOfZoomLayers>indexOfZoomSummed)
-      {
-        return true;
-      }
-      else
-        return false;
-    }
-  }
-
-
-  public void unzoom(String typeOfZoom)
-  {
-    //do unzoom of which item is selected
-    int numberOfWindows=0,indexOfZoom;
-    if(typeOfZoom.equals(ARectangleVPSelection.ZOOM_LAR) ||
-        typeOfZoom.equals(ARectangleYXSelection.ZOOM_SUMMED))
-    {
-      numberOfWindows=4;
-    }
-    else if(ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom) ||
-        typeOfZoom.equals(ARectangleYXSelection.ZOOM_LAYERS))
-    {
-      numberOfWindows=8;
-    }
-    int numberOfUnlayouts=0;
-    for (int i = 0; i < numberOfWindows; i++)
-    {
-      String wName = Integer.toString(i+1);
-      AWindow w = ACanvas.getCanvas().getWindow(wName);
-      //find if can do unzoom and what index it is
-      indexOfZoom=findUnzoomIndex(typeOfZoom, w);
-      if(indexOfZoom>0)
-      {
-        //do all unzooms upto and including index of this zoom to unzoom
-        while(w.cornersHistory.size()>=indexOfZoom)
-          w.unzoom();
-        //also need to reset parameters
-        setParameters(typeOfZoom, w, wName);
-        //find out how many unlayouts to do
-        int count=0;
-        while(w.layoutHistory.size()>0 && ((Integer)w.layoutHistory.peek()).intValue()>=indexOfZoom)
-        {
-          w.layoutHistory.pop();
-          count++;
-        }
-        if(count>numberOfUnlayouts)
-          numberOfUnlayouts=count;
-      }
-    }
-    //do as many unlayouts as needed
-    for(int i=0; i<numberOfUnlayouts; i++)
-      ACanvas.getCanvas().unlayout();
-  }
-
-
-  private int findUnzoomIndex(String typeOfZoom, AWindow w)
-  {
-    int indexOfZoom=0;//if returns 0 then no unzoom is to be performed
-    if(ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom))
-    {
-      if(w.zoomCalo.size()==0)
-        indexOfZoom=0;
-      else
-      {
-        indexOfZoom=((Integer) w.zoomCalo.pop()).intValue();
-        //check if other zooms done on this window
-        while(w.zoomCaloLAr.size()>0 && ((Integer) w.zoomCaloLAr.peek()).intValue()>indexOfZoom)
-        {
-          w.zoomCaloLAr.pop();
-          w.modeHistory.pop();
-        }
-      }
-    }
-    else if(typeOfZoom.equals(ARectangleVPSelection.ZOOM_LAR))
-    {
-      if(w.zoomCaloLAr.size()==0)
-        indexOfZoom=0;
-      else
-      {
-        indexOfZoom=((Integer) w.zoomCaloLAr.pop()).intValue();
-        while(w.zoomCalo.size()>0 && ((Integer) w.zoomCalo.peek()).intValue()>indexOfZoom)
-        {
-          w.zoomCalo.pop();
-          w.modeHistory.pop();
-        }
-      }
-    }
-    if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_SUMMED))
-    {
-      if(w.zoomSummed.size()==0)
-        indexOfZoom=0;
-      else
-      {
-        indexOfZoom=((Integer) w.zoomSummed.pop()).intValue();
-        //check if other zooms done on this window
-        while(w.zoomLayers.size()>0 && ((Integer) w.zoomLayers.peek()).intValue()>indexOfZoom)
-        {
-          w.zoomLayers.pop();
-          w.modeHistory.pop();
-          w.cutHistoryHEC.pop();
-          w.cutHistoryLAr.pop();
-        }
-      }
-    }
-    else if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_LAYERS))
-    {
-      if(w.zoomLayers.size()==0)
-        indexOfZoom=0;
-      else
-      {
-        indexOfZoom=((Integer) w.zoomLayers.pop()).intValue();
-        while(w.zoomSummed.size()>0 && ((Integer) w.zoomSummed.peek()).intValue()>indexOfZoom)
-        {
-          w.zoomSummed.pop();
-          w.modeHistory.pop();
-          w.cutHistoryHEC.pop();
-          w.cutHistoryLAr.pop();
-        }
-      }
-    }
-    return indexOfZoom;
-  }
-
-
-  private void setParameters(String typeOfZoom, AWindow w, String wName)
-  {
-    APar parameterStore = APar.instance();
-    parameterStore.selectWindowParameters(wName);
-    if(ARectangleVPSelection.ZOOM_LAR.equals(typeOfZoom) ||
-        ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom))
-    {
-      parameterStore.get("VP", "Mode").setI( w.modeHistory.pop() );
-    }
-    else
-    {
-      parameterStore.get("YX", "Mode").setI( w.modeHistory.pop() );
-      parameterStore.get("CutsCalo","HEC").setI( w.cutHistoryHEC.pop() );
-      parameterStore.get("CutsCalo","LAr").setI( w.cutHistoryLAr.pop() );
-    }
-    parameterStore.restoreWindowParameters();
-  }
-
-
-  public void saveParameters(String typeOfZoom)
-  {
-    APar parameterStore = APar.instance();
-    //save window parameters of current windows
-    if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_SUMMED) || typeOfZoom.equals(ARectangleYXSelection.ZOOM_LAYERS))
-    {
-      parameterStore.selectWindowParameters(this.getName());
-      this.modeHistory.push(new Integer(parameterStore.get("YX", "Mode").getI()));
-      this.cutHistoryHEC.push(new Integer(parameterStore.get("CutsCalo","HEC").getI()));
-      this.cutHistoryLAr.push(new Integer(parameterStore.get("CutsCalo","LAr").getI()));
-      parameterStore.restoreWindowParameters();
-    }
-    else if(ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom) ||
-        ARectangleVPSelection.ZOOM_LAR.equals(typeOfZoom))
-    {
-      parameterStore.selectWindowParameters(this.getName());
-      this.modeHistory.push(new Integer(parameterStore.get("VP", "Mode").getI()));
-      parameterStore.restoreWindowParameters();
-    }
-  }
-
-
-  public void unzoomFull()
-  {
-    //perform unzoom to initial state
-    setUserCorners(((AProjection2D) getProjection()).calculateNoZoomCorners(getSize()));
-    //clear all variables for this window
-    cornersHistory.clear();
-    zoomSummed.clear();
-    zoomLayers.clear();
-    zoomCaloLAr.clear();
-    zoomCalo.clear();
-    layoutHistory.clear();
-    modeHistory.clear();
-    cutHistoryHEC.clear();
-    cutHistoryLAr.clear();
-  }
-
-
-  public void unzoom()
-  {
-    if(projection == projectionHistory && cornersHistory.size() > 0)
-    {
-      setUserCorners((Point2D.Double[]) (cornersHistory.pop()));
-    }
-  }
-
-
-  public void saveLayout()
-  {
-    if(userCorners != null)
-    {
-      ACanvas.getCanvas().saveLayout();
-    }
-  }
-
-
-  public void saveCorners()
-  {
-    if(projection != projectionHistory)
-    {
-      cornersHistory.clear();
-      String wName = this.getName();
-      int temp;
-      if(wName.equals("1") || wName.equals("2") || wName.equals("3") || wName.equals("4") ||
-          wName.equals("5") || wName.equals("6") || wName.equals("7") || wName.equals("8"))
-      {
-        zoomSummed.clear();
-        zoomLayers.clear();
-        zoomCaloLAr.clear();
-        zoomCalo.clear();
-        layoutHistory.clear();
-        //will have already done saveParameters so only
-        //want the last saved parameters of mode and cuts
-        if(modeHistory.size()>0)
-        {
-          temp = ((Integer) modeHistory.pop()).intValue();
-          modeHistory.clear();
-          modeHistory.push(new Integer(temp));
-        }
-
-        if(cutHistoryHEC.size()>0)
-        {
-          temp = ((Integer) cutHistoryHEC.pop()).intValue();
-          cutHistoryHEC.clear();
-          cutHistoryHEC.push(new Integer(temp));
-        }
-
-        if(cutHistoryLAr.size()>0)
-        {
-          temp = ((Integer) cutHistoryLAr.pop()).intValue();
-          cutHistoryLAr.clear();
-          cutHistoryLAr.push(new Integer(temp));
-        }
-      }
-    }
-    projectionHistory = projection;
-    if(userCorners != null)
-    {
-      cornersHistory.push(clonedCopy(userCorners));
-    }
-  }
-
-
-  public void saveCorners(String typeOfZoom)
-  {
-    saveCorners();
-    //save zoom just done
-    if(userCorners != null)
-    {
-      if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_SUMMED))
-      {
-        zoomSummed.push(new Integer(cornersHistory.size()));
-      }
-      else if(typeOfZoom.equals(ARectangleYXSelection.ZOOM_LAYERS))
-      {
-        zoomLayers.push(new Integer(cornersHistory.size()));
-      }
-      else if(ARectangleVPSelection.ZOOM_CALORIMETERS.equals(typeOfZoom))
-      {
-        zoomCalo.push(new Integer(cornersHistory.size()));
-      }
-      else if(ARectangleVPSelection.ZOOM_LAR.equals(typeOfZoom))
-      {
-        zoomCaloLAr.push(new Integer(cornersHistory.size()));
-      }
-      layoutHistory.push(new Integer(cornersHistory.size()));
-    }
-  }
-
-
-  public void setUserCornersNoRepaint(Point2D.Double[] corners)
-  {
-    Point2D.Double[] validCorners = ((AProjection2D) projection).
-      validateCorners(clonedCopy(corners));
-    if(validCorners != null)
-    {
-      this.userCorners = validCorners;
-    }
-  }
-
-
-  public void setUserCorners(double x0, double x1, double y0, double y1)
-  {
-    Point2D.Double[] corners = new Point2D.Double[3];
-    corners[0] = new Point2D.Double(x0, y1);
-    corners[1] = new Point2D.Double(x1, y1);
-    corners[2] = new Point2D.Double(x1, y0);
-    if(projection instanceof AProjection2D) corners = ((AProjection2D)
-        projection).validateCorners(corners);
-    if(corners != null)
-      this.userCorners = corners;
-  }
-
-
-  public Point2D.Double[] getDefaultCorners()
-  {
-    return clonedCopy(defaultCorners);
-  }
-
-
-  public Point2D.Double[] getUserCorners()
-  {
-    return clonedCopy(userCorners);
-  }
-
-
-  public void setInteractionManager(AInteractionsManager interactionsManager)
-  {
-    this.interactionsManager = interactionsManager;
-    //Make the interactions Manager aware of canvas changes
-    ACanvas.getCanvas().addParentWindowFocusListener(interactionsManager);
-  }
-
-
-  public void setScaleStatus(boolean statusWanted)
-  {
-    if(getScaleStatus() != statusWanted) toggleScale();
-  }
-
-
-  public boolean getScaleStatus()
-  {
-    return scaleBorder.getScaleStatus();
-  }
-
-
-  private void toggleScale()
-  {	
-    scaleBorder.toggleScale();
-    repaintFromScratch();
-  }
-
-
-  public AInteractionsManager getInteractionManager()
-  {
-    return interactionsManager;
-  }
-
-
-  public void paintComponent(Graphics g) {
-    // Don't draw anything for ourself
-  }
-
-  void paintWindow(Graphics g, boolean doubleBuffer)
-  {
-    if(!ACanvas.getCanvas().isReallyOnScreen(this))
-      return;
-    //Why is this checked in paintComponent, and not already in 
-    //setProjection() ? FIXIT / CLEANUP S.B
-    if(projection instanceof AProjectionTrackResidual)
-    {
-      if (((AProjectionTrackResidual) projection).getResidual() != null)
-        userCorners = ((AProjectionTrackResidual)projection).calculateNoZoomCorners();
-      else
-      {
-        AOutput.append("\nTrackResidual Projection is not available, using YX instead in window "
-            + this.getName() + ".\n", ALogInterface.WARNING);
-        projection = AProjectionsManager.getProjection("YX");
-        userCorners = (Point2D.Double[]) corners.get(projection.getName());
-      }
-    }
-
-    //Make sure the offscreen buffer is there if we need one
-    Graphics paint = g;
-    if (doubleBuffer) {
-      createOffScreenBuffer();
-      paint = backingGraphics;
-    }
-
-    // Means either we're using g or backingGraphics was something valid
-    if (paint != null)
-    {
-      if(!bufferValid)
-      {
-        setLocked(false);
-        paintWindowFromScratch(paint);
-        LinkedList<AInteraction> interactions = interactionsManager.getInteractions();
-        for (int i = 0; i < interactions.size(); i++) {
-          if (interactions.get(i) instanceof ASelection) {
-            ((ASelection) interactions.get(i)).invalidate();
-          }
-        }
-        bufferValid = true;
-
-      }
-
-      if (!isLocked() && !borderValid) {
-        //m_view.getBorder().paintBorder(paint);
-        borderValid = true;
-      }
-
-    }
-
-    // If we painted into a context which wasn't the target graphics context
-    // then we need to paint our buffer to the screen
-    if (g != paint) {
-      imageComponent(g);
-    }
-
-    LinkedList<AInteraction> interactions = interactionsManager.getInteractions();
-    for(int i = 0; i < interactions.size(); i++)
-      ((AInteraction) interactions.get(i)).paint((Graphics2D) g);
-  }
-
-  // I suppose this function is intended to be called before every printing,
-  // but it is actually only called for EPS printing!!! FIX / CLEANUP S.B.
-  public void printComponent(Graphics g)
-  {
-    setLocked(false);
-    if(!ACanvas.getCanvas().isReallyOnScreen(this))
-      return;
-    ((AScaleBorder) getView().getBorder()).forceDraw();
-    //Double border painting needed here for EPS - probably something wrong in
-    //projection drawing -> graphics context left unclean? FIXIT. S.B.
-    ((AScaleBorder) getView().getBorder()).printBorder(this,g,this.getX(),this.getY(),this.getWidth(),this.getHeight());
-    paintWindowFromScratch(g);
-    ((AScaleBorder) getView().getBorder()).printBorder(this,g,this.getX(),this.getY(),this.getWidth(),this.getHeight());
-    borderValid = true;
-    LinkedList<AInteraction> interactions = interactionsManager.getInteractions();
-    for(int i = 0; i < interactions.size(); i++)
-    {
-      AInteraction inter = (AInteraction) interactions.get(i);
-      if(inter.isPrintable())
-        inter.paint((Graphics2D) g);
-    }
-  }
-
-
-    public void printBorder(Graphics g){}
-
-
-    // must call paint border myself since the border is backed too
-    public void paintBorder(Graphics g)
-    {}
-
-
-    public void repaintFromScratch()
-    {
-        if(locked)return;
-        bufferValid = false;
-        borderValid = false;
-        
-        // Check whether to draw scales on repaint
-        scaleBorder.hideScale();
-        
-        // For some reason need to repaint the view too when using heavyweight
-        // component inside... - Adam
-        repaint();
-        m_view.repaint();
-        
-    }
-
-
-    // Attention: for efficiency this routine overwrites and returns its input
-    public ACoord calculateUser(ACoord user)
-    {
-        double[] h;
-        double[] v;
-        double hTemp;
-        double vTemp;
-        if(validTransform())
-        {
-            for(int j = 0; j < user.hv[0].length; ++j)
-            {
-                h = user.hv[0][j];
-                v = user.hv[1][j];
-                for(int i = 0; i < h.length; ++i)
-                {
-                    hTemp = h[i];
-                    vTemp = v[i];
-                    h[i] = m00 * hTemp + m01 * vTemp + m02;
-                    v[i] = m10 * hTemp + m11 * vTemp + m12;
-                }
-            }
-        }
-        else
-        {
-            for(int j = 0; j < user.hv[0].length; ++j)
-            {
-                h = user.hv[0][j];
-                v = user.hv[1][j];
-                for(int i = 0; i < h.length; ++i)
-                {
-                    h[i] = 0.;
-                    v[i] = 0.;
-                }
-            }
-        }
-        return user;
-    }
-
-
-    public Point2D.Double calculateUser(double x, double y)
-    {
-        double[][][] hv = new double[2][1][1];
-        hv[0][0][0] = x;
-        hv[1][0][0] = y;
-        ACoord p = calculateUser(new ACoord(hv));
-        return new Point2D.Double(p.hv[0][0][0], p.hv[1][0][0]);
-    }
-
-
-    public Point2D.Double calculateUser(Point2D.Double p)
-    {
-        return calculateUser(p.x, p.y);
-    }
-
-
-    public Point2D.Double calculateUser(Point p)
-    {
-        return calculateUser(p.x, p.y);
-    }
-
-
-    // Attention! For efficiency this routine overwrites and returns its input
-    public ACoord calculateDisplay(ACoord user)
-    {
-        if(user == null)
-            return null;
-        double[] h;
-        double[] v;
-        double hTemp;
-        double vTemp;
-        if(validTransform())
-        {
-            for(int j = 0; j < user.hv[0].length; ++j)
-            {
-                h = user.hv[0][j];
-                v = user.hv[1][j];
-                for(int i = 0; i < h.length; ++i)
-                {
-                    hTemp = h[i];
-                    vTemp = v[i];
-                    h[i] = n00 * hTemp + n01 * vTemp + n02;
-                    v[i] = n10 * hTemp + n11 * vTemp + n12;
-                }
-            }
-        }
-        else
-        {
-            for(int j = 0; j < user.hv[0].length; ++j)
-            {
-                h = user.hv[0][j];
-                v = user.hv[1][j];
-                for(int i = 0; i < h.length; ++i)
-                {
-                    h[i] = 0.;
-                    v[i] = 0.;
-                }
-            }
-        }
-        return user;
-    }
-
-
-    public Point2D.Double calculateDisplay(double x, double y)
-    {
-        double[][][] hv = new double[2][1][1];
-        hv[0][0][0] = x;
-        hv[1][0][0] = y;
-        ACoord p = calculateDisplay(new ACoord(hv));
-        return new Point2D.Double(p.hv[0][0][0], p.hv[1][0][0]);
-    }
-
-
-    public Point2D.Double calculateDisplay(Point2D.Double p)
-    {
-        return calculateDisplay(p.x, p.y);
-    }
-
-    /** 
-     * Called when the window is selected
-     */
-    void select()
-    {
-        scaleBorder.setSelected();
-        //redraw border to indicate this window is selected
-        borderValid = false;
-        repaint();
-    }
-
-    /** 
-     * Called when the window is deselected
-     */
-    void deselect()
-    {
-        scaleBorder.setDeselected();
-        //redraw border to indicate this window is deselected
-        borderValid = false;
-        repaint();
-    }
-
-    /** 
-     * Draws the image from the backup buffer on screen
-     */
-    private void imageComponent(Graphics g)
-    {
-        Graphics2D g2d = (Graphics2D) g;
-        if(g2d != null)
-        {
-            Rectangle clipRect = g2d.getClipBounds();
-            // Repaint only what is necessary. Except when running on MacOSX Tiger.
-            // (see http://lists.apple.com/archives/Java-dev/2005/Jun/msg00611.html)
-            if(clipRect != null && !(System.getProperty("os.name").equals("Mac OS X")
-                && System.getProperty("os.version").startsWith("10.4.")))
-            {
-                int x = clipRect.x;
-                int y = clipRect.y;
-                int w = clipRect.width;
-                int h = clipRect.height;
-                BufferedImage subImage = backingImage.getSubimage(x, y, w, h);
-                g2d.drawImage(subImage, x, y, this);
-            }
-            else
-            {
-                g2d.drawImage(backingImage, 0, 0, this);
-            }
-        }
-    }
-
-
-    public Rectangle getCurrDisp()
-    {
-        int width = m_view.getWidth();
-        int height = m_view.getHeight();
-        insets = m_view.getInsets(insets);
-        int x = insets.left;
-        int y = insets.top;
-        int w = width - insets.left - insets.right;
-        int h = height - insets.top - insets.bottom;
-        return new Rectangle(x, y, w, h);
-    }
-
-
-    public void paintWindowFromScratch(Graphics g)
-    {
-        APar parameterStore = APar.instance();
-        ACanvas.getCanvas().setPaintingWindow(this);
-        parameterStore.selectWindowParameters(getName());
-        Rectangle currDisp = getCurrDisp();
-        int x = (int) Math.rint(currDisp.getX());
-        int y = (int) Math.rint(currDisp.getY());
-        int width = (int) Math.rint(currDisp.getWidth());
-        int height = (int) Math.rint(currDisp.getHeight());
-        g.setClip(x, y, width, height);
-        Graphics2D g2 = (Graphics2D)g;
-        if(APreferencesControl.getAliasMenuItem())
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        else
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
-        
-        projection.paint(this, g);
-
-        g.setClip(0, 0, m_view.getWidth(), m_view.getHeight());
-        parameterStore.restoreWindowParameters();
-        ACanvas.getCanvas().setPaintingWindow(null);
-        
-        if(AColorHelpDialog.getInstance() != null && AColorHelpDialog.getInstance().isVisible())
-            AColorHelpDialog.getInstance().update();
-    }
-
-
-    private void createOffScreenBuffer()
-    {
-        int w = m_view.getWidth();
-        int h = m_view.getHeight();
-        Dimension dim = new Dimension(w, h);
-        // Check that the current size is positive.
-        if(w > 0 && h > 0)
-        {
-            if(!backingDimension.equals(dim))
-            {
-                // Usinig ABufferedPixelGraphics is not a good idea in MacOSX Tiger.
-                // So instead we use createGraphics() to create a normal Graphics2D
-                // object to draw on.
-                if(System.getProperty("os.name").equals("Mac OS X")
-                    && System.getProperty("os.version").startsWith("10.4."))
-                {
-                    backingImage = getGraphicsConfiguration().createCompatibleImage(w, h);
-                } else if(GraphicsEnvironment.getLocalGraphicsEnvironment().
-                   getDefaultScreenDevice().getDefaultConfiguration().
-                   getColorModel().getTransferType()
-                   == DataBuffer.TYPE_USHORT)
-                {
-                    backingImage = new BufferedImage(w, h,
-                        BufferedImage.TYPE_USHORT_565_RGB);
-                }
-                else
-                {
-                    if(System.getProperty("os.name").equals("Mac OS X"))
-                        backingImage = new BufferedImage(w, h,
-                            BufferedImage.TYPE_INT_ARGB_PRE);
-                    else
-                        backingImage = new BufferedImage(w, h,
-                            BufferedImage.TYPE_INT_RGB);
-                }
-                backingGraphics = backingImage.createGraphics();
-                backingDimension.setSize(dim);
-                bufferValid = false;
-                borderValid = false;
-            }
-        }
-        else
-        {
-            backingImage = null;
-            backingGraphics = null;
-        }
-    }
-
-
-    public Point2D.Double[] getDisplayCorners()
-    {
-        Point2D.Double[] corners = new Point2D.Double[3];
-        insets = m_view.getInsets(insets);
-        int x = insets.left;
-        int y = insets.top;
-        int w = m_view.getWidth() - insets.left - insets.right;
-        int h = m_view.getHeight() - insets.top - insets.bottom;
-        Point2D.Double upperLeft = new Point2D.Double(x, y);
-        Point2D.Double lowerRight = new Point2D.Double(x + w, y + h);
-        Point2D.Double upperRight = new Point2D.Double(x + w, y);
-        corners[0] = upperLeft;
-        corners[1] = upperRight;
-        corners[2] = lowerRight;
-        return corners;
-    }
-
-
-    private boolean validTransform()
-    {
-        double x1, y1, x2, y2, x3, y3, u1, v1, u2, v2, u3, v3;
-        x1 = userCorners[0].x;
-        y1 = userCorners[0].y;
-        x2 = userCorners[1].x;
-        y2 = userCorners[1].y;
-        x3 = userCorners[2].x;
-        y3 = userCorners[2].y;
-        Point2D.Double[] displayCorners = getDisplayCorners();
-        u1 = displayCorners[0].x;
-        v1 = displayCorners[0].y;
-        u2 = displayCorners[1].x;
-        v2 = displayCorners[1].y;
-        u3 = displayCorners[2].x;
-        v3 = displayCorners[2].y;
-        if(v1 * (u3 - u2) + v2 * (u1 - u3) + v3 * (u2 - u1) == 0.)return false;
-        if((u1 - u2) == 0.)return false;
-        m01 = (u1 * (x2 - x3) + u2 * (x3 - x1) + u3 * (x1 - x2)) /
-              (v1 * (u3 - u2) + v2 * (u1 - u3) + v3 * (u2 - u1));
-        m00 = ((x1 - x2) - m01 * (v1 - v2)) / (u1 - u2);
-        m02 = x1 - m00 * u1 - m01 * v1;
-        m11 = (u1 * (y2 - y3) + u2 * (y3 - y1) + u3 * (y1 - y2)) /
-              (v1 * (u3 - u2) + v2 * (u1 - u3) + v3 * (u2 - u1));
-        m10 = ((y1 - y2) - m11 * (v1 - v2)) / (u1 - u2);
-        m12 = y1 - m10 * u1 - m11 * v1;
-        if((x1 - x2) == 0.)
-        {
-            n01 = (u2 - u1) / (y2 - y1);
-            n11 = (v2 - v1) / (y2 - y1);
-            n00 = ((u3 - u2) - n01 * (y3 - y2)) / (x3 - x1);
-            n10 = ((v3 - v2) - n11 * (y3 - y2)) / (x3 - x1);
-            n02 = u1 - n00 * x1 - n01 * y1;
-            n12 = v1 - n10 * x1 - n11 * y1;
-            return true;
-        }
-        else
-        {
-            if(y1 * (x3 - x2) + y2 * (x1 - x3) + y3 * (x2 - x1) == 0.)return false;
-            n01 = (x1 * (u2 - u3) + x2 * (u3 - u1) + x3 * (u1 - u2)) /
-                  (y1 * (x3 - x2) + y2 * (x1 - x3) + y3 * (x2 - x1));
-            n00 = ((u1 - u2) - n01 * (y1 - y2)) / (x1 - x2);
-            n02 = u1 - n00 * x1 - n01 * y1;
-            n11 = (x1 * (v2 - v3) + x2 * (v3 - v1) + x3 * (v1 - v2)) /
-                  (y1 * (x3 - x2) + y2 * (x1 - x3) + y3 * (x2 - x1));
-            n10 = ((v1 - v2) - n11 * (y1 - y2)) / (x1 - x2);
-            n12 = v1 - n10 * x1 - n11 * y1;
-            return true;
-        }
-    }
-
-
-    public JToolTip createToolTip()
-    {
-        JToolTip tip = new JToolTip();
-        tip.setFont(new Font(null, Font.PLAIN, 20));
-        return tip;
-    }
-
-
-    // implementation of DropTargetListener
-
-    // Called when a drag operation has encountered the DropTarget.
-    public void dragEnter(DropTargetDragEvent dtde)
-    {
-        dtde.acceptDrag(DnDConstants.ACTION_MOVE);
-    }
-
-
-    // The drag operation has departed the DropTarget without dropping.
-    public void dragExit(DropTargetEvent dte)
-    {}
-
-
-    // Called when a drag operation is ongoing on the DropTarget.
-    public void dragOver(DropTargetDragEvent dtde)
-    {}
-
-
-    // The drag operation has terminated with a drop on this DropTarget.
-    public void drop(DropTargetDropEvent dtde)
-    {
-        try
-        {
-            Transferable transferable = dtde.getTransferable();
-            DataFlavor javaObjectDataFlavor = new DataFlavor(DataFlavor.
-                javaJVMLocalObjectMimeType);
-            if(transferable.isDataFlavorSupported(javaObjectDataFlavor))
-            {
-                dtde.acceptDrop(DnDConstants.ACTION_MOVE);
-                Object object = transferable.getTransferData(
-                    javaObjectDataFlavor);
-                if(object instanceof ACallBack)
-                    ((ACallBack) object).callBack(this);
-                else
-                    ACanvas.getCanvas().copyWindowSettings(((ADnDLabel) object).getText(),
-                                             getName());
-                dtde.getDropTargetContext().dropComplete(true);
-            }
-            else
-                AOutput.append("Cannot accept drop\n", ALogInterface.BAD_COMMAND);
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-            dtde.rejectDrop();
-        }
-    }
-
-
-    // Called if the user has modified the current drop gesture.
-    public void dropActionChanged(DropTargetDragEvent dtde)
-    {}
-
-
-    private Vector<ChangeListener> projectionChangeListeners = new Vector<ChangeListener>();
-    public void addProjectionChangeListener(ChangeListener listener)
-    {
-        projectionChangeListeners.addElement(listener);
-        listener.stateChanged(new ChangeEvent(this));
-    }
-
-
-    private void fireProjectionChange()
-    {
-        ChangeEvent changeEvent = new ChangeEvent(this);
-        for(int i = 0; i < projectionChangeListeners.size(); i++)
-        {
-            ChangeListener changeListener = (ChangeListener)
-                                            projectionChangeListeners.elementAt(
-                i);
-            changeListener.stateChanged(changeEvent);
-        }
-    }
-
-
-    private Vector<ChangeListener> groupChangeListeners = new Vector<ChangeListener>();
-    public void addGroupChangeListener(ChangeListener listener)
-    {
-        groupChangeListeners.addElement(listener);
-        listener.stateChanged(new ChangeEvent(this));
-    }
-
-
-    private void fireGroupChange()
-    {
-        ChangeEvent changeEvent = new ChangeEvent(this);
-        for(int i = 0; i < groupChangeListeners.size(); i++)
-        {
-            ChangeListener changeListener = (ChangeListener)
-                                            groupChangeListeners.elementAt(i);
-            changeListener.stateChanged(changeEvent);
-        }
-    }
-
-
-    // implementation of DragSourceListener
-
-    // This method is invoked to signify that the Drag and Drop operation is complete.
-    public void dragDropEnd(DragSourceDropEvent dsde)
-    {}
-
-
-    // Called as the hotspot enters a platform dependent drop site.
-    public void dragEnter(DragSourceDragEvent dsde)
-    {
-        dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_INVALID);
-    }
-
-
-    // Called as the hotspot exits a platform dependent drop site.
-    public void dragExit(DragSourceEvent dse)
-    {
-        dse.getDragSourceContext().setCursor(ADnDLabel.DROP_INVALID);
-    }
-
-
-    // Called as the hotspot moves over a platform dependent drop site.
-    public void dragOver(DragSourceDragEvent dsde)
-    {
-        dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_VALID);
-    }
-
-
-    // Called when the user has modified the drop gesture.
-    public void dropActionChanged(DragSourceDragEvent dsde)
-    {}
-
-
-    // implementation of DragGestureListener
-
-    public void dragGestureRecognized(DragGestureEvent dge)
-    {
-        if(!canCopyScales)return;
-        Point p = dge.getDragOrigin();
-        Insets i = m_view.getInsets();
-        int w = m_view.getWidth();
-        int h = m_view.getHeight();
-        Rectangle vScale = new Rectangle(0, 0, i.left, h - i.bottom);
-        Rectangle hScale = new Rectangle(i.left, h - i.bottom, w - i.left,
-                                         i.bottom);
-        if(vScale.contains(p))
-            dragAction = dragActionType.COPY_VERTICAL_SCALE;
-        else if(hScale.contains(p))
-            dragAction = dragActionType.COPY_HORIZONTAL_SCALE;
-        else
-            return;
-        dragSource.startDrag(dge, ADnDLabel.DROP_INVALID,
-                             new AObjectTransferable(this), this);
-    }
-
-
-    public void setScaleCopyStatus(boolean canCopyScales)
-    {
-        this.canCopyScales = canCopyScales;
-    }
-
-
-    public void callBack(Object to)
-    {
-        AWindow targetWindow;
-        if(to instanceof ADnDLabel)
-            targetWindow = ACanvas.getCanvas().getWindow(((ADnDLabel) to).
-                getText());
-        else if(to instanceof AWindow)
-            targetWindow = (AWindow) to;
-        else
-            return;
-        if(dragAction == dragActionType.COPY_VERTICAL_SCALE)
-        {
-            String labelSource = ((AScaleBorder) getBorder()).
-                                 getVerticalAxisLabel();
-            String labelTarget = ((AScaleBorder) (targetWindow.getBorder())).
-                                 getVerticalAxisLabel();
-            if(labelSource.equals(labelTarget) && labelSource.equals(AMath.PHI))
-            {
-                Point2D.Double[] sourceCorners = getUserCorners();
-                Point2D.Double[] targetCorners = targetWindow.getUserCorners();
-                for(int i = 0; i < sourceCorners.length; ++i)
-                    targetCorners[i].setLocation(targetCorners[i].getX(),
-                                                 sourceCorners[i].getY());
-                targetWindow.setUserCorners(targetCorners);
-                AOutput.append("Copy " + AMath.PHI + " Scale from " + getName() +
-                               " to " + targetWindow.getName() + "\n",
-                               ALogInterface.NORMAL);
-            }
-        }
-        else if(dragAction == dragActionType.COPY_HORIZONTAL_SCALE)
-        {
-            String labelSource = ((AScaleBorder) getBorder()).
-                                 getHorizontalAxisLabel();
-            String labelTarget = ((AScaleBorder) targetWindow.getBorder()).
-                                 getHorizontalAxisLabel();
-            if(labelSource.equals(labelTarget) && labelSource.equals("Z"))
-            {
-                Point2D.Double[] sourceCorners = getUserCorners();
-                Point2D.Double[] targetCorners = targetWindow.getUserCorners();
-                for(int i = 0; i < sourceCorners.length; ++i)
-                    targetCorners[i].setLocation(sourceCorners[i].getX(),
-                                                 targetCorners[i].getY());
-                targetWindow.setUserCorners(targetCorners);
-                AOutput.append("Copy Z Scale from " + getName() + " to " +
-                               targetWindow.getName() + "\n",
-                               ALogInterface.NORMAL);
-            }
-        }
-    }
-
-
-    private void setLocked(boolean locked)
-    {
-        if(locked == this.locked)return;
-        boolean wasLocked = this.locked;
-        this.locked = locked;
-        ACanvas.getCanvas().fireLockChange();
-        if(wasLocked && !locked)
-            this.repaintFromScratch();
-        ACanvas.getCanvas().fireLockChange();
-    }
-
-
-    public boolean isLocked()
-    {
-        return locked;
-    }
-    
-    public JComponent getView() {
-        return m_view;
-    }
-    
-    public void invalidateQuietly() {
-        // When you get told to paint in OpenGL you better paint otherwise
-        // you're going to get your empty backbuffer painted to screen a lot
-        // of the time ... could fix this by managing our buffer swaps by hand
-        // see AWindowGLView.display() for more... - Adam
-        bufferValid = false;
-        borderValid = false;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AWindowGLView.java b/graphics/AtlantisJava/src/atlantis/canvas/AWindowGLView.java
deleted file mode 100644
index bd94b9013755..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AWindowGLView.java
+++ /dev/null
@@ -1,337 +0,0 @@
-package atlantis.canvas;
-
-import atlantis.interactions.AInteractionsManager;
-import atlantis.utils.ALogger;
-import java.awt.BorderLayout;
-import java.awt.BufferCapabilities;
-import java.awt.Canvas;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.GraphicsEnvironment;
-import java.awt.event.MouseListener;
-import java.lang.ref.WeakReference;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import javax.media.opengl.AWTGraphicsDevice;
-import javax.media.opengl.DefaultGLCapabilitiesChooser;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLCanvas;
-import javax.media.opengl.GLCapabilities;
-import javax.media.opengl.GLCapabilitiesChooser;
-import javax.media.opengl.GLContext;
-import javax.media.opengl.GLDrawableFactory;
-import javax.media.opengl.GLEventListener;
-import javax.media.opengl.GLJPanel;
-import javax.media.opengl.glu.GLU;
-import javax.swing.JPanel;
-import javax.swing.border.Border;
-
-/**
- * This class provides an OpenGL context. When the parent AWindow repaints
- * this is propagated down to this view component, which then calls back to
- * the parent AWindow requesting everything be copied in.
- * 
- * @author Adam Davison
- */
-public class AWindowGLView extends JPanel implements GLEventListener {
-    
-    private static ALogger logger = ALogger.getLogger(AWindowGLView.class);
-    
-    private GLCanvas m_panel;
-    //private JPanel m_children;
-    private long m_start = 0;
-    private int m_count = 0;
-    private AWindow m_parent;
-    private Graphics m_g = null;
-
-    private static GLContext m_ocontext;
-    
-    // Keep track of all initialized OpenGL contexts without forcing them
-    // to stay in memory when we aren't using them any more...
-    // This is a debugging thing
-    private static ArrayList<WeakReference> m_all = new ArrayList<WeakReference>();
-    
-    private static int m_maxFSAA = -1;
-    private static int m_FSAA = 0;
-    
-    public static int getCurrentFSAA() {
-        return m_FSAA;
-    }
-    
-    public static void setCurrentFSAA(int FSAA) {
-        logger.info("Changing anti-aliasing to " + FSAA + "x");
-        m_FSAA = FSAA;
-        for (int i = 0; i < m_all.size(); i++) {
-            AWindowGLView v = (AWindowGLView)(m_all.get(i).get());
-            if (v != null) { 
-                v.restartDisplay();
-            }
-        }
-    }
-    
-    public static int getMaxFSAA() {
-        return m_maxFSAA;
-    }
-    
-    public void restartDisplay() {
-        System.out.println("RESTART DISPLAY!");
-        remove(m_panel);
-        m_panel = null;
-        startDisplay();
-        validate();
-        m_panel.setBounds(0, 0, getWidth(), getHeight());
-    }
-    
-    private void startDisplay() {
-        GLCapabilities cap = new GLCapabilities();
-        
-        if (m_FSAA > 0) {
-            cap.setSampleBuffers(true);
-            cap.setNumSamples(m_FSAA);
-            logger.info("Requesting " + m_FSAA + "x");
-        }
-        
-        cap.setDoubleBuffered(true);
-        
-        if (m_ocontext != null) {
-            m_panel = new GLCanvas(cap, null, m_ocontext, null);
-        } else {
-            m_panel = new GLCanvas(cap);
-        }
-        
-        m_ocontext = m_panel.getContext();
-        
-        m_panel.addGLEventListener(this);
-        
-        //m_FSAA = m_panel.getChosenGLCapabilities().getNumSamples();
-        
-        //m_children = new JPanel();
-        
-        add(m_panel, BorderLayout.CENTER);
-        
-    }
-    
-    public AWindowGLView(AWindow parent) {
-        m_parent = parent;
-        setLayout(null);
-        
-        startDisplay();
-        //m_panel.add(m_but);
-        //add(m_but, BorderLayout.NORTH); 
-        
-        
-        m_all.add(new WeakReference(this));
-
-    }
-    
-    private void checkListeners() {
-        AInteractionsManager lt = m_parent.getInteractionManager();
-        MouseListener[] lr = m_panel.getMouseListeners();
-        boolean found = false;
-        for (int i = 0; i < lr.length; i++) {
-            if (lr[i] == lt) {
-                found = true;
-            }
-        }
-        
-        if (!found) {
-            m_panel.addMouseListener(lt);
-            m_panel.addMouseMotionListener(lt);
-        }
-    }
-    
-    public void init(GLAutoDrawable drawable) {
-        
-        System.out.println("INIT CALLED!");
-        System.out.println(getWidth() + ":" + getHeight());
-        //(new Exception()).printStackTrace();
-        
-        checkListeners();
-        
-        //drawable.setGL(new TraceGL(drawable.getGL(), System.err));
-        GL gl = drawable.getGL();
-        logger.debug("INIT GL IS: " + gl.getClass().getName());
-        
-        int[] buffer = new int[2];
-        gl.glGetIntegerv(GL.GL_MAX_SAMPLES_EXT, buffer, 0);
-        m_maxFSAA = buffer[0];
-        logger.debug("Graphics card supports max anti-alias of: " + buffer[0] + "x");
-        
-        BufferCapabilities bc = m_panel.getGraphicsConfiguration().getBufferCapabilities();
-        boolean frontacc = bc.getFrontBufferCapabilities().isAccelerated();
-        boolean backacc = bc.getBackBufferCapabilities().isAccelerated();
-        logger.info("OpenGL Acceleration Status: Front - " + frontacc + " and Back - " + backacc);
-
-        // All polygons in Atlantis are uniformly coloured, this speeds things up in theory at least...
-        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-        gl.glShadeModel(GL.GL_FLAT);
-
-        // Old style antialiasing like this is apparently not supported by 
-        // modern graphics cards although we may want to enable it on older
-        // hardware where people do not have FSAA but still want AA
-        /*gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
-        gl.glEnable(gl.GL_POLYGON_SMOOTH);
-        gl.glHint(gl.GL_LINE_SMOOTH_HINT, gl.GL_NICEST);
-        gl.glEnable(gl.GL_LINE_SMOOTH);*/
-
-        // We do our own Z-ordering
-        gl.glDisable(gl.GL_DEPTH_TEST);
-        
-        // Enable transparency, even if nothing in Atlantis is actually
-        // transparent yet...
-        gl.glEnable(gl.GL_BLEND);
-        gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA);
-
-    }
-
-    private static int countContexts() {
-        int count = 0;
-        for (int i = 0; i < m_all.size(); i++) {
-            if (m_all.get(i).get() != null) {
-                count++;
-            }
-            // Could throw away dead weak refs here...
-        }
-        return count;
-    }
-    
-    public void display(GLAutoDrawable d) {
-        
-        /*if (m_parent.isValid()) {
-            System.out.println("VALID PARENT - RETURNING");
-            return;
-        }*/
-        // Perhaps we could not do this and turn off buffer swaps?
-        // Currently we're probably doing some unnecessary repaints when
-        // you change window
-        m_parent.invalidateQuietly();
-        
-        GL gl = d.getGL();
-        //System.out.println("DISPLAY " + this);
-        //System.out.println("ACTIVE: " + countContexts());
-        gl.glMatrixMode(GL.GL_MODELVIEW);
-        gl.glLoadIdentity();
-
-        // Can we avoid this? We probably fill with bg colour later anyway...
-        gl.glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
-        gl.glClear(gl.GL_COLOR_BUFFER_BIT);
-
-        if (m_parent != null) {
-            AGLGraphics glg = new AGLGraphics(d);
-            m_parent.paintWindow(glg, false);
-            super.paintBorder(glg);
-            /*for (int i = 0; i < m_panel.getComponentCount(); i++) {
-                m_panel.getComponent(i).paint(glg);
-            }*/
-        }
-
-        gl.glFlush();
-
-        m_count++;
-        long tnow = System.currentTimeMillis();
-        if (tnow - 1000 > m_start) {
-            logger.info("OpenGL FPS: " + m_count);
-            m_count = 0;
-            m_start = tnow;
-        }
-    }
-
-    /*@Override
-    public Graphics getGraphics() {
-    if (m_g == null) {
-    System.out.println("PAINT OUT OF VALID");
-    return new ADummyGraphics2D();
-    } else {
-    return m_g;
-    }
-    }*/
-    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
-        //System.out.println("GLRESIZE: " + x + ":" + y + ":" + width + ":" + height);
-        GL gl = drawable.getGL();
-        GLU glu = new GLU();
-
-        if (height <= 0) // avoid a divide by zero error!
-        {
-            height = 1;
-        }
-        final float h = (float) width / (float) height;
-        gl.glViewport(0, 0, width, height);
-        gl.glMatrixMode(GL.GL_PROJECTION);
-        gl.glLoadIdentity();
-        gl.glOrtho(x, x + width, y + height, y, -100.0, 100.0);
-        //gl.glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0);
-
-        gl.glMatrixMode(GL.GL_MODELVIEW);
-        gl.glLoadIdentity();
-
-        m_count = 0;
-        m_start = System.currentTimeMillis();
-    }
-
-    // Should implement this for multi-screen people some time...
-    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void setBounds(int x, int y, int width, int height) {
-        //Border b = getBorder();
-        //setBorder(null);
-        super.setBounds(x, y, width, height);
-        m_panel.setBounds(0, 0, getWidth(), getHeight());
-        //setBorder(b);
-        //System.out.println("RESIZE " + x + ":" + y + ":" + width + ":" + height);
-    }
-    
-    // Need to paint our own border to make sure it gets drawn in GL
-    public void paintBorder(Graphics g) {
-        
-    }
-    
-    // Need to make sure our heavyweight child is invalidated
-    public void repaint() {
-        super.repaint();
-        if (m_panel != null) {
-            m_panel.repaint();
-        }
-    }
-    
-    public Component getRealPanel() {
-        return m_panel;
-    }
-}
-
-class OurGLCapChooser implements GLCapabilitiesChooser {
-    
-    private int m_maxAA;
-    private boolean m_canAA;
-    
-    public OurGLCapChooser() {
-    }
-    
-    public int chooseCapabilities(GLCapabilities req, GLCapabilities[] all, int recommended) {
-        System.out.println("CALLED!");
-        m_canAA = false;
-        m_maxAA = 0;
-        
-        for (int i = 0; i < all.length; i++) {
-            System.out.println(all[i]);
-            if (all[i].getSampleBuffers()) {
-                m_canAA = true;
-                if (all[i].getNumSamples() > m_maxAA) {
-                    m_maxAA = all[i].getNumSamples();
-                }
-            }
-        }
-        
-        return (new DefaultGLCapabilitiesChooser()).chooseCapabilities(req, all, recommended);
-    }
-    
-    public boolean getCanAA() {
-        return m_canAA;
-    }
-    
-    public int getMaxAA() {
-        return m_maxAA;
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/AWindowSwingView.java b/graphics/AtlantisJava/src/atlantis/canvas/AWindowSwingView.java
deleted file mode 100644
index cc27fad13af3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/AWindowSwingView.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package atlantis.canvas;
-
-import atlantis.globals.AGlobals;
-
-import java.awt.Graphics;
-import javax.swing.JPanel;
-
-/**
- * 
- * This class provides an Java2D/Swing context. When the parent AWindow repaints
- * this is propagated down to this view component, which then calls back to
- * the parent AWindow requesting everything be copied in.
- * 
- * @author Adam Davison
- */
-public class AWindowSwingView extends JPanel {
-    
-    private AWindow m_parent;
-
-    public AWindowSwingView(AWindow parent) {
-        setLayout(null);
-        m_parent = parent;
-    }
-
-    @Override
-    protected void paintComponent(Graphics g) {
-        //System.out.println(getX() + ":" + getY() + ":" + getWidth() + ":" + getHeight());
-        g.setClip(0, 0, getWidth(), getHeight());
-        //g.setColor(Color.RED);
-        //g.fillRect(10, 10, getWidth() - 10, getHeight() - 10);
-        if (AGlobals.isAtlantisHeadless()) {
-            // Don't need to paint to a backing buffer ever in headless
-            // since we're already painting offscreen
-            m_parent.paintWindow(g, false);
-        } else {
-            m_parent.paintWindow(g, true);
-        }
-    }
-    
-    @Override
-    protected void printComponent(Graphics g) {
-        //System.out.println(getX() + ":" + getY() + ":" + getWidth() + ":" + getHeight());
-        g.setClip(0, 0, getWidth(), getHeight());
-        //g.setColor(Color.RED);
-        //g.fillRect(10, 10, getWidth() - 10, getHeight() - 10);
-        m_parent.printComponent(g);
-    }
-    
-    @Override
-    public void setBounds(int x, int y, int width, int height) {
-        super.setBounds(x, y, width, height);
-        //System.out.println("RESIZE " + x + ":" + y + ":" + width + ":" + height);
-    }
-    
-    
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/canvas/package.html b/graphics/AtlantisJava/src/atlantis/canvas/package.html
deleted file mode 100644
index c09fd6d63f20..000000000000
--- a/graphics/AtlantisJava/src/atlantis/canvas/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Provides classes representing the Atlantis canvas and the windows
-  displayed within it.</p>
-<p>The ACanvas is a JFrame containing a JlayeredPane of AWindows. Windows
-are placed into the JLayeredPane depending on the current layout. The
-canvas class contains a HashTable of all possible windows and a
-HashTable of all available layouts. Windows needed by the current
-layout are added to the JLayeredPane according to the size and the
-order defined by the layout.  An AWindow is a JPanel into which the
-Atlantis graphics are drawn. Each window has an associated projection
-and also an interaction manager. The interaction manager is a mouse
-listener which deals with all mouse events on the window. The window
-manages the drawing of the Atlantis picture and deals with the linear
-transformations from user to display co-ordinates.  Non-linear
-transformations are dealt with by the projection. ALayout defines the
-size and position (in the 3x3 grid layout scheme of the layered pane)
-of each window, and also describes combinations of these windows
-called pages. pages is an array of characters where each character
-represents a window.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/config/AConfig.java b/graphics/AtlantisJava/src/atlantis/config/AConfig.java
deleted file mode 100755
index f35dbb07ed52..000000000000
--- a/graphics/AtlantisJava/src/atlantis/config/AConfig.java
+++ /dev/null
@@ -1,432 +0,0 @@
-package atlantis.config;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import atlantis.Atlantis;
-import atlantis.utils.xml.AXMLErrorHandler;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-
-/**
- * AConfig acts as a container of the configuration file.
- * The whole file can be accessed through a tree structure.
- * 
- * @author ql
- * 
- */
-
-// by Zdenek, remark, 2008-08-14
-// since the attributes are stored in something like HashMap
-// their order is not ensured?, e.g. having in WindowCorners source
-// configuration (master copy according to which synchronization is done)
-// <CORNERS windowName="W" x0="-1320.0" y0="1320.0" x1="1320.0" y1="1320.0" x2="1320.0" y2="-1320.0"/>
-// line order this way, after updating it result in something like this
-// <CORNERS x2="1320.0" windowName="W" y0="1320.0" x1="1320.0" y2="-1320.0" y1="1320.0" x0="-1320.0"/>
-// the same data, but the order of attributes is not the same
-public class AConfig
-{
-    private static ALogger logger = ALogger.getLogger(AConfig.class);
-    
-    // A map defining the key attribute for each modifiable element
-    static Hashtable keyMap;
-    
-    // Define modifiable attributes
-    public static String[] CANVAS_ATT = {"startupLayout", "aspectRatio"}; //<Canvas>
-    public static String[] WINDOW_ATT = {"projection", "group"};          //<UsedWindow>
-    public static String[] LAYOUT_ATT = {"startup", "startupWindow"};     //<Layout>
-    public static String[] PAR_ATT = {"va", "st", "dop", "scope", "ul"};  //<Others>
-    public static String[] GROUP_ATT = {"userLevel"};                     //<Group>
-    
-    // Define used greek letters in configuration file
-    static String[] GREEK_LETTER = {"\u03B7", "\u03C1", "\u03A6", "\u0394", "\u03BB", "\u03C3"};
-    static String[] GREEK_ENTITY = {"&eta;", "&rho;", "&phi;", "&delta;", "&lambda;", "&sigma;"};
-    
-    // The name of the configuration file 
-    private String filename;
-    
-    // If isCustomised is true, the configuration file contains two exclusive
-    // blocks, <ParameterDifferences> and <WindowCorners>.
-    private boolean isCustomised;
-    
-    // This field contains the whole DTD section of the configuration file.
-    private String dtdSection = null;
-    
-    // Root node of the configuration tree
-    private AConfigNode rootNode;
-    
-    // A list containing all element nodes in the file
-    private ArrayList nodeList;
-    
-    // A list containing all user exclusive element nodes in the file
-    // <ParameterDifferences> and <WindowCorners>
-    private ArrayList userExclusiveNodeList;
-    
-    public AConfig(String configFilename, boolean isCustomised) throws Exception
-    {
-        if(AConfig.keyMap == null)
-            AConfig.createKeyMap();
-        this.filename = configFilename;
-        this.isCustomised = isCustomised;
-        parseXML();
-    }
-    
-    /**
-     * @return Returns the dtdSection.
-     */
-    public String getDtdSection() throws Exception
-    {
-        if(this.dtdSection == null)
-            createDTDSection(this.filename);
-        return this.dtdSection;
-    }
-    
-    public Iterator getIterator()
-    {
-        return nodeList.iterator();
-    }
-    
-    void addNode(AConfigNode node)
-    {
-        nodeList.add(node);
-    }
-    
-    void addUserExclusiveNode(AConfigNode node)
-    {
-        userExclusiveNodeList.add(node);
-    }
-    
-    /**
-     * initialise <code>keyMap</code>.
-     */
-    private static void createKeyMap()
-    {
-        keyMap = new Hashtable();
-        keyMap.put("Canvas", "startupLayout");
-        keyMap.put("UsedWindow", "name");
-        keyMap.put("Layout", "name");
-        keyMap.put("ENUM", "fn");
-        keyMap.put("SENUM", "fn");
-        keyMap.put("ICUT", "fn");
-        keyMap.put("SICUT", "fn");
-        keyMap.put("FCUT", "fn");
-        keyMap.put("SFCUT", "fn");
-        keyMap.put("INT", "fn");
-        keyMap.put("SINT", "fn");
-        keyMap.put("FLOAT", "fn");
-        keyMap.put("SFLOAT", "fn");
-        keyMap.put("LINT", "fn");
-        keyMap.put("SLINT", "fn");
-        keyMap.put("COLOR", "fn");
-        keyMap.put("SCOLOR", "fn");
-        keyMap.put("STATUS", "fn");
-    }
-    
-    /**
-     * initialise <code>dtdSection</code> based on the dtd part from the 
-     * configuration file.
-     */
-    private void createDTDSection(String configFilename) throws Exception
-    {
-        String dtdStart = "<?xml version=\"1.0\"?>";
-        String dtdEnd = "]>";
-        String LINE_SEPAR = System.getProperty("line.separator");
-        
-        this.dtdSection = "";
-        try
-        {
-            
-            InputStream is = AUtilities.getFileAsStream(configFilename);            
-            InputStreamReader isr = new InputStreamReader(is);
-            BufferedReader br = new BufferedReader(isr);       
-            
-            String currentLine;
-            boolean isInsideDTD = false;
-            while(true)
-            {
-                currentLine = br.readLine();
-                if(currentLine == null) return;
-                if(dtdStart.equals(currentLine.trim()))
-                {
-                    isInsideDTD = true;
-                    this.dtdSection += currentLine + LINE_SEPAR;
-                }
-                else if(dtdEnd.equals(currentLine.trim()))
-                {
-                    isInsideDTD = false;
-                    this.dtdSection += currentLine + LINE_SEPAR;
-                }
-                else if(isInsideDTD)
-                {
-                    this.dtdSection += currentLine + LINE_SEPAR;
-                }
-            }
-        }
-        catch(FileNotFoundException e)
-        {
-            String m = "File " + configFilename + " not found, fatal.";
-            throw new Exception(m);
-        }
-        catch(IOException e)
-        {
-            String m = "I/O exception while reading file " + configFilename;
-            throw new Exception(m);
-        }
-    }
-    
-    public void createConfigTree(Element rootElement)
-    {
-        this.nodeList = new ArrayList();
-        if(this.isCustomised)
-            this.userExclusiveNodeList = new ArrayList();
-        this.rootNode = new AConfigNode(null, rootElement, 0, this);
-    }
-    
-    public void parseXML() throws Exception
-    {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setValidating(true);
-        DocumentBuilder parser;
-        try
-        {
-            parser = factory.newDocumentBuilder();
-            parser.setErrorHandler(new AXMLErrorHandler());
-            
-            InputStream isConfig = AUtilities.getFileAsStream(this.filename);
-            Document xmlConfigDoc = parser.parse(isConfig);
-            createConfigTree(xmlConfigDoc.getDocumentElement());
-        }
-        catch (Exception e)
-        {
-            throw e;
-        }
-    }
-
-    // Find a node match the sampleNode in the configuration file
-    // Return the node if found, null otherwise
-    public AConfigNode find(AConfigNode sampleNode)
-    {
-        for(int i=0; i<nodeList.size(); ++i)
-        {
-            AConfigNode testNode = (AConfigNode) nodeList.get(i);
-            if("Canvas".equals(sampleNode.getNodeName())
-                    && (testNode.getFullNodeName().equals(sampleNode.getFullNodeName())))
-            {
-                return testNode;
-            }
-            else if((testNode.getFullNodeName().equals(sampleNode.getFullNodeName())) 
-                    && (testNode.getKeyValue().equals(sampleNode.getKeyValue())))
-            {
-                return testNode;
-            }
-        }
-        return null;
-    }
-    
-    // Find a node based on the node name, attribute name and value
-    // Return the node if found, null otherwise
-    public AConfigNode find(String name, String attName, String attValue)
-    {
-        for(int i=0; i<nodeList.size(); ++i)
-        {
-            AConfigNode testNode = (AConfigNode) nodeList.get(i);
-            if(name.equals(testNode.getNodeName())
-                    && attValue.equals(testNode.getAttValue(attName)))
-                return testNode;
-        }
-        return null;
-    }
-
-    // Find a node based on the node name, attribute name and value,
-    // and its parent's node name, attribute name and value.
-    // Return the node if found, null otherwise
-    public AConfigNode find(String name, String attName, String attValue, 
-            String parName, String parAttName, String parAttValue)
-    {
-        for(int i=0; i<nodeList.size(); ++i)
-        {
-            AConfigNode testNode = (AConfigNode) nodeList.get(i);
-            if(name.equals(testNode.getNodeName())
-                    && attValue.equals(testNode.getAttValue(attName)))
-            {
-                AConfigNode parNode = testNode.getParent();
-                
-                if(parName.equals(parNode.getNodeName()) 
-                        && parAttValue.equals(parNode.getAttValue(parAttName)))
-                    return testNode;
-            }
-        }
-        return null;
-    }
-
-    // Find a parameter node based on the attribute name and value,
-    // and its group's name
-    // Return the node if found, null otherwise
-    //
-    // NB: This method is for finding a parameter node with uncertain 
-    // parameter type, but with a certain parent node name
-    public AConfigNode findPar(String attName, String attValue, String parAttValue)
-    {
-        for(int i=0; i<nodeList.size(); ++i)
-        {
-            AConfigNode testNode = (AConfigNode) nodeList.get(i);
-            if(attValue.equals(testNode.getAttValue(attName)))
-            {
-                AConfigNode parNode = testNode.getParent();
-                
-                // <StatusRoot> and <StatusGroup> are skipped when finding parent node
-                while("StatusRoot".equals(parNode.getNodeName())
-                        || "StatusGroup".equals(parNode.getNodeName()))
-                {
-                    parNode = parNode.getParent();
-                }
-                
-                if("Group".equals(parNode.getNodeName()) 
-                        && parAttValue.equals(parNode.getAttValue("name")))
-                    return testNode;
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * validate the attribute value 
-     */
-    public boolean validate(AConfigNode node, String attName, String attValue)
-    {
-        if("Canvas".equals(node.getNodeName()) && "startupLayout".equals(attName))
-        {
-            if(find("Layout", "name", attValue) == null)
-                return false;
-        }
-        else if("UsedWindow".equals(node.getNodeName()) && "projection".equals(attName))
-        {
-            if(find("Group", "name", attValue, "SuperGroup", "name", "Projection") == null)
-                return false;
-        }
-        else if("UsedWindow".equals(node.getNodeName()) && "group".equals(attName))
-        {
-            if(find("Group", "name", attValue) == null)
-                return false;
-        }
-        else if("Layout".equals(node.getNodeName()))
-        {
-            int numWindows = attValue.length();
-            for(int i=0; i<numWindows; ++i)
-            {                
-                String windowName = attValue.substring(i, i+1);
-                if(find("Window", "name", windowName, "Layout", "name", node.getKeyValue()) == null)
-                    return false;
-            }
-        }
-        return true;
-    }
-    
-    public void validateUserExclusiveNode(AConfigNode node)
-    {
-        if("ParameterDifferences".equals(node.getNodeName()))
-        {
-            // check validity of each child of <ParameterDifferences>
-            Iterator it = node.getChildren().iterator();
-            while(it.hasNext())
-            {
-                // a <DIFFERENCE> node
-                AConfigNode childNode = (AConfigNode) it.next();
-                String group = childNode.getAttValue("group");
-                String window = childNode.getAttValue("windowName");
-                String parameter = childNode.getAttValue("name");
-                if(find("UsedWindow", "name", window) == null)
-                    it.remove();
-                else
-                {
-                    if(find("Group", "name", group) == null)
-                        it.remove();
-                    else
-                    {
-                        if(findPar("fn", parameter, group) == null)
-                            it.remove();
-                    }
-                }
-            }
-        }
-        else if("WindowCorners".equals(node.getNodeName()))
-        {
-            // check validity of each child of <WindowCorners>
-            Iterator it = node.getChildren().iterator();
-            while(it.hasNext())
-            {
-                // a <CORNERS> node
-                AConfigNode childNode = (AConfigNode) it.next();
-                String window = childNode.getAttValue("windowName");
-                if(find("UsedWindow", "name", window) == null)
-                    it.remove();
-            }
-        }
-    }
-    
-    /**
-     * Replace the greek letters in the source string with UTF entities
-     * 
-     * @param testStr a source string
-     * @return the resulting string
-     */
-    static String replaceGreekLetter(String testStr)
-    {
-        for (int i=0; i<GREEK_LETTER.length; ++i)
-        {
-            if (testStr.indexOf(GREEK_LETTER[i]) >= 0)
-                testStr = testStr.replaceAll(GREEK_LETTER[i], GREEK_ENTITY[i]);
-        }
-        
-        return testStr;
-    }
-    
-    /**
-     *  Converts to a string representing the xml data in this configuration
-     *  file.
-     */
-    public String convertToString() throws Exception
-    {
-        return getDtdSection() + "\n\n" + this.rootNode.toString();
-    }
-
-    /**
-     *  Converts to a string representing the xml data in this configuration
-     *  file plus the user exclusive section fom <code>userConfig</code>.
-     */
-    public String convertToString(AConfig userConfig) throws Exception
-    {
-        if(!this.isCustomised && userConfig.isCustomised)
-        {
-            StringBuffer str = new StringBuffer("\n");
-            for(int i=0; i<userConfig.userExclusiveNodeList.size(); ++i)
-            {
-                AConfigNode userExclusiveNode = (AConfigNode) userConfig.userExclusiveNodeList.get(i);
-                validateUserExclusiveNode(userExclusiveNode);
-                str.append(userExclusiveNode.toString());
-                str.append("\n");
-            }
-            return getDtdSection() + "\n\n" + this.rootNode.toString(str.toString());
-        }            
-        else
-        {
-            // only add user exclusive section to non-customized configuration
-            return toString();
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/config/AConfigNode.java b/graphics/AtlantisJava/src/atlantis/config/AConfigNode.java
deleted file mode 100755
index 751ae9885056..000000000000
--- a/graphics/AtlantisJava/src/atlantis/config/AConfigNode.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package atlantis.config;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.Attributes;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class AConfigNode
-{
-    private String nodeName;
-    
-    // use fullNodeName combined with keyValue to uniquely identify a parameter
-    // in the configuration file
-    // NB: keyValue is not empty only if attributes is not empty
-    private String fullNodeName;
-    private String keyValue = null;
-    
-    // Layer 0 represents the root node of the xml file,
-    // and layer 1 reprensents the layer inside layer 0,
-    // and so on.
-    private int layer;
-    
-    private Attributes attributes = null;
-    private ArrayList children = null;
-    private AConfigNode parent = null;
-    
-    // if parent is null, elementNode is the root node
-    AConfigNode(AConfigNode parent, Node elementNode, int layer, AConfig configObject)
-    {
-        // add this node into the node list
-        configObject.addNode(this);
-        this.layer = layer;
-        
-        // set the full name
-        this.parent = parent;
-        String parentName = (this.parent != null) ? this.parent.getFullNodeName() + "-" : "";
-        this.nodeName = elementNode.getNodeName();
-        if("ParameterDifferences".equals(this.nodeName)
-                || "WindowCorners".equals(this.nodeName))
-            configObject.addUserExclusiveNode(this);
-        this.fullNodeName = parentName + this.nodeName;
-        
-        // set the attributes map
-        if(elementNode.hasAttributes())
-        {
-            NamedNodeMap attMap = elementNode.getAttributes(); 
-            int numAttributes = attMap.getLength();
-            this.attributes = new Attributes(numAttributes);
-            for(int i=0; i<numAttributes; ++i)
-            {
-                // each node returned from item(i) is an Attr
-                String name = attMap.item(i).getNodeName();
-                String value = attMap.item(i).getNodeValue();
-                // replace special math operator characters with entity references
-                if("=".equals(value))
-                    value = "&intEqual;";
-                else if(">".equals(value))
-                    value = "&gt;";
-                else if("<".equals(value))
-                    value = "&lt;";
-                else if("<,>".equals(value))
-                    value = "&real;";
-                else if("<=".equals(value))
-                    value = "&le;";
-                else if(">=".equals(value))
-                    value = "&ge;";
-                else if("=,!=,<,<=,>,>=".equals(value))
-                    value = "&int;";
-                
-                // replace greek letters with entity references
-                value = AConfig.replaceGreekLetter(value);
-                    
-                this.attributes.putValue(name, value);
-            }
-        }
-        
-        // set the key value
-        String keyAttr = (String) AConfig.keyMap.get(this.nodeName);
-        if(keyAttr != null)
-        {
-            String groupName = this.parent.getAttValue("name");
-            this.keyValue = ((groupName == null) ? "" : (groupName + "-")) + this.attributes.getValue(keyAttr);
-        }
-        
-        // set the children list
-        if(elementNode.hasChildNodes())
-        {
-            NodeList childList = elementNode.getChildNodes();
-            int numChildren = childList.getLength()/2;
-            this.children = new ArrayList(numChildren);
-            int idx = 0;
-            for(int i=0; i<childList.getLength(); ++i)
-            {
-                // each node returned from item(i) is an Attr
-                Node childNode = childList.item(i);
-                if (childNode.getNodeType() == Node.ELEMENT_NODE)
-                {
-                    this.children.add(idx++, new AConfigNode(this, childNode, this.layer+1, configObject));
-                }
-            }
-        }
-    }
-    
-    /**
-     * @return Returns the nodeName.
-     */
-    public String getNodeName()
-    {
-        return this.nodeName;
-    }
-    
-    /**
-     * @return Returns the fullNodeName.
-     */
-    public String getFullNodeName()
-    {
-        return this.fullNodeName;
-    }
-
-    /**
-     * @return Returns the parent.
-     */
-    public AConfigNode getParent()
-    {
-        return this.parent;
-    }
-    
-    /**
-     * @return Returns the children.
-     */
-    public List getChildren()
-    {
-        return this.children;
-    }
-
-    /**
-     * @return Returns the keyValue.
-     */
-    public String getKeyValue()
-    {
-        return this.keyValue;
-    }
-
-    /**
-     * @return Returns the string value of the specified attribute name,
-     *         or null if not found.
-     */
-    public String getAttValue(String name)
-    {
-        if(this.attributes != null)
-            return this.attributes.getValue(name);
-        else
-            return null;
-    }
-    
-    public String setAttValue(String name, String value)
-    {
-        return this.attributes.putValue(name, value);
-    }
-    
-    // the start line of this xml node
-    // e.g. <Nodename att1="value1" att2="value2">
-    private String selfStartString()
-    {
-        StringBuffer str = new StringBuffer();
-        for(int i=0; i<this.layer; ++i)
-        {
-            str.append("\t");
-        }
-        str.append("<");
-        str.append(this.nodeName);
-        if(this.attributes != null)
-        {
-            Set attSet = this.attributes.keySet();
-            Iterator it = attSet.iterator();
-            while(it.hasNext())
-            {
-                String attName = it.next().toString();
-                String attValue = this.attributes.getValue(attName);
-                str.append(" ");
-                str.append(attName);
-                str.append("=\"");
-                str.append(attValue);
-                str.append("\"");
-            }
-        }
-        if(this.children == null)
-        {
-            str.append("/>");
-        }
-        return str.toString();
-    }
-    
-    private String selfEndString()
-    {
-        StringBuffer str = new StringBuffer();
-        if(this.children == null)
-        {
-            // if no children, use simplified format (<.../>)
-            // so selfStartString contains everything about this node
-            return "";
-        }
-        else
-        {
-            for(int i=0; i<this.layer; ++i)
-            {
-                str.append("\t");
-            }
-            str.append("</");
-            str.append(this.nodeName);
-            str.append(">");
-        }
-        return str.toString();
-    }
-    
-    private String childrenString()
-    {
-        StringBuffer str = new StringBuffer();
-        if(this.children == null)
-        {
-            return "";
-        }
-        else
-        {
-            str.append(">\n");
-            for(int i=0; i<this.children.size(); ++i)
-            {
-                AConfigNode child = (AConfigNode) this.children.get(i);
-                str.append(child.toString());
-                str.append("\n");
-            }
-        }
-        return str.toString();
-    }
-    
-    /**
-     *  Converts to a string representing the xml data containing this node and
-     *  all its children.
-     */
-    public String toString()
-    {
-        return selfStartString()+childrenString()+selfEndString();
-    }
-    
-    // userExclusiveSection is noly under root node (layer 0)
-    public String toString(String userExclusiveSection)
-    {
-        if(this.layer == 0)
-        {
-            return selfStartString()+childrenString()+userExclusiveSection+selfEndString();
-        }
-        else
-        {
-            return toString();
-        }
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/config/AConfigUpdater.java b/graphics/AtlantisJava/src/atlantis/config/AConfigUpdater.java
deleted file mode 100644
index ee87efb78bcd..000000000000
--- a/graphics/AtlantisJava/src/atlantis/config/AConfigUpdater.java
+++ /dev/null
@@ -1,405 +0,0 @@
-package atlantis.config;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.InputStream;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-import java.util.Iterator;
-
-import atlantis.utils.AUtilities;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-
-
-
-/**
- * This class encapsulates a few static methods which ensure updating
- * of the user's customised Atlantis configuration (or special Atlantis
- * configurations) according to the base Atlantis configuration file
- * configuration/config.xml
- * 
- * Updating means synchronising special / customised configurations if
- * XML elements were added/removed from the base configuration file while
- * keeping unchanged specially defined user cuts, views, projections, etc.
- * 
- * Methods in this class are also called by an external configuration
- * synchronization tool, so methods should remain static, special treatment
- * of logger, etc.
- * 
- * @author
- * Zdenek Maxa - initial update mechanism, creating this extra class, refactoring
- * Qiang Lu - improved reliable updating mechanism as done in AConfig 
- *
- */
-public final class AConfigUpdater
-{
-    // when AConfigUpdater is called from Atlantis code, logger would behave
-    // as configured there. If AConfigUpdater is called externally, logger
-    // should be initialised with default values from ALogger
-    private static ALogger logger = ALogger.getLogger(AConfigUpdater.class);
-    
-    
-    
-
-    /**
-     * Methods creates checksum file (name in fileNameChk) of a given file
-     * (file name in fileName).
-     */
-    public static void createChecksumFile(String fileName, String fileNameChk)
-    throws AAtlantisException
-    {
-        try
-        {
-            logger.debug("Creating checksum file " + fileNameChk +
-                         " of a file " + fileName);
-            byte[] chk = calculateChecksum(fileName);
-            File fileChk = new File(fileNameChk);
-            OutputStream os = new FileOutputStream(fileChk);
-            os.write(chk);
-            os.close();
-        }
-        catch(AAtlantisException ae)
-        {
-            String m = "Error while creating MD5 checksum file, reason: " +
-                       ae.getMessage();
-            throw new AAtlantisException(m);
-        }
-        catch(FileNotFoundException fnfe)
-        {
-            String m = "File not found exception: " + fnfe.getMessage();
-            throw new AAtlantisException(m);
-        }
-        catch(IOException ioe)
-        {
-            String m = "I/O error while creating file " + fileNameChk;
-            throw new AAtlantisException(m);
-        }
-        
-    } // createChecksumFile() -----------------------------------------------
-
-    
-    
-    /**
-     * Calculates checksum of a file fileName. 
-     */
-    private static byte[] calculateChecksum(String fileName) 
-    throws AAtlantisException
-    {
-        InputStream fis = null;
-        try
-        {
-            logger.debug("Calculating checksum of file: " + fileName);
-            fis = AUtilities.getFileAsStream(fileName);
-        }
-        catch(AAtlantisException ae)
-        {
-            throw ae;
-        }
-
-        MessageDigest complete = null;
-        
-        try
-        {
-            byte[] buffer = new byte[1024];
-            complete = MessageDigest.getInstance("MD5");
-            int numRead;
-            do
-            {
-                numRead = fis.read(buffer);
-                if (numRead > 0)
-                {
-                    complete.update(buffer, 0, numRead);
-                }
-            } while (numRead != -1);
-            
-            fis.close();
-        }
-        catch(IOException ioe)
-        {
-            throw new AAtlantisException("Error while reading data from file " +
-                                         fileName);
-        }
-        catch(NoSuchAlgorithmException nsae)
-        {
-            throw new AAtlantisException(nsae.getMessage());
-        }
-        
-        logger.debug("Checksum calculated.");
-        return complete.digest();
-        
-    } // calculateChecksum() ------------------------------------------------
-    
-    
-
-    /**
-     * Method checks the checksum of input file fileName if its checksum matches
-     * checksum stored in the checksum file fileNameChk.
-     * Return true if matches, false otherwise.
-     */
-    public static boolean compareChecksums(String fileName, String fileNameChk)
-    throws AAtlantisException
-    {
-        boolean result = false;
-        try
-        {
-            // checksum of the input file
-            byte[] inputFileChecksum = calculateChecksum(fileName);
-            // checksum to read stored checksum from file fileNameChk
-            // assume the lenght is the same as of the input data file
-            byte[] storedChecksum = new byte[inputFileChecksum.length];
-            File fileChk = new File(fileNameChk);
-            InputStream is = new FileInputStream(fileChk);
-            is.read(storedChecksum);
-
-            // compare both checksums
-            if(new String(storedChecksum).equals(new String(inputFileChecksum)))
-            {
-                result = true;
-            }
-            else
-            {
-                result = false;
-            }
-
-            is.close();
-        }
-        catch(Exception e)
-        {
-            String m = "Error while checking MD5 checksum file, reason: " +
-                       e.getMessage();
-            throw new AAtlantisException(m);
-        }
-        
-        return result;
-        
-    } // compareChecksums() -------------------------------------------------
-    
-    
-
-    /**  
-     * @param distConfig - configuration instance from Atlantis distribution
-     *                     (master copy)
-     * @param userConfig - user's customised or special configuration which
-     *                     gets updated according to distribution configuration
-     */
-    private static void updateConfiguration(AConfig distConfig, AConfig userConfig)
-    {
-        logger.debug("Updating customised configuration ...");
-        Iterator distIt = distConfig.getIterator();
-        while(distIt.hasNext())
-        {
-            // For each key node (keyValue is not empty) inside distConfig,
-            // test if there is a same node in userConfig.
-            AConfigNode testDistNode = (AConfigNode) distIt.next();
-            if(testDistNode.getKeyValue() != null)
-            {
-                AConfigNode matchUserNode = userConfig.find(testDistNode);
-                if(matchUserNode != null)
-                {
-                    // update testDistNode based on matchUserNode
-                    updateNode(distConfig, testDistNode, matchUserNode);
-                }
-            }
-        }
-        
-        logger.debug("Update finished.");
-        
-    } // updateConfiguration() ----------------------------------------------
-
-    
-    
-    /**
-     * Update a node from configuration.
-     */
-    private static void updateNode(AConfig distConfig,
-                                   AConfigNode distNode, AConfigNode userNode)
-    {
-        String[] attStrArray = null;
-        if("Canvas".equals(distNode.getNodeName()))
-        {
-            attStrArray = AConfig.CANVAS_ATT;
-        }
-        else if("UsedWindow".equals(distNode.getNodeName()))
-        {
-            attStrArray = AConfig.WINDOW_ATT;
-        }
-        else if("Layout".equals(distNode.getNodeName()))
-        {
-            attStrArray = AConfig.LAYOUT_ATT;
-        }
-        else
-        {
-            //check the parent Group values
-            if(distNode.getParent().getNodeName().equals("Group")){
-                attStrArray = AConfig.GROUP_ATT;
-                //update the value
-                for(int i = 0; i < attStrArray.length; ++i)
-                {
-                    String att = attStrArray[i];
-                    String distValue = distNode.getParent().getAttValue(att);
-                    String userValue = userNode.getParent().getAttValue(att);
-                        
-                    if(distValue != null && userValue != null && !distValue.equals(userValue))
-                    {
-                        if(distConfig.validate(distNode.getParent(), att, userValue))
-                        {
-                            distNode.getParent().setAttValue(att, userValue);
-                        }
-                    }
-                }
-            }
-            
-            //now update parameters inside the Group
-            attStrArray = AConfig.PAR_ATT;
-        }
-
-        // update the value
-        for(int i = 0; i < attStrArray.length; ++i)
-        {
-            String att = attStrArray[i];
-            String distValue = distNode.getAttValue(att);
-            String userValue = userNode.getAttValue(att);
-            if(distValue != null && userValue != null && !distValue.equals(userValue))
-            {
-                if(distConfig.validate(distNode, att, userValue))
-                {
-                    distNode.setAttValue(att, userValue);
-                }
-            }
-        }
-        
-    } // updateNode() -------------------------------------------------------
-
-    
-
-    private static void writeUpdatedConfigurationFile(AConfig distConfig,
-                                                      AConfig userConfig,
-                                                      String filename)
-    throws Exception
-    {
-        FileOutputStream fo = null;
-        fo = new FileOutputStream(filename);
-        String updatedConfiguration = distConfig.convertToString(userConfig);
-        fo.write(updatedConfiguration.getBytes());
-        fo.close();
-        
-    } // writeUpdatedConfigurationFile() ------------------------------------
-    
-    
-    
-    /**
-     * Updates customised configuration file to be consistent with the
-     * distribution configuration file.
-     * @param fileNameDist - distribution configuration file path
-     * @param fileNameCustom - customised configuration file path
-     * @throws AAException
-     */
-    public static void updateConfigurationFile(String fileNameDist,
-                                               String fileNameCustom)
-    throws AAtlantisException
-    {
-
-        logger.info("Updating configuration - master " +
-                    "configuration: " + fileNameDist);
-        logger.info("Updating configuration - customised (being updated) " +
-                    "configuration: " + fileNameCustom);
-                
-        AConfig distConfig = null;
-        AConfig customConfig = null;
-
-        // read master (distribution) and customised configurations
-        try
-        {
-            distConfig = new AConfig(fileNameDist, false); // false - is not customised
-        }
-        catch(Exception e)
-        {
-            // these however seem to be never thrown because of AXMLErrorHandler
-            // in AConfig
-            String m = "Could not read/parse distribution configuration " +
-                       fileNameDist + " reason: " + e.getMessage();
-            throw new AAtlantisException(m);
-        }
-        
-        try
-        {
-            customConfig = new AConfig(fileNameCustom, true); // true - is customised
-        }
-        catch(Exception e)
-        {
-            // these however seem to be never thrown because of AXMLErrorHandler
-            // in AConfig
-            String m = "Could not read/parse customised configuration " +
-                       fileNameCustom + " reason: " + e.getMessage();
-            throw new AAtlantisException(m);
-        }
-
-       
-        // actual update
-        try
-        {
-            updateConfiguration(distConfig, customConfig);
-        }
-        catch(Throwable t)
-        {
-            String m = "Updating customised configuration failed, reason: " +
-                       t.getMessage();
-            logger.debug(m, t);
-            throw new AAtlantisException(m);
-        }
-        
-        
-        // write updated data, first create backup of the source file
-        
-        logger.info("Creating backup of the customised configuration file ...");
-        // file name to backup (rename) the file to
-        String fileNameUserBackup = fileNameCustom + "-backup_on_" +
-                                    AUtilities.getDateTimeString();
-        File fileCustom = new File(fileNameCustom);
-        File fileBackup = new File(fileNameUserBackup);
-        boolean renameResult = fileCustom.renameTo(fileBackup);
-        if(! renameResult)
-        {
-            String m = "Could not backup customised configuration " +
-                       "file, updating configuration failed.";
-            
-            // if fileNameDist path starts with "//", then it is run from within
-            // JAR archive via webstart. update process can't be performed in this
-            // case - can't create a backup copy of the fileNameCustom (and can't
-            // create an updated file when all is packed in a single JAR file either)
-            if(fileNameDist.startsWith("//"))
-            {
-                m += " Running via webstart, update can't be perfomed in this mode.";
-            }
-            throw new AAtlantisException(m);
-        }
-        logger.info(fileNameCustom + " backup created: " + fileNameUserBackup);        
-        
-        
-        try
-        {
-            writeUpdatedConfigurationFile(distConfig, customConfig,
-                                          fileNameCustom);
-        }
-        catch(Throwable t)
-        {
-            String m = "Saving updated customised configuration into file " +
-                       "failed, reason: " + t.getMessage();
-            logger.debug(m, t);
-            throw new AAtlantisException(m);
-        }
-        
-        
-        logger.info(fileNameCustom + " configuration was successfully updated.");
-        
-    } // updateConfigurationFile() ------------------------------------------
-
-  
-} // class AConfigUpdater ===================================================
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/config/ADefaultValues.java b/graphics/AtlantisJava/src/atlantis/config/ADefaultValues.java
deleted file mode 100755
index b2e764499cd2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/config/ADefaultValues.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package atlantis.config;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.FileReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.ALogger;
-
-/**
- *    The class maintains a few values which are to be remembered
- *    from session to session. The class tries to read in values from runtime
- *    configuration file $HOME/.Atlantis-runtime_values.txt. The values are
- *    stored in a Hashtable and are used as default initialize values. This
- *    Hashtable is updated whenever user changes these values. Values are
- *    into file at the end of Atlantis session.
- *
- * TODO:
- *      last used geometry (will be simpler when TB mode (and Atlantis.mode in
- *           general is discontinued), geometry names will be considered
- *           after '_' up to the file extension (.xml)
- *      last event file
- *
- * @author Zdenek Maxa
- */
-public class ADefaultValues
-{
-    // file where the cross-session runtime values are stored
-    public static final String CONFIGFILE = System.getProperty("user.home") +
-    		System.getProperty("file.separator") +
-    		".Atlantis-runtime_values.txt";
-    // main attribute which holds all data
-    private static Hashtable v = new Hashtable();
-
-    private static ALogger logger = ALogger.getLogger(ADefaultValues.class);
-
-    private ADefaultValues() {}
-
-
-
-    /**
-     * Variables controled by this class and their default values if the
-     * runtime config does not exist or if some values are missing in the file.
-     */
-    private static void setDefaultValues()
-    {
-    	String FILE_SEPAR = System.getProperty("file.separator");
-    	String homeDirectory = AGlobals.instance().getHomeDirectory();
-        v.put("LastEventFilesSourceDir", homeDirectory + "events" + FILE_SEPAR);
-        v.put("LastEventFilesSaveDir", homeDirectory);
-        v.put("LastCanvasPlotSaveDir", homeDirectory);
-        v.put("JiveXMLServerName", "");
-        v.put("JiveXMLServerPort", "48965");
-        v.put("GeometryName", "");
-
-    } // setDefaultValues() -------------------------------------------------
-
-
-
-    private static Hashtable readRuntimeConfigFile()
-    {
-        Hashtable helpTable = null;
-        String line = null;
-        String[] l = null;
-        String patternLine = ".*=.*";
-        Pattern pattern = Pattern.compile(patternLine);
-
-        try
-        {
-            BufferedReader in = new BufferedReader(new FileReader(CONFIGFILE));
-            helpTable = new Hashtable();
-            logger.info("Atlantis runtime configuration file: " + CONFIGFILE);
-
-            while((line = in.readLine()) != null)
-            {
-                Matcher matcher = pattern.matcher(line);
-                if(matcher.matches())
-                {
-                    l = line.split("=");
-                    if(l != null && l.length == 2)
-                    {
-                        logger.debug("Configuration value: " +
-                                          l[0] + " : " + l[1] + " read in");
-
-                        // remove quotes
-                        l[1] = l[1].replaceAll("\"", "");
-                        helpTable.put(l[0].trim(), l[1].trim());
-                    }
-                    else
-                    {
-                        logger.warn("Line: " + line + " from runtime " +
-                                      "configuration file: " + CONFIGFILE +
-                                      " does not match, line is ignored");
-                    }
-                }
-            } // while
-
-            // file is successfully read in a helper Hash table
-            in.close();
-
-            return helpTable;
-
-        } // try
-        catch(FileNotFoundException ex)
-        {
-            logger.warn("Runtime configuration file: " + CONFIGFILE +
-                          " not found, using default runtime values");
-        }
-        catch(IOException ex)
-        {
-            logger.error("I/O error while reading " + CONFIGFILE +
-                          " file, using default runtime values");
-        }
-
-        return null;
-
-    } // readRuntimeConfigFile() --------------------------------------------
-
-
-
-    public static void readRuntimeValues()
-    {
-        setDefaultValues();
-        Hashtable help = readRuntimeConfigFile();
-        if(help != null)
-        {
-            for(Enumeration e = v.keys() ; e.hasMoreElements() ;)
-            {
-                String s = (String) e.nextElement();
-                if(help.containsKey(s))
-                {
-                    // keys match, update the value
-                    v.remove(s);
-                    v.put(s, help.get(s));
-                }
-            }
-        }
-
-    } // readRuntimeValues() ------------------------------------------------
-
-
-
-    public static void saveRuntimeValues()
-    {
-        try
-        {
-            // if exists, shall be overwritten
-            BufferedWriter out = new BufferedWriter(new FileWriter(CONFIGFILE));
-
-            for(Enumeration e = v.keys() ; e.hasMoreElements() ;)
-            {
-                String s = (String) e.nextElement();
-                out.write(s + " = \"" + v.get(s) + "\"\n");
-            }
-            out.close();
-        }
-        catch(IOException ex)
-        {
-            logger.error("Can't open " + CONFIGFILE + " for writing, runtime " +
-                          "configuration values not saved");
-        }
-
-    } // saveRuntimeValues() ------------------------------------------------
-
-
-
-    public static String get(String key)
-    {
-        if(v.containsKey(key))
-        {
-            return(String) v.get(key);
-        }
-        else
-        {
-            logger.warn("Runtime configuration value: " + key + " does not exist", new Exception());
-            return null;
-        }
-
-    } // get() --------------------------------------------------------------
-
-
-
-    public static void set(String key, String value)
-    {
-        if(v.containsKey(key))
-        {
-            v.remove(key);
-            v.put(key, value);
-        }
-        else
-        {
-            logger.warn("Runtime configuration value: " + key + " does not exist", new Exception());
-        }
-
-    } // set() --------------------------------------------------------------
-
-
-
-} // class ADefaultValues ===================================================
diff --git a/graphics/AtlantisJava/src/atlantis/config/package.html b/graphics/AtlantisJava/src/atlantis/config/package.html
deleted file mode 100644
index 96bd70b4cacf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/config/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Classes for handling the configuration file and its contents.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/data/A3DPointData.java b/graphics/AtlantisJava/src/atlantis/data/A3DPointData.java
deleted file mode 100755
index b4354b3e564f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/A3DPointData.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.*;
-import atlantis.utils.*;
-
-
-public abstract class A3DPointData extends AHitData {
-
-  protected float[] rho;
-  protected float[] phi;
-  protected float[] z;
-  protected float[] x;
-  protected float[] y;
-
-
-  A3DPointData(AHashMap p, AEvent e) {
-    super(p,e);
-    if(p.get("x")!=null) {
-      x=p.getFloatArray("x");
-      y=p.getFloatArray("y");
-      z=p.getFloatArray("z");
-      rho=new float[numData];
-      phi=new float[numData];
-
-      // this is needed for the moment so that S3D sub and layer can be
-      // calculated from rph,phi,z rho phi from x y
-      for(int i=0; i<rho.length; ++i) {
-        double dx=x[i];
-        double dy=y[i];
-
-        rho[i]=(float)(Math.sqrt(dx*dx+dy*dy));
-        phi[i]=(float)(Math.atan2(dy, dx));
-        if(phi[i]<0.) phi[i]+=AMath.TWO_PI;
-      }
-    } else {
-      rho=p.getFloatArray("rho");
-      phi=p.getFloatArray("phi");
-      z=p.getFloatArray("z");
-      x=new float[numData];
-      y=new float[numData];
-      calculateXY(rho, phi, x, y);
-    }
-  }
-
-
-  public float[] getRho()
-  {
-      return rho;
-  }
-
-
-  public float[] getPhi()
-  {
-      return phi;
-  }
-
-
-  public float[] getX()
-  {
-      return x;
-  }
-
-
-  public float[] getY()
-  {
-      return y;
-  }
-
-
-  public float[] getZ()
-  {
-      return z;
-  }
-
-
-  protected void calculateRhoPhi()
-  {
-      calculateRhoPhi(x, y, rho, phi);
-  }
-
-  protected ACoord getYXUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=x[list];
-      v[i]=y[list];
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this);
-  }
-
-  protected ACoord getRZUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-    if(phiMid>AMath.TWO_PI) phiMid-=AMath.TWO_PI;
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=z[list];
-      double phiDiff=Math.abs(phi[list]-phiMid);
-      if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-      {
-          v[i] = rho[list];
-      }
-      else
-      {
-          v[i] = -rho[list];
-      }
-      index[i]=list;
-
-    }
-    return new ACoord(h, v, index, this);
-  }
-
-  protected ACoord getXZUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    double phi0=Math.toRadians(AProjectionXZ.getPhi());
-    double cosPhi0=Math.cos(phi0);
-    double sinPhi0=Math.sin(phi0);
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=z[list];
-      v[i]=x[list]*cosPhi0+y[list]*sinPhi0;
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this);
-  }
-
-  protected ACoord getYZUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    double phi0=Math.toRadians(AProjectionXZ.getPhi());
-    double cosPhi0=Math.cos(phi0);
-    double sinPhi0=Math.sin(phi0);
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=z[list];
-      v[i]=y[list]*cosPhi0-x[list]*sinPhi0;
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this);
-  }
-
-  protected ACoord get3DUser() {
-    makeDrawList();
-    double[][] hvo=AProjection3D.getRotated(numDraw, listdl, x, y, z);
-    double[] h=hvo[0];
-    double[] v=hvo[1];
-    int[] index=new int[numDraw];
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this);
-  }
-
-// does not fit in normal scheme
-  public double[][] get3DPoints() {
-    makeDrawList();
-    double[][] xyz =new double[numDraw][3];
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      xyz[i][0]=x[list];
-      xyz[i][1]=y[list];
-      xyz[i][2]=z[list];
-    }
-    return xyz;
-  }
-
-// does not fit in normal scheme
-  public int[] get3DPointsIndex() {
-    makeDrawList();
-    int[] index=new int[numDraw];
-    for(int i=0; i<numDraw; i++)
-      index[i]=listdl[i];
-    return index;
-  }
-
-  protected ACoord getFZUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=z[list];
-      v[i]=Math.toDegrees(phi[list]);
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this).includePhiWrapAround("FZ");
-  }
-
-  protected ACoord getFRUser() {
-    makeDrawList();
-    double[] h=new double[numDraw];
-    double[] v=new double[numDraw];
-    int[] index=new int[numDraw];
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      h[i]=rho[list];
-      v[i]=Math.toDegrees(phi[list]);
-      index[i]=list;
-    }
-    return new ACoord(h, v, index, this).includePhiWrapAround("FR");
-  }
-
-  protected ACoord getVPUser() {
-    makeDrawList();
-    // each point is drawn twice
-    int numTotal=2*numDraw;
-    double[] h=new double[numTotal];
-    double[] v=new double[numTotal];
-    int[] index=new int[numTotal];
-
-    double[] sign=new double[] {-1., 1.};
-    int num=0;
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      double eta=AParameterUtilities.eta(z[list], rho[list]);
-      double delEta=AProjectionVP.getDeltaEta(rho[list], z[list]);
-      for(int j=0; j<2; j++) {
-        h[num]=eta+sign[j]*delEta;
-        v[num]=AParameterUtilities.phi(x[list], y[list]);
-        index[num]=list;
-        num++;
-      }
-    }
-    return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AAODData.java b/graphics/AtlantisJava/src/atlantis/data/AAODData.java
deleted file mode 100644
index 8c412fd11398..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AAODData.java
+++ /dev/null
@@ -1,359 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.event.*;
-import java.util.Vector;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-public abstract class AAODData extends AData
-{
-    protected float[] eta;
-    protected float[] phi;
-    protected float[] pT;
-
-    AAODData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        eta = p.getFloatArray("eta");
-        phi = p.getFloatArray("phi");
-        pT = p.getFloatArray("pt");
-        int[] pdgId = p.getUnsureIntArray("pdgId");
-        if(pdgId != null)
-        {
-            for(int i=0; i<pT.length; i++)
-                pT[i] *= -AMath.getSign(pdgId[i]);
-        }
-
-        if (p.get("clusterKey") != null)
-        {
-            int[] clusterLinkCount = p.getUnsureIntArray("clusterLinkCount");
-            event.getAssociationManager().add(new AObjectsAssociation(getFullName(), "Cluster", 
-                    p.getStringArray("clusterKey"), p.getIntArray("clusterIndex"), clusterLinkCount, event));
-        }
-        if (p.get("trackKey") != null)
-        {
-            int[] trackLinkCount = p.getUnsureIntArray("trackLinkCount");
-            event.getAssociationManager().add(new AObjectsAssociation(getFullName(), "Track",
-                    p.getStringArray("trackKey"), p.getIntArray("trackIndex"), trackLinkCount, event));
-        }
-    }
-
-
-    public float getEta(int index)
-    {
-        return eta[index];
-    }
-
-
-    public float getPhi(int index)
-    {
-        return phi[index];
-    }
-
-
-    public float getPT(int index)
-    {
-        return pT[index];
-    }
-
-
-    public float[] getEta()
-    {
-        return eta;
-    }
-
-
-    public float[] getPhi()
-    {
-        return phi;
-    }
-
-
-    public float[] getPT()
-    {
-        return pT;
-    }
-
-
-    protected int internalColor()
-    {
-        int colorFunction=parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction==0)
-            colorByConstant();
-        else if(colorFunction==1)
-            colorByIndex();
-
-        return 1;
-    }
-
-    public String getNameScreenName()
-    {
-        return getParameterGroup();
-    }
-
-    protected int getDrawOrFill()
-    {
-        return AGraphics.FILL;
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutPhi(phi);
-        cutEta(eta);
-    }
-
-    // info on AOD data contained in V-Plot rubberband selection
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumP = 0.;
-        double sumPt = 0.;
-
-        for (int i = 0; i < numDraw; ++i)
-        {
-            sumPt += Math.abs(pT[listdl[i]]);
-            sumP += Math.abs(pT[listdl[i]] / Math.cos(AMath.lambda(eta[listdl[i]])));
-        }
-
-        StringBuffer msg = new StringBuffer("");
-        msg.append(numDraw);
-        msg.append(" ");
-        msg.append(getFullName());
-        msg.append("  sum(PT) = ");
-        msg.append(String.format("%.1f", sumPt));
-        msg.append("  sum(P) = ");
-        msg.append(String.format("%.1f",sumP));
-
-        return msg.toString();
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP)
-        {
-            drawVP(window, ag, projection);
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        double dphi = Math.toRadians(0.5);
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-            double cosPlus = Math.cos(phiPlus);
-            double sinPlus = Math.sin(phiPlus);
-            double cosMinus = Math.cos(phiMinus);
-            double sinMinus = Math.sin(phiMinus);
-            //same rhoMax/Minus values used in AJetData
-            double rhoMax = 1200;
-            double rhoMinus = 400;
-            //if no composite particles increase AOD size
-            Vector<String> keys = event.getCollections().get("CompositeParticle");
-            if(keys == null || !parameterStore.get("Data", "CompositeParticle").getStatus())
-                rhoMax=1200;
-            else if(PARAMETER_GROUP.equals("CompositeParticle"))
-            {
-                // display composite particle outside of normal AOD data
-                rhoMax=1200;
-                rhoMinus=800;
-            }
-
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double rhoPlus = rhoMax;
-            double s = 10;
-            if(Math.abs(pT[list]) < maxEnergy)
-                rhoPlus = rhoMinus + (rhoMax - rhoMinus) * s *Math.abs(pT[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = rhoMinus * cosPlus;
-            hv[1][i][0] = rhoMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = rhoPlus * cosPlus;
-            hv[1][i][1] = rhoPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = rhoPlus * cosMinus;
-            hv[1][i][2] = rhoPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = rhoMinus * cosMinus;
-            hv[1][i][3] = rhoMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getFRUser()
-    {
-        ACoord coordFR = getYXUser().convertYXToFR().includePhiWrapAround("FR");
-        return coordFR;
-    }
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        double dtheta = Math.toRadians(0.5);
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list]-phiMid);
-            double rSign;
-            if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            // calculate theta based on the eta value
-            double theta = Math.atan(Math.exp(-Math.abs(eta[list]))) * 2.0;
-            if ((eta[list] > 0.) && (rSign == -1))
-                theta = 2 * Math.PI - theta;
-            else if ((eta[list] < 0.) && (rSign == -1))
-                theta += Math.PI;
-            else if ((eta[list] < 0.) && (rSign == 1))
-                theta = Math.PI - theta;
-
-            double thetaPlus = theta + dtheta;
-            double thetaMinus = theta - dtheta;
-            double cosPlus = Math.cos(thetaPlus);
-            double sinPlus = Math.sin(thetaPlus);
-            double cosMinus = Math.cos(thetaMinus);
-            double sinMinus = Math.sin(thetaMinus);
-
-            // decide the region based on the theta value
-            final byte TOP_BOTTOM = 0;
-            final byte LEFT_RIGHT = 1;
-            byte region = TOP_BOTTOM;
-            // hard-coded value is based on the values in Geometry
-            if(Math.abs(Math.tan(theta)) < 0.8)
-                region = LEFT_RIGHT;
-
-            double radiusMinus = 0.;
-            switch(region)
-            {
-                case TOP_BOTTOM:
-                    if(PARAMETER_GROUP.equals("CompositeParticle"))
-                        radiusMinus = 750 / Math.abs(Math.sin(theta));
-                    else
-                        radiusMinus = 550 / Math.abs(Math.sin(theta));
-                    break;
-                case LEFT_RIGHT:
-                    if(PARAMETER_GROUP.equals("CompositeParticle"))
-                        radiusMinus = 850 / Math.abs(Math.cos(theta));
-                    else
-                        radiusMinus = 700 / Math.abs(Math.cos(theta));
-                    break;
-            }
-            //same rhoMax/Minus values used in AJetData
-            double radiusMax = radiusMinus + 500;
-            //if no composite particles increase AOD size
-            Vector keys = (Vector) event.getCollections().get("CompositeParticle");
-            if(keys == null || !parameterStore.get("Data", "CompositeParticle").getStatus())
-                radiusMax+=200;
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double radiusPlus = radiusMax;
-            double s = 10;
-            if(Math.abs(pT[list]) < maxEnergy)
-                radiusPlus = radiusMinus + (radiusMax - radiusMinus) * s * Math.abs(pT[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = radiusMinus * cosPlus;
-            hv[1][i][0] = radiusMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = radiusPlus * cosPlus;
-            hv[1][i][1] = radiusPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = radiusPlus * cosMinus;
-            hv[1][i][2] = radiusPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = radiusMinus * cosMinus;
-            hv[1][i][3] = radiusMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index=new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list=listdl[i];
-            h[i]=eta[list];
-            v[i]=Math.toDegrees(phi[list]);
-            index[i]=list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    private void drawVP(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        ACoord centers = window.calculateDisplay(getUser(projection));
-        int[] drawlist = centers.index;
-        double eLimit = 0.025;
-        int numPoints = 25;
-        if(PARAMETER_GROUP.equals("CompositeParticle"))
-            numPoints = 5;
-        double[][][] hv = new double[2][drawlist.length][numPoints];  //circle
-        // a cross at centre
-        double[][][] hv_cross1 = new double[2][drawlist.length][2];
-        double[][][] hv_cross2 = new double[2][drawlist.length][2];
-        int crossLength = 6;
-
-        for(int i=0; i<drawlist.length; ++i)
-        {
-            int list = drawlist[i];
-            double e;
-            e = Math.abs(pT[list]);
-            int d = (int)(Math.sqrt((e/eLimit)/Math.PI));
-            if(d == 0) d = 1;
-            for(int j=0; j<numPoints; j++)
-            {
-                hv[0][i][j]=centers.hv[0][0][i]+d*Math.cos(Math.PI*2*j/(numPoints-1));
-                hv[1][i][j]=centers.hv[1][0][i]+d*Math.sin(Math.PI*2*j/(numPoints-1));
-            }
-            for(int j=0; j<2; j++)
-            {
-                hv_cross1[0][i][j]=centers.hv[0][0][i]+crossLength/2*Math.cos(Math.PI*(1+4*j)/4);
-                hv_cross1[1][i][j]=centers.hv[1][0][i]+crossLength/2*Math.sin(Math.PI*(1+4*j)/4);
-                hv_cross2[0][i][j]=centers.hv[0][0][i]+crossLength/2*Math.cos(Math.PI*(3+4*j)/4);
-                hv_cross2[1][i][j]=centers.hv[1][0][i]+crossLength/2*Math.sin(Math.PI*(3+4*j)/4);
-            }
-        }
-        ag.draw(new ACoord(hv, drawlist, this, ACoord.POLYLINES));
-        ag.draw(new ACoord(hv_cross1, drawlist, this, ACoord.POLYLINES));
-        ag.draw(new ACoord(hv_cross2, drawlist, this, ACoord.POLYLINES));
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ABJetData.java b/graphics/AtlantisJava/src/atlantis/data/ABJetData.java
deleted file mode 100755
index 7c047a26efa9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ABJetData.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.A3Vector;
-import atlantis.utils.A4Vector;
-
-/**
- * Reconstructed B-Jet
- */
-public class ABJetData extends AAODData
-{
-    private float[] lhSig;
-    private float[] weight;
-    private String[] label;
-    private float[] mass;
-    //Variable to ensure backwards compatability
-    protected boolean has4Vect = false;
-
-    ABJetData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        lhSig=p.getFloatArray("lhSig");
-        weight=p.getFloatArray("weight");
-        label=p.getUnsureStringArray("label");
-        if (p.get("mass") != null) {
-          mass=p.getFloatArray("mass"); 
-          has4Vect = true;
-        }
-    }
-
-    public String getParameterGroup()
-    {
-        return "BJet";
-    }
-
-    public float getweight(int index)
-    {
-        return weight[index];
-    }
-
-    public float getlhSig(int index)
-    {
-        return lhSig[index];
-    }
-    
-    public String getLabel(int index)
-    {
-    	return label[index];
-    }
-
-        public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        if(has4Vect){
-            for (int i =    0; i < num; ++i)
-            {
-                int k = list[i];
-                A4Vector start = new A4Vector();
-                start.setPtEtaPhiM(pT[k],eta[k],phi[k],mass[k]);
-                sum.add(start);
-            }
-        }else{
-            for (int i =    0; i < num; ++i)
-            {
-                int k = list[i];
-                A3Vector start = A3Vector.fromRhoPhiZ(0., 0., 0.);
-                double tL = AMath.tanLambda(eta[k]);
-                A3Vector stop = A3Vector.fromRhoPhiZ(1., phi[k], tL);
-                A3Vector v = (stop.subtract(start)).normalize();
-                double p = pT[k] / Math.sqrt(1. - v.z * v.z);
-                sum.add(new A4Vector(v.scale(p), 0.));
-            }
-        }
-        return sum;
-    }
-
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsObjects", "BJetPt", " |ET|", pT);
-        cut("CutsObjects", "BJetlhSig", " |lhSig|", lhSig);
-        cut("CutsObjects", "BJetweight", " |weight|", weight);
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",phi[index])+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-
-    	StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        if(label != null)
-        {
-        	msg.append("\n label = ");
-        	msg.append(label[index]);
-        }
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",phi[index]));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-        msg.append("\n lhSig = ");
-        msg.append(lhSig[index]);
-        msg.append("\n weight = ");
-        msg.append(weight[index]);
-
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ACSCDData.java b/graphics/AtlantisJava/src/atlantis/data/ACSCDData.java
deleted file mode 100755
index d724dfe7fc75..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ACSCDData.java
+++ /dev/null
@@ -1,304 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-
-public class ACSCDData extends AMuonHitData 
-{
-    private static final double CSC_TILT_ANGLE = Math.toRadians(-11.59);
-    
-    float[] charge;
-    float[] length;
-    int[] gasGap;
-    
-    private static ALogger logger = ALogger.getLogger(ACSCDData.class);    
-    
-    public String getParameterGroup()
-    {
-        return "CSC";
-    }
-    
-    public String getName()
-    {
-        return "CSCD";
-    }
-    
-    public String getNameScreenName()
-    {
-        return "CSC Digits";
-    }
-    
-    ACSCDData(AHashMap p, AEvent e) 
-    {
-        super(p,e);
-        
-        if (p.get("length") != null) {
-            length=p.getFloatArray("length");
-        } else {
-            // If no length is given, just use an arbitrary minimum length
-            length = new float[numData];
-            for (int i=0; i<numData; i++)
-                length[i] = 10.f;
-        }
-        
-        charge=p.getFloatArray("charge");
-        
-        gasGap = new int[numData];
-        for (int i=0; i<numData; i++) {
-            try {
-                gasGap[i] = AIdHelper.cscWireLayer(id[i]);
-            } catch (AAtlantisException aex) {
-                gasGap[i] = 0;
-            }
-        }
-    }
-    
-    protected int getStation(int index) 
-    {
-        return 0;
-    }
-    
-    protected int getSub(int index) 
-    {
-        try {
-            if (AIdHelper.stationEta(id[index]) < 0) {
-                return 0;
-            } else {
-                return 1;
-            }
-
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    public int getSector(int index) 
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(2) == 'L') {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1);
-            } else {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1) + 1;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding CSCD identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    protected boolean getMeasuresPhi(int index) 
-    {
-        try {
-            if (AIdHelper.cscMeasuresPhi(id[index]) == 1) {
-                return true;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding CSCD identifier", e);
-        }
-        
-        return false;
-    }
-    
-    protected void applyCuts() 
-    {
-        super.applyCuts();
-        cut("CutsMuon", "Charge", " Charge", charge);
-        cutPhi(phi);
-        cutEta(rho, z);
-    }
-        
-    protected int getDrawOrFill() 
-    {
-        return AGraphics.FILL;
-    }
-    
-    protected ACoord getYXUser() 
-    {
-        makeDrawList();
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_MDT_INNER)
-            return ACoord.NO_DATA;
-        
-        AParameter cscGasGap = parameterStore.get("YX", "CSCGasGap");
-        if (cscGasGap.getStatus())
-            cutArray(gasGap, cscGasGap.getI(), "CSC Gas Gap");
-        
-        double[][][] hv = new double[2][numDraw][2];
-        int index[] = new int[numDraw];
-        
-        try {
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-
-                if (AIdHelper.cscMeasuresPhi(id[j]) == 1) {
-                    double phi = Math.atan2(y[j], x[j]);
-                    double rho = Math.sqrt(x[j]*x[j] + y[j]*y[j]);
-                    double drho = length[j]/2.;
-                
-                    hv[0][i][0] = (rho - Math.cos(CSC_TILT_ANGLE) * drho) * Math.cos(phi);
-                    hv[1][i][0] = (rho - Math.cos(CSC_TILT_ANGLE) * drho) * Math.sin(phi);
-                    hv[0][i][1] = (rho + Math.cos(CSC_TILT_ANGLE) * drho) * Math.cos(phi);
-                    hv[1][i][1] = (rho + Math.cos(CSC_TILT_ANGLE) * drho) * Math.sin(phi);
-                } else {
-                    double phi = Math.atan2(y[j], x[j]);
-                    double rho = Math.sqrt(x[j]*x[j] + y[j]*y[j] + length[j]*length[j]/4.);
-                    double dphi = Math.asin((length[j]/2.) / rho);
-
-                    hv[0][i][0] = rho * Math.cos(phi - dphi);
-                    hv[1][i][0] = rho * Math.sin(phi - dphi);
-                    hv[0][i][1] = rho * Math.cos(phi + dphi);
-                    hv[1][i][1] = rho * Math.sin(phi + dphi);
-                }
-            }
-
-            return new ACoord(hv, index, this);
-        } catch (AAtlantisException e) {
-            AOutput.append("Error decoding CSC identifier: " + e.getMessage(), ALogInterface.BAD_COMMAND);
-            return ACoord.NO_DATA;
-        }
-    }
-    
-    protected ACoord getFRUser() 
-    {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-    
-    protected ACoord getXZRZUser(int sign[]) 
-    {
-        double[][][] hv = new double[2][numDraw][];
-        int index[] = new int[numDraw];
-        
-        try {
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-
-                double rho = Math.sqrt(x[j]*x[j] + y[j]*y[j]);
-                
-                if (AIdHelper.cscMeasuresPhi(id[j]) == 1) {
-                    double drho = length[j]/2.;
-		    if(z[j] < 0){
-			hv[0][i] = new double[] {z[j] - sign[i]*Math.sin(CSC_TILT_ANGLE) * drho,
-						 z[j] + sign[i]*Math.sin(CSC_TILT_ANGLE) * drho };
-
-			hv[1][i] = new double[] { sign[i] * (rho + sign[i]*Math.cos(CSC_TILT_ANGLE) * drho),
-						  sign[i] * (rho - sign[i]*Math.cos(CSC_TILT_ANGLE) * drho) };
-
-		    }else{
-			hv[0][i] = new double[] {z[j] - Math.sin(CSC_TILT_ANGLE) * drho,
-						 z[j] + Math.sin(CSC_TILT_ANGLE) * drho };
-		    
-
-			hv[1][i] = new double[] { sign[i] * (rho - Math.cos(CSC_TILT_ANGLE) * drho),
-						  sign[i] * (rho + Math.cos(CSC_TILT_ANGLE) * drho) };
-		    }
-		
-
-		    
-                } else {
-                    hv[0][i] = new double[] { z[j] };
-                    hv[1][i] = new double[] { sign[i] * rho };
-                }
-	
-	    }
-	
-            return new ACoord(hv, index, this);
-	}
-         catch (AAtlantisException e) {
-            AOutput.append("Error decoding CSC identifier: " + e.getMessage(), ALogInterface.BAD_COMMAND);
-            return ACoord.NO_DATA;
-	 }
-	
-    }
-	
-	
-
-	
-     protected ACoord getXZUser() {
-	 makeDrawList();
-	 cutMuonSector(sector);
-	 
-	 int[] sign = new int[numDraw];
-	 int sect = (int) Math.round(parameterStore.get("XZ", "Phi").getD() / 22.5);
-	 
-	 for(int i=0; i<numDraw; i++) {
-	     if (sector[listdl[i]] == sect)
-		 sign[i] = 1;
-	     else
-		 sign[i] = -1;
-	 }
-	 
-	 return getXZRZUser(sign);
-    }
-    
-    protected ACoord getRZUser() {
-        makeDrawList();
-        
-        int[] sign = new int[numDraw];
-        for (int i=0; i<numDraw; i++) {
-            int j = listdl[i];
-            sign[i] = AParameterUtilities.getRhoSign(x[j], y[j]);
-        }
-        
-        return getXZRZUser(sign);
-    }
-
-    protected ACoord getFZUser() 
-    {
-        double[][][] hv = new double[2][numDraw][];
-        int index[] = new int[numDraw];
-        
-        try {
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-
-                double rho = Math.sqrt(x[j]*x[j] + y[j]*y[j]);
-                double phi = Math.toDegrees(Math.atan2(y[j], x[j]));
-                
-                if (AIdHelper.cscMeasuresPhi(id[j]) == 1) {
-                    double drho = length[j]/2.;
-                
-                    hv[0][i] = new double[] { z[j] - Math.sin(CSC_TILT_ANGLE) * drho,
-                                              z[j] + Math.sin(CSC_TILT_ANGLE) * drho };
-                    hv[1][i] = new double[] { phi, phi };
-                } else {
-                    double dphi = Math.toDegrees(Math.atan2(length[j]/2., rho));
-                    
-                    hv[0][i] = new double[] { z[j], z[j] };
-                    hv[1][i] = new double[] { phi-dphi, phi+dphi };
-                }
-            }
-
-            return new ACoord(hv, index, this);
-        } catch (AAtlantisException e) {
-            AOutput.append("Error decoding CSCD identifier: " + e.getMessage(), ALogInterface.BAD_COMMAND);
-            return ACoord.NO_DATA;
-        }
-    }
-        
-    // only constant color possible for the strips
-    protected int internalColor() 
-    {
-        int constantColor=parameterStore.get(PARAMETER_GROUP, "Strip").getI();
-        for(int i=0; i<numData; i++)
-            color[i]=(byte)constantColor;
-        return 0;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ACSCData.java b/graphics/AtlantisJava/src/atlantis/data/ACSCData.java
deleted file mode 100755
index 5149a5133bd3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ACSCData.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-
-public class ACSCData extends AMuonHitData 
-{    
-    float[] sigma;
-    
-    private static ALogger logger = ALogger.getLogger(ACSCData.class);    
-    
-    public String getParameterGroup()
-    {
-        return "CSC";
-    }
-    
-    public String getName()
-    {
-        return "CSC";
-    }
-    
-    public String getNameScreenName()
-    {
-        return "CSC";
-    }
-    
-    ACSCData(AHashMap p, AEvent e) 
-    {
-        super(p,e);
-        sigma=p.getFloatArray("sigma");
-    }
-
-    protected int getStation(int index) 
-    {
-        return 0;
-    }
-    
-    protected int getSub(int index) 
-    {
-        try {
-            if (AIdHelper.stationEta(id[index]) < 0) {
-                return 0;
-            } else {
-                return 1;
-            }
-
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    public int getSector(int index) 
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(2) == 'L') {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1);
-            } else {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1) + 1;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding CSC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    protected boolean getMeasuresPhi(int index) 
-    {
-        try {
-            if (AIdHelper.cscMeasuresPhi(id[index]) == 1) {
-                return true;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding CSC identifier", e);
-        }
-        
-        return false;
-    }
-    
-    protected void applyCuts() 
-    {
-        super.applyCuts();
-        cutPhi(phi);
-        cutEta(rho, z);
-    }
-    
-    protected ACoord getYXUser() 
-    {
-        makeDrawList();
-        int mode=parameterStore.get("YX", "Mode").getI();
-        if(mode!=5)
-            numDraw=0;
-        
-        double[] h=new double[numDraw];
-        double[] v=new double[numDraw];
-        int[] index=new int[numDraw];
-        
-        for(int i=0; i<numDraw; i++) 
-        {
-            int list=listdl[i];
-            h[i]=x[list];
-            v[i]=y[list];
-            index[i]=list;
-        }
-        return new ACoord(h, v, index, this);
-    }
-    
-    protected ACoord getXZRZUser(int[] sign) 
-    {
-        int numPoints=2;
-        
-        double[][][] hv=new double[2][numDraw][numPoints];
-        int[] index=new int[numDraw];
-        
-        // space point resolution is 60um in rz and 5mm in rphi (due to no uniform b field)
-        // from muonTDR page 201
-        // double dRho=0.254;
-        // double dZMax=1.25;
-        
-        double alpha=-11.59;
-        double sinAlphaCopy=Math.sin(Math.toRadians(alpha));
-        double cosAlphaCopy=Math.cos(Math.toRadians(alpha));
-        
-        for(int i=0; i<numDraw; i++) 
-        {
-            int list=listdl[i];
-            
-            double rMid=sign[i]*getSectorRho(sector[list], rho[list], phi[list]);
-            double zMid=z[list];
-            // double dZ = 2. * dZMax * Math.min(charge[list] / (25. * 75000.), 0.9);
-            double dRho=sigma[list];
-            
-            double sinAlpha=sinAlphaCopy;
-            double cosAlpha=cosAlphaCopy;
-            
-            if(zMid>0.)
-                cosAlpha*=-1.;
-            if(rMid<0.)
-                sinAlpha*=-1.;
-            
-            hv[0][i][0]=zMid-sinAlpha*dRho;
-            hv[0][i][1]=zMid+sinAlpha*dRho;
-            hv[1][i][0]=rMid+cosAlpha*dRho;
-            hv[1][i][1]=rMid-cosAlpha*dRho;
-            index[i]=list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-    
-    protected int getDrawOrFill() 
-    {
-        return AGraphics.DRAW;
-    }
-        
-    protected ACoord getRZUser() 
-    {
-        makeDrawList();
-        int[] sign=new int[numDraw];
-        double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        
-        for(int i=0; i<numDraw; i++) 
-        {
-            double phiDiff=Math.abs(phi[listdl[i]]-phiMid);
-            
-            sign[i]=-1;
-            if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-                sign[i]=1;
-        }
-        return getXZRZUser(sign);
-    }
-    
-    protected ACoord getXZUser() 
-    {
-        makeDrawList();
-        cutMuonSector(sector);
-        int[] sign=new int[numDraw];
-        int sect=(int)Math.round(parameterStore.get("XZ", "Phi").getD() / 22.5);
-        
-        for(int i=0; i<numDraw; i++) 
-        {
-            sign[i]=1;
-            if(sector[listdl[i]]!=sect)
-                sign[i]=-1;
-        }
-        return getXZRZUser(sign);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ACalorimeterData.java b/graphics/AtlantisJava/src/atlantis/data/ACalorimeterData.java
deleted file mode 100644
index e82e3d4a07ef..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ACalorimeterData.java
+++ /dev/null
@@ -1,2662 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AEvent;
-import java.awt.Color;
-import java.util.Vector;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.ADrawCalorimeterSummedEndcaps;
-import atlantis.canvas.ALegendWindow;
-import atlantis.canvas.AWindow;
-import atlantis.event.AData;
-import atlantis.geometry.ABarrelCalorimeterDetector;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.geometry.AEndcapCalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.ADrawnGraphics2D;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.utils.APolygon;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-
-/**
- * The superclass of all the ATLAS calorimeters. Contains also methods for
- * drawing groups of calorimeters together. Calorimeters can not be drawn
- * individually due to coupling of energy scale and the standard v-plot picture.
- * Each calorimeter also provides histograms.
- *
- * @author Eric Jansen
- */
-public abstract class ACalorimeterData extends AHitData implements AHistogramData
-{
-    private static ALogger logger = ALogger.getLogger(ACalorimeterData.class);
-    
-    // Constants as defined in the configuration file.
-    // Energy mode options.
-    public static final int ENERGY_MODE_SUM_LIN = 0;
-    public static final int ENERGY_MODE_MAX_LIN = 1;
-    public static final int ENERGY_MODE_SUM_LOG = 2;
-    public static final int ENERGY_MODE_MAX_LOG = 3;
-    public static final int ENERGY_MODE_SUM_SQRT = 4;
-    public static final int ENERGY_MODE_MAX_SQRT = 5;
-
-    // Energy calibration options.
-    public static final int ENERGY_CALIB_UNKNOWN = -1;
-    public static final int ENERGY_CALIB_OVERALL = 0;
-    public static final int ENERGY_CALIB_BY_TYPE = 1;
-    public static final int ENERGY_CALIB_BY_CALO = 2;
-
-    // Color functions.
-    public static final int COLOR_FUNC_CONSTANT = 0;
-    public static final int COLOR_FUNC_SUBDET = 1;
-    public static final int COLOR_FUNC_CLUSTER = 2;
-    public static final int COLOR_FUNC_SAMPLING = 3;
-    public static final int COLOR_FUNC_ENERGY = 4;
-    public static final int COLOR_FUNC_JET = 5;
-    public static final int COLOR_FUNC_TYPE = 6;
-    public static final int COLOR_FUNC_TIME = 7;
-
-    private static final float SCALE_FACTOR_VPLOT = 20;
-
-    public String CALORIMETER_NAME;
-
-    // Properties needed for the histograms.
-    protected double innerR;
-    protected double outerR;
-    protected double innerZ;
-    protected double outerZ;
-    protected double outerEta;
-
-    protected double phiGranularity = 0.0;
-    protected double etaGranularity = 0.0;
-    protected AParameter histoScale;
-
-    // This constant contains the highest phi or eta index for this data type.
-    // Its value determines the amount of memory that is allocated for certain
-    // data structures.
-    protected short MAX_HIT_INDEX = 512;
-    protected static final double NON_SCALING_FACTOR = 0.85;
-
-    protected float[] phi;
-    protected float[] eta;
-    protected float[] dphi;
-    protected float[] deta;
-    protected float[] energy;
-    protected float[] et;
-    protected float[] etSum;
-
-    // Et is more useful than pure Energy, so use Et to replace Energy
-    // protected float[] energySum;
-
-    protected byte[] side;
-    protected short[] etaIndex;
-    protected short[] phiIndex;
-    protected int[] sampling;
-    protected short[] detector;
-
-    private int[][] cellTable;
-
-    protected double minDensityECAL;
-    protected double maxDensityECAL;
-    protected double minDensityHCAL;
-    protected double maxDensityHCAL;
-    
-    // following attributes occur at majority of calorimeter subdetectors
-    // which inherit from here, but not at all of them (TILE is usually
-    // the exception), checks are always done, so it's save ;
-    // retrieving the data from XML is pre-checked so that not to spit out
-    // unnecessary complaints
-    protected int[] feedThrough = null;
-    protected int[] channel = null;
-    protected int[] slot = null;
-    protected int[] BadCell = null;
-
-
-    ACalorimeterData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        CALORIMETER_NAME = getName();
-        
-        energy = p.getFloatArray("energy");
-        et = new float[numData];
-
-        phi = new float[numData];
-        eta = new float[numData];
-        deta = new float[numData];
-        dphi = new float[numData];
-
-        // energySum = new float[numData];
-        etSum = new float[numData];
-
-        side = new byte[numData];
-        etaIndex = new short[numData];
-        phiIndex = new short[numData];
-        sampling = new int[numData];
-        detector = new short[numData];
-
-        histoScale = parameterStore.get(CALORIMETER_NAME, "HistoScale");
-        
-        // using AHashMap.getUnsureIntArray() does not complain if key is
-        // not found - these parameters may not be present in all calorimetry
-        // classes inherited from ACalorimeterData and using this call
-        // also covers backwards compatibility, and is safe - null is returned
-        // if key does not exist
-        feedThrough = p.getUnsureIntArray("feedThrough");
-        channel = p.getUnsureIntArray("channel");
-        slot = p.getUnsureIntArray("slot");
-        BadCell = p.getUnsureIntArray("BadCell");
-        
-    }
-
-    /**
-     * Get the name used for associating this datatype/collection. For the 
-     * calorimeter cells no storegate key is used.
-     * @return 
-     */
-    public String getFullName() {
-        return getName();
-    }
-
-    /**
-     * getADCCountsData()
-     * reads in adcCounts array from XML data. This method is currently used
-     * for LAr, FCAL, HEC and MBTS (TILE has two adcCounts arrays)
-     * @param p AHashMap
-     */
-    protected int[][] getADCCountsData(AHashMap p)
-    {
-        int[][] adcCounts = null;
-        int[] adc = (p.get("adcCounts") != null) ? p.getIntArray("adcCounts") : null;
-        if(adc != null)
-        {
-            adcCounts = new int[numData][0];
-            // multiple numbers are associated with each cell
-            int multiple = adc.length / numData;
-            int num = 0;
-            for(int i = 0; i < numData; i++)
-            {
-                adcCounts[i] = new int[multiple];
-                for (int j = 0; j < multiple; j++)
-                {
-                    adcCounts[i][j] = adc[num]; // fill in array for each cell
-                    num++;
-                }
-            }
-        } // if(adc != null)
-
-        return adcCounts;
-
-    } // getADCCountsData() -------------------------------------------------
-
-
-
-    /**
-     * Class used to merge ACoord[] objects.
-     */
-    public static class ACoordArray
-    {
-        private Vector<ACoord> v = new Vector<ACoord>();
-
-        public void add(ACoord[] c)
-        {
-            for (int i = 0; i < c.length; i++)
-            {
-                v.addElement(c[i]);
-            }
-        }
-
-        public ACoord[] getArray()
-        {
-            ACoord[] c = new ACoord[v.size()];
-            for (int i = 0; i < v.size(); i++)
-            {
-                c[i] = (ACoord) v.elementAt(i);
-            }
-            return c;
-        }
-    }
-
-
-
-    /**
-     * Assigns the hits to a geometry object.
-     */
-    public void makeHitToGeometryMapping()
-    {
-        int numNotFound = 0;
-
-        // In detector[] we store the hit-to-geometry object mapping.
-        for (int i = 0; i < numData; i++)
-        {
-            detector[i] = (short) ACalorimeterDetector.getDetectorIndex(id[i]);
-
-            if (detector[i] >= 0)
-            {
-                eta[i] = (float) ACalorimeterDetector.get(detector[i]).getEta(etaIndex[i], side[i]);
-                deta[i] = (float) ACalorimeterDetector.get(detector[i]).getDeltaEta();
-                phi[i] = (float) ACalorimeterDetector.get(detector[i]).getPhi(phiIndex[i]);
-                dphi[i] = (float) ACalorimeterDetector.get(detector[i]).getDeltaPhi();
-            }
-            else if (!CALORIMETER_NAME.equals("FCAL"))
-            {
-                eta[i] = 0.0f;
-                deta[i] = 0.0f;
-                phi[i] = 0.0f;
-                dphi[i] = 0.0f;
-                numNotFound++;
-            }
-        }
-        if (numNotFound > 0)
-        {
-            System.err.println(numNotFound + "/" + numData + " cells in " +
-                    CALORIMETER_NAME + " not mapped to a geometry object. These will not be drawn.");
-        }
-
-        // This depends on the number of geometry objects.
-        cellTable = new int[2 * ACalorimeterDetector.count()][2 * MAX_HIT_INDEX];
-    }
-
-    /**
-     * Returns the name of the calorimeter this data object belongs to.
-     *
-     * @return calorimeter name
-     */
-    public String getCalorimeterName()
-    {
-        return CALORIMETER_NAME;
-    }
-
-
-    /**
-     * Method is called from APickInteraction and plots pulse shapes plots
-     * for a cell when picked.
-     * @param index int
-     */
-    public void plotPulseShapes(int index, boolean withcurve) {
-        int[][] adc = getADCCounts(index);
-        if (adc == null) {
-            logger.warn("Pulse shape plot requested but no adc data available");
-            return;
-        }
-        
-        if (!withcurve) {
-            APulseShapePlot.plotADCCounts(adc, getPulseTitleString(index), null);
-        } else {
-            double[][] ps = getPulseShape(index);
-            if (ps == null) {
-                logger.warn("No pulse shape information available, just plotting adc instead");
-                APulseShapePlot.plotADCCounts(adc, getPulseTitleString(index), null);
-            } else {
-                APulseShapePlot.plotRealPulseShapes(adc, ps,
-                        getPulseStep(index), getPulseSubtitle(index), getPulseTitleString(index));
-            }
-        }
-    }
-
-    /**
-     * 
-     */
-    protected int[][] getADCCounts(int index) { return null; }
-    
-    protected double[][] getPulseShape(int index) { return null; }
-
-    protected double getPulseStep(int index) { return 1.0; }
-    
-    protected String[] getPulseSubtitle(int index) { return null; }
-    
-    /**
-     * Returns calorimeter type (ECAL or HCAL) of a certain hit.
-     *
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public abstract String getCalorimeterType(int index);
-    
-    /**
-     * Returns the ACalorimeterDetector of a certain hit.
-     *
-     * @param index int hit index
-     * @return ACalorimeterDetector
-     */
-    public ACalorimeterDetector getDetector(int index) {
-        return ACalorimeterDetector.get(detector[index]);
-    }
-
-    /**
-     * Recalculates eta from r and z in case the user wants to have their eta
-     * with respect to the primary vertex instead of 0. The calculation is a
-     * little different from the other calorimeter classes because this one
-     * contains both barrel and endcap data.
-     *
-     * @param index int index of hit in data
-     * @return double eta value
-     */
-    public double getEta(int index)
-    {
-        double r, z;
-
-        if (!parameterStore.get("VP", "EtaVertex").getStatus() || detector[index] < 0)
-        {
-            return this.eta[index];
-        }
-
-        if (ACalorimeterDetector.get(detector[index]) instanceof ABarrelCalorimeterDetector)
-        {
-            r = ACalorimeterDetector.get(detector[index]).getR();
-            z = r * AMath.tanLambda(eta[index]);
-        }
-        else
-        {
-            z = ACalorimeterDetector.get(detector[index]).getZ();
-            r = z / AMath.tanLambda(eta[index]);
-        }
-
-        return AParameterUtilities.eta(z, r);
-    }
-
-    /**
-     * Returns the calorimeter sampling (or layer) of a certain hit.
-     *
-     * @param index int hit index
-     * @return int sampling/layer
-     */
-    public int getSampling(int index)
-    {
-        return sampling[index];
-    }
-    
-    /**
-     * Returns the side of the calorimeter of a certain hit.
-     * 
-     * @param index int hit index
-     * @return int side
-     */
-    public int getSide(int index)
-    {
-        return side[index];
-    }
-
-    /**
-     * Returns the cell size in eta of a certain hit.
-     *
-     * @param index int hit index
-     * @return double cell size in eta
-     */
-    public double getdEta(int index)
-    {
-        return deta[index];
-    }
-
-    /**
-     * Returns the cell size in phi of a certain hit.
-     *
-     * @param index int hit index
-     * @return double cell size in phi
-     */
-    public double getdPhi(int index)
-    {
-        return dphi[index];
-    }
-
-    /**
-     * Returns the phi coordinate of a certain hit.
-     *
-     * @param index int hit index
-     * @return double phi coordinate.
-     */
-    public double getPhi(int index)
-    {
-        return phi[index];
-    }
-
-    /**
-     * Returns the transverse energy of a hit.
-     *
-     * @param index int hit index
-     * @return float transverse energy
-     */
-    public float getET(int index)
-    {
-        return et[index];
-    }
-
-    /**
-     * Returns the transverse energy of a list of hits.
-     *
-     * @param index int[] list of hit indices
-     * @return float[] list of transverse energies
-     */
-    public float[] getET(int[] index)
-    {
-        float[] temp = new float[index.length];
-
-        for (int i = 0; i < index.length; i++)
-        {
-            temp[i] = et[index[i]];
-        }
-        return temp;
-    }
-
-    /**
-     * Returns the calorimeter sampling (or layer) of a list of hits.
-     *
-     * @param index int[] list of hit indices
-     * @return int[] list of samplings
-     */
-    public int[] getSampling(int[] index)
-    {
-        int[] temp = new int[index.length];
-
-        for (int i = 0; i < index.length; i++)
-        {
-            temp[i] = sampling[index[i]];
-        }
-        return temp;
-    }
-
-    /**
-     * Returns the energy of a hit.
-     *
-     * @param index int hit index
-     * @return float energy
-     */
-    public float getEnergy(int index)
-    {
-        return energy[index];
-    }
-
-    /**
-     * Returns the depositied energy of a list of hits.
-     *
-     * @param index int[] list of hit indices
-     * @return float[] list of energies
-     */
-    public float[] getEnergy(int[] index)
-    {
-        float[] temp = new float[index.length];
-
-        for (int i = 0; i < index.length; i++)
-        {
-            temp[i] = energy[index[i]];
-        }
-        return temp;
-    }
-
-    public static double getNonScalingFactor()
-    {
-        return NON_SCALING_FACTOR;
-    }
-
-    /**
-     * Returns the lowest density for the cell type of the specified hit.
-     *
-     * @param index int hit index
-     * @return double minimum density
-     */
-    protected double getMinDensity(int index)
-    {
-        return getMinDensity(getCalorimeterType(index));
-    }
-
-    /**
-     * Returns the lowest densityfor the specified calorimeter type.
-     *
-     * @param type String either "ECAL", "HCAL" or "ALL"
-     * @return double minimum density
-     */
-    protected double getMinDensity(String type)
-    {
-        if (type.equals("ECAL"))
-        {
-            return minDensityECAL;
-        }
-        else if (type.equals("HCAL"))
-        {
-            return minDensityHCAL;
-        }
-        else if (type.equals("ALL"))
-        {
-            // Return the lowest non-zero value.
-            if (minDensityECAL == 0.0 || minDensityHCAL == 0.0)
-            {
-                return Math.max(minDensityECAL, minDensityHCAL);
-            }
-            else
-            {
-                return Math.min(minDensityECAL, minDensityHCAL);
-            }
-        }
-        else
-        {
-            return 0.0;
-        }
-    }
-
-    /**
-     * Returns the highest density for the cell type of the specified hit.
-     *
-     * @param index int hit index
-     * @return double maximum density
-     */
-    protected double getMaxDensity(int index)
-    {
-        return getMaxDensity(getCalorimeterType(index));
-    }
-
-    /**
-     * Returns the highest densityfor the specified calorimeter type.
-     *
-     * @param type String either "ECAL", "HCAL" or "ALL"
-     * @return double maximum density
-     */
-    protected double getMaxDensity(String type)
-    {
-        if (type.equals("ECAL"))
-        {
-            return maxDensityECAL;
-        }
-        else if (type.equals("HCAL"))
-        {
-            return maxDensityHCAL;
-        }
-        else if (type.equals("ALL"))
-        {
-            return Math.max(maxDensityECAL, maxDensityHCAL);
-        }
-        else
-        {
-            return 0.0;
-        }
-    }
-
-    /**
-     * Sets the minimum density for the specified calorimeter type.
-     *
-     * @param type String either "ECAL", "HCAL" or "ALL"
-     * @param density double minimum density to set
-     */
-    protected void setMinDensity(String type, double density)
-    {
-        if (type.equals("ECAL"))
-        {
-            minDensityECAL = density;
-        }
-        else if (type.equals("HCAL"))
-        {
-            minDensityHCAL = density;
-        }
-        else if (type.equals("ALL"))
-        {
-            minDensityECAL = density;
-            minDensityHCAL = density;
-        }
-    }
-
-    /**
-     * Sets the maximum density for the specified calorimeter type.
-     *
-     * @param type String either "ECAL", "HCAL" or "ALL"
-     * @param density double maximum density to set
-     */
-    protected void setMaxDensity(String type, double density)
-    {
-        if (type.equals("ECAL"))
-        {
-            maxDensityECAL = density;
-        }
-        else if (type.equals("HCAL"))
-        {
-            maxDensityHCAL = density;
-        }
-        else if (type.equals("ALL"))
-        {
-            maxDensityECAL = density;
-            maxDensityHCAL = density;
-        }
-
-        parameterStore.get(CALORIMETER_NAME, "Area/Energy").setD(1. / Math.max(maxDensityECAL, maxDensityHCAL));
-    }
-
-    /**
-     * Returns the data that needs to be drawn in the specificied projection.
-     *
-     * @param projection AProjection projection
-     * @return ACoord data to be drawn
-     */
-    protected ACoord getUserNoTransform(AProjection projection)
-    {
-        if (CALORIMETER_NAME.equals("FCAL") || CALORIMETER_NAME.equals("MBTS"))
-        {
-            // FCAL and MBTS data are not linked to the geometry objects, so use the old method.
-            return super.getUserNoTransform(projection);
-        }
-        else
-        {
-            // For all the other types we can simply get the geometry from the
-            // geometry objects.
-            makeDrawList();
-            filterDrawList(projection);
-            double[][][] hv = new double[2][numDraw][0];
-            int[] index = new int[numDraw];
-
-            for (int i = 0; i < numDraw; i++)
-            {
-                int j = listdl[i];
-                if (detector[j] >= 0)
-                {
-                    ACoord coord = ACalorimeterDetector.get(detector[j]).getCell(projection, etaIndex[j], phiIndex[j], side[j]);
-                    if (coord.hv[0].length > 0)
-                    {
-                        hv[0][i] = coord.hv[0][0];
-                        hv[1][i] = coord.hv[1][0];
-                    }
-                }
-                else
-                {
-                    // Alternative setups compatibility mode based on eta, deta,
-                    // r or z, dr or dz, phi, dphi from event file could be
-                    // implemented here.
-                }
-                index[i] = j;
-            }
-
-            // Apply the wrap arounds for phi in certain projections.
-            if (projection instanceof AProjectionVP)
-            {
-                return new ACoord(hv, index, this).includePhiWrapAround("VP");
-            }
-            else if (projection instanceof AProjectionFR)
-            {
-                return new ACoord(hv, index, this).includePhiWrapAround("FR");
-            }
-            else if (projection instanceof AProjectionFZ)
-            {
-                return new ACoord(hv, index, this).includePhiWrapAround("FZ");
-            }
-            else
-            {
-                return new ACoord(hv, index, this);
-            }
-        }
-    }
-
-    /**
-     * Returns the data points for the "standard" mode v-plot.
-     *
-     * @return ACoord v-plot points
-     */
-    public ACoord getVPPoints()
-    {
-        makeDrawList();
-        double[][] hv = new double[2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            hv[0][i] = getEta(j);
-            hv[1][i] = Math.toDegrees(phi[j]);
-            index[i] = j;
-        }
-        return new ACoord(hv, index, this, ACoord.SYMBOLS).includePhiWrapAround("VP");
-    }
-
-    /**
-     * Cleans up the drawList. From all cells that are drawn at a certain place
-     * only the one that has the highest deposited transverse energy will remain.
-     * It also sums the transverse energy of the cells it removes. This is stored
-     * in etSum[] at the index of the "most energetic" cell.
-     *
-     * @param projection AProjection projection to be drawn
-     */
-    protected void filterDrawList(AProjection projection)
-    {
-        // In the v-plot every cell is drawn, unless we're in one of the special
-        // modes.
-        if (projection instanceof AProjectionVP)
-        {
-            switch (parameterStore.get("VP", "Mode").getI())
-            {
-                case AProjectionVP.MODE_STANDARD:
-                    // Everything is drawn in the standard mode v-plot.
-                    return;
-                case AProjectionVP.MODE_ECAL_LAYER_0:
-                case AProjectionVP.MODE_ECAL_LAYER_1:
-                case AProjectionVP.MODE_ECAL_LAYER_2:
-                case AProjectionVP.MODE_ECAL_LAYER_3:
-                    if (!CALORIMETER_NAME.equals("LAr"))
-                    {
-                        // Don't draw HCAL in ECAL mode.
-                        numDraw = 0;
-                    }
-                    return;
-                case AProjectionVP.MODE_HCAL_LAYER_0:
-                case AProjectionVP.MODE_HCAL_LAYER_1:
-                case AProjectionVP.MODE_HCAL_LAYER_2:
-                case AProjectionVP.MODE_HCAL_LAYER_3:
-                    if (!CALORIMETER_NAME.equals("TILE") && !CALORIMETER_NAME.equals("HEC"))
-                    {
-                        // Don't draw ECAL in HCAL mode.
-                        numDraw = 0;
-                    }
-                    return;
-                default:
-                    numDraw = 0;
-                    return;
-            }
-        }
-
-        // The phi-z projection has special modes as well.
-        if (projection instanceof AProjectionFZ)
-        {
-            if (parameterStore.get(projection.getName(), "Mode").getI() != AProjectionYX.MODE_STANDARD)
-            {
-                numDraw = 0;
-                return;
-            }
-        }
-        // Also the y-x and phi-rho projections have special modes (they share the same mode list).
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (projection instanceof AProjectionYX || projection instanceof AProjectionFR)
-        {
-            if (mode != AProjectionYX.MODE_STANDARD &&
-                    (mode < AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER || mode > AProjectionYX.MODE_HEC_SUMMED))
-            {
-                numDraw = 0;
-                return;
-            }
-            else if (mode >= AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && mode <= AProjectionYX.MODE_HEC_SUMMED)
-            {
-                if ((mode >= AProjectionYX.MODE_HEC_1 && mode <= AProjectionYX.MODE_HEC_4 && !CALORIMETER_NAME.equals("HEC")) ||
-                        (mode < AProjectionYX.MODE_HEC_1 && !CALORIMETER_NAME.equals("LAr")) ||
-                        (mode == AProjectionYX.MODE_HEC_SUMMED && !CALORIMETER_NAME.equals("HEC")) ||
-                        (mode == AProjectionYX.MODE_LAR_ENDCAP_SUMMED && !CALORIMETER_NAME.equals("LAr")))
-                {
-                    numDraw = 0;
-                    return;
-                }
-            }
-            else if(mode == AProjectionYX.MODE_MBTS && !CALORIMETER_NAME.equals("MBTS"))
-            {
-                numDraw = 0;
-                return;
-            }
-        }
-
-        float[][] etTable = new float[2 * ACalorimeterDetector.count()][2 * MAX_HIT_INDEX];
-        for (int i = 0; i < 2 * ACalorimeterDetector.count(); i++)
-        {
-            for (int j = 0; j < 2 * MAX_HIT_INDEX; j++)
-            {
-                cellTable[i][j] = -1;
-                etTable[i][j] = 0.0f;
-            }
-        }
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int detIndex = getDetectorIndex(listdl[i]);
-            int hitIndex = getHitIndex(listdl[i], projection);
-
-            if (detIndex >= 0 && hitIndex >= 0)
-            {
-                etTable[detIndex][hitIndex] += et[listdl[i]];
-                if (cellTable[detIndex][hitIndex] < 0 || et[cellTable[detIndex][hitIndex]] < et[listdl[i]])
-                    cellTable[detIndex][hitIndex] = listdl[i];
-            }
-        }
-
-        numDraw = 0;
-        for (int i = 0; i < 2 * ACalorimeterDetector.count(); i++)
-        {
-            for (int j = 0; j < 2 * MAX_HIT_INDEX; j++)
-            {
-                if (cellTable[i][j] > 0)
-                {
-                    listdl[numDraw] = cellTable[i][j];
-                    etSum[listdl[numDraw]] = etTable[i][j];
-                    numDraw++;
-                }
-            }
-        }
-    }
-
-    /**
-     * This function maps a hit to an index. This index is such that two hits
-     * get the same index when they are in the same detector and on the same
-     * side.
-     *
-     * @param index int number of the hit in the current dataset
-     * @return int detector index
-     */
-    protected int getDetectorIndex(int index)
-    {
-        if (detector[index] >= 0)
-        {
-            if (side[index] > 0)
-            {
-                return ACalorimeterDetector.count() + detector[index];
-            }
-            else
-            {
-                return detector[index];
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * This function maps a hit to an index. This index is such that two hits in
-     * the same detector will receive the same index if they will be drawn in
-     * the same place.
-     *
-     * @param index int number of the hit in the current dataset
-     * @param projection AProjection projection the hit index should be
-     *        calculated for
-     * @return int hit index
-     */
-    protected int getHitIndex(int index, AProjection projection)
-    {
-        if (detector[index] >= 0)
-        {
-            if (projection instanceof AProjectionYX)
-            {
-                return phiIndex[index];
-            }
-            else if (projection instanceof AProjectionRZ)
-            {
-                if (ACalorimeterDetector.get(detector[index]).getRSign(phiIndex[index]) > 0)
-                {
-                    return MAX_HIT_INDEX + etaIndex[index];
-                }
-                else
-                {
-                    return etaIndex[index];
-                }
-            }
-            else if (projection instanceof AProjectionFR)
-            {
-                return phiIndex[index];
-            }
-            else if (projection instanceof AProjectionFZ)
-            {
-                return phiIndex[index];
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        return ACoord.NO_HISTOGRAMS;
-    }
-
-    /**
-     * Returns the histograms in the YX projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getYXHistograms()
-    {
-        AHistogram hist = new AHistogram(0., 2. * Math.PI, phiGranularity, histoScale.getD(), this);
-        int mode = parameterStore.get("YX", "Mode").getI();
-        double newInnerR = innerR;
-        boolean hasAddedToHistogram = false;
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (detector[j] >= 0)
-            {
-                if ((mode == AProjectionYX.MODE_STANDARD && ACalorimeterDetector.get(detector[j]) instanceof ABarrelCalorimeterDetector) ||
-                        (mode != AProjectionYX.MODE_STANDARD && ACalorimeterDetector.get(detector[j]) instanceof AEndcapCalorimeterDetector))
-                {
-                    String name = ACalorimeterDetector.get(detector[j]).getName();
-                    if (mode == AProjectionYX.MODE_STANDARD || (mode == AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && (name.equals("LAr Endcap Presampler")||name.equals("LAr_EC_Presampler"))) ||
-                            (name.equals("LAr Outer Endcap") && getSampling(j) == mode - AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER) ||
-                            (name.equals("LAr Inner Endcap") && getSampling(j) == mode - AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER - 1) ||
-                            (name.equals("HEC") && getSampling(j) == mode - AProjectionYX.MODE_HEC_1) ||
-                            (mode == AProjectionYX.MODE_LAR_ENDCAP_SUMMED && name.indexOf("LAr") >= 0) || (mode == AProjectionYX.MODE_HEC_SUMMED && name.equals("HEC")))
-                    {
-                        hasAddedToHistogram = true;
-                        double phiMin = ACalorimeterDetector.get(detector[j]).getPhiMin(phiIndex[j]);
-                        double phiMax = ACalorimeterDetector.get(detector[j]).getPhiMax(phiIndex[j]);
-
-                        if (phiMin < -1e-9 && phiMax > 1e-9)
-                        {
-                            hist.fill(phiMin + 2. * Math.PI, 2. * Math.PI, etSum[j] / 2.);
-                            hist.fill(0., phiMax, etSum[j] / 2.);
-                        }
-                        else
-                        {
-                            hist.fill(phiMin, phiMax, etSum[j]);
-                        }
-                        if (mode != AProjectionYX.MODE_STANDARD)
-                        {
-                            if (name.equals("HEC"))
-                            {
-                                if (mode != AProjectionYX.MODE_HEC_SUMMED)
-                                {
-                                    //can use the get RMin accurately for the HEC
-                                    newInnerR = ACalorimeterDetector.get(detector[j]).getRMin();
-                                }
-                                else if (ACalorimeterDetector.get(detector[j]).getRMin() < newInnerR)
-                                {
-                                    //only want to assign HEC ALL minimum if is smaller
-                                    newInnerR = ACalorimeterDetector.get(detector[j]).getRMin();
-                                }
-                            }
-                            else
-                            {
-                                //calculate RMin as not accurate in geometry file
-                                double etaMax = ACalorimeterDetector.get(detector[j]).getEtaMax();
-                                double zMin = ACalorimeterDetector.get(detector[j]).getZMin();
-                                double temp = zMin / Math.sinh(etaMax);
-                                //save calculated if smallest
-                                if (temp < newInnerR)
-                                    newInnerR = temp;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        if (hasAddedToHistogram)
-            return new ACoord[] { hist.getYXUser(newInnerR) };
-        else
-            return ACoord.NO_HISTOGRAMS;
-    }
-
-    /**
-     * Returns the histograms in the phi-rho projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getFRHistograms()
-    {
-        AHistogram hist = new AHistogram(0., 2. * Math.PI, phiGranularity, histoScale.getD(), this);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (detector[j] >= 0)
-            {
-                if (ACalorimeterDetector.get(detector[j]) instanceof ABarrelCalorimeterDetector)
-                {
-                    double phiMin = ACalorimeterDetector.get(detector[j]).getPhiMin(phiIndex[j]);
-                    double phiMax = ACalorimeterDetector.get(detector[j]).getPhiMax(phiIndex[j]);
-
-                    if (phiMin < -1e-9 && phiMax > 1e-9)
-                    {
-                        hist.fill(phiMin + 2. * Math.PI, 2. * Math.PI, etSum[j] / 2.);
-                        hist.fill(0., phiMax, etSum[j] / 2.);
-                    }
-                    else
-                    {
-                        hist.fill(phiMin, phiMax, etSum[j]);
-                    }
-                }
-            }
-        }
-        return new ACoord[] { hist.getFRUser(innerR).includePhiWrapAround("FR") };
-    }
-
-    /**
-     * Returns the histograms in the RZ projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getRZHistograms()
-    {
-        AHistogram histUp = new AHistogram(-outerEta, outerEta, etaGranularity, histoScale.getD(), this);
-        AHistogram histDown = new AHistogram(-outerEta, outerEta, etaGranularity, histoScale.getD(), this);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (detector[j] >= 0)
-            {
-                int sign = ACalorimeterDetector.get(detector[j]).getRSign(phiIndex[j]);
-                double etaMin = ACalorimeterDetector.get(detector[j]).getEtaMin(etaIndex[j], side[j]);
-                double etaMax = ACalorimeterDetector.get(detector[j]).getEtaMax(etaIndex[j], side[j]);
-
-                if (sign > 0)
-                {
-                    histUp.fill(etaMin, etaMax, etSum[j]);
-                }
-                else
-                {
-                    histDown.fill(etaMin, etaMax, etSum[j]);
-                }
-            }
-        }
-
-        ACoordArray c = new ACoordArray();
-        c.add(histUp.getRZUser(outerZ, outerR, AHistogram.UP));
-        c.add(histDown.getRZUser(outerZ, outerR, AHistogram.DOWN));
-        return c.getArray();
-    }
-
-    /**
-     * Returns the histograms in the phi-z projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getFZHistograms()
-    {
-        AHistogram hist;
-        AHistogram histLeft = new AHistogram(0., 2. * Math.PI, phiGranularity, histoScale.getD(), this);
-        AHistogram histRight = new AHistogram(0., 2. * Math.PI, phiGranularity, histoScale.getD(), this);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (detector[j] >= 0)
-            {
-                if (ACalorimeterDetector.get(detector[j]) instanceof AEndcapCalorimeterDetector)
-                {
-                    double phiMin = ACalorimeterDetector.get(detector[j]).getPhiMin(phiIndex[j]);
-                    double phiMax = ACalorimeterDetector.get(detector[j]).getPhiMax(phiIndex[j]);
-
-                    if (side[j] > 0)
-                    {
-                        hist = histRight;
-                    }
-                    else
-                    {
-                        hist = histLeft;
-                    }
-
-                    if (phiMin < -1e-9 && phiMax > 1e-9)
-                    {
-                        hist.fill(phiMin + 2. * Math.PI, 2. * Math.PI, etSum[j] / 2.);
-                        hist.fill(0., phiMax, etSum[j] / 2.);
-                    }
-                    else
-                    {
-                        hist.fill(phiMin, phiMax, etSum[j]);
-                    }
-                }
-            }
-        }
-
-        return new ACoord[] { histLeft.getFZUser(innerZ, AHistogram.LEFT).includePhiWrapAround("FZ"),
-                histRight.getFZUser(innerZ, AHistogram.RIGHT).includePhiWrapAround("FZ") };
-    }
-
-    /**
-     * Returns the histograms in the x'-z projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getXZHistograms()
-    {
-        return ACoord.NO_HISTOGRAMS;
-    }
-
-    /**
-     * Returns the histograms in the y'-z projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getYZHistograms()
-    {
-        return ACoord.NO_HISTOGRAMS;
-    }
-
-    /**
-     * Returns the histograms in the eta-phi projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getVPHistograms()
-    {
-        return ACoord.NO_HISTOGRAMS;
-    }
-
-    /**
-     * Sets the type of the hits (associated, unassociated).
-     */
-    protected void setType()
-    {
-        int[][] cluster = event.getAssociationManager().get(getName(), "Cluster");
-        for (int i = 0; i < numData; i++)
-        {
-            if (cluster != null && cluster[i] != null)
-            {
-                type[i] = 1;
-            }
-            else
-            {
-                type[i] = 0;
-            }
-        }
-    }
-
-    /**
-     * Determines if the cells need to be scaled by energy or not. This will be
-     * true for most cases, but not if the user has selected the color by energy
-     * color function.
-     *
-     * @return boolean true for energy scaling, false for constant cell size
-     */
-    protected boolean energyScaling()
-    {
-        return parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI() != COLOR_FUNC_ENERGY;
-    }
-
-    /**
-     * Determines the color for each hit according to the color function set by
-     * the user.
-     *
-     * @return int number of coloring options?
-     */
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        switch (colorFunction)
-        {
-            case COLOR_FUNC_CONSTANT:
-                colorByConstant();
-                break;
-
-            case COLOR_FUNC_SUBDET:
-                colorBy(sub);
-                break;
-
-            case COLOR_FUNC_CLUSTER:
-                colorBy(getClusters());
-                break;
-
-            case COLOR_FUNC_SAMPLING:
-                colorBy(sampling);
-                break;
-
-            case COLOR_FUNC_ENERGY:
-                colorByEnergy();
-                break;
-
-            case COLOR_FUNC_JET:
-                if(parameterStore.get("Jet", "ColorFunction").getI()!=1)
-                {
-                    parameterStore.get("Jet", "ColorFunction").setI(1);
-                    String msg = "Coloring Calo by jet so ";
-                    msg += "ATLAS->Jet->Color Function changed to color by index";
-                    AOutput.append("\n" + msg + "\n", ALogInterface.WARNING);
-                }
-                colorBy(getJets());
-                break;
-
-            case COLOR_FUNC_TYPE:
-                colorByType();
-                break;
-
-            case COLOR_FUNC_TIME:
-                colorByTime();
-                break;
-        }
-
-        return colorFunction + 8;
-    }
-
-    /**
-     * Colors cells by energy.
-     */
-    protected void colorByEnergy()
-    {
-        double min = 0.0, max = 0.0;
-        boolean first = true;
-        int numColors = 17;
-        float[] en = null;
-
-        switch (parameterStore.get(CALORIMETER_NAME, "EnergyMode").getI())
-        {
-            case ENERGY_MODE_SUM_LIN:
-            case ENERGY_MODE_SUM_LOG:
-            case ENERGY_MODE_SUM_SQRT:
-                en = etSum;
-                break;
-
-            case ENERGY_MODE_MAX_LIN:
-            case ENERGY_MODE_MAX_LOG:
-            case ENERGY_MODE_MAX_SQRT:
-                en = et;
-                break;
-        }
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (first)
-            {
-                min = en[j];
-                max = en[j];
-                first = false;
-            }
-
-            if (en[j] > max)
-                max = en[j];
-            if (en[j] < min)
-                min = en[j];
-        }
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            if (AColorMap.getColorMap() == AColorMap.COLOR_MAP_BW)
-            {
-                // Black and white colormap.
-                color[j] = AColorMap.BK;
-            }
-            else
-            {
-                int colorIndex = 0;
-
-                // We have numColors colors available.
-                switch (parameterStore.get(CALORIMETER_NAME, "EnergyMode").getI())
-                {
-                    case ENERGY_MODE_MAX_LIN:
-                    case ENERGY_MODE_SUM_LIN:
-                        colorIndex = (int) (numColors * (en[j] - min) / (max - min));
-                        break;
-                    case ENERGY_MODE_MAX_LOG:
-                    case ENERGY_MODE_SUM_LOG:
-                        colorIndex = (int) (numColors * (Math.log(en[j]) - Math.log(min)) / (Math.log(max) - Math.log(min)));
-                        break;
-                    case ENERGY_MODE_MAX_SQRT:
-                    case ENERGY_MODE_SUM_SQRT:
-                        colorIndex = (int) (numColors * Math.sqrt((en[j] - min) / (max - min)));
-                        break;
-                }
-
-                if (colorIndex >= numColors)
-                    colorIndex = (byte) (numColors - 1);
-
-                color[j] = (byte) colorIndex;
-            }
-        }
-    }
-
-    /**
-     * Colors cells by type (ECAL/HCAL).
-     */
-    protected void colorByType()
-    {
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            String cellType = getCalorimeterType(j);
-            //Use detector color but add on 12 to get different shade of same color
-            color[j] = (byte) (parameterStore.get("Det", cellType + "Fill").getI() + 12);
-        }
-    }
-    
-    //Gets the measured time for a calorimeter cell.
-    //It's 0 by default, but can and should be overriden by subclasses.
-    protected double getTime(int hit)
-    {
-        return 0.0;
-    }
-
-    //Color cells by their measured time, on a blue-red scale.
-    //Unmeasured cells are grey.
-    protected void colorByTime()
-    {
-        double min = 0.0, max = 0.0;
-        boolean first = true;
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            double t=getTime(j);
-            if (t==0.0) continue;//ignore unmeasured hits
-            if (first)
-            {
-                min = t; max = t;
-                first = false;
-            }
-
-            if (t > max) max = t;
-            if (t < min) min = t;
-        }
-
-        int numColors = 127;
-        double scale = (max - min);
-        if (scale<5) scale=5;//smallest scale is 5 ns
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            double t = getTime(j);
-
-            int colorIndex = (int) (numColors * (t-min) / scale);
-            if (colorIndex >= numColors) {
-                colorIndex = numColors;//red
-            }
-            if (colorIndex < 1) {
-                colorIndex = 1;//blue
-            }
-
-            if (t==0.0) colorIndex=0;//gets grey color
-            color[j] = (byte) colorIndex;
-
-        }
-    }
-
-    /**
-     * Applies cuts to the data.
-     */
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsCalo", "Layer", "Layer", sampling);
-        cut("CutsCalo", "CellQuality", "CellQuality", BadCell);
-        cutPhi(phi, dphi);
-        cutEtaDEta(eta, deta);
-    }
-
-    /**
-     * Performs the local density calibration. This function determines the
-     * highest and lowest energy density values ans stores them.
-     *
-     * @param index int[] hits to be used in calibration
-     * @param area double[] cell areas
-     */
-    public void calibrateLocalDensity(int[] index, double[] area)
-    {
-        float[] en = null;
-        double density;
-        boolean firstECAL = true;
-        boolean firstHCAL = true;
-
-        AParameter par = parameterStore.get(CALORIMETER_NAME, "Area/Energy");
-        if (par.getStatus() && par.getD() > 0)
-        {
-            minDensityECAL = 0.0;
-            minDensityHCAL = 0.0;
-            maxDensityECAL = 1. / par.getD();
-            maxDensityHCAL = 1. / par.getD();
-        }
-        else
-        {
-            // Otherwise we need to do calculate it ourselves.
-            switch (parameterStore.get(CALORIMETER_NAME, "EnergyMode").getI())
-            {
-                case ENERGY_MODE_SUM_LIN:
-                case ENERGY_MODE_SUM_LOG:
-                case ENERGY_MODE_SUM_SQRT:
-                    en = etSum;
-                    break;
-
-                case ENERGY_MODE_MAX_LIN:
-                case ENERGY_MODE_MAX_LOG:
-                case ENERGY_MODE_MAX_SQRT:
-                    en = et;
-                    break;
-            }
-
-            // The default for an empty list of cells or only zero area cells is
-            // 0.0.
-            minDensityECAL = 0.0;
-            maxDensityECAL = 0.0;
-            minDensityHCAL = 0.0;
-            maxDensityHCAL = 0.0;
-
-            // Calculate density and determine the highest and lowest values.
-            for (int i = 0; i < index.length; i++)
-            {
-                if (area[i] > 0)
-                {
-                    density = (en[index[i]] / area[i]);
-
-                    if (density > 0)
-                    {
-                        if (getCalorimeterType(index[i]).equals("ECAL"))
-                        {
-                            if (firstECAL)
-                            {
-                                // First cell with a sensible density, take this
-                                // as initial value.
-                                minDensityECAL = density;
-                                maxDensityECAL = density;
-                                firstECAL = false;
-                            }
-
-                            if (density < minDensityECAL)
-                                minDensityECAL = density;
-                            if (density > maxDensityECAL)
-                                maxDensityECAL = density;
-
-                        }
-                        else if (getCalorimeterType(index[i]).equals("HCAL"))
-                        {
-                            if (firstHCAL)
-                            {
-                                // First cell with a sensible density, take this
-                                // as initial value.
-                                minDensityHCAL = density;
-                                maxDensityHCAL = density;
-                                firstHCAL = false;
-                            }
-
-                            if (density < minDensityHCAL)
-                                minDensityHCAL = density;
-                            if (density > maxDensityHCAL)
-                                maxDensityHCAL = density;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 
-     */
-    public double[] getScaleFactors(int[] dl, double[] area) {
-        double[] factors = new double[area.length];
-        
-        float[] en = null;
-        int energyMode = parameterStore.get(CALORIMETER_NAME, "EnergyMode").getI();
-
-        switch (energyMode)
-        {
-            case ENERGY_MODE_SUM_LIN:
-            case ENERGY_MODE_SUM_LOG:
-            case ENERGY_MODE_SUM_SQRT:
-                en = etSum;
-                break;
-
-            case ENERGY_MODE_MAX_LIN:
-            case ENERGY_MODE_MAX_LOG:
-            case ENERGY_MODE_MAX_SQRT:
-                en = et;
-                break;
-        }
-
-        for (int i = 0; i < area.length; i++)
-        {
-            factors[i] = 1.0f;
-            
-            if (area[i] == 0)
-                continue;
-
-            if (energyScaling())
-            {
-                // The user has (implicitly) selected energy scaling.
-                double density = en[dl[i]] / area[i];
-                double minDensity = getMinDensity(dl[i]);
-                double maxDensity = getMaxDensity(dl[i]);
-
-                switch (energyMode)
-                {
-                    case ENERGY_MODE_MAX_LIN:
-                    case ENERGY_MODE_SUM_LIN:
-                        factors[i] = Math.sqrt(density / maxDensity);
-                        break;
-
-                    case ENERGY_MODE_MAX_LOG:
-                    case ENERGY_MODE_SUM_LOG:
-                        double magnitude = Math.floor(Math.log10(Math.sqrt(maxDensity / minDensity)) + 1.0);
-                        factors[i] = (Math.log10(Math.sqrt(density / maxDensity)) + magnitude) / magnitude;
-                        break;
-
-                    case ENERGY_MODE_MAX_SQRT:
-                    case ENERGY_MODE_SUM_SQRT:
-                        factors[i] = Math.sqrt(Math.sqrt(density / maxDensity));
-                        break;
-
-                    default:
-                        factors[i] = NON_SCALING_FACTOR;
-                }
-            }
-            else
-            {
-                // No energy scaling, scale all cells by the same factor.
-                factors[i] = NON_SCALING_FACTOR;
-            }
-            
-            if (factors[i] > 1.0) {
-                factors[i] = 1.0;
-            }
-        }
-        
-        return factors;
-    }
-    
-    /**
-     * Scales a series of polygons according to the user settings.
-     *
-     * @param coord ACoord polygons to be scaled
-     * @param area double[] surface area of these polygons
-     * @return ACoord scaled polygons
-     */
-    protected ACoord scalePolygons(ACoord coord, double[] area)
-    {
-        double[] factors = getScaleFactors(coord.index, area);
-        
-        for (int i = 0; i < area.length; i++)
-        {
-            if (area[i] == 0)
-                continue;
-
-            APolygon.scale(coord.hv[0][i], coord.hv[1][i], factors[i]);
-        }
-        return coord;
-    }
-
-    private String getCellString(int index, String idstr) {
-        StringBuffer msg = new StringBuffer();
-        msg.append(CALORIMETER_NAME + " cell");
-        msg.append(" (id: " + idstr + " index: " + index + ")");
-        return msg.toString();
-    }
-
-    private String getHitString(int index) {
-        StringBuffer msg = new StringBuffer();
-        
-        msg.append("\n E Max = ");
-        msg.append(String.format("%.2f",energy[index]));
-        msg.append(" GeV\n ET Max = ");
-        msg.append(String.format("%.2f",et[index]));
-        msg.append(" GeV\n ET Sum = ");
-        msg.append(String.format("%.2f",etSum[index]));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.4f",eta[index]));
-        msg.append(" ");
-        msg.append(AMath.PLUSMINUS);
-        msg.append(" ");
-        // deta is step (i.e. size of a cell), with +- we want to see half of it
-        msg.append(String.format("%.3f",deta[index] / 2.0));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.1f",Math.toDegrees(phi[index])));
-        msg.append(" " + AMath.PLUSMINUS + " ");
-        // dphi is step (i.e. size of a cell), with +- we want to see half of it
-        msg.append(String.format("%.1f",Math.toDegrees(dphi[index] / 2.0)));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.1f",phi[index]) + "  ");
-        msg.append(AMath.PLUSMINUS + " " + String.format("%.1f",dphi[index] / 2.0) + " rad)");
-        
-        if(feedThrough != null && slot != null && channel != null)
-        {
-            String s = "\n feed through/slot/channel = " +
-                       feedThrough[index] + "/" + slot[index] + "/" +
-                       channel[index];
-            msg.append(s);
-        }
-        if(BadCell != null){
-        	if(BadCell[index] == 0)
-        		msg.append("\n Cell is good");
-        	if(BadCell[index] == 1)
-        			msg.append("\n Cell is bad");
-        	if(BadCell[index] == -1)
-        			msg.append("\n Cell is below 50 MeV");
-        }
-        
-        return msg.toString();
-    }
-    
-    /**
-     * Getting title string for pulse shape windows
-     * 
-     * Relies on decodedId[1] being some useful high level string describing
-     * the calorimeter part. This isn't the case for ATILEData where this function
-     * is overridden to do something different.
-     * 
-     * Maybe this is a slightly unreasonable plan... but then the first thing
-     * you decode out of the id should usually be the "biggest" sort of division...
-     * - Adam
-     */
-    protected String getPulseTitleString(int index) {
-        
-        String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-        
-        String title = null;
-        
-        if (feedThrough == null || slot == null || channel == null) {
-            // Old style title
-            logger.warn("Calo FT/slot/channel info not available, using old style title");
-            title = decodedId[1] + " cell: " + decodedId[0];
-        } else {
-            // New title as requested by Andre N. Aug 09
-            title = decodedId[1] + " cell: " + 
-                    this.feedThrough[index] + "/" + this.slot[index] +
-                    "/" + this.channel[index];
-        }
-        
-        return title;
-    }
-
-    // Some calo stuff wants to decode the id it's own way...
-    public String getHitInfoNoDecode(int index) {
-        
-        String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-        return getCellString(index, decodedId[0]) + getHitString(index);
-        
-    }
-    
-    /**
-     * Returns information about a certain hit for display in the information
-     * box.
-     *
-     * @param index int hit index
-     * @return String hit information
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",et[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",et[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",et[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",et[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-        StringBuffer msg = new StringBuffer();
-        msg.append(getCellString(index, decodedId[0]));
-        // iterate over decodedId to get further details (if available),
-        // first item [0] was already printed out above, thus start from 1
-        for(int i = 1; i < decodedId.length; i++)
-        {
-            msg.append("\n " + decodedId[i]);
-        }
-
-        msg.append(getHitString(index));
-        // by zdenek 2009-01-20
-        // layer is already present as sampling in the decodedId
-        // sub[] should gradually be removed, don't print it for now
-        // (see mess in AHashMap - !name.equals("sub")) grrrr
-        /*
-        msg.append("\n ");
-        msg.append("layer = " + sampling[index]);
-        msg.append("\n ");
-        msg.append("subdetector = " + sub[index]);
-        */
-
-        return msg.toString();
-    }
-
-    /**
-     * Returns the total transverse energy for this data type.
-     *
-     * @return double total transverse energy
-     */
-    public double getTotalTransverseEnergy()
-    {
-        double sumEt = 0.;
-        for (int i = 0; i < numData; i++)
-        {
-            sumEt += et[i];
-        }
-        return sumEt;
-    }
-
-    /**
-     * Returns information about the drawn hits, used for the v-plot.
-     *
-     * @return String information
-     */
-    public String getVPHitInfo()
-    {
-        applyCuts();
-        if (numDraw == 0)
-            return "";
-        double sumE = 0.;
-        double sumEt = 0.;
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            sumEt += et[j];
-            sumE += energy[j];
-        }
-
-        String msg = numDraw + " " + getNameScreenName();
-        msg += "  sum(ET) = " + String.format("%.1f",sumEt) + "  sum(E) = " + String.format("%.1f",sumE);
-        return msg;
-    }
-
-    /**
-     * Returns the specified hits in the form of a four vector. Used by the list
-     * manager.
-     *
-     * @param num int number of hits
-     * @param list int[] indices of the hits
-     * @return A4Vector four vector
-     */
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-
-        for (int i = 0; i < num; ++i)
-        {
-            int j = list[i];
-            double lambda = AMath.lambda(eta[j]);
-
-            double pt = energy[j] * Math.cos(lambda);
-            double pz = energy[j] * Math.sin(lambda);
-
-            double px = pt * Math.cos(phi[j]);
-            double py = pt * Math.sin(phi[j]);
-
-            sum.add(px, py, pz, 0.);
-        }
-        return sum;
-    }
-
-    /**
-     * Calorimeter cells can be drawn either explicitly or implicitly. In most
-     * views cells that are located behind eachother are consolidated and only
-     * the most energetic one is drawn explicitly. The other cells are drawn
-     * implicitly, since their energy value is still added to the energy sum of
-     * the explicitly drawn cell. The list manager does not know about the
-     * implicitly drawn cells though, so this poses a problem when the user
-     * requests information about a certain area of the canvas. This is solved
-     * using this method. This function receives the list of explicitly drawn
-     * cells and then adds the ones that were implicitly drawn in this
-     * selection.
-     *
-     * @param drawn boolean[] initial drawn list containing only the explicitly
-     *        drawn cells
-     * @return boolean[] drawn list containing the explicitly and the implicitly
-     *         drawn cells.
-     */
-    public boolean[] expandDrawn(boolean[] drawn)
-    {
-        makeDrawList();
-        AProjection projection = ACanvas.getCanvas().getCurrentWindow().getProjection();
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-
-            if (drawn[j])
-                continue;
-
-            int detIndex = getDetectorIndex(j);
-            int hitIndex = getHitIndex(j, projection);
-
-            if (detIndex >= 0 && hitIndex >= 0) {
-                if (cellTable != null && detIndex < cellTable.length
-                        && hitIndex < cellTable[detIndex].length) {
-
-                    int mappedTo = cellTable[detIndex][hitIndex];
-
-                    if (mappedTo >= 0 && drawn[mappedTo] == true) {
-                        drawn[j] = true;
-                    }
-                }
-            }
-        }
-
-        return drawn;
-    }
-
-    /**
-     * Rebuilds the hit to geometry mapping for all calorimeters. Used when the
-     * user has loaded a different geometry file.
-     */
-    public static void remakeHitToGeometryMapping()
-    {
-      //Get current event
-      AEvent event = eventManager.getCurrentEvent();
-      if (event != null){
-        ACalorimeterData[] calorimeters = new ACalorimeterData[event.getCalorimeters().size()];
-        event.getCalorimeters().toArray(calorimeters);
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            calorimeters[i].makeHitToGeometryMapping();
-        }
-      }
-    }
-
-    /**
-     * Draws the calorimeters. This method is called from AProjection2D.paint().
-     *
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     * @param event AEvent drawn event reference
-     */
-    public static void drawCalorimeters(AWindow window, AGraphics ag, AProjection2D projection, AEvent event)
-    {
-        int mode = parameterStore.get(projection.getName(), "Mode").getI();
-
-        if(projection instanceof AProjectionYX || projection instanceof AProjectionFR)
-        {
-            //only grey out the GUI if relevant for the current window
-            boolean changeGUI = false;
-            if(window.equals(ACanvas.getCanvas().getCurrentWindow())) 
-                changeGUI = true;
-            
-            //grey out draw FCAL option if not on right layer of HEC
-            AParameter drawFCAL = parameterStore.get("YX", "DrawFCAL");
-            if(changeGUI)
-            {
-                if(!drawFCAL.isInitialized())
-                    drawFCAL.initialize();
-                if(mode < AProjectionYX.MODE_HEC_2 || mode > AProjectionYX.MODE_HEC_4)
-                    drawFCAL.getNameComponent().setEnabled(false);
-                else
-                    drawFCAL.getNameComponent().setEnabled(true);
-            }
-
-            
-            //grey out split ETA, LAr bin and HEC bin options if not on summed endcaps option
-            AParameter splitEta = parameterStore.get("YX", "SplitEta");
-            AParameter LArBin = parameterStore.get("YX", "LArBin");
-            AParameter HECBin = parameterStore.get("YX", "HECBin");
-            if(changeGUI)
-            {
-                if(!HECBin.isInitialized())
-                    HECBin.initialize();
-                if(!LArBin.isInitialized())
-                    LArBin.initialize();
-                if(!splitEta.isInitialized())
-                    splitEta.initialize();
-            }
-            //Summed Endcaps has a different draw method
-            if(mode == AProjectionYX.MODE_LAR_ENDCAP_SUMMED || mode == AProjectionYX.MODE_HEC_SUMMED)
-            {
-                if(changeGUI)
-                {
-                    LArBin.getValueComponent().setEnabled(true);
-                    HECBin.getValueComponent().setEnabled(true);
-                    LArBin.getNameComponent().setEnabled(true);
-                    HECBin.getNameComponent().setEnabled(true);
-                    if(LArBin.getI()==3 || HECBin.getI()==3)
-                    {
-                        splitEta.getValueComponent().setEnabled(true);
-                        splitEta.getNameComponent().setEnabled(true);
-                    }
-                    else
-                    {
-                        splitEta.getValueComponent().setEnabled(false);
-                        splitEta.getNameComponent().setEnabled(false);
-                    }
-                }
-                ACalorimeterData[] calorimeters = new ACalorimeterData[event.getCalorimeters().size()];
-                event.getCalorimeters().toArray(calorimeters);
-                for (int i = 0; i < calorimeters.length; i++)
-                {
-                    //check if in right calorimeter
-                    if ((mode == AProjectionYX.MODE_LAR_ENDCAP_SUMMED && !calorimeters[i].getName().equals("LAr")) ||
-                            (mode == AProjectionYX.MODE_HEC_SUMMED && !calorimeters[i].getName().equals("HEC")))
-                        continue;
-                    ADrawCalorimeterSummedEndcaps.drawCalorimeterSummedEndcaps(window,
-                            ag, projection, calorimeters[i], calorimeters[i].etaIndex,
-                            calorimeters[i].phiIndex, calorimeters[i].side);
-                }
-                return;
-            }
-            else
-            {
-                if(changeGUI)
-                {
-                    LArBin.getValueComponent().setEnabled(false);
-                    HECBin.getValueComponent().setEnabled(false);
-                    splitEta.getValueComponent().setEnabled(false);
-                    LArBin.getNameComponent().setEnabled(false);
-                    HECBin.getNameComponent().setEnabled(false);
-                    splitEta.getNameComponent().setEnabled(false);
-                }
-                if (ALegendWindow.exists())
-                    ALegendWindow.getInstance().nothingToDisplay(window);
-            }
-        }
-        else if (ALegendWindow.exists())
-            ALegendWindow.getInstance().nothingToDisplay(window);
-
-        if (projection instanceof AProjectionVP && mode == 0)
-        {
-            // The standard mode of the v-plot uses a different function.
-            drawCalorimetersVPlot(window, ag, projection, event);
-            return;
-        }
-
-        ACalorimeterData[] calorimeters = new ACalorimeterData[event.getCalorimeters().size()];
-        event.getCalorimeters().toArray(calorimeters);
-        ACoord[] data = new ACoord[calorimeters.length];
-        double[][] area = new double[calorimeters.length][];
-
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            // Retrieve the cell coordinates.
-            data[i] = calorimeters[i].getUserNoTransform(projection);
-
-            // Calculate the cell areas.
-            area[i] = new double[data[i].index.length];
-            for (int j = 0; j < data[i].index.length; j++)
-            {
-                area[i][j] = APolygon.getArea(data[i].hv[0][j], data[i].hv[1][j]);
-            }
-
-            // Let the calorimeter determine its minimum and maximum energy
-            // density.
-            calorimeters[i].calibrateLocalDensity(data[i].index, area[i]);
-        }
-
-        if (window.getProjection() instanceof AProjectionVP)
-        {
-            // In case of the v-plot we force the overall energy density
-            // calibration.
-            calibrateDensity(calorimeters, ENERGY_CALIB_OVERALL);
-        }
-        else
-        {
-            // Calibrate the energy density according to the user settings.
-            calibrateDensity(calorimeters, ENERGY_CALIB_UNKNOWN);
-        }
-
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            // Apply the non linear transforms and convert to screen
-            // coordinates.
-            data[i] = window.calculateDisplay(projection.nonLinearTransform(data[i]));
-
-            // Draw the cell frames.
-            if (parameterStore.get(calorimeters[i].getName(), "Cells").getStatus())
-            {
-                drawFrames(calorimeters[i], data[i], window, ag);
-            }
-        }
-
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            // Draw the cell geometry.
-            if (parameterStore.get(calorimeters[i].getName(), "Cells").getStatus())
-            {
-                drawGeometry(calorimeters[i], data[i], window, ag);
-            }
-        }
-
-        String[] histograms = { "TILE", "HEC", "LAr", "FCAL", "MBTS" };
-        for (int j = 0; j < histograms.length; j++)
-        {
-            for (int i = 0; i < calorimeters.length; i++)
-            {
-                if (calorimeters[i].getCalorimeterName().equals(histograms[j]))
-                {
-                    // Draw the histograms.
-                    drawHistogram(calorimeters[i], window, ag, projection);
-                }
-            }
-        }
-        for (int j = 0; j < histograms.length; j++)
-        {
-            for (int i = 0; i < calorimeters.length; i++)
-            {
-                if (calorimeters[i].getCalorimeterName().equals(histograms[j]))
-                {
-                    // Draw the frames for the histograms.
-                    frameHistogram(calorimeters[i], window, ag, projection);
-                }
-            }
-        }
-
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            if (parameterStore.get(calorimeters[i].getName(), "Cells").getStatus())
-            {
-                // Scale the cell polygons.
-                data[i] = calorimeters[i].scalePolygons(data[i], area[i]);
-                // And draw them.
-                drawHits(calorimeters[i], data[i], window, ag);
-            }
-        }
-
-    }
-
-    /**
-     * Draws the calorimeters in the standard mode v-plot. This method is called
-     * from drawCalorimeters and should not be used directly.
-     *
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     * @param event AEvent drawn event reference
-     */
-    private static void drawCalorimetersVPlot(AWindow window, AGraphics ag, AProjection2D projection, AEvent event)
-    {
-        ACalorimeterData[] calorimeters = new ACalorimeterData[event.getCalorimeters().size()];
-        event.getCalorimeters().toArray(calorimeters);
-
-        float[][] energies = new float[calorimeters.length][];
-        int[] sizes = new int[calorimeters.length];
-        ACoord[] points = new ACoord[calorimeters.length];
-        Color[] colorMap = AColorMap.getColors();
-        //if color by energy use different colormap
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            if(calorimeters[i].CALORIMETER_NAME.equals("MBTS")) continue;
-            if (parameterStore.get(calorimeters[i].getParameterGroup(), "ColorFunction").getI()
-                    == ACalorimeterData.COLOR_FUNC_ENERGY) {
-                switch (AColorMap.getColorMap()) {
-                    case AColorMap.COLOR_MAP_DEFAULT1:
-                    case AColorMap.COLOR_MAP_DEFAULT2:
-                    case AColorMap.COLOR_MAP_M4M5:
-                    case AColorMap.COLOR_MAP_GRAYDET:
-                    case AColorMap.COLOR_MAP_ORIGINAL:
-                        // Use colors.
-                        colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_HITCOL);
-                        break;
-                    case AColorMap.COLOR_MAP_GRAY:
-                    case AColorMap.COLOR_MAP_BW:
-                        // Use grayscale.
-                        colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_GRAY_HITCOL);
-                        break;
-                }
-            } else if (parameterStore.get(calorimeters[i].getParameterGroup(), "ColorFunction").getI() == COLOR_FUNC_TIME) {
-                colorMap = AColorMap.getShades(128);
-            }
-
-        points[i] = window.calculateDisplay(calorimeters[i].getVPPoints());
-        energies[i] = calorimeters[i].getET(points[i].index);
-            sizes[i] = energies[i].length;
-            calorimeters[i].color();
-        }
-
-        for (int i = 0; i < calorimeters.length; i++)
-        {
-            for (int j = 0; j < sizes[i]; j++)
-            {
-                int size = (int) Math.sqrt(energies[i][j] * SCALE_FACTOR_VPLOT);
-                if (size == 0)
-                    size++;
-
-                int cellColor = calorimeters[i].color[points[i].index[j]];
-                ag.setColor(colorMap[cellColor]);
-                ag.drawPoint(calorimeters[i], points[i].index[j], points[i].hv[0][0][j],
-                        points[i].hv[1][0][j], size, size);
-            }
-        }
-
-    }
-
-    /**
-     * Calibrating involves finding the minimum and maximum energy density
-     * values. This function takes the local (per calorimeter) values and
-     * calculates the overall values (if needed).
-     *
-     * @param calorimeters ACalorimeterData[] calorimeter data objects
-     * @param mode int calibration mode, use APar.EN_CALIB_UNKNOWN to retrieve
-     *        the user setting
-     */
-    protected static void calibrateDensity(ACalorimeterData[] calorimeters, int mode)
-    {
-        if (mode == ENERGY_CALIB_UNKNOWN)
-        {
-            mode = parameterStore.get("LAr", "EnergyCalibration").getI();
-        }
-
-        // This array contains the calorimeter "types" to combine in the
-        // calibration.
-        String types[];
-        switch (mode)
-        {
-            case ENERGY_CALIB_OVERALL:
-                types = new String[] { "ALL" };
-                break;
-
-            case ENERGY_CALIB_BY_TYPE:
-                types = new String[] { "ECAL", "HCAL" };
-                break;
-
-            case ENERGY_CALIB_BY_CALO:
-            default:
-                // Nothing to be done here.
-                types = new String[0];
-                break;
-        }
-
-        for (int i = 0; i < types.length; i++)
-        {
-            boolean first = true;
-            double min = 0.0;
-            double max = 0.0;
-            for (int j = 0; j < calorimeters.length; j++)
-            {
-                if (calorimeters[j].getMaxDensity(types[i]) > 0)
-                {
-                    if (first)
-                    {
-                        min = calorimeters[j].getMinDensity(types[i]);
-                        max = calorimeters[j].getMaxDensity(types[i]);
-                        first = false;
-                    }
-
-                    if (calorimeters[j].getMinDensity(types[i]) < min)
-                    {
-                        min = calorimeters[j].getMinDensity(types[i]);
-                    }
-                    if (calorimeters[j].getMaxDensity(types[i]) > max)
-                    {
-                        max = calorimeters[j].getMaxDensity(types[i]);
-                    }
-                }
-            }
-            for (int j = 0; j < calorimeters.length; j++)
-            {
-                calorimeters[j].setMinDensity(types[i], min);
-                calorimeters[j].setMaxDensity(types[i], max);
-            }
-        }
-    }
-
-    /**
-     * Draws the frame for the cell geometry of a calorimeter. All frames are
-     * drawn before drawing the cells themselves. This way a frame can never be
-     * put on top of a cell from another calorimeter.
-     *
-     * @param calorimeter ACalorimeterData data collection to which this
-     *        function applies
-     * @param display ACoord cell coordinates to be drawn
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     */
-    protected static void drawFrames(ACalorimeterData calorimeter, ACoord display, AWindow window, AGraphics ag)
-    {
-
-        String name = calorimeter.getCalorimeterName();
-        Color[] colorMap = AColorMap.getColors();
-        int[] index = display.index;
-        int[] type = calorimeter.getType(index);
-
-        boolean drawCellGeometry = parameterStore.get(name, "CellGeometry").getStatus();
-        boolean drawFrame = parameterStore.get(name, "Frame").getStatus();
-        int frameColor = parameterStore.get(name, "Frame").getI();
-        //only draw frames for Grey/BW color maps if is selected to draw frames
-        if(drawFrame && AColorMap.drawFrames())
-            drawFrame=true;
-        else
-            drawFrame=false;
-
-        // For the v-plot we override these settings.
-        if (window.getProjection() instanceof AProjectionVP)
-        {
-            drawCellGeometry = parameterStore.get("VP", "VPlotIsland").getStatus();
-            drawFrame = true;
-            frameColor = AColorMap.WH;
-        }
-
-        // Draw frames for the filled cells.
-        if (drawFrame && drawCellGeometry)
-        {
-            for (int i = 0; i < index.length; i++)
-            {
-                ag.updateDrawParameters(calorimeter.getDrawParameters(0, type[i]));
-                ag.setColor(colorMap[frameColor]);
-                ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-    }
-
-    /**
-     * Draws the frame for the cell geometry and outline of a calorimeter. All
-     * frames are drawn before drawing the cells themselves. This way a frame
-     * can never be put on top of a cell from another calorimeter.
-     *
-     * @param calorimeter ACalorimeterData data collection to which this
-     *        function applies
-     * @param display ACoord cell coordinates to be drawn
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     */
-    protected static void drawGeometry(ACalorimeterData calorimeter, ACoord display, AWindow window, AGraphics ag)
-    {
-        String name = calorimeter.getCalorimeterName();
-        Color[] colorMap = AColorMap.getColors();
-        int[] index = display.index;
-        int[] type = calorimeter.getType(index);
-
-        boolean drawCellGeometry = parameterStore.get(name, "CellGeometry").getStatus();
-        boolean drawCellOutline = parameterStore.get(name, "CellOutline").getStatus();
-        boolean cutByLayer = false;
-        int cellGeometryColor = parameterStore.get(name, "CellGeometry").getI();
-        int cellOutlineColor = parameterStore.get(name, "CellOutline").getI();
-        int cutLayer = 0;
-       
-        // For the v-plot we override some of these settings.
-        if (window.getProjection() instanceof AProjectionVP)
-        {
-            drawCellGeometry = parameterStore.get("VP", "VPlotIsland").getStatus();
-            cellGeometryColor = parameterStore.get("VP", "VPlotIsland").getI();
-
-            int mode = parameterStore.get("VP", "Mode").getI();
-
-            if (mode >= AProjectionVP.MODE_HCAL_LAYER_0)
-            {
-                cutByLayer = true;
-                cutLayer = mode - AProjectionVP.MODE_HCAL_LAYER_0;
-            }
-            else if (mode >= AProjectionVP.MODE_ECAL_LAYER_0)
-            {
-                cutByLayer = true;
-                cutLayer = mode - AProjectionVP.MODE_ECAL_LAYER_0;
-            }
-        }
-
-        // Draw filled cells.
-        if (drawCellGeometry)
-        {
-            for (int i = 0; i < index.length; i++)
-            {
-                ag.updateDrawParameters(calorimeter.getDrawParameters(1, type[i]));
-                ag.setColor(colorMap[cellGeometryColor]);
-                ag.fillPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-
-        // Draw cell outlines.
-        if (drawCellOutline)
-        {
-            ag.updateDrawParameters(new ADrawParameters(true, cellOutlineColor, 0, 1, 0, 0, false, 1, 0));
-            for (int i = 0; i < index.length; ++i)
-            {
-                if (!cutByLayer || calorimeter.getSampling(index[i]) == cutLayer)
-                {
-                    ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-                }
-            }
-        }
-    }
-
-    /**
-     * Draws the calorimeter hits.
-     *
-     * @param calorimeter ACalorimeterData calorimeter object the hits belong to
-     * @param display ACoord cell coordinates to be drawn
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     */
-    protected static void drawHits(ACalorimeterData calorimeter, ACoord display, AWindow window, AGraphics ag)
-    {
-        String name = calorimeter.getCalorimeterName();
-        int[] index = display.index;
-        int[] color = calorimeter.getColor(index);
-        int[] type = calorimeter.getType(index);
-        int[] sampling = calorimeter.getSampling(index);
-
-        // This cut is performed just before drawing the hits, the geometry has
-        // been drawn already.
-        // This results in the irregular v-plot islands that help the user
-        // locate a certain position in different views.
-        boolean cutByLayer = false;
-        int cutLayer = 0;
-
-        if (window.getProjection() instanceof AProjectionVP)
-        {
-            int mode = parameterStore.get("VP", "Mode").getI();
-
-            if (mode >= AProjectionVP.MODE_HCAL_LAYER_0)
-            {
-                cutByLayer = true;
-                cutLayer = mode - AProjectionVP.MODE_HCAL_LAYER_0;
-            }
-            else if (mode >= AProjectionVP.MODE_ECAL_LAYER_0)
-            {
-                cutByLayer = true;
-                cutLayer = mode - AProjectionVP.MODE_ECAL_LAYER_0;
-            }
-        }
-
-        AParameter cellGeometry = parameterStore.get(name, "CellGeometry");
-        AParameter colorFunction = parameterStore.get(name, "ColorFunction");
-        boolean drawFrame = parameterStore.get(name, "Frame").getStatus();
-        int frameColor = parameterStore.get(name, "Frame").getI();
-        //only draw frames for Grey/BW color maps if is selected to draw frames
-        if(drawFrame && AColorMap.drawFrames())
-            drawFrame=true;
-        else
-            drawFrame=false;
-        
-        Color[] colorMap = AColorMap.getColors();
-        if (colorFunction.getI() == COLOR_FUNC_ENERGY)
-        {
-            switch (AColorMap.getColorMap())
-            {
-                case AColorMap.COLOR_MAP_DEFAULT1:
-                case AColorMap.COLOR_MAP_DEFAULT2:
-                case AColorMap.COLOR_MAP_M4M5:
-                case AColorMap.COLOR_MAP_GRAYDET:
-                case AColorMap.COLOR_MAP_ORIGINAL:
-                    // Use colors.
-                    colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_HITCOL);
-                    break;
-                case AColorMap.COLOR_MAP_GRAY:
-                case AColorMap.COLOR_MAP_BW:
-                    // Use grayscale.
-                    colorMap = AColorMap.getColors(AColorMap.COLOR_MAP_GRAY_HITCOL);
-                    break;
-            }
-        }
-        else if (colorFunction.getI() == COLOR_FUNC_TIME)
-        {
-            colorMap = AColorMap.getShades(128);
-        }
-
-        if (drawFrame && !cellGeometry.getStatus())
-        {
-            for (int i = 0; i < index.length; i++)
-            {
-                if (!cutByLayer || sampling[i] == cutLayer)
-                {
-                    ag.updateDrawParameters(calorimeter.getDrawParameters(0, type[i]));
-                    ag.setColor(colorMap[frameColor]);
-                    ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-                }
-            }
-        }
-
-        for (int i = 0; i < index.length; i++)
-        {
-            if (!cutByLayer || sampling[i] == cutLayer)
-            {
-                ag.updateDrawParameters(calorimeter.getDrawParameters(1, type[i]));
-                ag.setColor(colorMap[color[i]]);
-                ag.fillPolygon(calorimeter, index[i], display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-    }
-
-    /**
-     * Draws the calorimeter histograms.
-     *
-     * @param calorimeter ACalorimeterData calorimeter object the histograms
-     *        belong to
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    protected static void drawHistogram(ACalorimeterData calorimeter, AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        String name = calorimeter.getCalorimeterName();
-        if (!parameterStore.get(name, "Histogram").getStatus())
-            return;
-
-        ACoord[] histograms = calorimeter.getUserHistograms(projection);
-        for (int i = 0; i < histograms.length; i++)
-        {
-            ACoord display = window.calculateDisplay(histograms[i]);
-            AHistogram hist = (AHistogram) histograms[i].source;
-            hist.completeTowers(display);
-
-            // for rubberband "new list" or "summarize" feature
-            if (ag.getGraphics2D() instanceof ADrawnGraphics2D)
-                ((ADrawnGraphics2D) ag.getGraphics2D()).addHistogramData(hist);
-
-            boolean onTop;
-            if (parameterStore.getUnknown(name, "OnTopHistoFrame") != null)
-            {
-                onTop = parameterStore.get(name, "OnTopHistoFrame").getStatus();
-            }
-            else
-            {
-                onTop = false;
-            }
-
-            // Draw frame for the histogram.
-            if (parameterStore.get(name, "HistoFrame").getStatus() && !onTop)
-            {
-                int frameColor = parameterStore.get(name, "HistoFrame").getI();
-
-                ag.updateDrawParameters(new ADrawParameters(true, frameColor, 0, 0, 1, 0));
-                for (int j = 0; j < display.hv[0].length; j++)
-                {
-                    ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                }
-            }
-
-            // Draw histogram towers.
-            int fillColor = parameterStore.get(name, "Histogram").getI();
-            ag.updateDrawParameters(new ADrawParameters(true, fillColor, 0, 1, 0, 0));
-            for (int j = 0; j < display.hv[0].length; j++)
-            {
-                ag.fillPolygon(hist, display.index[j], display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-            }
-        }
-    }
-
-    /**
-     * Draws the calorimeter histogram frames.
-     *
-     * @param calorimeter ACalorimeterData calorimeter object the histograms
-     *        belong to
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    protected static void frameHistogram(ACalorimeterData calorimeter, AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        String name = calorimeter.getCalorimeterName();
-        if (!parameterStore.get(name, "Histogram").getStatus())
-            return;
-
-        ACoord[] histograms = calorimeter.getUserHistograms(projection);
-        for (int i = 0; i < histograms.length; i++)
-        {
-            ACoord display = window.calculateDisplay(histograms[i]);
-            AHistogram hist = (AHistogram) display.source;
-
-            hist.completeTowers(display);
-
-            boolean onTop = false;
-            if (parameterStore.getUnknown(name, "OnTopHistoFrame") != null)
-            {
-                onTop = parameterStore.get(name, "OnTopHistoFrame").getStatus();
-            }
-
-            // Draw frame for the histogram.
-            if (parameterStore.get(name, "HistoFrame").getStatus() && onTop)
-            {
-                int frameColor = parameterStore.get(name, "HistoFrame").getI();
-
-                ag.updateDrawParameters(new ADrawParameters(true, frameColor, 0, 1, 0, 0));
-                for (int j = 0; j < display.hv[0].length; j++)
-                {
-                    ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                }
-            }
-        }
-    }
-
-    public static void drawEndcapHistogram(ACalorimeterData calorimeter, AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        //filter the draw list for the histograms
-        calorimeter.filterDrawList(projection);
-        //Draw the histograms.
-        drawHistogram(calorimeter, window, ag, projection);
-        // Draw the frames for the histograms.
-        frameHistogram(calorimeter, window, ag, projection);
-    }
-
-
-
-    /**
-     * getLookupTableArray() parses String[][] s with comma separated values
-     * (CSV) and converts each number to float lookup table value which is used
-     * for calorimeter real pulse shapes plots
-     * @param s String[][]
-     * @param numLookupTableValues int
-     * @return float[]
-     * @throws AAtlantisException
-     */
-    protected static float[] getLookupTableArray(String[][] s, int numLookupTableValues)
-                                         throws AAtlantisException
-    {
-        float[] r = new float[numLookupTableValues];
-        int i = 0;
-        for(int k = 0; k < s.length; k++)
-        {
-            for(int l = 0; l < s[k].length; l++)
-            {
-                if("".equals(s[k][l]))
-                {
-                    // command and new line results into empty value - ignore
-                    continue;
-                }
-                try
-                {
-                    // there shouldn't be more than NUMBER_OF_LOOKUP_VALUES
-                    // i.e. numLookupTableValues
-                    if(i >= numLookupTableValues)
-                    {
-                        String m = "more lookup values than NUMBER_OF_LOOKUP_VALUES: " +
-                                   i + " >= " + numLookupTableValues;
-                        throw new AAtlantisException(m);
-                    }
-                    r[i] = Float.valueOf(s[k][l]).floatValue();
-                    i++;
-                }
-                catch(NumberFormatException ex)
-                {
-                    throw new AAtlantisException("number format exception: " + s[k][l]);
-                }
-            }
-        }
-
-        // now the i counter shall be equal to numLookupTableValues
-        if(i != numLookupTableValues)
-        {
-            throw new AAtlantisException("incorrect number to items (" + i + ") " +
-                      "in the lookup table, should be " + numLookupTableValues);
-        }
-
-        // all right, return the result float array
-        return r;
-
-    } // getLookupTableArray() ----------------------------------------------
-
-
-
-    /**
-     * Calculate real pulse shapes values based on the values in the
-     * lookup tables (parameters amplitude and time, etc)
-
-     * @param xTime double
-     * @param cellTime double
-     * @param cellPedestal double
-     * @param energy double
-     * @param amplitude float[] lookup table
-     * @param time float[] lookup table
-     * @param numerOfLookupValues int
-     * @return double
-     * @throws AAtlantisException
-     */
-    protected double getPhysicsPulseShape(double localTime,
-                                        double cellPedestal, double energy,
-                                        float[] amplitude, float[] time,
-                                        int numerOfLookupValues)
-                                        throws AAtlantisException
-    {
-        double tdiv = 0.0;
-        int lookup = 0;
-        double xpulse = 0.0;
-
-        tdiv = time[1] - time[0];
-        lookup = (int) ((localTime - time[0]) / tdiv);
-
-        if(lookup < 0)
-        {
-            lookup = 0;
-        }
-        if(lookup >= numerOfLookupValues - 1)
-        {
-            lookup = numerOfLookupValues - 2; // -1 was off by 1
-        }
-
-        try
-        {
-            if(lookup == 0 || lookup == numerOfLookupValues - 2)
-            {
-                xpulse = amplitude[lookup];
-            }
-            else
-            {
-                xpulse = amplitude[lookup] + ((amplitude[lookup + 1] -
-                         amplitude[lookup]) / tdiv) * (localTime - time[lookup]);
-            }
-        }
-        catch(ArrayIndexOutOfBoundsException ex)
-        {
-            String m = CALORIMETER_NAME + " getPhysicsPulseShape():\n" +
-                       "  lookup index out of bound: lookup = " + lookup;
-            throw new AAtlantisException(m);
-        }
-
-        return (xpulse * energy) + cellPedestal;
-
-    } // getPhysicsPulseShape() ---------------------------------------------
-    
-    
-
-    /**
-     *
-     * Events from DPD don't contain all necessary data
-     * if all adc counts are 0, then print info message and
-     * no pulse shape plot window as it may lead to confusion.
-     * This method is aimed to check availability of adc counts digits.
-     * 
-     * @param adcCountsLocal
-     * @return true if any ADC counts are non-zero
-     */
-    protected static boolean checkADCCountsAvailability(int[][] adcCountsLocal)
-    {
-        boolean adcCountsAvailable = false;
-        
-        for(int x = 0; x < adcCountsLocal.length; x++)
-        {
-            for(int y = 0; y < adcCountsLocal[0].length; y++)
-            {
-                if(adcCountsLocal[x][y] != 0)
-                {
-                    adcCountsAvailable = true;
-                    break;
-                }
-            }
-            if(adcCountsAvailable)
-            {
-                break;
-            }
-        }
-        
-        return adcCountsAvailable;
-        
-    } // checkADCCountsAvailability() ---------------------------------------
-    
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ACalorimeterRPSPLT.java b/graphics/AtlantisJava/src/atlantis/data/ACalorimeterRPSPLT.java
deleted file mode 100644
index 9f8890bec80c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ACalorimeterRPSPLT.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package atlantis.data;
-
-import java.util.HashMap;
-
-import atlantis.utils.ALogger;
-import atlantis.utils.AAtlantisException;
-
-/**
- *
- *    Calorimeter Real Pulse Shape Plot Lookup
- *    Tables. The class accommodates lookup tables (arrays) for the Tile and LAr,
- *    FCAL and HEC calorimeters. If the real pulse shape plots data are found in
- *    the event files, the corresponding arrays within this class are initialised
- *    from A[TILE|LAr|FCAL|HEC]Data class(es). The arrays are initialised from
- *    CSV (comma separated values files) just once per Atlantis session.
- *   
- * @author Zdenek Maxa
- */
-public final class ACalorimeterRPSPLT
-{
-    private static ALogger logger = ALogger.getLogger(ACalorimeterRPSPLT.class);
-
-    // TILE calorimeter, lookup table time values
-    protected static float[] TILE_TIME = null;
-    // TILE calorimeter, lookup table amplitude values
-    protected static float[] TILE_AMPLITUDE = null;
-    
-
-    // FCAL calorimeter, lookup table time values
-    protected static float[] FCAL_TIME = null;
-    // FCAL calorimeter, lookup table layer 0, amplitude values
-    protected static float[] FCAL_LAYER0_AMPLITUDE = null;
-    // FCAL calorimeter, lookup table layer 1, amplitude values
-    protected static float[] FCAL_LAYER1_AMPLITUDE = null;
-    // FCAL calorimeter, lookup table layer 2, amplitude values
-    protected static float[] FCAL_LAYER2_AMPLITUDE = null;
-
-
-    // HEC calorimeter, lookup table time values
-    protected static float[] HEC_TIME = null;
-    // HEC calorimeter, lookup table amplitude values
-    protected static float[] HEC_AMPLITUDE = null;
-
-
-
-
-    // LAr calorimeter, lookup tables 
-    // for time (the same array for both
-    // barrel/endcap, all layer and regions and eta ranges
-    // currently (2009-02-11) there are 58 various arrays for LAr, it
-    // is not sustainable to have all these in separate arrays - for LAr
-    // there will be defined a container - keys are lookup tables names
-    // as defined in the lookup table file and values are float[] arrays
-    private static HashMap<String, float[]> larTables = null;
-    
-    // set the LAr table keys in a static block
-    // explanation of the LAr lookup tables names (the names are identical
-    // to comma separated values array names as in the look up table file):
-    //     LAR_TIME - time constants - used for barrel/endcap, all layers,
-    //                all regions, all eta ranges
-    //     LAR_BARREL_L1_R0_AMPLITUDE - barrel, layer 1, region 0, etc, etc
-    //     LAR_ENDCAP_L0_R0_ETA0_AMPLITUDE - endcap, layer 0, region 0, eta
-    //                                       range 0 - very many of these
-    // bother to define the array names here to be really safe ... otherwise
-    // could just rely on the CSV file ...
-    static
-    {
-        larTables = new HashMap<String, float[]>(70); // not more arrays than 70
-        
-        larTables.put("LAR_TIME", null);
-        larTables.put("LAR_BARREL_LAYER1_REGION0_AMPLITUDE", null);
-        larTables.put("LAR_BARREL_LAYER1_REGION1_AMPLITUDE", null);
-        larTables.put("LAR_BARREL_LAYER2_REGION0_AMPLITUDE", null);
-        larTables.put("LAR_BARREL_LAYER2_REGION1_AMPLITUDE", null);
-        larTables.put("LAR_BARREL_LAYER3_REGION0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER0_REGION0_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA4_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA5_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA6_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION0_ETA7_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION1_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION2_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION2_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION2_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION2_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION3_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION3_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION3_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION4_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION4_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION4_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION4_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION4_ETA4_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER1_REGION5_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA4_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA5_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA6_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION0_ETA7_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA4_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA5_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA6_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA7_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA8_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA9_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER2_REGION1_ETA10_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA0_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA1_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA2_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA3_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA4_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA5_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA6_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA7_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA8_AMPLITUDE", null);
-        larTables.put("LAR_ENDCAP_LAYER3_REGION0_ETA9_AMPLITUDE", null); 
-    }
-    
-    
-
-
-    public static boolean areFCALLookupTablesInitialized()
-    {
-        if(FCAL_LAYER0_AMPLITUDE != null &&
-           FCAL_LAYER1_AMPLITUDE != null &&
-           FCAL_LAYER2_AMPLITUDE != null &&
-           FCAL_TIME != null)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-
-    } // areFCALLookupTablesInitialized() -----------------------------------
-
-
-
-    public static boolean areHECLookupTablesInitialized()
-    {
-        if(HEC_TIME != null && HEC_AMPLITUDE != null)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-
-    } // areHECLookupTablesInitialized() ------------------------------------
-
-
-
-    public static boolean areTileLookupTablesInitialized()
-    {
-        if(TILE_TIME != null && TILE_AMPLITUDE != null)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-
-    } // areTileLookupTablesInitialized() -----------------------------------
-
-
-
-    /**
-     * Method is called at LAr constructor, i.e. at the beginning of each
-     * event to check if all lookup tables for LAr are properly initialised.
-     * The check is performed only when other necessary LAr are is available
-     * in a given event file. 
-     * @return true if all float arrays were properly initialised
-     */
-    public static boolean areLarLookupTablesInitialized()
-    {
-        // iterate over all keys in the container and check if all
-        // float arrays were properly initialised
-        for(String key : larTables.keySet())
-        {
-            if(larTables.get(key) == null)
-            {
-                logger.error("LAr real pulse shapes plots lookup table " +
-                             "\"" + key + "\" was not initialised.");
-                return false;
-            }
-        }
-        
-        return true;
-        
-    } // areLarLookupTablesInitialized() ------------------------------------
-    
-    
-    
-    public static void setLarTable(String key, float[] array) throws AAtlantisException
-    {
-        logger.debug("Setting LAr pulse shapes lookup table \"" + key + "\"");
-        
-        if(larTables.containsKey(key))
-        {
-            // it certainly already should contain the key (defined above)
-            if(larTables.get(key) != null)
-            {
-                throw new AAtlantisException("LAr pulse shapes lookup table \"" +
-                          key + "\" has already been defined.");
-            }
-            else
-            {
-                larTables.put(key, array);
-            }
-        }
-        else
-        {
-            throw new AAtlantisException("LAr pulse shapes lookup table - " +
-                      "entry \"" + key + "\" has not been created.");
-        }
-        
-    } // setLarTable() ------------------------------------------------------
-    
-    
-    
-    public static float[] getLarTable(String key) throws AAtlantisException
-    {
-        logger.debug("Getting LAr pulse shapes lookup table \"" + key + "\"");
-        if(larTables.containsKey(key))
-        {
-            float[] r = larTables.get(key);
-            if(r == null)
-            {
-                throw new AAtlantisException("LAr pulse shape lookup table " +
-                          "key \"" + key + "\" is null.");
-            }
-            else
-            {
-                return r;
-            }
-        }
-        else
-        {
-            throw new AAtlantisException("LAr pulse shape lookup table " +
-                      "entry \"" + key + "\" has not been created.");
-        }
-        
-    } // getLarTable() ------------------------------------------------------
-
-
-} // class ACalorimeterRPSPLT ===============================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/AClusterData.java b/graphics/AtlantisJava/src/atlantis/data/AClusterData.java
deleted file mode 100644
index 9428320eec97..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AClusterData.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package atlantis.data;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AAssociation;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.A3Vector;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Calo Clusters for the moment made from LAr cells
- *
- * Also contain AOD Calo Clusters from 24/10/2006
- */
-public class AClusterData extends AData
-{
-    protected float[] eT;
-    protected float[] eta;
-    protected float[] phi;
-
-    public String getParameterGroup()
-    {
-        return "Cluster";
-    }
-
-  @Override
-    public String getName()
-    {
-        return "Cluster";
-    }
-
-    public String getNameScreenName()
-    {
-        return "Cluster";
-    }
-
-    public float getET(int index)
-    {
-        return eT[index];
-    }
-
-    public float getEta(int index)
-    {
-        return eta[index];
-    }
-
-    public float getPhi(int index)
-    {
-        return phi[index];
-    }
-
-    AClusterData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        eta = p.getFloatArray("eta");
-        phi = p.getFloatArray("phi");
-        if (p.get("et") != null)
-            eT = p.getFloatArray("et");
-        else
-        {
-            float[] energy = p.getFloatArray("energy");
-            eT = new float[numData];
-            for (int i = 0; i < numData; ++i)
-                eT[i] = (float) Math.abs(energy[i] * Math.cos(AMath.lambda(eta[i])));
-        }
-
-        String assocKey = getName() + getStoreGateKey();
-        if (p.get("numCells") != null)
-        {
-            event.getAssociationManager().add(new AAssociation(assocKey, "LAr", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "TILE", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-        }
-    }
-
-    protected int getDrawOrFill()
-    {
-        return AGraphics.FILL;
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsCalo", "ClusterET", " |ET|", eT);
-        cutPhi(phi);
-        cutEta(eta);
-    }
-    
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        switch (colorFunction)
-        {
-            case 0: // by constant
-                colorByConstant();
-                break;
-            case 1: // by index
-                colorByIndex();
-                break;
-            case 2: // by objects
-                colorByObjects();
-                break;
-        }
-        return 3;
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",eT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",eT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",eT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",eT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n ET = ");
-        msg.append(String.format("%.3f",eT[index]));
-        msg.append(" GeV\n E = ");
-        msg.append(String.format("%.3f",Math.abs(eT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])) + AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        return msg.toString();
-    }
-
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumE = 0.;
-        double sumET = 0.;
-
-        for (int i = 0; i < numDraw; ++i)
-        {
-            sumET += Math.abs(eT[listdl[i]]);
-            sumE += Math.abs(eT[listdl[i]] / Math.cos(AMath.lambda(eta[listdl[i]])));
-        }
-
-        StringBuffer msg = new StringBuffer("");
-        msg.append(numDraw);
-        msg.append(" ");
-        msg.append(getStoreGateKey() != null ? getStoreGateKey() : getNameScreenName());
-        msg.append("  sum(ET) = ");
-        msg.append(String.format("%.1f",sumET));
-        msg.append("  sum(E) = ");
-        msg.append(String.format("%.1f",sumE));
-
-        return msg.toString();
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A3Vector start = A3Vector.fromRhoPhiZ(0., 0., 0.);
-            double tL = AMath.tanLambda(eta[k]);
-            A3Vector stop = A3Vector.fromRhoPhiZ(1., phi[k], tL);
-            A3Vector v = (stop.subtract(start)).normalize();
-            double p = eT[k] / Math.sqrt(1. - v.z * v.z);
-            sum.add(new A4Vector(v.scale(p), 0.));
-        }
-
-        return sum;
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP)
-        {
-            drawVP(window, ag, projection);
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-    private void drawVP(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        ACoord centers=window.calculateDisplay(getUser(projection));
-        int[] drawlist=centers.index;
-        double eLimit=0.025;
-        int numPoints=25;
-        double[][][] hv=new double[2][drawlist.length][numPoints];  //circle
-
-        for(int i=0; i<drawlist.length; ++i)
-        {
-            int list=drawlist[i];
-            double e;
-            e = Math.abs(eT[list]);
-            int d=(int)(Math.sqrt((e/eLimit)/Math.PI));
-            if(d==0) d=1;
-            for(int j=0; j<numPoints; j++)
-            {
-                hv[0][i][j]=centers.hv[0][0][i]+d*Math.cos(Math.PI*2*j/(numPoints-1));
-                hv[1][i][j]=centers.hv[1][0][i]+d*Math.sin(Math.PI*2*j/(numPoints-1));
-            }
-        }
-        ag.draw(new ACoord(hv, drawlist, this, ACoord.POLYLINES));
-    }
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index=new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list=listdl[i];
-            h[i]=eta[list];
-            v[i]=Math.toDegrees(phi[list]);
-            index[i]=list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        double dphi = Math.toRadians(0.5);
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-            double cosPlus = Math.cos(phiPlus);
-            double sinPlus = Math.sin(phiPlus);
-            double cosMinus = Math.cos(phiMinus);
-            double sinMinus = Math.sin(phiMinus);
-
-            // Rho range of LAr Detector (EM) is about between [148.175, 198.47]
-            // Rho range of TILE Detector (Had) is about between [229, 386]
-            double rhoMax = 380;
-            double rhoMinus = 155;
-
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double rhoPlus = rhoMax;
-            if(Math.abs(eT[list]) < maxEnergy)
-                rhoPlus = rhoMinus + (rhoMax - rhoMinus) * Math.abs(eT[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = rhoMinus * cosPlus;
-            hv[1][i][0] = rhoMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = rhoPlus * cosPlus;
-            hv[1][i][1] = rhoPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = rhoPlus * cosMinus;
-            hv[1][i][2] = rhoPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = rhoMinus * cosMinus;
-            hv[1][i][3] = rhoMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getFRUser()
-    {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        double dtheta = Math.toRadians(0.5);
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list]-phiMid);
-            double rSign;
-            if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            // calculate theta based on the eta value
-            double theta = Math.atan(Math.exp(-Math.abs(eta[list]))) * 2.0;
-            if ((eta[list] > 0.) && (rSign == -1))
-                theta = 2 * Math.PI - theta;
-            else if ((eta[list] < 0.) && (rSign == -1))
-                theta += Math.PI;
-            else if ((eta[list] < 0.) && (rSign == 1))
-                theta = Math.PI - theta;
-
-            double thetaPlus = theta + dtheta;
-            double thetaMinus = theta - dtheta;
-            double cosPlus = Math.cos(thetaPlus);
-            double sinPlus = Math.sin(thetaPlus);
-            double cosMinus = Math.cos(thetaMinus);
-            double sinMinus = Math.sin(thetaMinus);
-
-            // decide the region based on the theta value
-            final byte LAR = 0;
-            final byte LAR_ENDCAP = 1;
-            final byte FCAL_EM = 2;
-            byte region = LAR;
-            // hard-coded value is based on the values in AGeometry.xml
-            if(Math.abs(Math.tan(theta)) >= 0.0778 && Math.abs(Math.tan(theta)) < 0.4828)
-                region = LAR_ENDCAP;
-            else if(Math.abs(Math.tan(theta)) < 0.0778)
-                region = FCAL_EM;
-
-            double radiusMinus = 0.;
-            switch(region)
-            {
-                // use fixed rho/z to determine the lower radius value
-                case LAR:
-                    radiusMinus = 155 / Math.abs(Math.sin(theta));
-                    break;
-                case LAR_ENDCAP:
-                    radiusMinus = 380 / Math.abs(Math.cos(theta));
-                    break;
-                case FCAL_EM:
-                    radiusMinus = 470 / Math.abs(Math.cos(theta));
-                    break;
-            }
-            double radiusMax = radiusMinus + 200;
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double radiusPlus = radiusMax;
-            if(Math.abs(eT[list]) < maxEnergy)
-                radiusPlus = radiusMinus + (radiusMax - radiusMinus) * Math.abs(eT[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = radiusMinus * cosPlus;
-            hv[1][i][0] = radiusMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = radiusPlus * cosPlus;
-            hv[1][i][1] = radiusPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = radiusPlus * cosMinus;
-            hv[1][i][2] = radiusPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = radiusMinus * cosMinus;
-            hv[1][i][3] = radiusMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ACompositeParticleData.java b/graphics/AtlantisJava/src/atlantis/data/ACompositeParticleData.java
deleted file mode 100755
index 5537e5b0331f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ACompositeParticleData.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Reconstructed CompositeParticle
- */
-public class ACompositeParticleData extends AAODData
-{
-    private int[] pdgId;
-    private float[] charge;
-    private String[] label;
-    private String[] typeEV;
-
-    ACompositeParticleData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        pdgId = p.getUnsureIntArray("pdgId");
-        charge=p.getUnsureFloatArray("charge");
-        label=p.getStringArray("label");
-        typeEV=p.getStringArray("typeEV");
-    }
-
-    public String getParameterGroup()
-    {
-        return "CompositeParticle";
-    }
-
-    @Override
-    public String getName()
-    {
-        return "CompositeParticle";
-    }
-
-    public int getPdgId(int index)
-    {
-        return pdgId[index];
-    }
-
-    public float getCharge(int index)
-    {
-        return charge[index];
-    }
-
-    public String getLabel(int index)
-    {
-        return label[index];
-    }
-
-    public String getTypeEV(int index)
-    {
-        return typeEV[index];
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" = ");
-        msg.append(id[index]);
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        if (charge != null)
-        {
-            msg.append("\n Charge = ");
-            msg.append(charge[index]);
-        }
-        if(pdgId != null)
-        {
-            if(pdgId[index]!=0)
-                msg.append("\n Type = " + APDGTable.getName(pdgId[index]) + " (type code " + pdgId[index] + ")" );
-            else
-                msg.append("\n Type = unknown (type code " + pdgId[index] + ")" );
-        }
-        msg.append("\n TypeEV = " + typeEV[index]);
-        if (label != null)
-            msg.append("\n Label = " + label[index]);
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ADHelix.java b/graphics/AtlantisJava/src/atlantis/data/ADHelix.java
deleted file mode 100755
index 6e1228528da9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ADHelix.java
+++ /dev/null
@@ -1,539 +0,0 @@
-package atlantis.data;
-
-import java.awt.geom.Point2D;
-import java.util.Vector;
-import java.awt.Rectangle;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjection3D;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-/**
- * Helix in a format suitable for drawing given as a circle with
- * centre point and radius etc.
- * 
- * phi is the angle seen from the primary vertex
- * a = alpha = the angle as seen for the center of the circle
- * 
- */
-public class ADHelix
-{
-    private final static ALogger logger = ALogger.getLogger(ADHelix.class);
-
-    // parameters used internally
-    private static final APar parameterStore = APar.instance();
-    private static final AParameter rToPar = parameterStore.get("RTr", "RadiusTr");
-    private static final AParameter lToPar = parameterStore.get("RTr", "LineTr");
-    private static final AParameter zToPar = parameterStore.get("RTr", "ZTr");
-    private static final int callDepthCut = parameterStore.get("RTr", "CallDepth").getI();;
-  
-    /** The associated helix object. */
-    public final AHelix helix;
-
-    // description of helix
-    private final double rC, xC, yC, ch, a0, x0, y0, z0, bz, cosA0, sinA0;
-    // position along helix
-    private final double aStart, aEnd;
-    
-    /** Attempt to encapsulate the "current position" variables. */
-    private static class HelixPoint {
-    	double x, y, z, rho, phi;
-    }
-    
-    private double startPhi;    // the phi value of starting point of "v"
-    // TODO: Would prefer this not to be part of the state of the helix object.
-    private boolean startMark; // true when calculating start point, false otherwise
-
-    ADHelix(AOldHelix h) {
-        this(new AHelix(h));
-    }
-    
-    ADHelix(AHelix h)
-    {
-    	helix = h;
-        double[] perigee = h.getPar(); // d0, z0, phi0, cotanTheta, q/pT
-      
-        AParameter curvatureParameter = parameterStore.get("Event", "Curvature");
-        if (curvatureParameter != null) {
-            rC = curvatureParameter.getD() / Math.abs(perigee[4]);
-        } else {
-            rC = (100/0.6) / Math.abs(perigee[4]);
-        }
-        ch = AMath.getSign(perigee[4]);
-        a0 = Math.toDegrees(perigee[2]) + ch * 90.;
-        double a0Rad = Math.toRadians(a0);
-        cosA0 = Math.cos(a0Rad);
-        sinA0 = Math.sin(a0Rad);
-        z0 = perigee[1];
-        double d0 = perigee[0];
-        double signD0 = ch;
-        d0 *= signD0;
-        x0 = d0 * cosA0;
-        y0 = d0 * sinA0;
-        double SD0 = 1.;
-        double SRC = 1.;
-        double r0 = SD0 * d0 - SRC * rC;
-        xC = r0 * cosA0;
-        yC = r0 * sinA0;
-        bz = rC * Math.toRadians(perigee[3]);
-        double rTo = rToPar.getD();
-        //Check if track is limited by end vertex
-        if ( helix.getRhoEndVertex() > 0. )
-            rTo = Math.min(rTo,helix.getRhoEndVertex());
-        double zTo = zToPar.getD();
-        /*******************************************************************************/
-        //Adrian Vatchinsky, Andy Haas (NYU)
-        //Import the coordinates of the primary vertex in order to calculate new starting angle
-        AEventManager eventManager = AEventManager.instance();
-        AEvent currentEvent = eventManager.getCurrentEvent();
-        if (helix.getRho(helix.getAlphaMin())!=0 || currentEvent==null) {  // FIXME: doubles compared for equality
-        	aStart = helix.getAlphaMin();                     // old, DCA to 0,0
-        } else {                                         // new, DCA to PV
-            double[] primaryVertex = currentEvent.getPrimaryVertex();
-            double xV = primaryVertex[0]; double yV = primaryVertex[1];
-            aStart = helix.getAlphaMin() + ch*Math.toDegrees(Math.atan2(yC,xC)-Math.atan2(yC-yV,xC-xV));
-        }
-        /*******************************************************************************/        
-        HelixPoint point = pointAt(aStart);
-        // don't draw tracks starting outside the tracking region
-        if(Math.abs(point.rho) > rTo || Math.abs(point.z) > zTo)
-        {
-            this.aEnd = aStart;
-            return;
-        }
-        //Calculate max phi angle -> no track can have more than 180 deg
-        double aEndMax = Math.min(aStart + 180., 180.);
-        //Also the track should not stick out of the rTo zylinder
-        double aEndR = intersectWithRadialCylinder(rTo, aStart, aEndMax);
-        // nor should it go beyond the max. z-extension
-        double aEndZ = intersectWithZPlanes(zTo, aStart, aEndMax);        // or beyond the end-vertex radius, if given
-        double aEndTmp = Math.min(aEndMax, aEndR);
-        if(aEndZ > aStart) aEndTmp = Math.min(aEndTmp, aEndZ);
-        this.aEnd = Math.min(aEndTmp, aEndMax);
-    }
-
-
-    // calculate phi on track at intersection
-    // Cylinder is infinite in Z direction
-    public double intersectWithRadialCylinder(double rCyl, double aStart,
-                                              double aEnd)
-    {
-        if(rC <= 0.) return aStart;
-        double r0 = Math.sqrt(xC * xC + yC * yC);
-        double bb = (rCyl * rCyl - rC * rC - r0 * r0) / (2. * rC * r0);
-        double rhoStart = getRho(aStart);
-        double rhoEnd = getRho(aEnd);
-        if(rCyl >= rhoStart && rCyl >= rhoEnd) return aEnd;
-        if(rCyl <= rhoStart && rCyl <= rhoEnd) return aStart;
-        if(Math.abs(bb) > 1.)
-        {
-            // needs to be understood better (Hans)
-            // event file: acr_muontrack_problem_event.xml
-            logger.warn("Bug in ADHelix " + rCyl + " " + rhoStart + " " + rhoEnd);
-            return aEnd;
-        }
-        double cc = Math.toDegrees(Math.acos(bb));
-        if(Math.abs(cc) > 360)
-            throw new Error("error in cc in dhelix");
-        double gA = Math.toDegrees(Math.atan2(yC, xC));
-        double a1 = ch * (a0 - gA + cc);
-        double a2 = ch * (a0 - gA - cc);
-        if(a1 < 0.) a1 += 360.;
-        if(a2 < 0.) a2 += 360.;
-        if(a1 >= 360.) a1 -= 360.;
-        if(a2 >= 360.) a2 -= 360.;
-        return Math.min(a1, a2);
-    }
-
-
-    // calculate phi on track at intersection
-    public double intersectWithZPlanes(double zCyl, double aStart, double aEnd)
-    {
-        double zMin = 20.;
-        double aZ = aEnd;
-        if(zCyl >= zMin && bz != 0.)
-        {
-            double aZPlus = (zCyl - z0) / bz;
-            double aZMinus = ( -zCyl - z0) / bz;
-            if(aZPlus < aZ && aZPlus > aStart) aZ = aZPlus;
-            if(aZMinus < aZ && aZMinus > aStart) aZ = aZMinus;
-        }
-        return aZ;
-    }
-
-
-    // calculate phi on track at intersection
-    // cylinder finite in Z
-    public double intersectWithCylinder(boolean useR, double rCyl, boolean useZ,
-                                        double zCyl)
-    {
-        double aStart = 0.;
-        double aEndMax = 180.;
-        double zMin = 20.;
-        double aEndR = 0.;
-        if(useR)
-            aEndR = intersectWithRadialCylinder(rCyl, aStart, aEndMax);
-        double aEndZ = 0.;
-        if(useZ && zCyl >= zMin && bz != 0.)
-        {
-            aEndZ = intersectWithZPlanes(zCyl, aStart, aEndMax);
-            return Math.min(aEndR, aEndZ);
-        }
-        else
-            return aEndR;
-    }
-
-
-    // a... angle in deg starting with 0 meaning point of closest approach
-    private HelixPoint pointAt(double a)
-    {
-    	HelixPoint point = new HelixPoint();
-    	double aRad = Math.toRadians(a0 - ch * a);
-    	point.x = x0 + rC * (Math.cos(aRad) - cosA0);
-    	point.y = y0 + rC * (Math.sin(aRad) - sinA0);
-    	point.z = z0 + bz * a;
-    	double[] primaryVtx = AParameterUtilities.getPrimaryVertex();
-    	double dx = point.x - primaryVtx[0];
-    	double dy = point.y - primaryVtx[1];
-    	point.rho = Math.sqrt(dx * dx + dy * dy);
-    	double phi0 = Math.toDegrees(Math.atan2(dy, dx));
-        double phiMid2 = parameterStore.get("RZ", "Phi").getD();
-    	point.phi = AMath.nearestPhiDegrees(phi0,phiMid2);
-    	return point;
-    }
-
-
-    // s1 and s2 are the extreme values of phi
-    // used to avoid tracks being drawn with phi discontinuity
-    // in phi projections
-    // = FiMid in atlantis fortran ask Hans Drevermann
-    public double setPhiStart(double s1, double s2)
-    {
-        double phi1 = getPhi(s1);
-        double phi2 = getPhi(s2);
-        double phiM = getPhi((s1 + s2) / 2);
-        // doesn't work for all tracks but for most
-        if(Math.abs(phi1 - phi2) > 180. || Math.abs(phi1 - phiM) > 180. ||
-           Math.abs(phi2 - phiM) > 180.)
-        {
-            if(phi1 - phiM > 180.) phi1 -= 360.;
-            if(phi2 - phiM > 180.) phi2 -= 360.;
-            if(phi1 - phiM < -180.) phi1 += 360.;
-            if(phi2 - phiM < -180.) phi2 += 360.;
-
-            // must be something wrong here, phiM is the same using the
-            // following code, then why use if ... else ...
-            if(phi1 < phiM && phiM < phi2)
-                phiM = (phi1 + phi2) / 2.;
-            else if(phi1 > phiM && phiM > phi2)
-                phiM = (phi1 + phi2) / 2.;
-            else
-            {
-                phiM = (phi1 + phi2) / 2.;
-            }
-        }
-        if(phiM > 360.)
-            phiM -= 360.;
-        if(phiM < 0.)
-            phiM += 360.;
-        return phiM;
-    }
-
-
-    public double getAStart()
-    {
-        return aStart;
-    }
-
-
-    public double getAEnd()
-    {
-        return aEnd;
-    }
-
-
-    public ACoord getYXPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        return new ACoord(point.x, point.y, -1);
-    }
-
-
-    public ACoord getRZPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double phiMid2 = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        double phiDiff = Math.abs(Math.toRadians(point.phi) - phiMid2);
-        if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-            return new ACoord(point.z, point.rho, -1);
-        else
-            return new ACoord(point.z, -point.rho, -1);
-    }
-
-
-    public ACoord get3DPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double[] point3D = {point.x,point.y,point.z};
-        point3D = AProjection3D.getRotated(point3D);
-        return new ACoord(point3D[0], point3D[1], -1);
-    }
-
-
-    public double[] get3DPointAsArray(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double[] point3D = new double[] {point.x, point.y, point.z };
-        point3D = AProjection3D.getRotated(point3D);
-        return point3D;
-    }
-
-
-    public ACoord getXZPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double phiC = AProjectionXZ.getPhi();
-        return new ACoord(point.z, point.rho * Math.cos(Math.toRadians(point.phi - phiC)), -1);
-    }
-
-
-    public ACoord getYZPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double phiC = AProjectionXZ.getPhi();
-        return new ACoord(point.z, point.rho * Math.sin(Math.toRadians(point.phi - phiC)), -1);
-    }
-
-
-    public ACoord getFZPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double temp = Math.toDegrees(AParameterUtilities.getPhiStereo(point.rho, Math.toRadians(point.phi), point.z));
-        return new ACoord(point.z, temp, -1);
-    }
-
-
-    public ACoord getFRPoint(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        double temp = Math.toDegrees(AParameterUtilities.getPhiStereo(point.rho, Math.toRadians(point.phi), point.z));
-        return new ACoord(point.rho, temp, -1);
-    }
-
-
-    public ACoord getVPPoint(double a, int sign)
-    {
-    	HelixPoint point = pointAt(a);
-        if(startMark)   // start point
-        {
-            startPhi = point.phi; // phi is between 0 and 360
-        }
-        else
-        {
-        	point.phi = AMath.nearestPhiDegrees(point.phi, startPhi);
-        }
-        return new ACoord(AParameterUtilities.eta(point.z, point.rho) +
-                          sign * AProjectionVP.getDeltaEta(point.rho, point.z), point.phi, -1);
-    }
-
-
-    public ACoord getLEGOPoint(double a)
-    {
-        //added by Mark Stockton
-    	HelixPoint point = pointAt(a);
-        double temp = Math.toDegrees(AParameterUtilities.getPhiStereo(point.rho, Math.toRadians(point.phi), point.z));
-        return new ACoord(AParameterUtilities.eta(point.z, point.rho), temp, -1);
-    }
-
-
-    public double getPhi(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        return point.phi;
-    }
-
-
-    public double getEta(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        return AParameterUtilities.eta(point.z, point.rho);
-    }
-
-
-    private double getRho(double a)
-    {
-    	HelixPoint point = pointAt(a);
-        return point.rho;
-    }
-
-
-    /** Draw helix in display space in an iterative manner. */
-    public ACoord drawHelix(AWindow window, AProjection2D projection, double s1, double s2)
-    {
-        Vector<Point2D.Double> pointsOnHelix = new Vector<Point2D.Double>(100);
-        double dPrevious = 999.;
-        int callDepth = 0;
-        // get the point at the beginning and end of the helix, defined by the phi-values (s1,s2)
-        startMark = true;
-        ACoord d1 = window.calculateDisplay(projection.getUserPoint(this, s1));
-        double h1 = d1.hv[0][0][0];
-        double v1 = d1.hv[1][0][0];
-        startMark = false;
-        ACoord d2 = window.calculateDisplay(projection.getUserPoint(this, s2));
-        double h2 = d2.hv[0][0][0];
-        double v2 = d2.hv[1][0][0];
-        pointsOnHelix.add(new Point2D.Double(h1, v1));
-        // We are simply adding points here, in the end the helix is drawn as a polyline
-        drawHelix(pointsOnHelix, window, projection, s1, h1, v1, s2, h2, v2,
-                  dPrevious, callDepth);
-        int numPoints;
-        if(projection instanceof AProjectionVP)
-        {
-            numPoints = pointsOnHelix.size();
-        }
-        else
-        {
-            numPoints = pointsOnHelix.size() + 1; // add 1 to add a point for the line
-        }
-        double[][][] hv = new double[2][1][numPoints];
-        int[] index = new int[1];
-        Point2D.Double p;
-        if(projection instanceof AProjectionVP)
-        {
-            for(int k = 0; k < numPoints; ++k)
-            {
-                p = (Point2D.Double) pointsOnHelix.elementAt(k);
-                hv[0][0][k] = p.getX();
-                hv[1][0][k] = p.getY();
-            }
-        }
-        else
-        {
-            for(int k = 0; k < numPoints - 1; ++k)
-            {
-                p = (Point2D.Double) pointsOnHelix.elementAt(k);
-                hv[0][0][k] = p.getX();
-                hv[1][0][k] = p.getY();
-            } // first attempt for line...
-            if(numPoints > 2)
-            {
-                double dx = hv[0][0][numPoints - 2] - hv[0][0][numPoints - 3];
-                double dy = hv[1][0][numPoints - 2] - hv[1][0][numPoints - 3];
-                double x0 = hv[0][0][numPoints - 2] - hv[0][0][0];
-                double y0 = hv[1][0][numPoints - 2] - hv[1][0][0];
-
-                // InDet -> Track -> Rho Track linearly is 0 by default
-                // and the value is meant beyond Rho Track as Helix parameter,
-                // hence rToPar + lToPar is used instead of former lToPar only
-                double dtopar = ( (rToPar.getD() + lToPar.getD()) / rToPar.getD()) *
-                                Math.sqrt(x0 * x0 + y0 * y0);
-                double cophi = dx / Math.sqrt(dx * dx + dy * dy);
-                double siphi = dy / Math.sqrt(dx * dx + dy * dy);
-                double addl = Math.sqrt((y0 * siphi + x0 * cophi) *
-                                        (y0 * siphi + x0 * cophi) -
-                                        x0 * x0 - y0 * y0 + dtopar * dtopar);
-                double addlen = Math.min(Math.abs( -(y0 * siphi + x0 * cophi) +
-                                                  addl),
-                                         Math.abs( -(y0 * siphi + x0 * cophi) -
-                                                  addl));
-                hv[0][0][numPoints - 1] = x0 + addlen * cophi + hv[0][0][0];
-                hv[1][0][numPoints - 1] = y0 + addlen * siphi + hv[1][0][0];
-            }
-        }
-        return new ACoord(hv, index);
-    }
-
-
-    /** Called recursively. */
-    private void drawHelix(Vector<Point2D.Double> pointsOnHelix, AWindow window, AProjection2D projection,
-                           double s1, double h1, double v1, double s2, double h2, double v2,
-                           double dPrevious, int callDepth)
-    {
-        double D_MAX = 1.;
-        double h21 = h2 - h1;
-        double v21 = v2 - v1;
-        // nothing left to draw
-        if(h21 == 0. && v21 == 0.)
-            return;
-        // calculate midpoint
-        double sM = 0.5 * (s1 + s2);
-        ACoord dispM = window.calculateDisplay(projection.getUserPoint(this, sM));
-        double hM = dispM.hv[0][0][0];
-        double vM = dispM.hv[1][0][0];
-
-        // For speed reasons we make sure we aren't doing a lot of subdivison
-        // on helix segments outside the view area
-        boolean isinview = true;
-
-        if (callDepth > 2) {
-            // Check if bounding box of segment is on the screen anywhere
-            // Don't try this until we've divided a few times just in case we
-            // have a really curly helix to deal with
-            Rectangle wdim = window.getCurrDisp();
-
-            int left = (int)h1;
-            int top = (int)v1;
-            int width = (int)(h2 - h1);
-            int height = (int)(v2 - v1);
-
-            // Make sure the box isn't upside down or zero in size as this
-            // seemed to be causing a few problems
-            if (width < 0) { left += width; width = -width; }
-            if (height < 0) { top += height; height = -height; }
-            if (width == 0) { width = 1; }
-            if (height == 0) { height = 1; }
-
-            Rectangle bound = new Rectangle(left, top, width, height);
-
-            if (!wdim.intersects(bound)) {
-                // Prevent any further sub-division
-                isinview = false;
-            }
-        }
-
-        // calculate distance of midpoint from straight line approximation
-        double hM1 = hM - h1;
-        double vM1 = vM - v1;
-        double temp = (v21 * hM1 - h21 * vM1);
-        double dM = temp * temp / (v21 * v21 + h21 * h21);
-        // this iteration and previous one within tolerance
-        if(dPrevious < D_MAX && dM < D_MAX)
-        {
-            pointsOnHelix.add(new Point2D.Double(h2, v2));
-        }
-        else
-        {
-            if(callDepth < callDepthCut && isinview)
-            {
-                // split track in two and iterate
-                drawHelix(pointsOnHelix, window, projection, s1, h1, v1, sM, hM,
-                          vM, dM, callDepth + 1);
-                drawHelix(pointsOnHelix, window, projection, sM, hM, vM, s2, h2,
-                          v2, dM, callDepth + 1);
-            }
-            else
-            {
-                pointsOnHelix.add(new Point2D.Double(hM, vM));
-                pointsOnHelix.add(new Point2D.Double(h2, v2));
-            }
-        }
-    }
-
-	public double getxC() {
-		return xC;
-	}
-
-	public double getyC() {
-		return yC;
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AETMisData.java b/graphics/AtlantisJava/src/atlantis/data/AETMisData.java
deleted file mode 100644
index 2bba9e11185b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AETMisData.java
+++ /dev/null
@@ -1,562 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.canvas.AWindow;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-import java.awt.Stroke;
-import java.awt.BasicStroke;
-import java.awt.geom.Point2D;
-
-/**
- * AETMisData - Missing ET class implementation. Although it is always
- * supposed that there will be only 1 item of the datatype, it's now done
- * generically as a normal datatype (assuming there is numData items, this
- * numData shall always be 1 for ETMis)
- */
-public class AETMisData extends AData {
-    // data read in from the event file
-
-    protected float[] et;
-    protected float[] etx;
-    protected float[] ety;
-    // calculated data
-    protected float[] sumet;
-    protected float[] phi;    // in radians
-    protected final int YX_NUMPOINTS = 200;
-
-    AETMisData(AHashMap p, AEvent e) throws AAtlantisException {
-        super(p, e);
-
-        sumet = p.getFloatArray("et");
-        etx = p.getFloatArray("etx");
-        ety = p.getFloatArray("ety");
-
-        et = new float[numData];
-        phi = new float[numData];
-        for (int i = 0; i < numData; i++) {
-            et[i] = (float) Math.sqrt(etx[i] * etx[i] + ety[i] * ety[i]);
-
-            phi[i] = (float) Math.atan2(ety[i], etx[i]);
-            if (phi[i] < 0.0) {
-                phi[i] += AMath.TWO_PI;
-            }
-        }
-
-    } // AETMisData() -------------------------------------------------------
-
-    /**
-     * Assuming there is only one item in the ETMis datatype which shall
-     * always be, but the rest of the class is more generic (the 0 index)
-     * @return float
-     */
-    public float getET() {
-        return et[0];
-
-    } // getET() ------------------------------------------------------------
-
-    /**
-     * Assuming there is only one item in the ETMis datatype which shall
-     * always be, but the rest of the class is more generic (the 0 index)
-     * @return float
-     */
-    public float getETx() {
-        return etx[0];
-
-    } // getETx() -----------------------------------------------------------
-
-    /**
-     * Assuming there is only one item in the ETMis datatype which shall
-     * always be, but the rest of the class is more generic (the 0 index)
-     * @return float
-     */
-    public float getETy() {
-        return ety[0];
-
-    } // getETy() -----------------------------------------------------------
-
-    /**
-     * Assuming there is only one item in the ETMis datatype which shall
-     * always be, but the rest of the class is more generic (the 0 index)
-     * @return float
-     */
-    public float getPhi() {
-        return phi[0];
-
-    } // getPhi() -----------------------------------------------------------
-
-    /**
-     * Returns info string for picking.
-     * @param index
-     * @return info string
-     */
-    public String getHitInfo(int index) {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-        if (simpleOutput > 0) {
-            String output = getNameScreenName() + " index: " + index;
-            if (simpleOutput == 1 || simpleOutput == 3) {
-                output += "\n ET=" + String.format("%.3f", et[index]) + " GeV\n "
-                        + AMath.PHI + " = " + String.format("%.3f", Math.toDegrees(phi[index])) + AMath.DEGREES;
-            }
-            if (simpleOutput == 2 || simpleOutput == 3) {
-                output += "\n Ex=" + String.format("%.3f", et[index] * Math.cos(phi[index])) + " GeV "
-                        + "\n Ey=" + String.format("%.3f", et[index] * Math.sin(phi[index])) + " GeV ";
-            }
-            return output;
-        }
-
-        String msg;
-
-        msg = getNameScreenName() + "\n";
-        msg += " storegate key: ";
-        msg += (storeGateKey == null ? "n/a" : storeGateKey) + "\n";
-        msg += " Sum-ET  = " + String.format("%.3f", sumet[index]) + " GeV" + "\n"
-                + " ET-Mis  = " + String.format("%.3f", et[index]) + " GeV" + "\n"
-                + " ETx-Mis = " + String.format("%.3f", etx[index]) + " GeV" + "\n"
-                + " ETy-Mis = " + String.format("%.3f", ety[index]) + " GeV" + "\n"
-                + " " + AMath.PHI + " = "
-                + String.format("%.3f", Math.toDegrees(phi[index]))
-                + AMath.DEGREES + "  (" + String.format("%.3f", phi[index]) + " rad)";
-
-        return msg;
-
-    } // getHitInfo() -------------------------------------------------------
-
-    /**
-     * Info on ETMis contained in v-plot rubberband selection
-     * @return String
-     */
-    public String getVPHitInfo() {
-        makeDrawList();
-        if (numDraw == 0) {
-            return "";
-        }
-
-        double sumEt = 0.0;
-        for (int i = 0; i < numDraw; i++) {
-            sumEt += Math.abs(et[i]);
-        }
-
-        String key = getStoreGateKey();
-        String msg = numDraw + " " + (key != null ? "" + key : getNameScreenName());
-        msg += "  ET = " + String.format("%.1f", sumEt);
-        return msg;
-
-    } // getVPHitInfo() -----------------------------------------------------
-
-    /**
-     * getParameterGroup()
-     * @return parameter group
-     */
-    public String getParameterGroup() {
-        return "ETMis";
-
-    } // getParameterGroup() ------------------------------------------------
-
-    public String getName() {
-        return "ETMis";
-
-    } // getName() ----------------------------------------------------------
-
-    public String getNameScreenName() {
-        return "ETMis";
-
-    } // getNameScreenName() ------------------------------------------------
-
-    /**
-     * internalColor()
-     * Implement this atlantis.event.AData method
-     * Coloring of the graphical object on the canvas
-     * @return number of color types
-     */
-    protected int internalColor() {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if (colorFunction == 0) {
-            colorByConstant();
-        } else if (colorFunction == 1) {
-            colorByIndex();
-        } else if (colorFunction == 2) {
-            colorByCollection();
-        }
-
-        return 3;
-
-    } // internalColor() ----------------------------------------------------
-
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-    	//option to scale line width by energy
-        Stroke origStroke = ag.getGraphics2D().getStroke();
-        if(parameterStore.getUnknown("ETMis", "LineWidth").getI()==0){
-            float factor=0.f;
-            if(et[0]<5){
-                factor=1.0f;
-            }else if(et[0]<10.){
-                factor=1.5f;
-            }else if(et[0]<15.){
-                factor=2.0f;
-            }else if(et[0]<20.){
-                factor=2.5f;
-            }else if(et[0]<25.){
-                factor=3.0f;
-            }else if(et[0]<30.){
-                factor=3.5f;
-            }else if(et[0]<35.){
-                factor=4.0f;
-            }else if(et[0]<40.){
-                factor=4.5f;
-            }else{
-                factor=5.0f;
-            }
-            ag.getGraphics2D().setStroke(new BasicStroke(factor));
-        }
-    	
-        if(projection instanceof AProjectionYX)
-        {
-        	// check config whether to draw as arrow or dashed line..
-        	if(parameterStore.get("ETMis", "Drawas").getI() == 0) // Arrow = 0, Dashed = 1
-        	{
-        		drawArrow(window, ag, projection);
-        	}
-        	else
-        	{
-        		drawDashed(window, ag, projection);
-        	}
-        }
-        else if(projection instanceof AProjectionVP)
-        {
-        	// Draw ETMis in VPlot...
-        	ACoord centers = window.calculateDisplay(getUser(projection));
-            int[] drawlist = centers.index;
-            double eLimit = 0.05;
-            final int numPoints = 25;
-            // hv will contain all the coordinates
-            // [2] - x and y value
-            // [drawlist.length] - should be "3" for ET Miss object by default
-            //                     after the PhiWrap
-            // [numPoints] - number of points required for drawing Et missing
-            //               object in V-Plot
-            double[][][] hv = new double[2][drawlist.length][numPoints];
-
-            for(int i = 0; i < drawlist.length; ++i)
-            {
-                int list = drawlist[i];
-
-                int d = (int) (Math.sqrt((this.et[list] / eLimit) / Math.PI));
-                if(d == 0)
-                {
-                    d = 1;
-                }
-
-                for(int j = 0; j < numPoints; j++)
-                {
-                    hv[0][i][j] = centers.hv[0][list][i] +
-                                  d * Math.cos(Math.PI * 2 * j / (numPoints - 1));
-                    hv[1][i][j] = centers.hv[1][list][i] +
-                                  d * Math.sin(Math.PI * 2 * j / (numPoints - 1));
-                }
-            }
-            ag.draw(new ACoord(hv, drawlist, this, ACoord.DOTTED_POLYGONS));
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-        //reset stroke if have changed to scale with energy
-        if(parameterStore.getUnknown("ETMis", "LineWidth").getI()==0)
-            ag.getGraphics2D().setStroke(origStroke);
-    }
-
-    /**
-     * drawArrow()
-     * Method performs the drawing of the object on the canvas as arrow.
-     * @param window
-     * @param ag
-     * @param projection
-     */
-    public void drawArrow(AWindow window, AGraphics ag, AProjection2D projection)
-    {            
-            ACoord centers = window.calculateDisplay(getUser(projection));
-
-            int[] drawlist = centers.index; // draw everything in array
-
-            // scale the arrowhead with zoom...
-            double zoomScaling=0;
-            Point2D.Double[] corners = window.getUserCorners();
-            double widthx=corners[1].x-corners[0].x;
-            double widthy=corners[0].y-corners[2].y;
-            //average width of window
-            double width=Math.sqrt(widthx*widthx+widthy*widthy);
-            //calculate scaling (100 is arbitrary constant)
-            zoomScaling=100/width;
-            double arrowheadScale = 10+10*zoomScaling*Math.log(et[0]+1);
-           
-            // phiPrime represents the angle of the missingET arrow
-            double phiPrime = -1*Math.atan2(ety[0],etx[0]);
-            
-            // arrowMain contains the start point and end point of the arrow
-            double[][][]arrowMain = new double[2][drawlist.length][2];
-            
-            // scale arrow length with etmiss
-            double arrowScale = et[0]*et[0]/250.0; //arbitrary scaling factor
-            double arrowCenter = 2.02; // this sets the starting point of the arrow. 2.02 ~ edge of ID
-            if (arrowScale > 8) {
-            	arrowScale = 8;
-            }
-            for (int i = 0; i < drawlist.length; i++) {
-            	for (int j = 0; j < 2; j++) {
-            		arrowMain[0][i][j] = centers.hv[0][i][0] + (arrowCenter + arrowScale * j)*(centers.hv[0][i][1]-centers.hv[0][i][0]);
-            		arrowMain[1][i][j] = centers.hv[1][i][0] + (arrowCenter + arrowScale * j)*(centers.hv[1][i][1]-centers.hv[1][i][0]);
-            	}
-            }
-            double[][][]arrowHead1 = new double[2][drawlist.length][2];
-            double[][][]arrowHead2 = new double[2][drawlist.length][2];
-            for(int i = 0; i < drawlist.length; i++)
-            {
-            	for(int j=0;j<2;j++)
-            	{
-            		// set the points for the two parts of the arrow head
-            		// 2.591 and 3.691 are the factors to add to the arrow's angle for the correct arrowhead orientation...
-            		arrowHead1[0][i][j] = arrowMain[0][0][1] + j*(arrowheadScale*Math.cos(2.591+phiPrime));
-            		arrowHead1[1][i][j] = arrowMain[1][0][1] + j*(arrowheadScale*Math.sin(2.591+phiPrime));
-            		arrowHead2[0][i][j] = arrowMain[0][0][1] + j*(arrowheadScale*Math.cos(3.691+phiPrime));
-            		arrowHead2[1][i][j] = arrowMain[1][0][1] + j*(arrowheadScale*Math.sin(3.691+phiPrime));	
-            	}
-            }
-            // draw arrow, 3 parts, main arrow body and two lines for arrowhead
-            ag.draw(new ACoord(arrowMain, drawlist, this, ACoord.DOTTED_POLYGONS));
-            ag.draw(new ACoord(arrowHead1, drawlist, this, ACoord.DOTTED_POLYGONS));
-            ag.draw(new ACoord(arrowHead2, drawlist, this, ACoord.DOTTED_POLYGONS));
-        
-    } // drawArrow() -------------------------------------------------------------
-
-    /**
-     * drawDashed()
-     * Method performs the drawing of the object on the canvas as a dashed line.
-     * @param window
-     * @param ag
-     * @param projection
-     */
-    public void drawDashed(AWindow window, AGraphics ag, AProjection2D projection)
-    {        
-            //Stop Etmiss being scaled by Fisheye
-            boolean origStatus = parameterStore.get(projection.getName(), "FishEye").getStatus();
-            parameterStore.get(projection.getName(), "FishEye").setStatus(false);
-            ACoord centers = window.calculateDisplay(getUser(projection));
-            if(origStatus) parameterStore.get(projection.getName(), "FishEye").setStatus(origStatus);
-            
-            int[] drawlist = centers.index; // draw everything in array
-            // hv will contain all the the coordinates
-            // [2] - x and y value
-            // [numData] - should be "1" for ETMis datatype
-            // [YX_NUMPOINTS] - number of points required for ET Miss object
-
-            // length of drawlist should always be 1 -> only 1 iteration
-            double[][][] hv = new double[2][drawlist.length][YX_NUMPOINTS];
-            for(int i = 0; i < drawlist.length; i++)
-            {
-                for(int j = 0; j < YX_NUMPOINTS; j++)
-                {
-                    hv[0][i][j] = centers.hv[0][i][j]; // x
-                    hv[1][i][j] = centers.hv[1][i][j]; // y
-                }
-            }
-            ag.draw(new ACoord(hv, drawlist, this, ACoord.DOTTED_POLYGONS));
-        
-    } // drawDashed() -------------------------------------------------------------
-   /**
-     * getYXUser()
-     * calculates coordinates for the Et missing graphical object which
-     * consists of one arrowed line, i.e. one line and two smaller lines
-     * forming the arrow, all together NUM_POINTS points
-     * @return coordinates
-     */
-    protected ACoord getYXUser()
-    {
-        if (etx[0] == 0.f && ety[0] == 0.f) return ACoord.NO_DATA;
-        
-        makeDrawList(); // applycuts will be called here
-
-        // Et missing graphical object consists of one dashed line from center
-        // to the border of canvas, or an arrow.
-
-        // hv will contain all the coordinates
-        // [2] - x and y value
-        // [numData] - should be "1" for ETMis datatype
-        // YX_NUMPOINTS - number of points required for ET Miss object
-        double[][][] hv = new double[2][numDraw][YX_NUMPOINTS];
-        int[] index = new int[numDraw];
-        // i counter, here should have just one item in the coordinate array
-        // (index.length = 1), numDraw should be 1
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            // main line (dashed)
-            // to be properly done: geting border values over canvas/window
-            double inc = 10000 / YX_NUMPOINTS;
-            double x = Math.cos(phi[list]);
-            double y = Math.sin(phi[list]);
-            for(int ii = 0; ii < YX_NUMPOINTS; ii++)
-            {
-                hv[0][i][ii] = x * (inc * ii);
-                hv[1][i][ii] = y * (inc * ii);
-            }
-            
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this);
-
-    } // getYXUser() --------------------------------------------------------
-
-    @Override
-    protected ACoord getRZUser() {
-        if (etx[0] == 0.f && ety[0] == 0.f) return ACoord.NO_DATA;
-        
-        double s = 1+Math.sqrt(et[0]);//4*parameterStore.get("ETMis", "Scale").getD();
-        if (0 == s || parameterStore.get("ETMis", "Drawas").getI() == 1) {
-            return ACoord.NO_DATA;
-        }
-        makeDrawList(); // applycuts will be called here
-        double[][][] hv = new double[2][numDraw][YX_NUMPOINTS + 4];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++) {
-            int list = listdl[i];
-            double rhoMinus = 500;
-            double rhoMax = 1500;
-            double inc = 1. / YX_NUMPOINTS;
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double rhoPlus = rhoMax;
-            if (Math.abs(et[list]) < maxEnergy) {
-                rhoPlus = (rhoMax - rhoMinus) * s * Math.abs(et[list]) / maxEnergy;
-            }
-
-            double updown = 0;
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            if (phiMid > AMath.TWO_PI) {
-                phiMid -= AMath.TWO_PI;
-            }
-            double phiDiff = Math.abs(phi[list] - phiMid);
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.) {
-                updown = 1;
-            } else {
-                updown = -1;
-            }
-
-            //double y = rhoPlus*Math.cos(phiDiff);//to change with cos of phiDiff
-            double y = rhoPlus * updown;//to change just by up or down
-            for (int ii = 0; ii <= YX_NUMPOINTS; ii++) {
-                hv[0][i][ii] = 0;
-                hv[1][i][ii] = rhoMinus * updown + y * (inc * ii);
-            }
-            hv[0][i][YX_NUMPOINTS + 1] = rhoMinus * .1;
-            hv[1][i][YX_NUMPOINTS + 1] = rhoMinus * updown + 0.8 * y;
-            hv[0][i][YX_NUMPOINTS + 2] = -rhoMinus * .1;
-            hv[1][i][YX_NUMPOINTS + 2] = rhoMinus * updown + 0.8 * y;
-            hv[0][i][YX_NUMPOINTS + 3] = 0;
-            hv[1][i][YX_NUMPOINTS + 3] = rhoMinus * updown + y;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-
-    } // getRZUser() --------------------------------------------------------
-
-    /**
-     * calculate coordinates for the Et missing graphical object
-     * in V-Plot (eta-phi projection)
-     * @return coordinates
-     */
-    protected ACoord getVPUser()
-    {
-        if (etx[0] == 0.f && ety[0] == 0.f) return ACoord.NO_DATA;
-        
-        makeDrawList(); // applycuts will be called here
-
-        // numDraw for ET Miss object should be 1
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[0] = 0.0; // h[0] is the eta value, ETMis always drawn in the
-                        // centre of VPlot - at eta 0
-            v[0] = Math.toDegrees(phi[list]); // v[0] is the phi value
-            index[i] = list;
-        }
-
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-
-    } // getVPUser() --------------------------------------------------------
-
-    /**
-     * this method is defined as an abstract method in AData, so must be
-     * implemented in this child class
-     */
-    protected void applyCuts() {
-
-        // no need to cut index (always 0), and transverse momentum for ET Miss
-        // assuming only 1 item in the ETMis datatype, thus index 0
-        cutPhi(phi[0]);
-
-        // eta value for ET Miss is 0
-        cutEta(0.0f);
-
-        // cut on ETMiss (default cut of 15 GeV)
-        cut("CutsObjects", "ETMis", " |ETMis|", et);
-
-    } // applyCuts() --------------------------------------------------------
-
-    /**
-     * phi cut implementation for ETMis object
-     * @param phi float
-     */
-    protected void cutPhi(float phi) {
-        AParameter par = parameterStore.get("CutsATLAS", "CutPhi");
-        boolean usePhiCut = par.getStatus();
-        if (usePhiCut) {
-            double phiCut = Math.toRadians(Math.abs(par.getD()));
-            double phiMid = Math.toRadians(
-                    AMath.nearestPhiDegrees(parameterStore.get("CutsATLAS", "PhiMiddle").getD()));
-            double phiDiff = Math.abs(AMath.nearestPhiRadians(phi, phiMid)
-                    - phiMid);
-
-            if (phiDiff - phiCut > 1.0e-6) {
-                numDraw = 0;
-            }
-        }
-
-    } // cutPhi() -----------------------------------------------------------
-
-    /**
-     * eta cut implementation for ETMis object
-     * @param eta float
-     */
-    protected void cutEta(float eta) {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        boolean useEtaCut = par.getStatus();
-        if (useEtaCut) {
-            double etaCut = Math.abs(par.getD());
-            double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-            double etaDiff = Math.abs(eta - etaMid);
-            if (etaDiff - etaCut > 1.0e-6) {
-                numDraw = 0;
-            }
-        }
-
-    } // cutEta() -----------------------------------------------------------
-} // class AETMisData =======================================================
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/AElectronData.java b/graphics/AtlantisJava/src/atlantis/data/AElectronData.java
deleted file mode 100755
index 29967a8fc341..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AElectronData.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package atlantis.data;
-
-import java.util.Vector;
-import atlantis.utils.A4Vector;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Reconstructed Electron
- */
-public class AElectronData extends AHelixAODData
-{	
-	private enum isEMe  { TightPP, Tight, Medium, Loose, none }
-	
-    private int[] isEM;
-    private Vector<Enum> isEMEnum = new Vector<Enum>();
-    private String[] label;
-    private float[] eOverp;
-    private int[] hasTrack;
-    
-    AElectronData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        isEM=p.getUnsureIntArray("isEM");
-        String[] isEMString=p.getUnsureStringArray("isEMString");
-        eOverp = p.getUnsureFloatArray("eOverp");
-        hasTrack=p.getUnsureIntArray("hasTrack");
-        label=p.getUnsureStringArray("label");
-        
-        if(isEMString!=null)
-        {
-        	for(String s : isEMString)
-        	{
-        		try {
-        			isEMEnum.add(isEMe.valueOf(s));
-        		}
-        		catch(IllegalArgumentException q) {
-        			isEMEnum.add(isEMe.none);
-        		}
-        	}
-        }
-        else
-        {
-        	for(int i=0;i<numData;i++)
-        	{
-        		isEMEnum.add(isEMe.none);
-        	}
-        }
-    }
-
-    public String getParameterGroup()
-    {
-        return "Electron";
-    }
-
-    public float geteOverp(int index)
-    {
-        return eOverp[index];
-    }
-
-    public String getisEMEnum(int index)
-    {
-    	return isEMEnum.get(index).toString();
-    }
-
-    public int getisEM(int index)
-    {
-        return isEM[index];
-    }
-    
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A4Vector start = new A4Vector();
-            start.setPtEtaPhiM((double)pT[k],(double)eta[k],(double)phi[k],0.00051);
-            sum.add(start);
-        }
-
-        return sum;
-    }
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsObjects", "ElectronPt", " |ET|", pT);
-        
-        // because of the retriever bug, currently 2048 means 0 for isEM
-        // remove this for block when the bug is fixed
-        if(isEM != null)
-        {
-            for(int i=0; i<isEM.length; i++)
-            {
-                if(isEM[i]==2048)
-                    isEM[i] = 0;
-            }
-        }
-        
-        cut("CutsObjects", "ElectronisEM", " isEM", isEM);
-
-        if (parameterStore.get("CutsObjects", "ElectronisEMString").getStatus())
-        {
-        	int cutSub = parameterStore.get("CutsObjects", "ElectronisEMString").getI();
-        
-        	cutArrayEnum(isEMEnum, cutSub, "Electron isEMString");
-        }
-        
-        cut("CutsObjects", "ElectroneOverp", " |eOverp|", eOverp);
-        if (parameterStore.get("CutsObjects", "ElectronhasTrack").getStatus() && hasTrack!=null)
-            cutArray(hasTrack, 1, "hasTrack");
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        
-        if (isEM != null)
-        {
-            msg.append("\n isEM = ");
-            msg.append(isEM[index]);
-        }
-        if (label != null)
-        {
-            msg.append("\n label = ");
-            msg.append(label[index]);
-        }
-        if (eOverp != null)
-        {
-            msg.append("\n eOverp = ");
-            msg.append(eOverp[index]);
-        }
-        if (hasTrack != null)
-        {
-            msg.append("\n hasTrack = ");
-            msg.append(hasTrack[index]);
-        }
-
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AEmTauROIData.java b/graphics/AtlantisJava/src/atlantis/data/AEmTauROIData.java
deleted file mode 100755
index a2c8dc64699b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AEmTauROIData.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-
-/**
- *
- * Em Tau Region Of Interest
- *
- * @author Zdenek Maxa, Qiang Lu
- */
-public class AEmTauROIData extends AROIData
-{
-    AEmTauROIData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-    } // AEmTauROIData() ----------------------------------------------------
-
-    public String getParameterGroup()
-    {
-        return "EmTauROI";
-    }
-
-    public String getName()
-    {
-        return "EmTauROI";
-    }
-
-    public String getNameScreenName()
-    {
-        return "EmTauROI";
-    }
-
-} // class AEmTauROIData ====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/AEventFromXML.java b/graphics/AtlantisJava/src/atlantis/data/AEventFromXML.java
deleted file mode 100755
index b89196931d3d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AEventFromXML.java
+++ /dev/null
@@ -1,786 +0,0 @@
-package atlantis.data;
-
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import atlantis.utils.xml.AArrayParser;
-import atlantis.utils.xml.AFloatArrayParser;
-import atlantis.utils.xml.AIntArrayParser;
-import atlantis.utils.xml.AStringArrayParser;
-import atlantis.utils.xml.AXMLErrorHandler;
-import atlantis.utils.xml.AXMLErrorHandler.ErrorState;
-import java.util.Iterator;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXNotRecognizedException;
-
-
-/**
- * The reader which is used to read XML Event Files. The reader function creates
- * and returns an AEvent class. Event comes with tags which are arrays of
- * numbers. These arrays are treated by xml as character strings. The conversion
- * of the character strings to arrays of number is done here.
- */
-public class AEventFromXML extends DefaultHandler {
-
-  //the logger
-  private final static ALogger logger = ALogger.getLogger(AEventFromXML.class);
-  
-  // Create an instance of this object - this makes sure the constructor is called.
-  // FIXME: should not use constructor to initialize static state.
-  private static final AEventFromXML instance = new AEventFromXML();
-  
-  //We also have our private error handler
-  private static final AXMLErrorHandler xmlErrorHandler = new AXMLErrorHandler();
-  
-  //Parsing states at different XML levels
-  private enum ParseState {
-   WAITING_EVENT,
-   WAITING_DATA,
-   WAITING_ARRAY
-  }
-  private static ParseState parseState;
-    
-  //The XMLReader object
-  private static XMLReader xmlReader;
-  //The event that is being build
-  private static AEvent event = null;
-  //the source name
-  private static String sourceName = null;
-  
-  //non-static parsing data members
-  private AHashMap parameters = null;
-  private String currentDataName = null;
-  private String currentArrayName = null;
-  private String  currentFullName = null;
-  private int arrayLength = 0;
-  private int currentArraySize = 0;
-  private String storeGateKey = null;
-  private AArrayParser arrayParser = null;
-  
-  private static boolean HLTIgnoredWarning = false;
-
- 
-  /**
-   * Constructor
-   * Creates an instance of AEventFromXML. It just sets up the XML reading
-   * stuff but does not do any parsing of any XML file.
-   */
-  private AEventFromXML() { 
-
-    try {
-      //setup all the xml reader stuff
-      SAXParserFactory factory = SAXParserFactory.newInstance();
-      factory.setValidating(true);
-      factory.setNamespaceAware(true);
-      xmlReader = factory.newSAXParser().getXMLReader();
-      xmlReader.setErrorHandler(xmlErrorHandler);
-      xmlReader.setEntityResolver(this);
-      xmlReader.setContentHandler(this);
-    } catch (ParserConfigurationException pce){
-      logger.error("Unable to initialize XML reader!", pce);
-    } catch (SAXException sxe){
-      logger.error("Unable to initialize XML reader!", sxe);    
-    }
-  } // AEventFromXML() ----------------------------------------------------
- 
-
-  /**
-   * Checks if there was an error.
-   * @return true or false 
-   */
-  private boolean hasError() {
-    return (xmlErrorHandler.getErrorState() != ErrorState.NO_ERROR);
-  }
-
-
-  /**
-   * Reads an XML event data (from files, from string converted to stream) and
-   * returns the coresponding AEvent object.
-   *
-   * @param eventInputStream the XML data input stream.
-   * @param sourceName the name of the event source that provided this data
-   * @return an AEvent object containing all the data found in the file.
-   * @throws ReadEventException 
-   */
-  public static AEvent read(InputStream eventInputStream, String sourceName) throws ReadEventException {
-
-    //be verbose
-    logger.info("Parsing event from " + sourceName);
-
-    //set the initial error state
-    xmlErrorHandler.setError(ErrorState.NO_ERROR,null);
-
-    //store the source Name
-    AEventFromXML.sourceName = sourceName;
-    
-    //Try to parse input stream
-    try {   
-      xmlReader.parse(new InputSource(eventInputStream));
-    } catch (Exception e) {
-      //In case of an error repackage as ReadEventException  
-      logger.error("Parsing exception " + e.getMessage(),e);
-      throw new ReadEventException("XML parsing exception", e);
-    }
-
-    //Finally construct the full event (including associations, etc.)
-    //Check for runtime exceptions here in case we fail to finalize the event
-    try {
-      event.finalizeEvent();
-    } catch (RuntimeException rte) {
-      //rethrow as can not read event exception
-      throw new ReadEventException("Inconsistent event data",rte);
-    }
-
-    return event;
-  }
-
-  /**
-   * DefaultHandler Implementation (have a look at
-   * org.xml.sax.helpers.DefaultHandler for more info)
-   */
-  @Override
-  public void startDocument() {
-    
-    //if we are already in error state return immediately
-    if (hasError()) return;
-    
-    //Clean up all local variables
-    event = null;
-    parameters = null;
-    currentDataName = null;
-    currentArrayName = null;
-    currentFullName = null;
-    arrayLength = 0;
-    currentArraySize = 0;
-    storeGateKey = null;
-    arrayParser = null;
-   
-    //Set parse state to new event
-    parseState = ParseState.WAITING_EVENT;
-
-    //be verbose
-    logger.debug("Start parsing document");
-
-  } // startDocument() ----------------------------------------------------
-
-  @Override
-  public void endDocument() {
-    
-    //if we are already in error state return immediatly
-    if (hasError()) return;
-    
-    //be verbose
-    logger.debug("Finished parsing document w/o error");
-    
-  }
-
-  /**
-   * Implementation of DefaultHandler: start a new xml element
-   * @param namespaceURI the namespace
-   * @param localName the local name
-   * @param qName the qualified name
-   * @param atts the default or specified attributes
-   */
-  @Override
-  public void startElement(String namespaceURI, String localName,
-          String qName, Attributes atts) throws SAXException {
-
-    //stop here if errors have occured before
-    if (hasError()) return;
-        
-    try {
-      //Now act depending on parse state
-      switch (parseState) {
-        
-        //Waiting for an event to begin
-        case WAITING_EVENT:
-          //Try to read in event data
-          if (localName.equals("Event")) {
-            
-            //Create a new event
-            event = new AEvent(atts.getValue("eventNumber"),
-                               atts.getValue("runNumber"),
-                               atts.getValue("dateTime"),
-                               sourceName,
-			       atts.getValue("lumiBlock"),
-			       atts.getValue("eventProperty"));	  
-
-            
-            //create a new data hashmap
-            parameters = new AHashMap(15);
-            
-            //Advance to next parsing state
-            parseState = ParseState.WAITING_DATA;
-          
-          } else {
-            //The Event tag does not seem to be the first tag in this event
-            logger.warn("Encountered tag "+localName+ " while waiting for <event/>!");
-          }
-          //Done waiting for event
-          break;
-        
-        //Waiting for a data tag
-        case WAITING_DATA:
-          
-          //Store the current object name
-          currentDataName = localName;
-          //Get number of entries expected here
-          arrayLength = Integer.parseInt(atts.getValue("count"));
-          
-          // if storegate key doesn't exists as an attribute
-          // at datatype, an empty string "" is retrieved (not null)
-          storeGateKey = atts.getValue("storeGateKey");
-          //Construct full name from datatype name and storeGateKey
-          currentFullName = currentDataName + "-" + storeGateKey;
-     
-          // ignore data with storeGateKey containing "HLTAutoKey"
-          // Its important that parseState is not set before,
-          // so we arrive waiting for a new data tag when this error is cleared
-          if (!AGlobals.instance().showHLTAutoKeys() && storeGateKey.indexOf("HLTAutoKey") >= 0) {
-            //Set appropiate error state and continue
-            xmlErrorHandler.setError(ErrorState.IGNORED_DATA, new Exception("Ignored HLTAutoKey data "+currentFullName));
-            return;
-          }
-          
-          parameters.clear();
-          // add numData - number of data within the subtags,
-          // extracted from count attribute
-          parameters.put("numData", new Integer(arrayLength));
-          parameters.put("storeGateKey", storeGateKey);
-          parseState = ParseState.WAITING_ARRAY; 
-          break;
-          
-        //Waiting for an data value array
-        case WAITING_ARRAY:
-          
-          //store name of the array we are looking at
-          currentArrayName = localName;
-          
-          if ((atts.getValue("type") == null) ||
-              (atts.getValue("multiple") == null))
-            throw new SAXNotRecognizedException("No array type or multiplicity available for "+localName);
-          
-          String type = atts.getValue("type");
-
-          //get multiplicity if needed
-          float multiple = Float.parseFloat(atts.getValue("multiple"));
-          currentArraySize = Math.round(arrayLength * multiple);
-         
-          
-          //Instanciate a new array parser
-          if (type.equals("FLOAT")) {
-            arrayParser = new AFloatArrayParser(currentArraySize);
-          } else if (type.equals("INT")) {
-            arrayParser = new AIntArrayParser(currentArraySize);
-          } else if (type.equals("STRING")) {
-            arrayParser = new AStringArrayParser(currentArraySize);
-          } else {
-            throw new SAXNotRecognizedException("Invalid array type: " + type);
-          }
-          
-          break;
-          
-      } // switch
-    } catch (SAXNotRecognizedException sre){
-      //Catch unknown array tags
-      xmlErrorHandler.setError(ErrorState.INVALID_DATA,sre);
-      logger.debug("Encountered invalid subtag "+localName, sre);  
-    } catch (Exception e) {
-      //Catch any other error here:
-      String msg = "Error reading file at " + currentFullName + ":" + currentArrayName;
-      xmlErrorHandler.setError(ErrorState.FATAL_ERROR,e);
-      logger.debug(msg, e);
-      //Rethrow readevent exception with proper cause
-      throw new SAXException(msg, e);
-    }
-
-  } 
-  
-  /**
-   * Called at the end of each tag - this is where we actually construct the data
-   * @param namespaceURI - the current namespace
-   * @param localName - the local element name
-   * @param qName - the qualified element name
-   */
-  @Override
-  public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-    
-    /**
-     * Check if an error had occured reading this element
-     */
-    if (hasError()) {
-     
-      String msg = null;
-      
-      switch (xmlErrorHandler.getErrorState()) {
-        
-        case UNKNOWN_TAG:
-          //Ignore unknown tags, but show an error
-     
-          if (parseState == ParseState.WAITING_DATA)
-            msg = "Unknown or obsolete data type <" + currentDataName + "> found";
-          else if (parseState == ParseState.WAITING_ARRAY)
-            //rely on exception error message for this one
-            msg = xmlErrorHandler.getErrorCause().getMessage();
-          else 
-            //unknown tag at event level
-            msg = "Unknown tag <" + currentDataName + "> while waiting for event."; 
-          
-          //Clear the error state and continue
-          xmlErrorHandler.setError(ErrorState.NO_ERROR, null);
-          break;
-          
-        case INVALID_DATA:
-          msg = "Invalid data encountered reading "+currentDataName;
-          //Clear the error state and continue
-          xmlErrorHandler.setError(ErrorState.NO_ERROR, null);
-          break;
-   
-        case IGNORED_DATA:
-          
-          //Only show warning message in the LogPane once
-          if (!HLTIgnoredWarning) {
-            AOutput.append("\"HLTAutoKey\" data is hidden, option '-a' to see them.",
-                           ALogInterface.WARNING);
-            //tell about each one also in the log
-            logger.warn(xmlErrorHandler.getErrorCause().getMessage());
-            HLTIgnoredWarning = true;
-          }
-          
-          //Clear the error only when we reach the end of the data tag
-          if (localName.equals(currentDataName))        
-            xmlErrorHandler.setError(ErrorState.NO_ERROR, null);
-          
-          break;
-      }
-      
-      //If there was a message, show it
-      if (msg != null){
-        // Now show this error in the log pane and console output
-        logger.warn(msg,xmlErrorHandler.getErrorCause());
-      }     
-      //Return to parsing (if error cleared) or stop
-      return;
-    }
-    
-    /**
-     * No error so far - check what we have been parsing
-     */
-    switch (parseState) {
-      
-      case WAITING_ARRAY:
-        
-        /**
-         * End of data array - add to parameter list
-         */
-        if (localName.equals(currentArrayName)) {
-          
-          //Check for proper Array size
-          if (arrayParser.getCount() != currentArraySize) {
-            
-            xmlErrorHandler.setError(ErrorState.INVALID_DATA, new Exception("Invalid array size"));
-  
-            String msg = "The number of data in <" + currentFullName + ">-<" + currentArrayName + "> is different than declared";
-            logger.error(msg);
-            AOutput.append("\n"+msg+"\n", ALogInterface.WARNING);
-            return;
-          }
-          //Otherwise add to parameter list 
-          parameters.put(currentArrayName, arrayParser.getArray());
-          
-          //done with that, return
-          return;
-        }
-          
-        /**
-         * End of data tag - construct object
-         */
-        if (localName.equals(currentDataName)) {
-          try {
-            // Calo and muon datatypes sometimes provide a
-            // storeGateKey, thus are (incorrectly !)
-            // regarded as multiple collection datatypes
-            // -> remove this storeGateKey
-            if ("TILE".equals(currentDataName) ||
-                    "LAr".equals(currentDataName) ||
-                    "HEC".equals(currentDataName) ||
-                    "FCAL".equals(currentDataName) ||
-                    "MBTS".equals(currentDataName) ||
-                    "MDT".equals(currentDataName) ||
-                    "CSC".equals(currentDataName) ||
-                    "RPC".equals(currentDataName) ||
-                    "TGC".equals(currentDataName)) {
-              parameters.put("storeGateKey", null);
-            }
-
-            // RDOs originally implemented as multiple collections,
-            // then changed to non-mul-col. this is for backwards
-            // compatibility with events where storeGateKey is
-            // provided for PixelRDO and SCTRDO
-            if ("PixelRDO".equals(currentDataName) ||
-                    "SCTRDO".equals(currentDataName)) {
-              parameters.put("storeGateKey", null);
-            }
-
-            checkPhiRange(parameters, currentFullName);
-
-            if (currentDataName.equals("STr")) {
-              event.add(new ASVxData(ASVxData.createSVx(parameters), event));
-              event.add(new ASTrData(ASTrData.createSTr(parameters), event));
-              event.add(new ASNPData(ASNPData.createSNP(parameters), event));
-            } // STC - silicon cluster datatype
-            else if (currentDataName.equals("STC")) {
-              event.add(new ASiClusterData(parameters, event));
-            } // SCTRDO - silicon cluster raw data object
-            // discrepancy in naming STC x SCT ...
-            else if (currentDataName.equals("SCTRDO")) {
-              event.add(new ASiClusterRDOData(parameters, event));
-            }  // PixCluster - pixel cluster datatype
-            else if (currentDataName.equals("PixCluster")) {
-              event.add(new APixelClusterData(parameters, event));
-            }
-            // ETMis backwards compatibility (after ETMis collections)
-            // datatypes ETMis, CaloETMis, MuonETMis - storeGateKey
-            // attribute is added here
-            else if (currentDataName.equals("ETMis") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "ETMis");
-              event.add(new AETMisData(parameters, event));
-            } else if (currentDataName.equals("CaloETMis")) {
-              parameters.put("storeGateKey", "CaloETMis");
-              event.add(new AETMisData(parameters, event));
-            } else if (currentDataName.equals("MuonETMis")) {
-              parameters.put("storeGateKey", "MuonETMis");
-              event.add(new AETMisData(parameters, event));
-            } // Track collections, backwards compatibility for
-            // IDScan, iPat, xKal datatypes - storeGateKey attribute
-            // is added here
-            else if (currentDataName.equals("Track")) {
-
-              String key = (String) parameters.get("storeGateKey");
-              if (key != null) {
-                if (key.toLowerCase().indexOf("mboy") >= 0 || key.toLowerCase().indexOf("mugirl") >=0 || key.toLowerCase().indexOf("moore") >= 0 || key.toLowerCase().indexOf("momu") >= 0 || key.toLowerCase().indexOf("muon") >= 0 || key.toLowerCase().indexOf("staco") >= 0 || key.toLowerCase().indexOf("muid") >= 0 || key.toLowerCase().indexOf("mutag") >= 0 ) {
-                  event.add(new AMuonTrackData(parameters, event));
-                } else {
-                  event.add(new AInDetTrackData(parameters, event));
-                }
-              } else {
-                int[] trackAuthor = parameters.getUnsureIntArray("trackAuthor");
-                if (trackAuthor != null && trackAuthor.length > 0) {
-                  if ((trackAuthor[0] >= 7 && trackAuthor[0] <= 9) || (trackAuthor[0] >= 13 && trackAuthor[0] <= 17)) {
-                    event.add(new AMuonTrackData(parameters, event));
-                  } else {
-                    event.add(new AInDetTrackData(parameters, event));
-                  }
-                } else {
-                  event.add(new AInDetTrackData(parameters, event));
-                }
-              }
-            } else if (currentDataName.equals("IDScan")) {
-              parameters.put("storeGateKey", "TrigInDetTrack");
-              event.add(new AInDetTrackData(parameters, event));
-            } else if (currentDataName.equals("iPat")) {
-              parameters.put("storeGateKey", "iPatTrack");
-              event.add(new AInDetTrackData(parameters, event));
-            } else if (currentDataName.equals("xKal")) {
-              parameters.put("storeGateKey", "xKalTrack");
-              event.add(new AInDetTrackData(parameters, event));
-            } else if (currentDataName.equals("RTr")) // old tag
-            {
-              parameters.put("storeGateKey", "RTrTrack");
-              event.add(new AInDetTrackData(parameters, event));
-            } else if (currentDataName.equals("RMTr")) // old tag
-            {
-              parameters.put("storeGateKey", "RMTrTrack");
-              event.add(new AMuonTrackData(parameters, event));
-            } // ParticleJet backwards compatibility
-            else if (currentDataName.equals("ParticleJet") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "ParticleJet cone4");
-              // treat PatricleJet as Jet (JetRecJet)
-              event.add(new AJetData(parameters, event));
-            } else if (currentDataName.equals("Jet") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "JetRecJet");
-              event.add(new AJetData(parameters, event));
-            } // MSeg backwards compatibility
-            else if (currentDataName.equals("MSeg")) {
-              parameters.put("storeGateKey", "MooreSegment");
-
-              // Instead of cotan(theta) we store theta itself.
-              float[] cotTheta = parameters.getFloatArray("cotTheta");
-              float[] theta = new float[cotTheta.length];
-              for (int i = 0; i < cotTheta.length; i++) {
-                theta[i] = (float) Math.atan(1. / cotTheta[i]);
-              }
-              parameters.put("theta", theta);
-
-              // And phi0 is now called phi
-              parameters.put("phi", parameters.getFloatArray("phi0"));
-
-              event.add(new AMuonSegmentData(parameters, event));
-            } // Segment backwards compatibility
-            else if (currentDataName.equals("Segment")) {
-              String key = (String) parameters.get("storeGateKey");
-              if (key != null) {
-                if (key.toLowerCase().indexOf("mboy") >= 0 || key.toLowerCase().indexOf("moore") >= 0 || key.toLowerCase().indexOf("momu") >= 0 || key.toLowerCase().indexOf("mdt") >= 0 || key.toLowerCase().indexOf("muon") >= 0) {
-                  event.add(new AMuonSegmentData(parameters, event));
-                } else {
-                  event.add(new AInDetSegmentData(parameters, event));
-                }
-              }
-            } // Cluster backwards compatibility
-            // datatypes Cluster - storeGateKey attribute is added
-            else if (currentDataName.equals("Cluster") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "DefaultCluster");
-              event.add(new AClusterData(parameters, event));
-            } //Electron backwards compatibility
-            else if (currentDataName.equals("Electron") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "ElectronCollection");
-              event.add(new AElectronData(parameters, event));
-            } //Muon backwards compatibility
-            else if (currentDataName.equals("Muon") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "MuonCollection");
-              event.add(new AMuonData(parameters, event));
-            } //Photon backwards compatibility
-            else if (currentDataName.equals("Photon") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "PhotonCollection");
-              event.add(new APhotonData(parameters, event));
-            } //BJet backwards compatibility
-            else if (currentDataName.equals("BJet") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "BJetCollection");
-              event.add(new ABJetData(parameters, event));
-            } //TauJet backwards compatibility
-            else if (currentDataName.equals("TauJet") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "TauJetCollection");
-              event.add(new ATauJetData(parameters, event));
-            } //CompositeParticle backwards compatibility
-            else if (currentDataName.equals("CompositeParticle") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "CompositeParticleCollection");
-              event.add(new ACompositeParticleData(parameters, event));
-            } //LVL1Result backwards compatibility
-            else if (currentDataName.equals("LVL1Result") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "LVL1Result");
-              event.add(new ALVL1ResultData(parameters, event));
-            } //LVL1TriggerTower backwards compatibility
-            else if (currentDataName.equals("LVL1TriggerTower") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "LVL1TriggerTower");
-              event.add(new ALVL1TriggerTowerData(parameters, event));
-            } //LVL1JetElement backwards compatibility
-            else if (currentDataName.equals("LVL1JetElement") &&
-                    "".equals(storeGateKey)) {
-              parameters.put("storeGateKey", "LVL1JetElement");
-              event.add(new ALVL1JetElementData(parameters, event));
-            } else {
-              //try to autoconstruct the corresponding data type
-              //First of all get all constructors for this class name 
-              Constructor[] cons = Class.forName("atlantis.data.A" + currentDataName + "Data").getDeclaredConstructors();
-              //Flag if we found on
-              boolean foundConstructor = false;
-              //Now loop over constructors and pick the one that fits
-              for (Constructor constructor : cons) {
-                //Check for parameters
-                Class[] params = constructor.getParameterTypes();
-                if (params.length != 2) {
-                  continue;
-                //Check both types
-                }
-                if (!params[0].getName().endsWith("AHashMap")) {
-                  continue;
-                }
-                if (!params[1].getName().endsWith("AEvent")) {
-                  continue;
-                //seems we found the proper constructor - go and build the class
-                }
-                foundConstructor = true;
-                event.add((AData) constructor.newInstance(new Object[]{parameters, event}));
-                //also end the loop here
-                break;
-              }
-              if (!foundConstructor) {
-                throw new ClassNotFoundException("Found no valid constructor for data type " + currentDataName);
-              }
-            } // End of autoconstructor
-  
-          
-          //Collect all possible errors here
-          } catch (Throwable t) {
-            //Will hold the error message
-            String msg = null;
-            
-            //Could not find a class for this data type 
-            if (t instanceof ClassNotFoundException) {
-              msg = "Class handling the type " + currentDataName + " not found";
-              xmlErrorHandler.setError(ErrorState.INVALID_DATA, t);
-            //Ran out ouf memory
-            } else if (t instanceof OutOfMemoryError) {
-              msg = "Atlantis ran out of memory while\n" + "reading in event data";
-              xmlErrorHandler.setError(ErrorState.FATAL_ERROR, t);
-            //Some weird Atlantis exception - check its error state
-            } else if (t instanceof AAtlantisException) {
-              msg = t.getMessage();
-              //check Atlantis exception level
-              if (((AAtlantisException)t).isFatal())
-                xmlErrorHandler.setError(ErrorState.FATAL_ERROR, t);
-              else
-                xmlErrorHandler.setError(ErrorState.OTHER_ERROR, t);
-            } else if (t instanceof InvocationTargetException) {
-              msg = "Error when constructing " + currentFullName;
-              xmlErrorHandler.setError(ErrorState.OTHER_ERROR, t);
-            } else {
-              msg = "Caught exception "+t.toString()+ " while constructing "+currentFullName;
-              xmlErrorHandler.setError(ErrorState.OTHER_ERROR, t);
-            }
-         
-            AOutput.append("\n" + msg + "\n", ALogInterface.WARNING);
-            logger.error(msg, t);
-          }
-
-          /**
-           * Now handle potential errors 
-           */
-          //if we can proceed processing, throw an error
-          if (xmlErrorHandler.getErrorState() == ErrorState.FATAL_ERROR)
-            throw new SAXException("Error parsing event at tag <"+currentDataName+">",
-                    (Exception)xmlErrorHandler.getErrorCause());
-          
-          //Otherwise clear error state and continue
-          xmlErrorHandler.setError(ErrorState.NO_ERROR, null);
-          parseState = ParseState.WAITING_DATA;
-          return;
-        }
-      
-    }
-  }
-  
-  /**
-   * xml calls this routine whenever it finds CONTENT of type character array
-   * (CDATA) this routine fills an array stored in the arrayParser *
-   *
-   * @param ch char[]
-   * @param start int
-   * @param length int
-   */
-  @Override
-  public void characters(char[] ch, int start, int length) {
-    
-    //return immediately if we had an error before
-    if (hasError()) return;
-   
-    //Make sure an arrayParser has been set before
-    if (arrayParser == null){
-      xmlErrorHandler.setError(ErrorState.FATAL_ERROR,new NullPointerException("ArrayParser object not defined"));
-      logger.error("arrayParser is NULL in SAX DefaultHandler:characters");
-      return;  
-    }
-    
-    //try to parse the value array
-    try {
-      arrayParser.parse(ch, start, length);
-    } catch (NumberFormatException nfe) {
-      xmlErrorHandler.setError(ErrorState.INVALID_DATA,nfe);
-      String msg = "Data in <" + currentFullName + ">-<" + currentArrayName +
-                   "> contains invalid character \'" + nfe.getMessage() + "\'";
-      logger.error(msg);
-      
-    } catch (IndexOutOfBoundsException oob) {
-      xmlErrorHandler.setError(ErrorState.INVALID_DATA,oob);
-      String msg = "The number of data in <" + currentFullName + ">-<" 
-                   + currentArrayName + "> is more than declared";
-      logger.error(msg);
-    }
-
-  } // characters() --------------------------------------------------------
-
-  /**
-   * Returns an entity resolver - should be event.dtd in case we read an event file
-   * otherwise return null to use the default
-   * @param publicId
-   * @param systemId
-   * @return an input source for the entity resolver
-   */
-  @Override
-  public InputSource resolveEntity(String publicId, String systemId) {
-    InputSource inputSource = null;
-    String FILE_SEPAR = System.getProperty("file.separator");
-
-    if (systemId.endsWith("event.dtd")) {
-      String dtdFile = AGlobals.instance().getHomeDirectory() + "events" + FILE_SEPAR + "event.dtd";
-      try {
-        InputStream is = AUtilities.getFileAsStream(dtdFile);
-        inputSource = new InputSource(is);
-      } catch (AAtlantisException ae) {
-        logger.error("reading " + dtdFile + " error: " + ae.getMessage(), ae);
-      }
-    }
-
-    return inputSource;
-
-  } // resolveEntity() ----------------------------------------------------
-
-  /**
-   * Corrects the Phi values to be in the range (0:2pi).
-   * NOTE: This can still be done much nicer - but have you seen what it looked like before?!
-   * @param p The AHashMap containing the float arrays to be checked.
-   */
-  private static void checkPhiRange(AHashMap p, String fullDataName) {
-
-    //Loop over all keys in the Hashmap
-    Iterator keyIter = p.keySet().iterator();
-    while (keyIter.hasNext()) {
-      //Check if this is a phi collection
-      String keyName = (String) keyIter.next();
-      //Only run on phi value arrays
-      if (!keyName.startsWith("phi")) {
-        continue;
-      //Now  get the actual array of values
-      }
-      float[] phi = null;
-      try {
-        phi = (float[]) p.get(keyName);
-      } catch (ClassCastException cce) {
-        //ignore any non-floar arrays that start with "phi"
-        continue;
-      }
-      //Check that we didn't get an empty entry
-      if (phi == null) {
-        continue;      //Now loop over all entries and correct them
-      }
-      for (int i = 0; i < phi.length; i++) {
-        //Bring it down to the modulus of 2*Pi
-        phi[i] = phi[i] % (float)AMath.TWO_PI;
-        //Smaller zero is still possible 
-        if (phi[i] < 0.) phi[i] += AMath.TWO_PI;
-      }
-    }
-  } // checkPhiRange() -----------------------------------------------------
-} // class AEventFromXML ====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/AFCALData.java b/graphics/AtlantisJava/src/atlantis/data/AFCALData.java
deleted file mode 100755
index 9e8d233d12e2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AFCALData.java
+++ /dev/null
@@ -1,1228 +0,0 @@
-package atlantis.data;
-
-import atlantis.canvas.ACanvas;
-import atlantis.event.AEvent;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.utils.AUtilities;
-import atlantis.utils.ALogger;
-import java.io.IOException;
-import com.Ostermiller.util.CSVParser;
-import java.io.StringReader;
-import java.io.InputStream;
-import java.io.FileNotFoundException;
-
-/**
- * The Forward calorimeter implementation.
- *
- * @author Eric Jansen
- */
-public class AFCALData extends ACalorimeterData
-{
-    private static ALogger logger = ALogger.getLogger(AFCALData.class);
-    
-    protected float[] x;
-    protected float[] y;
-    protected float[] z;
-    protected float[] r;
-    protected float[] dx;
-    protected float[] dy;
-    protected float[] dz;
-    protected float[] dr;
-
-    private int[][] cellTable;
-
-    // data for real pulse shapes plots
-    private int numSamplings = 0;
-    private int[][] adcCounts = null;
-    private float[] cellTime = null;
-    private int[] cellGain = null;
-    private float[] cellPedestal = null;
-    private float[] adc2Mev = null;
-    private static boolean pulseShapesDataAvailable = false;
-    private static final String LOOKUP_TABLE_FILE =
-        AGlobals.instance().getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		"rpsplt_fcal.csv";
-    // number of lookup table values for real pulse shapes plots calculation
-    private static final short NUMBER_OF_LOOKUP_VALUES = 600;
-
-
-
-    AFCALData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        x = p.getFloatArray("x");
-        dx = p.getFloatArray("dx");
-        y = p.getFloatArray("y");
-        dy = p.getFloatArray("dy");
-
-        r = new float[numData];
-        dr = new float[numData];
-
-        cellTable = new int[MAX_HIT_INDEX][MAX_HIT_INDEX];
-
-        for (int i = 0; i < numData; i++)
-        {
-            try
-            {
-                side[i] = (byte) AIdHelper.larBarrelEndcap(id[i]);
-                etaIndex[i] = (short) AIdHelper.larEta(id[i]);
-                phiIndex[i] = (short) AIdHelper.larPhi(id[i]);
-                sampling[i] = 0; //AIdHelper.larSampling(id[i]);
-            }
-            catch (AAtlantisException ex)
-            {
-                logger.error("Problem decoding ID " + id[i] + " in " +
-                        CALORIMETER_NAME + ": " + ex.getMessage());
-                side[i] = 0;
-                etaIndex[i] = -1;
-                phiIndex[i] = -1;
-                sampling[i] = -1;
-            }
-        }
-
-        // Events produced by older JiveXML versions don't have z and dz yet.
-        // Use the old hardcoded values in that case for backwards
-        // compatibility.
-        if (p.get("z") == null || p.get("dz") == null)
-        {
-            z = new float[numData];
-            dz = new float[numData];
-            for (int i = 0; i < numData; i++)
-            {
-                switch (sampling[i])
-                {
-                    case 0:
-                        z[i] = (side[i] / Math.abs(side[i])) * 489.4f;
-                        dz[i] = 45.2f;
-                        break;
-                    case 1:
-                        z[i] = (side[i] / Math.abs(side[i])) * 534.8f;
-                        dz[i] = 45.0f;
-                        break;
-                    case 2:
-                        z[i] = (side[i] / Math.abs(side[i])) * 582.2f;
-                        dz[i] = 45.0f;
-                        break;
-                }
-            }
-        }
-        else
-        {
-            z = p.getFloatArray("z");
-            dz = p.getFloatArray("dz");
-        }
-
-        float drMin = 0.0f, zMin = 0.0f, zMax = 0.0f, rMin = 0.0f, rMax = 0.0f;
-        for (int i = 0; i < numData; i++)
-        {
-
-            if (side[i] < 0)
-            {
-                sub[i] = 0;
-            }
-            else
-            {
-                sub[i] = 1;
-            }
-
-            float etaMin = (float) AMath.etaAbs(z[i], Math.sqrt(Math.pow(Math.abs(x[i]) - dx[i], 2) +
-                    Math.pow(Math.abs(y[i]) - dy[i], 2)));
-            float etaMax = (float) AMath.etaAbs(z[i], Math.sqrt(Math.pow(Math.abs(x[i]) + dx[i], 2) +
-                    Math.pow(Math.abs(y[i]) + dy[i], 2)));
-            eta[i] = (etaMin + etaMax) / 2.f;
-            //TODO check calculation original: deta[i] = etaMax - etaMin;
-            deta[i] = Math.abs(etaMax - etaMin);
-            phi[i] = (float) Math.atan2(y[i], x[i]);
-            dphi[i] = (float) Math.abs(Math.atan2(y[i] + dy[i], x[i] - dx[i]) -
-                    Math.atan2(y[i] - dy[i], x[i] + dx[i]));
-            if (phi[i] < 0)
-            {
-                phi[i] += 2. * Math.PI;
-            }
-
-            r[i] = (float) Math.sqrt(x[i] * x[i] + y[i] * y[i]);
-            dr[i] = (float) Math.sqrt(dx[i] * dx[i] + dy[i] * dy[i]);
-
-            // Collect some constants needed for binning the histograms.
-            if (rMin == 0.0 || Math.abs(r[i]) - dr[i] / 2. < rMin)
-            {
-                rMin = Math.abs(r[i]) - dr[i] / 2.f;
-            }
-            if (rMax == 0.0 || Math.abs(r[i]) + dr[i] / 2. > rMax)
-            {
-                rMax = Math.abs(r[i]) + dr[i] / 2.f;
-            }
-            if (zMax == 0.0 || Math.abs(z[i]) + dz[i] / 2. > zMax)
-            {
-                zMax = Math.abs(z[i]) + dz[i] / 2.f;
-            }
-            if (zMin == 0.0 || Math.abs(z[i]) - dz[i] / 2. < zMin)
-            {
-                zMin = Math.abs(z[i]) - dz[i] / 2.f;
-            }
-            if (drMin == 0.0 || dr[i] < drMin)
-            {
-                drMin = dr[i];
-            }
-        }
-
-        etaGranularity = AParameterUtilities.eta(zMin, rMax - drMin) - AParameterUtilities.eta(zMin, rMax);
-        outerEta = AParameterUtilities.eta(zMax, rMin);
-
-        // Collect some constants needed for drawing the histograms.
-        for (int i = 0; i < ACalorimeterDetector.count(); i++)
-        {
-            if (outerR == 0.0 || ACalorimeterDetector.get(i).getRMax() > outerR)
-            {
-                outerR = ACalorimeterDetector.get(i).getRMax();
-            }
-            if (outerZ == 0.0 || ACalorimeterDetector.get(i).getZMax() > outerZ)
-            {
-                outerZ = ACalorimeterDetector.get(i).getZMax();
-            }
-        }
-
-        for (int i = 0; i < et.length; ++i)
-        {
-            et[i] = Math.abs(energy[i] / (float) Math.cosh(eta[i]));
-        }
-
-        // read in FCAL data from real pulse shapes plots
-        readPulseShapePlotData(p);
-
-    }
-
-
-
-    /**
-     * readLookupTableFile() reads in comma separated values (CSV) file
-     * with FCAL real pulse shapes plots time and amplitude lookup values
-     * @param fileName String
-     * @throws AAtlantisException
-     */
-    private void readLookupTableFile() throws AAtlantisException
-    {
-        try
-        {
-            InputStream is = AUtilities.getFileAsStream(LOOKUP_TABLE_FILE);
-            CSVParser parser = new CSVParser(is);
-            parser.setCommentStart("#");
-            String arrayName =  null;
-
-            while((arrayName = parser.nextValue()) != null)
-            {
-                String valueArray = parser.nextValue(); // shall now contain all values
-                CSVParser parserArray = new CSVParser(new StringReader(valueArray));
-                String[][] s = parserArray.getAllValues();
-
-                if("FCAL_LAYER0_AMPLITUDE".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.FCAL_LAYER0_AMPLITUDE =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-                else if("FCAL_LAYER1_AMPLITUDE".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.FCAL_LAYER1_AMPLITUDE =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-                else if("FCAL_LAYER2_AMPLITUDE".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.FCAL_LAYER2_AMPLITUDE =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-                else if("FCAL_TIME".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.FCAL_TIME =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-            } // while
-        }
-        catch(FileNotFoundException e)
-        {
-            throw new AAtlantisException("could not find file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(IOException e)
-        {
-            throw new AAtlantisException("exception while reading file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(AAtlantisException e)
-        {
-            throw e;
-        }
-
-    } // readLookupTableFile() ----------------------------------------------
-
-
-
-    private void readPulseShapePlotData(AHashMap p)
-    {
-        // read ADCCounts and cell data for real pulse shapes plots
-        adcCounts = super.getADCCountsData(p);
-
-        // read LAr digits (cell data) for real pulse shapes plots
-        cellTime = (p.get("cellTime") != null) ? p.getFloatArray("cellTime") : null;
-        cellGain = (p.get("cellGain") != null) ? p.getIntArray("cellGain") : null;
-        cellPedestal = (p.get("cellPedestal") != null) ? p.getFloatArray("cellPedestal") : null;
-        adc2Mev = (p.get("adc2Mev") != null) ? p.getFloatArray("adc2Mev") : null;
-
-        pulseShapesDataAvailable = false;
-        if(adcCounts != null && cellTime != null && cellGain != null &&
-           cellPedestal != null && adc2Mev != null)
-        {
-            pulseShapesDataAvailable = true;
-            numSamplings = adcCounts[0].length;
-
-            logger.debug(CALORIMETER_NAME +
-                    ": data for real pulse shape plots available");
-
-
-            if(ACalorimeterRPSPLT.areFCALLookupTablesInitialized())
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup tables have already been read in");
-            }
-            else
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup table values have not been read in yet\n" +
-                        "  trying to read file: " + LOOKUP_TABLE_FILE);
-                try
-                {
-                    readLookupTableFile();
-
-                    logger.debug(CALORIMETER_NAME +
-                            ": values from " + LOOKUP_TABLE_FILE +
-                            " successfully read in");
-                    
-                }
-                catch(AAtlantisException ex)
-                {
-                    logger.debug(CALORIMETER_NAME +
-                                  ": reading " + LOOKUP_TABLE_FILE +
-                                  " failed, real pulse shapes plots will not " +
-                                  "be available, reason: " + ex.getMessage(), ex);
-                    pulseShapesDataAvailable = false;
-                }
-            }
-        }
-
-    } // readPulseShapePlotData() -------------------------------------------
-
-
-
-
-    /**
-     * Returns the name of the parameter group.
-     *
-     * @return String parameter group
-     */
-    public String getParameterGroup()
-    {
-        return "FCAL";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getName()
-    {
-        return "FCAL";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getNameScreenName()
-    {
-        return "FCAL";
-    }
-
-    /**
-     * Returns the type of calorimeter (ECAL/HCAL) for a hit.
-     *
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public String getCalorimeterType(int index)
-    {
-        if (sampling[index] == 0)
-        {
-            return "ECAL";
-        }
-        else
-        {
-            return "HCAL";
-        }
-    }
-
-    /**
-     * Calorimeter cells can be drawn either explicitly or implicitly. In most
-     * views cells that are located behind eachother are consolidated and only
-     * the most energetic one is drawn explicitly. The other cells are drawn
-     * implicitly, since their energy value is still added to the energy sum of
-     * the explicitly drawn cell. The list manager does not know about the
-     * implicitly drawn cells though, so this poses a problem when the user
-     * requests information about a certain area of the canvas. This is solved
-     * using this method. This function receives the list of explicitly drawn
-     * cells and then adds the ones that were implicitly drawn in this
-     * selection.
-     *
-     * @param drawn boolean[] initial drawn list containing only the explicitly
-     *        drawn cells
-     * @return boolean[] drawn list containing the explicitly and the implicitly
-     *         drawn cells.
-     */
-    public boolean[] expandDrawn(boolean[] drawn)
-    {
-        AProjection projection = ACanvas.getCanvas().getCurrentWindow().getProjection();
-
-        if (projection instanceof AProjectionYX)
-        {
-            return expandDrawnYX(drawn);
-        }
-        else if (projection instanceof AProjectionRZ)
-        {
-            return expandDrawnRZ(drawn);
-        }
-        else
-        {
-            return drawn;
-        }
-    }
-
-    /**
-     * Filters the drawList for the y-x projection. Hits from both endcaps are
-     * combined.
-     */
-    protected void filterDrawListYX()
-    {
-        float etTable[][] = new float[MAX_HIT_INDEX][MAX_HIT_INDEX];
-        for (int i = 0; i < MAX_HIT_INDEX; i++)
-        {
-            for (int j = 0; j < MAX_HIT_INDEX; j++)
-            {
-                cellTable[i][j] = -1;
-                etTable[i][j] = 0.0f;
-            }
-        }
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            int eta = etaIndex[j];
-            int phi = phiIndex[j];
-            etTable[eta][phi] += et[j];
-            if (cellTable[eta][phi] < 0 || et[cellTable[eta][phi]] < et[j])
-                cellTable[eta][phi] = j;
-        }
-
-        numDraw = 0;
-        for (int i = 0; i < MAX_HIT_INDEX; i++)
-        {
-            for (int j = 0; j < MAX_HIT_INDEX; j++)
-            {
-                if (cellTable[i][j] > 0)
-                {
-                    listdl[numDraw] = cellTable[i][j];
-                    etSum[listdl[numDraw]] = etTable[i][j];
-                    numDraw++;
-                }
-            }
-        }
-    }
-
-    /**
-     * See expandDrawn.
-     *
-     * @param drawn boolean[] initial drawn list containing only the explicitly
-     *        drawn cells
-     * @return boolean[] drawn list containing the explicitly and the implicitly
-     *         drawn cells.
-     */
-    private boolean[] expandDrawnYX(boolean[] drawn)
-    {
-        makeDrawList();
-
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (parameterStore.get("YX", "DrawFCAL").getStatus() && mode >= AProjectionYX.MODE_HEC_2 &&
-                mode <= AProjectionYX.MODE_HEC_4)
-        {
-            cutArray(sampling, mode - AProjectionYX.MODE_HEC_2, "Layer");
-        }
-        else if (mode >= AProjectionYX.MODE_FCAL_EM || mode <= AProjectionYX.MODE_FCAL_HAD_2)
-        {
-            cutArray(sampling, mode - AProjectionYX.MODE_FCAL_EM, "Layer");
-        }
-        else
-        {
-            return drawn;
-        }
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-
-            if (drawn[j])
-                continue;
-
-            int eta = etaIndex[j];
-            int phi = phiIndex[j];
-
-            if (eta >= 0 && phi >= 0)
-            {
-                int mappedTo = cellTable[eta][phi];
-
-                if (mappedTo >= 0 && drawn[mappedTo] == true)
-                {
-                    drawn[j] = true;
-                }
-            }
-        }
-
-        return drawn;
-    }
-
-    /**
-     * The rho-z projection is a bit difficult for FCAL. Because of the y-x
-     * geometry of the cells there isn't really a nice way to project them in
-     * rho-z. This prodedure takes the most energetic cell and the consolidates
-     * it with all cells that overlap it. This is repeated until all cells are
-     * assigned to such a most energetic cell. We are then left with a series of
-     * "important" cells that do not overlap in rho-z. These can be drawn
-     * nicely.
-     */
-    protected void filterDrawListRZ()
-    {
-        boolean available[] = new boolean[numDraw];
-        int numCells = numDraw;
-        int newNumDraw = 0;
-
-        // Initialize the variables.
-        for (int i = 0; i < numDraw; i++)
-        {
-            available[i] = true;
-        }
-        for (int i = 0; i < numData; i++)
-        {
-            etSum[i] = 0.0f;
-        }
-
-        while (numCells > 0)
-        {
-
-            // Loop through all available cells and find the highest energy.
-            int max = -1;
-            for (int i = 0; i < numDraw; i++)
-            {
-                if (available[i])
-                {
-                    if (max < 0 || et[listdl[i]] > et[listdl[max]])
-                        max = i;
-                }
-            }
-
-            // This is a cell we want to draw, store it and remove it from the
-            // available cells list.
-            available[max] = false;
-            numCells--;
-            listdl[newNumDraw++] = listdl[max];
-
-            // Now find all available cells that overlap this one. This loop
-            // will be processed
-            // quite a lot, so it is very important to do the "easy" rejects
-            // first.
-            for (int i = 0; i < numDraw; i++)
-            {
-                if (available[i])
-                {
-                    int j = listdl[i];
-
-                    double zDist = Math.abs(z[j] - z[listdl[max]]);
-                    if (zDist >= (dz[j] + dz[listdl[max]]) / 2.)
-                        continue;
-
-                    double rDist = Math.abs(r[j] - r[listdl[max]]);
-                    if (rDist >= (dr[j] + dr[listdl[max]]) / 2.)
-                        continue;
-
-                    if (AParameterUtilities.getRhoSign(x[j], y[j]) != AParameterUtilities.getRhoSign(x[listdl[max]], y[listdl[max]]))
-                        continue;
-
-                    available[i] = false;
-                    etSum[listdl[max]] += et[j];
-                    numCells--;
-                }
-            }
-        }
-
-        numDraw = newNumDraw;
-    }
-
-    /**
-     * See expandDrawn.
-     *
-     * @param drawn boolean[] initial drawn list containing only the explicitly
-     *        drawn cells
-     * @return boolean[] drawn list containing the explicitly and the implicitly
-     *         drawn cells.
-     */
-    private boolean[] expandDrawnRZ(boolean[] drawn)
-    {
-        makeDrawList();
-
-        boolean available[] = new boolean[numDraw];
-        int numCells = numDraw;
-
-        // Initialize the variables.
-        for (int i = 0; i < numDraw; i++)
-        {
-            available[i] = true;
-        }
-
-        while (numCells > 0)
-        {
-
-            // Loop through all available cells and find the highest energy.
-            int max = -1;
-            for (int i = 0; i < numDraw; i++)
-            {
-                if (available[i])
-                {
-                    if (max < 0 || et[listdl[i]] > et[listdl[max]])
-                        max = i;
-                }
-            }
-
-            // This is a cell we want to draw, store it and remove it from the
-            // available cells list.
-            available[max] = false;
-            numCells--;
-
-            // Now find all available cells that overlap this one. This loop
-            // will be processed
-            // quite a lot, so it is very important to do the "easy" rejects
-            // first.
-            for (int i = 0; i < numDraw; i++)
-            {
-                if (available[i])
-                {
-                    int j = listdl[i];
-
-                    double zDist = Math.abs(z[j] - z[listdl[max]]);
-                    if (zDist >= (dz[j] + dz[listdl[max]]) / 2.)
-                        continue;
-
-                    double rDist = Math.abs(r[j] - r[listdl[max]]);
-                    if (rDist >= (dr[j] + dr[listdl[max]]) / 2.)
-                        continue;
-
-                    if (AParameterUtilities.getRhoSign(x[j], y[j]) != AParameterUtilities.getRhoSign(x[listdl[max]], y[listdl[max]]))
-                        continue;
-
-                    available[i] = false;
-                    if (drawn[listdl[max]])
-                        drawn[j] = true;
-                    numCells--;
-                }
-            }
-        }
-
-        return drawn;
-    }
-
-    /**
-     * Draws the FCAL data in the y-x projection.
-     *
-     * @return ACoord cell geometry polygons
-     */
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (parameterStore.get("YX", "DrawFCAL").getStatus() && mode >= AProjectionYX.MODE_HEC_2 &&
-                mode <= AProjectionYX.MODE_HEC_4)
-        {
-            cutArray(sampling, mode - AProjectionYX.MODE_HEC_2, "Layer");
-        }
-        else if (mode >= AProjectionYX.MODE_FCAL_EM || mode <= AProjectionYX.MODE_FCAL_HAD_2)
-        {
-            cutArray(sampling, mode - AProjectionYX.MODE_FCAL_EM, "Layer");
-        }
-        else
-        {
-            return ACoord.NO_DATA;
-        }
-
-        filterDrawListYX();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            double xMin = x[j] - dx[j] / 2.;
-            double xMax = x[j] + dx[j] / 2.;
-            double yMin = y[j] - dy[j] / 2.;
-            double yMax = y[j] + dy[j] / 2.;
-
-            hv[0][i] = new double[] { xMax, xMin, xMin, xMax };
-            hv[1][i] = new double[] { yMax, yMax, yMin, yMin };
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this);
-    }
-
-    /**
-     * Draws the FCAL data in the rho-z projection. See the description of
-     * filterDrawListRZ() for an explanation of the drawing method.
-     *
-     * @return ACoord cell geometry polygons
-     */
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        filterDrawListRZ();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-
-            double zMin = z[j] - dz[j] / 2.;
-            double zMax = z[j] + dz[j] / 2.;
-            double rMin = Math.sqrt(Math.pow(Math.abs(x[j]) - Math.abs(dx[j] / 2.), 2) + Math.pow(Math.abs(y[j]) - Math.abs(dy[j] / 2.), 2));
-            double rMax = Math.sqrt(Math.pow(Math.abs(x[j]) + Math.abs(dx[j] / 2.), 2) + Math.pow(Math.abs(y[j]) + Math.abs(dy[j] / 2.), 2));
-
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[j] - phiMid);
-            if (phiDiff > Math.PI / 2. && phiDiff <= 3 * Math.PI / 2.)
-            {
-                rMin *= -1;
-                rMax *= -1;
-            }
-
-            hv[0][i] = new double[] { zMax, zMin, zMin, zMax };
-            hv[1][i] = new double[] { rMax, rMax, rMin, rMin };
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this);
-    }
-
-    /**
-     * Applies cuts to the data.
-     */
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsCalo", "FCALET", "FCALET", et);
-        cut("CutsCalo", "FCALEnergy", "FCALEnergy", energy);
-
-        int cutSub = parameterStore.get("CutsCalo", "FCAL").getI();
-        if(cutSub != -1)
-        {
-            cutArray(sub, cutSub, "Endcap");
-        }
-    }
-
-    /**
-     * Returns the data in the phi-rho projection.
-     *
-     * @return ACoord polygons representing calorimeter cells
-     */
-    public ACoord getFRUser()
-    {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    /**
-     * Returns the data in the phi-eta projection.
-     *
-     * @return ACoord polygons representing calorimeter cells
-     */
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-
-        switch (parameterStore.get("VP", "Mode").getI())
-        {
-            case AProjectionVP.MODE_ECAL_LAYER_0:
-            case AProjectionVP.MODE_ECAL_LAYER_1:
-            case AProjectionVP.MODE_ECAL_LAYER_2:
-            case AProjectionVP.MODE_ECAL_LAYER_3:
-                cutArray(sampling, 0, "EM");
-                break;
-            case AProjectionVP.MODE_HCAL_LAYER_0:
-            case AProjectionVP.MODE_HCAL_LAYER_1:
-            case AProjectionVP.MODE_HCAL_LAYER_2:
-            case AProjectionVP.MODE_HCAL_LAYER_3:
-                cutArrayOR(sampling, 1, 2, "Hadronic");
-                break;
-            default:
-                return ACoord.NO_DATA;
-        }
-
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            etSum[j] = et[j];
-
-            double eta0 = AMath.etaAbs(z[j], (float) Math.sqrt(Math.pow(x[j] + dx[j] / 2., 2) + Math.pow(y[j] + dy[j] / 2., 2)));
-            double eta1 = AMath.etaAbs(z[j], (float) Math.sqrt(Math.pow(x[j] - dx[j] / 2., 2) + Math.pow(y[j] + dy[j] / 2., 2)));
-            double eta2 = AMath.etaAbs(z[j], (float) Math.sqrt(Math.pow(x[j] - dx[j] / 2., 2) + Math.pow(y[j] - dy[j] / 2., 2)));
-            double eta3 = AMath.etaAbs(z[j], (float) Math.sqrt(Math.pow(x[j] + dx[j] / 2., 2) + Math.pow(y[j] - dy[j] / 2., 2)));
-
-            // Calculate phi between 0 and 360.
-            double phi0 = Math.toDegrees(Math.atan2(y[j] + dy[j] / 2., x[j] + dx[j] / 2.) + 360.) % 360.;
-            double phi1 = Math.toDegrees(Math.atan2(y[j] + dy[j] / 2., x[j] - dx[j] / 2.) + 360.) % 360.;
-            double phi2 = Math.toDegrees(Math.atan2(y[j] - dy[j] / 2., x[j] - dx[j] / 2.) + 360.) % 360.;
-            double phi3 = Math.toDegrees(Math.atan2(y[j] - dy[j] / 2., x[j] + dx[j] / 2.) + 360.) % 360.;
-
-            // Some code to prevent problems with cells going across the 0/360
-            // border.
-            if (phi1 - phi0 > 180.)
-                phi1 -= 360.;
-            else if (phi0 - phi1 > 180.)
-                phi1 += 360;
-            if (phi2 - phi1 > 180.)
-                phi2 -= 360.;
-            else if (phi1 - phi2 > 180.)
-                phi2 += 360;
-            if (phi3 - phi2 > 180.)
-                phi3 -= 360.;
-            else if (phi2 - phi3 > 180.)
-                phi3 += 360;
-
-            hv[0][i] = new double[] { eta0, eta1, eta2, eta3 };
-            hv[1][i] = new double[] { phi0, phi1, phi2, phi3 };
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this).includePhiWrapAround("VP");
-    }
-
-    /**
-     * Returns the histograms in the RZ projection.
-     *
-     * @return ACoord[] histograms
-     */
-    public ACoord[] getRZHistograms()
-    {
-        AHistogram histUp = new AHistogram(-outerEta, outerEta, etaGranularity, histoScale.getD(), this);
-        AHistogram histDown = new AHistogram(-outerEta, outerEta, etaGranularity, histoScale.getD(), this);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            int sign = AParameterUtilities.getRhoSign(x[j], y[j]);
-            double etaMin;
-            double etaMax;
-
-            if (side[j] < 0)
-            {
-                etaMin = AParameterUtilities.eta(z[j] + dz[j] / 2.f, r[j] - dr[j] / 2.f);
-                etaMax = AParameterUtilities.eta(z[j] - dz[j] / 2.f, r[j] + dr[j] / 2.f);
-            }
-            else
-            {
-                etaMin = AParameterUtilities.eta(z[j] - dz[j] / 2.f, r[j] + dr[j] / 2.f);
-                etaMax = AParameterUtilities.eta(z[j] + dz[j] / 2.f, r[j] - dr[j] / 2.f);
-            }
-
-            if (sign > 0)
-            {
-                histUp.fill(etaMin, etaMax, etSum[j]);
-            }
-            else
-            {
-                histDown.fill(etaMin, etaMax, etSum[j]);
-            }
-        }
-
-        ACoordArray c = new ACoordArray();
-        c.add(histUp.getRZUser(outerZ, outerR, AHistogram.UP));
-        c.add(histDown.getRZUser(outerZ, outerR, AHistogram.DOWN));
-        return c.getArray();
-    }
-
-
-
-//    /**
-//     * Determines adc2Mev factor value for a cell. The number either comes
-//     * with the event file (adc2Mev subtag), but sometimes is not available
-//     * in Athena (in the database) which is indicated by -1 in the event file
-//     * for a particular cell. In this case, use predefined constant in this
-//     * method.
-//     * 
-//     * zdenek (2008-09-15):
-//     * These predefined values (which are used if adc2Mev factor is -1) should
-//     * no longer be used. if the factor is not present, do not plot the pulse
-//     * shape, just the ADC counts as these values are non-sense. The method
-//     * and references to it should be removed after some time (if calo people
-//     * don't change their mind to pre-define some other values and use those)
-//     *
-//     * @param index int
-//     * @return String
-//     */
-    /*
-    private float getADC2MevFactorPredefined(int index)
-    {
-        int layer = sampling[index];
-        float r = Float.NaN;
-        switch(layer)
-        {
-            case 0: r = 87.0f;
-                    break;
-            case 1: r = 117.0f;
-                    break;
-            case 2: r = 193.0f;
-                    break;
-        }
-
-        return r;
-
-    } // getADC2MevFactorPredefined() ---------------------------------------
-     */
-
-
-    /**
-     * Returns info about a selected hit (for picking)
-     *
-     * @param index int hit index
-     * @return String info
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",et[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",et[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",et[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",et[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String t = "";
-        String cellInfo = "";
-
-        t = super.getHitInfo(index);
-        cellInfo += "\n x  = " + x[index] + " cm";
-        cellInfo += "\n y  = " + y[index] + " cm";
-
-        cellInfo += "\n cell time = ";
-        cellInfo += (cellTime != null) ? Float.toString(cellTime[index]) +
-                                         " ns" : "n/a";
-        cellInfo += "\n cell gain = ";
-        cellInfo += (cellGain != null) ? Integer.toString(cellGain[index]) : "n/a";
-        cellInfo += "\n cell pedestal = ";
-        cellInfo += (cellPedestal != null) ? Float.toString(cellPedestal[index]) +
-                                             " ADC counts" : "n/a";
-
-        cellInfo += "\n ADC 2 MeV = ";
-        if(adc2Mev == null)
-        {
-            cellInfo += "n/a";
-        }
-        else
-        {
-            // subtag adc2Mev was available in the event file
-            if(adc2Mev[index] != -1)
-            {
-                // other than -1: the factor was available in
-                // Athena (database) for this particular cell
-                cellInfo += Float.toString(adc2Mev[index]) + " (from database)";
-            }
-            else
-            {
-                // -1 -> the factor wasn't available in Athena (database),
-                // use hardcoded constant for this particular cell
-                cellInfo += "-1 (n/a in database)";
-                // see comment at the getADC2MevFactorPredefined() method
-                // (was printing the predefined value) using predefined " +
-                // Float.toString(getADC2MevFactorPredefined(index));
-            }
-        }
-
-        cellInfo += pulseShapesDataAvailable ? "" :
-            "\n data for real pulse shapes plot n/a";
-
-        return t + cellInfo;
-
-    } // getHitInfo() -------------------------------------------------------
-
-    @Override //ACalorimeterData
-    //Gives the hit time for this cell
-    protected double getTime(int hit)
-    {
-        if (cellTime == null) return 0.0;
-        else return cellTime[hit];
-    }
-
-    /**
-     * Recalculates eta from r and z in case the user wants to have their eta
-     * with respect to the primary vertex instead of 0. The calculation is a
-     * little different from the other calorimeter classes because this one
-     * contains both barrel and endcap data.
-     *
-     * @param index int index of hit in data
-     * @return double eta value
-     */
-    public double getEta(int index)
-    {
-        if (!parameterStore.get("VP", "EtaVertex").getStatus())
-        {
-            return this.eta[index];
-        }
-
-        return AParameterUtilities.eta(z[index], Math.sqrt(x[index] * x[index] + y[index] * y[index]));
-    }
-
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        ACoord[] data = ACoord.NO_HISTOGRAMS;
-        if (projection instanceof AProjectionRZ)
-            data = getRZHistograms();
-        return projection.nonLinearTransform(data);
-    }
-
-
-
-//    /**
-//     * Call util class which plots cell pulse shapes provided that
-//     * all real pulse shapes data is available
-//     * Functions calculates values of real pulse shape calculated in the method
-//     * getPhysicsPulseShape().
-//     * This method is called from pick interaction.
-//     *
-//     * @param index int
-//     */
-    /*public void plotPulseShapes(int index)
-    {
-
-        if(pulseShapesDataAvailable)
-        {
-            String title = getPulseTitleString(index);
-
-            int[][] adcCountsLocal = new int[][] { adcCounts[index] };
-            
-            if(super.checkADCCountsAvailability(adcCountsLocal))
-            {
-                // adc counts are available
-                logger.debug(CALORIMETER_NAME + " adc counts (digits) are " +
-                             "available for pulse shapes plots for this cell.");
-            }
-            else
-            {
-                AOutput.append("\nADC counts are not available for this cell, " +
-                               "can't plot pulse shapes.", ALogPane.WARNING);
-                return;
-            }
-            
-            
-            float[] time = ACalorimeterRPSPLT.FCAL_TIME; // lookup tables
-            float[] amplitude = null; // lookup tables
-            switch(sampling[index])
-            {
-                // use correct amplitude lookup table for this layer (sampling)
-                case 0:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER0_AMPLITUDE;
-                         break;
-                case 1:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER1_AMPLITUDE;
-                         break;
-                case 2:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER2_AMPLITUDE;
-                         break;
-                default: AOutput.append("\nADC counts plot only, pulse shape " +
-                                        "plot not implemented for " +
-                                        CALORIMETER_NAME + " layer " +
-                                        sampling[index] + "\n", ALogPane.WARNING);
-                         APulseShapePlot.plotADCCounts(adcCountsLocal, title, null);
-                         return;
-            }
-
-            // step - starting from 1, need to get step numbers within
-            // number of ADC samples (adcCounts[0].length)
-            double step = (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-            // see comment at the getADC2MevFactorPredefined() method
-            // factor variable is used as a flag whether or not to plot pulse shape,
-            // if is -1 (adc2Mev not available), then want to see only the adc counts
-            // and don't calculate the pulse shapes
-            // getADC2MevFactorPredefined(index) is no longer in use, see comment at it
-            float factor = adc2Mev[index];
-
-            double energyLocal = energy[index] * 1000.0 / factor;
-            try
-            {
-            	if(factor != -1)
-            	{
-	                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-	                {
-	                    d += step;
-	                    realPulse[0][i] = super.getPhysicsPulseShape(d, cellTime[index],
-	                                            cellPedestal[index], energyLocal,
-	                                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-	                }
-            	}
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogPane.WARNING);
-                return;
-            }
-
-            if(factor != -1)
-            {
-            	logger.debug("adc2Mev factor available, plotting full plot.");
-            	APulseShapePlot.plotRealPulseShapes(adcCountsLocal, realPulse,
-            			                            step, null, title);
-            }
-            else
-            {
-            	logger.debug("adc2Mev factor not available, plotting just adc counts.");
-                APulseShapePlot.plotADCCounts(adcCountsLocal, title, null);            	
-            }
-
-        } // if(pulseShapesDataAvailable)
-        else
-        {
-            return;
-        }
-
-    }*/ // plotPulseShapes() --------------------------------------------------
-
-    @Override
-    protected int[][] getADCCounts(int index) {
-
-        if (pulseShapesDataAvailable) {
-            return new int[][]{adcCounts[index]};
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Calculate local time for pulse shape plots
-     */
-    protected double getLocalTime(double xTime, double cellTime, int numSamplings) {
-        int nominalPeakSample = (int)(numSamplings / 2.);
-        return ((xTime - nominalPeakSample + 3) * 25.0) - cellTime;
-    }
-
-    @Override
-    protected double[][] getPulseShape(int index) {
-
-        float[] time = ACalorimeterRPSPLT.FCAL_TIME; // lookup tables
-            float[] amplitude = null; // lookup tables
-            switch(sampling[index])
-            {
-                // use correct amplitude lookup table for this layer (sampling)
-                case 0:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER0_AMPLITUDE;
-                         break;
-                case 1:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER1_AMPLITUDE;
-                         break;
-                case 2:  amplitude = ACalorimeterRPSPLT.FCAL_LAYER2_AMPLITUDE;
-                         break;
-                default: AOutput.append("\nADC counts plot only, pulse shape " +
-                                        "plot not implemented for " +
-                                        CALORIMETER_NAME + " layer " +
-                                        sampling[index] + "\n", ALogInterface.WARNING);
-                         return null;
-            }
-
-            // step - starting from 1, need to get step numbers within
-            // number of ADC samples (adcCounts[0].length)
-            double step = getPulseStep(index);
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-            // see comment at the getADC2MevFactorPredefined() method
-            // factor variable is used as a flag whether or not to plot pulse shape,
-            // if is -1 (adc2Mev not available), then want to see only the adc counts
-            // and don't calculate the pulse shapes
-            // getADC2MevFactorPredefined(index) is no longer in use, see comment at it
-            float factor = adc2Mev[index];
-
-            double energyLocal = energy[index] * 1000.0 / factor;
-            try
-            {
-            	if(factor != -1)
-            	{
-	                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-	                {
-	                    d += step;
-                            double localTime = getLocalTime(d, cellTime[index], this.numSamplings);
-	                    realPulse[0][i] = super.getPhysicsPulseShape(localTime,
-	                                            cellPedestal[index], energyLocal,
-	                                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-	                }
-            	}
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-                return null;
-            }
-
-            if(factor != -1)
-            {
-            	logger.debug("adc2Mev factor available, plotting full plot.");
-                return realPulse;
-            }
-            else
-            {
-            	logger.debug("adc2Mev factor not available, plotting just adc counts.");
-                return null;          	
-            }
-
-    }
-
-    @Override
-    protected double getPulseStep(int index) {
-        return (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AG4StepData.java b/graphics/AtlantisJava/src/atlantis/data/AG4StepData.java
deleted file mode 100755
index 7f962718d03b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AG4StepData.java
+++ /dev/null
@@ -1,559 +0,0 @@
-package atlantis.data;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-import java.util.Scanner;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import atlantis.parameters.AParameterUtilities;
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.utils.AAtlantisException;
-import atlantis.event.ABufferedEventSource;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.utils.AHashMap;
-
-/**
- * This class holds the data from GEANT4 (G4) steps which
- * represent the path of simulated particles. The steps
- * are read in from a (zipped) text file via the File menu
- * or by pressing "/".
- * The file (named "G4Atlantis_run_event.txt(.zip)") can be
- * made by running AtlasG4 with a special plugin:
- * AtlasG4_trf.py postInitInclude="G4UserActions/G4AtlantisDumper_options.py"
- *
- * @author Andy Haas (ahaas)
- */
-public class AG4StepData extends AData {
-
-    protected int[] nsteps;
-    protected int[] gid;
-    protected int[] pid;
-    protected int[] fs;
-    protected int[] ls;
-    protected int[] stepn;
-    protected String[] pn;
-    protected int[] nsec;
-    protected float[] tedep;
-    protected float[] tnedep;
-    protected float[] length;
-    protected int[] pdg;
-    protected float[] mass;
-    protected float[] charge;
-    protected float[] x1;
-    protected float[] y1;
-    protected float[] z1;
-    protected float[] t1;
-    protected float[] x2;
-    protected float[] y2;
-    protected float[] z2;
-    protected float[] t2;
-    protected float[] px1;
-    protected float[] py1;
-    protected float[] pz1;
-    protected float[] ke1;
-    protected float[] px2;
-    protected float[] py2;
-    protected float[] pz2;
-    protected float[] ke2;
-
-    protected float[] eta1;
-    protected float[] p1;
-
-    public AG4StepData(AHashMap p, AEvent e) {
-        super(p, e);
-
-        nsteps = p.getIntArray("nsteps");
-        gid = p.getIntArray("id");
-        pid = p.getIntArray("pid");
-        fs = p.getIntArray("fs");
-        ls = p.getIntArray("ls");
-        stepn = p.getIntArray("stepn");
-        pn = p.getStringArray("pn");
-        nsec= p.getIntArray("nsec");
-        tedep = p.getFloatArray("tedep");
-        tnedep = p.getFloatArray("tnedep");
-        length = p.getFloatArray("length");
-        pdg = p.getIntArray("pdg");
-        mass = p.getFloatArray("mass");
-        charge = p.getFloatArray("charge");
-        x1 = p.getFloatArray("x1");
-        y1 = p.getFloatArray("y1");
-        z1 = p.getFloatArray("z1");
-        t1 = p.getFloatArray("t1");
-        x2 = p.getFloatArray("x2");
-        y2 = p.getFloatArray("y2");
-        z2 = p.getFloatArray("z2");
-        t2 = p.getFloatArray("t2");
-        px1 = p.getFloatArray("px1");
-        py1 = p.getFloatArray("py1");
-        pz1 = p.getFloatArray("pz1");
-        ke1 = p.getFloatArray("ke1");
-        px2 = p.getFloatArray("px2");
-        py2 = p.getFloatArray("py2");
-        pz2 = p.getFloatArray("pz2");
-        ke2 = p.getFloatArray("ke2");
-
-        eta1 = new float[numData];
-        p1 = new float[numData];
-        for (int i=0; i<numData; ++i) {
-            eta1[i]=(float)(-1.0*Math.log(Math.tan(
-                    Math.acos(  z1[i]/Math.sqrt(x1[i]*x1[i]+y1[i]*y1[i]+z1[i]*z1[i])  )/2.0
-                    )));
-            p1[i]=(float)Math.sqrt(px1[i]*px1[i]+py1[i]*py1[i]+pz1[i]*pz1[i]);
-        }
-    }
-
-    /**
-     * The color of the step displayed... mostly determined
-     * by the particle type (pdgid) for now.
-     */
-    @Override
-    protected void colorByIndex() {
-        int numColors = parameterStore.get("HitColors", "Number").getI();
-        if (numColors<6) return;//not enough colors!
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for (int i = 0; i < numData; i++) {
-
-            if (charge[i]==0) color[i] = (byte)col[0];//neutral
-            else color[i] = (byte)col[1];//charged
-
-            if (pdg[i]==22) color[i] = (byte)col[2];//photons
-            if (Math.abs(pdg[i])==11) color[i] = (byte)col[3];//electrons
-            if (Math.abs(pdg[i])==13) color[i] = (byte)col[4];//muons
-            if (Math.abs(pdg[i])>=1000000000) color[i] = (byte)col[5];//nuclei
-        }
-    }
-
-    /**
-     * Can choose to color by constant color, or using the
-     * function above (by type / index).
-     */
-    protected int internalColor() {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        switch (colorFunction) {
-            case 0:
-                colorByConstant();
-                break;
-            case 1:
-                colorByIndex();
-                break;
-        }
-        return 1;
-    }
-
-    /**
-     * Cuts on the particle type, energy, etc.
-     * Adjusted via the gui, and in the config-G4.xml file.
-     */
-    protected void applyCuts() {
-        cutIndex();
-
-        cut("CutsObjects", "G4StepKE1", " ke1", ke1);//starting kinetic energy (MeV)
-        cut("CutsObjects", "G4StepP1", " p1", p1);//starting momentum (MeV)
-        
-        cut("CutsObjects", "G4StepPhotons", " |pdg|", pdg);//22
-        cut("CutsObjects", "G4StepElectrons", " |pdg|", pdg);//11
-        cut("CutsObjects", "G4StepMuons", " |pdg|", pdg);//13
-        cut("CutsObjects", "G4StepPions", " |pdg|", pdg);//211
-        cut("CutsObjects", "G4StepProtons", " |pdg|", pdg);//2212
-        cut("CutsObjects", "G4StepNeutrons", " |pdg|", pdg);//2112
-
-        // Nuclear codes are given as 10-digit numbers +-10LZZZAAAI.
-        // For a nucleus consisting of np protons and nn neutrons
-        // A = np + nn +nlambda and Z = np and L = nlambda
-        // I gives the isomer level, with I = 0 corresponding to the ground state and I >0 to excitations
-        cut("CutsObjects", "G4StepNuclei", " |pdg|", pdg);//1000000000
-
-    }
-
-    /**
-     * Prints out stuff when you select a step using the hand.
-     */
-    public String getHitInfo(int index) {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-        if (simpleOutput > 0) {
-            return getNameScreenName() + " index: " + index + "\n";
-        }
-
-        String name = "none";
-        try {
-            name = APDGTable.getName(pdg[index]);
-
-        } catch(APDGTable.ParticleNotFoundError e) {
-            name = "unknown";
-        }
-
-        return getName() + " (index: " + index + ") : "
-                + " storegate key = " + storeGateKey + "\n"
-                + " total step # = " + nsteps[index] + " \n"
-                + " geant/parent id = " + gid[index]+"/"+ pid[index] + " \n"
-                + " first/last step? " + fs[index] +"/"+ ls[index] + " / step#="+stepn[index]+"\n"
-                + " process = " + pn[index] + " / # secondaries = " + nsec[index] + " \n"
-                + " energy/NI deposited = " + tedep[index]+" / "+tnedep[index]+" MeV\n"
-                + " length = " + length[index] + " cm / " +"eta1 = "+eta1[index]+"\n"
-                + " pdg = " + pdg[index] + " ("+name+")\n"
-                + " mass / charge = " + mass[index]+" MeV"+" / "+charge[index]+"\n"
-                + " x1 y1 z1 = " + String.format("%.3f", x1[index])+" "+String.format("%.3f", y1[index])+" "+String.format("%.3f", z1[index])+" cm\n"
-                + " t1 = " + String.format("%.3f", t1[index]) + " ns\n"
-                + " x2 y2 z2 = " + String.format("%.3f", x2[index])+" "+String.format("%.3f", y2[index])+" "+String.format("%.3f", z2[index])+" cm\n"
-                + " t2 = " + String.format("%.3f", t2[index]) + " ns\n"
-                + " px1 py1 pz1 = " + String.format("%.3f", px1[index])+" "+String.format("%.3f", py1[index])+" "+String.format("%.3f", pz1[index])+" MeV\n"
-                + " ke1 = " + String.format("%.3f", ke1[index]) + " MeV\n"
-                + " px2 py2 pz2 = " + String.format("%.3f", px2[index])+" "+String.format("%.3f", py2[index])+" "+String.format("%.3f", pz2[index])+" MeV\n"
-                + " ke2 = " + String.format("%.3f", ke2[index]) + " MeV\n"
-                + " p1 = " + String.format("%.3f", p1[index]) + " MeV\n"
-                ;
-    }
-
-    /**
-     * Make some cuts for drawing in the YX view.
-     */
-    @Override
-    protected ACoord getYXUser() {
-        //System.out.print("numData="+numData+", numDraw="+numDraw);
-        makeDrawList();
-        //System.out.print(" "+numDraw);
-
-        //cut on |eta1|
-        int num = 0;
-        double AbsEtaXYcut = parameterStore.get(PARAMETER_GROUP, "AbsEtaXYcut").getD();
-        if (AbsEtaXYcut >= 0.0) {
-            for (int i = 0; i < numDraw; i++) {
-                if (Math.abs(eta1[listdl[i]]) < AbsEtaXYcut) {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-        }
-        //System.out.print(" "+numDraw);
-
-        //cut on |z1|
-        num = 0;
-        double AbszXYcut = parameterStore.get(PARAMETER_GROUP, "AbszXYcut").getD();
-        if (AbszXYcut >= 0.0) {
-            for (int i = 0; i < numDraw; i++) {
-                if (Math.abs(z1[listdl[i]]) < AbszXYcut) {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-        }
-        //System.out.println(" "+numDraw);
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        //double length = parameterStore.get(PARAMETER_GROUP, "SegmentLength").getD();
-        for (int i = 0; i < numDraw; i++) {
-            int j = listdl[i];
-            hv[0][i] = new double[]{x1[j], x2[j]};
-            hv[1][i] = new double[]{y1[j], y2[j]};
-            index[i] = j;
-        }
-        return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-    }
-
-    /**
-     * Make some cuts for drawing in the FR view.
-     */
-    @Override
-    protected ACoord getFRUser() {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    /**
-     * Make some cuts for drawing in the RZ view.
-     */
-    @Override
-    protected ACoord getRZUser() {
-        makeDrawList();
-
-        //cut on |eta1|
-        int num = 0;
-        double AbsEtaRZcut = parameterStore.get(PARAMETER_GROUP, "AbsEtaRZcut").getD();
-        if (AbsEtaRZcut >= 0.0) {
-            for (int i = 0; i < numDraw; i++) {
-                if (Math.abs(eta1[listdl[i]]) < AbsEtaRZcut) {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-        }
-        //cut on |z1|
-        num = 0;
-        double AbszRZcut = parameterStore.get(PARAMETER_GROUP, "AbszRZcut").getD();
-        if (AbszRZcut >= 0.0) {
-            for (int i = 0; i < numDraw; i++) {
-                if (
-                        Math.abs(z1[listdl[i]]) < AbszRZcut &&
-                        Math.sqrt(x1[listdl[i]]*x1[listdl[i]]+y1[listdl[i]]*y1[listdl[i]]) < 1200
-                        ) {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-        }
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        //double length = parameterStore.get(PARAMETER_GROUP, "SegmentLength").getD();
-        for (int i = 0; i < numDraw; i++) {
-            int j = listdl[i];
-            double s = AParameterUtilities.getRhoSign(x1[j], y1[j]);//use same for both points to avoid ugliness
-            double r1 = s * Math.sqrt(x1[j] * x1[j] + y1[j] * y1[j]);
-            double r2 = s * Math.sqrt(x2[j] * x2[j] + y2[j] * y2[j]);
-            hv[0][i] = new double[]{z1[j], z2[j]};
-            hv[1][i] = new double[]{r1, r2};
-            index[i] = j;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-
-    @Override
-    public String getName() {
-        return "G4Step";
-    }
-
-    @Override
-    public String getNameScreenName() {
-        return "G4Step";
-    }
-
-    @Override
-    public String getParameterGroup() {
-        return "G4Step";
-    }
-
-    /**
-     * Read in the corresponding G4Atlantis_run_event.txt(.zip) file.
-     * It needs to be in the same directory as the JiveXML_run_event.xml file
-     * that is currently being viewed.
-     */
-    public static void ReadG4Steps(){
-        AEvent ev = eventManager.getCurrentEvent();
-                        String source = eventManager.getEventSource().getSourceName();
-                        System.out.println("Source="+source);
-                        String filename = source;
-                        if (source.contains("\\")) filename+="\\G4Atlantis_"+ev.getRunNumber()+"_"+ev.getEventNumber()+".txt";
-                        else filename += "/G4Atlantis_" + ev.getRunNumber() + "_" + ev.getEventNumber() + ".txt";
-                        System.out.println("Reading G4 file: " + filename);
-                        Scanner inFile = null;
-                        int maxnstepsinthisevent = 4000000;//max allowed
-                        int nstepsinfile = maxnstepsinthisevent;//will be set to actual number of steps in file, if lower than maximum
-                        try {
-                            inFile = new Scanner(new FileReader(filename));
-
-                            //try to get the number of steps that are in the file
-                            try {
-                                FileInputStream in = new FileInputStream(filename);
-                                BufferedReader br = new BufferedReader(new InputStreamReader(in));
-                                String strLine = null, tmp;
-                                while ((tmp = br.readLine()) != null) { strLine = tmp; }
-                                String lastLine = strLine;
-                                System.out.println(lastLine);
-                                in.close();
-
-                                Scanner lastlinescanner = new Scanner(lastLine);
-                                String llach = lastlinescanner.next();
-                                String _llach = "ACH_G4Step";
-                                if (!llach.equals(_llach)) {
-                                    System.out.println("??ach in lastline = " + llach);
-                                }
-                                nstepsinfile = lastlinescanner.nextInt()+1;
-
-                            } catch (IOException ex) {
-                                Logger.getLogger(AG4StepData.class.getName()).log(Level.SEVERE, null, ex);
-                            }
-
-                        } catch (FileNotFoundException ex) {
-                            //Logger.getLogger(AEventQueue.class.getName()).log(Level.SEVERE, null, ex);
-                            System.out.println("Could not open "+filename);
-                        }
-
-                        if (inFile == null) {
-                            ZipFile zipfile = null;
-                            try {
-                                System.out.println("Reading G4 file: " + filename+".zip");
-                                zipfile = new ZipFile(filename + ".zip");
-                            } catch (IOException ex) {
-                                //Logger.getLogger(AEventQueue.class.getName()).log(Level.SEVERE, null, ex);
-                                System.out.println("Could not open "+filename+".zip either");
-                            }
-                            if (zipfile != null) {
-                                BufferedInputStream is = null;
-                                ZipEntry entry;
-                                Enumeration e = zipfile.entries();
-                                while (e.hasMoreElements()) {
-                                    entry = (ZipEntry) e.nextElement();
-                                    System.out.println("Extracting: " + entry);
-                                    try {
-                                        is = new BufferedInputStream(zipfile.getInputStream(entry));
-                                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
-                                        String strLine = null, tmp;
-                                        while ((tmp = br.readLine()) != null) {
-                                            strLine = tmp;
-                                        }
-                                        String lastLine = strLine;
-                                        System.out.println(lastLine);
-
-                                        Scanner lastlinescanner = new Scanner(lastLine);
-                                        String llach = lastlinescanner.next();
-                                        String _llach = "ACH_G4Step";
-                                        if (!llach.equals(_llach)) {
-                                            System.out.println("??ach in lastline = " + llach);
-                                        }
-                                        nstepsinfile = lastlinescanner.nextInt() + 1;
-
-                                        is = new BufferedInputStream(zipfile.getInputStream(entry));
-                                        inFile = new Scanner(is);
-                                    } catch (IOException ex) {
-                                        Logger.getLogger(AG4StepData.class.getName()).log(Level.SEVERE, null, ex);
-                                    }
-
-                                }
-                            }
-                        }
-
-                        if (inFile != null) {
-
-                            System.out.print("nsteps in file should be "+nstepsinfile+"... ");
-                            if (nstepsinfile>maxnstepsinthisevent) nstepsinfile=maxnstepsinthisevent;
-                            System.out.println(" and will read "+nstepsinfile+" steps.");
-
-                            try {
-                            AHashMap para = new AHashMap(100);
-                            float[] x1 = new float[nstepsinfile];
-                            float[] y1 = new float[nstepsinfile];
-                            float[] z1 = new float[nstepsinfile];
-                            float[] t1 = new float[nstepsinfile];
-                            float[] x2 = new float[nstepsinfile];
-                            float[] y2 = new float[nstepsinfile];
-                            float[] z2 = new float[nstepsinfile];
-                            float[] t2 = new float[nstepsinfile];
-                            float[] px1 = new float[nstepsinfile];
-                            float[] py1 = new float[nstepsinfile];
-                            float[] pz1 = new float[nstepsinfile];
-                            float[] ke1 = new float[nstepsinfile];
-                            float[] px2 = new float[nstepsinfile];
-                            float[] py2 = new float[nstepsinfile];
-                            float[] pz2 = new float[nstepsinfile];
-                            float[] ke2 = new float[nstepsinfile];
-                            int[] nsteps = new int[nstepsinfile];
-                            int[] id = new int[nstepsinfile];
-                            int[] pid = new int[nstepsinfile];
-                            int[] fs = new int[nstepsinfile];
-                            int[] ls = new int[nstepsinfile];
-                            int[] stepn = new int[nstepsinfile];
-                            String[] pn = new String[nstepsinfile];
-                            int[] nsec = new int[nstepsinfile];
-                            float[] tedep = new float[nstepsinfile];
-                            float[] tnedep = new float[nstepsinfile];
-                            float[] length = new float[nstepsinfile];
-                            int[] pdg = new int[nstepsinfile];
-                            float[] mass = new float[nstepsinfile];
-                            float[] charge = new float[nstepsinfile];
-
-                            int n = 0;
-                            String _ach = "ACH_G4Step";
-                            while (inFile.hasNext() && n<nstepsinfile){
-                            String ach = inFile.next();
-                            if (!ach.equals(_ach)) {
-                                System.out.println("??ach = " + ach);
-                            }
-                            nsteps[n] = inFile.nextInt();
-                            id[n] = inFile.nextInt();
-                            pid[n] = inFile.nextInt();
-                            fs[n] = inFile.nextInt();
-                            ls[n] = inFile.nextInt();
-                            stepn[n] = inFile.nextInt();
-                            pn[n] = inFile.next();
-                            nsec[n] = inFile.nextInt();
-                            tedep[n] = inFile.nextFloat();
-                            tnedep[n] = inFile.nextFloat();
-                            length[n] = inFile.nextFloat()/10.0f;
-                            pdg[n] = inFile.nextInt();
-                            //System.out.println("pdg="+pdg);
-                            mass[n] = inFile.nextFloat();
-                            charge[n] = inFile.nextFloat();
-                            x1[n] = inFile.nextFloat()/10.0f;
-                            y1[n] = inFile.nextFloat()/10.0f;
-                            z1[n] = inFile.nextFloat()/10.0f;
-                            t1[n] = inFile.nextFloat();
-                            px1[n] = inFile.nextFloat();
-                            py1[n] = inFile.nextFloat();
-                            pz1[n] = inFile.nextFloat();
-                            ke1[n] = inFile.nextFloat();
-                            x2[n] = inFile.nextFloat()/10.0f;
-                            y2[n] = inFile.nextFloat()/10.0f;
-                            z2[n] = inFile.nextFloat()/10.0f;
-                            t2[n] = inFile.nextFloat();
-                            px2[n] = inFile.nextFloat();
-                            py2[n] = inFile.nextFloat();
-                            pz2[n] = inFile.nextFloat();
-                            ke2[n] = inFile.nextFloat();
-                            ++n;
-                            if (n%100000==0) System.out.println("Read "+n+" steps");
-                            }
-                            System.out.println("Read "+n+" steps");
-                            inFile.close();
-                            System.out.println("Closed file.");
-
-                            para.put("nsteps",nsteps);
-                            para.put("id",id);
-                            para.put("pid",pid);
-                            para.put("fs",fs);
-                            para.put("ls",ls);
-                            para.put("stepn",stepn);
-                            para.put("pn",pn);
-                            para.put("nsec",nsec);
-                            para.put("tedep",tedep);
-                            para.put("tnedep",tnedep);
-                            para.put("length",length);
-                            para.put("pdg",pdg);
-                            para.put("mass",mass);
-                            para.put("charge",charge);
-                            para.put("x1", x1);
-                            para.put("y1", y1);
-                            para.put("z1", z1);
-                            para.put("t1", t1);
-                            para.put("x2", x2);
-                            para.put("y2", y2);
-                            para.put("z2", z2);
-                            para.put("t2", t2);
-                            para.put("px1", px1);
-                            para.put("py1", py1);
-                            para.put("pz1", pz1);
-                            para.put("ke1", ke1);
-                            para.put("px2", px2);
-                            para.put("py2", py2);
-                            para.put("pz2", pz2);
-                            para.put("ke2", ke2);
-                            para.put("numData", n);
-                            //para.put("storeGateKey", "G4");
-
-                            ABufferedEventSource.maxNumberOfEvents=1;//otherwise we run out of heap
-                            AG4StepData g4d = new AG4StepData(para, ev);
-                            ev.add(g4d);
-                            } catch (AAtlantisException ex) {
-                                Logger.getLogger(AG4StepData.class.getName()).log(Level.SEVERE, null, ex);
-                            }
-                            catch (OutOfMemoryError oom) {
-                                Logger.getLogger(AG4StepData.class.getName()).log(Level.SEVERE,"Ran out of memory while trying to read G4Step data");
-                            }
-                            ACanvas.getCanvas().repaintAllFromScratch();
-                        }//inFile!=null
-
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHECData.java b/graphics/AtlantisJava/src/atlantis/data/AHECData.java
deleted file mode 100755
index 2b1efe56a625..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHECData.java
+++ /dev/null
@@ -1,574 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.utils.AUtilities;
-import atlantis.utils.ALogger;
-import java.io.IOException;
-import com.Ostermiller.util.CSVParser;
-
-import java.io.InputStream;
-import java.io.StringReader;
-import java.io.FileNotFoundException;
-
-
-/**
- * The Hadronic End Cap calorimeter.
- *
- * @author Eric Jansen
- */
-public class AHECData extends ACalorimeterData
-{
-    private static ALogger logger = ALogger.getLogger(AHECData.class);
-    
-    // data for real pulse shapes plots
-    private int numSamplings = 0;
-    private int[][] adcCounts = null;
-    private float[] cellTime = null;
-    private int[] cellGain = null;
-    private float[] cellPedestal = null;
-    private float[] adc2Mev = null;
-    private static boolean pulseShapesDataAvailable = false;
-    private static final String LOOKUP_TABLE_FILE =
-        AGlobals.instance().getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		"rpsplt_hec.csv";
-    // number of lookup table values for real pulse shapes plots calculation
-    private static final short NUMBER_OF_LOOKUP_VALUES = 800;
-
-
-
-    AHECData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        for (int i = 0; i < numData; i++)
-        {
-            try
-            {
-                side[i] = (byte) AIdHelper.larBarrelEndcap(id[i]);
-                etaIndex[i] = (short) AIdHelper.larEta(id[i]);
-                phiIndex[i] = (short) AIdHelper.larPhi(id[i]);
-                sampling[i] = AIdHelper.larSampling(id[i]);
-            }
-            catch (AAtlantisException ex)
-            {
-                logger.error("Problem decoding ID " + id[i] + " in " + CALORIMETER_NAME + ": " + ex.getMessage());
-                side[i] = 0;
-                etaIndex[i] = -1;
-                phiIndex[i] = -1;
-                sampling[i] = -1;
-            }
-        }
-
-        makeHitToGeometryMapping();
-        for (int i = 0; i < et.length; ++i)
-        {
-            et[i] = Math.abs(energy[i] / (float) Math.cosh(eta[i]));
-        }
-
-        // Collect some constants we need for the histograms.
-        for (int i = 0; i < ACalorimeterDetector.count(); i++)
-        {
-
-            if (ACalorimeterDetector.get(i).getName().indexOf(CALORIMETER_NAME) >= 0)
-            {
-                if (innerR == 0.0 || ACalorimeterDetector.get(i).getRMin() < innerR)
-                {
-                    innerR = ACalorimeterDetector.get(i).getRMin();
-                }
-                if (innerZ == 0.0 || ACalorimeterDetector.get(i).getZMin() < innerZ)
-                {
-                    innerZ = ACalorimeterDetector.get(i).getZMin();
-                }
-                if (phiGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaPhi() < phiGranularity)
-                {
-                    phiGranularity = ACalorimeterDetector.get(i).getDeltaPhi();
-                }
-                if (etaGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaEta() < etaGranularity)
-                {
-                    etaGranularity = ACalorimeterDetector.get(i).getDeltaEta();
-                }
-                if (outerEta == 0.0 || ACalorimeterDetector.get(i).getEtaMax() > outerEta)
-                {
-                    outerEta = ACalorimeterDetector.get(i).getEtaMax();
-                }
-            }
-
-            if (outerR == 0.0 || ACalorimeterDetector.get(i).getRMax() > outerR)
-            {
-                outerR = ACalorimeterDetector.get(i).getRMax();
-            }
-            if (outerZ == 0.0 || ACalorimeterDetector.get(i).getZMax() > outerZ)
-            {
-                outerZ = ACalorimeterDetector.get(i).getZMax();
-            }
-        }
-
-        // Add a little bit of extra margin to prevent binning errors due to
-        // rounding of numbers.
-        outerEta += etaGranularity;
-
-        // read in HEC data from real pulse shapes plots
-        readPulseShapePlotData(p);
-
-    }
-
-
-
-    private void readPulseShapePlotData(AHashMap p)
-    {
-        // read ADCCounts and cell data for real pulse shapes plots
-        adcCounts = super.getADCCountsData(p);
-
-        // read LAr digits (cell data) for real pulse shapes plots
-        cellTime = (p.get("cellTime") != null) ? p.getFloatArray("cellTime") : null;
-        cellGain = (p.get("cellGain") != null) ? p.getIntArray("cellGain") : null;
-        cellPedestal = (p.get("cellPedestal") != null) ? p.getFloatArray("cellPedestal") : null;
-        adc2Mev = (p.get("adc2Mev") != null) ? p.getFloatArray("adc2Mev") : null;
-
-        pulseShapesDataAvailable = false;
-        if(adcCounts != null && cellTime != null && cellGain != null &&
-           cellPedestal != null && adc2Mev != null)
-        {
-            pulseShapesDataAvailable = true;
-            numSamplings = adcCounts[0].length;
-
-            logger.debug(CALORIMETER_NAME +
-                    ": data for real pulse shape plots available");
-
-            if(ACalorimeterRPSPLT.areHECLookupTablesInitialized())
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup tables have already been read in");
-            }
-            else
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup table values have not been read in yet\n" +
-                        "  trying to read file: " + LOOKUP_TABLE_FILE);
-
-                try
-                {
-                    readLookupTableFile();
-                    logger.debug(CALORIMETER_NAME +
-                            ": values from " + LOOKUP_TABLE_FILE +
-                            " successfully read in");
-                }
-                catch(AAtlantisException ex)
-                {
-                    logger.debug(CALORIMETER_NAME +
-                                  ": reading " + LOOKUP_TABLE_FILE +
-                                  " failed, real pulse shapes plots will not " +
-                                  "be available, reason: " + ex.getMessage(), ex);
-                    pulseShapesDataAvailable = false;
-                }
-            }
-        }
-
-    } // readPulseShapePlotData() -------------------------------------------
-
-
-
-    /**
-     * Returns info about a selected hit (for picking)
-     *
-     * @param index int hit index
-     * @return String info
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",et[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",et[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",et[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",et[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String t = "";
-        String cellInfo = "";
-
-        t = super.getHitInfo(index);
-
-        cellInfo += "\n cell time = ";
-        cellInfo += (cellTime != null) ? Float.toString(cellTime[index]) +
-                                         " ns" : "n/a";
-        cellInfo += "\n cell gain = ";
-        cellInfo += (cellGain != null) ? Integer.toString(cellGain[index]) : "n/a";
-        cellInfo += "\n cell pedestal = ";
-        cellInfo += (cellPedestal != null) ? Float.toString(cellPedestal[index]) +
-                                             " ADC counts" : "n/a";
-
-        cellInfo += "\n ADC 2 MeV = ";
-        if(adc2Mev == null)
-        {
-            cellInfo += "n/a";
-        }
-        else
-        {
-            // subtag adc2Mev was available in the event file
-            if(adc2Mev[index] != -1)
-            {
-                // other than -1: the factor was available in
-                 // Athena (database) for this particular cell
-                cellInfo += Float.toString(adc2Mev[index]) + " (from database)";
-            }
-            else
-            {
-                // -1 -> the factor wasn't available in Athena (database),
-                // use hardcoded constant for this particular cell
-                cellInfo += "-1 (n/a in database)";
-                // see comment at the getADC2MevFactorPredefined() method
-                //, using predefined " +
-                //    Float.toString(getADC2MevFactorPredefined());
-            }
-        }
-
-        cellInfo += pulseShapesDataAvailable ? "" :
-            "\n data for real pulse shapes plot n/a";
-
-        return t + cellInfo;
-
-    } // getHitInfo() -------------------------------------------------------
-
-    @Override //ACalorimeterData
-    //Gives the hit time for this cell
-    protected double getTime(int hit)
-    {
-        if (cellTime == null) return 0.0;
-        else return cellTime[hit];
-    }
-
-//    /**
-//     * Determines adc2Mev factor value for a cell. The number either comes
-//     * with the event file (adc2Mev subtag), but sometimes is not available
-//     * in Athena (in the database) which is indicated by -1 in the event file
-//     * for a particular cell. In this case, use predefined constant in this
-//     * method.
-//     *
-//     * zdenek (2008-09-15):
-//     * These predefined values (which are used if adc2Mev factor is -1) should
-//     * no longer be used. if the factor is not present, do not plot the pulse
-//     * shape, just the ADC counts as these values are non-sense. The method
-//     * and references to it should be removed after some time (if calo people
-//     * don't change their mind to pre-define some other values and use those)
-//
-//     * @param index int
-//     * @return String
-//     */
-    /*
-    private float getADC2MevFactorPredefined()
-    {
-
-        float r = 13.9f;
-        return r;
-
-    } // getADC2MevFactorPredefined() ---------------------------------------
-    */
-
-
-
-    /**
-     * readLookupTableFile() reads in comma separated values (CSV) file
-     * with HEC real pulse shapes plots time and amplitude lookup values
-     * @param fileName String
-     * @throws AAtlantisException
-     */
-    private void readLookupTableFile() throws AAtlantisException
-    {
-        try
-        {
-            InputStream is = AUtilities.getFileAsStream(LOOKUP_TABLE_FILE);
-            CSVParser parser = new CSVParser(is);
-            parser.setCommentStart("#");
-            String arrayName =  null;
-
-            while((arrayName = parser.nextValue()) != null)
-            {
-                String valueArray = parser.nextValue(); // shall now contain all values
-                CSVParser parserArray = new CSVParser(new StringReader(valueArray));
-                String[][] s = parserArray.getAllValues();
-                if("HEC_AMPLITUDE".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.HEC_AMPLITUDE =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-                else if("HEC_TIME".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.HEC_TIME =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-            }
-        }
-        catch(FileNotFoundException e)
-        {
-            throw new AAtlantisException("could not find file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(IOException e)
-        {
-            throw new AAtlantisException("exception while reading file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(AAtlantisException e)
-        {
-            throw e;
-        }
-
-    } // readLookupTableFile() ----------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsCalo", "HECET", "HECET", et);
-        cut("CutsCalo", "HECEnergy", "HECEnergy", energy);
-
-        int cutSub = parameterStore.get("CutsCalo", "HEC").getI();
-        if(cutSub != -1)
-        {
-            cutArray(side, cutSub, "Endcap");
-        }
-
-    }
-
-    /**
-     * Returns the name of the parameter group.
-     *
-     * @return String parameter group
-     */
-    public String getParameterGroup()
-    {
-        return "HEC";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getName()
-    {
-        return "HEC";
-    }
-
-    /**
-     * Returns the displayed name of datatype
-     *
-     * @return String screen name
-     */
-    public String getNameScreenName()
-    {
-        return "HEC";
-    }
-
-    /**
-     * Returns the type of calorimeter (ECAL/HCAL) for a hit.
-     *
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public String getCalorimeterType(int index)
-    {
-        return "HCAL";
-    }
-
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        ACoord[] data = ACoord.NO_HISTOGRAMS;
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (projection instanceof AProjectionRZ)
-            data = getRZHistograms();
-        else if (projection instanceof AProjectionFZ)
-            data = getFZHistograms();
-        else if ((projection instanceof AProjectionYX) && (mode == AProjectionYX.MODE_HEC_1 ||
-                mode == AProjectionYX.MODE_HEC_2 || mode == AProjectionYX.MODE_HEC_3 ||
-                mode == AProjectionYX.MODE_HEC_4 || mode == AProjectionYX.MODE_HEC_SUMMED))
-            data = getYXHistograms();
-        return projection.nonLinearTransform(data);
-    }
-
-
-
-//    /**
-//    * Call util class which plots cell pulse shapes provided that
-//     * all real pulse shapes data is available
-//     * Functions calculates values of real pulse shape calculated in the method
-//     * getPhysicsPulseShape().
-//     * This method is called from pick interaction.
-//     *
-//     * @param index int
-//     */
-    /*public void plotPulseShapes(int index)
-    {
-
-        if(pulseShapesDataAvailable)
-        {
-            String title = getPulseTitleString(index);
-            
-            int[][] adcCountsLocal = new int[][] { adcCounts[index] };
-            
-            if(super.checkADCCountsAvailability(adcCountsLocal))
-            {
-                // adc counts are available
-                logger.debug(CALORIMETER_NAME + " adc counts (digits) are " +
-                             "available for pulse shapes plots for this cell.");
-            }
-            else
-            {
-                AOutput.append("\nADC counts are not available for this cell, " +
-                               "can't plot pulse shapes.", ALogPane.WARNING);
-                return;
-            }
-            
-
-            float[] time = ACalorimeterRPSPLT.HEC_TIME; // lookup tables
-            float[] amplitude = ACalorimeterRPSPLT.HEC_AMPLITUDE; // lookup tables
-
-            // step - starting from 1, need to get step numbers within
-            // number of ADC samples (adcCounts[0].length)
-            double step = (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-            // see comment at the getADC2MevFactorPredefined() method
-            // factor variable is used as a flag whether or not to plot pulse shape,
-            // if is -1 (adc2Mev not available), then want to see only the adc counts
-            // and don't calculate the pulse shapes
-            // getADC2MevFactorPredefined(index) is no longer in use, see comment at it            
-            float factor = adc2Mev[index];
-
-            double energyLocal = energy[index] * 1000.0 / factor;
-            try
-            {
-            	if(factor != -1)
-            	{
-	                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-	                {
-	                    d += step;
-	                    realPulse[0][i] = super.getPhysicsPulseShape(d, cellTime[index],
-	                                            cellPedestal[index], energyLocal,
-	                                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-	                }
-            	}
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogPane.WARNING);
-                return;
-            }
-
-            if(factor != -1)
-            {
-            	logger.debug("adc2Mev factor available, plotting full plot.");
-            	APulseShapePlot.plotRealPulseShapes(adcCountsLocal, realPulse,
-                                                    step, null, title);
-            }
-            else
-            {
-            	logger.debug("adc2Mev factor not available, plotting just adc counts.");
-            	APulseShapePlot.plotADCCounts(adcCountsLocal, title, null);
-            }
-
-        } // if(pulseShapesDataAvailable)
-        else
-        {
-            return;
-        }
-
-    }*/ // plotPulseShapes() --------------------------------------------------
-
-    @Override
-    protected int[][] getADCCounts(int index) {
-        
-        if (pulseShapesDataAvailable) {
-            return new int[][]{adcCounts[index]};
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Calculate local time for pulse shape plots
-     */
-    protected double getLocalTime(double xTime, double cellTime, int numSamplings) {
-        int nominalPeakSample = (int)(numSamplings / 2.);
-        return ((xTime - nominalPeakSample + 3) * 25.0) - cellTime;
-    }
-
-    @Override
-    protected double[][] getPulseShape(int index) {
-        
-        float[] time = ACalorimeterRPSPLT.HEC_TIME; // lookup tables
-        float[] amplitude = ACalorimeterRPSPLT.HEC_AMPLITUDE; // lookup tables
-
-        // step - starting from 1, need to get step numbers within
-        // number of ADC samples (adcCounts[0].length)
-        double step = getPulseStep(index);
-        double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-        double d = 1.0;
-        // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-        // see comment at the getADC2MevFactorPredefined() method
-        // factor variable is used as a flag whether or not to plot pulse shape,
-        // if is -1 (adc2Mev not available), then want to see only the adc counts
-        // and don't calculate the pulse shapes
-        // getADC2MevFactorPredefined(index) is no longer in use, see comment at it            
-        float factor = adc2Mev[index];
-
-        double energyLocal = energy[index] * 1000.0 / factor;
-        try {
-            if (factor != -1) {
-                for (int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++) {
-                    d += step;
-                    double localTime = getLocalTime(d, cellTime[index], this.numSamplings);
-                    realPulse[0][i] = super.getPhysicsPulseShape(localTime,
-                            cellPedestal[index], energyLocal,
-                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-                }
-            }
-        } catch (AAtlantisException aaex) {
-            AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-            return null;
-        }
-
-        if (factor != -1) {
-            logger.debug("adc2Mev factor available, plotting full plot.");
-            return realPulse;
-        } else {
-            logger.debug("adc2Mev factor not available, plotting just adc counts.");
-            return null;
-        }
-    }
-
-    @Override
-    protected double getPulseStep(int index) {
-        return (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHelix.java b/graphics/AtlantisJava/src/atlantis/data/AHelix.java
deleted file mode 100644
index 98e397b2275e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHelix.java
+++ /dev/null
@@ -1,854 +0,0 @@
-package atlantis.data;
-
-import atlantis.globals.AGlobals;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.A3Vector;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-/**
- * Base class for tracks with perigee parameters. Includes code for drawing
- * helices as a function of the helix angle alpha.
- *
- * @author Eric Jansen
- */
-public class AHelix {
-
-    private final static ALogger logger = ALogger.getLogger(AHelix.class);
-    
-    // Constants
-    public static final double MIN_RADIUS_PHI = 2.;
-    public static final double TRACKER_RADIUS = 108.;
-    public static final double TRACKER_LENGTH = 270.;
-    public static final double SOLENOID_RADIUS = 125.;
-    public static final double SOLENOID_LENGTH = 280.;
-    protected static final int NUM_HELIX_POINTS = 30;
-
-    // Parameters from the config/GUI we need
-    private static double curvature = -1;
-    
-    // Vertex w.r.t. which we define the perigee parameters
-    private float xVtx, yVtx, zVtx;
-
-    // Perigee parameters for the track
-    private float d0, phi0, z0, cotanTheta, pt;
-    
-    // Additional space points outside the solenoid (muon tracks)
-    private float extraX[] = null;
-    private float extraY[] = null;
-    private float extraZ[] = null;
-    
-    // Covariance matrix
-    private double[][] cov = null;
-
-    // Center point, radius and correction factors for the helix
-    private double xC, yC, R, dr1, dr2, dz1;
-
-    // Sign of alpha, determines direction of curvature of the helix
-    private float S;
-
-    // Alpha value where the helix crosses MIN_RADIUS_PHI. This is the starting
-    // value for all the phi-based projections, since phi is undefined at rho=0.
-    private double alphaMin = 0.;
-
-    // Alpha value at which the helix meets its last space point or where it
-    // exits the tracker if no space points were defined.
-    private double alphaMax = Math.PI;
-
-    // Alpha value at which the helix leaves the solenoidal field. When helices
-    // are drawn beyond this value, for example when extrapolating to the
-    // calorimeters, they switch from a helix to a straight line here.
-    private double alphaSolenoid = Math.PI;
-
-    private static final APar parameterStore = APar.instance();
-
-    AHelix(AOldHelix helix) {
-        this((float)helix.d0, (float)helix.z0, (float)helix.phi0, (float)helix.tL, (float)helix.pT);
-    }
-    
-    AHelix(float rhoVertex, float phiVertex, float zVertex,
-            float pTTrack, float phiTrack, float etaTrack, int charge, float rhoEndVertex) {
-
-        this(rhoVertex, phiVertex, zVertex, pTTrack, phiTrack, etaTrack, charge);
-        this.alphaMax = getAlphaExtrapolated(rhoEndVertex, TRACKER_LENGTH);
-    }
-    
-    AHelix(float rhoVertex, float phiVertex, float zVertex,
-            float pTTrack, float phiTrack, float eta, int charge) {
-
-        this(0.f, 0.f, phiTrack, (float)AMath.tanLambda(eta), charge*Math.abs(pTTrack),
-                (float)(rhoVertex*Math.cos(phiVertex)), (float)(rhoVertex*Math.sin(phiVertex)), zVertex);
-    }
-    
-    AHelix(float d0, float z0, float phi0, float tL, float pT, float[][] cov) {
-        this(d0, z0, phi0, tL, pT);
-        this.setCovariance(cov);
-    }
-
-    AHelix(float d0, float z0, float phi0, float cotanTheta, float pt) {
-        this(d0, z0, phi0, cotanTheta, pt, 0.f, 0.f, 0.f);
-    }
-
-    /**
-     * Construct a new track from its perigee parameters.
-     * @param d0 transverse impact parameter
-     * @param z0 longitudinal impact parameter
-     * @param phi0 phi of the point of closest approach in degrees
-     * @param cotanTheta cotan(theta), angle of the track in the RZ-plane
-     * @param pt signed transverse momentum, sign encodes charge
-     * @param xVtx vertex x-coordinate
-     * @param yVtx vertex y-coordinate
-     * @param zVtx vertex z-coordinate
-     */
-    AHelix(float d0, float z0, float phi0, float cotanTheta, float pt,
-            float xVtx, float yVtx, float zVtx) {
-        
-        this.xVtx = xVtx;
-        this.yVtx = yVtx;
-        this.zVtx = zVtx;
-        this.d0 = d0;
-        this.z0 = z0;
-        this.phi0 = (float)Math.toRadians(phi0);
-        this.cotanTheta = cotanTheta; // cotan(theta) = tan(lambda)
-        this.pt = Math.abs(pt);
-        this.S = -Math.signum(pt);
-        this.dr1 = 0;
-        this.dr2 = 0;
-        this.dz1 = 0;
-
-        // Curvature/pT relation, magnetic field strength.
-        if (AHelix.curvature <= 0) {
-            AParameter curvatureParameter = parameterStore.get("Event", "Curvature");
-            if (curvatureParameter != null) {
-                AHelix.curvature = curvatureParameter.getD();
-            } else {
-                AHelix.curvature = 100/0.6;
-                logger.error("Curvature parameter not found,"
-                        + " defaulting to " + AHelix.curvature);
-            }
-        }
-
-        // Radius and center point of the helix. The radius is limited to 1e6, 
-        // which on the scale of our tracker corresponds to a straight line. 
-        // This allows cosmics without B-field to be drawn with the same code.
-        this.R = Math.min(AHelix.curvature * this.pt, 1e6);
-        this.xC = xVtx - (this.S*this.R + this.d0) * Math.sin(this.phi0);
-        this.yC = yVtx + (this.S*this.R + this.d0) * Math.cos(this.phi0);
-
-        // The alpha value from which the helix start.
-        this.alphaMin = 0.;
-        
-        // Calculate when this helix leaves the tracker. This is either (1)
-        // through the barrel or (2) through the endcap. The endcap expression
-        // is just the function getZ(alpha) reversed. Take the minumum of the
-        // two, so whatever happens first.
-        this.alphaMax = getAlphaCylinder(TRACKER_RADIUS, TRACKER_LENGTH);
-
-        // Same as above, but now for the solenoid.
-        this.alphaSolenoid = getAlphaCylinder(SOLENOID_RADIUS, SOLENOID_LENGTH);
-    }
-    
-    /**
-     * Fit the radius of the helix to the given points. The radius is described
-     * by R + dr1 * alpha + dr2 * alpha^2.
-     * @param x array of x coordinates of points on the helix
-     * @param y array of y coordinates of points on the helix
-     * @param z array of z coordinates of points on the helix
-     */
-    public double setPoints(float[] x, float[] y, float[] z, int numPoints) {
-
-        this.dr1 = 0.;
-        this.dr2 = 0.;
-        this.dz1 = 0.;
-        
-        // Points outside the solenoid are taken as is and added to the end of the track
-        while (numPoints > 0 && (z[numPoints-1] > SOLENOID_LENGTH
-                || Math.hypot(x[numPoints-1], y[numPoints-1]) > SOLENOID_RADIUS)) {
-
-            numPoints--;
-        }
-        
-        if (x.length > numPoints) {
-            extraX = new float[x.length - numPoints];
-            extraY = new float[y.length - numPoints];
-            extraZ = new float[z.length - numPoints];
-            
-            for(int i=0; i<x.length - numPoints; i++) {
-                extraX[i] = x[numPoints+i];
-                extraY[i] = y[numPoints+i];
-                extraZ[i] = z[numPoints+i];
-            }
-        }
-        
-        if (numPoints == 1) {
-
-            // Just one point, only do a linear in/decrease of R and Z
-            double alpha = getAlpha(x[0], y[0]);
-            this.dr1 = (getRadius(x[0], y[0]) - this.R) / alpha;
-            this.dz1 = (z[0] - getZ(alpha)) / alpha;
-
-            // Draw helix until this point
-            this.alphaMax = alpha;
-
-        } else {
-            
-            // Several points, perform a least-squares fit using the functions
-            // R = R + dr1 * alpha + dr2 * alpha^2 and Z = Z + dz1 * alpha.
-            double a2 = 0., a3 = 0., a4 = 0.;
-            double dRa = 0., dRa2 = 0., dZa = 0.;
-            for (int i=0; i<numPoints; i++) {
-                double alpha = getAlpha(x[i], y[i]);
-                double rho = getRadius(x[i], y[i]);
-
-                //a1 += alpha;
-                a2 += Math.pow(alpha, 2.);
-                a3 += Math.pow(alpha, 3.);
-                a4 += Math.pow(alpha, 4.);
-                dRa += (rho - this.R) * alpha;
-                dRa2 += (rho - this.R) * alpha * alpha;
-                
-                dZa += (z[i] - getZ(alpha)) * alpha;
-
-                if (i == 0 || alpha > this.alphaMax) {
-                    this.alphaMax = alpha;
-                }
-            }
-
-            // Quadratic
-            this.dr1 = (dRa / a3 - dRa2 / a4) / (a2 / a3 - a3 / a4);
-            this.dr2 = (dRa / a2 - dRa2 / a3) / (a3 / a2 - a4 / a3);
-
-            // Linear
-            this.dz1 = dZa / a2;
-
-        }
-
-        // Return relative correction; distance from the original position at
-        // the end point, divided by the length of the curve.
-        double change = Math.hypot(this.dr1 + this.alphaMax*this.dr2, this.dz1) / this.R;
-        logger.debug("Fitting changed R(maxAlpha) by " + change);
-        return change;
-    }
-
-    /**
-     * Sets the covariance matrix of the track.
-     * @param cov new covariance matrix
-     */
-    public final void setCovariance(float[][] cov) {
-        
-        // Covariance needs to be double[][] for the fitting classes
-        this.cov = new double[cov.length][cov[0].length];
-        
-        for (int i=0; i<cov.length; i++) {
-            for (int j=0; j<cov[i].length; j++) {
-                this.cov[i][j] = cov[i][j];
-            }
-        }
-    }
-
-    /**
-     * Sets the covariance matrix of the track.
-     * @param cov new covariance matrix
-     */
-    public final void setCovariance(double[][] cov) {
-        this.cov = cov;
-    }
-    
-    /**
-     * Returns the starting alpha value for the phi-based projections.
-     * @return alpha value
-     */
-    public double getAlphaMin() {
-        return alphaMin;
-    }
-
-    /**
-     * Returns the alpha value at the end of the helix
-     * @return alpha value
-     */
-    public double getAlphaMax() {
-        return alphaMax;
-    }
-
-    /**
-     * Returns the alpha value at which the track exits the solenoidal field
-     * @return alpha value
-     */
-    public double getAlphaSolenoid() {
-        return alphaSolenoid;
-    }
-
-    /**
-     * Calculates the alpha coordinate for a specific point. Alpha is the angle
-     * from the center point of the helix to the point. For the helix The angle
-     * should be positive and alpha=0 is the perigee. Returns negative values
-     * for points before the perigee point.
-     * @param x x coordinate of a point
-     * @param y y coordinate of a point
-     * @return alpha
-     */
-    public double getAlpha(double x, double y) {
-        // Get the alpha parameter for this point, in the range 0-2*pi
-        double alpha = AMath.nearestPhiRadians(this.S * (Math.atan2((y - this.yC), (x - this.xC)) - this.phi0) + Math.PI/2.);
-
-        // When dealing with a real space point, alpha can of course be slightly negative
-        if (alpha > 3./2. * Math.PI) alpha -= 2.*Math.PI;
-
-        return alpha;
-    }
-
-    /**
-     * Calculates the alpha coordinate where the helix has the given distance
-     * from the origin. Alpha is the angle from the center point of the helix to
-     * the point. The angle is always positive and alpha=0 is the perigee.
-     * @param rho radius with respect to the origin
-     * @return alpha
-     */
-    public final double getAlphaCylinder(double rho, double z) {
-        
-        double alphaZ, alphaRho;
-        if (this.cotanTheta == 0) {
-            alphaZ = Math.PI;
-        } else {
-            alphaZ = zVtx + (Math.signum(this.cotanTheta)*z - this.z0) / (this.cotanTheta * this.R + this.dz1);
-        }
-
-        // We take a circle centered around (0,0) with the requested radius
-        // (rho) and intersect it with the helix (circle around (xC,yC) with
-        // radius R. The distance between the centers of the two circles is D.
-        double D = Math.hypot(this.xC, this.yC);
-
-        // By equating the intersection points in both circles we obtain the
-        // position of the intersection points as a distance d from (xC,yC) 
-        // along the line from center to center.
-        double d = (this.R * this.R - rho * rho + D * D) / (2 * D);
-
-        if (d >= this.R) {
-            // Helix is fully outside the requested radius, return 0.
-            alphaRho = 0;
-        } else if (d <= -this.R) {
-            // Helix is fully inside the requested radius, return pi.
-            alphaRho = Math.PI;
-        } else {
-            // Helix needs to be stopped when it reaches requested radius.
-            // Now the angle alpha is just the angle between the center-center
-            // line and the line from (xC,yC) to the intersection point. The
-            // helix is such that alpha is always taken positive, so it doesn't
-            // matter which of the two intersection points we take. The cosine
-            // of alpha is then simply the division of d by the radius of the
-            // circle R. This method should never return an alpha outside the 
-            // solenoid, for the extrapolation there is getAlphaExtrapolated().
-            alphaRho = Math.min(Math.acos(d / this.R), alphaSolenoid);
-        }
-
-        return Math.min(alphaRho, alphaZ);
-    }
-
-    /**
-     * Calculates the pseudo alpha coordinate and if necessary extrapolates 
-     * beyond the curved part up to the given radius. Inside the solenoid this 
-     * method falls back to getAlphaCylinder, so it can be used for any radius.
-     * The pseudo alpha coordinate is such that the distance along the curve is 
-     * R*alpha also for the straight part. This parameterization allow the 
-     * description of z to remain the same for any alpha.
-     * @param rho radius to extrapolate to
-     * @param z distance along the beam axis to extrapolate to
-     * @return alpha
-     */
-    public final double getAlphaExtrapolated(double rho, double z) {
-
-        // Check if the track actually makes it to the solenoid.
-        if (this.alphaSolenoid >= Math.PI) {
-            // If not, return the max alpha inside the tracker instead.
-            return getAlphaCylinder(rho, z);
-        }
-
-        // Calculate the coordinates (xL,yL) of the last point inside the solenoid.
-        double xL = getX(this.alphaSolenoid);
-        double yL = getY(this.alphaSolenoid);
-
-        // Check if we are actually outside the solenoid at this rho value
-        if (rho < Math.hypot(xL, yL)) {
-            // If not, return the normal alpha instead. For tracks that exit the
-            // solenoid through the endcap this is also fine, z(alpha) is the
-            // same inside and outside the field. So the max value returned is
-            // valid either way.
-            return getAlphaCylinder(rho, z);
-        }
-
-        double alphaZ, alphaRho;
-        if (this.cotanTheta == 0) {
-            alphaZ = Math.PI;
-        } else {
-            alphaZ = zVtx + (Math.signum(this.cotanTheta)*z - this.z0) / (this.cotanTheta * this.R + this.dz1);
-        }
-
-        // Calculate the direction of the track at the last point inside the solenoid,
-        // this is the direction in which it will be extrapolated through the calorimeters.
-        double dx = Math.cos(this.phi0 + this.S * this.alphaSolenoid);
-        double dy = Math.sin(this.phi0 + this.S * this.alphaSolenoid);
-
-        // Now we have for a point on the extrapolated track
-        //   x(alpha) = xL + dx * (alpha-this.alphaCurve)
-        //   y(alpha) = yL + dy * (alpha-this.alphaCurve)
-        // Setting x^2+y^2 = rho^2 and solving for alpha then gives:
-        double D = rho*rho - (xL*dy - yL*dx)*(xL*dy - yL*dx);
-        if (D > 0) {
-            alphaRho = this.alphaSolenoid - (xL*dx + yL*dy)/this.R + Math.sqrt(D)/this.R;
-        } else {
-            return Math.PI;
-        }
-
-        return Math.min(alphaRho, alphaZ);
-    }
-
-    /**
-     * Calculate the distance between a point and the center of the helix.
-     * @param x x coordinate of the point
-     * @param y y coordinate of the point
-     * @return distance between (x,y) and the center of the helix
-     */
-    private double getRadius(double x, double y) {
-        return Math.hypot(x - xC, y - yC);
-    }
-
-    /**
-     * Returns the x coordinate for a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @return x coordinate
-     */
-     public double getX(double alpha) {
-        // Correct the radius using the values obtained from the fit and calculate x
-        double localR = R + dr1 * alpha + dr2 * alpha * alpha;
-        if (alpha <= alphaSolenoid) {
-            return xC - S * localR * Math.cos(phi0 + S * alpha + Math.PI/2.);
-        } else {
-            double xL = xC - S * localR * Math.cos(phi0 + S * alphaSolenoid + Math.PI/2.);
-            return xL + R*Math.cos(phi0 + this.S * alphaSolenoid) * (alpha-alphaSolenoid);
-        }
-    }
-
-    /**
-     * Returns the y coordinate for a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @return y coordinate
-     */
-    public double getY(double alpha) {
-        // Correct the radius using the values obtained from the fit and calculate y
-        double localR = R + dr1 * alpha + dr2 * alpha * alpha;
-        if (alpha <= alphaSolenoid) {
-            return yC - S * localR * Math.sin(phi0 + S * alpha + Math.PI/2.);
-        } else {
-            double yL = yC - this.S * localR * Math.sin(phi0 + this.S * alphaSolenoid + Math.PI/2.);
-            return yL + R*Math.sin(phi0 + S * alphaSolenoid) * (alpha-alphaSolenoid);
-        }
-    }
-
-    /**
-     * Returns the rho coordinate for a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @return rho coordinate
-     */
-    public double getRho(double alpha) {
-        return Math.hypot(getX(alpha), getY(alpha));
-    }
-
-    public double getRhoVtx() {
-        return Math.hypot(xVtx, yVtx);
-    }
-    
-    /**
-     * Returns the z coordinate for a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @return z coordinate
-     */
-    public double getZ(double alpha) {
-        // For z we don't use the corrected R, since it was calculated against
-        // the uncorrected one.
-        return z0 + cotanTheta * R * alpha + dz1 * alpha;
-    }
-
-    public double getZVtx() {
-        return zVtx;
-    }
-        
-    /**
-     * Returns the phi coordinate of a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @param useVertex calculate phi w.r.t. the primary vertex
-     * @return phi coordinate
-     */
-    public double getPhi(double alpha, boolean useVertex) {
-        if (useVertex) {
-            return AParameterUtilities.phi(getX(alpha), getY(alpha));
-        } else {
-            return Math.toDegrees(Math.atan2(getY(alpha), getX(alpha)));
-        }
-    }
-
-    /**
-     * Return eta coordinate for a point on the helix parameterized by alpha.
-     * @param alpha helix angular parameter
-     * @param vsign side (-1/+1) of the split track in the v-plot, 0 for true eta
-     * @return eta coordinate
-     */
-    public double getEta(double alpha, int vsign) {
-        double rho = getRho(alpha);
-        double z = getZ(alpha);
-        double deta = Math.abs(AProjectionVP.getDeltaEta(rho, z));
-
-        return AParameterUtilities.eta(z, rho) + vsign*deta;
-    }
-    
-    /**
-     * Returns an array representing the x coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @return x coordinates
-     */
-    public double[] getX(double alpha1, double alpha2) {
-        int numPoints = NUM_HELIX_POINTS;
-        if (alpha2 >= alphaMax && extraX != null) {
-            numPoints += extraX.length;
-        }
-        double[] x = new double[numPoints];
-
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            x[i] = getX(alpha1 + i*dalpha);
-        }
-        
-        for (int i=0; i<numPoints-NUM_HELIX_POINTS; i++) {
-            x[NUM_HELIX_POINTS+i] = extraX[i];
-        }
-
-        return x;
-    }
-
-    /**
-     * Returns an array representing the y coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @return y coordinates
-     */
-    public double[] getY(double alpha1, double alpha2) {
-        int numPoints = NUM_HELIX_POINTS;
-        if (alpha2 >= alphaMax && extraY != null) {
-            numPoints += extraY.length;
-        }
-        double[] y = new double[numPoints];
-
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            y[i] = getY(alpha1 + i*dalpha);
-        }
-
-        for (int i=0; i<numPoints-NUM_HELIX_POINTS; i++) {
-            y[NUM_HELIX_POINTS+i] = extraY[i];
-        }
-        
-        return y;
-    }
-
-    /**
-     * Returns an array representing the z coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @return z coordinates
-     */
-    public double[] getZ(double alpha1, double alpha2) {
-        int numPoints = NUM_HELIX_POINTS;
-        if (alpha2 >= alphaMax && extraZ != null) {
-            numPoints += extraZ.length;
-        }
-        double[] z = new double[numPoints];
-
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            z[i] = getZ(alpha1 + i*dalpha);
-        }
-
-        for (int i=0; i<numPoints-NUM_HELIX_POINTS; i++) {
-            z[NUM_HELIX_POINTS+i] = extraZ[i];
-        }
-        return z;
-    }
-    
-    /**
-     * Returns an array representing the rho coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @param signed return signed rho values for use in RZ
-     * @return rho coordinates
-     */
-    public double[] getRho(double alpha1, double alpha2, boolean signed) {
-        int numPoints = NUM_HELIX_POINTS;
-        if (alpha2 >= alphaMax && extraX != null && extraY != null) {
-            numPoints += extraX.length;
-        }
-        double[] rho = new double[numPoints];
-
-        double sign = 1.;
-        if (signed) {
-            AParameter phiPar = parameterStore.get("RZ", "Phi");
-            if (phiPar != null) {
-                double phi = getPhi((alpha1+alpha2)/2, false);
-                double diff = Math.toRadians(Math.abs(phi - phiPar.getD()));
-                if (diff > Math.PI / 2. && diff <= 3 * Math.PI / 2.) {
-                    sign = -1.;
-                }
-            } else {
-                logger.error("Could not read RZ cutting plane parameter");
-            }
-        }
-                
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            rho[i] = sign * getRho(alpha1 + i*dalpha);
-        }
-
-        for (int i=0; i<numPoints-NUM_HELIX_POINTS; i++) {
-            rho[NUM_HELIX_POINTS+i] = sign * Math.hypot(extraX[i], extraY[i]);
-        }
-
-        return rho;
-    }
-
-    /**
-     * Returns an array representing the phi coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @param vplot return all points twice for use in the v-plot
-     * @return phi coordinates
-     */
-    public double[] getPhi(double alpha1, double alpha2, boolean vplot) {
-        int numPoints = NUM_HELIX_POINTS;
-        if (vplot) {
-            numPoints += NUM_HELIX_POINTS-1;
-        } else if (alpha2 >= alphaMax && extraX != null && extraY != null) {
-            numPoints += extraX.length;
-        }
-        double[] phi = new double[numPoints];
-
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            phi[i] = getPhi(alpha1 + i*dalpha, true);
-            if (vplot) phi[numPoints-i-1] = phi[i];
-        }
-
-        if (!vplot) {
-            for (int i=0; i<numPoints-NUM_HELIX_POINTS; i++) {
-                phi[NUM_HELIX_POINTS+i] = AParameterUtilities.phi(extraX[i], extraY[i]);
-            }
-        }
-
-        // Minimise distance from one point to the next to avoid phi wrapping 
-        // around: use {25, 10, -5} and not {25, 10, 355}.
-        for (int i=1; i<phi.length; i++) {
-            phi[i] = AMath.nearestPhiDegrees(phi[i], phi[i-1]);
-        }
-        
-        return phi;
-    }
-
-    /**
-     * Returns an array representing the eta coordinates of the helix between
-     * alpha1 and alpha2.
-     * @param alpha1 start alpha
-     * @param alpha2 end alpha
-     * @return eta coordinates
-     */
-    public double[] getEta(double alpha1, double alpha2) {
-        double[] eta = new double[2*NUM_HELIX_POINTS - 1];
-        double dalpha = (alpha2 - alpha1) / (NUM_HELIX_POINTS-1);
-
-        for (int i=0; i<NUM_HELIX_POINTS; i++) {
-            double alpha = alpha1 + i*dalpha;
-            eta[i] = getEta(alpha, -1);
-            eta[2*NUM_HELIX_POINTS-2-i] = getEta(alpha, +1);
-        }
-
-        return eta;
-    }
-    
-    /**
-     * Track momentum at perigee, x component
-     * @return px
-     */
-    public double pX() {
-        return this.pt * Math.cos(this.phi0);
-    }
-
-    /**
-     * Track momentum at perigee, y component
-     * @return py
-     */
-    public double pY() {
-        return this.pt * Math.sin(this.phi0);
-    }
-
-    /**
-     * Track momentum at perigee, z component
-     * @return pz
-     */
-    public double pZ() {
-        return this.pt * this.cotanTheta;
-    }
-
-    /**
-     * Signed transverse momentum at perigee
-     * @return pt
-     */
-    public double pT() {
-        return -this.S * this.pt;
-    }
-
-    public A3Vector p() {
-        return new A3Vector(pX(), pY(), pZ());
-    }
-    
-    /**
-     * Pseudorapidity of track from perigee
-     * @return eta
-     */
-    public double eta() {
-        return -Math.log(Math.hypot(cotanTheta, 1.) - cotanTheta);
-    }
-
-    /**
-     * Phi of perigee
-     * @return phi0
-     */
-    public double phi0() {
-        return (float)Math.toDegrees(phi0);
-    }
-
-    /**
-     * Returns the parameters of this helix in the "old" format. This is still
-     * used by the AFit class to fit secondary vertices in Atlantis.
-     * @return helix parameters
-     */
-    public double[] getPar() { // Used by unit tests and AVertexFit
-        return new double[] {
-            d0, 
-            z0, 
-            phi0 < 0 ? phi0 + 2*Math.PI : phi0, 
-            cotanTheta,
-            -S/pt
-        };
-    }
-
-    /**
-     * Returns the covariance matrix of this helix as a an array of double.
-     * @return covariance matrix
-     */
-    public double[][] getCovariance() {
-        return cov;
-    }
-    
-    public double getRhoEndVertex() {
-        return getRho(alphaMax);
-    }
-    
-    public void setPhiStartByXYPoint(double Vx, double Vy) {
-        alphaMin = this.getAlpha(Vx, Vy);
-    }
-    
-    public float d0() {
-        return d0;
-    }
-    
-    public float z0() {
-        return z0;
-    }
-    
-    public float cotanTheta() {
-        return cotanTheta;
-    }
-        
-    public double getXc() {
-        return xC;
-    }
-
-    public double getYc() {
-        return yC;
-    }
-
-    /**
-     * Helper method for toString, formats a single line of information.
-     * @param name variable name
-     * @param value variable value
-     * @param uncertainty variable uncertainty
-     * @param units variable units
-     * @return formatted string
-     */
-    private String formatInfo(String name, double value, double uncertainty, String units) {
-        return formatInfo(name, String.format("%.3f", value), 
-                uncertainty > 0 ? String.format("%.3f", uncertainty) : null, units);
-    }
-    
-    /**
-     * Helper method for toString, formats a single line of information.
-     * @param name variable name
-     * @param value variable value
-     * @param uncertainty variable uncertainty
-     * @param units variable units
-     * @return formatted string
-     */
-    private String formatInfo(String name, String value, String uncertainty, String units) {
-        String output = "\n ";
-        output += name + " = " + value;
-        if (uncertainty != null) 
-            output += " " + AMath.PLUSMINUS + " " + uncertainty;
-        if (units != null)
-            output += " " + units;
-        
-        return output;
-    }
-    
-    @Override
-    public String toString() {
-        String output = "";
-
-        int simpleOutput = AGlobals.instance().getSimpleOutput();
-        if (simpleOutput > 0) {
-            if (simpleOutput == 1 || simpleOutput == 3) {
-                output += formatInfo("PT", pt, 0., "GeV");
-                output += formatInfo(AMath.ETA, eta(), 0., null);
-                output += formatInfo(AMath.PHI, phi0(), 0., AMath.DEGREES);
-            }
-            if (simpleOutput == 2 || simpleOutput == 3) {
-                output += formatInfo("Px", pt*Math.cos(phi0), 0., "GeV");
-                output += formatInfo("Py", pt*Math.sin(phi0), 0., "GeV");
-                output += formatInfo("Pz", pt*Math.sinh(eta()), 0., "GeV");
-                output += formatInfo("Charge", S < 0 ? "+1" : "-1", null, null);
-            }
-
-            return output;
-
-        } else {
-
-            output += formatInfo("d0", d0, cov != null ? Math.sqrt(cov[0][0]) : 0., "cm");
-            output += formatInfo("z0", z0, cov != null ? Math.sqrt(cov[1][1]) : 0., "cm");
-
-            double pv[] = AParameterUtilities.getPrimaryVertex();
-            output += formatInfo("|z0-zVtx|", Math.abs(z0-pv[2]), 0., "cm");
-            output += formatInfo("phi0", phi0(), cov != null ? Math.toDegrees(Math.sqrt(cov[2][2])) : 0., AMath.DEGREES);
-            output += formatInfo("    ", phi0, cov != null ? Math.sqrt(cov[2][2]) : 0., "rad");
-            output += formatInfo("cotan(theta)", cotanTheta, cov != null ? Math.sqrt(cov[3][3]) : 0., null);
-            output += formatInfo(AMath.ETA, eta(), cov != null ? Math.sqrt(cov[3][3] / (cotanTheta * cotanTheta + 1.0)) : 0., null);
-            output += formatInfo("pT", pT(), 0., "GeV");
-            output += formatInfo("p", AMath.getPFromPttL(pt, cotanTheta), 0., "GeV");
-
-            return output;
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHelixAODData.java b/graphics/AtlantisJava/src/atlantis/data/AHelixAODData.java
deleted file mode 100755
index 0c3934033e96..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHelixAODData.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package atlantis.data;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AEvent;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-public abstract class AHelixAODData extends AAODData
-{
-    protected AHelix[] h = null;
-
-    AHelixAODData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        h = new AHelix[numData];
-        float[] d0 = new float[numData];
-        float[] z0 = new float[numData];
-        float[] tl = new float[numData];
-        for (int i = 0; i < numData; i++)
-        {
-            d0[i] = 0.0f;
-            z0[i] = 0.0f;
-            tl[i] = (float) AMath.tanLambda((double)eta[i]);
-            h[i] = new AHelix(d0[i], z0[i], (float) Math.toDegrees(phi[i]), tl[i], pT[i]);
-        }
-    }
-
-    private void drawHelix(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        int drawnAs = parameterStore.get("InDetTrack", "DrawnAs").getI();
-        if (drawnAs == ATrackData.DRAW_NEWHELIX) {
-
-           boolean showS3D = parameterStore.get("Data", "S3D").getStatus();
-            AParameter shortV = parameterStore.get("VP", "ShortV");
-            
-            makeDrawList();
-            double[][][] hv = new double[2][numDraw][];
-            int[] index = new int[numDraw];
-
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-
-                double alphaMin = h[j].getAlphaExtrapolated(projection.getMinRho(), AHelix.TRACKER_LENGTH);
-                double alphaMax = h[j].getAlphaExtrapolated(AProjectionVP.getRhoVPlot(), AHelix.TRACKER_LENGTH); 
-                if (shortV.getStatus() && !showS3D) {
-                    alphaMin = alphaMax - shortV.getD() * (alphaMax - alphaMin);
-                }
-
-                hv[0][i] = h[j].getEta(alphaMin, alphaMax);
-                hv[1][i] = h[j].getPhi(alphaMin, alphaMax, true);
-            }                
-
-            ag.draw(window.calculateDisplay(new ACoord(hv, index, this, ACoord.POLYLINES)));
-
-        } else {
-            // borrow the implementation in for tracks
-            // phi wrap around is done in user coordinates, so we convert to user coordinates,
-            // do the phi wrap around and convert back to display coordinates
-            ag.draw(window.calculateDisplay(window.calculateUser(
-                    getVPDisplayHelices(window, projection)).includePhiWrapAround(projection.getName())
-            ));
-        }
-    }
-    
-    // give back Drawable helices
-    private ADHelix[] getHelices()
-    {
-        makeDrawList();
-        ADHelix[] tempList = new ADHelix[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-            if (h != null && h[listdl[i]] != null)
-            {
-                tempList[i] = new ADHelix(h[listdl[i]]);
-                if (tempList[i].getAStart() == tempList[i].getAEnd())
-                {
-                    tempList[i] = null;
-                }
-            }
-            else
-                tempList[i] = null;
-        return tempList;
-    }
-    
-    private ACoord getVPDisplayHelices(AWindow window, AProjection2D projection)
-    {
-        boolean drawApex = parameterStore.get("VP", "DrawApex").getStatus();
-        ADHelix[] dhelix = getHelices();
-        int size = 2 * dhelix.length;
-        if (drawApex)
-            size = 3 * dhelix.length;
-        double[][][] hv = new double[2][size][0];
-        int[] index = new int[size];
-        int[] indexIn = getDrawList();
-        int num = 0;
-
-        for (int j = 0; j < dhelix.length; ++j)
-            if (dhelix[j] != null)
-            {
-                double s1 = dhelix[j].getAStart();
-                double s2 = 179.;
-
-                s1 = dhelix[j].intersectWithRadialCylinder(projection.getMinRho(), s1, s2);
-                double sEnd = dhelix[j].intersectWithCylinder(true, AProjectionVP.getRhoVPlot(), true, AProjectionVP.getZVPlot());
-
-                s2 = Math.max(Math.min(s2, sEnd), s1);
-                // if the whole helix is to be drawn (which are unusual
-                // helices, shorten it a little to avoid wraparound problems
-                if (s1 == 0. && s2 == 180.)
-                    s2 = 179.;
-                if (parameterStore.get("VP", "ShortV").getStatus() && !parameterStore.get("Data", "S3D").getStatus())
-                    s1 = s2 - parameterStore.get("VP", "ShortV").getD() * (s2 - s1);
-                if (s2 > s1)
-                {
-                    int signMin = -1;
-                    int signMax = 1;
-                    double h = 0;
-                    double v = 0;
-                    for (int sign = signMin; sign <= signMax; sign += 2)
-                    {
-                        // ugly must change structure at some point
-                        AProjectionVP.sign = sign;
-                        ACoord pointsOnHelix = dhelix[j].drawHelix(window, projection, s1, s2);
-                        hv[0][num] = pointsOnHelix.hv[0][0];
-                        hv[1][num] = pointsOnHelix.hv[1][0];
-                        index[num] = indexIn[j];
-                        h = hv[0][num][hv[0][num].length - 1];
-                        v = hv[1][num][hv[0][num].length - 1];
-                        num++;
-                    }
-                    if (drawApex)
-                    {
-                        int a = 3;
-                        int b = 7;
-                        hv[0][num] = new double[] { h - a, h + a, h, h, h - a, h + a };
-                        hv[1][num] = new double[] { v - b, v - b, v - b, v + b, v + b, v + b };
-                        index[num] = indexIn[j];
-                        num++;
-                    }
-                }
-            }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-    
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP)
-        {
-                // since no d0 and z0 data is provided for AOD Electron and Muon
-                // from event file, they are set to 0 manually, which is not
-                // compatible with the primary vertex calculated in Atlantis, and
-                // it will cause a wide and bizarre shape of 'v' drawn in V-Plot.
-                // So the temparary solution is to set primary vertex to (0,0,0)
-                // before drawing AOD Electron and Muon in V-Plot, and then restore
-                // their values after.
-                double[] primaryVtx=event.getPrimaryVertex();
-                parameterStore.get("Event", "XVtx").setD(0.0);
-                parameterStore.get("Event", "YVtx").setD(0.0);
-                parameterStore.get("Event", "ZVtx").setD(0.0);
-                // super.draw(window, ag, projection);
-                drawHelix(window, ag, projection);
-                parameterStore.get("Event", "XVtx").setD(primaryVtx[0]);
-                parameterStore.get("Event", "YVtx").setD(primaryVtx[1]);
-                parameterStore.get("Event", "ZVtx").setD(primaryVtx[2]);
-            }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHistogram.java b/graphics/AtlantisJava/src/atlantis/data/AHistogram.java
deleted file mode 100755
index 082b97de978d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHistogram.java
+++ /dev/null
@@ -1,422 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.graphics.ACoord;
-import atlantis.utils.AHashMap;
-import atlantis.utils.ALogger;
-import atlantis.utils.AVector;
-
-/**
- * Used to create, fill, and draw the calorimeter histograms.
- */
-public class AHistogram extends AData
-{
-    private static ALogger logger = ALogger.getLogger(AHistogram.class);
-    
-    public static final int UP = 0;
-    public static final int DOWN = 1;
-    
-    public static final int HORIZONTAL = 0;
-    public static final int VERTICAL = 1;
-    
-    public final static int RIGHT = 0;
-    public final static int LEFT = 1;
-    
-    private float leftLimit;
-    private float rightLimit;
-    private float gran;
-    private float granSafety;
-    private float[] towers;
-    
-    private double eta0, z, r;
-    private double factor;
-    private AData detector;
-    
-    
-    AHistogram(double leftLimit, double rightLimit, double gran, double factor, AData detector)
-    { 
-        super(new AHashMap(1).put("numData", 0),detector.getEvent());
-        
-        this.leftLimit = (float) leftLimit;
-        this.rightLimit = (float) rightLimit;
-        this.gran = (float) gran;
-        this.factor = factor;
-        this.detector = detector;
-        granSafety = (float) (this.gran * 0.1);
-        towers = new float[(int) Math.abs(Math.round((rightLimit - leftLimit) / gran))];
-        numData = towers.length;
-    }
-    
-    public float getGranularity()
-    {
-        return gran;
-    }
-    
-    public int getTowersCount()
-    {
-        return towers.length;
-    }
-    
-    public float[] getTowers()
-    {
-        return towers;
-    }
-    
-    public void fill(double v1, double v2, double q)
-    {
-        int t1 = (int) ((v1 + granSafety - leftLimit) / gran);
-        int t2 = (int) ((v2 - granSafety - leftLimit) / gran);
-        int i = -999;
-        
-        if (Math.min(t1, t2) < 0 || Math.max(t1, t2) >= towers.length)
-        {
-            logger.error("Histogram binning problem " + t1 + " " + t2 + " " + towers.length + " " + v1 + " " + v2);
-            return;
-        }
-        
-        if (t1 == t2)
-            towers[t1] += q;
-        else
-            for (i = t1; i <= t2; i++)
-                towers[i] += q / (t2 - t1 + 1);
-    }
-    
-    public void setGranularity(double newGran)
-    {
-        AHistogram newHist = new AHistogram(leftLimit, rightLimit, newGran, factor, detector);
-        
-        for (int i = 0; i < towers.length; i++)
-            newHist.fill(leftLimit + i * gran, leftLimit + (i + 1) * gran, towers[i]);
-        gran = (float) newGran;
-        towers = newHist.towers;
-    }
-    
-    public void add(AHistogram h)
-    {
-        float min = Math.min(leftLimit, h.leftLimit);
-        float max = Math.max(rightLimit, h.rightLimit);
-        
-        AHistogram sum = new AHistogram(min, max, gran, factor, detector);
-        
-        // first I add this histogram
-        for (int i = 0; i < towers.length; i++)
-            sum.fill(leftLimit + i * gran, leftLimit + (i + 1) * gran, towers[i]);
-        
-        // and the "h" histogram
-        for (int i = 0; i < h.towers.length; i++)
-            sum.fill(h.leftLimit + i * h.gran, h.leftLimit + (i + 1) * h.gran, h.towers[i]);
-        
-        // copy the sum histogram parameters into old ones
-        towers = sum.towers;
-        leftLimit = min;
-        rightLimit = max;
-    }
-    
-    public AHistogram getRegion(double v1, double v2)
-    {
-        AHistogram hRegion = new AHistogram(v1, v2, gran, factor, detector);
-        
-        int n1 = (int) Math.round((v1 - leftLimit) / gran);
-        int n2 = (int) Math.round((v2 - leftLimit) / gran);
-        
-        for (int i = n1; i < n2; i++)
-            hRegion.fill(v1 + (i - n1) * gran, v1 + (i - n1 + 1) * gran, towers[i]);
-        
-        return hRegion;
-    }
-    
-    private int getCode()
-    {
-        int c1, c2;
-        
-        if (leftLimit < -eta0)
-            c1 = 1;
-        else if (leftLimit > +eta0)
-            c1 = 3;
-        else
-            c1 = 2;
-        
-        if (rightLimit < -eta0)
-            c2 = 1;
-        else if (rightLimit > +eta0)
-            c2 = 3;
-        else
-            c2 = 2;
-        
-        return c1 * c2;
-    }
-    
-    public ACoord[] getRZUser(double z1, double r1, int upORdown)
-    {
-        this.z = z1;
-        this.r = r1;
-        double expEta0, k = z / r;
-        int N;
-        
-        eta0 = Math.abs(Math.log(k + Math.sqrt(k * k + 1)));
-        
-        switch (getCode())
-        {
-            case 1:
-                return new ACoord[] { getRZVerticalUser(z, upORdown) };
-                
-            case 4:
-                return new ACoord[] { getRZHorizontalUser(r, upORdown) };
-                
-            case 9:
-                return new ACoord[] { getRZVerticalUser(z, upORdown) };
-                
-            case 2:
-                N = (int) Math.abs(Math.round((eta0 - leftLimit) / gran));
-                eta0 = leftLimit + N * gran;
-                expEta0 = Math.exp(eta0);
-                this.r = 2 * this.z / (expEta0 - 1 / expEta0);
-                
-                return new ACoord[] { getRegion(leftLimit, -eta0).getRZVerticalUser(z, upORdown), getRegion(-eta0, rightLimit).getRZHorizontalUser(r, upORdown) };
-                
-            case 6:
-                N = (int) Math.abs(Math.round((eta0 - leftLimit) / gran));
-                eta0 = leftLimit + N * gran;
-                expEta0 = Math.exp(eta0);
-                this.r = 2 * this.z / (expEta0 - 1 / expEta0);
-                
-                return new ACoord[] { getRegion(leftLimit, +eta0).getRZHorizontalUser(r, upORdown), getRegion(+eta0, rightLimit).getRZVerticalUser(z, upORdown) };
-                
-            case 3:
-                // FIXME -- round() replaced by floor() here to make sure
-                // histograms do not end up inside the calorimeter outline. 
-                // They should be right at the edge regardless of the binning 
-                // though. This should be changed. -- EJ
-                N = (int) Math.abs(Math.floor((eta0 - leftLimit) / gran));
-                eta0 = leftLimit + N * gran;
-                expEta0 = Math.exp(eta0);
-                this.r = 2 * this.z / (expEta0 - 1 / expEta0);
-                
-                return new ACoord[] { getRegion(leftLimit, -eta0).getRZVerticalUser(z, upORdown), getRegion(-eta0, +eta0).getRZHorizontalUser(r, upORdown), getRegion(+eta0, rightLimit).getRZVerticalUser(z, upORdown) };
-                
-            default:
-                return null;
-        }
-    }
-    
-    public ACoord getRZHorizontalUser(double r, int place)
-    {
-        double[][][] hv = new double[2][towers.length][4];
-        int[] index = new int[towers.length];
-        double eta, exp1, exp2, zSign, rSign;
-        
-        for (int i = 0; i < towers.length; i++)
-        {
-            exp1 = Math.exp(leftLimit + i * gran);
-            exp2 = Math.exp(leftLimit + (i + 1) * gran);
-            rSign = (int) Math.pow(-1, place);
-            
-            eta = leftLimit + (i + 0.5) * gran;
-            if (eta != 0)
-                zSign = eta / Math.abs(eta);
-            else
-                zSign = 1;
-            
-            hv[0][i][0] = zSign * Math.abs(r * (exp1 - 1 / exp1) / 2);
-            hv[1][i][0] = rSign * r;
-            
-            hv[0][i][1] = zSign * Math.abs(r * (exp2 - 1 / exp2) / 2);
-            hv[1][i][1] = rSign * r;
-            
-            hv[0][i][2] = 0;
-            hv[1][i][2] = 0;
-            
-            index[i] = i;
-        }
-        
-        ACoord c = new ACoord(hv, index);
-        
-        c.source = this;
-        return c;
-    }
-    
-    public ACoord getRZVerticalUser(double z, int place)
-    {
-        double[][][] hv = new double[2][towers.length][4];
-        int[] index = new int[towers.length];
-        double exp1, exp2, zSign, rSign;
-        
-        for (int i = 0; i < towers.length; i++)
-        {
-            exp1 = Math.exp(leftLimit + i * gran);
-            exp2 = Math.exp(leftLimit + (i + 1) * gran);
-            rSign = (int) Math.pow(-1, place);
-            
-            if ((leftLimit > 0) && (rightLimit > 0))
-                zSign = +1;
-            else
-                zSign = -1;
-            
-            hv[0][i][0] = zSign * z;
-            hv[1][i][0] = rSign * Math.abs(2 * z / (exp2 - 1 / exp2));
-            
-            hv[0][i][1] = zSign * z;
-            hv[1][i][1] = rSign * Math.abs(2 * z / (exp1 - 1 / exp1));
-            
-            hv[0][i][2] = 0;
-            hv[1][i][2] = 0;
-            
-            index[i] = i;
-        }
-        
-        ACoord c = new ACoord(hv, index);
-        
-        c.source = this;
-        return c;
-    }
-    
-    protected ACoord getYXUser(double r)
-    {
-        int n = towers.length;
-        double[][][] hv = new double[2][n][4];
-        int[] index = new int[n];
-        
-        for (int i = 0; i < n; i++)
-        {
-            double phi1 = leftLimit + i * gran;
-            double phi2 = leftLimit + (i + 1) * gran;
-            
-            // first point
-            hv[0][i][0] = r * Math.cos(phi1);
-            hv[1][i][0] = r * Math.sin(phi1);
-            
-            // second point
-            hv[1][i][1] = r * Math.sin(phi2);
-            hv[0][i][1] = r * Math.cos(phi2);
-            
-            // third point (the center)
-            hv[0][i][2] = 0;
-            hv[1][i][2] = 0;
-            
-            index[i] = i;
-        }
-        
-        ACoord c = new ACoord(hv, index);
-        
-        c.source = this;
-        return c;
-    }
-    
-    public ACoord completeTowers(ACoord c)
-    {
-        AVector u = new AVector(0, 0);
-        
-        for (int i = 0; i < c.hv[0].length; i++)
-        {
-            double x0 = (c.hv[0][i][0] + c.hv[0][i][1]) / 2;
-            double y0 = (c.hv[1][i][0] + c.hv[1][i][1]) / 2;
-            double f = factor * towers[c.index[i]];
-            
-            u.set(x0 - c.hv[0][i][2], y0 - c.hv[1][i][2]).makeUnitary().scale(f);
-            
-            c.hv[0][i][2] = c.hv[0][i][1] + u.dx;
-            c.hv[1][i][2] = c.hv[1][i][1] + u.dy;
-            
-            c.hv[0][i][3] = c.hv[0][i][0] + u.dx;
-            c.hv[1][i][3] = c.hv[1][i][0] + u.dy;
-        }
-        
-        return c;
-    }
-    
-    protected ACoord getFRUser(double r)
-    {
-        int n = towers.length;
-        double[][][] hv = new double[2][n][4];
-        int[] index = new int[n];
-        
-        for (int i = 0; i < n; i++)
-        {
-            hv[0][i][0] = r;
-            hv[1][i][0] = Math.toDegrees(leftLimit + i * gran);
-            
-            hv[0][i][1] = r;
-            hv[1][i][1] = Math.toDegrees(leftLimit + (i + 1) * gran);
-            
-            hv[0][i][2] = 0;
-            hv[1][i][2] = Math.toDegrees(leftLimit + (i + 0.5) * gran);
-            
-            index[i] = i;
-        }
-        
-        ACoord c = new ACoord(hv, index);
-        
-        c.source = this;
-        return c;
-    }
-    
-    protected ACoord getFZUser(double z, int alignment)
-    {
-        int n = towers.length;
-        double[][][] hv = new double[2][n][4];
-        int[] index = new int[n];
-        
-        double zSign = Math.pow(-1, alignment);
-        
-        for (int i = 0; i < n; i++)
-        {
-            hv[0][i][0] = zSign * z;
-            hv[1][i][0] = Math.toDegrees(leftLimit + i * gran);
-            
-            hv[0][i][1] = zSign * z;
-            hv[1][i][1] = Math.toDegrees(leftLimit + (i + 1) * gran);
-            
-            hv[0][i][2] = 0;
-            hv[1][i][2] = Math.toDegrees(leftLimit + (i + 0.5) * gran);
-            
-            index[i] = i;
-        }
-        
-        ACoord c = new ACoord(hv, index);
-        
-        c.source = this;
-        return c;
-    }
-    
-    // implementation of AData
-    public String getParameterGroup()
-    {
-        return null;
-    }
-    
-    public String getName()
-    {
-        return null;
-    }
-    
-    public String getNameScreenName()
-    {
-        return detector.getParameterGroup() + " Histogram Tower";
-    }
-    
-    protected int internalColor()
-    {
-        return 0;
-    }
-    
-    protected void applyCuts()
-    {}
-    
-    public String getHitInfo(int index)
-    {
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (index: " + index + ")");
-        msg.append("\n ET = ");
-        msg.append(String.format("%.2f",towers[index]));
-        msg.append(" GeV");
-
-        return msg.toString();
-    }
-    
-    public int getIdFromIndex(int index)
-    {
-        // Histograms have only an internal ID, override this method here to avoid problems
-        return index;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHistogramData.java b/graphics/AtlantisJava/src/atlantis/data/AHistogramData.java
deleted file mode 100644
index c216d4582667..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHistogramData.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package atlantis.data;
-
-
-import atlantis.graphics.ACoord;
-
-
-public interface AHistogramData {
-  ACoord[] getYXHistograms();
-  ACoord[] getRZHistograms();
-  ACoord[] getFRHistograms();
-  ACoord[] getFZHistograms();
-  ACoord[] getXZHistograms();
-  ACoord[] getYZHistograms();
-  ACoord[] getVPHistograms();
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AHitData.java b/graphics/AtlantisJava/src/atlantis/data/AHitData.java
deleted file mode 100644
index b27c824660af..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AHitData.java
+++ /dev/null
@@ -1,487 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.list.AListManager;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.utils.AHashMap;
-import java.util.Vector;
-import atlantis.utils.ALogger;
-
-public abstract class AHitData extends AData
-{
-    private static ALogger logger = ALogger.getLogger(AHitData.class);
-    
-    protected byte[] type;
-    // sub should be removed at some point
-    protected int[] sub;
-    // linked list
-    protected int[] ll;
-    protected int[] llStart;
-    protected int[] llNum;
-
-    // for "new Truth" (2006-08-08) implementation of barcode management
-    // (association to truth tracks)
-    protected int[] barcode = null; // old style barcode
-    protected int[] barcodes = null; // new style barcodes
-    protected int[] numBarcodes = null; // new style numBarcodes
-
-  @Override
-    public final int getNumTypes(){
-        return 2;
-    }
-
-    private static final int NOISE = 0;
-    private static final int GOOD = 1;
-
-
-
-    AHitData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        
-        sub = p.getUnknownIntArray("sub");
-        type = new byte[numData];
-        ll = new int[numData];
-        llStart = new int[getNumTypes()];
-        llNum = new int[getNumTypes()];
-
-        AAssociation assoc = null;
-        if (p.get("barcode") != null)
-        {
-            // old style truth (1-to-1 barcode association)
-            barcode = p.getUnknownIntArray("barcode");
-
-            assoc = new AAssociation(getFullName(), "STr", null, barcode, event);
-            event.getAssociationManager().add(assoc);
-        }
-        else if(p.get("barcodes") != null && p.get("numBarcodes") != null)
-        {
-            // new style truth (1-to-n barcodes, numBarcodes association)
-            barcodes = p.getUnknownIntArray("barcodes");
-            numBarcodes = p.getUnknownIntArray("numBarcodes");
-
-            // getFullName() should return hit datatype name + storegate key
-            assoc = new AAssociation(getFullName(), "STr", numBarcodes, barcodes,event);
-            event.getAssociationManager().add(assoc);
-        }
-
-    } // AHitData() ---------------------------------------------------------
-
-
-
-    public String getHitInfo(int index)
-    {
-        StringBuilder r = new StringBuilder();
-        if(this.barcode != null)
-        {
-            // old style truth association - 1 barcode associated with a hit
-            r.append("\n barcode = " + barcode[index]);
-        }
-        else if(this.barcodes != null && this.numBarcodes != null)
-        {
-            // new style truth association - N barcodes associated with a hit
-
-            int[][] barcodes = event.getAssociationManager().get(getFullName(), "STr");
-            if(barcodes[index] != null)
-            {
-                r.append("\n barcode(s) = ");
-                for(int i = 0; i < barcodes[index].length; i++)
-                {
-                    r.append(barcodes[index][i] + "  ");
-                }
-            }
-            else
-            {
-                r.append("\n no STr associated");
-            }
-        }
-
-        return r.toString();
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-
-    /**
-     * Calculates actual association via - SiCluster for the datatype
-     * (SpacePoint (S3D) and TrigSpacePoint) to InDetTrack* (inner detector
-     * reconstructed track collection)
-     * @param to String
-     * @param via String
-     * @return int[][]
-     */
-    private int[][] calculateAssociation(String to, String via)
-    {
-        String infoMsg = "   association from: " + this.getName() + "  to: " +
-                         to + "  via: " + via;
-        
-        logger.debug("AData.calculateAssociation()\n" + infoMsg);
-
-        int[][] clusters = event.getAssociationManager().get(getFullName(), via);
-        int[][] recon = event.getAssociationManager().get(via, to);
-        AData source = event.get(via);
-        if(clusters == null || recon == null || source == null)
-        {
-            return null;
-        }
-
-        int[][] ass = new int[numData][];
-
-        // iterate over all data items of this datatype
-        for(int i = 0; i < numData; ++i)
-        {
-            if(clusters[i] != null && clusters[i].length == 2)
-            {
-                // this is a SCT hit which has two clusters
-                int index1 = source.getIndexFromId(clusters[i][0]);
-                int index2 = source.getIndexFromId(clusters[i][1]);
-                if(index1 != -1 && index2 != -1 &&
-                   recon[index1] != null && recon[index2] != null)
-                {
-                    int[] temp = new int[recon[index1].length];
-                    int matches = 0;
-                    for(int k = 0; k < recon[index1].length; ++k)
-                    {
-                        for(int j = 0; j < recon[index2].length; ++j)
-                        {
-                            if(recon[index1][k] == recon[index2][j])
-                            {
-                                // IndexOutOfBound protection
-                                if(matches < recon[index1].length)
-                                {
-                                    temp[matches] = recon[index1][k];
-                                    matches++;
-                                }
-                                else
-                                {
-                                    logger.warn("Association problem:\n" + infoMsg);
-                                }
-                            }
-                        }
-                    }
-                    if(matches == 0)
-                    {
-                        ass[i] = null;
-                    }
-                    else if(matches == temp.length)
-                    {
-                        ass[i] = temp;
-                    }
-                    else
-                    {
-                        int[] dest = new int[matches];
-                        System.arraycopy(temp, 0, dest, 0, matches);
-                        ass[i] = dest;
-                    }
-                }
-            }
-            else if(clusters[i] != null && clusters[i].length == 1)
-            {
-                // this is pixel hit which has one cluster only (second number was
-                // -1 and was ignored in the datatypes (S3D, TrigS3D) constuctor
-
-                // although this method calculates association via SiCluster
-                // there are no SiClusters for Pixel and this is a Pixel hit
-                // -> need to calculate the SpacePoint - Track association directly
-                // based on Track:hits (which has got id of non-existing SiCluster
-                // hits) and SpacePoint:cluster which also has Pixel cluster
-                // references (more see email on 2007-09-20 association problems ...)
-                // can't use above block as source (SiCluster) doesn't exists, there
-                // are no SiCluster in Pixel, thus source.getIndexFromId(clusters[i][0])
-                // can't work ...
-
-                // AAssociationManager.get(via, to); would return recalculated
-                // inverted association containing indices.
-
-                // this returns the direct array saved in InDetTrackData() constructor
-                // AAssociationManager.add(new AAssociation(assocKey, "SiCluster", numHits, hits));
-                int[][] directRecon = event.getAssociationManager().getAssociation(to, via).getData();
-
-                for(int x = 0; x < directRecon.length; x++)
-                {
-                    if(directRecon[x] != null)
-                    {
-                        for(int y = 0; y < directRecon[x].length; y++)
-                        {
-                            // if the SpacePoint cluster ID is the same as id in
-                            // Track:hits, then it's an associated hit
-                            if(clusters[i][0] == directRecon[x][y])
-                            {
-                                if(ass[i] == null)
-                                {
-                                    // current association, x is associated track index
-                                    ass[i] = new int[] { x };
-                                }
-                                else
-                                {
-                                    // some tracks before were already associated
-                                    // copy the array and add current track index
-                                    int[] temp = new int[ass[i].length + 1];
-                                    System.arraycopy(ass[i], 0, temp, 0, ass[i].length);
-                                    temp[ass[i].length] = x; // current association
-                                    ass[i] = new int[temp.length];
-                                    System.arraycopy(temp, 0, ass[i], 0, temp.length);
-                                }
-
-                            }
-                        } // for(int y = 0; y < directRecon[x].length; y++)
-                    }
-                } // loop over x (x is all track indices)
-            } // else - pixel cluster found
-
-        } // for(int i = 0; i < numData; ++i) - loop over all current datatype items
-
-        return ass;
-
-    } // calculateAssociation() ---------------------------------------------
-
-
-
-    /*
-     * This method uses clusters array (association with SiCluster) which
-     * is accessed in calculateAssociation() and creates
-     * TrigS3D - Track association and S3D - Track association (via SiCluster)
-     */
-    protected void calculateAssociationViaClusters()
-    {
-        Vector<String> keys = event.getCollections().get("InDetTrack");
-        int[][] recon = null;
-        int[][] recon2 = null;
-        AAssociation assoc = null;
-        String[] trackCollec = null;
-
-        if(keys != null)
-        {
-            trackCollec = (String[]) keys.toArray(new String[keys.size()]);
-            for(int j = 0; j < trackCollec.length; j++)
-            {
-                String trackCollecFull = "InDetTrack" + trackCollec[j];
-                recon = event.getAssociationManager().get(getFullName(), trackCollecFull);
-                recon2 = calculateAssociation(trackCollecFull, "SiCluster");
-                if(recon != null && recon2 != null)
-                {
-                    for(int i = 0; i< numData; i++)
-                    {
-                        if(recon2[i] != null)
-                        {
-                            // using array reference here - association array is corrected
-                            recon[i] = recon2[i];
-                        }
-                    }
-                    assoc = event.getAssociationManager().getAssociation(getName(), trackCollecFull);
-                    event.getAssociationManager().add(assoc.invert());
-                }
-            }
-        }
-
-    } // calculateAssociationViaClusters() ---------------------------------
-
-
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if (colorFunction == 0)
-        {
-            colorByConstant();
-        }
-        else if (colorFunction == 1)
-        {
-            colorBy("STr");
-        }
-        else if (colorFunction == 2)
-        {
-            colorBy(getReconstructedTracks());
-        }
-        else if (colorFunction == 3)
-        {
-            colorBy(sub);
-        }
-
-        return 3;
-
-    } // internalColor() ----------------------------------------------------
-
-
-
-    protected String getSegments()
-    {
-        AEnumeratorParameter key = (AEnumeratorParameter) parameterStore.get("InDetSegment", "InDetSegmentCollections");
-
-        return "InDetSegment" + key.getCurrentText();
-    }
-
-
-
-    public void constructDefaultDrawlist()
-    {
-        // make seperate lists of noise and good hits
-        makeNoiseList(0, 0);
-
-        if (!parameterStore.get("CutsATLAS", "ByList").getStatus())
-        {
-            // put noise and/or good hits in drawlist according to HitType
-            // parameter
-            // if both are drawn noise is drawn first
-            makeDrawList(parameterStore.get("CutsInDet", "HitType").getI());
-
-            // if some hits are on a list they must be drawn last
-            int[][] temp = AListManager.getInstance().getColorMapping(this);
-            int[] index = temp[0];
-            int[] ctemp = temp[1];
-            if (index.length > 0)
-            {
-                int[] c = new int[numData];
-                final int NONE = -999;
-                // color is not used at this time
-                for (int i = 0; i < c.length; ++i)
-                    c[i] = NONE;
-
-                for (int i = 0; i < index.length; ++i)
-                    c[index[i]] = ctemp[i];
-
-                int[] newListdl = new int[numData];
-                int num = 0;
-                for (int t = 0; t < getNumTypes(); t++)
-                {
-                    for (int i = 0; i < numDraw; ++i)
-                        if (t == type[listdl[i]] && c[listdl[i]] == NONE)
-                            newListdl[num++] = listdl[i];
-                    for (int i = 0; i < numDraw; ++i)
-                        if (t == type[listdl[i]] && c[listdl[i]] != NONE && c[listdl[i]] != AColorMap.INVISIBLE)
-                            newListdl[num++] = listdl[i];
-                }
-                listdl = newListdl;
-                numDraw = num;
-            }
-        }
-        else
-        {
-            boolean[] selected = AListManager.getInstance().getSelection(this);
-            numDraw = 0;
-            for (int t = 0; t < getNumTypes(); t++)
-                for (int i = 0; i < numData; ++i)
-                    if (t == type[i] && selected[i])
-                        listdl[numDraw++] = i;
-        }
-    }
-
-
-    /**
-     * define noise and good hits type = 0 means noise
-     * noise hits - hits associated neither with Track not STr
-     * good hits - hits associated either with Track or with STr
-     */
-    protected void setType()
-    {
-        int[][] assocSTr = event.getAssociationManager().get(getFullName(), "STr");
-        int[][] assocRTr = event.getAssociationManager().get(getName(), getReconstructedTracks());
-                
-        for (int i = 0; i < numData; i++)
-        {
-            if((assocSTr != null && assocSTr[i] != null) ||
-               (assocRTr != null && assocRTr[i] != null))
-            {
-                type[i] = 1;
-            }
-            else
-            {
-                type[i] = 0;
-            }
-        }
-
-    } // setType() ----------------------------------------------------------
-
-
-
-    protected void makeNoiseList(int a, int b)
-    {
-        setType();
-
-        for (int i = 0; i < getNumTypes(); i++)
-        {
-            llStart[i] = -1;
-            llNum[i] = 0;
-        }
-
-        for (int i = numData - 1; i >= 0; i--)
-        {
-            ll[i] = llStart[type[i]];
-            llStart[type[i]] = i;
-            llNum[type[i]]++;
-        }
-    }
-
-    private void makeDrawList(int hitType)
-    {
-        int start, end;
-
-        numDraw = 0;
-        if (hitType == 0)
-        {
-            start = end = NOISE;
-        }
-        else if (hitType == 1)
-        {
-            start = end = GOOD;
-        }
-        else
-        {
-            start = NOISE;
-            end = GOOD;
-        }
-
-        for (int i = start; i <= end; i++)
-        {
-            int n = llStart[i];
-
-            for (int j = 0; j < llNum[i]; j++)
-            {
-                listdl[numDraw++] = n;
-                n = ll[n];
-            }
-        }
-    }
-
-
-
-    public int[] getType(int[] dl)
-    {
-        int[] temp = new int[dl.length];
-
-        for (int i = 0; i < temp.length; i++)
-            temp[i] = type[dl[i]];
-        return temp;
-    }
-
-
-
-    /**
-     * cut hits if connected/unconnected to simulated tracks
-     */
-    protected void cutSimulatedTracks()
-    {
-        int cutOption = parameterStore.get("CutsInDet", "HitsBySTr").getI();
-        cutByAssociationTo("STr", getFullName(), cutOption);
-    }
-    
-    /**
-     * cut hits if connected/unconnected to reconstructed tracks
-     */
-    protected void cutReconstructedTracks()
-    {
-        int cutOption = parameterStore.get("CutsInDet", "HitsByRTr").getI();
-        cutByAssociationTo(getReconstructedTracks(), getName(), cutOption);
-    }
-    
-    /**
-     * cut hits if connected/unconnected to reconstructed segments
-     */
-    protected void cutSegments()
-    {
-        int cutOption = parameterStore.get("CutsInDet", "HitsBySegment").getI();
-        cutByAssociationTo(getSegments(), getName(), cutOption);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AInDetSegmentData.java b/graphics/AtlantisJava/src/atlantis/data/AInDetSegmentData.java
deleted file mode 100755
index e7d97508d648..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AInDetSegmentData.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-
-/**
- *
- * @author Eric Jansen
- */
-public class AInDetSegmentData extends ASegmentData {
-    
-    /** Creates a new instance of AInDetSegmentData */
-    AInDetSegmentData(AHashMap p, AEvent e) {
-        super(p,e);
-        
-        event.getAssociationManager().add(new AAssociation(getFullName(), "TRT", numHits, hits,event));
-    }
-    
-    public String getParameterGroup() {
-        return "InDetSegment";
-    }
-    
-    public String getName() {
-        return "InDetSegment";
-    }
-    
-    public String getNameScreenName() {
-        return "InDetSegment";
-    }    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AInDetTrackData.java b/graphics/AtlantisJava/src/atlantis/data/AInDetTrackData.java
deleted file mode 100644
index 05e5bda343d2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AInDetTrackData.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AAssociation;
-import atlantis.event.AEvent;
-import atlantis.event.AData;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-
-/**
- *
- * @author Eric Jansen
- */
-
-public class AInDetTrackData extends ATrackData {
-
-   private  int[] author = null;
-
-   protected int numBLayerHits[] = null;
-   protected int numPixelHits[] = null;
-   protected int numSCTHits[] = null;
-   protected int numTRTHits[] = null;
-
-   private static ALogger logger = ALogger.getLogger(ATrackData.class);
-
-  /** Creates a new instance of AInDetTrackData */
-  AInDetTrackData(AHashMap p, AEvent e) throws AAtlantisException {
-    super(p,e);
-
-    author = p.getUnsureIntArray("trackAuthor"); //Change added 17/02/2010
-
-    numBLayerHits = p.getUnsureIntArray("nBLayerHits");
-    numPixelHits = p.getUnsureIntArray("nPixHits");
-    numSCTHits = p.getUnsureIntArray("nSCTHits");
-    numTRTHits = p.getUnsureIntArray("nTRTHits");
-
-    String assocKey = getFullName();
-    if (p.get("numHits") != null) {
-      int[] numHits = p.getIntArray("numHits");
-      int[] hits = p.getIntArray("hits");
-
-      // This was added into TrkJiveXML-00-01-24, July 2010. For backwards
-      // compatibilty, we can also fill these arrays from the association
-      if (numPixelHits == null && numSCTHits == null && numTRTHits == null) {
-          numPixelHits = new int[numData];
-          numSCTHits = new int[numData];
-          numTRTHits = new int[numData];
-          for (int i=0, num=0; i<numData; i++) {
-              numPixelHits[i] = numSCTHits[i] = numTRTHits[i] = 0;
-
-              for (int j=0; j<numHits[i]; j++, num++) {
-                  try {
-                      // Negative identifiers are pixels, the rest we can decode using AIdHelper
-                      if (numHits[i] > 0 && (hits[num] < 0 || AIdHelper.subDetector(hits[num]) == 2)) {
-                          switch(hits[num] < 0 ? 1 : AIdHelper.indetPart(hits[num])) {
-                              case 1:
-                                  numPixelHits[i]++;
-                                  break;
-                              case 2:
-                                  numSCTHits[i]++;
-                                  break;
-                              case 3:
-                                  numTRTHits[i]++;
-                                  break;
-                          }
-                      }
-                  } catch (AAtlantisException ex) {
-                      logger.warn("Problem decoding hit identifier: " + ex.getMessage());
-                  }
-              }
-          }
-      }
-
-      int[] driftSign = null;
-      int[] isOutlier = null;
-      if (p.get("driftSign") != null && p.get("isOutlier") != null) {
-        driftSign = p.getIntArray("driftSign");
-        isOutlier = p.getIntArray("isOutlier");
-      }
-
-      event.getAssociationManager().add(new AAssociation(assocKey, "TRT", numHits, hits,event));
-      if (driftSign != null) {
-        event.getAssociationManager().add(new AAssociation(assocKey + "Drift", "TRT", numHits, driftSign,event));
-      }
-      if (isOutlier != null) {
-        event.getAssociationManager().add(new AAssociation(assocKey + "Outlier", "TRT", numHits, isOutlier,event));
-      }
-      event.getAssociationManager().add(new AAssociation(assocKey, "SiCluster", numHits, hits,event));
-      event.getAssociationManager().add(new AAssociation(assocKey, "PixelCluster", numHits, hits,event));
-
-      
-      // although these two following associations directly doesn't exist
-      // in the event file (e.g. Track:numHits,hits - S3D:id) because it
-      // is calculated over SiCluster, the association has to be
-      // established here and corrected later on in
-      // AS3D.finalizeConstruction() -> AHitData.calculateAssociationViaClusters()
-      event.getAssociationManager().add(new AAssociation(assocKey, "S3D", numHits, hits,event));
-      event.getAssociationManager().add(new AAssociation(assocKey, "TrigS3D", numHits, hits,event));
-    }
-  }
-
-  public String getParameterGroup() {
-    return "InDetTrack";
-  }
-
-  public String getName() {
-    return "InDetTrack";
-  }
-
-  public String getNameScreenName() {
-    return "InDetTrack";
-  }
-
-  public String getHitInfo(int index) {
-    String msg = super.getHitInfo(index);
-	int simpleOutput = AGlobals.instance().getSimpleOutput();
-	if(simpleOutput>0)
-	  return getNameScreenName()+" index: " + index + ((h!=null)?h[index].toString():""); // output for Minerva
-    if (numBLayerHits != null) {
-      msg += "\n numBLayerHits = " + numBLayerHits[index];
-    }
-    if (numPixelHits != null) {
-      msg += "\n numPixelHits = " + numPixelHits[index];
-    }
-    if (numSCTHits != null) {
-      msg += "\n numSCTHits = " + numSCTHits[index];
-    }
-    if (numTRTHits != null) {
-      msg += "\n numTRTHits = " + numTRTHits[index];
-    }
-    return msg;
-  }
-
-  protected void applyCuts() {
-    cut("CutsInDet", "RTrIndex", " RTr id", id);
-    cut("CutsInDet", "trackAuthor", " Author", author);
-
-    if (numBLayerHits != null) {
-        cut("CutsInDet", "NumBLayer", "Num BLayer", numBLayerHits);
-    }
-    if (numPixelHits != null) {
-        cut("CutsInDet", "NumPixel", "Num Pixel", numPixelHits);
-    }
-    if (numSCTHits != null) {
-        cut("CutsInDet", "NumSCT", "Num SCT", numSCTHits);
-    }
-    if (numTRTHits != null) {
-        cut("CutsInDet", "NumTRT", "Num TRT", numTRTHits);
-    }
-
-    super.applyCuts();
-
-    if (polylinedTrack && parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_HELIX) {
-      // if reconstructed tracks are drawn as helices, check for tracks
-      // with rhoVertex beyond the diameter of InDet and don't draw those
-      // super.rhoVertex array was calculated only if Track provided
-      // polyline data, otherwise rhoVertex is null and this method would
-      // cause NullPointerException
-      super.cutRhoVertexAfterInDetRadius();
-    }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AJetData.java b/graphics/AtlantisJava/src/atlantis/data/AJetData.java
deleted file mode 100644
index d2e1743a92b3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AJetData.java
+++ /dev/null
@@ -1,782 +0,0 @@
-package atlantis.data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import atlantis.event.AAssociation;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.event.AObjectsAssociation;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import atlantis.utils.A3Vector;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.canvas.AWindow;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.graphics.AGraphics;
-
-/**
- * Jet class - class handling multiple Jet datatypes
- *    (multiple collections) from various Jet alrogithms
- *    (JetRecJet, ParticleJet, etc)
- */
-public class AJetData extends AData
-{
-    protected float[] eT;
-    protected float[] eta;
-    protected float[] phi;
-    protected float[] mass;
-    protected float[] pT;
-    protected float[] px;
-    protected float[] py;
-    protected float[] pz;
-    //Transition variable to ensure backwards compatability
-    protected boolean has4Vect = false;
-    //variables for jet quality information
-    protected float[] quality = null;
-    protected float[] qualityLAr = null;
-    protected float[] qualityTile = null;
-    protected float[] time = null;
-    protected float[] timeClusters = null;
-    protected int[] n90cells = null;
-    protected int[] n90const = null;
-    protected float[] hecf = null;
-    protected float[] emfrac = null;
-    protected float[] tileGap3f = null;
-    protected float[] fcorCell = null;
-    protected float[] fcorDotx = null;
-    protected float[] fcorJet = null;
-    protected float[] fcorJetForCell = null;
-    protected int[] nbadcells = null;
-    protected float[] fracSamplingMax = null;
-    protected float[] sMax = null;
-    protected float[] OutOfTimeEfrac = null;
-    protected float[] isGood = null;
-    protected float[] isBad = null;
-    protected float[] isUgly = null;
-    protected String[] bTagName = null;              //new bTagname variable
-    protected float[]  bTagValue = null;             //new bTagValue variable
-    protected float[] weight = null;
-    protected float[] jvf = null;
-    //Transition variable to ensure backwards compatability
-    protected boolean hasJvf = true;
-
-    String[] caloSample = { "EMB0", "EMB1", "EMB2", "EMB3", "EME0", "EME1", "EME2", "EME3", "HEC0", "HEC1", "HEC2", "HEC3", "TileBar0", "TileBar1", "TileBar2", "TileGap1", "TileGap2", "TileGap3", "TileExt0", "TileExt1", "TileExt2", "FCAL0", "FCAL1", "FCAL2", "Unknown" };
-
-
-    AJetData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        if (p.get("et") != null)
-        {
-            eT = p.getFloatArray("et");
-        }
-        else
-        {
-            eT = p.getFloatArray("pt");
-        }
-
-
-        if(p.get("mass") != null)
-        {
-            mass = p.getFloatArray("mass");
-            px = p.getFloatArray("px");
-            py = p.getFloatArray("py");
-            pz = p.getFloatArray("pz");
-            has4Vect = true;
-        }
-        eta = p.getFloatArray("eta");
-        phi = p.getFloatArray("phi");
-
-        if(p.get("emfrac") != null)
-        {
-            emfrac = p.getFloatArray("emfrac");
-        }
-
-        float forwardJVF = 10.0f;
-        float initJVF = 1.0f;
-        if(p.get("jvf") != null)
-        {
-            jvf = p.getFloatArray("jvf");
-            for(int i=0; i<(jvf.length); i++)
-            {
-                if( jvf[i] == -1.0 )
-                    jvf[i] = forwardJVF; // forward-jets have jvf=-1
-            }
-        }
-        else // dummy values for older xml-files
-        {
-            hasJvf = false;
-            jvf = new float[eta.length]; // for array size
-            for(int i=0; i<(jvf.length); i++)
-            {
-                jvf[i] = initJVF; // need to assign dummy value to allow cut
-            }
-        }
-
-        //Getting BTagNames and BTagValues from xml       
-        if(p.get("bTagValue") != null)
-        {
-            bTagValue = p.getFloatArray("bTagValue");
-            bTagName  = p.getUnsureStringArray("bTagName");
-            weight    = new float[eta.length];                      
-            for(int i=0; i<(eta.length); i++)
-                weight[i] = bTagValue[i*(bTagValue.length/eta.length) + 0]; 
-            // 0 is the first instance of JetFitterNNComb
-            // we take this as default for now...
-        }
-
-        if(has4Vect)
-        {
-            float[] pTtemp = new float[mass.length];
-            for(int i = 0; i < mass.length; i++){
-                pTtemp[i] = (float) (new A4Vector(px[i],py[i],pz[i],mass[i]) ).getPt();
-            }
-            pT = pTtemp;
-        }
-
-        if(p.get("quality") != null)
-            quality         = p.getFloatArray("quality");
-        if(p.get("qualityLAr") != null){
-            qualityLAr      = p.getFloatArray("qualityLAr");
-            qualityTile     = p.getFloatArray("qualityTile");
-            time            = p.getFloatArray("time");
-            timeClusters    = p.getFloatArray("timeClusters");
-            n90cells        = p.getIntArray("n90cells");
-            n90const        = p.getIntArray("n90const");
-            hecf            = p.getFloatArray("hecf");
-            tileGap3f       = p.getFloatArray("tileGap3f");
-            fcorCell        = p.getFloatArray("fcorCell");
-            fcorDotx        = p.getFloatArray("fcorDotx");
-            fcorJet         = p.getFloatArray("fcorJet");
-            fcorJetForCell  = p.getFloatArray("fcorJetForCell");
-            nbadcells       = p.getIntArray("nbadcells");
-            fracSamplingMax = p.getFloatArray("fracSamplingMax");
-            sMax            = p.getFloatArray("sMax");
-            OutOfTimeEfrac  = p.getFloatArray("OutOfTimeEfrac");
-            isGood          = p.getFloatArray("isGood");
-            isBad           = p.getFloatArray("isBad");
-            isUgly          = p.getFloatArray("isUgly");
-        }
-
-        String assocKey = getFullName();
-        // create Jet - Calo associations if cells information is available
-        if(p.get("numCells") != null)
-        {
-            event.getAssociationManager().add(new AAssociation(assocKey, "LAr", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "TILE", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "HEC", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "FCAL", p.getIntArray("numCells"), p.getIntArray("cells"),event));
-        }
-
-        if (p.get("clusterKey") != null)
-        {
-            int[] clusterLinkCount = p.getUnsureIntArray("clusterLinkCount");
-            event.getAssociationManager().add(new AObjectsAssociation(assocKey, "Cluster", 
-                    p.getStringArray("clusterKey"), p.getIntArray("clusterIndex"), clusterLinkCount, event));
-        }
-        if (p.get("trackKey") != null)
-        {
-            int[] trackLinkCount = p.getUnsureIntArray("trackLinkCount");
-            event.getAssociationManager().add(new AObjectsAssociation(assocKey, "Track", 
-                    p.getStringArray("trackKey"), p.getIntArray("trackIndex"), trackLinkCount, event));
-        }        
-    }
-
-
-    public String getParameterGroup()
-    {
-        return "Jet";
-    }
-
-
-    public String getName()
-    {
-        return "Jet";
-    }
-
-
-    public String getNameScreenName()
-    {
-        return "Jet";
-    }
-
-
-    public float getET(int index)
-    {
-        return eT[index];
-    }
-
-
-    public float getEta(int index)
-    {
-        return eta[index];
-    }
-
-
-    public float getPhi(int index)
-    {
-        return phi[index];
-    }
-
-
-    public float[] getET()
-    {
-        return eT;
-    }
-
-
-    public float[] getEta()
-    {
-        return eta;
-    }
-
-
-    public float[] getPhi()
-    {
-        return phi;
-    }
-
-    public float[] getPt()
-    {
-        if(has4Vect){
-            return pT;
-        }else{
-            return eT;
-        }
-    }
-
-    @SuppressWarnings("unused")
-    // TODO: these cuts are from Nikolina
-    // using the wrong indices?
-    private float[] getfCorJetLevel()
-    {
-        // Tom - problem here with inconsistent indices?
-        // this code is not used yet, but the Jet people want it eventually
-        // i is the total data index, but we need to get that from the draw list, listdl[i].
-        float[] temp = new float[numDraw];
-        for (int i = 0; i < numDraw; i++)
-            temp[i] = (float) (fcorCell[i] - fcorJet[i]);
-        return temp;
-    }
-
-    @SuppressWarnings("unused")
-    // TODO: these cuts are from Nikolina
-    // using the wrong indices?
-    private float[] getHECfQ()
-    {
-        float[] temp = new float[numDraw];
-        for (int i = 0; i < numDraw; i++)
-            temp[i] = (float) (Math.abs(hecf[i]) + Math.abs(quality[i]));
-        return temp;
-    }
-
-    /* 
-     *  Return an ordered list of the btaggers available in the event.
-     *  If using an older XML file without btaggers available, an empty list is returned.
-     *  Ordering is important to be consistent with the BTag Weights, which are ordered the same.
-     */
-    public List<String> getBTaggers() {
-
-        List<String> taggers = new ArrayList<String>();
-
-        if(bTagName == null)
-            return taggers;
-
-        for(String tagger : bTagName) {
-            if(!taggers.contains(tagger)) {
-                taggers.add(tagger);
-            }
-        }
-
-        return taggers;
-    } 
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsObjects", "JetET", " |ET|", eT);
-        cutPhi(phi);
-        cutEta(eta);
-        cut("CutsObjects", "JetEMfraction", " |EM fraction|", emfrac);
-        cut("CutsObjects", "JetVxFraction", " |Vx Fraction|", jvf);
-
-        /* Placeholder for jet quality cuts (added by Nikolina Ilic)
-        cut("CutsObjects", "JetTime", " |dt(jet,coll)|", time);
-        cut("CutsObjects", "JetTileGap3F", " TileGap3F", tileGap3f);
-        cut("CutsObjects", "JetfCORRcell", " Already corrected cell level correction", fcorCell);
-        cut("CutsObjects", "JetfCORRjetLevel", " Correction by jet level estimation", getfCorJetLevel());
-        cut("CutsObjects", "JetHECfQ", " HECf-Quality", getHECfQ());
-        cut("CutsObjects", "JetOOTEf", " Out-Of-Time Energy frac", OutOfTimeEfrac);
-         */
-    }
-
-    public void colorbyBJets() {
-        //Initialy color all jets with constant color   		 		 
-        for (int i = 0; i < numData; i++) {
-            int constantColor2 = parameterStore.get("Jet", "Constant").getI();
-            color[i] = (byte) constantColor2;
-        }
-
-        //Read necessary information to colour Jets
-        int bTagValue_user =  parameterStore.get("CutsObjects", "JetBTagger").getI();   //getting user B-tagger preference 
-        int constantColor = parameterStore.get("BJet", "Constant").getI();
-        int constantColor2 = parameterStore.get("Jet", "Constant").getI();
-
-        //if b-tagging information is contained in xml file
-        if(bTagValue != null) {
-            int mod = bTagValue.length / eta.length;		//Number of Btaggers - eta.length is the number of Jets  			  
-            double s = parameterStore.get("CutsObjects", "JetBTagweight").getD();
-            for (int i = 0; i < eta.length; i++) {
-                color[i] = (byte) constantColor2;
-                if(bTagValue[bTagValue_user + i*mod]>s){
-                    color[i] = (byte) constantColor;
-                }
-            }
-        }
-    }
-
-
-
-
-    protected int internalColor()
-    {
-        int colorFunction = APar.instance().get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if (colorFunction == 0)
-        {
-            colorByConstant();
-        }
-        else if(colorFunction == 1)
-        {
-            colorByIndex();
-        }
-        else if(colorFunction == 2)
-        {
-            colorByCollection();
-        }
-        else if (colorFunction == 3)
-        {
-            colorbyBJets();
-        }
-        return 3;
-    }
-
-    public String getHitInfo(int index)
-    {
-        int simpleOutput = AGlobals.instance().getSimpleOutput();
-        if(simpleOutput>0){
-            String output = getNameScreenName()+" index: " + index;
-            if(simpleOutput==1 || simpleOutput==3) 
-                output+= "\n ET="+String.format("%.3f",eT[index])+" GeV\n "+
-                        AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-                        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-            if(simpleOutput==2 || simpleOutput==3) 
-                output+= "\n Ex="+String.format("%.3f",eT[index]*Math.cos(phi[index]))+" GeV "+
-                        "\n Ey="+String.format("%.3f",eT[index]*Math.sin(phi[index]))+" GeV "+
-                        "\n Ez="+String.format("%.3f",eT[index]*Math.sinh(eta[index]))+" GeV ";
-            return output;
-        }
-
-        String msg;
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        String printPt = "";
-        if(has4Vect){
-            printPt = "\n PT = " + String.format("%.3f",pT[index]) + " GeV";
-        }
-        msg = getNameScreenName() + " (id: " + id[index] + " index: " + index + ")\n" +
-                " storegate key: " + sgKey + printPt + "\n ET   = " +
-                String.format("%.3f",eT[index]) + " GeV" + "\n E   = " +
-                String.format("%.3f",Math.abs(eT[index] / Math.cos(AMath.lambda(eta[index])))) +
-                " GeV" + "\n " + AMath.ETA + " = " + String.format("%.3f",eta[index]) + "\n " +
-                AMath.PHI + " = " + String.format("%.3f",Math.toDegrees(phi[index])) +
-                AMath.DEGREES + "  (" + String.format("%.3f",phi[index]) + " rad)";
-
-        if(isGood != null) msg += "\n Selection: isGood =" + isGood[index] + "(isBad = " + isBad[index] + ", isUgly = " + isUgly[index] + ")";
-        if(hecf != null) msg += "\n hecf = " + String.format("%.2f",hecf[index])+ ", n90cells = " + n90cells[index] + " (n90const = " + n90const[index] + ")";
-        if (emfrac != null) msg += "\n emfrac = " + String.format("%.2f",emfrac[index]);
-        if (quality != null) msg += "\n quality = " + String.format("%.2f",quality[index]);
-        if (qualityLAr != null) msg += "(qLAr = " + String.format("%.2f",qualityLAr[index]) + ")";
-
-        if (hasJvf)
-        {
-            msg += "\n jvf = " + String.format("%.2f",jvf[index]);	
-        }
-        else
-        {
-            msg += "\n jvf n/a ";	
-        }
-        if (weight != null) msg += "  b-weight = " + String.format("%.2f",weight[index]);	
-        // Displaying bTagValues and bTagnames to the outputscreen	
-        if(bTagValue != null)
-        { 	
-            //calculating "multiple" number
-            int Div = (bTagValue.length)/(eta.length);
-            msg += "\n b-Taggers: ";
-            for (int s=0;s<Div;s++)
-            {
-                msg += bTagName[index*Div + s] + "=" + String.format("%.2f",bTagValue[index*Div + s]) + ", "; 
-            }    		    	
-        }
-        if (time != null) msg += "\n time = " + String.format("%.2f",time[index]) + " ns (clus time = " + String.format("%.2f",timeClusters[index]) + " ns)";  
-        if (OutOfTimeEfrac != null) msg += "\n Out-Of-Time Energy fraction = " + String.format("%.2f", OutOfTimeEfrac[index]);   
-        if (fracSamplingMax != null) msg += "\n fracSamplingMax = " + String.format("%.2f",fracSamplingMax[index]) + " (sMax = " + caloSample[(int) sMax[index]] + ")";
-        if (tileGap3f != null) msg += "\n tileGap3f = " + String.format("%.2f",tileGap3f[index]) + ", fcorCell=" + String.format("%.2f",fcorCell[index]) + ", fcorJet=" + String.format("%.2f",fcorJet[index]);
-        if (fcorDotx != null) msg += "\n fcorDotx=" + String.format("%.2f",fcorDotx[index]) + " (not implemented yet)";
-
-        return msg;
-    }
-
-    // info on Jet collections contained in v-plot rubberband selection
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumE = 0.;
-        double sumEt = 0.;
-
-        for (int i = 0; i < numDraw; ++i)
-        {
-            sumEt += Math.abs(eT[listdl[i]]);
-            sumE += Math.abs(eT[listdl[i]] / Math.cos(AMath.lambda(eta[listdl[i]])));
-        }
-
-        String key = getFullName();
-        String msg = numDraw + " " + (key != null ? "" + key : getNameScreenName());
-        msg += "  sum(ET) = " + String.format("%.1f",sumEt) + "  sum(E) = " + String.format("%.1f",sumE);
-
-        return msg;
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        if(has4Vect){
-            for (int i =    0; i < num; ++i)
-            {
-                int k = list[i];
-                A4Vector start = new A4Vector();
-                start.setPtEtaPhiM(pT[k],eta[k],phi[k],mass[k]);
-                sum.add(start);
-            }
-        }else{
-            for (int i =    0; i < num; ++i)
-            {
-                int k = list[i];
-                A3Vector start = A3Vector.fromRhoPhiZ(0., 0., 0.);
-                double tL = AMath.tanLambda(eta[k]);
-                A3Vector stop = A3Vector.fromRhoPhiZ(1., phi[k], tL);
-                A3Vector v = (stop.subtract(start)).normalize();
-                double p = eT[k] / Math.sqrt(1. - v.z * v.z);
-                sum.add(new A4Vector(v.scale(p), 0.));
-            }
-        }
-        return sum;
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if (projection instanceof AProjectionVP)
-        {
-            ACoord centers = window.calculateDisplay(getUser(projection));
-            int[] drawlist = centers.index;
-            double eLimit = 0.05;
-            int numPoints = 25;
-            double[][][] hv = new double[2][drawlist.length][numPoints];
-
-            for (int i = 0; i < drawlist.length; ++i)
-            {
-                int list = drawlist[i];
-                int jetMode = parameterStore.get("VP", "Jet").getI();
-                double e;
-                if (jetMode == 0)
-                    // showing jet in ET
-                    e = Math.abs(eT[list]);
-                else
-                    // showing jet in E
-                    e = Math.abs(eT[list] / Math.cos(AMath.lambda(eta[list])));
-                int d = (int) (Math.sqrt((e / eLimit) / Math.PI));
-                if (d == 0)
-                    d = 1;
-                for (int j = 0; j < numPoints; j++)
-                {
-                    hv[0][i][j] = centers.hv[0][0][i] + d * Math.cos(Math.PI * 2 * j / (numPoints - 1));
-                    hv[1][i][j] = centers.hv[1][0][i] + d * Math.sin(Math.PI * 2 * j / (numPoints - 1));
-                }
-            }
-            ag.draw(new ACoord(hv, drawlist, this, ACoord.POLYLINES));
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-    protected int getDrawOrFill()
-    {
-        return AGraphics.FILL;
-    }
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = eta[list];
-            v[i] = Math.toDegrees(phi[list]);
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    @Override
-    protected ACoord getYXUser()
-    {
-        int coneSmooth = 20;
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][(2*coneSmooth)];
-        int[] index = new int[numDraw];
-
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-
-        double dphi = 0.4;
-
-        if(sgKey.contains("Kt6"))
-            dphi = 0.6;
-        if(sgKey.contains("Kt1"))
-            dphi = 1.0;
-
-        double rhoMinus = parameterStore.get("Jet","Innerdrawradius").getD();
-        double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-        double s = parameterStore.get("Jet", "Scale").getD();
-        double rhoMax = s*1000;
-        if (0==s) return ACoord.NO_POLYLINES;
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-
-            //if no composite particles increase jet size
-            //Vector keys = (Vector) event.getCollections().get("CompositeParticle");
-            //if (keys == null || !parameterStore.get("Data", "CompositeParticle").getStatus()) rhoMax=1000;//1800;
-
-			double rhoPlus = rhoMax;
-			if(Math.abs(eT[list]) < maxEnergy) {
-				if(parameterStore.get("Jet", "ScaleType").getI() == 1) //sq root
-					rhoPlus = rhoMinus + rhoMax *  (Math.sqrt  (Math.abs(eT[list])/maxEnergy));
-				if(parameterStore.get("Jet", "ScaleType").getI() == 0) // linear
-					rhoPlus = rhoMinus + rhoMax *  (Math.abs(eT[list])/maxEnergy);
-			}
-
-            double vx = parameterStore.get("Event", "XVtx").getD();
-            double vy = parameterStore.get("Event", "YVtx").getD();
-
-            double h_shift = vx;
-            double v_shift = vy;
-
-            // the loop interpolates between the inner and outer edge of the jet to draw the arc
-
-            // draw the outer arc
-            for(int j=0; j<coneSmooth; j++){
-                float f = ((float)j)/(coneSmooth-1);
-                hv[0][i][j] = h_shift + (rhoPlus) * Math.cos(((1-f)*phiPlus + (f)*phiMinus));
-                hv[1][i][j] = v_shift + (rhoPlus) * Math.sin(((1-f)*phiPlus + (f)*phiMinus));
-            }
-
-            // draw the inner arc
-            for(int j=coneSmooth; j<(2*coneSmooth); j++){
-                float f = ((float)j-coneSmooth)/(coneSmooth-1);
-                hv[0][i][j] = h_shift + (rhoMinus) * Math.cos(((1-f)*phiMinus + (f)*phiPlus));
-                hv[1][i][j] = v_shift + (rhoMinus) * Math.sin(((1-f)*phiMinus + (f)*phiPlus));
-            }
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.TRANSPARENT_POLYGONS);
-    }
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-
-        double dphi = 0.4;
-
-        if(sgKey.contains("Kt6"))
-            dphi = 0.6;
-        if(sgKey.contains("Kt1"))
-            dphi = 1.0;
-
-        double s = parameterStore.get("Jet", "Scale").getD();
-        double rhoMax = s*1500;
-        double rhoMinus = parameterStore.get("Jet","Innerdrawradius").getD();
-        double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-        if (0==s) return ACoord.NO_POLYLINES;
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-
-            //if no composite particles increase jet size
-            //Vector keys = (Vector) event.getCollections().get("CompositeParticle");
-            //if (keys == null || !parameterStore.get("Data", "CompositeParticle").getStatus()) rhoMax=1000;//1800;
-
-			double rhoPlus = rhoMinus + rhoMax;
-			if(Math.abs(eT[list]) < maxEnergy) {
-				if(parameterStore.get("Jet", "ScaleType").getI() == 1) //sq root
-					rhoPlus = rhoMinus + rhoMax *  (Math.sqrt  (Math.abs(eT[list])/maxEnergy));
-				if(parameterStore.get("Jet", "ScaleType").getI() == 0) // linear
-					rhoPlus = rhoMinus + rhoMax *  (Math.abs(eT[list])/maxEnergy);
-			}
-
-            hv[0][i][0] = rhoMinus;
-            hv[1][i][0] = Math.toDegrees(phiMinus);
-
-            hv[0][i][1] = rhoMinus;
-            hv[1][i][1] = Math.toDegrees(phiPlus);
-
-            hv[0][i][2] = rhoPlus;
-            hv[1][i][2] = Math.toDegrees(phiPlus);
-
-            hv[0][i][3] = rhoPlus;
-            hv[1][i][3] = Math.toDegrees(phiMinus);
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.TRANSPARENT_POLYGONS).includePhiWrapAround("FR");    	
-    }
-
-    protected double Theta (double eta, int rSign)
-    {
-        // calculate theta based on the eta value
-        double theta = Math.atan(Math.exp(-Math.abs(eta))) * 2.0;
-        if ((eta > 0.) && (rSign == -1))
-            theta = 2 * Math.PI - theta;
-        else if ((eta < 0.) && (rSign == -1))
-            theta += Math.PI;
-        else if ((eta < 0.) && (rSign == 1))
-            theta = Math.PI - theta;
-
-        return theta;
-    }
-
-    protected ACoord getRZUser()
-    {
-        int coneSmooth = 20;
-        double s = parameterStore.get("Jet", "Scale").getD();
-        if (0==s) return ACoord.NO_POLYLINES;
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][(2*coneSmooth)];
-        int[] index = new int[numDraw];
-
-        double innerRadius = parameterStore.get("Jet","Innerdrawradius").getD();
-
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-
-        double deta = 0.4;
-
-        if(sgKey.contains("Kt6"))
-            deta = 0.6;
-        if(sgKey.contains("Kt1"))
-            deta = 1.0;
-
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list]-phiMid);
-            int rSign;
-            if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            double theta = Theta(eta[list],rSign);
-            double thetaPlus = Theta(eta[list] + deta, rSign);
-            double thetaMinus = Theta(eta[list] - deta, rSign);
-
-            // decide the region based on the theta value
-            final byte TOP_BOTTOM = 0;
-            final byte LEFT_RIGHT = 1;
-            byte region = TOP_BOTTOM;
-            // hard-coded value is based on the values in Geometry
-            if(Math.abs(Math.tan(theta)) < 0.8)
-                region = LEFT_RIGHT;
-
-            double radiusMinus = 0.;
-
-            switch(region)
-            {
-            case TOP_BOTTOM:
-                radiusMinus = innerRadius / Math.abs(Math.sin(theta));
-                break;
-            case LEFT_RIGHT:
-                radiusMinus = innerRadius / Math.abs(Math.cos(theta));
-                break;
-            }
-            //compare to AAODData for rhoMax/Minus values
-            double radiusMax = s*2500.;
-
-            //if no composite particles increase jet size
-            //Vector keys = (Vector) event.getCollections().get("CompositeParticle");
-            //if (keys == null || !parameterStore.get("Data", "CompositeParticle").getStatus()) radiusMax+=200;
-
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double radiusPlus = radiusMinus + radiusMax;
-            if(Math.abs(eT[list] / Math.cos(AMath.lambda(eta[list]))) < maxEnergy)
-            {
-                if(parameterStore.get("Jet", "ScaleType").getI() == 1) //sq root
-                    radiusPlus = radiusMinus + radiusMax *  (Math.sqrt  (Math.abs(eT[list] / Math.cos(AMath.lambda(eta[list])))/maxEnergy));
-                if(parameterStore.get("Jet", "ScaleType").getI() == 0) // linear
-                    radiusPlus = radiusMinus + radiusMax *((Math.abs(eT[list] / Math.cos(AMath.lambda(eta[list]))))/maxEnergy);
-            }
-
-            double vx = parameterStore.get("Event", "XVtx").getD();
-            double vy = parameterStore.get("Event", "YVtx").getD();
-            double vz = parameterStore.get("Event", "ZVtx").getD();
-
-            double h_shift = vz;
-            double v_shift = Math.sqrt(vx*vx + vy*vy);
-
-            // the loop interpolates between the inner and outer edge of the jet to draw the arc
-            // draw the outer arc
-            for(int j=0; j<coneSmooth; j++){
-                float f = ((float)j)/(coneSmooth-1);
-                hv[0][i][j] = h_shift + (radiusPlus) * Math.cos(((1-f)*thetaPlus + (f)*thetaMinus));
-                hv[1][i][j] = v_shift + (radiusPlus) * Math.sin(((1-f)*thetaPlus + (f)*thetaMinus));
-            }
-
-            // draw the inner arc
-            for(int j=coneSmooth; j<(2*coneSmooth); j++){
-                float f = ((float)j-coneSmooth)/(coneSmooth-1);
-                hv[0][i][j] = h_shift + (radiusMinus) * Math.cos(((1-f)*thetaMinus + (f)*thetaPlus));
-                hv[1][i][j] = v_shift + (radiusMinus) * Math.sin(((1-f)*thetaMinus + (f)*thetaPlus));
-            }
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.TRANSPARENT_POLYGONS);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AJetROIData.java b/graphics/AtlantisJava/src/atlantis/data/AJetROIData.java
deleted file mode 100755
index c47c2ce92990..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AJetROIData.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-
-/**
- *
- * Jet Region Of Interest
- *
- * @author Zdenek Maxa, Qiang Lu
- */
-public class AJetROIData extends AROIData
-{
-
-    AJetROIData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-    } // AJetROIData() ------------------------------------------------------
-
-
-    public String getParameterGroup()
-    {
-        return "JetROI";
-    } // getParameterGroup() ------------------------------------------------
-
-
-    public String getName()
-    {
-        return "JetROI";
-    } // getName() ----------------------------------------------------------
-
-
-    public String getNameScreenName()
-    {
-        return "JetROI";
-    } // getNameScreenName() ------------------------------------------------
-
-} // class AJetROIData ======================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/ALArData.java b/graphics/AtlantisJava/src/atlantis/data/ALArData.java
deleted file mode 100644
index 7b0efc9cd77c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ALArData.java
+++ /dev/null
@@ -1,1032 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import com.Ostermiller.util.CSVParser;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.io.FileNotFoundException;
-
-import atlantis.geometry.ABarrelCalorimeterDetector;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.utils.AUtilities;
-import atlantis.parameters.AParameter;
-import atlantis.utils.ALogger;
-
-
-/**
- * The Liquid Argon ElectroMagnetic Calorimeter
- *
- * @author Eric Jansen
- */
-public class ALArData extends ACalorimeterData
-{
-    private static ALogger logger = ALogger.getLogger(ALArData.class);
-    
-    // data for real pulse shapes plots
-    private int numSamplings = 0;
-    private int[][] adcCounts = null;
-    private float[] cellTime = null;
-    private int[] cellGain = null;
-    private float[] cellPedestal = null;
-    private float[] adc2Mev = null;
-    private static boolean pulseShapesDataAvailable = false;
-    private static final String LOOKUP_TABLE_FILE =
-    		AGlobals.instance().getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		"rpsplt_lar.csv";
-    // number of lookup table values for real pulse shapes plots calculation
-    private static final short NUMBER_OF_LOOKUP_VALUES = 799;
-
-
-
-    ALArData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        for (int i = 0; i < numData; i++)
-        {
-            try
-            {
-                side[i] = (byte) AIdHelper.larBarrelEndcap(id[i]);
-                etaIndex[i] = (short) AIdHelper.larEta(id[i]);
-                phiIndex[i] = (short) AIdHelper.larPhi(id[i]);
-                sampling[i] = AIdHelper.larSampling(id[i]);
-            }
-            catch (AAtlantisException aex)
-            {
-                logger.warn("Problem decoding ID " + id[i] + " in " +
-                               CALORIMETER_NAME + ": " + aex.getMessage(), aex);
-                side[i] = 0;
-                etaIndex[i] = -1;
-                phiIndex[i] = -1;
-                sampling[i] = -1;
-            }
-        }
-
-        makeHitToGeometryMapping();
-        for (int i = 0; i < et.length; ++i)
-        {
-            et[i] = Math.abs(energy[i] / (float) Math.cosh(eta[i]));
-        }
-
-        // Collect some constants we need for the histograms.
-        for (int i = 0; i < ACalorimeterDetector.count(); i++)
-        {
-
-            if (ACalorimeterDetector.get(i).getName().indexOf(CALORIMETER_NAME) >= 0)
-            {
-                if (ACalorimeterDetector.get(i) instanceof ABarrelCalorimeterDetector)
-                {
-                    if (innerR == 0.0 || ACalorimeterDetector.get(i).getRMin() < innerR)
-                    {
-                        innerR = ACalorimeterDetector.get(i).getRMin();
-                    }
-                }
-                else
-                {
-                    if (innerZ == 0.0 || ACalorimeterDetector.get(i).getZMin() < innerZ)
-                    {
-                        innerZ = ACalorimeterDetector.get(i).getZMin();
-                    }
-                }
-                if (outerR == 0.0 || ACalorimeterDetector.get(i).getRMax() > outerR)
-                {
-                    outerR = ACalorimeterDetector.get(i).getRMax();
-                }
-                if (outerZ == 0.0 || ACalorimeterDetector.get(i).getZMax() > outerZ)
-                {
-                    outerZ = ACalorimeterDetector.get(i).getZMax();
-                }
-                if (outerEta == 0.0 || ACalorimeterDetector.get(i).getEtaMax() > outerEta)
-                {
-                    outerEta = ACalorimeterDetector.get(i).getEtaMax();
-                }
-                if (phiGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaPhi() < phiGranularity)
-                {
-                    phiGranularity = ACalorimeterDetector.get(i).getDeltaPhi();
-                }
-                if (etaGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaEta() < etaGranularity)
-                {
-                    etaGranularity = ACalorimeterDetector.get(i).getDeltaEta();
-                }
-            }
-        }
-
-        // Add a little bit of extra margin to prevent binning errors due to
-        // rounding of numbers.
-        outerEta += etaGranularity;
-
-        readPulseShapePlotData(p);
-
-    } // ALArData() ---------------------------------------------------------
-
-
-
-    private void readPulseShapePlotData(AHashMap p)
-    {
-        // read ADCCounts and cell data for real pulse shapes plots
-        adcCounts = super.getADCCountsData(p);
-
-        // read LAr digits (cell data) for real pulse shapes plots
-        cellTime = (p.get("cellTime") != null) ? p.getFloatArray("cellTime") : null;
-        cellGain = (p.get("cellGain") != null) ? p.getIntArray("cellGain") : null;
-        cellPedestal = (p.get("cellPedestal") != null) ? p.getFloatArray("cellPedestal") : null;
-        adc2Mev = (p.get("adc2Mev") != null) ? p.getFloatArray("adc2Mev") : null;
-
-        pulseShapesDataAvailable = false;
-        if(adcCounts != null && cellTime != null && cellGain != null &&
-           cellPedestal != null && adc2Mev != null)
-        {
-            pulseShapesDataAvailable = true;
-            numSamplings = adcCounts[0].length;
-            
-            logger.debug(CALORIMETER_NAME +
-                    ": data for real pulse shape plots available");
-
-            if(ACalorimeterRPSPLT.areLarLookupTablesInitialized())
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup tables have already been read in");
-            }
-            else
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup table values have not been read in yet\n" +
-                        "  trying to read file: " + LOOKUP_TABLE_FILE);
-
-                try
-                {
-                    readLookupTableFile();
-
-                    logger.debug(CALORIMETER_NAME +
-                            ": values from " + LOOKUP_TABLE_FILE +
-                            " successfully read in");
-                }
-                catch(AAtlantisException ex)
-                {
-                    logger.error(CALORIMETER_NAME +
-                                  ": reading " + LOOKUP_TABLE_FILE +
-                                  " failed, real pulse shapes plots will not " +
-                                  "be available, reason: " + ex.getMessage(), ex);
-                    pulseShapesDataAvailable = false;
-                }
-            }
-        }
-
-    } // readPulseShapePlotData() -------------------------------------------
-
-
-
-    /**
-     * readLookupTableFile() reads in comma separated values (CSV) file
-     * with LAr real pulse shapes plots time and amplitude lookup values
-     * @param fileName String
-     * @throws AAtlantisException
-     */
-    private void readLookupTableFile() throws AAtlantisException
-    {
-        try
-        {        	
-            InputStream is = AUtilities.getFileAsStream(LOOKUP_TABLE_FILE);
-            CSVParser parser = new CSVParser(is);        	
-            parser.setCommentStart("#");
-            String arrayName =  null;
-
-            while((arrayName = parser.nextValue()) != null)
-            {
-                String valueArray = parser.nextValue(); // shall now contain all values
-                CSVParser parserArray = new CSVParser(new StringReader(valueArray));
-                String[][] s = parserArray.getAllValues();
-                
-                float[] array = getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                ACalorimeterRPSPLT.setLarTable(arrayName, array); 
-            } // while
-        }
-        catch(FileNotFoundException e)
-        {
-            throw new AAtlantisException("could not find file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(IOException e)
-        {
-            throw new AAtlantisException("exception while reading file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(AAtlantisException e)
-        {
-            throw e;
-        }
-
-    } // readLookupTableFile() ----------------------------------------------
-
-
-
-    /**
-     *
-     * @param index int
-     * @param lookupTablesInfo String
-     * Debug info method in order to make sure that correct lookup table
-     * is used given barrel/endcap, sampling and region of LAr.
-     */
-    private void pulseShapePlotsDebugInfo(int index, String lookupTableName)
-    {
-        String msg = null;
-        try {
-            msg = "\n    barrel/endcap value: " +
-                    AIdHelper.larBarrelEndcap(id[index]);
-            msg += " is ";
-            msg += AIdHelper.larIsBarrel(id[index]) ? "barrel" : "endcap";
-            msg += "\n    sampling/layer: " + sampling[index];
-            msg += "\n    region: " + AIdHelper.larRegion(id[index]);
-            msg += "\n    lookup table used: " + lookupTableName;
-            logger.debug(msg + "\n");
-        } catch (AAtlantisException aaex) {
-            logger.debug("\n  exception: " + aaex.getMessage(), aaex);
-        }
-    } // pulseShapePlotsDebugInfo() -----------------------------------------
-
-
-    
-    /**
-     * This method is used when calculating real pulse shapes plots.
-     * It is called from getLookupTableForPulseShapesPlots()
-     * It calculates index of the 0.1 eta bin the argument eta
-     * (eta of a cell) falls into. Thus it determines which eta
-     * range a cell belongs to (eta ranges are last level of cells
-     * division from barrel/endcap, layer, region.
-     * startIndex argument tells which eta range we start counting from
-     * (given the eta ranges division it may not necessarily be from 0).
-     * If eta doesn't fall into a specified interval, empty String
-     * is returned - then missing ETAx suffix will cause retrieving
-     * of the float[] will fail.
-     * 
-     * @param etaFrom
-     * @param etaTo
-     * @return
-     */
-    private static String getEtaBinIndex(float etaFrom, float etaTo,
-                                         float cellEta, int startIndex)
-    {
-        float step = 0.1f; // step, size of the eta bins
-        float absEta = Math.abs(cellEta);
-        int index = startIndex;
-        
-        for(float f = etaFrom; f < etaTo; f += step, index++)
-        {
-            if(absEta > f && absEta < f + step)
-            {
-                logger.debug("eta range calculation: cell eta = " + cellEta + " " +
-                             "etaFrom = " + etaFrom + " etaTo = " + etaTo);
-                logger.debug("eta range index result: " + index +
-                             " (index offset was: " + startIndex + ")");
-                return "ETA" + index + "_" ;
-            }
-        }
-        
-        // calculating bin failed, retrieving the array will fail later
-        return "";
-        
-    } // calculateEtaBinIndex() ---------------------------------------------
-    
-    
-
-    /**
-     * Method returns correct float[] array for amplitude lookup table
-     * depending whether a cell (determined by index, resp. id[index]) is in
-     * barrel, endcap, which layer and which region or which eta range.
-     * This method accesses ACalorimeterRPSPLT
-     * Methods contains constant value defining parts of LAr detector
-     * (as used in AIdHelper) and also eta range constants provided by
-     * the LAr community.
-     *
-     * @param index int
-     * @return float[]
-     */
-    private float[] getLookupTableForPulseShapesPlots(int index) throws AAtlantisException
-    {
-        float[] amplitude =  null; // lookup table amplitude values
-        
-        // helper variable - absolute value of eta - for checking of the eta range
-        float absEta = Math.abs(eta[index]);
-        
-        // the key for ACalorimeterRPSPLT.getLarTable(key) will gradually be
-        // constructed depending on barrel/endcap, layer, region and eta range
-        String lookupTableKey = "LAR_"; // start of the name all LAR_ tables
-        
-
-        if(AIdHelper.larIsBarrel(id[index]))
-        {
-            // it is barrel
-            lookupTableKey += "BARREL_";
-            switch(sampling[index])
-            {
-                case 0: // layer 0
-                    // plot ADC counts only for this layer
-                    String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-                    String title = "LAr cell: " + decodedId[0];
-                    int[][] data = { adcCounts[index] };
-                    APulseShapePlot.plotADCCounts(data, title, null);
-                    throw new AAtlantisException("ADC counts plot only, pulse shape plot not " +
-                                                 "implemented for LAr barrel, layer 0");
-                case 1:
-                    lookupTableKey += "LAYER1_"; // layer 1
-                    switch(AIdHelper.larRegion(id[index]))
-                    {
-                        case 0:
-                            lookupTableKey += "REGION0_";
-                            break;
-                        case 1:
-                            lookupTableKey += "REGION1_";
-                            break;
-                        default:
-                            AOutput.append("\npulse shape plots - LAr barrel, " +
-                                           "layer 1, region > 1. Using layer 1, " +
-                                           "region 1 lookup table\n", ALogInterface.WARNING);
-                            lookupTableKey += "REGION1_";
-                    }
-                    break;
-                case 2: // layer 2
-                    lookupTableKey += "LAYER2_"; // layer 2
-                    switch(AIdHelper.larRegion(id[index]))
-                    {
-                        case 0:
-                            lookupTableKey += "REGION0_";
-                            break;
-                        case 1:
-                            lookupTableKey += "REGION1_";
-                            break;
-                        default:
-                            AOutput.append("\npulse shape plots - LAr barrel, " +
-                                           "layer 2, region > 1. Using layer 2, " +
-                                           "region 1 lookup table\n", ALogInterface.WARNING);
-                            lookupTableKey += "REGION1_";
-                    }
-                    break;
-                case 3: // layer 3
-                    lookupTableKey += "LAYER3_REGION0_";
-                    break;
-            }
-        } // if(AIdHelper.larIsBarrel(id[index]))
-        else
-        {
-            // we are in the endcap
-            lookupTableKey += "ENDCAP_";
-            switch(sampling[index])
-            {
-                case 0: // layer 0
-                    // only one region and one eta range on this layer
-                    lookupTableKey += "LAYER0_REGION0_ETA0_";
-                    break;
-                case 1: // layer 1
-                    lookupTableKey += "LAYER1_";
-                    switch(AIdHelper.larRegion(id[index]))
-                    {
-                        case 0:
-                            lookupTableKey += "REGION0_";
-                            if(absEta > 1.375f && absEta < 1.425f)
-                            {
-                                lookupTableKey += "ETA0_"; // first eta range
-                            }
-                            else
-                            {
-                                // eta ranges with step 0.1 provided by Andre
-                                // start index counting from 1, 0 range is used above
-                                lookupTableKey += getEtaBinIndex(2.5f, 3.2f, eta[index], 1);                              
-                            }
-                            break;
-                        case 1:
-                            lookupTableKey += "REGION1_ETA0_"; // no eta subdivision
-                            break;
-                        case 2:
-                            lookupTableKey += "REGION2_";
-                            // starting from first range, startIndex 0
-                            lookupTableKey += getEtaBinIndex(1.5f, 1.8f, eta[index], 0);
-                            break;
-                        case 3:
-                            lookupTableKey += "REGION3_";
-                            lookupTableKey += getEtaBinIndex(1.8f, 2.0f, eta[index], 0);
-                            break;
-                        case 4:
-                            lookupTableKey += "REGION4_";
-                            lookupTableKey += getEtaBinIndex(2.0f, 2.4f, eta[index], 0);
-                            break;
-                        case 5:
-                            lookupTableKey += "REGION5_";
-                            if(absEta > 2.4f && absEta < 2.5f)
-                            {
-                                lookupTableKey += "ETA0_";
-                            }
-                            break;
-                        default:
-                            AOutput.append("\npulse shape plots - LAr endcap, " +
-                                           "layer 1, region > 5. Using layer 1, " +
-                                           "region 5, eta range 0 lookup table\n",
-                                           ALogInterface.WARNING);
-                            lookupTableKey += "REGION5_ETA0_";
-                    }
-                    break;
-                case 2: // layer 2
-                    lookupTableKey += "LAYER2_";
-                    switch(AIdHelper.larRegion(id[index]))
-                    {
-                        case 0:
-                            lookupTableKey += "REGION0_";
-                            if(absEta > 1.375f && absEta < 1.425f)
-                            {
-                                lookupTableKey += "ETA0_"; // first eta range
-                            }
-                            else
-                            {
-                                // eta ranges with step 0.1 provided by Andre
-                                // start index counting from 1, 0 range is used above
-                                lookupTableKey += getEtaBinIndex(2.5f, 3.2f, eta[index], 1);                              
-                            }
-                            break;
-                        case 1:
-                            lookupTableKey += "REGION1_";
-                            lookupTableKey += getEtaBinIndex(1.425f, 2.5f, eta[index], 0);
-                            break;
-                    }
-                    break;
-                case 3: // layer 3
-                    lookupTableKey += "LAYER3_";
-                    lookupTableKey += "REGION0_";
-                    lookupTableKey += getEtaBinIndex(1.5f, 2.5f, eta[index], 0);
-                    break;
-            }
-        } // else (endcap)
-
-        lookupTableKey += "AMPLITUDE";
-        pulseShapePlotsDebugInfo(index, lookupTableKey);
-        amplitude = ACalorimeterRPSPLT.getLarTable(lookupTableKey);
-        
-        return amplitude;
-
-    } // getLookupTableForPulseShapesPlots() -------------------------------
-
-
-    
-    /**
-     * This method plots only the ADC counts and no pulse shape plot for a
-     * given cell. This is useful when the pulse shape plot is not correct
-     * but ADC count plot is still needed. The method is called from pick
-     * interaction with D (digits only), see APickInteraction.pressed()
-     * It is supposedly a temporary solution until LAr real pulse shapes
-     * lookup tables are corrected / finalized and propagated to Atlantis.
-     * @param index
-     */
-    public void plotADCCounts(int index)
-    {
-        if(pulseShapesDataAvailable)
-        {
-            String title = getPulseTitleString(index);
-            
-            int[][] adcCountsLocal = new int[][] { adcCounts[index] };
-            
-            logger.debug("Plotting only ADC counts plot ... ");
-            APulseShapePlot.plotADCCounts(adcCountsLocal, title, null);
-            
-        } // if(pulseShapesDataAvailable)
-        else
-        {
-            return;
-        }
-                
-    } // plotADCCounts() ----------------------------------------------------
-
-    
-    
-//    /**
-//     * Call util class which plots cell pulse shapes provided that
-//     * all real pulse shapes data is available
-//     * Functions calculates values of real pulse shape calculated in the method
-//     * getPhysicsPulseShape().
-//     * This method is called from pick interaction.
-//     *
-//     * @param index int
-//     */
-    /*public void plotPulseShapes(int index)
-    {
-        if(pulseShapesDataAvailable)
-        {
-            String title = getPulseTitleString(index);
-            
-            int[][] adcCountsLocal = new int[][] { adcCounts[index] };
-
-            
-            if(super.checkADCCountsAvailability(adcCountsLocal))
-            {
-                // adc counts are available
-                logger.debug(CALORIMETER_NAME + " adc counts (digits) are " +
-                             "available for pulse shapes plots for this cell.");
-            }
-            else
-            {
-                String m = "ADC counts are not available for this cell, " +
-                           "can't plot pulse shapes.";
-                AOutput.append("\n" + m, ALogPane.WARNING);
-                logger.warn(m);
-                return;
-            }
-            
-            
-            float[] amplitude = null; // amplitude lookup table
-            float[] time = null; // time lookup table
-            try
-            {
-                time = ACalorimeterRPSPLT.getLarTable("LAR_TIME");
-                amplitude = getLookupTableForPulseShapesPlots(index);
-            }
-            catch(AAtlantisException ex)
-            {
-                AOutput.append("\n" + ex.getMessage(), ALogPane.WARNING);
-                logger.error(ex.getMessage());
-                return;
-            }
-
-            // 1 .. 32 range (32 values of ADC counts, i.e. 32 samples), need to
-            // get NUMBER_OF_LOOKUP_VALUES (769) within this range (starts from 1!).
-            // Real data will have (probably) only 5 samples per cell
-            double step = (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-            // see comment at the getADC2MevFactorPredefined() method
-            // factor variable is used as a flag whether or not to plot pulse shape,
-            // if is -1 (adc2Mev not available), then want to see only the adc counts
-            // and don't calculate the pulse shapes
-            // getADC2MevFactorPredefined(index) is no longer in use, see comment at it
-            float factor = adc2Mev[index];
-
-            double energyLocal = energy[index] * 1000.0 / factor;
-            try
-            {
-            	if(factor != -1)
-            	{
-	                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-	                {
-	                    d += step;
-	                    realPulse[0][i] = super.getPhysicsPulseShape(d, cellTime[index],
-	                                            cellPedestal[index], energyLocal,
-	                                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-	                }
-            	}
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogPane.WARNING);
-                logger.error(aaex.getMessage());
-                return;
-            }
-
-            if(factor != -1)
-            {
-            	logger.debug("adc2Mev factor available, plotting full plot.");
-            	APulseShapePlot.plotRealPulseShapes(adcCountsLocal, realPulse,
-                                                    step, null, title);
-            }
-            else
-            {
-            	logger.debug("adc2Mev factor not available, plotting just adc counts.");
-            	APulseShapePlot.plotADCCounts(adcCountsLocal, title, null);
-            }
-
-        } // if(pulseShapesDataAvailable)
-        else
-        {
-            return;
-        }
-
-    } */// plotPulseShapes() --------------------------------------------------
-
-    @Override
-    protected int[][] getADCCounts(int index) {
-        if (pulseShapesDataAvailable) {
-            for (int adc : adcCounts[index]) {
-                // Only return something if it is non-zero
-                if (adc != 0) return new int[][] { adcCounts[index] };
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Calculate local time for pulse shape plots
-     */
-    protected double getLocalTime(double xTime, double cellTime, int numSamplings) {
-        int nominalPeakSample = (int)(numSamplings / 2.);
-        return ((xTime - nominalPeakSample + 3) * 25.0) - cellTime;
-    }
-
-    @Override
-    protected double[][] getPulseShape(int index) {
-
-            float[] amplitude = null; // amplitude lookup table
-            float[] time = null; // time lookup table
-            try
-            {
-                time = ACalorimeterRPSPLT.getLarTable("LAR_TIME");
-                amplitude = getLookupTableForPulseShapesPlots(index);
-            }
-            catch(AAtlantisException ex)
-            {
-                AOutput.append("\n" + ex.getMessage(), ALogInterface.WARNING);
-                logger.error(ex.getMessage());
-                return null;
-            }
-
-            // 1 .. 32 range (32 values of ADC counts, i.e. 32 samples), need to
-            // get NUMBER_OF_LOOKUP_VALUES (769) within this range (starts from 1!).
-            // Real data will have (probably) only 5 samples per cell
-            double step = getPulseStep(index);
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            // if adc2Mev != -1 -> use value from event file, otherwise predefined value
-            // see comment at the getADC2MevFactorPredefined() method
-            // factor variable is used as a flag whether or not to plot pulse shape,
-            // if is -1 (adc2Mev not available), then want to see only the adc counts
-            // and don't calculate the pulse shapes
-            // getADC2MevFactorPredefined(index) is no longer in use, see comment at it
-            float factor = adc2Mev[index];
-
-            double energyLocal = energy[index] * 1000.0 / factor;
-            try
-            {
-            	if(factor != -1)
-            	{
-	                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-	                {
-	                    d += step;
-                            double localTime = getLocalTime(d, cellTime[index], this.numSamplings);
-	                    realPulse[0][i] = super.getPhysicsPulseShape(localTime,
-	                                            cellPedestal[index], energyLocal,
-	                                            amplitude, time, NUMBER_OF_LOOKUP_VALUES);
-	                }
-            	}
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-                logger.error(aaex.getMessage());
-                return null;
-            }
-
-            if(factor != -1)
-            {
-            	logger.debug("adc2Mev factor available, plotting full plot.");
-                return realPulse;
-            }
-            else
-            {
-                return null;
-            }
-    }
-
-    @Override
-    protected double getPulseStep(int index) {
-        return (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-    }
-
-//    /**
-//     * Determines adc2Mev factor value for a cell. The number either comes
-//     * with the event file (adc2Mev subtag), but sometimes is not available
-//     * in Athena (in the database) which is indicated by -1 in the event file
-//     * for a particular cell. In this case, use predefined constant in this
-//     * method.
-//     *
-//     * zdenek (2008-09-15):
-//     * These predefined values (which are used if adc2Mev factor is -1) should
-//     * no longer be used. if the factor is not present, do not plot the pulse
-//     * shape, just the ADC counts as these values are non-sense. The method
-//     * and references to it should be removed after some time (if calo people
-//     * don't change their mind to pre-define some other values and use those)
-//
-//     * @param index int
-//     * @return String
-//     */
-    /*
-    private float getADC2MevFactorPredefined(int index)
-    {
-        boolean barrel = false;
-        int layer = sampling[index];
-
-        try
-        {
-            barrel = AIdHelper.larIsBarrel(id[index]);
-        }
-        catch (AAtlantisException e)
-        {
-            AOutput.append("Problem decoding ID " + id[index] +
-                           " in " + CALORIMETER_NAME + ": " + e.getMessage(),
-                           ALogPane.WARNING);
-            return Float.NEGATIVE_INFINITY;
-        }
-
-        float r = Float.NEGATIVE_INFINITY;
-        if(barrel)
-        {
-            switch(layer)
-            {
-                case 0: r = 7.0f;
-                        break;
-                case 1: r = 2.5f;
-                        break;
-                case 2: r = Math.abs(this.eta[index]) < 0.8 ? 10.0f : 18.0f;
-                        break;
-                case 3: r = 9.0f;
-                        break;
-            }
-        }
-        else
-        {
-            r = 16.0f;
-        }
-
-        return r;
-
-    } // getADC2MevFactor() -------------------------------------------------
-     */
-
-
-    /**
-     * Returns calo hit info
-     *
-     * @param index int
-     * @return String
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",et[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",et[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",et[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",et[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String t = "";
-        String cellInfo = "";
-
-        // if decoded ID is required and implemented for LAr ...
-        // String decodedId = AIdHelper.getDecodedTileIndentifier(id[index]);
-        // t = decodedId + " " + super.getHitInfo(index);
-        t = super.getHitInfo(index);
-
-        cellInfo += "\n cell time = ";
-        cellInfo += (cellTime != null) ? Float.toString(cellTime[index]) +
-                                         " ns" : "n/a";
-        cellInfo += "\n cell gain = ";
-        cellInfo += (cellGain != null) ? Integer.toString(cellGain[index]) : "n/a";
-        cellInfo += "\n cell pedestal = ";
-        cellInfo += (cellPedestal != null) ? Float.toString(cellPedestal[index]) +
-                                             " ADC counts" : "n/a";
-
-        cellInfo += "\n ADC 2 MeV = ";
-        if(adc2Mev == null)
-        {
-            cellInfo += "n/a";
-        }
-        else
-        {
-            // subtag adc2Mev was available in the event file
-            if(adc2Mev[index] != -1)
-            {
-                // other than -1: the factor was available in
-                // Athena (database) for this particular cell
-                cellInfo += Float.toString(adc2Mev[index]) + " (from database)";
-            }
-            else
-            {
-                // -1 -> the factor wasn't available in Athena (database),
-                // use hardcoded constant for this particular cell
-                cellInfo += "-1 (n/a in database)";
-                // see comment at getADC2MevFactorPredefined() method
-                // using predefined " +
-                // Float.toString(getADC2MevFactorPredefined(index));
-            }
-        }
-
-        cellInfo += pulseShapesDataAvailable ? "" :
-                    "\n data for real pulse shapes plot n/a";
-
-        return t + cellInfo;
-
-    } // getHitInfo() -------------------------------------------------------
-
-    @Override //ACalorimeterData
-    //Gives the hit time for this cell
-    protected double getTime(int hit)
-    {
-        if (cellTime == null) return 0.0;
-        else return cellTime[hit];
-    }
-
-    private void cutEnergyByLayer(String groupName, String parameterName,
-                                  String text, float[] array, int[] sampling, int currSampling)
-    {
-        AParameter par = parameterStore.get(groupName, parameterName);
-
-        if(par.getStatus() && array != null)
-        {
-            double value = par.getD();
-            String operator = par.getOperator();
-            int num = 0;
-
-            // this special cut shall have isMod="YES" attribute set, so
-            // par.isModulus() is true, thus only Math.abs() values are considered
-            if(operator.equals("<"))
-            {
-                for(int i = 0; i < numDraw; i++)
-                {
-                    if(sampling[listdl[i]] == currSampling)
-                    {
-                        if(Math.abs(array[listdl[i]]) < value)
-                        {
-                            listdl[num++] = listdl[i];
-                        }
-                    }
-                    else
-                    {
-                        // don't check energy for other layers and don't cut
-                        listdl[num++] = listdl[i];
-                    }
-                }
-            }
-            else if(operator.equals(">"))
-            {
-                // '>' really means '>=' for reals since they are real in
-                // from ascii file and don't have full precison
-                for(int i = 0; i < numDraw; i++)
-                {
-                    if(sampling[listdl[i]] == currSampling)
-                    {
-                        if(Math.abs(array[listdl[i]]) >= value)
-                        {
-                            listdl[num++] = listdl[i];
-                        }
-                    }
-                    else
-                    {
-                        // don't check energy for other layers and don't cut
-                        listdl[num++] = listdl[i];
-                    }
-                }
-            }
-            else
-            {
-                throw new Error(operator + " operator not sensible for floats");
-            }
-
-            numDraw = num;
-        }
-
-    } // cutEnergyByLayer() -------------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsCalo", "LArET", "LArET", et);
-        cut("CutsCalo", "LArEnergy", "LArEnergy", energy);
-
-        // energy cut (E) per layers
-        cutEnergyByLayer("CutsCalo", "LArEnergyLayer0", "LArEnergyLayer0",
-                         energy, sampling, 0);
-        cutEnergyByLayer("CutsCalo", "LArEnergyLayer1", "LArEnergyLayer1",
-                         energy, sampling, 1);
-        cutEnergyByLayer("CutsCalo", "LArEnergyLayer2", "LArEnergyLayer2",
-                         energy, sampling, 2);
-        cutEnergyByLayer("CutsCalo", "LArEnergyLayer3", "LArEnergyLayer3",
-                         energy, sampling, 3);
-
-        // cut by LAr region (+- EndCap, All)
-        int cutSub = parameterStore.get("CutsCalo", "LAr").getI();
-        if(cutSub != -1)
-        {
-	    
-            int num = 0;
-            for(int i = 0; i < numDraw; i++)
-            {
-
-		switch(cutSub){
-		case 0: 
-		    if(side[listdl[i]] == -2 || side[listdl[i]] == -3){
-		    listdl[num++] = listdl[i];
-		    }
-		    break;
-		case 1: 
-		    if(side[listdl[i]] == 2 || side[listdl[i]] == 3){
-			listdl[num++] = listdl[i];
-		    }
-		    break;
-	  	case 2: 
-		    if(Math.abs(side[listdl[i]]) != 1){
-			listdl[num++] = listdl[i];
-		    }
-		    break;
-		case 3: 
-		    if(Math.abs(side[listdl[i]]) == 1){
-			listdl[num++] = listdl[i];
-		    }
-		    break;
-		default:
-		    break;
-		    
-			   
-		}
-	    }
-            numDraw = num;
-	    
-	}
-    } // applyCuts() --------------------------------------------------------
-
-
-    /**
-     * Returns the name of the parameter group.
-     *
-     * @return String parameter group
-     */
-    public String getParameterGroup()
-    {
-        return "LAr";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getName()
-    {
-        return "LAr";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getNameScreenName()
-    {
-        return "LAr";
-    }
-
-    /**
-     * Returns the type of calorimeter (ECAL/HCAL) for a hit.
-     *
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public String getCalorimeterType(int index)
-    {
-        return "ECAL";
-    }
-
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        ACoord[] data = ACoord.NO_HISTOGRAMS;
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if ((projection instanceof AProjectionYX) && (mode == AProjectionYX.MODE_STANDARD ||
-                mode == AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER ||
-                mode == AProjectionYX.MODE_LAR_ENDCAP_1 ||
-                mode == AProjectionYX.MODE_LAR_ENDCAP_2 ||
-                mode == AProjectionYX.MODE_LAR_ENDCAP_3 ||
-                mode == AProjectionYX.MODE_LAR_ENDCAP_SUMMED))
-            data = getYXHistograms();
-        else if (projection instanceof AProjectionFR)
-            data = getFRHistograms();
-        else if (projection instanceof AProjectionRZ)
-            data = getRZHistograms();
-        else if (projection instanceof AProjectionFZ)
-            data = getFZHistograms();
-        return projection.nonLinearTransform(data);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ALVL1JetElementData.java b/graphics/AtlantisJava/src/atlantis/data/ALVL1JetElementData.java
deleted file mode 100644
index a4aa50b1eaa6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ALVL1JetElementData.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import java.awt.Color;
-
-import atlantis.canvas.AWindow;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.APolygon;
-
-public class ALVL1JetElementData extends AData
-{
-    private float[] energy;
-    private float[] eta;
-    private float[] deta;
-    private float[] phi;
-    private float[] dphi;
-
-    ALVL1JetElementData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        phi = p.getFloatArray("phi");
-        eta = p.getFloatArray("eta");
-        // here energy is actually Et
-        energy = p.getFloatArray("energy");
-
-        deta = new float[numData];
-        dphi = new float[numData];
-
-        fillGranularity();
-    }
-
-    private void fillGranularity()
-    {
-        for(int i = 0; i < numData; ++i)
-        {
-            float positiveEta = Math.abs(eta[i]);
-            if(positiveEta <= 2.4)
-            {
-                deta[i] = 0.1f;
-                dphi[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 2.7)
-            {
-                deta[i] = 0.15f;
-                dphi[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 2.9)
-            {
-                deta[i] = 0.1f;
-                dphi[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 3.2)
-            {
-                deta[i] = 0.15f;
-                dphi[i] = (float) (Math.PI / 32.);
-            }
-            else
-            {
-                deta[i] = 0.9f;
-                dphi[i] = (float) (Math.PI / 16.);
-            }
-        }
-    }
-
-    public double getEta(int index)
-    {
-        return eta[index];
-    }
-
-    public double getdEta(int index)
-    {
-            return deta[index];
-    }
-
-    public double getPhi(int index)
-    {
-        return phi[index];
-    }
-
-    public double getdPhi(int index)
-    {
-        return dphi[index];
-    }
-
-    public double getET(int index)
-    {
-        return energy[index];
-    }
-
-    public String getNameScreenName()
-    {
-        return "LVL1JetElement";
-    }
-
-    public String getParameterGroup()
-    {
-        return "LVL1JetElement";
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        "\n E="+String.format("%.3f",energy[index])+" GeV\n "+
-        AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n Energy = ");
-        msg.append(String.format("%.3f",energy[index]));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",phi[index]));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        return msg.toString();
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsCalo", "LVL1TriggerET", " ET", energy);
-        cutPhi(phi, dphi);
-        cutEtaDEta(eta, deta);
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction == 0)
-            colorByConstant();
-
-        return 1;
-    }
-
-    protected int getDrawOrFill()
-    {
-        return AGraphics.FILL;
-    }
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi[list];
-            double phiMinus = phi[list] - dphi[list];
-            double cosPlus = Math.cos(phiPlus);
-            double sinPlus = Math.sin(phiPlus);
-            double cosMinus = Math.cos(phiMinus);
-            double sinMinus = Math.sin(phiMinus);
-
-            // Rho range of Calo Detector is about between [148.175, 386]
-            double rhoMax = 380;
-            double rhoMinus = 155;
-
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double rhoPlus = rhoMax;
-            if(Math.abs(energy[list]) < maxEnergy)
-                rhoPlus = rhoMinus + (rhoMax - rhoMinus) * Math.abs(energy[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = rhoMinus * cosPlus;
-            hv[1][i][0] = rhoMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = rhoPlus * cosPlus;
-            hv[1][i][1] = rhoPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = rhoPlus * cosMinus;
-            hv[1][i][2] = rhoPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = rhoMinus * cosMinus;
-            hv[1][i][3] = rhoMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getFRUser()
-    {
-        ACoord coordFR = getYXUser().convertYXToFR().includePhiWrapAround("FR");
-        return coordFR;
-    }
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list]-phiMid);
-            double rSign;
-            if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            // calculate theta based on the eta value
-            double theta = Math.atan(Math.exp(-Math.abs(eta[list]))) * 2.0;
-            double thetaPlus = Math.atan(Math.exp(-(Math.abs(eta[list]) - deta[list]))) * 2.0;
-            double thetaMinus = Math.atan(Math.exp(-(Math.abs(eta[list]) + deta[list]))) * 2.0;
-
-            if ((eta[list] > 0.) && (rSign == -1))
-            {
-                theta = 2 * Math.PI - theta;
-                thetaPlus = 2 * Math.PI - thetaPlus;
-                thetaMinus = 2 * Math.PI - thetaMinus;
-            }
-            else if ((eta[list] < 0.) && (rSign == -1))
-            {
-                theta += Math.PI;
-                thetaPlus += Math.PI;
-                thetaMinus += Math.PI;
-            }
-            else if ((eta[list] < 0.) && (rSign == 1))
-            {
-                theta = Math.PI - theta;
-                thetaPlus = Math.PI - thetaPlus;
-                thetaMinus = Math.PI - thetaMinus;
-            }
-
-            double cosPlus = Math.cos(thetaPlus);
-            double sinPlus = Math.sin(thetaPlus);
-            double cosMinus = Math.cos(thetaMinus);
-            double sinMinus = Math.sin(thetaMinus);
-
-            // decide the region based on the theta value
-            final byte LAR = 0;
-            final byte LAR_ENDCAP = 1;
-            final byte FCAL_EM = 2;
-            byte region = LAR;
-            // hard-coded value is based on the values in AGeometry.xml
-            if(Math.abs(Math.tan(theta)) >= 0.0778 && Math.abs(Math.tan(theta)) < 0.4828)
-                region = LAR_ENDCAP;
-            else if(Math.abs(Math.tan(theta)) < 0.0778)
-                region = FCAL_EM;
-
-            double radiusMinus = 0.;
-            switch(region)
-            {
-                // use fixed rho/z to determine the lower radius value
-                case LAR:
-                    radiusMinus = 155 / Math.abs(Math.sin(theta));
-                    break;
-                case LAR_ENDCAP:
-                    radiusMinus = 380 / Math.abs(Math.cos(theta));
-                    break;
-                case FCAL_EM:
-                    radiusMinus = 470 / Math.abs(Math.cos(theta));
-                    break;
-            }
-            double radiusMax = radiusMinus + 200;
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double radiusPlus = radiusMax;
-            if(Math.abs(energy[list]) < maxEnergy)
-                radiusPlus = radiusMinus + (radiusMax - radiusMinus) * Math.abs(energy[list]) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = radiusMinus * cosPlus;
-            hv[1][i][0] = radiusMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = radiusPlus * cosPlus;
-            hv[1][i][1] = radiusPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = radiusPlus * cosMinus;
-            hv[1][i][2] = radiusPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = radiusMinus * cosMinus;
-            hv[1][i][3] = radiusMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index=new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list=listdl[i];
-            h[i]=eta[list];
-            v[i]=Math.toDegrees(phi[list]);
-            index[i]=list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP)
-        {
-            ACoord centers=getUser(projection);
-
-            int[] drawlist=centers.index;
-            double[] density = new double[drawlist.length];
-            double maxDensity = 0.0;
-            double[][][] hv=new double[2][drawlist.length][4];  // cell
-            int[] index = new int[drawlist.length];
-            ACoord geoCell;
-
-            for(int i=0; i<drawlist.length; ++i)
-            {
-                int list=drawlist[i];
-                // y coordinate of four cell corners
-                hv[1][i][0] = centers.hv[1][0][i] + Math.toDegrees(getdPhi(list));
-                hv[1][i][1] = centers.hv[1][0][i] - Math.toDegrees(getdPhi(list));
-                hv[1][i][2] = centers.hv[1][0][i] - Math.toDegrees(getdPhi(list));
-                hv[1][i][3] = centers.hv[1][0][i] + Math.toDegrees(getdPhi(list));
-                // x coordinate of four cell corners
-                hv[0][i][0] = centers.hv[0][0][i] - getdEta(list);
-                hv[0][i][1] = centers.hv[0][0][i] - getdEta(list);
-                hv[0][i][2] = centers.hv[0][0][i] + getdEta(list);
-                hv[0][i][3] = centers.hv[0][0][i] + getdEta(list);
-
-                index[i] = list;
-
-                // calculate density for all cells, and find min and max density
-                density[i] = Math.abs(energy[list]) / (getdPhi(list) * getdEta(list));
-                if(i == 0)
-                    maxDensity = density[i];
-                else
-                {
-                    if (density[i] > maxDensity)
-                        maxDensity = density[i];
-                }
-            }
-
-            geoCell = window.calculateDisplay(new ACoord(hv, index, this, ACoord.POLYGONS));
-            drawGeometry(geoCell, window, ag);
-            for (int i = 0; i < density.length; i++)
-            {
-                double factor = Math.sqrt(density[i] / maxDensity);
-                APolygon.scale(geoCell.hv[0][i], geoCell.hv[1][i], factor);
-            }
-
-            drawHits(geoCell, window, ag);
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-    private void drawGeometry(ACoord display, AWindow window, AGraphics ag)
-    {
-        Color[] colorMap = AColorMap.getColors();
-        boolean drawCellGeometry = parameterStore.get(getParameterGroup(), "CellGeometry").getStatus();
-        boolean drawCellOutline = parameterStore.get(getParameterGroup(), "CellOutline").getStatus();
-        int cellGeometryColor = parameterStore.get(getParameterGroup(), "CellGeometry").getI();
-        int cellOutlineColor = parameterStore.get(getParameterGroup(), "CellOutline").getI();
-        boolean drawFrame = parameterStore.get(getParameterGroup(), "Frame").getStatus();
-        int frameColor = parameterStore.get(getParameterGroup(), "Frame").getI();
-        int frameWidth = parameterStore.get(getParameterGroup(), "FrameWidth").getI();
-        //only draw frames for Grey/BW color maps if is selected to draw frames
-        if(drawFrame && AColorMap.drawFrames())
-            drawFrame=true;
-        else
-            drawFrame=false;
-        
-        if(!drawCellGeometry && !drawCellOutline)
-            return;
-
-        // Draw geometry
-        for(int i=0; i<display.hv[0].length; ++i)
-        {
-            if(drawCellGeometry)
-            {
-                if(drawFrame)
-                {
-                    ag.updateDrawParameters(new ADrawParameters(true, frameColor, 1, 0, frameWidth, 0));
-                    ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-                }
-                ag.updateDrawParameters(new ADrawParameters(true, cellGeometryColor, 1, 0, 0, 0));
-                ag.fillPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-            if(drawCellOutline)
-            {
-                ag.setColor(colorMap[cellOutlineColor]);
-                ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-    }
-
-    private void drawHits(ACoord display, AWindow window, AGraphics ag)
-    {
-        int[] color = this.getColor(display.index);
-
-        boolean drawCellGeometry = parameterStore.get(getParameterGroup(), "CellGeometry").getStatus();
-        boolean drawFrame = parameterStore.get(getParameterGroup(), "Frame").getStatus();
-        int frameColor = parameterStore.get(getParameterGroup(), "Frame").getI();
-        int frameWidth = parameterStore.get(getParameterGroup(), "FrameWidth").getI();
-
-        // draw frame
-        if (drawFrame && !drawCellGeometry)
-        {
-            for (int i = 0; i < display.hv[0].length; i++)
-            {
-                ag.updateDrawParameters(new ADrawParameters(true, frameColor, 1, 0, frameWidth, 0));
-                ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-
-        // draw hits
-        for(int i=0; i<display.hv[0].length; ++i)
-        {
-            int lineWidth = parameterStore.get(getParameterGroup(), "LineWidth").getI();
-            ag.updateDrawParameters(new ADrawParameters(true, color[i], 1, lineWidth, 0, 0));
-            ag.fillPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ALVL1ResultData.java b/graphics/AtlantisJava/src/atlantis/data/ALVL1ResultData.java
deleted file mode 100755
index db7dc97e2b1d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ALVL1ResultData.java
+++ /dev/null
@@ -1,292 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-
-public class ALVL1ResultData extends AData
-{
-    private String[] ctpItemList;
-    private String[] itemListL2;
-    private String[] itemListEF;
-    private int[] ctpWord0;
-    private int[] ctpWord1;
-    private int[] ctpWord2;
-    private float[] energyEtMiss;
-    //private float[] energyEx;
-    //private float[] energyEy;
-    private float[] energySumEt;
-    private int[] passedL1;
-    private int[] passedL2;
-    private int[] passedEF;
-    private int[] passedTrigger;
-    private String[] prescaleListEF;
-    private String[] prescaleListL1;
-    private String[] prescaleListL2;
-    
-    ALVL1ResultData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        ctpItemList = p.getStringArray("ctpItemList");
-        itemListL2 = p.getStringArray("itemListL2");
-        itemListEF = p.getStringArray("itemListEF");
-        ctpWord0 = p.getUnknownIntArray("ctpWord0");
-        ctpWord1 = p.getUnknownIntArray("ctpWord1");
-        ctpWord2 = p.getUnknownIntArray("ctpWord2");
-        energyEtMiss = p.getUnknownFloatArray("energyEtMiss");
-        //energyEx = p.getUnknownFloatArray("energyEx");
-        //energyEy = p.getUnknownFloatArray("energyEy");
-        energySumEt = p.getUnknownFloatArray("energySumEt");
-        passedL1 = p.getUnknownIntArray("passedL1");
-        passedL2 = p.getUnknownIntArray("passedL2");
-        passedEF = p.getUnknownIntArray("passedEF");
-        passedTrigger = p.getUnknownIntArray("passedTrigger");
-        //check for backward compatibility
-        prescaleListEF = (p.get("prescaleListEF") != null) ? p.getStringArray("prescaleListEF"): null;
-        prescaleListL1 = (p.get("prescaleListL1") != null) ? p.getStringArray("prescaleListL1"): null;
-        prescaleListL2 = (p.get("prescaleListL2") != null) ? p.getStringArray("prescaleListL2"): null;
-    }
-
-    protected void applyCuts()
-    {}
-    
-    public String getHitInfo(int index)
-    {
-        return "LVL1Result";
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction == 0)
-            colorByConstant();
-
-        return 3;
-    }
-
-    public String getParameterGroup()
-    {
-        return "LVL1Result";
-    }
-
-    public String getNameScreenName()
-    {
-        return "LVL1Result";
-    }
-
-    public String getCtpItemList(int index)
-    {
-        return ctpItemList[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     * By using cleanup removes L1 from the item
-     */
-    public String[] getCtpItemListSplit(int index, boolean cleanUp)
-    {
-        if(ctpItemList!=null)
-        {
-            if(cleanUp)
-                return splitItems(ctpItemList[index], "L1");
-            else
-                return splitItems(ctpItemList[index]);
-        }
-        else
-            return null;
-    }
-    
-    public String getitemListL2(int index)
-    {
-        return itemListL2[index];
-    }
-
-    /**
-     * Returns the individual parts of the list seperated by -
-     * By using cleanup removes L2 from the item
-     */
-    public String[] getitemListL2Split(int index, boolean cleanUp)
-    {
-        if(itemListL2!=null)
-        {
-            if(cleanUp)
-                return splitItems(itemListL2[index], "L2");
-            else
-                return splitItems(itemListL2[index]);
-        }
-        else
-            return null;
-    }
-    
-    public String getitemListEF(int index)
-    {
-        return itemListEF[index];
-    }
-
-    /**
-     * Returns the individual parts of the list seperated by -
-     * By using cleanup removes EF from the item
-     */
-    public String[] getitemListEFSplit(int index, boolean cleanUp)
-    {
-        if(itemListEF!=null)
-        {
-            if(cleanUp)
-                return splitItems(itemListEF[index], "EF");
-            else
-                return splitItems(itemListEF[index]);
-        }
-        else
-            return null;
-    }
-    
-    public int getCtpWord0(int index)
-    {
-        return ctpWord0[index];        
-    }
-    
-    public String getBinaryCtpWord0(int index)
-    {
-        return Integer.toBinaryString(ctpWord0[index]);        
-    }
-    
-    public int getCtpWord1(int index)
-    {
-        return ctpWord1[index];
-    }
-    
-    public int getCtpWord2(int index)
-    {
-        return ctpWord2[index];
-    }
-   
-    /**
-     * This method is needed for backward compatibility
-     * New xml files store this in ATriggerInfoData
-     */
-    public float getEnergyEtMiss(int index)
-    {
-        return energyEtMiss[index];
-    }
-    
-    /*public float getEnergyEx(int index)
-    {
-        return energyEx[index];
-    }
-    public float getEnergyEy(int index)
-    {
-        return energyEy[index];
-    }*/
-   
-    /**
-     * This method is needed for backward compatibility
-     * New xml files store this in ATriggerInfoData
-     */
-    public float getEnergySumEt(int index)
-    {
-        return energySumEt[index];
-    }
-    
-    public int getPassedL1(int index)
-    {
-        return passedL1[index];
-    }
-    
-    public int getPassedL2(int index)
-    {
-        return passedL2[index];
-    }
-    
-    public int getPassedEF(int index)
-    {
-        return passedEF[index];
-    }
-    
-    public int getPassedTrigger(int index)
-    {
-        return passedTrigger[index];
-    }
-    
-    public String getPrescaleListEF(int index)
-    {
-        return prescaleListEF[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getPrescaleListEFSplit(int index)
-    {
-        if(prescaleListEF!=null)
-            return splitItems(prescaleListEF[index]);
-        else
-            return null;
-    }
-    
-    public String getPrescaleListL1(int index)
-    {
-        return prescaleListL1[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getPrescaleListL1Split(int index)
-    {
-        if(prescaleListL1!=null)
-            return splitItems(prescaleListL1[index]);
-        else
-            return null;
-    }
-    
-    public String getPrescaleListL2(int index)
-    {
-        return prescaleListL2[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getPrescaleListL2Split(int index)
-    {
-        if(prescaleListL2!=null)
-            return splitItems(prescaleListL2[index]);
-        else
-            return null;
-    }
-    
-    /**
-     * Function that seperates an item list and carries out cleanup
-     */
-    private String[] splitItems(String origItems, String level)
-    {
-        //string array to hold individual items
-        String[] newItems=splitItems(origItems);
-        //remove letters from start of item and duplicated names
-        char[] levelChar = level.toCharArray();
-        for(int i=0; i<newItems.length; i++)
-        {
-            char[] newItemsChar = newItems[i].toCharArray();
-            if(newItemsChar[0]==levelChar[0] && newItemsChar[1]==levelChar[1])
-            {
-                if(newItemsChar[2]=='_')
-                    newItems[i]=newItems[i].substring(3);
-                else
-                    newItems[i]=newItems[i].substring(2);
-                //get rid of duplicated parts of name
-                char[] newItemsChar2 = newItems[i].toCharArray();
-                for(int j=0; j<newItemsChar2.length-1; j++)
-                {
-                    if(newItemsChar2[j]==levelChar[0] && newItemsChar2[j+1]==levelChar[1])
-                    {
-                        newItems[i]=newItems[i].substring(0, j);
-                        break;
-                    }
-                }
-            }
-        }
-        return newItems;
-    }   
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ALVL1TriggerTowerData.java b/graphics/AtlantisJava/src/atlantis/data/ALVL1TriggerTowerData.java
deleted file mode 100644
index 9cfef1013428..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ALVL1TriggerTowerData.java
+++ /dev/null
@@ -1,800 +0,0 @@
-package atlantis.data;
-
-import java.util.Arrays;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.list.AListManager;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.APolygon;
-
-public class ALVL1TriggerTowerData extends AData
-{
-    public static final boolean ELECTROMAGNETIC = true;
-    public static final boolean HADRONIC = false;
-
-    // here energy is actually Et
-    private float[] emEnergy;
-    private float[] hadEnergy;
-    private float[] sumEnergy;
-    private float[] eta;
-    private float[] deta_em;
-    private float[] deta_had;
-    private float[] phi;
-    private float[] dphi_em;
-    private float[] dphi_had;
-    private int[] numADC;
-    private int[][] hadADC;
-    private int[][] emADC;
-    private int[] emBCID;
-    private int[] hadBCID;
-    private int[] isEMSaturated;
-    private int[] isHadSaturated;
-
-    ALVL1TriggerTowerData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        phi = p.getFloatArray("phi");
-        eta = p.getFloatArray("eta");
-        emEnergy = p.getFloatArray("emEnergy");
-        hadEnergy = p.getFloatArray("hadEnergy");
-        sumEnergy = p.getFloatArray("sumEnergy");
-
-        deta_em = new float[numData];
-        deta_had = new float[numData];
-        dphi_em = new float[numData];
-        dphi_had = new float[numData];
-
-        fillGranularity();
-
-        numADC = p.getIntArray("numADC");
-        emADC = fillADC(p.getIntArray("emADC"));
-        hadADC = fillADC(p.getIntArray("hadADC"));
-        emBCID = p.getIntArray("emBCID");
-        hadBCID = p.getIntArray("hadBCID");
-        isEMSaturated = p.getIntArray("isEMSaturated");
-        isHadSaturated = p.getIntArray("isHadSaturated");
-    }
-
-    private void fillGranularity()
-    {
-        for(int i = 0; i < numData; ++i)
-        {
-            float positiveEta = Math.abs(eta[i]);
-            if(positiveEta <= 2.4)
-            {
-                deta_em[i] = 0.05f;
-                dphi_em[i] = (float) (Math.PI / 64.);
-                deta_had[i] = 0.05f;
-                dphi_had[i] = (float) (Math.PI / 64.);
-            }
-            else if(positiveEta <= 2.5)
-            {
-                deta_em[i] = 0.05f;
-                dphi_em[i] = (float) (Math.PI / 64.);
-                deta_had[i] = 0.1f;
-                dphi_had[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 3.0)
-            {
-                deta_em[i] = 0.1f;
-                dphi_em[i] = (float) (Math.PI / 32.);
-                deta_had[i] = 0.1f;
-                dphi_had[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 3.1)
-            {
-                deta_em[i] = 0.1f;
-                dphi_em[i] = (float) (Math.PI / 32.);
-                deta_had[i] = 0.05f;
-                dphi_had[i] = (float) (Math.PI / 32.);
-            }
-            else if(positiveEta <= 3.2)
-            {
-                deta_em[i] = 0.05f;
-                dphi_em[i] = (float) (Math.PI / 32.);
-                deta_had[i] = 0.2f;
-                dphi_had[i] = (float) (Math.PI / 16.);
-            }
-            else if(positiveEta <= 4.3)
-            {
-                deta_em[i] = 0.2f;
-                dphi_em[i] = (float) (Math.PI / 16.);
-                deta_had[i] = 0.2f;
-                dphi_had[i] = (float) (Math.PI / 16.);
-            }
-            else if(positiveEta <= 4.4)
-            {
-                deta_em[i] = 0.2f;
-                dphi_em[i] = (float) (Math.PI / 16.);
-                deta_had[i] = 0.35f;
-                dphi_had[i] = (float) (Math.PI / 16.);
-            }
-            else
-            {
-                deta_em[i] = 0.3f;
-                dphi_em[i] = (float) (Math.PI / 16.);
-                deta_had[i] = 0.35f;
-                dphi_had[i] = (float) (Math.PI / 16.);
-            }
-        }
-    }
-    
-    public int[][] fillADC(int[] tempADC)
-    {
-        int[][] ADC=null;
-        if(tempADC!=null)
-        {
-            ADC= new int[numADC.length][0];
-            int num=0;
-            for(int i=0; i<numADC.length; i++)
-            {
-                // multiple numbers are associated with each cell
-                ADC[i]=new int[numADC[i]];
-                for(int j=0; j<numADC[i]; j++)
-                {
-                    ADC[i][j]=tempADC[num]; // fill in array for each cell
-                    num++;
-                }
-            }
-        }  // if(ADC != null)    
-        return ADC;
-    }
-
-    public void plotPulseShapes(int index)
-    {
-        if(emADC!=null && hadADC!=null)
-        {
-            //int[][] data={hadADC[index],emADC[index]};
-            String[] labels={"EM trigger ADC counts","HAD trigger ADC counts","Sum trigger ADC counts"};
-            int[] sumADC= new int[emADC[index].length];
-            String[] axis= new String[3];
-            String[] colors = new String[3];
-            //EM plot
-            if(isEMSaturated[index]==0)
-                colors[0]="blue";
-            else
-                colors[0]="red";
-            axis[0]="index (BCID="+emBCID[index]+")";
-            //HAD plot
-            if(isHadSaturated[index]==0)
-                colors[1]="blue";
-            else
-                colors[0]="red";
-            axis[1]="index (BCID="+hadBCID[index]+")";
-            //Sum plot
-            colors[2]="blue";
-            axis[2]="index";
-            for(int i=0; i<emADC[index].length; i++)
-            {
-                sumADC[i]=emADC[index][i]+hadADC[index][i];
-            }
-            int[][] data={emADC[index],hadADC[index],sumADC};
-            String title="LVL1TriggerTower " + id[index] + " ADC counts";
-            APulseShapePlot.plotADCCounts(data, title, axis, labels, colors);
-        }
-        else
-        {
-            if(emADC!=null)
-            {
-                int[][] data={emADC[index]};
-                String[] axis={"index"};
-                APulseShapePlot.plotADCCounts(data, "EM trigger ADC counts", axis);
-            }
-            if(hadADC!=null)
-            {
-                int[][] data={hadADC[index]};
-                String[] axis={"index"};
-                APulseShapePlot.plotADCCounts(data, "HAD trigger ADC counts", axis);
-            }
-        }
-    }
-    
-    public double getEta(int index)
-    {
-        return eta[index];
-    }
-
-    public double getdEta(int index, boolean emOrHad)
-    {
-        if(emOrHad == ELECTROMAGNETIC)
-            return deta_em[index];
-        else
-            return deta_had[index];
-    }
-
-    public double getPhi(int index)
-    {
-        return phi[index];
-    }
-
-    public double getdPhi(int index, boolean emOrHad)
-    {
-        if(emOrHad == ELECTROMAGNETIC)
-            return dphi_em[index];
-        else
-            return dphi_had[index];
-    }
-
-    public double getET(int index, boolean emOrHad)
-    {
-        if(emOrHad == ELECTROMAGNETIC)
-            return emEnergy[index];
-        else
-            return hadEnergy[index];
-    }
-
-    public double getSumET(int index)
-    {
-        return sumEnergy[index];
-    }
-
-    public String getNameScreenName()
-    {
-        return "LVL1TriggerTower";
-    }
-
-    public String getParameterGroup()
-    {
-        return "LVL1TriggerTower";
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        "\n E="+String.format("%.3f",sumEnergy[index])+" GeV\n "+
-        AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n EM Energy = ");
-        msg.append(String.format("%.3f",emEnergy[index]));
-        msg.append(" GeV\n Had Energy = ");
-        msg.append(String.format("%.3f",hadEnergy[index]));
-        msg.append(" GeV\n Sum Energy = ");
-        msg.append(String.format("%.3f",sumEnergy[index]));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        return msg.toString();
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsCalo", "LVL1TriggerET", " ET", sumEnergy);
-    }
-
-    public void applyEMCuts()
-    {
-        cutPhi(phi, dphi_em);
-        cutEtaDEta(eta, deta_em);
-    }
-
-    public void applyHadCuts()
-    {
-        cutPhi(phi, dphi_had);
-        cutEtaDEta(eta, deta_had);
-    }
-
-    public byte[] getColor(boolean emOrHad)
-    {
-        internalColor(emOrHad);
-        coloring();
-        byte[] temp = new byte[id.length];
-        for(int i = 0; i < temp.length; i++)
-            temp[i] = color[getIndexFromId(id[i])];
-        return temp;
-    }
-
-    /*
-     * Returns the colours of the trigger tower cells
-     * If this method is used then internalColor(boolean emOrHad)
-     * must be called first elsewhere
-     */
-    public int[] getColor(int[] dl)
-    {
-        coloring();
-        int[] temp = new int[dl.length];
-
-        for(int i = 0; i < temp.length; i++)
-            temp[i] = color[dl[i]];
-        return temp;
-    }
-
-    /*
-     * Colour the cells if in lists or picked
-     * If this method is used then internalColor(boolean emOrHad)
-     * must be called first elsewhere
-     */
-    public void coloring()
-    {
-        int[][] temp = AListManager.getInstance().getColorMapping(this);
-        int[] index = temp[0];
-        int[] c = temp[1];
-        // now add in colours specified in lists
-
-        for(int i = 0; i < index.length; ++i)
-            if(c[i] >= 0)
-                color[index[i]] = (byte) c[i];
-        int others = AListManager.getInstance().getColorOfOthers();
-        // need to check if this data could have been picked
-        // so that colouring of hits by STr works even if STr
-        // is not in list because it wasn't on....
-        if(others >= 0 && parameterStore.get("Data", getName()).getStatus())
-        {
-            boolean[] inList = new boolean[numData];
-            for(int i = 0; i < index.length; ++i)
-                inList[index[i]] = true;
-
-            for(int i = 0; i < numData; ++i)
-                if(!inList[i])
-                    color[i] = (byte) others;
-        }
-    }
-
-    protected int internalColor()
-    {
-        colorByConstant();
-        return 1;
-    }
-
-    protected int internalColor(boolean emOrHad)
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if(colorFunction == 0)
-            colorByConstant();
-        else if(colorFunction ==1)
-        {
-            if(emOrHad == ELECTROMAGNETIC)
-                Arrays.fill(color, (byte) (parameterStore.get("Det", "ECALFill").getI() + 12));
-            else
-                Arrays.fill(color, (byte) (parameterStore.get("Det", "HCALFill").getI() + 12));
-        }
-        return 1;
-    }
-
-    protected int getDrawOrFill()
-    {
-        return AGraphics.FILL;
-    }
-
-    private void drawVP(AWindow window, AGraphics ag, boolean emOrHad)
-    {
-        ACoord centers = getVPUser(emOrHad);
-        
-        if(centers == null)
-            return;
-
-        int[] drawlist = centers.index;
-        double[] density = new double[drawlist.length];
-        double[] sumDensity = new double[drawlist.length];
-        double maxDensity = 0.0;
-        double[][][] hv = new double[2][drawlist.length][4];  // cell
-        int[] index = new int[drawlist.length];
-        ACoord geoCell;
-
-        for(int i=0; i<drawlist.length; ++i)
-        {
-            int list = drawlist[i];
-            // y coordinate of four cell corners
-            hv[1][i][0] = centers.hv[1][0][i] + Math.toDegrees(getdPhi(list, emOrHad));
-            hv[1][i][1] = centers.hv[1][0][i] - Math.toDegrees(getdPhi(list, emOrHad));
-            hv[1][i][2] = centers.hv[1][0][i] - Math.toDegrees(getdPhi(list, emOrHad));
-            hv[1][i][3] = centers.hv[1][0][i] + Math.toDegrees(getdPhi(list, emOrHad));
-            // x coordinate of four cell corners
-            hv[0][i][0] = centers.hv[0][0][i] - getdEta(list, emOrHad);
-            hv[0][i][1] = centers.hv[0][0][i] - getdEta(list, emOrHad);
-            hv[0][i][2] = centers.hv[0][0][i] + getdEta(list, emOrHad);
-            hv[0][i][3] = centers.hv[0][0][i] + getdEta(list, emOrHad);
-
-            index[i] = list;
-
-            // calculate density for all cells, and find min and max density
-            density[i] = Math.abs(getET(list, emOrHad)) / (getdPhi(list, emOrHad) * getdEta(list, emOrHad));
-            sumDensity[i] = Math.abs(getSumET(list)) / (getdPhi(list, emOrHad) * getdEta(list, emOrHad));
-            if(i == 0)
-                maxDensity = sumDensity[i];
-            else
-            {
-                if (sumDensity[i] > maxDensity)
-                    maxDensity = sumDensity[i];
-            }
-        }
-
-        geoCell = window.calculateDisplay(new ACoord(hv, index, this, ACoord.POLYGONS));
-        drawGeometry(geoCell, window, ag, density);
-        for (int i = 0; i < density.length; i++)
-        {
-            double factor = Math.sqrt(density[i] / maxDensity);
-            APolygon.scale(geoCell.hv[0][i], geoCell.hv[1][i], factor);
-        }
-
-        drawHits(geoCell, window, ag, density);
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        int energyType = parameterStore.get(PARAMETER_GROUP, "EnergyType").getI();
-        if(projection instanceof AProjectionYX)
-        {
-            if(energyType == 0 || energyType == 2)
-            {
-                internalColor(ELECTROMAGNETIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getYXUser(ELECTROMAGNETIC))));
-            }
-            if(energyType == 1 || energyType == 2)
-            {
-                internalColor(HADRONIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getYXUser(HADRONIC))));
-            }
-        }
-        else if(projection instanceof AProjectionFR)
-        {
-            if(energyType == 0 || energyType == 2)
-            {
-                internalColor(ELECTROMAGNETIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getFRUser(ELECTROMAGNETIC))));
-            }
-            if(energyType == 1 || energyType == 2)
-            {
-                internalColor(HADRONIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getFRUser(HADRONIC))));
-            }
-        }
-        else if(projection instanceof AProjectionRZ)
-        {
-            if(energyType == 0 || energyType == 2)
-            {
-                internalColor(ELECTROMAGNETIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getRZUser(ELECTROMAGNETIC))));
-            }
-            if(energyType == 1 || energyType == 2)
-            {
-                internalColor(HADRONIC);
-                ag.draw(window.calculateDisplay(projection.nonLinearTransform(getRZUser(HADRONIC))));
-            }
-        }
-        else if(projection instanceof AProjectionVP)
-        {
-            if(energyType == 0 || energyType == 2)
-            {
-                internalColor(ELECTROMAGNETIC);
-                drawVP(window, ag, ELECTROMAGNETIC);
-            }
-            if(energyType == 1 || energyType == 2)
-            {
-                internalColor(HADRONIC);
-                drawVP(window, ag, HADRONIC);
-            }
-        }
-        else
-        {
-            super.draw(window, ag, projection);
-        }
-    }
-
-    private ACoord getYXUser(boolean emOrHad)
-    {
-        makeDrawList();
-        if(emOrHad == ELECTROMAGNETIC)
-            applyEMCuts();
-        else
-            applyHadCuts();
-
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double et = getET(list, emOrHad);
-            if(et == 0.0)
-                continue;
-            double dphi = getdPhi(list, emOrHad);
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-            double cosPlus = Math.cos(phiPlus);
-            double sinPlus = Math.sin(phiPlus);
-            double cosMinus = Math.cos(phiMinus);
-            double sinMinus = Math.sin(phiMinus);
-
-            double rhoMax;
-            double rhoMinus;
-
-            if(emOrHad == ELECTROMAGNETIC)
-            {
-                // Rho range of LAr Detector (EM) is about between [148.175, 198.47]
-                rhoMax = 195;
-                rhoMinus = 155;
-            }
-            else
-            {
-                // Rho range of TILE Detector (Had) is about between [229, 386]
-                rhoMax = 380;
-                rhoMinus = 235;
-            }
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double rhoPlus = rhoMax;
-            if(Math.abs(et) < maxEnergy)
-                rhoPlus = rhoMinus + (rhoMax - rhoMinus) * Math.abs(et) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = rhoMinus * cosPlus;
-            hv[1][i][0] = rhoMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = rhoPlus * cosPlus;
-            hv[1][i][1] = rhoPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = rhoPlus * cosMinus;
-            hv[1][i][2] = rhoPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = rhoMinus * cosMinus;
-            hv[1][i][3] = rhoMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getFRUser(boolean emOrHad)
-    {
-        ACoord coordFR = getYXUser(emOrHad).convertYXToFR().includePhiWrapAround("FR");
-        return coordFR;
-    }
-
-    protected ACoord getRZUser(boolean emOrHad)
-    {
-        makeDrawList();
-        if(emOrHad == ELECTROMAGNETIC)
-            applyEMCuts();
-        else
-            applyHadCuts();
-
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list = listdl[i];
-            double et = getET(list, emOrHad);
-            if(et == 0.0)
-                continue;
-
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list]-phiMid);
-            double rSign;
-            if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            // calculate theta based on the eta value
-            double theta = Math.atan(Math.exp(-Math.abs(eta[list]))) * 2.0;
-            double deta = getdEta(list, emOrHad);
-            double thetaPlus = Math.atan(Math.exp(-(Math.abs(eta[list]) - deta))) * 2.0;
-            double thetaMinus = Math.atan(Math.exp(-(Math.abs(eta[list]) + deta))) * 2.0;
-
-            if ((eta[list] > 0.) && (rSign == -1))
-            {
-                theta = 2 * Math.PI - theta;
-                thetaPlus = 2 * Math.PI - thetaPlus;
-                thetaMinus = 2 * Math.PI - thetaMinus;
-            }
-            else if ((eta[list] < 0.) && (rSign == -1))
-            {
-                theta += Math.PI;
-                thetaPlus += Math.PI;
-                thetaMinus += Math.PI;
-            }
-            else if ((eta[list] < 0.) && (rSign == 1))
-            {
-                theta = Math.PI - theta;
-                thetaPlus = Math.PI - thetaPlus;
-                thetaMinus = Math.PI - thetaMinus;
-            }
-
-            double cosPlus = Math.cos(thetaPlus);
-            double sinPlus = Math.sin(thetaPlus);
-            double cosMinus = Math.cos(thetaMinus);
-            double sinMinus = Math.sin(thetaMinus);
-
-            // decide the region based on the theta value
-            final byte LAR = 0;
-            final byte LAR_ENDCAP = 1;
-            final byte FCAL_EM = 2;
-            byte region = LAR;
-            // hard-coded value is based on the values in AGeometry.xml
-            if(Math.abs(Math.tan(theta)) >= 0.0778 && Math.abs(Math.tan(theta)) < 0.4828)
-                region = LAR_ENDCAP;
-            else if(Math.abs(Math.tan(theta)) < 0.0778)
-                region = FCAL_EM;
-
-            double radiusMinus = 0.;
-            double radiusMax = 0.;
-            switch(region)
-            {
-                // use fixed rho/z to determine the lower radius value
-                case LAR:
-                    if(emOrHad == ELECTROMAGNETIC)
-                    {
-                        radiusMax = 195 / Math.abs(Math.sin(theta));
-                        radiusMinus = 155 / Math.abs(Math.sin(theta));
-                    }
-                    else
-                    {
-                        radiusMax = 380 / Math.abs(Math.sin(theta));
-                        radiusMinus = 235 / Math.abs(Math.sin(theta));
-                    }
-                    break;
-                case LAR_ENDCAP:
-                    if(emOrHad == ELECTROMAGNETIC)
-                    {
-                        radiusMax = 420 / Math.abs(Math.cos(theta));
-                        radiusMinus = 380 / Math.abs(Math.cos(theta));
-                    }
-                    else
-                    {
-                        radiusMax = 585 / Math.abs(Math.cos(theta));
-                        radiusMinus = 440 / Math.abs(Math.cos(theta));
-                    }
-                    break;
-                case FCAL_EM:
-                    if(emOrHad == ELECTROMAGNETIC)
-                    {
-                        radiusMax = 510 / Math.abs(Math.cos(theta));
-                        radiusMinus = 470 / Math.abs(Math.cos(theta));
-                    }
-                    else
-                    {
-                        radiusMax = 600 / Math.abs(Math.cos(theta));
-                        radiusMinus = 520 / Math.abs(Math.cos(theta));
-                    }
-                    break;
-            }
-
-            double maxEnergy = parameterStore.get("Projection", "EnergyMax").getD();
-            double radiusPlus = radiusMax;
-            if(Math.abs(et) < maxEnergy)
-                radiusPlus = radiusMinus + (radiusMax - radiusMinus) * Math.abs(et) / maxEnergy;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = radiusMinus * cosPlus;
-            hv[1][i][0] = radiusMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = radiusPlus * cosPlus;
-            hv[1][i][1] = radiusPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = radiusPlus * cosMinus;
-            hv[1][i][2] = radiusPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = radiusMinus * cosMinus;
-            hv[1][i][3] = radiusMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getVPUser(boolean emOrHad)
-    {
-        makeDrawList();
-        if(emOrHad == ELECTROMAGNETIC)
-            applyEMCuts();
-        else
-            applyHadCuts();
-
-        if(numDraw == 0)
-            return null;
-        
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index=new int[numDraw];
-
-        for(int i=0; i<numDraw; i++)
-        {
-            int list=listdl[i];
-            h[i]=eta[list];
-            v[i]=Math.toDegrees(phi[list]);
-            index[i]=list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    private void drawGeometry(ACoord display, AWindow window, AGraphics ag, double[] density)
-    {
-        boolean drawCellGeometry = parameterStore.get(getParameterGroup(), "CellGeometry").getStatus();
-        boolean drawCellOutline = parameterStore.get(getParameterGroup(), "CellOutline").getStatus();
-        int cellGeometryColor = parameterStore.get(getParameterGroup(), "CellGeometry").getI();
-        int cellOutlineColor = parameterStore.get(getParameterGroup(), "CellOutline").getI();
-        boolean drawFrame = parameterStore.get(getParameterGroup(), "Frame").getStatus();
-        int frameColor = parameterStore.get(getParameterGroup(), "Frame").getI();
-        int frameWidth = parameterStore.get(getParameterGroup(), "FrameWidth").getI();
-        //only draw frames for Grey/BW color maps if is selected to draw frames
-        if(drawFrame && AColorMap.drawFrames())
-            drawFrame = true;
-        else
-            drawFrame = false;
-        
-        if(!drawCellGeometry && !drawCellOutline)
-            return;
-
-        // Draw geometry
-        for(int i=0; i<display.hv[0].length; ++i)
-        {
-            if(density[i] == 0.0)
-                continue;
-
-            if(drawCellGeometry)
-            {
-                if(drawFrame)
-                {
-                    ag.updateDrawParameters(new ADrawParameters(true, frameColor, 1, 0, frameWidth, 0));
-                    ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-                }
-                ag.updateDrawParameters(new ADrawParameters(true, cellGeometryColor, 1, 0, 0, 0));
-                ag.fillPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-            if(drawCellOutline)
-            {
-                ag.updateDrawParameters(new ADrawParameters(true, cellOutlineColor, 0, 1, 0, 0, false, 1, 0));
-                ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-        }
-    }
-
-    private void drawHits(ACoord display, AWindow window, AGraphics ag, double[] density)
-    {
-        int[] color = this.getColor(display.index);
-
-        boolean drawCellGeometry = parameterStore.get(getParameterGroup(), "CellGeometry").getStatus();
-        boolean drawFrame = parameterStore.get(getParameterGroup(), "Frame").getStatus();
-        int frameColor = parameterStore.get(getParameterGroup(), "Frame").getI();
-        int frameWidth = parameterStore.get(getParameterGroup(), "FrameWidth").getI();
-        int lineWidth = parameterStore.get(getParameterGroup(), "LineWidth").getI();
-
-        for(int i=0; i<display.hv[0].length; ++i)
-        {
-            if(density[i] == 0.0)
-                continue;
-
-            // draw frame
-            if (drawFrame && !drawCellGeometry)
-            {
-                ag.updateDrawParameters(new ADrawParameters(true, frameColor, 1, 0, frameWidth, 0));
-                ag.drawPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            }
-
-            // draw hits
-            ag.updateDrawParameters(new ADrawParameters(true, color[i], 1, lineWidth, 0, 0));
-            ag.setCurrentDataAndIndex(this, display.index[i]);
-            ag.fillPolygon(display.hv[0][i], display.hv[1][i], display.hv[0][i].length);
-            ag.clearCurrentDataAndIndex();
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ALegoData.java b/graphics/AtlantisJava/src/atlantis/data/ALegoData.java
deleted file mode 100755
index 9c2593e53eda..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ALegoData.java
+++ /dev/null
@@ -1,1042 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.event.*;
-import java.awt.Color;
-import java.awt.geom.Point2D;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Stack;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.ALegoDraw;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-public class ALegoData
-{
-    private static ALogger logger = ALogger.getLogger(ALegoData.class);
-
-    private static APar parameterStore = APar.instance();
-
-    /**
-     * This function loops over the cell data to find the maxEt.
-     * It also rescales the height of the cells if different scales are selected
-     * @param lego the tower heights
-     * @return maxEt the heighest tower height
-     */
-    public static double findMaxEt(double[][][] lego)
-    {
-        double maxEt = 0.0;
-        double[][] legosum = new double[lego.length][lego[0].length];
-        //find colors to loop over
-        int largestColourIndex=0;
-        int lowestColourIndex=AProjectionLegoPlot.nLayers;
-        Iterator colorIterator = AProjectionLegoPlot.colorset.iterator();
-        while(colorIterator.hasNext())
-        {
-            int currentColor = ((Integer) colorIterator.next()).intValue();
-            if(currentColor>largestColourIndex)
-                largestColourIndex=currentColor;
-            if(currentColor<lowestColourIndex)
-                lowestColourIndex=currentColor;
-        }
-        for (int x = AProjectionLegoPlot.nPhiCells - 1; x >= 0; --x)
-        {
-            for (int y = 0; y < AProjectionLegoPlot.nEtaCells; ++y)
-            {
-                for(int z=largestColourIndex; z>=lowestColourIndex; z--)
-                {
-                    legosum[x][y] += lego[x][y][z];
-                }
-                if(legosum[x][y] > maxEt)
-                    maxEt = legosum[x][y];
-            }
-        }
-        if(maxEt>0)
-        {
-            if (AProjectionLegoPlot.defaultScale ==1 )
-            {
-                for (int x = AProjectionLegoPlot.nPhiCells - 1; x >= 0; --x)
-                {
-                    for (int y = 0; y < AProjectionLegoPlot.nEtaCells; ++y)
-                    {
-                        for(int z=largestColourIndex; z>=lowestColourIndex; z--)
-                        {
-                            if(Math.log10(legosum[x][y])>=AProjectionLegoPlot.minimumofLogScale)
-                            {
-                                //if multiple colors then each take linear amount of full log
-                                double fraction=(lego[x][y][z]/legosum[x][y]);
-                                lego[x][y][z]=fraction*(Math.log10(legosum[x][y])-AProjectionLegoPlot.minimumofLogScale);
-                            }
-                            else
-                            {
-                                //if not above minimum of log scale then don't draw
-                                lego[x][y][z]=0.0;
-                            }
-                        }
-                    }
-                }
-            }
-            else if (AProjectionLegoPlot.defaultScale ==2 )
-            {
-                for (int x = AProjectionLegoPlot.nPhiCells - 1; x >= 0; --x)
-                {
-                    for (int y = 0; y < AProjectionLegoPlot.nEtaCells; ++y)
-                    {
-                        for(int z=largestColourIndex; z>=lowestColourIndex; z--)
-                        {
-                            //if multiple colors then each take linear amount of full sqrt
-                            double fraction=(lego[x][y][z]/legosum[x][y]);
-                            lego[x][y][z]=fraction*Math.sqrt(legosum[x][y]);
-                        }
-                    }
-                }
-            }
-        }
-        return maxEt;
-    }
-
-    public static double findAODMaxEt(AEvent event)
-    {
-        double AODmaxEt = 0.0;
-        //From the caloCluster
-        String[] colCluster=event.getActiveCollectionNames("Cluster");
-        for(int i=0;i<colCluster.length;i++)
-        {
-            AClusterData cluster = (AClusterData) event.get(colCluster[i]);
-            if (!parameterStore.get("Data", "Cluster").getStatus())
-                cluster = null;
-            if (cluster != null)
-            {
-                cluster.makeDrawList();
-                for (int m = 0; m < cluster.getNumDraw(); ++m)
-                {
-                    int list = cluster.getDrawIndex(m);
-                    float et = Math.abs(cluster.getET(list));
-                    if (et > AODmaxEt)
-                        AODmaxEt = et;
-                }
-            }
-        }     
-        //From the Jets - Added code to make th e jet considered in the AOD scaling      
-        String[] colJet=event.getActiveCollectionNames("Jet");
-        for(int i=0;i<colJet.length;i++)
-        {
-            AJetData jets = (AJetData) event.get(colJet[i]);
-            if (!parameterStore.get("Data", "Jet").getStatus())
-                jets = null;
-            if (jets != null)
-            {
-                jets.makeDrawList();
-                for (int m = 0; m < jets.getNumDraw(); ++m)
-                {
-                    int list = jets.getDrawIndex(m);
-                    float pt = Math.abs(jets.getPt()[list]);
-                    if (pt > AODmaxEt)
-                        AODmaxEt = pt;
-                }
-            }
-        }  
-        // From the muons
-        String[] colMuon=event.getActiveCollectionNames("Muon");
-        for(int i=0;i<colMuon.length;i++)
-        {
-            AMuonData muons = (AMuonData) event.get(colMuon[i]);
-            if (!parameterStore.get("Data", "Muon").getStatus())
-                muons = null;
-            if (muons != null)
-            {
-                muons.makeDrawList();
-                for (int m = 0; m < muons.getNumDraw(); ++m)
-                {
-                    int list = muons.getDrawIndex(m);
-                    float pt = Math.abs(muons.getPT(list));
-                    if (pt > AODmaxEt)
-                        AODmaxEt = pt;
-                }
-            }
-        }
-        // From the electrons
-        String[] colElectron=event.getActiveCollectionNames("Electron");
-        for(int i=0;i<colElectron.length;i++)
-        {
-            AElectronData electrons = (AElectronData) event.get(colElectron[i]);
-            if (!parameterStore.get("Data", "Electron").getStatus())
-                electrons = null;
-            if (electrons != null)
-            {
-
-                electrons.makeDrawList();
-                for (int e = 0; e < electrons.getNumDraw(); ++e)
-                {
-                    int list = electrons.getDrawIndex(e);
-                    float pt = Math.abs(electrons.getPT(list));
-                    if (pt > AODmaxEt)
-                        AODmaxEt = pt;
-                }
-            }
-        }
-        // From the photons
-        String[] colPhoton=event.getActiveCollectionNames("Photon");
-        for(int i=0;i<colPhoton.length;i++)
-        {
-            APhotonData photons = (APhotonData) event.get(colPhoton[i]);
-            if (!parameterStore.get("Data", "Photon").getStatus())
-                photons = null;
-            if (photons != null)
-            {
-                photons.makeDrawList();
-                for (int p = 0; p < photons.getNumDraw(); ++p)
-                {
-                    int list = photons.getDrawIndex(p);
-                    float pt = Math.abs(photons.getPT(list));
-                    if (pt > AODmaxEt)
-                        AODmaxEt = pt;
-                }
-            }
-        }
-        //From the compositeParticles
-        String[] colCompPart=event.getActiveCollectionNames("CompositeParticle");
-        for(int i=0;i<colCompPart.length;i++)
-        {
-            ACompositeParticleData compositeParticles = (ACompositeParticleData) event.get(colCompPart[i]);
-            if (!parameterStore.get("Data", "CompositeParticle").getStatus())
-                compositeParticles = null;
-            if (compositeParticles != null)
-            {
-                compositeParticles.makeDrawList();
-                for (int e = 0; e < compositeParticles.getNumDraw(); ++e)
-                {
-                    int list = compositeParticles.getDrawIndex(e);
-                    float pt = Math.abs(compositeParticles.getPT(list));
-                    if (pt > AODmaxEt)
-                        AODmaxEt = pt;
-                }
-            }
-        }
-
-        return AODmaxEt;
-    }
-
-    public static double findMissingEt(AWindow window, double[][][] lego, AEvent event)
-    {
-        double met = 0.;
-        List hitsAndTracks = event.getHitsAndTracks(window.getProjection());
-        for (int h = 0; h < hitsAndTracks.size(); h++)
-        {
-            AData datatype = ((AData) hitsAndTracks.get(h));
-            if (datatype.getName().equals("ETMis"))
-            {
-                AETMisData mis = (AETMisData) datatype;
-                mis.makeDrawList();
-                if (mis.getNumDraw() > 0)
-                {
-                    double temp = Math.sqrt(mis.getETx() * mis.getETx() + mis.getETy() * mis.getETy());
-                    if(temp>met)
-                        met=temp;
-                }
-            }
-        }
-        return met;
-    }
-
-    public static void fillHistograms(AEvent event, double[][][] lego)
-    {
-        AProjectionLegoPlot.colorset.clear();
-        if (AProjectionLegoPlot.mode == 0)
-        {
-            // Calorimeter Lego
-            fillCaloLego(event, lego);
-        }
-        else if (AProjectionLegoPlot.mode == 1)
-        {
-            // Trigger Tower Lego
-            fillTriggerTowerLego(event, lego);
-        }
-        else
-        {
-            // Jet Elements Lego
-            fillJetElementLego(event, lego);
-        }
-    }
-
-    private static void fillCaloLego(AEvent event, double[][][] lego)
-    {
-        List detectors = event.getCalorimeters();
-        for (int det = 0; det < detectors.size(); det++)
-        {
-            ACalorimeterData calorimeter = (ACalorimeterData) detectors.get(det);
-            String calname=calorimeter.getName();
-            if (!calname.equals("TILE") && !calname.equals("FCAL")
-                    && !calname.equals("HEC") && !calname.equals("LAr")
-                    && !calname.equals("MBTS"))
-            {
-                logger.warn("Unknown calorimeter name for LegoPlot: " + calorimeter.getName());
-            }
-
-            calorimeter.makeDrawList();
-            // for coloring
-            byte[] c = calorimeter.getColor();
-            for (int i = 0; i < calorimeter.getNumDraw(); ++i)
-            {
-                int list = calorimeter.getDrawIndex(i);
-                double et = calorimeter.getET(list);
-                //MBTS energy is in MeV not GeV
-                if(calname.equals("MBTS")) et/=1000.;
-                double phi = calorimeter.getPhi(list);
-                double eta = calorimeter.getEta(list);
-                if (eta > 5 || eta < -5 || et == 0.0)
-                    continue;
-                double dphi = calorimeter.getdPhi(list);
-                double deta = calorimeter.getdEta(list);
-                phietabinsLoop("calo", phi, dphi, eta, deta, c[list], et, lego);
-            }// loop over that calorimeter's cells
-        }// loop over the calorimeters
-    }
-
-    private static void fillTriggerTowerLego(AEvent event, double[][][] lego)
-    {
-        //will draw even if data status is off
-        String[] colTT=event.getCollectionNames("LVL1TriggerTower");
-        for(int k=0;k<colTT.length;k++)
-        {
-            ALVL1TriggerTowerData lvl1TriggerTower = (ALVL1TriggerTowerData) event.get(colTT[k]);
-            if (lvl1TriggerTower == null)
-                continue;
-
-            byte[] ttColor;
-            for (int j = 0; j < 2; ++j)
-            {
-                int energyType = parameterStore.get(lvl1TriggerTower.getParameterGroup(), "EnergyType").getI();
-                if((j == 0 && energyType == 1) || (j == 1 && energyType == 0))
-                    continue;
-                lvl1TriggerTower.makeDrawList();
-
-                boolean emOrHad;
-                if (j == 0)
-                {
-                    emOrHad = ALVL1TriggerTowerData.ELECTROMAGNETIC;
-                    lvl1TriggerTower.applyEMCuts();
-                }
-                else
-                {
-                    emOrHad = ALVL1TriggerTowerData.HADRONIC;
-                    lvl1TriggerTower.applyHadCuts();
-                }
-                ttColor = lvl1TriggerTower.getColor(emOrHad);
-                for (int i = 0; i < lvl1TriggerTower.getNumDraw(); ++i)
-                {
-                    int list = lvl1TriggerTower.getDrawIndex(i);
-                    double et = lvl1TriggerTower.getET(list, emOrHad);
-                    double phi = lvl1TriggerTower.getPhi(list);
-                    double eta = lvl1TriggerTower.getEta(list);
-                    if (eta > 5 || eta < -5 || et == 0.0)
-                        continue;
-                    double dphi = lvl1TriggerTower.getdPhi(list, emOrHad);
-                    double deta = lvl1TriggerTower.getdEta(list, emOrHad);
-                    phietabinsLoop("trigger", phi, dphi, eta, deta, ttColor[list], et, lego);
-                }// loop over that triggerTower's cells
-            }
-        }
-    }
-
-    private static void fillJetElementLego(AEvent event, double[][][] lego)
-    {
-        //will draw even if data status is off
-        String[] colJE=event.getCollectionNames("LVL1JetElement");
-        for(int k=0;k<colJE.length;k++)
-        {
-            ALVL1JetElementData lvl1JetElement = (ALVL1JetElementData) event.get(colJE[k]);
-            if (lvl1JetElement == null)
-                continue;
-            byte[] jeColor = lvl1JetElement.getColor();
-            lvl1JetElement.makeDrawList();
-            for (int i = 0; i < lvl1JetElement.getNumDraw(); ++i)
-            {
-                int list = lvl1JetElement.getDrawIndex(i);
-                double et = lvl1JetElement.getET(list);
-                double phi = lvl1JetElement.getPhi(list);
-                double eta = lvl1JetElement.getEta(list);
-                if (eta > 5 || eta < -5 || et == 0.0)
-                    continue;
-                double dphi = lvl1JetElement.getdPhi(list);
-                double deta = lvl1JetElement.getdEta(list);
-                phietabinsLoop("jetElement", phi, dphi, eta, deta, jeColor[list], et, lego);
-            }// loop over that jetElement's cells
-        }
-    }
-
-    /**
-     * Is used to loop over the phi and eta bins to fill the lego "sender"
-     * histogram
-     *
-     * @param sender name of histogram that was sent for output message
-     * @param phi
-     * @param dphi
-     * @param eta
-     * @param deta
-     * @param color
-     * @param et
-     * @param lego
-     */
-    private static void phietabinsLoop(String sender, double phi, double dphi, double eta, double deta, byte color, double et, double[][][] lego)
-    {
-        if (color >= AProjectionLegoPlot.nLayers)
-            color = (byte) (color % AProjectionLegoPlot.nLayers);
-        AProjectionLegoPlot.colorset.add(new Integer(color));
-
-        int highphibin = 0, lowphibin = 0;
-
-        double phibinsize = (AMath.TWO_PI / AProjectionLegoPlot.nPhiCells);
-        highphibin = (int) ((phi + dphi) /phibinsize);
-        lowphibin = (int) ((phi - dphi) /phibinsize);
-
-        int highetabin = 0, lowetabin = 0;
-        double etabinsize = 10.0 / AProjectionLegoPlot.nEtaCells;
-        highetabin = (int) ((eta + deta + 5.0) /etabinsize);
-        lowetabin = (int) ((eta - deta + 5.0) /etabinsize);
-        //check eta values
-        if (lowetabin < 0)
-        {
-            lowetabin=0;
-            if (highetabin < 0)
-                highetabin=0;
-        }
-        if (highetabin >= AProjectionLegoPlot.nEtaCells)
-        {
-            highetabin =AProjectionLegoPlot.nEtaCells-1;
-            if (lowetabin >= AProjectionLegoPlot.nEtaCells)
-                lowetabin =AProjectionLegoPlot.nEtaCells-1;
-        }
-
-        for (int phibin = lowphibin; phibin <= highphibin; ++phibin)
-        {
-            double phiweight = 0;
-            if (lowphibin == highphibin)
-                phiweight = 1.0;
-            else if (phibin == lowphibin)
-                phiweight = (lowphibin + 1 - ((phi - dphi) / phibinsize)) * (phibinsize/(2 * dphi));
-            else if (phibin == highphibin)
-                phiweight = (((phi + dphi) / phibinsize) - highphibin) * (phibinsize/(2 * dphi));
-            else
-                phiweight = phibinsize/(2 * dphi);
-            if (phiweight > 1 || phiweight < 0)
-            {
-                logger.error("huh(" + sender + ")? how is phiweight...? " + phiweight);
-            }
-
-            for (int etabin = lowetabin; etabin <= highetabin; ++etabin)
-            {
-                double etaweight = 0;
-                if (lowetabin == highetabin)
-                    etaweight = 1.0;
-                else if (etabin == lowetabin)
-                    etaweight = (lowetabin + 1 - ((eta - deta + 5.0) / etabinsize)) * (etabinsize/(2 * deta));
-                else if (etabin == highetabin)
-                    etaweight = (((eta + deta + 5.0) / etabinsize) - highetabin) * (etabinsize/(2 * deta));
-                else
-                    etaweight = etabinsize/(2 * deta);
-                if (etaweight > 1 || etaweight < 0)
-                {
-                    logger.error("huh(" + sender + ")? how is etaweight...? " + etaweight);
-                }
-
-                int wphibin = phibin;// for phi wrapping
-                while (wphibin >= AProjectionLegoPlot.nPhiCells)
-                    wphibin -= AProjectionLegoPlot.nPhiCells;
-                while (wphibin < 0)
-                    wphibin += AProjectionLegoPlot.nPhiCells;
-                int retabin = etabin;
-                if (AProjectionLegoPlot.reverse)
-                    retabin = AProjectionLegoPlot.nEtaCells - etabin - 1;
-
-                // add to the legoplot
-                lego[wphibin][retabin][color] += et * phiweight * etaweight;
-            }// loop over etabins
-        }// loop over phibins
-    }// end of phietabinsloop
-
-    /**
-     * If the user has a different scale selected then this updates the value
-     */
-    public static double scaleValue(double value)
-    {
-        if(value==0)
-            return 0;
-        if (AProjectionLegoPlot.defaultScale == 2)
-        {
-            value = Math.sqrt(value);
-        }
-        else if (AProjectionLegoPlot.defaultScale == 1)
-        {
-            value = Math.log10(value) - AProjectionLegoPlot.minimumofLogScale;
-        }
-        return value;
-    }
-
-    public static void drawHistograms(AWindow window, AGraphics ag, AEvent event, double[][][] lego, double maxEt, double met, double AODmaxEt)
-    {
-        // Draw the other stuff in the event: jets, missing Et, etc.
-        double _jetcircleradius = parameterStore.get("LegoPlot", "JetCircleRadius").getD();
-        double _legocut = parameterStore.get("LegoPlot", "LegoCut").getD();
-        _legocut=scaleValue(_legocut);
-        boolean doAOD = false;
-        if (AODmaxEt!=0)
-            doAOD = true;
-
-        //for ordering of ROIs
-        Stack jetROI = new Stack(), emTauROI = new Stack(), muonROI = new Stack();
-
-        List hitsAndTracks = event.getHitsAndTracks(window.getProjection());
-        for (int h = 0; h < hitsAndTracks.size(); h++)
-        {
-            AData datatype = ((AData) hitsAndTracks.get(h));
-            if (datatype.getName().equals("Jet"))
-            {
-                AJetData jet = (AJetData) datatype;
-                jet.makeDrawList();
-                byte[] colors = jet.getColor();
-                for (int j = 0; j < jet.getNumDraw(); ++j)
-                {
-                    int list = jet.getDrawIndex(j);
-                    double et = jet.getET(list);
-                    Color _colorJet = AProjectionLegoPlot.defaultColorMap[colors[list]];
-                    ALegoDraw.drawJet(et, jet.getEta(list), jet.getPhi(list), _colorJet, window, ag, _jetcircleradius);
-                }
-            }
-            else if (datatype.getName().equals("ETMis"))
-            {
-                AETMisData mis = (AETMisData) datatype;
-                mis.makeDrawList();
-                if (mis.getNumDraw() > 0)
-                {
-                    byte[] colors = mis.getColor();
-                    int phib = (int) ((mis.getPhi()) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                    if (phib < 0)
-                        phib += AProjectionLegoPlot.nPhiCells;
-                    if (phib >= AProjectionLegoPlot.nPhiCells)
-                        phib -= AProjectionLegoPlot.nPhiCells;
-                    Color _colorMis = AProjectionLegoPlot.defaultColorMap[colors[0]];
-                    ALegoDraw.drawMissEt(window, ag, phib, mis.getET(), _colorMis, maxEt);
-                }
-            }
-            //save the ROIs so they can be drawn jet-em-muon
-            else if (datatype.getName().equals("JetROI"))
-            {
-                jetROI.push(h);
-            }
-            else if (datatype.getName().equals("EmTauROI"))
-            {
-                emTauROI.push(h);
-            }
-            else if (datatype.getName().equals("MuonROI"))
-            {
-                muonROI.push(h);
-            }
-        }//end of loop over hitsandtracks
-
-        //now draw the ROIs in the correct order
-        drawROIs(jetROI, window, ag, event);
-        drawROIs(emTauROI, window, ag, event);
-        drawROIs(muonROI, window, ag, event);
-
-
-        //for towers find colors to loop over
-        int largestColourIndex=0;
-        int lowestColourIndex=AProjectionLegoPlot.nLayers;
-        Iterator colorIterator = AProjectionLegoPlot.colorset.iterator();
-        while(colorIterator.hasNext())
-        {
-            int currentColor = ((Integer) colorIterator.next()).intValue();
-            if(currentColor>largestColourIndex)
-                largestColourIndex=currentColor;
-            if(currentColor<lowestColourIndex)
-                lowestColourIndex=currentColor;
-        }
-        // Draw the EM and HAD towers
-        for (int y = 0; y < AProjectionLegoPlot.nEtaCells; ++y)
-        {
-            for (int x = AProjectionLegoPlot.nPhiCells - 1; x >= 0; --x)
-            {
-                double binheight = 0;
-                if(AProjectionLegoPlot.getDrawEMHAD() && AProjectionLegoPlot.colorset.size()==2)
-                {
-                    //for Em/had option should only have 2 colors
-                    int z=AProjectionLegoPlot.colorEM;
-                    binheight=lego[x][y][z];
-                    if (binheight > _legocut)
-                    {
-                        ALegoDraw.drawBox(window, ag, x, y, z, 0.0, binheight, maxEt, 0.5);
-                        if(lego[x][y][AProjectionLegoPlot.colorHad]> _legocut)
-                        {
-                            z=AProjectionLegoPlot.colorHad;
-                            ALegoDraw.drawBox(window, ag, x, y, z, binheight, lego[x][y][z], maxEt, 0.5);
-                        }
-                    }
-                    else if(lego[x][y][AProjectionLegoPlot.colorHad]> _legocut)
-                    {
-                        z=AProjectionLegoPlot.colorHad;
-                        ALegoDraw.drawBox(window, ag, x, y, z, 0.0, lego[x][y][z], maxEt, 0.5);
-                    }
-                }
-                else
-                {
-                    //if not Em/Had then loop over colors
-                    for(int z=largestColourIndex; z>=lowestColourIndex; z--)
-                    {
-                        if (lego[x][y][z] > _legocut)
-                        {
-                            ALegoDraw.drawBox(window, ag, x, y, z, binheight, lego[x][y][z], maxEt, 0.5);
-                            binheight += lego[x][y][z];
-                        }
-                    }
-                }
-            }
-        }
-
-        //loop again and draw things that need to be on top of histogram
-        for (int h = 0; h < hitsAndTracks.size(); h++)
-        {
-            AData datatype = ((AData) hitsAndTracks.get(h));
-            if (datatype.getName().equals("Jet"))
-            {
-                AJetData jet = (AJetData) datatype;
-                jet.makeDrawList();
-                byte[] colors = jet.getColor();
-                for (int j = 0; j < jet.getNumDraw(); ++j)
-                {
-                    int list = jet.getDrawIndex(j);
-                    double et = jet.getET(list);
-                    Color _colorJet = AProjectionLegoPlot.defaultColorMap[colors[list]];
-                    if (parameterStore.get("LegoPlot", "JetText").getStatus())
-                        ALegoDraw.drawJetText(et, jet.getEta(list), jet.getPhi(list), _colorJet, window, ag, _jetcircleradius);
-                }
-            }
-        }
-
-        if (doAOD)
-        {
-            //Draw the new jet Towers
-            String[] colJet=event.getActiveCollectionNames("Jet");
-            for(int i=0;i<colJet.length;i++)
-            {
-                AJetData jets = (AJetData) event.get(colJet[i]);
-
-                if (!parameterStore.get("Data", "Jet").getStatus())
-                    jets = null;
-                if (jets != null)
-                {
-                    jets.makeDrawList();
-                    byte[] colors = jets.getColor();
-                    for (int j = 0; j < jets.getNumDraw(); ++j)
-                    {
-                        int list = jets.getDrawIndex(j);
-                        Color _colorJet = AProjectionLegoPlot.defaultColorMap[colors[list]];
-                        int etabin = (int) ((jets.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((jets.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double pt = Math.abs(jets.getPt()[list]);
-                        pt=scaleValue(pt);
-                        ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_JET,_colorJet, 0, pt, maxEt, 2.0);
-                    }
-                }
-            }                           
-
-            // Draw the caloClusters
-            String[] colCluster=event.getActiveCollectionNames("Cluster");
-            for(int i=0;i<colCluster.length;i++)
-            {
-                AClusterData cluster = (AClusterData) event.get(colCluster[i]);
-                if (!parameterStore.get("Data", "Cluster").getStatus())
-                    cluster = null;
-                if (cluster != null)
-                {
-                    cluster.makeDrawList();
-                    for (int m = 0; m < cluster.getNumDraw(); ++m)
-                    {
-                        int list = cluster.getDrawIndex(m);
-                        int etabin = (int) ((cluster.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((cluster.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double et = Math.abs(cluster.getET(list));
-                        et=scaleValue(et);
-                        ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_CLUSTER, 0, et, maxEt, .5);
-                    }
-                }
-            }
-
-            // Draw the bjets
-            String[] colBjets=event.getActiveCollectionNames("BJet");
-            for(int i=0;i<colBjets.length;i++)
-            {
-                ABJetData bjets = (ABJetData) event.get(colBjets[i]);
-                if (!parameterStore.get("Data", "BJet").getStatus())
-                    bjets = null;
-                if (bjets != null)
-                {
-                    bjets.makeDrawList();
-                    for (int bj = 0; bj < bjets.getNumDraw(); ++bj)
-                    {
-                        int list = bjets.getDrawIndex(bj);
-                        double et = bjets.getPT(list);
-                        ALegoDraw.drawJet(et, bjets.getEta(list), bjets.getPhi(list), AProjectionLegoPlot.defaultColorMap[parameterStore.get("BJet", "Constant").getI()], window, ag, _jetcircleradius + _jetcircleradius / 5.0);
-                    }
-                }
-            }
-
-            // Draw the taujets
-            String[] colTau=event.getActiveCollectionNames("TauJet");
-            for(int i=0;i<colTau.length;i++)
-            {
-                ATauJetData tjets = (ATauJetData) event.get(colTau[i]);
-                if (!parameterStore.get("Data", "TauJet").getStatus())
-                    tjets = null;
-                if (tjets != null)
-                {
-                    tjets.makeDrawList();
-                    for (int tj = 0; tj < tjets.getNumDraw(); ++tj)
-                    {
-                        int list = tjets.getDrawIndex(tj);
-                        double et = tjets.getPT(list);
-                        ALegoDraw.drawJet(et, tjets.getEta(list), tjets.getPhi(list), AProjectionLegoPlot.defaultColorMap[parameterStore.get("TauJet", "Constant").getI()], window, ag, _jetcircleradius / 2.0);
-                    }
-                }
-            }
-
-            //Draw the muons
-            String[] colMuon=event.getActiveCollectionNames("Muon");
-            for(int i=0;i<colMuon.length;i++)
-            {
-                AMuonData muons = (AMuonData) event.get(colMuon[i]);
-                if (!parameterStore.get("Data", "Muon").getStatus())
-                    muons = null;
-                if (muons != null)
-                {
-                    muons.makeDrawList();
-                    for (int m = 0; m < muons.getNumDraw(); ++m)
-                    {
-                        int list = muons.getDrawIndex(m);
-                        int etabin = (int) ((muons.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((muons.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double pt = Math.abs(muons.getPT(list));
-                        pt=scaleValue(pt);
-                        ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_MUON, 0, pt, maxEt, 0.5);
-                    }
-                }
-            }
-
-            //Draw the electrons
-            String[] colElectron=event.getActiveCollectionNames("Electron");
-            for(int i=0;i<colElectron.length;i++)
-            {
-                AElectronData electrons = (AElectronData) event.get(colElectron[i]);
-
-                if (!parameterStore.get("Data", "Electron").getStatus())
-                    electrons = null;
-                if (electrons != null)
-                {
-                    electrons.makeDrawList();
-                    for (int e = 0; e < electrons.getNumDraw(); ++e)
-                    {
-                        int list = electrons.getDrawIndex(e);
-                        int etabin = (int) ((electrons.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((electrons.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double pt = Math.abs(electrons.getPT(list));
-                        pt=scaleValue(pt);
-                        ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_ELECTRON, 0, pt, maxEt, 0.5);
-                    }
-                }
-            }
-
-            //Draw the photons
-            String[] colPhoton=event.getActiveCollectionNames("Photon");
-            for(int i=0;i<colPhoton.length;i++)
-            {
-                APhotonData photons = (APhotonData) event.get(colPhoton[i]);
-                if (!parameterStore.get("Data", "Photon").getStatus())
-                    photons = null;
-                if (photons != null)
-                {
-                    photons.makeDrawList();
-                    for (int p = 0; p < photons.getNumDraw(); ++p)
-                    {
-                        int list = photons.getDrawIndex(p);
-                        int etabin = (int) ((photons.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((photons.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double pt = Math.abs(photons.getPT(list));
-                        pt=scaleValue(pt);
-                        ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_PHOTON, 0, pt, maxEt, 0.5);
-                    }
-                }
-            }
-
-            //Draw the compositeParticles
-            String[] colCompPart=event.getActiveCollectionNames("CompositeParticle");
-            for(int i=0;i<colCompPart.length;i++)
-            {
-                ACompositeParticleData compositeParticles = (ACompositeParticleData) event.get(colCompPart[i]);
-                if (!parameterStore.get("Data", "CompositeParticle").getStatus())
-                    compositeParticles = null;
-                if (compositeParticles != null)
-                {
-                    compositeParticles.makeDrawList();
-                    for (int e = 0; e < compositeParticles.getNumDraw(); ++e)
-                    {
-                        int list = compositeParticles.getDrawIndex(e);
-                        int etabin = (int) ((compositeParticles.getEta(list) + 5.0) * AProjectionLegoPlot.nEtaCells / 10.0);
-                        if (AProjectionLegoPlot.reverse)
-                            etabin = AProjectionLegoPlot.nEtaCells - etabin;
-                        int phibin = (int) ((compositeParticles.getPhi(list)) * AProjectionLegoPlot.nPhiCells / AMath.TWO_PI);
-                        double pt = Math.abs(compositeParticles.getPT(list));
-                        pt=scaleValue(pt);
-                        //change how drawn depending on type
-                        if(Math.abs(compositeParticles.getPdgId(list))==13)
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_MUON, 0, pt, maxEt, 0.5);
-                        else if(Math.abs(compositeParticles.getPdgId(list))==11)
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_ELECTRON, 0, pt, maxEt, 0.5);
-                        else if(Math.abs(compositeParticles.getPdgId(list))==22)
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_PHOTON, 0, pt, maxEt, 0.5);
-                        else if(Math.abs(compositeParticles.getPdgId(list))==5)
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_BJET, 0, pt, maxEt, 0.5);
-                        else if(Math.abs(compositeParticles.getPdgId(list))==15)
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_TAUJET, 0, pt, maxEt, 0.5);
-                        else if(compositeParticles.getTypeEV(list).equals("EVParticleJet"))
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_JET, 0, pt, maxEt, 0.5);
-                        else
-                            ALegoDraw.drawBox(window, ag, phibin, etabin, AProjectionLegoPlot.DRAW_COMPOSITEPARTICLE, 0, pt, maxEt, 0.5);
-                    }
-                }
-            }
-        }//if doAOD
-    }//drawHistograms
-
-    public static void drawROIs(Stack ROIstack, AWindow window, AGraphics ag, AEvent event)
-    {
-        List hitsAndTracks = event.getHitsAndTracks(window.getProjection());
-        //loop over ROIs
-        while(ROIstack.size()>0)
-        {
-            int h = (Integer) ROIstack.pop();
-            AData datatype = ((AData) hitsAndTracks.get(h));
-
-            byte[] ROIColor;
-            double deltaPhi;
-            double deltaEta;
-            AROIData ROIData = (AROIData) datatype;
-            ROIData.makeDrawList();
-            ROIColor = datatype.getColor();
-            deltaEta = parameterStore.get(datatype.getName(), "deta").getD();
-            deltaPhi = parameterStore.get(datatype.getName(), "dphi").getD();
-            // deltaEta and deltaPhi should not be too large
-            for (int j = 0; j < ROIData.getNumDraw(); ++j)
-            {
-                int numPoints = 4;
-                int list = ROIData.getDrawIndex(j);
-                double ROIphi = ROIData.getPhi(list);
-                double ROIeta = ROIData.getEta(list);
-                if (AProjectionLegoPlot.reverse)
-                    ROIeta = -ROIeta;
-                double leftPhi = ROIphi - deltaPhi;
-                double rightPhi = ROIphi + deltaPhi;
-                double topEta = ROIeta + deltaEta;
-                double bottomEta = ROIeta - deltaEta;
-                if ((ROIColor[list] < AProjectionLegoPlot.defaultColorMap.length) && (ROIColor[list] >= 0))
-                    ag.setColor(AProjectionLegoPlot.defaultColorMap[ROIColor[list]]);
-                ag.setLineWidth(3);
-                double ROIx = 0.0;
-                double ROIy = 0.0;
-                double[][] hv = new double[2][numPoints];
-                if ((rightPhi <= AMath.TWO_PI) && (leftPhi >= 0.0))
-                {
-                    for (int p = 0; p < numPoints; p++)
-                    {
-                        switch (p)
-                        {
-                        case 0:
-                            ROIx = rightPhi * 360.0 / AMath.TWO_PI;
-                            ROIy = bottomEta;
-                            break;
-                        case 1:
-                            ROIx = leftPhi * 360.0 / AMath.TWO_PI;
-                            ROIy = bottomEta;
-                            break;
-                        case 2:
-                            ROIx = leftPhi * 360.0 / AMath.TWO_PI;
-                            ROIy = topEta;
-                            break;
-                        case 3:
-                            ROIx = rightPhi * 360.0 / AMath.TWO_PI;
-                            ROIy = topEta;
-                            break;
-                        }
-                        if(ROIy <= -5.0)
-                            ROIy = -5.0;
-                        if(ROIy >= 5.0)
-                            ROIy = 5.0;
-                        //move phi value due to slant of eta axis
-                        ROIx=AProjectionLegoPlot.adjustPhi(window,ROIx,ROIy);
-                        hv[0][p] = ROIx;
-                        hv[1][p] = ROIy;
-                    }
-                }
-                else if ((rightPhi > AMath.TWO_PI) && (leftPhi < 0.0))
-                {
-                    for (int p = 0; p < numPoints; p++)
-                    {
-                        switch (p)
-                        {
-                        case 0:
-                            ROIx = 360.0;
-                            ROIy = bottomEta;
-                            break;
-                        case 1:
-                            ROIx = 0.0;
-                            ROIy = bottomEta;
-                            break;
-                        case 2:
-                            ROIx = 0.0;
-                            ROIy = topEta;
-                            break;
-                        case 3:
-                            ROIx = 360.0;
-                            ROIy = topEta;
-                            break;
-                        }
-                        if(ROIy <= -5.0)
-                            ROIy = -5.0;
-                        if(ROIy >= 5.0)
-                            ROIy = 5.0;
-                        //move phi value due to slant of eta axis
-                        ROIx=AProjectionLegoPlot.adjustPhi(window,ROIx,ROIy);
-                        hv[0][p] = ROIx;
-                        hv[1][p] = ROIy;
-                    }
-                }
-                else if (rightPhi > AMath.TWO_PI)
-                {
-                    double[][] hvWrap = new double[2][numPoints];
-                    double ROIxWrap = 0.0;
-                    for (int p = 0; p < numPoints; p++)
-                    {
-                        switch (p)
-                        {
-                        case 0:
-                            ROIx = 360.0;
-                            ROIxWrap = (rightPhi - AMath.TWO_PI) * 360.0 / AMath.TWO_PI;
-                            ROIy = bottomEta;
-                            break;
-                        case 1:
-                            ROIx = leftPhi * 360.0 / AMath.TWO_PI;
-                            ROIxWrap = 0.0;
-                            ROIy = bottomEta;
-                            break;
-                        case 2:
-                            ROIx = leftPhi * 360.0 / AMath.TWO_PI;
-                            ROIxWrap = 0.0;
-                            ROIy = topEta;
-                            break;
-                        case 3:
-                            ROIx = 360.0;
-                            ROIxWrap = (rightPhi - AMath.TWO_PI) * 360.0 / AMath.TWO_PI;
-                            ROIy = topEta;
-                            break;
-                        }
-                        if(ROIy <= -5.0)
-                            ROIy = -5.0;
-                        if(ROIy >= 5.0)
-                            ROIy = 5.0;
-                        //move phi value due to slant of eta axis
-                        ROIx=AProjectionLegoPlot.adjustPhi(window,ROIx,ROIy);
-                        hv[0][p] = ROIx;
-                        hv[1][p] = ROIy;
-                        //move phi value due to slant of eta axis
-                        ROIxWrap=AProjectionLegoPlot.adjustPhi(window,ROIxWrap,ROIy);
-                        hvWrap[0][p] = ROIxWrap;
-                        hvWrap[1][p] = ROIy;
-                    }
-                    Point2D.Double p= new Point2D.Double(0,0);
-                    for(int i=0; i<numPoints; i++)
-                    {
-                        p = window.calculateDisplay(hvWrap[0][i],hvWrap[1][i]);
-                        hvWrap[0][i]=p.x;
-                        hvWrap[1][i]=p.y;
-                    }
-                    ag.fillPolygon(hvWrap[0], hvWrap[1], numPoints);
-                }
-                else
-                {
-                    double[][] hvWrap = new double[2][numPoints];
-                    double ROIxWrap = 0.0;
-                    for (int p = 0; p < numPoints; p++)
-                    {
-                        switch (p)
-                        {
-                        case 0:
-                            ROIx = rightPhi * 360.0  / AMath.TWO_PI;
-                            ROIxWrap = 360.0;
-                            ROIy = bottomEta;
-                            break;
-                        case 1:
-                            ROIx = 0.0;
-                            ROIxWrap = (leftPhi + AMath.TWO_PI) * 360.0 / AMath.TWO_PI;
-                            ROIy = bottomEta;
-                            break;
-                        case 2:
-                            ROIx = 0.0;
-                            ROIxWrap = (leftPhi + AMath.TWO_PI) * 360.0 / AMath.TWO_PI;
-                            ROIy = topEta;
-                            break;
-                        case 3:
-                            ROIx = rightPhi * 360.0 / AMath.TWO_PI;
-                            ROIxWrap = 360.0;
-                            ROIy = topEta;
-                            break;
-                        }
-                        if(ROIy <= -5.0)
-                            ROIy = -5.0;
-                        if(ROIy >= 5.0)
-                            ROIy = 5.0;
-                        //move phi value due to slant of eta axis
-                        ROIx=AProjectionLegoPlot.adjustPhi(window,ROIx,ROIy);
-                        hv[0][p] = ROIx;
-                        hv[1][p] = ROIy;
-                        //move phi value due to slant of eta axis
-                        ROIxWrap=AProjectionLegoPlot.adjustPhi(window,ROIxWrap,ROIy);
-                        hvWrap[0][p] = ROIxWrap;
-                        hvWrap[1][p] = ROIy;
-                    }
-                    Point2D.Double p= new Point2D.Double(0,0);
-                    for(int i=0; i<numPoints; i++)
-                    {
-                        p = window.calculateDisplay(hvWrap[0][i],hvWrap[1][i]);
-                        hvWrap[0][i]=p.x;
-                        hvWrap[1][i]=p.y;
-                    }
-                    ag.fillPolygon(hvWrap[0], hvWrap[1], numPoints);
-                }
-                Point2D.Double p= new Point2D.Double(0,0);
-                for(int i=0; i<numPoints; i++)
-                {
-                    p = window.calculateDisplay(hv[0][i],hv[1][i]);
-                    hv[0][i]=p.x;
-                    hv[1][i]=p.y;
-                }
-                ag.fillPolygon(hv[0], hv[1], numPoints);
-            }//end of loop over ROI data
-        }
-
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMBTSData.java b/graphics/AtlantisJava/src/atlantis/data/AMBTSData.java
deleted file mode 100644
index 931b749640d5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMBTSData.java
+++ /dev/null
@@ -1,595 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.ALogger;
-
-
-/**
- * The Minimum Bias Trigger Scintillator implementation.
- *
- * @author Mark Stockton
- */
-public class AMBTSData extends ACalorimeterData
-{
-	private static ALogger logger = ALogger.getLogger(AMBTSData.class);
-
-	
-    /*
-     * For Rz histograms may/will need:
-     * 
-     * private int[][] cellTable;
-     * 
-     * phiIndex[i]
-     * etaIndex[i]
-     * outerEta -> use -> detector.getEtaMax()
-     * outerR   -> use -> detector.getRMax()
-     * outerZ   -> use -> detector.getZMax() 
-     * etaGranularity
-     */
-    
-    protected float[] quality;
-    protected float[] time;
-    //label not needed at present as is just a string made 
-    // from type, module and channel 
-    //protected String[] label;
-    
-    // data for real pulse shapes plots
-    private int[][] adcCounts = null;    
-    private float[] cellPedestal = null;
-    private float[] cellRawTime = null;
-    private float[] cellRawAmplitude = null;
-    private static boolean pulseShapesDataAvailable = false;
-    private static final String LOOKUP_TABLE_FILE =
-    		AGlobals.instance().getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		"rpsplt_tile.csv";
-    // number of lookup table values for real pulse shapes plots calculation
-    private static final short NUMBER_OF_LOOKUP_VALUES = 401;
-    
-    
-
-    
-    protected ACalorimeterDetector[] MBTSlayers = new ACalorimeterDetector[2];
-
-    AMBTSData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        channel = p.getIntArray("channel");
-        /*
-         * this energy is in MeV not GeV
-         */
-        et = p.getFloatArray("energy");
-        etSum = p.getFloatArray("energy");
-        //label = p.getStringArray("label");
-        quality = p.getFloatArray("quality");
-        sampling = p.getIntArray("sampling");
-        time = p.getFloatArray("time");
-        
-        /*
-         * The phi and eta coordinates used here are actually not phi and eta
-         * 
-         * Instead: - phi refers to the module number 0-8
-         *          - eta refers to which side of the detector
-         *          
-         * The actual phi and eta are then calculated from the geometry object
-         */
-        int[] inteta;
-        int[] intphi;
-        if( p.containsKey("module"))
-        {
-            //phi new version
-            intphi = p.getIntArray("module");
-        }
-        else    
-        {
-            //phi first version
-            float[] tempphi = p.getFloatArray("phi");
-            intphi = new int[numData];
-            for(int i=0; i<numData; i++)
-            {
-                intphi[i]=(int) (( (8*tempphi[i])/(2*Math.PI))-(1/2));
-            }
-        }
-        
-        if( p.containsKey("type"))
-        {
-            //eta new version
-            inteta = p.getIntArray("type");
-        }
-        else
-        {
-            //eta first version
-            float[] tempeta = p.getFloatArray("eta");
-            inteta = new int[numData];
-            for(int i=0; i<numData; i++)
-            {
-                if(tempeta[i]<0)
-                { 
-                    inteta[i] = -1;
-                }
-                else
-                {
-                    inteta[i] = 1;
-                }
-            }
-        }
-        eta = new float[numData];
-        phi = new float[numData];
-        for(int i=0; i<numData; i++)
-        {
-            eta[i]=inteta[i];
-            phi[i]=intphi[i];
-        }
-        
-        //now define sub and side depending on eta value
-        for(int i=0; i<numData; i++)
-        {
-            if(eta[i]<0)
-            { 
-                sub[i] = 0;
-                side[i] = -1;
-            }
-            else
-            {
-                sub[i] = 1;
-                side[i] = 1;
-            }
-        }
-        
-        //store the two sampling of the MBTS geometry
-        for (int i=0; i<ACalorimeterDetector.count(); i++) 
-        {
-            ACalorimeterDetector detector = ACalorimeterDetector.get(i);
-            if(detector.getName().equals("Minimum Bias Trigger Scintillators"))
-            {
-                MBTSlayers[detector.getSampling()] = detector;
-            }
-        }
-        
-        // read in MBTS data for real pulse shapes plots
-        readPulseShapePlotData(p);
-        
-    }
-    
-    
-    
-    private void readPulseShapePlotData(AHashMap p)
-    {
-        // read ADCCounts and cell data for real pulse shapes plots
-        adcCounts = super.getADCCountsData(p);
-
-        // read other MBTS data for real pulse shapes plots
-        cellPedestal = (p.get("cellPedestal") != null) ? p.getFloatArray("cellPedestal") : null;
-        cellRawTime = (p.get("cellRawTime") != null) ? p.getFloatArray("cellRawTime") : null;
-        cellRawAmplitude = (p.get("cellRawAmplitude") != null) ? p.getFloatArray("cellRawAmplitude") : null;
-        
-        pulseShapesDataAvailable = false;
-        if(adcCounts != null && cellPedestal != null && cellRawTime != null &&
-           cellRawAmplitude != null)
-        {
-            pulseShapesDataAvailable = true;
-
-            logger.debug(CALORIMETER_NAME +
-                    ": data for real pulse shape plots available");
-
-            if(ACalorimeterRPSPLT.areTileLookupTablesInitialized())
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup tables have already been read in");
-            }
-            else
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup table values have not been read in yet\n" +
-                        "  trying to read file: " + LOOKUP_TABLE_FILE);
-
-                try
-                {
-                    ATILEData.readLookupTableFile();
-                    logger.debug(CALORIMETER_NAME +
-                            ": values from " + LOOKUP_TABLE_FILE +
-                            " successfully read in");
-                }
-                catch(AAtlantisException ex)
-                {
-                    logger.debug(CALORIMETER_NAME +
-                                  ": reading " + LOOKUP_TABLE_FILE +
-                                  " failed, real pulse shapes plots will not " +
-                                  "be available, reason: " + ex.getMessage(), ex);
-                    pulseShapesDataAvailable = false;
-                }
-            }
-        }
-
-    } // readPulseShapePlotData() -------------------------------------------
-
-    
-    
-    /**
-     * Returns the name of the parameter group.
-     *
-     * @return String parameter group
-     */
-    public String getParameterGroup()
-    {
-        return "TILE";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getName()
-    {
-        return "MBTS";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     *
-     * @return String datatype
-     */
-    public String getNameScreenName()
-    {
-        return "MBTS";
-    }
-
-    /**
-     * Returns the type of calorimeter (ECAL/HCAL) for a hit.
-     *
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public String getCalorimeterType(int index)
-    {
-        return "HCAL";
-    }
-
-    /**
-     * Draws the MBTS data in the y-x projection.
-     *
-     * @return ACoord cell geometry polygons
-     */
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (mode != AProjectionYX.MODE_MBTS)
-        {
-            return ACoord.NO_DATA;
-        }
-        
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            double rMax = MBTSlayers[sampling[j]].getRMax();
-            double rMin = MBTSlayers[sampling[j]].getRMin();
-            int numPhi = MBTSlayers[sampling[j]].getNumPhi();
-            double phiMin = Math.PI*2*phi[j]/numPhi;
-            double phiMax = Math.PI*2*(1+phi[j])/numPhi;
-            hv[0][i] = new double[] {rMax*Math.cos(phiMin), rMax*Math.cos(phiMax),
-                                  rMin*Math.cos(phiMax), rMin*Math.cos(phiMin)};
-            hv[1][i] = new double[] {rMax*Math.sin(phiMin), rMax*Math.sin(phiMax),
-                                  rMin*Math.sin(phiMax), rMin*Math.sin(phiMin)};
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this);
-    }
-
-    /**
-     * Draws the MBTS data in the rho-z projection. See the description of
-     * filterDrawListRZ() for an explanation of the drawing method.
-     *
-     * @return ACoord cell geometry polygons
-     */
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        
-        for (int i = 0; i < numDraw; i++)
-        {
-            int j = listdl[i];
-            int sign = MBTSlayers[sampling[j]].getRSign((int) phi[j]);
-            double zMax = MBTSlayers[sampling[j]].getZMax() * side[j];
-            double zMin = MBTSlayers[sampling[j]].getZMin() * side[j];
-            double rMax = MBTSlayers[sampling[j]].getRMax() * sign;
-            double rMin = MBTSlayers[sampling[j]].getRMin() * sign;            
-            hv[0][i] = new double[] {zMax, zMin, zMin, zMax};
-            hv[1][i] = new double[] {rMax, rMax, rMin, rMin};
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this);
-    }
-        
-    /**
-     * Applies cuts to the data.
-     */
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        
-        cut("CutsCalo", "MBTSEnergy", "MBTSEnergy", et);
-        int cutSub = parameterStore.get("CutsCalo", "MBTS").getI();
-        if(cutSub != -1)
-        {
-            cutArray(sub, cutSub, "Endcap");
-        }
-    }
-
-    /**
-     * Returns the data in the phi-rho projection.
-     *
-     * @return ACoord polygons representing calorimeter cells
-     */
-    public ACoord getFRUser()
-    {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-        
-    /**
-     * Returns info about a selected hit (for picking)
-     *
-     * @param index int hit index
-     * @return String info
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        "\n Energy="+correctEnergy(energy[index])+" GeV\n ";
-        
-        //find the cell energy on the opposite MBTS layer
-        String cellminus, cellplus;
-        double tempEnergy=0.0;
-        for(int i=0; i<energy.length; i++)
-        {
-            if(eta[i]==(-1.0*eta[index]) && phi[i]==phi[index] && sampling[i]==sampling[index])
-            {
-                tempEnergy=energy[i];
-            }
-        }
-            
-        if(eta[index]<0)
-        {
-            cellminus = correctEnergy(energy[index]);
-            cellplus = correctEnergy(tempEnergy);
-        }
-        else
-        {
-            cellplus = correctEnergy(energy[index]);
-            cellminus = correctEnergy(tempEnergy);
-        }
-        StringBuffer msg = new StringBuffer(CALORIMETER_NAME + " cell ");
-        
-        // calling AIdHelper.getFullIdentifier(id[index])[0] - does not work,
-        // id array is not present in the event data. it is arbitrarily created
-        // in Atlantis, however, but contains only indices, thus currently
-        // (2008-11-25) index and id[index] are the same values
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        
-        msg.append("\n Energy = " + correctEnergy(energy[index]));
-        msg.append("\n (MBTS + = " + cellplus + " MBTS - = " + cellminus + ")");
-        msg.append("\n time = " + time[index]);
-        msg.append("\n quality = " + quality[index]);
-        msg.append("\n type = " + String.format("%.4f",eta[index]));
-        msg.append("\n module = " + String.format("%.1f",phi[index]));
-        msg.append("\n sampling = " + sampling[index]);
-        msg.append("\n channel = " + channel[index]);
-
-        // real pulse shapes plots
-        msg.append("\n cell pedestal = ");
-        String m = (cellPedestal != null) ? Float.toString(cellPedestal[index]) +
-                   " ADC counts" : "n/a";
-        msg.append(m);
-        
-        m = pulseShapesDataAvailable ? "" : "\n data for real pulse shapes plot n/a";
-        msg.append(m);
-        
-        return msg.toString();
-
-    } // getHitInfo() -------------------------------------------------------
-
-    private String correctEnergy(double energy)
-    {
-        String energyOutput;
-        if(energy>1.)
-        {
-            energyOutput = String.format("%.2f",energy) + " MeV";
-        }
-        else if(energy>0.001)
-        {
-            energy*=1000.;
-            energyOutput = String.format("%.2f",energy) + " KeV";
-        }
-        else
-        {
-            energy*=1000.*1000.;
-            energyOutput = String.format("%.2f",energy) + " eV";
-        }
-        return energyOutput;
-    }
-    
-    
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        ACoord[] data = ACoord.NO_HISTOGRAMS;
-        //TODO add MBTS RZ Histograms option turned off in gui
-        //if (projection instanceof AProjectionRZ)
-        //    data = getRZHistograms();
-        return projection.nonLinearTransform(data);
-    }
-
-
-    
-    // calculate real pulse shapes values based on the values in the lookup tables
-    // taken from ATILEData. This function can't be shared from ACalorimeterData
-    // (shared by LAr, FCAL, HEC) since the calculation is different and can't
-    // call it directly from TILE since there are two channels.
-    // Should likely be refactored (so that method is somewhat shared) - after
-    // discussion with someone from TILE/MBTS/LAr ...
-    private double getPhysicsPulseShape(double xTime, double pmtTime,
-                                        double pmtPedestal, double pmtEnergy,
-                                        float[] amplitude, float[] time)
-                                        throws AAtlantisException
-    {
-        double tdiv = 0.0;
-        int lookup = 0;
-        double localTime = 0.0;
-        double xpulse = 0.0;
-
-        // need to get "multiple" parameter ( = number of values in adcCounts
-        // for each cell - adcCounts.length), shall be the same for all the
-        // cells - taking the length of the first array (for the first cell)
-        // no NullPointer or ArrayIndexBound checks are necessary here as this
-        // method shall only be called when the relevant data is available
-        double centerOfSamples = (adcCounts[0].length + 1.0) / 2.0;
-
-        tdiv = time[1] - time[0];
-        localTime = (xTime - centerOfSamples) * 25.0 - pmtTime;
-        lookup = (int) ((localTime - time[0]) / tdiv);
-
-        if(lookup < 0)
-        {
-            lookup = 0;
-        }
-        if(lookup >= NUMBER_OF_LOOKUP_VALUES - 1)
-        {
-            lookup = NUMBER_OF_LOOKUP_VALUES - 2; // -1 was off by 1
-        }
-
-        try
-        {
-            if(lookup == 0 || lookup == NUMBER_OF_LOOKUP_VALUES - 2)
-            {
-                xpulse = amplitude[lookup];
-            }
-            else
-            {
-                xpulse = amplitude[lookup] + ((amplitude[lookup + 1] -
-                         amplitude[lookup]) / tdiv) * (localTime - time[lookup]);
-            }
-        }
-        catch(ArrayIndexOutOfBoundsException ex)
-        {
-            String m = "AMBTSData.getPhysicsPulseShape():\n" +
-                       "  lookup index out of bound: lookup = " + lookup;
-            throw new AAtlantisException(m);
-        }
-        return (xpulse * pmtEnergy) + pmtPedestal;
-
-    } // getPhysicsPulseShape() ---------------------------------------------
-   
-   
-    
-    /**
-     * Utility method APulseShapePlot.plotRealPulseShapes() is called from
-     * here.
-     * Physics pulse is calculated here: getPhysicsPulseShape().
-     * This method is called from APickInteraction via ACalorimeterData
-     * which defines abstract plotPulseShapes().
-     * Method more or less copied & pasted from ATILEData, but here is 
-     * for just one channel.
-     *
-     * @param index int
-     */
-    public void plotPulseShapes(int index)
-    {
-        if(pulseShapesDataAvailable)
-        {
-            String title = CALORIMETER_NAME + " cell index: " + index;
-
-            // one channel for MBTS
-            int[][] adcCountsLocal = new int[][] { adcCounts[index] };
-
-            if(super.checkADCCountsAvailability(adcCountsLocal))
-            {
-                // adc counts are available
-                logger.debug(CALORIMETER_NAME + " adc counts (digits) are " +
-                             "available for pulse shapes plots for this cell.");
-            }
-            else
-            {
-                AOutput.append("\nADC counts are not available for this cell, " +
-                               "can't plot pulse shapes.", ALogInterface.WARNING);
-                return;
-            }
-            
-
-            // step - starting from 1, need to get step numbers within
-            // number of ADC samples (adcCounts[0].length)
-            double step = (adcCounts[0].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-            double[][] realPulse = new double[1][NUMBER_OF_LOOKUP_VALUES]; // 1 channel
-            double d = 1.0;
-            
-            // by zdenek 2008-12-02
-            // DPD (slimed version of ESD) sometimes don't have cellPedestal
-            // for a cell (the tag exists, values are there, but are 0). check
-            // if pedestal is 0 and if so, take as pedestal value the first
-            // adc count digit
-            float cellPedestalLocal = cellPedestal[index]; 
-            if(cellPedestalLocal == 0.0f)
-            {
-                logger.debug("MBTS cellPedestal is not available (i.e. " +
-                             "are 0.0f), using first adcCount digit as pedestal.");
-                cellPedestalLocal = adcCounts[index][0];
-            }            
-            
-            try
-            {
-                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-                {
-                    d += step;
-                    realPulse[0][i] =
-                        this.getPhysicsPulseShape(d, cellRawTime[index],
-                                             cellPedestalLocal,
-                        		             cellRawAmplitude[index],
-                                             ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                                             ACalorimeterRPSPLT.TILE_TIME);
-                }
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-                return;
-            }
-
-            APulseShapePlot.plotRealPulseShapes(adcCountsLocal, realPulse,
-                                                step, null, title);
-        }
-        else
-        {
-        	logger.warn(CALORIMETER_NAME + " plotPulseShapes() method called, " +
-        			    "but data is not available.");
-            return;
-        }
-
-    } // plotPulseShapes() --------------------------------------------------
-    
-     
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMDTData.java b/graphics/AtlantisJava/src/atlantis/data/AMDTData.java
deleted file mode 100755
index 0074b2c5a161..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMDTData.java
+++ /dev/null
@@ -1,338 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-public class AMDTData extends AMuonHitData
-{
-    protected float[] driftR;
-    protected float[] length;
-    private static final int BARREL = 1;
-
-    private static ALogger logger = ALogger.getLogger(AMDTData.class);
-
-    public String getParameterGroup()
-    {
-        return "MDT";
-    }
-
-    public String getName()
-    {
-        return "MDT";
-    }
-
-    public String getNameScreenName()
-    {
-        return "MDT";
-    }
-
-    AMDTData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        driftR = p.getFloatArray("driftR");
-        length = p.getFloatArray("length");
-        // removed the fudge (CT 27/7/2004), and replaced with another
-        // for(int i=0; i<numData; i++)
-        // driftR[i]*=500./700.;
-        for (int i = 0; i < numData; i++)
-            if (driftR[i] > 1.46)
-                driftR[i] = (float) 1.46; // don't go out of the drifttube !
-    }
-
-    protected int getStation(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(1) == 'I') {
-                return 0;
-            } else if (stationName.charAt(1) == 'E') {
-                return 1;
-            } else if (stationName.charAt(1) == 'M') {
-                return 2;
-            } else if (stationName.charAt(1) == 'O') {
-                return 3;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding MDT identifier", e);
-        }
-        
-        return 0;
-    }
-
-    protected int getSub(int index)
-    {
-        try {
-            if (AIdHelper.stationName(id[index]).charAt(0) == 'B') {
-                return 1;
-            } else if (AIdHelper.stationEta(id[index]) < 0) {
-                return 0;
-            } else {
-                return 2;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding MDT identifier", e);
-        }
-        
-        return 1;
-    }
-
-    public int getSector(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(2) == 'L') {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1);
-            } else {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1) + 1;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding MDT identifier", e);
-        }
-        
-        return 0;
-    }
-
-    protected boolean getMeasuresPhi(int index)
-    {
-        return false;
-    }
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        if (parameterStore.get("CutsATLAS", "CutPhi").getStatus())
-            cutPhi(phi, getDPhi());
-        cutEta(rho, z);
-    }
-
-    // used to make phi cut
-
-    private float[] getDPhi()
-    {
-        // only roughly correct for some special sectors
-        // must create all
-        float[] dphi = new float[numData];
-
-        // need only fill for those in draw list
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            dphi[list] = (float) Math.abs(Math.atan2(length[list] / 2., rho[list]));
-        }
-        return dphi;
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.RHO+" = "+String.format("%.3f",rho[index])+"\n "+
-        "z = " + String.format("%.3f",z[index]) + " cm\n"+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        String temp = getNameScreenName() + " (id: " + identifier[index] +
-                      " index: " + index + ")\n " +
-                      AMath.RHO + " = " + String.format("%.3f",rho[index]) + " cm" + "\n " +
-                      AMath.PHI + " = " + String.format("%.3f",Math.toDegrees(phi[index])) +
-                      AMath.DEGREES + "  (" + String.format("%.3f",phi[index]) + " rad)\n " +
-                      "z = " + String.format("%.3f",z[index]) + " cm\n " +
-                      "driftR = " + String.format("%.3f",driftR[index]) + " cm";
-        if (sector[index] != -1)
-        {
-            temp += "\n sector = " + sector[index];
-        }
-
-        return temp;
-    }
-
-    private void makeDrawListYX()
-    {
-        int mode = parameterStore.get("YX", "Mode").getI();
-
-        if (mode > 0 && mode < 5)
-        {
-            numDraw = 0;
-        }
-        else
-        {
-            makeDrawList();
-            if (mode == 0)
-                cut(" Barrel ", sub, "==", BARREL);
-            else
-            {
-                cut(" Endcaps", sub, "!=", BARREL);
-                cut(" Station", station, "==", mode - 5);
-            }
-        }
-    }
-
-    private void makeDrawListFZ()
-    {
-        int mode = parameterStore.get("FZ", "Mode").getI();
-
-        if (mode > 0 && mode < 4)
-        {
-            numDraw = 0;
-        }
-        else
-        {
-            makeDrawList();
-            if (mode == 0)
-                cut(" Endcaps", sub, "!=", BARREL);
-            else
-            {
-                cut(" Barrel ", sub, "==", BARREL);
-                if (mode == 4)
-                    cut(" Station", station, "<=", mode - 3);
-                else
-                    cut(" Station", station, "==", mode - 3);
-            }
-        }
-    }
-
-    protected ACoord getYXUser()
-    {
-        return getYXUser(0);
-    }
-
-    private ACoord getYXUser(int flag)
-    {
-        makeDrawListYX();
-        int numPieces = 13;
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double r = rho[list];
-            double cosPhi = Math.cos(phi[list]);
-            double sinPhi = Math.sin(phi[list]);
-            double phiM = Math.rint(phi[list] / AMath.PI_BY_8) * AMath.PI_BY_8;
-            double cosPhiM = Math.cos(phiM);
-            double sinPhiM = Math.sin(phiM);
-            double d = length[list] / 2.;
-            double x = r * cosPhi;
-            double y = r * sinPhi;
-
-            hv[0][i] = AMath.splitLineIntoPieces(new double[] { x + d * sinPhiM, x - d * sinPhiM }, numPieces);
-            hv[1][i] = AMath.splitLineIntoPieces(new double[] { y - d * cosPhiM, y + d * cosPhiM }, numPieces);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-
-    protected ACoord getFRUser()
-    {
-        return getYXUser(1).convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        int[] sign = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            double phiDiff = Math.abs(phi[listdl[i]] - phiMid);
-
-            sign[i] = -1;
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign[i] = 1;
-        }
-        return getXZRZUser(sign);
-    }
-
-    protected ACoord getXZUser()
-    {
-        makeDrawList();
-        cutMuonSector(sector);
-        int[] sign = new int[numDraw];
-        int sect=(int)Math.round(parameterStore.get("XZ", "Phi").getD() / 22.5);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            sign[i] = 1;
-            if (sector[listdl[i]] != sect)
-                sign[i] = -1;
-        }
-        return getXZRZUser(sign);
-    }
-
-    protected ACoord getXZRZUser(int[] sign)
-    {
-        // int muonMode=APar.get("Data.MDT").getI();
-        int muonMode = parameterStore.get("MDT", "Mode").getI();
-        int numPoints;
-
-        if (muonMode == 0) // circles
-            numPoints = 48;
-        else
-            numPoints = 2; // lines
-
-        double[][][] hv = new double[2][numDraw][numPoints];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double rC = sign[i] * getSectorRho(sector[list], rho[list], phi[list]);
-            double zC = z[list];
-            double d = driftR[list];
-
-            if (muonMode == 0)
-            { // circles
-                for (int j = 0; j < numPoints; j++)
-                {
-                    hv[0][i][j] = zC + d * Math.cos(Math.PI * 2 * j / (numPoints - 1));
-                    hv[1][i][j] = rC + d * Math.sin(Math.PI * 2 * j / (numPoints - 1));
-                }
-            }
-            else
-            { // lines
-                double radius = Math.sqrt(rC * rC + zC * zC);
-                double sinTheta = rC / radius;
-                double cosTheta = zC / radius;
-
-                hv[0][i][0] = zC + d * sinTheta;
-                hv[1][i][0] = rC - d * cosTheta;
-                hv[0][i][1] = zC - d * sinTheta;
-                hv[1][i][1] = rC + d * cosTheta;
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-
-    protected ACoord getFZUser()
-    {
-        makeDrawListFZ();
-        double[][][] hv = new double[2][numDraw][2];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            index[i] = list;
-            hv[0][i][0] = z[list];
-            hv[0][i][1] = z[list];
-            double deltaPhi = Math.atan2(length[list] / 2., rho[list]);
-
-            hv[1][i][0] = Math.toDegrees(phi[list] - deltaPhi);
-            hv[1][i][1] = Math.toDegrees(phi[list] + deltaPhi);
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES).includePhiWrapAround("FZ");
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMuonData.java b/graphics/AtlantisJava/src/atlantis/data/AMuonData.java
deleted file mode 100755
index 368a6a039886..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMuonData.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.A4Vector;
-
-/**
- * Reconstructed Muon
- */
-public class AMuonData extends AHelixAODData
-{
-    private float[] chi2;
-
-    AMuonData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        chi2=p.getFloatArray("chi2");
-    }
-
-    public String getParameterGroup()
-    {
-        return "Muon";
-    }
-
-    public float getchi2(int index)
-    {
-        return chi2[index];
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A4Vector start = new A4Vector();
-            start.setPtEtaPhiM(pT[k],eta[k],phi[k],0.1057);
-            sum.add(start);
-        }
-
-        return sum;
-    }
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsObjects", "MuonPt", " |ET|", pT);
-        cut("CutsObjects", "Muonchi2", " |chi2|", chi2);
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-        msg.append("\n chi2 = ");
-        msg.append(chi2[index]);
-
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMuonHitData.java b/graphics/AtlantisJava/src/atlantis/data/AMuonHitData.java
deleted file mode 100644
index 85717f5fa904..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMuonHitData.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.*;
-import atlantis.parameters.*;
-
-public abstract class AMuonHitData extends AHitData {
-
-  protected float[] rho;
-  protected float[] phi;
-  protected float[] x;
-  protected float[] y;
-  protected float[] z;
-  protected int[] sector;
-  protected int[] station;
-  protected boolean[] measuresPhi;
-
-  public static final int DOES_NOT_MEASURE_PHI=0;
-  public static final int MEASURES_PHI=1;
-  
-  // remove when go to compact id ( if compact id was in a sensible form)
-  String[] identifier;
-
-  AMuonHitData(AHashMap p, AEvent e) {
-    super(p,e);
-    x=p.getFloatArray("x");
-    y=p.getFloatArray("y");
-    z=p.getFloatArray("z");
-    rho=new float[numData];
-    phi=new float[numData];
-    for(int i=0; i<numData; ++i) {
-      rho[i]=(float)Math.sqrt(x[i]*x[i]+y[i]*y[i]);
-      phi[i]=(float)Math.atan2(y[i], x[i]);
-      if(phi[i]<0.) phi[i]+=AMath.TWO_PI;
-    }
-    identifier=p.getStringArray("identifier");
-    station=new int[numData];
-    sector=new int[numData];
-    measuresPhi=new boolean[numData];
-    for(int i=0; i<numData; ++i) {
-      // should be moved to AHitData
-      sub[i]=getSub(i);
-      sector[i]=getSector(i);
-      station[i]=getStation(i);
-      measuresPhi[i]=getMeasuresPhi(i);
-    }
-  }
-
-  /**
-   * Get the name used for associating this datatype/collection. For the 
-   * muon hits no storegate key is used.
-   * @return 
-   */
-  public String getFullName() {
-    return getName();
-  }
-
-  protected int internalColor()
-  {
-      int numColorTypes = super.internalColor();
-      int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-      if(colorFunction == numColorTypes + 1) // colour by Track Segment
-      {
-          colorBy(getSegments());
-      }
-      return numColorTypes + 1;
-
-  } // internalColor() ----------------------------------------------------
-
-
-  abstract protected int getStation(int index);
-
-  abstract public int getSector(int index);
-
-  abstract protected int getSub(int index);
-
-  abstract protected boolean getMeasuresPhi(int index);
-
-  protected String getSegments() {
-      AEnumeratorParameter key = (AEnumeratorParameter) parameterStore.get("MuonSegment", "MuonSegmentCollections");
-
-      return "MuonSegment" + key.getCurrentText();
-  }
-
-  public int getRZSign(int index) {
-    double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-    double phiDiff=Math.abs(phi[index]-phiMid);
-
-    int sign=-1;
-    if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-      sign=1;
-    return sign;
-  }
-
-  protected String getReconstructedTracks() {
-    AData tracks = event.getTrackData("MuonTrack");
-    if (tracks == null) {
-        return null;
-    } else {
-        return tracks.getName() + tracks.getStoreGateKey();
-    }
-  }
-
-  // get the distance of closest approach of the inifinite line representing the
-  // drift tube axis to Z axis
-  // Normal this is rho of the hit, but need not be for non standard modules
-  // (e.g. near feet)
-   static double getSectorRho(int sector, double rho, double phi) {
-    return rho*Math.abs(Math.cos(phi-sector*AMath.PI_BY_8));
-  }
-
-  protected void applyCuts() {
-    cutIndex();
-    cutSimulatedTracks();
-    cutReconstructedTracks();
-    cutSegments();
-  }
-
-  // keep only muon hits in the input muon sectors
-  protected void cutMuonSector(int[] sector) {
-    AParameter p=parameterStore.get("XZ", "Phi");
-
-    // display muon data when phi is in the middle of a sector
-    if(p.getD() % 22.5 < 1e-2) {
-      int sect=(int)Math.round((p.getD() % 360.) / 22.5);
-
-      int num=0;
-
-      for(int i=0; i<numDraw; i++) {
-        int s=sector[listdl[i]];
-
-        if(s==sect||s==sect-8||s==sect+8)
-          listdl[num++]=listdl[i];
-      }
-      numDraw=num;
-    } else {
-      numDraw=0;
-    }
-  }
-
-  public String getHitInfo(int index)
-  {
-  	int simpleOutput = AGlobals.instance().getSimpleOutput();
-	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-    AMath.RHO+" = "+String.format("%.3f",rho[index])+"\n "+
-    "z = " + String.format("%.3f",z[index]) + "cm\n"+
-    AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-      
-    String temp = getNameScreenName() + " (id: " + identifier[index] + " index: " + index + ")" +
-                  "\n " + AMath.RHO + " = " + String.format("%.3f",rho[index]) + " cm" +
-                  "\n " + AMath.PHI + " = " + String.format("%.3f",Math.toDegrees(phi[index])) +
-                  AMath.DEGREES + "  (" + String.format("%.3f",phi[index]) + " rad)" +
-                  "\n z = " + String.format("%.3f",z[index]) + " cm";
-
-    if(sector[index]!=-1)
-    {
-        temp += "\n sector = " + sector[index];
-    }
-
-    return temp;
-  }
-
-  protected void setType() { //What is this doing??
-    int[][] recon=event.getAssociationManager().get(getName(),getReconstructedTracks());
-    for(int i=0; i<numData; i++) {
-      if( (recon!=null&&recon[i]!=null))
-        type[i]=1;
-      else
-        type[i]=0;
-    }
-  }
-
-  /**
-   * cut hits if connected/unconnected to reconstructed tracks
-   */
-  protected void cutReconstructedTracks()
-  {
-      int cutOption = parameterStore.get("CutsMuon", "HitsByRTr").getI();
-      cutByAssociationTo(getReconstructedTracks(), getName(), cutOption);
-  }
-  
-  /**
-   * cut hits if connected/unconnected to reconstructed segments
-   */
-  protected void cutSegments()
-  {
-      int cutOption = parameterStore.get("CutsMuon", "HitsBySegment").getI();
-      cutByAssociationTo(getSegments(), getName(), cutOption);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMuonROIData.java b/graphics/AtlantisJava/src/atlantis/data/AMuonROIData.java
deleted file mode 100755
index 567f2f9cf5ab..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMuonROIData.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-
-/**
- *
- * Muon Region Of Interest
- *
- * @author Zdenek Maxa, Qiang Lu, Juergen Thomas
- */
-public class AMuonROIData extends AROIData
-{
-    AMuonROIData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-    } // AMuonROIData() ------------------------------------------------------
-
-    public String getParameterGroup()
-    {
-        return "MuonROI";
-    } // getParameterGroup() ------------------------------------------------
-
-    public String getName()
-    {
-        return "MuonROI";
-    } // getName() ----------------------------------------------------------
-
-    public String getNameScreenName()
-    {
-        return "MuonROI";
-    } // getNameScreenName() ------------------------------------------------
-
-} // class AMuonROIData ======================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMuonSegmentData.java b/graphics/AtlantisJava/src/atlantis/data/AMuonSegmentData.java
deleted file mode 100755
index 96adc598bcf4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMuonSegmentData.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AHashMap;
-
-/**
- *
- * @author Eric Jansen
- */
-public class AMuonSegmentData extends ASegmentData {
-    
-    /** Creates a new instance of AMuonSegmentData */
-    AMuonSegmentData(AHashMap p, AEvent e) {
-        super(p,e);
-        String assocKey = getName() + getStoreGateKey();
-        event.getAssociationManager().add(new AAssociation(assocKey, "MDT", numHits, hits, event));
-        event.getAssociationManager().add(new AAssociation(assocKey, "RPC", numHits, hits, event));
-        event.getAssociationManager().add(new AAssociation(assocKey, "TGC", numHits, hits, event));
-        event.getAssociationManager().add(new AAssociation(assocKey, "CSC", numHits, hits, event));
-    }
-
-    public void makeDrawList() {
-        super.makeDrawList();
-
-        if (currentProjection instanceof AProjectionYX) {
-            if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) {
-                numDraw = 0;
-            } else {
-                int num = 0;
-                for (int i=0; i<numDraw; i++) {
-                    int j = listdl[i];
-                    
-                    // Anything beyond z=13m or below r=6.5m is endcap
-                    if (Math.sqrt(x[j]*x[j] + y[j]*y[j]) > 650.
-                            && Math.abs(z[j]) < 1300.) {
-                        listdl[num++] = j;
-                    }
-                }
-                numDraw = num;
-            }
-        }
-    }
-
-    public String getParameterGroup() {
-        return "MuonSegment";
-    }
-    
-    public String getName() {
-        return "MuonSegment";
-    }
-    
-    public String getNameScreenName() {
-        return "MuonSegment";
-    }    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AMuonTrackData.java b/graphics/AtlantisJava/src/atlantis/data/AMuonTrackData.java
deleted file mode 100644
index cd768ea2a38d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AMuonTrackData.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-
-
-/**
- *
- * @author Eric Jansen
- */
-public class AMuonTrackData extends ATrackData {
-
-    private static ALogger logger = ALogger.getLogger(AMuonTrackData.class);
-    
-    protected float[] phi0;
-    protected float[] pT;
-    protected float[] cotTheta;
-    protected int[] author;
-
-    /** Creates a new instance of AMuonTrackData */
-    AMuonTrackData(AHashMap p, AEvent e) throws AAtlantisException {
-        super(p,e);
-	String assocKey = getName() + getStoreGateKey();    
-        if(p.get("numHits") != null) {
-            int[] numHits = p.getIntArray("numHits");
-            int[] hits = p.getIntArray("hits");
-
-            event.getAssociationManager().add(new AAssociation(assocKey, "MDT", numHits, hits,event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "RPC", numHits, hits,event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "TGC", numHits, hits,event));
-            event.getAssociationManager().add(new AAssociation(assocKey, "CSC", numHits, hits,event));
-        }
-
-        phi0 = p.getFloatArray("phi0");
-        pT = p.getFloatArray("pt");
-        cotTheta = p.getFloatArray("cotTheta");
-	author = p.getUnsureIntArray("trackAuthor");
-    }
-
-    public String getParameterGroup() {
-        return "MuonTrack";
-    }
-
-    public String getName() {
-        return "MuonTrack";
-    }
-
-    public String getNameScreenName() {
-        return "MuonTrack";
-    }
-
-    protected void finalizeConstruction() {
-        super.finalizeConstruction();
-/*
-        // needs ZVTx
-        h = new AHelix[numData];
-        for(int i = 0; i < numData; ++i) {
-            double p = AMath.getPFromPttL(pT[i], cotTheta[i]);
-            double xVtx = parameterStore.get("Event", "XVtx").getD();
-            double yVtx = parameterStore.get("Event", "YVtx").getD();
-            double phiVtx = Math.atan2(yVtx, xVtx);
-            double rho = Math.sqrt(xVtx * xVtx + yVtx * yVtx);
-            double d0 = -rho * Math.sin(phi0[i] - phiVtx);
-            // correct for average energy loss
-            double pTCorrected = pT[i] * (p + 3.7) / p;
-
-            h[i] = new AHelix((float)d0,
-                    (float)(parameterStore.get("Event", "ZVtx").getD()),
-                    (float)Math.toDegrees(phi0[i]), cotTheta[i], (float)pTCorrected);
-            //calculatePhiCorrection(i);
-        }
-*/
-    }
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP 
-                && parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() != DRAW_NEWHELIX)
-        {
-            ag.draw(window.calculateDisplay(getVPUser(window, projection)));
-        }
-        else
-            super.draw(window, ag, projection);
-    }
-
-    protected ACoord getVPUser(AWindow window, AProjection projection)
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2*numDraw][];
-        int[] index = new int[2 * numDraw];
-        int num = 0;
-        for (int j=0; j<numDraw; j++) {
-            int list = listdl[j];
-            ADHelix dhelix = new ADHelix(h[list]);
-            double s1 = dhelix.getAStart();
-            double s2 = 179.;
-            // hardwire projection.getMinRho() == 2. for now
-            s1 = dhelix.intersectWithRadialCylinder(((AProjection2D)projection).getMinRho(), s1, s2);
-            double sEnd = dhelix.intersectWithCylinder(true, AProjectionVP.getRhoVPlot(),
-                    true, AProjectionVP.getZVPlot());
-            s2 = Math.max(Math.min(s2, sEnd), s1);
-            // if the whole helix is to be drawn (which are unusual
-            // helices, shorten it a little to avoid wraparound problems
-            if (s1 == 0. && s2 == 180.) s2 = 179.;
-
-            if (parameterStore.get("VP", "ShortV").getStatus() && !parameterStore.get("Data", "S3D").getStatus()) {
-                s1 = s2 - parameterStore.get("VP", "ShortV").getD() * (s2 - s1);
-            }
-
-            // by Zdenek:
-            // if this condition is not entered, hv array containing coordinates
-            // remains empty and Atlantis will crash with NullPointerException
-            // in AWindow.calculateUser(ACoord user)
-            // magic constants here (e.g. s2) need to be understood and this
-            // method best reimplemented
-            for(int sign=-1; sign<=1; sign+=2) {
-                // ugly must change structure at some point
-                AProjectionVP.sign = sign;
-                ACoord pointsOnHelix;
-                if (s2 > s1) {
-                    pointsOnHelix = dhelix.drawHelix(window, (AProjection2D) projection, s1, s2);
-                    hv[0][num] = pointsOnHelix.hv[0][0];
-                    hv[1][num] = pointsOnHelix.hv[1][0];
-                } else {
-                    hv[0][num] = new double[0];
-                    hv[1][num] = new double[0];
-                }
-                index[num] = list;
-                num++;
-            }
-        }
-
-        // by Zdenek:
-        // condition to prevent NullPointerException in AWindow.calculateUser()
-        // see previous comment ...
-        // this condition should be removed completely 'bug in helix'
-        // problem is understood
-        ACoord coord = null;
-        if(hv[0].length > 0 && hv[0][0] == null)
-        {
-            logger.warn("AMuonTrackData.getVPUser(): \"" + this.getName() +
-                 ":" + this.getStoreGateKey() + "\" can't be drawn in eta-phi");
-            coord = ACoord.NO_DATA;
-        }
-        else
-        {
-            coord = new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-        }
-        return window.calculateUser(coord).includePhiWrapAround(projection.getName());
-    }
-
-
-
-    private float[] getEta()
-    {
-        float[] eta = new float[numData];
-        if(polylinedTrack)
-        {
-            for(int i = 0; i < numData; i++)
-            {
-                if(h!=null && h[i]!=null) eta[i] = (float) h[i].eta();
-            	else eta[i] = (float) AParameterUtilities.eta(z[i][0], rho[i][0]);
-            }
-        }
-        else
-        {
-            for(int i = 0; i < numData; i++)
-            {
-                eta[i] = (float) h[i].eta();
-            }
-
-        }
-
-        return eta;
-    }
-
-
-
-    protected void applyCuts() {
-        cutIndex();
-        cut("CutsInDet", "Pt", " |Pt|", pT);
-	cut("CutsMuon", "Pt", " |Pt|", pT);
-	cut("CutsInDet",  "trackAuthor", " Author", author);
-        cutPhi(phi0);
-        if(parameterStore.get("CutsATLAS", "CutEta").getStatus())
-        {
-            cutEta(getEta());
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AOldHelix.java b/graphics/AtlantisJava/src/atlantis/data/AOldHelix.java
deleted file mode 100755
index a3f490c57170..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AOldHelix.java
+++ /dev/null
@@ -1,338 +0,0 @@
-package atlantis.data;
-
-import atlantis.globals.AGlobals;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.utils.AMath;
-import atlantis.utils.A3Vector;
-import atlantis.utils.ALogger;
-
-import static java.lang.Math.PI;
-
-/**
- * This is a convenience class to group together the six helix parameters.
- */
-public class AOldHelix {
-
-  private final static ALogger logger = ALogger.getLogger(AOldHelix.class);
-
-  private static final int SIZE=5;
-  private static final boolean DEBUG = false;
-  private static final APar parameterStore = APar.instance();
-  // C - constant depending on the magnetic field, constant proportional
-  // to curvature in the magnetic field
-  private static final double C;
-  static {
-	  AParameter curvatureParameter = parameterStore.get("Event", "Curvature");
-	  if (curvatureParameter!=null) {
-		  C = curvatureParameter.getD();
-	  }
-	  else {
-		  C = 100/0.6;;
-		  logger.error("Curvature parameter not found, defaulting to "+C);
-	  }
-  }
-  
-  // These fields are public but final so cannot be altered.
-  /** Distance between circle and (0,0) at point of closest approach (PCA). */
-  public final double d0;
-  /** Z of circle at PCA. */
-  public final double z0;
-  /** phi0 of track at PCA [degrees] */
-  public final double phi0;
-  /** Dip of track = Pz/pTTrack =0.5 * ( E - 1/E ) : constant along the helix */
-  public final double tL;
-  /** Transverse momentum * charge. */
-  public final double pT;
-  /** ln( Pz/pTTrack + SQRT[(Pz/pTTrack)**2 +1 ] */
-  public final double eta;
-  /** Angle between (0,0) and vertex as seen from the circle center [degrees]?
-   *  For helices starting at PCA, startPhi=0. This is the case for reconstructed
-   *  helices that are not yet associated to a secondary vertex or are
-   *  drawn to PCA.
-   *  Mutable because it is changed when tracks are used to fit a vertex. */
-  double startPhi;
-
-  // negative end vertex means none exits
-  double rhoVertex = 0.0;
-  private double rhoEndVertex = -1.0;
-
-  private int numHits;
-
-  double[][] cov=null;
-  
-  AOldHelix() {
-      this(0, 0, 0, 0, 0);
-  };
-  
-  /** Standard Helix constructor without end vertex */
-  AOldHelix(float rhoVertex, float phiVertex, float zVertex,
-      float pTTrack, float phiTrack, float etaTrack, int charge ) {
-	  this(rhoVertex,phiVertex,zVertex,pTTrack,phiTrack,etaTrack,charge,-1);
-  }
-  
-  /**
-   * Standard Helix constructor with end vertex.
-   * 
-   * Note: this method is not called when creating helix representation of
-   * reconstructed InDet tracks, but is called for simulated InDet tracks.
-   *
-   * @param rhoVertex rho of vertex from which track starts
-   * @param phiVertex phi of vertex from which track starts
-   * @param zVertex   Z of vertex from which track starts
-   * @param pTTrack   transverse track momentum > 0
-   * @param phiTrack  phi of track seen from vertex
-   * @param etaTrack  eta = -ln(tg(theta/2)),  theta = arctg(pTTrack/Pz) = 2*arctg( e**(-eta))
-   * @param charge    charge = +1 or -1
-   * @param rhoEndVertex
-   */
-  AOldHelix(float rhoVertex, float phiVertex, float zVertex,
-      float pTTrack, float phiTrack, float etaTrack, int charge, float rhoEndVertex ) {
-	  /*
-	   * Derived:
-	   *  rC = signed radius of circle (positive for positive particle, which
-	   *       loops in the clockwise direction in the standard xy projection,
-	   *       given that Bz is positive in the ATLAS solenoid)
-       *  xC = x position of center of circle
-       *  yC = y position of center of circle
-       *  E  = E**eta
-       *  charge=1 if icode>=0 else charge=-1
-       * 
-       * Calculation:
-       *  rC = C*pTTrack                            C = 100./0.6
-       *  xC = rhoVertex*cos(phiVertex) + rC*sin(phiTrack)
-       *  yC = rhoVertex*sin(phiVertex) - rC*cos(phiTrack)
-       *  tl = Pz/pTTrack = 0.5 * ( E - 1/E )
-       *  d0 = rC - sqrt(xC*xC + yC*yC)
-       *  startPhi = pi/2 - phiTrack + atan2(yC,xC)    modify startPhi to: -pi/2 < startPhi < pi/2
-       *  z0 = zVertex - rC*startPhi*tl
-       *  phi0 = phiTrack + startPhi
-       *  pCharge = charge*pTTrack
-       *  Change startPhi and phi0 from radians to degrees.
-       * 
-       */
-    double rC=C*pTTrack*charge;
-    if (DEBUG) logger.debug("AOldHelix: charge, rC = "+charge+", "+rC);
-    double xC=rhoVertex*Math.cos(phiVertex)+rC*Math.sin(phiTrack);
-    double yC=rhoVertex*Math.sin(phiVertex)-rC*Math.cos(phiTrack);
-    if (DEBUG) logger.debug("AOldHelix:  xCyC"+" "+xC+" "+yC);
-    double e=Math.exp(etaTrack);
-    tL=0.5*(e-1./e);
-    eta = etaTrack;
-    d0=rC-charge*Math.sqrt(xC*xC+yC*yC);
-    phiTrack = (float) AMath.nearestPhiRadians(phiTrack);
-    double temp=Math.atan2(yC, xC);
-    temp = AMath.nearestPhiRadians(temp);
-    double startPhiRad=charge*(PI/2)-phiTrack+temp;
-    startPhiRad = AMath.nearestPhiRadians(startPhiRad, 0);
-    z0=zVertex-rC*startPhiRad*tL;
-    phi0=Math.toDegrees(phiTrack+startPhiRad);
-    startPhi=charge*Math.toDegrees(startPhiRad);
-    pT=charge*pTTrack;
-
-    // keep rhoEndVertex for simulated tracks with a daughter
-    this.rhoVertex=rhoVertex;
-    this.rhoEndVertex = rhoEndVertex;
-  }
-
-  /**
-   * Construct AOldHelix object.
-   * @param d0
-   * @param z0
-   * @param phi0 [degrees]
-   * @param tL
-   * @param pT
-   */
-  AOldHelix(float d0, float z0, float phi0,
-      float tL, float pT) {
-    this.d0=d0;
-    this.z0=z0;
-    this.phi0=AMath.nearestPhiDegrees(phi0);
-    this.tL=tL;
-    this.eta = calculateEta(this.tL);
-    this.pT=pT;
-    startPhi=0.;
-  }
-
-  AOldHelix(float d0, float z0, float phi0,
-      float tL, float pT, int numHits) {
-    this(d0, z0, phi0, tL, pT);
-    this.numHits=numHits;
-  }
-
-  AOldHelix(float d0, float z0, float phi0,
-      float tL, float pT, float[][] c) {
-    this.d0=d0;
-    this.z0=z0;
-    this.phi0=phi0;
-    this.tL=tL;
-    this.eta = calculateEta(this.tL);
-    this.pT=pT;
-    this.startPhi=0.;
-
-    cov=new double[c.length][];
-    if(c.length!=SIZE)
-      logger.error("Helix error "+c.length);
-    for(int i=0; i<c.length; ++i) {
-      if(c[i].length!=SIZE)
-        logger.error("Helix error "+c.length);
-      cov[i]=new double[c[i].length];
-    }
-    for(int i=0; i<c.length; ++i)
-      for(int j=0; j<c[i].length; ++j)
-        cov[i][j]=c[i][j];
-  }
-
-  AOldHelix(float d0, float z0, float phi0,
-      float tL, float pT, int numHits, float[][] c) {
-    this(d0, z0, phi0, tL, pT, c);
-    this.numHits=numHits;
-  }
-
-  public double[] getPar() {
-    return new double[] {d0, z0, Math.toRadians(phi0), tL, 1./pT};
-  }
-
-  public double[][] getCov() {
-    return cov;
-  }
-
-  public double getRhoEndVertex(){
-      return rhoEndVertex;
-  }
-  
-/**
- * Set Phi start so that the track will originate from the point on the
- * reconstructed track in the YX plane which is closest to the point (Vx,Vy).
- * Only used when drawing tracks originating from a reconstructed vertex.
- */
-  public void setPhiStartByXYPoint(double Vx, double Vy) {
-    //construct a local super object to get the xC and yC numbers
-    ADHelix Dh=new ADHelix(this);
-    // do the calculation to find the starting angle
-    double Xc=Dh.getxC();
-    double Yc=Dh.getyC();
-
-    double a=-1.*(Vx-Xc);
-    double b=-1.*(Vy-Yc);
-
-    double pTTrack=pT;
-    double phiTrack=Math.toRadians(phi0);
-
-    double charge=1;
-    if(pTTrack<0.0) charge=-1.;
-
-    double temp=Math.atan2(b, a);
-    temp = AMath.nearestPhiRadians(temp);
-    double sPhi=charge*(PI/2)-phiTrack+temp;
-    sPhi = AMath.nearestPhiRadians(sPhi, 0);
-    sPhi=charge*Math.toDegrees(sPhi);
-    startPhi=Math.abs(sPhi);
-  }
-
-  public String toString() {
-	   int simpleOutput = AGlobals.instance().getSimpleOutput();
-	   if(simpleOutput>0){
-  		String output = "";
-  		if(simpleOutput==1 || simpleOutput==3) 
-  			output+= "\n PT="+String.format("%.3f",Math.abs(pT))+" GeV\n "+
-  			AMath.ETA+" = "+String.format("%.3f",eta)+"\n "+
-  			AMath.PHI+" = "+String.format("%.3f",phi0)+AMath.DEGREES;
-      	if(simpleOutput==2 || simpleOutput==3)
-      		output+= "\n Px="+String.format("%.3f",Math.abs(pT)*Math.cos(Math.toRadians(phi0)))+" GeV "+
-      		"\n Py="+String.format("%.3f",Math.abs(pT)*Math.sin(Math.toRadians(phi0)))+" GeV "+
-      		"\n Pz="+String.format("%.3f",Math.abs(pT)*Math.sinh(eta))+" GeV "+
-      		"\n Charge = " + (int)(pT/Math.abs(pT));
-      	return output;
-  	  }
-  	
-    String s="";
-    double f=1.;
-
-    if(numHits>0)
-      s+="\n numHits = "+numHits;
-    // if(Math.abs(d0)<0.1) f=10000.;
-    s+="\n d0 = "+String.format("%.3f",f*d0);
-    if(cov!=null) s+=" "+AMath.PLUSMINUS+" "+String.format("%.3f",f*Math.sqrt(cov[0][0]));
-    if(f>100)
-      s+=" um";
-    else
-      s+=" cm";
-    f=1.;
-    // if(Math.abs(z0)<0.1) f=10000.;
-    s+="\n z0 = "+String.format("%.3f",f*z0);
-    if(cov!=null) s+=" "+AMath.PLUSMINUS+" "+String.format("%.3f",Math.sqrt(f*cov[1][1]));
-    if(f>100)
-      s+=" um";
-    else
-      s+=" cm";
-  
-    double zVtx = parameterStore.get("Event", "ZVtx").getD();
-    //if(Math.abs(z0-zVtx) < 0.1) f=10000.;
-    s+="\n |z0-zVtx| = "+String.format("%.3f",f*Math.abs(z0-zVtx));
-    if(f>100)
-      s+=" um";
-    else
-      s+=" cm";
-    
-    s+="\n phi0 = "+String.format("%.3f",phi0);
-    if(cov!=null)
-    {
-        s += " " + AMath.PLUSMINUS + " " +
-        String.format("%.3f",Math.toDegrees(Math.sqrt(cov[2][2]))) +
-            AMath.DEGREES;
-    }
-    else
-    {
-        s += AMath.DEGREES;
-
-    }
-    s+= "  (" + String.format("%.3f",Math.toRadians(phi0));
-    if(cov != null)
-    {
-        s += " " + AMath.PLUSMINUS + " " +
-        String.format("%.3f",Math.toRadians(Math.sqrt(cov[2][2]))) + " rad)";
-    }
-    else
-    {
-        s += " rad)";
-    }
-
-    s+="\n "+AMath.ETA+" = "+String.format("%.3f",eta);
-    if(cov!=null) {
-      // based on the relation between eta and ctgTheta
-      double etaError = Math.sqrt(cov[3][3] / (tL * tL + 1.0));
-      s+=" "+AMath.PLUSMINUS+" "+String.format("%.3f",etaError);
-    }
-    s+="\n tL = "+String.format("%.3f",tL);
-    if(cov!=null) s+=" "+AMath.PLUSMINUS+" "+String.format("%.3f",Math.sqrt(cov[3][3]));
-    s+="\n pT = "+String.format("%.2f",pT) + " GeV";
-    if(cov!=null) {
-      double sigmaPt=Math.abs(1./(Math.abs(1./pT)+Math.sqrt(cov[4][4]))-Math.abs(pT));
-
-      s+=" "+AMath.PLUSMINUS+" "+String.format("%.3f",sigmaPt)+" GeV";
-    }
-    if(pT<0.)
-      s+="\n p  = "+String.format("%.2f",-AMath.getPFromPttL(pT,tL));
-    else
-      s+="\n p  = "+String.format("%.2f",AMath.getPFromPttL(pT,tL));
-    s+= " GeV";
-    
-    return s;
-  }
-
-  public A3Vector getP() {
-    double pTrans=Math.abs(pT);
-    double phi=Math.toRadians(phi0);
-    return new A3Vector(pTrans*Math.cos(phi), pTrans*Math.sin(phi), pTrans*tL);
-  }
-
-  /** eta = -ln(tg theta/2), so eta = -ln(sqrt(ctgtheta*ctgtheta+1)-ctgtheta) */
-  private static double calculateEta(double ctgTheta) {
-    double eta;
-    eta = -Math.log(Math.sqrt(ctgTheta * ctgTheta + 1.0) - ctgTheta);
-    return eta;
-  }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/APDGTable.java b/graphics/AtlantisJava/src/atlantis/data/APDGTable.java
deleted file mode 100755
index 5fde73d31361..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/APDGTable.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package atlantis.data;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import atlantis.utils.xml.*;
-import java.util.*;
-import java.io.File;
-import java.io.InputStream;
-import org.w3c.dom.*;
-import javax.xml.parsers.*;
-
-/**
- * Read a PDG table from the file pdg.xml and provide 
- * basic accessor functions to its particles
- */
-public final class APDGTable {
-  
-  //The logger
-  private final static ALogger logger = ALogger.getLogger(APDGTable.class);
-
-  //Wether to validate the XML document
-  private final static boolean VALIDATION=true;
-  
-  //The particle table linked by PDG code
-  private final static Map<Integer, AParticle> particles = new HashMap<Integer, AParticle>(100);
-
-  //Always read in the Hashmap
-  static {
-    readPDG(APDGTable.getFileInCurrentUserThenAtlantisHome("configuration","pdg.xml"));
-  }
-
-  //Read in the PDG table from a file
-  private static void readPDG(String fileName) {
-    try {
-      DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
-
-      factory.setValidating(VALIDATION);
-      DocumentBuilder parser=factory.newDocumentBuilder();
-
-      parser.setErrorHandler(new AXMLErrorHandler());
-      InputStream is = AUtilities.getFileAsStream(fileName);
-      Node pdg=parser.parse(is).getDocumentElement();
-      NodeList particlesList=pdg.getChildNodes();
-      int particlesCount=particlesList.getLength();
-
-      for(int i=0; i<particlesCount; i++) {
-        Node particle=particlesList.item(i);
-
-        if(particle.getNodeType()==Node.ELEMENT_NODE) {
-          AParticle p=new AParticle(particle);
-
-          particles.put(new Integer(p.getCode()), p);
-        }
-      }
-    } catch(Exception e) {
-      logger.error("Failed reading PDG table", e);
-    }
-  }
-
-  public static int getCharge(int code) {
-    int sign=code/Math.abs(code);
-    AParticle p=particles.get(new Integer(Math.abs(code)));
-
-    if(p!=null)
-      return p.getCharge()*sign;
-    else throw new ParticleNotFoundError(code);
-  }
-
-  public static String getName(int code) {
-    AParticle p=particles.get(new Integer(Math.abs(code)));
-    int sign=1;
-
-    if(code<0) sign=-1;
-    if(p!=null)
-      return p.getName(sign);
-    else throw new ParticleNotFoundError(code);
-  }
-
-  public static int getParticleType(int code) {
-    AParticle p=particles.get(new Integer(Math.abs(code)));
-
-    if(p!=null)
-      return p.getType();
-    else throw new ParticleNotFoundError(code);
-  }
-  
-  //Declare our own error type here - no special implementation
-  public static class ParticleNotFoundError extends Error {
-  
-    //Only implement Error constructor with particle code
-    ParticleNotFoundError(int code){
-      super("Particle with code "+code+" not found in PDG table");
-    }
-  }
-
-public static String getFileInCurrentUserThenAtlantisHome(String directory, String name)
-{
-    File user = new File(name);
-    if (!user.canRead())
-    {
-        return AGlobals.instance().getHomeDirectory() + directory +
-        		System.getProperty("file.separator") + name;
-    }
-    return name;
-};
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AParticle.java b/graphics/AtlantisJava/src/atlantis/data/AParticle.java
deleted file mode 100755
index 8007ae2c46f0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AParticle.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package atlantis.data;
-
-
-import atlantis.output.AExceptionHandler;
-
-import org.w3c.dom.*;
-
-
-/**
- * This class is used to store the properties of a particle. Used by APDGTable.
- */
-public class AParticle {
-  private String name;
-  private int charge;
-  private int type;
-  private int code;
-
-  private String[] chargeRep=new String[] { "-", "0", "+"};
-
-  public AParticle(Node node) {
-    NamedNodeMap atts=node.getAttributes();
-
-    try {
-      charge=Integer.parseInt(atts.getNamedItem("charge").getNodeValue());
-      type=Integer.parseInt(atts.getNamedItem("type").getNodeValue());
-      code=Integer.parseInt(atts.getNamedItem("code").getNodeValue());
-      name=atts.getNamedItem("name").getNodeValue();
-    } catch(NumberFormatException e) {
-      AExceptionHandler.processException("PDG error in Particle Node: "+node, e);
-    }
-  }
-
-  public int getCharge() {
-    return charge;
-  }
-
-  public int getType() {
-    return type;
-  }
-
-  public int getCode() {
-    return code;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public String getName(int sign) {
-    if(charge!=0) {
-      if(name.equals("Proton")&&sign==1) return "Proton";
-      if(name.equals("Proton")&&sign==-1) return "Antiproton";
-      return name+chargeRep[charge*sign+1];
-    } else
-      return name;
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/APhotonData.java b/graphics/AtlantisJava/src/atlantis/data/APhotonData.java
deleted file mode 100755
index 7f942031f096..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/APhotonData.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package atlantis.data;
-
-import java.util.Vector;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.A4Vector;
-
-/**
- * Reconstructed Photon
- */
-public class APhotonData extends AAODData
-{
-	private enum isEMe { Tight, Loose, none }
-	
-    private int[] isEM;
-	
-    private Vector<Enum> isEMEnum = new Vector<Enum>();
-    private String[] label;
-
-    APhotonData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        String[] isEMString=p.getUnsureStringArray("isEMString");
-        label=p.getUnsureStringArray("label");
-        isEM=p.getUnsureIntArray("isEM");
-       
-        if(isEMString!=null)
-        {
-        	for(String s : isEMString)
-        	{
-        		try {
-        			isEMEnum.add(isEMe.valueOf(s));
-        		}
-        		catch(IllegalArgumentException q) {
-        			isEMEnum.add(isEMe.none);
-        		}
-        	}
-        }
-        else
-        {
-        	for(int i=0;i<numData;i++)
-        	{
-        		isEMEnum.add(isEMe.none);
-        	}
-        }
-    }
-
-    public String getParameterGroup()
-    {
-        return "Photon";
-    }
-
-    public String getName()
-    {
-        return "Photon";
-    }
-
-    public String getisEMEnum(int index)
-    {
-    	return isEMEnum.get(index).toString();
-    }
-    
-    public int getisEM(int index)
-    {
-        return isEM[index];
-    }
-    
-    public String getlabel(int index)
-    {
-        return label[index];
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A4Vector start = new A4Vector();
-            start.setPtEtaPhiM(pT[k],eta[k],phi[k],0);
-            sum.add(start);
-        }
-        return sum;
-    }
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsObjects", "PhotonPt", " |ET|", pT);
-        
-        // because of the retriever bug, currently 2048 means 0 for isEM
-        // remove this for block when the bug is fixed
-        if(isEM != null)
-        {
-            for(int i=0; i<isEM.length; i++)
-            {
-                if(isEM[i]==2048)
-                    isEM[i] = 0;
-            }
-        }
-        
-        cut("CutsObjects", "PhotonisEM", " isEM", isEM);
-
-        if (parameterStore.get("CutsObjects", "PhotonisEMString").getStatus())
-        {
-        	int cutSub = parameterStore.get("CutsObjects", "PhotonisEMString").getI();
-        	cutArrayEnum(isEMEnum, cutSub, "Photon isEMString");
-        }
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-
-        if (isEM != null)
-        {
-            msg.append("\n isEM = ");
-            msg.append(isEM[index]);
-        }        
-        if (label != null)
-        {
-            msg.append("\n label = ");
-            msg.append(label[index]);
-        }
-
-        return msg.toString();
-    }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/APixelClusterData.java b/graphics/AtlantisJava/src/atlantis/data/APixelClusterData.java
deleted file mode 100644
index acbe38d5856d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/APixelClusterData.java
+++ /dev/null
@@ -1,403 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * PixelCluster - Pixel clusters, as SiCluster but for Pixels
- *  reads in PixelCluster datatype
- */
-public class APixelClusterData extends AHitData
-{
-    // read in from event file
-    private float[] x;
-    private float[] y;
-    private float[] z;
-    private float[] widthx;
-    private float[] widthy;
-    private int[] etaModule;
-    private int[] phiModule;
-    private float[] eloss;
-
-    // calculated
-    private float[][] rho;
-    private float[][] phi;
-    private int[] layer;
-
-    public static final int U_CLUSTER = -1;
-    public static final int PHI_CLUSTER = 0;
-    public static final int V_CLUSTER = 1;
-    public static final int ENDCAP_MINUS = 0;
-    public static final int BARREL = 1;
-    public static final int ENDCAP_PLUS = 2;
-
-
-    public String getParameterGroup()
-    {
-        return "PixelCluster";
-    }
-
-    public String getName()
-    {
-        return "PixelCluster";
-    }
-
-    public String getNameScreenName()
-    {
-        return "PixelCluster";
-    }
-
-    public float[] getX()
-    {
-        return x;
-    }
-
-    public float[] getY()
-    {
-        return y;
-    }
-
-    public float[] getZ()
-    {
-        return z;
-    }
-
-    APixelClusterData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        x = p.getFloatArray("x0");
-        y = p.getFloatArray("y0");
-        z = p.getFloatArray("z0");
-        widthx = p.getFloatArray("widthx");
-        widthy = p.getFloatArray("widthy");
-        eloss = p.getFloatArray("eloss");
-        
-        rho = new float[2][numData];
-        phi = new float[2][numData];
-
-        layer = new int[numData];
-        for (int i = 0; i < numData; ++i)
-        {
-            sub[i] = getSub(id[i]);
-            layer[i] = getLayer(id[i]);
-        }
-
-        etaModule = (p.get("etaModule") != null) ? p.getIntArray("etaModule") : null;
-        phiModule = (p.get("phiModule") != null) ? p.getIntArray("phiModule") : null;
-
-    } // APixelClusterData() ---------------------------------------------------
-
-
-
-    protected void calculateRhoPhi()
-    {
-        calculateRhoPhi(x, y, rho[0], phi[0]);
-        // treat wraparound
-        for (int i = 0; i < numData; ++i)
-        {
-        	if (Math.abs(0 - phi[0][i]) > Math.PI)
-            {
-                if (0 - phi[0][i] > 0)
-                {
-                    phi[0][i] += AMath.TWO_PI;
-                }
-            }
-        } // for
-    } // calculateRhoPhi() --------------------------------------------------
-
-    private void cutSubdetector()
-    {
-        AParameter par = parameterStore.get("CutsInDet", "SCT");
-        if (par.getI() != -1)
-        {
-            cutArray(sub, par.getI(), "Barrel/Endcap");
-        }
-    } // cutSubdetector() ---------------------------------------------------
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutOrientation();
-        cutSubdetector();
-        cut("CutsInDet", "Layer", "Layer", layer);
-        cutSimulatedTracks();
-        cutReconstructedTracks();
-        cutPhi(phi[0]);
-        cutEta();
-    } // applyCuts() --------------------------------------------------------
-
-    private void cutEta()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        if (!par.getStatus())
-            return;
-        double etaCut = par.getD();
-        double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-        double etaLowerCut = etaMid - etaCut;
-        double etaUpperCut = etaMid + etaCut;
-        int num = 0;
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double eta1 = AParameterUtilities.eta(z[list], rho[0][list]);
-            if (eta1 > etaLowerCut && eta1 < etaUpperCut)
-                listdl[num++] = list;
-        }
-        numDraw = num;
-    } // cutEta() -----------------------------------------------------------
-
-    public int getLayer(int id)
-    {
-        int layer = (id >> 27) & 0x3;
-        int sub = getSub(id);
-        if (sub != BARREL)
-        {
-            layer += 7;
-        }
-        return layer;
-    } // getLayer() ---------------------------------------------------------
-
-    public int getSub(int id)
-    {
-    	// bitwise operation to determine cluster position from id (1,0,2 -> endcap-,barrel,endcap+)
-    	return(id >> 29) & 0x3;
-    } // getSub() -----------------------------------------------------------
-
-    public int getOrientation(int id)
-    {
-        int side = (id & 0x400) >> 10;
-        int sub = getSub(id);
-        if ((side == 1 && sub == BARREL) || (side == 0 && sub != BARREL))
-        {
-            return PHI_CLUSTER;
-        }
-
-        int layer = getLayer(id);
-        if (layer % 2 == 1)
-        {
-            return U_CLUSTER;
-        }
-
-        return V_CLUSTER;
-    } // getOrientation() ---------------------------------------------------
-
-    protected void cutOrientation()
-    {
-        int num = 0;
-        AParameter stereoAnglePar = parameterStore.get("PixelCluster", "Stereo");
-        if (!stereoAnglePar.getStatus())
-        {
-            return;
-        }
-        int orientation = stereoAnglePar.getI();
-        for (int i = 0; i < numDraw; i++)
-        {
-            if (orientation == getOrientation(id[listdl[i]]))
-            {
-                listdl[num++] = listdl[i];
-            }
-        }
-        numDraw = num;
-    } // cutOrientation() ---------------------------------------------------
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if (colorFunction == numColorTypes + 1)
-        {
-            colorBy(layer);
-        }
-        else if (colorFunction == numColorTypes + 2)
-        {
-            colorByOrientation();
-        }
-        else if (colorFunction == numColorTypes + 3)
-        {
-        	colorByEloss();
-        }
-
-        return numColorTypes + 2;
-    } // internalColor() ----------------------------------------------------
-
-    protected void colorByOrientation()
-    {
-        int numColors = parameterStore.get("HitColors", "Number").getI();
-        numColors = Math.min(7, numColors);
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for (int i = 0; i < numData; i++)
-        {
-            color[i] = (byte) col[getOrientation(id[i]) + 1 % numColors];
-        }
-    } // colorByOrientation() -----------------------------------------------
-
-    protected void colorByEloss()
-    {
-    	// This method currently uses the uncorrected value for eloss as an approximation to dE/dx
-    	// Need to either loop over one track collection for associated tracks in Atlantis, or do this in JiveXML..
-    	
-    	int numColors = parameterStore.get("HitColors", "Number").getI();
-        numColors = Math.min(7, numColors);
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for (int i = 0; i < numData; i++)
-        {
-        	if(eloss[i] < 0.5)
-        	{
-        		color[i] = (byte) col[1 + 1 % numColors]; // blue
-        	}
-        	else if(eloss[i] >=0.5 && eloss[i] < 2)
-        	{
-        		color[i] = (byte) col[5 + 1 % numColors]; // yellow
-        	}
-        	else if(eloss[i] >=2)
-        	{
-        		color[i] = (byte) col[2 + 1 % numColors]; // red/orange
-        	}
-        }
-    } // colorByEloss() -----------------------------------------------------
-    
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index;
-        
-        String temp = getNameScreenName() + " (id: " + id[index] + " index: " + index +")\n" +
-                      " orientation = " + getOrientation(id[index]);
-        temp += "\n x = " + x[index];
-        temp += "\n y = " + y[index];
-        temp += "\n z = " + z[index];
-        temp += "\n " + AMath.RHO + " = " + rho[0][index] + "  " + rho[1][index];
-        temp += "\n " + AMath.ETA + " module = ";
-        temp += (etaModule != null) ? Integer.toString(etaModule[index]) : "n/a";
-        temp += "\n " + AMath.PHI + " module = ";
-        temp += (phiModule != null) ? Integer.toString(phiModule[index]) : "n/a";
-        temp += "\n widthx = ";
-        temp += (widthx != null) ? Float.toString(widthx[index]) : "n/a";
-        temp += "\n widthy = ";
-        temp += (widthy != null) ? Float.toString(widthx[index]) : "n/a";
-        temp += "\n eloss = ";
-        temp += (eloss != null) ? Float.toString(eloss[index]) : "n/a";
-
-        temp += super.getHitInfo(index); // finds barcode information
-
-        return temp;
-    } // getHitInfo() -------------------------------------------------------
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 1; j++)
-            {
-                hv[0][j][i] = x[list];
-                hv[1][j][i] = y[list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.SYMBOLS);
-    } // getYXUser() --------------------------------------------------------
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[0][list] - phiMid);
-            double sign;
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-            {
-                sign = +1.;
-            }
-            else
-            {
-                sign = -1.;
-            }
-
-            for (int j = 0; j < 1; j++)
-            {
-                hv[0][j][i] = z[list];
-                hv[1][j][i] = sign * rho[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.SYMBOLS);
-    } // getRZUser() --------------------------------------------------------
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 1; j++)
-            {
-                hv[0][j][i] = rho[j][list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list], z[list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.SYMBOLS).includePhiWrapAround("FR");
-    } // getFRUser() --------------------------------------------------------
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 1; j++)
-            {
-                hv[0][j][i] = z[list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list], z[list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.SYMBOLS).includePhiWrapAround("FZ");
-    } // getFZUser() --------------------------------------------------------
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        int numTotal = 2 * numDraw;
-        double[][][] hv = new double[2][numTotal][2];
-        int[] index = new int[numTotal];
-        double[] sign = new double[] { -1., 1. };
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-                double deltaEta = AProjectionVP.getDeltaEta(rho[0][list], z[list]);
-                double eta = AParameterUtilities.eta(z[list], rho[0][list]);
-                for (int j = 0; j < 2; j++)
-                {
-                	// pixels displayed halfway in phi and eta, for some reason
-                	// quick fix = multiply by 2
-                    hv[0][2 * i + j][0] = 2*(eta + sign[j] * deltaEta);
-                    hv[1][2 * i + j][0] = 2*Math.toDegrees(phi[0][list]);
-                    index[2 * i + j] = list;
-                }
-            
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES).includePhiWrapAround("VP");
-    } // getVPUser() --------------------------------------------------------
-
-} // class APixelClusterData ===================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/APixelRDOData.java b/graphics/AtlantisJava/src/atlantis/data/APixelRDOData.java
deleted file mode 100644
index f9c78bd7bf8e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/APixelRDOData.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-
-/*
- * PixelRDO - Pixel Raw Data object (SpacePoint Raw Data Objects)
- * The class is derived from AS3DData class (SpacePoint)
- * Parameters expected in the event file for the PixelRDO datatype
- *     id x y z etaModule phiModule
- */
-public class APixelRDOData extends AS3DData
-{
-    private int[] etaModule = null;
-    private int[] phiModule = null;
-
-
-    public String getParameterGroup()
-    {
-        return "PixelRDO";
-
-    } // getParameterGroup() ------------------------------------------------
-
-
-
-    public String getName()
-    {
-        return "PixelRDO";
-
-    } // getName() ----------------------------------------------------------
-
-
-
-    public String getNameScreenName()
-    {
-        return "PixelRDO";
-
-    } // getNameScreenName() ------------------------------------------------
-
-
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.RHO+" = "+String.format("%.3f",rho[index])+"\n "+
-        "z = "+String.format("%.3f",z[index])+" cm\n"+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        String temp = getNameScreenName() + " (id: " + id[index] + " index: " + index + ")" +
-                      "\n " + AMath.RHO + " = " + String.format("%.3f",rho[index]) + " cm" +
-                      "\n " + AMath.PHI + " = " +
-                      String.format("%.3f",Math.toDegrees(phi[index])) +
-                      AMath.DEGREES + "  (" + String.format("%.3f",phi[index]) + " rad)" +
-                      "\n z = " + String.format("%.3f",z[index]) + " cm";
-
-        temp += "\n " + AMath.ETA + " module = ";
-        temp += (etaModule != null) ? Integer.toString(etaModule[index]) : "n/a";
-        temp += "\n " + AMath.PHI + " module = ";
-        temp += (phiModule != null) ? Integer.toString(phiModule[index]) : "n/a";
-
-        return temp;
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-
-    APixelRDOData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        id = p.getIntArray("id");
-        etaModule = (p.get("etaModule") != null) ? p.getIntArray("etaModule") : null;
-        phiModule = (p.get("phiModule") != null) ? p.getIntArray("phiModule") : null;
-
-    } // APixelRDOData() ----------------------------------------------------
-
-
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        // int colorFunction=APar.get(PARAMETER_GROUP, "ColorFunction").getI();
-        // color by error will go here
-        // if(colorFunction==numColorTypes+1)
-        // colorByError() - to implement
-
-        return numColorTypes + 1;
-
-    } // internalColor() ----------------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutPhi(phi);
-        cutEta(rho, z);
-        if(etaModule != null)
-        {
-            cut("CutsInDet", "EtaModule", " EtaModule", etaModule);
-        }
-        if(phiModule != null)
-        {
-            cut("CutsInDet", "PhiModule", " PhiModule", phiModule);
-        }
-
-        cutSubdetector();
-    } // applyCuts() --------------------------------------------------------
-
-    private void cutSubdetector()
-    {
-        AParameter subPar = parameterStore.get("CutsInDet", "SCT");
-        if(subPar.getI() != -1)
-            cutArray(sub, subPar.getI(), "Barrel/Endcap");
-    }
-    
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = rho[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FR");
-
-    } // getFRUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = z[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FZ");
-
-    } // getFZUser() --------------------------------------------------------
-
-} // class APixelRDOData ====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/APulseShapePlot.java b/graphics/AtlantisJava/src/atlantis/data/APulseShapePlot.java
deleted file mode 100644
index 8f1279d0fd0a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/APulseShapePlot.java
+++ /dev/null
@@ -1,513 +0,0 @@
-package atlantis.data;
-
-import java.util.Vector;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowAdapter;
-
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-
-// JAS libraries used by Plot class below
-import hep.aida.IAnalysisFactory;
-import hep.aida.ITree;
-import hep.aida.IPlotter;
-import hep.aida.IDataPoint;
-import hep.aida.IDataPointSet;
-import hep.aida.IDataPointSetFactory;
-import hep.aida.IPlotterStyle;
-import hep.aida.ref.plotter.PlotterUtilities;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-
-
-/**
- * Plotting pulse shapes and ADC counts for calorimeters
- *
- * @author Zdenek Maxa
-
- */
-public class APulseShapePlot
-{
-	protected static Component guiComponent = AGlobals.instance().getGuiFrame();
-    private static Vector<JFrame> frameVector = new Vector<JFrame>();
-
-    private APulseShapePlot() {}
-
-
-    /**
-     * Plot real pulse shapes plots - ADC counts and calculated values of the
-     * real pulse shape plot over it. Works for multiple channels (TILE) as
-     *  well as for a single channel e.g. LAr
-     *
-     * @param adcCounts int[][]
-     * @param realPulse double[][]
-     * @param step double
-     * @param subTitle String[]
-     * @param title String
-     */
-    public static void plotRealPulseShapes(int[][] adcCounts, double[][] realPulse,
-                                           double step, String[] subTitle, String title)
-    {
-        JFrame frame = new JFrame(title);
-        frame.setTitle(title);
-        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        AIcon.setIconImage(frame);
-        frame.setLocation(guiComponent.getLocation());
-        Plot p = new Plot();
-        frame.setContentPane(p);
-        p.plotRealPulseShapes(adcCounts, realPulse, step, subTitle);
-        frame.pack();
-        int windowWidth = 330 + ((adcCounts.length - 1) * 110);
-        int windowHeight = 300;
-        frame.setSize(windowWidth, windowHeight);
-        frame.setVisible(true);
-
-        frame.addWindowListener(new AllWindowsDisposer());
-        frameVector.add(frame);
-
-    } // plotRealPulseShapes() ----------------------------------------------
-
-    public static void plotRawCellPulseShapes(int[][] adcCounts, double[][] rawPulse,
-                                           double[][] cellPulse, double step,
-                                           String[] subTitle, String title)
-    {
-        JFrame frame = new JFrame(title);
-        frame.setTitle(title);
-        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        AIcon.setIconImage(frame);
-        frame.setLocation(guiComponent.getLocation());
-        Plot p = new Plot();
-        frame.setContentPane(p);
-        p.plotRawCellPulseShapes(adcCounts, rawPulse, cellPulse, step, subTitle);
-        frame.pack();
-        int windowWidth = 440 + ((adcCounts.length - 1) * 140);
-        int windowHeight = 400;
-        frame.setSize(windowWidth, windowHeight);
-        frame.setVisible(true);
-
-        frame.addWindowListener(new AllWindowsDisposer());
-        frameVector.add(frame);
-
-    } // plotRealPulseShapes() ----------------------------------------------    
-
-    /**
-     * Plots only ADC counts, used as follows:
-     * APulseShapePlot.plotADCCounts(adcCounts[index], title)
-     * still used for instance when real pulse shapes plot data is not
-     * available, e.g. LAr presampler (layer 0)
-
-     * @param data int[][]
-     * @param title String title of window
-     * @param axis String[] title for the horizontal axis on each plot (if null uses "bunch crossing")
-     */
-    public static void plotADCCounts(int[][] data, String title, String[] axis)
-    {
-        String[] labels = new String[data.length];
-        String[] colors = new String[data.length];
-        for(int i=0; i<data.length; i++)
-        {
-            labels[i]="ADC counts";
-            colors[i]="blue";
-        }
-        String[] newAxis;
-        if(axis!=null)
-        {
-            newAxis=axis;
-        }
-        else
-        {
-            newAxis= new String[data.length];
-            for(int i=0; i<data.length; i++)
-            {
-                newAxis[i] = "bunch crossing";
-            }
-        }
-        plotADCCounts(data, title, newAxis, labels, colors);
-    }
-
-
-
-    /**
-     * Plots only ADC counts, used as follows:
-     * APulseShapePlot.plotADCCounts(adcCounts[index], title)
-     * still used for instance when real pulse shapes plot data is not
-     * available, e.g. LAr presampler (layer 0)
-
-     * @param data int[][]
-     * @param title String title of window
-     * @param axis String[] titles for the horizontal axis on each plot
-     * @param labels String[] titles for each plot
-     * @param colors String[] color of datapoints for each plot 
-     */
-    public static void plotADCCounts(int[][] data, String title, String[] axis, String[] labels, String[] colors)
-    {
-        JFrame frame = new JFrame(title);
-        AIcon.setIconImage(frame);
-        frame.setLocation(guiComponent.getLocation());
-        Plot p = new Plot();
-        frame.setContentPane(p);
-        p.plotADCCounts(data, axis, labels, colors);
-        frame.pack();
-        int windowWidth = 330+ ((data.length - 1) * 110);
-        int windowHeight = 300;
-        frame.setSize(windowWidth, windowHeight);
-        frame.setVisible(true);
-
-        frame.addWindowListener(new AllWindowsDisposer());
-        frameVector.add(frame);
-
-    } // plotADCCounts() --------------------------------------------------
-
-
-
-    static class AllWindowsDisposer extends WindowAdapter
-    {
-        public void windowClosing(WindowEvent e)
-        {
-            for(int i = 0; i < frameVector.size(); i++)
-            {
-                JFrame cf = frameVector.get(i);
-                cf.dispose();
-            }
-            frameVector.removeAllElements();
-        }
-
-    } // class AllWindowsDisposer ===========================================
-
-
-} // class ACaloPulseShapePlot ==============================================
-
-
-
-/**
- *
- * <p>Title: Plot</p>
- *
- * <p>Description: Plotting class using JAS library </p>
- *
- */
-class Plot extends JPanel
-{
-
-    public Plot()
-    {
-        super(new BorderLayout());
-
-    } // Plot() -------------------------------------------------------------
-
-
-
-    protected void plotRealPulseShapes(int[][] adcCounts, double[][] realPulse,
-                                    double step, String[] subTitle)
-    {
-
-        IAnalysisFactory af = IAnalysisFactory.create();
-        ITree tree = af.createTreeFactory().create();
-        IDataPointSetFactory dpsf = af.createDataPointSetFactory(tree);
-
-        // Create a two dimensional IDataPointSet
-        IDataPointSet[] dataPointSet = new IDataPointSet[adcCounts.length];
-        for(int i = 0; i < adcCounts.length; i++)
-        {
-            String myTitle = (subTitle != null) ? subTitle[i] : "Real pulse shape";
-            
-            double[] x = new double[adcCounts[i].length];
-            double[] y = new double[adcCounts[i].length];
-            double[] e = new double[adcCounts[i].length];
-
-            for(int ii = 0; ii < adcCounts[i].length; ii++)
-            {
-                x[ii] = ii + 1.0; // counting from 1 (to 9 for TILE)
-                y[ii] = (double) adcCounts[i][ii];
-                e[ii] = 0.0; // arrays with errors
-            }
-
-            // first parameter must be path - what for here?
-            dataPointSet[i] = dpsf.createXY(myTitle, x, y, e, e);
-            dataPointSet[i].setTitle(myTitle);
-        } // over number of channels
-
-        // Create a two dimensional IDataPointSet
-        IDataPointSet[] dataPointSetReal = new IDataPointSet[realPulse.length];
-        for(int i = 0; i < realPulse.length; i++)
-        {
-        	String myTitle = (subTitle != null) ? subTitle[i] : "Real pulse shape";
-
-            double[] x = new double[realPulse[i].length];
-            double[] y = new double[realPulse[i].length];
-            double[] e = new double[realPulse[i].length];
-
-            double d = 1.0;
-            for(int ii = 0; ii < realPulse[i].length; ii++)
-            {
-                x[ii] = d;
-                y[ii] = realPulse[i][ii];
-                e[ii] = 0.0; // arrays with errors
-                d += step;
-            }
-
-            // first parameter must be path - what for here?
-            dataPointSetReal[i] = dpsf.createXY(myTitle, x, y, e, e);
-            dataPointSetReal[i].setTitle(myTitle);
-
-        } // over number of channels
-
-
-        IPlotter plotter = af.createPlotterFactory().create("");
-
-        plotter.createRegions(adcCounts.length, 1); // regions 1x1, 1x2, ...
-
-        // set common style parameters for both regions
-        IPlotterStyle style = af.createPlotterFactory().createPlotterStyle();
-        style.xAxisStyle().setLabel("bunch crossing");
-        style.yAxisStyle().setLabel("ADC counts");
-        style.titleStyle().textStyle().setColor("black");
-        style.titleStyle().textStyle().setBold(true);
-        style.xAxisStyle().labelStyle().setColor("black");
-        style.yAxisStyle().labelStyle().setColor("black");
-
-        // set no legend at plots
-        style.statisticsBoxStyle().setVisible(false); // statistical legend
-        style.legendBoxStyle().setVisible(false); // legend for function fit
-
-        for(int i = 0; i < adcCounts.length; i++)
-        {
-            // set style parameters different for regions
-            style.dataStyle().markerStyle().setParameter("size", "2");
-            style.dataStyle().markerStyle().setShape("box"); // "square"
-            plotter.region(i).style().dataStyle().markerStyle().setColor("red");
-            plotter.region(i).plot(dataPointSetReal[i], style);
-
-            style.dataStyle().markerStyle().setParameter("size", "7");
-            style.dataStyle().markerStyle().setShape("dot"); // "circle"
-            plotter.region(i).style().dataStyle().markerStyle().setColor("blue");
-            plotter.region(i).plot(dataPointSet[i], style);
-        }
-
-        // now embed the plotter
-        add(PlotterUtilities.componentForPlotter(plotter), BorderLayout.CENTER);
-
-    } // plotRealPulseShapes() ----------------------------------------------
-
-
-
-
-    /**
-     * Method creates multiple plots of ADC counts only.
-     * multiple channels, no fit, no pulse shapes.
-     *  or plots of ADC Counts pulse shapes.
-     *
-     * @param data int[][]
-     * @param labels String[] titles for each plot
-     */
-    public void plotADCCounts(int[][] data, String[] axis, String[] labels, String[] colors)
-    {
-        IAnalysisFactory af = IAnalysisFactory.create();
-        ITree tree = af.createTreeFactory().create();
-        IDataPointSetFactory dpsf = af.createDataPointSetFactory(tree);
-
-        // Create a IDataPointSet (one dimension)
-        IDataPointSet[] dataPointSet = new IDataPointSet[data.length];
-        for(int j = 0; j < data.length; j++)
-        {
-
-            dataPointSet[j] = dpsf.create("plot", labels[j], 2);
-
-            for(int i = 0; i < data[j].length; i++)
-            {
-                dataPointSet[j].addPoint();
-                IDataPoint dp = dataPointSet[j].point(i);
-
-                dp.coordinate(0).setValue(i);
-                dp.coordinate(1).setValue(data[j][i]);
-            }
-        }
-
-
-        IPlotter plotter = af.createPlotterFactory().create("");
-
-        plotter.createRegions(data.length, 1); // regions 1x1, 1x2, ...
-
-        IPlotterStyle style = af.createPlotterFactory().createPlotterStyle();
-        style.yAxisStyle().setLabel("ADC counts");
-        style.dataStyle().markerStyle().setParameter("size", "7");
-        style.dataStyle().markerStyle().setShape("dot");
-        style.titleStyle().textStyle().setColor("black");
-        style.titleStyle().textStyle().setBold(true);
-        style.xAxisStyle().labelStyle().setColor("black");
-        style.yAxisStyle().labelStyle().setColor("black");
-
-        // set no legend at plots
-        style.statisticsBoxStyle().setVisible(false); // statistical legend
-        style.legendBoxStyle().setVisible(false); // legend for function fit
-
-        for(int j = 0; j < data.length; j++)
-        {
-            plotter.region(j).style().xAxisStyle().setLabel(axis[j]);
-            plotter.region(j).style().dataStyle().markerStyle().setColor(colors[j]);
-            plotter.region(j).style().dataStyle().outlineStyle().setColor(colors[j]);
-
-            // plot the data - points ('style' parameter is optional for plotter)
-            plotter.region(j).plot(dataPointSet[j], style);
-        }
-        // now embed the plotter
-        add(PlotterUtilities.componentForPlotter(plotter), BorderLayout.CENTER);
-
-    } // plotADCCounts() ------------ ---------------------------------------
-
-    
-    protected void plotRawCellPulseShapes(int[][] adcCounts, double[][] rawPulse,
-                                    double[][] cellPulse,
-                                    double step, String[] subTitle)
-    {
-
-        IAnalysisFactory af = IAnalysisFactory.create();
-        ITree tree = af.createTreeFactory().create();
-        IDataPointSetFactory dpsf = af.createDataPointSetFactory(tree);
-
-        // Create a two dimensional IDataPointSet
-        IDataPointSet[] dataPointSet = new IDataPointSet[adcCounts.length];
-        for(int i = 0; i < adcCounts.length; i++)
-        {
-            String myTitle = "ADC counts";
-            
-            double[] x = new double[adcCounts[i].length];
-            double[] y = new double[adcCounts[i].length];
-            double[] e = new double[adcCounts[i].length];
-
-            for(int ii = 0; ii < adcCounts[i].length; ii++)
-            {
-                x[ii] = ii + 1.0; // counting from 1 (to 9 for TILE)
-                y[ii] = (double) adcCounts[i][ii];
-                e[ii] = 0.0; // arrays with errors
-            }
-
-            // first parameter must be path - what for here?
-            dataPointSet[i] = dpsf.createXY(myTitle, x, y, e, e);
-            dataPointSet[i].setTitle(myTitle);
-        } // over number of channels
-
-        // Create a two dimensional IDataPointSet
-        IDataPointSet[] dataPointSetCell = new IDataPointSet[cellPulse.length];
-        for(int i = 0; i < cellPulse.length; i++)
-        {
-        	String myTitle = "Cell time";
-
-            double[] x = new double[cellPulse[i].length];
-            double[] y = new double[cellPulse[i].length];
-            double[] e = new double[cellPulse[i].length];
-
-            double d = 1.0;
-            for(int ii = 0; ii < cellPulse[i].length; ii++)
-            {
-                x[ii] = d;
-                y[ii] = cellPulse[i][ii];
-                e[ii] = 0.0; // arrays with errors
-                d += step;
-            }
-
-            // first parameter must be path - what for here?
-            dataPointSetCell[i] = dpsf.createXY(myTitle, x, y, e, e);
-            dataPointSetCell[i].setTitle(myTitle);
-
-        } // over number of channels
-
-        
-        // Create a two dimensional IDataPointSet
-        IDataPointSet[] dataPointSetRaw = new IDataPointSet[rawPulse.length];
-        for(int i = 0; i < rawPulse.length; i++)
-        {
-        	String myTitle = "Raw time";
-
-            double[] x = new double[rawPulse[i].length];
-            double[] y = new double[rawPulse[i].length];
-            double[] e = new double[rawPulse[i].length];
-
-            double d = 1.0;
-            for(int ii = 0; ii < rawPulse[i].length; ii++)
-            {
-                x[ii] = d;
-                y[ii] = rawPulse[i][ii];
-                e[ii] = 0.0; // arrays with errors
-                d += step;
-            }
-
-            // first parameter must be path - what for here?
-            dataPointSetRaw[i] = dpsf.createXY(myTitle, x, y, e, e);
-            dataPointSetRaw[i].setTitle(myTitle);
-
-        } // over number of channels
-
-
-        IPlotter plotter = af.createPlotterFactory().create("");
-
-        plotter.createRegions(adcCounts.length, 1); // regions 1x1, 1x2, ...
-
-        // set common style parameters for both regions
-        IPlotterStyle style = af.createPlotterFactory().createPlotterStyle();
-        style.xAxisStyle().setLabel("bunch crossing");
-        style.yAxisStyle().setLabel("ADC counts");
-        style.titleStyle().textStyle().setColor("black");
-        style.titleStyle().textStyle().setBold(true);
-        style.xAxisStyle().labelStyle().setColor("black");
-        style.yAxisStyle().labelStyle().setColor("black");
-        
-        style.statisticsBoxStyle().setVisible(false); // statistical legend
-        style.legendBoxStyle().setVisible(true); // legend for function fit
-
-        for(int i = 0; i < adcCounts.length; i++)
-        {
-            // set style parameters different for regions
-            style.dataStyle().markerStyle().setParameter("size", "4");
-            style.dataStyle().markerStyle().setShape("box"); // "square"
-            style.dataStyle().showInLegendBox(true);
-            plotter.region(i).style().dataStyle().markerStyle().setColor("red");
-            plotter.region(i).plot(dataPointSetRaw[i], style);
-            
-            style.dataStyle().markerStyle().setParameter("size", "2");
-            style.dataStyle().markerStyle().setShape("box"); // "square"
-            style.dataStyle().showInLegendBox(true);
-            plotter.region(i).style().dataStyle().markerStyle().setColor("green");
-            plotter.region(i).plot(dataPointSetCell[i], style);
-            
-            style.dataStyle().markerStyle().setParameter("size", "7");
-            style.dataStyle().markerStyle().setShape("dot"); // "circle"
-            style.dataStyle().showInLegendBox(false);
-            plotter.region(i).style().dataStyle().markerStyle().setColor("blue");
-            plotter.region(i).plot(dataPointSet[i], style);
-            
-            //plotter.region(i).style().legendBoxStyle().boxStyle().borderStyle().setVisible(false);
-            
-            plotter.region(i).setTitle((subTitle != null) ? subTitle[i] : "Real pulse shape");
-        }
-
-        // now embed the plotter
-        add(PlotterUtilities.componentForPlotter(plotter), BorderLayout.CENTER);
-
-    } // plotRealPulseShapes() ----------------------------------------------
-
-    
-    
-} // class Plot =============================================================
-
-
-
-/* following lines for hints only (futher JAS plotting styles settings)
-
-     IPlotterStyle style = plotterFactory.createPlotterStyle();
-     style.xAxisStyle().tickLabelStyle().setFontSize(14);
-     style.xAxisStyle().tickLabelStyle().setBold(true);
-     style.xAxisStyle().tickLabelStyle().setColor("blue");
-     style.xAxisStyle().labelStyle().setFontSize(24);
-     style.xAxisStyle().labelStyle().setItalic(true);
-     style.titleStyle().textStyle().setFontSize(30);
-     style.dataStyle().markerStyle().setParameter("size","12");
-     style.dataStyle().markerStyle().setParameter("shape","3");
-     style.dataStyle().markerStyle().setParameter("color","blue");
-     plotter.region(0).plot(h1);
-     plotter.region(0).plot(h2, style);
-     plotter.show();
-*/
diff --git a/graphics/AtlantisJava/src/atlantis/data/AROIData.java b/graphics/AtlantisJava/src/atlantis/data/AROIData.java
deleted file mode 100644
index 0b3a539e2505..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AROIData.java
+++ /dev/null
@@ -1,334 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Base class for EmTauROI, JetROI and MuonROI
- *
- * @author Gary Taylor, Zdenek Maxa, Qiang Lu
- */
-
-abstract public class AROIData extends AData
-{
-    protected float[] eta;
-    protected float[] phi;
-    protected float[] energy;
-    // energy variables for EmTauROIs
-    protected float[] energyEM;
-    protected float[] energyTAU;
-
-    private int drawOrFill = AGraphics.FILL;
-
-    AROIData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        eta = p.getFloatArray("eta");
-        phi = p.getFloatArray("phi");
-        energy = p.getFloatArray("energy");
-        if(this instanceof AEmTauROIData)
-        {
-        	energyEM = p.getFloatArray("energyEM");
-        	energyTAU = p.getFloatArray("energyTAU");
-        }
-    }
-
-    public float getEnergy(int index)
-    {
-        return energy[index];
-    }
-    public float getEnergyEM(int index)
-    {
-    	return energyEM[index];
-    }
-    public float getEnergyTAU(int index)
-    {
-    	return energyTAU[index];
-    }
-
-    public float getEta(int index)
-    {
-        return eta[index];
-    }
-
-    public float getPhi(int index)
-    {
-        return phi[index];
-    }
-
-    public float[] getEnergy()
-    {
-        return energy;
-    }
-    
-    public float[] getEnergyEM()
-    {
-        return energyEM;
-    }
-    
-    public float[] getEnergyTAU()
-    {
-        return energyTAU;
-    }
-
-    public float[] getEta()
-    {
-        return eta;
-    }
-
-    public float[] getPhi()
-    {
-        return phi;
-    }
-
-    protected int getDrawOrFill()
-    {
-        return drawOrFill;
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        "\n Energy="+String.format("%.3f",energy[index])+" GeV\n "+
-        AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        double deta = parameterStore.get(PARAMETER_GROUP, "deta").getD();
-        double dphi = parameterStore.get(PARAMETER_GROUP, "dphi").getD();
-
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n energy = ");
-        msg.append(String.format("%.3f",energy[index]));
-        msg.append(" GeV\n ");
-        if(this instanceof AEmTauROIData)
-        {
-        	if(energyEM != null)
-        	{
-        	 msg.append("energyEM = ");
-             msg.append(String.format("%.3f",energyEM[index]));
-             msg.append(" GeV\n ");
-        	}
-        	if(energyTAU != null)
-        	{
-             msg.append("energyTAU = ");
-             msg.append(String.format("%.3f",energyTAU[index]));
-             msg.append(" GeV\n ");
-        	}
-        }
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-        msg.append("\n deta = ");
-        msg.append(String.format("%.3f",deta));
-        msg.append("\n dphi = ");
-        msg.append(String.format("%.3f",Math.toDegrees(dphi)));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",dphi) + " rad)");
-
-        return msg.toString();
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if (colorFunction == 0)
-        {
-            colorByConstant();
-        }
-        else if (colorFunction == 1)
-        {
-            colorByIndex();
-        }
-
-        return 1;
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutPhi(phi);
-        cutEta(eta);
-    }
-
-    protected ACoord getVPUser()
-    {
-        drawOrFill = AGraphics.DRAW;
-
-        double deta = parameterStore.get(PARAMETER_GROUP, "deta").getD() / 2;
-        double dphiDeg = Math.toDegrees(parameterStore.get(PARAMETER_GROUP, "dphi").getD()) / 2;
-        double phiDeg = 0;
-
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            phiDeg = Math.toDegrees(phi[list]);
-
-            // without the cross in the middle
-            // hv[0][i] = AMath.xBox(eta[list], deta); // x-dx,x-dx,x+dx,x+dx
-            // hv[1][i] = AMath.yBox(phiDeg, dphiDeg); // y-dy,y+dy,y+dy,y-dy
-
-            hv[0][i] = new double[] { eta[list] - deta, eta[list] - deta,
-                    eta[list] + deta, eta[list] - deta, eta[list] + deta,
-                    eta[list] - deta, eta[list] + deta, eta[list] + deta };
-            hv[1][i] = new double[] { phiDeg - dphiDeg, phiDeg + dphiDeg,
-                    phiDeg - dphiDeg, phiDeg - dphiDeg, phiDeg + dphiDeg,
-                    phiDeg + dphiDeg, phiDeg - dphiDeg, phiDeg + dphiDeg };
-            index[i] = list;
-        }
-
-        return new ACoord(hv, index, this).includePhiWrapAround("VP");
-    }
-
-    protected ACoord getYXUser()
-    {
-        drawOrFill = AGraphics.FILL;
-        double dphi = parameterStore.get(PARAMETER_GROUP, "dphi").getD() / 2;
-
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiPlus = phi[list] + dphi;
-            double phiMinus = phi[list] - dphi;
-            double cosPlus = Math.cos(phiPlus);
-            double sinPlus = Math.sin(phiPlus);
-            double cosMinus = Math.cos(phiMinus);
-            double sinMinus = Math.sin(phiMinus);
-
-            double rhoPlus = 1150;
-            double rhoMinus = 1130;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = rhoMinus * cosPlus;
-            hv[1][i][0] = rhoMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = rhoPlus * cosPlus;
-            hv[1][i][1] = rhoPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = rhoPlus * cosMinus;
-            hv[1][i][2] = rhoPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = rhoMinus * cosMinus;
-            hv[1][i][3] = rhoMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-    protected ACoord getFRUser()
-    {
-        ACoord coordFR = getYXUser().convertYXToFR().includePhiWrapAround("FR");
-        return coordFR;
-    }
-
-    protected ACoord getRZUser()
-    {
-        drawOrFill = AGraphics.FILL;
-        double deta = parameterStore.get(PARAMETER_GROUP, "deta").getD() / 2;
-
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][4];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-            double phiDiff = Math.abs(phi[list] - phiMid);
-            double rSign;
-            if (phiDiff > Math.PI / 2. && phiDiff <= 3 * Math.PI / 2.)
-                rSign = -1;
-            else
-                rSign = 1;
-
-            // calculate theta based on the eta value
-            double theta = Math.atan(Math.exp(-Math.abs(eta[list]))) * 2.0;
-            double thetaPlus = Math.atan(Math.exp(-(Math.abs(eta[list]) - deta))) * 2.0;
-            double thetaMinus = Math.atan(Math.exp(-(Math.abs(eta[list]) + deta))) * 2.0;
-
-            if ((eta[list] > 0.) && (rSign == -1))
-            {
-                theta = 2 * Math.PI - theta;
-                thetaPlus = 2 * Math.PI - thetaPlus;
-                thetaMinus = 2 * Math.PI - thetaMinus;
-            }
-            else if ((eta[list] < 0.) && (rSign == -1))
-            {
-                theta += Math.PI;
-                thetaPlus += Math.PI;
-                thetaMinus += Math.PI;
-            }
-            else if ((eta[list] < 0.) && (rSign == 1))
-            {
-                theta = Math.PI - theta;
-                thetaPlus = Math.PI - thetaPlus;
-                thetaMinus = Math.PI - thetaMinus;
-            }
-
-            double cosPlus = Math.cos(thetaPlus);
-            double sinPlus = Math.sin(thetaPlus);
-            double cosMinus = Math.cos(thetaMinus);
-            double sinMinus = Math.sin(thetaMinus);
-
-            // decide the region based on the theta value
-            final byte TOP_BOTTOM = 0;
-            final byte LEFT_RIGHT = 1;
-            byte region = TOP_BOTTOM;
-            // hard-coded value is based on the values in Geometry
-            if (Math.abs(Math.tan(theta)) < 0.8)
-                region = LEFT_RIGHT;
-
-            double radiusMinus = 0.;
-            switch (region)
-            {
-                case TOP_BOTTOM:
-                    radiusMinus = 1330 / Math.abs(Math.sin(theta));
-                    break;
-                case LEFT_RIGHT:
-                    radiusMinus = 1630 / Math.abs(Math.cos(theta));
-                    break;
-            }
-            double radiusPlus = radiusMinus + 20;
-
-            // 4 corners of the cell area
-            // x0, y0
-            hv[0][i][0] = radiusMinus * cosPlus;
-            hv[1][i][0] = radiusMinus * sinPlus;
-            // x1, y1
-            hv[0][i][1] = radiusPlus * cosPlus;
-            hv[1][i][1] = radiusPlus * sinPlus;
-            // x2, y2
-            hv[0][i][2] = radiusPlus * cosMinus;
-            hv[1][i][2] = radiusPlus * sinMinus;
-            // x3, y3
-            hv[0][i][3] = radiusMinus * cosMinus;
-            hv[1][i][3] = radiusMinus * sinMinus;
-
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.POLYGONS);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ARPCData.java b/graphics/AtlantisJava/src/atlantis/data/ARPCData.java
deleted file mode 100755
index de50662cfd6d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ARPCData.java
+++ /dev/null
@@ -1,311 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-/**
- * for comments see AMDTData
- */
-
-public class ARPCData extends AMuonHitData
-{
-    protected float[] width;
-    protected float[] length;
-    protected int[] gasGap;
-    
-    private static ALogger logger = ALogger.getLogger(ARPCData.class);
-    
-    public String getParameterGroup()
-    {
-        return "RPC";
-    }
-    
-    public String getName()
-    {
-        return "RPC";
-    }
-    
-    public String getNameScreenName()
-    {
-        return "RPC";
-    }
-    
-    ARPCData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        length = p.getFloatArray("length");
-        width = p.getFloatArray("width");
-        gasGap = new int[numData];
-        for (int i = 0; i < numData; ++i)
-            gasGap[i] = getGasGap(i);
-    }
-          
-    protected int getStation(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(1) == 'M') {
-                return AIdHelper.rpcDoubletR(id[index]) - 1;
-            } else {
-                return AIdHelper.rpcDoubletR(id[index]) + 1;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding RPC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    protected int getSub(int index)
-    {
-        return 0;
-    }
-    
-    public int getSector(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            
-            if (stationName.charAt(2) == 'L') {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1);
-            } else {
-                return 2 * (AIdHelper.stationPhi(id[index]) - 1) + 1;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding RPC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    protected int getGasGap(int index)
-    {
-        try {
-            return AIdHelper.rpcGasGap(id[index]);
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding RPC identifier", e);
-        }
-        
-        return 0;
-    }
-    
-    protected boolean getMeasuresPhi(int index)
-    {
-        try {
-            if (AIdHelper.rpcMeasuresPhi(id[index]) == 1) {
-                return true;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding RPC identifier", e);
-        }
-        
-        return false;
-    }
-    
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        if (parameterStore.get("CutsATLAS", "CutPhi").getStatus())
-            cutPhi(phi, getDPhi());
-        if (parameterStore.get("CutsATLAS", "CutEta").getStatus())
-            cutEtaDZ(rho, z, getDZ());
-    }
-    
-    private float[] getDPhi()
-    {
-        // only roughly correct
-        // must create all
-        float[] dphi = new float[numData];
-        
-        // need only fill for those in draw list
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            if (measuresPhi[list])
-                dphi[list] = (float) Math.abs(Math.atan2(width[list] / 2., rho[list]));
-            else
-                dphi[list] = (float) Math.abs(Math.atan2(length[list] / 2., rho[list]));
-        }
-        return dphi;
-    }
-    
-    private float[] getDZ()
-    {
-        // must create all
-        float[] dz = new float[numData];
-        
-        // need only fill for those in draw list
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            
-            if (measuresPhi[list])
-                dz[list] = (float) (length[list] / 2.);
-            else
-                dz[list] = (float) (width[list] / 2.);
-        }
-        return dz;
-    }
-    
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        cutArray(measuresPhi, true, " Strip");
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double r = rho[list];
-            double cosPhi = Math.cos(phi[list]);
-            double sinPhi = Math.sin(phi[list]);
-            double phiSector = sector[list] * AMath.PI_BY_8;
-            double cosPhiSector = Math.cos(phiSector);
-            double sinPhiSector = Math.sin(phiSector);
-            double d = width[list] / 2.;
-            if (!measuresPhi[list])
-                d = length[list] / 2.;
-            double x = r * cosPhi;
-            double y = r * sinPhi;
-            double dx = d * sinPhiSector;
-            double dy = d * cosPhiSector;
-            
-            hv[0][0][i] = x + dx;
-            hv[1][0][i] = y - dy;
-            hv[0][1][i] = x - dx;
-            hv[1][1][i] = y + dy;
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-    
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        cutArray(measuresPhi, false, " Strip");
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[list] - phiMid);
-            int sign = -1;
-            
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign = 1;
-            double rC = sign * AMDTData.getSectorRho(sector[list], rho[list], phi[list]);
-            double zC = z[list];
-            double w = width[list] / 2.;
-            
-            hv[0][0][i] = zC - w;
-            hv[1][0][i] = rC;
-            hv[0][1][i] = zC + w;
-            hv[1][1][i] = rC;
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-    
-    protected ACoord getXZUser()
-    {
-        makeDrawList();
-        cutMuonSector(sector);
-        cutArray(measuresPhi, false, " Strip");
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        int sect=(int)Math.round(parameterStore.get("XZ", "Phi").getD() / 22.5);
-        
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int sign = 1;
-            
-            if (sector[list] != sect)
-                sign = -1;
-            double rC = sign * AMDTData.getSectorRho(sector[list], rho[list], phi[list]);
-            double zC = z[list];
-            double w = width[list] / 2.;
-            
-            hv[0][0][i] = zC - w;
-            hv[1][0][i] = rC;
-            hv[0][1][i] = zC + w;
-            hv[1][1][i] = rC;
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-    
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        cutArray(measuresPhi, true, " Strip");
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-    
-    private void makeDrawListFZ()
-    {
-        int mode = parameterStore.get("FZ", "Mode").getI();
-        
-        if (mode == 0 || mode >= 4)
-        {
-            numDraw = 0;
-        }
-        else
-        {
-            makeDrawList();
-            cut(" Station", station, "==", mode - 1);
-        }
-        cut("FZ", "RPCGasGap", " RPC Gas Gap", gasGap);
-    }
-    
-    protected ACoord getFZUser()
-    {
-        makeDrawListFZ();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            
-            index[i] = list;
-            if (measuresPhi[list])
-            {
-                hv[0][i] = AMath.xBox(z[list], length[list] / 2.);
-                hv[1][i] = AMath.yBox(Math.toDegrees(phi[list]), Math.toDegrees((width[list] / 2.) / rho[list]));
-            }
-            else
-            {
-                double zC = z[list];
-                double r = rho[list];
-                double cosPhi = Math.cos(phi[list]);
-                double sinPhi = Math.sin(phi[list]);
-                double phiSector = sector[list] * AMath.PI_BY_8;
-                double cosPhiSector = Math.cos(phiSector);
-                double sinPhiSector = Math.sin(phiSector);
-                double d = length[list] / 2.;
-                double w = width[list] / 2.;
-                double x = r * cosPhi;
-                double y = r * sinPhi;
-                double dx = d * sinPhiSector;
-                double dy = d * cosPhiSector;
-                double phi1 = Math.toDegrees(Math.atan2(y - dy, x + dx));
-                double phi2 = Math.toDegrees(Math.atan2(y + dy, x - dx));
-                hv[0][i] = AMath.xBox(zC, w);
-                hv[1][i] = AMath.yBox((phi1 + phi2) / 2., (phi1 - phi2) / 2.);
-                
-            }
-        }
-        return new ACoord(hv, index, this).includePhiWrapAround("FZ");
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ARVxData.java b/graphics/AtlantisJava/src/atlantis/data/ARVxData.java
deleted file mode 100644
index 6d27099259a8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ARVxData.java
+++ /dev/null
@@ -1,1043 +0,0 @@
-/*
- * CAUTION: When working on this class, remember that the number of vertices 
- *          is not a fixed number for an event. If the user fits additional 
- *          vertices in Atlantis, they will be appended to the list. For this 
- *          reason everything is using ArrayList and not simple arrays.
- */
-
-package atlantis.data;
-
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import atlantis.canvas.ACanvas;
-import atlantis.event.AEvent;
-import atlantis.event.AData;
-import atlantis.event.AAssociation;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.list.AList;
-import atlantis.list.AListManager;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection3D;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.ALogger;
-
-import static atlantis.data.AVertex.Type.*;
-
-/**
- * Stores Reconstructed vertices formed for fitting groups
- * of tracks. There may not be any reconstructed vertices when a new event
- * is read in. However, empty datatype ARVxData is always created within
- * the AEvent instance. RVx instances may be added at run time by the user
- * when the vertex fitter algorithm is run inside Atlantis.
- * 
- * @author Gary Taylor
- */
-public class ARVxData extends AData
-{
-    private static ALogger logger = ALogger.getLogger(ARVxData.class);
-    
-    // size of the arrays with coordinates of the RVx ellipse,
-    // size of martices
-    private static final int SIZE = 3;
-
-    // vertices - saved reconstructed vertices, instances of AVertex
-    private ArrayList<AVertex> vertices = new ArrayList<AVertex>();
-    // tracksIndex - indices of tracks (starting from 0)
-    private ArrayList<int[]> tracksIndex = new ArrayList<int[]>();
-    // tracksId - IDs of tracks (as read from event file)
-    private ArrayList<int[]> tracksId = new ArrayList<int[]>();
-    private ArrayList<String> tracksCollection = new ArrayList<String>();
-    private ArrayList<Boolean> drawFlag = new ArrayList<Boolean>();
-    // false - RVx calculated in Atlantis, true - RVx calculated in Athena
-    private ArrayList<Boolean> athenaOrigin = new ArrayList<Boolean>();
-
-    // array of flags 1 - is primary vertex candidate, this
-    // attribute should be accessed only during event finalise phase
-    private int[] primVxCand = null;
-    
-    /** Vertex type from Athena: for types see
-     * http://alxr.usatlas.bnl.gov/lxr/source/atlas/Tracking/TrkEvent/TrkEventPrimitives/TrkEventPrimitives/VertexType.h */
-    private int[] vertexType = null;
-
-    /** Array containing number of tracks associated with each vertex. */
-    private int[] numTracks = null;
-    
-    /** Flag whether track numbers are consistent: see Trac bug #551 */
-    private boolean hasConsistentTrackNumbers;
-
-    // numData (as at all other datatypes) is used instead of numVertices
-    // numData variable is referenced from ADrawnGraphics2D (by .getNumData
-    // method) and since it wasn't set properly in case of RVx it was crashing
-    // in ADrawnGraphics2D.drawLine() [when rubberbanding over RVx object]
-
-    public String getParameterGroup()
-    {
-        return "RVx";
-    }
-
-    @Override
-    public String getName()
-    {
-        return "RVx";
-    }
-
-    public String getNameScreenName()
-    {
-        return "RecVertex";
-    }
-
-    /**
-     * This constructor is called when RVx datatype is found in the event file.
-     * This RVx data was produced in Athena.
-     * @param p elements within RVx element in JiveXML input: map of names to values 
-     * @param e parent event
-     * @throws AAtlantisException if failing to create data
-     */
-    ARVxData(AHashMap p, AEvent e) throws AAtlantisException
-    {
-    	super(p,e);
-
-    	int[] tracks = p.getIntArray("tracks");
-    	numTracks = p.getUnsureIntArray("numTracks");
-    	if (numTracks == null) numTracks = new int[numData];
-    	float[] z = p.getFloatArray("z");
-    	float[] y = p.getFloatArray("y");
-    	float[] x = p.getFloatArray("x");
-    	float[] covMatrix = p.getFloatArray("covMatrix");
-    	float[] chi2 = p.getFloatArray("chi2");
-    	String[] storegateKeys = null;
-
-    	// Check whether numbers of tracks agree.
-    	hasConsistentTrackNumbers = false;
-    	if (tracks!=null) {
-    		int numTrackIds = tracks.length;
-    		int numTracksFromVertices = 0;
-    		for (int numTracksFromVertex : numTracks) {
-    			numTracksFromVertices += numTracksFromVertex;
-    		}
-    		if (numTracksFromVertices == numTrackIds) {
-    			hasConsistentTrackNumbers = true;
-    		}
-    	}
-    	if (!hasConsistentTrackNumbers) {
-    		logger.error("RVx: numbers of tracks are inconsistent.");
-    	}
-
-    	if(p.getStringArray("sgkey") != null)
-    	{
-    		storegateKeys = p.getStringArray("sgkey");
-    	}
-    	else
-    	{
-    		storegateKeys = new String[numData];
-    		for (int i = 0; i < numData; i++)
-    		{
-    			storegateKeys[i] = "n/a";
-    		}
-    	}
-
-    	// Allowed to be null if element not in JiveXML.
-    	vertexType = p.getUnsureIntArray("vertexType");
-    	
-    	primVxCand = p.getUnsureIntArray("primVxCand");
-    	if (primVxCand == null) primVxCand = new int[numData];
-
-    	if (hasConsistentTrackNumbers) createVertexTrackAssociations(tracks, storegateKeys);
-
-    	double[] pos = new double[SIZE];
-    	double[][] cov = new double[SIZE][SIZE];
-    	int[] tracksIdArray = null;
-    	int[] tracksIndexArray = null;
-
-    	int n = 0;
-    	int m = 0;
-    	for (int i = 0; i < numData; i++)
-    	{
-    		// x, y, z coordinates of the RVx ellipse
-    		pos[0] = x[i];
-    		pos[1] = y[i];
-    		pos[2] = z[i];
-
-    		// covMatrix, resp. 3x3 cov array
-    		// numbers are too small, so JiveXML multiplies by 10k, here inverse
-    		// [the same happens with covMatrix for tracks - AHelixData class]
-    		for (int j = 0; j < SIZE; j++)
-    		{
-    			for (int k = 0; k < j + 1; k++)
-    			{
-    				cov[j][k] = covMatrix[n] / 10000;
-    				cov[k][j] = cov[j][k];
-    				n++;
-    			}
-    		}
-
-    		AVertex vertex = new AVertex(chi2[i], pos, cov);
-    		vertices.add(vertex); // new vertex
-
-    		// Only save track details if data are consistent.
-    		if (hasConsistentTrackNumbers) {
-    			tracksIdArray = new int[numTracks[i]];
-    			tracksIndexArray = new int[numTracks[i]];
-    			for (int j = 0; j < numTracks[i]; j++)
-    			{
-    				tracksIdArray[j] = tracks[m];
-    				// should be removed - problem that IDs run from 1 and indices
-    				// from 0 - will be fixed
-    				tracksIndexArray[j] = tracks[m] - 1;
-    				m++;
-    			}
-    			tracksIndex.add(tracksIndexArray.clone()); // save indices of tracks
-    			tracksId.add(tracksIdArray.clone()); // save IDs of tracks
-    		}
-    		
-    		// save storeGateKey of the Tracks which form this vertex
-    		tracksCollection.add(storegateKeys[i]);
-    		drawFlag.add(new Boolean(true));
-    		athenaOrigin.add(new Boolean(true));
-    	} // for(int i = 0; i < numData; i++)
-    } // ARVxData() ---------------------------------------------------------
-
-
-    /**
-     * Create vertex-track associations. and adds them to the event's association manager.
-     * @param tracks array of track ID numbers
-     * @param storegateKeys array of storegate keys, one per vertex
-     * Also uses numTracks: number of tracks associated with each vertex.
-     */
-	private void createVertexTrackAssociations(int[] tracks, String[] storegateKeys) {
-		// Create a list of unique storegate keys.
-    	Vector<String> uniqueStoregateKeys = new Vector<String>();
-    	if(!storegateKeys[0].equals("n/a")){ 
-    		uniqueStoregateKeys.add(storegateKeys[0]);
-    	}
-    	for(int i = 0; i < storegateKeys.length; i++){
-    		if(storegateKeys[i].equals("n/a")){
-    			continue;
-    		}
-    		// Check if track particle type already added to list of storegate keys
-    		boolean inVector = false;
-    		for (String sgKey : uniqueStoregateKeys) {
-    			if (sgKey.equals(storegateKeys[i])) {
-    				inVector = true;		    
-    				break;
-    			}
-    		}
-    		// If storegate key is not in the list, it is added. 
-    		if(!inVector){
-    			uniqueStoregateKeys.add(storegateKeys[i]);
-    		}
-    	}
-    	// Create new association int array for each unique storegate key.
-    	for(int i = 0; i < uniqueStoregateKeys.size(); i++){
-        	int trackCount = 0;
-        	Vector<Integer> TrkNum = new Vector<Integer>();
-        	Vector<Integer> Track = new Vector<Integer>();
-    		// Creating vectors of the 'number of tracks associated to each list' and 'track Ids'
-    		for(int j = 0; j < storegateKeys.length; j++){
-    			if(uniqueStoregateKeys.get(i).equals(storegateKeys[j])){
-    				TrkNum.add(numTracks[j]);
-    				for(int k = trackCount; k < trackCount + numTracks[j]; k++){
-    					Track.add(tracks[k]);
-    				}
-    			}
-    			trackCount += numTracks[j];
-    		}
-    		//Converting vectors to int[]
-    		int[] assocTracks =  new int[Track.size()];
-    		for(int j = 0; j < Track.size(); j++){
-    			assocTracks[j] =  Track.get(j);
-    		}
-    		int[] numTrks = new int[TrkNum.size()];
-    		for(int j = 0; j < TrkNum.size(); j++){
-    			numTrks[j] = TrkNum.get(j);
-    		}
-    		//Creating associations
-                AAssociation assoc = new AAssociation("RVx" + getStoreGateKey(),
-                        "InDetTrack" + uniqueStoregateKeys.get(i), numTrks, 
-                        assocTracks, event);
-    		event.getAssociationManager().add(assoc);
-    	}
-	}
-
-    /**
-     * Redefined inherited method AData.getIdFromIndex()
-     * the array int[] id is not used in this class (unlike other types) so
-     * AData.getIdFromIndex() was crashing at RVx since this array was empty
-     * listdl[] array (also inherited from AData) should be properly handled
-     * in this class (used to crash when rubberbanding over displayed RVx)
-     * @param index int
-     * @return int
-     */
-    @Override
-    public int getIdFromIndex(int index)
-    {
-        return listdl[index];
-    } // getIdFromIndex() -----------------------------------------------------
-
-    /**
-     *
-     * @param listOfTracksToVertex int[] - list of track indices (internal
-     * Atlantis indices starting from 0)
-     * @param key - Track collection storeGateKey
-     */
-    private void createVertexFromTracks(int[] listOfTracksToVertex, String key)
-    {
-
-	//Retrieving/checking for pre-existing assocation
-	int[][] assoc = event.getAssociationManager().get("RVx","InDetTrack" + key);
-	if(assoc == null){
-	    //Create new association for the between selected tracks and the new vertex
-	    int[] numTracks2 = new int[1];
-	    numTracks2[0] = listOfTracksToVertex.length;
-	    event.getAssociationManager().add(new AAssociation("RVx","InDetTrack" + key, numTracks2, listOfTracksToVertex, event));
-	}else{//if assocation already exists add new one to it 	   
-	    //Remove old assocation 
-	    event.getAssociationManager().remove("InDetTrack" + key + "RVx");
-	    //Create new assocation by copying old one and adding extra line at the end.
-	    int[][] newAssoc = new int[assoc.length + 1][];
-	    for(int i = 0; i < newAssoc.length; i++){
-		if(i == assoc.length){
-		    newAssoc[i] = listOfTracksToVertex;
-		}else{
-		    newAssoc[i] = assoc[i];
-		}
-	    }
-	    //recreating  assocation
-	    event.getAssociationManager().add(new AAssociation("RVx","InDetTrack" + key,  newAssoc, event));
-	}
-
-
-
-        ATrackData aRTr = null;
-        aRTr = event.getTrackData("InDetTrack", key);
-        if (aRTr == null)
-        {
-            return;
-        }
-        // get helices of the appropriate tracks, helices are access by indices
-        // save the IDs of tracks into trackIdLocal which will be copied to tracksId
-        int[] trackIdLocal = new int[listOfTracksToVertex.length];
-        AHelix[] thisHelGoToFitter = new AHelix[listOfTracksToVertex.length];
-        for (int j = 0; j < listOfTracksToVertex.length; j++)
-        {
-            AHelix helix = aRTr.getModifiableHelix(listOfTracksToVertex[j]);
-            if (helix == null) {
-                AOutput.alwaysAppend("\nOne or more of the selected tracks do not have perigee parameters, "
-                               + "the vertex cannot be created\n", ALogInterface.BAD_COMMAND);
-                return;
-            }
-            thisHelGoToFitter[j] = helix;
-            trackIdLocal[j] = aRTr.getIdFromIndex(listOfTracksToVertex[j]);
-        }
-
-
-        double xVtx = parameterStore.get("Event", "XVtx").getD();
-        double yVtx = parameterStore.get("Event", "YVtx").getD();
-        double zVtx = parameterStore.get("Event", "ZVtx").getD();
-        AVertex startingPoint = new AVertex(new double[] { xVtx, yVtx, zVtx });
-        try
-        {
-            // RuntimeException is thrown - no vertex found or goes on (new vertex)
-            AVertex vertex = AVertexFit.fitVertex(startingPoint, thisHelGoToFitter);
-            vertices.add(vertex); // new vertex
-            tracksIndex.add(listOfTracksToVertex.clone()); // save indices of tracks
-            tracksId.add(trackIdLocal.clone()); // save IDs of tracks
-            tracksCollection.add(key);
-            drawFlag.add(new Boolean(true));
-            athenaOrigin.add(new Boolean(false));
-
-            int[] newNumTracks = new int[numData+1];
-            int[] newPrimVxCand = new int[numData+1];
-            for (int i=0; i<numData; i++) {
-                newNumTracks[i] = numTracks[i];
-                newPrimVxCand[i] = primVxCand[i];
-            }
-            numTracks = newNumTracks;
-            primVxCand = newPrimVxCand;
-            numTracks[numData] = listOfTracksToVertex.length;
-            primVxCand[numData] = 2;
-
-            if (vertexType != null) {
-                int[] newVertexType = new int[numData+1];
-                for (int i=0; i<numData; i++) {
-                    newVertexType[i] = vertexType[i];
-                }
-                vertexType = newVertexType;
-                vertexType[numData] = 2;
-            }
-
-            double[] par = vertex.getPosition();
-            double Vx = par[0];
-            double Vy = par[1];
-            // temp set axis and orientation of 3D rotation wrt last vertex
-            // adjust the starting point of the tracks according to the vertex
-            double Vz = par[2];
-            for (int j = 0; j < thisHelGoToFitter.length; j++)
-            {
-                double a = Vx - xVtx;
-                double b = Vy - yVtx;
-                double c = Vz - zVtx;
-                double size = Math.sqrt(a * a + b * b + c * c);
-                parameterStore.get("3D", "xAxis").setD(a / size);
-                parameterStore.get("3D", "yAxis").setD(b / size);
-                parameterStore.get("3D", "zAxis").setD(c / size);
-                thisHelGoToFitter[j].setPhiStartByXYPoint(Vx, Vy);
-            }
-            AOutput.alwaysAppend("\n" + getHitInfo(numData) + "\n", ALogInterface.NORMAL);
-            numData++;
-            makeDrawList();
-        }
-        catch (RuntimeException e)
-        {
-            StringBuilder temp = new StringBuilder("\nRVx: tracks (");
-            for (int i = 0; i < listOfTracksToVertex.length; i++)
-            {
-                if (i > 0)
-                {
-                    temp.append(", ");
-                }
-                // the tracks were accessed by indices but user wants to see
-                // IDs like pick prints (listOfTracksToVertex[] - indices)
-                temp.append(aRTr.getIdFromIndex(listOfTracksToVertex[i]));
-            }
-            AOutput.alwaysAppend(temp + ")\n   not originating from a common vertex\n", ALogInterface.NORMAL);
-            throw e;
-        }
-    } // createVertexFromTracks() -------------------------------------------
-
-    /**
-     * 'Colour by vertex type' option, that allows to colour the vertices depending on whether they are primary,
-     *  secondary or other vertices.
-     */
-    protected void colorbyVertexType() {
- 		
-		  int pri = parameterStore.get("RVx", "PriVxColor").getI();
-		  int sec = parameterStore.get("RVx", "SecVxColor").getI();
-		  int res = parameterStore.get("RVx", "RestVxColor").getI();
-	     
-		  if (vertexType!=null) {
-			  for (int i=0; i<numData; ++i) {
-				  int typeId = vertexType[i];
-				  AVertex.Type type = AVertex.Type.typeFromId(typeId);
-				  switch (type) {
-				  case PRIMARY:
-				  case DUMMY:
-					  color[i] = (byte) pri;
-					  break;
-				  case SECONDARY:
-					  color[i] = (byte) sec;
-					  break;
-				  case TEMPV0LAMBDA:
-					  color[i] = (byte) sec;
-					  break;
-				  case TEMPV0LAMBDABAR:
-					  color[i] = (byte) sec;
-					  break;
-				  case TEMPKSHORT:
-					  color[i] = (byte) sec;
-					  break;
-				  case PILEUP:
-				  case CONVERSION:
-				  case V0:
-				  case KINK:
-					  color[i] = (byte) res;
-					  break;
-				  default:
-					  color[i] = (byte) res;  
-					  							    					  					  									  
-				  }
-			  }
-		  }
-		  else if (primVxCand!=null) {          // use primary vertex candidate flag as fall-back if vertex type not available
-              for (int i=0; i<numData; ++i) {
-                  if (primVxCand[i]==1) {
-                      color[i] = (byte) pri;
-                  }
-                  else {
-                      color[i] = (byte) res;
-                  }
-              }
-		  }
-		  else {                               // if no vertex type information, use constant colour 
-		      colorByConstant();
-		  }
-	  }
-    
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        // The number of vertices can increase when the user fits a vertex in
-        // Atlantis, make sure the color array also increases in size then
-        if (numData > color.length)
-            color = new byte[numData];
-
-        if (colorFunction == 0)
-        {
-            colorByConstant();
-        }
-        else if(colorFunction == 1)
-        {
-            colorByIndex();
-        }
-        else if (colorFunction == 2)       	
-        {       
-        	colorbyVertexType();
-        }
-        return 0;
-    } // internalColor() ----------------------------------------------------
-
-    @Override
-    public void makeDrawList()
-    {	    
-	    numDraw = 0;
-	    listdl = new int[numData];
-	    for (int i = 0; i < numData; i++) {
-            if (drawFlag.get(i).booleanValue()) {
-                listdl[numDraw] = i;
-				numDraw++;
-            }           	           	          	
-        }
-        this.cutTracksByVertexType();
-        this.applyCuts();
-    }
-
-    private void cutTracksByVertexType() {
-        numDraw = 0;
-        listdl = new int[numData];
-        for (int i = 0; i < numData; i++) {
-            if (drawFlag.get(i).booleanValue()) {
-                // All=0, Primary=1, Secondary=2, Rest=3
-                int vertexTypeSelected =  parameterStore.get("CutsObjects", "vertextype").getI();
-                if (vertexTypeSelected==0) {
-                    listdl[numDraw] = i;
-                    numDraw++;
-                }
-                if (vertexTypeSelected==1) { // primary
-                    if (vertexType!=null) {
-                        int typeId = vertexType[i];
-                        AVertex.Type type = AVertex.Type.typeFromId(typeId);
-                        if (type == PRIMARY || type == DUMMY){
-                            listdl[numDraw] = i;
-                            numDraw++;
-                        }
-                    }
-                }
-                if (vertexTypeSelected==2){
-                    if (vertexType!=null) {
-                        int typeId = vertexType[i];
-                        AVertex.Type type = AVertex.Type.typeFromId(typeId);
-                        if (type == SECONDARY || type == TEMPV0LAMBDA || type == TEMPV0LAMBDABAR || type == TEMPKSHORT){
-                            listdl[numDraw] = i;
-                            numDraw++;
-                        }
-                    }
-                }
-                if (vertexTypeSelected==3){
-                    if (vertexType!=null) {
-                        int typeId = vertexType[i];
-                        AVertex.Type type = AVertex.Type.typeFromId(typeId);
-                        if (type == PILEUP || type == CONVERSION || type == V0 || type == KINK){
-                            listdl[numDraw] = i;
-                            numDraw++;
-                        }
-                    }
-                }              	    
-            }
-        }
-    }
-    
-    public String getHitInfo(int index)
-    {
-        boolean athenaOriginBoolean = athenaOrigin.get(index).booleanValue();
-        String origin = (athenaOriginBoolean == true) ? "Athena" : "Atlantis";
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-        if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        "\n calculated in "+origin;
-        
-        StringBuilder temp = new StringBuilder();
-        temp.append("\n" + getNameScreenName() + " (index: " + index + ") (calculated in " + origin + ")\n" + " type of Track: " + tracksCollection.get(index) + "\n");
-        temp.append(" tracks IDs = ");
-        boolean tracksIDsKnown = false;
-        if (tracksId.size() > 0) {
-            int[] tracksIdInVertex = (tracksId.get(index));
-            for (int i = 0; i < tracksIdInVertex.length; i++)
-            {
-                int id2 = tracksIdInVertex[i];
-                // if the JiveXML knows that vertex creates X number of
-                // tracks but doesn't know the ID, -1 is put as tracks ID
-                // list of -1 doesn't need to be printed
-                if (id2 > -1)
-                {
-                    tracksIDsKnown = true;
-                    if (i > 0)
-                    {
-                        temp.append(",");
-                    }
-                    temp.append(tracksIdInVertex[i]);
-                }
-            }
-        }
-        if (!tracksIDsKnown)  temp.append("n/a");
-        //To display in the output screen the vertex type number and description when this is selected
-        if (vertexType!=null) {
-			  int typeId = vertexType[index];
-			  AVertex.Type type = AVertex.Type.typeFromId(typeId);
-			  String vertexInfo = String.format("%nVertex type = %d (%s)", typeId, type.description);
-			  temp.append(vertexInfo);
-        }
-        temp.append("\nPrimary candidate status = " + primVxCand[index]);
-        temp.append("\nnumTracks = " + numTracks[index]);
-        temp.append("\n" + vertices.get(index));
-        return temp.toString();
-    } // getHitInfo() -------------------------------------------------------
-
-    @Override
-    public ACoord getYXUser()
-    {
-        makeDrawList();
-        double hv[][][] = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double[][] p = vertex.getYXEllipse();
-            hv[0][i] = p[0];
-            hv[1][i] = p[1];
-
-            index[i] = listdl[i];
-        }
-        return new ACoord(hv, index, this);
-    } // getYXUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getXZUser()
-    {
-        makeDrawList();
-        double hv[][][] = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double[][] p = vertex.getXZEllipse();
-            hv[0][i] = p[0];
-            hv[1][i] = p[1];
-            index[i] = listdl[i];
-        }
-        return new ACoord(hv, index, this);
-    } // getXZUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getYZUser()
-    {
-        makeDrawList();
-        double hv[][][] = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double[][] p = vertex.getYZEllipse();
-            hv[0][i] = p[0];
-            hv[1][i] = p[1];
-            index[i] = listdl[i];
-        }
-        return new ACoord(hv, index, this);
-    } // getYZUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getRZUser()
-    {
-        makeDrawList();
-        double hv[][][] = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            //TODO: make "RZ ellipse"
-            double[][] p = vertex.getRZEllipse();
-            hv[0][i] = p[0];
-            hv[1][i] = p[1];
-            index[i] = listdl[i];
-        }
-        return new ACoord(hv, index, this);
-    } // getRZUser() --------------------------------------------------------
-
-    @Override
-    protected ACoord get3DUser()
-    {
-        makeDrawList();
-        double h[] = new double[numDraw];
-        double v[] = new double[numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            double[] hvo = AProjection3D.getRotated(vertices.get(listdl[i]).getPosition());
-            h[i] = hvo[0];
-            v[i] = hvo[1];
-            index[i] = listdl[i];
-        }
-        return new ACoord(h, v, index, this);
-    } // get3DUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getFZUser()
-    {
-        makeDrawList();
-        double h[] = new double[numDraw];
-        double v[] = new double[numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double[] xyz = vertex.getPosition();
-            double phi = vertex.getPhi();
-            double z = xyz[2];
-            h[i] = z;
-            v[i] = Math.toDegrees(phi);
-            index[i] = listdl[i];
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FZ");
-    } // getFZUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getFRUser()
-    {
-        makeDrawList();
-        double h[] = new double[numDraw];
-        double v[] = new double[numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double rho = vertex.getRho();
-            double phi = vertex.getPhi();
-            h[i] = rho;
-            v[i] = Math.toDegrees(phi);
-            index[i] = listdl[i];
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FR");
-    } // getFRUser() --------------------------------------------------------
-
-    @Override
-    public ACoord getVPUser()
-    {
-        makeDrawList();
-        double h[] = new double[numDraw * 2];
-        double v[] = new double[numDraw * 2];
-        int[] index = new int[numDraw * 2];
-        double[] sign = new double[] { -1., 1. };
-        int num = 0;
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            double[] xyz = vertex.getPosition();
-            // if rho is 0, AMath.eta() divides by 0, since it's real type,
-            // Infinity is returned, program doesn't crash, vertex is not drawn
-            // proper would be to test all rho > 0.01cm values in advance
-            double rho = vertex.getRho();
-            double phi = vertex.getPhi();
-            double z = xyz[2];
-            double eta = AParameterUtilities.eta(z, rho);
-            double delEta = AProjectionVP.getDeltaEta(rho, z);
-            for (int j = 0; j < 2; j++)
-            {
-                h[num] = eta + sign[j] * delEta;
-                v[num] = Math.toDegrees(phi);
-                index[num] = listdl[i];
-                num++;
-            }
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    } // getVPUser() --------------------------------------------------------
-
-    protected void applyCuts()
-    {
-        cutIndex();
-
-        float[] phi = new float[numDraw];
-        float[] eta = new float[numDraw];
-        for(int i=0; i<numDraw; i++)
-        {
-            AVertex vertex = vertices.get(listdl[i]);
-            phi[i] = (float) vertex.getPhi();
-            double z = vertex.getPosition()[2];
-            eta[i] = (float) AParameterUtilities.eta(z, vertex.getRho());
-        }
-        cutPhi(phi);
-        cutEta(eta);
-
-        cut("CutsInDet", "NumRVxTracks", " Ntrack", numTracks);
-        cut("CutsInDet", "PrimaryRVx", " Primary", primVxCand);
-
-    } // applyCuts() --------------------------------------------------------
-
-    /**
-     * @param nodes Collection
-     * @return Action[]
-     * Method returns either empty list of Actions or Vertex item after the
-     * right mouse click on the list (in the list dialog)
-     * Vertex only appear if there is one type of reconstructed tracks in the
-     * list and no other datatype
-     */
-    @Override
-    public Action[] getActions(Collection nodes)
-    {
-        if (nodes.size() != 1)
-        {
-            return new Action[0];
-        }
-        final DefaultMutableTreeNode node = (DefaultMutableTreeNode) (nodes.iterator().next());
-        if (!node.getAllowsChildren())
-        {
-            return new Action[0];
-        }
-        AList[] list = AListManager.getInstance().getChildren(node);
-        if (list == null)
-        {
-            return new Action[0];
-        }
-        Set<Integer> tracks = new HashSet<Integer>();
-        Set<Integer> tracksID = new HashSet<Integer>();
-        // iterate over the items in the list (set of whichever datatypes)
-        // condition in this loop assures that 'Vertex *' action appears only
-        // if there is/are set(s) of one type of reconstructed tracks and no
-        // other types. the condition used to be
-        // list[i].getSource() == ... .event.getRTrData() which was
-        // a method depending on the current selected Hits-to-RTr association
-        for (int i = 0; i < list.length; i++)
-        {
-            // tests that there is either type of reconstructed tracks in the list
-            if (list[i].getSource() instanceof ATrackData)
-            {
-                // test that there is just one type of reconstructed tracks if
-                // there are more than one item in list
-                if (i > 0)
-                {
-                    String key1 = list[i - 1].getSource().getStoreGateKey();
-                    String key2 = list[i].getSource().getStoreGateKey();
-                    if (!(key1 == null && key2 == null) && !key1.equals(key2))
-                    {
-                        String msg = "info: Vertexing is available if only one " +
-                                     "Track collection is chosen in the list. " +
-                                     " (select: InDet->Track->Track Collections)\n";
-                        AOutput.alwaysAppend(msg, ALogInterface.NORMAL);
-                        return new Action[0];
-                    }
-                }
-                // tests passed - save indices of the tracks from the hashtable
-                for (int j = 0; j < list[i].getItems().length; j++)
-                {
-                    int index = list[i].getItems()[j];
-                    int id2 = list[i].getSource().getIdFromIndex(index);
-                    tracks.add(new Integer(index));
-                    tracksID.add(new Integer(id2));
-                }
-            }
-            else
-            {
-                return new Action[0];
-            }
-        } // for
-        int numTracks2 = tracks.size();
-        if (numTracks2 < 2)
-        {
-            return new Action[0];
-        }
-        final String trackName = list[0].getSource().getNameScreenName();
-        final String trackStoreGateKey = list[0].getSource().getStoreGateKey();
-        final int[] trackNumbers = new int[numTracks2]; // indices of tracks
-        final int[] trackIDs = new int[numTracks2]; // IDs of tracks
-        Iterator<Integer> i = tracks.iterator();
-        int n = 0;
-        while (i.hasNext())
-        {
-            trackNumbers[n++] = (i.next()).intValue();
-        }
-        i = tracksID.iterator();
-        n = 0;
-        while (i.hasNext())
-        {
-            trackIDs[n++] = (i.next()).intValue();
-        }
-        Action[] action = new Action[1]; // only one action will be displayed
-        								 // after removing interactive Athena
-        action[0] = new AbstractAction("Vertex " + trackName + " " + trackStoreGateKey + " in Atlantis")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                try
-                {
-                    createVertexFromTracks(trackNumbers, trackStoreGateKey);
-                    // maybe should be all windows
-                    ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-                    node.setUserObject(new AList(ARVxData.this, numData - 1));
-                }
-                catch (Exception ee)
-                {
-                    // this exception was initially completely ignored (empty
-                    // block) - can't actually see the reason why it is thrown
-                    // at the end of createVertexFromTracks since it should be
-                    // ignored. whether or not the exception occures tells
-                    // whether the tracks are coming from the common vertex
-
-                    logger.debug("ARVxData.getActions() exception:  " + ee.getMessage(), ee);
-                }
-            }
-        };
-
-        return action;
-    } // getActions() -------------------------------------------------------
-
-
-    /**
-     * The method is called when Remove action is selected after right-click
-     * on the list item. There may be vertices coming from different types of
-     * tracks, trackType variable assures that the current reconstructed track
-     * instance is retrieved and the helix paremeters set on corrent tracks
-     * @param index int[]
-     */
-    @Override
-    public void remove(int[] index)
-    {
-        String key = null;
-        ATrackData aRTr = null;
-        for (int i = 0; i < index.length; ++i)
-        {
-            drawFlag.set(index[i], new Boolean(false));
-            key = tracksCollection.get(index[i]);
-            aRTr = event.getTrackData("InDetTrack", key);
-            if (aRTr != null)
-            {
-                int[] tracksInVertex = (tracksIndex.get(index[i]));
-                for (int j = 0; j < tracksInVertex.length; ++j)
-                {
-                    aRTr.getModifiableHelix(tracksInVertex[j]).setPhiStartByXYPoint(0., 0.);
-                }
-            } // if
-        } // for
-    } // remove() -----------------------------------------------------------
-
-    /**
-     * if RVx (with numData > 0) is present in this event, cut Tracks
-     * forming vertices when tracks are drawn as polylines
-     */
-    public void cutTracksToRVx(AEvent event)
-    {
-    	if (!hasConsistentTrackNumbers) return;
-        for (int i = 0; i < numData; i++)
-        {
-            boolean origin = athenaOrigin.get(i).booleanValue();
-            if (origin)
-            {
-                // true - RVx coming from Athena -> cut the track if its
-                // storeGateKey is known (was saved into tracksCollection)
-                String trackKey = tracksCollection.get(i);
-                ATrackData tracks = event.getTrackData("InDetTrack", trackKey);
-                if (tracks != null)
-                {
-                    int[] tracksIdInVertex = (tracksId.get(i));
-                    if (tracksIdInVertex.length < 2) //ACH - put some more cuts on this?
-                        continue;
-                    AHelix[] thisHelGoToFitter = new AHelix[tracksIdInVertex.length];
-                    AVertex vertex = vertices.get(i);
-                    double[] par = vertex.getPosition();
-                    double Vx = par[0];
-                    double Vy = par[1];
-                    for (int j = 0; j < tracksIdInVertex.length; j++)
-                    {
-                        int id2 = tracksIdInVertex[j];
-                        // if the JiveXML knows that vertex creates X number of
-                        // tracks but doesn't know the ID, -1 is put as tracks ID
-                        // skip cutting tracks - ID is actually unknown
-                        if (id2 > -1)
-                        {
-                            thisHelGoToFitter[j] = tracks.getModifiableHelix(id2);
-                            thisHelGoToFitter[j].setPhiStartByXYPoint(Vx, Vy);
-                        }
-                    }
-                } // if(tracks != null)
-            }
-        }
-    } // cutTracksToRVx() ----------------------------------------------------
-
-
-
-    /**
-     * Returns the values of primary vertex for the current event using the
-     * first vertex in this RVx data if it exists.
-     * @return double[3] or null
-     */
-    public double[] getPrimaryVertex()
-    {
-        double[] vtx = null; // vertex position (x, y, z order)
-
-        if (!(numData > 0))
-        {
-            // Check this? If we have no vertices, want to get a primary vertex
-            // from somewhere else
-            return vtx; // null
-        }
-
-        // if datatype contains primVxCand subtag, then take first item
-        // flagged 1 (primary vertex candidate) otherwise first item of
-        // the whole datatype
-        if(primVxCand != null)
-        {
-            for(int i = 0; i < numData; i++)
-            {
-                if(primVxCand[i] == 1)
-                {
-                    vtx = vertices.get(i).getPosition();
-                    break;
-                }
-            }
-            if(vtx == null)
-            {
-                // none of the vetices had flag 1, take the first one anyway
-                vtx = vertices.get(0).getPosition();
-            }
-        }
-        else
-        {
-            // primVxCand is not available, take the first item
-            vtx = vertices.get(0).getPosition();
-        }
-
-        return vtx;
-
-    } // getPrimaryVertex() -------------------------------------------------
-
-
-
-    /**
-     *
-     * @param index int
-     * @return double[]
-     * Returns double array with x, y, z positions of the vertex
-     */
-    public double[] getVertex(int index)
-    {
-        double[] vtx = null;
-        vtx = vertices.get(index).getPosition();
-        return vtx;
-
-    } // getVertex() --------------------------------------------------------
-
-
-} // class ARVxData =========================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/AS3DData.java b/graphics/AtlantisJava/src/atlantis/data/AS3DData.java
deleted file mode 100644
index 62929b6f6b8a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AS3DData.java
+++ /dev/null
@@ -1,486 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AAssociation;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-
-/*
- * The input array clusters is being used to contain two types of information
- * for pixel clusters
- *      clusters[i][0] = identifier
- *      clusters[i][1] = -1
- * for space points from 2 strip clusters it contains the identifiers of the
- * individual strips
- *      clusters[i][0] = identifier of first strip
- *      clusters[i][1] = identifier of second strip
- */
-public class AS3DData extends A3DPointData
-{
-    private int[][] clusters = null;
-    // read from the event file
-    protected int[] layer = null;
-    private int[] etaModule = null;
-    private int[] phiModule = null;
-
-    // for use by the filter loop, group[] is filled in by hit filter, other
-    // classes contain group functionality as well but currently (2006/08)
-    // hit filter takes into account only S3D (SiSpacePoint) data
-    protected int[] group = null;
-    private double[] eta = null;
-
-    private boolean[] pixel = null;
-    public static final int PIXEL = -1;
-    public static final int CUT_INDET_SCT_ALL = -1;
-    public static final int CUT_INDET_SCT_EC_NEG = 0;
-    public static final int CUT_INDET_SCT_BARREL = 1;
-    public static final int CUT_INDET_SCT_EC_POS = 2;
-
-
-
-    public String getParameterGroup()
-    {
-        return "S3D";
-    }
-
-
-    public String getName()
-    {
-        return "S3D";
-    }
-
-
-    public String getNameScreenName()
-    {
-        return "SpacePoint";
-    }
-
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        String clId = clusters[index][0] + ", " + clusters[index][1];
-        String type = pixel[index]  ? " (Pixel hit)" : " (SCT hit)";
-
-        String temp = getNameScreenName() + " (id: " + id[index] + " index: " + index + ")" +
-                      type +
-                      "\n cluster identifiers: " + clId +
-                      "\n x = " + String.format("%.3f",x[index]) + " cm" +
-                      "\n y = " + String.format("%.3f",y[index]) + " cm" +
-                      "\n z = " + String.format("%.3f",z[index]) + " cm" +
-                      "\n " + AMath.RHO + " = " + String.format("%.3f",rho[index]) +
-                      " cm" +
-                      "\n " + AMath.PHI + " = " +
-                      String.format("%.3f",Math.toDegrees(phi[index])) +
-                      AMath.DEGREES + "  (" + String.format("%.3f",phi[index]) + " rad)" +
-                      "\n z = " + String.format("%.3f",z[index]) + " cm" +
-                      "\n group = " + group[index];
-        temp += "\n " + AMath.ETA + " module = ";
-        temp += (etaModule != null) ? Integer.toString(etaModule[index]) : "n/a";
-        temp += "\n " + AMath.PHI + " module = ";
-        temp += (phiModule != null) ? Integer.toString(phiModule[index]) : "n/a";
-        temp += super.getHitInfo(index); // finds barcode information
-
-        return temp;
-
-    } // getHitInfo() ---------------------------------------------------------
-
-
-
-    AS3DData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-        etaModule = (p.get("etaModule") != null) ? p.getIntArray("etaModule") : null;
-        phiModule = (p.get("phiModule") != null) ? p.getIntArray("phiModule") : null;
-
-        // use this for now as pixel id have bug i.e. sometimes > 0
-        layer = p.getUnknownIntArray("layer");
-        if(p.get("layer") == null || p.get("sub") == null)
-        {
-            calculateLayerSubdetector();
-        }
-        group = new int[numData];
-        eta = new double[numData];
-
-        if(p.get("clusters") != null)
-        {
-            // can only distinguish between SCT and Pixel hits if clusters
-            // subtag is available
-            pixel = new boolean[numData];
-            // save IDs from event file to be available with pick info
-            clusters = new int[numData][];
-            int[][] assocClusters = new int[numData][];
-            int[] temp = p.getIntArray("clusters");
-            for(int i = 0; i < numData; i++)
-            {
-                // save all clusters IDs
-                clusters[i] = new int[] { temp[2 * i], temp[2 * i + 1] };
-
-                // check if the second number, PIXEL (-1) designates pixel hit
-                if(temp[2 * i + 1] != PIXEL)
-                {
-                    // this is SCT spacepoint - has got two clusters
-                    assocClusters[i] = new int[] { temp[2 * i], temp[2 * i + 1] };
-                }
-                else
-                {
-                    // this is a pixel spacepoint (second cluster number is -1)
-                    pixel[i] = true;
-
-                    // to ignore associtiation between pixel clusters and spacepoints:
-                    // assocClusters[i] = null;
-
-                    // taking pixel cluster into account (pixel spacepoint has got
-                    // only one cluster) (where as SCT spacepoint has got two clusters)
-                    assocClusters[i] = new int[] { temp[2 * i] };
-                }
-            }
-            event.getAssociationManager().add(new AAssociation(getFullName(), "SiCluster", assocClusters, event));
-            event.getAssociationManager().add(new AAssociation(getFullName(), "PixelCluster", assocClusters, event));
-        }
-    }
-
-
-
-   protected void finalizeConstruction()
-   {
-       super.finalizeConstruction();
-       super.calculateAssociationViaClusters();
-
-   } // finalizeConstruction() ----------------------------------------------
-
-
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if(colorFunction == numColorTypes + 1)
-        {
-            colorByGroup();
-        }
-        else if(colorFunction == numColorTypes + 2)
-        {
-            colorBy(layer);
-        }
-        return numColorTypes + 2;
-
-    } // internalColor() ----------------------------------------------------
-
-
-    protected void colorByGroup()
-    {
-        byte ungroupedColor;
-        if(parameterStore.get(PARAMETER_GROUP, "Ungrouped").getStatus())
-            ungroupedColor = (byte) parameterStore.get(PARAMETER_GROUP, "Ungrouped").getI();
-        else
-            ungroupedColor = (byte) parameterStore.get(PARAMETER_GROUP, "Unconnected").
-                             getI();
-        int numColors = (byte) parameterStore.get("HitColors", "Number").getI();
-        numColors = Math.min(7, numColors);
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for(int i = 0; i < numData; i++)
-        {
-            if(group[i] == 0)
-                color[i] = ungroupedColor;
-            else
-                color[i] = (byte) col[(group[i] - 1) % numColors];
-        }
-    }
-
-
-
-    /**
-     * define noise and good hits type = 0 means noise
-     * noise hits - hits associated neither with Track not STr
-     * good hits - hits associated either with Track or with STr plus
-     *   group information - set by the AFilter (hit filter)
-     */
-    protected void setType()
-    {
-        int[][] assocSTr = event.getAssociationManager().get(getFullName(), "STr");
-        int[][] assocRTr = event.getAssociationManager().get(getFullName(), getReconstructedTracks());
-        for(int i = 0; i < numData; i++)
-        {
-            if((assocSTr != null && assocSTr[i] != null) ||
-               (assocRTr != null && assocRTr[i] != null) || group[i] > 0)
-            {
-                type[i] = 1;
-            }
-            else
-            {
-                type[i] = 0;
-            }
-        }
-
-    } // setType() ----------------------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutSubdetector();
-        cut("CutsInDet", "Layer", " Layer", layer);
-        cutPhi(phi);
-        cutEta(rho, z);
-        cutSimulatedTracks();
-        cutReconstructedTracks();
-        cut("CutsInDet", "Group", " Group", group);
-        if(etaModule != null)
-        {
-            cut("CutsInDet", "EtaModule", " EtaModule", etaModule);
-        }
-        if(phiModule != null)
-        {
-            cut("CutsInDet", "PhiModule", " PhiModule", phiModule);
-        }
-    }
-
-    private void cutSubdetector()
-    {
-        AParameter subPar = parameterStore.get("CutsInDet", "SCT");
-        if(subPar.getI() != -1)
-            cutArray(sub, subPar.getI(), "Barrel/Endcap");
-    }
-
-
-    public int getLayer(int id)
-    {
-        int layer;
-        if(id > -1)
-            layer = (id >> 21) & 0xF;
-        else
-            layer = (id >> 27) & 0x3;
-        int sub = getSub(id);
-        if(id > -1)
-        {
-            // strips
-            if(sub == ASiClusterData.BARREL)
-                layer += 3;
-            else
-                layer += 11;
-        }
-        else
-        {
-            // pixels
-            if(sub != ASiClusterData.BARREL)
-                layer += 7;
-        }
-        return layer;
-    }
-
-
-    public int getSub(int id)
-    {
-        if(id > -1)
-            return(id >> 25) & 0x3;
-        else
-            return(id >> 29) & 0x3;
-    }
-
-
-    private void calculateLayerSubdetector()
-    {
-        final double rhoPixelMax = 24.;
-        final double zBarrelPixelMax = 41.;
-        final double zBarrelStripsMax = 78.;
-        final double[] zEndcapPixel =
-                                      {51., 64., 90.};
-        final double[] zEndcapStrips =
-                                       {88., 98., 116., 134., 156., 190., 233.,
-                                       263.};
-        final double[] rhoBarrel =
-                                   {6.74, 11.5, 23., 34., 40., 48.};
-        for(int i = 0; i < numData; i++)
-        {
-            double z = Math.abs(this.z[i]);
-            double r = rho[i];
-            if(r < rhoPixelMax)
-            {
-                // .............................................. pixels
-                if(z < zBarrelPixelMax)
-                {
-                    // ............................................ barrel
-                    sub[i] = 1;
-                    for(int l = 0; l < rhoBarrel.length; l++)
-                        if(r < rhoBarrel[l])
-                        {
-                            layer[i] = l;
-                            break;
-                        }
-                }
-                else
-                {
-                    // ............................................ end cap
-                    layer[i] = 10;
-                    for(int l = 0; l < zEndcapPixel.length; l++)
-                    {
-                        if(z < zEndcapPixel[l])
-                        {
-                            layer[i] = 7 + l;
-                            break;
-                        }
-                    }
-                    if(this.z[i] < 0)
-                        sub[i] = 0;
-                    else
-                        sub[i] = 2;
-                }
-            }
-            else
-            {
-                // .............................................. strips
-
-                if(z < zBarrelStripsMax)
-                {
-                    // ............................................ BARREL
-                    sub[i] = 1;
-                    layer[i] = 6;
-                    for(int l = 0; l < rhoBarrel.length; l++)
-                        if(r < rhoBarrel[l])
-                        {
-                            layer[i] = l;
-                            break;
-                        }
-                }
-                else
-                {
-                    // ............................................ end cap
-                    layer[i] = 19;
-                    for(int l = 0; l < zEndcapStrips.length; l++)
-                    {
-                        if(z < zEndcapStrips[l])
-                        {
-                            layer[i] = 11 + l;
-                            break;
-                        }
-                    }
-                    if(this.z[i] < 0)
-                        sub[i] = 0;
-                    else
-                        sub[i] = 2;
-                }
-            }
-        }
-    }
-
-
-    // drawlist to be used as input to the filter
-    public int makeFilterDrawList(double etaRange)
-    {
-        calculateRhoPhi();
-
-        // overwrite the input array to improve speed
-        numDraw = 0;
-        for(int i = 0; i < numData; i++)
-        {
-            double eta = AParameterUtilities.eta(z[i], rho[i]);
-            this.eta[i] = eta;
-            if(eta > -etaRange && eta < etaRange)
-            {
-                listdl[numDraw++] = i;
-            }
-        }
-
-        return numDraw;
-    }
-
-
-    public int[] getIntegerEta(int numBins, double etaRange, int[] integerEta)
-    {
-        // overwrite the input array to improve speed
-        double binWidth = 2 * etaRange / numBins;
-        double etaRangeOptimised = etaRange + binWidth;
-        for(int i = 0; i < numDraw; i++)
-            // implicit (int) conversion only does correct thing if positive
-            integerEta[i] = (int) ((eta[listdl[i]] + etaRangeOptimised) /
-                                   binWidth);
-        return integerEta;
-    }
-
-
-    public int[] getIntegerPhi(int numBins, double skew, int[] integerPhi)
-    {
-        calculateRhoPhi();
-        // overwrite the input array to improve speed
-        double binWidth = 2 * Math.PI / numBins;
-        for(int i = 0; i < numDraw; i++)
-        {
-            // can only be positive
-            // add one to treat wraparound efficiently
-            double p = phi[listdl[i]] - skew * rho[listdl[i]];
-            if(p < 0.)
-                p += 2 * Math.PI;
-            else if(p > 2 * Math.PI)
-                p -= 2 * Math.PI;
-            integerPhi[i] = (int) (p / binWidth) + 1;
-        }
-        return integerPhi;
-    }
-
-
-    public int[] getLayer(int[] layer)
-    {
-        for(int i = 0; i < numDraw; i++)
-            layer[i] = this.layer[listdl[i]];
-        return layer;
-    }
-
-
-    public void setGroup(int[] group)
-    {
-        for(int i = 0; i < numData; i++)
-            this.group[i] = 0;
-        for(int i = 0; i < numDraw; i++)
-            this.group[listdl[i]] = group[i];
-    }
-
-
-    protected ACoord getFRUser()
-    {
-        if(!parameterStore.get("SiCluster", "Stereo").getStatus())return super.getFRUser();
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = rho[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FR");
-    }
-
-
-    protected ACoord getFZUser()
-    {
-        if(!parameterStore.get("SiCluster", "Stereo").getStatus())return super.getFZUser();
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = z[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FZ");
-    }
-
-} // class AS3DData =========================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASMTrData.java b/graphics/AtlantisJava/src/atlantis/data/ASMTrData.java
deleted file mode 100644
index dfd4eb8c63d4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASMTrData.java
+++ /dev/null
@@ -1,626 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.utils.A3Vector;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Simulated particle in the muon system
- */
-
-public class ASMTrData extends AData
-{
-    private static final double START_RADIUS = 2.;
-    protected int[] code;
-    protected int[] particleType;
-    protected int[] originVertex;
-    protected float[] pT;
-    protected float[][] rho;
-    protected float[][] phi;
-    protected float[][] z;
-    protected float[][] x;
-    protected float[][] y;
-    AHelix[] innerTrack;
-    protected int[] type;
-    private int[] index;
-
-
-    public String getParameterGroup()
-    {
-        return "SMTr";
-    }
-
-
-    public String getName()
-    {
-        return "SMTr";
-    }
-
-
-    public String getNameScreenName()
-    {
-        return "SimMuonTrack";
-    }
-
-
-    ASMTrData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        rho = new float[2][];
-        phi = new float[2][];
-        z = new float[2][];
-        x = new float[2][];
-        y = new float[2][];
-        x[0] = new float[numData];
-        y[0] = new float[numData];
-        rho[0] = p.getFloatArray("rhoVertex");
-        phi[0] = p.getFloatArray("phiVertex");
-        z[0] = p.getFloatArray("zVertex");
-        for(int i = 0; i < numData; ++i)
-        {
-            x[0][i] = (float) (rho[0][i] * Math.cos(phi[0][i]));
-            y[0][i] = (float) (rho[0][i] * Math.sin(phi[0][i]));
-        }
-        x[1] = (float[]) x[0].clone();
-        y[1] = (float[]) y[0].clone();
-        z[1] = (float[]) z[0].clone();
-        phi[1] = (float[]) phi[0].clone();
-        rho[1] = (float[]) rho[0].clone();
-        pT = p.getFloatArray("pt");
-        code = p.getIntArray("code");
-        type = new int[numData];
-        particleType = new int[numData];
-        originVertex = p.getIntArray("simulatedVertex");
-        for(int i = 0; i < numData; i++)
-        {
-            if(Math.abs(code[i]) > 10)
-                // code is being used to store particle code
-                particleType[i] = APDGTable.getParticleType(code[i]);
-        }
-        calculateReasonableEndpoints(p.getFloatArray("phi"),
-                                     p.getFloatArray("eta"));
-        double[] phiD = new double[numData];
-        float[] phiF = p.getFloatArray("phi");
-        for(int i = 0; i < numData; i++)
-            phiD[i] = phiF[i];
-        index = indexBy(phiD);
-    }
-
-
-    protected void calculateRhoPhi()
-    {
-        calculateRhoPhi(x[0], y[0], rho[0], phi[0]);
-        calculateRhoPhi(x[1], y[1], rho[1], phi[1]);
-    }
-
-    private void calculateReasonableEndpoints(float[] phiDir, float[] eta)
-    {
-        double rhoTo = 1500.;
-        double zTo = 2500.;
-        int maxPoints = 5;
-        double[] d = new double[maxPoints];
-        for(int i = 0; i < numData; i++)
-        {
-            int numPoints = 0;
-            //initial point inside volume
-            if(rho[0][i] < rhoTo && Math.abs(z[0][i]) < zTo)
-            {
-                d[numPoints++] = 0.;
-            }
-            double lambda = AMath.lambda(eta[i]);
-            double x0 = x[0][i];
-            double y0 = y[0][i];
-            double z0 = z[0][i];
-            x[1][i] = (float) x0;
-            y[1][i] = (float) y0;
-            z[1][i] = (float) z0;
-            double u = Math.cos(lambda) * Math.cos(phiDir[i]);
-            double v = Math.cos(lambda) * Math.sin(phiDir[i]);
-            double w = Math.sin(lambda);
-            //intersections with cylinder walls
-            if(w != 0.)
-            {
-                d[numPoints++] = (zTo - z0) / w;
-                d[numPoints++] = ( -zTo - z0) / w;
-            }
-            double a = u * u + v * v;
-            double c = x0 * x0 + y0 * y0 - rhoTo * rhoTo;
-            double b = 2 * (u * x0 + v * y0);
-            double squared = b * b - 4 * a * c;
-            if(squared >= 0.)
-            {
-                d[numPoints++] = ( -b + Math.sqrt(squared)) / (2 * a);
-                d[numPoints++] = ( -b - Math.sqrt(squared)) / (2 * a);
-            }
-            //bubble sort points by increasing path length
-            for(int j = 0; j < numPoints - 1; ++j)
-                for(int k = j + 1; k < numPoints; ++k)
-                    if(d[k] < d[j])
-                    {
-                        double temp = d[k];
-                        d[k] = d[j];
-                        d[j] = temp;
-                    }
-            for(int j = 0; j < numPoints; ++j)
-                if(d[j] >= 0. && j < numPoints - 1)
-                {
-                    x[0][i] = (float) (x0 + d[j] * u);
-                    y[0][i] = (float) (y0 + d[j] * v);
-                    z[0][i] = (float) (z0 + d[j] * w);
-                    x[1][i] = (float) (x0 + d[j + 1] * u);
-                    y[1][i] = (float) (y0 + d[j + 1] * v);
-                    z[1][i] = (float) (z0 + d[j + 1] * w);
-                    break;
-                }
-        }
-    }
-
-
-    protected void finalizeConstruction()
-    {
-        super.finalizeConstruction();
-        // needs ZVTx
-        innerTrack = new AHelix[numData];
-        for(int i = 0; i < numData; ++i)
-        {
-            double p = AMath.getPFromPttL(pT[i],
-                                          AMath.tanLambda(AParameterUtilities.eta(z[0][i],
-                rho[0][i])));
-            // correct for average energy loss
-            double pTCorrected = pT[i] * (p + 3.7) / p;
-            innerTrack[i] = new AHelix((float) 0.,
-                                       (float) (parameterStore.get("Event", "ZVtx").getD()), (
-                                           float) (Math.toDegrees(phi[0][i])),
-                                       (float) AMath.tanLambda(AParameterUtilities.eta(z[0][i],
-                rho[0][i])), (float) pTCorrected);
-            // calculatePhiCorrection(i);
-        }
-    }
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsInDet", "STrType", " STr Type", particleType);
-        cut("CutsInDet", "STr", " STr id", id);
-        cut("CutsInDet", "Pt", " |Pt|", pT);
-        cut("CutsInDet", "SVx", " Vertex", originVertex);
-        cutPhi(phi[1]);
-        float[] phiStart = new float[numData];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-            if(rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-            phiStart[list] = (float) phi[iMin][list];
-        }
-        cutPhi(phiStart);
-        cutEta(rho[1], z[1]);
-    }
-
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if(colorFunction == 0)
-            colorByConstant();
-        else if(colorFunction == 1)
-            colorByIndex(index);
-        else if(colorFunction == 2)
-            colorBy("ParticleColors", particleType);
-        return 2;
-    }
-
-
-    public String getHitInfo(int index)
-    {
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n Type = ");
-        msg.append(APDGTable.getName(code[index]));
-        if (innerTrack != null)
-            msg.append(innerTrack[index].toString());
-        msg.append("\n pT (muon spectrometer) = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV");
-
-        return msg.toString();
-    }
-
-
-    protected void cutStartRadius()
-    {
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-            if(Math.min(Math.abs(z[0][listdl[i]] / rho[0][listdl[i]]),
-                        Math.abs(z[1][listdl[i]] / rho[1][listdl[i]]))
-               < 12.3 / 9.2)
-                listdl[num++] = listdl[i];
-        numDraw = num;
-    }
-
-
-    protected void cutStartRadius2()
-    {
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-            if(Math.max(Math.abs(z[0][listdl[i]] / rho[0][listdl[i]]),
-                        Math.abs(z[1][listdl[i]] / rho[1][listdl[i]]))
-               > 12.3 / 9.2)
-                listdl[num++] = listdl[i];
-        numDraw = num;
-    }
-
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        cutStartRadius();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = x[j][list];
-                hv[1][j][i] = y[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        int numSplit = 0;
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[0][list] - phiMid);
-            double sign0 = -1.;
-            if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign0 = +1.;
-            phiDiff = Math.abs(phi[1][list] - phiMid);
-            double sign1 = -1.;
-            if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign1 = +1.;
-            if(sign0 != sign1) numSplit++;
-        }
-        int numPoints = 100;
-        double[][][] hv = new double[2][numDraw + numSplit][];
-        int[] index = new int[numDraw + numSplit];
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[0][list] - phiMid);
-            double sign0 = -1.;
-            if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign0 = +1.;
-            phiDiff = Math.abs(phi[1][list] - phiMid);
-            double sign1 = -1.;
-            if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign1 = +1.;
-            if(sign0 == sign1)
-            {
-                hv[0][num] = AMath.splitLineIntoPieces(new double[]
-                    {z[1][list], z[0][list]}, numPoints);
-                double[] xx = AMath.splitLineIntoPieces(new double[]
-                    {x[1][list], x[0][list]}, numPoints);
-                double[] yy = AMath.splitLineIntoPieces(new double[]
-                    {y[1][list], y[0][list]}, numPoints);
-                hv[1][num] = new double[xx.length];
-                for(int j = 0; j < xx.length; ++j)
-                    hv[1][num][j] = sign0 *
-                                    Math.sqrt(xx[j] * xx[j] + yy[j] * yy[j]);
-                index[num++] = list;
-            }
-            else
-            {
-                //just for now....
-                double a = Math.cos(phiMid);
-                double b = Math.sin(phiMid);
-                double x0 = x[0][list];
-                double y0 = y[0][list];
-                double z0 = z[0][list];
-                double dx = x[1][list] - x0;
-                double dy = y[1][list] - y0;
-                double dz = z[1][list] - z0;
-                double mag = Math.sqrt(dx * dx + dy * dy + dz * dz);
-                dx /= mag;
-                dy /= mag;
-                dz /= mag;
-                double d = -(a * x0 + b * y0) / (a * dx + b * dy);
-                double xMid = x0 + d * dx;
-                double yMid = y0 + d * dy;
-                double zMid = z0 + d * dz;
-                hv[0][num] = AMath.splitLineIntoPieces(new double[]
-                    {zMid, z[0][list]}, numPoints);
-                double[] xx = AMath.splitLineIntoPieces(new double[]
-                    {xMid, x[0][list]}, numPoints);
-                double[] yy = AMath.splitLineIntoPieces(new double[]
-                    {yMid, y[0][list]}, numPoints);
-                hv[1][num] = new double[xx.length];
-                for(int j = 0; j < xx.length; ++j)
-                    hv[1][num][j] = sign0 *
-                                    Math.sqrt(xx[j] * xx[j] + yy[j] * yy[j]);
-                index[num++] = list;
-                hv[0][num] = AMath.splitLineIntoPieces(new double[]
-                    {z[1][list], zMid}, numPoints);
-                xx = AMath.splitLineIntoPieces(new double[]
-                                               {x[1][list], xMid}, numPoints);
-                yy = AMath.splitLineIntoPieces(new double[]
-                                               {y[1][list], yMid}, numPoints);
-                hv[1][num] = new double[xx.length];
-                for(int j = 0; j < xx.length; ++j)
-                    hv[1][num][j] = sign1 *
-                                    Math.sqrt(xx[j] * xx[j] + yy[j] * yy[j]);
-                index[num++] = list;
-            }
-        }
-        return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-    }
-
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        cutStartRadius();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-            if(rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-            double rho1 = rho[iMin][list];
-            double rho2 = rho[iMax][list];
-            if(rho1 > START_RADIUS)
-            {
-                hv[0][0][i] = rho1;
-                hv[1][0][i] = Math.toDegrees(phi[iMin][list]);
-            }
-            else
-            {
-                double[] rpz = calculateRhoPhiZAtStart(list);
-                hv[0][0][i] = rpz[0];
-                hv[1][0][i] = Math.toDegrees(rpz[1]);
-            }
-            hv[0][1][i] = rho2;
-            hv[1][1][i] = Math.toDegrees(phi[iMax][list]);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this,
-            ACoord.LINES).includePhiWrapAround("FR");
-    }
-
-
-    protected ACoord getXZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        double cosPhi0 = Math.cos(phi0);
-        double sinPhi0 = Math.sin(phi0);
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = x[j][list] * cosPhi0 + y[j][list] * sinPhi0;
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-
-    protected ACoord getYZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        double cosPhi0 = Math.cos(phi0);
-        double sinPhi0 = Math.sin(phi0);
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = y[j][list] * cosPhi0 - x[j][list] * sinPhi0;
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        cutStartRadius2();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-            if(rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-            double rho1 = rho[iMin][list];
-            if(rho1 > START_RADIUS)
-            {
-                hv[0][0][i] = z[iMin][list];
-                hv[1][0][i] = Math.toDegrees(phi[iMin][list]);
-            }
-            else
-            {
-                double[] rpz = calculateRhoPhiZAtStart(list);
-                hv[0][0][i] = rpz[2];
-                hv[1][0][i] = Math.toDegrees(rpz[1]);
-            }
-            hv[0][1][i] = z[iMax][list];
-            hv[1][1][i] = Math.toDegrees(phi[iMax][list]);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this,
-            ACoord.LINES).includePhiWrapAround("FZ");
-    }
-
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(projection instanceof AProjectionVP)
-        {
-            ag.draw(window.calculateDisplay(getVPUser(window, projection)));
-        }
-        else
-            super.draw(window, ag, projection);
-    }
-
-
-    // a track has two arms in the VPlot
-
-    protected ACoord getVPUser(AWindow window, AProjection projection)
-    {
-        makeDrawList();
-       
-        // make a copy of the points to draw: both arms * ??? 
-        double[][][] hv = new double[2][2 * numDraw][];
-        int[] index = new int[2 * numDraw];
-        int num = 0;
-        
-        //loop over drawn objects?
-        for(int j = 0; j < numDraw; ++j)
-        {
-            // get list item from draw index list?
-            int list = listdl[j];
-            // get the helix that should be drawn
-            ADHelix dhelix = new ADHelix(innerTrack[list]);
-            // get the helix start and end
-            double s1 = dhelix.getAStart();
-            double s2 = 179.;
-            // hardwire projection.getMinRho() == 2. for now
-            s1 = dhelix.intersectWithRadialCylinder(((AProjection2D) projection).
-                getMinRho(), s1, s2);
-            double sEnd = dhelix.intersectWithCylinder(true,
-                AProjectionVP.getRhoVPlot(), true,
-                AProjectionVP.getZVPlot());
-            s2 = Math.max(Math.min(s2, sEnd), s1);
-            // if the whole helix is to be drawn (which are unusual
-            // helices, shorten it a little to avoid wraparound problems
-            if(s1 == 0. && s2 == 180.) s2 = 179.;
-            if(parameterStore.get("VP", "ShortV").getStatus() &&
-               !parameterStore.get("Data", "S3D").getStatus())
-                s1 = s2 - parameterStore.get("VP", "ShortV").getD() * (s2 - s1);
-            if(s2 > s1)
-            {
-                int signMin = -1;
-                int signMax = 1;
-                for(int sign = signMin; sign <= signMax; sign += 2)
-                {
-                    // ugly must change structure at some point
-                    AProjectionVP.sign = sign;
-                    ACoord pointsOnHelix = dhelix.drawHelix(window,
-                        (AProjection2D) projection, s1, s2);
-                    hv[0][num] = pointsOnHelix.hv[0][0];
-                    hv[1][num] = pointsOnHelix.hv[1][0];
-                    index[num] = list;
-                    num++;
-                }
-            }
-        }
-        return window.calculateUser(new ACoord(hv, index, this,
-                                               ACoord.SMOOTH_POLYLINES)).
-            includePhiWrapAround(projection.getName());
-    }
-
-
-    private double[] calculateRhoPhiZAtStart(int index)
-    {
-        double[] rpz = new double[3];
-        double rho1 = rho[0][index];
-        double phi1 = phi[0][index];
-        double z1 = z[0][index];
-        double rho2 = rho[1][index];
-        double phi2 = phi[1][index];
-        double z2 = z[1][index];
-        double x1 = rho1 * Math.cos(phi1);
-        double y1 = rho1 * Math.sin(phi1);
-        double x2 = rho2 * Math.cos(phi2);
-        double y2 = rho2 * Math.sin(phi2);
-        double fract = (START_RADIUS - rho1) / (rho2 - rho1);
-        double x = x1 + fract * (x2 - x1);
-        double y = y1 + fract * (y2 - y1);
-        double z = z1 + fract * (z2 - z1);
-        double phi = Math.atan2(y, x);
-        if(phi < 0.) phi += 2 * Math.PI;
-        rpz[0] = START_RADIUS;
-        rpz[1] = phi;
-        rpz[2] = z;
-        return rpz;
-    }
-
-
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumP = 0.;
-        double sumPt = 0.;
-        for(int i = 0; i < numDraw; ++i)
-        {
-            sumPt += Math.abs(pT[listdl[i]]);
-            double invLambda = (rho[1][listdl[i]] - rho[0][listdl[i]]) /
-                               (z[1][listdl[i]] - z[0][listdl[i]]);
-            sumP += Math.abs(pT[listdl[i]] / Math.cos(Math.atan(1. / invLambda)));
-        }
-
-        String msg = numDraw + " " + getNameScreenName();
-        msg += "  sum(PT) = " + String.format("%.1f",sumPt) + "  sum(P) = " + String.format("%.1f",sumP);
-
-        return msg;
-    }
-
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for(int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A3Vector start = A3Vector.fromRhoPhiZ(rho[0][k], phi[0][k],
-                z[0][k]);
-            A3Vector stop = A3Vector.fromRhoPhiZ(rho[1][k], phi[1][k],
-                z[1][k]);
-            A3Vector v = (stop.subtract(start)).normalize();
-            double p = pT[k] / Math.sqrt(1. - v.z * v.z);
-            sum.add(new A4Vector(v.scale(p), 0.));
-        }
-        return sum;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASNPData.java b/graphics/AtlantisJava/src/atlantis/data/ASNPData.java
deleted file mode 100644
index 4c6602479950..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASNPData.java
+++ /dev/null
@@ -1,659 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionXZ;
-import atlantis.utils.A3Vector;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-/**
- * Simulated Neutral Particle
- */
-
-public class ASNPData extends AData
-{
-    private static ALogger logger = ALogger.getLogger(ASNPData.class);
-    
-    private static final double START_RADIUS = 2.;
-
-    protected int[] code;
-    protected int[] particleType;
-    protected int[] originVertex;
-    protected float[] pT;
-    protected float[][] rho;
-    protected float[][] phi;
-    protected float[][] z;
-    protected float[][] x;
-    protected float[][] y;
-    protected int[] type;
-    private float[] temp;
-    private int[] index;
-
-    public float[] getPt()
-    {
-        return pT;
-    }
-
-    public String getParameterGroup()
-    {
-        return "SNP";
-    }
-
-    public String getName()
-    {
-        return "SNP";
-    }
-
-    public String getNameScreenName()
-    {
-        return "SimNeutralTrack";
-    }
-
-    ASNPData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        rho = new float[2][];
-        phi = new float[2][];
-        z = new float[2][];
-        x = new float[2][numData];
-        y = new float[2][numData];
-        rho[0] = p.getFloatArray("rhoVertex");
-        phi[0] = p.getFloatArray("phiVertex");
-        z[0] = p.getFloatArray("zVertex");
-
-        pT = p.getFloatArray("pt");
-        code = p.getIntArray("code");
-        type = new int[numData];
-        particleType = new int[numData];
-        originVertex = p.getIntArray("simulatedVertex");
-        temp = new float[numData];
-        for (int i = 0; i < numData; i++)
-        {
-            if (Math.abs(code[i]) > 10)
-            {
-                // code is being used to store particle code
-                particleType[i] = APDGTable.getParticleType(code[i]);
-            }
-        }
-        calculateReasonableEndpoints(p.getFloatArray("phi"), p.getFloatArray("eta"));
-
-        double[] phiD = new double[numData];
-        float[] phiF = p.getFloatArray("phi");
-
-        for (int i = 0; i < numData; i++)
-            phiD[i] = phiF[i];
-        index = indexBy(phiD);
-        calculateXY(rho[0], phi[0], x[0], y[0]);
-        calculateXY(rho[1], phi[1], x[1], y[1]);
-    }
-
-    protected void calculateRhoPhi()
-    {
-        calculateRhoPhi(x[0], y[0], rho[0], phi[0]);
-        calculateRhoPhi(x[1], y[1], rho[1], phi[1]);
-    }
-
-    public static AHashMap createSNP(AHashMap p)
-    {
-        float[] pt = p.getFloatArray("pt");
-        float[] phi = p.getFloatArray("phi");
-        float[] eta = p.getFloatArray("eta");
-        float[] rhoVertex = p.getFloatArray("rhoVertex");
-        float[] phiVertex = p.getFloatArray("phiVertex");
-        float[] zVertex = p.getFloatArray("zVertex");
-        int[] id = p.getIntArray("id");
-
-        int[] code = p.getIntArray("code");
-
-        int numNeutral = 0;
-
-        for (int i = 0; i < code.length; ++i)
-        {
-            int charge = code[i];
-
-            try
-            {
-                if (Math.abs(code[i]) >= 10)
-
-                    // code is being used to store particle code
-                    charge = APDGTable.getCharge(code[i]);
-                if (charge == 0)
-                    numNeutral++;
-            }
-            catch (APDGTable.ParticleNotFoundError pnf){
-              logger.debug(pnf.getMessage());
-            }
-        }
-
-        int[] simulatedVertex = ASVxData.assignVertexNumbers(phiVertex, rhoVertex, zVertex);
-
-        int[] idN = new int[numNeutral];
-        float[] rhoVertexN = new float[numNeutral];
-        float[] phiVertexN = new float[numNeutral];
-        float[] zVertexN = new float[numNeutral];
-        float[] ptN = new float[numNeutral];
-        float[] phiN = new float[numNeutral];
-        float[] etaN = new float[numNeutral];
-        int[] codeN = new int[numNeutral];
-        int[] simulatedVertexN = new int[numNeutral];
-
-        numNeutral = 0;
-        for (int i = 0; i < code.length; ++i)
-        {
-            double charge = code[i];
-
-            try
-            {
-                if (Math.abs(code[i]) >= 10)
-                {
-                    // code is being used to store particle code
-                    charge = APDGTable.getCharge(code[i]);
-                }
-                if (charge == 0)
-                {
-                    idN[numNeutral] = id[i];
-                    rhoVertexN[numNeutral] = (float) Math.sqrt(rhoVertex[i]*rhoVertex[i]-zVertex[i]*zVertex[i]);
-                    phiVertexN[numNeutral] = phiVertex[i];
-                    zVertexN[numNeutral] = zVertex[i];
-                    ptN[numNeutral] = pt[i];
-                    phiN[numNeutral] = phi[i];
-                    etaN[numNeutral] = eta[i];
-                    codeN[numNeutral] = code[i];
-                    simulatedVertexN[numNeutral] = simulatedVertex[i];
-                    numNeutral++;
-                }
-            }
-            catch (APDGTable.ParticleNotFoundError pnf){
-              logger.debug(pnf.getMessage());
-            }
-        }
-
-        AHashMap newP = new AHashMap(10);
-
-        newP.put("numData", new Integer(numNeutral));
-        newP.put("id", idN);
-        newP.put("rhoVertex", rhoVertexN);
-        newP.put("phiVertex", phiVertexN);
-        newP.put("zVertex", zVertexN);
-        newP.put("pt", ptN);
-        newP.put("phi", phiN);
-        newP.put("eta", etaN);
-        newP.put("code", codeN);
-        newP.put("simulatedVertex", simulatedVertexN);
-        return newP;
-    }
-
-    private void calculateReasonableEndpoints(float[] dirPhi, float[] dirEta)
-    {
-        double rhoTo = parameterStore.get("RTr", "RadiusTr").getD();
-        double zTo = parameterStore.get("RTr", "ZTr").getD();
-
-        rho[1] = (float[]) rho[0].clone();
-        phi[1] = (float[]) phi[0].clone();
-        z[1] = (float[]) z[0].clone();
-        for (int i = 0; i < numData; i++)
-        {
-            if (particleType[i] == 5)
-            {
-                // photon -> ecal entrance
-                rhoTo = 150.;
-                zTo = 370.;
-            }
-            else
-            {
-                // neutral hadron -> hcal entrance
-                rhoTo = 228.;
-                zTo = 426.2;
-            }
-            if (rho[0][i] > rhoTo || Math.abs(z[0][i]) > zTo)
-                continue;
-            double rho2 = rhoTo;
-            double tanLambda = AMath.tanLambda(dirEta[i]);
-            double zz = z[0][i] + (rho2 - rho[0][i]) * tanLambda;
-
-            if (zz > zTo)
-                rho2 = (zTo - z[0][i]) / tanLambda + rho[0][i];
-            if (zz < -zTo)
-                rho2 = (-zTo - z[0][i]) / tanLambda + rho[0][i];
-            double x = rho[0][i] * Math.cos(phi[0][i]);
-            double y = rho[0][i] * Math.sin(phi[0][i]);
-            // y=mx+c, x*x+y*y=rho2*rho2
-            double m = Math.tan(dirPhi[i]);
-            double c = y - m * x;
-            // ax^2+bx+cc=0
-            double a = m * m + 1.;
-            double b = 2. * m * c;
-            double cc = c * c - rho2 * rho2;
-            double d = Math.sqrt(b * b - 4 * a * cc);
-            double x1 = (-b + d) / (a * 2);
-            double x2 = (-b - d) / (a * 2);
-            double y1 = m * x1 + c;
-            double y2 = m * x2 + c;
-            double xx = x1;
-            double yy = y1;
-
-            if ((x2 - x) * Math.cos(dirPhi[i]) + (y2 - y) * Math.sin(dirPhi[i]) > 0.)
-            {
-                xx = x2;
-                yy = y2;
-            }
-            zz = z[0][i] + (rho2 - rho[0][i]) * tanLambda;
-            rho[1][i] = (float) Math.sqrt(xx * xx + yy * yy);
-            phi[1][i] = (float) Math.atan2(yy, xx);
-            if (phi[1][i] < 0.)
-                phi[1][i] += 2 * Math.PI;
-            z[1][i] = (float) zz;
-        }
-    }
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsInDet", "STrType", " STr Type", particleType);
-        cut("CutsInDet", "STr", " STr id", id);
-        cut("CutsInDet", "Pt", " |Pt|", pT);
-        cut("CutsInDet", "SVx", " Vertex", originVertex);
-        cut("CutsInDet", "d0", " |d0|", getD0());
-        cut("CutsInDet", "d0Loose", " |d0Loose|", getD0());
-        cut("CutsInDet", "z0-zVtx", " |z0-zVtx|", getZ0Primary());
-        cut("CutsInDet", "z0", " |z0|", getZ0());
-        cutPhi(phi[1]);
-        float[] phiStart = new float[numData];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-
-            if (rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-
-            if (rho[iMin][list] > START_RADIUS)
-                phiStart[list] = phi[iMin][list];
-            else
-            {
-                double[] rpz = calculateRhoPhiZAtStart(list);
-
-                phiStart[list] = (float) rpz[1];
-            }
-        }
-        cutPhi(phiStart);
-        cutEta(rho[1], z[1]);
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if (colorFunction == 0)
-            colorByConstant();
-        else if (colorFunction == 1)
-            colorByIndex(index);
-        else if (colorFunction == 2)
-            colorBy(getPt());
-        else if (colorFunction == 3)
-            colorBy("ParticleColors", particleType);
-        else if (colorFunction == 4)
-            colorBy(originVertex);
-        return 3;
-    }
-
-    public String getHitInfo(int index)
-    {
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n Type = ");
-        msg.append(APDGTable.getName(code[index]));
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV");
-
-        return msg.toString();
-    }
-
-    protected void cutStartRadius()
-    {
-        int num = 0;
-
-        for (int i = 0; i < numDraw; i++)
-            if (Math.max(rho[0][listdl[i]], rho[1][listdl[i]]) > START_RADIUS)
-                listdl[num++] = listdl[i];
-        numDraw = num;
-    }
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = x[j][list];
-                hv[1][j][i] = y[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[1][list] - phiMid);
-            double sign;
-
-            // this is not quite correct need to split some tracks
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                sign = +1.;
-            else
-                sign = -1.;
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = sign * rho[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        cutStartRadius();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-
-            if (rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-            double rho1 = rho[iMin][list];
-            double rho2 = rho[iMax][list];
-
-            if (rho1 > START_RADIUS)
-            {
-                hv[0][0][i] = rho1;
-                hv[1][0][i] = Math.toDegrees(phi[iMin][list]);
-            }
-            else
-            {
-                double[] rpz = calculateRhoPhiZAtStart(list);
-
-                hv[0][0][i] = rpz[0];
-                hv[1][0][i] = Math.toDegrees(rpz[1]);
-            }
-            hv[0][1][i] = rho2;
-            hv[1][1][i] = Math.toDegrees(phi[iMax][list]);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FR");
-    }
-
-    protected ACoord getXZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        double cosPhi0 = Math.cos(phi0);
-        double sinPhi0 = Math.sin(phi0);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = x[j][list] * cosPhi0 + y[j][list] * sinPhi0;
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-    protected ACoord getYZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        double cosPhi0 = Math.cos(phi0);
-        double sinPhi0 = Math.sin(phi0);
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = y[j][list] * cosPhi0 - x[j][list] * sinPhi0;
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        cutStartRadius();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int iMax = 0;
-
-            if (rho[1][list] > rho[0][list])
-                iMax = 1;
-            int iMin = 1 - iMax;
-            double rho1 = rho[iMin][list];
-
-            if (rho1 > START_RADIUS)
-            {
-                hv[0][0][i] = z[iMin][list];
-                hv[1][0][i] = Math.toDegrees(phi[iMin][list]);
-            }
-            else
-            {
-                double[] rpz = calculateRhoPhiZAtStart(list);
-
-                hv[0][0][i] = rpz[2];
-                hv[1][0][i] = Math.toDegrees(rpz[1]);
-            }
-            hv[0][1][i] = z[iMax][list];
-            hv[1][1][i] = Math.toDegrees(phi[iMax][list]);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FZ");
-    }
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            h[i] = AParameterUtilities.eta(z[1][list], rho[1][list]);
-            v[i] = Math.toDegrees(phi[1][list]);
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("VP");
-    }
-
-    private double[] calculateRhoPhiZAtStart(int index)
-    {
-        double[] rpz = new double[3];
-        double rho1 = rho[0][index];
-        double phi1 = phi[0][index];
-        double z1 = z[0][index];
-        double rho2 = rho[1][index];
-        double phi2 = phi[1][index];
-        double z2 = z[1][index];
-        double x1 = rho1 * Math.cos(phi1);
-        double y1 = rho1 * Math.sin(phi1);
-        double x2 = rho2 * Math.cos(phi2);
-        double y2 = rho2 * Math.sin(phi2);
-        double fract = (START_RADIUS - rho1) / (rho2 - rho1);
-        double x = x1 + fract * (x2 - x1);
-        double y = y1 + fract * (y2 - y1);
-        double z = z1 + fract * (z2 - z1);
-        double phi = Math.atan2(y, x);
-
-        if (phi < 0.)
-            phi += 2 * Math.PI;
-        rpz[0] = START_RADIUS;
-        rpz[1] = phi;
-        rpz[2] = z;
-        return rpz;
-    }
-
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumP = 0.;
-        double sumPt = 0.;
-
-        for (int i = 0; i < numDraw; ++i)
-        {
-            sumPt += Math.abs(pT[listdl[i]]);
-            double invLambda = (rho[1][listdl[i]] - rho[0][listdl[i]]) / (z[1][listdl[i]] - z[0][listdl[i]]);
-            sumP += Math.abs(pT[listdl[i]] / Math.cos(Math.atan(1. / invLambda)));
-        }
-
-        String msg = numDraw + " " + getNameScreenName();
-        msg += "  sum(PT) = " + String.format("%.1f",sumPt) + "  sum(P) = " + String.format("%.1f",sumP);
-
-        return msg;
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A3Vector start = A3Vector.fromRhoPhiZ(rho[0][k], phi[0][k], z[0][k]);
-            A3Vector stop = A3Vector.fromRhoPhiZ(rho[1][k], phi[1][k], z[1][k]);
-            A3Vector v = (stop.subtract(start)).normalize();
-            double p = pT[k] / Math.sqrt(1. - v.z * v.z);
-            sum.add(new A4Vector(v.scale(p), 0.));
-        }
-
-        return sum;
-    }
-
-    private float[] getZ0()
-    {
-        for (int i = 0; i < numDraw; ++i)
-        {
-            int list = listdl[i];
-            double[] poca = getPoca(list);
-            temp[list] = (float) poca[2];
-        }
-        return temp;
-    }
-
-    private float[] getZ0Primary()
-    {
-        double[] primary = event.getPrimaryVertex();
-        double c = primary[2];
-        for (int i = 0; i < numDraw; ++i)
-        {
-            int list = listdl[i];
-            double[] poca = getPoca(list);
-            temp[list] = (float) (poca[2] - c);
-        }
-        return temp;
-    }
-
-    private float[] getD0()
-    {
-        double[] primary = event.getPrimaryVertex();
-        double a = primary[0];
-        double b = primary[1];
-        for (int i = 0; i < numDraw; ++i)
-        {
-            int list = listdl[i];
-            double[] poca = getPoca(list);
-            temp[list] = (float) Math.hypot(a-poca[0], b-poca[1]);
-        }
-        return temp;
-    }
-
-    private double[] getPoca(int i)
-    {
-        double[] primary = event.getPrimaryVertex();
-        double a = primary[0];
-        double b = primary[1];
-        double xMin;
-        double yMin;
-        double zMin;
-        double dx = x[1][i] - x[0][i];
-        if (dx == 0.)
-        {
-            xMin = x[0][i];
-            yMin = b;
-        }
-        else
-        {
-            double m = (y[1][i] - y[0][i]) / dx;
-            double c = y[0][i] - m * x[0][i];
-            xMin = (a + (b - c) * m) / (m * m + 1);
-            yMin = m * xMin + c;
-        }
-        double dz = z[1][i] - z[0][i];
-        if (dz == 0.)
-        {
-            zMin = z[0][i];
-        }
-        else
-        {
-            double mx = (x[1][i] - x[0][i]) / dz;
-            if (mx != 0.)
-                zMin = z[0][i] + (xMin - x[0][i]) / mx;
-            else
-            {
-                double my = (y[1][i] - y[0][i]) / dz;
-                if (my != 0.)
-                    zMin = z[0][i] + (yMin - y[0][i]) / my;
-                else
-                    zMin = z[0][i];
-            }
-        }
-        return new double[] { xMin, yMin, zMin };
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASTrData.java b/graphics/AtlantisJava/src/atlantis/data/ASTrData.java
deleted file mode 100644
index aa8f6caa5d79..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASTrData.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-
-public class ASTrData extends ATrackData
-{
-    private static ALogger logger = ALogger.getLogger(ASTrData.class);
-    
-    public static final int UNDERLYING_EVENT = 0;
-    public static final int NORMAL = 1;
-
-    protected int[] code;
-    protected int[] type;
-    protected int[] particleType;
-    protected int[] originVertex;
-
-    public String getParameterGroup()
-    {
-        return "STr";
-    }
-
-    public String getName()
-    {
-        return "STr";
-    }
-
-    public String getNameScreenName()
-    {
-        return "SimChargedTrack";
-    }
-
-    ASTrData(AHashMap p, AEvent e) throws AAtlantisException
-    {
-        super(p,e);
-        code = p.getIntArray("code");
-        originVertex = p.getIntArray("originVertex");
-        type = p.getIntArray("type");
-        particleType = new int[numData];
-        for(int i = 0; i < numData; i++)
-            particleType[i] = APDGTable.getParticleType(code[i]);
-    }
-
-
-    public static AHashMap createSTr(AHashMap p)
-    {
-        float[] pt = p.getFloatArray("pt");
-        float[] phi = p.getFloatArray("phi");
-        float[] eta = p.getFloatArray("eta");
-        float[] rhoVertex = p.getFloatArray("rhoVertex");
-        float[] phiVertex = p.getFloatArray("phiVertex");
-        float[] zVertex = p.getFloatArray("zVertex");
-        int[] id = p.getIntArray("id");
-        int[] code = p.getIntArray("code");
-        //rhoEndVertex not available in older xml files - check that it exists first.
-        float[] rhoEndVertex = (p.get("rhoEndVertex") != null) ? p.getFloatArray("rhoEndVertex") : null;
-        //float[] phiEndVertex = (p.get("phiEndVertex") != null) ? p.getFloatArray("phiEndVertex") : null;
-        float[] zEndVertex = (p.get("zEndVertex") != null) ? p.getFloatArray("zEndVertex") : null;
-        
-        int numCharged = 0;
-        for(int i = 0; i < code.length; ++i)
-        {
-            int charge = code[i];
-
-            try
-            {
-                if(Math.abs(code[i]) >= 10 || Math.abs(code[i]) == 1)
-                    // code is being used to store particle code
-                    charge = APDGTable.getCharge(code[i]);
-                if(charge == 1 || charge == -1)
-                    numCharged++;
-            }
-            catch(APDGTable.ParticleNotFoundError pnf){
-              logger.debug(pnf.getMessage());
-            }
-        }
- 
-        //Assign the vertices to the particle tracks
-        int[] simulatedVertex = ASVxData.assignVertexNumbers(phiVertex, rhoVertex, zVertex);
-
-        //Now build subsets of the charged tracks only
-        int[] idC = new int[numCharged];
-        int[] typeC = new int[numCharged];
-        float[] rhoVertexC = new float[numCharged];
-        float[] rhoEndVertexC = new float[numCharged];
-        float[] phiVertexC = new float[numCharged];
-        float[] zVertexC = new float[numCharged];
-        float[] ptC = new float[numCharged];
-        float[] phiC = new float[numCharged];
-        float[] etaC = new float[numCharged];
-        int[] chargeC = new int[numCharged];
-        int[] codeC = new int[numCharged];
-        int[] simulatedVertexC = new int[numCharged];
-
-        numCharged = 0;
-        for(int i = 0; i < code.length; ++i)
-        {
-            int charge = code[i];
-            try
-            {
-                if(Math.abs(code[i]) >= 10 || Math.abs(code[i]) == 1)
-                    // code is being used to store particle code
-                    charge = APDGTable.getCharge(code[i]);
-                if(charge == 1 || charge == -1)
-                {
-                    if(id[i] > 0)
-                    {
-                        idC[numCharged] = id[i];
-                        typeC[numCharged] = NORMAL;
-                    }
-                    else
-                    {
-                        // negative id is used to flag tracks belong to a second
-                        // track bank which correspond to the underlyingEvent
-                        // set id to zero as it is not a kine number
-                        idC[numCharged] = 0;
-                        typeC[numCharged] = UNDERLYING_EVENT;
-                    }
-                    //copy all the information
-                    rhoVertexC[numCharged] = (float)(Math.sqrt(rhoVertex[i]*rhoVertex[i]-zVertex[i]*zVertex[i]));
-                    //if there is no end vertex, fill with 0.0 as in XML file
-                    rhoEndVertexC[numCharged] = (rhoEndVertex != null) ? (float)(Math.sqrt(rhoEndVertex[i]*rhoEndVertex[i]-zEndVertex[i]*zEndVertex[i])) : 0 ;
-                    phiVertexC[numCharged] = phiVertex[i];
-                    zVertexC[numCharged] = zVertex[i];
-                    ptC[numCharged] = pt[i];
-                    //if (pt[i]>5) System.out.println(zVertex[i]);
-                    phiC[numCharged] = phi[i];
-                    etaC[numCharged] = eta[i];
-                    codeC[numCharged] = code[i];
-                    chargeC[numCharged] = charge;
-                    simulatedVertexC[numCharged] = simulatedVertex[i];
-                    numCharged++;
-                }
-            }
-            catch(APDGTable.ParticleNotFoundError pnf)
-            {
-                logger.debug(pnf.getMessage());
-            }
-        }
-
-        //Build a new hash map with the information for the 
-        //charged tracks only
-        AHashMap newP = new AHashMap(12);
-        newP.put("numData", new Integer(numCharged));
-        newP.put("id", idC);
-        newP.put("type", typeC);
-        newP.put("rhoVertex", rhoVertexC);
-        newP.put("rhoEndVertex", rhoEndVertexC);
-        newP.put("phiVertex", phiVertexC);
-        newP.put("zVertex", zVertexC);
-        newP.put("pt", ptC);
-        newP.put("phi", phiC);
-        newP.put("eta", etaC);
-        newP.put("code", codeC);
-        newP.put("charge", chargeC);
-        newP.put("originVertex", simulatedVertexC);
-        //return the new hasp map
-        return newP;
-    }
-
-
-    /**
-     * Get the vertex for which sum|Pt| is maximum
-     * @return the index of that vertex
-     */
-    public int getMaxSumPtVertex()
-    {
-       /***
-        * Triple loop can be avoided, e.g using hashmap,
-        * to tired to fix all this - S.B.
-        */
-      
-       //get the highest vertex number
-       int maxVertex = 0;
-
-       //by looping over all tracks and looking at the vertex number
-       for(int i = 0; i < numData; i++)
-         if(type[i] == NORMAL)
-           if(originVertex[i] > maxVertex)
-             maxVertex = originVertex[i];
-       
-       //Now make an array to hold the sumPT for all vertices
-       double[] sumPt = new double[maxVertex + 1];
-
-       //Now loop again to add up all the pT
-       for(int i = 0; i < numData; i++)
-         if(type[i] == NORMAL && Math.abs(h[i].d0()) < 2.0)
-           sumPt[originVertex[i]] += Math.abs(h[i].pT());
-       
-       //Yippee - lets loop once more to find the highest pT one
-       int VtxIndex = 0;
-       for(int i = 0; i < sumPt.length; i++)
-         if(sumPt[i] > sumPt[VtxIndex])
-           VtxIndex = i;
-
-        return VtxIndex;
-    }
-
-
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-
-        // STr are always drawn as helices, check for tracks with rhoVertex
-        // beyond the diameter of InDet and don't draw those
-        super.cutRhoVertexAfterInDetRadius();
-
-        cut("CutsInDet", "STr", " STr id", id);
-        cut("CutsInDet", "STrCode", " STr code", code);
-        cut("CutsInDet", "STrType", " STr Type", particleType);
-        cut("CutsInDet", "SVx", " Vertex", originVertex);
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        switch (colorFunction)
-        {
-            case 0:
-                colorByConstant();
-                break;
-            case 1:
-                colorByIndex(index);
-                break;
-            case 2:
-                colorBy(getPt());
-                break;
-            case 3:
-                colorBy("ParticleColors", particleType);
-                break;
-            case 4:
-                colorBy(originVertex);
-                break;
-        }
-
-        return 4;
-    }
-
-    public String getHitInfo(int index)
-    {
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (barcode/id: " + id[index] + " index: " + index + ")");
-        msg.append("\n Type = "+APDGTable.getName(code[index]));
-        msg.append(" (type code "); msg.append(code[index]);
-        msg.append(")"); msg.append(h[index].toString());
-
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASVxData.java b/graphics/AtlantisJava/src/atlantis/data/ASVxData.java
deleted file mode 100644
index 87481919d2ad..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASVxData.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package atlantis.data;
-
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.*;
-import java.util.*;
-
-
-/**
- * Simulated vertices
- */
-public class ASVxData extends A3DPointData {
-
-  // protected final String PARAMETER_GROUP = getParameterGroup();
-
-
-  public String getParameterGroup()
-  {
-      return "SVx";
-  }
-
-
-  public String getName()
-  {
-      return "SVx";
-  }
-
-
-  public String getNameScreenName()
-  {
-    return "SimVertex";
-
-  }
-
-
-  public String getHitInfo(int index)
-  {
-	  int simpleOutput = AGlobals.instance().getSimpleOutput();
-	  if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-      AMath.RHO+" = "+String.format("%.3f",rho[index])+"\n "+
-      "z = "+String.format("%.3f",z[index])+" cm\n"+
-      AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-	  
-      return getNameScreenName() + " (id: " + id[index] + " index: " + index + ")" +
-          "\n x = " + String.format("%.5f",x[index]) + " cm" +
-          "\n y = " + String.format("%.5f",y[index]) + " cm" +
-          "\n z = " + String.format("%.5f",z[index]) + " cm" +
-          "\n " + AMath.RHO + " = " + String.format("%.5f",rho[index]) + " cm" +
-          "\n " + AMath.PHI + " = " +
-          String.format("%.5f",Math.toDegrees(phi[index])) + AMath.DEGREES +
-          "  (" + String.format("%.5f",phi[index]) + " rad)";
-
-  } // getHitInfo()  --------------------------------------------------------
-
-
-
-  ASVxData(AHashMap p, AEvent e) {
-    super(p,e);
-  }
-
-  // SVx do not come correctly in input xml file
-  // must create them from STr data in xml file
-  public static AHashMap createSVx(AHashMap p) {
-    float[] rhoVertex=p.getFloatArray("rhoVertex");
-    float[] phiVertex=p.getFloatArray("phiVertex");
-    float[] zVertex=p.getFloatArray("zVertex");
-    int[] sv=ASVxData.assignVertexNumbers(phiVertex, rhoVertex, zVertex);
-    int numVertex=0;
-
-    for(int i=0; i<sv.length; i++)
-      if(sv[i]>=numVertex) numVertex=sv[i]+1;
-
-    float[] rho=new float[numVertex];
-    float[] phi=new float[numVertex];
-    float[] z=new float[numVertex];
-
-    for(int i=0; i<sv.length; i++) {
-      rho[sv[i]]=(float)(Math.sqrt(rhoVertex[i]*rhoVertex[i]-zVertex[i]*zVertex[i]));
-      phi[sv[i]]=phiVertex[i];
-      z[sv[i]]=zVertex[i];
-    }
-
-    AHashMap newP=new AHashMap(4);
-
-    newP.put("numData", new Integer(numVertex));
-    newP.put("rho", rho);
-    newP.put("phi", phi);
-    newP.put("z", z);
-    return newP;
-  }
-
-  public static int[] assignVertexNumbers(float[] phi, float[] rho, float[] z) {
-    int[] sv=new int[phi.length];
-    Vertex[] key=new Vertex[phi.length];
-
-    HashMap vertices=new HashMap();
-
-// this is ugly, related to the fact that id[i]=i+1 by default;
-    int num=1;
-    for(int i=0; i<sv.length; i++) {
-      key[i]=new Vertex(rho[i], phi[i], z[i]);
-      Object value=vertices.get(key[i]);
-      if(value==null) {
-        sv[i]=num;
-        vertices.put(key[i], new Integer(num++));
-      } else {
-        sv[i]=((Integer)value).intValue();
-      }
-    }
-    return sv;
-  }
-
-  protected int internalColor() {
-    colorByConstant();
-    return 1;
-  }
-
-  protected void applyCuts() {
-    cutIndex();
-    cutPhi(phi);
-    cutEta(rho, z);
-    cut("CutsInDet", "SVx", " Vertex", id);
-  }
-
-
-  public double[] getVertex(int index) {
-
-    double[] vertex=new double[3];
-
-    if(index>-1&&index<numData) {
-      vertex[0]=x[index];
-      vertex[1]=y[index];
-      vertex[2]=z[index];
-    }
-    return vertex;
-  }
-
-}
-
-
-class Vertex {
-  float x;
-  float y;
-  float z;
-  int hashcode;
-
-  Vertex(float x, float y, float z) {
-    this.x=x;
-    this.y=y;
-    this.z=z;
-    hashcode=Float.floatToIntBits(z);
-  }
-
-  @Override
-  public int hashCode() {
-    return hashcode;
-  }
-
-  @Override
-  public boolean equals(Object a) {
-    if(!(a instanceof Vertex)) return false;
-    Vertex b=(Vertex)a;
-    return x==b.x&&y==b.y&&z==b.z;
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASegmentData.java b/graphics/AtlantisJava/src/atlantis/data/ASegmentData.java
deleted file mode 100755
index d999effdb0b2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASegmentData.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionXZ;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * Generic track segment class.
- *
- * @author Eric Jansen
- */
-public abstract class ASegmentData extends AData {
-
-    protected float[] x;
-    protected float[] y;
-    protected float[] z;
-    protected float[] theta;
-    protected float[] phi;
-    protected int[] hits;
-    protected int[] numHits;
-
-    ASegmentData(AHashMap p, AEvent e) {
-        super(p,e);
-
-        x = p.getFloatArray("x");
-        y = p.getFloatArray("y");
-        z = p.getFloatArray("z");
-        phi = p.getFloatArray("phi");
-        theta = p.getFloatArray("theta");
-        numHits = p.getIntArray("numHits");
-
-        hits = p.getIntArray("hits");
-    }
-
-    protected int internalColor() {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        switch(colorFunction) {
-            case 0:
-                colorByConstant();
-                break;
-            case 1:
-                colorByIndex();
-                break;
-        }
-
-        return 1;
-    }
-
-    
-    protected void applyCuts()
-    {
-        cutIndex();
-        
-    }
-
-    
-    public String getHitInfo(int index) {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-
-        return getName() + " (index: " + index + ")\n"
-            + " storegate key = " + storeGateKey + "\n"
-            + " " + AMath.PHI + " = " + String.format("%.3f",Math.toDegrees(phi[index]))
-            + "  (" + String.format("%.3f",phi[index]) + " rad)" + "\n"
-            + " tL = " + String.format("%.3f",Math.toDegrees(1./Math.tan(theta[index]))) + "\n"
-            + " x = " + String.format("%.3f",x[index]) + " cm\n"
-            + " y = " + String.format("%.3f",y[index]) + " cm\n"
-            + " z = " + String.format("%.3f",z[index]) + " cm\n"
-            + " hits = " + numHits[index] + "\n";
-    }
-
-    protected ACoord getYXUser() {
-        makeDrawList();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        double length = parameterStore.get(PARAMETER_GROUP, "SegmentLength").getD();
-
-        for (int i=0; i<numDraw; i++) {
-            int j = listdl[i];
-
-            double dx = length * Math.sin(theta[j]) * Math.cos(phi[j]);
-            double dy = length * Math.sin(theta[j]) * Math.sin(phi[j]);
-
-            hv[0][i] = new double [] {x[j]-dx, x[j]-dx/2., x[j], x[j]+dx/2., x[j]+dx};
-            hv[1][i] = new double [] {y[j]-dy, y[j]-dy/2., y[j], y[j]+dy/2., y[j]+dy};
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-    }
-
-    protected ACoord getFRUser() {
-        return getYXUser().convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    protected ACoord getRZUser() {
-        makeDrawList();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        double length = parameterStore.get(PARAMETER_GROUP, "SegmentLength").getD();
-
-        for (int i=0; i<numDraw; i++) {
-            int j = listdl[i];
-
-            double dx = length * Math.sin(theta[j]) * Math.cos(phi[j]);
-            double dy = length * Math.sin(theta[j]) * Math.sin(phi[j]);
-            double dz = length * Math.cos(theta[j]);
-
-            int sign = AParameterUtilities.getRhoSign(x[j], y[j]);
-
-            hv[0][i] = new double [] {z[j]-dz, z[j]+dz};
-            hv[1][i] = new double [] {
-                sign * Math.hypot(x[i]-dx, y[i]-dy), 
-                sign * Math.hypot(x[i]+dx, y[i]+dy)
-            };
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-
-    protected ACoord getXZUser() {
-        makeDrawList();
-
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        double length = parameterStore.get(PARAMETER_GROUP, "SegmentLength").getD();
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-
-        for (int i=0; i<numDraw; i++) {
-            int j = listdl[i];
-
-            double dx = length * Math.sin(theta[j]) * Math.cos(phi[j]);
-            double dy = length * Math.sin(theta[j]) * Math.sin(phi[j]);
-            double dz = length * Math.cos(theta[j]);
-
-            double s = x[j] * Math.cos(phi0) + y[j] * Math.sin(phi0);
-            double ds = dx * Math.cos(phi0) + dy * Math.sin(phi0);
-
-            if (z[j] < 0) {
-                hv[0][i] = new double [] {z[j]+dz, z[j]-dz};
-                hv[1][i] = new double [] {s-ds, s+ds};
-            } else {
-                hv[0][i] = new double [] {z[j]-dz, z[j]+dz};
-                hv[1][i] = new double [] {s-ds, s+ds};
-            }
-
-            index[i] = j;
-        }
-
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASiClusterData.java b/graphics/AtlantisJava/src/atlantis/data/ASiClusterData.java
deleted file mode 100644
index 83cc0f980261..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASiClusterData.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-/**
- * SiCluster - Silicon clusters, reads in STC datatype from event file
- */
-public class ASiClusterData extends AHitData
-{
-    // read in from event file
-    private float[][] x;
-    private float[][] y;
-    private float[][] z;
-    private float[] width;
-    private int[] etaModule;
-    private int[] phiModule;
-    private int[] side;
-
-    // calculated
-    private float[][] rho;
-    private float[][] phi;
-    private int[] layer;
-
-    public static final int U_CLUSTER = -1;
-    public static final int PHI_CLUSTER = 0;
-    public static final int V_CLUSTER = 1;
-    public static final int ENDCAP_MINUS = 0;
-    public static final int BARREL = 1;
-    public static final int ENDCAP_PLUS = 2;
-
-
-    public String getParameterGroup()
-    {
-        return "SiCluster";
-    }
-
-    public String getName()
-    {
-        return "SiCluster";
-    }
-
-    public String getNameScreenName()
-    {
-        return "SCT_Cluster";
-    }
-
-    public float[][] getX()
-    {
-        return x;
-    }
-
-    public float[][] getY()
-    {
-        return y;
-    }
-
-    public float[][] getZ()
-    {
-        return z;
-    }
-
-
-
-    ASiClusterData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        x = new float[][] { p.getFloatArray("x0"), p.getFloatArray("x1") };
-        y = new float[][] { p.getFloatArray("y0"), p.getFloatArray("y1") };
-        z = new float[][] { p.getFloatArray("z0"), p.getFloatArray("z1") };
-        width = p.getFloatArray("width");
-
-        rho = new float[2][numData];
-        phi = new float[2][numData];
-
-        layer = new int[numData];
-        for (int i = 0; i < numData; ++i)
-        {
-            sub[i] = getSub(id[i]);
-            layer[i] = getLayer(id[i]);
-        }
-
-        etaModule = (p.get("etaModule") != null) ? p.getIntArray("etaModule") : null;
-        phiModule = (p.get("phiModule") != null) ? p.getIntArray("phiModule") : null;
-        side = (p.get("side") != null) ? p.getIntArray("side") : null;
-
-    } // ASiClusterData() ---------------------------------------------------
-
-
-
-    protected void calculateRhoPhi()
-    {
-
-        calculateRhoPhi(x[0], y[0], rho[0], phi[0]);
-        calculateRhoPhi(x[1], y[1], rho[1], phi[1]);
-        // treat wraparound
-        for (int i = 0; i < numData; ++i)
-        {
-            if (Math.abs(phi[1][i] - phi[0][i]) > Math.PI)
-            {
-                if (phi[1][i] - phi[0][i] > 0)
-                {
-                    phi[0][i] += AMath.TWO_PI;
-                }
-                else
-                {
-                    phi[1][i] += AMath.TWO_PI;
-                }
-            }
-        } // for
-    } // calculateRhoPhi() --------------------------------------------------
-
-    private void cutSubdetector()
-    {
-        AParameter par = parameterStore.get("CutsInDet", "SCT");
-        if (par.getI() != -1)
-        {
-            cutArray(sub, par.getI(), "Barrel/Endcap");
-        }
-    } // cutSubdetector() ---------------------------------------------------
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutOrientation();
-        cutSubdetector();
-        cut("CutsInDet", "Layer", "Layer", layer);
-        cutSimulatedTracks();
-        cutReconstructedTracks();
-        cutPhi(phi[0]);
-        cutEta();
-    } // applyCuts() --------------------------------------------------------
-
-    private void cutEta()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        if (!par.getStatus())
-            return;
-        double etaCut = par.getD();
-        double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-        double etaLowerCut = etaMid - etaCut;
-        double etaUpperCut = etaMid + etaCut;
-        int num = 0;
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double eta1 = AParameterUtilities.eta(z[0][list], rho[0][list]);
-            double eta2 = AParameterUtilities.eta(z[1][list], rho[1][list]);
-            double etaLower = Math.min(eta1, eta2);
-            double etaUpper = Math.max(eta1, eta2);
-            if (etaUpper > etaLowerCut && etaLower < etaUpperCut)
-                listdl[num++] = list;
-        }
-        numDraw = num;
-    } // cutEta() -----------------------------------------------------------
-
-    public int getLayer(int id)
-    {
-        int layer = (id & 0x01e00000) >> 21;
-        int sub = getSub(id);
-        if (sub == BARREL)
-        {
-            layer += 3;
-        }
-        else
-        {
-            layer += 11;
-        }
-        return layer;
-    } // getLayer() ---------------------------------------------------------
-
-    public int getSub(int id)
-    {
-        return (id & 0x06000000) >> 25;
-    } // getSub() -----------------------------------------------------------
-
-    public int getOrientation(int id)
-    {
-        int side = (id & 0x400) >> 10;
-        int sub = getSub(id);
-        if ((side == 1 && sub == BARREL) || (side == 0 && sub != BARREL))
-        {
-            return PHI_CLUSTER;
-        }
-
-        int layer = getLayer(id);
-        if (layer % 2 == 1)
-        {
-            return U_CLUSTER;
-        }
-
-        return V_CLUSTER;
-    } // getOrientation() ---------------------------------------------------
-
-    protected void cutOrientation()
-    {
-        int num = 0;
-        AParameter stereoAnglePar = parameterStore.get("SiCluster", "Stereo");
-        if (!stereoAnglePar.getStatus())
-        {
-            return;
-        }
-        int orientation = stereoAnglePar.getI();
-        for (int i = 0; i < numDraw; i++)
-        {
-            // only works for barrel for now !!!!
-            // if( getSub(id[listdl[i]])==BARREL &&
-            // orientation==getOrientation(id[listdl[i]]))
-            if (orientation == getOrientation(id[listdl[i]]))
-            {
-                listdl[num++] = listdl[i];
-            }
-        }
-        numDraw = num;
-    } // cutOrientation() ---------------------------------------------------
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if (colorFunction == numColorTypes + 1)
-        {
-            colorBy(layer);
-        }
-        else if (colorFunction == numColorTypes + 2)
-        {
-            colorByOrientation();
-        }
-
-        return numColorTypes + 2;
-    } // internalColor() ----------------------------------------------------
-
-    protected void colorByOrientation()
-    {
-        int numColors = parameterStore.get("HitColors", "Number").getI();
-        numColors = Math.min(7, numColors);
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for (int i = 0; i < numData; i++)
-        {
-            color[i] = (byte) col[getOrientation(id[i]) + 1 % numColors];
-        }
-    } // colorByOrientation() -----------------------------------------------
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index;
-        
-        String temp = getNameScreenName() + " (id: " + id[index] + " index: " + index +")\n" +
-                      " orientation = " + getOrientation(id[index]);
-        temp += "\n x = " + x[0][index] + "  " + x[1][index];
-        temp += "\n y = " + y[0][index] + "  " + y[1][index];
-        temp += "\n z = " + z[0][index] + "  " + z[1][index];
-        temp += "\n " + AMath.RHO + " = " + rho[0][index] + "  " + rho[1][index];
-        temp += "\n " + AMath.ETA + " module = ";
-        temp += (etaModule != null) ? Integer.toString(etaModule[index]) : "n/a";
-        temp += "\n " + AMath.PHI + " module = ";
-        temp += (phiModule != null) ? Integer.toString(phiModule[index]) : "n/a";
-        temp += "\n side = ";
-        temp += (side != null) ? Integer.toString(side[index]) : "n/a";
-        temp += "\n width = ";
-        temp += (width != null) ? Float.toString(width[index]) : "n/a";
-
-        temp += super.getHitInfo(index); // finds barcode information
-
-        return temp;
-    } // getHitInfo() -------------------------------------------------------
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = x[j][list];
-                hv[1][j][i] = y[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    } // getYXUser() --------------------------------------------------------
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[1][list] - phiMid);
-            double sign;
-            if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-            {
-                sign = +1.;
-            }
-            else
-            {
-                sign = -1.;
-            }
-
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = sign * rho[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    } // getRZUser() --------------------------------------------------------
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = rho[j][list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list], z[j][list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FR");
-    } // getFRUser() --------------------------------------------------------
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list], z[j][list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FZ");
-    } // getFZUser() --------------------------------------------------------
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        int numTotal = 2 * numDraw;
-        double[][][] hv = new double[2][numTotal][2];
-        int[] index = new int[numTotal];
-        double[] sign = new double[] { -1., 1. };
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for (int k = 0; k < 2; k++)
-            {
-                double deltaEta = AProjectionVP.getDeltaEta(rho[k][list], z[k][list]);
-                double eta = AParameterUtilities.eta(z[k][list], rho[k][list]);
-                for (int j = 0; j < 2; j++)
-                {
-                    hv[0][2 * i + j][k] = eta + sign[j] * deltaEta;
-                    hv[1][2 * i + j][k] = Math.toDegrees(phi[k][list]);
-                    index[2 * i + j] = list;
-                }
-            }
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES).includePhiWrapAround("VP");
-    } // getVPUser() --------------------------------------------------------
-
-} // class ASiClusterData ===================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/ASiClusterRDOData.java b/graphics/AtlantisJava/src/atlantis/data/ASiClusterRDOData.java
deleted file mode 100644
index ac1806b4cb14..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ASiClusterRDOData.java
+++ /dev/null
@@ -1,481 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionVP;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-
-/**
- * Silicon clusters RDO Raw Data Objects (class derived from ASiClusterData)
- * Parameters expected in the event file for SCTRDO datatype:
- * x0|x1|y0|y1|z0|z1|phiModule|etaModule|id|BCIDError|firstHitError|
- * formatterError|lvl1Error|preambleError|secondHitError|syncError|timeBin
- *
- */
-public class ASiClusterRDOData extends AHitData
-{
-    private float[][] x = null;
-    private float[][] y = null;
-    private float[][] z = null;
-    private int[] etaModule = null;
-    private int[] phiModule = null;
-    private int[] BCIDError = null;
-    private int[] firstHitError = null;
-    private int[] formatterError = null;
-    private int[] lvl1Error = null;
-    private int[] preambleError = null;
-    private int[] secondHitError = null;
-    private int[] syncError = null;
-    private int[] timeBin = null;
-    // calculated here
-    private int[] layer;
-    private float[][] rho;
-    private float[][] phi;
-
-    public static final int U_CLUSTER = -1;
-    public static final int PHI_CLUSTER = 0;
-    public static final int V_CLUSTER = 1;
-    public static final int ENDCAP_MINUS = 0;
-    public static final int BARREL = 1;
-    public static final int ENDCAP_PLUS = 2;
-
-
-
-    public String getParameterGroup()
-    {
-        return "SiClusterRDO";
-
-    } // getParameterGroup() ------------------------------------------------
-
-
-
-    public String getName()
-    {
-        return "SiClusterRDO";
-
-    } // getName() ----------------------------------------------------------
-
-
-
-    public String getNameScreenName()
-    {
-        return "SiClusterRDO";
-
-    } // getNameScreenName() ------------------------------------------------
-
-
-
-    ASiClusterRDOData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        x = new float[][]
-                        { p.getFloatArray("x0"), p.getFloatArray("x1") };
-        y = new float[][]
-                        { p.getFloatArray("y0"), p.getFloatArray("y1") };
-        z = new float[][]
-                        { p.getFloatArray("z0"), p.getFloatArray("z1") };
-        etaModule = p.getIntArray("etaModule");
-        phiModule = p.getIntArray("phiModule");
-        BCIDError = p.getIntArray("BCIDError");
-        firstHitError = p.getIntArray("firstHitError");
-        formatterError = p.getIntArray("formatterError");
-        lvl1Error = p.getIntArray("lvl1Error");
-        preambleError = p.getIntArray("preambleError");
-        secondHitError = p.getIntArray("secondHitError");
-        syncError = p.getIntArray("syncError");
-        timeBin = p.getIntArray("timeBin");
-        rho = new float[2][numData];
-        phi = new float[2][numData];
-        layer = new int[numData];
-
-        for(int i = 0; i < numData; ++i)
-        {
-            sub[i] = getSub(id[i]);
-            layer[i] = getLayer(id[i]);
-        }
-
-    } // ASiClusterRDOData() ------------------------------------------------
-
-
-    protected void calculateRhoPhi()
-    {
-        calculateRhoPhi(x[0], y[0], rho[0], phi[0]);
-        calculateRhoPhi(x[1], y[1], rho[1], phi[1]);
-        // treat wraparound
-        for(int i = 0; i < numData; ++i)
-        {
-            if(Math.abs(phi[1][i] - phi[0][i]) > Math.PI)
-            {
-                if(phi[1][i] - phi[0][i] > 0)
-                {
-                    phi[0][i] += AMath.TWO_PI;
-                }
-                else
-                {
-                    phi[1][i] += AMath.TWO_PI;
-                }
-            }
-        }
-
-    } // calculateRhoPhi() --------------------------------------------------
-
-
-
-    private void cutSubdetector()
-    {
-        AParameter par = parameterStore.get("CutsInDet", "SCT");
-        if(par.getI() != -1)
-        {
-            cutArray(sub, par.getI(), "Barrel/Endcap");
-        }
-
-    } // cutSubdetector() ---------------------------------------------------
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutOrientation();
-        cutSubdetector();
-        cut("CutsInDet", "Layer", "Layer", layer);
-        cutPhi(phi[0]);
-        cutEta();
-
-    } // applyCuts() --------------------------------------------------------
-
-
-
-    private void cutEta()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        if(!par.getStatus())return;
-        double etaCut = par.getD();
-        double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-        double etaLowerCut = etaMid - etaCut;
-        double etaUpperCut = etaMid + etaCut;
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double eta1 = AParameterUtilities.eta(z[0][list], rho[0][list]);
-            double eta2 = AParameterUtilities.eta(z[1][list], rho[1][list]);
-            double etaLower = Math.min(eta1, eta2);
-            double etaUpper = Math.max(eta1, eta2);
-            if(etaUpper > etaLowerCut && etaLower < etaUpperCut)
-                listdl[num++] = list;
-        }
-        numDraw = num;
-
-    } // cutEta() -----------------------------------------------------------
-
-
-
-    public int getLayer(int id)
-    {
-        int layer = (id & 0x01e00000) >> 21;
-        int sub = getSub(id);
-        if(sub == BARREL)
-            layer += 3;
-        else
-            layer += 11;
-        return layer;
-
-    } // getLayer() ---------------------------------------------------------
-
-
-
-    public int getSub(int id)
-    {
-        return(id & 0x06000000) >> 25;
-
-    } // getSub() -----------------------------------------------------------
-
-
-
-    public int getOrientation(int id)
-    {
-        int side = (id & 0x400) >> 10;
-        int sub = getSub(id);
-        if((side == 1 && sub == BARREL) || (side == 0 && sub != BARREL))
-        {
-            return PHI_CLUSTER;
-        }
-        int layer = getLayer(id);
-        if(layer % 2 == 1)return U_CLUSTER;
-        return V_CLUSTER;
-
-    } // getOrientation() ---------------------------------------------------
-
-
-
-    protected void cutOrientation()
-    {
-        int num = 0;
-        AParameter stereoAnglePar = parameterStore.get("SiCluster", "Stereo");
-        if(!stereoAnglePar.getStatus())
-        {
-            return;
-        }
-        int orientation = stereoAnglePar.getI();
-        for(int i = 0; i < numDraw; i++)
-            // only works for barrel for now !!!!
-            // if( getSub(id[listdl[i]])==BARREL && orientation==getOrientation(id[listdl[i]]))
-            if(orientation == getOrientation(id[listdl[i]]))
-            {
-                listdl[num++] = listdl[i];
-            }
-        numDraw = num;
-
-    } // cutOrientation() ---------------------------------------------------
-
-
-
-    /**
-     * parameter InDet -> SiClusterRDO -> Color Function:
-     *    pv="Constant = 0, Error = 1, Orientation = 2"
-     */
-    protected int internalColor()
-    {
-        // it's usual to call this method from mother class, but in this case
-        // it uses it's own colour types co we don't care about AHitData
-        // int numColorTypes = super.internalColor();
-
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction == 0)
-        {
-            colorByConstant();
-        }
-        else if(colorFunction == 1)
-        {
-            colorByError();
-        }
-        else if(colorFunction == 2)
-        {
-            colorByOrientation();
-        }
-
-        // 3 colour schemes exist here
-        return 3;
-
-    } // internalColor() ----------------------------------------------------
-
-
-
-    /**
-     * colour elements by error (error subtags from the event file):
-     * BCIDError, firstHitError, formatterError, lvl1Error, preambleError,
-     *    secondHitError, syncError ]
-     * if any of these flags is set to true, the element is considered erroneous
-     * (next iteration may be to colour by error type, if they want it ...)
-     */
-    protected void colorByError()
-    {
-        int constantColor = parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-        int errorColor = parameterStore.get(PARAMETER_GROUP, "Error").getI();
-
-        for(int i = 0; i < numData; i++)
-        {
-            if(BCIDError[i] != 0 || firstHitError[i] != 0 ||
-                    formatterError[i] != 0 || lvl1Error[i] != 0 ||
-                    preambleError[i] != 0 || secondHitError[i] != 0 ||
-                    syncError[i] != 0)
-            {
-                // element is erroneous
-                color[i] = (byte) errorColor;
-            }
-            else
-            {
-                color[i] = (byte) constantColor;
-            }
-        }
-
-    } // colorByError() -----------------------------------------------------
-
-
-
-    protected void colorByOrientation()
-    {
-        int numColors = parameterStore.get("HitColors", "Number").getI();
-        numColors = Math.min(7, numColors);
-        int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-        for(int i = 0; i < numData; i++)
-        {
-            color[i] = (byte) col[getOrientation(id[i]) + 1 % numColors];
-        }
-
-    } // colorByOrientation() -----------------------------------------------
-
-
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index;
-        
-        String temp = getNameScreenName() + " (id: " + id[index] + " index: " + index + ")\n" +
-        " orientation = " + getOrientation(id[index]) + "\n" +
-        " x = " + x[0][index] + "  " + x[1][index] + "\n" +
-        " y = " + y[0][index] + "  " + y[1][index] + "\n" +
-        " z = " + z[0][index] + "  " + z[1][index] + "\n" +
-        " " + AMath.RHO + " = " + rho[0][index] + "  " +
-        rho[1][index] + "\n" +
-        " " + AMath.ETA + " module = " + etaModule[index] + "\n" +
-        " " + AMath.PHI + " module = " + phiModule[index] + "\n" +
-        " BCID error = " + BCIDError[index] + "\n" +
-        " first hit error = " + firstHitError[index] + "\n" +
-        " formatter error = " + formatterError[index] + "\n" +
-        " lvl1 error = " + lvl1Error[index] + "\n" +
-        " preamble error = " + preambleError[index] + "\n" +
-        " second hit error = " + secondHitError[index] + "\n" +
-        " sync error = " + syncError[index] + "\n" +
-        " time bin = " + timeBin[index];
-        return temp;
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = x[j][list];
-                hv[1][j][i] = y[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-
-    } // getYXUser() --------------------------------------------------------
-
-
-
-    protected ACoord getRZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double phiDiff = Math.abs(phi[1][list] - phiMid);
-            double sign;
-            if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-            {
-                sign = +1.;
-            }
-            else
-            {
-                sign = -1.;
-            }
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = sign * rho[j][list];
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-
-    } // getRZUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = rho[j][list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list],
-                        z[j][list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FR");
-
-    } // getFRUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            for(int j = 0; j < 2; j++)
-            {
-                hv[0][j][i] = z[j][list];
-                hv[1][j][i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[j][list], phi[j][list],
-                        z[j][list]));
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FZ");
-
-    } // getFZUser() --------------------------------------------------------
-
-
-
-    protected ACoord getVPUser()
-    {
-        makeDrawList();
-        int numTotal = 2 * numDraw;
-        int numPoints = 10;
-        double[][][] hv = new double[2][numTotal][numPoints];
-        int[] index = new int[numTotal];
-        double[] sign = new double[]
-                                   { -1., 1.};
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double xx = x[0][list];
-            double delx = (x[1][list] - x[0][list]) / (numPoints - 1);
-            double yy = y[0][list];
-            double dely = (y[1][list] - y[0][list]) / (numPoints - 1);
-            double zz = z[0][list];
-            double delz = (z[1][list] - z[0][list]) / (numPoints - 1);
-            for(int k = 0; k < numPoints; k++)
-            {
-                double xxx = xx + k * delx;
-                double yyy = yy + k * dely;
-                double zzz = zz + k * delz;
-                double rrr = Math.sqrt(xxx * xxx + yyy * yyy);
-                double ppp = Math.atan2(yyy, xxx);
-                double deltaEta = AProjectionVP.getDeltaEta(rrr, zzz);
-                double eta = AParameterUtilities.eta(zzz, rrr);
-                for(int j = 0; j < 2; j++)
-                {
-                    hv[0][2 * i + j][k] = eta + sign[j] * deltaEta;
-                    hv[1][2 * i + j][k] = Math.toDegrees(ppp);
-                    index[2 * i + j] = list;
-                }
-            }
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES). includePhiWrapAround("VP");
-
-    } // getVPUser() --------------------------------------------------------
-
-
-} // class ASiClusterRDOData ================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATGCData.java b/graphics/AtlantisJava/src/atlantis/data/ATGCData.java
deleted file mode 100755
index e0005dce948e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATGCData.java
+++ /dev/null
@@ -1,340 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-public class ATGCData extends AMuonHitData
-{
-    float[] swidth;
-    float[] lwidth;
-    float[] length;
-    int[] gasGap;
-
-    private static ALogger logger = ALogger.getLogger(ATGCData.class);    
-
-    public String getParameterGroup()
-    {
-        return "TGC";
-    }
-
-    public String getName()
-    {
-        return "TGC";
-    }
-
-    public String getNameScreenName()
-    {
-        return "TGC";
-    }
-
-    ATGCData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        swidth = p.getFloatArray("swidth");
-        length = p.getFloatArray("length");
-        lwidth = p.getFloatArray("lwidth");
-        gasGap = new int[numData];
-        for (int i = 0; i < numData; i++)
-            gasGap[i] = getGasGap(i);
-    }
-
-    protected int getStation(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            return (stationName.charAt(1) - '0') % 4;
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-    }
-
-    protected int getSub(int index)
-    {
-        try {
-            if (AIdHelper.stationEta(id[index]) < 0) {
-                return 0;
-            } else {
-                return 1;
-            }
-
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-    }
-
-    public int getSector(int index)
-    {
-        try {
-            String stationName = AIdHelper.stationName(id[index]);
-            int stationPhi = AIdHelper.stationPhi(id[index]);
-
-            int retval;
-            if (stationName.equals("T4E")) {
-                int temp = stationPhi % 24;
-                retval = 2 * (temp / 3);
-            } else if (stationName.charAt(2) == 'F') {
-                int temp = stationPhi % 24;
-                retval = 2 * (temp / 3);
-                if (temp % 3 > 1) retval += 1;
-            } else {
-                int temp = (stationPhi + 1) % 48;
-                retval = 2 * (temp / 6);
-                if (temp % 6 > 3) retval += 1;
-            }
-            return retval;
- 
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-
-    }
-
-    protected int getGasGap(int index)
-    {
-        try {
-            return AIdHelper.tgcGasGap(id[index]);
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return 0;
-    }
-
-    protected boolean getMeasuresPhi(int index)
-    {
-        try {
-            if (AIdHelper.tgcIsStrip(id[index]) == 1) {
-                return true;
-            }
-        } catch (AAtlantisException e) {
-            logger.error("Problem decoding TGC identifier", e);
-        }
-        
-        return false;
-    }
-
-    public void applyCuts()
-    {
-        super.applyCuts();
-        if (parameterStore.get("CutsATLAS", "CutPhi").getStatus())
-            cutPhi(phi, getDPhi());
-        if (parameterStore.get("CutsATLAS", "CutEta").getStatus())
-            cutEtaDRho(rho, z, getDRho());
-    }
-
-    // used for cuts
-
-    private float[] getDPhi()
-    {
-        // only roughly correct
-        // must create all
-        float[] dphi = new float[numData];
-
-        // need only fill for those in draw list
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            dphi[list] = (float) Math.abs(Math.atan2((swidth[list] + lwidth[list]) / 4., rho[list]));
-        }
-        return dphi;
-    }
-
-    // used for cuts
-
-    private float[] getDRho()
-    {
-        // only roughly correct
-        // must create all
-        float[] drho = new float[numData];
-
-        // need only fill for those in draw list
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            drho[list] = (float) (length[list] / 2.);
-        }
-        return drho;
-    }
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        cutArray(measuresPhi, true, " Strip");
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            index[i] = list;
-            double deltaPhi = ((swidth[list] + lwidth[list]) / 4.) / rho[list];
-
-            hv[0][0][i] = z[list];
-            hv[1][0][i] = Math.toDegrees(phi[list] - deltaPhi);
-            hv[0][1][i] = z[list];
-            hv[1][1][i] = Math.toDegrees(phi[list] + deltaPhi);
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FZ");
-    }
-
-    private void makeDrawListYX()
-    {
-        int mode = parameterStore.get("YX", "Mode").getI();
-
-        if (mode == 0 || mode >= 5)
-        {
-            numDraw = 0;
-        }
-        else
-        {
-            makeDrawList();
-            int num = 0;
-
-            for (int i = 0; i < numDraw; ++i)
-                if (mode == station[listdl[i]] + 1)
-                    listdl[num++] = listdl[i];
-            numDraw = num;
-        }
-        cut("YX", "TGCGasGap", " TGC Gas Gap", gasGap);
-    }
-
-    protected ACoord getYXUser()
-    {
-        return getYXUser(0);
-    }
-
-    protected ACoord getYXUser(int flag)
-    {
-        makeDrawListYX();
-        int[] split = { 6, 1, 6, 1 };
-        int numPoints = 4;
-        boolean splitIt = parameterStore.get("YX", "FishEye").getStatus() || flag == 1;
-
-        if (splitIt)
-            numPoints = 14;
-        double[] temp = new double[4];
-        double[][][] hv = new double[2][numDraw][numPoints];
-        int[] index = new int[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-
-            index[i] = list;
-            double cosPhi = Math.cos(phi[list]);
-            double sinPhi = Math.sin(phi[list]);
-            double rMid = rho[list];
-            double dR = length[list] / 2.;
-            double r = rMid - dR;
-            double d = swidth[list] / 2.;
-            double x = r * cosPhi;
-            double y = r * sinPhi;
-            double dx = d * sinPhi;
-            double dy = d * cosPhi;
-
-            hv[0][i][0] = x + dx;
-            hv[1][i][0] = y - dy;
-            hv[0][i][1] = x - dx;
-            hv[1][i][1] = y + dy;
-            r = rMid + dR;
-            x = r * cosPhi;
-            y = r * sinPhi;
-            d = lwidth[list] / 2.;
-            dx = d * sinPhi;
-            dy = d * cosPhi;
-            hv[0][i][2] = x - dx;
-            hv[1][i][2] = y + dy;
-            hv[0][i][3] = x + dx;
-            hv[1][i][3] = y - dy;
-            if (splitIt)
-                for (int j = 0; j < 2; ++j)
-                {
-                    for (int k = 0; k < 4; ++k)
-                        temp[k] = hv[j][i][k];
-                    AMath.splitArrayIntoPieces(temp, hv[j][i], split);
-                }
-        }
-        return new ACoord(hv, index, this);
-    }
-
-    protected ACoord getFRUser()
-    {
-        return getYXUser(1).convertYXToFR().includePhiWrapAround("FR");
-    }
-
-    protected ACoord getXZRZUser(int sign[]) 
-    {
-        double[][][] hv = new double[2][numDraw][];
-        int index[] = new int[numDraw];
-        
-        try {
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-
-                double rho = Math.sqrt(x[j]*x[j] + y[j]*y[j]);
-                
-                if (AIdHelper.tgcIsStrip(id[j]) == 1) {
-                    double drho = length[j]/2.;
-                    hv[0][i] = new double[] { z[j], z[j] };
-                    hv[1][i] = new double[] { sign[i] * (rho - drho),
-                                              sign[i] * (rho + drho) };
-                } else {
-                    hv[0][i] = new double[] { z[j] };
-                    hv[1][i] = new double[] { sign[i] * rho };
-                }
-            }
-
-            return new ACoord(hv, index, this);
-        } catch (AAtlantisException e) {
-            AOutput.append("Error decoding TGC identifier: " + e.getMessage(), ALogInterface.BAD_COMMAND);
-            return ACoord.NO_DATA;
-        }
-    }
-
-    protected ACoord getXZUser() {
-        makeDrawList();
-        cutMuonSector(sector);
-        
-        int[] sign = new int[numDraw];
-        int sect = (int) Math.round(parameterStore.get("XZ", "Phi").getD() / 22.5);
-        
-        for(int i=0; i<numDraw; i++) {
-            if (sector[listdl[i]] == sect)
-                sign[i] = 1;
-            else
-                sign[i] = -1;
-        }
-        
-        return getXZRZUser(sign);
-    }
-    
-    protected ACoord getRZUser() {
-        makeDrawList();
-        
-        int[] sign = new int[numDraw];
-        for (int i=0; i<numDraw; i++) {
-            int j = listdl[i];
-            sign[i] = AParameterUtilities.getRhoSign(x[j], y[j]);
-        }
-        
-        return getXZRZUser(sign);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATILEData.java b/graphics/AtlantisJava/src/atlantis/data/ATILEData.java
deleted file mode 100755
index 99bc22c7daac..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATILEData.java
+++ /dev/null
@@ -1,843 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.io.FileNotFoundException;
-
-import com.Ostermiller.util.CSVParser;
-
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.utils.AUtilities;
-import atlantis.utils.ALogger;
-
-
-/**
- * The TILE hadronic calorimeter.
- *
- * @author Eric Jansen
- */
-public class ATILEData extends ACalorimeterData
-{
-    private static ALogger logger = ALogger.getLogger(ATILEData.class);
-    
-    // data for real pulse shapes plots
-    private float[] pmt1Energy = null;
-    private float[] pmt2Energy = null;
-    private float[] pmt1Chi2 = null;
-    private float[] pmt2Chi2 = null;
-    private float[] pmt1Time = null;
-    private float[] pmt2Time = null;
-    private float[] pmt1RawTime = null;
-    private float[] pmt2RawTime = null;
-    private float[] pmt1RawAmplitude = null;
-    private float[] pmt2RawAmplitude = null;
-    private int[][] adcCounts1 = null;
-    private int[][] adcCounts2 = null;
-    private int[] pmt1Gain = null;
-    private int[] pmt2Gain = null;
-    private float[] pmt1Pedestal = null;
-    private float[] pmt2Pedestal = null;
-    private int[] pmt1Number = null;
-    private int[] pmt2Number = null;    
-    private int[] pmt1ADCStatus = null;
-    private int[] pmt2ADCStatus = null;
-    private static boolean pulseShapesDataAvailable = false;
-    private static final String LOOKUP_TABLE_FILE =
-    		AGlobals.instance().getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		"rpsplt_tile.csv";
-    // number of lookup table values for real pulse shapes plots calculation
-    private static final short NUMBER_OF_LOOKUP_VALUES = 401;
-
-
-    ATILEData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-
-
-        for (int i = 0; i < numData; i++)
-        {
-            try
-            {
-                side[i] = (byte) AIdHelper.tileSide(id[i]);
-                etaIndex[i] = (short) AIdHelper.tileTower(id[i]);
-                phiIndex[i] = (short) AIdHelper.tileModule(id[i]);
-                sampling[i] = AIdHelper.tileSampling(id[i]);
-            }
-            catch (AAtlantisException ex)
-            {
-                System.out.println("Problem decoding ID " + id[i] + " in " +
-                                   CALORIMETER_NAME + ": " + ex.getMessage());
-                side[i] = 0;
-                etaIndex[i] = -1;
-                phiIndex[i] = -1;
-                sampling[i] = -1;
-            }
-        }
-
-        makeHitToGeometryMapping();
-        for (int i = 0; i < et.length; ++i)
-        {
-            et[i] = Math.abs(energy[i] / (float) Math.cosh(eta[i]));
-        }
-
-        // Collect some constants needed for the histograms.
-        for (int i = 0; i < ACalorimeterDetector.count(); i++)
-        {
-            if (ACalorimeterDetector.get(i).getName().indexOf(CALORIMETER_NAME) >= 0)
-            {
-                if (innerR == 0.0 || ACalorimeterDetector.get(i).getRMin() < innerR)
-                {
-                    innerR = ACalorimeterDetector.get(i).getRMin();
-                }
-                if (phiGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaPhi() < phiGranularity)
-                {
-                    phiGranularity = ACalorimeterDetector.get(i).getDeltaPhi();
-                }
-                if (etaGranularity == 0.0 || ACalorimeterDetector.get(i).getDeltaEta() < etaGranularity)
-                {
-                    etaGranularity = ACalorimeterDetector.get(i).getDeltaEta();
-                }
-                if (outerEta == 0.0 || ACalorimeterDetector.get(i).getEtaMax() > outerEta)
-                {
-                    outerEta = ACalorimeterDetector.get(i).getEtaMax();
-                }
-            }
-
-            if (outerR == 0.0 || ACalorimeterDetector.get(i).getRMax() > outerR)
-            {
-                outerR = ACalorimeterDetector.get(i).getRMax();
-            }
-            if (outerZ == 0.0 || ACalorimeterDetector.get(i).getZMax() > outerZ)
-            {
-                outerZ = ACalorimeterDetector.get(i).getZMax();
-            }
-        }
-
-        // Add a little bit of extra margin to prevent binning errors due to
-        // rounding of numbers.
-        outerEta += etaGranularity;
-
-        readPulseShapePlotData(p);
-        
-        pmt1ADCStatus = (p.get("pmt1ADCStatus") != null) ? p.getIntArray("pmt1ADCStatus") : null;
-        pmt2ADCStatus = (p.get("pmt2ADCStatus") != null) ? p.getIntArray("pmt2ADCStatus") : null;
-        
-
-    } // ATILEData() --------------------------------------------------------
-
-
-
-    /**
-     * readLookupTableFile() reads in comma separated values (CSV) file
-     * with TILE real pulse shapes plots time and amplitude lookup values
-     * @throws AAtlantisException
-     */
-    protected static void readLookupTableFile() throws AAtlantisException
-    {
-        try
-        {
-            InputStream is = AUtilities.getFileAsStream(LOOKUP_TABLE_FILE);
-            CSVParser parser = new CSVParser(is);
-            parser.setCommentStart("#");
-            String arrayName =  null;
-
-            while((arrayName = parser.nextValue()) != null)
-            {
-                String valueArray = parser.nextValue(); // shall now contain all values
-                CSVParser parserArray = new CSVParser(new StringReader(valueArray));
-                String[][] s = parserArray.getAllValues();
-                if("TILE_AMPLITUDE".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.TILE_AMPLITUDE =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-                else if("TILE_TIME".equals(arrayName))
-                {
-                    ACalorimeterRPSPLT.TILE_TIME =
-                        getLookupTableArray(s, NUMBER_OF_LOOKUP_VALUES);
-                }
-            }
-        }
-        catch(FileNotFoundException e)
-        {
-            throw new AAtlantisException("could not find file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(IOException e)
-        {
-            throw new AAtlantisException("exception while reading file: " +
-                                         LOOKUP_TABLE_FILE);
-        }
-        catch(AAtlantisException e)
-        {
-            throw e;
-        }
-
-    } // readLookupTableFile() ----------------------------------------------
-
-
-
-    private void readPulseShapePlotData(AHashMap p)
-    {
-        pmt1Energy = (p.get("pmt1Energy") != null) ? p.getFloatArray("pmt1Energy") : null;
-        pmt2Energy = (p.get("pmt2Energy") != null) ? p.getFloatArray("pmt2Energy") : null;
-        pmt1Chi2 = (p.get("pmt1Chi2") != null) ? p.getFloatArray("pmt1Chi2") : null;
-        pmt2Chi2 = (p.get("pmt2Chi2") != null) ? p.getFloatArray("pmt2Chi2") : null;
-        pmt1Time = (p.get("pmt1Time") != null) ? p.getFloatArray("pmt1Time") : null;
-        pmt2Time = (p.get("pmt2Time") != null) ? p.getFloatArray("pmt2Time") : null;
-        
-        pmt1Gain = (p.get("pmt1Gain") != null) ? p.getIntArray("pmt1Gain") : null;
-        pmt2Gain = (p.get("pmt2Gain") != null) ? p.getIntArray("pmt2Gain") : null;
-
-        pmt1Pedestal = (p.get("pmt1Pedestal") != null) ? p.getFloatArray("pmt1Pedestal") : null;
-        pmt2Pedestal = (p.get("pmt2Pedestal") != null) ? p.getFloatArray("pmt2Pedestal") : null;
-
-        pmt1Number = (p.get("pmt1Number") != null) ? p.getIntArray("pmt1Number") : null;
-        pmt2Number = (p.get("pmt2Number") != null) ? p.getIntArray("pmt2Number") : null;
-
-        int[] adc1 = (p.get("adcCounts1") != null) ? p.getIntArray("adcCounts1") : null;
-        int[] adc2 = (p.get("adcCounts2") != null) ? p.getIntArray("adcCounts2") : null;
-
-        // by zdenek (2008-09-15):        
-        // raw time: later additions to tilecal pulse shapes, doens't necessarily
-        // have to be in the event files, will not be in the old ones
-        pmt1RawTime = (p.get("pmt1RawTime") != null) ? p.getFloatArray("pmt1RawTime") : null;
-        pmt2RawTime = (p.get("pmt2RawTime") != null) ? p.getFloatArray("pmt2RawTime") : null;
- 
-        // by zdenek (2008-11-24):
-        // pmt1RawAmplitude, pmt2RawAmplitude now used to calculate pulse shape
-        // this is made now obligatory, without this data, the pulse shapes will
-        // not be available
-        pmt1RawAmplitude = (p.get("pmt1RawAmplitude") != null) ? p.getFloatArray("pmt1RawAmplitude") : null;
-        pmt2RawAmplitude = (p.get("pmt2RawAmplitude") != null) ? p.getFloatArray("pmt2RawAmplitude") : null;
-        
-        // read in ADCCounts
-        if(adc1 != null && adc2 != null)
-        {
-            adcCounts1 = new int[numData][0];
-            adcCounts2 = new int[numData][0];
-            // amount of numbers associated with each cells (i.e. with each data item)
-            int multiple = adc1.length / numData;
-            int num = 0;
-            for (int i = 0; i < numData; i++)
-            {
-                adcCounts1[i] = new int[multiple];
-                adcCounts2[i] = new int[multiple];
-                for (int j = 0; j < multiple; j++)
-                {
-                    adcCounts1[i][j] = adc1[num]; // fill in array for each cell
-                    adcCounts2[i][j] = adc2[num]; // fill in array for each cell
-                    num++;
-                }
-            }
-        }
-
-        pulseShapesDataAvailable = false;
-        if(adcCounts1 != null && adcCounts2 != null && adcCounts1.length != 0 &&
-                adcCounts2.length != 0 && adcCounts1[0].length != 0 &&
-                adcCounts2[0].length != 0 && pmt1Number != null &&
-                pmt2Number != null && pmt1Energy != null && pmt2Energy != null &&
-                pmt1Time != null && pmt2Time != null && pmt1Pedestal != null &&
-                pmt2Pedestal != null && pmt1Gain != null && pmt2Gain != null &&
-                pmt1RawAmplitude != null && pmt2RawAmplitude != null)
-        {
-            pulseShapesDataAvailable = true;
-  
-            logger.debug(CALORIMETER_NAME +
-                    ": data for real pulse shape plots available");
-
-            if(ACalorimeterRPSPLT.areTileLookupTablesInitialized())
-            {
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup tables have already been read in");
-            }
-            else
-            {
-                
-                logger.debug(CALORIMETER_NAME +
-                        ": lookup table values have not been read in yet\n" +
-                        "  trying to read file: " + LOOKUP_TABLE_FILE);
-
-                try
-                {
-                    readLookupTableFile();
-                    logger.debug(CALORIMETER_NAME +
-                            ": values from " + LOOKUP_TABLE_FILE +
-                            " successfully read in");
-                }
-                catch(AAtlantisException ex)
-                {
-                    logger.error(CALORIMETER_NAME +
-                            ": reading " + LOOKUP_TABLE_FILE +
-                            " failed, real pulse shapes plots will not " +
-                            "be available, reason: " + ex.getMessage(), ex);
-                    pulseShapesDataAvailable = false;
-                }
-            }
-        }
-
-    } // readPulseShapePlotData() -------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsCalo", "TileET", "TileET", et);
-        cut("CutsCalo", "TileEnergyBottom", "TileEnergyBottom", energy);
-        cut("CutsCalo", "TileEnergyUp", "TileEnergyUp", energy);
-        
-        // following cut is based on pmt1ADCStatus, resp. pmt2ADCStatus
-        if(pmt1ADCStatus != null && pmt2ADCStatus != null)
-        {
-        	cut("CutsCalo", "TilePMTADC", "TilePMTADC", pmt1ADCStatus);
-        	cut("CutsCalo", "TilePMTADC", "TilePMTADC", pmt2ADCStatus);
-        }
-    }
-
-    
-    
-    /**
-     * Returns the name of the parameter group.
-     * @return String parameter group
-     */
-    public String getParameterGroup()
-    {
-        return "TILE";
-    }
-
-    /**
-     * Returns the name of the datatype.
-     * @return String datatype
-     */
-    public String getName()
-    {
-        return "TILE";
-    }
-
-    /**
-     * Returns the displayed name of datatype
-     * @return String screen name
-     */
-    public String getNameScreenName()
-    {
-        return "TILE";
-    }
-
-    /**
-     * Returns the type of calorimeter (ECAL/HCAL) for a hit.
-     * @param index int hit index
-     * @return String calorimeter type
-     */
-    public String getCalorimeterType(int index)
-    {
-        return "HCAL";
-    }
-
-    @Override //ACalorimeterData
-    //Gives the hit time for this Tile cell based on the PMT times
-    protected double getTime(int hit)
-    {
-        if (pmt1Time == null) return 0.0;
-        else if (pmt2Time == null) return 0.0;
-        else {
-        if (pmt1Time[hit]!=0.0 && pmt2Time[hit]!=0.0){
-            return (pmt1Time[hit]+pmt2Time[hit])/2.;
-        }
-        if (pmt1Time[hit]==0.0 && pmt2Time[hit]!=0.0){
-            return pmt2Time[hit];
-        }
-        if (pmt1Time[hit]!=0.0 && pmt2Time[hit]==0.0){
-            return pmt1Time[hit];
-        }
-        }
-        return 0.0;
-    }
-
-    /**
-     * Returns calo hit info, most of the parameters are taken from from
-     * (mother) ACalorimeterData class.
-     * @param index int
-     * @return String
-     */
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n ET="+String.format("%.3f",et[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Ex="+String.format("%.3f",et[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Ey="+String.format("%.3f",et[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Ez="+String.format("%.3f",et[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String t = "";
-        String pmt1Info = "";
-        String pmt2Info = "";
-
-        String decodedId = AIdHelper.getDecodedTileIndentifier(id[index]);
-        t = decodedId + "  " + super.getHitInfoNoDecode(index);
-
-        
-        pmt1Info += "\n PMT1 ADC status = ";
-        pmt1Info += (pmt1ADCStatus != null) ? Integer.toString(pmt1ADCStatus[index]) : "n/a";
-        
-        pmt1Info += "\n PMT1 energy = ";
-        pmt1Info += (pmt1Energy != null) ? Float.toString(pmt1Energy[index]) +
-                                           " GeV" : "n/a";
-        pmt1Info += "\n PMT1 chi2 = ";
-        pmt1Info += (pmt1Chi2 != null) ? Float.toString(pmt1Chi2[index]) : "n/a";
-        pmt1Info += "\n PMT1 time = ";
-        pmt1Info += (pmt1Time != null) ? Float.toString(pmt1Time[index]) +
-                                         " ns" : "n/a";
-        pmt1Info += "\n PMT1 gain = ";
-        pmt1Info += (pmt1Gain != null) ? Integer.toString(pmt1Gain[index]) : "n/a";
-        pmt1Info += "\n PMT1 pedestal = ";
-        pmt1Info += (pmt1Pedestal != null) ? Float.toString(pmt1Pedestal[index]) +
-                                             " ADC counts" : "n/a";
-
-
-        pmt2Info += "\n PMT2 ADC status = ";
-        pmt2Info += (pmt2ADCStatus != null) ? Integer.toString(pmt2ADCStatus[index]) : "n/a";
-        
-        pmt2Info += "\n PMT2 energy = ";
-        pmt2Info += (pmt2Energy != null) ? Float.toString(pmt2Energy[index]) +
-                                           " GeV" : "n/a";
-        pmt2Info += "\n PMT2 chi2 = ";
-        pmt2Info += (pmt2Chi2 != null) ? Float.toString(pmt2Chi2[index]) : "n/a";
-        pmt2Info += "\n PMT2 time = ";
-        pmt2Info += (pmt2Time != null) ? Float.toString(pmt2Time[index]) +
-                                         " ns" : "n/a";
-        pmt2Info += "\n PMT2 gain = ";
-        pmt2Info += (pmt2Gain != null) ? Integer.toString(pmt2Gain[index]) : "n/a";
-        pmt2Info += "\n PMT2 pedestal = ";
-        pmt2Info += (pmt2Pedestal != null) ? Float.toString(pmt2Pedestal[index]) +
-                                             " ADC counts" : "n/a";
-
-        pmt2Info += pulseShapesDataAvailable ? "" :
-                    "\n data for real pulse shapes plot n/a";
-
-        pmt2Info += "\n calc time = "+getTime(index);
-
-        return t + pmt1Info + pmt2Info;
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-
-    // calculate real pulse shapes values based on the values in the lookup tables
-    private double getPhysicsPulseShape(double xTime, double pmtTime,
-                                        double pmtPedestal, double pmtEnergy,
-                                        float[] amplitude, float[] time)
-                                        throws AAtlantisException
-    {
-        double tdiv = 0.0;
-        int lookup = 0;
-        double localTime = 0.0;
-        double xpulse = 0.0;
-
-        // need to get "multiple" parameter ( = number of values in adcCounts
-        // for each cell - adcCounts1[0].length), shall be the same for all the
-        // cells - taking the length of the first array (for the first cell)
-        // [currently (2007-05-23) is this multiple 9 but to change in real data]
-        // no NullPointer or ArrayIndexBound checks are necessary here as this
-        // method shall only be called when the relevant data is available
-        double centerOfSamples = (adcCounts1[0].length + 1.0) / 2.0;
-
-        tdiv = time[1] - time[0];
-        localTime = (xTime - centerOfSamples) * 25.0 - pmtTime;
-        lookup = (int) ((localTime - time[0]) / tdiv);
-
-        if(lookup < 0)
-        {
-            lookup = 0;
-        }
-        if(lookup >= NUMBER_OF_LOOKUP_VALUES - 1)
-        {
-            lookup = NUMBER_OF_LOOKUP_VALUES - 2; // -1 was off by 1
-        }
-
-        try
-        {
-            if(lookup == 0 || lookup == NUMBER_OF_LOOKUP_VALUES - 2)
-            {
-                xpulse = amplitude[lookup];
-            }
-            else
-            {
-                xpulse = amplitude[lookup] + ((amplitude[lookup + 1] -
-                         amplitude[lookup]) / tdiv) * (localTime - time[lookup]);
-            }
-        }
-        catch(ArrayIndexOutOfBoundsException ex)
-        {
-            String m = "ATILEData.getPhysicsPulseShape():\n" +
-                       "  lookup index out of bound: lookup = " + lookup;
-            throw new AAtlantisException(m);
-        }
-        return (xpulse * pmtEnergy) + pmtPedestal;
-
-    } // getPhysicsPulseShape() ---------------------------------------------
-
-
-
-//    /**
-//     * Call util class which plots cell pulse shapes provided that
-//     * all real pulse shapes data is available
-//     * Functions calculates values of real pulse shape calculated in the method
-//     * getPhysicsPulseShape().
-//     * This method is called from pick interaction.
-//     *
-//     * @param index int
-//     */
-    /*public void plotPulseShapes(int index)
-    {
-
-        if(pulseShapesDataAvailable)
-        {
-            String title = getPulseTitleString(index);
-
-            // two channels for a TILE cell (two arrays of ADC counts)
-            int[][] adcCounts = new int[][] { adcCounts1[index], adcCounts2[index] };
-            
-            if(super.checkADCCountsAvailability(adcCounts))
-            {
-                // adc counts are available
-                logger.debug(CALORIMETER_NAME + " adc counts (digits) are " +
-                             "available for pulse shapes plots for this cell.");
-            }
-            else
-            {
-                AOutput.append("\nADC counts are not available for this cell, " +
-                               "can't plot pulse shapes.", ALogPane.WARNING);
-                return;
-            }
-            
-            
-            String cap1 = "Real pulse shape " + "PMT " + pmt1Number[index] +
-                          " gain " + pmt1Gain[index];
-            String cap2 = "Real pulse shape " + "PMT " + pmt2Number[index] +
-                          " gain " + pmt2Gain[index];
-            String[] subTitle = new String[] { cap1, cap2 };
-            
-            // by zdenek (2008-11-24):
-            // energy calculations (lowGainFactor, highGainFactor) and related
-            // magic constants removed - now using pmt1RawAmplitude, pmt2RawAmplitude
-            // instead of pmt[1,2]Energy, resp. former local variables
-            // energy1, energy2 when calling getPhysicsPulseShape() further down
-            
-            // 1 .. 9 range (9 values of ADC counts, 9 samples (starts from 1!)),
-            // need to get 401 values within this range. number of samples will
-            // likely decrease in real data from 9 to 7
-            double step = (adcCounts1[index].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-            double[][] realPulse = new double[2][NUMBER_OF_LOOKUP_VALUES]; // 2 channels
-            double[][] realPulseForRawTime = null;
-            double d = 1.0;
-            
-        	// if pmt1RawTime and pmt2RawTime are present, use those for
-        	// calculating data for real pulse shape plot based on these time values
-        	boolean showPlotForRawTime = false;
-        	if(pmt1RawTime != null && pmt2RawTime != null)
-        	{
-        		logger.debug("TILE pmt[1,2]RawTime are present, showing another plot.");
-        		showPlotForRawTime = true;
-        		realPulseForRawTime = new double[2][NUMBER_OF_LOOKUP_VALUES]; // 2 channels
-        	}
-        	
-        	
-        	// by zdenek 2008-11-25
-        	// DPD (slimed version of ESD) sometimes don't have pmt[1,2]Pedestal
-        	// for a cell (the tag exists, values are there, but are 0). check
-        	// if pedestal is 0 and if so, take as pedestal value the first
-        	// adc count digit
-        	float pmt1PedestalLocal = pmt1Pedestal[index]; 
-        	float pmt2PedestalLocal = pmt2Pedestal[index];
-        	if(pmt1PedestalLocal == 0.0f && pmt2PedestalLocal == 0.0f)
-        	{
-        		logger.debug("TILE pmt[1,2]Pedestal are not available (i.e. " +
-        				     "are 0.0f), using minimum of first and last " +
-                                             "adcCount digit as pedestal.");
-                        float last1 = adcCounts1[index][adcCounts1[index].length - 1];
-                        float last2 = adcCounts2[index][adcCounts2[index].length - 1];
-        		pmt1PedestalLocal = Math.min(adcCounts1[index][0], last1);
-        		pmt2PedestalLocal = Math.min(adcCounts2[index][0], last2);
-        	}
-            
-            
-            try
-            {
-                for(int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++)
-                {
-                    d += step;
-                    realPulse[0][i] =
-                        getPhysicsPulseShape(d, pmt1Time[index], pmt1PedestalLocal,
-                        		             pmt1RawAmplitude[index],
-                                             ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                                             ACalorimeterRPSPLT.TILE_TIME);
-                    realPulse[1][i] =
-                        getPhysicsPulseShape(d, pmt2Time[index], pmt2PedestalLocal,
-                        		             pmt2RawAmplitude[index],
-                                             ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                                             ACalorimeterRPSPLT.TILE_TIME);
-                    if(showPlotForRawTime)
-                    {
-                    	realPulseForRawTime[0][i] =
-                    		getPhysicsPulseShape(d, pmt1RawTime[index], pmt1PedestalLocal,
-                    				             pmt1RawAmplitude[index],
-                    				             ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                    				             ACalorimeterRPSPLT.TILE_TIME);       		
-                    	realPulseForRawTime[1][i] =
-                            getPhysicsPulseShape(d, pmt2RawTime[index], pmt2PedestalLocal,
-                            		             pmt2RawAmplitude[index],
-				                                 ACalorimeterRPSPLT.TILE_AMPLITUDE,
-				                                 ACalorimeterRPSPLT.TILE_TIME);
-                    }
-                }
-            }
-            catch(AAtlantisException aaex)
-            {
-                AOutput.append(aaex.getMessage(), ALogPane.WARNING);
-                return;
-            }
-
-            if(realPulseForRawTime != null)
-            {
-                APulseShapePlot.plotRealPulseShapes(adcCounts, realPulse,
-                        step, subTitle, title + " (cell time)");
-                APulseShapePlot.plotRealPulseShapes(adcCounts, realPulseForRawTime,
-                        step, subTitle, title + " (raw time)");
-            }
-            else
-            {
-            	// if RawTime stuff is to be removed, there will remain only
-            	// one such call to plot real pulse shapes - this one            	
-                APulseShapePlot.plotRealPulseShapes(adcCounts, realPulse,
-                        step, subTitle, title);
-            }            
-        }
-        else
-        {
-        	logger.warn(CALORIMETER_NAME + " plotPulseShapes() method called, " +
-		                "but data is not available.");
-            return;
-        }
-
-    } */// plotPulseShapes() --------------------------------------------------
-
-
-
-    /**
-     * Returns the histograms for this projection.
-     *
-     * @param projection AProjection2D current projection
-     * @return ACoord[] polygons representing histograms
-     */
-    protected ACoord[] getUserHistograms(AProjection2D projection)
-    {
-        ACoord[] data = ACoord.NO_HISTOGRAMS;
-        if (projection instanceof AProjectionYX && parameterStore.get("YX", "Mode").getI() == AProjectionYX.MODE_STANDARD)
-            data = getYXHistograms();
-        else if (projection instanceof AProjectionFR)
-            data = getFRHistograms();
-        else if (projection instanceof AProjectionRZ)
-            data = getRZHistograms();
-        return projection.nonLinearTransform(data);
-    }
-
-    @Override
-    protected String getPulseTitleString(int index) {
-        String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-
-        String title = CALORIMETER_NAME + " cell: " + decodedId[0];
-        
-        return title;
-    }
-
-    @Override
-    protected int[][] getADCCounts(int index) {
-
-        if (pulseShapesDataAvailable) {
-            // two channels for a TILE cell (two arrays of ADC counts)
-            return new int[][]{adcCounts1[index], adcCounts2[index]};
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    protected double[][] getPulseShape(int index) {
-
-        if (!pulseShapesDataAvailable) return null;
-
-        // by zdenek (2008-11-24):
-        // energy calculations (lowGainFactor, highGainFactor) and related
-        // magic constants removed - now using pmt1RawAmplitude, pmt2RawAmplitude
-        // instead of pmt[1,2]Energy, resp. former local variables
-        // energy1, energy2 when calling getPhysicsPulseShape() further down
-
-        // 1 .. 9 range (9 values of ADC counts, 9 samples (starts from 1!)),
-        // need to get 401 values within this range. number of samples will
-        // likely decrease in real data from 9 to 7
-        double step = getPulseStep(index);
-        double[][] realPulseRaw = new double[2][NUMBER_OF_LOOKUP_VALUES]; // 2 channels
-        double d = 1.0;
-
-        // if pmt1RawTime and pmt2RawTime are present, use those for
-        // calculating data for real pulse shape plot based on these time values
-        if (pmt1RawTime == null || pmt2RawTime == null) {
-            logger.warn("No raw time values available");
-            return null;
-        }
-
-
-        // by zdenek 2008-11-25
-        // DPD (slimed version of ESD) sometimes don't have pmt[1,2]Pedestal
-        // for a cell (the tag exists, values are there, but are 0). check
-        // if pedestal is 0 and if so, take as pedestal value the first
-        // adc count digit
-        float pmt1PedestalLocal = pmt1Pedestal[index];
-        float pmt2PedestalLocal = pmt2Pedestal[index];
-        if (pmt1PedestalLocal == 0.0f && pmt2PedestalLocal == 0.0f) {
-            logger.debug("TILE pmt[1,2]Pedestal are not available (i.e. " +
-                    "are 0.0f), using minimum of first and last " +
-                    "adcCount digit as pedestal.");
-            float last1 = adcCounts1[index][adcCounts1[index].length - 1];
-            float last2 = adcCounts2[index][adcCounts2[index].length - 1];
-            pmt1PedestalLocal = Math.min(adcCounts1[index][0], last1);
-            pmt2PedestalLocal = Math.min(adcCounts2[index][0], last2);
-        }
-
-        try {
-            for (int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++) {
-                d += step;
-                realPulseRaw[0][i] =
-                        getPhysicsPulseShape(d, pmt1RawTime[index], pmt1PedestalLocal,
-                        pmt1RawAmplitude[index],
-                        ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                        ACalorimeterRPSPLT.TILE_TIME);
-                realPulseRaw[1][i] =
-                        getPhysicsPulseShape(d, pmt2RawTime[index], pmt2PedestalLocal,
-                        pmt2RawAmplitude[index],
-                        ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                        ACalorimeterRPSPLT.TILE_TIME);
-            }
-        } catch (AAtlantisException aaex) {
-            AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-            return null;
-        }
-
-        return realPulseRaw;
-    }
-
-    protected double[][] getPulseShapeCellTime(int index) {
-
-        if (!pulseShapesDataAvailable) return null;
-
-        double step = getPulseStep(index);
-        double[][] realPulse = new double[2][NUMBER_OF_LOOKUP_VALUES]; // 2 channels
-        double d = 1.0;
-
-        // by zdenek 2008-11-25
-        // DPD (slimed version of ESD) sometimes don't have pmt[1,2]Pedestal
-        // for a cell (the tag exists, values are there, but are 0). check
-        // if pedestal is 0 and if so, take as pedestal value the first
-        // adc count digit
-        float pmt1PedestalLocal = pmt1Pedestal[index];
-        float pmt2PedestalLocal = pmt2Pedestal[index];
-        if (pmt1PedestalLocal == 0.0f && pmt2PedestalLocal == 0.0f) {
-            logger.debug("TILE pmt[1,2]Pedestal are not available (i.e. " +
-                    "are 0.0f), using minimum of first and last " +
-                    "adcCount digit as pedestal.");
-            float last1 = adcCounts1[index][adcCounts1[index].length - 1];
-            float last2 = adcCounts2[index][adcCounts2[index].length - 1];
-            pmt1PedestalLocal = Math.min(adcCounts1[index][0], last1);
-            pmt2PedestalLocal = Math.min(adcCounts2[index][0], last2);
-        }
-
-        try {
-            for (int i = 0; i < NUMBER_OF_LOOKUP_VALUES; i++) {
-                d += step;
-                realPulse[0][i] =
-                        getPhysicsPulseShape(d, pmt1Time[index], pmt1PedestalLocal,
-                        pmt1RawAmplitude[index],
-                        ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                        ACalorimeterRPSPLT.TILE_TIME);
-                realPulse[1][i] =
-                        getPhysicsPulseShape(d, pmt2Time[index], pmt2PedestalLocal,
-                        pmt2RawAmplitude[index],
-                        ACalorimeterRPSPLT.TILE_AMPLITUDE,
-                        ACalorimeterRPSPLT.TILE_TIME);
-            }
-        } catch (AAtlantisException aaex) {
-            AOutput.append(aaex.getMessage(), ALogInterface.WARNING);
-            return null;
-        }
-
-        return realPulse;
-    }
-
-
-    @Override
-    protected double getPulseStep(int index) {
-        return (adcCounts1[index].length - 1) / (float) NUMBER_OF_LOOKUP_VALUES;
-    }
-
-    @Override
-    protected String[] getPulseSubtitle(int index) {
-        String cap1 = "Real pulse shape " + "PMT " + pmt1Number[index] +
-                " gain " + pmt1Gain[index];
-        String cap2 = "Real pulse shape " + "PMT " + pmt2Number[index] +
-                " gain " + pmt2Gain[index];
-        return new String[]{cap1, cap2};
-    }
-
-   public void plotPulseShapesWithTiming(int index) {
-
-       int[][] adc = getADCCounts(index);
-       double[][] raw = getPulseShape(index);
-       double[][] cell = getPulseShapeCellTime(index);
-       
-       if (adc == null || raw == null || cell == null) {
-           logger.warn("Pulse shapes with raw/cell times requested but no " +
-                   "data available, falling back to regular pulse shapes");
-           plotPulseShapes(index, true);
-       } else {       
-           APulseShapePlot.plotRawCellPulseShapes(adc, raw, cell,
-                            getPulseStep(index), getPulseSubtitle(index),
-                            getPulseTitleString(index));
-       }
-        
-        /*if (!withcurve) {
-            APulseShapePlot.plotADCCounts(adc, getPulseTitleString(index), null);
-        } else {
-            double[][] ps = getPulseShape(index);
-            if (ps == null) {
-                logger.warn("No pulse shape information available, just plotting adc instead");
-                APulseShapePlot.plotADCCounts(adc, getPulseTitleString(index), null);
-            } else {
-                APulseShapePlot.plotRealPulseShapes(adc, ps,
-                        getPulseStep(index), getPulseSubtitle(index), getPulseTitleString(index));
-            }
-        }*/
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATRTData.java b/graphics/AtlantisJava/src/atlantis/data/ATRTData.java
deleted file mode 100644
index c77849df8a98..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATRTData.java
+++ /dev/null
@@ -1,752 +0,0 @@
-package atlantis.data;
-
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import atlantis.canvas.ACanvas;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.list.AList;
-import atlantis.list.AListManager;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-
-
-/**
- *
- * Transition Radiation Tracker data
- *
- * data from the event file
- * id - processed by AData
- * barcode (old) / barcodes and numBarcodes (new) - processed by AHitData
- * phi
- * rhoz - rho (for barrel) or z (for endcap)
- * driftR - drift radius
- * threshold
- * sub - subdetector
- *
- * still need to have correct phi calculated from pVtx for cuts
- * still need to have correct rho calculated from pVtx for cuts
- *
- */
-public class ATRTData extends AHitData
-{
-    protected float[] phi = null;
-    protected float[] rhoz = null;
-    protected float[] driftR = null;
-    protected int[] threshold = null;
-    protected int[] noise = null;
-    // bitPattern subtag information implemented in the retriever but
-    // currently (2009-01-21) not used or necessary but
-    // said to may become useful later
-    protected int[] bitPattern = null;
-    protected float[] timeOverThreshold = null;
-    protected HashMap<String, int[]> driftSign = new HashMap<String, int[]>();
-    protected HashMap<String, int[]> isOutlier = new HashMap<String, int[]>();
-    //error code for when driftSign/isOutlier is not present
-    private static final int NO_DATA =-99;
-
-
-
-    public String getParameterGroup()
-    {
-        return "TRT";
-    }
-
-
-    public String getName()
-    {
-        return "TRT";
-    }
-
-
-    public String getNameScreenName()
-    {
-        return "TRT_DriftCircle";
-    }
-
-
-    public int getDriftSign(int index)
-    {
-        //find current selection of track
-        AEnumeratorParameter listBox = (AEnumeratorParameter) parameterStore.get("InDetTrack", "InDetTrackCollections");
-        String currentSelection = listBox.getCurrentText();
-        if(driftSign!=null && !currentSelection.equals("All"))
-        {
-            //find data from current track
-            int[] data = (int[]) driftSign.get(currentSelection);
-            if(data!=null)
-                return data[index];
-        }
-        //no present so return error code
-        return NO_DATA;
-    }
-
-
-    public int getIsOutlier(int index)
-    {
-        //find current selection of track
-        AEnumeratorParameter listBox = (AEnumeratorParameter) parameterStore.get("InDetTrack", "InDetTrackCollections");
-        String currentSelection = listBox.getCurrentText();
-        if(isOutlier!=null && !currentSelection.equals("All"))
-        {
-            //find data from current track
-            int[] data = (int[]) isOutlier.get(currentSelection);
-            if(data!=null)
-                return data[index];
-        }
-        //no present so return error code
-        return NO_DATA;
-    }
-
-    
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        StringBuilder s = new StringBuilder();
-        String[] decodedId = AIdHelper.getFullIdentifier(id[index]);
-        s.append(getNameScreenName() + " (id: " + decodedId[0] +
-            " index: " + index + ")");
-        // iterate over decodedId to get further details (if available),
-        // first item [0] was already printed out above
-        for(int i = 1; i < decodedId.length; i++)
-        {
-            s.append("\n " + decodedId[i]);
-        }
-        if(sub[index] == 1 || sub[index] == 2)
-        {
-            s.append("\n " + AMath.RHO + " = " + String.format("%.1f",rhoz[index]) + " cm");
-        }
-        else
-        {
-            s.append("\n z = " + String.format("%.1f",rhoz[index]) + " cm");
-        }
-        s.append("\n " + AMath.PHI + " = " +
-        String.format("%.1f",Math.toDegrees(phi[index])) + AMath.DEGREES +
-        "  (" + String.format("%.3f",phi[index]) + " rad)" +
-        "\n drift radius = " + String.format("%.3f",driftR[index]) + " cm" +
-        "\n threshold = " + threshold[index] +
-        "\n sub = " + sub[index]);
-
-        s.append(super.getHitInfo(index)); // finds barcode information
-
-        int d = getDriftSign(index);
-        s.append((d!=NO_DATA) ? ("\n driftSign = " + d) : "\n driftSign = n/a");
-        int o = getIsOutlier(index);
-        s.append((o!=NO_DATA) ? ("\n isOutlier = " + o) : "\n isOutlier = n/a");
-        s.append("\n noise = " + (noise != null ? noise[index] : "n/a"));
-        s.append("\n time over threshold = " +
-             (timeOverThreshold != null ? timeOverThreshold[index] : "n/a"));
-
-        return s.toString();
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-    public ATRTData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        phi = p.getFloatArray("phi");
-        rhoz = p.getFloatArray("rhoz");
-        driftR = p.getFloatArray("driftR");
-        threshold = p.getUnknownIntArray("threshold");
-        noise = p.getUnsureIntArray("noise");
-        if(p.getIntArray("sub") == null)
-        {
-            for(int i=0; i<numData; i++)
-            {
-                sub[i] = getSub(id[i]);
-            }
-        }
-        // the way to retrieve bitPattern subtag information
-        // currently (2009-01-21) not used or necessary but
-        // said to may become useful later
-        // bitPattern = p.getIntArray("bitPattern");
-        timeOverThreshold = p.getFloatArray("timeOverThreshold");
-        
-    } // ATRTData() ---------------------------------------------------------
-
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction == numColorTypes + 1) // colour by Track Segment
-        {
-            colorBy(getSegments());
-        }
-        else if(colorFunction == numColorTypes + 2) // colour by isOutlier
-        {
-            for(int i=0; i<numDraw; i++)
-            {
-                int list = listdl[i];
-                int iO = getIsOutlier(list);
-                if(iO==0)
-                    color[list]= AColorMap.GN;//green
-                else if(iO==1)
-                    color[list]= AColorMap.RD;//red
-                else
-                    color[list]= (byte) parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-            }
-        }
-        else if(colorFunction == numColorTypes + 3) // colour by driftSign
-        {
-            for(int i=0; i<numDraw; i++)
-            {
-                int list = listdl[i];
-                int ds = getDriftSign(list);
-                if(ds==-1)
-                    color[list]= AColorMap.GN;//green
-                else if(ds==1)
-                    color[list]= AColorMap.RD;//red
-                else
-                    color[list]= (byte) parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-            }
-        }
-        else if(colorFunction == numColorTypes + 4) // colour by threshold
-        {
-            for(int i=0; i<numDraw; i++)
-            {
-                int list = listdl[i];
-                if(threshold[list]==1)
-                    color[list]= AColorMap.RD; // red is preferable then previous green
-                else
-                    color[list]= (byte) parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-            }
-        }
-        return numColorTypes + 1;
-
-    } // internalColor() ----------------------------------------------------
-
-
-
-    public int getLayer(int id)
-    {
-        try {
-            return AIdHelper.trtLayerWheel(id);
-        } catch (AAtlantisException e) {
-            return 0;
-        }
-        //return(id & 0x01F00000) >> 20; before using IDHelper
-    }
-
-
-
-    public int getSub(int id)
-    {
-        try {
-            return AIdHelper.trtBarrelEndcap(id);
-        } catch (AAtlantisException e) {
-            return 0;
-        }
-        //return(id & 0x06000000) >> 25; before using IDHelper
-    }
-
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cut("CutsInDet", "Threshold", " Threshold", threshold);
-        cutSimulatedTracks();
-        cutReconstructedTracks();
-        cutSegments();
-        cutPhi(phi);
-        cutEta();
-
-        // cut noise
-        if(noise != null && parameterStore.get("CutsInDet", "Noise").getStatus())
-        {
-            cutArray(noise, 0, "TRT Noise Cut");
-        }
-
-        // cut TimeOverThreshold
-        // method takes care that the cut is actually turned on
-        // or if the timeOverThreshold array is null (n/a in the event file)
-        cut("CutsInDet", "TRTTimeOverThreshold",
-            "TRTTimeOverThreshold", timeOverThreshold);
-    }
-
-
-
-    private void keepBarrel()
-    {
-        int num = 0;
-        int cutSub = parameterStore.get("CutsInDet", "TRT").getI();
-        for(int i = 0; i < numDraw; i++)
-        {
-            // sub values 1 and 2 - barrel
-            if(sub[listdl[i]] == 1 || sub[listdl[i]] == 2)
-            {
-                if(cutSub == -1 || sub[listdl[i]] == cutSub)
-                {
-                    listdl[num++] = listdl[i];
-                }
-            }
-        }
-        numDraw = num;
-    }
-
-
-
-    private void keepEndcap()
-    {
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-        {
-            // sub values 0 and 3 - endcaps
-            if(sub[listdl[i]] == 0 || sub[listdl[i]] == 3)
-            {
-                listdl[num++] = listdl[i];
-            }
-        }
-        numDraw = num;
-    }
-
-
-
-    private void cutEta()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        if(!par.getStatus())return;
-        double etaCut = par.getD();
-        double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-        double etaLowerCut = etaMid - etaCut;
-        double etaUpperCut = etaMid + etaCut;
-        int num = 0;
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double z1, z2, r1, r2;
-            if(sub[list] == 0 || sub[list] == 3)
-            {
-                // endcap
-                z1 = rhoz[list];
-                z2 = rhoz[list];
-                r1 = 64.;
-                if(Math.abs(rhoz[list]) > 280.) r1 = 48.;
-                r2 = 103.;
-            }
-            else
-            {
-                // barrel
-                z1 = 0.35;
-                if(rhoz[list] < 62) z1 = 40.;
-                z2 = 74.2;
-                if(sub[list] == 1)
-                {
-                    z1 *= -1.;
-                    z2 *= -1.;
-                }
-                r1 = rhoz[list];
-                r2 = rhoz[list];
-            }
-            double eta1 = AParameterUtilities.eta(z1, r1);
-            double eta2 = AParameterUtilities.eta(z2, r2);
-            double etaLower = Math.min(eta1, eta2);
-            double etaUpper = Math.max(eta1, eta2);
-            if(etaUpper > etaLowerCut && etaLower < etaUpperCut)
-                listdl[num++] = list;
-        }
-        numDraw = num;
-    }
-
-
-    // in XY only TRT barrel data are displayed
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        keepBarrel();
-        double zoomScaling=0;
-        //check if zoomed in enough to display circles/drift sign arrows
-        Point2D.Double[] corners = ACanvas.getCanvas().getPaintingWindow().getUserCorners();
-        double widthx=corners[1].x-corners[0].x;
-        double widthy=corners[0].y-corners[2].y;
-        //average width of window
-        double width=Math.sqrt(widthx*widthx+widthy*widthy);
-        //calculate scaling (100 is arbitrary constant)
-        zoomScaling=100/width;
-        //now return relevant user coords depending on the zoom
-        //(0.25 is arbitrary constant increase to turn on drawing
-        //    circles and arrows at a more zoomed in state)
-        if(zoomScaling>0.25)
-            return getYXUserCircle();
-        else
-            return getYXUserNormal();
-    }
-
-
-    /**
-     * Will give coords for a line along the TRT drift
-     */
-    private ACoord getYXUserNormal()
-    {
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double r = rhoz[list];
-            double cosPhi = Math.cos(phi[list]);
-            double sinPhi = Math.sin(phi[list]);
-            double d = driftR[list];
-            double x = r * cosPhi;
-            double y = r * sinPhi;
-            hv[0][0][i] = x + d * sinPhi;
-            hv[1][0][i] = y - d * cosPhi;
-            hv[0][1][i] = x - d * sinPhi;
-            hv[1][1][i] = y + d * cosPhi;
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-
-    /**
-     * Will give coords for the drift circle and arrow showing the drift
-     */
-    private ACoord getYXUserCircle()
-    {
-        int numPoints = 48;
-        int[] index = new int[numDraw];
-        double[][][] hv = new double[2][numDraw][];
-        for (int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int ds = getDriftSign(list);
-            //adjust ds if z<0
-            if(sub[list] == 1)
-            {
-                ds *= -1;
-            }
-            if(ds==1 || ds==-1)
-            {
-                //has drift sign so has extra points for arrow
-                hv[0][i] = new double[numPoints+3];
-                hv[1][i] = new double[numPoints+3];
-            }
-            else
-            {
-                hv[0][i] = new double[numPoints];
-                hv[1][i] = new double[numPoints];
-                ds=0;
-            }
-            double r = rhoz[list];
-            double cosPhi = Math.cos(phi[list]);
-            double sinPhi = Math.sin(phi[list]);
-            double d = driftR[list];
-            double x = r * cosPhi;
-            double y = r * sinPhi;
-            int jstart=0;
-            //calculate starting point of circle
-            if(ds==1 || ds ==-1)
-            {
-                jstart = (int) (phi[list]/(Math.PI * 2 / (numPoints - 1)));
-                d*=ds;
-            }
-            //store points of circle
-            int count=0;
-            for (int j = jstart; j < numPoints; j++)
-            {
-                hv[0][i][count] = x + d * Math.sin(Math.PI * 2 * j / (numPoints - 1));
-                hv[1][i][count] = y - d * Math.cos(Math.PI * 2 * j / (numPoints - 1));
-                count++;
-            }
-            for (int j = 0; j < jstart; j++)
-            {
-                hv[0][i][count] = x + d * Math.sin(Math.PI * 2 * (j+1) / (numPoints - 1));
-                hv[1][i][count] = y - d * Math.cos(Math.PI * 2 * (j+1) / (numPoints - 1));
-                count++;
-            }
-            index[i] = list;
-            //if has drift show arrow
-            if(ds==1 || ds==-1)
-            {
-                //first line
-                hv[0][i][numPoints] = hv[0][i][2*(numPoints-1)/5];
-                hv[1][i][numPoints] = hv[1][i][2*(numPoints-1)/5];
-                //back to end point of circle
-                hv[0][i][numPoints+1] = hv[0][i][numPoints-1];
-                hv[1][i][numPoints+1] = hv[1][i][numPoints-1];
-                //second line
-                hv[0][i][numPoints+2] = hv[0][i][3*(numPoints-1)/5];
-                hv[1][i][numPoints+2] = hv[1][i][3*(numPoints-1)/5];
-              }
-        }
-        return new ACoord(hv, index, this, ACoord.POLYLINES);
-    }
-
-
-    protected ACoord getRZUser()
-    {
-        // correction for primary vertex
-        if(!parameterStore.get("RZ", "TRT").getStatus())return ACoord.NO_DATA;
-        makeDrawList();
-        // line size was found using findRZActiveArea(){
-        // may need to be found again if geometry changes...
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            if(sub[list] == 0 || sub[list] == 3)
-            {
-                // endcap
-                hv[0][0][i] = rhoz[list];
-                hv[0][1][i] = rhoz[list];
-                double phiDiff = Math.abs(phi[list] - phiMid);
-                double r1 = 64.;
-                if(Math.abs(rhoz[list]) > 280.) r1 = 48.;
-                double r2 = 103.;
-                if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                {
-                    hv[1][0][i] = r1;
-                    hv[1][1][i] = r2;
-                }
-                else
-                {
-                    hv[1][0][i] = -r1;
-                    hv[1][1][i] = -r2;
-                }
-            }
-            else
-            {
-                // barrel
-                double z1 = 0.35;
-                if(rhoz[list] < 62) z1 = 40.;
-                double z2 = 74.2;
-                if(sub[list] == 1)
-                {
-                    z1 *= -1.;
-                    z2 *= -1.;
-                }
-                hv[0][0][i] = z1;
-                hv[0][1][i] = z2;
-                double phiDiff = Math.abs(phi[list] - phiMid);
-                if(phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-                {
-                    hv[1][0][i] = rhoz[list];
-                    hv[1][1][i] = rhoz[list];
-                }
-                else
-                {
-                    hv[1][0][i] = -rhoz[list];
-                    hv[1][1][i] = -rhoz[list];
-                }
-            }
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES);
-    }
-
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        keepBarrel();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        double[] pVtx = event.getPrimaryVertex();
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double r = rhoz[list];
-            double p = phi[list];
-            double x = r * Math.cos(p);
-            double y = r * Math.sin(p);
-            double dx = x - pVtx[0];
-            double dy = y - pVtx[1];
-            r = Math.sqrt(dx * dx + dy * dy);
-            p = Math.atan2(dy, dx);
-            if(p < 0.) p += AMath.TWO_PI;
-            double delPhi = driftR[list] / r;
-            hv[0][0][i] = r;
-            hv[1][0][i] = Math.toDegrees(p - delPhi);
-            hv[0][1][i] = r;
-            hv[1][1][i] = Math.toDegrees(p + delPhi);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this, ACoord.LINES).includePhiWrapAround("FR");
-    }
-
-
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        keepEndcap();
-        double[][][] hv = new double[2][2][numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double z = rhoz[list];
-            // average rho from findRZActiveArea()
-            double averageRho = 81.;
-            if(Math.abs(z) > 280.)
-                averageRho = 70.;
-            double p = phi[list];
-            double delPhi = driftR[list] / averageRho;
-            hv[0][0][i] = z;
-            hv[1][0][i] = Math.toDegrees(p - delPhi);
-            hv[0][1][i] = z;
-            hv[1][1][i] = Math.toDegrees(p + delPhi);
-            index[i] = list;
-        }
-        return new ACoord(hv, index, this,
-                ACoord.LINES).includePhiWrapAround("FZ");
-    }
-
-
-    public Action[] getActions(Collection nodes)
-    {
-        if(nodes.size() != 1)
-            return new Action[0];
-        final DefaultMutableTreeNode node = (DefaultMutableTreeNode) (nodes.
-                iterator().next());
-        AList[] list = AListManager.getInstance().getChildren(node);
-        if(list == null)return new Action[0];
-        Set hits = new HashSet();
-        for(int i = 0; i < list.length; ++i)
-        {
-            if(list[i].getSource() == this)
-            {
-                for(int j = 0; j < list[i].getItems().length; j++)
-                {
-                    hits.add(new Integer(list[i].getItems()[j]));
-                }
-            }
-            else
-            {
-                return new Action[0];
-            }
-        }
-        int numHits = hits.size();
-        if(numHits < 2)
-            return new Action[0];
-        final int[] h = new int[numHits];
-        Iterator i = hits.iterator();
-        int n = 0;
-        while(i.hasNext())
-        {
-            h[n++] = ((Integer) (i.next())).intValue();
-        }
-        Action[] action = new Action[1];
-        action[0] = new AbstractAction("Find Eta")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                final double MIN = 9999.;
-                final double MAX = -9999.;
-                double minRho = MIN;
-                double maxRho = MAX;
-                double minZ = MIN;
-                double maxZ = MAX;
-                for(int i = 0; i < h.length; ++i)
-                {
-                    if(sub[h[i]] == 1 || sub[h[i]] == 2)
-                    {
-                        minRho = Math.min(minRho, rhoz[h[i]]);
-                        maxRho = Math.max(maxRho, rhoz[h[i]]);
-                    }
-                    else
-                    {
-                        minZ = Math.min(minZ, rhoz[h[i]]);
-                        maxZ = Math.max(maxZ, rhoz[h[i]]);
-                    }
-                }
-                AOutput.append("Eta results:\n  minRho = " +
-                        String.format("%.3f",minRho) +
-                        "  maxRho = " + String.format("%.3f",maxRho) + "\n" +
-                        "  minZ = " + String.format("%.3f",minZ) +
-                        "  maxZ = " + String.format("%.3f",maxZ) + "\n",
-                        ALogInterface.NORMAL);
-            }
-        };
-        return action;
-    }
-
-
-  @Override
-    protected void finalizeConstruction() {
-        super.finalizeConstruction();
-        Vector keys = (Vector) event.getCollections().get("InDetTrack");
-        if(keys != null)
-        {
-            Iterator keysIterator = keys.iterator();
-            //loop over collections
-            while(keysIterator.hasNext())
-            {
-                String trackCollec = (String) keysIterator.next();
-                AInDetTrackData data = (AInDetTrackData) (event.get("InDetTrack" + trackCollec));
-                int[][] hits = event.getAssociationManager().get("InDetTrack" + trackCollec, getName());
-                int[][] drifts = event.getAssociationManager().get("InDetTrack" + trackCollec + "Drift", getName());
-                int[][] outliers = event.getAssociationManager().get("InDetTrack" + trackCollec + "Outlier", getName());
-
-                if(drifts!=null || outliers!=null)
-                {
-                    int[] driftSignData = new int[numData];
-                    int[] isOutlierData = new int[numData];
-                    //set to noData to distinguish from a 0 returned if the data is present
-                    for(int i=0; i<this.numData; i++)
-                    {
-                        driftSignData[i]=NO_DATA;
-                        isOutlierData[i]=NO_DATA;
-                    }
-                    //loop over alll hits in track collection
-                    for(int i=0; i<data.getNumData(); i++)
-                    {
-                        for(int j=0; j<hits[i].length; j++)
-                        {
-                            //check if current hit matches a TRT index
-                            int list=getIndexFromId(hits[i][j]);
-                            if(list!=-1)
-                            {
-                                //found match so save value if not null
-                                if(drifts!=null)
-                                    driftSignData[list] = drifts[i][j];
-                                if(outliers!=null)
-                                    isOutlierData[list] = outliers[i][j];
-                            }
-                        }
-                    }
-                    //if has data in file then save array of values
-                    if(drifts!=null)
-                        driftSign.put(trackCollec, driftSignData);
-                    if(outliers!=null)
-                        isOutlier.put(trackCollec, isOutlierData);
-                }
-                //no data for this collection in file so save null to vector
-                if(drifts==null)
-                    driftSign.put(trackCollec, null);
-                if(outliers==null)
-                    isOutlier.put(trackCollec, null);
-            }
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATauJetData.java b/graphics/AtlantisJava/src/atlantis/data/ATauJetData.java
deleted file mode 100755
index 91ebb9af7757..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATauJetData.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package atlantis.data;
-
-import java.util.Vector;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-import atlantis.utils.A4Vector;
-
-/**
- * Reconstructed Tau Jet
- */
-public class ATauJetData extends AAODData
-{
-    // Note: This is a hierarchy list ! I.e. TauCutTight is assumed to have passed
-    //   all other criteria as well. This is strictly not completely correct but 
-    //   good enough for Atlantis purposes.
-	private enum isTau { TauCutTight, TauCutMedium, TauCutLoose, TauLlhTight, TauLlhMedium, TauLlhLoose, none }
-	
-    private float[] charge;
-    private int[] integerCharge;
-    private int[] numTracks;
-    private float[] isolFrac;
-    private float[] logLhRatio;
-    private String[] label;
-    private Vector<Enum> isTauEnum = new Vector<Enum>();
-
-    ATauJetData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        charge=p.getFloatArray("charge");
-        integerCharge = new int[charge.length];
-
-        // The recommended default cut for Tau charge is to equal to 1/-1,
-        // but the cut for float value has no "=" operator in the
-        // implementation, so change float[] to int[] to make it possible
-        // to use "=".
-        for(int i=0; i<charge.length; ++i)
-        {
-            integerCharge[i] = (int) charge[i];
-        }
-        numTracks=p.getUnknownIntArray("numTracks");
-        isolFrac=p.getUnsureFloatArray("isolFrac");
-        logLhRatio=p.getUnsureFloatArray("logLhRatio");
-        label=p.getUnsureStringArray("label");
-        String[] isTauString=p.getUnsureStringArray("isTauString");
-        
-        if(isTauString!=null){
-        	for(String s : isTauString)
-        	{
-        		try {
-        			isTauEnum.add(isTau.valueOf(s));
-        		}
-        		catch(IllegalArgumentException q) {
-        			isTauEnum.add(isTau.none);
-        		}
-        	}
-        }
-        else
-        {
-        	for(int i=0;i<numData;i++)
-        	{
-        		isTauEnum.add(isTau.none);
-        	}
-        }
-    }
-
-    public String getParameterGroup()
-    {
-        return "TauJet";
-    }
-
-    public String getName()
-    {
-        return "TauJet";
-    }
-
-    public float getCharge(int index)
-    {
-        return charge[index];
-    }
-
-    public int getNumTracks(int index)
-    {
-        return numTracks[index];
-    }
-
-    public float getIsolFrac(int index)
-    {
-        if(isolFrac != null) return isolFrac[index];
-        else return -100;
-    }
-
-    public float getLogLhRatio(int index)
-    {
-        if(logLhRatio != null) return logLhRatio[index];
-        else return -100;
-    }
-    
-    public String getisTau(int index)
-    {
-        return isTauEnum.get(index).toString();
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i)
-        {
-            int k = list[i];
-            A4Vector start = new A4Vector();
-            start.setPtEtaPhiM(pT[k],eta[k],phi[k],1.77682);
-            sum.add(start);
-        }
-
-        return sum;
-    }
-
-    protected void applyCuts()
-    {
-        super.applyCuts();
-        cut("CutsObjects", "TauJetPt", " |ET|", pT);
-        cut("CutsObjects", "TauJetCharge", " |Charge|", integerCharge);
-        cut("CutsObjects", "TauJetNumTracks", " |NumTracks|", numTracks);
-        if(isolFrac != null)
-            cut("CutsObjects", "TauJetisolFrac", " isolFrac", isolFrac);
-        if(logLhRatio != null)
-            cut("CutsObjects", "TauJetlogLhRatio", " logLhRatio", logLhRatio);
-
-        if (parameterStore.get("CutsObjects", "TauJetisTauString").getStatus())
-        {
-        	int cutSub = parameterStore.get("CutsObjects", "TauJetisTauString").getI();
-        	cutArrayEnum(isTauEnum, cutSub, "TauJet isTauString");
-        }
-    }
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0){
-    		String output = getNameScreenName()+" index: " + index;
-    		if(simpleOutput==1 || simpleOutput==3) 
-    			output+= "\n PT="+String.format("%.3f",pT[index])+" GeV\n "+
-    			AMath.ETA+" = "+String.format("%.3f",eta[index])+"\n "+
-    			AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        	if(simpleOutput==2 || simpleOutput==3) 
-        		output+= "\n Px="+String.format("%.3f",pT[index]*Math.cos(phi[index]))+" GeV "+
-        		"\n Py="+String.format("%.3f",pT[index]*Math.sin(phi[index]))+" GeV "+
-        		"\n Pz="+String.format("%.3f",pT[index]*Math.sinh(eta[index]))+" GeV ";
-        	return output;
-    	}
-    	
-        String k = this.getStoreGateKey();
-        String sgKey = k != null ? k : "n/a";
-        StringBuffer msg = new StringBuffer(getNameScreenName());
-        msg.append(" (id: " + id[index] + " index: " + index + ")");
-        msg.append("\n storegate key: ");
-        msg.append(sgKey);
-        msg.append("\n PT = ");
-        msg.append(String.format("%.3f",pT[index]));
-        msg.append(" GeV\n P = ");
-        msg.append(String.format("%.3f",Math.abs(pT[index]/Math.cos(AMath.lambda(eta[index])))));
-        msg.append(" GeV\n Charge = ");
-        msg.append(integerCharge[index]);
-        msg.append("\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",eta[index]));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.3f",Math.toDegrees(phi[index])));
-        msg.append(AMath.DEGREES);
-        msg.append("  (" + String.format("%.3f",phi[index]) + " rad)");
-        msg.append("\n numTracks = ");
-        msg.append(numTracks[index]);
-        
-        if (label != null)
-        {
-            msg.append("\n label = ");
-            msg.append(label[index]);
-        }
-        if (isolFrac != null)
-        {
-            msg.append("\n isolFrac = ");
-            msg.append(isolFrac[index]);
-        }
-        if (logLhRatio != null)
-        {
-            msg.append("\n logLhRatio = ");
-            msg.append(logLhRatio[index]);
-        }
-
-        return msg.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATrackData.java b/graphics/AtlantisJava/src/atlantis/data/ATrackData.java
deleted file mode 100644
index bc680fdd7b15..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATrackData.java
+++ /dev/null
@@ -1,1389 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.canvas.ACanvas;
-import atlantis.utils.AMath;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AAtlantisException;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.projection.AProjectionXZ;
-import atlantis.graphics.AGraphics;
-import atlantis.canvas.AWindow;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjection3D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjectionPhi;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.A4Vector;
-import atlantis.utils.ALogger;
-
-/**
- *
- *    base class for ASTrData - Simulated Track
- *                   AInDetTrackData - Reconstructed Inner Detector Track
- *                   AMuonTrackData - Reconstructed Muon Detector Track
- *
- */
-public abstract class ATrackData extends AData
-{
-    private static final ALogger logger = ALogger.getLogger(ATrackData.class);
-    
-    public static final int DRAW_HELIX = 0;
-    public static final int DRAW_POLYLINE = 1;
-    public static final int DRAW_SMOOTH = 2;
-    public static final int DRAW_NEWHELIX = 3;
-    public static final int ADD_HELIX_POINTS = 0;
-
-    /** True if track residual is available */
-    private boolean hasResidual = false;
-
-    protected ATrackResidualData[] residuals = null;
-
-    /** True if reconstructed track event data contains polyline information */
-    protected boolean polylinedTrack = false;
-
-    // these attributes are used to store polyline coordinates of tracks
-    protected float x[][] = null;
-    protected float y[][] = null;
-    protected float z[][] = null;
-    protected float rho[][] = null;
-    protected float phi[][] = null;
-
-    protected int numHelix[] = null;
-    protected boolean cosmic[] = null;
-
-    protected AHelix[] h = null;
-
-    /**
-     *  rhoVertex value - for STr provided in the event file, for reconstructed
-     *  track (Track) it is calculated from first polyline coordinates.
-     *  This value is tested in cutRhoVertexAfterInDetRadius() method.
-     */
-    protected float[] rhoVertex = null;
-
-    protected int[] index = null;
-    
-    protected float chi2[] = null;
-    protected int numDoF[] = null;
-    private int[] vertexType = null;
-
-    // methods --------------------------------------------------------------
-
-    ATrackData(AHashMap p, AEvent e) throws AAtlantisException
-    {
-        super(p,e);
-
-        String assocKey = getName() + getStoreGateKey();
-        if (p.get("barcode") != null)
-        {
-            int[] barcode = p.getUnknownIntArray("barcode");
-            AAssociation assoc = new AAssociation(assocKey, "STr", null, barcode, event);
-            event.getAssociationManager().add(assoc);
-        }
-    	//Get vertex type numbers
-        vertexType = p.getUnsureIntArray("vertexType"); 
-        // if residual information is provided, second check is a workaround for a JiveXML bug -- EJ
-        if(p.get("numTsos")!=null && p.get("tsosPullLoc1")!=null)
-        {
-            hasResidual = true;
-            residuals = new ATrackResidualData[numData];
-            int[] numTsos = p.getIntArray("numTsos");
-            float[] tsosPullLoc1 = p.getFloatArray("tsosPullLoc1");
-            float[] tsosResLoc1 = p.getFloatArray("tsosResLoc1");
-            float[] tsosPullLoc2 = p.getFloatArray("tsosPullLoc2");
-            float[] tsosResLoc2 = p.getFloatArray("tsosResLoc2");
-            String[] tsosDetType = p.getUnsureStringArray("tsosDetType");
-
-            int num = 0;
-            for(int i=0; i<numData; i++)
-            {
-                int numPoints = numTsos[i];
-                float[] pullLoc1 = new float[numPoints];
-                float[] resLoc1 = new float[numPoints];
-                float[] pullLoc2 = new float[numPoints];
-                float[] resLoc2 = new float[numPoints];
-                String[] detType = null;
-                if(tsosDetType != null)
-                    detType = new String[numPoints];
-              
-                for(int j=0; j<numPoints; j++)
-                {
-                    pullLoc1[j] = tsosPullLoc1[num];
-                    resLoc1[j] = tsosResLoc1[num];
-                    pullLoc2[j] = tsosPullLoc2[num];
-                    resLoc2[j] = tsosResLoc2[num];
-                    if(tsosDetType != null)
-                        detType[j] = tsosDetType[num];
-                    num++;
-                }
-                residuals[i] = new ATrackResidualData(this, i, numPoints, pullLoc1, 
-                        resLoc1, pullLoc2, resLoc2, detType);
-            }
-        }
-       
-        // helix may come in different formats:
-        // * helix track from reconstructed track ? 
-        if (p.get("d0") != null)
-        {
-            h = new AHelix[numData];
-
-            float[] d0 = p.getFloatArray("d0");
-            float[] phi0 = p.getFloatArray("phi0");
-            float[] tl = p.getFloatArray("cotTheta");
-            float[] pt = p.getFloatArray("pt");
-            float[] z0 = p.getFloatArray("z0");
-
-            // this patch is useful when reading old event files generated by
-            // some older version of JiveXML, in which cotTheta is set to inf by
-            // error when eta equals to 0 for IDScan Tracks
-            if ("TrigInDetTrack".equals((String) p.get("storeGateKey")))
-            {
-                for(int i = 0; i < tl.length; i++)
-                {
-                    if(Float.isInfinite(tl[i]))
-                        tl[i] = 0.0f;
-                }
-            } // end of the patch
-
-            // 2005-11-16 - numbers in event file in covMatrix too small, a lot
-            // of them were 0.00000 hence multiplied by 10000 in JiveXML and
-            // divided here by 10000. only Vertex fitter affected, didn't work
-            // before anyway, so numbers are divided for all events
-            if (p.get("covMatrix") != null)
-            {
-                float[][][] cov = new float[numData][5][5];
-                float[] covMatrix = p.getFloatArray("covMatrix");
-                // dividing numbers
-                for (int i = 0; i < covMatrix.length; i++)
-                {
-                    covMatrix[i] = covMatrix[i] / 10000;
-                }
-
-                int n = 0;
-                for (int i = 0; i < numData; i++)
-                {
-                    for (int j = 0; j < 5; j++)
-                    {
-                        for (int k = 0; k < j + 1; k++)
-                        {
-                            cov[i][j][k] = covMatrix[n++];
-                            cov[i][k][j] = cov[i][j][k];
-                        }
-                    }
-
-                    h[i] = new AHelix(d0[i], z0[i], (float) Math.toDegrees(phi0[i]), tl[i], pt[i], cov[i]);
-                }
-            }
-            else
-            {
-                for (int i = 0; i < numData; i++) {
-                    h[i] = new AHelix(d0[i], z0[i], (float) Math.toDegrees(phi0[i]), tl[i], pt[i]);
-                }
-            }
-        }
-        // * helix track from simulated charged tracks ?
-        else if (p.get("rhoVertex") != null)
-        {
-            h = new AHelix[numData];
-
-            // STr - save rhoVertex value for tests
-            rhoVertex = p.getFloatArray("rhoVertex");
-            float[] rhoEndVertex = p.getFloatArray("rhoEndVertex");
-            float[] pt = p.getFloatArray("pt");
-            float[] phi = p.getFloatArray("phi");
-            float[] eta = p.getFloatArray("eta");
-            float[] phiVertex = p.getFloatArray("phiVertex");
-            float[] zVertex = p.getFloatArray("zVertex");
-            // charge is calculated in ASTrData, based on code subtag
-            // information and pdg.xml data
-            int[] charge = p.getIntArray("charge");
-            for (int i = 0; i < numData; i++)
-            {
-                //Create helix w/ end vertex information if rhoEndVertex is set
-                if ( rhoEndVertex[i] != 0.0 )
-                  h[i] = new AHelix(rhoVertex[i], phiVertex[i], zVertex[i], pt[i],
-                                    (float)Math.toDegrees(phi[i]), eta[i], charge[i], rhoEndVertex[i]);
-                //Otherwise create helix w/o end vertex information
-                else 
-                  h[i] = new AHelix(rhoVertex[i], phiVertex[i], zVertex[i], pt[i],
-                                  (float)Math.toDegrees(phi[i]), eta[i], charge[i] );
-            }
-        }
-
-        // if polyline information is provided for tracks
-        if(p.get("numPolyline") != null)
-        {
-            int[] numPolyline = p.getIntArray("numPolyline");
-
-            boolean hasPolyline = false;
-            for (int i=0; i<numData; i++) {
-                if (numPolyline[i] > 0) {
-                    hasPolyline = true;
-                    break;
-                }
-            }
-
-            if (hasPolyline) {
-                polylinedTrack = true;
-                x = new float[numData][];
-                y = new float[numData][];
-                z = new float[numData][];
-                rho = new float[numData][];
-                phi = new float[numData][];
-                rhoVertex = new float[numData];
-                numHelix = new int[numData];
-                cosmic = new boolean[numData];
-
-                float[] polyX = p.getFloatArray("polylineX");
-                float[] polyY = p.getFloatArray("polylineY");
-                float[] polyZ = p.getFloatArray("polylineZ");
-                int num = 0;
-               
-                for(int i = 0; i < numData; ++i)
-                {
-                    numHelix[i] = 0;
-                    cosmic[i] = false;
-
-                    // Do some checks on the track, decide what drawing we enable/disable for it.
-                    if (numPolyline[i] >= 2) {
-                        int first = num;
-                        int next = num+1;
-
-                        // Find the next different point on the track.
-                        while (next < numPolyline[i]-1 && polyX[next]==polyX[first] && polyY[next]==polyY[first]) next++;
-
-                        // Determine what direction the track has in rho and z.
-                        float rStart = (float)Math.sqrt(polyX[first]*polyX[first] + polyY[first]*polyY[first]);
-                        float rDir = (float)Math.sqrt(polyX[next]*polyX[next] + polyY[next]*polyY[next]) - rStart;
-                        float zDir = Math.abs(polyZ[next]) - Math.abs(polyZ[first]);
-
-                        // Now in order to extrapolate to the IP we the track to:
-                        // - go radially outwards
-                        // - go away from the IP in z
-                        // - have perigee parameters
-                        // - have its first polyline point some distance from the perigee
-                        // - be an InDetTrack
-                        if (rDir > 0 && zDir > 0 && h != null && h[i] != null && rStart-Math.abs(h[i].d0()) > 1
-                            && this instanceof AInDetTrackData) {
-                            numHelix[i] = ADD_HELIX_POINTS;
-                        }
-
-                        // Check if this is perhaps a cosmic. Cosmics are allowed
-                        // to be drawn on both sides in the rho-z projection
-                        if (rDir < 0) {
-                            cosmic[i] = true;
-                        }
-                    } else if (h != null && h[i] != null && this instanceof AInDetTrackData) {
-
-                        // In case of a track with only perigee parameters, draw it also as a helix.
-                        numHelix[i] = ADD_HELIX_POINTS;
-                    }
-                    
-                    x[i] = new float[numPolyline[i]+numHelix[i]];
-                    y[i] = new float[numPolyline[i]+numHelix[i]];
-                    z[i] = new float[numPolyline[i]+numHelix[i]];
-                    rho[i] = new float[numPolyline[i]+numHelix[i]];
-                    phi[i] = new float[numPolyline[i]+numHelix[i]];
-
-                    for(int j = 0; j < numPolyline[i]; ++j)
-                    {
-                        x[i][j+numHelix[i]] = polyX[num];
-                        y[i][j+numHelix[i]] = polyY[num];
-                        z[i][j+numHelix[i]] = polyZ[num];
-                        rho[i][j+numHelix[i]] = (float)Math.sqrt(polyX[num]*polyX[num]+polyY[num]*polyY[num]);
-                        num++;
-                        
-                        if(j == 0)
-                        {
-                            // first coordinate of a track - calculate rhoVertex
-                            rhoVertex[i] = (float) Math.sqrt( x[i][numHelix[i]] * x[i][numHelix[i]] +
-                                                              y[i][numHelix[i]] * y[i][numHelix[i]] );
-                        }
-                    }
-
-                    if (h != null && h[i] != null) {
-                        h[i].setPoints(x[i], y[i], z[i], numPolyline[i]);
-                    }
-                    
-                    // When perigee parameters are available we extend the track all the way down to the IP
-                    if (numHelix[i] > 0) {
-                        // Radius of curvature of this track in the magnetic field
-                        double R = parameterStore.get("Event", "Curvature").getD() * Math.abs(h[i].pT());
-
-                        // +1/-1 for a clockwise/anti-clockwise helix 
-                        double S = AMath.getSign(h[i].pT());
-
-                        // Coordinates of the center point for the helix
-                        double xC = (S * h[i].d0() - R) * Math.cos(Math.toRadians(h[i].phi0()) + S * Math.PI / 2.);
-                        double yC = (S * h[i].d0() - R) * Math.sin(Math.toRadians(h[i].phi0()) + S * Math.PI / 2.);
-
-                        // Determine to what radius we have to draw this track based on its 
-                        // perigee parameters. When space points are available for the track 
-                        // we stop before the first space point and make a smooth connection.
-                        // If no space points are available we draw all the way through the
-                        // inner detector. Not any further though, because the track will stop 
-                        // curving when it leaves the magnetic field.
-                        double Rmax;
-                        if (numPolyline[i] > 0) {
-                            Rmax = Math.min(parameterStore.get("RTr", "RadiusTr").getD(),
-                                Math.abs(Math.sqrt(x[i][numHelix[i]]*x[i][numHelix[i]]
-                                    + y[i][numHelix[i]]*y[i][numHelix[i]]) - 1));
-                        } else {
-                            Rmax = parameterStore.get("RTr", "RadiusTr").getD();
-                        }
-
-                        // Calculate the phi value at which our helix intersects the maximum 
-                        // radius determined above. We have one circle (detector) centered at 
-                        // the origin with radius Rmax. The other circle (helix) we imagine to 
-                        // be at x=d with a radius R. Now we can easily calculate the coordinates
-                        // (xI,+/-yI) of the intersection points. The curving direction of the 
-                        // helix determines which value of yI we have to use. Finally, the phiMax 
-                        // we're interested in is the polar angle with respect to the center of the 
-                        // helix at x=d. Calculation is straightforward. By adding phi0+S*PI/2 
-                        // (as we do below) this solution is also valid for helices centered 
-                        // around y!=0.
-                        double d = Math.sqrt(xC * xC + yC * yC);
-                        double xI = (Rmax * Rmax - R * R + d * d) / (2 * d);
-                        double yI = Math.sqrt(Rmax * Rmax - xI * xI);
-                        double phiMax = Math.atan2(S * yI, d - xI);
-
-                        // This spreads the number of helix points evenly across the part of the 
-                        // helix we're going to draw
-                        double dphi = phiMax / numHelix[i];
-
-                        for (int j=0; j<numHelix[i]; j++) {
-                            // Points on the helix in user coordinates
-                            x[i][j] = (float) (xC + R * Math.cos(Math.toRadians(h[i].phi0()) + S * Math.PI/2. - j * dphi));
-                            y[i][j] = (float) (yC + R * Math.sin(Math.toRadians(h[i].phi0()) + S * Math.PI/2. - j * dphi));
-
-                            // In R-Z the track is just a straight line
-                            rho[i][j] = (float) Math.sqrt(x[i][j]*x[i][j] + y[i][j]*y[i][j]);
-                            z[i][j] = (float) (h[i].z0() + h[i].cotanTheta() * (rho[i][j] - h[i].d0()));
-                        }
-                    }                
-            
-                    for (int j=0; j<numPolyline[i]+numHelix[i]; j++) {
-                        phi[i][j] = (float)Math.atan2(y[i][j], x[i][j]);
-                        
-                        if (j>0 && Math.abs(phi[i][j-1]-phi[i][j]) > Math.PI) {
-                            
-                            // Don't let phi wrap around
-                            if (phi[i][j] > phi[i][j-1]) {
-                                phi[i][j] -= 2*Math.PI;
-                            } else {
-                                phi[i][j] += 2*Math.PI;
-                            }
-                        }
-                    }
-                }
-            }
-        } // if(p.get("numPolyline")
-
-        if (h != null)
-        {
-            double[] phi = new double[numData];
-            for (int i = 0; i < numData; i++)
-                phi[i] = h[i].phi0();
-            index = indexBy(phi);
-        }
-        else if(x != null && y != null)
-        {
-            double[] phi = new double[numData];
-            for(int i = 0; i < numData; i++)
-            {
-                // if number of polylines for a track is 0 - Atlantis used
-                // to crash here with IndexOutOfBoundException
-                // check to avoid crashes with old events, from some point
-                // JiveXML doesn't output tracks with number of polylines
-                // coordinates less then 2
-                if(x[i].length > 0 && y[i].length > 0)
-                {
-                    phi[i] = Math.toDegrees(Math.atan2(y[i][0], x[i][0]));
-                }
-                else
-                {
-                    String m  = getName() + ":" + getStoreGateKey() +
-                                " datatype rejected\n" +
-                                "(no polyline coordinates).";
-                    throw new AAtlantisException(m, false); // non fatal
-                }
-            }
-            index = indexBy(phi);            
-        }
-
-        if (p.get("chi2") != null) chi2 = p.getFloatArray("chi2");
-        if (p.get("numDoF") != null) numDoF = p.getIntArray("numDoF");
-    } // ATrackData() -------------------------------------------------------
-
-
-    public float[][] getX()
-    {
-        return x;
-    }
-
-    public float[][] getY()
-    {
-        return y;
-    }
-
-    public float[][] getZ()
-    {
-        return z;
-    }
-
-    public float[][] getRho()
-    {
-        return rho;
-    }
-
-    public float[][] getPhi()
-    {
-        return phi;
-    }
-
-    public boolean getResidualStatus()
-    {
-        return hasResidual;
-    }
-
-    public ATrackResidualData getTrackResidual(int index)
-    {
-        return residuals[index];
-    }
-
-    // moved from the former iPatData class where it was without the condition
-    protected void calculateRhoPhi()
-    {
-        if(!polylinedTrack) {
-            super.calculateRhoPhi();
-        }
-    } // calculateRhoPhi() --------------------------------------------------
-
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        if (h != null)
-        {
-            cut("CutsInDet", "z0-zVtx", " |z0-zVtx|", getZ0Primary());
-            cut("CutsInDet", "z0", " |z0|", getZ0());
-            cut("CutsInDet", "Pt", " |Pt|", getPt());
-            cut("CutsInDet", "d0", " |d0|", getD0());
-            cut("CutsInDet", "d0Loose", " |d0Loose|", getD0());
-        }
-        cutPhi();
-        cutEta();
-        cutNextInDrawList();
-        cutReconstructedVertex();     
-    } // applyCuts() --------------------------------------------------------
-
-
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+
-        ((h!=null)?h[index].toString():"");
-    	
-        
-        String msg = getNameScreenName() + " (id: " + id[index] + " index: " + index + ")";
-        msg += "\n storegate key: ";
-        msg += (storeGateKey == null ? "n/a" : storeGateKey);
-        if (h != null)
-            msg += h[index].toString();
-        if (chi2 != null && numDoF != null)
-            msg += "\n chi2/numDoF = " + chi2[index]/numDoF[index];
-        return msg;
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-    // all get**User() methods which are only called when tracks are drawn
-    // as polylines
-    protected ACoord getYXUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = x[list].length;
-            hv[0][i] = new double[numPoints];
-            hv[1][i] = new double[numPoints];
-            for(int j = 0; j < numPoints; j++)
-            {
-                hv[0][i][j] = x[list][j];
-                hv[1][i][j] = y[list][j];
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-
-    } // getYXUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFRUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = x[list].length;
-            int skip = 0;
-            
-            // Skip points with very small R, phi changes rapidly here
-            for (skip=0; skip<numPoints; skip++)
-                if (rho[list][skip] > 2.) break;
-            
-            hv[0][i] = new double[numPoints-skip];
-            hv[1][i] = new double[numPoints-skip];
-            
-            double phiStart = 0.;
-            if(numPoints > 0) phiStart = phi[list][0];
-            for(int j = skip; j < numPoints; j++)
-            {
-                double phiTemp = phi[list][j];
-                if(phiTemp - phiStart > Math.PI) phiTemp -= AMath.TWO_PI;
-                if(phiTemp - phiStart < -Math.PI) phiTemp += AMath.TWO_PI;
-                
-                hv[0][i][j-skip] = rho[list][j];
-                hv[1][i][j-skip] = Math.toDegrees(phiTemp);
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES).includePhiWrapAround("FR");
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES).includePhiWrapAround("FR");
-
-    } // getFRUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = x[list].length;
-            int skip = 0;
-            
-            // Skip points with very small R, phi changes rapidly here
-            for (skip=0; skip<numPoints; skip++)
-                if (rho[list][skip] > 2.) break;
-            
-            hv[0][i] = new double[numPoints-skip];
-            hv[1][i] = new double[numPoints-skip];
-            // treat phi wraparound
-            double phiStart = 0.;
-            if(numPoints > 0) phiStart = phi[list][0];
-            for(int j = skip; j < numPoints; j++)
-            {
-                hv[0][i][j-skip] = z[list][j];
-                double phiTemp = phi[list][j];
-                if(phiTemp - phiStart > Math.PI) phiTemp -= AMath.TWO_PI;
-                if(phiTemp - phiStart < -Math.PI) phiTemp += AMath.TWO_PI;
-                hv[1][i][j-skip] = Math.toDegrees(phiTemp);
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES).includePhiWrapAround("FZ");
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES).includePhiWrapAround("FZ");
-
-    } // getFZUser() --------------------------------------------------------
-
-
-
-    protected ACoord getRZUser()
-    {
-        // not quite correct need to split tracks crossing phi boundary
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = rho[list].length;
-            hv[0][i] = new double[numPoints];
-            hv[1][i] = new double[numPoints];
-
-            if (numPoints > 0) {
-                int sign = AParameterUtilities.getRhoSign(x[list][numPoints-1], y[list][numPoints-1]);
-                for(int j = 0; j < numPoints; j++)
-                {
-                    if (cosmic != null && cosmic[i]) {
-                        sign = AParameterUtilities.getRhoSign(x[list][j], y[list][j]);
-                    }
-                    hv[0][i][j] = z[list][j];
-                    hv[1][i][j] = rho[list][j] * sign;
-                }
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-
-    } // getRZUser() --------------------------------------------------------
-
-
-
-    protected ACoord getXZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = rho[list].length;
-            hv[0][i] = new double[numPoints];
-            hv[1][i] = new double[numPoints];
-            for(int j = 0; j < numPoints; j++)
-            {
-                hv[0][i][j] = z[list][j];
-                hv[1][i][j] = rho[list][j] * Math.cos(phi[list][j] - phi0);
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-
-    } // getXZUser() --------------------------------------------------------
-
-    protected ACoord getYZUser()
-    {
-        makeDrawList();
-        double[][][] hv = new double[2][numDraw][];
-        int[] index = new int[numDraw];
-        double phi0 = Math.toRadians(AProjectionXZ.getPhi());
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            int numPoints = rho[list].length;
-            hv[0][i] = new double[numPoints];
-            hv[1][i] = new double[numPoints];
-            for(int j = 0; j < numPoints; j++)
-            {
-                hv[0][i][j] = z[list][j];
-                hv[1][i][j] = rho[list][j] * Math.sin(phi[list][j] - phi0);
-            }
-            index[i] = list;
-        }
-
-        if (parameterStore.get(PARAMETER_GROUP, "DrawnAs").getI() == DRAW_SMOOTH)
-            return new ACoord(hv, index, this, ACoord.SMOOTH_POLYLINES);
-        else
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-
-    } // getYZUser() --------------------------------------------------------
-
-
-
-    public void draw(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if(h != null && (projection instanceof AProjectionVP || projection instanceof AProjection3D))
-        {
-            // in VPlot only helices are drawn, so try to draw tracks as helices
-            // in VPlot by default ignoring Track->DrawAs option for VPlot
-            drawHelix(window, ag, projection);
-        }
-        else
-        {
-            AParameter drawPar = parameterStore.get(PARAMETER_GROUP, "DrawnAs");
-            int drawnAs = drawPar != null ? drawPar.getI() : DRAW_HELIX;
-            if (polylinedTrack && (h == null || drawnAs == DRAW_POLYLINE || drawnAs == DRAW_SMOOTH)) 
-            {
-                // draw as polyline
-                ag.draw(window.calculateDisplay(getUser(projection)));
-            } 
-            else if (h != null)
-            {
-                // draw as helix
-                drawHelix(window, ag, projection);
-            }
-        }
-
-    } // draw() -------------------------------------------------------------
-
-    protected void cutRhoVertexAfterInDetRadius()
-    {
-        int num = 0;
-        int wrong = 0;
-        int list = 0;
-        double rho = 108; // 1.08m
-        double parRhoTr = parameterStore.get("RTr", "RadiusTr").getD();
-        for(int i = 0; i < numDraw; i++)
-        {
-            list = listdl[i];
-            if(this.rhoVertex[list] > Math.min(rho, parRhoTr))
-            {
-                wrong++;
-            }
-            else
-            {
-                // include into drawlist
-                listdl[num++] = list;
-            }
-        }
-
-        if(wrong > 0)
-        {
-            logger.debug("AHelix.cutRhoVertexAfterInDetRadius()");
-            String key = this.getStoreGateKey();
-            key = key != null ? ":" + key : "";
-            logger.debug("  " + numDraw + " " + this.getName() + key +
-                          " before test, " + wrong + " removed\n");
-        }
-        numDraw = num;
-    } // cutRhoVertexAfterInDetRadius() -------------------------------------
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        switch (colorFunction)
-        {
-            case 0:
-                colorByConstant();
-                break;
-            case 1:
-                colorByIndex(index);
-                break;
-            case 2:
-                colorBy(getPt());
-                break;
-            case 3:
-                colorByCollection();
-                break;
-            case 4:
-                colorBy("STr");
-                break;
-            case 5:               
-                colorBy(getRVx());
-                break;
-            case 6:              
-                colorBy(getJets());
-                break;
-            case 7: // by objects
-                colorByObjects();
-                break;
-        }
-
-        return 7;
-    }
-
-    public int[] getDrawList()
-    {
-        int[] temp = new int[numDraw];
-        System.arraycopy(listdl, 0, temp, 0, numDraw);
-        return temp;
-    }
-
-    protected void cutNextInDrawList()
-    {
-        AParameter nextTrkPar = parameterStore.get(PARAMETER_GROUP, "NextTrack");
-        if(!nextTrkPar.getStatus())
-        {
-            return;
-        }
-        if(numDraw == 0)
-        {
-            return;
-        }
-
-        int nextTrk = nextTrkPar.getI() % numData;
-        int nextTrkIndex = nextTrk;
-        boolean hasFound = false;
-        while (!hasFound)
-        {
-            for (int i=0; i<numDraw; ++i)
-            {
-                if(listdl[i] == nextTrk)
-                {
-                    nextTrkIndex = nextTrk;
-                    hasFound = true;
-                }
-            }
-            if(!hasFound)
-                nextTrk = (nextTrk + 1) % numData;
-        }
-        nextTrkPar.setI(nextTrkIndex);
-        numDraw = 1;
-        listdl[0] = nextTrkIndex;
-    }
-   
-    protected void cutPhi()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutPhi");
-        boolean usePhiCut = par.getStatus();
-
-        if (usePhiCut)
-        {
-            // use degrees for tracks
-            double phiCut = par.getD();
-            double phiMid = AMath.nearestPhiDegrees(parameterStore.get("CutsATLAS", "PhiMiddle").getD());
-            // use vplot as projection
-            AProjection2D projection = (AProjection2D) AProjectionsManager.getProjection("VP");
-
-            int num = 0;
-            for (int i = 0; i < numDraw; i++)
-            {
-                int list = listdl[i];
-                ADHelix dH = new ADHelix(h[list]);
-                double s1 = dH.getAStart();
-                double s2 = dH.getAEnd();
-                s1 = dH.intersectWithRadialCylinder(projection.getMinRho(), s1, s2);
-                double sEnd = dH.intersectWithCylinder(true, AProjectionVP.getRhoVPlot(), true, AProjectionVP.getZVPlot());
-                s2 = Math.max(Math.min(s2, sEnd), s1);
-
-                double phiDiffStart = Math.abs(AMath.nearestPhiDegrees(dH.getPhi(s1), phiMid) - phiMid);
-                double phiDiffEnd = Math.abs(AMath.nearestPhiDegrees(dH.getPhi(s2), phiMid) - phiMid);
-                double phiDiffMiddle = Math.abs(AMath.nearestPhiDegrees(dH.getPhi((s1 + s2) / 2), phiMid) - phiMid);
-                // treats wrap around
-                int numPointsInside = 0;
-
-                if (phiDiffStart < phiCut)
-                    numPointsInside++;
-                if (phiDiffMiddle < phiCut)
-                    numPointsInside++;
-                if (phiDiffEnd < phiCut)
-                    numPointsInside++;
-                if (numPointsInside > 1)
-                    listdl[num++] = list;
-            }
-            numDraw = num;
-        }
-    }
-
-    /**
-     * Cut tracks if connected/unconnected to reconstructed vertices.
-     */
-    protected void cutReconstructedVertex()
-    {
-        int cutOption = parameterStore.get("CutsObjects", "RTrsByRVtx").getI();
-        cutByAssociationTo( "RVx", getReconstructedTracks(), cutOption);
-    }
-     
-    
-    protected void cutEta()
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-
-        if (par.getStatus())
-        {
-            // use vplot as projection
-            AProjection2D projection = (AProjection2D) AProjectionsManager.getProjection("VP");
-
-            double etaCut = par.getD();
-            double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-            double etaC1 = etaMid - etaCut;
-            double etaC2 = etaMid + etaCut;
-            int num = 0;
-            for (int i = 0; i < numDraw; i++)
-            {
-                int list = listdl[i];
-                ADHelix dH = new ADHelix(h[list]);
-                double s1 = dH.getAStart();
-                double s2 = dH.getAEnd();
-                s1 = dH.intersectWithRadialCylinder(projection.getMinRho(), s1, s2);
-                double sEnd = dH.intersectWithCylinder(true, AProjectionVP.getRhoVPlot(), true, AProjectionVP.getZVPlot());
-                s2 = Math.max(Math.min(s2, sEnd), s1);
-                double[] etaPoints = new double[] { dH.getEta(s1), dH.getEta((s1 + s2) / 2), dH.getEta(s2) };
-
-                int numPointsInside = 0;
-                for (int j = 0; j < etaPoints.length; ++j)
-                    if (etaC1 < etaPoints[j] && etaPoints[j] < etaC2)
-                        numPointsInside++;
-                if (numPointsInside > 1)
-                    listdl[num++] = list;
-            }
-            numDraw = num;
-        }
-    }
-
-    // does not work correctly if primary vertex is displaced in YX plane
-    private float[] getZ0Primary()
-    {
-        double[] pVtx = event.getPrimaryVertex();
-        float[] temp = new float[numData];
-        double zVertex = pVtx[2];
-        for (int i = 0; i < numDraw; i++)
-            temp[listdl[i]] = (float) (h[listdl[i]].z0() - zVertex);
-        return temp;
-    }
-
-    private float[] getZ0()
-    {
-        float[] temp = new float[numData];
-        for (int i = 0; i < numDraw; i++)
-            temp[listdl[i]] = (float) h[listdl[i]].z0();
-        return temp;
-    }
-
-    protected float[] getPt()
-    {
-        float[] temp = new float[numData];
-        for (int i = 0; i < numDraw; i++)
-            temp[listdl[i]] = (float) h[listdl[i]].pT();
-        return temp;
-    }
-
-
-    // d0 is calculated w.r.t. to XY position of the primary vertex
-    private float[] getD0()
-    {
-        double[] pVtx = event.getPrimaryVertex();
-        float[] temp = new float[numData];
-        for (int i = 0; i < numDraw; i++)
-        {
-            double phi0 = Math.toRadians(h[listdl[i]].phi0());
-
-            temp[listdl[i]] = (float) (-h[listdl[i]].d0() + pVtx[1] * Math.cos(phi0) - pVtx[0] * Math.sin(phi0));
-
-        }
-        return temp;
-    }
-
-
-    // give back Drawable helices
-    public ADHelix[] getHelices()
-    {
-        makeDrawList();
-        ADHelix[] tempList = new ADHelix[numDraw];
-
-        for (int i = 0; i < numDraw; i++)
-            if (h != null && h[listdl[i]] != null)
-            {
-                tempList[i] = new ADHelix(h[listdl[i]]);
-                if (tempList[i].getAStart() == tempList[i].getAEnd())
-                {
-                    tempList[i] = null;
-                }
-            }
-            else
-                tempList[i] = null;
-        return tempList;
-    }
-
-    // used by vertex package when changing the position on the helix from which
-    // to start drawing
-    public AHelix getModifiableHelix(int i)
-    {
-        if (h != null)
-            return h[i];
-        else
-            return null;
-    }
-
-    // info on tracks contained in vplot rubberband
-    public String getVPHitInfo()
-    {
-        makeDrawList();
-        if (numDraw == 0)
-            return "";
-        double sumP = 0.;
-        double sumPt = 0.;
-
-        for (int i = 0; i < numDraw; ++i)
-        {
-            sumPt += Math.abs(h[listdl[i]].pT());
-            sumP += AMath.getPFromPttL(h[listdl[i]].pT(), h[listdl[i]].cotanTheta());
-        }
-
-        String msg = numDraw + " " + getFullName();
-        msg += "  sum(PT) = " + String.format("%.1f",sumPt) + "  sum(P) = " + String.format("%.1f",sumP);
-        return msg;
-    }
-
-    public A4Vector get4Vector(int num, int[] list)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i) {
-            if (h == null || h[list[i]] == null) continue;
-            // Use the pion mass (~140 MeV) here
-            sum.add(new A4Vector(h[list[i]].p(), 0.14));
-        }
-        return sum;
-    }
-    
-    public A4Vector get4Vector(int num, int[] list, double mass)
-    {
-        A4Vector sum = new A4Vector();
-        for (int i = 0; i < num; ++i) {
-            if (h == null || h[list[i]] == null) continue;
-            sum.add(new A4Vector(h[list[i]].p(), mass));
-            
-              
-        }
-        return sum;
-    }
-
-    public void zoomAroundTracks()
-    {
-        AWindow window = ACanvas.getCanvas().getCurrentWindow();
-        AProjection projection = window.getProjection();
-        if (projection instanceof AProjectionLegoPlot)
-        {
-            AOutput.append("Zoom Next Track unavailable for LegoPlot\n", ALogInterface.NORMAL);
-        }
-        else if (projection instanceof AProjection2D)
-        {
-            ACoord user;
-            if (projection instanceof AProjectionVP)
-                user = window.calculateUser(getVPDisplayHelices(window, (AProjection2D) projection));
-            else if (polylinedTrack)
-                user = getUser((AProjection2D) projection);
-            else
-                user = window.calculateUser(getDisplayHelices(window, (AProjection2D) projection));
-            double[] min = new double[2];
-            double[] max = new double[2];
-            min[0] = min[1] = 100000.;
-            max[0] = max[1] = -100000.;
-            for (int i = 0; i < 2; ++i)
-                for (int j = 0; j < user.hv[i].length; ++j)
-                    for (int k = 0; k < user.hv[i][j].length; ++k)
-                    {
-                        if (user.hv[i][j][k] < min[i])
-                            min[i] = user.hv[i][j][k];
-                        if (user.hv[i][j][k] > max[i])
-                            max[i] = user.hv[i][j][k];
-                    }
-            // increase by 10% to improve appearence
-            for (int i = 0; i < 2; ++i)
-            {
-                double diff = (max[i] - min[i]) / 2.;
-                double middle = (max[i] + min[i]) / 2.;
-                if (diff > 0.)
-                {
-                    max[i] = middle + 1.1 * diff;
-                    min[i] = middle - 1.1 * diff;
-                }
-            }
-            // ensure entire trt hits included
-            if (projection instanceof AProjectionPhi)
-            {
-                min[1] -= 0.5;
-                max[1] += 0.5;
-            }
-
-            if (max[0] - min[0] > 0 && max[1] - min[1] > 0)
-            {
-                window.setUserCorners(min[0], max[0], min[1], max[1]);
-            }
-        }
-    }
-
-    public void drawHelix(AWindow window, AGraphics ag, AProjection2D projection)
-    {
-        if (projection instanceof AProjectionVP)
-        {
-            // phi wrap around is done in user coordinates, so we convert to user coordinates,
-            // do the phi wrap around and convert back to display coordinates
-            ag.draw(window.calculateDisplay(window.calculateUser(
-                    getVPDisplayHelices(window, projection)).includePhiWrapAround(projection.getName())
-            ));
-        }
-        else if (projection instanceof AProjectionRZ)
-        {
-            ag.draw(getRZDisplayHelices(window, projection));
-        }
-        else if (projection instanceof AProjectionPhi)
-        {
-            // phi wrap around in user coordinates, see above
-            ag.draw(window.calculateDisplay(window.calculateUser(
-                    getDisplayHelices(window, projection)).includePhiWrapAround(projection.getName())
-            ));
-
-        }
-        else
-        {
-            ag.draw(getDisplayHelices(window, projection));
-        }
-    }
-
-    // treat discontinuity when RZ sign changes crossing the phi boundary
-    private ACoord getRZDisplayHelices(AWindow window, AProjection2D projection)
-    {
-        ACoord display = getDisplayHelices(window, projection);
-        ACoord user = projection.inverseNonLinearTransform(window.calculateUser(display));
-
-        double[][] rho = user.hv[1];
-
-        int extraTrackSegments = 0;
-
-        for (int i = 0; i < rho.length; i++)
-            for (int j = 1; j < rho[i].length - 2; j++)
-                if (rho[i][j] * rho[i][j + 1] < 0. && Math.abs(rho[i][j]) > 2.)
-                    extraTrackSegments++;
-
-        double hv[][][] = new double[2][rho.length + extraTrackSegments][];
-        int index[] = new int[rho.length + extraTrackSegments];
-
-        extraTrackSegments = 0;
-        for (int i = 0; i < rho.length; i++)
-        {
-            int startOfSegment = 0;
-            int endOfLastSegment = rho[i].length - 1;
-
-            for (int j = 0; j < rho[i].length - 1; j++)
-                if (rho[i][j] * rho[i][j + 1] < 0. && Math.abs(rho[i][j]) > 2.)
-                {
-                    if (j == 0)
-                    {
-                        if (Math.abs(rho[i][0]) > 1.)
-                            startOfSegment = 1;
-                    }
-                    else if (j == rho[i].length - 2)
-                        endOfLastSegment = rho[i].length - 2;
-                    else
-                    {
-                        for (int k = 0; k < hv.length; ++k)
-                        {
-                            hv[k][i + extraTrackSegments] = new double[j + 1 - startOfSegment];
-                            System.arraycopy(user.hv[k][i], startOfSegment, hv[k][i + extraTrackSegments], 0, j + 1 - startOfSegment);
-                        }
-                        index[i + extraTrackSegments] = user.index[i];
-                        startOfSegment = j + 1;
-                        extraTrackSegments++;
-                    }
-                }
-            if (startOfSegment == 0 && endOfLastSegment == rho[i].length - 1)
-            {
-                for (int k = 0; k < hv.length; ++k)
-                    hv[k][i + extraTrackSegments] = user.hv[k][i];
-                index[i + extraTrackSegments] = user.index[i];
-            }
-            else
-            {
-                for (int k = 0; k < hv.length; ++k)
-                {
-                    hv[k][i + extraTrackSegments] = new double[endOfLastSegment - startOfSegment + 1];
-                    System.arraycopy(user.hv[k][i], startOfSegment, hv[k][i + extraTrackSegments], 0, endOfLastSegment - startOfSegment + 1);
-                }
-                index[i + extraTrackSegments] = user.index[i];
-            }
-        }
-
-        rho = hv[1];
-        for (int i = 0; i < rho.length; i++)
-        {
-            int j = 0;
-
-            while (j < rho[i].length && Math.abs(rho[i][j]) < 2.)
-                j++;
-            if (j < rho[i].length)
-                if (rho[i][j] > 0.)
-                    for (int k = 0; k < j; k++)
-                        rho[i][k] = Math.abs(rho[i][k]);
-                else
-                    for (int k = 0; k < j; k++)
-                        rho[i][k] = -Math.abs(rho[i][k]);
-        }
-
-        return window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv, index, this, ACoord.POLYLINES)));
-    }
-
-    protected ACoord getDisplayHelices(AWindow window, AProjection2D projection)
-    {
-        AParameter drawPar = parameterStore.get(PARAMETER_GROUP, "DrawnAs");
-        int drawnAs = drawPar != null ? drawPar.getI() : DRAW_HELIX;
-        
-        if (drawnAs == DRAW_HELIX) {
-            ADHelix[] dhelix = getHelices();
-            double[][][] hv = new double[2][dhelix.length][0];
-            int[] index = getDrawList();
-
-            for (int j = 0; j < dhelix.length; ++j) {
-                if (dhelix[j] != null) {
-                    double s1 = dhelix[j].getAStart(); // Get start phi-angle
-                    double s2 = dhelix[j].getAEnd(); // Get end phi-angle
-
-                    // s1 becomes phi at the intersection of the minimal radius
-                    s1 = dhelix[j].intersectWithRadialCylinder(projection.getMinRho(), s1, s2); // minrho = 0
-                    // avoid drawing discontinuous in phi
-                    dhelix[j].setPhiStart(s1, s2);
-                    // returning a set of points to be drawn for this helix
-                    ACoord pointsOnHelix = dhelix[j].drawHelix(window, projection, s1, s2);
-
-                    hv[0][j] = pointsOnHelix.hv[0][0];
-                    hv[1][j] = pointsOnHelix.hv[1][0];
-                }
-            }
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-        } else { // DRAW_NEW_HELIX
-            
-            // V-plot needs some additional settings
-            boolean showS3D = parameterStore.get("Data", "S3D").getStatus();
-            AParameter shortV = parameterStore.get("VP", "ShortV");
-            
-            makeDrawList();
-            double[][][] hv = new double[2][numDraw][];
-            int[] index = new int[numDraw];
-            
-            for (int i=0; i<numDraw; i++) {
-                int j = listdl[i];
-                index[i] = j;
-                
-                if (projection instanceof AProjectionYX) {
-
-                    hv[0][i] = h[j].getX(h[j].getAlphaMin(), h[j].getAlphaMax());
-                    hv[1][i] = h[j].getY(h[j].getAlphaMin(), h[j].getAlphaMax());
-                    
-                } else if (projection instanceof AProjectionRZ 
-                            || projection instanceof AProjectionXZ
-                            || projection instanceof AProjectionYZ) {
-
-                    double alphaMin = h[j].getAlphaCylinder(projection.getMinRho(), AHelix.TRACKER_LENGTH);                    
-                    hv[0][i] = h[j].getZ(alphaMin, h[j].getAlphaMax());
-                    hv[1][i] = h[j].getRho(alphaMin, h[j].getAlphaMax(), true);
-                    
-                    if (projection instanceof AProjectionXZ || projection instanceof AProjectionYZ) {
-                        double phiC = AProjectionXZ.getPhi();                        
-                        if (projection instanceof AProjectionYZ) phiC += 90;
-                        
-                        double phi[] = h[j].getPhi(alphaMin, h[j].getAlphaMax(), false);
-                        for (int k=0; k<hv[1][i].length; k++) {
-                            hv[1][i][k] = Math.abs(hv[1][i][k]) * Math.cos(Math.toRadians(phi[k] - phiC));
-                        }
-                    }
-                } else if (projection instanceof AProjectionFR) {
-                    
-                    double alphaMin = h[j].getAlphaCylinder(projection.getMinRho(), AHelix.TRACKER_LENGTH);
-                    hv[0][i] = h[j].getRho(alphaMin, h[j].getAlphaMax(), false);
-                    hv[1][i] = h[j].getPhi(alphaMin, h[j].getAlphaMax(), false);
-                    
-                } else if (projection instanceof AProjectionFZ) {
-                    
-                    double alphaMin = h[j].getAlphaCylinder(projection.getMinRho(), AHelix.TRACKER_LENGTH);
-                    hv[0][i] = h[j].getZ(alphaMin, h[j].getAlphaMax());
-                    hv[1][i] = h[j].getPhi(alphaMin, h[j].getAlphaMax(), false);
-                    
-                } else if (projection instanceof AProjectionVP) {
-                    
-                    double alphaMin = h[j].getAlphaCylinder(projection.getMinRho(), AHelix.TRACKER_LENGTH);
-                    double alphaMax = h[j].getAlphaExtrapolated(AProjectionVP.getRhoVPlot(), AHelix.TRACKER_LENGTH); 
-                    if (shortV.getStatus() && !showS3D) {
-                        alphaMin = alphaMax - shortV.getD() * (alphaMax - alphaMin);
-                    }
-                    
-                    hv[0][i] = h[j].getEta(alphaMin, alphaMax);
-                    hv[1][i] = h[j].getPhi(alphaMin, alphaMax, true);
-                    
-                }
-            }
-            
-            return window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv, index, this, ACoord.POLYLINES)));
-        }
-    }
-
-    // a track has two arms in the VPlot
-    protected ACoord getVPDisplayHelices(AWindow window, AProjection2D projection)
-    {
-        boolean drawApex = parameterStore.get("VP", "DrawApex").getStatus();
-        AParameter drawPar = parameterStore.get(PARAMETER_GROUP, "DrawnAs");
-        int drawnAs = drawPar != null ? drawPar.getI() : DRAW_HELIX;
-        
-        if (drawnAs == DRAW_HELIX) {
-            ADHelix[] dhelix = getHelices();
-            int size = 2 * dhelix.length;
-            if (drawApex)
-                size = 3 * dhelix.length;
-            double[][][] hv = new double[2][size][0];
-            int[] index = new int[size];
-            int[] indexIn = getDrawList();
-            int num = 0;
-
-            for (int j = 0; j < dhelix.length; ++j)
-                if (dhelix[j] != null)
-                {
-                    double s1 = dhelix[j].getAStart();
-                    double s2 = dhelix[j].getAEnd();
-
-                    int mode = parameterStore.get("VP", "Mode").getI();
-                    if(mode <= AProjectionVP.MODE_HCAL_LAYER_3
-                        && mode >= AProjectionVP.MODE_ECAL_LAYER_0) {
-                      s2 = 179;
-                    }
-
-                    s1 = dhelix[j].intersectWithRadialCylinder(projection.getMinRho(), s1, s2);
-                    double sEnd = dhelix[j].intersectWithCylinder(true, AProjectionVP.getRhoVPlot(), true, AProjectionVP.getZVPlot());
-
-                    s2 = Math.max(Math.min(s2, sEnd), s1);
-                    // if the whole helix is to be drawn (which are unusual
-                    // helices, shorten it a little to avoid wraparound problems
-                    if (s1 == 0. && s2 == 180.)
-                        s2 = 179.;
-                    if (parameterStore.get("VP", "ShortV").getStatus() && !parameterStore.get("Data", "S3D").getStatus())
-                        s1 = s2 - parameterStore.get("VP", "ShortV").getD() * (s2 - s1);
-                    if (s2 > s1)
-                    {
-                        int signMin = -1;
-                        int signMax = 1;
-                        double h = 0;
-                        double v = 0;
-                        for (int sign = signMin; sign <= signMax; sign += 2)
-                        {
-                            // ugly must change structure at some point
-                            AProjectionVP.sign = sign;
-                            ACoord pointsOnHelix = dhelix[j].drawHelix(window, projection, s1, s2);
-                            hv[0][num] = pointsOnHelix.hv[0][0];
-                            hv[1][num] = pointsOnHelix.hv[1][0];
-                            index[num] = indexIn[j];
-                            h = hv[0][num][hv[0][num].length - 1];
-                            v = hv[1][num][hv[0][num].length - 1];
-                            num++;
-                        }
-                        if (drawApex)
-                        {
-                            int a = 3;
-                            int b = 7;
-                            hv[0][num] = new double[] { h - a, h + a, h, h, h - a, h + a };
-                            hv[1][num] = new double[] { v - b, v - b, v - b, v + b, v + b, v + b };
-                            index[num] = indexIn[j];
-                            num++;
-                        }
-                    }
-                }
-            return new ACoord(hv, index, this, ACoord.POLYLINES);
-        } else { // DRAW_NEW_HELIX is handled by the normal method
-            return getDisplayHelices(window, projection);
-        }
-    }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATrackResidualData.java b/graphics/AtlantisJava/src/atlantis/data/ATrackResidualData.java
deleted file mode 100644
index 6f630c066367..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATrackResidualData.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package atlantis.data;
-
-import java.awt.Color;
-import java.awt.Point;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.AWindow;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.APickingGraphics2D;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjectionTrackResidual;
-
-/**
- * Contains residual data for a single track
- * 
- * @author Qiang Lu
- */
-public class ATrackResidualData
-{
-    public static String PULL_X = "P_X";
-    public static String RESIDUAL_X = "R_X";
-    
-    private ATrackData track;
-    private int trackIndex;
-    private String showType = RESIDUAL_X;
-    private int numPoints;
-    private float[] pullLoc1;
-    private float[] resLoc1;
-    private float[] pullLoc2;
-    private float[] resLoc2;
-    private String[] detType;
-    
-    private double logMagnitudeMin;
-    private int pickedIndex;
-    private byte pickedGroup;    // 1 for loc1/pull1, 2 for loc2/pull2
-    private double minDiff;   
-    
-    private static APar parameterStore = APar.instance();
-    
-    /**
-     * @param theTrack track collection to which this residual belongs to
-     * @param trackIndex index of the associated track
-     * @param points number of residuals points
-     * @param pullLoc1 residuals pull data 1
-     * @param resLoc1 residuals data 1
-     * @param pullLoc2 residuals pull data 2 (only for Pixel)
-     * @param resLoc2 residuals data 2 (only for Pixel)
-     * @param detType detector type of each residual
-     */
-    ATrackResidualData(ATrackData track, int trackIndex, int points, 
-            float[] pullLoc1, float[] resLoc1, float[] pullLoc2, float[] resLoc2, 
-            String[] detType)
-    {
-        this.track = track;
-        this.trackIndex = trackIndex;
-        numPoints = points;
-        this.pullLoc1 = pullLoc1;
-        this.resLoc1 = resLoc1;
-        this.pullLoc2 = pullLoc2;
-        this.resLoc2 = resLoc2;
-        this.detType = detType;
-    }
-
-    /**
-     * @return Returns the number of residual points.
-     */
-    public int getNumPoints()
-    {
-        return numPoints;
-    }
-
-    public float[] getPullLoc1()
-    {
-        return pullLoc1;
-    }
-
-    public float[] getResLoc1()
-    {
-        return resLoc1;
-    }
-
-    public float[] getPullLoc2()
-    {
-        return pullLoc2;
-    }
-
-    public float[] getResLoc2()
-    {
-        return resLoc2;
-    }
-
-    public void setLogMagnitudeMin(double logMagnitudeMin)
-    {
-        this.logMagnitudeMin = logMagnitudeMin;
-    }
-    
-    public double getLogMagnitudeMin()
-    {
-        return logMagnitudeMin;
-    }
-    
-    public void draw(AWindow window, AGraphics ag, AProjectionTrackResidual projection)
-    {
-        Color[] colorMap=AColorMap.getColors();
-        
-        // draw horizontal axis through 0
-        double x1 = 0., y1 = 0., x2 = projection.getXLength(), y2 = 0.0;
-        Point2D.Double from = window.calculateDisplay(x1, y1);
-        Point2D.Double to = window.calculateDisplay(x2, y2);
-        ag.setColor(colorMap[AColorMap.BL]);
-        ag.drawLine(from.x, from.y, to.x, to.y);
-        
-        float[] temp1;
-        AParameter showExtraPar = parameterStore.get("TrackResidual", "ShowExtra");
-        if(projection.getResidualType().equals(RESIDUAL_X))
-        {
-            showType = RESIDUAL_X;
-            temp1 = this.resLoc1;
-            float[] temp2 = this.pullLoc1;  // needed when drawing error bar
-            drawResidual(window, ag, temp1, temp2, colorMap, false);
-            if(showExtraPar.getStatus())
-            {
-                temp1 = this.resLoc2;
-                temp2 = this.pullLoc2;
-                drawResidual(window, ag, temp1, temp2, colorMap, true);
-            }
-        }
-        else
-        {
-            showType = PULL_X;
-            temp1 = this.pullLoc1;
-            drawResidual(window, ag, temp1, null, colorMap, false);
-            if(showExtraPar.getStatus())
-            {
-                temp1 = this.pullLoc2;
-                drawResidual(window, ag, temp1, null, colorMap, true);
-            }
-        }
-                
-        if(ag.getGraphics2D() instanceof APickingGraphics2D
-                && parameterStore.get("Event", "PickingMode").getI() == APickingGraphics2D.PICK_HITS_AND_TRACKS)    // pick residula
-        {
-            APickingGraphics2D.mode = APickingGraphics2D.PICK_RESIDUAL;
-            APickingGraphics2D.setPicked(this);
-        }
-    }
-
-    public void drawResidual(AWindow window, AGraphics ag, float[] res, 
-            float[] pull, Color[] colorMap, boolean drawExtra)
-    {
-        // every residual is drawn as a small square with 2 pixels * 2 pixels
-        // N.B. when showType=PULL_X, res actually represents pull, and pull=null
-        double[] h = new double[4];
-        double[] v = new double[4];
-        int pixelOffset = 1;
-        
-        Point clickedPoint = null;
-        if(ag.getGraphics2D() instanceof APickingGraphics2D
-                && parameterStore.get("Event", "PickingMode").getI() == APickingGraphics2D.PICK_HITS_AND_TRACKS)    // pick residual
-        {
-            clickedPoint = ((APickingGraphics2D)ag.getGraphics2D()).pickedPoint;
-        }
-
-        Color colValid = colorMap[AColorMap.RD];   //for backward compatibility
-        Color colInvalid = colorMap[AColorMap.BK];
-        for(int i=0; i<numPoints; i++)
-        {   
-            double y;
-            if(res[i] == -99.0f)  // unavailable
-            {
-                ag.setColor(colInvalid);
-                y = 0.0;
-            }
-            else
-            {
-                if(detType != null)
-                {
-                    String det = detType[i];
-                    if("unident".equals(det))
-                        ag.setColor(colorMap[AColorMap.GY]);
-                    else
-                    {
-                        AParameter detColor = parameterStore.get("Det", det+"Fill");
-                        if(detColor != null)
-                            ag.setColor(colorMap[detColor.getI()]);
-                        else
-                            ag.setColor(colValid);
-                    }
-                }
-                else    // for old files that don't have <tsosDetType>
-                    ag.setColor(colValid);
-
-                if(parameterStore.get("TrackResidual", "Scale").getI() == 0)    // linear
-                    y = res[i];
-                else    // logarithmic scale
-                {
-                    if(res[i] != 0.0f)
-                        y = Math.log10(Math.abs(res[i])) - logMagnitudeMin;
-                    else
-                        y = res[i];
-                    if(res[i] < 0.0f)
-                        y = -y;
-                }
-            }
-
-            double tempX, tempY;
-            if(!drawExtra)
-                tempX = window.calculateDisplay(i, y).x;
-            else
-                tempX = window.calculateDisplay(i+0.25, y).x;
-            tempY = window.calculateDisplay(i, y).y;
-            
-            // when shape is a square, calculate the corners
-            // x0, y0
-            h[0] = tempX - pixelOffset;
-            v[0] = tempY + pixelOffset;
-            // x1, y1
-            h[1] = tempX - pixelOffset;
-            v[1] = tempY - pixelOffset;
-            // x2, y2
-            h[2] = tempX + pixelOffset;
-            v[2] = tempY - pixelOffset;
-            // x3, y3
-            h[3] = tempX + pixelOffset;
-            v[3] = tempY + pixelOffset;
-           
-            ag.fillPolygon(h, v, h.length);
-
-            // draw error bar only for residual
-            AParameter showErrorBarPar = parameterStore.get("TrackResidual", "ErrorBar");
-            if(showType.equals(RESIDUAL_X) && showErrorBarPar.getStatus() && 
-                    pull != null)
-            {
-                double error = 0.0;
-                if(pull[i] != 0.0f && pull[i] != -99.0f && y != 0.0)
-                    error = res[i] / pull[i];
-                
-                if(error != 0.0)    // draw the error bar by linear scale always
-                {
-                    double[][] vLine = new double[2][2];
-                    vLine[0][0] = tempX;
-                    vLine[0][1] = tempX;
-                    vLine[1][0] = window.calculateDisplay(i, y+error).y;
-                    vLine[1][1] = window.calculateDisplay(i, y-error).y;
-                    ag.drawPolyline(vLine[0], vLine[1], vLine[0].length);   // verticle line
-                    
-                    double xMinus = tempX - 2 * pixelOffset;
-                    double xPlus = tempX + 2 * pixelOffset;
-                    double yTop = vLine[1][0];
-                    double yBottom = vLine[1][1];
-                    ag.drawLine(xMinus, yTop, xPlus, yTop);
-                    ag.drawLine(xMinus, yBottom, xPlus, yBottom);
-                }
-            }
-            
-            // find the picked residual
-            if(ag.getGraphics2D() instanceof APickingGraphics2D
-                    && parameterStore.get("Event", "PickingMode").getI() == APickingGraphics2D.PICK_HITS_AND_TRACKS)    // pick residula
-            {
-                if(i==0 && !drawExtra)
-                {
-                    pickedIndex = i;
-                    pickedGroup = 1;
-                    minDiff = Math.abs(clickedPoint.x - tempX);
-                    APickingGraphics2D.pickedH = tempX;
-                    APickingGraphics2D.pickedV = tempY;
-                }
-                else
-                {
-                    double diff = Math.abs(clickedPoint.x - tempX);
-                    if(minDiff > diff)
-                    {
-                        pickedIndex = i;
-                        if(drawExtra)
-                            pickedGroup = 2;
-                        else
-                            pickedGroup = 1;
-                        minDiff = diff;
-                        APickingGraphics2D.pickedH = tempX;
-                        APickingGraphics2D.pickedV = tempY;
-                    }
-                }
-            }
-        }
-    }
-    
-    public String getHitInfo()
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return track.getNameScreenName()+
-    	" index: "+trackIndex+"\n storegate key: "+
-    	(track.getStoreGateKey() == null ? "n/a" : track.getStoreGateKey());
-    	
-        StringBuffer msg = new StringBuffer(track.getNameScreenName() + " (index: ");
-        msg.append(trackIndex);
-        msg.append(")");
-        msg.append("\n storegate key: ");
-        msg.append(track.getStoreGateKey() == null ? "n/a" : track.getStoreGateKey());
-        if(showType.equals(RESIDUAL_X))
-        {
-            msg.append("\n Residual" + pickedGroup + "(" + "index: " + pickedIndex + ") = ");
-            if (pickedGroup == 1)
-                msg.append((this.resLoc1[pickedIndex]==-99.0f)?"unavailable":this.resLoc1[pickedIndex] + "(mm)");
-            else
-                msg.append((this.resLoc2[pickedIndex]==-99.0f)?"unavailable":this.resLoc2[pickedIndex] + "(mm)");
-        }
-        else
-        {
-            msg.append("\n Pull" + pickedGroup + "(" + "index: " + pickedIndex + ") = ");
-            if (pickedGroup == 1)
-                msg.append((this.pullLoc1[pickedIndex]==-99.0f)?"unavailable":this.pullLoc1[pickedIndex] + "(mm)");
-            else
-                msg.append((this.pullLoc2[pickedIndex]==-99.0f)?"unavailable":this.pullLoc2[pickedIndex] + "(mm)");
-        }
-        
-        return msg.toString();
-
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATrigS3DData.java b/graphics/AtlantisJava/src/atlantis/data/ATrigS3DData.java
deleted file mode 100644
index 2a20340f4ea3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATrigS3DData.java
+++ /dev/null
@@ -1,252 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.*;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AMath;
-
-
-/**
- *
- * Trigger SpacePoints
- * 
- * barcodes + numBarcodes - associations with Truth (STr)
- * clusters - associations with SiClusters and over it with reconstructed
- *   tracks (Track)
- *   
- * cleanup notes:
- * methods makeFilterDrawList(), getIntegerEta(),  getIntegerPhi() were removed
- * as these were only used by AFilter in S3D (this class was obviously the
- * origin for the others) but AFilter doesn't work with TrigS3D
- * other also unused methods are getLayer() and getSub() - what are these
- * used for?
- *
- */
-public class ATrigS3DData extends A3DPointData
-{
-    private int[][] clusters = null;
-
-    // data from the event file
-    protected int[] layer = null;
-
-    private boolean[] pixel = null;
-    public static final int PIXEL = -1;
-
-
-
-    public String getParameterGroup()
-    {
-        return "TrigS3D";
-    }
-
-
-
-    public String getName()
-    {
-        return "TrigS3D";
-    }
-
-
-
-    public String getNameScreenName()
-    {
-        return "TrigSiSpacePoint";
-    }
-
-
-
-    public String getHitInfo(int index)
-    {
-    	int simpleOutput = AGlobals.instance().getSimpleOutput();
-    	if(simpleOutput>0) return getNameScreenName()+" index: " + index+"\n"+
-        AMath.RHO+" = "+String.format("%.3f",rho[index])+"\n "+
-        AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phi[index]))+AMath.DEGREES;
-        
-        String clId = " (" + clusters[index][0] + ", " +
-                             clusters[index][1] + ")";
-        String type = pixel[index]  ? " (Pixel)" : " (SCT)";
-
-        String r = "";
-        r += getNameScreenName() + " (id: " + id[index] + " index: " + index + ")" +
-            clId + type + "\n " +
-            "x = " + String.format("%.3f",x[index]) + " cm\n " +
-            "y = " + String.format("%.3f",y[index]) + " cm\n " +
-            "z = " + String.format("%.3f",z[index]) + " cm\n " +
-            AMath.RHO + " = " + String.format("%.3f",rho[index]) + " cm\n " +
-            AMath.PHI + " = " +
-            String.format("%.3f",Math.toDegrees(phi[index])) +
-            AMath.DEGREES +  "  (" + String.format("%.3f",phi[index]) + " rad)\n " +
-            " layer = " + layer[index];
-        r += super.getHitInfo(index); // finds barcode information
-
-        return r;
-
-    } // getHitInfo() -------------------------------------------------------
-
-
-
-    ATrigS3DData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        layer = p.getUnknownIntArray("layer");
-
-        if(p.get("clusters") != null)
-        {
-            // can only distinguish between SCT and Pixel hits if clusters
-            // subtag is available
-            pixel = new boolean[numData];
-            // save IDs from event file to be availeble with pick info
-            clusters = new int[numData][];
-
-            int[][] assocClusters = new int[numData][];
-            int[] temp = p.getIntArray("clusters");
-            for(int i = 0; i < numData; ++i)
-            {
-                // save all clusters IDs
-                clusters[i] = new int[] { temp[2 * i], temp[2 * i + 1] };
-
-                // check if the second number, PIXEL (-1) designates pixel hit
-                if(temp[2 * i + 1] != PIXEL)
-                {
-                    // this is SCT spacepoint - has got two clusters
-                    assocClusters[i] = new int[] { temp[2 * i], temp[2 * i + 1] };
-                }
-                else
-                {
-                    // this is a pixel spacepoint (second cluster number is -1)
-                    pixel[i] = true;
-
-                    // to ignore associtiation between pixel clusters and spacepoints:
-                    // assocClusters[i] = null;
-
-                    // taking pixel cluster into account (pixel spacepoint has got
-                    // only one cluster) (where as SCT spacepoint has got two clusters)
-                    assocClusters[i] = new int[] { temp[2 * i] };
-                }
-            }
-            AAssociation assoc = new AAssociation(getName(), "SiCluster",
-                                                  assocClusters,event);
-            event.getAssociationManager().add(assoc);
-        }
-
-    } // ATrigS3DData() -----------------------------------------------------
-
-
-
-    protected void finalizeConstruction()
-    {
-        super.finalizeConstruction();
-        super.calculateAssociationViaClusters();
-
-    } // finalizeConstruction() ---------------------------------------------
-
-
-
-    protected int internalColor()
-    {
-        int numColorTypes = super.internalColor();
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-        if(colorFunction == numColorTypes + 1)
-        {
-            colorBy(layer);
-        }
-
-        return numColorTypes + 1;
-
-    } // internalColor() ----------------------------------------------------
-
-
-    protected void applyCuts()
-    {
-        cutIndex();
-        cutSubdetector();
-        cut("CutsInDet", "Layer", "Layer", layer);
-        cutPhi(phi);
-        cutEta(rho, z);
-        cutSimulatedTracks();
-        cutReconstructedTracks();
-
-    } // applyCuts() --------------------------------------------------------
-
-
-    private void cutSubdetector()
-    {
-        AParameter subPar = parameterStore.get("CutsInDet", "SCT");
-        if(subPar.getI() != -1)
-        {
-            cutArray(sub, subPar.getI(), "Barrel/Endcap");
-        }
-
-    } // cutSubdetector() ---------------------------------------------------
-
-
-
-    public int[] getLayer(int[] layer)
-    {
-        for(int i = 0; i < numDraw; i++)
-        {
-            layer[i] = this.layer[listdl[i]];
-        }
-        return layer;
-
-    } // getLayer() ---------------------------------------------------------
-
-
-
-    public int getSub(int id)
-    {
-        if(id > -1)
-        {
-            return(id >> 25) & 0x3;
-        }
-        else
-        {
-            return(id >> 29) & 0x3;
-        }
-
-    } // getSub() -----------------------------------------------------------
-
-
-
-    protected ACoord getFRUser()
-    {
-        if(!parameterStore.get("SiCluster", "Stereo").getStatus())return super.getFRUser();
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = rho[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FR");
-
-    } // getFRUser() --------------------------------------------------------
-
-
-
-    protected ACoord getFZUser()
-    {
-        if(!parameterStore.get("SiCluster", "Stereo").getStatus())return super.getFZUser();
-        makeDrawList();
-        double[] h = new double[numDraw];
-        double[] v = new double[numDraw];
-        int[] index = new int[numDraw];
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            h[i] = z[list];
-            v[i] = Math.toDegrees(AParameterUtilities.getPhiStereo(rho[list], phi[list], z[list]));
-            index[i] = list;
-        }
-        return new ACoord(h, v, index, this).includePhiWrapAround("FZ");
-
-    } // getFZUser() --------------------------------------------------------
-
-} // class ATrigS3DData =====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/data/ATriggerInfoData.java b/graphics/AtlantisJava/src/atlantis/data/ATriggerInfoData.java
deleted file mode 100644
index 4e9b000c650c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/ATriggerInfoData.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package atlantis.data;
-
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.utils.AHashMap;
-
-public class ATriggerInfoData extends AData
-{
-    private float[] energyEtMiss;
-    //private float[] energyEx;
-    //private float[] energyEy;
-    private float[] energySumEt;
-    private String[] trigInfoEF;
-    private String[] trigInfoExtL1ID;
-    private String[] trigInfoL1;
-    private String[] trigInfoL2;
-    private String[] trigInfoLvl1Type;
-    private String[] trigInfoStatus;
-    private String[] trigInfoStreamTag;
-        
-    ATriggerInfoData(AHashMap p, AEvent e)
-    {
-        super(p,e);
-        energyEtMiss = p.getUnknownFloatArray("energyEtMiss");
-        //energyEx = p.getUnknownFloatArray("energyEx");
-        //energyEy = p.getUnknownFloatArray("energyEy");	
-        energySumEt = p.getUnknownFloatArray("energySumEt");
-        trigInfoEF = p.getStringArray("trigInfoEF");
-        trigInfoExtL1ID = p.getStringArray("trigInfoExtL1ID");
-        trigInfoL1 = p.getStringArray("trigInfoL1");
-        trigInfoL2 = p.getStringArray("trigInfoL2");
-        trigInfoLvl1Type = p.getStringArray("trigInfoLvl1Type");
-        trigInfoStatus = p.getStringArray("trigInfoStatus");
-        trigInfoStreamTag = p.getStringArray("trigInfoStreamTag");
-    }
-
-    protected void applyCuts()
-    {}
-    
-    public String getHitInfo(int index)
-    {
-        return "TriggerInfo";
-    }
-
-    protected int internalColor()
-    {
-        int colorFunction = parameterStore.get(PARAMETER_GROUP, "ColorFunction").getI();
-
-        if(colorFunction == 0)
-            colorByConstant();
-
-        return 3;
-    }
-
-    public String getParameterGroup()
-    {
-        return "TriggerInfo";
-    }
-
-    public String getNameScreenName()
-    {
-        return "TriggerInfo";
-    }
-    
-    /**
-     * For backward compatibility if this is null or -1
-     * also check the value returned from ALVL1ResultData
-     */
-    public float getEnergyEtMiss(int index)
-    {
-        return energyEtMiss[index];
-    }
-    
-    /*public float getEnergyEx(int index)
-    {
-        return energyEx[index];
-    }
-    public float getEnergyEy(int index)
-    {
-        return energyEy[index];
-    }*/
-    
-    /**
-     * For backward compatibility if this is null or -1
-     * also check the value returned from ALVL1ResultData
-     */
-    public float getEnergySumEt(int index)
-    {
-        return energySumEt[index];
-    }
-    
-    public String getTrigInfoEF(int index)
-    {
-        return trigInfoEF[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoEFSplit(int index)
-    {
-        if(trigInfoEF!=null)
-            return splitItems(trigInfoEF[index]);
-        else
-            return null;
-    }
-    
-    /**
-     * Returns the hex values of the
-     * individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoEFSplitHex(int index)
-    {
-        return hexValues(splitItems(trigInfoEF[index]));
-    }
-    
-    public String getTrigInfoExtL1ID(int index)
-    {
-        return trigInfoExtL1ID[index];
-    }
-
-    public String getTrigInfoL1(int index)
-    {
-        return trigInfoL1[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoL1Split(int index)
-    {
-        if(trigInfoL1!=null)
-            return splitItems(trigInfoL1[index]);
-        else
-            return null;
-    }
-    
-    /**
-     * Returns the hex values of the
-     * individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoL1SplitHex(int index)
-    {
-        return hexValues(splitItems(trigInfoL1[index]));
-    }
-
-    public String getTrigInfoL2(int index)
-    {
-        return trigInfoL2[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoL2Split(int index)
-    {
-        if(trigInfoL2!=null)
-            return splitItems(trigInfoL2[index]);
-        else
-            return null;
-    }
-    
-    /**
-     * Returns the hex values of the
-     * individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoL2SplitHex(int index)
-    {
-        return hexValues(splitItems(trigInfoL2[index]));
-    }
-    
-    public String getTrigInfoLvl1Type(int index)
-    {
-        return trigInfoLvl1Type[index];
-    }
-    
-    public String getTrigInfoStatus(int index)
-    {
-        return trigInfoStatus[index];
-    }
-    
-
-    public String getTrigInfoStreamTag(int index)
-    {
-        return trigInfoStreamTag[index];
-    }
-    
-    /**
-     * Returns the individual parts of the list seperated by -
-     */
-    public String[] getTrigInfoStreamTagSplit(int index)
-    {
-        if(trigInfoStreamTag!=null)
-            return splitItems(trigInfoStreamTag[index]);
-        else
-            return null;
-    }
-
-            
-    /**
-     * Returns the hex values of each element in the string
-     * string[] items represents a long[]
-     */
-    private String[] hexValues(String[] items)
-    {
-        for(int i=0; i<items.length; i++)
-        {
-            long longvalue= Long.valueOf(items[i]).longValue();
-            items[i] = "0x"+Long.toString(longvalue, 16).toUpperCase();
-        }
-        return items;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/data/AVertex.java b/graphics/AtlantisJava/src/atlantis/data/AVertex.java
deleted file mode 100755
index ed4ea9643d78..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AVertex.java
+++ /dev/null
@@ -1,328 +0,0 @@
-package atlantis.data;
-
-import Jama.Matrix;
-
-import java.util.HashMap;
-import java.util.Map;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjectionXZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.utils.AMath;
-import atlantis.utils.AAtlantisException;
-
-/**
- *
- *    Reconstructed vertex instance. Either calculated in
- *    Atlantis (atlantis.utils.AVertexFit class) or read in from the event data as
- *    RVx datatype. RVx class keeps track of all the reconstructed vertices
- *    and contains instances of this class Avertex.
- *    (2005-08-08 refactoring and clean-ups)
- *    (2006-01-10 covMatrix, errMatrix variables were messed up (covMatrix
- *    numbers were huge - was actually the inverse - the weight matrix. AVertexFit
- *    code didn't give any ideas, very unclear code  - covFittedMatrix there
- *    was used to initialize errMatrix here ...))
- *
- *
- *    variables names renaming:
- *    covMatrix -> weightMatrix
- *    errMatrix -> covErrorMatrix
- *
- * @author Gary Taylor
- */
-public class AVertex
-{
-    // size of the arrays with coordinates of the RVx ellipse and matrices
-    private static final int SIZE = 3;
-
-    // basic RVx data
-    private double[] position = null; // x, y, z centre of the ellipse
-    private double chi2 = 1.e+10;
-    private Matrix covErrMatrix = null; // covariance error matrix
-    private Matrix weightMatrix = null; // inverse matrix of covErrMatrix
-    private double phi; // phi of the ellipse
-    private double rho; // rho of the ellipse
-    
-    private static APar parameterStore = APar.instance();
-
-    public AVertex(double[] p)
-    {
-        position = new double[SIZE];
-
-        if (p.length != SIZE)
-        {
-            throw new IllegalArgumentException("p.length=" + p.length);
-        }
-        for (int i = 0; i < SIZE; ++i)
-        {
-            position[i] = p[i];
-        }
-    } // AVertex() ----------------------------------------------------------
-
-    /**
-     * @param p double[] - x, y, z positions of the centre of the ellipse
-     * @param c double[][] - input for covErrMatrix
-     * @param chiSquared double
-     */
-     public AVertex(double[] p, double[][] c, double chiSquared)
-     {      
-        testInputArrays(p, c);
-
-        position = new double[SIZE];
-        double[][] covErr = new double[SIZE][SIZE];
-
-        for (int i = 0; i < SIZE; ++i)
-        {
-            position[i] = p[i];
-        }
-        phi = Math.atan2(p[1], p[0]);
-        if (phi < 0.)
-            phi += AMath.TWO_PI;
-        rho = Math.sqrt(p[0] * p[0] + p[1] * p[1]);
-        for (int i = 0; i < SIZE; ++i)
-        {
-            for (int j = 0; j < SIZE; ++j)
-            {
-                covErr[i][j] = c[i][j];
-            }
-        }
-
-        covErrMatrix = new Matrix(covErr);
-        weightMatrix = covErrMatrix.inverse();
-        this.chi2 = chiSquared;
-    } // AVertex() ----------------------------------------------------------
-
-    /**
-     *
-     * @param chiSquared double
-     * @param p double[] - x, y, z positions of the centre of the ellipse
-     * @param c double[][] - input for covErrMatrix
-     */
-    public AVertex(double chiSquared, double[] p, double[][] c) throws AAtlantisException
-    {
-        testInputArrays(p, c);
-
-        chi2 = chiSquared;
-
-        position = new double[SIZE];
-
-        for (int i = 0; i < SIZE; ++i)
-        {
-            position[i] = p[i];
-        }
-
-        phi = Math.atan2(p[1], p[0]);
-        if (phi < 0.)
-            phi += AMath.TWO_PI;
-        rho = Math.sqrt(p[0] * p[0] + p[1] * p[1]);
-
-        double[][] covErr = new double[SIZE][SIZE];
-        for (int x = 0; x < SIZE; x++)
-        {
-            covErr[x] = (double[]) c[x].clone();
-        }
-
-        try
-        {
-            covErrMatrix = new Matrix(covErr);
-            weightMatrix = covErrMatrix.inverse();
-        }
-        catch (Exception ex)
-        {
-            String msg = "Error when creating covariance and/or weight\n" + "matrix in AVertex class.\nReason: " + ex.getMessage();
-            throw new AAtlantisException(msg);
-        }
-    } // AVertex() ----------------------------------------------------------
-
-    private void testInputArrays(double[] p, double[][] c) throws IllegalArgumentException
-    {
-        if (p.length != SIZE)
-        {
-            throw new IllegalArgumentException("p.length = " + p.length);
-        }
-
-        if (c.length != SIZE)
-        {
-            throw new IllegalArgumentException("c.length = " + c.length);
-        }
-
-        for (int i = 0; i < SIZE; ++i)
-        {
-            if (c[i].length != SIZE)
-            {
-                throw new IllegalArgumentException("c[" + i + "].length = " + c[i].length);
-            }
-        }
-    } // testInputArrays() --------------------------------------------------
-
-    public double[] getPosition()
-    {
-        return (double[]) position.clone();
-    } // getPosition() ------------------------------------------------------
-
-    public Matrix getCovErrMatrix()
-    {
-        return covErrMatrix;
-    } // getCovErrMatrix() --------------------------------------------------
-
-    public double getRho()
-    {
-        return rho;
-    }
-
-    public double getPhi()
-    {
-        return phi;
-    }
-
-    public String toString()
-    {
-        StringBuffer msg = new StringBuffer(" x = ");
-        msg.append(String.format("%.5f",position[0]));
-        msg.append(" ");
-        msg.append(AMath.PLUSMINUS);
-        msg.append(" ");
-        msg.append(String.format("%.3f",Math.sqrt(covErrMatrix.get(0, 0))));
-        msg.append(" cm\n y = ");
-        msg.append(String.format("%.5f",position[1]));
-        msg.append(" ");
-        msg.append(AMath.PLUSMINUS);
-        msg.append(" ");
-        msg.append(String.format("%.3f",Math.sqrt(covErrMatrix.get(1, 1))));
-        msg.append(" cm\n z = ");
-        msg.append(String.format("%.5f",position[2]));
-        msg.append(" ");
-        msg.append(AMath.PLUSMINUS);
-        msg.append(" ");
-        msg.append(String.format("%.3f",Math.sqrt(covErrMatrix.get(2, 2))));
-        msg.append(" cm\n ");
-        msg.append(AMath.ETA);
-        msg.append(" = ");
-        msg.append(String.format("%.4f",AParameterUtilities.eta(position[2], rho)));
-        msg.append("\n ");
-        msg.append(AMath.PHI);
-        msg.append(" = ");
-        msg.append(String.format("%.1f",Math.toDegrees(phi)));
-        msg.append(AMath.DEGREES);
-        msg.append("\n chi2 = ");
-        msg.append(String.format("%.1f",chi2));
-
-        return msg.toString();
-    } // toString() ---------------------------------------------------------
-
-    // Ask Alan Litke to explain this calculation
-    private double[][] getEllipse(Matrix rM, int[] axisMapping)
-    {
-        Matrix parPrime = rM.times(new Matrix(position, position.length));
-
-        double a1 = weightMatrix.get(axisMapping[0], axisMapping[0]);
-        double a2 = weightMatrix.get(axisMapping[1], axisMapping[1]);
-        double a3 = weightMatrix.get(axisMapping[2], axisMapping[2]);
-        double a4 = 2. * weightMatrix.get(axisMapping[0], axisMapping[1]);
-        double a5 = 2. * weightMatrix.get(axisMapping[0], axisMapping[2]);
-        double a6 = 2. * weightMatrix.get(axisMapping[1], axisMapping[2]);
-        double b1 = a1 - a5 * a5 / (4. * a3);
-        double b2 = a2 - a6 * a6 / (4. * a3);
-        double b3 = a4 - 2 * a5 * a6 / (4. * a3);
-        double[][] hv = new double[2][360];
-        double sigma = parameterStore.get("RVx", "NumSigma").getD();
-        for (int i = 0; i < 360; ++i)
-        {
-            double thetat = Math.toRadians(i);
-            double tt = Math.tan(thetat);
-            double x = Math.sqrt(sigma * sigma / (b1 + b2 * tt * tt + b3 * tt));
-            if (i > 90 && i <= 270)
-                x *= -1.;
-            hv[0][i] = x + parPrime.get(axisMapping[0], 0);
-            hv[1][i] = x * tt + parPrime.get(axisMapping[1], 0);
-        }
-        return hv;
-    } // getEllipse() -------------------------------------------------------
-
-    public double[][] getYXEllipse()
-    {
-        Matrix rM = new Matrix(AProjectionYX.getRotationMatrix());
-        int[] axisMapping = AProjectionYX.getAxisMapping();
-
-        return getEllipse(rM, axisMapping);
-    } // getYXEllipse() -----------------------------------------------------
-
-    public double[][] getYZEllipse()
-    {
-        Matrix rM = new Matrix(AProjectionYZ.getRotationMatrix());
-        int[] axisMapping = AProjectionYZ.getAxisMapping();
-
-        return getEllipse(rM, axisMapping);
-    } // getYZEllipse() -----------------------------------------------------
-
-    public double[][] getXZEllipse()
-    {
-        Matrix rM = new Matrix(AProjectionXZ.getRotationMatrix());
-        int[] axisMapping = AProjectionXZ.getAxisMapping();
-
-        return getEllipse(rM, axisMapping);
-    } // getXZEllipse() -----------------------------------------------------
-
-    public double[][] getRZEllipse()
-    {
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        double phiDiff = Math.abs(phi-phiMid);
-        int rSign; if (phiDiff > Math.PI/2. && phiDiff <= 3*Math.PI/2.) rSign = -1; else rSign = 1;
-        
-        double[][] hv = new double[2][360];
-        double sigma = parameterStore.get("RVx", "NumSigma").getD();
-        for (int i = 0; i < 360; ++i)
-        {
-            double thetat = Math.toRadians(i);
-            double ey = Math.sqrt(Math.sqrt(covErrMatrix.get(0,0)*covErrMatrix.get(0,0)+covErrMatrix.get(1,1)*covErrMatrix.get(1,1)));
-            double ex = Math.sqrt(covErrMatrix.get(2,2));
-            hv[1][i] = rSign * Math.sqrt(position[0]*position[0]+position[1]*position[1]) + sigma*ey*Math.sin(thetat);
-            hv[0][i] = position[2] + sigma*ex*Math.cos(thetat);
-            //System.out.println(i+" "+thetat+" "+hv[0][i]+" "+hv[1][i]);
-        }
-        return hv;
-    } // getXZEllipse() -----------------------------------------------------
-    
-    // Vertex type - enum same as in Athena
-   
-    enum Type {
-    	DUMMY (0, "Dummy. Track particle was not used in vertex fit."),
-    	PRIMARY (1, "Primary"),
-    	SECONDARY (2, "Secondary"),
-    	PILEUP (3, "Pile-up"),
-    	CONVERSION (4, "Conversion"),
-    	V0 (5, "V0 decay"),
-    	KINK (6, "Kink"),
-    	TEMPV0LAMBDA (7, "Temporary Addition for V0 Lambda"),
-    	TEMPV0LAMBDABAR (8, "Temporary Addition for V0 LambdaBar"),
-    	TEMPKSHORT (9, "Temporary Addition for KShort"),
-    	DEFAULT (99, "Not specified");
-
-    	public final int id;
-    	public final String description;
-    	
-    	private static Map<Integer,Type> typeMap = new HashMap<Integer,Type>();
-    	static {
-    		for (Type type : Type.values()) {
-    			typeMap.put(type.id, type);
-    		}
-    	}
-    
-    	/**
-    	 * Get vertex type corresponding to given integer type identifier.
-    	 * @param id type identifier
-    	 * @return vertex type
-    	 */
-    	public static Type typeFromId(int id) {
-    		return typeMap.get(id);
-    	}
-    	
-    	private Type (int id, String description) {
-    		this.id = id;
-    		this.description = description;
-    	}
-    }
-    
-}   
-   
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/data/AVertexFit.java b/graphics/AtlantisJava/src/atlantis/data/AVertexFit.java
deleted file mode 100755
index 09fba478e393..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/AVertexFit.java
+++ /dev/null
@@ -1,289 +0,0 @@
-package atlantis.data;
-
-import atlantis.parameters.APar;
-import atlantis.utils.ALogger;
-
-import Jama.*;
-
-
-/**
- * This class provide a java implementation of the ALEPH vertex fitting
- * routine YTOPOL. At the moment the only functionality is the fitting
- * of ATLAS helices to a common vertex. A reasonable starting vertex for the
- * fit must be given. For B decays the primary vertex should be good enough.
- * Future improvements in functionality could include estimation of a
- * starting vertex and including in the fitting also already calculated
- * vertices and charged and neutral particles
- */
-
-public class AVertexFit {
-  private static ALogger logger = ALogger.getLogger(AVertexFit.class);
-  private static APar parameterStore = APar.instance();
-  
-  private static final int MXITR=8;
-  private static final double CHISC=1.E-2;
-  private static final double CHISR=0.01;
-  private static final double PARCR=0.01;
-  private static final boolean DEBUG=false;
-
-  private AVertexFit() {}
-
-  public static AVertex fitVertex(AVertex estimatedVertex, AHelix[] helix) {
-    Matrix[] measuredHelix=new Matrix[helix.length];
-    Matrix[] covHelix=new Matrix[helix.length];
-    Matrix[] errHelix=new Matrix[helix.length];
-
-    for(int k=0; k<helix.length; ++k) {
-      double[] par=helix[k].getPar();
-      double[][] cov=helix[k].getCovariance();
-      double signD0=-1.;
-      double signPt=1.;
-
-      par[0]*=signD0;
-      par[4]*=signPt;
-
-      for(int i=0; i<5; ++i) {
-        cov[0][i]*=signD0;
-        cov[i][0]*=signD0;
-        cov[4][i]*=signPt;
-        cov[i][4]*=signPt;
-      }
-
-      measuredHelix[k]=new Matrix(par, par.length);
-      covHelix[k]=new Matrix(cov);
-      errHelix[k]=covHelix[k].inverse();
-
-      // AOutput.logln( "measuredHelix "+k+" "+measuredHelix[k]);
-      // AOutput.logln( measuredHelix[k].toString());
-      // AOutput.logln( covHelix[k].toString());
-
-    }
-
-    int numFreeParam=3+3*helix.length;
-    Matrix fitted=new Matrix(numFreeParam, 1);
-    double[] estVertex=estimatedVertex.getPosition();
-    int ipar;
-
-    for(ipar=0; ipar<3; ++ipar)
-      fitted.set(ipar, 0, estVertex[ipar]);
-    ipar=3;
-    for(int k=0; k<helix.length; ++k) {
-      fitted.set(ipar++, 0, parameterStore.get("Event", "Curvature").getD()/measuredHelix[k].get(4, 0)-measuredHelix[k].get(0, 0));
-
-      fitted.set(ipar++, 0, measuredHelix[k].get(3, 0));
-      fitted.set(ipar++, 0, measuredHelix[k].get(2, 0));
-    }
-
-    logger.debug("fittedHelix "+0+" "+new Transformation(fitted, 0).helixFromFitted());
-    logger.debug("fittedHelix "+1+" "+new Transformation(fitted, 1).helixFromFitted());
-
-    // AOutput.logln( fitted.toString());
-
-    Matrix g=new Matrix(numFreeParam, 1);
-    Matrix gg=new Matrix(numFreeParam, numFreeParam);
-    int iteration=0;
-    double chiso=0.;
-    double chisq=0.;
-    boolean converged;
-
-    FITTINGLOOP:
-    do {
-      g.timesEquals(0.);
-      gg.timesEquals(0.);
-      for(int k=0; k<helix.length; ++k) {
-        Transformation t=new Transformation(fitted, k);
-
-        Matrix fittedHelix=t.helixFromFitted();
-
-        logger.debug("fittedHelix "+k+" "+fittedHelix);
-        Matrix dMdF=t.getHelixdMdF();
-        Matrix delFM=fittedHelix.minus(measuredHelix[k]);
-        // helices are independent of each other so can
-        // use temporary matrices to avoid large matrix multiplications
-        Matrix gtemp=(errHelix[k].times(dMdF)).transpose().times(delFM);
-        Matrix ggtemp=dMdF.transpose().times(errHelix[k].times(dMdF));
-
-        // now put these into the large matrices
-        for(int i=0; i<3; ++i) {
-          int ix=3+3*k;
-
-          g.set(i, 0, g.get(i, 0)+gtemp.get(i, 0));
-          g.set(ix+i, 0, g.get(ix+i, 0)+gtemp.get(3+i, 0));
-          for(int j=0; j<3; ++j) {
-            gg.set(i, j, gg.get(i, j)+ggtemp.get(i, j));
-            gg.set(ix+i, j, gg.get(ix+i, j)+ggtemp.get(3+i, j));
-            gg.set(i, ix+j, gg.get(i, ix+j)+ggtemp.get(i, 3+j));
-            gg.set(ix+i, ix+j, gg.get(ix+i, ix+j)+ggtemp.get(3+i, 3+j));
-          }
-        }
-        if(iteration==0) {
-          double chih=delFM.transpose().times(errHelix[k].times(delFM)).get(0, 0);
-
-          chiso+=Math.min(chih, 1.0e+10);
-          // AOutput.logln( "initial chi2"+chih);
-        }
-      }
-
-      // AOutput.logln( gg.toString());
-
-      gg=gg.inverse();
-      Matrix delFitted=gg.times(g);
-
-      logger.debug("DELFITTED "+iteration+" "+delFitted.toString());
-
-      fitted.minusEquals(delFitted);
-
-      int jter=0;
-      int kter=0;
-
-      while(true) {
-        if(kter>10) break FITTINGLOOP;
-        if(jter>100) break FITTINGLOOP;
-
-        double chish=0.;
-
-        chisq=0.;
-        for(int k=0; k<helix.length; ++k) {
-          Transformation t=new Transformation(fitted, k);
-          Matrix fittedHelix=t.helixFromFitted();
-          Matrix delFM=fittedHelix.minus(measuredHelix[k]);
-          double chih=delFM.transpose().times(errHelix[k].times(delFM)).get(0, 0);
-
-          chish+=Math.min(chih, 1.0e+10);
-        }
-        chisq+=chish;
-
-        double chis1=0.;
-
-        if((chisq>chiso+0.0001&&jter==0)||chisq>1.1*chiso) {
-          delFitted.timesEquals(0.5);
-          fitted.plusEquals(delFitted);
-          jter++;
-          chis1=chisq;
-          continue;
-        } else {
-          if(jter>0) {
-            // estimate best parameters
-            double chtrm=chis1+chiso-2.*chisq;
-            double fx;
-
-            if(chtrm>0.) {
-              // concave chisq dependance
-              fx=(chis1-chiso)/(2.*(chis1+chiso-2.*chisq));
-              fx=Math.max(fx, -2.);
-              fx=Math.min(fx, 2.);
-            } else {
-              // convex chisq dependance
-              fx=-2.;
-            }
-            delFitted.timesEquals(fx);
-
-            jter=0;
-            kter++;
-            continue;
-          }
-        }
-        break;
-      }
-
-      double dchi2=chiso-chisq;
-
-      chiso=chisq;
-      converged=true;
-      // check for change in chisq
-      if(dchi2>CHISC&&dchi2>CHISR*chisq) converged=false;
-      // check for change in parameters
-      for(int i=0; i<numFreeParam; i++)
-        if(delFitted.get(i, 0)*delFitted.get(i, 0)>PARCR*gg.get(i, i))
-          converged=false;
-    } while((!converged)&&iteration++<MXITR);
-
-    double[] fittedVertex=new double[3];
-    double[][] fittedVertexCov=new double[3][];
-
-    for(int i=0; i<3; i++) {
-      fittedVertex[i]=fitted.get(i, 0);
-      fittedVertexCov[i]=new double[3];
-      for(int j=0; j<3; j++)
-        fittedVertexCov[i][j]=gg.get(i, j);
-    }
-
-    return new AVertex(fittedVertex, fittedVertexCov, chisq);
-  }
-
-  private static class Transformation {
-	  double rho, tau, phi0, d0, z0, sinPhi, cosPhi, sinDPhi, cosDPhi, eta, s, r, dPhi;
-
-	  Transformation(Matrix fitted, int iHelix) {
-		  int index=3+3*iHelix;
-
-		  eta=fitted.get(index++, 0);
-		  tau=fitted.get(index++, 0);
-		  phi0=fitted.get(index++, 0);
-		  double sinPhi0=Math.sin(phi0);
-		  double cosPhi0=Math.cos(phi0);
-		  double xC=-eta*sinPhi0;
-		  double yC=eta*cosPhi0;
-
-		  // if(DEBUG) AOutput.logln(" Afit xCyC"+iHelix+" "+xC+" "+yC+" "+eta);
-
-		  double xVxC=fitted.get(0, 0)-xC;
-		  double yVyC=fitted.get(1, 0)-yC;
-
-		  r=0.;
-		  if(eta>0.)
-			  r=Math.sqrt(xVxC*xVxC+yVyC*yVyC);
-		  else
-			  r=-Math.sqrt(xVxC*xVxC+yVyC*yVyC);
-
-		  d0=r-eta;
-		  sinPhi=xVxC/r;
-		  cosPhi=-yVyC/r;
-		  double phi=Math.atan2(sinPhi, cosPhi);
-
-		  if(phi-phi0<-Math.PI) phi+=2.*Math.PI;
-		  dPhi=phi-phi0;
-		  s=dPhi*r;
-		  z0=fitted.get(2, 0)-s*tau;
-		  sinDPhi=Math.sin(dPhi);
-		  cosDPhi=Math.cos(dPhi);
-		  rho=1./r;
-	  }
-
-	  Matrix getHelixdMdF() {
-		  Matrix dMdF=new Matrix(5, 6);
-
-		  double curvature = parameterStore.get("Event", "Curvature").getD();
-		  dMdF.set(4, 0, -curvature*rho*rho*sinPhi);
-		  dMdF.set(4, 1, curvature*rho*rho*cosPhi);
-		  dMdF.set(4, 3, -curvature*rho*rho*cosDPhi);
-		  dMdF.set(4, 5, -curvature*rho*rho*eta*sinDPhi);
-		  dMdF.set(3, 4, 1.);
-		  dMdF.set(2, 5, 1.);
-		  dMdF.set(0, 0, sinPhi);
-		  dMdF.set(0, 1, -cosPhi);
-		  dMdF.set(0, 3, cosDPhi-1.);
-		  dMdF.set(0, 5, eta*sinDPhi);
-		  dMdF.set(1, 0, -tau*(sinPhi*dPhi+cosPhi));
-		  dMdF.set(1, 1, tau*(cosPhi*dPhi-sinPhi));
-		  dMdF.set(1, 2, 1.);
-		  dMdF.set(1, 3, -tau*(dPhi*cosDPhi-sinDPhi));
-		  dMdF.set(1, 4, -s);
-		  dMdF.set(1, 5, -tau*(eta*(dPhi*sinDPhi+cosDPhi)-r));
-		  return dMdF;
-	  }
-
-	  Matrix helixFromFitted() {
-		  Matrix helix=new Matrix(5, 1);
-
-		  helix.set(4, 0, rho*parameterStore.get("Event", "Curvature").getD());
-		  helix.set(3, 0, tau);
-		  helix.set(2, 0, phi0);
-		  helix.set(0, 0, d0);
-		  helix.set(1, 0, z0);
-		  return helix;
-	  }
-
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/data/package.html b/graphics/AtlantisJava/src/atlantis/data/package.html
deleted file mode 100644
index 15056059d098..000000000000
--- a/graphics/AtlantisJava/src/atlantis/data/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>All classes handling particular datatypes are part of this package.
-They all implement AData from the atlantis.event package.</p>
-</body>
-</html>
-
diff --git a/graphics/AtlantisJava/src/atlantis/event/AAssociation.java b/graphics/AtlantisJava/src/atlantis/event/AAssociation.java
deleted file mode 100755
index b2338def707a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AAssociation.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package atlantis.event;
-
-import atlantis.utils.ALogger;
-
-/**
- * Representation of the association between two data types. The association is 
- * stored using the string name+storeGateKey for both data types.
- * 
- * The actual association is a an array of arrays of integers. The first index 
- * of this array is the index of an element in the first datatype. The array 
- * then contains the Athena IDs of the element in the second datatype that are 
- * associated to it. This is necessary because the second datatype might not 
- * have been read from the XML file yet, so the indices are unknown.
- * 
- * @todo Modify this class to perform a translation of Athena ID to Atlantis ID 
- * for the identifiers of "b". This can be done together with purgeIDNotInData()
- * and avoids the need for continuously looking up Athena IDs when drawing.
- */
-public class AAssociation {
-
-    /** Logger */
-    private static final ALogger logger = ALogger.getLogger(AAssociation.class);
-    
-    /** Event this association belongs to */
-    private final AEvent event;
-    
-    /** Identifying the datatype this association if from */
-    private final String a;
-    
-    /** Identifying the datatype this association is to */
-    private final String b;
-    
-    /** 
-     * Association, the first index is the index of an element of "a", the 
-     * second index then loops over the Athena IDs in "b" to which the element 
-     * of "a" is associated.
-     */   
-    private final int[][] assoc;
-
-     /**
-     * Constructor, taking as input a flat array (btoa) and an array that 
-     * specifies how many entries correspond to each object in "a".
-     * 
-     * For example:
-     * 
-     *   from = "Jet";
-     *   to = "Track";
-     *   numbtoa = {2, 0, 3};
-     *   btoa = {1, 5, 3, 4, 6};
-     * 
-     * This means that the first jet in the event (index=0) is associated
-     * to 2 tracks, namely index 1 and 5. The second jet has no associated 
-     * tracks and the third jet (index=2) is associated to 3 tracks, indices 
-     * 3, 4 and 6.
-     * 
-     * Alternatively, numbtoa can be null. In that case the length of btoa has 
-     * to be equal to the number of entries in "a". Every object in "a" will be 
-     * associated to exactly one object in "b".
-     * 
-     * @param from name+key this association is from, "a"
-     * @param to name+key this association is to, "b"
-     * @param numbtoa number of elements in "b" that each element in "a" is associated to 
-     * @param btoa contents of the association in flat array
-     * @param e event object this association belongs to
-     */
-    public AAssociation(String from, String to, int[] numbtoa, int[] btoa, AEvent e) {
-        
-        // Association to STr is done using barcodes, this is the only exception 
-        // here: for barcodes ID=0 means no association. So we skip those entries.
-        boolean skipZero = to.startsWith("STr") && numbtoa == null;
-        
-        event = e;
-        a = from;
-        b = to;
-        
-        if (btoa == null) {
-            
-            assoc = null;
-            
-        } else {
-            
-            if (numbtoa != null) {
-                
-                // Multiple "b" entries associated to an "a" entry
-                assoc = new int[numbtoa.length][];
-
-                int num = 0;
-                for (int i = 0; i < numbtoa.length; ++i) {
-                    if (numbtoa[i] <= 0) {
-                        assoc[i] = new int[0];
-                    } else {
-                        assoc[i] = new int[numbtoa[i]];
-                    }
-
-                    for (int j=0; j<numbtoa[i]; ++j) {
-                        assoc[i][j] = btoa[num++];
-                    }
-                }
-
-            } else {
-
-                // Simple 1-on-1 association
-                assoc = new int[btoa.length][];
-                
-                for (int i=0; i<btoa.length; i++) {
-                    if (skipZero && btoa[i] <= 0) {
-                        assoc[i] = new int[0];
-                    } else {
-                        assoc[i] = new int[] { btoa[i] };
-                    }
-                }
-            }
-
-        }
-    }
-
-    /**
-     * Copy constructor
-     * 
-     * @param from source datatype
-     * @param to target datatype
-     * @param associations association index arrays
-     * @param e event the association belongs to
-     */
-    public AAssociation(String from, String to, int[][] associations, AEvent e) {
-        event = e;
-        a = from;
-        b = to;
-        assoc = associations;
-    }
-    
-    /**
-     * Get the name of association
-     * @return association name, concatenation of the two data types it associates
-     */
-    public String getName() {
-        return a + b;
-    }
-
-    /**
-     * Get source data type of association
-     * @return name of source data type
-     */
-    public String getFrom() {
-        return a;
-    }
-
-    /**
-     * Get target data type of association
-     * @return name of target data type
-     */
-    public String getTo() {
-        return b;
-    }
-
-    /**
-     * Get association array
-     * @return association array
-     */
-    public int[][] getData() {
-        return assoc;
-    }
-
-    /**
-     * Method that constructs the association b->a when only an association a->b 
-     * currently exists. The complication here is due to the fact that "a" uses 
-     * Atlantis indices (0, 1, ...), while "b" uses Athena IDs (1611690048,
-     * 1635282976, etc.).
-     * 
-     * @return inverted association
-     */
-    public AAssociation invert() {
-        
-        AData aData = event.get(a);
-        AData bData = event.get(b);
-        
-        if (aData == null || bData == null) {
-            logger.debug(getClass().getName()
-                    + ":  No association found between " + a + " and " + b);
-            return null;
- 
-        } else {
-
-            try {
-                // New assoc will have the same number of entries as "b"
-                int[][] inv = new int[bData.getNumData()][];
-                
-                // Athena IDs of object "a"
-                int[] ida = aData.getID();
-                
-                // Loop over all entries in "a", the current association array
-                for (int i=0; i<assoc.length; ++i) {
-                    if (assoc[i] != null) {
-                        for (int j=0; j<assoc[i].length; ++j) {
-                            
-                            // For each associated entry in "b", we need to find 
-                            // the index from the Athena ID
-                            int index = bData.getIndexFromId(assoc[i][j]);
-                                                        
-                            if (index != AData.NO_INVERSE) {
-
-                                if (inv[index] == null) {
-
-                                    // The object in "a" is the first object that
-                                    // this object in "b" is associated to. Create
-                                    // a new array and add this entry.
-                                    inv[index] = new int[] { ida[i] };
-
-                                } else {
-
-                                    // The object in "b" is already associated to 
-                                    // other objects in "a". Retrieve the other 
-                                    // objects, increment the size and add the
-                                    // current object in "a".
-                                    int[] temp = new int[inv[index].length + 1];
-                                    for (int k=0; k<inv[index].length; ++k) {
-                                        temp[k] = inv[index][k];
-                                    }
-                                    temp[inv[index].length] = ida[i];
-                                    inv[index] = temp;
-                                }
-                            }
-                        }
-                    }
-                }
-                return new AAssociation(b, a, inv, event);
-
-            } catch (Exception e) {
-                logger.error("Unable to invert association.", e);
-                return null;
-            }
-        }
-    } // invert() ---------------------------------------------------------------
-
-    /**
-     * Remove associations between items that are not present in the event data
-     */
-    void purgeIDNotInData() {
-        // remove inconsistencies
-        // TRT hits from RTr<->SiCluster
-        // Association to an STr which does not exist in STr
-
-        AData source = event.get(b);
-        if (assoc == null || source == null) {
-            return;
-        }
-        int INVALID_ID = -1; // (i hope!)
-        for (int i = 0; i < assoc.length; i++) {
-            if (assoc[i] != null) {
-                int num = 0;
-                for (int j = 0; j < assoc[i].length; j++) {
-                    if (source.getIndexFromId(assoc[i][j]) == AData.NO_INVERSE) {
-                        assoc[i][j] = INVALID_ID;
-                        num++;
-                    }
-                }
-                if (num > 0) {
-                    if (num == assoc[i].length) {
-                        assoc[i] = null;
-                    } else {
-                        int[] temp = new int[assoc[i].length - num];
-                        num = 0;
-                        for (int j = 0; j < assoc[i].length; j++) {
-                            if (assoc[i][j] != INVALID_ID) {
-                                temp[num++] = assoc[i][j];
-                            }
-                        }
-                        assoc[i] = temp;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Convert association into an informational message for the user
-     */
-    @Override
-    public String toString() {
-        StringBuilder s = new StringBuilder();
-        s.append(a).append(" to ").append(this.b);
-        if (assoc == null) {
-            s.append(" is empty\n");
-            return s.toString();
-        } else {
-            s.append("\n");
-            for (int i = 0; i < assoc.length; i++) {
-                if (assoc[i] != null) {
-                    for (int j = 0; j < assoc[i].length; j++) {
-                        s.append(assoc[i][j]).append(" ");
-                    }
-                    s.append("\n");
-                }
-            }
-        }
-        return s.toString();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AAssociationManager.java b/graphics/AtlantisJava/src/atlantis/event/AAssociationManager.java
deleted file mode 100755
index cc1cbedaf47b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AAssociationManager.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package atlantis.event;
-
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import atlantis.utils.ALogger;
-
-public class AAssociationManager
-{
-    private static ALogger logger = ALogger.getLogger(AAssociationManager.class);
-
-    private Map<String, AAssociation> associations = new HashMap<String, AAssociation>();
-
-    public AAssociationManager() {}
-
-    public void clear()
-    {
-        associations = new HashMap<String, AAssociation>();
-    }
-    
-    public void add(AAssociation a)
-    {
-    	associations.put(a.getName(), a);
-    }
-
-    public void remove(String key)
-    {
-    	associations.remove(key);
-    }
-
-    public int[][] get(String a, String b)
-    {
-        Object o = associations.get(a + b);
-        if(o != null)
-        {
-            return((AAssociation) o).getData();
-        }
-        else
-        {
-            o = associations.get(b + a);
-            if(o != null)
-            {
-                //AOutput.logln("AAssociationManager.get()\n" +
-                //    "querying non-existing association from-" + a + "-to-" + b +
-                //    "\ncalculating inverse association ...") ;
-                AAssociation ass = ((AAssociation) o).invert();
-                // following test prevents Atlantis from crashing if there
-                // is something wrong with the association between clusters
-                // and cells
-                if(ass != null)
-                {
-                    add(ass);
-                    return ass.getData();
-                }
-                else
-                {
-                        String name = "AAssociationManager.get(): ";
-                        logger.debug(name + "No association " +
-                                      "found between " + a + " and " + b);
-                    return null;
-                }
-            }
-        }
-        return null;
-    } // get() --------------------------------------------------------------
-
-
-    public AAssociation getAssociation(String a, String b)
-    {
-        return (AAssociation) associations.get(a + b);
-    }
-
-    public void correct()
-    {
-        Collection<AAssociation> c = associations.values();
-        for (AAssociation a : c) {
-            a.purgeIDNotInData();
-        }
-    }
-    
-
-    public String[] getKnownAssociations(String a)
-    {
-        Collection<AAssociation> c = associations.values();
-        Set<String> list = new TreeSet<String>();
-        for (AAssociation ass : c) {
-            if(ass.getFrom().equals(a))
-            {
-                list.add(ass.getTo());
-            }
-            else if(ass.getTo().equals(a))
-            {
-                list.add(ass.getFrom());
-            }
-        }
-        return (String[]) list.toArray(new String[list.size()]);
-    }
-
-
-    public String getAllKnownAssociations()
-    {
-        Collection<AAssociation> col = associations.values();
-        StringBuilder r = new StringBuilder();
-        int c = 0;
-
-        for (AAssociation ass : col) {
-            c++;
-            r.append(c + " association from " + ass.getFrom() + " to " +
-                ass.getTo() + " (name: " + ass.getName() + ")\n");
-        }
-
-        return r.toString();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/ABufferedEventSource.java b/graphics/AtlantisJava/src/atlantis/event/ABufferedEventSource.java
deleted file mode 100644
index 7d089cf7ce8d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/ABufferedEventSource.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package atlantis.event;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.ALogger;
-import java.util.Vector;
-
-/**
- * Extension class to AEventSource providing buffering for a fixed number of events.
- * @author sboeser
- */
-public abstract class ABufferedEventSource implements AEventSource {
-
-  //Logging interface
-  private final static ALogger logger = ALogger.getLogger(ABufferedEventSource.class);
-  
-  //The index of the currently selected event in the list
-  private static int currentEvent = -1;
-  //The maximum number of events to save
-  public static int maxNumberOfEvents = 1;
-  //A vector of available events
-  private static Vector<AEvent> eventContainer = new Vector<AEvent>();
-  // the current event navigation mode
-  private NavigationMode eventNavigationMode = NavigationMode.SEQUENTIAL;
-
-  /**
-   * Abstract read next event method to be implemented by all subclasses
-   * @return the next event
-   * @throws NoMoreEventsException
-   * @throws InvalidEventSourceException
-   * @throws ReadEventException
-   */
-  protected abstract AEvent readNext(AEventInfo currentEvent) throws NoMoreEventsException,
-                                           InvalidEventSourceException,
-                                           ReadEventException;
-  /**
-   * Abstract read previous event method to be implemented by all subclasses
-   * @return the previous event
-   * @throws NoMoreEventsException
-   * @throws InvalidEventSourceException
-   * @throws ReadEventException
-   */
-  protected abstract AEvent readPrevious(AEventInfo currentEvent) throws NoMoreEventsException,
-                                               InvalidEventSourceException,
-                                               ReadEventException;
-
-  /**
-   * Get the next event, either from the buildin buffer or by reading it in
-   * @return the next event
-   * @throws atlantis.event.AEventSource.NoMoreEventsException
-   * @throws atlantis.event.AEventSource.InvalidEventSourceException
-   * @throws atlantis.event.AEventSource.ReadEventException
-   */
-  public AEvent nextEvent() throws NoMoreEventsException,
-                                   InvalidEventSourceException,
-                                   ReadEventException
-  {
-    //Check if we are already at the last event
-    if (currentEvent == eventContainer.size()-1){
-      
-      //if so, try to get another event
-      AEvent event = null;
-      try{
-         event = readNext(getCurrentEventInfo());
-      } catch ( OutOfMemoryError oom ) {
-         
-        //throw an error message
-        logger.error("Ran out of memory while reading event data");
-        
-        //See if we can clear memory by removing events
-        if ( getNumberOfEvents() > 0) {
-          //be verbose
-          logger.info("Clearing event cache and retry...");
-          //remove events
-          clearEventContainer();
-          //Call garbage collector to free resources
-          System.gc();
-          //Now retry (no current event)
-          event = readNext(null);
-        }
-      }
-         
-      //Add it to the eventContainer as last one
-      addEvent(event,false);
-    
-    } else {
-      // simply increase event counter
-      setCurrentEvent(currentEvent+1);
-    } 
- 
-    //Now return the new current event
-    return eventContainer.get(currentEvent);
-  }
-
-  public AEvent previousEvent() throws NoMoreEventsException,
-                                       InvalidEventSourceException,
-                                       ReadEventException {
-   
-    //Check if we are already at the first event
-    if (currentEvent <= 0 ){
-                 
-      //if so, try to get another event
-      AEvent event = null;
-      try{
-         event = readPrevious(getCurrentEventInfo());
-      } catch ( OutOfMemoryError oom ) {
-         
-        //throw an error message
-        logger.error("Ran out of memory while reading event data");
-        
-        //See if we can clear memory by removing events
-        if ( getNumberOfEvents() > 0) {
-          //be verbose
-          logger.info("Clearing event cache and retry...");
-          //remove events
-          clearEventContainer();
-          //Call garbage collector to free resources
-          System.gc();
-          //Now retry (no current event)
-          event = readPrevious(null);
-        }
-      }
-
-      //Add it to the eventContainer as first one
-      addEvent(event,true);
-
-    } else {
-      // simply decrease event counter
-      setCurrentEvent(currentEvent-1);
-    } 
-
-    //Now return the new current event
-    return eventContainer.get(currentEvent);
-
-  }
-
-  /**
-   * Get the event navigation mode for the current source.
-   * @return current event navigation mode
-   */
-  public NavigationMode getNavigationMode() {
-    return eventNavigationMode;
-  }
-
-  /**
-   * Set the event navigation mode for the current source,
-   * clears the buffer and reads the first event.
-   * Throws InvalidEventSourceException if the current
-   * source does not support the requested mode
-   * @param mode requested event navigation mode
-   */
-  public void setNavigationMode(NavigationMode mode) throws InvalidEventSourceException
-  {
-    if(supportsNavigationMode(mode)) {
-      NavigationMode oldMode = getNavigationMode();
-      eventNavigationMode = mode;
-
-      // empty the buffer
-      clearEventContainer();
-    } else
-      throw new InvalidEventSourceException("Mode '"+mode.name()+"' not supported by current source");
-  }
-
-    /**
-     * Checks whether the current event source supports
-     * a particular display mode.
-     * @return true if the mode is supported
-     * @param mode requested event navigation mode
-     */
-    public abstract boolean supportsNavigationMode(NavigationMode mode);
- 
-    /**
-     * Returns number of events saved in the eventContainer
-     * @return int
-     */
-    public int getNumberOfEvents()
-    {
-        return eventContainer != null ? eventContainer.size() : 0;
-
-    }
-
-        /**
-     * Add the given even to the event container. By default, events are added
-     * to the end of the container. If skipping backward, it may be necessary to
-     * add to the beginning of the container, as indicated by the asFirst flag
-     * The new event will also be set as default event
-     * 
-     * @param event the event to add
-     * @param asFirst whether to add the event at the beginning (default is end)
-     */
-    private synchronized void addEvent(AEvent event, boolean asFirst)
-    {
-       //create event container if it does not exist
-       if(eventContainer == null) eventContainer = new Vector<AEvent>();
-  
-       //Make sure container does not get too large
-       while (eventContainer.size() >= maxNumberOfEvents){
-          // remove at the side at which we are not adding event
-           if (asFirst) eventContainer.remove(eventContainer.lastElement());
-           else eventContainer.remove(0);
-       }
-       
-       //At the end or at the beginning
-       int index = (asFirst) ? 0 : eventContainer.size();
-       
-       //add the event       
-       eventContainer.add(index,event);
-       
-       //be verbose
-       logger.debug(eventContainer.size() + " event(s) in memory");
-    
-       //set as current event
-       setCurrentEvent(index);
-   }
-
-  
-      /**
-     * Clear the event container, reset the current event
-     */
-    protected synchronized void clearEventContainer()
-    {
-        //Make sure the event container exits before clearing it
-        if(eventContainer != null){
-           // let the user know
-          String msg = "Clearing event container with "+getNumberOfEvents()+" events.";
-          logger.warn(msg);
-          AOutput.append(msg, ALogInterface.WARNING);
-          
-          //Clear the container
-          eventContainer.clear();
-        }
-        
-        //Alse reset current event
-        currentEvent = -1;
-        
-        //Run the garbage collector to free space immediately
-        System.gc();
-
-    }
-
-  private void setCurrentEvent(int index) {
-    //Check for out-of-bounds
-    if ((index < 0) || ( index >= eventContainer.size()))
-      throw new ArrayIndexOutOfBoundsException("Cannot set index "+index+" in event container of size "+eventContainer.size());
-    currentEvent = index;
-  }
-
-  /**
-   * @return the curent event or null if there is none
-   */
-  private AEventInfo getCurrentEventInfo(){
-   
-    //Check if the current event is there
-    try {
-      //get the current events name
-      return eventContainer.get(currentEvent);
-    } catch (ArrayIndexOutOfBoundsException ex){
-      //return an empty string if there is no current event
-      return null;
-    }
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AData.java b/graphics/AtlantisJava/src/atlantis/event/AData.java
deleted file mode 100644
index 6bf4541ac22d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AData.java
+++ /dev/null
@@ -1,1661 +0,0 @@
-package atlantis.event;
-
-import java.awt.Component;
-import java.util.Vector;
-import java.util.Collection;
-import javax.swing.Action;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.ACompositeParticleData;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.ADrawable;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.list.AListManager;
-import atlantis.output.AExceptionHandler;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjection3D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.utils.A4Vector;
-import atlantis.utils.AHashMap;
-import atlantis.utils.AIntHashtable;
-import atlantis.utils.AMath;
-import atlantis.list.AListProcessor;
-import atlantis.utils.ALogger;
-
-/**
- * Base class which holds the data from a subdetector (e.g. TRT) This
- * representation is appropriate for data with a static number of entries but
- * not for example for reconstructed vertices the number of which may be changed
- * interactively by the user. AData should perhaps become an interface.
- */
-abstract public class AData implements ADrawable, AListProcessor {
-  private static final ALogger logger = ALogger.getLogger(AData.class);  //the event that this data belongs to
-  protected static AEventManager eventManager = AEventManager.instance();
-  protected static APar parameterStore = APar.instance();
-  protected static Component guiComponent = AGlobals.instance().getGuiFrame();
-  protected final AEvent event;
-  protected static final int NO_INVERSE = -1;
-  protected int numData;
-  protected int numDraw;
-  protected int[] listdl;
-  protected byte[] color;
-  protected int[] id;
-  protected AIntHashtable indexFromId;
-  protected String storeGateKey = null;
-  protected final String PARAMETER_GROUP = getParameterGroup();
-  
-  abstract protected int internalColor();
-
-  abstract protected void applyCuts();
-
-  abstract public String getNameScreenName();
-
-  abstract public String getHitInfo(int index); // pick info
-
-  abstract public String getParameterGroup();
-  // Holds the projection object that we are currently drawing on. This is *NOT* the same
-  // as ACanvas.getCanvas().getCurrentWindow().getProjection(), since this function gives
-  // the projection in the active window. Particularly at startup windows will be redrawn
-  // without being the active window. Hence this variable.
-  //
-  // By the way: this is also inherently bad design. Why does the data need 
-  // to know about the projection? The main flaw is that the data draws itself,
-  // rather then the graphics context drawing the data - S.B.
-  protected AProjection2D currentProjection;
-
-  // dummy version, only applies to dynamic data sources (e.g. RecVertex (RVx))
-  public void remove(int[] index) {}
-
-  // used to finalize the state of this object
-  // after all other AData objects are essentially built
-  // e.g. calculate the number of S3D hits on a track after both are read
-  protected void finalizeConstruction() {}
-
-  // x y and z are now stored
-  // rho and phi arrays are only correct after a call to this function
-  protected void calculateRhoPhi() {}
-
-  // used by rubberband in V-Plot
-  public String getVPHitInfo() {
-    return "";
-  }
-
-  public AData(AHashMap p, AEvent e) {
-    //save reference to the event this data belongs to
-    event = e;
-
-    numData = p.getInt("numData");
-    numDraw = numData;
-    listdl = new int[numData];
-    color = new byte[numData];
-
-    storeGateKey = (String) p.get("storeGateKey");
-    if ("".equals(storeGateKey) || storeGateKey == null) {
-      storeGateKey = null;
-    }
-
-    if (p.get("id") != null) {
-      id = p.getIntArray("id");
-    } else {
-      id = new int[numData];
-      for (int i = 0; i < numData; i++) {
-        // start IDs calculated in Atlantis from 0, should be the same
-        // as in JiveXML
-        id[i] = i;
-      }
-    }
-
-    indexFromId = new AIntHashtable(id);
-  } // AData()
-
-  AData(Node node, AEvent e) {
-    //save reference to the event this data belongs to
-    event = e;
-    numData = 0;
-    NodeList children = node.getChildNodes();
-    for (int i = 0; i < children.getLength(); i++) {
-      if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
-        numData++;
-      }
-    }
-    numDraw = numData;
-    listdl = new int[numData];
-    color = new byte[numData];
-    id = new int[numData];
-    for (int i = 0; i < numData; i++) {
-      id[i] = i;
-    }
-    indexFromId = new AIntHashtable(id);
-  }
-
-  public AEvent getEvent(){
-    return event;
-  }
-
-  public int getIndexFromId(int id) {
-    return indexFromId.get(id);
-  }
-
-  public final A4Vector get4Vector() {
-    makeDrawList();
-    return get4Vector(numDraw, listdl);
-  }
-
-  // only applies to data which can provide 4 vectors
- public A4Vector get4Vector(int num, int[] list) {
-    return null;
-  }
- 
- // only applies to data which can provide 4 vectors
- public A4Vector get4Vector(int num, int[] list, double mass) {
-    return null;
-  }
-
-  public int getNumData() {
-    return numData;
-  }
-
-  public int getNumDraw() {
-    return numDraw;
-  }
-
-  public int getDrawIndex(int index) {
-    return this.listdl[index];
-  }
-
-  public int[] getID() {
-    return id;
-  }
-
-  protected int getNum(String name, int index) {
-    int[][] ass = event.getAssociationManager().get(getFullName(), name);
-    if (ass != null && ass[index] != null) {
-      return ass[index].length;
-    } else {
-      return 0;
-    }
-  }
-
-  protected int[] getNum(String name) {
-    int[][] ass = event.getAssociationManager().get(getFullName(), name);
-    int[] num = new int[numData];
-    if (ass != null) {
-      for (int i = 0; i < ass.length; ++i) {
-        if (ass[i] != null) {
-          num[i] = ass[i].length;
-        }
-      }
-    }
-    return num;
-  }
-
-  public byte[] getColor() {
-    color();
-    byte[] temp = new byte[id.length];
-
-    for (int i = 0; i < temp.length; i++) {
-      temp[i] = color[getIndexFromId(id[i])];
-    }
-    return temp;
-  }
-
-  public int[] getColor(int[] dl) {
-    color();
-    int[] temp = new int[dl.length];
-
-    for (int i = 0; i < temp.length; i++) {
-      temp[i] = color[dl[i]];
-    }
-    return temp;
-  }
-  
-  public int getColor(int index){
-      return color[index];
-  }
-
-  public void makeDrawList() {
-    calculateRhoPhi();
-    constructDefaultDrawlist();
-    applyCuts();
-  }
-
-  public void constructDefaultDrawlist() {
-    if (!parameterStore.get("CutsATLAS", "ByList").getStatus()) {
-      // if some hits are on a list they must be drawn last
-      int[][] temp = AListManager.getInstance().getColorMapping(this);
-      int[] index = temp[0];
-      int[] ctemp = temp[1];
-      if (index.length > 0) {
-        // AOutput.logln("AData.constructDefaultDrawlist() numData = " +
-        // numData);
-        int[] c = new int[numData];
-        final int NONE = -999;
-        for (int i = 0; i < numData; ++i) {
-          c[i] = NONE;
-        }
-        for (int i = 0; i < index.length; ++i) {
-          c[index[i]] = ctemp[i];
-        }
-        numDraw = 0;
-        for (int i = 0; i < numData; ++i) {
-          if (c[i] == NONE) {
-            listdl[numDraw++] = i;
-          }
-        }
-        for (int i = 0; i < numData; ++i) {
-          if (c[i] != NONE && c[i] != AColorMap.INVISIBLE) {
-            listdl[numDraw++] = i;
-          // nb invisible are not in the drawlist
-          }
-        }
-      } else {
-        // this is the standard case
-        numDraw = numData;
-        for (int i = 0; i < numDraw; ++i) {
-          listdl[i] = i;
-        }
-      }
-    } else {
-      // drawlist set by cuts.....
-      boolean[] selected = AListManager.getInstance().getSelection(this);
-      numDraw = 0;
-      for (int i = 0; i < selected.length; ++i) {
-        if (selected[i]) {
-          listdl[numDraw++] = i;
-        }
-      }
-    }
-  }
-
-  // provides the draw list as a boolean array parallel to the data array
-  protected boolean[] isDrawn() {
-    boolean[] drawn = new boolean[numData];
-
-    for (int i = 0; i < numDraw; i++) {
-      drawn[listdl[i]] = true;
-    }
-    return drawn;
-  }
-
-  public void cut(String groupName, String parameterName, String text, float[] array) {
-    AParameter par = parameterStore.get(groupName, parameterName);
-
-    if (par != null && par.getStatus() && array != null) {
-      double value = par.getD();
-      String operator = par.getOperator();
-      int num = 0;
-
-      if (par.isModulus()) {
-        if (operator.equals("<")) {
-          for (int i = 0; i < numDraw; i++) {
-            if (Math.abs(array[listdl[i]]) < value) {
-              listdl[num++] = listdl[i];
-            }
-          }
-        } else if (operator.equals(">")) {
-          // '>' really means '>=' for reals since they are real in
-          // from ascii file and don't have full precison
-          for (int i = 0; i < numDraw; i++) {
-            if (Math.abs(array[listdl[i]]) >= value) {
-              listdl[num++] = listdl[i];
-            }
-          }
-        } else {
-          throw new Error(operator + " operator not sensible for floats");
-        }
-      } else {
-        if (operator.equals("<")) {
-          for (int i = 0; i < numDraw; i++) {
-            if (array[listdl[i]] < value) {
-              listdl[num++] = listdl[i];
-            }
-          }
-        } else if (operator.equals(">")) {
-          // '>' really means '>=' for reals since they are real in
-          // from ascii file
-          // and don't have full precison
-          for (int i = 0; i < numDraw; i++) {
-            if (array[listdl[i]] >= value) {
-              listdl[num++] = listdl[i];
-            }
-          }
-        } else {
-          throw new Error(operator + " operator not sensible for floats");
-        }
-      }
-      numDraw = num;
-    }
-  }
-
-  protected void cut(String groupName, String parameterName, String text, int[] array) {
-    AParameter par = parameterStore.get(groupName, parameterName);
-
-    if (par != null && par.getStatus() && array != null) {
-      int value = par.getI();
-
-      // consider two special cases: Electron/isEM and Photon/isEM
-      if (parameterName.endsWith("isEM")) {
-        if (!isEMValidate(value)) {
-          return;
-        }
-        String binaryString = Integer.toBinaryString(value);
-        Vector<String> possibleValues = getPossibleValues(binaryString);
-        cutIsEM(text, array, possibleValues);
-      } else {
-        String operator = par.getOperator();
-        boolean modulus = par.isModulus();
-
-        cut(text, modulus, array, operator, value);
-      }
-    }
-  }
-
-  protected void cut(String text, int[] array, String operator, int value) {
-    cut(text, false, array, operator, value);
-  }
-
-  protected void cut(String text, boolean modulus, int[] array, String operator, int value) {
-    int num = 0;
-
-    if (modulus) {
-      if (operator.equals("<")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) < value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) > value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("=") || operator.equals("==")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) == value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("!=") || operator.equals(AMath.NOTEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) != value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("<=") || operator.equals(AMath.LESSEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) <= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">=") || operator.equals(AMath.GREATEREQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (Math.abs(array[listdl[i]]) >= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else {
-        throw new Error(operator + " operator not sensible for integers");
-      }
-    } else {
-      if (operator.equals("<")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] < value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] > value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("=") || operator.equals("==")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] == value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("!=") || operator.equals(AMath.NOTEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] != value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("<=") || operator.equals(AMath.LESSEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] <= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">=") || operator.equals(AMath.GREATEREQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (array[listdl[i]] >= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else {
-        throw new Error(operator + " operator not sensible for integers");
-      }
-    }
-    numDraw = num;
-  }
-
-  // cut based on the i'th item in the data array
-  public void cutIndex() {
-    AParameter par = parameterStore.get("CutsATLAS", "Index");
-
-    if (par.getStatus()) {
-      int value = par.getI();
-      String operator = par.getOperator();
-      int num = 0;
-
-      if (operator.equals("<")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] < value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] > value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("=") || operator.equals("==")) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] == value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("!=") || operator.equals(AMath.NOTEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] != value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals("<=") || operator.equals(AMath.LESSEQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] <= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else if (operator.equals(">=") || operator.equals(AMath.GREATEREQUAL)) {
-        for (int i = 0; i < numDraw; i++) {
-          if (listdl[i] >= value) {
-            listdl[num++] = listdl[i];
-          }
-        }
-      } else {
-        throw new Error(operator + " operator not sensible for integers");
-      }
-      numDraw = num;
-    }
-  }
-
-  protected void cutArray(int[] value, int cutValue, String description) {
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-
-      if (value[listdl[i]] == cutValue) {
-        listdl[num++] = listdl[i];
-      }
-    }
-    numDraw = num;
-  }
-
- protected void cutArray(byte[] value, int cutValue, String description) {
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-
-      if (value[listdl[i]] == cutValue) {
-        listdl[num++] = listdl[i];
-      }
-    }
-    numDraw = num;
-  }
-
-  //isEMString cut declaration
-  //
-  // Clone of above cut, but to allow values less than or equal to the cut value
-  // At the moment, Specific to isEMString for Electrons and Photons, and isTauString.
-  // 
-  protected void cutArrayEnum(Vector<Enum> value, int cutValue, String description) {
-	    int num = 0;
-
-	    for (int i = 0; i < numDraw; i++) {
-	      if ((value.get(listdl[i]).ordinal()) <= cutValue) {
-	        listdl[num++] = listdl[i];
-	      }
-	    }
-	    numDraw = num;
-	  }
-  // End isEMString cut declaration
-  
-  protected void cutArray(boolean[] value, boolean cutValue, String description) {
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-      if (value[listdl[i]] == cutValue) {
-        listdl[num++] = listdl[i];
-      }
-    }
-    numDraw = num;
-  }
-  
-  protected void cutArrayOR(int[] value, int cutValue1, int cutValue2,
-          String description) {
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-      if (value[listdl[i]] == cutValue1 || value[listdl[i]] == cutValue2) {
-        listdl[num++] = listdl[i];
-      }
-    }
-    numDraw = num;
-  }
-
-  // apply phi+-deltaphi cut to lines (e.g. TRT)
-  protected void cutPhi(float[] phi, float[] dphi) {
-    AParameter par = parameterStore.get("CutsATLAS", "CutPhi");
-
-    if (!par.getStatus()) {
-      return;
-    }
-    double phiCut = Math.toRadians(par.getD());
-    double phiMid = Math.toRadians(AMath.nearestPhiDegrees(parameterStore.get("CutsATLAS", "PhiMiddle").getD()));
-    double phiLowerCut = phiMid - phiCut;
-    double phiUpperCut = phiMid + phiCut;
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-      int list = listdl[i];
-      double phiHit = AMath.nearestPhiRadians(phi[list], phiMid);
-      double phiLower = phiHit - dphi[list];
-      double phiUpper = phiHit + dphi[list];
-
-      if (phiUpper - phiLowerCut > 1.0e-6 && phiUpperCut - phiLower > 1.0e-6) {
-        listdl[num++] = list;
-      }
-    }
-    numDraw = num;
-  }
-  
-  /** Apply phi+-deltaphi cut to points (e.g. S3D) */
-  public void cutPhi(float[] phi) {
-    AParameter par = parameterStore.get("CutsATLAS", "CutPhi");
-    boolean usePhiCut = par.getStatus();
-
-    if (usePhiCut) {
-      double phiCut = Math.toRadians(Math.abs(par.getD()));
-      double phiMid = Math.toRadians(AMath.nearestPhiDegrees(parameterStore.get("CutsATLAS", "PhiMiddle").getD()));
-      int num = 0;
-
-      for (int i = 0; i < numDraw; i++) {
-        double phiDiff = Math.abs(AMath.nearestPhiRadians(phi[listdl[i]], phiMid) - phiMid);
-
-        if (phiCut - phiDiff > 1.0e-6) {
-          listdl[num++] = listdl[i];
-        }
-      }
-      numDraw = num;
-    }
-
-  }
-
-  /** apply eta+-deltaeta cut to points (e.g. S3D) */
-  public void cutEta(float[] eta) {
-    AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-    boolean useEtaCut = par.getStatus();
-
-    if (useEtaCut) {
-      double etaCut = Math.abs(par.getD());
-      double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-      int num = 0;
-
-      for (int i = 0; i < numDraw; i++) {
-        double etaDiff = Math.abs(eta[listdl[i]] - etaMid);
-
-        if (etaCut - etaDiff > 1.0e-6) {
-          listdl[num++] = listdl[i];
-        }
-      }
-      numDraw = num;
-    }
-  }
-
-  protected void colorByConstant() {
-    if (!PARAMETER_GROUP.equals("CompositeParticle")) {
-      int constantColor = parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-
-      for (int i = 0; i < numData; i++) {
-        color[i] = (byte) constantColor;
-      }
-    } else {
-      ACompositeParticleData compositeParticles = (ACompositeParticleData) this;
-      compositeParticles.makeDrawList();
-      for (int e = 0; e < compositeParticles.getNumDraw(); ++e) {
-        int list = compositeParticles.getDrawIndex(e);
-        switch (Math.abs(compositeParticles.getPdgId(list))) {
-          case 13:
-            color[list] = (byte) parameterStore.get("Muon", "Constant").getI();
-            break;
-          case 11:
-            color[list] = (byte) parameterStore.get("Electron", "Constant").getI();
-            break;
-          case 22:
-            color[list] = (byte) parameterStore.get("Photon", "Constant").getI();
-            break;
-          case 5:
-            color[list] = (byte) parameterStore.get("BJet", "Constant").getI();
-            break;
-          case 15:
-            color[list] = (byte) parameterStore.get("TauJet", "Constant").getI();
-            break;
-          case 24:
-              color[list] = (byte) parameterStore.get("CompositeParticle", "ConstantW").getI();
-              break;
-          case 6:
-              color[list] = (byte) parameterStore.get("CompositeParticle", "ConstantTop").getI();
-              break;
-          case 25:
-              color[list] = (byte) parameterStore.get("CompositeParticle", "ConstantH").getI();
-              break;
-                        
-          default:
-            if (compositeParticles.getTypeEV(list).equals("EVParticleJet")) {
-              color[list] = (byte) parameterStore.get("Jet", "Constant").getI();
-            } else {
-              color[list] = (byte) parameterStore.get("CompositeParticle", "Constant").getI();
-            }
-        }
-      }
-    }
-  }
-
-
-  /** Colour by index.
-   * e.g. colorByIndex(indexBy(phi));
-   * will allow nearby phi tracks to be coloured differently.
-   * @param index
-   */
-  protected void colorByIndex(int[] index) {
-    int numColors = parameterStore.get("HitColors", "Number").getI();
-
-    numColors = Math.min(7, numColors);
-    int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-    for (int i = 0; i < numData; i++) {
-      color[index[i]] = (byte) col[i % numColors];
-    }
-  }
-
-  protected void colorByIndex() {
-    int numColors = parameterStore.get("HitColors", "Number").getI();
-
-    numColors = Math.min(7, numColors);
-    int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-    for (int i = 0; i < numData; i++) {
-      color[i] = (byte) col[i % numColors];
-    }
-  }
-
-  protected void colorByCollection() {
-    int constantColor = parameterStore.get(PARAMETER_GROUP, "Constant").getI();
-    int numColors = parameterStore.get("HitColors", "Number").getI();
-    int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-    AEvent ev = eventManager.getCurrentEvent();
-    // vector with store gate keys for a particular datatype name: this.getName()
-    Vector<String> v = ev.getCollections().get(this.getName());
-    int keyIndex = 0;
-    if (v != null && (keyIndex = v.indexOf(this.getStoreGateKey())) != -1) {
-      // v is null - requested datatype name doesn't exists in the current
-      // event - 
-      // if keyIndex is -1 it means the current
-      // store gate key doesn't exists in the current event (for a datatype
-      // which exists in the current event)
-      // previous event(s) are being drawn and this colouring function
-      // won't work for them but only for the current event
-
-      // constant colour index is used purely as modifier so as all datatypes
-      // coloured by colletictions don't start at the same colour ...
-      keyIndex += constantColor;
-      for (int i = 0; i < numData; i++) {
-        color[i] = (byte) col[keyIndex % numColors];
-      }
-    } else {
-      logger.debug("colorByCollection(): can't colour by collection");
-    }
-
-  } // colorByCollection() ------------------------------------------------
-
-  /**
-   * Colour another class by association. This class is providing the colour,
-   * we assign colours from the local class to the target using col[] and id[][].
-   * 
-   * @param col target class colour array
-   * @param id association array from this class to the target class
-   * @param unconnectedColor colour for unconnected hits
-   * @param sharedColor  colour for shared hits
-   */
-  protected void colorByAssociation(AData target, int[][] id,
-          byte unconnectedColor, byte sharedColor) {
-    
-      // All hits are unconnected by default
-      for (int i=0; i<target.color.length; i++) {
-          target.color[i] = unconnectedColor;
-      }
-      
-      if (id == null) return;
-
-      // Loop over drawn objects in this class, then colour the other elements
-      // that are associated. i iterates over the drawn items, j is the true 
-      // index and k refers to an associated item in the target class, with true 
-      // index l.
-      for (int i=0; i<numDraw; i++) {
-          int j = listdl[i];
-          
-          if (id[j] != null) {
-              for (int k = 0; k < id[j].length; k++) {
-                  int l = target.getIndexFromId(id[j][k]);
-                  
-                  if (l < 0) continue;
-
-                  if (target.color[l] != unconnectedColor) {
-                      // If item l was already connected, that means it is shared
-                      target.color[l] = sharedColor;
-                  } else {
-                      // Assign associated item l the colour of item j in the local class
-                      target.color[l] = this.color[j];
-                  }
-              }
-          }
-      }
-  } // colorByAssociation() -----------------------------------------------
-
-  protected void setColor(int index, byte color) {
-    if (index >= 0 && index < this.color.length) {
-      this.color[index] = color;
-    } else {
-      logger.debug(getClass().getName() + ":  Set color for data with index = " + index);
-    }
-  }
-
-  protected void setColor(byte color) {
-    for (int i = 0; i < this.color.length; i++) {
-      this.color[i] = color;
-    }
-  }
-
-  protected void colorBy(int[] coloringVariable) {
-    int numColors = parameterStore.get("HitColors", "Number").getI();
-
-    numColors = Math.min(7, numColors);
-    int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-
-    for (int i = 0; i < numData; i++) {
-      color[i] = (byte) col[coloringVariable[i] % numColors];
-    }
-  }
-
-  protected void colorBy(String colorGroup, int[] coloringVariable) {
-    int numColors = parameterStore.get(colorGroup, "Number").getI();
-
-    numColors = Math.min(7, numColors);
-    int[] col = parameterStore.getArray(colorGroup, "C1", numColors);
-
-    for (int i = 0; i < numData; i++) {
-      color[i] = (byte) col[coloringVariable[i] % numColors];
-    }
-  }
-
-  protected void colorBy(float[] Pt) {
-    int numColors = parameterStore.get("HitColors", "Number").getI();
-
-    numColors = Math.min(7, numColors);
-    int[] col = parameterStore.getArray("HitColors", "C1", numColors);
-    for (int i = 0; i < numData; i++) {
-      int icol = 0;
-      if (Math.abs(Pt[i]) < 2) {
-        icol = 4; //lichtblauw
-      } else if (Math.abs(Pt[i]) < 4) {
-        icol = 2; //blauw
-      } else if (Math.abs(Pt[i]) < 10) {
-        icol = 5; //paars
-      } else if (Math.abs(Pt[i]) < 40) {
-        icol = 3; //oranje
-      } else {
-        icol = 0; //rood
-      }
-      color[i] = (byte) col[icol];
-    }
-  }
-
-  public String getName() {
-    return getParameterGroup();
-  }
-
-  public String getStoreGateKey() {
-    return storeGateKey;
-  }
-
-  // x y from rho phi
-  protected void calculateXY(float[] rho, float[] phi, float[] x, float[] y) {
-    for (int i = 0; i < x.length; ++i) {
-      x[i] = (float) (rho[i] * Math.cos(phi[i]));
-      y[i] = (float) (rho[i] * Math.sin(phi[i]));
-    }
-  }
-  
-  /** Calculate rho phi from x y */
-  protected void calculateRhoPhi(float[] x, float[] y, float[] rho, float[] phi) {
-    // [2007-07-20] method is again always called from AData.makeDrawList()
-    // but reference to primary vertex is removed, it's not taken into account now
-    // double[] pVtx = Atlantis.getEventManager().getCurrentEvent().getPrimaryVertex();
-    // double dx = x[i] - pVtx[0];
-    // double dy = y[i] - pVtx[1];
-
-    for (int i = 0; i < rho.length; i++) {
-      double dx = x[i];
-      double dy = y[i];
-
-      rho[i] = (float) (Math.sqrt(dx * dx + dy * dy));
-      phi[i] = (float) (Math.atan2(dy, dx));
-      if (phi[i] < 0.) {
-        phi[i] += AMath.TWO_PI;
-      }
-    }
-  }
-
-  /** Draw the data form this detector on this window and projection */
-  public void draw(AWindow window, AGraphics ag, AProjection2D projection) {
-    ag.draw(window.calculateDisplay(getUser(projection)));
-  }
-
-  /** Get the data from a projection without non linear transform applied.
-   * @param projection
-   * @return
-   */
-  protected ACoord getUserNoTransform(AProjection projection) {
-    ACoord data = ACoord.NO_DATA;
-    // don't use reflection as debugging is then harder
-    if (projection instanceof AProjectionYX) {
-      data = getYXUser();
-    } else if (projection instanceof AProjectionFR) {
-      data = getFRUser();
-    } else if (projection instanceof AProjectionRZ) {
-      data = getRZUser();
-    } else if (projection instanceof AProjectionXZ) {
-      data = getXZUser();
-    } else if (projection instanceof AProjectionYZ) {
-      data = getYZUser();
-    } else if (projection instanceof AProjectionFZ) {
-      data = getFZUser();
-    } else if (projection instanceof AProjectionVP) {
-      data = getVPUser();
-    } else if (projection instanceof AProjection3D) {
-      data = get3DUser();
-    }
-
-    return data;
-  }
-
-  /** Get the data form a projection with non linear transform applied. */
-  protected ACoord getUser(AProjection2D projection) {
-    currentProjection = projection;
-    return projection.nonLinearTransform(getUserNoTransform(projection));
-  }
-
-  /** Should the polygon from this detector be drawn or filled? */
-  protected int getDrawOrFill() {
-    return AGraphics.DRAW;
-  }
-
-  /**
-   * Prints info about association in which AData:index participates
-   * (pick + n (navigate)
-   * @param index int
-   * @return String
-   */
-  public String navigate(int index) {
-    StringBuilder temp = new StringBuilder();
-    String assocKey = getFullName();
-    String[] knownAssoc = event.getAssociationManager().getKnownAssociations(assocKey);
-    temp.append(" associated to:\n");
-    for (int i = 0; i < knownAssoc.length; i++) {
-      AData source = eventManager.getCurrentEvent().get(knownAssoc[i]);
-      if (source == null) continue;
-      int[][] ass = event.getAssociationManager().get(assocKey, knownAssoc[i]);
-      if (ass != null && ass[index] != null) {
-        for (int x = 0; x < ass[index].length; x++) {
-          temp.append("   " + knownAssoc[i] + " id: " + ass[index][x] +
-                  " index: " + source.getIndexFromId(ass[index][x]) + "\n");
-        }
-      }
-    }
-    return temp.toString();
-
-  } // navigate() ---------------------------------------------------------
-
-  private boolean isEMValidate(int inputValue) {
-    if (inputValue > 65535) {
-      String displayMessage = "isEM is a 16-bit binary data, maximum is 65535";
-      AExceptionHandler.processException("warning", displayMessage.toString());
-      return false;
-    }
-    return true;
-  }
-
-  // "1" means a wildcard, can be "0" or "1"
-  private Vector<String> getPossibleValues(String bStr) {
-    Vector<String> possibleValues = new Vector<String>();
-    if (bStr.length() == 1) {
-      possibleValues.add("0");
-      if (bStr.charAt(0) == '1') {
-        possibleValues.add("1");
-      }
-    } else {
-      Vector<String> possibleValuesWithoutFirstChar = getPossibleValues(bStr.substring(1));
-      for (int i = 0; i < possibleValuesWithoutFirstChar.size(); i++) {
-        String str = possibleValuesWithoutFirstChar.get(i);
-        possibleValues.add("0" + str);
-        if (bStr.charAt(0) == '1') {
-          possibleValues.add("1" + str);
-        }
-      }
-
-    }
-    return possibleValues;
-  }
-
-  private void cutIsEM(String text, int[] array, Vector<String> possibleValues) {
-    int num = 0;
-
-    for (int i = 0; i < numDraw; i++) {
-      for (int j = 0; j < possibleValues.size(); j++) {
-        String str = possibleValues.get(j);
-        int value = Integer.parseInt(str, 2);
-        if (array[listdl[i]] == value) {
-          listdl[num++] = listdl[i];
-          break;
-        }
-      }
-    }
-
-    numDraw = num;
-  }
-
-  /**
-   * Track name + Track storeGateKey is returned according to selected
-   * Track collection in InDet -> Track -> TrackCollection listbox
-   * @return String
-   */
-  protected String getReconstructedTracks() {
-    AData tracks = eventManager.getCurrentEvent().getTrackData("InDetTrack");
-    String r = null;
-    if (tracks != null) {
-      r = tracks.getName() + tracks.getStoreGateKey();
-    }
-
-    return r;
-
-  } // getReconstructedTracks() ---------------------------------------------
-
-  /**
-   * Jet + Jet storeGateKey is returned according to selected
-   * Jet collection in ATLAS -> Jet -> JetCollection listbox
-   * @return String
-   */
-  protected String getJets() {
-    AData jets = eventManager.getCurrentEvent().getJetData();
-    String r = null;
-    if (jets != null) {
-      r = jets.getName() + jets.getStoreGateKey();
-    }
-
-    return r;
-
-  } // getJets() ----------------------------------------------------------
-
-  /**
-   * RVx + RVx storeGateKey is returned according to selected
-   * vertex collection in InDet -> RecVertex -> VerteCollection listbox
-   * @return String
-   */
-  protected String getRVx() {
-    AData rvx = eventManager.getCurrentEvent().getRVxData();
-    String r = null;
-    if (rvx != null) {
-      r = rvx.getName() + rvx.getStoreGateKey();
-    }
-
-    return r;
-
-  } // getRVx() ----------------------------------------------------------
-
-  protected AData getObjectCollection(String type) {
-    return eventManager.getCurrentEvent().getData(type);
-  }
-
-  /**
-   * Cluster + Cluster storeGateKey is returned according to selected
-   * Cluster collection in Calo -> Cluster -> Cluster listbox
-   * @return String
-   */
-  protected String getClusters() {
-    AData clusters = eventManager.getCurrentEvent().getClusterData();
-    String r = null;
-    if (clusters != null) {
-      r = clusters.getName() + clusters.getStoreGateKey();
-    }
-
-    return r;
-
-  } // getClusters() ------------------------------------------------------
-
-  public int[] getDrawList() {
-    return listdl;
-
-  } // getDrawList() ------------------------------------------------------
-
-    /** Apply eta+-deltaEta cut to points (e.g. S3D) */
-    protected void cutEta(float[] rho, float[] z)
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        boolean useEtaCut = par.getStatus();
-
-        if(useEtaCut)
-        {
-            double etaCut = Math.abs(par.getD());
-            double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-            double etaLower = etaMid - etaCut;
-            double etaUpper = etaMid + etaCut;
-            int num = 0;
-
-            for(int i = 0; i < numDraw; i++)
-            {
-                int list = listdl[i];
-                double eta = AParameterUtilities.eta(z[list], rho[list]);
-
-                if(eta - etaLower > 1.0e-6 && etaUpper - eta > 1.0e-6)
-                    listdl[num++] = list;
-            }
-            numDraw = num;
-        }
-    }
-
-
-    /** Apply eta+-deltaEta cut to lines perpendicular to beam axis */
-    protected void cutEtaDRho(float[] rho, float[] z, float[] drho)
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        boolean useEtaCut = par.getStatus();
-
-        if(useEtaCut)
-        {
-            double etaCut = Math.abs(par.getD());
-            double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-            double etaLowerCut = etaMid - etaCut;
-            double etaUpperCut = etaMid + etaCut;
-            int num = 0;
-
-            for(int i = 0; i < numDraw; i++)
-            {
-                int list = listdl[i];
-                double eta1 = AParameterUtilities.eta(z[list], rho[list] + drho[list]);
-                double eta2 = AParameterUtilities.eta(z[list], rho[list] - drho[list]);
-                double etaLower = Math.min(eta1, eta2);
-                double etaUpper = Math.max(eta1, eta2);
-
-                if(etaUpper - etaLowerCut > 1.0e-6
-                        && etaUpperCut - etaLower > 1.0e-6)
-                    listdl[num++] = list;
-            }
-            numDraw = num;
-        }
-    }
-
-    /** Apply eta+- deltaEta cut to lines parallel to beam axis */
-    protected void cutEtaDZ(float[] rho, float[] z, float[] dz)
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-        boolean useEtaCut = par.getStatus();
-
-        if(useEtaCut)
-        {
-            double etaCut = Math.abs(par.getD());
-            double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-            double etaLowerCut = etaMid - etaCut;
-            double etaUpperCut = etaMid + etaCut;
-            int num = 0;
-
-            for(int i = 0; i < numDraw; i++)
-            {
-                int list = listdl[i];
-                double etaLower = AParameterUtilities.eta(z[list] - dz[list], rho[list]);
-                double etaUpper = AParameterUtilities.eta(z[list] + dz[list], rho[list]);
-
-                if(etaUpper - etaLowerCut > 1.0e-6
-                        && etaUpperCut - etaLower > 1.0e-6)
-                    listdl[num++] = list;
-            }
-            numDraw = num;
-        }
-    }
-
-    /** apply eta+-deltaeta cut to lines (e.g. TRT) */
-    protected void cutEtaDEta(float[] eta, float[] deta)
-    {
-        AParameter par = parameterStore.get("CutsATLAS", "CutEta");
-
-        if(!par.getStatus())
-            return;
-        double etaCut = Math.abs(par.getD());
-        double etaMid = parameterStore.get("CutsATLAS", "EtaMiddle").getD();
-        double etaLowerCut = etaMid - etaCut;
-        double etaUpperCut = etaMid + etaCut;
-        int num = 0;
-
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            double etaLower = eta[list] - deta[list];
-            double etaUpper = eta[list] + deta[list];
-
-            if(etaUpper - etaLowerCut > 1.0e-6
-                    && etaUpperCut - etaLower > 1.0e-6)
-                listdl[num++] = list;
-        }
-        numDraw = num;
-
-    }
-
-
-
-    /**
-     *
-     * @param sourceDatatype name of the datatype according to
-     * which the cut is being done
-     * @param beingCutDatatype name of the datatype which is
-     * being cut
-     * @param cutOption integer value of the cut option in GUI
-     */
-    protected void cutByAssociationTo(String sourceDatatype,
-                                      String beingCutDatatype, int cutOption)
-    {
-        if(cutOption == 0)
-        {
-            // SA select all
-            // do nothing, draw everything
-            return;
-        }
-
-        AEvent ev = eventManager.getCurrentEvent();
-        AData source = ev.get(sourceDatatype);
-        int[][] assoc = event.getAssociationManager().get(beingCutDatatype, sourceDatatype);
-        if (assoc == null || source == null) {
-            AData being = ev.get(beingCutDatatype);
-            String screenName;
-            if(being!=null)screenName= being.getNameScreenName();
-            else screenName="null";
-            logger.warn(screenName + " - null (" + beingCutDatatype + " - " 
-                    + sourceDatatype +") association, nothing to draw");
-            // if 'connected' or 'unconnected' is selected and association
-            // or datatype to associate with doesn't exist, draw nothing
-            // (numDraw = 0)
-            numDraw = 0;
-            return;
-        }
-
-        if(cutOption == 1)
-        {
-            // SC select connected
-            int num = 0;
-            // first remove those not connected to anything
-            for(int i = 0; i < numDraw; i++)
-            {
-                if(assoc[listdl[i]] != null)
-                {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-            // if tracks exist apply cuts to them
-            numDraw = source.cutByAssociation(numDraw, listdl, assoc);
-        }
-        else if(cutOption == 2)
-        {
-            // SU select unconnected
-            int num = 0;
-            for(int i = 0; i < numDraw; i++)
-            {
-                if(assoc[listdl[i]] == null)
-                {
-                    listdl[num++] = listdl[i];
-                }
-            }
-            numDraw = num;
-        }
-
-    } // cutByAssociationTo() -----------------------------------------------
-
-
-
-    private int cutByAssociation(int numDraw, int[] listdl, int[][] id)
-    {
-        // aaargh danger modifies input listdl
-        makeDrawList();
-        boolean[] drawn = isDrawn();
-        int num = 0;
-
-        for(int i = 0; i < numDraw; i++)
-        {
-            int list = listdl[i];
-            if(id[list] != null)
-            {
-                for(int j = 0; j < id[list].length; ++j)
-                {
-                    int inverse = indexFromId.get(id[list][j]);
-                    if(inverse != NO_INVERSE && drawn[inverse])
-                        listdl[num++] = list;
-                    break;
-                }
-            }
-        }
-        numDraw = num;
-        return numDraw;
-    }
-
-    /**
-     * return graphics attributes corresponding to layer =0 frame layer =1 hits
-     * or tracks type=0 noise type=1 non-noise
-     */
-    public ADrawParameters getDrawParameters(int layer, int type)
-    {
-        boolean draw = true;
-        int singleColor = -1;
-        int size = 10;
-        int lineWidth = 1;
-        int symbol = 0;
-        int frameWidth = 0;
-        boolean forceSymbols = false;
-        int minSize = 0;
-
-        AParameter forceSymbolsPar = parameterStore.getUnknown(PARAMETER_GROUP, "ForceSymbols");
-        AParameter symbolSize = parameterStore.getUnknown(PARAMETER_GROUP, "SymbolSize");
-        AParameter symbolType = parameterStore.getUnknown(PARAMETER_GROUP, "Symbol");
-        AParameter lineWidthPar = parameterStore.getUnknown(PARAMETER_GROUP, "LineWidth");
-
-        if(forceSymbolsPar != null)
-        {
-            forceSymbols = forceSymbolsPar.getStatus();
-            if(forceSymbols && symbolSize != null)
-                minSize = Math.max(symbolSize.getI(), 1);
-        }
-
-        if(symbolSize != null)
-            size = symbolSize.getI();
-        if(symbolType != null)
-            symbol = symbolType.getI();
-        if(lineWidthPar != null)
-            lineWidth = lineWidthPar.getI();
-        //for etmiss, line width scaled by energy by using the stroke setting
-        if(lineWidth<=0)
-            lineWidth = 1;
-
-        if(type == 0)
-        {
-            AParameter noiseSymbolType = parameterStore.getUnknown(PARAMETER_GROUP, "Noise");
-
-            if(noiseSymbolType != null && noiseSymbolType.getStatus())
-            {
-                AParameter noiseSymbolSize = parameterStore.getUnknown(PARAMETER_GROUP, "NoiseSize");
-                AParameter noiseWidth = parameterStore.getUnknown(PARAMETER_GROUP, "NoiseWidth");
-
-                if(noiseSymbolSize != null)
-                    size = noiseSymbolSize.getI();
-                if(noiseWidth != null)
-                    lineWidth = noiseWidth.getI();
-                symbol = noiseSymbolType.getI();
-            }
-            else
-            {
-                AParameter noiseWidth = parameterStore.getUnknown(PARAMETER_GROUP, "NoiseWidth");
-
-                if(noiseWidth != null && noiseWidth.getStatus())
-                    lineWidth = noiseWidth.getI();
-            }
-        }
-
-        if(layer == 0)
-        {
-            AParameter frameWidthPar = parameterStore.getUnknown(PARAMETER_GROUP, "FrameWidth");
-            if(parameterStore.get(PARAMETER_GROUP, "Frame")!=null)
-            {
-                boolean drawFrame = parameterStore.get(PARAMETER_GROUP, "Frame").getStatus();
-                singleColor = parameterStore.get(PARAMETER_GROUP, "Frame").getI();
-                //only draw frames for Grey/BW color maps if is selected to draw frames
-                if(drawFrame && AColorMap.drawFrames())    
-                {
-                    if(frameWidthPar != null)
-                        frameWidth = frameWidthPar.getI();
-                }
-            }
-        }
-        return new ADrawParameters(draw, singleColor, size, lineWidth,
-                frameWidth, symbol, forceSymbols, minSize, getDrawOrFill());
-    }
-
-    /** Provide an array of indices with increasing a,
-     *  used e.g. by coloring.
-     *  @param a
-     *  @return
-     */
-    protected int[] indexBy(double[] a)
-    {
-        int[] index = new int[a.length];
-
-        for(int i = 0; i < a.length; i++)
-            index[i] = i;
-        // this is only cosmetic improvement in appearance so if input data too
-        // large simply return null
-        if(a.length > 1000)
-            return index;
-
-        for(int i = 0; i < a.length - 1; i++)
-            for(int j = i + 1; j < a.length; j++)
-                if(a[index[i]] > a[index[j]])
-                {
-                    int temp = index[i];
-                    index[i] = index[j];
-                    index[j] = temp;
-                }
-        return index;
-    }
-
-    /**
-     * Colour items in this class by the associated class that is given by 
-     * association. The difference with the method colorByAssociation is that 
-     * colorBy is called on the target class, while colorByAssociation is called 
-     * on the source class of the colour. (i.e. colour hits by tracks invokes
-     * AHitData.colorBy("Tracks"), calling ATrackData.colourByAssociation(...)
-     * internally.
-     *
-     * @param otherClass source class for the colours 
-     */
-    protected void colorBy(String otherClass)
-    {
-        AData source = eventManager.getCurrentEvent().get(otherClass);
-        byte unconnected = (byte) parameterStore.get(PARAMETER_GROUP, "Unconnected").getI();
-        if(source != null)
-        {
-            byte shared = (byte) parameterStore.get(PARAMETER_GROUP, "Shared").getI();
-            String assocKey = getFullName();
-            int[][] assoc = event.getAssociationManager().get(otherClass, assocKey); 
-            source.makeDrawList();
-            source.color();
-            source.colorByAssociation(this, assoc, unconnected, shared);
-
-        }
-        else
-        {
-            /*
-             * given association doesn't exist. for instance, there are only
-             * hits in the event file and nothing to associate them with.
-             * if some 'association colouring' (e.g. colour by reconstructed
-             * track) is selected in that case, the items appear all in
-             * 'unconnected' colour. another option is to colour them in
-             * constant colour, simply by calling only colorByConstant();
-             */
-            for(int i = 0; i < numData; i++)
-            {
-                color[i] = (byte) unconnected;
-            }
-        }
-
-    } // colorBy() ----------------------------------------------------------
-
-    protected void colorByObjects()
-    {
-        // initially set all with unconnected color, connected will be changed later
-        byte unconnectedColor = (byte) parameterStore.get(PARAMETER_GROUP, "Unconnected").getI();
-        setColor(unconnectedColor);
-        String[] objectList = new String[] {"Jet", "BJet", "TauJet", "Photon", "Electron", "Muon"};
-        for(int i=0; i<objectList.length; ++i)
-        {
-            if (parameterStore.get("Data", objectList[i]).getStatus())
-                colorByObject(getObjectCollection(objectList[i]));
-        }
-    }
-
-    private void colorByObject(AData objectData)
-    {
-        if(objectData == null)
-        {
-            return;
-        }
-
-        AEnumeratorParameter listBox = (AEnumeratorParameter) parameterStore.get(getName(), getName() + "Collections");
-        String selectedCollection = listBox.getCurrentText();
-        if(!("All".equals(selectedCollection) || "None".equals(selectedCollection)))
-        {
-            String assName = getName();
-            if(getName().indexOf("Track") >= 0)
-                assName = "Track";
-            AAssociation assoc = event.getAssociationManager().getAssociation(objectData.getName()+objectData.getStoreGateKey(), assName);
-            if(assoc != null)
-            {
-                if(!(assoc instanceof AObjectsAssociation))
-                {
-                    logger.warn(getClass().getName() + ":  no objects association is found!");
-                    return;
-                }
-                int[][] associatedIndex = ((AObjectsAssociation) assoc).getData();
-                String[] associatedKey = ((AObjectsAssociation) assoc).getKey();
-
-                // if currently selected collection is included in associatedKey, show associations
-                // otherwise using the color set for unconnected cluster/track
-                int objectIndex = 0;
-                for(int i=0; i<associatedKey.length;)
-                {
-                    // objectIndex is the index of the associated object (e.g. Electron)
-                    // associatedIndex[objectIndex][] contain the index of the associated Cluster/Track
-                    if ("none".equals(associatedKey[i]))
-                    {
-                        i++;
-                        objectIndex++;
-                    }
-                    else
-                    {
-                        if (associatedKey[i].equals(selectedCollection))
-                            for(int j=0; j<associatedIndex[objectIndex].length; ++j)
-                                setColor(associatedIndex[objectIndex][j], objectData.getColor()[objectIndex]);
-                        i+=associatedIndex[objectIndex++].length;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * The same as name, but if it's multiple collection datatype, the full
-     * name is getName() + getStoreGateKey()
-     * @return String
-     */
-    public String getFullName()
-    {
-        String k = this.getStoreGateKey();
-        String full = this.getName() + (k != null ? k : "");
-        return full;
-    }
-
-    public int getIdFromIndex(int index)
-    {
-        return id[index];
-    }
-
-    // sets the color of each hit
-    protected final void color()
-    {
-        // standard scheme
-        internalColor();
-        int[][] temp = AListManager.getInstance().getColorMapping(this);
-        int[] index = temp[0];
-        int[] c = temp[1];
-        // now add in colors specified in lists
-
-        for(int i = 0; i < index.length; ++i)
-            if(c[i] >= 0)
-                color[index[i]] = (byte) c[i];
-        int others = AListManager.getInstance().getColorOfOthers();
-        // need to check if this data could have been picked
-        // so that coloring of hits by STr works even if STr
-        // is not in list because it wasn't on....
-        if(others >= 0 && parameterStore.get("Data", getName()).getStatus())
-        {
-            boolean[] inList = new boolean[numData];
-            for(int i = 0; i < index.length; ++i)
-                inList[index[i]] = true;
-
-            for(int i = 0; i < numData; ++i)
-                if(!inList[i])
-                    color[i] = (byte) others;
-        }
-
-
-
-    }
-
-
-    /** Type = e.g. noise/good */
-    public int[] getType(int[] dl)
-    {
-        return new int[dl.length];
-    }
-
-    // get data representation in user space in different projections
-    // empty by default
-    protected ACoord getYXUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getRZUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getYZUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getXZUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord get3DUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getUserUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getUserUser2()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getFRUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getFZUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    protected ACoord getVPUser()
-    {
-        return ACoord.NO_DATA;
-    }
-
-    public int getNumTypes()
-    {
-        return 1;
-    }
-
-
-    /** The only method from AListProcessor interface. */
-    @Override
-    public Action[] getActions(Collection nodes)
-    {
-        return new Action[0];
-    } // getActions() -------------------------------------------------------
-
-    /**
-     * Function to split a list of items seperated by -
-     */
-    public String[] splitItems(String origItems)
-    {
-        char[] origItemsChar = origItems.toCharArray();
-        int origItemsLength = origItems.length();
-        int spacePosition=0, noOfItems=0, count=0;
-        //calculate the number of items
-        for(int i=0;i<origItemsLength;i++)
-            if((i!=0 && origItemsChar[i]=='-') || (i==origItemsLength-1 && origItemsChar[i]!='-'))
-                noOfItems++;
-        //split up the array into newItems
-        if(noOfItems>0)
-        {
-            //string array to hold individual items
-            String[] newItems=new String[noOfItems];
-            for(int i=0;i<origItemsLength;i++)
-            {
-                if(i==0 && origItemsChar[i]=='-')
-                    spacePosition=i+1;//ignore first'-'
-                else if(i==origItemsLength-1 && origItemsChar[i]!='-')
-                {
-                    //store the text from previous '-' upto end if doesn't end with '-'
-                    newItems[count]=origItems.substring(spacePosition,i+1);
-                    spacePosition=i+1;
-                    count++;                    
-                }
-                else if(origItemsChar[i]=='-' && i!=0)
-                {
-                    //store the text from previous '-' upto current '-'
-                    newItems[count]=origItems.substring(spacePosition,i);
-                    spacePosition=i+1;
-                    count++;
-                }
-            }
-            return newItems;
-        }
-        else
-            return null;
-    }   
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEpsImageProducer.java b/graphics/AtlantisJava/src/atlantis/event/AEpsImageProducer.java
deleted file mode 100644
index eef4e9615f1f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEpsImageProducer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package atlantis.event;
-
-import java.io.File;
-import java.io.IOException;
-
-import atlantis.utils.*;
-import atlantis.canvas.ACanvas;
-import atlantis.graphics.encoders.AImageEncoder;
-import java.awt.Dimension;
-
-
-/** 
- * Implements ANewEventListener and creates EPS files
- * upon each newEvent call. A scale factor allows to e.g. produce thumbnails by
- * scaling down image. The image producer works in two modes:
- * a) If no file name is given, a file name will be generated from run and event
- *    number. In case the output file exists, no file is created but a warning is written out.
- * b) If a file name is given, a temporary file is generated first, and then
- *    renamed to the given file name. If renaming fails, a warning is written out
- *    and the temporary file is deleted.
- * 
- * @author Sebastian Boeser
- */
-
-public class AEpsImageProducer extends AImageProducer
-{
-	// the logger
-	private static final ALogger logger = ALogger.getLogger(AEpsImageProducer.class);
-
-	// Our image encode
-	private final AImageEncoder imageEncoder = new AImageEncoder();
-
-	/**
-	 * Fully qualified constructor, 
-	 * intializing all the attributes and check the parameters validity
-	 * @param dir the directory in which to save all the files
-	 * @param size the dimensions of the images
-	 * @param scale the factor by which to scale the images
-	 * @param fileName if not null, that file will be overwritten for each event
-	 * @throws InstantiationException if we fail to create the object
-	 */
-	public AEpsImageProducer(String dir, Dimension size, double scale, String fileName) throws InstantiationException
-	{
-		super(dir, size, scale, fileName);
-	}
-
-	/**
-	 * Called whenever a new event appears. Store an EPS in the directory,
-	 * either with a generated file name  (no overwrite) or with a fixed file name (overwrite)
-	 * @param event the event from which to generate the EPS
-	 */
-	public void newEvent(AEvent event)
-	{
-
-		//If auto had been set for size (height is negative), get height from Canvas
-		if (imageSize.height < 0) imageSize.setSize(imageSize.width, ACanvas.getCanvas().getRespectiveHeight(imageSize.width));
-
-		//Create the file to write the data into
-		File outFile;
-		//If we don't have a fixed file name,
-		//generate a unique one based on run- and event number
-		if (fixedFileName==null){
-
-			//Now construct all the full path for the file we want to save
-			String outFileName = String.format("%s%s%s.eps",directory,
-					System.getProperty("file.separator"),
-					getEventFileName(event));
-
-			// Create file handles to the file and check if it exists
-			outFile = new File(outFileName);
-			//Do not overwrite any existing files
-			if (outFile.exists()) {
-				logger.warn("File "+ outFileName +" already exists - will not overwrite");
-				return;
-			}
-			//otherwise generate a temporary file first,
-			//then move it in place later
-		} else {
-			//make a temporary file in the final directory
-			try {
-				outFile = File.createTempFile(filePrefix+"_", ".eps",directory);
-			} catch (IOException ex) {
-				logger.warn("Failed to create temporary file in "+directory.getAbsolutePath());
-				return;
-			}
-		}
-
-		//Now try saving the acquired data,
-		//and if it shall go to a fixed file, move it there
-		try {
-			imageEncoder.saveEPS(imageSize.width, imageSize.height, outFile);
-
-			//move to fixed file name if requested
-			if (fixedFileName != null){
-
-				//Get a handle to the final destination
-				File fixedFile = new File(directory,fixedFileName);
-
-				//delete target if exits
-				if (fixedFile.exists() && (!fixedFile.delete()))
-					throw new IOException("Failed to delete existing file "+fixedFile.getAbsolutePath());
-
-				//And move the new file in place
-				if (!outFile.renameTo(fixedFile))
-					throw new IOException("Failed to rename temporary file to "+fixedFile.getAbsolutePath());
-			}
-		} catch (IOException ioe) {
-			//If we fail, throw a warning
-			logger.warn("Could not save EPS files for history\n"+ioe.toString());
-		} finally {
-			//In any case, delete the pngFile, if it was just temporary
-			if (fixedFileName != null) outFile.delete();
-		}
-
-
-	} 	
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEvent.java b/graphics/AtlantisJava/src/atlantis/event/AEvent.java
deleted file mode 100755
index beeae482f160..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEvent.java
+++ /dev/null
@@ -1,1051 +0,0 @@
-package atlantis.event;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-import java.util.TreeMap;
-import java.util.LinkedHashMap;
-import java.util.Set;
-
-import atlantis.list.AListManager;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-import atlantis.data.*;
-import atlantis.globals.AGlobals;
-
-/**
- * AEvent is the Container for an ATLAS physics event.
- * It is identified by deriving from AEventInfo and holds a map of all the
- * data that is available in the event.
- *
- */
-public class AEvent extends AEventInfo
-{
-    private static ALogger logger = ALogger.getLogger(AEvent.class);
-    
-    // container with all datatypes within the event
-    private Map<String,AData> data = new HashMap<String,AData>();
-    // storegate keys for collections-aware datatypes
-    // Use parameterized type but keep Hashtable and Vector instead of HashMap 
-    // and ArrayList until I work out if thread safety is an issue. - Ben 31/1/11
-    private Hashtable<String,Vector<String>> collections = new Hashtable<String,Vector<String>>(); 
- 
-    private AAssociationManager assocmgr = new AAssociationManager();
-    
-    private static APar parameterStore = APar.instance();
-
-  /**
-   * @param eventNumber the event number
-   * @param runNumber the run number
-   * @param dateTime  the date and time of the event
-   * @param sourceName the name of the event source
-   * @param lumiBlock the lumiBlock number
-   */
-  public AEvent(String eventNumber, String runNumber, String dateTime, String sourceName, String lumiBlock, String eventProperties) {
-    
-    //Initialize event information
-    super(Integer.parseInt(eventNumber), Integer.parseInt(runNumber), dateTime, sourceName, lumiBlock, eventProperties);
-
-  } // AEvent() -----------------------------------------------------------
-  
-  /**
-   * @return the hashtable of available collections
-   */ 
-  public Hashtable<String,Vector<String>> getCollections(){
-        return collections;
-  } // getCollections() ---------------------------------------------------
-
-
-    public void add(AData dataSet) throws AAtlantisException
-    {
-        String name = dataSet.getClass().getName();
-
-        int index = name.lastIndexOf('.');
-        if(index >= 0 && index < name.length() - 1)
-        {
-            name = name.substring(index + 1);
-        }
-
-        // remove the "A" and "Data"
-        name = name.substring(1, name.length() - 4);
-        String newKey = dataSet.getStoreGateKey();
-
-        if(newKey == null)
-        {
-            // no storegatekey comes with this dataset (datatype)
-            // hash data shouldn't contain entry under sourceName key, if it does
-            // the old one is replaced
-            data.put(name, dataSet);
-        }
-        else
-        {
-            // just checking for the same key at the datatypes in the event
-            if(data.containsKey(name + newKey))
-            {
-                String msg = "Error - datatype " + name + " with storeGateKey\n" +
-                newKey + " already exists in this event.";
-                AAtlantisException aaex = new AAtlantisException(msg);
-                // Stuck the trace in the logging for good measure - AD
-                logger.error("\n" + msg, aaex);
-                throw aaex;
-            }
-            else
-            {
-                data.put(name + newKey, dataSet);
-                // saving key of a particular sourceName (datatype)
-                Vector<String> keys = new Vector<String>();
-                if(collections.containsKey(name))
-                {
-                    keys = collections.get(name);
-                    if(keys.contains(newKey))
-                    {
-                        String msg = "Previously read datatype " + name + "\n" +
-                        "(different collection) contained " +
-                        "storeGateKey " + newKey + ". Error.";
-                        AAtlantisException aaex = new AAtlantisException(msg);
-                        logger.error(msg, aaex);
-                        throw aaex;
-                    }
-                    else
-                    {
-                        keys.add(newKey);
-                        collections.put(name, keys);
-                    }
-                }
-                else
-                {
-                    keys.add(newKey);
-                    collections.put(name, keys);
-                }
-            }
-        }
-
-    } // add() ---------------------------------------------------------------
- 
-
-
- 
-
-    // < get<DATA_TYPE> methods > -------------------------------------------
-
-
-    public AData get(String name)
-    {
-        return data.get(name);
-    }
-
-    public AData[] getData()
-    {
-        AData[] aData = new AData[data.size()];
-        Collection<AData> collection = data.values();
-        return collection.toArray(aData);
-    }
-
-
-    /**
-     * AJetData getJetData()
-     * returns collection of Jet datatype according to selected
-     * collection (Jet storeGateKey) in ATLAS -> Jet -> Jet Collection
-     * if 'all' (or 'none') is selected - returns null (no association will
-     * be taken into account)
-     * @return AJetData
-     */
-    public AJetData getJetData()
-    {
-        AEnumeratorParameter listBox =
-             (AEnumeratorParameter) parameterStore.get("Jet", "JetCollections");
-        String selectedKey = listBox.getCurrentText();
-        if("All".equals(selectedKey) || "None".equals(selectedKey))
-{
-            logger.debug("AEvent.getJetData(): " + selectedKey +
-                    " is selected in Jet->JetCollection, no association " +
-                    " to Jet is taken into account, null is returned");
-            return null;
-        }
-        else
-        {
-            AJetData jet = (AJetData) data.get("Jet" + selectedKey);
-            return jet;
-        }
-    }
-
-
-    // can combine with the other methods (e.g. getClusterData)
-    public AData getData(String type)
-    {
-        AEnumeratorParameter listBox =
-             (AEnumeratorParameter) parameterStore.get(type, type+"Collections");
-        String selectedKey = (listBox == null) ? "" : listBox.getCurrentText();
-        if("All".equals(selectedKey) || "None".equals(selectedKey)) {
-
-            logger.debug("AEvent.getData(String type): " + selectedKey +
-                    " is selected in " + type + "->" + type + " Collections, " +
-                    "no association to " + type + " is taken into account.");
-
-            return null;
-        }
-        else
-        {
-            return data.get(type + selectedKey);
-        }
-    }
-
-    /**
-     * AClusterData getClusterData()
-     * returns collection of Cluster datatype according to selected
-     * collection (Cluster storeGateKey) in ATLAS -> Cluster -> Cluster Collection
-     * if 'all' (or 'none') is selected - returns null (no association will
-     * be taken into account)
-     * @return AClusterData
-     */
-    public AClusterData getClusterData()
-    {
-        AEnumeratorParameter listBox =
-             (AEnumeratorParameter) parameterStore.get("Cluster", "ClusterCollections");
-        String selectedKey = listBox.getCurrentText();
-        if ("All".equals(selectedKey) || "None".equals(selectedKey)) {
-
-            logger.debug("AEvent.getClusterData(): " + selectedKey +
-                    " is selected in Cluster->ClusterCollection, no association " +
-                    " to Cluster is taken into account, null is returned");
-
-            return null;
-        }
-        else
-        {
-            AClusterData cluster = (AClusterData) data.get("Cluster" + selectedKey);
-            return cluster;
-        }
-    }
-
-
-    /**
-     * ATrackData getTrackData(String type)
-     * type is InDetTrack, MuonTrack - the internal datatype sourceName for Track
-     * returns collection of Track datatype according to selected
-     * collection (Track storeGateKey) in InDet -> Track -> TrackCollection
-     * if 'all' (or 'none') is selected - returns null (no association will
-     * be taken into account)
-     * @param type String
-     * @return ATrackData
-     */
-    public ATrackData getTrackData(String type)
-    {
-        AEnumeratorParameter listBox =
-             (AEnumeratorParameter) parameterStore.get(type, type + "Collections");
-        String selectedKey = listBox.getCurrentText();
-        if("All".equals(selectedKey) || "None".equals(selectedKey))
-        {
-            logger.debug("AEvent.getTrackData(" + type + "): " + selectedKey +
-                    " is selected in Track->TrackCollection, no association " +
-                    " to Track is taken into account, null is returned");
-            return null;
-        }
-        else
-        {
-            ATrackData track = (ATrackData) data.get(type + selectedKey);
-            return track;
-        }
-    }
-
-
-    /**
-     * ATrackData getTrackData(String type, String key)
-     * returns specified collection of Track datatype if it exists
-     * @param type String
-     * @param key String
-     * @return ATrackData
-     */
-    public ATrackData getTrackData(String type, String key)
-    {
-        Vector<String> keys = collections.get(type);
-        if(keys == null) {
-            logger.warn("AEvent: " + type + " datatype doesn't exist " +
-                    "in current event");
-            return null;
-        }
-        else
-        {
-            if(keys.contains(key))
-            {
-                return (ATrackData) data.get(type + key);
-            }
-            else {
-
-                logger.warn("AEvent: " + type + " datatype: storeGateKey " +
-                        key + " doesn't exist in current event");
-                return null;
-            }
-        }
-    }
-
-
-
-
-    public ASTrData getSTrData()
-    {
-        return (ASTrData) data.get("STr");
-    }
-
-    public ASNPData getSNPData()
-    {
-        return (ASNPData) data.get("SNP");
-    }
-
-    public APixelClusterData getPixelClusterData()
-    {
-        return (APixelClusterData) data.get("PixelCluster");
-    }
-    
-    public ASiClusterData getSiClusterData()
-    {
-        return (ASiClusterData) data.get("SiCluster");
-    }
-
-    public AS3DData getS3DData()
-    {
-        return (AS3DData) data.get("S3D");
-    }
-
-    public ATRTData getTRTData()
-    {
-        return (ATRTData) data.get("TRT");
-    }
-
-    public ALArData getLArData()
-    {
-        return (ALArData) data.get("LAr");
-    }
-
-    public ATILEData getTILEData()
-    {
-        return (ATILEData) data.get("TILE");
-    }
-
-    public AHECData getHECData()
-    {
-        return (AHECData) data.get("HEC");
-    }
-
-    public AFCALData getFCALData()
-    {
-        return (AFCALData) data.get("FCAL");
-    }
-    
-    public AMBTSData getMBTSData()
-    {
-        return (AMBTSData) data.get("MBTS");
-    }
-
-    //Because some things need to access the data before the parameters are filled, another method
-    //for accessing the data has been added. This method first checks the list of available storegate keys
-    //and see's if there is one starting with MDT. As the dataType + storegatekey is hard coded into how
-    //the hash map keys are created this should be a stable way of doing it. If there are multiple 
-    //results for the search, it then checks which one is currently selected by the user. 
-
-    public AMDTData getMDTData()
-    {
-	Vector<String> storeGateKeys = new Vector<String>();
-	Set<String> keys = data.keySet();
-	for(String entry : keys){
-	    if(entry.startsWith("MDT")){
-		storeGateKeys.add(entry);
-	    }
-	}
-	if(storeGateKeys.size() == 1){
-	    return (AMDTData) data.get(storeGateKeys.get(0));
-	}else{
-
-	    AEnumeratorParameter listBox =
-		(AEnumeratorParameter) parameterStore.get("MDT", "MDTCollections");
-	    String selectedKey = listBox.getCurrentText();
-	    if("All".equals(selectedKey) || "None".equals(selectedKey))
-		{
-		    logger.debug("AEvent.getMDTata(): " + selectedKey +
-				 " is selected in MDT->MDTCollection, no association " +
-				 " to MDT is taken into account, null is returned");
-		    return null;
-
-		}
-	    else{
-		    AMDTData mdt = (AMDTData) data.get("MDT" + selectedKey);
-		    return mdt;
-	    }
-
-
-	}
-
-    }
-
-    //See description for getMDTData
-
-    public ARPCData getRPCData()
-    {
-
-	Vector<String> storeGateKeys = new Vector<String>();
-	Set<String> keys = data.keySet();
-	for(String entry : keys){
-	    if(entry.startsWith("RPC")){
-		storeGateKeys.add(entry);
-	    }
-	}
-	if(storeGateKeys.size() == 1){
-	    return (ARPCData) data.get(storeGateKeys.get(0));
-	}else{
-
-	    AEnumeratorParameter listBox =
-		(AEnumeratorParameter) parameterStore.get("RPC", "RPCCollections");
-	    String selectedKey = listBox.getCurrentText();
-	    if("All".equals(selectedKey) || "None".equals(selectedKey))
-		{
-		    logger.debug("AEvent.getRPCData(): " + selectedKey +
-				 " is selected in RPC->RPCCollection, no association " +
-				 " to RPC is taken into account, null is returned");
-		    return null;
-
-		}
-	    else{
-		    ARPCData rpc = (ARPCData) data.get("RPC" + selectedKey);
-		    return rpc;
-	    }
-
-
-	}
-    }
-    //See description for getMDTData
-
-    public ATGCData getTGCData()
-    {
-	Vector<String> storeGateKeys = new Vector<String>();
-	Set<String> keys = data.keySet();
-	for(String entry : keys){
-	    if(entry.startsWith("TGC")){
-		storeGateKeys.add(entry);
-	    }
-	}
-	if(storeGateKeys.size() == 1){
-	    return (ATGCData) data.get(storeGateKeys.get(0));
-	}else{
-
-	    AEnumeratorParameter listBox =
-		(AEnumeratorParameter) parameterStore.get("TGC", "TGCCollections");
-	    String selectedKey = listBox.getCurrentText();
-	    if("All".equals(selectedKey) || "None".equals(selectedKey))
-		{
-		    logger.debug("AEvent.getTGCData(): " + selectedKey +
-				 " is selected in TGC->TGCCollection, no association " +
-				 " to TGC is taken into account, null is returned");
-		    return null;
-
-		}
-	    else{
-		    ATGCData tgc = (ATGCData) data.get("TGC" + selectedKey);
-		    return tgc;
-	    }
-
-
-	}
-    }
-    //See description for getMDTData
-
-    public ACSCDData getCSCDData()
-    {
-	Vector<String> storeGateKeys = new Vector<String>();
-	Set<String> keys = data.keySet();
-	for(String entry : keys){
-	    if(entry.startsWith("CSC")){
-		storeGateKeys.add(entry);
-	    }
-	}
-	if(storeGateKeys.size() == 1){
-	    return (ACSCDData) data.get(storeGateKeys.get(0));
-	}else{
-
-	    AEnumeratorParameter listBox =
-		(AEnumeratorParameter) parameterStore.get("CSC", "CSCCollections");
-	    String selectedKey = listBox.getCurrentText();
-	    if("All".equals(selectedKey) || "None".equals(selectedKey))
-		{
-		    logger.debug("AEvent.getCSCData(): " + selectedKey +
-				 " is selected in CSC->CSCCollection, no association " +
-				 " to CSC is taken into account, null is returned");
-		    return null;
-
-		}
-	    else{
-		    ACSCDData csc = (ACSCDData) data.get("CSC" + selectedKey);
-		    return csc;
-	    }
-
-
-	}
-    }
-
-    public ASVxData getSVxData()
-    {
-        return (ASVxData) data.get("SVx");
-    }
-
-    public ARVxData getRVxData()
-    {     
-        AEnumeratorParameter listBox =
-             (AEnumeratorParameter) parameterStore.get("RVx", "RVxCollections");
-        String selectedKey = listBox.getCurrentText();
-        if ("All".equals(selectedKey)) {
-
-            logger.debug("AEvent.getRVxData(): " + selectedKey +
-                    " is selected in InDet->RecVertex, no association " +
-                    " to vertex is taken into account, null is returned");
-
-            return null;
-        } else if ("None".equals(selectedKey)) {
-            // Return  collection without for backwards compatibility
-            return (ARVxData) data.get("RVx");
-        } else
-        {
-            ARVxData rvx = (ARVxData) data.get("RVx" + selectedKey);
-            return rvx;
-        }
-    }
-
-    public ATrigS3DData getTrigS3DData()
-    {
-        return (ATrigS3DData) data.get("TrigS3D");
-    }
-
-    public ALVL1TriggerTowerData getLvl1TriggerTowerData()
-    {
-        return (ALVL1TriggerTowerData) data.get("LVL1TriggerTower");
-    }
-
-    public ALVL1ResultData getLvl1ResultData()
-    {
-        return (ALVL1ResultData) data.get("LVL1Result");
-    }
-
-    public ALVL1JetElementData getLvl1JetElementData()
-    {
-        return (ALVL1JetElementData) data.get("LVL1JetElement");
-    }
-    
-    public ATriggerInfoData getTriggerInfoData()
-    {
-        return (ATriggerInfoData) data.get("TriggerInfo");
-    }
-
-    /**
-     * This function returns the names currently selected for a certain collection
-     * which has its data draw status set to true 
-     * @param collectionType String sourceName of the collection
-     * @return string of collection names length 0 if none in event
-     */
-    public String[] getActiveCollectionNames(String collectionType)
-    {
-    //LVL1Result is not on the Data list as it is always on hence check this first
-    boolean collectionStatus = collectionType.equals("LVL1Result");
-    if(!collectionStatus)
-        collectionStatus=parameterStore.get("Data", collectionType).getStatus();
-    if (collectionStatus)
-    {
-    	return getCollectionNames(collectionType);
-    }
-    else
-        return new String[0];
-    }
-
-    /**
-     * This function returns the names currently selected for a certain collection
-     * @param collectionType String sourceName of the collection
-     * @return string of collection names length 0 if none in event
-     */
-    public String[] getCollectionNames(String collectionType)
-    {
-    String[] col;
-    Vector<String> keys = collections.get(collectionType);
-    if (keys != null)
-    {
-        String[] collec = keys.toArray(new String[keys.size()]);
-        AEnumeratorParameter listBox = (AEnumeratorParameter) parameterStore.get(collectionType, collectionType + "Collections");
-        String currentSelection = listBox.getCurrentText();
-        int count=0;
-        //count how many items in list
-        for (int i = 0; i < collec.length; i++)
-        {
-            if ("All".equals(currentSelection) || collec[i].equals(currentSelection))
-                count++;
-        }
-        col=new String[count];
-        count=0;
-        //now save items into string array
-        for (int i = 0; i < collec.length; i++)
-        {
-            if ("All".equals(currentSelection) || collec[i].equals(currentSelection))
-            {
-                col[count] = collectionType + collec[i];
-                count++;
-            }
-        }
-        return col;
-    }
-    else
-        return new String[0];
-    }
-
-    // </ get<DATA_TYPE> methods > --------------------------------------------
-
-    public List<ACalorimeterData> getCalorimeters()
-    {
-        List<ACalorimeterData> v = new ArrayList<ACalorimeterData>();
-        Iterator<AData> i = data.values().iterator();
-        while(i.hasNext())
-        {
-            AData data = i.next();
-            if(data instanceof ACalorimeterData)
-            {
-                ACalorimeterData calorimeter = (ACalorimeterData) data;
-                if(parameterStore.get("Data", calorimeter.getCalorimeterName()).getStatus() &&
-                        (parameterStore.getUnknown("Det", calorimeter.getCalorimeterName() + "Fill") == null
-                                || parameterStore.get("Det", calorimeter.getCalorimeterName() + "Fill").getStatus()))
-                {
-                    v.add(calorimeter);
-                }
-            }
-        }
-        return v;
-
-    } // getCalorimeters() ---------------------------------------------------
-
-
-
-    public List<AData> getHitsAndTracks(AProjection projection)
-    {
-        int mode = parameterStore.get(projection.getName(), "Mode").getI();
-        String[][] det = new String[0][0];
-        String[] simTr = new String[0];
-        String[] recTr = new String[0];
-        String[] hits = new String[0];
-        String[] aod = new String[0];
-
-        if(mode == 0 || projection instanceof AProjectionVP
-                || projection instanceof AProjectionLegoPlot)
-        {
-            simTr = new String[] { "STr", "SNP", "SMTr" };
-            recTr = new String[] { "InDetSegment", "MuonSegment", "G4Step",
-                                   "InDetTrack", "MuonTrack" };
-
-            aod = new String[] {"CompositeParticle", "BJet", "TauJet", "Photon", "Electron", "Muon" };
-
-            if(parameterStore.get("InDetDrawingOrder", "SpacePoints").getI() == 0)
-            {
-                hits = new String[] {"UserHit", "RVx", "TRT", "SiCluster",
-                        "SiClusterRDO", "S3D", "PixelCluster", "PixelRDO", "TrigS3D",
-                        "MDT", "CSCD", "CSC", "RPC", "R3D", "TGC", "T3D", "SVx",
-                        "Jet", "EmTauROI", "Particle", "Cluster", "ETMis",
-                        "JetROI", "MuonROI", "LVL1TriggerTower", "LVL1JetElement"};
-            }
-            else
-            {
-                hits = new String[] {"UserHit", "RVx", "TRT", "SiCluster",
-                        "SiClusterRDO", "TrigS3D", "S3D", "PixelCluster", "PixelRDO",
-                        "MDT", "CSCD", "CSC", "RPC", "R3D", "TGC", "T3D", "SVx",
-                        "Jet", "EmTauROI", "Particle", "Cluster", "ETMis",
-                        "JetROI", "MuonROI", "LVL1TriggerTower", "LVL1JetElement"};
-            }
-        }
-        else if(projection instanceof AProjectionYX
-                || projection instanceof AProjectionFR)
-        {
-            if(mode >= AProjectionYX.MODE_MDT_INNER && mode <= AProjectionYX.MODE_MDT_OUTER)
-            {
-                simTr = new String[] { "SMTr", "SMTr" };
-                recTr = new String[] { "MuonTrack", "MuonSegment" };
-                if(mode == AProjectionYX.MODE_MDT_INNER)
-                {
-                    hits = new String[] { "MDT", "CSCD", "CSC" };
-                }
-                else
-                {
-                    hits = new String[] { "MDT" };
-                }
-            }
-            else if(mode < AProjectionYX.MODE_MDT_INNER)
-            {
-                simTr = new String[] { "SMTr", "SMTr" };
-                recTr = new String[] { "MuonTrack", "MuonSegment" };
-                hits = new String[] { "TGC", "T3D" };
-            }
-        }
-        else if(projection instanceof AProjectionFZ)
-        {
-            if(mode >= 4)
-            {
-                simTr = new String[] { "SMTr", "SMTr" };
-                recTr = new String[] { "MuonTrack", "MuonSegment" };
-                hits = new String[] { "MDT" };
-            }
-            else
-            {
-                simTr = new String[] { "SMTr", "SMTr" };
-                recTr = new String[] { "MuonTrack", "MuonSegment" };
-                hits = new String[] { "RPC", "R3D" };
-            }
-        }
-
-        if(parameterStore.get("InDetDrawingOrder", "SpacePointsTracks").getI() == 0)
-        {
-            // Simulated tracks, reconstructed tracks, hits
-            det = new String[][] { simTr, recTr, hits, aod };
-        }
-        else if(parameterStore.get("InDetDrawingOrder", "SpacePointsTracks").getI() == 1)
-        {
-            // Simulated tracks, hits, reconstructed tracks
-            det = new String[][] { simTr, hits, recTr, aod };
-        }
-        else
-        {
-            // Reconstructed tracks, hits, simulated tracks
-            det = new String[][] { recTr, hits, simTr, aod };
-        }
-
-        AEnumeratorParameter listBox = null;
-        List<AData> v = new ArrayList<AData>();
-        for(int i = 0; i < det.length; ++i)
-        {
-            for(int j = 0; j < det[i].length; ++j)
-            {
-                if(collections.containsKey(det[i][j]))
-                {
-                    Vector<String> keys = collections.get(det[i][j]);
-                    String[] array;
-                    array = keys.toArray(new String[keys.size()]);
-                    // GUI listbox sourceName datatype + "Collections"
-                    listBox = (AEnumeratorParameter) parameterStore.get(det[i][j],
-                              det[i][j] + "Collections");
-                    String currentSelection = listBox.getCurrentText();
-                    for(int c = 0; c < array.length; c++)
-                    {
-                        if("All".equals(currentSelection) ||
-                           array[c].equals(currentSelection))
-                        {
-                            AData a = data.get(det[i][j] + array[c]);
-                            processDataSet(v, a);
-                        }
-                    }
-                }
-                else
-                {
-                    AData a = data.get(det[i][j]);
-                    processDataSet(v, a);
-                }
-            }
-        }
-        return v;
-
-    } // getHitsAndTracks() -------------------------------------------------
-
-
-    private static void processDataSet(List<AData> v, AData a)
-    {
-        if(a != null)
-        {
-            if(parameterStore.getUnknown("Data", a.getName()) != null &&
-                    parameterStore.get("Data", a.getName()).getStatus() &&
-                    (parameterStore.getUnknown("Det", a.getName() + "Fill") == null ||
-                            parameterStore.get("Det", a.getName() + "Fill").getStatus()))
-            {
-                v.add(a);
-            }
-        }
-
-    } // processDataSet() ---------------------------------------------------
-
-
-
-    public List<ACalorimeterData> getElectromagneticCalorimeters()
-    {
-        List<ACalorimeterData> v = new ArrayList<ACalorimeterData>();
-        Iterator<AData> i = data.values().iterator();
-        while(i.hasNext())
-        {
-            AData a = i.next();
-            if(a instanceof ALArData || a instanceof AFCALData)
-            {
-                v.add((ACalorimeterData)a);
-            }
-        }
-        return v;
-
-    } // getElectromagneticCalorimeters() ------------------------------------
-
-
-
-    public List<ACalorimeterData> getHadronicCalorimeters()
-    {
-        List<ACalorimeterData> v = new ArrayList<ACalorimeterData>();
-        Iterator<AData> i = data.values().iterator();
-        while(i.hasNext())
-        {
-            AData a = i.next();
-            if(a instanceof ATILEData || a instanceof AHECData
-                    || a instanceof AFCALData || a instanceof AMBTSData)
-            {
-                v.add((ACalorimeterData)a);
-            }
-        }
-        return v;
-
-    } // getHadronicCalorimeters() -------------------------------------------
-
-
-
-    /**
-     * setPrimaryVertex() called during event finalisation
-     * sets Event: XVtx, YVtx, ZVtx in the internal parameter store
-     * (in GUI: Projection -> eta-phi -> XVtx, YVtx, ZVtx)
-
-     * 1) gets values from RecVertex (RVx) - see conditions in ARVxData class
-     * 2) gets values from simulated vertices with highest pt sum (STr)
-     * 3) if above fail, sets 0.0, 0.0, 0.0
-     *
-     * (taking primary vertex from reconstructed tracks was removed)
-     *
-     */
-    public void setPrimaryVertex()
-    {
-        double[] vtx = null;
-        
-        // (1)
-        if(getRVxData() != null)
-        {
-            // RVx data exists, try to retrieve primary vertex information
-            vtx = getRVxData().getPrimaryVertex();
-        }
-        // (2)
-        if(vtx == null && getSTrData() != null)
-        {
-          // STr data exists, try to get primary vertex information
-          int vtxIndex = getSTrData().getMaxSumPtVertex();
-          
-          //retrieve that vertex
-          vtx = getSVxData().getVertex(vtxIndex);
-
-          //Completely unclear to me... why 4? 
-          if(vtx[0] * vtx[0] + vtx[1] * vtx[1] > 4.)
-          {
-            logger.info("replacing primary with first");
-            logger.info("  was " + vtx[0] + " " + vtx[1] + " " + vtx[2]);
-            vtx = getSVxData().getVertex(0);
-            if(vtx[0] * vtx[0] + vtx[1] * vtx[1] > 4.)
-            {
-                vtx[0] = 0.;
-                vtx[1] = 0.;
-                vtx[2] = 0.;
-            }
-            logger.info("  now is " + vtx[0] + " " + vtx[1] + " " + vtx[2]);
-          }
-        }
-        
-        if(vtx == null)
-        {
-            vtx = new double[] { 0.0, 0.0, 0.0 };
-        }
-
-        parameterStore.get("Event", "XVtx").setD(vtx[0]);
-        parameterStore.get("Event", "YVtx").setD(vtx[1]);
-        parameterStore.get("Event", "ZVtx").setD(vtx[2]);
-
-        AOutput.append("\n\nPrimary vertex set for projection " +
-                       AMath.PHI + AMath.ETA + ":\n" +
-                       "  XVtx = " + String.format("%.5f",vtx[0]) + " cm\n" +
-                       "  YVtx = " + String.format("%.5f",vtx[1]) + " cm\n" +
-                       "  ZVtx = " + String.format("%.5f",vtx[2]) + " cm\n", ALogInterface.NORMAL);
-
-    } // setPrimaryVertex() -------------------------------------------------
-
-
-
-    /**
-     * Finalize event construction:
-     * - finalize all data objects
-     * - set primary vertex
-     * - calculate the number of hits on a track
-     * - create associations
-     * - update collections
-     * @return the event
-     */
-    public AEvent finalizeEvent()
-    {
-
-        // setting primary vertex must be done before finalizeConstruction()
-        // happens on datatypes!
-        setPrimaryVertex();
-     
-        Iterator<AData> iter = data.values().iterator();
-        while(iter.hasNext())
-        {
-            AData data = iter.next();
-            if(data instanceof AData)
-            {
-              try {
-                ((AData) data).finalizeConstruction();
-              } catch ( Exception e ){
-                  //Get sourceName of the object where the error occured
-                  String ObjName = ((AData)data).getFullName();
-                  logger.error("Exception while finalizing construction of "+ObjName,e);
-                  AOutput.append("\n\nError while constructing " + ObjName +"\n", ALogInterface.WARNING);
-                  AOutput.append(" - object will not be shown!\n",ALogInterface.WARNING);
-                  iter.remove();
-
-              }
-            }
-        }
-
-        if (!AGlobals.isAtlantisHeadless()) {
-            AListManager.getInstance().resetAndPreserveInvisible();
-        }
-
-        // are there any RVx read in from the event file? if so, cut the tracks
-        // which form vertices (when drawn as helices) to the reconstructed
-        // vertices.
-        ARVxData rvxData = this.getRVxData();
-        if(rvxData != null)
-        {
-            rvxData.cutTracksToRVx(this);
-        }
-
-        assocmgr.correct();
-
-        return this;
-
-    } // AEvent finalizeEvent() ---------------------------------------------
-
-
-    /**
-     * Returns information about datatypes and number of items datatypes in
-     * the current event
-     * First item of the result array is the datatype sourceName followed
-     * by ":<storeGateKey>" if that exists for a datatype and second item is
-     * integer number (numData).
-     * The array is alphabetically sorted.
-     *
-     * @return String[][]
-     */
-    public String[][] getInfo()
-    {
-        AData[] sources = getData();
-        Map<String,String> m = new LinkedHashMap<String,String>();
-        m.clear();
-        for(int i = 0; i < sources.length; i++)
-        {
-            String sg = sources[i].getStoreGateKey();
-            String a = sources[i].getNameScreenName();
-            a += sg != null ? ":" + sg : "";
-            m.put(a, String.valueOf(sources[i].getNumData()));
-        }
-
-        TreeMap<String,String> tm = new TreeMap<String,String>(String.CASE_INSENSITIVE_ORDER);
-        tm.clear();
-        tm.putAll(m);
-
-        String[][] s = new String[tm.size()][2];
-        int i = 0;
-        for(Iterator<String> iter = tm.keySet().iterator() ; iter.hasNext() ; i++)
-        {
-            String key = iter.next();
-            s[i][0] = key;
-            s[i][1] = tm.get(key);
-        }
-
-        return s;
-
-    } // getInfo() -----------------------------------------------------------
-
-
-    /**
-     * Returns information about datatypes and number of items datatypes in
-     * the current event drawn for all event data, and data passing cuts
-     * First item of the result array is the datatype sourceName followed
-     * by ":<storeGateKey>" if that exists for a datatype and second/third items are
-     * integer number (numData, numDraw).
-     * The array is alphabetically sorted.
-     *
-     * @return String[][]
-     */
-    public String[][] getInfoDraw()
-    {
-        AData[] sources = getData();
-        Map<String,String> m = new LinkedHashMap<String,String>();
-        m.clear();
-        Map<String,String> mDraw = new LinkedHashMap<String,String>();
-        mDraw.clear();
-        
-        for(int i = 0; i < sources.length; i++)
-        {
-            String sg = sources[i].getStoreGateKey();
-            String a = sources[i].getNameScreenName();
-            a += sg != null ? ":" + sg : "";
-            m.put(a, String.valueOf(sources[i].getNumData()));
-            mDraw.put(a, String.valueOf(sources[i].getNumDraw()));
-        }
-
-        TreeMap<String,String> tm = new TreeMap<String,String>(String.CASE_INSENSITIVE_ORDER);
-        tm.clear();
-        tm.putAll(m);
-        TreeMap<String,String> tmDraw = new TreeMap<String,String>(String.CASE_INSENSITIVE_ORDER);
-        tmDraw.clear();
-        tmDraw.putAll(mDraw);
-        
-
-        String[][] s = new String[tm.size()][3];
-        int i = 0;
-        for(Iterator<String> iter = tm.keySet().iterator() ; iter.hasNext() ; i++)
-        {
-            String key = iter.next();
-            
-            s[i][0] = key;
-            s[i][1] = tm.get(key);
-            s[i][2] = tmDraw.get(key);
-        }
-
-        return s;
-
-    } // getInfoDraw() -----------------------------------------------------------
-    
-
-    /**
-     * Get coordinates of event vertex.
-     * 
-     * The coordinates are obtained from the parameter store rather than
-     * from the event itself, since the vertex position can be changed by the
-     * user through the GUI.
-     * 
-     * @return (x,y,z) of vertex
-     */
-    public double[] getPrimaryVertex()
-    {
-        return AParameterUtilities.getPrimaryVertex();
-    }
-    
-    public AAssociationManager getAssociationManager() {
-        return assocmgr;
-    }
-    
-    
-} // class AEvent ------------------------------------------------------------
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEventInfo.java b/graphics/AtlantisJava/src/atlantis/event/AEventInfo.java
deleted file mode 100644
index 0fe0aca7a014..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEventInfo.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package atlantis.event;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Comparator;
-import java.util.Date;
-
-/**
- * The AEventInfo class summarizes the information that uniquely identifies a event.
- * It also provides an "equals" function allowing to compare if two events are identical.
- * @author sboeser
- */
-public class AEventInfo {
-  
-  // number of the run of the event
-  private final long runNumber;
-  // event number in a run
-  private final long eventNumber;
-   // Athena time when XML event file was made in JiveXML
-  private final String dateTime;
-  // the name of the source this event was coming from (filename, servername, ...)
-  private final String sourceName;
-  // the lumiBlock number
-  private final String lumiBlock;
-  // Any additional eventProperties that may be important
-  private final String eventProperties;
-  // any additional info that is needed
-  
-  //the date format to use with the event info
-  public final static SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
-
-  /**
-   * Fully qualified constructor
-   * @param run the run number
-   * @param event the event number
-   * @param time the date and time of the event
-   */
-  AEventInfo(long event, long run, String time, String source, String lumiBlock, String eventProperties){
-    this.runNumber = run;
-    this.eventNumber = event;
-    this.dateTime = time != null ? time : "n/a";
-    this.sourceName = source != null ? source : "n/a";
-    this.lumiBlock = checkString(lumiBlock);
-    this.eventProperties = checkString(eventProperties);
-  }
-  
-  /**
-   * Copy constructor
-   * @param the evenInfo object to copy
-   */
-  AEventInfo(AEventInfo event){
-    this(event.getEventNumber(),event.getRunNumber(),
-         event.getDateTime(),event.getSourceName(),
-	 event.getLumiBlock(),event.getEventProperties());
-  }
-  
-  /**
-   * @return the run number
-   */
-  public long getRunNumber() {   
-    return runNumber;
-  } // getRunNumber() -----------------------------------------------------
-
-  /**
-   * @return the event number
-   */
-  public long getEventNumber(){
-    return eventNumber;
-  } // getEventNumber() ---------------------------------------------------
-
-
-  /**
-   * @return the date and time of the event
-   */
-  public String getDateTime() {
-    return dateTime;
-  } // getEventNumber() ---------------------------------------------------
-  
-  /**
-   * @return the name of the event source
-   */
-  public String getSourceName() {
-    return sourceName;
-  } // getSourceName() ----------------------------------------------------------
-
-  /**
-   * @return the lumiBlock
-   */
-  public String getLumiBlock() {
-    return lumiBlock;
-  } // getSourceName() ----------------------------------------------------------
-
- /**
-   * @return the eventProperties
-   */
-  public String getEventProperties() {
-    return eventProperties;
-  } // getSourceName() ----------------------------------------------------------
-
-
-
-  /**
-   * Performs test to see if there is a valid value for send string
-   */
-  private String checkString(String receivedString){
-    String temp;
-    if(receivedString == null || receivedString.endsWith("-1")){
-	temp = "default";
-    }else{
-	temp = receivedString;
-    }
-    return temp;
-  }
- 
-
-
-
-  /**
-   * Check whether this event is identical to the event described by info
-   * @param info the event information for the event to compare to
-   * @return true if identical
-   */
-  // FIXME: Should take Object as argument. Need to consider how to deal with
-  //        subclasses like AEvent.
-  public boolean equals(AEventInfo info){
-    //check if info is valid
-    if (info == null) return false;
-    //Only compare run- and event number and time, source may be different
-    return ((info.getRunNumber() == runNumber)&&
-            (info.getEventNumber() == eventNumber));
-  }
-
-// Need to override hashCode() to guarantee correct behaviour of equals()
-@Override
-public int hashCode() {
-	final int prime = 31;
-	int result = 1;
-	result = prime * result + (int) (eventNumber ^ (eventNumber >>> 32));
-	result = prime * result + (int) (runNumber ^ (runNumber >>> 32));
-	return result;
-}
-
-
-/**
-   * Implementation of Comparable interface - sort events by run- and event number
-   */
-  public static class RunEventNumberComparator implements Comparator {
- 
-   /**
-    * @param o1 , o2 the two eventInfo objects to compare
-    * @return negative/zero/positive int if o1 is less/equal/larger than o2
-    */
-    public int compare(Object o1, Object o2) {
-   
-      /**
-       * Cast to an event info object - if this fails, someone has mixed this with
-       * another class in a collection and we better crash with ClassCastException than catch
-       */ 
-      AEventInfo info1 = (AEventInfo)o1;
-      AEventInfo info2 = (AEventInfo)o2;
-
-      //compare by run number first
-      Long run = info1.getRunNumber();
-      if (run.compareTo(info2.getRunNumber()) != 0)
-        return run.compareTo(info2.getRunNumber());
-
-      //otherwise return by event number
-      Long event = info2.getEventNumber();
-      return event.compareTo(info2.getEventNumber());
-    }
-  }
-  
-  /**
-   * Implementation of Comparable interface - sort events by date and time
-   */
-  public static class DateTimeComparator implements Comparator {
- 
-   /**
-    * @param o1 , o2 the two eventInfo objects to compare
-    * @return negative/zero/positive int if o1 is less/equal/larger than o2
-    */
-    public int compare(Object o1, Object o2) {
-   
-      /**
-       * Cast to an event info object - if this fails, someone has mixed this with
-       * another class in a collection and we better crash with ClassCastException than catch
-       */ 
-      AEventInfo info1 = (AEventInfo)o1;
-      AEventInfo info2 = (AEventInfo)o2;
-      
-      //return zero for events that are equal
-      if (info1.equals(info2)) return 0;      
-      
-      //Now get date and time objects
-      Date date1 = null; Date date2=null;
-      try {
-        date1 = dateTimeFormat.parse(info1.getDateTime());
-        date2 = dateTimeFormat.parse(info2.getDateTime());
-      } catch (ParseException pex) {
-        throw new ClassCastException("Parse exception when comparing dates");
-      }
-      
-      //If there is not date assoicated with any of these, throw an exception
-      if ((date1==null)||(date2==null))
-        throw new ClassCastException("Could not parse valid date comparing "
-                +info1.getDateTime()+" to "+info2.getDateTime());
-      
-      //Finally, compare the two dates
-      return date1.compareTo(date2);
-    }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEventInfoPrinter.java b/graphics/AtlantisJava/src/atlantis/event/AEventInfoPrinter.java
deleted file mode 100644
index 174eed015a78..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEventInfoPrinter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package atlantis.event;
-
-import atlantis.globals.AGlobals;
-import atlantis.output.ALogInterface;
-
-/**
- * Print event information for each new event to the log pane
- * @author sboeser
- */
-public class AEventInfoPrinter implements ANewEventListener {
-  
-  private ALogInterface logPane = null;
-  
-  /**
-   * Constructor with the log pane where the information shall be printed
-   * @param output the output pane to which to write
-   */
-  public AEventInfoPrinter(ALogInterface output){
-    logPane = output;
-  }
-
-  private void printEventInfo(AEvent event, ALogInterface dest)
-  {
-	//For Minerva just output name and coded event and run numbers
-	//Not on canvas title, but teachers may want to see the number to help
-	//with recognising difficult events 
-	if(AGlobals.instance().getSimpleOutput()>0)
-	 {
-	  String r = "\n" + event.getSourceName() + 
-	  " (" + event.getRunNumber() + "00"+ event.getEventNumber() + ")\n";
-	  dest.append(r + "\n", ALogInterface.NORMAL);
-	  return;
-    } 
-
-    int lineLen = 39;
-    String r = "\n" + event.getSourceName() + "\n" +
-    "run number: " + event.getRunNumber() +
-    " event number: " + event.getEventNumber() + "\n" +
-    "--------------------------------------\n";
-    
-    String[][] s = event.getInfo();
-    
-    for(int i = 0; i < s.length; i++)
-    {
-    r += String.format("%-"+lineLen+"s", s[i][0]) + ": " + s[i][1] + "\n";
-    }
-    dest.append(r + "\n", ALogInterface.NORMAL);
-    
-    } // printEventInfo() ---------------------------------------------------*/
-
-  /**
-   * For each new event print log information to the log pane
-   * @param event the change event
-   */
-  public void newEvent(AEvent event) {
-    //simply print it
-    printEventInfo(event,logPane);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEventManager.java b/graphics/AtlantisJava/src/atlantis/event/AEventManager.java
deleted file mode 100755
index ba5b27b035be..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEventManager.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package atlantis.event;
-
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.event.AEventSource.NavigationMode;
-import atlantis.event.oncrpc.AONCRPCEventSource;
-import atlantis.event.xmlrpc.AXMLRPCEventSource;
-import java.util.Vector;
-
-import atlantis.utils.ALogger;
-
-/**
- * All new physics events come into Atlantis via the AEventManager
- * The AEventManager may hold a list of event, has the index of the
- * current event int the list and informs its listeners about new events.
- * Only one event can be active at one time.
- * 
- * @author sboeser
- */
-public class AEventManager
-{
-    private final static ALogger logger = ALogger.getLogger(AEventManager.class);
-    private static AEventManager instance;
-    
-    /** Private constructor for singleton. */
-    private AEventManager() {}
-    
-    /** Get the singleton instance. */
-    public synchronized static AEventManager instance() {
-    	if (instance==null) instance = new AEventManager();
-    	return instance;
-    }
-    
-    //The current event source
-    private AEventSource eventSource = null;
-    
-    //The current event - i.e. the last delivered by any event source
-    private AEvent currentEvent = null;
- 
-    //A list of listeners for new events
-    private Vector<ANewEventListener> NewEventListeners = new Vector<ANewEventListener>();
-    
-    //A list of listeners for new events sources
-    private Vector<ANewEventSourceListener> NewEventSourceListeners = new Vector<ANewEventSourceListener>();
-    
-    /**
-     * Return the currently active event
-     * @return AEvent
-     */
-    public synchronized AEvent getCurrentEvent()
-    {
-        //simply return the current event
-        return currentEvent;
-    }
-
-
-    /**
-     * Set the event with the given index as the current event
-     * @param index the index of the new event
-     */
-    private synchronized void setCurrentEvent(AEvent event)
-    {
-        //Now simply set the current event
-        currentEvent = event;
-        //Inform all listeners
-        fireNewEvent(getCurrentEvent());
-    }
-      
-
-    /**
-     * @return the current active event source
-     */
-    public synchronized AEventSource getEventSource(){
-      return eventSource;
-    }
-    
-    /**
-     * Set a new already constructed event source. Note that this constructor
-     * does not throw InvalidEventSource exception as the AEventSource object
-     * is already constructed. 
-     * @param source the AEventSource object
-     */
-    public synchronized void setEventSource( AEventSource source )
-    {      
-      //Simply set the source and we are done
-      eventSource = source;
-      fireNewEventSource(getEventSource()); 
-    }
-
-    
-    /**
-     * Set the source given by name as new event source. If the event source is
-     * not valid (e.g invalid file name) we rely on the constructor to fail, throwing
-     * an InvalidEventSourceException. Thus, the old source is retained if the new one
-     * can not be created.
-     * @param sourceName the name of the source (e.g. file name, url, server name,...)
-     * @throws InvalidEventSourceException
-     */
-    public synchronized void setEventSource(String sourceName) throws InvalidEventSourceException
-    {
-      //Make a nice string out of it
-      String theSourceName = sourceName.toLowerCase().trim();
-      
-      // XMLRPC Server source given as "xmlrpc://server:port"
-      if(theSourceName.startsWith("xmlrpc://")) {
-        eventSource = new AXMLRPCEventSource(sourceName);
-      // ONCRPC Server source given as "oncrpc://server[:port]"
-      } else if(theSourceName.startsWith("oncrpc://")) {
-        eventSource = new AONCRPCEventSource(sourceName);
-      // Metwork sources possibilities
-      // .xml, .zip or web directory containing event files
-      } else if(theSourceName.startsWith("http://")) {
-        // normal xml file
-        if(theSourceName.endsWith(".xml")){
-          eventSource = new AURLEventSource(sourceName);
-        // zip file on the web
-        } else if(theSourceName.endsWith(".zip")) {
-           eventSource = new AZipEventSource(sourceName);
-        //Anything else should be a web directory
-        } else {
-          eventSource = new AURLEventSource(sourceName);
-        }
-
-      // local disk access possibilities (.xml, .zip, .gz, .gzip)
-      // event source starts with file://
-      } else if(theSourceName.startsWith("file://")) {
-        // normal xml file
-        if (theSourceName.endsWith(".xml")) {
-          eventSource = new AFileEventSource(sourceName);
-        // normal zip file
-        } else if (theSourceName.endsWith(".zip")) {
-          eventSource = new AZipEventSource(sourceName);
-        // compressed single xml file
-        } else if (theSourceName.endsWith(".gz") || theSourceName.endsWith(".gzip")) {
-          eventSource = new AFileEventSource(sourceName);
-        } else {
-          String msg = "Could not identify event source: "+sourceName;
-          logger.error(msg);
-          throw new InvalidEventSourceException(msg);
-        }
-      } else {
-          String msg = "Could not identify event source: "+sourceName;
-          logger.error(msg);
-          throw new InvalidEventSourceException(msg);
-      }
-      fireNewEventSource(getEventSource()); 
-    }
-
-    /**
-     * Sets event navigation mode: random, push, loop or sequential.
-     * Throws InvalidEventSourceException if there is no source
-     * or if it doesn't support the requested mode.
-     * @throws InvalidEventSourceException
-     */
-    public synchronized void setNavigationMode(NavigationMode mode) throws InvalidEventSourceException
-    {
-      if(eventSource == null) throw new InvalidEventSourceException("Current event source is NULL");
-
-      NavigationMode oldMode = eventSource.getNavigationMode();
-
-      // check if we're really setting a new mode, or if
-      // the user just clicked on the same button twice
-      if(oldMode != mode) {
-        if(eventSource.supportsNavigationMode(mode)) {
-          eventSource.setNavigationMode(mode);
-          fireNewEventSource(getEventSource());
-          // go to the next event
-          try {
-            nextEvent();
-          } catch (NoMoreEventsException nme) {
-            String msg = "No more events from current source";
-            logger.error(msg);
-          } catch (ReadEventException re) {
-            String msg = "Error while reading the event";
-            logger.error(msg);
-          }
-        } else throw new InvalidEventSourceException("Current event source does not support the selected display mode");
-      }
-    }
-
-    /**
-     * Gets the current event navigation mode.
-     * @return event navigation mode
-     */
-    public synchronized NavigationMode getNavigationMode() throws InvalidEventSourceException
-    {
-      if(eventSource == null) throw new InvalidEventSourceException("Current event source is NULL");
-      return eventSource.getNavigationMode();
-    }
-
-    /**
-     * Check if the current source supports a specific event navigation mode.
-     * @param mode the requested event navigation mode
-     * @return true if the event navigation mode is supported
-     */
-    public boolean supportseventNavigationMode(NavigationMode mode) throws InvalidEventSourceException
-    {
-      if(eventSource == null) throw new InvalidEventSourceException("Current event source is NULL");
-      return eventSource.supportsNavigationMode(mode);
-    }
-
-    /**
-     * Read the next event from the current event source.
-     * Throws NoMoreEvents if there is none.
-     * @throws NoMoreEventsException
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException
-     */
-    public void nextEvent() throws NoMoreEventsException,
-                                   InvalidEventSourceException,
-                                   ReadEventException
-    {
-
-    	// Check for valid event source.
-      if (eventSource==null) 
-        throw new InvalidEventSourceException("Current event source is NULL");
-      
-      // Simply read next event from it.
-      AEvent event = eventSource.nextEvent();
-      setCurrentEvent(event);
-   
-    }
-
-
-    /**
-     * Read previous event from current event source.
-     * Throws NoMoreEvents if there is none.
-     * @throws NoMoreEventsException
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException 
-     */
-    public void previousEvent() throws NoMoreEventsException,
-                                       InvalidEventSourceException,
-                                       ReadEventException
-    {
-      
-      // Check for valid event source.
-      if (eventSource==null) 
-        throw new InvalidEventSourceException("Current event source is NULL");
-      
-      // Simply read previous event from it. 
-      setCurrentEvent(eventSource.previousEvent());
-       
-    } 
-    
-    /**
-     * Add a new listener for newEvent incidents
-     * @param listener to be added to list
-     */
-    public void addNewEventListener(ANewEventListener listener)
-    {
-      //Add this listener
-      NewEventListeners.addElement(listener);
-      //If there are already some events
-      if (getCurrentEvent() == null) return;
-      //Make the new listener aware of the current event
-      listener.newEvent(getCurrentEvent());
-    }
-
-    /**
-     * Remove a listener from the list.
-     * @param listener to be removed from list
-     */
-    public void removeNewEventListener(ANewEventListener listener)
-    {
-      //Remove this listener
-      NewEventListeners.removeElement(listener);
-    }
-
-    /**
-     * Call stateChanges of all newEvent listeners
-     * @param event the new event passed on to all listeners
-     */
-    private synchronized void fireNewEvent(AEvent event)
-    {
-      
-      // Loop over all listeners
-      for ( ANewEventListener listener : NewEventListeners )
-         // give them the new event
-         listener.newEvent(event);
-    }
-
-    /**
-     * Add a new listener for newEventSource incidents
-     * @param listener to be added to list
-     */
-    public void addNewEventSourceListener(ANewEventSourceListener listener)
-    {
-      //Add this listener
-      NewEventSourceListeners.addElement(listener);
-      //If there are already some events
-      if (getEventSource() == null) return;
-      //Make the new listener aware of the current event
-      listener.newEventSource(getEventSource());
-    }
-
-    /**
-     * Remove a listener from the list
-     * @param listener to be removed from list
-     */
-    public void removeNewEventSourceListener(ANewEventSourceListener listener)
-    {
-      NewEventSourceListeners.removeElement(listener);
-    }
-
-    /**
-     * Call eventSourceChanged of all event source changes listeners
-     * @param eventSource the new event source
-     */
-    private synchronized void fireNewEventSource(AEventSource eventSource)
-    {
-      // Loop over all listeners
-      for ( ANewEventSourceListener listener : NewEventSourceListeners )
-         // give them the new event
-         listener.newEventSource(eventSource);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEventSource.java b/graphics/AtlantisJava/src/atlantis/event/AEventSource.java
deleted file mode 100755
index 01fef1e727de..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEventSource.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package atlantis.event;
-
-/**
- * Basic interface class to be implemented by all event sources 
- * @author sboeser
- */
-
-public interface AEventSource
-{
-
-    /***
-     * Exception that is thrown if an event can not be read from this source
-     */
-    public class ReadEventException extends AEventSourceException  
-    {
-       //Default constructor
-       public ReadEventException() { super(); }
-       //Constructor with a string
-       public ReadEventException( String message ){ super( message ); }
-       //Constructor with a description and cause 
-       public ReadEventException( String message, Throwable cause ){ super( message, cause ); }
-    }
-    
-    /***
-     * Exception that is thrown if there are no more events from this source
-     */
-    public class NoMoreEventsException extends AEventSourceException  
-    {
-       //Default constructor
-       public NoMoreEventsException() { super(); }
-       //Constructor with a string
-       public NoMoreEventsException( String message ){ super( message ); }
-       //Constructor with a description and cause 
-       public NoMoreEventsException( String message, Throwable cause ){ super( message, cause ); }
-    }
-    
-    /**
-     * Exception that is thrown if the event source is invalid 
-     */
-    public class InvalidEventSourceException extends AEventSourceException
-    {
-       //Default constructor
-       public InvalidEventSourceException() { super(); }
-       //Constructor with a string
-       public InvalidEventSourceException( String message ){ super( message ); }
-       //Constructor with a description and cause 
-       public InvalidEventSourceException( String message, Throwable cause ){ super( message, cause ); }
-    }
-    
-    /**
-     * Read the next event from the source, throws NoMoreEvents
-     * if no next event is available
-     * @return the next event
-     * @throws NoMoreEventsException 
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException 
-     */
-    AEvent nextEvent() throws NoMoreEventsException,
-                              InvalidEventSourceException,
-                              ReadEventException;
-    
-    /**
-     * Read the previous event from the source, throws NoMoreEvents
-     * if no previous event is available
-     * @return the previous event
-     * @throws NoMoreEventsException
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException 
-     */
-    AEvent previousEvent() throws NoMoreEventsException,
-                                  InvalidEventSourceException,
-                                  ReadEventException;
-    /**
-     * Get a string uniquly identifying the event source, e.g the URL, the zip
-     * archive name or the server:port string
-     * @return a unique name describing the source
-     */
-    String getSourceName();
-
-    /***
-     * Enum that stores the possible event navigation modes
-     */
-    public enum NavigationMode {
-        SEQUENTIAL, //go through events in their natural order
-        LOOP,       //start from beginning when reaching the end
-        RANDOM,     //take a random event
-        PUSH        //event loop is driven from outside (see AServerXMLRPC)
-    }
-
-    /**
-     * Get the event navigation mode for the current source.
-     * @return current navigation mode
-     */
-    NavigationMode getNavigationMode();
-
-    /**
-     * Set the event navigation mode for the current source.
-     * Throws InvalidEventSourceException if the current
-     * source does not support the requested mode
-     * @param mode requested event navigation mode
-     * @throws InvalidEventSourceException if the mode is not supported
-     */
-    void setNavigationMode(NavigationMode mode) throws InvalidEventSourceException;
-
-    /**
-     * Checks whether the current event source supports
-     * a particular display mode.
-     * @return true if the mode is supported
-     * @param mode requested event navigation mode
-     */
-    boolean supportsNavigationMode(NavigationMode mode);
-
-}
-    
diff --git a/graphics/AtlantisJava/src/atlantis/event/AEventSourceException.java b/graphics/AtlantisJava/src/atlantis/event/AEventSourceException.java
deleted file mode 100644
index 94061279df36..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AEventSourceException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-
-package atlantis.event;
-
-/**
- * All exceptions occuring while attempting to read events shall be chaught
- * and converted into one of the three generic event source exceptions:
- * 
- *  -NoMoreEventsException: there is no next/previous event
- *  -InvalidEventSourceException: the specified event source is invalid
- *  -ReadEventException: there was an error reading in the event
- * 
- * All three of them derive from AEventSourceException which provides printing methods.
- * 
- * These three exceptions are then handed up to the GUI level, where they are treated 
- * differently, depending on the current reading mode (e.g. NoMoreEvents can be ignored
- * when waiting for events to appear on a server, web-dir, etc..)
- * 
- * @author sboeser
- */
-public class AEventSourceException extends Exception{
-  
-    //Default constructor
-    public AEventSourceException() { super(); }
-    //Constructor with a string
-    public AEventSourceException( String message ){ super( message ); }
-    //Constructor with a description and cause 
-    public AEventSourceException( String message, Throwable cause ){ super( message, cause ); }
-    
-    /**
-     * Generates a string with the cause of this message and all causing ones
-     * @return the generated string
-     */
-    public String getCauseMessages(){
-      
-      //Create the string buffer
-      StringBuffer msg = new StringBuffer();
-      
-      //Add all cause messages starting from this exception
-      addCauseMessage(this,msg);
-      
-      //return string 
-      return msg.toString();
-    }
-    
-    /**
-     * Recursively add cause messages to string buffer
-     * @param t the exception
-     * @param msg the string buffer
-     */
-    private void addCauseMessage(Throwable t, StringBuffer msg){
-      
-      //Add the name of the exception class
-      msg.append(t.getClass().getName());
-      //Add the description of the exception
-      msg.append(": ");
-      msg.append(t.getMessage());
-      
-      //Check if there has been a cause given
-      if (t.getCause() != null){
-        //Add cause messages in next line
-        msg.append("\n caused by ");
-        addCauseMessage(t.getCause(),msg);
-      }
-   }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AFileEventSource.java b/graphics/AtlantisJava/src/atlantis/event/AFileEventSource.java
deleted file mode 100644
index 51625ac86d35..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AFileEventSource.java
+++ /dev/null
@@ -1,309 +0,0 @@
-package atlantis.event;
-
-import atlantis.data.AEventFromXML;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.InputStream;
-
-import java.util.Arrays;
-import java.util.zip.GZIPInputStream;
-import java.util.Random;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-
-/**
- * Read a single event from an XML file in a directory
- * @author sboeser
- */
-public class AFileEventSource extends ABufferedEventSource
-{
-
-    //The current directory
-    private File directory = null;
-    
-    //A filter for valid files in the current directory
-    private final XMLFilenameFilter filter = new XMLFilenameFilter();
-
-    // needed for random mode
-    private Random randomGenerator = new Random();
-
-    /**
-     * Constructor with file name given
-     * @param sourceName
-     * @throws AEventSource.InvalidEventSourceException
-     */
-    public AFileEventSource(String sourceName) throws AEventSource.InvalidEventSourceException
-    {
-      // check if it's a well-formed event path
-      if(sourceName.startsWith("file://")) {
-        // strip file:// from the sourceName
-        sourceName = sourceName.substring(7);
-        //Check if the current file name is valid
-        directory = new File(sourceName);
-   
-        //Check that we can read that file or directory
-        if (!directory.canRead())
-          throw new InvalidEventSourceException("Can not read from "+sourceName);
-      } else throw new InvalidEventSourceException(sourceName+" is not in the form file://path");
-    }
-
-    /**
-     * @return the full name of the file or directory
-     */
-    public String getSourceName() {
-      return directory.getAbsolutePath();
-    }
-
-    /**
-     * @param mode event navigation mode
-     * @return true if the requested mode is supported by this source
-     */
-    public boolean supportsNavigationMode(NavigationMode mode) {
-      if(mode == NavigationMode.SEQUENTIAL ||
-          mode == NavigationMode.RANDOM ||
-          mode == NavigationMode.LOOP)
-        return true;
-      return false;
-    }
-
-    /**
-     * Read an event from the current file and directory
-     * @return the event
-     * @throws ReadEventException 
-     * @throws InvalidEventSourceException
-     */
-    protected AEvent readEventFromFile(File file) throws ReadEventException,
-                                             InvalidEventSourceException
-    {
-      //Reassemble full file name
-      String FullFileName = file.getAbsolutePath();
-      
-      try{
-        
-        //Use full path and name to specify the file
-        InputStream is = new FileInputStream(FullFileName);
-
-        //Check if this might be a gzip stream
-        if ((file.getName().toLowerCase().endsWith(".gz"))||
-           (file.getName().toLowerCase().endsWith(".gzip"))){
-            
-          //Run through GZIPInput for decoding
-          is = new GZIPInputStream(is);
-        }
-        //Read file from stream
-        return AEventFromXML.read(is, file.getName());
-       
-      } catch( OutOfMemoryError oom ) {
-       
-        //Check if we can clear the event container
-        if( getNumberOfEvents() > 0) clearEventContainer();
-    
-        //Run garbage collector
-        System.gc();
-      
-        //Retry reading the event
-        return readEventFromFile(file);
-       
-      } catch(FileNotFoundException fnfe){
-        //rethrow
-        throw new InvalidEventSourceException("File not found: "+FullFileName,fnfe);
-      } catch(IOException ioe){
-        //rethrow
-        throw new ReadEventException("I/O error readding file: "+FullFileName,ioe);
-      }
-    }
-    
-    /**
-     *Get a sorted list of files in the directory of the current file
-     */
-    private String[] getListOfFiles(){
-    
-      //get a list of files in the same directory using the filter
-      String[] FileList = directory.list(filter);
-       
-      //Sort the list
-      Arrays.sort(FileList);
-      
-      return FileList; 
-   
-    }
-
-    protected AEvent readRandom() throws ReadEventException, InvalidEventSourceException {
-
-      //The file we want to pass on to the reading routine
-      File file = null;
-      //On the first encounter "directory" might be a file
-      if (directory.isFile()){
-        //set this as the file we want to read
-        file = directory.getAbsoluteFile();
-        //store its parent directory
-        directory = file.getParentFile();
-      } else {
-        //Get a list of files
-        String[] FileList = getListOfFiles();
-        //Check there are more files
-        if (FileList.length == 0) 
-          throw new InvalidEventSourceException("No valid files in directory "
-                                           +directory.getAbsolutePath());
-        //Loop over file list
-        int iName = randomGenerator.nextInt(FileList.length);
-        
-        //Now get the new file
-        file = new File(directory,FileList[iName]);
-      }
-   
-      //Should now have a file in any case, try to read from it
-      return readEventFromFile(file);
-
-    }
-
-
-    /**
-     * Read the next event from the next XML file in the same directory
-     * @return the next event
-     * @throws NoMoreEventsException
-     * @throws ReadEventException
-     * @throws InvalidEventSourceException 
-     */
-    public AEvent readNext(AEventInfo currentEvent) throws NoMoreEventsException,
-                                    ReadEventException,
-                                    InvalidEventSourceException
-    { 
-      // if random mode is set, return a random event
-      if(getNavigationMode() == NavigationMode.RANDOM) return readRandom();
-
-      //The file we want to pass on to the reading routine
-      File file = null;
-      //On the first encounter "directory" might be a file
-      if (directory.isFile()){
-        //set this as the file we want to read
-        file = directory.getAbsoluteFile();
-        //store its parent directory
-        directory = file.getParentFile();
-      } else {
-        //Get a list of files
-        String[] FileList = getListOfFiles();
-        //Check there are more files
-        if (FileList.length == 0) 
-          throw new NoMoreEventsException("No valid files in directory "
-                                           +directory.getAbsolutePath());
-        //Loop over file list
-        int iName = 0;
-        //search for next entry that is lexicographically larger
-        //taking first one if there is no current event to compare to
-        while ((currentEvent != null ) &&
-               (currentEvent.getSourceName().compareTo(FileList[iName]) >= 0)){
-          //Go to next file
-          ++iName;
-          // if we have reached the end of the list
-          if (iName == FileList.length) {
-            // if in loop mode, go back to the first file
-            if(getNavigationMode() == NavigationMode.LOOP) {
-              iName = 0;
-              break;
-            }
-            // if not in loop mode, abort
-            else throw new NoMoreEventsException("No more files after"
-                + currentEvent.getSourceName() + " in directory "+directory.getAbsolutePath());
-          }
-        }
-        
-        //Now get the new file
-        file = new File(directory,FileList[iName]);
-      }
-   
-      //Should now have a file in any case, try to read from it
-      return readEventFromFile(file);
-
-    } 
-    
-    /**
-     * Read the next event from the previous XML file in the same directory
-     * @return the previous event
-     * @throws NoMoreEventsException
-     * @throws ReadEventException
-     * @throws InvalidEventSourceException 
-     */
-    public AEvent readPrevious(AEventInfo currentEvent) throws NoMoreEventsException,
-                                        ReadEventException,
-                                        InvalidEventSourceException
-    {
-      // in random mode there's no looking back
-      if(getNavigationMode() == NavigationMode.RANDOM) throw new NoMoreEventsException("No more random events left in the buffer");
-      //The file we want to pass on to the reading routine
-      File file = null;
-      //On the first encounter "directory" might be a file
-      if (directory.isFile()){
-        //set this as the file we want to read
-        file = directory.getAbsoluteFile();
-        //store its parent directory
-        directory = file.getParentFile();
-      } else {
-        //Get a list fo files
-        String[] FileList = getListOfFiles();
-        //Check there are more files
-        if (FileList.length == 0) 
-          throw new NoMoreEventsException("No valid files in directory "
-                                           +directory.getAbsolutePath());
-        //Loop over file list
-        int iName = FileList.length-1;
-        //search for next entry that is lexicographically smaller
-        //taking last one if there is no current one to compare to
-        while ((currentEvent != null) &&
-               (currentEvent.getSourceName().compareTo(FileList[iName]) <= 0)){
-          //Go to next file
-          --iName;
-          // if we have reached the end of the list
-          if (iName < 0) {
-            // if in loop mode, go to the last event
-            if(getNavigationMode() == NavigationMode.LOOP) {
-              iName = FileList.length - 1;
-              break;
-            }
-            // if not in loop mode, abort
-            else throw new NoMoreEventsException("No more files before"
-                + currentEvent.getSourceName() + " in directory "+directory.getName());
-          }
-        }
-          
-        //Now get the new file
-        file = new File(directory,FileList[iName]);
-      }
-   
-      //Should now have a file in any case, try to read from it
-      return readEventFromFile(file);
-  }
-}
-/**
- * Filter helper class only accepting file names ending in .xml, .gz or .gzip
- * @author sboeser
- */
-class XMLFilenameFilter implements FilenameFilter
-{
-
-    // accept all readable .xml .gz and .gzip files, no directories
-    public boolean accept(File dir, String name)
-    {
-        //First check the name
-        if ( ! name.toLowerCase().endsWith(".xml"))
-          if ( ! name.toLowerCase().endsWith(".gzip"))
-           if ( ! name.toLowerCase().endsWith(".gz"))
-             //invalid ending
-             return false;
-        
-        //Check file properties
-        File f = new File(dir, name);
-        
-        //Reject directories
-        if(! f.isFile()) return false;
-        //Reject unreadable files
-        if(! f.canRead()) return false;
-
-        //Finally accept
-        return true;
-
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AFilter.java b/graphics/AtlantisJava/src/atlantis/event/AFilter.java
deleted file mode 100755
index e6293cba5dfc..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AFilter.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package atlantis.event;
-
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.data.AS3DData;
-
-
-/**
- * Filter of S3D hits ask Hans Drevermann
- */
-
-public class AFilter {
-
-  final static int FILTER_GROUP=76;
-
-  static int[] h=null;
-  static int[] eta=null;
-  static int[] phi=null;
-  static int[] layer=null;
-  static int[] group=null;
-  static int[] skewGroup=null;
-  static int[] groupMapping=null;
-
-  static int[] bin=null;
-  static int[] ll=null;
-  static int[] hitLayers=null;
-  static int[] id=null;
-  static boolean[] good=null;
-  static int numEtaBins=0;
-
-  private static APar parameterStore = APar.instance();
-  
-  final static int[] layerAsBits=new int[32];
-  static {
-    layerAsBits[0]=1;
-    for(int i=1; i<32; i++)
-      layerAsBits[i]=2*layerAsBits[i-1];
-  }
-
-
-  public static void filter(AS3DData aS3DData) {
-    if(aS3DData==null) {
-      AOutput.append("AS3DData not found can't filter\n", ALogInterface.BAD_COMMAND);
-      return;
-    }
-
-    int numUsefulPhiBins=parameterStore.get("Fil", "NumPhi").getI();
-    int numUsefulEtaBins=parameterStore.get("Fil", "NumEta").getI();
-    // +2 for wrap around and edge effect
-    int numPhiBins=numUsefulPhiBins+2;
-
-    // +2 for edge effects
-    numEtaBins=numUsefulEtaBins+2;
-
-    double etaRange=parameterStore.get("Fil", "EtaRange").getD();
-    int requiredHitsInBin=parameterStore.get("Fil", "NumHits").getI();
-    int numSkewSteps=parameterStore.get("Fil", "NumSkew").getI();
-    double skewStepSize=parameterStore.get("Fil", "SkewStep").getD();
-
-    int numHits=aS3DData.makeFilterDrawList(etaRange);
-    int maxBins=numHits+1;
-
-    if(h==null||h.length<numPhiBins*numEtaBins) h=new int[numPhiBins*numEtaBins];
-    if(layer==null||layer.length<numHits) layer=new int[numHits];
-    if(eta==null||eta.length<numHits) eta=new int[numHits];
-    if(phi==null||phi.length<numHits) phi=new int[numHits];
-    if(group==null||group.length<numHits) group=new int[numHits];
-    if(skewGroup==null||skewGroup.length<numHits) skewGroup=new int[numHits];
-    if(groupMapping==null||groupMapping.length<numHits) groupMapping=new int[numHits];
-    //
-    if(bin==null||bin.length<maxBins) bin=new int[maxBins];
-    if(hitLayers==null||hitLayers.length<maxBins) hitLayers=new int[maxBins];
-    if(id==null||id.length<maxBins) id=new int[maxBins];
-    if(ll==null||ll.length<maxBins) ll=new int[maxBins];
-    if(good==null||good.length<maxBins) good=new boolean[maxBins];
-
-    layer=aS3DData.getLayer(layer);
-    eta=aS3DData.getIntegerEta(numUsefulEtaBins, etaRange, eta);
-
-    // initialise
-    for(int i=0; i<numHits; ++i)
-      group[i]=0;
-
-    if(!parameterStore.get("Fil", "Loop").getStatus()) numSkewSteps=0;
-
-    int numGroups=0;
-
-    for(int step=-numSkewSteps; step<=numSkewSteps; step++) {
-      double skew=0.;
-
-      // TODO: Check if 166.666 should be the curvature parameter from the parameter store
-      if(numSkewSteps!=0)
-        skew=(1./skewStepSize)*step/(numSkewSteps*2*166.666);
-
-      for(int i=0; i<maxBins; ++i) {
-        hitLayers[i]=0;
-        good[i]=false;
-      }
-
-      phi=aS3DData.getIntegerPhi(numUsefulPhiBins, skew, phi);
-
-      int numBins=1;
-
-      for(int i=0; i<numHits; ++i) {
-        int b=phi[i]*numEtaBins+eta[i];
-
-        if(h[b]==0) {
-          h[b]=numBins;
-          bin[numBins]=b;
-          numBins++;
-        }
-        hitLayers[h[b]]|=layerAsBits[layer[i]];
-      }
-
-      // must treat the phi wraparound here......
-
-      for(int e=0; e<numEtaBins; e++) {
-        h[(0)*numEtaBins+e]=h[(numUsefulPhiBins)*numEtaBins+e];
-        h[(numUsefulPhiBins+1)*numEtaBins+e]=h[(1)*numEtaBins+e];
-      }
-
-      int ngood=0;
-
-      for(int i=1; i<numBins; i++) {
-        int b=bin[i];
-        int hitLayersSummed=0;
-
-        // add hits from 3x3 region around this bin
-        for(int p=b-numEtaBins; p<b+2*numEtaBins; p+=numEtaBins)
-          for(int e=p-1; e<p+2; ++e) {
-            int ibin=h[e];
-
-            if(ibin>0)
-              hitLayersSummed|=hitLayers[ibin];
-          }
-        if(countBits(hitLayersSummed)>=requiredHitsInBin) {
-          good[i]=true;
-          ll[ngood++]=i;
-        }
-      }
-
-      for(int i=0; i<ngood; ++i)
-        id[ll[i]]=0;
-
-      int firstGroup=numGroups+1;
-
-      for(int i=0; i<ngood; ++i)
-        if(id[ll[i]]==0)
-          add(ll[i], ++numGroups);
-
-      for(int j=firstGroup; j<=numGroups; ++j) {
-        int hls=0;
-
-        for(int i=0; i<ngood; i++)
-          if(id[ll[i]]==j) {
-            hls|=hitLayers[ll[i]];
-          }
-        if(countBits(hls)<requiredHitsInBin)
-          for(int i=0; i<ngood; i++)
-            if(id[ll[i]]==j)
-              good[ll[i]]=false;
-      }
-
-      for(int i=0; i<numHits; ++i) {
-        int b=h[phi[i]*numEtaBins+eta[i]];
-
-        if(good[b])
-          skewGroup[i]=id[b];
-        else
-          skewGroup[i]=0;
-      }
-
-      // now zero the histogram for next call
-      for(int i=1; i<numBins; i++)
-        h[bin[i]]=0;
-      // wrap around
-      for(int e=0; e<numEtaBins; e++) {
-        h[(0)*numEtaBins+e]=0;
-        h[(numPhiBins-1)*numEtaBins+e]=0;
-      }
-
-      group=mergeGroups(numHits, numGroups, group, skewGroup);
-
-    }
-
-    group=renumberGroups(numHits, group);
-
-    int num=0;
-
-    for(int i=0; i<numHits; ++i)
-      if(group[i]>0) num++;
-
-    AOutput.alwaysAppend("\nFiltering:\n Input hits = "+numHits+"\n Num grouped = "+num+"\n",ALogInterface.NORMAL_BOLD);
-
-    aS3DData.setGroup(group);
-  }
-
-  public static void add(int i, int numGroup) {
-    id[i]=numGroup;
-    int b=bin[i];
-
-    // add hits from 3x3 region around this bin
-    for(int p=b-numEtaBins; p<b+2*numEtaBins; p+=numEtaBins)
-      for(int e=p-1; e<p+2; ++e) {
-        int ibin=h[e];
-
-        if(good[ibin]&&id[ibin]==0)
-          add(ibin, numGroup);
-      }
-  }
-
-  public static int[] mergeGroups(int numHits, int numGroups, int[] group, int[] skewgroup) {
-
-    for(int i=1; i<=numGroups; ++i)
-      groupMapping[i]=i;
-
-    for(int i=0; i<numHits; ++i)
-      if(skewGroup[i]>0&&group[i]>0) {
-        int g1=groupMapping[group[i]];
-        int g2=groupMapping[skewGroup[i]];
-
-        if(g1!=g2)
-          for(int g=1; g<=numGroups; ++g)
-            if(groupMapping[g]==g1||groupMapping[g]==g2) groupMapping[g]=g1;
-      }
-
-    for(int i=0; i<numHits; ++i)
-      if(skewGroup[i]>0||group[i]>0) {
-        int g=skewGroup[i];
-
-        if(g==0)
-          g=group[i];
-        group[i]=groupMapping[g];
-      }
-    return group;
-  }
-
-  public static int[] renumberGroups(int numHits, int[] group) {
-    int numGroups=0;
-
-    for(int i=0; i<numHits; ++i)
-      if(group[i]>0) {
-        int g=group[i];
-
-        numGroups++;
-        for(int j=i; j<numHits; ++j)
-          if(group[j]==g)
-            group[j]=-numGroups;
-      }
-    for(int i=0; i<numHits; ++i)
-      group[i]=-group[i];
-    return group;
-  }
-
-  // Return the number of bits currently set.  This is done via a lookup table
-
-  final static int[] countLUT= {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3,
-    4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4,
-    5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4,
-    5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5,
-    6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4,
-    5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5,
-    6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5,
-    6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6,
-    7, 5, 6, 6, 7, 6, 7, 7, 8};
-
-  final static int maskByte=255;
-
-  public static int countBits(int bits) {
-    return countLUT[bits&maskByte]+countLUT[(bits>>>8)&maskByte]+countLUT[(bits>>>16)&maskByte];
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AImageProducer.java b/graphics/AtlantisJava/src/atlantis/event/AImageProducer.java
deleted file mode 100644
index 74615cbd896c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AImageProducer.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package atlantis.event;
-
-import atlantis.utils.*;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import atlantis.Atlantis;
-import atlantis.canvas.ACanvas;
-import atlantis.graphics.encoders.AImageEncoder;
-import java.awt.Dimension;
-
-
-/** 
- * Implements ANewEventListener and creates image files
- * upon each newEvent call. A scale factor allows to e.g. produce thumbnails by
- * scaling down image. The image producer works in two modes:
- * a) If no file name is given, a file name will be generated from run and event
- *    number. In case the output file exists, no file is created but a warning is written out.
- * b) If a file name is given, a temporary file is generated first, and then
- *    renamed to the given file name. If renaming fails, a warning is written out
- *    and the temporary file is deleted.
- * 
- * @author Sebastian Boeser
- */
-
-public abstract class AImageProducer implements ANewEventListener
-{
-  /** File name prefix */
-  protected static final String filePrefix = "atlantis";
-  /**  Minimum number of digits for event- and run-number when writing files */
-  protected static final int encodeNumberDigits = 6;
-	    
-  /** directory to store files in */
-  protected final File directory ;
-  /** Default image dimensions */
-  protected final Dimension imageSize;
-  /** The thumbnail scale */
-  protected final double scaleFactor;
-  /** A fixed filename if given on the command line */
-  protected final String fixedFileName;
-
-  /**
-   * Inner exception class
-   */
-  public static class InstantiationException extends Exception {
-    //only declare constructor
-    InstantiationException(String what){
-      super(what);
-    }
-  };
-  
-	/**
-   * Fully qualified constructor, 
-	 * intializing all the attributes and check the parameters validity
-   * @param dir the directory in which to save all the files
-   * @param size the dimensions of the images
-   * @param scale the factor by which to scale the images
-   * @param fileName if not null, that file will be overwritten for each event
-   * @throws InstantiationException if we fail to create the object
-	 */
-	protected AImageProducer(String dir, Dimension size, double scale, String fileName) throws InstantiationException
-	{
-    // First check the directory parameter
-		directory = new File(dir);
-    
-    //That it exists
-		if(! directory.exists()) throw new InstantiationException("Directory "+dir+" doesn't exist");
-
-    //That it is a directory
-    if(! directory.isDirectory()) throw new InstantiationException(dir + " is not a directory");
-		
-    //And that we can write in it
-    if(! directory.canWrite()) throw new InstantiationException("Cannot write to directory "+dir);
-
-    //Check frequency and history length arguments
-    if (scale <= 0) throw new InstantiationException("Negative or zero scale factor");
-
-    // store all parameters
-    imageSize = size;
-    scaleFactor = scale;
-    fixedFileName = fileName;
-
-	}
-	
-
-	/**
-	 * Return the string build from this events file name
-	 * @param evt the event info from which to build the filename
-	 * @param minDigit minimum number of digits for run- and event-number
-	 * @return the file name
-	 */
-	protected String getEventFileName(AEventInfo evt){
-		String nameFormat = String.format("%%s_%%0%dd_%%0%dd",encodeNumberDigits,encodeNumberDigits);
-		return String.format(nameFormat,
-				filePrefix,evt.getRunNumber(),evt.getEventNumber());
-	}
-	
-	
-  /**
-   * Safes a byteArray of data into a file given by a fileName
-   * @param data the data
-   * @param file the file to write into
-   * @throws Exception in case of saving fails
-   */
-	protected void saveDataIntoFile(byte[] data, File file) throws IOException
-	{
-	
-    //Sanity check
-    if ((data == null) ||(file == null)) return;
-    
-    //Open output stream and write to output stream
-    FileOutputStream fos = new FileOutputStream(file);
-	  OutputStream os = new BufferedOutputStream(fos);
-	  os.write(data);
-    os.flush();
-	  os.close();
-		
-	}
-  
-  /**
-   * Called whenever a new event appears. Store an image in the directory,
-   * either with a generated file name  (no overwrite) or with a fixed file name (overwrite)
-   * @param event the event from which to generate the image
-   */
-	public abstract void newEvent(AEvent event);
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/event/ANewEventListener.java b/graphics/AtlantisJava/src/atlantis/event/ANewEventListener.java
deleted file mode 100644
index 7657cbe48392..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/ANewEventListener.java
+++ /dev/null
@@ -1,18 +0,0 @@
-
-package atlantis.event;
-
-/**
- * Interface for all NewEventListener classes. Each time a new event is 
- * brought to the event manager, the NewEvent:isteners newEvent method is
- * called with the new event as an argument
- * @author sboeser
- */
-public interface ANewEventListener {
-
-  /**
-   * This method gets called each time a new new is available.
-   * @param event the new event
-   */
-  abstract public void newEvent(AEvent event);  
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/event/ANewEventSourceListener.java b/graphics/AtlantisJava/src/atlantis/event/ANewEventSourceListener.java
deleted file mode 100644
index 6101f3a4f1b9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/ANewEventSourceListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package atlantis.event;
-
-/**
- * Interface for all NewEventSourceListener classes. Each time the event source 
- * is changed, the newEventSourcemethod is called.
- * @author maillard
- */
-public interface ANewEventSourceListener {
-
-  /**
-   * This method gets called each time the layout is changed.
-   * @param eventSource the new event source
-   */
-  abstract public void newEventSource(AEventSource eventSource);  
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AObjectsAssociation.java b/graphics/AtlantisJava/src/atlantis/event/AObjectsAssociation.java
deleted file mode 100644
index 6f4b148b4368..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AObjectsAssociation.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package atlantis.event;
-
-/**
- * @author Qiang Lu
- *
- */
-public class AObjectsAssociation extends AAssociation
-{
-    private String[] key;
-        
-    public AObjectsAssociation(String a, String b, String[] associatedKey, 
-            int[] associatedIndex, int[] associatedLinkCount, AEvent e)
-    {
-        super(a, b, associatedLinkCount, associatedIndex,e);
-        this.key = new String[associatedKey.length];
-        for (int i=0; i<associatedKey.length; i++)
-        {
-            this.key[i] = associatedKey[i];
-        }
-    }
-    
-    public String[] getKey()
-    {
-        return key;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/APngImageProducer.java b/graphics/AtlantisJava/src/atlantis/event/APngImageProducer.java
deleted file mode 100644
index 21cd4d7199bf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/APngImageProducer.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package atlantis.event;
-
-import atlantis.utils.*;
-import java.io.File;
-import java.io.IOException;
-
-import atlantis.canvas.ACanvas;
-import atlantis.graphics.encoders.AImageEncoder;
-import java.awt.Dimension;
-
-
-/** 
- * Implements ANewEventListener and creates PNG files
- * upon each newEvent call. A scale factor allows to e.g. produce thumbnails by
- * scaling down image. The image producer works in two modes:
- * a) If no file name is given, a file name will be generated from run and event
- *    number. In case the PNG file exists, no file is created but a warning is written out.
- * b) If a file name is given, a temporary file is generated first, and then
- *    renamed to the given file name. If renaming fails, a warning is written out
- *    and the temporary file is deleted.
- * 
- * @author Sebastian Boeser
- */
-
-public class APngImageProducer extends AImageProducer
-{
-	// the logger
-	private static final ALogger logger = ALogger.getLogger(APngImageProducer.class);
-
-	// Our image encode
-	private final AImageEncoder imageEncoder = new AImageEncoder();
-
-	/**
-	 * Fully qualified constructor, 
-	 * intializing all the attributes and check the parameters validity
-	 * @param dir the directory in which to save all the files
-	 * @param size the dimensions of the images
-	 * @param scale the factor by which to scale the images
-	 * @param fileName if not null, that file will be overwritten for each event
-	 * @throws InstantiationException if we fail to create the object
-	 */
-	public APngImageProducer(String dir, Dimension size, double scale, String fileName) throws InstantiationException
-	{
-		super(dir, size, scale, fileName);
-	}
-
-	/**
-	 * Called whenever a new event appears. Store a PNG in the directory,
-	 * either with a generated file name  (no overwrite) or with a fixed file name (overwrite)
-	 * @param event the event from which to generate the PNG
-	 */
-	public void newEvent(AEvent event)
-	{
-
-		//If auto had been set for size (height is negative), get height from Canvas
-		if (imageSize.height < 0) imageSize.setSize(imageSize.width, ACanvas.getCanvas().getRespectiveHeight(imageSize.width));
-
-		//Create the file to write the data into
-		File pngFile;
-		//If we don't have a fixed file name,
-		//generate a unique one based on run- and event number
-		if (fixedFileName==null){
-
-			//Now construct all the full path for the file we want to save
-			String pngName = String.format("%s%s%s.png",directory,
-					System.getProperty("file.separator"),
-					getEventFileName(event));
-
-			// Create file handles to the file and check if it exists
-			pngFile = new File(pngName);
-			//Do not overwrite any existing files
-			if (pngFile.exists()) {
-				logger.warn("File "+ pngName +" already exists - will not overwrite");
-				return;
-			}
-			//otherwise generate a temporary file first,
-			//then move it in place later
-		} else {
-			//make a temporary file in the final directory
-			try {
-				pngFile = File.createTempFile(filePrefix+"_", ".png",directory);
-			} catch (IOException ex) {
-				logger.warn("Failed to create temporary file in "+directory.getAbsolutePath());
-				return;
-			}
-		}
-
-		//Now create the image. If the scaleFactor equals 1, no scaling will happen.
-		byte[] pngData = imageEncoder.getScaledPNGData(imageSize.width,imageSize.height,scaleFactor);
-
-		//Now try saving the acquired data,
-		//and if it shall go to a fixed file, move it there
-		try {
-			//Save the PNG
-			saveDataIntoFile(pngData, pngFile);
-			//move to fixed file name if requested
-			if (fixedFileName != null){
-
-				//Get a handle to the final destination
-				File fixedFile = new File(directory,fixedFileName);
-
-				//delete target if exits
-				if (fixedFile.exists() && (!fixedFile.delete()))
-					throw new IOException("Failed to delete existing file "+fixedFile.getAbsolutePath());
-
-				//And move the new file in place
-				if (!pngFile.renameTo(fixedFile))
-					throw new IOException("Failed to rename temporary file to "+fixedFile.getAbsolutePath());
-			}
-		} catch (IOException ioe) {
-			//If we fail, throw a warning
-			logger.warn("Could not save PNG files for history\n"+ioe.toString());
-		} finally {
-			//In any case, delete the pngFile, if it was just temporary
-			if (fixedFileName != null) pngFile.delete();
-		}
-
-	} 	
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AStreamedEventSource.java b/graphics/AtlantisJava/src/atlantis/event/AStreamedEventSource.java
deleted file mode 100644
index b41e007072f9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AStreamedEventSource.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package atlantis.event;
-
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import java.util.Vector;
-
-/**
- * This interface shall be implemented by all event sources that support event
- * streams. Only provides simple get and set methods.
- * @author sboeser
- */
-public interface AStreamedEventSource extends AEventSource {
-
-  /**
-   * Exception that is thrown if the stream is invalid
-   */
-  public class InvalidStreamException extends AEventSourceException
-  {
-     //Default constructor
-     public InvalidStreamException() { super(); }
-     //Constructor with a string
-     public InvalidStreamException( String message ){ super( message ); }
-     //Constructor with a description and cause
-     public InvalidStreamException( String message, Throwable cause ){ super( message, cause ); }
-  }
-
-  /**
-   * Get an array of names of all available streams
-   * @return the array of stream names
-   * @throws InvalidEventSourceException if the list of streams can not be obtained
-   */
-  Vector<String> getAvailableStreams() throws InvalidEventSourceException;
-
-  /**
-   * Set the stream from which to provide events
-   * @param streamName the stream from which to get events
-   * @throws InvalidStreamException if the given name does not specify a valid stream
-   * @throws InvalidEventSourceException if the server cannot be contacted to get the stream names
-   */
-  void setStream(String streamName) throws InvalidStreamException,
-                                           InvalidEventSourceException;
-
-  /**
-   * Get the currently selected stream, or the default stream if none is selected
-   * @return the name of the currently selected stream
-   * @throws InvalidEventSourceException if the list of streams can not be obtained
-   * @throws NoMoreEventsException if no stream is available
-   *
-   */
-  String getStream() throws InvalidEventSourceException,
-                            NoMoreEventsException;
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/ASvgImageProducer.java b/graphics/AtlantisJava/src/atlantis/event/ASvgImageProducer.java
deleted file mode 100644
index a27830547d92..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/ASvgImageProducer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package atlantis.event;
-
-import java.io.File;
-import java.io.IOException;
-
-import atlantis.utils.*;
-import atlantis.canvas.ACanvas;
-import atlantis.graphics.encoders.AImageEncoder;
-import java.awt.Dimension;
-
-
-/** 
- * Implements ANewEventListener and creates SVG files
- * upon each newEvent call. A scale factor allows to e.g. produce thumbnails by
- * scaling down image. The image producer works in two modes:
- * a) If no file name is given, a file name will be generated from run and event
- *    number. In case the output file exists, no file is created but a warning is written out.
- * b) If a file name is given, a temporary file is generated first, and then
- *    renamed to the given file name. If renaming fails, a warning is written out
- *    and the temporary file is deleted.
- * 
- * @author Tom McLaughlan
- */
-
-public class ASvgImageProducer extends AImageProducer
-{
-	// the logger
-	private static final ALogger logger = ALogger.getLogger(ASvgImageProducer.class);
-
-	// Our image encode
-	private final AImageEncoder imageEncoder = new AImageEncoder();
-
-	/**
-	 * Fully qualified constructor, 
-	 * intializing all the attributes and check the parameters validity
-	 * @param dir the directory in which to save all the files
-	 * @param size the dimensions of the images
-	 * @param scale the factor by which to scale the images
-	 * @param fileName if not null, that file will be overwritten for each event
-	 * @throws InstantiationException if we fail to create the object
-	 */
-	public ASvgImageProducer(String dir, Dimension size, double scale, String fileName) throws InstantiationException
-	{
-		super(dir, size, scale, fileName);
-	}
-
-	/**
-	 * Called whenever a new event appears. Store an SVG in the directory,
-	 * either with a generated file name  (no overwrite) or with a fixed file name (overwrite)
-	 * @param event the event from which to generate the SVG
-	 */
-	public void newEvent(AEvent event)
-	{
-
-		//If auto had been set for size (height is negative), get height from Canvas
-		if (imageSize.height < 0) imageSize.setSize(imageSize.width, ACanvas.getCanvas().getRespectiveHeight(imageSize.width));
-
-		//Create the file to write the data into
-		File outFile;
-		//If we don't have a fixed file name,
-		//generate a unique one based on run- and event number
-		if (fixedFileName==null){
-
-			//Now construct all the full path for the file we want to save
-			String outFileName = String.format("%s%s%s.svg",directory,
-					System.getProperty("file.separator"),
-					getEventFileName(event));
-
-			// Create file handles to the file and check if it exists
-			outFile = new File(outFileName);
-			//Do not overwrite any existing files
-			if (outFile.exists()) {
-				logger.warn("File "+ outFileName +" already exists - will not overwrite");
-				return;
-			}
-			//otherwise generate a temporary file first,
-			//then move it in place later
-		} else {
-			//make a temporary file in the final directory
-			try {
-				outFile = File.createTempFile(filePrefix+"_", ".svg",directory);
-			} catch (IOException ex) {
-				logger.warn("Failed to create temporary file in "+directory.getAbsolutePath());
-				return;
-			}
-		}
-
-		//Now try saving the acquired data,
-		//and if it shall go to a fixed file, move it there
-		try {
-			imageEncoder.saveSVG(imageSize.width, imageSize.height, outFile);
-
-			//move to fixed file name if requested
-			if (fixedFileName != null){
-
-				//Get a handle to the final destination
-				File fixedFile = new File(directory,fixedFileName);
-
-				//delete target if exits
-				if (fixedFile.exists() && (!fixedFile.delete()))
-					throw new IOException("Failed to delete existing file "+fixedFile.getAbsolutePath());
-
-				//And move the new file in place
-				if (!outFile.renameTo(fixedFile))
-					throw new IOException("Failed to rename temporary file to "+fixedFile.getAbsolutePath());
-			}
-		} catch (IOException ioe) {
-			//If we fail, throw a warning
-			logger.warn("Could not save SVG files for history\n"+ioe.toString());
-		} finally {
-			//In any case, delete the pngFile, if it was just temporary
-			if (fixedFileName != null) outFile.delete();
-		}
-
-
-	} 	
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/AURLEventSource.java b/graphics/AtlantisJava/src/atlantis/event/AURLEventSource.java
deleted file mode 100644
index 530a3793cd81..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AURLEventSource.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package atlantis.event;
-
-import atlantis.data.AEventFromXML;
-
-import java.util.ArrayList;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.Random;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.ALogger;
-
-import java.util.Collections;
-
-
-/**
- * This class obtains an event from an XML file which is read from
- * URL address (from a remote source).
- * 
- * Once the file is read the classes tries to create an internal
- * list of XML event files from this remote source which is utilised
- * when the user accesses next, resp. previous event from this address.
- * 
- * It is dependent on the fact that the web server supports directory
- * listings - i.e. it returns an HTML page which this class parses
- * and gets all files conforming ".*\.xml" regular expression.
- * 
- * It is possible to specify only URL with a directory where the event
- * files are.
- * 
- * @author sboeser
- */
-public class AURLEventSource extends ABufferedEventSource
-{
-    // get the logger
-    private static final ALogger logger = ALogger.getLogger(AURLEventSource.class);   
-    // the name of the event source
-    private String directoryURL = null;
-    
-    // needed for random mode
-    private Random randomGenerator = new Random();
-
-    /**
-     * @param mode event navigation mode
-     * @return true if the requested mode is supported by this source
-     */
-    public boolean supportsNavigationMode(NavigationMode mode) {
-      if(mode == NavigationMode.SEQUENTIAL ||
-          mode == NavigationMode.RANDOM ||
-          mode == NavigationMode.LOOP)
-        return true;
-      return false;
-    }
-
-    /**
-     * Constructor with the URL of the directory
-     * @param sourceName
-     * @throws atlantis.event.AEventSource.InvalidEventSourceException
-     */
-    public AURLEventSource(String sourceName) throws InvalidEventSourceException
-    {   
-      
-      //Make sure the event source starts with http://
-      if( ! sourceName.toLowerCase().startsWith("http://"))
-        throw new InvalidEventSourceException("URL event source name does"+
-                                              "not start with \"http://\"");
-      
-      //Store event source
-      directoryURL = sourceName;
-    }
-    
-    /**
-     * @return the directory URL string
-     */
-    public String getSourceName() {
-      return directoryURL;
-    }
-    
-    /**
-     * Get a list of files in a directory given by a URL
-     * @param url the url of the directory
-     * @return a list of urls to the individual files
-     * @throws atlantis.event.AEventSource.InvalidEventSourceException
-     */
-    private ArrayList<String> getEventListForURL(String url) throws InvalidEventSourceException {
-
-    //the url of the directory we are searching  
-    String baseUrl = url;
-    //trim any file endings from url
-    if (url.endsWith(".xml"))
-      baseUrl = url.substring(0, url.lastIndexOf('/'));
-    
-    
-    //The input stream - need to be closed in the end
-    InputStreamReader urlStream = null;
-    BufferedReader br = null;
-
-    //be a bit verbose
-    logger.info("Trying to get directory listing from " + baseUrl);
-
-    //Create an array to return
-    ArrayList<String> eventList = new ArrayList<String>();
-
-    //Now try reading stuff from the web
-    try {
-      //Get an input stream reader
-      urlStream = new InputStreamReader(new URL(baseUrl).openStream());
-      //get a buffered reader for that stream
-      br = new BufferedReader(urlStream);
-
-      // input is the whole line from HTML directory listing
-      // example to match: <a href="atlantis_event_70417_93.xml">
-      // We use regular expressions patterns to catch the lines of interest
-      // ( ) defines group, group 0 is the whole match and group 1 is
-      // just the desired file name within the parentheses 
-      Pattern pattern = Pattern.compile("<a href=\"(.*\\.xml)\">");
-
-      //Loop over all lines
-      String line = null;
-      while ((line = br.readLine()) != null) {
-        //try to match the patter
-        Matcher matcher = pattern.matcher(line);
-        if (matcher.find()) // not .match() (!)
-        {
-          //Get the first group from the pattern
-          //i.e the file name and add to our event list
-          eventList.add(matcher.group(1));
-        }
-      }
- 
-      //be a bit verbose
-      logger.debug("List of " + eventList.size() + " events loaded from " + baseUrl);
-
-
-    } catch (MalformedURLException mue) {
-      String msg = "Incorrect URL address: " + baseUrl;
-      logger.error(msg);
-      AOutput.alwaysAppend("\n" + msg + "\n", ALogInterface.WARNING);
-      throw new InvalidEventSourceException(msg, mue);
-    } catch (IOException ioe) {
-      String msg = "IO error while reading URL: " + baseUrl;
-      logger.error(msg);
-      AOutput.alwaysAppend("\n" + msg + "\n", ALogInterface.WARNING);
-      throw new InvalidEventSourceException(msg, ioe);
-    } finally {
-      //In any case close everything
-      try {
-        br.close();
-        urlStream.close();
-      } catch (Throwable t) {
-        //do nothing here
-      }
-    }
-
-   //check if there were at least some events
-   if (eventList.size()==0)
-     throw new InvalidEventSourceException("No events found at "+baseUrl);
-
-    //In the end sort the event list
-    Collections.sort(eventList);
-
-    //and return it
-    return eventList;
-
-  }
-    
-    /**
-     * Read in an event from a fully specified path
-     * @param fileName the URL to the file
-     * @param directoryURL the name of the event source
-     * @return the event
-     */
-    private AEvent readEventFromURL(String fileName, String directoryURL)
-          throws ReadEventException {
-    //Things we need to close in the end
-    InputStream urlStream = null;
-    BufferedInputStream buffStream = null;
-    AEvent event = null;
-
-    try {
-      //Open the url as stream
-      String fullURL = directoryURL + "/" + fileName;
-      URL eventURL = new URL(fullURL);
-      urlStream = eventURL.openStream();
-      buffStream = new BufferedInputStream(urlStream);
-      //then read the event from there
-      logger.debug("Reading event data stream from " + eventURL.toString() + "...");
-      event = AEventFromXML.read(buffStream, fileName);
-
-    } catch (FileNotFoundException fnfe) {
-      //Show as a warning and rethrow
-      String msg = "File not found at " + directoryURL+"/"+fileName;
-      logger.error(msg);
-      AOutput.alwaysAppend("\n" + msg + "\n", ALogInterface.WARNING);
-      throw new ReadEventException(msg, fnfe);
-    } catch (IOException ioe) {
-      //Show as an error and rethrow
-      String msg = "IO error when reading " + directoryURL;
-      logger.error(msg);
-      AOutput.alwaysAppend("\n" + msg + "\n", ALogInterface.WARNING);
-      throw new ReadEventException(msg, ioe);
-    } finally {
-      try {
-        if (urlStream != null) {
-          urlStream.close();
-        }
-        if (buffStream != null) {
-          buffStream.close();
-        }
-      } catch (Throwable t) {
-        //Ignore all errors
-      }
-    }
-    return event;
-  }
-    
-    /**
-     * Read a random event
-     * @return the random event
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException
-     */
-    protected AEvent readRandom() throws InvalidEventSourceException, ReadEventException
-    {
-      
-      String fileName = null;
-    
-      //Check if we have been given a fully specified file url
-      if(directoryURL.endsWith(".xml")){       
-        //Store the file name from the url
-        fileName = directoryURL.substring(directoryURL.lastIndexOf('/')+1,directoryURL.length());
-        //trim file endings from url
-        directoryURL = directoryURL.substring(0, directoryURL.lastIndexOf('/'));
-             
-      } else {
-     
-        //Update event list every time, so we get new files
-        ArrayList<String> eventList=getEventListForURL(directoryURL);
-      
-        //Check there are more files
-        if (eventList.size() == 0) 
-          throw new InvalidEventSourceException("No valid files at "+directoryURL);
-        
-        //Pick a random event
-        int iName = randomGenerator.nextInt(eventList.size());
-        
-        //Now get the new file
-        fileName = eventList.get(iName);
-      }
-      
-      //Now read exactly that event and return it
-      return readEventFromURL(fileName,directoryURL);   
-    }
-    
-
-    /**
-     * Read the previous event from the URL directory
-     * @return the previous event
-     * @throws NoMoreEventsException
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException
-     */
-    public AEvent readNext(AEventInfo currentEvent) throws NoMoreEventsException,
-                                                           InvalidEventSourceException,
-                                                           ReadEventException
-    {
-      // if random mode is set, return a random event
-      if(getNavigationMode() == NavigationMode.RANDOM) return readRandom();
-
-      String fileName = null;
-    
-      //Check if we have been given a fully specified file url
-      if(directoryURL.endsWith(".xml")){       
-        //Store the file name from the url
-        fileName = directoryURL.substring(directoryURL.lastIndexOf('/')+1,directoryURL.length());
-        //trim file endings from url
-        directoryURL = directoryURL.substring(0, directoryURL.lastIndexOf('/'));
-             
-      } else {
-     
-        //Update event list every time, so we get new files
-        ArrayList<String> eventList=getEventListForURL(directoryURL);
-      
-        //Check there are more files
-        if (eventList.size() == 0) 
-          throw new NoMoreEventsException("No valid files at "+directoryURL);
-        //Loop over file list
-        int iName = 0;          
-        //search for next entry that is lexicographically larger
-        //taking first one if there is no current one to compare to
-        while ((currentEvent != null) && 
-               (currentEvent.getSourceName().compareTo(eventList.get(iName)) >= 0)){
-          //Go to next file
-          ++iName;
-          // if we have reached the end of the list...
-          if (iName == eventList.size())
-            // if in loop mode go to the first event
-            if(getNavigationMode() == NavigationMode.LOOP) {
-              iName = 0;
-              break;
-            }
-            // if not in loop mode, abort
-            else throw new NoMoreEventsException("No more files after "
-                + currentEvent.getSourceName() + " in directory "+directoryURL);
-        }
-        
-        //Now get the new file
-        fileName = eventList.get(iName);
-      }
-      
-      //Now read exactly that event and return it
-      return readEventFromURL(fileName,directoryURL);   
-    }
-    
-    /**
-     * Read the previous event from the current URL directory
-     * @return the previous event
-     * @throws NoMoreEventsException
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException
-     */
-    public AEvent readPrevious(AEventInfo currentEvent) throws NoMoreEventsException,
-                                                             InvalidEventSourceException,
-                                                             ReadEventException
-    {
-      // in random mode there's no looking back
-      if(getNavigationMode() == NavigationMode.RANDOM) throw new NoMoreEventsException("No more random events left in the buffer");
-
-      String fileName = null;
-    
-      //Check if we have been given a fully specified file url
-      if(directoryURL.endsWith(".xml")){       
-        //Store the file name from the url
-        fileName = directoryURL.substring(directoryURL.lastIndexOf('/')+1,directoryURL.length());
-        //trim file endings from url
-        directoryURL = directoryURL.substring(0, directoryURL.lastIndexOf('/'));
-             
-      } else {
-     
-        //Update event list every time, so we get new files
-        ArrayList<String> eventList=getEventListForURL(directoryURL);
-      
-        //Check there are more files
-        if (eventList.size() == 0) 
-          throw new NoMoreEventsException("No valid files at "+directoryURL);
-        //Loop over file list
-        int iName = eventList.size()-1;
-        //search from the end for the first entry that is lexicographically smaller
-        //taking last one if there is no previous one to compare to
-        while ((currentEvent != null) &&
-               (currentEvent.getSourceName().compareTo(eventList.get(iName)) <= 0)){
-          //Go to next file
-          --iName;
-          // if we have reached the end of the list...
-          if (iName < 0)
-            // if in loop mode, go to the last file
-            if(getNavigationMode() == NavigationMode.LOOP) {
-              iName = eventList.size()-1;
-              break;
-            }
-            // if not in loop mode, abort
-            else throw new NoMoreEventsException("No more files before "
-                + currentEvent.getSourceName() + " in directory "+directoryURL);
-        }
-        
-        //Now get the new file
-        fileName = eventList.get(iName);
-      }
-      
-      //Now read exactly that event and return it
-      return readEventFromURL(fileName,directoryURL);
-    }
-
-} // class AURLEventSource
diff --git a/graphics/AtlantisJava/src/atlantis/event/AZipEventSource.java b/graphics/AtlantisJava/src/atlantis/event/AZipEventSource.java
deleted file mode 100644
index 16aeb4d0f5e6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/AZipEventSource.java
+++ /dev/null
@@ -1,478 +0,0 @@
-package atlantis.event;
-
-import atlantis.data.AEventFromXML;
-
-import java.io.IOException;
-import java.io.File;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.ArrayList;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AUtilities;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.zip.ZipException;
-import java.util.Random;
-
-/**
- * Reading zip archives from local or network files or from zip files stored within .jar file 
- */
-public class AZipEventSource implements AEventSource
-{
-  
-  //define the source type
-  private enum SourceType {
-    JAR_FILE,
-    ZIP_FILE,
-    ZIP_NETWORK_FILE
-  };
-
-  // current event navigation mode
-  private NavigationMode eventNavigationMode = NavigationMode.SEQUENTIAL;
-
-  // needed for random mode
-  private Random randomGenerator = new Random();
-
-  // A list of entries in the zip file
-  ArrayList<ZipEntry> ZipEntries = new ArrayList<ZipEntry>();
-  // pointer to the current zip entry
-  int eventIndex = -1;
-  // flag if zip file is read from jar file (as stream)
-  SourceType sourceType = null;
-  // event file name (or event archive name)
-  String eventSource = null;
-
-  /**
-   * @return current event navigation mode
-   */
-  public NavigationMode getNavigationMode() {
-    return eventNavigationMode;
-  }
-
-  /**
-   * @param mode sets the event navigation mode
-   */
-  public void setNavigationMode(NavigationMode mode) throws InvalidEventSourceException {
-    if(supportsNavigationMode(mode)) {
-      eventNavigationMode = mode;
-      // go to the first event
-      eventIndex = -1;
-    }
-    else
-      throw new InvalidEventSourceException("Mode '"+mode+"' not supported by current source");
-  }
-
-  /**
-   * @param mode event navigation mode
-   * @return true if the requested mode is supported by this source
-   */
-  public boolean supportsNavigationMode(NavigationMode mode) {
-    if(mode == NavigationMode.SEQUENTIAL ||
-        mode == NavigationMode.RANDOM ||
-        mode == NavigationMode.LOOP)
-      return true;
-    return false;
-  }
-
-  /**
-   * Constructor with event source
-   * @param sourceName the name of the source
-   * @throws InvalidEventSourceException 
-   */
-  public AZipEventSource(String sourceName) throws InvalidEventSourceException
-  {
-    //Locally opened things
-    ZipFile zipfile = null;
-    ZipInputStream stream = null;
-    
-    try {
-      // first check if it is an network file
-      if (sourceName.startsWith("http://")) {
-        
-        //open network zip file input stream
-        stream = openNetworkStream(sourceName);
-        //try to read entries from network file
-        readEntriesFromStream(stream);
-        //set the source type
-        sourceType = SourceType.ZIP_NETWORK_FILE;
-        
-      } else if (sourceName.startsWith("file://")) {
-        
-        // strip the file:// from the source name
-        sourceName = sourceName.substring(7);
-
-        // Check if this is a regular file
-        File file = new File(sourceName);
-        
-        //Read entries from regular file
-        if( (file.exists() && file.canRead())){
-      
-          //Now try to open as a zipfile
-          zipfile = new ZipFile(sourceName);
-          //Try to read the entries from that file
-          readEntriesFromFile(zipfile);
-          //set the source type
-          sourceType = SourceType.ZIP_FILE;
-          
-          
-        } else {
-          //might still be a zip file in a jar archive
-          stream = openJarStream(sourceName);
-          //try to read entries from jar file
-          readEntriesFromStream(stream);
-          //set the source type
-          sourceType = SourceType.JAR_FILE;
-        }
-      }
-    } catch(AAtlantisException ae) {
-      //Rethrow
-      throw new InvalidEventSourceException("Atlantis exception reading from: "+eventSource,ae);
-    } catch(MalformedURLException mue) {
-      //Rethrow
-      throw new InvalidEventSourceException("An unknown protocol is specified: "+eventSource,mue);
-    } catch(ZipException zfe) {
-      //Rethrow
-      throw new InvalidEventSourceException("ZIP format error has occurred: "+eventSource,zfe);
-    } catch(IOException ioe) {
-      //Rethrow
-      throw new InvalidEventSourceException("I/O error has occurred reading: "+eventSource,ioe);
-    } finally {
-      //Try to close everthing that has been opened 
-      try {
-        if (zipfile != null) zipfile.close();
-        if (stream != null) stream.close();
-      } catch (Throwable t){
-        //Do nothing if closing fails
-      }
-    }
-
-    //If we have not got a valid source type, throw an error
-    if (sourceType == null)
-      throw new InvalidEventSourceException("Could not identify source type of "+sourceName);
-    
-    //Make sure there are valid events in the file
-    if (ZipEntries.size() == 0)
-      throw new InvalidEventSourceException("No entries in ZIP archive: "+sourceName);
-    
-    //Store source name
-    eventSource=sourceName;
-    //Otherwise set counter to first event
-    eventIndex = -1;
-  }
-  
-  /**
-   * @return the name of the event file or archive
-   */
-  public String getSourceName() {
-    return eventSource;
-  }
-   
-  /**
-   * Try to open a zip file in a jar file as input stream
-   * @param sourceName the name of the zip file
-   * @return the zip stream
-   */
-  private ZipInputStream openJarStream(String sourceName) throws AAtlantisException
-  {
-    //Open as zip input stream
-    return new ZipInputStream(AUtilities.getFileAsStream(sourceName));
-  }
-  
-  /**
-   * Try to open a zip file on the net as input stream
-   * @param sourceName the URL of the zip file
-   * @return the zip stream
-   */
-  private ZipInputStream openNetworkStream(String sourceName) throws ZipException,
-                                                                     MalformedURLException,
-                                                                     IOException
-  {
-    //Open a network zip file as input stream
-    return new ZipInputStream(new URL(sourceName).openStream());
-  }  
-  
-  
-  /**
-   * Check if this is a valid name of an entry in a zip file or stream
-   * @param entryName the name of the entry
-   * @return true if valid
-   */
-  private boolean checkZipEntry(ZipEntry entry){
-    //Make sure it is not a directory
-    if(entry.isDirectory()) return false;
-    //Make sure it ends with .xml
-    if (! entry.getName().toLowerCase().endsWith(".xml")) return false;
-    //everthing fine
-    return true;
-  }
-  
-  /**
-   * Get a list of all valid entries from a zip stream
-   * @param zis the input stream
-   */
-  private void readEntriesFromStream(ZipInputStream zis) throws InvalidEventSourceException
-  {
-      try {
-        //Loop over zip entries
-    		ZipEntry next = null;
-    		while((next = zis.getNextEntry()) != null){
-          //If it is valid add it to our list fo entries
-          if (checkZipEntry(next)) ZipEntries.add(next);
-        }
-      } catch(ZipException ze) {
-        //Rethrow
-        throw new InvalidEventSourceException("ZIP exception reading entry from zip stream",ze);
-      } catch(IOException ioe){
-        //rethrow
-        throw new InvalidEventSourceException("I/O exception reading entry from zip stream",ioe);
-      }
-  }
-  
-  /**
-   * Get a list of all valid XML file entries from a zip file
-   * @param file the zip input file
-   * @throws InvalidEventSourceException
-   */
-  private void readEntriesFromFile(ZipFile file) throws InvalidEventSourceException{
-    
-    //Seems to be a regular file
-    try{
-      //Get the zip file entries
-      Enumeration<? extends ZipEntry> myenum = file.entries();
-      //Loop over zip entries
-      while(myenum.hasMoreElements()){
-        //get the entry 
-        ZipEntry next = (ZipEntry) myenum.nextElement();
-          //If it is valid add it to our list fo entries
-          if (checkZipEntry(next)) ZipEntries.add(next);
-      }
-    } catch(IllegalStateException ise){
-      //rethrow
-      throw new InvalidEventSourceException("Zip file was cleased while trying to read entries: "+file.getName());
-    }
- }   
-    /**
-     * Read a particular event from a stream.
-     * Since the file is read as stream, it's not possible to reference a
-     * particular zip entry. However, we know the number of a zip entry
-     * we want to get (eventIndex), so we seek (getNextEntry()) to the
-     * zip entry of interest and then read it.
-     * @return the event
-     */
-    private AEvent readEventFromStream() throws ReadEventException
-    {
-      //Things we need to close in the end
-      ZipInputStream zis = null;
-      AEvent event = null;
-       
-      try{
-        //Check which kind of stream we have and open it   
-        if (sourceType == SourceType.JAR_FILE) 
-          zis = openJarStream(eventSource);
-        else if (sourceType == SourceType.ZIP_NETWORK_FILE)
-          zis = openNetworkStream(eventSource);
-        else 
-          throw new ReadEventException("Trying to read stream from neither jar file nor network file:" +eventSource);
-    
-        //Now seek through file to current entry
-        ZipEntry entry = null;
-        for(int i = 0; i <= eventIndex; i++)
-          entry = zis.getNextEntry();
-        
-        //Check if we have reached EOF while skipping 
-        if (entry == null)
-          throw new ReadEventException("Reached EOF while skippeng to entry #"+eventIndex
-              +" with name "+ZipEntries.get(eventIndex).getName()+ " in "+eventSource);
-        
-        //Next check if this is the entry we wanted to have
-        if (! entry.getName().equals(ZipEntries.get(eventIndex).getName()))
-          throw new ReadEventException("Content of zip stream changed since opening it:"+eventSource);
-         
-        //Finally read-in this entry
-        event = AEventFromXML.read(zis, entry.getName());
-      } catch (AAtlantisException ae) {
-        throw new ReadEventException("Atlantis exception reading from: " + eventSource, ae);
-      } catch (ZipException ze) {
-        throw new ReadEventException("A ZIP format error has occurred reading entry " +
-                ZipEntries.get(eventIndex).getName() + " from " + eventSource, ze);
-      } catch (IllegalStateException ise) {
-        throw new ReadEventException("The zip file has been closed while reading entry" +
-                ZipEntries.get(eventIndex).getName() + " from " + eventSource, ise);
-      } catch (IOException ioe) {
-        throw new ReadEventException("I/O exception reading from: " + eventSource, ioe);
-
-      } finally {
-        try {
-          //Always close the files in the end;
-          if (zis != null) {
-            zis.close();
-          }
-        } catch (Throwable t) {
-          //Do nothing if closing the stream fails
-          }
-      }
-        
-      //Evertthing is fine, return the event
-      return event;
-    }
-        
-    /**
-     * Read a particular event from a zip file
-     * @param file the zip file
-     * @return the event
-     * @throws ReadEventException
-     */
-    private AEvent readEventFromFile() throws ReadEventException
-    {
-      ZipFile file = null;
-      AEvent event = null;
-      try {
-        //Open the zip file
-        file = new ZipFile(eventSource);
-        //Get the input stream for the requested entry
-        InputStream stream = file.getInputStream(ZipEntries.get(eventIndex));
-        //Get the entry name
-        String eventName = ZipEntries.get(eventIndex).getName();
-        //Read the event
-        event = AEventFromXML.read(stream,eventName);
-      } catch (ZipException ze){
-        throw new ReadEventException("A ZIP format error has occurred reading entry "+
-           ZipEntries.get(eventIndex).getName() + " from "+ eventSource, ze);
-      } catch (IllegalStateException ise){
-        throw new ReadEventException("The zip file has been closed while reading entry"+
-           ZipEntries.get(eventIndex).getName() + " from "+ eventSource, ise);
-      } catch(IOException ioe){
-        throw new ReadEventException("I/O error reading entry "+
-           ZipEntries.get(eventIndex).getName() + " from "+ eventSource, ioe);      
-      } finally {
-        //Always close the input stream
-        try {
-          if(file != null) file.close();
-        } catch (Throwable t) {
-          //Ignore all errors here
-        }
-      }
-      
-      //Everything fine so we can return the event
-      return event;
-    }
- 
-    /**
-     * Reads a random event from a zipped source
-     * @return the event
-     * @throws InvalidEventSourceException
-     * @throws ReadEventException
-     */
-    protected AEvent randomEvent() throws InvalidEventSourceException,
-                                     ReadEventException
-    { 	
-      //Check if we have a valid source
-      if(( sourceType == null ) || ( eventSource==null ))
-        throw new InvalidEventSourceException("No valid input source");
-      
-      //Now go to next event
-      eventIndex = randomGenerator.nextInt(ZipEntries.size());
-
-      //Now get this stream from its proper source
-      switch (sourceType){
-        case JAR_FILE: return readEventFromStream();
-        case ZIP_NETWORK_FILE: return readEventFromStream();
-        case ZIP_FILE: return readEventFromFile();
-        default: throw new ReadEventException("Unknown event source type");
-      }
-    }
-
-    /**
-     * Read the next event from a zipped source
-     * @return the event
-     * @throws InvalidEventSourceException
-     * @throws NoMoreEventsException
-     * @throws ReadEventException
-     */
-    public AEvent nextEvent() throws InvalidEventSourceException,
-                                     NoMoreEventsException,
-                                     ReadEventException
-    {
-      // if random mode is selected, return a random event
-      if(getNavigationMode() == NavigationMode.RANDOM) return randomEvent();
-
-      //Check if we have a valid source
-      if(( sourceType == null ) || ( eventSource==null ))
-        throw new InvalidEventSourceException("No valid input source");
-
-      // if we're in loop mode and at the last event, go to the first one
-      if(getNavigationMode() == NavigationMode.LOOP && eventIndex >= ZipEntries.size() - 1)
-        eventIndex = 0;
-      // if we're not in loop mode and at the last event...
-      else {
-        // check that there are still some events
-        if(eventIndex >= ZipEntries.size() - 1){
-          String msg="Already at last event in archive";  
-          // inform user
-          AOutput.alwaysAppend("\n" + msg+"\n", ALogInterface.WARNING);
-          throw new NoMoreEventsException(msg);
-        }
-        // go to next event.
-        eventIndex++;
-      }
-
-      //Now get this stream from its proper source
-      switch (sourceType){
-        case JAR_FILE: return readEventFromStream();
-        case ZIP_NETWORK_FILE: return readEventFromStream();
-        case ZIP_FILE: return readEventFromFile();
-        default: throw new ReadEventException("Unknown event source type");
-      }
-    }
-
-    
-    /**
-     * Read the previous event from a zipped source
-     * @return the event
-     * @throws InvalidEventSourceException
-     * @throws NoMoreEventsException
-     * @throws ReadEventException
-     */
-    public AEvent previousEvent() throws InvalidEventSourceException,
-                                        NoMoreEventsException,
-                                        ReadEventException
-    {
-
-      // in random mode there's no looking back
-      if(getNavigationMode() == NavigationMode.RANDOM) throw new NoMoreEventsException("Cannot go back in random mode");
-    	
-        //Check if we have a valid source
-      if(( sourceType == null ) || ( eventSource==null ))
-        throw new InvalidEventSourceException("No valid input source");
-
-      // if we're in loop mode and we're at the first event, go to the last one
-      if(getNavigationMode() == NavigationMode.LOOP && eventIndex == 0)
-        eventIndex = ZipEntries.size() -1;
-      // if we're not il loop mode and at the first event...
-      else {
-        // check that there are still some events
-        if(eventIndex == 0){
-          String msg="Already at first event in archive";  
-          // inform user
-          AOutput.alwaysAppend("\n" + msg+"\n", ALogInterface.WARNING);
-          throw new NoMoreEventsException(msg);
-        }
-        // go to previous event.
-        eventIndex--;
-      }
-      
-      //Now get this stream from its proper source
-      switch (sourceType){
-        case JAR_FILE: return readEventFromStream();
-        case ZIP_NETWORK_FILE: return readEventFromStream();
-        case ZIP_FILE: return readEventFromFile();
-        default: throw new ReadEventException("Unknown event source type");
-      }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/oncrpc/AONCRPCEventSource.java b/graphics/AtlantisJava/src/atlantis/event/oncrpc/AONCRPCEventSource.java
deleted file mode 100644
index 42410d719418..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/oncrpc/AONCRPCEventSource.java
+++ /dev/null
@@ -1,304 +0,0 @@
-
-package atlantis.event.oncrpc;
-
-import atlantis.data.AEventFromXML;
-import atlantis.utils.ALogger;
-
-import atlantis.event.ABufferedEventSource;
-import atlantis.event.AEvent;
-import atlantis.event.AEventInfo;
-import atlantis.event.AStreamedEventSource;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-
-import org.acplt.oncrpc.XdrVoid;
-import org.acplt.oncrpc.OncRpcTcpClient;
-import org.acplt.oncrpc.OncRpcException;
-import org.acplt.oncrpc.OncRpcProgramNotRegisteredException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.Vector;
-
-/**
- * Implements an event source retrieving events from an ONC/RPC server.
- * By implementing a ABufferedEventSource, a number of previous events will be
- * available to the user. Care is taken to clear the buffer in case we run into
- * memory problems. This event source also provides event streams by implementing
- * AStreamedEventSource.
- * 
- * @author sboeser
- */
-
-public class AONCRPCEventSource extends ABufferedEventSource implements AStreamedEventSource {
-
-  //The logger
-  private static final ALogger logger = ALogger.getLogger(AONCRPCEventSource.class);
-  
-  //The ONC/RPC client
-  private OncRpcTcpClient client = null;
- 
-  //The default timeout value in milliseconds for calling the server
-  private static final int DEFAULT_TIMEOUT = 2000;
-  //The name of the stream to read events from
-  private String currentStream = null;
-
-  /**
-   * Constructor with the server name and port as a string value
-   * @param sourceName
-   * @throws InvalidEventSourceException 
-   */
-  public AONCRPCEventSource(String sourceName) throws InvalidEventSourceException {
-    
-   //Remove any leading "oncrpc://" indicator
-   sourceName = sourceName.replaceFirst("oncrpc://", "");
-   
-   //Check if we can split the sourceName in hostName:port pair
-   String[] sourceParams = sourceName.split(":");
-   //Do some sanity check
-   if (sourceParams.length > 3)
-     throw new InvalidEventSourceException("Invalid <server[:port][:stream]> specification: "+sourceName);
-     
-   //Now try to get the port number if it was given,
-   //Otherwise get port from portmapper by using 0;
-   int port = 0;
-   if ((sourceParams.length > 1)&&(sourceParams[1].length() > 0)){
-     try {
-       port = Integer.decode(sourceParams[1]);
-     } catch (NumberFormatException nfe){
-       throw new InvalidEventSourceException("Invalid port number: "+sourceParams[1]);
-     }
-   }
-
-   //More sanity checks
-   if (port < 0)
-     throw new InvalidEventSourceException("Invalid port number: "+port);  
-
-   //If a stream name was given, set it now
-   if (sourceParams.length > 2) currentStream = sourceParams[2];
-
-
-   //Now call the fully qualified constructor with the defaul timeout value
-   createClient(sourceParams[0],port,DEFAULT_TIMEOUT);
- 
-  }
- 
-  /**
-   * Constructor with server name, port number and timeout
-   * @param hostName the name or IP-address of the remote server
-   * @param port the port number to which the request is send - can be 0
-   * @param timeout a timeout value in milliseconds
-   * @throws InvalidEventSourceException 
-   */
-  public AONCRPCEventSource(String hostName, int port, int timeout) throws InvalidEventSourceException {
-    //Call common constructor entry
-    createClient(hostName,port,timeout);
-  }
- 
-  /**
-   * @return a string of the form oncrpc://hostName:port:stream
-   */
-  public String getSourceName() {
-    return "oncrpc://"+client.getHost().getHostName()+":"+ client.getPort()+
-      ((currentStream != null) ? ":"+currentStream : "");
-  }
-
-  /**
-   * This source only supports sequential mode.
-   * @param mode event navigation mode to test
-   * @return true if the requested mode is supported by this source
-   */
-  public boolean supportsNavigationMode(NavigationMode mode) {
-    if(mode == NavigationMode.SEQUENTIAL)
-      return true;
-    return false;
-  }
-
-  /**
-   * Common entry point for all constructors
-   * @param hostName the name or IP-address of the remote server
-   * @param port the port number to which the request is send
-   * @param timeout a timeout value in milliseconds
-   * @throws InvalidEventSourceException
-   */
-  private void createClient(String hostName, int port, int timeout) throws InvalidEventSourceException {
- 
-    //Now try to create the client
-    try {
-      client = new OncRpcTcpClient(InetAddress.getByName(hostName),
-              Server.ONCRPCSERVERPROG,Server.ONCRPCSERVERVERS,port);
-    } catch ( ConnectException e ) {
-      throw new InvalidEventSourceException("Could not connect to "+hostName,e);
-    } catch ( OncRpcProgramNotRegisteredException e ) {
-      throw new InvalidEventSourceException("Server not (yet) registered on "+hostName,e);
-    } catch ( OncRpcException e ) {
-      throw new InvalidEventSourceException("ONC/RPC exception while connecting to "+hostName,e);
-    } catch ( IOException e ) {
-      throw new InvalidEventSourceException("I/O Exception while connecting to "+hostName,e);
-    }
-
-    //Set the requested timeout
-    client.setTimeout(timeout);
-  }
-    
-  /**
-   * Read the next event from the server
-   * @param currentEvent the current event
-   * @return the next event
-   * @throws NoMoreEventsException
-   * @throws InvalidEventSourceException
-   * @throws ReadEventException
-   */
-  @Override
-  protected synchronized AEvent readNext(AEventInfo currentEvent) throws NoMoreEventsException,
-                                                         InvalidEventSourceException,
-                                                         ReadEventException {
-
-    //Be verbose
-    logger.info("Call to remote server "+getSourceName());
-
-   //Ping the server to make sure it is alive, otherwise try to recreate client
-    try {
-      client.call(Server.ONCRPC_NULL_PROC,XdrVoid.XDR_VOID, XdrVoid.XDR_VOID);
-    } catch (OncRpcException e) {
-      //Server does not respond to ping, try to recreate client
-      logger.info("Failed to ping server "+getSourceName()+", trying to recreate client");
-      //Use setting from old client to create new client, but allow new port number
-      createClient(client.getHost().getHostName(),0,client.getTimeout());
-    }
-
-    //Create an event request - this may als set the default stream
-    EventRequest eventReq = new EventRequest(-1,-1,getStream());
-
-
-    //use information from existing event if there is
-    if (currentEvent != null){
-      eventReq.EventNumber = currentEvent.getEventNumber();
-      eventReq.RunNumber = currentEvent.getRunNumber();
-    }
-     
-    //Also prepare the return structure
-    Event event = new Event();
-
-    //record calling time
-    long startTime = System.currentTimeMillis();
-    
-  
-    // perform the remote call
-    try {
-      client.call(Server.ONCRPC_GETEVENT_PROC, eventReq, event);
-    } catch (OncRpcException e) {
-      throw new InvalidEventSourceException("Failed to get new event from server",e);
-    }
-
-    //do some statistics
-    long callDuration = System.currentTimeMillis() - startTime;
-    logger.debug("Received " + event.EventData.length + " bytes in " + callDuration + " ms");
-
-    //Now analyze the event we got
-    //Check if we already have the event
-    if (event.isIdentical)
-      //already have this event
-      throw new NoMoreEventsException("Already have event "+event.EventNumber +
-                                      " from run "+event.RunNumber);
-    //Check if the stream was available
-    if (!event.isAvailable)
-      //make event source invalid
-      throw new InvalidEventSourceException("No event available for stream "+eventReq.StreamName);
-    
-    //Check if the event is compressed
-    if (event.isCompressed)
-      //not supported yet
-       throw new UnsupportedOperationException("Support for compressed events not yet implemented");
-
-    //It seems we got something worth processing
-    //Strip the trailing null character
-    event.EventData=(new String(event.EventData)).trim().getBytes();
-    //Wrap the data as an inputstream
-    ByteArrayInputStream bais = new ByteArrayInputStream(event.EventData);
-  
-    //Finally construct a new event and return it
-    return AEventFromXML.read(bais, currentStream);
-  }
-  
-/**
-   * Requesting to read the previouse event from the server only appears
-   * if we have already reached the beginning of the event buffer.
-   * Only one current events are provided by the server at any time, thus we
-   * will always throw a NoMoreEventsException. Handling of the exception is left
-   * to the GUI interface.
-   * @param currentEvent will be ignored
-   * @return nothing as it will always raise an exception
-   * @throws NoMoreEventsException
-   */
-  @Override
-  protected AEvent readPrevious(AEventInfo currentEvent) throws NoMoreEventsException
-  {
-    throw new NoMoreEventsException("ONC/RPC server does not provide a previous event");
-  }
-
-  /**
-   * Get a list of available streams from the server
-   * @return the list of stream names
-   * @throws InvalidEventSourceException if the server cannot be contacted
-   */
-  public synchronized Vector<String> getAvailableStreams() throws InvalidEventSourceException {
-    
-    //Prepare response structure
-    Streams streams = new Streams();
-
-
-    //Call the server
-    try {
-      client.call(Server.ONCRPC_GETSTREAMS_PROC, XdrVoid.XDR_VOID, streams);
-    } catch (OncRpcException e) {
-      throw new InvalidEventSourceException("Failed to get new stream list from server",e);
-    }
-    //We got stream names, so just return them
-    return new Vector(Arrays.asList(streams.StreamNames));
-  }
-
-  /**
-   * Set a new stream as current stream
-   * @param streamName the name of the stream
-   * @throws InvalidStreamException if the stream does not exist at the server
-   */
-  public synchronized void setStream(String streamName) throws InvalidStreamException,
-                                                               InvalidEventSourceException{
-    //Check if the requested stream is available
-    if (! getAvailableStreams().contains(streamName))
-      throw new InvalidStreamException("Stream \""+streamName+"\" not available at server");
-
-    //Store this as the new current stream
-    currentStream = streamName;
-  }
-
-  /**
-   * Get the currently selected stream
-   * @return the name of the currently selected stream
-   * @throws NoMoreEventsException if no streams are available
-   * @throws InvalidEventSourceException if the list of streams can not be obtained
-   */
-  public synchronized String getStream() throws InvalidEventSourceException,
-                                                NoMoreEventsException
-  {
-
-    //If stream name is not set, set it to first available by default
-    if (currentStream==null){
-      //Get list of streams
-      Vector<String> streams = getAvailableStreams();
-      //If there are none throw a "NoMoreEventsException"
-      if (streams.size()<1) throw new NoMoreEventsException("No streams available");
-      //Now set current stream as first one in list
-      currentStream=streams.firstElement();
-      //be verbose
-      logger.info("Stream not set, using '"+currentStream+"'");
-    }
-
-    return currentStream;
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Event.java b/graphics/AtlantisJava/src/atlantis/event/oncrpc/Event.java
deleted file mode 100644
index cf34cf74cb0f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Event.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package atlantis.event.oncrpc;
-import org.acplt.oncrpc.*;
-import java.io.IOException;
-
-/**
- * This structure declares the event as returned from a call
- * to the ONCRPC_GETEVENT_PROC.
- * @author Sebastian Boeser
- */
-public class Event implements XdrAble {
-
-
-    /** False if no event exists for the requested stream at the server*/
-    public boolean isAvailable;
-    /** True if no new event exists at the server */
-    public boolean isIdentical;
-    /** True if the event data is compressed */
-    public boolean isCompressed;
-    /** The name fo the stream this event belongs to */
-    public String StreamName;
-    /** The number of the event */
-    public long EventNumber;
-    /** The number of the run */
-    public long RunNumber;
-    /** The event data as byte array */
-    public byte [] EventData;
-
-    /**
-     * Constructor
-     */
-    public Event() {
-        //Initialize variables
-        isAvailable = false ;
-        isIdentical = false ;
-        isCompressed = false ;
-        StreamName = "";
-        EventNumber = -1;
-        RunNumber = -1;
-        EventData = null;
-    }
-
-    /**
-     * Constructor that can be used with RPC client call
-     * @param xdr the stream that holds the encoded event
-     * @throws OncRpcException if decoding fails
-     * @throws IOException
-     */
-    public Event(XdrDecodingStream xdr) throws OncRpcException, IOException {
-        xdrDecode(xdr);
-    }
-
-    /**
-     * Encode the information in XDR representation
-     * @param xdr the stream to encode into
-     * @throws OncRpcException if encoding fails
-     * @throws IOException
-     */
-    public void xdrEncode(XdrEncodingStream xdr) throws OncRpcException, IOException {
-      //Encode all fields in proper order into the stream
-      xdr.xdrEncodeBoolean(isAvailable);
-      xdr.xdrEncodeBoolean(isIdentical);
-      xdr.xdrEncodeBoolean(isCompressed);
-      xdr.xdrEncodeString(StreamName);
-      xdr.xdrEncodeLong(EventNumber);
-      xdr.xdrEncodeLong(RunNumber);
-      xdr.xdrEncodeByteVector(EventData);
-    }
-
-    /**
-     * Decode the information from XDR representation
-     * @param xdr the stream to decode from
-     * @throws OncRpcException if decoding fails
-     * @throws IOException
-     */
-    public void xdrDecode(XdrDecodingStream xdr) throws OncRpcException, IOException {
-      //Decode all fields in proper order from stream
-      isAvailable = xdr.xdrDecodeBoolean();
-      isIdentical = xdr.xdrDecodeBoolean();
-      isCompressed = xdr.xdrDecodeBoolean();
-      StreamName = xdr.xdrDecodeString();
-      EventNumber = xdr.xdrDecodeLong();
-      RunNumber = xdr.xdrDecodeLong();
-      EventData = xdr.xdrDecodeDynamicOpaque();
-    }
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/event/oncrpc/EventRequest.java b/graphics/AtlantisJava/src/atlantis/event/oncrpc/EventRequest.java
deleted file mode 100644
index fa60d7828576..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/oncrpc/EventRequest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package atlantis.event.oncrpc;
-import org.acplt.oncrpc.*;
-import java.io.IOException;
-
-/**
- * Data structure as passed to the ONCRPC_GETEVENT_PROC
- * When sending an event request to the server, we have to specify the stream name,
- * along with informatian about events we already have. Negative event and run number
- * indicates we don't have any events yet.
- * @author Sebastian Boeser
- */
-public class EventRequest implements XdrAble {
-
-  /** The event number of the event we already have */
-  public long EventNumber;
-  /** The run number of the event we already have */
-  public long RunNumber;
-  /** The name of the stream we are asking events from */
-  public String StreamName;  
-
-  /**
-   * Constructor
-   */
-  public EventRequest() {
-      //Initialize values
-      EventNumber = -1;
-      RunNumber = -1;
-      StreamName = "";
-  }
-
-  /**
-   * Fully qualified constructor
-   * @param eventNumber the event number of the event we already have
-   * @param runNumber   the run number of the event we already have
-   * @param streamName  the stream we are asking events from
-   */
-  public EventRequest(long eventNumber, long runNumber, String streamName){
-    EventNumber = eventNumber;
-    RunNumber = runNumber;
-    StreamName = streamName;
-  }
-
-  /**
-   * Construct an event request returned from an rpc call
-   * @param xdr the stream to construct the request from
-   * @throws OncRpcException if decoding fails
-   * @throws IOException
-   */
-  public EventRequest(XdrDecodingStream xdr) throws OncRpcException, IOException {
-      xdrDecode(xdr);
-  }
-
-  /**
-   * Encode the information in XDR representation
-   * @param xdr the stream to encode into
-   * @throws OncRpcException if encoding fails
-   * @throws IOException
-   */
-  public void xdrEncode(XdrEncodingStream xdr) throws OncRpcException, IOException {
-    //Encode into stream in proper order
-    xdr.xdrEncodeLong(EventNumber);
-    xdr.xdrEncodeLong(RunNumber);
-    xdr.xdrEncodeString(StreamName);
-  }
-
-  /**
-   * Decode the information in XDR representation
-   * @param xdr the stream to decode from
-   * @throws OncRpcException if decoding fails
-   * @throws IOException
-   */
-  public void xdrDecode(XdrDecodingStream xdr) throws OncRpcException, IOException {
-    //Decode from stream in proper order
-    EventNumber = xdr.xdrDecodeLong();
-    RunNumber = xdr.xdrDecodeLong();
-    StreamName = xdr.xdrDecodeString();
-  }
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Server.java b/graphics/AtlantisJava/src/atlantis/event/oncrpc/Server.java
deleted file mode 100644
index be83e8e71c9f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Server.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package atlantis.event.oncrpc;
-
-/**
- * A collection of constants used by the "ONCRPCServer" ONC/RPC program.
- * These constants need to match the respective definitons on the C++ server
- * side, where they are defined in JiveXML/JiveXML/ONCRPCServer.h
- * @author Sebastian Boeser
- */
-public interface Server {
-
-  /**
-   * The ID by which the server is identified
-   */
-  public static final int ONCRPCSERVERPROG = 200048965;
-
-  /**
-   * The version of the current server interface
-   */
-  public static final int ONCRPCSERVERVERS = 2;
-
-  /**
-   * The ID of the void procdure
-   */
-  public static final int ONCRPC_NULL_PROC = 0;
-
-  /**
-   * The ID of the getStatus procedure
-   */
-  public static final int ONCRPC_GETSTATUS_PROC = 1;
-
-  /**
-   * The ID of the getStreams procedure
-   */
-  public static final int ONCRPC_GETSTREAMS_PROC = 2;
-
-
-  /**
-   * The ID of the getEvent procedure
-   */
-  public static final int ONCRPC_GETEVENT_PROC = 3;
-
-  /**
-   * The ID of the SetNewEvent procedure - is not implemented in this client
-   */
-  //public static final int ONCRPC_SETEVENT_PROC = 4;
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Streams.java b/graphics/AtlantisJava/src/atlantis/event/oncrpc/Streams.java
deleted file mode 100644
index b61d84cb9732..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/oncrpc/Streams.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package atlantis.event.oncrpc;
-import org.acplt.oncrpc.*;
-import java.io.IOException;
-
-/**
- * Data structure as returned from ONCRPC_GETSTREAMS_PROC is a list of stream names
- * available at the server.
- * @author Sebastian Boeser
- */
-public class Streams implements XdrAble {
-
-    /** The array of stream names */
-    public String [] StreamNames;
-
-    /**
-     * Constructor
-     */
-    public Streams() {
-    //Array is empty by default, nothing to initialize
-    }
-
-    /**
-     * Constructure that can be passed to an RPC client call
-     * @param xdr the stream to decode from
-     * @throws OncRpcException if decoding fails
-     * @throws IOException
-     */
-    public Streams(XdrDecodingStream xdr) throws OncRpcException, IOException {
-      xdrDecode(xdr);
-    }
-
-    /**
-     * Encode the information in XDR representation
-     * @param xdr the XDR stream to encode into
-     * @throws OncRpcException if encoding fails
-     * @throws IOException
-     */
-    public void xdrEncode(XdrEncodingStream xdr) throws OncRpcException, IOException {
-      //Encode the stream name
-      xdr.xdrEncodeStringVector(StreamNames);
-    }
-
-    /**
-     * Decode the information from XDR representation
-     * @param xdr the XDR stream to decode from
-     * @throws OncRpcException if decoding fails
-     * @throws IOException
-     */
-    public void xdrDecode(XdrDecodingStream xdr) throws OncRpcException, IOException {
-      //Encode stream names
-      StreamNames = xdr.xdrDecodeStringVector();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/package.html b/graphics/AtlantisJava/src/atlantis/event/package.html
deleted file mode 100644
index b6788c40f433..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>This package holds all the main event base classes, such as
- the data type base AData or the event class AEvent. It also hold the event
- sourc managers and interfaces, as well as their concrete implementations.
-</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AClientXMLRPC.java b/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AClientXMLRPC.java
deleted file mode 100755
index 2e795e433c13..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AClientXMLRPC.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package atlantis.event.xmlrpc;
-
-import atlantis.utils.*;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.util.Vector;
-
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.apache.xmlrpc.client.AsyncCallback;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-import org.apache.xmlrpc.client.TimingOutCallback;
-
-
-/**
- * Implementation of XMLRPC client communicating to the
- * server side running within the Athena framework - JiveXML C++ ulxmlrpcpp server,
- * Python Interactive server.
- *
- * @author Zdenek Maxa
- */
-public class AClientXMLRPC
-{
-	private final static ALogger logger = ALogger.getLogger(AClientXMLRPC.class);
-
-    private String methodName = "";
-    private AsyncCallback caller = null;
-
-    // timeout - default timeout delay for synchronous calls [ms]
-    private int timeout = 6000;
-
-
-
-    
-    /**
-     * Constructor for synchronous XMLRPC calls
-     * @param method
-     */
-    public AClientXMLRPC(String method)
-    {
-        this.methodName = method;
-        this.caller = null; // synchronous calls will be demanded
-
-    } // AClientXMLRPC() ----------------------------------------------------
-
-    
-
-    /**
-     * Constructor for asynchronous XMLRPC calls
-     * @param method
-     * @param caller
-     */
-    public AClientXMLRPC(String method, AsyncCallback caller)
-    {
-        this.methodName = method;
-        this.caller = caller; // asynchronous calls
-
-    } // AClientXMLRPC() ----------------------------------------------------
-
-    
-
-    public void setTimeout(int value)
-    {
-        this.timeout = value;
-
-    } // setTimeout() -------------------------------------------------------
-
-    
-
-    /**
-     * Asynchronous XMLRPC call, returns immediately and callback
-     * caller is later invoked when result is available.
-     * @param client
-     * @param params
-     * @throws ARemoteCallerException
-     */
-    private void asynchronousCallXMLRPCServer(XmlRpcClient client, Vector params)
-                                             throws ARemoteCallerException
-    {
-    	String msg = "";
-    	
-    	logger.debug("Asynchronous XMLRPC call ...");
-    	try
-    	{
-        	client.executeAsync(methodName, params, caller);
-        	
-    	}
-    	catch(Throwable t)
-    	{
-    		if(t instanceof XmlRpcException)
-    		{
-    			msg = "XMLRPC exception occured, performing the remote call failed.";
-    		}
-    		else
-    		{
-    			msg = "Unspecified exception occured, reason: " + t.getMessage(); 
-    		}
-			logger.debug(msg, t);
-			throw new ARemoteCallerException(msg);    		
-    	}
-    	
-    } // asynchronousCallXMLRPCServer() -------------------------------------
-    
-    
-    
-    /**
-     * Synchronous XMLRPC call. Implemented as asynchronous but timing-out
-     * call so that we wait until the result is available. This way it prevents
-     * Atlantis from hanging if remote server (Athena) crashes.
-     * @param client
-     * @param params
-     * @return
-     * @throws ARemoteCallerException
-     */
-    private String synchronousCallXMLRPCServer(XmlRpcClient client, Vector params)
-                                            throws ARemoteCallerException
-    {
-    	String msg = "";
-    	String result = null;
-    	
-    	logger.debug("Synchronous timing-out XMLRPC call (timeout " +
-    			     timeout / 1000 + "s) ...");
-    	
-    	TimingOutCallback callback = new TimingOutCallback(timeout);
-    	try
-    	{
-    		client.executeAsync(methodName, params, callback);
-    	}
-    	catch(XmlRpcException xmle)
-    	{
-    		msg = "XMLRPC exception occured, performing the remote call failed.";
-			logger.debug(msg, xmle);
-			throw new ARemoteCallerException(msg);
-    	}
-    	
-    	
-    	try
-    	{	
-    		result = (String) callback.waitForResponse();
-            
-    		// no error, result should be event data - all well
-        	logger.debug("Performing timing out XMLRPC call successful.");
-    	}
-    	catch(Throwable t)
-    	{
-    		if(t instanceof InterruptedException)
-    		{
-    			msg = "The request was interrupted, timed out after " +
-    			    timeout / 1000 + "s, try increasing the timer.";
-    		}
-    		else if(t instanceof TimingOutCallback.TimeoutException)
-    		{
-    			msg = "No response was received after waiting " +
-    			      timeout / 1000 + "s, try increasing the timer.";
-    		}
-    		else
-    		{
-    			msg = "An error was returned by the server, reason: " + t.getMessage(); 
-    		}
-			logger.debug(msg, t);
-			throw new ARemoteCallerException(msg);
-    	}
-    	
-    	return result;
-    	
-    } // synchronousCallXMLRPCServer() --------------------------------------
-    
-    
-
-    /**
-     * Main method calling remote server methods via XMLRPC
-     * 
-     * @param serverName - name of the XMLRPC server to call method on
-     * @param port - where XMLRPC runs
-     * @param params - Vector containing either command to execute,
-     *        name of a remote variable to get its value or expression to
-     *        process (to change some variables's value)
-     * @return String - result
-     * @throws ARemoteCallerException 
-     */
-    public String callXMLRPCServer(String serverName, int port, Vector params)
-                                    throws ARemoteCallerException
-    {
-
-        XmlRpcClient client = null;
-        String result = null;
-        String msg = null; // logging temporary variable
-
-        msg = "Calling " + serverName + ":" + port;
-        logger.info(msg);
-
-        
-        // create instance of XMLRPC client
-        try
-        {
-            // Vector type is only acceptable for XmlRpcClient.execute() /
-            // .executeAsync()
-            // String is expected on the remote side by C++ ulxmlrpcpp server
-            // String, among others, is accepted by Python server as well
-
-            // throws MalformedURLException
-        	XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
-        	config.setServerURL(new URL(serverName + ":" + port));
-        	client = new XmlRpcClient();
-        	client.setConfig(config);
-        	logger.debug("XMLRPC client instantiated successfully.");
-        }
-        catch(Throwable t)
-        {
-            if(t instanceof MalformedURLException)
-            {
-                msg = "Could not create XMLRPC client, bad address  " +
-                      serverName + ":" + port + "\n" +
-                      "reason: " + t.getMessage();
-            }
-            else
-            {
-                msg = "Unspecified exception occured\n" +
-                      "reason: " + t.getMessage();
-            }
-
-            logger.debug(msg, t);
-            throw new ARemoteCallerException(msg);
-        }
-
-                
-        if(caller != null)
-        {
-        	// perform asynchronous XMLRPC call, returns immediately
-        	asynchronousCallXMLRPCServer(client, params);
-        }
-        else
-        {
-        	// synchronous call, timing out synchronous call
-        	result = synchronousCallXMLRPCServer(client, params);
-        }
-        
-    	client =  null;
-    	return result;
-        
-    } // callXMLRPCServer() -------------------------------------------------
-
-
-} // class AClientXMLRPC ====================================================
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/ARemoteCallerException.java b/graphics/AtlantisJava/src/atlantis/event/xmlrpc/ARemoteCallerException.java
deleted file mode 100755
index b6958f4d1ea0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/ARemoteCallerException.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package atlantis.event.xmlrpc;
-
-import atlantis.utils.*;
-
-
-/**
- *
- * Exception thrown after errors occured during calls
- * to remote server methods (within Athena) via XMLRPC
- *
- * @author Zdenek Maxa
- */
-public class ARemoteCallerException extends AAtlantisException
-{
-    public ARemoteCallerException(String msg)
-    {
-        super("Exception while calling remote procedure.\n" + msg);
-
-    } // ARemoteCallerException() -------------------------------------------
-
-
-} // class ARemoteCallerException ===========================================
diff --git a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPC.java b/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPC.java
deleted file mode 100644
index 8d481b260b6e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPC.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package atlantis.event.xmlrpc;
-
-import atlantis.utils.*;
-import java.io.IOException;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.webserver.WebServer;
-import org.apache.xmlrpc.server.XmlRpcServer;
-import org.apache.xmlrpc.server.PropertyHandlerMapping;
-
-/**
- *
- * @author Adam Davison
- */
-public class AServerXMLRPC {
-
-    private static ALogger logger = ALogger.getLogger(AServerXMLRPC.class);
-    
-    private WebServer m_ws;
-    
-    public AServerXMLRPC(int port, Class handler) throws XmlRpcException {
-        
-        logger.debug("Attempting to create XMLRPC server on port " + port);
-        logger.debug("Serving requests to handler of type " + handler.getName());
-        
-        m_ws = new WebServer(port);
-        XmlRpcServer xmlRpcServer = m_ws.getXmlRpcServer();
-        PropertyHandlerMapping phm = new PropertyHandlerMapping();
-        phm.addHandler(handler.getName(), handler);
-        xmlRpcServer.setHandlerMapping(phm);
-        
-        logger.debug("XMLRPC server created successfully");
-       
-    }
-    
-    public void start() throws IOException {
-        
-        logger.debug("Attempting to start XMLRPC server");
-        m_ws.start();
-        logger.info("XMLRPC server started");
-        
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPCEventSource.java b/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPCEventSource.java
deleted file mode 100644
index f3bf0fe2c684..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AServerXMLRPCEventSource.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package atlantis.event.xmlrpc;
-
-import atlantis.utils.*;
-import atlantis.canvas.ACanvas;
-import atlantis.data.AEventFromXML;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.encoders.AImageEncoder;
-import java.io.ByteArrayInputStream;
-
-/**
- *
- * @author Adam Davison
- */
-public class AServerXMLRPCEventSource implements AEventSource{
-    
-    private static ALogger logger = ALogger.getLogger(AServerXMLRPCEventSource.class);
-    
-    private AEventManager m_aem;
-    private ACanvas m_canv;
-    private AImageEncoder m_ie;
-    
-    private AEvent m_event = null; // Current event
-    private String m_sourcename = ""; // Source name
-
-    private NavigationMode eventNavigationMode = NavigationMode.PUSH;
-    
-    public AServerXMLRPCEventSource() {
-        m_aem = AEventManager.instance();
-        m_canv = ACanvas.getCanvas();
-        m_ie = new AImageEncoder();
-    }
-
-    public String getVersion() {
-        return AGlobals.instance().getVersion();
-    }
-    
-    public boolean isReady() {
-        return true;
-    }
-    
-    public boolean shutdown() {
-        logger.info("Exiting atlantis...");
-        System.exit(0);
-        return true;
-    }
-
-    public NavigationMode getNavigationMode() {
-      return eventNavigationMode;
-    }
-
-    public boolean supportsNavigationMode(NavigationMode mode) {
-      if(mode == NavigationMode.PUSH)
-        return true;
-      return false;
-    }
-
-    public void setNavigationMode(NavigationMode mode) throws InvalidEventSourceException {
-      if(mode != NavigationMode.PUSH)
-        throw new InvalidEventSourceException("Mode '"+mode.name()+"' not supported by current source");
-      eventNavigationMode = mode;
-    }
- 
-    private void setEventFromBytes(byte[] eventdata, String sourcename) throws Exception {
-        AEvent e = AEventFromXML.read(new ByteArrayInputStream(eventdata), sourcename);
-        
-        m_event = e;
-        m_sourcename = sourcename;
-        
-        // Force update from event manager
-        m_aem.setEventSource(this);
-        m_aem.nextEvent();
-    }
-    
-    private byte[] getSingleImage(int w, int h, String type, double s) throws Exception {
-        if (type.equalsIgnoreCase("png")) {
-            return m_ie.getPNGData(w, h);
-        } else if (type.equalsIgnoreCase("scaledpng")) {
-            return m_ie.getScaledPNGData(w, h, s);
-        }
-        
-        throw new Exception("Unknown image format: " + type);
-    }
-    
-    private byte[] getSingleImageAspect(int w, String type, double s) throws Exception {
-        int h = m_canv.getRespectiveHeight(w);
-        return getSingleImage(w, h, type, s);
-    }
-    
-    public byte[][] generateDefaultImages(byte[] eventdata, String sourcename,
-                int width, double thumb_scale) {
-        
-        byte ret[][] = new byte[2][];
-        
-        try {
-            setEventFromBytes(eventdata, sourcename);
-            ret[0] = getSingleImageAspect(width, "png", 0.0);
-            ret[1] = getSingleImageAspect(width, "scaledpng", thumb_scale);
-        } catch (Exception e) {
-            logger.error("Error while handling request to generateDefaultImages()", e);
-            return null;
-        }
-        
-        return ret;
-    }
-
-    public AEvent nextEvent() throws NoMoreEventsException, InvalidEventSourceException, ReadEventException {
-        if (m_event == null) {
-            throw new InvalidEventSourceException();
-        }
-        return m_event;
-    }
-
-    public AEvent previousEvent() throws NoMoreEventsException, InvalidEventSourceException, ReadEventException {
-        throw new NoMoreEventsException();
-    }
-
-    public String getSourceName() {
-        return m_sourcename;
-    }
-    
-    /*public byte[][] generateImages(byte[] eventdata, String sourcename,
-                Integer nimgs, Object[] w, Object[] h, Object[] type, Object[] s) {
-        
-        byte ret[][] = new byte[nimgs][];
-        
-        try {
-            setEventFromBytes(eventdata, sourcename);
-
-            for (int i = 0; i < nimgs; i++) {
-                // Handle cast of s better here
-                ret[i] = getSingleImage((Integer) (w[i]), (Integer) (h[i]),
-                        (String) (type[i]), (Double) (s[i]));
-            }
-            
-        } catch (Exception e) {
-            logger.error("Error while handling request to generateImages()", e);
-            return null;
-        }
-
-        return ret;
-    }*/
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AXMLRPCEventSource.java b/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AXMLRPCEventSource.java
deleted file mode 100644
index 29967b6e3106..000000000000
--- a/graphics/AtlantisJava/src/atlantis/event/xmlrpc/AXMLRPCEventSource.java
+++ /dev/null
@@ -1,238 +0,0 @@
-
-package atlantis.event.xmlrpc;
-
-import atlantis.event.*;
-import atlantis.data.AEventFromXML;
-import atlantis.Atlantis;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-
-import atlantis.utils.ALogger;
-
-import java.io.ByteArrayInputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Vector;
-
-
-/**
- * Implements an event source retrieving events from an XMLRCP server.
- * By implementing a ABufferedEventSource, a number of previous events will be
- * available to the user. Care is taken to clear the buffer in case we run into
- * memory problems.
- * 
- * @author sboeser
- */
-
-public class AXMLRPCEventSource extends ABufferedEventSource {
-
-  //The logger
-  private static final ALogger logger = ALogger.getLogger(AXMLRPCEventSource.class);
-  
-  //The XMLRPC client
-  private AClientXMLRPC XMLRPCClient = null;
-  //The Method to call on the server side
-  private static final String GETEVENTDATA = "getEventData";
-  //The default timeout value in milliseconds for calling the server
-  private static final int DEFAULT_TIMEOUT = 2000;
-  //The name of the local machine (send along with event request)
-  private String localMachineName = "<unknown>";
-  //The name and port number of the remote host
-  private String remoteMachineName = null;
-  //The port number to which we should connect
-  private Integer portNumber = null;
-  //The timeout for a request
-  private Integer timeOut = null;  
-
-  /**
-   * Constructor with the server name and port as a string value
-   * @param sourceName
-   * @throws InvalidEventSourceException 
-   */
-  public AXMLRPCEventSource(String sourceName) throws InvalidEventSourceException {
-    
-   //Remove any leading "xmlrpc://" indicator
-   sourceName = sourceName.replaceFirst("xmlrpc://", "");
-   //try to split sourceName in serverName:port pair
-   String[] sourceParams = sourceName.split(":");
-   //Do some checks
-   if (sourceParams.length != 2)
-     throw new InvalidEventSourceException("Invalid <server:port> specification: "+sourceName);
-     
-   //Try to get the port number
-   int port = -1;
-   try {
-     port = Integer.decode(sourceParams[1]);
-   } catch (NumberFormatException nfe){
-     throw new InvalidEventSourceException("Invalid port number: "+sourceParams[1]);
-   }
-   
-   if (port < 0)
-     throw new InvalidEventSourceException("Invalid port number: "+port);  
-   
-   //Now call the fully qualified constructor with the defaul timeout value
-   CreateXMLRPCEventSource(sourceParams[0],port,DEFAULT_TIMEOUT);
- 
-  }
- 
-  /**
-   * Constructor with server name, port number and timeout
-   * @param serverName the name or IP-address of the remote server 
-   * @param port the port number to which the request is send
-   * @param timeout a timeout value in milliseconds
-   * @throws InvalidEventSourceException 
-   */
-  public AXMLRPCEventSource(String serverName, int port, int timeout)
-          throws InvalidEventSourceException {
-    //Call common constructor entry
-    CreateXMLRPCEventSource(serverName,port,timeout);
-  }
- 
-  /**
-   * @return a string of the form xmlrpc://servername:port
-   */
-  public String getSourceName() {
-    return "xmlrpc://"+remoteMachineName+":"+portNumber;
-  }
-
-  /**
-   * @param mode event navigation mode
-   * @return true if the requested mode is supported by this source
-   */
-  public boolean supportsNavigationMode(NavigationMode mode) {
-    if(mode == NavigationMode.SEQUENTIAL)
-      return true;
-    return false;
-  }
-
-  /**
-   * Common entry point for all constructors
-   * @param serverName the name or IP-address of the remote server 
-   * @param port the port number to which the request is send
-   * @param timeout a timeout value in milliseconds
-   * @throws InvalidEventSourceException
-   */
-  private void CreateXMLRPCEventSource(String serverName, int port, int timeout)
-         throws InvalidEventSourceException {
-
-    //Store the input values
-   remoteMachineName = serverName;
-   portNumber = port;
-   timeOut = timeout;
-    
-   //try to obtain the name of the local machine
-   try {
-    localMachineName = InetAddress.getLocalHost().getHostName();
-   } catch (UnknownHostException ex) {
-     //Can't get name of local host
-     String msg = "Unable to obtain local machine name, using \""
-                + localMachineName +"\" instead";
-     logger.error(msg);
-   } catch(Exception ex) {
-     //Rethrow everything else as invalid source exception
-     throw new InvalidEventSourceException("Exception trying to obtain local machine name",ex);
-   }
-   
-   //Finally create a new AClientXMLRPC object
-   XMLRPCClient = new AClientXMLRPC(GETEVENTDATA);
-   
-  }
-    
-  /**
-   * Read the next event from the server
-   * @param currentEvent the current event
-   * @return the next event
-   * @throws NoMoreEventsException
-   * @throws InvalidEventSourceException
-   * @throws ReadEventException
-   */
-  @Override
-  protected AEvent readNext(AEventInfo currentEvent) throws NoMoreEventsException,
-                                                      InvalidEventSourceException,
-                                                      ReadEventException {
-    //Be verbose
-    logger.info("Call to remote server xmlrpc://" + remoteMachineName + ":" + portNumber.toString());
-
-    //send the name of the local machine to the JiveXML server
-    Vector<String> parameters = new Vector();
-    parameters.add(localMachineName);
-
-    //record calling time
-    long startTime = System.currentTimeMillis();
-
-    //The XMLRPC client will return data as a string
-    String eventXMLData = null;
-
-    // perform the remote call
-    try {
-      eventXMLData = XMLRPCClient.callXMLRPCServer("http://"+remoteMachineName, portNumber, parameters);
-    } catch (ARemoteCallerException ex) {
-      //An error occured
-      String msg = "readNext(): Exception while calling remote server";
-      logger.error(msg,ex);
-      //rethrow
-      throw new InvalidEventSourceException(msg, ex);
-    }
-
-    //do some statistics
-    long callDuration = System.currentTimeMillis() - startTime;
-    logger.debug("Received " + eventXMLData.length() + " bytes in " + callDuration + " ms");
-
-
-    //If there is just no new event, we should get back an empty string
-    if (eventXMLData.length() == 0) {
-      throw new NoMoreEventsException("No event available from the server (yet)");    // something was received, going to process the result
-    }
-    if (!(eventXMLData.startsWith("<?xml"))) {
-      String msg = "Invalid event data received from JiveXML server";
-      logger.error(msg);
-      throw new ReadEventException(msg);
-    }
-
-   
-    
-    //So it seems we got something worth processing
-    logger.info("Received data from remote server, going to process it ...");
-
-    // Wrap the string as an inputstream
-    ByteArrayInputStream bais = new ByteArrayInputStream(eventXMLData.getBytes());
-
-    //Construct a new event
-    AEvent event = AEventFromXML.read(bais, remoteMachineName+":"+portNumber);
-
-    /**
-     * The XMLRPC server is not clever enough to return no event if there is no
-     * new one. In order to avoid filling the buffer with identical events, we
-     * therefore check here if we don't already have that event, and throw a 
-     * NoMoreEventsException in case we do.
-     */
-    if (event.equals(currentEvent)){
-      String msg = "Already have event "+event.getEventNumber()+" in run "
-                   + event.getRunNumber() + " - ignored!";
-      throw new NoMoreEventsException(msg);
-    }
-   
-
-    //Now we are sure we have a next event, return it
-    return event;
-    
-  }
-  
-/**
-   * Requesting to read the previous event from the server only appears
-   * if we have already reached the beginning of the event buffer.
-   * Only one current events are provided by the server at any time, thus we
-   * will always throw a NoMoreEventsException. Handling of the exception is left
-   * to the GUI interface, and may e.g be ignored in loop mode.
-   * @param currentEvent will be ignored
-   * @return nothing as it will always raise an exception
-   * @throws NoMoreEventsException
-   */
-  @Override
-  protected AEvent readPrevious(AEventInfo currentEvent) throws NoMoreEventsException
-  {
-    throw new NoMoreEventsException("XMLRPC server does not provide a previous event");
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AAtlasDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AAtlasDetector.java
deleted file mode 100755
index bf8b9a267fbf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AAtlasDetector.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package atlantis.geometry;
-
-import java.util.regex.Pattern;
-
-import atlantis.config.ADefaultValues;
-import atlantis.utils.ALogger;
-
-
-/**
- * AAtlasDetector
- *   contains one instance of
- *   ABoxDetectors (which contains all instances of ABoxDetector)   (MDT,RPC in barrel)
- *   ATrapezoidDetectors (which contains all instances of ATrapezoidDetector) (MDT,TGC endcap)
- *   AGeneralDetectors (which contains all instances of AGeneralPathDetector,
- *                       ADiscDetector, ARectangleDetector) (all others)
- */
-public class AAtlasDetector extends ADetectorSystem
-{
-    private static ALogger logger = ALogger.getLogger(AAtlasDetector.class);
-    private static ADetectorSystem theDetector;
-    
-    public AAtlasDetector(String geomIdCalo)
-    {
-        super(new ADetectors[]
-        {
-            new AGeneralDetectors(
-                new AGeometryFromXMLReader().readDetectorGeometryFromXML(geomIdCalo))
-        });
-
-        logger.info("Using geometry file: " + geomIdCalo);
-
-        setGeometryName(geomIdCalo);
-
-    } // AAtlasDetector(String fileName) ------------------------------------
-
-
-
-    public AAtlasDetector(String geomIdCalo, String geomMuon)
-    {
-        super(new ADetectors[]
-        {
-            new ABoxDetectors(
-                  new AGeometryFromXMLReader().readDetectorGeometryFromXML(geomMuon)),
-            new ATrapezoidDetectors(
-                  new AGeometryFromXMLReader().readDetectorGeometryFromXML(geomMuon)),
-            new AGeneralDetectors(
-                  new AGeometryFromXMLReader().readDetectorGeometryFromXML(geomMuon)),
-            new AGeneralDetectors(
-                  new AGeometryFromXMLReader().readDetectorGeometryFromXML(geomIdCalo))
-        });
-
-        logger.info("Using geometry file: " + geomIdCalo);
-        logger.info("Using geometry file: " + geomMuon);
-
-        setGeometryName(geomIdCalo);
-
-    } // AAtlasDetector(String fileName, String muFileName) -----------------
-
-
-
-    private static void setGeometryName(String absFileName)
-    {
-        // default geometry file, shall always be AGeometry.xml
-        // arbitrary, named geometry file, geometry name after '_' character
-        // (but there is also AGeometryTB.xml)
-        String name = "AGeometry";
-        String ext = ".xml";
-        String pattern = ".*" + name + "_?.*" + ext;
-
-        if(Pattern.compile(pattern).matcher(absFileName).matches())
-        {
-            int s = absFileName.lastIndexOf(name);
-            int e = absFileName.lastIndexOf(ext);
-            String r = absFileName.substring(s + name.length(), e);
-            if(r.startsWith("_"))
-            {
-                // arbitrary, named geometry
-                geometryName = r.substring(1); // without leading _
-                ADefaultValues.set("GeometryName", geometryName);
-            }
-            else if("".equals(r))
-            {
-                // default geometry (no name given: "")
-                geometryName = "<default>";
-                ADefaultValues.set("GeometryName", "");
-            }
-            else
-            {
-                geometryName = r;
-                ADefaultValues.set("GeometryName", geometryName);
-            }
-        }
-        else
-        {
-            logger.warn("Geometry name not matching regular expression: " +
-                          pattern + "\n  geometry name will be: n/a");
-            geometryName = "n/a";
-        }
-
-    } // setGeometryName() --------------------------------------------------
-
-
-	/**
-	 * @return the detector
-	 */
-	public static ADetectorSystem getDetector() {
-		return theDetector;
-	}
-
-
-	/**
-	 * @param theDetector the ATLAS detector geometry to be used
-	 */
-	public static void setDetector(ADetectorSystem theDetector) {
-		AAtlasDetector.theDetector = theDetector;
-	}
-
-
-} // class class AAtlasDetector =============================================
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelCalorimeterDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ABarrelCalorimeterDetector.java
deleted file mode 100755
index 870a7d46f7ef..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelCalorimeterDetector.java
+++ /dev/null
@@ -1,284 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AClipper;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AMath;
-
-/**
- * Class representing a calorimeter part in the barrel section of ATLAS.
- *
- * @author Eric Jansen
- */
-public class ABarrelCalorimeterDetector extends ACalorimeterDetector {
-
-    /**
-     * Constructs a new barrel calorimeter object.
-     * @param name String name of the object
-     * @param color String name of the color used to draw this object
-     * @param sampling int sampling of this calorimeter part
-     * @param region int region of this calorimeter part
-     * @param rMin double inner radius
-     * @param rMax double outer radius
-     * @param zMin double inner z
-     * @param zMax double outer z
-     * @param eta0 double start of the first cell in eta
-     * @param deta double size of a cell in eta
-     * @param neta int number of cells in eta
-     * @param meta int eta index of the first cell
-     * @param phi0 double start of the first cell in phi
-     * @param nphi int number of cells in phi
-     */    
-    public ABarrelCalorimeterDetector(String name, String color, int sampling, int region,
-            double rMin, double rMax, double zMin, double zMax,
-            double eta0, double deta, int neta, int meta,
-            double phi0, int nphi) {
-        super(name, color);
-
-        // Just to be sure we take absolute values here.
-        this.sampling = Math.abs(sampling);
-        this.region = Math.abs(region);
-
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.zMin = zMin;
-        this.zMax = zMax;
-        this.eta0 = eta0;
-        this.deltaEta = deta;
-        this.numEta = neta;
-        this.minEta = meta;
-        this.phi0 = Math.toRadians(phi0);
-        this.numPhi = nphi;
-        this.deltaPhi = 2.*Math.PI/numPhi;
-
-        this.detEtaMin = AMath.etaAbs(this.zMax, this.rMax);
-        this.detEtaMax = AMath.etaAbs(this.zMin, this.rMin);
-
-        if (this.eta0 <= 0.0) {
-            this.zMin = -this.zMax;
-            this.detEtaMin = -this.detEtaMax;
-        }
-
-        // This one is used for clipping the cell geometry in rho-z.
-        this.clipper = new AClipper(this.zMin, this.zMax, this.rMin, this.rMax);
-
-        // These arrays are used by the getDetectorIndex() method in ACalorimeterData.
-        // They provide fast mapping of hits to detectors.
-        if (this.name.indexOf("LAr") >= 0 && this.sampling < lar[1].length
-            && this.region < lar[1][this.sampling].length) {
-
-            lar[1][this.sampling][this.region] = detectors.indexOf(this);
-        } else if (this.name.equals("TILE Barrel") && this.sampling < tile.length) {
-            tile[this.sampling] = detectors.indexOf(this);
-
-        } else if (this.name.equals("Extended TILE") && this.sampling < tile_ext.length) {
-            tile_ext[this.sampling] = detectors.indexOf(this);
-
-        } else {
-            System.out.println("Unknown calorimeter object: '" + this.name + "'"
-                               + " some hits might not be displayed correctly.");
-        }
-    }
-
-    /**
-     * Returns the y-x geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getYXUser() {
-        if (!globals.getUseOpenGL()) {
-            int numPoints = 2 * (numPhi + 1);
-            double[][] hv = new double[2][numPoints];
-            for (int i = 0; i < numPhi + 1; i++) {
-                hv[0][i] = rMin * Math.cos(phi0 + i * deltaPhi);
-                hv[1][i] = rMin * Math.sin(phi0 + i * deltaPhi);
-                hv[0][numPhi + 1 + i] = rMax * Math.cos(phi0 - i * deltaPhi);
-                hv[1][numPhi + 1 + i] = rMax * Math.sin(phi0 - i * deltaPhi);
-            }
-            return new ACoord(hv);
-        } else {
-            return new ACoord(generateAnnulusTris(numPhi, phi0, rMin, rMax));
-        }
-    }
-
-    /**
-     * Returns the rho-z geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getRZUser() {
-        double[] h, v;
-
-        double etaMax = eta0 + numEta * deltaEta;
-        double etaMin;
-        if (eta0 <= 0.0) {
-            etaMin = -etaMax;
-        } else {
-            etaMin = eta0;
-        }
-
-        // Calculate the polygon in the positive h and v.
-        if (name.indexOf("TILE") >= 0) {
-            h = new double[] {zMax, zMin, zMin, zMax};
-            v = new double[] {rMax, rMax, rMin, rMin};
-        } else {
-            double z0 = rMax*Math.sinh(etaMax);
-            double z1 = rMax*Math.sinh(etaMin);
-            double z2 = rMin*Math.sinh(etaMin);
-            double z3 = rMin*Math.sinh(etaMax);
-
-            h = new double[] {z0, z1, z2, z3};
-            v = new double[] {rMax, rMax, rMin, rMin};
-        }
-
-        // Clip the polygon.
-        ACoord coord = clipper.clipPolygon(h, v, h.length);
-
-        // Copy it to negative v.
-        coord = new ACoord(coord, coord.mirrorV());
-        if (eta0 > 0.0) {
-            // If it doesn't continue through h=0, copy it to negative h.
-            coord = new ACoord(coord, coord.mirrorH());
-        }
-
-        return coord;
-    }
-
-    /**
-     * Returns the phi-rho geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getFRUser() {
-        double[][] hv = new double[2][];
-
-        hv[0] = new double[] {rMin, rMax, rMax, rMin};
-        hv[1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the y-x geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getYXCell(int eta, int phi) {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-        double[][] hv = new double[2][];
-        double phiMin = phi0+phi*deltaPhi;
-        double phiMax = phiMin+deltaPhi;
-
-        hv[0] = new double[] {rMax*Math.cos(phiMin), rMax*Math.cos(phiMax),
-                              rMin*Math.cos(phiMax), rMin*Math.cos(phiMin)};
-        hv[1] = new double[] {rMax*Math.sin(phiMin), rMax*Math.sin(phiMax),
-                              rMin*Math.sin(phiMax), rMin*Math.sin(phiMin)};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the rho-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getRZCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        int sign = getRSign(phi);
-
-        if (side != 0) side /= Math.abs(side);
-
-        if (name.indexOf("TILE") >= 0) {
-            // Outer layer of TILE has eta increments of two.
-            if (sampling == 2) eta = minEta + (eta-minEta)/2;
-
-            double etaMin = eta0+(eta-minEta)*deltaEta;
-            double etaMax = etaMin+deltaEta;
-
-            if (name.indexOf("Barrel") >= 0 && sampling == 1) {
-                double dr = (rMax-rMin);
-                double r0 = rMin;
-                double r1 = rMin+dr/2.;
-                double r2 = rMax;
-                double z0 = (rMin+dr/4.) * Math.sinh(etaMin);
-                double z1 = (rMax-dr/4.) * Math.sinh(etaMin);
-                double z2 = (rMin+dr/4.) * Math.sinh(etaMax);
-                double z3 = (rMax-dr/4.) * Math.sinh(etaMax);
-
-                if (eta == this.minEta && this.zMin > 0) z0 = z1 = this.zMin;
-                if (eta == this.minEta + this.numEta - 1) z2 = z3 = this.zMax;
-
-                hv[0] = new double[] {z3, z1, z1, z0, z0, z2, z2, z3};
-                hv[1] = new double[] {r2, r2, r1, r1, r0, r0, r1, r1};
-            } else {
-                double zMin = (rMin+rMax)/2. * Math.sinh(etaMin);
-                double zMax = (rMin+rMax)/2. * Math.sinh(etaMax);
-
-                if (eta == this.minEta && this.zMin > 0)zMin = this.zMin;
-                if (eta == this.minEta + this.numEta - 1) zMax = this.zMax;
-
-                hv[0] = new double[] {zMax, zMin, zMin, zMax};
-                hv[1] = new double[] {rMax, rMax, rMin, rMin};
-            }
-        } else if (name.indexOf("LAr") >= 0) {
-            double etaMin = eta0+(eta-minEta)*deltaEta;
-            double etaMax = etaMin+deltaEta;
-
-            hv[0] = new double[] {rMax*Math.sinh(etaMax), rMax*Math.sinh(etaMin),
-                                  rMin*Math.sinh(etaMin), rMin*Math.sinh(etaMax)};
-            hv[1] = new double[] {rMax, rMax, rMin, rMin};
-        } else {
-            return ACoord.NO_DATA;
-        }
-
-        // Clip the cell and send it to the right quadrant.
-        ACoord coord = clipper.clipPolygon(hv[0], hv[1], hv[0].length);
-        for (int i=0; i<coord.hv[0][0].length; i++) {
-            coord.hv[0][0][i] *= side;
-            coord.hv[1][0][i] *= sign;
-        }
-
-        return coord;
-    }
-
-    /**
-     * Returns the eta-phi geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getVPCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        double etaMin = eta0+(eta-minEta)*deltaEta;
-        double etaMax = etaMin+deltaEta;
-        double phiMin = Math.toDegrees(phi0 + phi*deltaPhi);
-        double phiMax = phiMin + Math.toDegrees(deltaPhi);
-
-        side /= Math.abs(side);
-
-        hv[0] = new double[] {side*etaMax, side*etaMin, side*etaMin, side*etaMax};
-        hv[1] = new double[] {     phiMax,      phiMax,      phiMin,      phiMin};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the eta value of the center (in eta) of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double eta value
-     */
-    public double getEta(int eta, int side) {
-        if (side < 0) {
-            return -getEta(eta, -side);
-        } else {
-            if (name.indexOf("TILE") >= 0) {
-                // Outer layer of TILE has eta increments of two.
-                if (sampling == 2) eta = minEta + (eta-minEta)/2;
-            }
-
-            return eta0 + (eta - minEta + 0.5) * deltaEta;
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelSiliconDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ABarrelSiliconDetector.java
deleted file mode 100755
index 14e53e77d059..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelSiliconDetector.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.AS3DData;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionYX;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class representing a pixel/SCT barrel detector part.
- * Also implements methods to draw more detailed structure of the detector.
- *
- * @author Eric Jansen
- */
-public class ABarrelSiliconDetector extends ADetector {
-
-    private static List detectors = null;
-
-    protected int layer;
-    protected double length;
-    protected double width;
-    protected double thickness;
-    protected int numZ;
-    protected int numPhi;
-    protected double tilt;
-    protected double r0;
-    protected double phi0;
-    protected double zMin;
-    protected double zMax;
-
-    protected double deltaPhi;
-    protected double deltaZ;
-    protected double rMin;
-    protected double rMax;
-
-    public ABarrelSiliconDetector(String name, String color, int layer, double length, double width, double thickness,
-                                  int numZ, int numPhi, double tilt, double r0, double phi0, double zMin, double zMax) {
-        super(name, " ", color);
-
-        if (detectors == null) {
-            detectors = new ArrayList();
-        }
-        detectors.add(this);
-
-        this.layer = layer;
-        this.length = length;
-        this.width = width;
-        this.thickness = thickness;
-        this.numZ = numZ;
-        this.numPhi = numPhi;
-        this.tilt = Math.toRadians(tilt);
-        this.r0 = r0;
-        this.phi0 = Math.toRadians(phi0);
-        this.zMin = zMin;
-        this.zMax = zMax;
-
-        this.deltaPhi = 2.*Math.PI / this.numPhi;
-        this.deltaZ = (this.zMax - this.zMin) / this.numZ;
-
-        // We do not take thickness/2 and width/2 to have some extra margin
-        this.rMin = this.r0 - Math.abs(this.thickness*Math.cos(this.tilt))
-                            - Math.abs(this.width*Math.sin(this.tilt));
-        this.rMax = this.r0 + Math.abs(this.thickness*Math.cos(this.tilt))
-                            + Math.abs(this.width*Math.sin(this.tilt));
-    }
-
-    /**
-     * Empties the list of instances of this class.
-     */
-    public static void clear() {
-        if (detectors != null) {
-            detectors.clear();
-        }
-    }
-    
-    /**
-     * This function draws the wafer/stave structure of the silicon detectors. It is called
-     * from ADetectorSystem.draw().
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    public static void drawAdditionalItems(AWindow window, AGraphics ag, AProjection2D projection) {
-        AParameter inDetDetail = parameterStore.getUnknown("Det", "SiliconDetail");
-        if (inDetDetail != null && detectors != null && inDetDetail.getStatus()) {
-            for (int i=0; i<detectors.size(); i++) {
-                ACoord coord = ACoord.NO_DATA;
-                ABarrelSiliconDetector detector = (ABarrelSiliconDetector) detectors.get(i);
-                if (projection instanceof AProjectionYX) {
-                    coord = detector.getYXDetail();
-                } else if (projection instanceof AProjectionRZ) {
-                    coord = detector.getRZDetail();
-                } else if (projection instanceof AProjectionFZ) {
-                    coord = detector.getFZDetail();
-                } else if (projection instanceof AProjectionFR) {
-                    coord = detector.getYXDetail().convertYXToFR().includePhiWrapAround("FR");
-                }
-
-                if (coord != ACoord.NO_DATA) {
-                    Color[] colorMap = AColorMap.getColors();
-                    ag.setColor(colorMap[parameterStore.get("Det", "SiliconDetail").getI()]);
-
-                    ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                    for (int j=0; j<display.hv[0].length; j++) {
-                        ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Determines if this element should be visible or not.
-     * @return visibility
-     */
-    protected boolean isVisible() {
-        int cut = parameterStore.get("CutsInDet", "SCT").getI();
-
-        if (cut == AS3DData.CUT_INDET_SCT_ALL || cut == AS3DData.CUT_INDET_SCT_BARREL) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-    
-    /**
-     * Returns the detector outline in the y-x projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getYXUser() {
-        if (!isVisible()) {
-            return ACoord.NO_DATA;
-        }
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) {
-            return ACoord.NO_DATA;
-        }
-
-        if (!globals.getUseOpenGL()) {
-            int numPoints = 2 * (numPhi + 1);
-            double[][] hv = new double[2][numPoints];
-
-            for (int i = 0; i < numPhi + 1; i++) {
-                hv[0][i] = rMin * Math.cos(phi0 + (i + 0.5) * deltaPhi);
-                hv[1][i] = rMin * Math.sin(phi0 + (i + 0.5) * deltaPhi);
-
-                hv[0][numPhi + 1 + i] = rMax * Math.cos(phi0 - (i + 0.5) * deltaPhi);
-                hv[1][numPhi + 1 + i] = rMax * Math.sin(phi0 - (i + 0.5) * deltaPhi);
-            }
-            return new ACoord(hv);
-        } else {
-            return new ACoord(generateAnnulusTris(numPhi, phi0, rMin, rMax));
-        }
-    }
-
-    /**
-     * Returns the detector outline in the rho-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getRZUser() {
-        //if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][2][];
-
-        hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFZUser() {
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][] hv = new double[2][];
-
-        hv[0] = new double[] {zMax, zMin, zMin, zMax};
-        hv[1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-rho projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFRUser() {
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][] hv = new double[2][];
-
-        hv[0] = new double[] {rMin, rMax, rMax, rMin};
-        hv[1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the wafer/stave structure in the y-x projection.
-     * @return ACoord polygons representing the wafers/staves
-     */
-    protected ACoord getYXDetail() {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][numPhi][];
-        for (int i=0; i<numPhi; i++) {
-            double phi = phi0 + i*deltaPhi;
-
-            double x1 = r0*Math.cos(phi) + width/2.*Math.sin(phi+tilt) + thickness/2.*Math.cos(phi+tilt);
-            double x2 = r0*Math.cos(phi) - width/2.*Math.sin(phi+tilt) + thickness/2.*Math.cos(phi+tilt);
-            double x3 = r0*Math.cos(phi) - width/2.*Math.sin(phi+tilt) - thickness/2.*Math.cos(phi+tilt);
-            double x4 = r0*Math.cos(phi) + width/2.*Math.sin(phi+tilt) - thickness/2.*Math.cos(phi+tilt);
-
-            double y1 = r0*Math.sin(phi) - width/2.*Math.cos(phi+tilt) + thickness/2.*Math.sin(phi+tilt);
-            double y2 = r0*Math.sin(phi) + width/2.*Math.cos(phi+tilt) + thickness/2.*Math.sin(phi+tilt);
-            double y3 = r0*Math.sin(phi) + width/2.*Math.cos(phi+tilt) - thickness/2.*Math.sin(phi+tilt);
-            double y4 = r0*Math.sin(phi) - width/2.*Math.cos(phi+tilt) - thickness/2.*Math.sin(phi+tilt);
-
-            hv[0][i] = new double[] {x1, x2, x3, x4};
-            hv[1][i] = new double[] {y1, y2, y3, y4};
-        }
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the wafer/stave structure in the rho-z projection.
-     * @return ACoord polygons representing the wafers/staves
-     */
-    protected ACoord getRZDetail() {
-       // if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][2*numZ][];
-
-        for (int i=0; i<numZ; i++) {
-            hv[0][i] = new double[] {zMin+(i+1)*deltaZ, zMin+i*deltaZ, zMin+i*deltaZ, zMin+(i+1)*deltaZ};
-            hv[1][i] = new double[] {rMax, rMax, rMin, rMin};
-
-            hv[0][numZ+i] = new double[] {zMin+(i+1)*deltaZ, zMin+i*deltaZ, zMin+i*deltaZ, zMin+(i+1)*deltaZ};
-            hv[1][numZ+i] = new double[] {-rMin, -rMin, -rMax, -rMax};
-        }
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the wafer/stave structure in the phi-z projection.
-     * @return ACoord polygons representing the wafers/staves
-     */
-    protected ACoord getFZDetail() {
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        // Phi geometry is a mess, draw only the staves in this projection.
-        double[][][] hv = new double[2][numZ+1][2];
-        for (int i=0; i<=numZ; i++) {
-            hv[0][i][0] = zMin + i*deltaZ;
-            hv[1][i][0] = 360.;
-            hv[0][i][1] = zMin + i*deltaZ;
-            hv[1][i][1] = 0.;
-        }
-
-        return new ACoord(hv).includePhiWrapAround("FZ");
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelTRTDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ABarrelTRTDetector.java
deleted file mode 100755
index 8ccd0a795285..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ABarrelTRTDetector.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionYX;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class representing a TRT barrel detector part.
- * Also implements methods to draw more detailed structure of the detector.
- *
- * @author Eric Jansen
- */
-public class ABarrelTRTDetector extends ADetector {
-
-    private static List detectors = null;
-
-    protected int layer;
-    protected int numPhi;
-    protected double rMin;
-    protected double rMax;
-    protected double phiIn;
-    protected double phiOut;
-    protected double zMin;
-    protected double zMax;
-    protected double deltaPhi;
-
-    public ABarrelTRTDetector(String name, String color, int layer, int numPhi, double rMin, double rMax, 
-                              double phiIn, double phiOut, double zMin, double zMax) {
-        super(name, " ", color);
-
-        if (detectors == null) {
-            detectors = new ArrayList();
-        }
-        detectors.add(this);
-
-        this.layer = layer;
-        this.numPhi = numPhi;
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.phiIn = Math.toRadians(phiIn);
-        this.phiOut = Math.toRadians(phiOut);
-        this.zMin = zMin;
-        this.zMax = zMax;
-        
-        this.deltaPhi = 2.*Math.PI / numPhi;
-    }
-
-    /**
-     * Empties the list of instances of this class.
-     */
-    public static void clear() {
-        if (detectors != null) {
-            detectors.clear();
-        }
-    }
-    
-    /**
-     * This function draws the module structure of the TRT detector. It is called
-     * from ADetectorSystem.draw().
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    public static void drawAdditionalItems(AWindow window, AGraphics ag, AProjection2D projection) {
-        AParameter inDetDetail = parameterStore.getUnknown("Det", "TRTDetail");
-        if (inDetDetail != null && detectors != null && inDetDetail.getStatus()) {
-            for (int i=0; i<detectors.size(); i++) {
-                ACoord coord = ACoord.NO_DATA;
-                ABarrelTRTDetector detector = (ABarrelTRTDetector) detectors.get(i);
-                if (projection instanceof AProjectionYX) {
-                    coord = detector.getYXDetail();
-                } else if (projection instanceof AProjectionFR) {
-                    coord = detector.getYXDetail().convertYXToFR().includePhiWrapAround("FR");
-                }
-
-                if (coord != ACoord.NO_DATA) {
-                    Color[] colorMap = AColorMap.getColors();
-                    ag.setColor(colorMap[parameterStore.get("Det", "TRTDetail").getI()]);
-
-                    ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                    for (int j=0; j<display.hv[0].length; j++) {
-                        ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the detector outline in the y-x projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getYXUser() {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-
-        if (!globals.getUseOpenGL()) {
-            int numPoints = 2 * (numPhi + 1);
-            double[][] hv = new double[2][numPoints];
-
-            for (int i = 0; i < numPhi + 1; i++) {
-                hv[0][i] = rMin * Math.cos(phiIn + i * deltaPhi);
-                hv[1][i] = rMin * Math.sin(phiIn + i * deltaPhi);
-
-                hv[0][numPhi + 1 + i] = rMax * Math.cos(phiOut - i * deltaPhi);
-                hv[1][numPhi + 1 + i] = rMax * Math.sin(phiOut - i * deltaPhi);
-            }
-            return new ACoord(hv);
-        } else {
-            return new ACoord(generateAnnulusTris(numPhi, phiIn, rMin, rMax));
-        }
-    }
-
-    /**
-     * Returns the detector outline in the rho-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getRZUser() {
-        double[][][] hv = new double[2][2][];
-
-        hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFZUser() {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the detector outline in the phi-rho projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFRUser() {
-        double[][] hv = new double[2][];
-
-        hv[0] = new double[] {rMin, rMax, rMax, rMin};
-        hv[1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the module structure in the y-x projection.
-     * @return ACoord polygons representing the modules
-     */
-    protected ACoord getYXDetail() {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][numPhi][];
-        for (int i=0; i<numPhi; i++) {
-            double phiMin = i*deltaPhi;
-            double phiMax = (i+1)*deltaPhi;
-
-            double x1 = rMax*Math.cos(phiMin+phiOut);
-            double x2 = rMax*Math.cos(phiMax+phiOut);
-            double x3 = rMin*Math.cos(phiMax+phiIn);
-            double x4 = rMin*Math.cos(phiMin+phiIn);
-
-            double y1 = rMax*Math.sin(phiMin+phiOut);
-            double y2 = rMax*Math.sin(phiMax+phiOut);
-            double y3 = rMin*Math.sin(phiMax+phiIn);
-            double y4 = rMin*Math.sin(phiMin+phiIn);
-
-            hv[0][i] = new double[] {x1, x2, x3, x4};
-            hv[1][i] = new double[] {y1, y2, y3, y4};
-        }
-        return new ACoord(hv);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetector.java
deleted file mode 100755
index 68fda4c768eb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetector.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.utils.AMath;
-import atlantis.parameters.*;
-import atlantis.graphics.ACoord;
-
-/**
- * in ATLAS boxes are RPC and MDT in the barrel
- */
-
-public class ABoxDetector extends ADetector {
-
-  double zMin;
-  double zMax;
-  double rMin;
-  double rMax;
-  double phi;
-  double excl;
-  double size;
-  String stationName;
-  int stationEta;
-  int stationPhi;
-  int sector;
-
-  public ABoxDetector(String name, double zMin, double zMax, double rMin,
-      double rMax, double phi, double excl, double size, int stationEta, int stationPhi) {
-    super(name, " ", name.substring(0, 3));
-    this.zMin=zMin;
-    this.zMax=zMax;
-    this.rMin=rMin;
-    this.rMax=rMax;
-    this.phi=phi;
-    this.excl=excl;
-    this.size=size;
-    this.stationName=name.substring(4, 7);
-    this.stationEta=stationEta;
-    this.stationPhi=stationPhi;
-    this.sector=((int)((phi+Math.PI/16)/(Math.PI/8)))%16;
-  }
-
-  protected ACoord getFZUser() {
-    double cosPhi=Math.cos(phi);
-    double sinPhi=Math.sin(phi);
-    double d=size/2.;
-    double r=rMin;
-    double x=r*cosPhi-excl*sinPhi;
-    double y=r*sinPhi+excl*cosPhi;
-    double dsinPhi=d*sinPhi;
-    double dcosPhi=d*cosPhi;
-    double phi1=Math.toDegrees(Math.atan2(y-dcosPhi, x+dsinPhi));
-    double phi2=Math.toDegrees(Math.atan2(y+dcosPhi, x-dsinPhi));
-
-    if(phi1<0.) phi1+=360.;
-    if(phi2<0.) phi2+=360.;
-    if(phi1-phi2>180.)  phi1-=360.;
-    if(phi2-phi1>180.)  phi2-=360.;
-
-    return new ACoord(AMath.xBox((zMin+zMax)/2.,(zMax-zMin)/2.),
-                      AMath.yBox((phi1+phi2)/2.,(phi1-phi2)/2.));
-  }
-
-  protected ACoord getRZUser() {
-     double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-     double phiDiff=Math.abs(phi-phiMid);
-     double sign=-1.;
-     if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-       sign=+1.;
-     return getXZRZUser(sign);
-   }
-
-   protected ACoord getXZUser() {
-    AParameter p=parameterStore.get("XZ", "Phi");
-
-    // display muon data when phi is in the middle of a sector
-    if(p.getD() % 22.5 < 1e-2) {
-      int sect=(int)Math.round((p.getD() % 360.) / 22.5);
-        if(sector==sect) {
-          return getXZRZUser(1.);
-        } else if(sector==sect-8||sector==sect+8) {
-          return getXZRZUser(-1.);
-        }
-      }
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getXZRZUser(double sign) {
-     return new ACoord(
-        AMath.xBox( (zMin + zMax) / 2., (zMax - zMin) / 2.),
-        AMath.yBox( sign*(rMin + rMax) / 2., sign*(rMax - rMin) / 2.));
-    }
-
-
-    protected ACoord getYXUser() {
-       return getYXUser(0);
-    }
-
-    protected ACoord getFRUser() {
-       return convertYXToFR(getYXUser(1));
-    }
-
-  private ACoord getYXUser(int flag) {
-    int[] split= {12, 1, 12, 1};
-    int numPoints=4;
-    boolean splitIt=parameterStore.get("YX", "FishEye").getStatus()||parameterStore.get("YX", "Clock").getStatus()
-        ||flag==1;
-
-    if(splitIt)
-      numPoints=26;
-    double[] temp=new double[4];
-    double[][] hv=new double[2][numPoints];
-      double cosPhi=Math.cos(phi);
-      double sinPhi=Math.sin(phi);
-      double d=size/2.;
-      double r=rMin;
-      double x=r*cosPhi-excl*sinPhi;
-      double y=r*sinPhi+excl*cosPhi;
-      double dx=d*sinPhi;
-      double dy=d*cosPhi;
-
-      hv[0][0]=x+dx;
-      hv[1][0]=y-dy;
-      hv[0][1]=x-dx;
-      hv[1][1]=y+dy;
-      r=rMax;
-      x=r*cosPhi-excl*sinPhi;
-      y=r*sinPhi+excl*cosPhi;
-
-      hv[0][3]=x+dx;
-      hv[1][3]=y-dy;
-      hv[0][2]=x-dx;
-      hv[1][2]=y+dy;
-      if(splitIt)
-        for(int j=0; j<2; ++j) {
-          for(int k=0; k<4; ++k)
-            temp[k]=hv[j][k];
-          AMath.splitArrayIntoPieces(temp, hv[j], split);
-        }
-    return new ACoord(hv);
-  }
-
-  protected boolean equalsYX(ADetector o) {
-    if (o instanceof ABoxDetector) {
-      ABoxDetector that = (ABoxDetector) o;
-      return this.rMin == that.rMin &&
-          this.rMax == that.rMax &&
-          this.phi == that.phi &&
-          this.size == that.size &&
-          this.excl == that.excl;
-    } else
-      return false;
-  }
-
-  protected boolean equalsRZ(ADetector o) {
-    if (o instanceof ABoxDetector) {
-      ABoxDetector that = (ABoxDetector) o;
-    return this.rMin == that.rMin &&
-        this.rMax == that.rMax &&
-        this.zMin == that.zMin &&
-        this.zMax == that.zMax;
-  } else
-    return false;
-  }
-  
-  public double getZMin() { return zMin; }
-  public double getZMax() { return zMax; }
-  public double getRMin() { return rMin; }
-  public double getRMax() { return rMax; }
-  public double getPhi() { return phi; }
-  public double getSize() { return size; }
-  
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetectors.java b/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetectors.java
deleted file mode 100755
index a4b10b150709..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ABoxDetectors.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import java.util.*;
-
-
-/**
- * ABoxDetector's contains all instances of ABoxDetector.
- * In different projections not all Boxes need to be drawn
- * as they may exactly overlap. Filling of these areas is
- * slow, so only the Boxes needed are drawn in each projection.
- * (That is why boxes are group into ABoxDetectors)
- * This is achieved by making a drawlist before drawing.
- */
-public final class ABoxDetectors extends ADetectors {
-
-  private int numRZTypes;
-  private int[] typeRZ;
-  private int numYXTypes;
-  private int[] typeYX;
-
-  private ABoxDetector[] box;
-
-  public ABoxDetectors(List detectors) {
-   super(filterBoxDetectors(detectors));
-   box= new ABoxDetector[det.length];
-   for(int i=0;i<box.length;++i)
-     box[i]=(ABoxDetector)det[i];
-
-    typeYX=new int[numData];
-    for(int i=0; i<numData; ++i)
-      typeYX[i]=-1;
-
-    numYXTypes=0;
-    for(int i=0; i<numData; ++i)
-      if(typeYX[i]==-1) {
-        typeYX[i]=numYXTypes;
-        for(int j=i+1; j<numData; ++j)
-          if(typeYX[j]==-1&&det[i].equalsYX(det[j]))
-            typeYX[j]=numYXTypes;
-        numYXTypes++;
-      }
-
-    typeRZ=new int[numData];
-    for(int i=0; i<numData; ++i)
-      typeRZ[i]=-1;
-
-    numRZTypes=0;
-    for(int i=0; i<numData; ++i)
-      if(typeRZ[i]==-1) {
-        typeRZ[i]=numRZTypes;
-        for(int j=i+1; j<numData; ++j)
-          if(typeRZ[j]==-1&&det[i].equalsRZ(det[j]))
-            typeRZ[j]=numRZTypes;
-        numRZTypes++;
-      }
-  }
-
-  private static ADetector[] filterBoxDetectors(List detectors) {
-
-    List tempDetectors=new ArrayList(detectors.size());
-    Iterator it=detectors.iterator();
-
-    while(it.hasNext()) {
-      Object o=it.next();
-      if(o instanceof ABoxDetector || o instanceof ATBxDetector) tempDetectors.add(o);
-    }
-    return (ADetector[])tempDetectors.toArray(new ADetector[tempDetectors.size()]);
-  }
-
-  private void makeDrawListYX() {
-    int mode=parameterStore.get("YX", "Mode").getI();
-
-    if(mode==0) {
-      numDraw=numYXTypes;
-      for(int i=0; i<numData; ++i)
-        listdl[typeYX[i]]=i;
-    } else
-      numDraw=0;
-  }
-
-  private void makeDrawListXZ() {
-    AParameter p=parameterStore.get("XZ", "Phi");
-
-    // display muon data when phi is in the middle of a sector
-    if(p.getD() % 22.5 < 1e-2) {
-      int sect=(int)Math.round((p.getD() % 360.) / 22.5);
-      int num=0;
-      for(int i=0; i<numData; i++) {
-        int s=box[i].sector;
-        if(s==sect||s==sect-8||s==sect+8) {
-          listdl[num++]=i;
-        }
-      }
-      numDraw=num;
-    } else {
-      numDraw=0;
-    }
-  }
-
-  private void makeDrawListRZ() {
-    // first make the draw list
-    // for each type find out if it has both +ve and negative sign
-    int[] pos=new int[typeRZ.length];
-    int[] neg=new int[typeRZ.length];
-    double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-
-    for(int i=0; i<numRZTypes; ++i)
-      neg[i]=pos[i]=-1;
-
-    for(int i=0; i<numData; ++i) {
-      double phiDiff=Math.abs(box[i].phi-phiMid);
-
-      if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-        pos[typeRZ[i]]=i;
-      else
-        neg[typeRZ[i]]=i;
-    }
-
-    int num=0;
-    for(int i=0; i<numRZTypes; ++i) {
-      if(pos[i]!=-1)
-        listdl[num++]=pos[i];
-      if(neg[i]!=-1)
-        listdl[num++]=neg[i];
-    }
-    numDraw=num;
-  }
-
-  private void makeDrawListFZ() {
-    int mode=parameterStore.get("FZ", "Mode").getI();
-
-    if(mode==0)
-      numDraw=0;
-    else {
-      int num=0;
-
-      for(int i=0; i<numData; ++i) {
-        char type=det[i].getName().charAt(0);
-        char station=det[i].getName().charAt(5);
-        char io=det[i].getName().charAt(det[i].getName().length()-1);
-
-        if((mode==1&&station=='M'&&io=='I'&&type=='R')||(mode==2&&station=='M'&&io=='O'&&type=='R')
-            ||(mode==3&&station=='O'&&type=='R')||(mode==4&&(station=='I'||station=='E')&&type=='M')
-            ||(mode==5&&station=='M'&&type=='M')||(mode==6&&station=='O'&&type=='M'))
-          listdl[num++]=i;
-        numDraw=num;
-      }
-    }
-  }
-
-  protected void makeDrawList(String projection) {
-    if (projection.equals("YX") || projection.equals("FR") )
-      makeDrawListYX();
-    else if (projection.equals("FZ"))
-      makeDrawListFZ();
-    else if (projection.equals("RZ"))
-      makeDrawListRZ();
-    else if (projection.equals("XZ"))
-      makeDrawListXZ();
-    else
-     numDraw=0;
- }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ACalorimeterDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ACalorimeterDetector.java
deleted file mode 100755
index da80146936d7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ACalorimeterDetector.java
+++ /dev/null
@@ -1,699 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AClipper;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AIdHelper;
-import atlantis.utils.AMath;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionYX;
-import java.awt.Color;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Abstract class representing a region of a certain sampling of a ATLAS
- * calorimeter. Based on the parameters given to the constructor, the
- * derived classes should be able to calculate the geometrical properties
- * of the cells they contain. This behavior is required for drawing the data.
- *
- * @author Eric Jansen
- */
-abstract public class ACalorimeterDetector extends ADetector {
-
-    // Keep a static list of instances for easy access
-    protected static List detectors = null;
-
-    // These arrays are used for fast cell to detector mapping.
-    protected static int[][][] lar = null;
-    protected static int[][] hec = null;
-    protected static int[] tile = null;
-    protected static int[] tile_ext = null;
-    protected static int[][] tile_gap = null;
-    protected static int[] mbts = null;
-
-    protected int sampling;
-    protected int region;
-    protected double rMin;
-    protected double rMax;
-    protected double zMin;
-    protected double zMax;
-    protected double phi0;
-    protected int numPhi;
-    protected double deltaPhi;
-    protected double eta0;
-    protected double deltaEta;
-    protected int numEta;
-    protected int minEta;
-
-    protected double detEtaMin;
-    protected double detEtaMax;
-    protected AClipper clipper;
-
-    /**
-     * Constructs a new calorimeter object.
-     * @param name String name of the object
-     * @param color String name of the color used to draw this object
-     */
-    public ACalorimeterDetector(String name, String color) {
-        super(name, " ", color);
-
-        if (detectors == null) {
-            detectors = new ArrayList(40);
-
-            // These numbers correspond to the maximum number of values that can
-            // be encoded in the identifier.
-            lar = new int[4][4][8];
-            hec = new int[4][2];
-            tile = new int[16];
-            tile_ext = new int[16];
-            tile_gap = new int[16][64];
-            mbts = new int[2];
-
-            // Initialize them to -1, which means no detector element known.
-            for (int i=0; i<lar.length; i++)
-                for (int j=0; j<lar[i].length; j++)
-                    for (int k=0; k<lar[i][j].length; k++)
-                        lar[i][j][k] = -1;
-
-            for (int i=0; i<hec.length; i++)
-                for (int j=0; j<hec[i].length; j++)
-                    hec[i][j] = -1;
-
-            for (int i=0; i<tile.length; i++)
-                tile[i] = -1;
-
-            for (int i=0; i<tile_ext.length; i++)
-                tile_ext[i] = -1;
-
-            for (int i=0; i<tile_gap.length; i++)
-                for (int j=0; j<tile_gap[i].length; j++)
-                    tile_gap[i][j] = -1;
-
-            for (int i=0; i<mbts.length; i++)
-                mbts[i] = -1;
-        }
-
-        detectors.add(this);
-    }
-
-    /**
-     * Returns one of the instances of this class.
-     * @param index int index of instance
-     * @return ACalorimeterDetector instance at the requested index
-     */
-    public static ACalorimeterDetector get(int index) {
-        return (ACalorimeterDetector) detectors.get(index);
-    }
-
-    /**
-     * Shows the number of instances of this class that have been created.
-     * @return int number of instances
-     */
-    public static int count() {
-        if (detectors != null) {
-            return detectors.size();
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * This functions maps the calorimeter cells to a geometry object. In principle we could
-     * compare every cell to every geometry object, but that would be too slow. Therefore we
-     * organize the geometry in an array structure.
-     * @param id int identifier of a cell
-     * @return int index of the geometry object in the detector array
-     */
-    public static int getDetectorIndex(int id) {
-        if (detectors == null) return -1;
-        
-         try {
-            switch (AIdHelper.subDetector(id)) {
-                case 4:
-                    switch (AIdHelper.larPart(id)) {
-                        case 1:
-                            // LAr EM
-                            return lar[Math.abs(AIdHelper.larBarrelEndcap(id))]
-                                    [AIdHelper.larSampling(id)][AIdHelper.larRegion(id)];
-                        case 2:
-                            // HEC
-                            return hec[AIdHelper.larSampling(id)][AIdHelper.larRegion(id)];
-                        case 3:
-                            // FCAL
-                            return -1;
-                        default:
-                            return -1;
-                    }
-                case 5:
-                    switch (AIdHelper.tileSection(id)) {
-                        case 1:
-                            // TILE barrel
-                            return tile[AIdHelper.tileSampling(id)];
-                        case 2:
-                            // TILE extended barrel
-                            return tile_ext[AIdHelper.tileSampling(id)];
-                        case 3:
-                            // ITC gap/crack
-                            return tile_gap[AIdHelper.tileSampling(id)][AIdHelper.tileTower(id)];
-                        case 4:
-                            // MBTS
-                            return -1;
-                        default:
-                            return -1;
-                    }
-                default:
-                    return -1;
-            }
-        } catch (AAtlantisException e) {
-            return -1;
-        }
-    }
-
-    /**
-     * Clear the list of instances. This is called before reading another geometry file.
-     */
-    public static void clear() {
-        if (detectors != null) {
-            detectors.clear();
-        }
-        detectors = null;
-        lar = null;
-        hec = null;
-        tile = null;
-        tile_ext = null;
-        tile_gap = null;
-        mbts = null;
-    }
-
-    /**
-     * Get the outline of a certain cell in a certain projection.
-     * @param projection AProjection projection
-     * @param eta int eta index of the cell
-     * @param phi int phi index of the cell
-     * @param side int side sign of the z coordinate of the cell
-     * @return ACoord cell outline
-     */
-    public ACoord getCell(AProjection projection, int eta, int phi, int side) {
-        if (projection instanceof AProjectionYX) {
-            return getYXCell(eta, phi);
-        } else if (projection instanceof AProjectionRZ) {
-            return getRZCell(eta, phi, side);
-        } else if (projection instanceof AProjectionFR) {
-            return getFRCell(eta, phi);
-        } else if (projection instanceof AProjectionFZ) {
-            return getFZCell(eta, phi, side);
-        } else if (projection instanceof AProjectionVP) {
-            return getVPCell(eta, phi, side);
-        } else {
-            return ACoord.NO_DATA;
-        }
-    }
-
-    /**
-     * Returns the y-x geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getYXCell(int eta, int phi) {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the rho-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getRZCell(int eta, int phi, int side) {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the phi-rho geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getFRCell(int eta, int phi) {
-        return convertYXToFR(getYXCell(eta, phi));
-    }
-
-    /**
-     * Returns the phi-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord
-     */
-    public ACoord getFZCell(int eta, int phi, int side) {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the eta-phi geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getVPCell(int eta, int phi, int side) {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the eta value of the center (in eta) of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double eta value
-     */
-    public double getEta(int eta, int side) {
-        if (side < 0) {
-            return -getEta(eta, -side);
-        } else {
-            return eta0 + (eta - minEta + 0.5) * deltaEta;
-        }
-    }
-
-    /**
-     * Returns the lowest eta value of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double lowest eta value
-     */
-    public double getEtaMin(int eta, int side) {
-        if (side < 0) {
-            return -getEtaMax(eta, -side);
-        } else {
-            return eta0 + (eta - minEta) * deltaEta;
-        }
-    }
-
-    /**
-     * Returns the highest eta value of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double highest eta value
-     */
-    public double getEtaMax(int eta, int side) {
-        if (side < 0) {
-            return -getEtaMin(eta, -side);
-        } else {
-            return eta0 + (eta - minEta + 1) * deltaEta;
-        }
-    }
-
-    /**
-     * Returns the phi value of the center of a cell.
-     * @param phi int phi index of the cell
-     * @return double phi value
-     */
-    public double getPhi(int phi) {
-        return phi0 + (phi + 0.5) * deltaPhi;
-    }
-
-    /**
-     * Returns the lowest phi value of a cell.
-     * @param phi int phi index of the cell
-     * @return double lowest phi value
-     */
-    public double getPhiMin(int phi) {
-        return phi0 + phi * deltaPhi;
-    }
-
-    /**
-     * Returns the highest phi value of a cell.
-     * @param phi int phi index of the cell
-     * @return double highest phi value
-     */
-    public double getPhiMax(int phi) {
-        return phi0 + (phi + 1) * deltaPhi;
-    }
-
-    /**
-     * Determines on which side a certain cell should be drawn in the RZ projection,
-     * based on the phi angle the user has set in the menu.
-     * @param phi int phi index of the cell
-     * @return int 1 or -1, meaning top or bottom repectively
-     */
-    public int getRSign(int phi) {
-        double cellPhi = phi0 + phi*deltaPhi + deltaPhi/2.;
-        double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-        double phiDiff = Math.abs(cellPhi-phiMid);
-        if (phiDiff <= Math.PI/2.|| phiDiff > 3*Math.PI/2.) {
-            return 1;
-        } else {
-            return -1;
-        }
-    }
-
-    /**
-     * Returns the number of cells in phi for this calorimeter part.
-     * @return int number of cells in phi
-     */
-    public int getNumPhi() {
-        return numPhi;
-    }
-
-    /**
-     * Returns the size of a cell in phi for this calorimeter part (this is the same for all cells).
-     * @return double size of a cell in radians
-     */
-    public double getDeltaPhi() {
-        return deltaPhi;
-    }
-
-    /**
-     * Returns the number of cells in eta for this calorimeter part.
-     * @return double number of cells in eta
-     */
-    public int getNumEta() {
-        return numEta;
-    }
-
-    /**
-     * Returns the size of a cell in eta for this calorimeter part (this is the same for all cells).
-     * @return double size of a cell in eta
-     */
-    public double getDeltaEta() {
-        return deltaEta;
-    }
-
-    /**
-     * Returns the center radius of the calorimeter part.
-     * @return double center radius
-     */
-    public double getR() {
-        return (rMin+rMax)/2.;
-    }
-
-    /**
-     * Returns the inner radius of the calorimter part.
-     * @return double inner radius
-     */
-    public double getRMin() {
-        return rMin;
-    }
-
-    /**
-     * Returns the outer radius of the calorimeter part.
-     * @return double outer radius
-     */
-    public double getRMax() {
-        return rMax;
-    }
-
-    /**
-     * Returns the center z of the calorimeter part.
-     * @return double center z
-     */
-    public double getZ() {
-        return (zMin+zMax)/2.f;
-    }
-
-    /**
-     * Returns the inner z of the calorimeter part.
-     * @return double inner z
-     */
-    public double getZMin() {
-        return zMin;
-    }
-
-    /**
-     * Returns the outer z of the calorimter part.
-     * @return double outer z
-     */
-    public double getZMax() {
-        return zMax;
-    }
-
-    /**
-     * Returns the inner eta of the calorimeter part.
-     * @return double inner eta
-     */
-    public double getEtaMin() {
-        return eta0;
-    }
-
-    /**
-     * Returns the outer eta of the calorimeter part.
-     * @return double outer eta
-     */
-    public double getEtaMax() {
-        return eta0 + numEta*deltaEta;
-    }
-
-    /**
-     * Returns the sampling of the calorimeter part. This corresponds to the layers of the calorimeter.
-     * @return int sampling
-     */
-    public int getSampling() {
-        return sampling;
-    }
-
-    /**
-     * Returns the region of this calorimeter part. Within a layer a new region is started when the
-     * size of the cells changes.
-     * @return int region
-     */
-    public int getRegion() {
-        return region;
-    }
-    
-    /**
-     * Returns the eta index of the first cell in eta for this calorimeter part.
-     * @return int eta
-     */
-    public int getFirstEta() {
-        return minEta;
-    }
-
-    /**
-     * Returns the eta index of the last cell in eta for this calorimeter part.
-     * @return int eta
-     */
-    public int getLastEta() {
-        if (sampling == 2 && name.indexOf("TILE") >= 0)
-            return minEta + 2*numEta;
-        else
-            return minEta + numEta-1;
-    }
-    
-    /**
-     * Returns the phi index of the first cell in phi for this calorimeter part.
-     * @return int phi
-     */
-    public int getFirstPhi() {
-        // This is always 0, still we provide this method for consistency.
-        return 0;
-    }
-
-    /**
-     * Returns the phi index of the last cell in phi for this calorimeter part.
-     * @return int phi
-     */
-    public int getLastPhi() {
-        return numPhi-1;
-    }
-        
-    /**
-     * This function draws the module structure of the calorimeter. It is called
-     * from ADetectorSystem.draw().
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    public static void drawAdditionalItems(AWindow window, AGraphics ag, AProjection2D projection) {
-        AParameter caloDetail = parameterStore.getUnknown("Det", "CaloDetail");
-        if (caloDetail != null && detectors != null && caloDetail.getStatus()) 
-        {
-            for (int i=0; i<detectors.size(); i++) 
-            {
-                ACalorimeterDetector detector = (ACalorimeterDetector) detectors.get(i);
-
-                // Only draw region 0 in YX, not the few different cells at the ends
-                if ((projection instanceof AProjectionYX && detector.getRegion() == 0) || projection instanceof AProjectionFR)
-                {
-                    int start;
-                    int mode = parameterStore.get("YX", "Mode").getI();
-                    if(mode==AProjectionYX.MODE_STANDARD)
-                        //only needs one eta for standard view
-                        start = detector.getFirstEta();
-                    else if(mode>=AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && mode <=AProjectionYX.MODE_HEC_4)
-                        //need to loop over eta for endcaps
-                        start = detector.getLastEta();
-                    else
-                        start=0;
-                    if(mode==AProjectionYX.MODE_STANDARD || (mode>=AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && mode <=AProjectionYX.MODE_HEC_4) || mode==AProjectionYX.MODE_MBTS)
-                    {
-                        for (int eta=start; eta>=detector.getFirstEta(); eta--) 
-                        {
-                            for (int phi=detector.getFirstPhi(); phi<=detector.getLastPhi(); phi++) 
-                            {
-                                ACoord coord = detector.getCell(projection, eta, phi, 1);
-                                if (coord != ACoord.NO_DATA) {
-                                    ACoord display;
-                                    if (projection instanceof AProjectionYX) 
-                                        display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                                    else
-                                        display = window.calculateDisplay(projection.nonLinearTransform(
-                                                coord.includePhiWrapAround("FR"))
-                                        );
-        
-                                    Color[] colorMap = AColorMap.getColors();
-                                    ag.setColor(colorMap[parameterStore.get("Det", "CaloDetail").getI()]);
-                                    
-                                    for (int j=0; j<display.hv[0].length; j++)
-                                       ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                                }
-                            }
-                        }
-                    }
-                    else if((mode==AProjectionYX.MODE_LAR_ENDCAP_SUMMED && (detector.getName().equals("LAr Endcap Presampler")||detector.getName().equals("LAr_EC_Presampler")))  
-                            || (mode==AProjectionYX.MODE_HEC_SUMMED && detector.getName().equals("HEC") && detector.getSampling()==0))
-                    {
-                        //For summed endcaps only need to do this once
-                        //The cells match the bining used but are not specific to the detector
-                        //hence they do not all lie inside the detector
-                        double etaBin=0.1,phiBin=(2*Math.PI/64);
-                        int binvalue;
-                        if(mode==AProjectionYX.MODE_HEC_SUMMED)
-                        {
-                            binvalue = parameterStore.get("YX", "HECBin").getI();
-                        }
-                        else
-                        {
-                            binvalue = parameterStore.get("YX", "LArBin").getI();
-                        }
-                        if(binvalue==3)
-                        {
-                            etaBin=0.1;
-                            phiBin=(2*Math.PI/64);
-                        }
-                        else
-                        {
-                            etaBin*=binvalue;
-                            phiBin*=binvalue;
-                        }
-                        Color[] colorMap = AColorMap.getColors();
-                        ag.setColor(colorMap[parameterStore.get("Det", "CaloDetail").getI()]);
-                        double firstZMin=detector.getZMin();
-                        //check etaSplit is set correct
-                        if(binvalue==3)
-                        {
-                            setEtaSplit();
-                        }
-                        //loop between values greater and less than the actual size
-                        for(double Eta=1.2; Eta<3.3; Eta+=etaBin)
-                        {
-                            if(binvalue==3 && Eta>=parameterStore.get("YX", "SplitEta").getD())
-                            {
-                                etaBin=0.2;
-                                phiBin=(2*Math.PI/32);
-                            }
-                            double RMax=firstZMin/Math.sinh(Eta);
-                            double RMin=firstZMin/Math.sinh(Eta+etaBin);
-                            for(double Phi=0.0; Phi<(2*Math.PI); Phi+=phiBin)
-                            {
-                                double[][] hv = new double[2][];
-                                hv[0] = new double[] {RMax*Math.cos(Phi), RMax*Math.cos(Phi+phiBin),
-                                        RMin*Math.cos(Phi+phiBin), RMin*Math.cos(Phi)};
-                                hv[1] = new double[] {RMax*Math.sin(Phi), RMax*Math.sin(Phi+phiBin),
-                                        RMin*Math.sin(Phi+phiBin), RMin*Math.sin(Phi)};
- 
-                                ACoord coord = new ACoord(hv);
-                                ACoord display;
-                                
-                                if (projection instanceof AProjectionYX) 
-                                    display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                                else
-                                    display = window.calculateDisplay(projection.nonLinearTransform(
-                                            coord.convertYXToFR().includePhiWrapAround("FR"))
-                                    );
-                                for(int j=0; j<display.hv[0].length; j++)
-                                    ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                            }
-                        }
-                    }
-                    
-                } 
-                else if (projection instanceof AProjectionRZ) 
-                {
-                    for (int eta=detector.getFirstEta(); eta<=detector.getLastEta(); eta++) 
-                    {
-                        
-                        for (int phi=detector.getFirstPhi();
-                                phi<=detector.getFirstPhi()+detector.getNumPhi()/2;
-                                phi+=detector.getNumPhi()/2) 
-                        {
-                            
-                            for (int side=-1; side<=1; side+=2) {
-                                ACoord coord = detector.getCell(projection, eta, phi, side);
-                        
-                                if (coord != ACoord.NO_DATA) 
-                                {
-                                    ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                                    Color[] colorMap = AColorMap.getColors();
-                                    ag.setColor(colorMap[parameterStore.get("Det", "CaloDetail").getI()]);
-                                    ag.drawPolygon(display.hv[0][0], display.hv[1][0], display.hv[0][0].length);
-                                }
-                            }
-                        }
-                    }                    
-                } 
-                else if (projection instanceof AProjectionFZ) 
-                {
-                    int eta = detector.getFirstEta();
-
-                    for (int phi=detector.getFirstPhi(); phi<=detector.getLastPhi(); phi++) 
-                    {                        
-                        for (int side=-1; side<=1; side+=2) 
-                        {
-                            ACoord coord = detector.getCell(projection, eta, phi, side).includePhiWrapAround("FZ");
-                       
-                            if (coord != ACoord.NO_DATA) 
-                            {
-                                ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                                Color[] colorMap = AColorMap.getColors();
-                                ag.setColor(colorMap[parameterStore.get("Det", "CaloDetail").getI()]);
-                                
-                                for (int j=0; j<display.hv[0].length; j++) 
-                                {
-                                   ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                                }
-                            }
-                        }
-                    }                    
-                }
-            }
-        }
-    }
-    
-    /**
-     * This function sets the value of EtaSplit to a minimum of 1.2 and 
-     * to an accuracy of 1 decimal place
-     * 1.2 is minimum as is minimum of where cells outline is drawn
-     */
-    public static void setEtaSplit() {
-        if(parameterStore.get("YX", "SplitEta").getD()<1.2)
-            parameterStore.get("YX", "SplitEta").setD(1.2);
-        else
-        {
-            int temp=(int) Math.floor(parameterStore.get("YX", "SplitEta").getD()*10.0);
-            parameterStore.get("YX", "SplitEta").setD(temp/10.0);
-        }
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ADetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ADetector.java
deleted file mode 100755
index b7196bfe34a7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ADetector.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-
-/**
- * Base class of all individual detectors
- */
-
-public abstract class ADetector {
-
-  String name;
-  String projection;
-  String color;
-  AParameter fillColorParameter;
-  
-  protected static APar parameterStore = APar.instance();
-  protected static AGlobals globals = AGlobals.instance();
-
-  final static protected double[][] NO_DETECTORS=new double[2][0];
-
-  ADetector(String name, String projection, String color) {
-    this.name=name;
-    this.projection=projection;
-    this.color=color;
-    fillColorParameter=APar.instance().get("Det", color+"Fill");
-  }
-
-  protected ACoord getYXUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getRZUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getYZUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getXZUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getFRUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getFZUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getVPUser() {
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getUser(String projection) {
-    if (projection.equals("YX"))
-      return getYXUser();
-    else if (projection.equals("RZ"))
-      return getRZUser();
-    else if (projection.equals("XZ"))
-      return getXZUser();
-    else if (projection.equals("YZ"))
-      return getYZUser();
-    else if (projection.equals("FZ"))
-      return getFZUser();
-    else if (projection.equals("FR"))
-      return getFRUser();
-    else if (projection.equals("VP"))
-      return getVPUser();
-    else
-      return ACoord.NO_DATA;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public int getFillColor() {
-    return fillColorParameter.getI();
-  }
-
-  protected boolean getDraw() {
-    return fillColorParameter.getStatus();
-  }
-
-  protected boolean equalsYX(ADetector that) {
-    return false;
-  }
-
-  protected boolean equalsRZ(ADetector that) {
-    return false;
-  }
-
-  protected ACoord convertYXToFR(ACoord coord) {
-    double phiLast=0.;
-
-    for (int i=0; i<coord.hv[0].length; i++) {
-        for (int j=0; j<coord.hv[0][i].length; j++) {
-            double xx=coord.hv[0][i][j];
-            double yy=coord.hv[1][i][j];
-            double rho=Math.sqrt(xx*xx+yy*yy);
-            double phi=Math.toDegrees(Math.atan2(yy, xx));
-
-            if(phi<0.)
-              phi+=360.;
-            if(j>0) {
-              if(phi-phiLast>180.) phi-=360.;
-              if(phi-phiLast<-180.) phi+=360.;
-            }
-            coord.hv[0][i][j]=rho;
-            coord.hv[1][i][j]=phi;
-            phiLast=phi;
-        }
-    }
-
-   return coord;
-  }
-
-    protected double[][][] generateAnnulusTris(int numPhi, double phi0,
-            double rMin, double rMax) {
-        
-        //rMin *= 1.02;
-        
-        int numTris = 2 * (numPhi);
-        double[][][] hv = new double[2][numTris][3];
-
-        double deltaPhi = 2. * Math.PI / numPhi;
-
-        for (int i = 0; i < numPhi; i++) {
-            hv[0][i][0] = rMax * Math.cos(phi0 + i * deltaPhi);
-            hv[1][i][0] = rMax * Math.sin(phi0 + i * deltaPhi);
-
-            hv[0][i][1] = rMax * Math.cos(phi0 + (i + 1) * deltaPhi);
-            hv[1][i][1] = rMax * Math.sin(phi0 + (i + 1) * deltaPhi);
-
-            float midi = ((float) i) + 0.5f;
-            hv[0][i][2] = rMin * Math.cos(phi0 + midi * deltaPhi);
-            hv[1][i][2] = rMin * Math.sin(phi0 + midi * deltaPhi);
-
-            int offi = i + (numPhi);
-            hv[0][offi][0] = rMin * Math.cos(phi0 + midi * deltaPhi);
-            hv[1][offi][0] = rMin * Math.sin(phi0 + midi * deltaPhi);
-
-            hv[0][offi][1] = rMax * Math.cos(phi0 + (i + 1) * deltaPhi);
-            hv[1][offi][1] = rMax * Math.sin(phi0 + (i + 1) * deltaPhi);
-
-            hv[0][offi][2] = rMin * Math.cos(phi0 + (midi + 1) * deltaPhi);
-            hv[1][offi][2] = rMin * Math.sin(phi0 + (midi + 1) * deltaPhi);
-        }
-
-        return hv;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ADetectorSystem.java b/graphics/AtlantisJava/src/atlantis/geometry/ADetectorSystem.java
deleted file mode 100755
index e0c93a93856d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ADetectorSystem.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package atlantis.geometry;
-
-
-import java.awt.*;
-
-import atlantis.canvas.*;
-import atlantis.graphics.*;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.gui.*;
-import atlantis.parameters.*;
-import atlantis.projection.*;
-
-
-public class ADetectorSystem 
-{
-
-  private ADetectors[] detectors;
-  protected static String geometryName = null;
-  
-  protected static APar parameterStore = APar.instance();
-
-  ADetectorSystem(ADetectors[] detectors) 
-  {
-    this.detectors=detectors;
-  }
-
-  public ADetectors[] getDetectors() 
-  {
-    return detectors;
-  }
-
-  // The whole of atlas is drawn in one loop to avoid problem with frames
-  // overlapping
-
-
-  public void draw(AWindow window, AGraphics ag, AProjection2D projection) 
-  {
-    if(!parameterStore.get("Det", "Detectors").getStatus()) return;
-    boolean drawFrames=parameterStore.get("Det", "HideDetectors").getStatus();
-    //also draw frames for Grey/BW color maps
-    boolean colorBW=AColorMap.drawFrames();
-    Color[] colorMap=AColorMap.getColors();
-    ADetectors[] detectors=getDetectors();
-    ACoord[] display=new ACoord[detectors.length];
-    int[][] index=new int[detectors.length][];
-    int[][] detColor=new int[detectors.length][];
-    boolean[][] draw=new boolean[detectors.length][];
-    int bkgColor = parameterStore.get("Color","BkgFill").getI();
-
-    for(int det=0; det<detectors.length; ++det) {
-      display[det]=window.calculateDisplay(detectors[det].getUser(projection));
-      index[det]=display[det].index;
-      detColor[det]=detectors[det].getColor(index[det]);
-      draw[det]=detectors[det].getDraw(index[det]);
-    }
-
-    boolean modeSelection = parameterStore.get(projection.getName(), "Mode").getI()==0
-        ||(parameterStore.get(projection.getName(), "Mode").getI()>8
-            &&(projection instanceof AProjectionYX||projection instanceof AProjectionFR));
-    
-    for(int layer=0; layer<2; ++layer) 
-    {
-      for(int det=0; det<detectors.length; ++det) 
-      {
-        ADrawParameters dp=detectors[det].getDrawParameters(layer, 0);
-        ag.updateDrawParameters(dp);
-        for(int i=0; i<display[det].hv[0].length; ++i) 
-        {
-          int numPoints=display[det].hv[0][i].length;
-          ag.setColor(colorMap[detColor[det][i]]);
-          if(draw[det][i]&& numPoints>0)
-          {
-            if(modeSelection) 
-            {
-              if(layer==0 && (drawFrames||colorBW))
-              {
-                if(colorBW) 
-                  ag.setColor(colorMap[AColorMap.BK]);
-                ag.drawPolygon(display[det].hv[0][i], display[det].hv[1][i], numPoints);
-              } 
-              else if(layer==1) 
-              {
-                if(drawFrames) 
-                  ag.setColor(colorMap[bkgColor]);
-                ag.fillPolygon(detectors[det], index[det][i], display[det].hv[0][i],
-                    display[det].hv[1][i], numPoints);
-              }
-            } 
-            else 
-            {
-              if(layer==0) 
-              {
-                if(drawFrames) 
-                  ag.setColor(colorMap[bkgColor]);
-                ag.fillPolygon(detectors[det], index[det][i], display[det].hv[0][i],
-                    display[det].hv[1][i], numPoints);
-              } 
-              else if(layer==1 && (drawFrames||colorBW))  
-              {
-                if(colorBW) 
-                  ag.setColor(colorMap[AColorMap.BK]);
-                ag.drawPolygon(display[det].hv[0][i], display[det].hv[1][i], numPoints);
-              }
-            }
-          }
-        }
-      }
-    }
-    ABarrelSiliconDetector.drawAdditionalItems(window, ag, projection);
-    AEndcapSiliconDetector.drawAdditionalItems(window, ag, projection);
-    ABarrelTRTDetector.drawAdditionalItems(window, ag, projection);
-    AEndcapTRTDetector.drawAdditionalItems(window, ag, projection);
-    ACalorimeterDetector.drawAdditionalItems(window, ag, projection);
-  }
-
-  public static String getGeometryName()
-  {
-      return geometryName == null ? "n/a" : geometryName;
-
-  } // getName() ------------------------------------------------------------
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ADetectors.java b/graphics/AtlantisJava/src/atlantis/geometry/ADetectors.java
deleted file mode 100755
index 1f11913e80d1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ADetectors.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.*;
-import atlantis.parameters.APar;
-import atlantis.projection.*;
-
-/**
- * Base class of all collections of detectors
- * All non muon geometry is in AGeometry.xml
- * All muon geometry is in AMuonGeometry.xml
- * ADetectors is the interface to the rest of the program and contains
- * collections of detectors.
- * When a line in our XML file describes several detectors these are stored
- * individually.
- */
-public abstract class ADetectors {
-
-  protected ADetector[] det=null;
-
-  protected int[] listdl;
-  protected int numDraw;
-  protected int numData;
-  
-  protected static APar parameterStore = APar.instance();
-
-  public ADetectors(ADetector[] det) {
-   this.det=det;
-   numData=det.length;
-   numDraw=0;
-   listdl=new int[numData];
- }
-
- public ADetector[] getDetectors() {
-     return det;
- }
-
- protected void constructDefaultDrawList() {
-  numDraw=numData;
-  for(int i=0; i<numDraw; ++i)
-    listdl[i]=i;
-  }
-
-   protected void makeDrawList(String projection){
-     constructDefaultDrawList();
-   }
-
-   protected ACoord getUser(String projection) {
-       makeDrawList(projection);
-       int[] numPoly = new int[numDraw];
-       int numTotal = 0;
-       for (int i=0; i<numDraw; i++) {
-           int len = det[listdl[i]].getUser(projection).hv[0].length;
-           numPoly[i] = len;
-           numTotal += len;
-       }
-       double[][][] hv = new double[2][numTotal][];
-       int[] index = new int[numTotal];
-       for (int i=0, k=0; i<numDraw; i++) {
-           double temp[][][] = det[listdl[i]].getUser(projection).hv;
-           for(int j = 0; j < numPoly[i]; j++, k++) {
-               hv[0][k] = temp[0][j];
-               hv[1][k] = temp[1][j];
-               index[k] = listdl[i];
-           }
-       }
-       return new ACoord(hv, index);
-   }
-
-   protected int[] getColor(int[] dl) {
-     int[] col=new int[dl.length];
-
-     for(int i=0; i<dl.length; ++i)
-       col[i]=det[dl[i]].getFillColor();
-     return col;
-   }
-
-   protected boolean[] getDraw(int[] dl) {
-      boolean[] draw=new boolean[dl.length];
-
-      for(int i=0; i<dl.length; ++i)
-        draw[i]=det[dl[i]].getDraw();
-      return draw;
-    }
-
-   public String getInfo(int index) {
-     return det[index].getName();
-   }
-
-  protected ADrawParameters getDrawParameters(int layer, int type) {
-    if(layer==0)
-      return new ADrawParameters(true, 0, 0, 0, 1, 0);
-    else
-      return new ADrawParameters(true, 0, 0, 1, 0, 0);
-  }
-
-  protected ACoord getUserNoTransform(AProjection projection) {
-    String name=projection.getName();
-    ACoord data=getUser(name);
-    if(name.charAt(0)=='F')
-      data.includePhiWrapAround(name);
-    return data;
-  }
-
-  protected ACoord getUser(AProjection2D projection) {
-    return projection.nonLinearTransform(getUserNoTransform(projection));
-  }
-
-  /*
-   protected void draw(AWindow window,AGraphics ag,AProjection2D projection) {
-   // in a simple world the implementation would be here
-   throw new RuntimeException();
-   }
-   */
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ADiscDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ADiscDetector.java
deleted file mode 100755
index a8241c1889ce..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ADiscDetector.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.utils.*;
-import atlantis.graphics.ACoord;
-
-public class ADiscDetector extends ADetector {
-
-  double rInner;
-  double rOuter;
-  int nInner;
-  int nOuter;
-
-  ADiscDetector(String name, String projection, String color, double rInner, double rOuter, int nInner, int nOuter) {
-    super(name, projection, color);
-    this.rInner=rInner;
-    this.nInner=nInner;
-    this.rOuter=rOuter;
-    this.nOuter=nOuter;
-  }
-
-  protected ACoord getYXUser() {
-      if (!projection.equals("YX")) {
-          return ACoord.NO_DATA;
-      }
-
-      if (!globals.getUseOpenGL()) {
-          int numPoints = nInner + nOuter + 2;
-          double[][] hv = new double[2][numPoints];
-
-          for (int j = 0; j < nInner + 1; j++) {
-              hv[0][j] = rInner * Math.cos(Math.PI * 2 * j / nInner);
-              hv[1][j] = rInner * Math.sin(Math.PI * 2 * j / nInner);
-          }
-          for (int j = 0; j < nOuter + 1; j++) {
-              hv[0][j + nInner + 1] = rOuter * Math.cos(Math.PI * 2 * (nOuter - j) / nOuter);
-              hv[1][j + nInner + 1] = rOuter * Math.sin(Math.PI * 2 * (nOuter - j) / nOuter);
-          }
-          return new ACoord(hv);
-      } else {
-          //FIXME:
-          //Note that generateAnnulusTris can't really handle this different number
-          //of inner and outer points thing so we're just going to take the mean here
-          //Maybe one day we fix this somehow or just remove one of the ns
-          //All the other round detectors get along fine without it...
-          // -- Adam
-          return new ACoord(generateAnnulusTris((nInner + nOuter) / 2, 0.0, rInner, rOuter));
-      }
-  }
-
-  protected ACoord getFRUser() {
-    if(!projection.equals("FR")) return ACoord.NO_DATA;
-    return new ACoord (AMath.xBox((rInner+rOuter)/2.,(rOuter-rInner)/2.),
-                            AMath.yBox(180.,180.));
-  }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCalorimeterDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCalorimeterDetector.java
deleted file mode 100755
index a5df48ac54f2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCalorimeterDetector.java
+++ /dev/null
@@ -1,328 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AClipper;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AMath;
-
-/**
- * Class representing a calorimeter part in the endcap section of ATLAS.
- */
-public class AEndcapCalorimeterDetector extends ACalorimeterDetector {
-
-    /**
-     * Constructs a new endcap calorimeter object
-     * @param name String name of the object
-     * @param color String name of the color used to draw this object
-     * @param sampling int sampling of this calorimeter part
-     * @param region int region of this calorimeter part
-     * @param rMin double inner radius
-     * @param rMax double outer radius
-     * @param zMin double inner z
-     * @param zMax double outer z
-     * @param eta0 double start of the first cell in eta
-     * @param deta double size of a cell in eta
-     * @param neta int number of cells in eta
-     * @param meta int eta index of the first cell
-     * @param phi0 double start of the first cell in phi
-     * @param nphi int number of cells in phi
-     */
-    public AEndcapCalorimeterDetector(String name, String color, int sampling, int region,
-                                      double rMin, double rMax, double zMin, double zMax,
-                                      double eta0, double deta, int neta, int meta,
-                                      double phi0, int nphi) {
-        super(name, color);
-
-        this.sampling = sampling;
-        this.region = region;
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.zMin = zMin;
-        this.zMax = zMax;
-        this.eta0 = eta0;
-        this.deltaEta = deta;
-        this.numEta = neta;
-        this.minEta = meta;
-        this.phi0 = Math.toRadians(phi0);
-        this.numPhi = nphi;
-        this.deltaPhi = 2.*Math.PI / numPhi;
-
-        this.detEtaMin = AMath.etaAbs(this.zMin, this.rMax);
-        this.detEtaMax = AMath.etaAbs(this.zMax, this.rMax);
-
-        // This one is used for clipping the cell geometry in rho-z.
-        this.clipper = new AClipper(zMin, zMax, rMin, rMax);
-
-        // These arrays are used by the getDetectorIndex() method in ACalorimeterData.
-        // They provide fast mapping of hits to detectors.
-        if (this.name.indexOf("LAr") >= 0 && this.name.indexOf("Inner") >= 0 
-            && this.sampling < lar[3].length && this.region < lar[3][this.sampling].length) {
-
-           lar[3][this.sampling][this.region] = detectors.indexOf(this);
-        } else if (this.name.indexOf("LAr") >= 0 && this.sampling < lar[2].length
-            && this.region < lar[2][this.sampling].length) {
-
-            lar[2][this.sampling][this.region] = detectors.indexOf(this);
-        } else if (this.name.equals("HEC") && this.sampling < hec.length
-                   && this.region < hec[this.sampling].length) {
-
-            hec[this.sampling][this.region] = detectors.indexOf(this);
-        } else {
-            System.out.println("Unknown calorimeter object: '" + this.name + "'"
-                               + " some hits might not be displayed correctly.");
-        }
-    }
-
-    /**
-     * Returns the y-x geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getYXUser() {
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if ( mode < AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER) 
-            return ACoord.NO_DATA;
-        else if((mode==AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && (name.equals("LAr Endcap Presampler")||name.equals("LAr_EC_Presampler")))
-             || (name.equals("LAr Outer Endcap") && sampling==mode-AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER)
-             || (name.equals("LAr Inner Endcap") && sampling==mode-AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER-1)
-             || (name.equals("HEC") && sampling==mode-AProjectionYX.MODE_HEC_1)
-             || (mode==AProjectionYX.MODE_LAR_ENDCAP_SUMMED && name.indexOf("LAr")>=0)
-             || (mode==AProjectionYX.MODE_HEC_SUMMED && name.equals("HEC")))
-        {
-
-            double etaMax = eta0 + numEta * deltaEta;
-            double etaMin = eta0;
-            double r1, r2;
-            if (name.equals("HEC")) 
-            {    
-                r1=rMax;
-                r2=rMin;
-            }
-            else
-            {
-                if (name.indexOf("Inner") >= 0 || name.indexOf("Presampler") >= 0)
-                    r1 = zMin/Math.sinh(etaMin);
-                else
-                    r1=rMax;
-                r2 = zMin/Math.sinh(etaMax);
-            }
-            
-            if (!globals.getUseOpenGL()) {
-                int numPoints = 2 * (numPhi + 1);
-                double[][] hv = new double[2][numPoints];
-                for (int i = 0; i < numPhi + 1; i++) {
-                    hv[0][i] = r2 * Math.cos(phi0 + i * deltaPhi);
-                    hv[1][i] = r2 * Math.sin(phi0 + i * deltaPhi);
-                    hv[0][numPhi + 1 + i] = r1 * Math.cos(phi0 - i * deltaPhi);
-                    hv[1][numPhi + 1 + i] = r1 * Math.sin(phi0 - i * deltaPhi);
-                }
-                return new ACoord(hv);
-            } else {
-                return new ACoord(generateAnnulusTris(numPhi, phi0, r1, r2));
-            }
-        }
-        else
-            return ACoord.NO_DATA;
-    }
-    
-    /**
-     * Returns the rho-z geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getRZUser() {
-        double h[], v[];
-        double etaMax = eta0 + numEta * deltaEta;
-        double etaMin = eta0;
-
-        // Calculate the polygon in the positive h and v.
-        if (name.indexOf("HEC") >= 0) {         
-            h = new double[] {zMax, zMin, zMin, zMax};
-            v = new double[] {rMax, rMax, rMin, rMin};          
-        } else {
-            double r0 = zMax/Math.sinh(etaMin);
-            double r1 = zMin/Math.sinh(etaMin);
-            double r2 = zMin/Math.sinh(etaMax);
-            double r3 = zMax/Math.sinh(etaMax);
-            
-            h = new double[] {zMax, zMin, zMin, zMax};
-            v = new double[] {r0, r1, r2, r3};
-        }
-
-        // Clip the polygon.
-        ACoord coord = clipper.clipPolygon(h, v, h.length);
-        
-        // Copy it to negative v.
-        coord = new ACoord(coord, coord.mirrorV());
-        // Copy it to negative h.
-        coord = new ACoord(coord, coord.mirrorH());
-
-        return coord;
-    }
-
-    /**
-     * Returns the phi-rho geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getFRUser() {
-        return getYXUser().convertYXToFR();
-    }
-    
-    /**
-     * Returns the phi-z geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getFZUser() {
-        double[][][] hv = new double[2][2][];
-        double phiMin = 0.;
-        double phiMax = 360.;
-        hv[0][0] = new double[] {  zMax,   zMin,   zMin,   zMax};
-        hv[1][0] = new double[] {phiMax, phiMax, phiMin, phiMin};
-        hv[0][1] = new double[] { -zMax,  -zMin,  -zMin,  -zMax};
-        hv[1][1] = new double[] {phiMax, phiMax, phiMin, phiMin};
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the y-x geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getYXCell(int eta, int phi) 
-    {
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if(mode < AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER || mode > AProjectionYX.MODE_HEC_SUMMED)
-            return ACoord.NO_DATA;
-        else if((mode==AProjectionYX.MODE_LAR_ENDCAP_SUMMED && name.indexOf("LAr")>=0)
-                || (mode==AProjectionYX.MODE_HEC_SUMMED && name.equals("HEC")))
-        {
-        	//don't need to carry out calculation just needs return a blank ACoord
-            double[][] hv = new double[2][];
-            hv[0] = new double[] {0};
-            hv[1] = new double[] {0};
-            return new ACoord(hv);
-        }
-        else if((mode==AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER && (name.equals("LAr Endcap Presampler") || name.equals("LAr_EC_Presampler")))
-            || (name.equals("LAr Outer Endcap") && sampling==mode-AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER)
-            || (name.equals("LAr Inner Endcap") && sampling==mode-AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER-1)
-            || (name.equals("HEC") && sampling==mode-AProjectionYX.MODE_HEC_1))            
-        {
-            double[][] hv = new double[2][];
-            double phiMin = phi0+phi*deltaPhi;
-            double phiMax = phiMin+deltaPhi;
-            double newrMax=0, newrMin=0;
-            double etaMin = eta0+(eta-minEta)*deltaEta;
-            double etaMax = etaMin+deltaEta;
-            newrMax=zMin/Math.sinh(etaMin);
-            newrMin=zMin/Math.sinh(etaMax);
-            if (name.equals("HEC"))
-            {
-                if(newrMax>rMax)
-                    newrMax=rMax;
-                if(newrMin<rMin)
-                    newrMin=rMin;
-            }
-            hv[0] = new double[] {newrMax*Math.cos(phiMin), newrMax*Math.cos(phiMax),
-                                  newrMin*Math.cos(phiMax), newrMin*Math.cos(phiMin)};
-            hv[1] = new double[] {newrMax*Math.sin(phiMin), newrMax*Math.sin(phiMax),
-                                  newrMin*Math.sin(phiMax), newrMin*Math.sin(phiMin)};
-            return new ACoord(hv);
-        }
-        else
-            return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the rho-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getRZCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        int sign = getRSign(phi);
-
-        // This shouldn't be 0, but just to be on the safe side.
-        if (side != 0) side /= Math.abs(side);
-
-        double etaMin = eta0+(eta-minEta)*deltaEta;
-        double etaMax = etaMin+deltaEta;
-
-        if (name.indexOf("HEC") >= 0) {  
-            if (sampling == 0) {
-                double rMin = (zMin+zMax)/2. / Math.sinh(etaMax);
-                double rMax = (zMin+zMax)/2. / Math.sinh(etaMin);
-    
-                hv[0] = new double[] {zMax, zMin, zMin, zMax};
-                hv[1] = new double[] {rMax, rMax, rMin, rMin};
-            } else {
-                double dz = (zMax-zMin);
-                double z0 = zMin;
-                double z1 = zMin+dz/2.;
-                double z2 = zMax;
-                double r0 = (zMin+dz/4.) / Math.sinh(etaMax);
-                double r1 = (zMax-dz/4.) / Math.sinh(etaMax);
-                double r2 = (zMin+dz/4.) / Math.sinh(etaMin);
-                double r3 = (zMax-dz/4.) / Math.sinh(etaMin);
-                
-                hv[0] = new double[] {z2, z1, z1, z0, z0, z1, z1, z2};
-                hv[1] = new double[] {r3, r3, r2, r2, r0, r0, r1, r1};
-            }
-        } else {
-            hv[0] = new double[] {zMax, zMin, zMin, zMax};
-            hv[1] = new double[] {zMax/Math.sinh(etaMin), zMin/Math.sinh(etaMin),
-                                  zMin/Math.sinh(etaMax), zMax/Math.sinh(etaMax)};
-        }
-
-        // Clip the cell and send it to the right quadrant.
-        ACoord coord = clipper.clipPolygon(hv[0], hv[1], hv[0].length);
-        for (int i=0; i<coord.hv[0][0].length; i++) {
-            coord.hv[0][0][i] *= side;
-            coord.hv[1][0][i] *= sign;
-        }
-
-        return coord;
-    }
-
-    /**
-     * Returns the phi-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord
-     */
-    public ACoord getFZCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        double phiMin = Math.toDegrees(phi0 + phi*deltaPhi);
-        double phiMax = phiMin + Math.toDegrees(deltaPhi);
-
-        side /= Math.abs(side);
-
-        hv[0] = new double[] {side*zMax, side*zMin, side*zMin, side*zMax};
-        hv[1] = new double[] {   phiMax,    phiMax,    phiMin,    phiMin};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the eta-phi geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getVPCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        double etaMin = eta0+(eta-minEta)*deltaEta;
-        double etaMax = etaMin+deltaEta;
-        double phiMin = Math.toDegrees(phi0 + phi*deltaPhi);
-        double phiMax = phiMin + Math.toDegrees(deltaPhi);
-
-        side /= Math.abs(side);
-
-        hv[0] = new double[] {side*etaMax, side*etaMin, side*etaMin, side*etaMax};
-        hv[1] = new double[] {     phiMax,      phiMax,      phiMin,      phiMin};
-
-        return new ACoord(hv);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCryostatDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCryostatDetector.java
deleted file mode 100755
index 8d1122eba4bf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapCryostatDetector.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AClipper;
-import atlantis.projection.AProjectionYX;
-import atlantis.utils.AMath;
-
-/**
- * Class representing a detector part in the endcap cryostat section of ATLAS.
- */
-public class AEndcapCryostatDetector extends ACalorimeterDetector {
-
-    /**
-     * Constructs a new endcap calorimeter object
-     * @param name String name of the object
-     * @param color String name of the color used to draw this object
-     * @param sampling int sampling of this calorimeter part
-     * @param region int region of this calorimeter part
-     * @param rMin double inner radius
-     * @param rMax double outer radius
-     * @param zMin double inner z
-     * @param zMax double outer z
-     * @param neta int number of cells in eta
-     * @param nphi int number of cells in phi
-     */
-    public AEndcapCryostatDetector(String name, String color, int sampling, int region, double rMin, 
-                                      double rMax, double zMin, double zMax, int neta, int nphi) {
-        super(name, color);
-
-        this.sampling = sampling;
-        this.region = region;
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.zMin = zMin;
-        this.zMax = zMax;
-        this.numEta = neta;
-        this.numPhi = nphi;
-        this.deltaPhi = 2.*Math.PI / numPhi;
-        this.phi0 = 0.0;
-        this.eta0 = AMath.etaAbs(this.zMin, this.rMin);
-
-        this.detEtaMin = AMath.etaAbs(this.zMin, this.rMax);
-        this.detEtaMax = AMath.etaAbs(this.zMax, this.rMax);
-
-        // This one is used for clipping the cell geometry in rho-z.
-        this.clipper = new AClipper(zMin, zMax, rMin, rMax);
-
-        // These arrays are used by the getDetectorIndex() method in ACalorimeterData.
-        // They provide fast mapping of hits to detectors.
-        if (this.name.equals("Minimum Bias Trigger Scintillators")) {
-            mbts[this.sampling] = detectors.indexOf(this);
-        } else {
-            System.out.println("Unknown calorimeter object: '" + this.name + "'"
-                               + " some hits might not be displayed correctly.");
-        }
-    }
-
-    /**
-     * Returns the y-x geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getYXUser() {
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if (mode!=AProjectionYX.MODE_MBTS) 
-            return ACoord.NO_DATA;
-        else
-        {
-            if (!globals.getUseOpenGL()) {
-                int numPoints = 2 * (numPhi + 1);
-                double[][] hv = new double[2][numPoints];
-                for (int j = 0; j < numPhi + 1; j++) {
-                    hv[0][j] = rMin * Math.cos(Math.PI * 2 * j / numPhi);
-                    hv[1][j] = rMin * Math.sin(Math.PI * 2 * j / numPhi);
-                }
-                for (int j = 0; j < numPhi + 1; j++) {
-                    hv[0][j + numPhi + 1] = rMax * Math.cos(Math.PI * 2 * (numPhi - j) / numPhi);
-                    hv[1][j + numPhi + 1] = rMax * Math.sin(Math.PI * 2 * (numPhi - j) / numPhi);
-                }
-                return new ACoord(hv);
-            } else {
-                return new ACoord(generateAnnulusTris(numPhi, phi0, rMin, rMax));
-            }
-        }
-    }
-    
-    /**
-     * Returns the rho-z geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getRZUser() {
-        double h[], v[];
-        // Calculate the polygon in the positive h and v.
-        h = new double[] {zMax, zMin, zMin, zMax};
-        v = new double[] {rMax, rMax, rMin, rMin};          
-        // Clip the polygon.
-        ACoord coord = clipper.clipPolygon(h, v, h.length);
-        // Copy it to negative v.
-        coord = new ACoord(coord, coord.mirrorV());
-        // Copy it to negative h.
-        coord = new ACoord(coord, coord.mirrorH());
-        return coord;
-    }
-
-    /**
-     * Returns the phi-rho geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getFRUser() {
-        return getYXUser().convertYXToFR();
-    }
-    
-    /**
-     * Returns the y-x geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getYXCell(int eta, int phi) 
-    {
-        int mode = parameterStore.get("YX", "Mode").getI();
-        if(mode!=AProjectionYX.MODE_MBTS)
-            return ACoord.NO_DATA;
-        else            
-        {
-            double[][] hv = new double[2][];
-            double phiMin = Math.PI*2*phi/numPhi;
-            double phiMax = Math.PI*2*(1+phi)/numPhi;
-            hv[0] = new double[] {rMax*Math.cos(phiMin), rMax*Math.cos(phiMax),
-                                  rMin*Math.cos(phiMax), rMin*Math.cos(phiMin)};
-            hv[1] = new double[] {rMax*Math.sin(phiMin), rMax*Math.sin(phiMax),
-                                  rMin*Math.sin(phiMax), rMin*Math.sin(phiMin)};
-            return new ACoord(hv);
-        }
-    }
-
-    /**
-     * Returns the rho-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getRZCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        int sign = getRSign(phi);
-        // This shouldn't be 0, but just to be on the safe side.
-        if (side != 0) side /= Math.abs(side);
-        hv[0] = new double[] {zMax, zMin, zMin, zMax};
-        hv[1] = new double[] {rMax, rMax, rMin, rMin};
-        // Clip the cell and send it to the right quadrant.
-        ACoord coord = clipper.clipPolygon(hv[0], hv[1], hv[0].length);
-        for (int i=0; i<coord.hv[0][0].length; i++) {
-            coord.hv[0][0][i] *= side;
-            coord.hv[1][0][i] *= sign;
-        }
-        return coord;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapSiliconDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AEndcapSiliconDetector.java
deleted file mode 100755
index e28c5f168695..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapSiliconDetector.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.AS3DData;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionYX;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class representing a pixel/SCT endcap detector part.
- * Also implements methods to draw more detailed structure of the detector.
- *
- * @author Eric Jansen
- */
-public class AEndcapSiliconDetector extends ADetector {
-
-    private static List detectors = null;
-
-    protected int layer;
-    protected double length;
-    protected double width;
-    protected double thickness;
-    protected int numZ;
-    protected int numPhi;
-    protected double phi0;
-    protected double zMin;
-    protected double zMax;
-
-    protected double deltaPhi;
-    protected double deltaZ;
-    protected double rMin;
-    protected double rMax;
-
-    public AEndcapSiliconDetector(String name, String color, int layer, double length, double width, double thickness,
-                                  int numZ, int numPhi, double rMin, double rMax, double phi0, double zMin, double zMax) {
-        super(name, " ", color);
-
-        if (detectors == null) {
-            detectors = new ArrayList();
-        }
-        detectors.add(this);
-
-        this.layer = layer;
-        this.length = length;
-        this.width = width;
-        this.thickness = thickness;
-        this.numZ = numZ;
-        this.numPhi = numPhi;
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.phi0 = Math.toRadians(phi0);
-        this.zMin = zMin;
-        this.zMax = zMax;
-
-        this.deltaPhi = 2.*Math.PI / this.numPhi;
-        this.deltaZ = (this.zMax - this.zMin) / this.numZ;
-    }
-
-    /**
-     * Empties the list of instances of this class.
-     */
-    public static void clear() {
-        if (detectors != null) {
-            detectors.clear();
-        }
-    }
-    
-    /**
-     * This function draws the wafer/stave structure of the silicon detectors. It is called
-     * from ADetectorSystem.draw().
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    public static void drawAdditionalItems(AWindow window, AGraphics ag, AProjection2D projection) {
-        AParameter inDetDetail = parameterStore.getUnknown("Det", "SiliconDetail");
-        if (inDetDetail != null && detectors != null && inDetDetail.getStatus()) {
-            for (int i=0; i<detectors.size(); i++) {
-                ACoord coord = ACoord.NO_DATA;
-                AEndcapSiliconDetector detector = (AEndcapSiliconDetector) detectors.get(i);
-                if (projection instanceof AProjectionYX) {
-                    coord = detector.getYXDetail();
-                } else if (projection instanceof AProjectionFR) {
-                    coord = detector.getYXDetail().convertYXToFR().includePhiWrapAround("FR");
-                }
-
-                if (coord != ACoord.NO_DATA) {
-                    Color[] colorMap = AColorMap.getColors();
-                    ag.setColor(colorMap[parameterStore.get("Det", "SiliconDetail").getI()]);
-
-                    ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                    for (int j=0; j<display.hv[0].length; j++) {
-                        ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Determines if this element should be visible or not.
-     * @return visibility
-     */
-    protected boolean isVisible() {
-        int cut = parameterStore.get("CutsInDet", "SCT").getI();
-
-        if (cut == AS3DData.CUT_INDET_SCT_ALL || cut == AS3DData.CUT_INDET_SCT_EC_NEG 
-                || cut == AS3DData.CUT_INDET_SCT_EC_POS) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-    
-    /**
-     * Returns the detector outline in the y-x projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getYXUser() {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-        if (!isVisible()) return ACoord.NO_DATA;
-        
-        if (!globals.getUseOpenGL()) {
-            int numPoints = 2 * (numPhi + 1);
-            double[][] hv = new double[2][numPoints];
-
-            for (int i = 0; i < numPhi + 1; i++) {
-                hv[0][i] = rMin * Math.cos(phi0 + (i + 0.5) * deltaPhi);
-                hv[1][i] = rMin * Math.sin(phi0 + (i + 0.5) * deltaPhi);
-
-                hv[0][numPhi + 1 + i] = rMax * Math.cos(phi0 - (i + 0.5) * deltaPhi);
-                hv[1][numPhi + 1 + i] = rMax * Math.sin(phi0 - (i + 0.5) * deltaPhi);
-            }
-            return new ACoord(hv);
-        } else {
-            return new ACoord(generateAnnulusTris(numPhi, phi0, rMin, rMax));
-        }
-    }
-
-    /**
-     * Returns the detector outline in the rho-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getRZUser() {
-        double[][][] hv = new double[2][4][];
-
-        hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-
-        hv[0][2] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][2] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][3] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][3] = new double[] {-rMin, -rMin, -rMax, -rMax};
-        
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFZUser() {
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][2][];
-
-        hv[0][0] = new double[] {zMax, zMin, zMin, zMax};
-        hv[1][0] = new double[] {360., 360., 0., 0.};
-        hv[0][1] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-rho projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFRUser() {
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        return getYXUser().convertYXToFR();
-    }
-
-   /**
-     * Returns the wafer/stave structure in the y-x projection.
-     * @return ACoord polygons representing the wafers/staves
-     */
-    protected ACoord getYXDetail() {
-        if (parameterStore.get("YX", "Mode").getI() != AProjectionYX.MODE_STANDARD) return ACoord.NO_DATA;
-        if (!isVisible()) return ACoord.NO_DATA;
-
-        double[][][] hv = new double[2][numPhi][];
-        for (int i=0; i<numPhi; i++) {            
-            hv[0][i] = new double[] {
-                rMax*Math.sin(phi0+(i-0.5)*deltaPhi),
-                rMax*Math.sin(phi0+(i+0.5)*deltaPhi),
-                rMin*Math.sin(phi0+(i+0.5)*deltaPhi),
-                rMin*Math.sin(phi0+(i-0.5)*deltaPhi)
-            };
-            hv[1][i] = new double[] {
-                rMax*Math.cos(phi0+(i-0.5)*deltaPhi),
-                rMax*Math.cos(phi0+(i+0.5)*deltaPhi),
-                rMin*Math.cos(phi0+(i+0.5)*deltaPhi),
-                rMin*Math.cos(phi0+(i-0.5)*deltaPhi)               
-            };
-        }
-
-        return new ACoord(hv);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapTRTDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AEndcapTRTDetector.java
deleted file mode 100755
index a23bfaf0d022..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AEndcapTRTDetector.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class representing a TRT endcap detector part.
- * Also implements methods to draw more detailed structure of the detector.
- *
- * @author Eric Jansen
- */
-public class AEndcapTRTDetector extends ADetector {
-
-    private static List detectors = null;
-
-    protected int layer;
-    protected int numPhi;
-    protected double rMin;
-    protected double rMax;
-    protected double phi0;
-    protected double zMin;
-    protected double zMax;
-    protected double deltaPhi;
-
-    public AEndcapTRTDetector(String name, String color, int layer, int numPhi, double rMin, double rMax, 
-                              double phi0, double zMin, double zMax) {
-        super(name, " ", color);
-
-        if (detectors == null) {
-            detectors = new ArrayList();
-        }
-        detectors.add(this);
-
-        this.layer = layer;
-        this.numPhi = numPhi;
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.phi0 = Math.toRadians(phi0);
-        this.zMin = zMin;
-        this.zMax = zMax;
-        
-        this.deltaPhi = 2.*Math.PI / numPhi;
-    }
-
-    /**
-     * Empties the list of instances of this class.
-     */
-    public static void clear() {
-        if (detectors != null) {
-            detectors.clear();
-        }
-    }
-
-    /**
-     * This function draws the module structure of the TRT detector. It is called
-     * from ADetectorSystem.draw().
-     * @param window AWindow window to use
-     * @param ag AGraphics graphics object to draw onto
-     * @param projection AProjection2D current projection
-     */
-    public static void drawAdditionalItems(AWindow window, AGraphics ag, AProjection2D projection) {
-        AParameter inDetDetail = parameterStore.getUnknown("Det", "TRTDetail");
-        if (inDetDetail != null && detectors != null && inDetDetail.getStatus()) {
-            for (int i=0; i<detectors.size(); i++) {
-                ACoord coord = ACoord.NO_DATA;
-                AEndcapTRTDetector detector = (AEndcapTRTDetector) detectors.get(i);
-                if (projection instanceof AProjectionRZ) {
-                    coord = detector.getRZDetail();
-                } else if (projection instanceof AProjectionFZ) {
-                    coord = detector.getFZDetail();
-                }
-
-                if (coord != ACoord.NO_DATA) {
-                    Color[] colorMap = AColorMap.getColors();
-                    ag.setColor(colorMap[parameterStore.get("Det", "TRTDetail").getI()]);
-
-                    ACoord display = window.calculateDisplay(projection.nonLinearTransform(coord));
-                    for (int j=0; j<display.hv[0].length; j++) {
-                        ag.drawPolygon(display.hv[0][j], display.hv[1][j], display.hv[0][j].length);
-                    }
-                }
-            }
-        }
-    }
-    
-    /**
-     * Returns the detector outline in the y-x projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getYXUser() {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the detector outline in the rho-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getRZUser() {
-        double[][][] hv = new double[2][4][];
-
-        hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-        hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-        hv[0][2] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][2] = new double[] { rMax,  rMax,  rMin,  rMin};
-        hv[0][3] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][3] = new double[] {-rMin, -rMin, -rMax, -rMax};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-z projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFZUser() {
-        double[][][] hv = new double[2][2][];
-
-        hv[0][0] = new double[] {zMax, zMin, zMin, zMax};
-        hv[1][0] = new double[] {360., 360., 0., 0.};
-        hv[0][1] = new double[] {-zMax, -zMin, -zMin, -zMax};
-        hv[1][1] = new double[] {360., 360., 0., 0.};
-
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the detector outline in the phi-rho projection.
-     * @return ACoord polygon representing the detector
-     */
-    protected ACoord getFRUser() {
-        return ACoord.NO_DATA;
-    }
-    
-    /**
-     * Returns the module structure in the rho-z projection.
-     * @return ACoord polygons representing the modules
-     */
-    protected ACoord getRZDetail() {
-        return ACoord.NO_DATA;
-    }
-
-    /**
-     * Returns the module structure in the phi-z projection.
-     * @return ACoord polygons representing the modules
-     */
-    protected ACoord getFZDetail() {
-        double[][][] hv = new double[2][2*numPhi][2];
-        for (int i=0; i<numPhi; i++) {
-            hv[0][i][0] = zMin;
-            hv[1][i][0] = Math.toDegrees(phi0 + i*deltaPhi);
-            hv[0][i][1] = zMax;
-            hv[1][i][1] = Math.toDegrees(phi0 + i*deltaPhi);
-            hv[0][numPhi+i][0] = -zMax;
-            hv[1][numPhi+i][0] = Math.toDegrees(phi0 + i*deltaPhi);
-            hv[0][numPhi+i][1] = -zMin;
-            hv[1][numPhi+i][1] = Math.toDegrees(phi0 + i*deltaPhi);
-        }
-
-        return new ACoord(hv).includePhiWrapAround("FZ");
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AGapCalorimeterDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/AGapCalorimeterDetector.java
deleted file mode 100755
index a27a9872377a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AGapCalorimeterDetector.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.parameters.AParameterUtilities;
-
-/**
- * Class representing a calorimeter in the gap region between TILE and extended TILE.
- * This is a fairly straightforward implementation of ACalorimeterDetector with only
- * one cell per object.
- *
- * @author Eric Jansen
- */
-public class AGapCalorimeterDetector extends ACalorimeterDetector {
-
-    protected int eta;
-
-    /**
-     * Constructs a new gap calorimeter object (one cell in eta).
-     * @param name String name of the object
-     * @param color String name of the color used to draw this object
-     * @param sampling int sampling of this calorimeter part
-     * @param region int region of this calorimeter part
-     * @param rMin double inner radius
-     * @param rMax double outer radius
-     * @param zMin double inner z
-     * @param zMax double outer z
-     * @param eta int eta index of this cell
-     * @param phi0 double start of the first cell in phi
-     * @param nphi int number of cells in phi
-     */
-    public AGapCalorimeterDetector(String name, String color, int sampling, int region,
-                                   double rMin, double rMax, double zMin, double zMax,
-                                   int eta, double phi0, int nphi) {
-        super(name, color);
-
-        // Just to be sure we take absolute values here.
-        this.sampling = Math.abs(sampling);
-        this.region = Math.abs(region);
-        this.eta = Math.abs(eta);
-
-        this.rMin = rMin;
-        this.rMax = rMax;
-        this.zMin = zMin;
-        this.zMax = zMax;
-        this.phi0 = Math.toRadians(phi0);
-        this.numPhi = nphi;
-        this.deltaPhi = 2.*Math.PI/numPhi;
-
-        // These arrays are used by the getDetectorIndex() method in ACalorimeterData.
-        // They provide fast mapping of hits to detectors.
-        if (this.name.indexOf("ITC") >= 0 && this.sampling < tile_gap.length
-            && this.eta < tile_gap[this.sampling].length) {
-
-            tile_gap[this.sampling][this.eta] = detectors.indexOf(this);
-        } else {
-            System.out.println("Unknown calorimeter object: '" + this.name + "'"
-                               + " some hits might not be displayed correctly.");
-        }
-    }
-
-    /**
-     * Returns the eta value of the center (in eta) of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double eta value
-     */
-    public double getEta(int eta, int side) {
-        if (side < 0) {
-            return -getEta(eta, -side);
-        } else {
-            return AParameterUtilities.eta((zMin+zMax)/2.f, (rMin+rMax)/2.f);
-        }
-    }
-
-    /**
-     * Returns the lowest eta value of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double lowest eta value
-     */
-    public double getEtaMin(int eta, int side) {
-        if (side < 0) {
-            return -getEtaMax(eta, -side);
-        } else {
-            return AParameterUtilities.eta((zMin+zMax)/2.f, rMax);
-        }
-    }
-
-    /**
-     * Returns the highest eta value of a cell.
-     * @param eta int eta index of the cell
-     * @param side int sign of the z coordinate of the cell
-     * @return double highest eta value
-     */
-    public double getEtaMax(int eta, int side) {
-        if (side < 0) {
-            return -getEtaMin(eta, -side);
-        } else {
-            return AParameterUtilities.eta((zMin+zMax)/2.f, rMin);
-        }
-    }
-
-    /**
-     * Returns the rho-z geometry of the full calorimeter part.
-     * @return ACoord polygons representing geometry
-     */
-    protected ACoord getRZUser() {
-        double[][][] hv;
-        if (zMin < 0) {
-            hv = new double[2][2][];
-            hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-            hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-            hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-            hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-        } else {
-            hv = new double[2][4][];
-            hv[0][0] = new double[] { zMax,  zMin,  zMin,  zMax};
-            hv[1][0] = new double[] { rMax,  rMax,  rMin,  rMin};
-            hv[0][1] = new double[] { zMax,  zMin,  zMin,  zMax};
-            hv[1][1] = new double[] {-rMin, -rMin, -rMax, -rMax};
-            hv[0][2] = new double[] {-zMin, -zMax, -zMax, -zMin};
-            hv[1][2] = new double[] { rMax,  rMax,  rMin,  rMin};
-            hv[0][3] = new double[] {-zMin, -zMax, -zMax, -zMin};
-            hv[1][3] = new double[] {-rMin, -rMin, -rMax, -rMax};
-        }
-        return new ACoord(hv);
-    }
-
-    /**
-     * Returns the rho-z geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getRZCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        int sign = getRSign(phi);
-
-        // This shouldn't be 0, but just to be on the safe side.
-        if (side != 0) {
-            side /= Math.abs(side);
-        }
-
-        hv[0] = new double[] {zMax, zMin, zMin, zMax};
-        hv[1] = new double[] {rMax, rMax, rMin, rMin};
-
-        // Send it to the right quadrant.
-        ACoord coord = new ACoord(hv);
-        for (int i=0; i<coord.hv[0][0].length; i++) {
-            coord.hv[0][0][i] *= side;
-            coord.hv[1][0][i] *= sign;
-        }
-
-        return coord;
-    }
-
-    /**
-     * Returns the eta-phi geometry of a specific cell in this calorimeter part.
-     * @param eta int eta index of cell
-     * @param phi int phi index of cell
-     * @param side int sign of the z coordinate of cell
-     * @return ACoord polygon representing cell geometry
-     */
-    public ACoord getVPCell(int eta, int phi, int side) {
-        double[][] hv = new double[2][];
-        double etaMin = AParameterUtilities.eta((zMin+zMax)/2.f, rMax);
-        double etaMax = AParameterUtilities.eta((zMin+zMax)/2.f, rMin);
-        double phiMin = Math.toDegrees(phi0 + phi*deltaPhi);
-        double phiMax = phiMin + Math.toDegrees(deltaPhi);
-
-        side /= Math.abs(side);
-
-        hv[0] = new double[] {side*etaMax, side*etaMin, side*etaMin, side*etaMax};
-        hv[1] = new double[] {     phiMax,      phiMax,      phiMin,      phiMin};
-
-        return new ACoord(hv);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AGeneralDetectors.java b/graphics/AtlantisJava/src/atlantis/geometry/AGeneralDetectors.java
deleted file mode 100755
index bb939996da50..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AGeneralDetectors.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.parameters.APar;
-import java.util.*;
-
-/**
- * Used to store all detectors which are not part of the muon system
- * these may be of different types.
- */
-
-public final class AGeneralDetectors extends ADetectors {
-
-  public AGeneralDetectors(List detectors) {
-   super(filterGeneralDetectors(detectors));
-  }
-
-  private static ADetector[] filterGeneralDetectors(List detectors) {
-
-    List tempDetectors=new ArrayList(detectors.size());
-    Iterator it=detectors.iterator();
-
-    while(it.hasNext()) {
-      Object o=it.next();
-      if((o instanceof ADetector)&&!(o instanceof ABoxDetector)&&!(o instanceof ATrapezoidDetector)) tempDetectors.add(o);
-    }
-    return (ADetector[])tempDetectors.toArray(new ADetector[tempDetectors.size()]);
-  }
-
-  private void makeDrawListYX() {
-    int mode=parameterStore.get("YX", "Mode").getI();
-    if(mode==0) {
-      int num=0;
-      for(int i=0; i<numData; ++i)
-        if(det[i].getName().indexOf("FCAL")<0)
-          listdl[num++]=i;
-      numDraw=num;
-    } 
-    else if(mode>8) 
-    {
-      int num=0;
-      for(int i=0; i<numData; ++i)
-        if((mode==9 && det[i].getName().equals("FCAL EM"))
-            ||(mode==10 && det[i].getName().equals("FCAL HAD 1"))
-            ||(mode==11 && det[i].getName().equals("FCAL HAD 2"))
-            ||(mode==12 && (det[i].getName().equals("LAr Endcap Presampler"))||det[i].getName().equals("LAr_EC_Presampler"))
-            ||(mode>=13 && mode<= 15 && (det[i].getName().equals("LAr Outer Endcap") || det[i].getName().equals("LAr Inner Endcap")))
-            ||(mode>=16 && mode<= 19 && det[i].getName().equals("HEC"))
-            ||(parameterStore.get("YX", "DrawFCAL").getStatus() && mode==17 && det[i].getName().equals("FCAL EM"))
-            ||(parameterStore.get("YX", "DrawFCAL").getStatus() && mode==18 && det[i].getName().equals("FCAL HAD 1"))
-            ||(parameterStore.get("YX", "DrawFCAL").getStatus() && mode==19 && det[i].getName().equals("FCAL HAD 2"))
-            ||(mode==20 && (det[i].getName().indexOf("LAr")>=0 || det[i].getName().indexOf("Endcap")>=0 || det[i].getName().indexOf("EC")>=0))
-            ||(mode==21 && det[i].getName().equals("HEC"))
-            ||(mode==22)&& det[i].getName().equals("Minimum Bias Trigger Scintillators"))
-          listdl[num++]=i;
-      numDraw=num;
-    } else
-      numDraw=0;
-  }
-
-  protected void makeDrawList(String projection) {
-    if (projection.equals("YX") || projection.equals("FR"))
-      makeDrawListYX();
-    else {
-      if(parameterStore.get(projection, "Mode").getI()==0)
-        constructDefaultDrawList();
-      else
-        numDraw=0;
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/AGeometryFromXMLReader.java b/graphics/AtlantisJava/src/atlantis/geometry/AGeometryFromXMLReader.java
deleted file mode 100755
index 8b7eb48bf489..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/AGeometryFromXMLReader.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package atlantis.geometry;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.ArrayList;
-
-import atlantis.output.AExceptionHandler;
-import atlantis.utils.xml.AXMLErrorHandler;
-import atlantis.utils.AUtilities;
-import org.xml.sax.helpers.*;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.xml.sax.Attributes;
-
-
-class AGeometryFromXMLReader extends DefaultHandler {
-
-  private static final boolean VALIDATION=false;
-  private SAXParser parser;
-
-  private static List<ADetector> detectors;
-
-  public AGeometryFromXMLReader() {
-    try {
-      SAXParserFactory factory=SAXParserFactory.newInstance();
-
-      factory.setValidating(true);
-      factory.setNamespaceAware(true);
-      parser=factory.newSAXParser();
-      if(VALIDATION)
-        parser.getXMLReader().setErrorHandler(new AXMLErrorHandler());
-    } catch(Exception e) {
-      AExceptionHandler.processException("Cannot create AGeometryFromXMLReader", e);
-    }
-  }
-
-  protected List<ADetector> readDetectorGeometryFromXML(String fileName) 
-  {
-	  detectors = new ArrayList<ADetector>(2500);
-	  try
-	  {
-		  InputStream isGeom = AUtilities.getFileAsStream(fileName);
-		  parser.parse(isGeom, this);
-	  }
-	  catch(Exception e)
-	  {
-		  String msg = "Error when reading geometry file:\n" + e.getMessage();
-		  AExceptionHandler.processException(msg, e);
-	  }
-
-	  return detectors;
-  }
-
-  static private double calculatePhi(String name, double phi0, int phiIndex) {
-      String technology = name.substring(0, 3);
-      if (technology.equals("TGC")) {
-          if (name.charAt(6) == 'E' && name.charAt(5) != '4')
-              return Math.toRadians(phi0) + (phiIndex - 1) * Math.PI / 24.;
-          else
-              return Math.toRadians(phi0) + (phiIndex - 1) * Math.PI / 12.;
-      } else {
-          return Math.toRadians(phi0) + (phiIndex - 1) * Math.PI / 4.;
-      }
-  }
-
-  // ContentHandler Implementation
-
-  public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
-    if(localName.equals("ABox")||localName.equals("ATBx")) {
-      String name=atts.getValue("n");
-      double zi=Double.parseDouble(atts.getValue("zi"));
-      double zo=Double.parseDouble(atts.getValue("zo"));
-      double ri=Double.parseDouble(atts.getValue("ri"));
-      double ro=Double.parseDouble(atts.getValue("ro"));
-      double w=Double.parseDouble(atts.getValue("w"));
-      double dPhi=Double.parseDouble(atts.getValue("dphi"));
-      double rpci=Double.parseDouble(atts.getValue("RPCi"));
-      double rpco=Double.parseDouble(atts.getValue("RPCo"));
-      double s=Double.parseDouble(atts.getValue("sh"));
-      int stationEta=Integer.parseInt(atts.getValue("eta"));
-      String[] phis=atts.getValue("phi").split(" ");
-
-      if(localName.equals("ABox")) {
-        for(int i=0; i<phis.length; ++i)
-          for(int zSide=-1; zSide<=1; zSide+=2) {
-            int stationPhi = Integer.parseInt(phis[i]);
-            double phi = calculatePhi(name, dPhi, stationPhi);
-            detectors.add(new ABoxDetector(name, zSide*zi, zSide*zo, ri+rpci, ro-rpco, phi, s, w,
-                                           zSide*stationEta, stationPhi));
-            if(rpci>0.)
-              detectors.add(new ABoxDetector("RPC"+name.substring(3)+"_I", zSide*zi, zSide*zo, ri,
-                  ri+rpci, phi, s, w, zSide*stationEta, stationPhi));
-            if(rpco>0.)
-              detectors.add(new ABoxDetector("RPC"+name.substring(3)+"_O", zSide*zi, zSide*zo,
-                  ro-rpco, ro, phi, s, w, zSide*stationEta, stationPhi));
-          }
-      } else if(localName.equals("ATBx")) {
-        double zis=Double.parseDouble(atts.getValue("zis"));
-        double zos=Double.parseDouble(atts.getValue("zos"));
-        double ws=Double.parseDouble(atts.getValue("ws"));
-        double or=Double.parseDouble(atts.getValue("or"));
-        for(int i=0; i<phis.length; ++i)
-          for(int zSide=-1; zSide<=1; zSide+=2) {
-            int stationPhi = Integer.parseInt(phis[i]);
-            double phi = calculatePhi(name, dPhi, stationPhi);
-            detectors.add(new ATBxDetector(name, zSide*zi, zSide*zo, ri+rpci, ro-rpco, phi, s, w,
-                zSide*zis, zSide*zos, ws, or, zSide*stationEta, stationPhi));
-            if(rpci>0.)
-              detectors.add(new ATBxDetector("RPC"+name.substring(3)+"_I", zSide*zi, zSide*zo, ri,
-                  ri+rpci, phi, s, w, zSide*zis, zSide*zos, ws, or, zSide*stationEta, stationPhi));
-            if(rpco>0.)
-              detectors.add(new ATBxDetector("RPC"+name.substring(3)+"_O", zSide*zi, zSide*zo,
-                  ro-rpco, ro, phi, s, w, zSide*zis, zSide*zos, ws, or, zSide*stationEta, stationPhi));
-          }
-      }
-
-    } else if(localName.equals("ATrd")) {
-      String name=atts.getValue("n");
-      double zi=Double.parseDouble(atts.getValue("zi"));
-      double zo=Double.parseDouble(atts.getValue("zo"));
-      double ri=Double.parseDouble(atts.getValue("ri"));
-      double ro=Double.parseDouble(atts.getValue("ro"));
-
-      double wi=Double.parseDouble(atts.getValue("wi"));
-      double wo=Double.parseDouble(atts.getValue("wo"));
-      double dPhi=Double.parseDouble(atts.getValue("dphi"));
-      double alpha=Double.parseDouble(atts.getValue("a"));
-      int stationEta=Integer.parseInt(atts.getValue("eta"));
-      String[] phis=atts.getValue("phi").split(" ");
-
-      for(int i=0; i<phis.length; ++i) {
-          for(int zSide = -1; zSide <= 1; zSide += 2) {
-              int stationPhi = Integer.parseInt(phis[i]);
-              double phi = calculatePhi(name, dPhi, stationPhi);
-              detectors.add(new ATrapezoidDetector(name, zSide*zi, zSide*zo, ri, ro, phi, wi, wo,
-                  alpha, zSide*stationEta, stationPhi));
-          }
-      }
-    } else if(localName.equals("ABarrelCalorimeter")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int sampling = Integer.parseInt(atts.getValue("sampling"));
-      int region = Integer.parseInt(atts.getValue("region"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      double eta0 = Double.parseDouble(atts.getValue("eta0"));
-      double deta = Double.parseDouble(atts.getValue("deta"));
-      int neta = Integer.parseInt(atts.getValue("neta"));
-      int meta = Integer.parseInt(atts.getValue("meta"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      detectors.add(new ABarrelCalorimeterDetector(name, color, sampling, region, rMin, rMax,
-                                                   zMin, zMax, eta0, deta, neta, meta, phi0, nphi));
-    } else if(localName.equals("AEndcapCalorimeter")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int sampling = Integer.parseInt(atts.getValue("sampling"));
-      int region = Integer.parseInt(atts.getValue("region"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      double eta0 = Double.parseDouble(atts.getValue("eta0"));
-      double deta = Double.parseDouble(atts.getValue("deta"));
-      int neta = Integer.parseInt(atts.getValue("neta"));
-      int meta = Integer.parseInt(atts.getValue("meta"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      detectors.add(new AEndcapCalorimeterDetector(name, color, sampling, region, rMin, rMax,
-                                                   zMin, zMax, eta0, deta, neta, meta, phi0, nphi));
-    } else if(localName.equals("AEndcapCryostat")) {
-        String name = atts.getValue("n");
-        String color = atts.getValue("c");
-        int sampling = Integer.parseInt(atts.getValue("sampling"));
-        int region = Integer.parseInt(atts.getValue("region"));
-        double rMin = Double.parseDouble(atts.getValue("rMin"));
-        double rMax = Double.parseDouble(atts.getValue("rMax"));
-        double zMin = Double.parseDouble(atts.getValue("zMin"));
-        double zMax = Double.parseDouble(atts.getValue("zMax"));
-        int neta = Integer.parseInt(atts.getValue("neta"));
-        int nphi = Integer.parseInt(atts.getValue("nphi"));
-        detectors.add(new AEndcapCryostatDetector(name, color, sampling, region, rMin, rMax, zMin,
-                                                   zMax, neta, nphi));
-    } else if(localName.equals("AGapCalorimeter")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int sampling = Integer.parseInt(atts.getValue("sampling"));
-      int region = Integer.parseInt(atts.getValue("region"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      int eta = Integer.parseInt(atts.getValue("eta"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      detectors.add(new AGapCalorimeterDetector(name, color, sampling, region, rMin, rMax,
-                                                zMin, zMax, eta, phi0, nphi));
-    } else if(localName.equals("ABarrelSiliconDetector")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int layer = Integer.parseInt(atts.getValue("layer"));
-      double length = Double.parseDouble(atts.getValue("length"));
-      double width = Double.parseDouble(atts.getValue("width"));
-      double thickness = Double.parseDouble(atts.getValue("thickness"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      int nz = Integer.parseInt(atts.getValue("nz"));
-      double tilt = Double.parseDouble(atts.getValue("tilt"));
-      double r0 = Double.parseDouble(atts.getValue("r0"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      detectors.add(new ABarrelSiliconDetector(name, color, layer, length, width, thickness, nz,
-                                               nphi, tilt, r0, phi0, zMin, zMax));
-    } else if(localName.equals("AEndcapSiliconDetector")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int layer = Integer.parseInt(atts.getValue("layer"));
-      double length = Double.parseDouble(atts.getValue("length"));
-      double width = Double.parseDouble(atts.getValue("width"));
-      double thickness = Double.parseDouble(atts.getValue("thickness"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      int nz = Integer.parseInt(atts.getValue("nz"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      detectors.add(new AEndcapSiliconDetector(name, color, layer, length, width, thickness, nz,
-                                               nphi, rMin, rMax, phi0, zMin, zMax));
-    } else if(localName.equals("ABarrelTRTDetector")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int layer = Integer.parseInt(atts.getValue("layer"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double phiIn = Double.parseDouble(atts.getValue("phiIn"));
-      double phiOut = Double.parseDouble(atts.getValue("phiOut"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      detectors.add(new ABarrelTRTDetector(name, color, layer, nphi, rMin, rMax, phiIn, phiOut, zMin, zMax));
-    } else if(localName.equals("AEndcapTRTDetector")) {
-      String name = atts.getValue("n");
-      String color = atts.getValue("c");
-      int layer = Integer.parseInt(atts.getValue("layer"));
-      int nphi = Integer.parseInt(atts.getValue("nphi"));
-      double rMin = Double.parseDouble(atts.getValue("rMin"));
-      double rMax = Double.parseDouble(atts.getValue("rMax"));
-      double phi0 = Double.parseDouble(atts.getValue("phi0"));
-      double zMin = Double.parseDouble(atts.getValue("zMin"));
-      double zMax = Double.parseDouble(atts.getValue("zMax"));
-      detectors.add(new AEndcapTRTDetector(name, color, layer, nphi, rMin, rMax, phi0, zMin, zMax));
-    } else if(localName.equals("ADisc")) {
-      String name=atts.getValue("n");
-      String projection=atts.getValue("p");
-      String color=atts.getValue("c");
-      double rInner=Double.parseDouble(atts.getValue("rIn"));
-      double rOuter=Double.parseDouble(atts.getValue("rOut"));
-      int nInner=Integer.parseInt(atts.getValue("nIn"));
-      int nOuter=Integer.parseInt(atts.getValue("nOut"));
-
-      detectors.add(new ADiscDetector(name, projection, color, rInner, rOuter, nInner, nOuter));
-    } else if(localName.equals("ARectangle")) {
-      String name=atts.getValue("n");
-      String projection=atts.getValue("p");
-      String color=atts.getValue("c");
-      double xMin=Double.parseDouble(atts.getValue("xMin"));
-      double xMax=Double.parseDouble(atts.getValue("xMax"));
-      double yMin=Double.parseDouble(atts.getValue("yMin"));
-      double yMax=Double.parseDouble(atts.getValue("yMax"));
-      boolean xReflect=atts.getValue("xR").equals("YES");
-      boolean yReflect=atts.getValue("yR").equals("YES");
-
-      detectors.add(new ARectangleDetector(name, projection, color, xMin, xMax, yMin, yMax));
-      if(xReflect) detectors.add(new ARectangleDetector(name, projection, color, -xMin, -xMax, yMin,
-            yMax));
-      if(yReflect) detectors.add(new ARectangleDetector(name, projection, color, xMin, xMax, -yMin,
-            -yMax));
-      if(xReflect&&yReflect) detectors.add(new ARectangleDetector(name, projection, color, -xMin,
-            -xMax, -yMin, -yMax));
-    }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ARectangleDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ARectangleDetector.java
deleted file mode 100755
index 3af8f2f9b901..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ARectangleDetector.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.utils.AMath;
-
-public class ARectangleDetector extends ADetector
-{
-    double xMin;
-    double xMax;
-    double yMin;
-    double yMax;
-
-    ARectangleDetector(String name, String projection, String color, double xMin, double xMax, double yMin, double yMax)
-    {
-        super(name, projection, color);
-        this.xMin = xMin;
-        this.xMax = xMax;
-        this.yMin = yMin;
-        this.yMax = yMax;
-    }
-
-    protected ACoord getRZUser()
-    {
-        return getUser("RZ");
-    }
-
-    protected ACoord getFZUser()
-    {
-        return getUser("FZ");
-    }
-
-    protected ACoord getXZUser()
-    {
-        return getUser("XZ");
-    }
-
-    protected ACoord getYZUser()
-    {
-        return getUser("YZ");
-    }
-
-    protected ACoord getUser(String proj)
-    {
-        if (!projection.equals(proj))
-            return ACoord.NO_DATA;
-        return new ACoord(AMath.xBox((xMin + xMax) / 2., (xMax - xMin) / 2.), AMath.yBox((yMin + yMax) / 2., (yMax - yMin) / 2.));
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ATBxDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ATBxDetector.java
deleted file mode 100755
index e4c3dc8204e5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ATBxDetector.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package atlantis.geometry;
-
-import atlantis.graphics.ACoord;
-import atlantis.utils.AMath;
-
-/**
- * Special t shape Box used for MDT chambers near the feet.
- * These are only different in th FZ projection
- */
-
-public class ATBxDetector extends ABoxDetector {
-
-  double zis;
-  double zos;
-  double ws;
-  double or;
-
-  public ATBxDetector(String name, double zMin, double zMax, double rMin,
-      double rMax, double phi, double excl, double size, double zis, double zos,
-      double ws, double or, int etaIndex, int phiIndex) {
-    super(name, zMin, zMax, rMin, rMax, phi, excl, size, etaIndex, phiIndex);
-    this.zis=zis;
-    this.zos=zos;
-    this.ws=ws;
-    this.or=or;
-  }
-
-  protected ACoord getFZUser() {
-    double[][] hv=new double[2][8];
-    double cosPhi=Math.cos(phi);
-    double sinPhi=Math.sin(phi);
-    double d=size/2.;
-    double r=rMin;
-    double x=r*cosPhi-excl*sinPhi;
-    double y=r*sinPhi+excl*cosPhi;
-    double dsinPhi=d*sinPhi;
-    double dcosPhi=d*cosPhi;
-    double phi1=Math.toDegrees(Math.atan2(y-dcosPhi, x+dsinPhi));
-    double phi2=Math.toDegrees(Math.atan2(y+dcosPhi, x-dsinPhi));
-
-    if(phi1<0.) phi1+=360.;
-    if(phi2<0.) phi2+=360.;
-    if(phi1-phi2>180.)  phi1-=360.;
-    if(phi2-phi1>180.)  phi2-=360.;
-    double phiLower=Math.min(phi1, phi2);
-    double phiUpper=Math.max(phi1, phi2);
-    double phiMid=phiLower+ws/size*(phiUpper-phiLower);
-    hv[0][0]=zMin;
-    hv[0][1]=zMin;
-    hv[0][2]=zis;
-    hv[0][3]=zis;
-    hv[0][4]=zos;
-    hv[0][5]=zos;
-    hv[0][6]=zMax;
-    hv[0][7]=zMax;
-    if(or>90.) {
-      phiMid=phiLower+ws/size*(phiUpper-phiLower);
-      hv[1][0]=phiUpper;
-      hv[1][1]=phiMid;
-      hv[1][2]=phiMid;
-      hv[1][3]=phiLower;
-      hv[1][4]=phiLower;
-      hv[1][5]=phiMid;
-      hv[1][6]=phiMid;
-      hv[1][7]=phiUpper;
-    } else {
-      phiMid=phiUpper-ws/size*(phiUpper-phiLower);
-      hv[1][0]=phiLower;
-      hv[1][1]=phiMid;
-      hv[1][2]=phiMid;
-      hv[1][3]=phiUpper;
-      hv[1][4]=phiUpper;
-      hv[1][5]=phiMid;
-      hv[1][6]=phiMid;
-      hv[1][7]=phiLower;
-    }
-
-    return new ACoord(hv);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetector.java b/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetector.java
deleted file mode 100755
index 7850795a05c0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetector.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package atlantis.geometry;
-
-
-import atlantis.utils.AMath;
-import atlantis.parameters.*;
-import atlantis.graphics.ACoord;
-
-/**
- * In ATLAS Trapezoids are TGC and MDT in the endcap.
- */
-
-public class ATrapezoidDetector extends ADetector {
-
-  double zMin;
-  double zMax;
-  double rMin;
-  double rMax;
-  double phi;
-  double sizeS;
-  double sizeL;
-  double alpha;
-  int stationEta;
-  int stationPhi;
-  int sector;
-
-  public ATrapezoidDetector(String name, double zMin, double zMax, double rMin,
-                     double rMax, double phi, double sizeS, double sizeL,
-                     double alpha, int stationEta, int stationPhi) {
-    super(name, "  ", name.substring(0, 3));
-    this.zMin = zMin;
-    this.zMax = zMax;
-    this.rMin = rMin;
-    this.rMax = rMax;
-    this.phi = phi;
-    this.sizeS = sizeS;
-    this.sizeL = sizeL;
-    this.alpha = alpha;
-    this.stationEta = stationEta;
-    this.stationPhi = stationPhi;
-    this.sector = ( (int) ( (phi + Math.PI / 16) / (Math.PI / 8))) % 16;
-  }
-
-  protected boolean equalsYX(ADetector o) {
-    if (o instanceof ATrapezoidDetector) {
-      ATrapezoidDetector that = (ATrapezoidDetector) o;
-      return this.rMin == that.rMin &&
-          this.rMax == that.rMax &&
-          this.phi == that.phi &&
-          this.sizeS == that.sizeS &&
-          this.sizeL == that.sizeL;
-    }    else
-      return false;
-  }
-
-  protected boolean equalsRZ(ADetector o) {
-    if (o instanceof ATrapezoidDetector) {
-      ATrapezoidDetector that = (ATrapezoidDetector) o;
-      return this.rMin == that.rMin &&
-          this.rMax == that.rMax &&
-          this.zMin == that.zMin &&
-          this.zMax == that.zMax &&
-          this.alpha == that.alpha;
-   }
-    else
-      return false;
-  }
-
-  protected ACoord getRZUser() {
-    double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-    double phiDiff = Math.abs(phi - phiMid);
-    double sign = -1.;
-    if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.)
-      sign = +1.;
-    return getXZRZUser(sign);
-  }
-
-  protected ACoord getXZUser() {
-    AParameter p=parameterStore.get("XZ", "Phi");
-
-    // display muon data when phi is in the middle of a sector
-    if(p.getD() % 22.5 < 1e-2) {
-      int sect=(int)Math.round((p.getD() % 360.) / 22.5);
-      if (sector == sect) {
-        return getXZRZUser(1.);
-      }
-      else if (sector == sect - 8 || sector == sect + 8) {
-        return getXZRZUser( -1.);
-      }
-    }
-    return ACoord.NO_DATA;
-  }
-
-  protected ACoord getXZRZUser(double sign) {
-    if (alpha == 0.) {
-      return new ACoord(
-          AMath.xBox( (zMin + zMax) / 2., (zMax - zMin) / 2.),
-          AMath.yBox(sign * (rMin + rMax) / 2., sign * (rMax - rMin) / 2.));
-    }
-    else {
-      double[][] hv = new double[2][];
-      double zMid = (zMin + zMax) / 2.;
-      double rMid = (rMin + rMax) / 2.;
-      double dRho = (rMax - rMin) / 2;
-      double dZ = (zMax - zMin) / 2;
-      double sinAlpha = Math.sin(Math.toRadians(alpha));
-      double cosAlpha = Math.cos(Math.toRadians(alpha));
-
-      if (zMid * rMid > 0.)
-        sinAlpha *= -1.;
-
-      hv[0] = new double[] {
-          zMid - sinAlpha * dRho - cosAlpha * dZ,
-          zMid - sinAlpha * dRho + cosAlpha * dZ,
-          zMid + sinAlpha * dRho + cosAlpha * dZ,
-          zMid + sinAlpha * dRho - cosAlpha * dZ};
-      hv[1] = new double[] {
-          sign * (rMid + cosAlpha * dRho - sinAlpha * dZ),
-          sign * (rMid + cosAlpha * dRho + sinAlpha * dZ),
-          sign * (rMid - cosAlpha * dRho + sinAlpha * dZ),
-          sign * (rMid - cosAlpha * dRho - sinAlpha * dZ)};
-      return new ACoord(hv);
-    }
-  }
-
-  protected ACoord getFZUser() {
-    double deltaPhi = Math.max(Math.atan2(sizeL / 2., rMax),
-                               Math.atan2(sizeS / 2., rMin));
-    
-    if (alpha == 0.) {
-      return new ACoord(
-          AMath.xBox( (zMin + zMax) / 2., (zMax - zMin) / 2.),
-          AMath.yBox( Math.toDegrees(phi), Math.toDegrees(deltaPhi) ));
-    }
-    else {
-      double[][] hv = new double[2][];
-      double zMid = (zMin + zMax) / 2.;
-      double rMid = (rMin + rMax) / 2.;
-      double dRho = (rMax - rMin) / 2;
-      double dZ = (zMax - zMin) / 2;
-      double sinAlpha = Math.sin(Math.toRadians(alpha));
-      double cosAlpha = Math.cos(Math.toRadians(alpha));
-
-      if (zMid * rMid > 0.)
-        sinAlpha *= -1.;
-
-      hv[0] = new double[] {
-          zMid - sinAlpha * dRho - cosAlpha * dZ,
-          zMid - sinAlpha * dRho - cosAlpha * dZ,
-          zMid + sinAlpha * dRho + cosAlpha * dZ,
-          zMid + sinAlpha * dRho + cosAlpha * dZ};
-      hv[1] = new double[] {
-          Math.toDegrees(phi - deltaPhi),
-          Math.toDegrees(phi + deltaPhi),
-          Math.toDegrees(phi + deltaPhi),
-          Math.toDegrees(phi - deltaPhi)};
-      return new ACoord(hv);
-    }
-  }
-
-  protected ACoord getYXUser() {
-    return getYXUser(0);
-  }
-
-  protected ACoord getFRUser() {
-    return convertYXToFR(getYXUser(1));
-  }
-
-  private ACoord getYXUser(int flag) {
-    int[] split= {12, 1, 12, 1};
-    int numPoints=4;
-    boolean splitIt=parameterStore.get("YX", "FishEye").getStatus()||parameterStore.get("YX", "Clock").getStatus()
-        ||flag==1;
-
-    if(splitIt)
-      numPoints=26;
-    double[] temp=new double[4];
-    double[][] hv=new double[2][numPoints];
-      double cosPhi=Math.cos(phi);
-      double sinPhi=Math.sin(phi);
-      double d=sizeS/2.;
-      double r=rMin;
-      double x=r*cosPhi;
-      double y=r*sinPhi;
-      double dx=d*sinPhi;
-      double dy=d*cosPhi;
-
-      hv[0][0]=x+dx;
-      hv[1][0]=y-dy;
-      hv[0][1]=x-dx;
-      hv[1][1]=y+dy;
-      r=rMax;
-      x=r*cosPhi;
-      y=r*sinPhi;
-      d=sizeL/2.;
-      dx=d*sinPhi;
-      dy=d*cosPhi;
-
-      hv[0][3]=x+dx;
-      hv[1][3]=y-dy;
-      hv[0][2]=x-dx;
-      hv[1][2]=y+dy;
-      if(splitIt)
-        for(int j=0; j<2; ++j) {
-          for(int k=0; k<4; ++k)
-            temp[k]=hv[j][k];
-          AMath.splitArrayIntoPieces(temp, hv[j], split);
-        }
-    return new ACoord(hv);
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetectors.java b/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetectors.java
deleted file mode 100755
index 943c34722fa6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/ATrapezoidDetectors.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package atlantis.geometry;
-
-// not quite correct for CSC (alpha!=0.) in YX and FR
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import java.util.*;
-
-/**
- * see comments in ABoxDetectors
- */
-
-public final class ATrapezoidDetectors extends ADetectors {
-
-  private int numRZTypes;
-  private int[] typeRZ;
-  private int numYXTypes;
-  private int[] typeYX;
-
-  private ATrapezoidDetector[] trapezoid;
-
-  public ATrapezoidDetectors(List detectors) {
-   super(filterTrapezoidDetectors(detectors));
-   trapezoid= new ATrapezoidDetector[det.length];
-   for(int i=0;i<trapezoid.length;++i)
-     trapezoid[i]=(ATrapezoidDetector)det[i];
-
-
-    typeYX=new int[numData];
-    for(int i=0; i<numData; ++i)
-      typeYX[i]=-1;
-
-    numYXTypes=0;
-    for(int i=0; i<numData; ++i)
-      if(typeYX[i]==-1) {
-        typeYX[i]=numYXTypes;
-        for(int j=i+1; j<numData; ++j)
-          if(typeYX[j]==-1&&det[i].equalsYX(det[j]))
-            typeYX[j]=numYXTypes;
-        numYXTypes++;
-      }
-
-    typeRZ=new int[numData];
-    for(int i=0; i<numData; ++i)
-      typeRZ[i]=-1;
-
-    numRZTypes=0;
-    for(int i=0; i<numData; ++i)
-      if(typeRZ[i]==-1) {
-        typeRZ[i]=numRZTypes;
-        for(int j=i+1; j<numData; ++j)
-          if(typeRZ[j]==-1&&det[i].equalsRZ(det[j]))
-            typeRZ[j]=numRZTypes;
-        numRZTypes++;
-      }
-  }
-
-  private static ADetector[] filterTrapezoidDetectors(List detectors) {
-
-    List tempDetectors=new ArrayList(detectors.size());
-    Iterator it=detectors.iterator();
-
-    while(it.hasNext()) {
-      Object o=it.next();
-      if(o instanceof ATrapezoidDetector) tempDetectors.add(o);
-    }
-    return (ADetector[])tempDetectors.toArray(new ADetector[tempDetectors.size()]);
-  }
-
-  private void makeDrawListYX() {
-    int mode=parameterStore.get("YX", "Mode").getI();
-
-    if(mode==0)
-      numDraw=0;
-    else {
-      int num=0;
-      for(int i=0; i<numData; ++i) {
-        double z=trapezoid[i].zMin;
-        String name=det[i].getName().substring(4, 6);
-        if(z>0.)
-          if((mode==1&&name.equals("T4"))||(mode==2&&name.equals("T1"))
-              ||(mode==3&&name.equals("T2"))||(mode==4&&name.equals("T3"))
-              ||(mode==5&&(name.equals("EI")||name.equals("CS")))||(mode==6&&name.equals("EE"))
-              ||(mode==7&&name.equals("EM"))||(mode==8&&name.equals("EO")))
-            listdl[num++]=i;
-        numDraw=num;
-      }
-    }
-  }
-
-  private void makeDrawListXZ() {
-    AParameter p=parameterStore.get("XZ", "Phi");
-
-    // display muon data when phi is in the middle of a sector
-    if(p.getD() % 22.5 < 1e-2) {
-      int sect=(int)Math.round((p.getD() % 360.) / 22.5);
-      int num=0;
-      for(int i=0; i<numData; i++) {
-        int s=trapezoid[i].sector;
-
-        if(s==sect||s==sect-8||s==sect+8) {
-          listdl[num++]=i;
-        }
-      }
-      numDraw=num;
-    } else {
-      numDraw=0;
-    }
-  }
-
-  private void makeDrawListRZ() {
-    // first make the draw list
-    // for each type find out if it has both +ve and negative sign
-    int[] pos=new int[typeRZ.length];
-    int[] neg=new int[typeRZ.length];
-    double phiMid=Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-
-    for(int i=0; i<numRZTypes; ++i)
-      neg[i]=pos[i]=-1;
-
-    for(int i=0; i<numData; ++i) {
-      double phiDiff=Math.abs(trapezoid[i].phi-phiMid);
-
-      if(phiDiff<Math.PI/2.||phiDiff>3*Math.PI/2.)
-        pos[typeRZ[i]]=i;
-      else
-        neg[typeRZ[i]]=i;
-    }
-
-    int num=0;
-    for(int i=0; i<numRZTypes; ++i) {
-      if(pos[i]!=-1)
-        listdl[num++]=pos[i];
-      if(neg[i]!=-1)
-        listdl[num++]=neg[i];
-    }
-    numDraw=num;
-  }
-
-  private void makeDrawListFZ() {
-    if(parameterStore.get("FZ", "Mode").getI()==0) {
-      constructDefaultDrawList();
-    } else {
-      numDraw=0;
-    }
-  }
-
-   protected void makeDrawList(String projection) {
-     if (projection.equals("YX") || projection.equals("FR") )
-       makeDrawListYX();
-     else if (projection.equals("FZ"))
-       makeDrawListFZ();
-     else if (projection.equals("RZ"))
-       makeDrawListRZ();
-     else if (projection.equals("XZ"))
-       makeDrawListXZ();
-     else
-       numDraw=0;
-  }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/geometry/package.html b/graphics/AtlantisJava/src/atlantis/geometry/package.html
deleted file mode 100644
index 8c66987e1f11..000000000000
--- a/graphics/AtlantisJava/src/atlantis/geometry/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Classes handling the detector description - ADetectorSystem
-contains the information used to draw detector components on the
-screen.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/globals/AGlobals.java b/graphics/AtlantisJava/src/atlantis/globals/AGlobals.java
deleted file mode 100644
index ce6bce2447e2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/globals/AGlobals.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * 
- */
-package atlantis.globals;
-
-import java.awt.Frame;
-import java.awt.GraphicsEnvironment;
-
-
-/**
- * Provides access to Atlantis global variables in a slightly less bad way than
- * using the main atlantis.Atlantis class.
- * 
- * @author waugh
- *
- */
-public class AGlobals {
-	/** The singleton instance. No point in lazy instantiation. */
-	private static AGlobals globals = new AGlobals();
-	
-	/** Get the singleton instance */
-	public static AGlobals instance() {return globals;}
-
-	/** Prevent instantiation except through singleton accessor. */
-	private AGlobals() {}
-	
-	/** Normally the directory that Atlantis was loaded from. */
-	private String homeDirectory;
-
-    /** The version of AtlantisJava from Svn. */
-	private String version;
-
-	/** Flag for displaying HLTAutoKey data. */
-	private boolean showHLTAutoKeys = false;
-
-	/** Flag for using simple output, used by Minerva. */
-	private int SIMPLE_OUTPUT = 0;
-	
-    /** This is the URL that is used as default for "Read events from URL". */
-    private String LIVE_POINT_1_EVENTS_URL;
-    
-    /** The path to the user's configuration file. */
-    private String userConfigFile;
-    
-    /** Whether to use OpenGL. */
-    private boolean useOpenGL;
-    
-    /** Whether we are in demo mode. */
-    private boolean demoMode;
-    
-    /** Component representing the GUI, if any. */
-    private Frame guiFrame;
-    
-	/**
-	 * Set the Atlantis home directory, normally the directory that Atlantis was loaded from.
-	 * 
-	 * @param homeDirectory the Atlantis home directory
-	 */
-	public void setHomeDirectory(String homeDirectory) {
-		this.homeDirectory = homeDirectory;
-	}
-
-	/**
-	 * Get the Atlantis home directory, normally the directory that Atlantis was loaded from.
-	 * 
-	 * @return the Atlantis home directory
-	 */
-	public String getHomeDirectory() {
-		return homeDirectory;
-	}
-
-	/**
-	 * Get AtlantisJava version.
-	 * @return the Svn version, set in Atlantis.main()
-	 */
-	public String getVersion() {
-		return version;
-	}
-
-	/**
-	 * Set AtlantisJava version, called from Atlantis.main().
-	 * @param version the version to set
-	 */
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	/**
-	 * Whether to show data with storeGateKey containing "HLTAutoKey".
-	 *
-	 * @return true to show, false to ignore
-	 */
-	public boolean showHLTAutoKeys() {
-		return showHLTAutoKeys;
-	}
-
-	/**
-	 * Whether to show data with storeGateKey containing "HLTAutoKey".
-	 *
-	 * @param showHLTAutoKeys true to show, false to ignore
-	 */
-	public void setHLTAutoKeys(boolean showHLTAutoKeys) {
-		this.showHLTAutoKeys = showHLTAutoKeys;
-	}
-
-	/**
-	 * @return the sIMPLE_OUTPUT
-	 */
-	public int getSimpleOutput() {
-		return SIMPLE_OUTPUT;
-	}
-
-	/**
-	 * @param sIMPLE_OUTPUT the sIMPLE_OUTPUT to set
-	 */
-	public void setSimpleOutput(int sIMPLE_OUTPUT) {
-		SIMPLE_OUTPUT = sIMPLE_OUTPUT;
-	}
-
-	/**
-	 * @return the URL for the Point 1 live events server
-	 */
-	public String getLivePoint1EventsURL() {
-		return LIVE_POINT_1_EVENTS_URL;
-	}
-
-	/**
-	 * @param livePoint1EventsURL the URL for the Point 1 live events server
-	 */
-	public void setLivePoint1EventsURL(String livePoint1EventsURL) {
-		LIVE_POINT_1_EVENTS_URL = livePoint1EventsURL;
-	}
-
-	/**
-	 * @param userConfigFilePath the path to the user's configuration file
-	 */
-	public void setUserConfigFile(String userConfigFilePath) {
-		this.userConfigFile = userConfigFilePath;
-	}
-	
-	/**
-	 * @return the path to the user's configuration file
-	 */
-	public String getUserConfigFile() {
-		return this.userConfigFile;
-	}
-
-	/**
-	 * @return true if we should be using OpenGL
-	 */
-	public boolean getUseOpenGL() {
-		return useOpenGL;
-	}
-
-	/**
-	 * @param useOpenGL true to use OpenGL, false otherwise
-	 */
-	public void setUseOpenGL(boolean useOpenGL) {
-		this.useOpenGL = useOpenGL;
-	}
-
-	/**
-	 * Check whether we are in headless mode
-	 * @return true if headless (no graphics available)
-	 */
-	public static boolean isAtlantisHeadless() {
-	    return GraphicsEnvironment.isHeadless();
-	}
-
-	/**
-	 * Whether the demo mode loop is running.
-	 * @return true if in demo mode
-	 */
-	public boolean isDemoMode() {
-		return demoMode;
-	}
-
-	/**
-	 * Signal whether the demo loop is running.
-	 * @param demoMode true when starting loop, false when stopping
-	 */
-	public void setDemoMode(boolean demoMode) {
-		this.demoMode = demoMode;
-	}
-
-	/**
-	 * For use as parent of dialogues, avoiding dependency on AGUI class itself.
-	 * @return the GUI frame
-	 */
-	public Frame getGuiFrame() {
-		return guiFrame;
-	}
-
-	/**
-	 * Set the GUI frame, called from AGUI when the instance is created.
-	 * @param guiFrame the GUI frame
-	 */
-	public void setGuiFrame(Frame guiFrame) {
-		this.guiFrame = guiFrame;
-	}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/globals/package.html b/graphics/AtlantisJava/src/atlantis/globals/package.html
deleted file mode 100644
index e763965d1afb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/globals/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Provides access to Atlantis global variables.</p>
-<p>This has been introduced as part of a process of breaking unwanted
-  dependencies between packages. This package can contain any required
-  global state so that other packages (atlantis.data etc.) do not need
-  to depend on the "atlantis" package that contains the main Atlantis
-  class, and which unavoidably depends on the rest of the
-  packages.</p>
-<p>With luck this will prove not to be necessary in the long term!</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AAbstractGraphics2D.java b/graphics/AtlantisJava/src/atlantis/graphics/AAbstractGraphics2D.java
deleted file mode 100755
index ddfeba3edb9c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AAbstractGraphics2D.java
+++ /dev/null
@@ -1,315 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.*;
-import java.awt.font.*;
-import java.awt.geom.*;
-import java.awt.image.*;
-import java.awt.image.renderable.*;
-
-/**
- * This graphics is used when nothing should really be drawn on the screen
- */
-
-public abstract class AAbstractGraphics2D extends Graphics2D {
-
-  public void transform(AffineTransform z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void fill(Shape z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void draw(Shape z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawImage(BufferedImage a, BufferedImageOp b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public boolean drawImage(Image a, AffineTransform b, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public void drawRenderedImage(RenderedImage a, AffineTransform z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawRenderableImage(RenderableImage a, AffineTransform z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawString(java.text.AttributedCharacterIterator a, float b, float z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawString(String a, int b, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawString(String a, float b, float z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawString(java.text.AttributedCharacterIterator a, int b, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawGlyphVector(GlyphVector a, float b, float z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public boolean hit(Rectangle a, Shape b, boolean z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public GraphicsConfiguration getDeviceConfiguration() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void setComposite(Composite z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setPaint(Paint z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setStroke(Stroke z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setRenderingHint(RenderingHints.Key a, Object z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public Object getRenderingHint(RenderingHints.Key z) {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void setRenderingHints(java.util.Map z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void addRenderingHints(java.util.Map z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public RenderingHints getRenderingHints() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void translate(double a, double z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void translate(int a, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void rotate(double a, double b, double z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void rotate(double z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void scale(double a, double z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void shear(double a, double z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setTransform(AffineTransform z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public AffineTransform getTransform() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public Paint getPaint() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public Composite getComposite() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void setBackground(Color z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public Color getBackground() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public Stroke getStroke() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void clip(Shape z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public FontRenderContext getFontRenderContext() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void setColor(Color z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public Graphics create() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, int f, int g, int h, int i, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, Color d, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, Color f, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, int f, int g, int h, int i, Color j, ImageObserver z) {
-    if(true) throw new RuntimeException();
-    return false;
-  }
-
-  public Color getColor() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void fillRect(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setPaintMode() {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setXORMode(Color z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public Font getFont() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void setFont(Font z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public FontMetrics getFontMetrics(Font z) {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public Rectangle getClipBounds() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void clipRect(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setClip(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void setClip(Shape z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public Shape getClip() {
-    if(true) throw new RuntimeException();
-    return null;
-  }
-
-  public void copyArea(int a, int b, int c, int d, int e, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  // public  void drawLine(int a,int b,int c,int z) { if (true) throw new RuntimeException(); }
-  public void clearRect(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawRoundRect(int a, int b, int c, int d, int e, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void fillRoundRect(int a, int b, int c, int d, int e, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawOval(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void fillOval(int a, int b, int c, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawArc(int a, int b, int c, int d, int e, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void fillArc(int a, int b, int c, int d, int e, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawPolyline(int[] a, int[] b, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void drawPolygon(int[] a, int[] b, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void fillPolygon(int[] a, int[] b, int z) {
-    if(true) throw new RuntimeException();
-  }
-
-  public void dispose() {
-    if(true) throw new RuntimeException();
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AClipper.java b/graphics/AtlantisJava/src/atlantis/graphics/AClipper.java
deleted file mode 100755
index c525102c7021..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AClipper.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package atlantis.graphics;
-
-import atlantis.utils.AClipPolygon;
-import atlantis.utils.APolygon;
-import java.awt.Rectangle;
-
-
-/**
- * Implement uniform treatment of Clipping for screen,
- * postscript and picking.
- */
-
-public class AClipper {
-  double[] upper;
-  double[] lower;
-  double[][] x;
-  boolean[][] below;
-  boolean[][] within;
-  boolean[][] above;
-  double hLower;
-  double hUpper;
-  double vLower;
-  double vUpper;
-
-  public static final int NONE_WITHIN=0;
-  public static final int MAYBE_WITHIN=1;
-  public static final int ALL_WITHIN=2;
-
-  public AClipper(double hLower, double hUpper, double vLower, double vUpper) {
-
-    x=new double[2][2];
-    upper=new double[2];
-    lower=new double[2];
-    below=new boolean[2][2];
-    within=new boolean[2][2];
-    above=new boolean[2][2];
-    upper[0]=hUpper;
-    upper[1]=vUpper;
-    lower[0]=hLower;
-    lower[1]=vLower;
-    this.hUpper=hUpper;
-    this.hLower=hLower;
-    this.vUpper=vUpper;
-    this.vLower=vLower;
-  }
-
-  public AClipper(Rectangle clipBounds) {
-    this(clipBounds.getX(), clipBounds.getX()+clipBounds.getWidth(), clipBounds.getY(),
-        clipBounds.getY()+clipBounds.getHeight());
-  }
-
-  public boolean isPointWithin(double h0, double v0) {
-    return hLower<=h0&&h0<=hUpper&&vLower<=v0&&v0<=vUpper;
-  }
-
-  public boolean isLineWithin(double h0, double v0, double h1, double v1) {
-    int roughCheck=fastWithin(h0, v0, h1, v1);
-
-    if(roughCheck==0) return false;
-    x[0][0]=h0;
-    x[1][0]=v0;
-    x[0][1]=h1;
-    x[1][1]=v1;
-    if(roughCheck==2) return true;
-
-    update(0);
-    update(1);
-
-    outer:
-    while(!lineFullyInside()) {
-      if(lineFullyOutside()) return false;
-
-      for(int i=0; i<2; i++)
-        for(int point=0; point<2; point++) {
-          if(!within[i][point]) {
-            if(below[i][point]) {
-              x[1-i][point]+=((x[1-i][1-point]-x[1-i][point])/(x[i][1-point]-x[i][point]))
-                  *(lower[i]-x[i][point]);
-              x[i][point]=lower[i];
-            } else if(above[i][point]) {
-              x[1-i][point]+=((x[1-i][1-point]-x[1-i][point])/(x[i][1-point]-x[i][point]))
-                  *(upper[i]-x[i][point]);
-              x[i][point]=upper[i];
-            }
-            update(point);
-            continue outer;
-          }
-        }
-    }
-    // don't allow non-zero length line to be given zero length
-    // by th clipper
-    if((x[0][0]==x[0][1])&&(x[1][0]==x[1][1]))
-      return false;
-    return true;
-  }
-
-  private void update(int p) {
-    for(int i=0; i<2; i++) {
-      below[i][p]=false;
-      within[i][p]=false;
-      above[i][p]=false;
-      if(x[i][p]<lower[i])
-        below[i][p]=true;
-      else if(x[i][p]>upper[i])
-        above[i][p]=true;
-      else
-        within[i][p]=true;
-    }
-  }
-
-  public boolean lineFullyInside() {
-    boolean inside=true;
-
-    for(int i=0; i<2; i++)
-      for(int j=0; j<2; j++)
-        inside=inside&&within[i][j];
-    return inside;
-  }
-
-  public boolean lineFullyOutside() {
-    boolean outside=false;
-
-    for(int i=0; i<2; i++) {
-      outside=outside||(below[i][0]&&below[i][1]);
-      outside=outside||(above[i][0]&&above[i][1]);
-    }
-    return outside;
-  }
-
-  public double[][] getHV() {
-    return x;
-  }
-
-  public double getH0() {
-    return x[0][0];
-  }
-
-  public double getV0() {
-    return x[1][0];
-  }
-
-  public double getH1() {
-    return x[0][1];
-  }
-
-  public double getV1() {
-    return x[1][1];
-  }
-
-  public int fastWithin(double h0, double v0, double h1, double v1) {
-    if(h0<hLower&&h1<hLower) return NONE_WITHIN;
-    if(h0>hUpper&&h1>hUpper) return NONE_WITHIN;
-    if(v0<vLower&&v1<vLower) return NONE_WITHIN;
-    if(v0>vUpper&&v1>vUpper) return NONE_WITHIN;
-    if(hLower<=h0&&h0<=hUpper&&hLower<=h1&&h1<=hUpper&&vLower<=v0&&v0<=vUpper&&vLower<=v1
-        &&v1<=vUpper) return ALL_WITHIN;
-    return MAYBE_WITHIN;
-  }
-
-  public int fastWithin(double[] h, double[] v, int numPoints) {
-    if(numPoints==0) return NONE_WITHIN;
-    boolean firstWithin=hLower<=h[0]&&h[0]<=hUpper&&vLower<=v[0]&&v[0]<=vUpper;
-
-    if(firstWithin) {
-      for(int i=1; i<numPoints; ++i)
-        if(!(hLower<=h[i]&&h[i]<=hUpper&&vLower<=v[i]&&v[i]<=vUpper)) return MAYBE_WITHIN;
-      return ALL_WITHIN;
-    } else {
-      if(h[0]<hLower) {
-        int num=1;
-
-        for(int i=1; i<numPoints; ++i)
-          if(h[i]<hLower)
-            num++;
-          else
-            break;
-        if(num==numPoints) return NONE_WITHIN;
-      }
-      if(h[0]>hUpper) {
-        int num=1;
-
-        for(int i=1; i<numPoints; ++i)
-          if(h[i]>hUpper)
-            num++;
-          else
-            break;
-        if(num==numPoints) return NONE_WITHIN;
-      }
-      if(v[0]<vLower) {
-        int num=1;
-
-        for(int i=1; i<numPoints; ++i)
-          if(v[i]<vLower)
-            num++;
-          else
-            break;
-        if(num==numPoints) return NONE_WITHIN;
-      }
-      if(v[0]>vUpper) {
-        int num=1;
-
-        for(int i=1; i<numPoints; ++i)
-          if(v[i]>vUpper)
-            num++;
-          else
-            break;
-        if(num==numPoints) return NONE_WITHIN;
-      }
-      return MAYBE_WITHIN;
-    }
-  }
-
-  public ACoord clipPolygon(double[] h, double[] v, int numPoints) {
-    double[] clipH=new double[] { lower[0], upper[0], upper[0], lower[0] };
-    double[] clipV=new double[] { lower[1], lower[1], upper[1], upper[1] };
-    AClipPolygon clipArea=new AClipPolygon(clipH, clipV);
-    APolygon badPolygon=new APolygon(h, v);
-
-    badPolygon.clip(clipArea);
-    h=badPolygon.getX();
-    v=badPolygon.getY();
-    return new ACoord(h, v);
-  }
-
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ACoord.java b/graphics/AtlantisJava/src/atlantis/graphics/ACoord.java
deleted file mode 100755
index 71aa21563792..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ACoord.java
+++ /dev/null
@@ -1,355 +0,0 @@
-package atlantis.graphics;
-
-import atlantis.parameters.APar;
-import atlantis.utils.*;
-
-/**
- * Used to store a collection of User or display 2D coordinates of hits or tracks
- * together with their indices in the corresponding AData
- * (used for picking, colors etc.). N.B. the storage model is different for
- * SYMBOLS/LINES(with two end points) than for POLYLINES/POLYGONS for
- * efficiency reasons. Transformations between user/display coordinaates are based
- * on ACoords.
- */
-public class ACoord {
-    
-  private static ALogger logger = ALogger.getLogger(ACoord.class);
-    
-  public double[][][] hv;
-  public int[] index;
-  protected int type=POLYGONS;
-  public ADrawable source;
-
-  final static public int SYMBOLS=1;
-  final static public int LINES=2;
-  final static public int POLYLINES=3;
-  final static public int POLYGONS=4;
-  final static public int DOTTED_POLYGONS=5;  // for drawing missing ET in V-Plot
-  final static public int SMOOTH_POLYLINES=6;
-  final static public int TRANSPARENT_POLYGONS=7;
-
-  final static public ACoord NO_DATA=new ACoord(new double[2][0][0], new int[0]);
-  final static public ACoord NO_POLYGONS=new ACoord(new double[2][0][0], new int[0]);
-  final static public ACoord NO_POLYLINES=new ACoord(new double[2][0][0], new int[0]);
-  final static public ACoord[] NO_HISTOGRAMS=new ACoord[0];
-
-  protected static APar parameterStore = APar.instance();
-  
-  public ACoord(double h, double v, int index) {
-    this(h, v);
-    this.index=new int[] {index};
-  }
-
-  public ACoord(double h, double v) {
-    this.hv=new double[2][1][1];
-    this.hv[0][0][0]=h;
-    this.hv[1][0][0]=v;
-    this.index=null;
-    this.type=SYMBOLS;
-  }
-
-  public ACoord(double[] h, double[] v) {
-    this.hv=new double[2][1][];
-    this.hv[0][0]=h;
-    this.hv[1][0]=v;
-    this.index=new int[] {0};
-  }
-
-  private ACoord(double[][] hv, int[] index) {
-    if(hv.length!=2) throw new IllegalArgumentException("hv.length="+hv.length);
-    this.hv = new double[2][1][0];
-    this.hv[0][0]=hv[0];
-    this.hv[1][0]=hv[1];
-    this.index=index;
-  }
-
-  private ACoord(double[][] hv, int[] index, ADrawable source) {
-    this(hv, index);
-    this.source=source;
-  }
-
-  public ACoord(double[][] hv) {
-      if(hv.length!=2) throw new IllegalArgumentException("hv.length="+hv.length);
-      this.hv = new double[2][1][];
-      this.hv[0][0]=hv[0];
-      this.hv[1][0]=hv[1];
-      this.index=null;
-  }
-
-  public ACoord(double[][][] hv, int[] index) {
-    if(hv.length!=2) throw new IllegalArgumentException("hv.length="+hv.length);
-    this.hv=hv;
-    this.index=index;
-  }
-
-  public ACoord(double[][][] hv, int[] index, ADrawable source) {
-    this(hv, index);
-    this.source=source;
-  }
-
-  public ACoord(double[][][] hv) {
-    if(hv.length!=2) throw new IllegalArgumentException("hv.length="+hv.length);
-    this.hv=hv;
-    this.index=null;
-  }
-
-  private ACoord(ACoord a) {
-    this.hv=new double[a.hv.length][][];
-    for(int i=0; i<a.hv.length; i++) {
-      this.hv[i]=new double[a.hv[i].length][];
-      for(int j=0; j<a.hv[i].length; j++) {
-        this.hv[i][j]=new double[a.hv[i][j].length];
-        for(int k=0; k<a.hv[i][j].length; k++)
-          this.hv[i][j][k]=a.hv[i][j][k];
-      }
-    }
-    this.index=new int[a.index.length];
-    for(int i=0; i<a.index.length; i++)
-      this.index[i]=a.index[i];
-    this.type=a.type;
-    this.source=a.source;
-  }
-
-  public ACoord(double[][] hv, int[] index, ADrawable source, int type) {
-    this(hv, index, source);
-    this.type=type;
-  }
-
-  public ACoord(double[][][] hv, int[] index, ADrawable source, int type) {
-    this(hv, index, source);
-    this.type=type;
-  }
-
-  public ACoord(double[] h, double[] v, int[] index, ADrawable source) {
-    if(h.length!=v.length)
-      throw new IllegalArgumentException("h.length "+h.length+" !=v.length "+v.length);
-    if(h.length!=index.length)
-      throw new IllegalArgumentException("h.length "+h.length+" !=index.length "+index.length);
-    this.hv=new double[2][1][];
-    this.hv[0][0]=h;
-    this.hv[1][0]=v;
-    this.index=index;
-    this.type=SYMBOLS;
-    this.source=source;
-  }
-
-  public void print() {
-    for(int j=0; j<hv[0].length; j++) {
-      logger.debug(" index = "+index[j]);
-      for(int i=0; i<2; i++) {
-        if(i==0)
-          logger.debug("h ");
-        else
-          logger.debug("v ");
-        for(int k=0; k<hv[0][j].length; k++)
-          logger.debug((float)hv[i][j][k]+"\t");
-      }
-    }
-  }
-
-  // careful this does not make an independent copy
-  public ACoord(ACoord a, ACoord b) {
-    this.hv=new double[2][a.hv[0].length+b.hv[0].length][];
-    this.index=new int[a.hv[0].length+b.hv[0].length];
-    this.type=a.type;
-    this.source=a.source;
-
-    for(int i=0; i<2; i++) {
-      int num=0;
-
-      for(int j=0; j<a.hv[i].length; j++) {
-        this.hv[i][num]=a.hv[i][j];
-        this.index[num]=a.index[j];
-        num++;
-      }
-      for(int j=0; j<b.hv[i].length; j++) {
-        this.hv[i][num]=b.hv[i][j];
-        this.index[num]=b.index[j];
-        num++;
-      }
-    }
-  }
-
-  public ACoord convertYXToFR() {
-    if(type==SYMBOLS||type==LINES) {
-      for(int j=0; j<hv[0][0].length; j++) {
-        double phiLast=0.;
-
-        for(int i=0; i<hv[0].length; i++) {
-          double xx=hv[0][i][j];
-          double yy=hv[1][i][j];
-          double rho=Math.sqrt(xx*xx+yy*yy);
-          double phi=Math.toDegrees(Math.atan2(yy, xx));
-
-          if(phi<0.)
-            phi+=360.;
-          if(i>0) {
-            if(phi-phiLast>180.) phi-=360.;
-            if(phi-phiLast<-180.) phi+=360.;
-          }
-          hv[0][i][j]=rho;
-          hv[1][i][j]=phi;
-          phiLast=phi;
-        }
-      }
-
-    } else {
-      for(int i=0; i<hv[0].length; i++) {
-        double phiLast=0.;
-
-        for(int j=0; j<hv[0][i].length; j++) {
-          double xx=hv[0][i][j];
-          double yy=hv[1][i][j];
-          double rho=Math.sqrt(xx*xx+yy*yy);
-          double phi=Math.toDegrees(Math.atan2(yy, xx));
-
-          if(phi<0.)
-            phi+=360.;
-          if(j>0) {
-            if(phi-phiLast>180.) phi-=360.;
-            if(phi-phiLast<-180.) phi+=360.;
-          }
-          hv[0][i][j]=rho;
-          hv[1][i][j]=phi;
-          phiLast=phi;
-        }
-      }
-    }
-    return this;
-  }
-
-  public ACoord includePhiWrapAround(String projectionName) {
-    // assumes phi is always the v coordinaate
-    int numFrames=parameterStore.get(projectionName, "FramesCount").getI();
-    int initialFrame=parameterStore.get(projectionName, "InitialFrame").getI();
-
-    if(type==SYMBOLS||type==LINES) {
-      int numPoints=hv[1].length;
-      int numInitialData=hv[1][0].length;
-
-      double[][][] hvtemp=new double[2][numPoints][numFrames*numInitialData];
-      int[] indextemp=new int[numFrames*numInitialData];
-
-      int num=0;
-
-      for(int f=initialFrame; f<initialFrame+numFrames; f++) {
-        for(int i=0; i<numInitialData; i++) {
-          if(index!=null) indextemp[num]=index[i];
-          for(int j=0; j<numPoints; ++j) {
-            hvtemp[0][j][num]=this.hv[0][j][i];
-            hvtemp[1][j][num]=this.hv[1][j][i]+f*360.;
-          }
-          num++;
-        }
-      }
-      hv=hvtemp;
-      if (index!=null) index=indextemp;
-    } else {
-      int numInitialData=hv[1].length;
-      double[][][] hvtemp=new double[2][numFrames*numInitialData][];
-      int[] indextemp=new int[numFrames*numInitialData];
-
-      int num=0;
-
-      for(int f=initialFrame; f<initialFrame+numFrames; f++) {
-        for(int i=0; i<numInitialData; i++) {
-          int numPoints=hv[1][i].length;
-
-          hvtemp[0][num]=new double[numPoints];
-          hvtemp[1][num]=new double[numPoints];
-          for(int j=0; j<numPoints; j++) {
-            hvtemp[0][num][j]=this.hv[0][i][j];
-            hvtemp[1][num][j]=this.hv[1][i][j]+f*360.;
-          }
-          if (index!=null) indextemp[num]=index[i];
-          num++;
-        }
-      }
-      hv=hvtemp;
-      if (index!=null) index=indextemp;
-    }
-    return this;
-  }
-
-  /**
-   *  used in ATLAS context for the TRT
-   *  Force data to be drawn as symbols if
-   *   forceSymbols=true
-   *  or
-   *   all lines are smaller than minSize
-   */
-  public ACoord toSymbols(boolean forceSymbols, int minSize) {
-    if(type==LINES) {
-      double dmax2=0.;
-
-      for(int i=0; i<hv[0][0].length; i++) {
-        double dh=(hv[0][0][i]-hv[0][1][i]);
-        double dv=(hv[1][0][i]-hv[1][1][i]);
-        double d=dh*dh+dv*dv;
-
-        if(d>dmax2) dmax2=d;
-      }
-      if(Math.sqrt(dmax2)<minSize||forceSymbols) {
-        type=SYMBOLS;
-        for(int i=0; i<hv[0][0].length; i++) {
-          hv[0][0][i]=(hv[0][0][i]+hv[0][1][i])/2.;
-          hv[1][0][i]=(hv[1][0][i]+hv[1][1][i])/2.;
-        }
-      }
-    } else if(type==POLYLINES||type==POLYGONS||type==TRANSPARENT_POLYGONS) {
-      double dmax2=0.;
-
-      for(int j=0; j<hv[0].length; j++) {
-        for(int i=0; i<hv[0][j].length; i++) {
-          double dh=(hv[0][j][0]-hv[0][j][i]);
-          double dv=(hv[1][j][0]-hv[1][j][i]);
-          double d=dh*dh+dv*dv;
-
-          if(d>dmax2) dmax2=d;
-        }
-      }
-
-      if(Math.sqrt(dmax2)<minSize||forceSymbols) {
-        type=SYMBOLS;
-        double[][][] hvnew=new double[2][1][hv[0].length];
-
-        for(int j=0; j<hv[0].length; j++) {
-          double h=0.;
-          double v=0.;
-
-          for(int i=0; i<hv[0][j].length; i++) {
-            h+=hv[0][j][i];
-            v+=hv[1][j][i];
-          }
-          h/=hv[0][j].length;
-          v/=hv[0][j].length;
-          hvnew[0][0][j]=h;
-          hvnew[1][0][j]=v;
-        }
-        hv=hvnew;
-      }
-    }
-    return this;
-  }
-
-  public ACoord mirrorH () {
-    ACoord coord = new ACoord(this);
-    for(int i=0; i<coord.hv[0].length; i++) {
-      for(int j=0; j<coord.hv[0][i].length; j++) {
-        coord.hv[0][i][j] *= -1;
-      }
-    }
-    return coord;
-  }
-  
-  public ACoord mirrorV () {
-    ACoord coord = new ACoord(this);
-    for(int i=0; i<coord.hv[1].length; i++) {
-      for(int j=0; j<coord.hv[1][i].length; j++) {
-        coord.hv[1][i][j] *= -1;
-      }
-    }
-    return coord;
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ACursorFactory.java b/graphics/AtlantisJava/src/atlantis/graphics/ACursorFactory.java
deleted file mode 100755
index 133abd8f8d49..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ACursorFactory.java
+++ /dev/null
@@ -1,227 +0,0 @@
-package atlantis.graphics;
-
-
-import java.awt.Toolkit;
-import java.awt.Dimension;
-import java.awt.Cursor;
-import java.awt.Point;
-import java.awt.Image;
-import java.awt.dnd.DragSource;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-
-/**
- * Singleton class factory for producing cursors. 
- * Due to difference in the default cursors provided by the different OSs,
- * all cursors are generated by Atlantis itself.
- */
-
-public class ACursorFactory {
-    
-    private static ALogger logger = ALogger.getLogger(ACursorFactory.class);
-    
-    /** singleton class, pointer to this instance */
-    private static ACursorFactory instance;
-    
-    /** Cursor size string, either "64x64" or "32x32" */
-    private String cursorSize;
-    
-    /** Cursor color string, either "bw" or "" */
-    private String bAndW="";
-    
-    /**
-     * @return true if if system supports custom cursors
-     */
-    public boolean getCustomCursors() { return customCursors; }
-    private final boolean customCursors;
-
-    /** 
-     * @return the default Cursor 
-     */
-    public Cursor getDefaultCursor() { return defaultCursor; }
-    private Cursor defaultCursor = null;
-   
-    /** Drag-and-drop valid cursor */
-    private Cursor dragValidCursor=null;
-    public Cursor getDragValidCursor() { return dragValidCursor; }
-    /** Drag-and-drop invalid cursor */
-    private Cursor dragInvalidCursor=null;
-    public Cursor getDragInvalidCursor() { return dragValidCursor; }
-    
-    /** Zoom cursor */
-    public Cursor getZoomCursor() { return zoomCursor; }
-    private Cursor zoomCursor=null;
-    /** Move cursor */
-    public Cursor getMoveCursor() { return moveCursor; }
-    private Cursor moveCursor=null;
-    /** Rotate cursor */
-    public Cursor getRotateCursor() { return rotateCursor; }
-    private Cursor rotateCursor=null;
-
-    /** Pick cursor */
-    public Cursor getPickCursor() { return pickCursor; }
-    private Cursor pickCursor=null;
-    /** Rectangular selection cursor */
-    public Cursor getRectSelectCursor() { return rectSelectCursor; }
-    private Cursor rectSelectCursor=null;
-
-    /** Syncro cursor */
-    public Cursor getSyncCursor() { return syncCursor; }
-    private Cursor syncCursor=null;
-    /** FishEye cursor */
-    public Cursor getFishEyeCursor() { return fishEyeCursor; }
-    private Cursor fishEyeCursor=null;
-    
-    /** FishEye symbol also needed as a FishEye on/off indicator */
-    public Image getFishEyeIndicator() { return fishEyeIndicator; }
-    private Image fishEyeIndicator=null;
-
-    /** ATLAS logo can be printed on canvas */
-    public Image getAtlasLogo() { return atlasLogo; }
-    private Image atlasLogo=null;
-
-    /**
-     * Public singleton instantiation accessor
-     * @return the singleton instance
-     */
-    public static ACursorFactory getInstance() {
-
-      //Check if we already have an instance
-      if (instance == null) instance = new ACursorFactory();
-
-      //Return the singleton instance
-      return instance;
-    }
-
-
-    /** Constructor */
-    private ACursorFactory(){
-              
-      logger.debug("Creating cursor and image factory ...");
-      String FILE_SEPAR = System.getProperty("file.separator");
-      String homeDirectory = AGlobals.instance().getHomeDirectory();
-      
-      //Provide images and indicators even in headless mode
-      //Fisheye
-      String path = homeDirectory + "img" + FILE_SEPAR +
-             "cursor_fisheye_"+bAndW+"32x32.gif";
-      fishEyeIndicator = AUtilities.getFileAsImageIcon(path).getImage();
-
-      //Atlas logo
-      path = homeDirectory + "img" + FILE_SEPAR +
-             "atlas_logo_big.png";
-      atlasLogo = AUtilities.getFileAsImageIcon(path).getImage();
-
-
-      //Don't create any cursors in headless mode
-      if (AGlobals.isAtlantisHeadless()){
-        //Custom cursors not supported on this platform
-        customCursors=false;
-        return;
-      }
-
-      //Check for best cursor size on this system - trying largest
-      Dimension bestCursorSize=Toolkit.getDefaultToolkit().getBestCursorSize(64,64);
-      
-      //Check if custom cursors are allowed
-      if (bestCursorSize.width > 0){
-          
-        customCursors=true;
-      
-        //We only support 32x32 and 64x64 cursors. Check which one we are closer to
-        if (bestCursorSize.width < 48) cursorSize="32x32";
-        else cursorSize="64x64";
-        
-        //Check if we have enough colours for greyscale cursors
-        if (Toolkit.getDefaultToolkit().getMaximumCursorColors() < 255)
-          bAndW="bw_";
-        else bAndW="";
-          
-        logger.info("Using "+bAndW+cursorSize+" cursors");
-
-        //Now create the individual cursors
-        Toolkit tools = Toolkit.getDefaultToolkit();
-        
-        
-        //Drag and drop cursors -----------------------------------------------
-        
-        //Valid DnD
-        path = homeDirectory + "img" + FILE_SEPAR + 
-                      "cursor_DnD_valid_" + cursorSize+ ".gif";
-        Image validDnDImg = AUtilities.getFileAsImageIcon(path).getImage();
-        
-        dragValidCursor=tools.createCustomCursor(validDnDImg, new Point(1, 1),"ValidDnD");        
-        
-        //Invalid Dnd
-        path = homeDirectory + "img" + FILE_SEPAR +
-               "cursor_DnD_invalid_" + cursorSize + ".gif";
-        Image invalidDnDImg = AUtilities.getFileAsImageIcon(path).getImage();
-        dragInvalidCursor=tools.createCustomCursor(invalidDnDImg,new Point(9, 9),"InvalidDnD");
-        
-        //Zoom, move and rotate cursors -----------------------------------------------
-        //Zoom
-        path = homeDirectory + "img" + FILE_SEPAR + 
-               "cursor_zoom_"+bAndW+cursorSize+".gif";
-        Image zoomImg = AUtilities.getFileAsImageIcon(path).getImage();
-        zoomCursor=tools.createCustomCursor(zoomImg, new Point(9, 9),"Zoom");
-                
-        //Move
-        path = homeDirectory + "img" + FILE_SEPAR + 
-               "cursor_move_" + cursorSize+".gif";
-        Image moveImg = AUtilities.getFileAsImageIcon(path).getImage();
-        moveCursor=tools.createCustomCursor(moveImg,new Point(10, 10),"Move");
-                
-        //Rotate
-        path = homeDirectory + "img" + FILE_SEPAR + 
-               "cursor_rotate_"+bAndW+cursorSize+".gif";
-        Image rotateImg = AUtilities.getFileAsImageIcon(path).getImage();
-        rotateCursor=tools.createCustomCursor(rotateImg,new Point(11, 11),"Rotate");
-        
-        //Pick and RectSelect cursors -----------------------------------------------
-        //Pick
-        path = homeDirectory + "img" + FILE_SEPAR +
-               "cursor_pick_"+cursorSize+".gif";
-        Image pickImg = AUtilities.getFileAsImageIcon(path).getImage();
-        pickCursor=tools.createCustomCursor(pickImg, new Point(6, 1),"Pick");
-                
-        //Rectangle select
-        path = homeDirectory + "img" + FILE_SEPAR +
-               "cursor_rectsel_"+cursorSize+".gif";
-        Image rectSelectImg = AUtilities.getFileAsImageIcon(path).getImage();
-        rectSelectCursor=tools.createCustomCursor(rectSelectImg,new Point(12, 12),"RectSelect");
-        
-        //Syncro and FishEye cursors -----------------------------------------------------
-        //Sync
-        path = homeDirectory + "img" + FILE_SEPAR + 
-               "cursor_sync_" + cursorSize + ".gif";
-        Image syncImg = AUtilities.getFileAsImageIcon(path).getImage();
-        syncCursor=tools.createCustomCursor(syncImg, new Point(10, 10),"Sync");
-        
-        //FishEye 
-        path = homeDirectory + "img" + FILE_SEPAR + 
-               "cursor_fisheye_"+bAndW+cursorSize+".gif";
-        Image fishEyeImg = AUtilities.getFileAsImageIcon(path).getImage();
-        fishEyeCursor=tools.createCustomCursor(fishEyeImg, new Point(1, 8),"FishEye");
-       
-      } else customCursors=false;
-      
-          
-      //Now check for any cursors that have not been set yet
-      //And set them to system defaults      
-      if (defaultCursor == null) defaultCursor = new Cursor(Cursor.DEFAULT_CURSOR);
-      
-      if (dragValidCursor == null) dragValidCursor = DragSource.DefaultMoveDrop;
-      if (dragInvalidCursor == null) dragInvalidCursor = DragSource.DefaultMoveNoDrop;
-
-      if (zoomCursor == null) zoomCursor = new Cursor(Cursor.DEFAULT_CURSOR);
-      if (moveCursor == null) moveCursor = new Cursor(Cursor.MOVE_CURSOR);
-      if (rotateCursor == null) rotateCursor  = new Cursor(Cursor.DEFAULT_CURSOR);
- 
-      if (pickCursor == null) pickCursor = new Cursor(Cursor.HAND_CURSOR);
-      if (rectSelectCursor == null) rectSelectCursor = new Cursor(Cursor.NW_RESIZE_CURSOR);
-      if (syncCursor == null) syncCursor = new Cursor(Cursor.CROSSHAIR_CURSOR);
-    }
-     
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ADrawParameters.java b/graphics/AtlantisJava/src/atlantis/graphics/ADrawParameters.java
deleted file mode 100755
index 214b6e05b459..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ADrawParameters.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package atlantis.graphics;
-
-import atlantis.graphics.colormap.AColorMap;
-
-import java.awt.Color;
-
-/**
- * Contains graphics attributes of a collection of data
- */
-public class ADrawParameters {
-	
-	boolean draw;
-	Color color;
-	int size;
-	int minSize=0;
-	boolean forceSymbols=false;
-	int lineWidth;
-	int frameWidth;
-	int symbol;
-	int drawOrFill=AGraphics.DRAW;
-	
-	public ADrawParameters(boolean draw, int color, int size, int lineWidth, int frameWidth, int symbol) {
-		Color[] colorMap=AColorMap.getColors();
-		
-		this.draw=draw;
-		if(color!=-1)
-			this.color=colorMap[color];
-		else
-			this.color=null;
-		this.size=size;
-		this.lineWidth=lineWidth;
-		this.frameWidth=frameWidth;
-		this.symbol=symbol;
-	}
-	
-	public ADrawParameters(boolean draw, int color, int size, int lineWidth, int frameWidth, int symbol,
-			boolean forceSymbols, int minSize, int drawOrFill) {
-		Color[] colorMap=AColorMap.getColors();
-		
-		this.draw=draw;
-		if(color!=-1)
-			this.color=colorMap[color];
-		else
-			this.color=null;
-		this.size=size;
-		this.lineWidth=lineWidth;
-		this.frameWidth=frameWidth;
-		this.symbol=symbol;
-		this.forceSymbols=forceSymbols;
-		this.minSize=minSize;
-		this.drawOrFill=drawOrFill;
-	}
-	
-	public ADrawParameters(boolean draw, Color color, int size, int lineWidth, int frameWidth, int symbol, int drawOrFill) {
-		this.draw=draw;
-		this.color=color;
-		this.size=size;
-		this.lineWidth=lineWidth;
-		this.frameWidth=frameWidth;
-		this.symbol=symbol;
-		this.drawOrFill=drawOrFill;
-	}
-	
-	public void setColor(int color) {
-		Color[] colorMap=AColorMap.getColors();
-		
-		this.color=colorMap[color];
-	}
-	
-	public void setFrameWidth(int width) {
-		this.frameWidth=width;
-	}
-	
-	public void setSize(int size) {
-		this.size=size;
-	}
-	
-	public boolean toBeDrawn() {
-		return draw;
-	}
-	
-	public int getSize() {
-		return size;
-	}
-	
-	public int getMinSize() {
-		return minSize;
-	}
-	
-	public boolean getForceSymbols() {
-		return forceSymbols;
-	}
-	
-	public int getDrawOrFill() {
-		return drawOrFill;
-	}
-	
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ADrawable.java b/graphics/AtlantisJava/src/atlantis/graphics/ADrawable.java
deleted file mode 100755
index bf36d13b60e7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ADrawable.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package atlantis.graphics;
-
-
-import atlantis.canvas.AWindow;
-import atlantis.projection.AProjection2D;
-
-
-public interface ADrawable {
-  void draw(AWindow window, AGraphics ag, AProjection2D projection);
-  int[] getColor(int[] dl);
-  int[] getType(int[] dl);
-  int getNumTypes();
-
-  /**
-   * The data are normally drawn in two layers
-   *  (layer=0 is for frames)
-   *  (layer=1 is the data)
-   *  The data may be of more than 1 type which are drawn in sequence
-   *   e.g. type=0 noise
-   *        type=1 others
-   */
-  ADrawParameters getDrawParameters(int layer, int type);
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ADrawnGraphics2D.java b/graphics/AtlantisJava/src/atlantis/graphics/ADrawnGraphics2D.java
deleted file mode 100755
index 5cd633a5e933..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ADrawnGraphics2D.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.geom.PathIterator;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import atlantis.data.ACalorimeterData;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.data.AHistogram;
-import atlantis.list.AList;
-import atlantis.list.AListManager;
-import atlantis.utils.ALogger;
-
-/**
- * Simple graphics context simply decides whether something was drawn or not
- */
-
-public class ADrawnGraphics2D extends ATemplateGraphics2D
-{
-    private static ALogger logger = ALogger.getLogger(ADrawnGraphics2D.class);
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    private static HashMap map;
-    private static ArrayList histogramList;
-
-    public ADrawnGraphics2D(Rectangle bounds)
-    {
-        super(bounds);
-        map = new HashMap();
-        histogramList = new ArrayList();
-        AEvent event = eventManager.getCurrentEvent();
-        if (event != null)
-        {
-            AData[] data = event.getData();
-            for (int i = 0; i < data.length; ++i)
-            {
-                map.put(data[i], new boolean[data[i].getNumData()]);
-            }
-        }
-    } // ADrawnGraphics2D() ----------------------------------------------------
-
-    ADrawnGraphics2D(ADrawnGraphics2D a)
-    {
-        super(a);
-    } // ADrawnGraphics2D() ----------------------------------------------------
-
-    public static void updateLastDrawn()
-    {
-        AListManager.getInstance().clearLastDrawn();
-        AEvent event = eventManager.getCurrentEvent();
-        if (event != null)
-        {
-            AData[] data = event.getData();
-            for (int i = 0; i < data.length; ++i)
-            {
-                boolean[] drawn = (boolean[]) map.get(data[i]);
-                if (data[i] instanceof ACalorimeterData)
-                {
-                    drawn = ((ACalorimeterData) data[i]).expandDrawn(drawn);
-                }
-                AListManager.getInstance().addLastDrawn(new AList(data[i], drawn));
-            }
-            for (int i = 0; i < histogramList.size(); ++i)
-            {
-                boolean[] drawn = (boolean[]) map.get(histogramList.get(i));
-                AListManager.getInstance().addLastDrawn(new AList((AData)histogramList.get(i), drawn));
-            }
-        }
-    } // updateLastDrawn() -----------------------------------------------------
-
-    public Graphics create()
-    {
-        return new ADrawnGraphics2D(this);
-    }
-
-    public void drawLine(double h0, double v0, double h1, double v1)
-    {
-        if (AGraphics.currentData != null)
-        {
-                ((boolean[]) map.get(AGraphics.currentData))[AGraphics.currentIndex] = true;
-        }
-    }
-
-    public void fillRect(int h, int v, int width, int height)
-    {
-        double dh = width / 2.;
-        double dv = height / 2.;
-        drawLine(h - dh, v - dv, h + dh, v - dv);
-        drawLine(h + dh, v - dv, h + dh, v + dv);
-        drawLine(h + dh, v + dv, h - dh, v + dv);
-        drawLine(h - dh, v + dv, h - dh, v - dv);
-    }
-
-    public void draw(Shape s)
-    {
-        PathIterator path = s.getPathIterator(null);
-        double[] coords = new double[6];
-        double h0 = 0.;
-        double v0 = 0.;
-        double h1 = 0.;
-        double v1 = 0.;
-        while (!path.isDone())
-        {
-            int segType = path.currentSegment(coords);
-
-            switch (segType)
-            {
-                case PathIterator.SEG_MOVETO:
-                    h0 = coords[0];
-                    v0 = coords[1];
-                    break;
-
-                case PathIterator.SEG_LINETO:
-                case PathIterator.SEG_CUBICTO:
-                    h1 = coords[0];
-                    v1 = coords[1];
-                    drawLine(h0, v0, h1, v1);
-                    h0 = h1;
-                    v0 = v1;
-                    break;
-
-                case PathIterator.SEG_CLOSE:
-                    break;
-
-                default:
-                    logger.error(" Error unknown segment type");
-                    break;
-            }
-            path.next();
-        }
-    }
-
-    public void fill(Shape s)
-    {
-        draw(s);
-    }
-
-    public void addHistogramData(AHistogram data)
-    {
-        histogramList.add(data);
-        map.put(data, new boolean[data.getNumData()]);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ADummyGraphics2D.java b/graphics/AtlantisJava/src/atlantis/graphics/ADummyGraphics2D.java
deleted file mode 100755
index 9c8cded5a0a8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ADummyGraphics2D.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.awt.image.renderable.*;
-import java.awt.geom.*;
-import java.awt.font.*;
-
-/**
- * This graphics is used when nothing should really be drawn on the screen
- */
-
-public class ADummyGraphics2D extends Graphics2D {
-
-  private int x;
-  private int y;
-  private int width;
-  private int height;
-
-  public ADummyGraphics2D() {}
-
-  public Rectangle getClipBounds() {
-    return new Rectangle(x, y, width, height);
-  }
-
-  public void setClip(int x, int y, int width, int height) {
-    this.x=x;
-    this.y=y;
-    this.width=width;
-    this.height=height;
-  }
-
-  public void transform(AffineTransform z) {}
-
-  public void fill(Shape z) {}
-
-  public void draw(Shape z) {}
-
-  public void drawImage(BufferedImage a, BufferedImageOp b, int c, int z) {}
-
-  public boolean drawImage(Image a, AffineTransform b, ImageObserver z) {
-    return false;
-  }
-
-  public void drawRenderedImage(RenderedImage a, AffineTransform z) {}
-
-  public void drawRenderableImage(RenderableImage a, AffineTransform z) {}
-
-  public void drawString(java.text.AttributedCharacterIterator a, float b, float z) {}
-
-  public void drawString(String a, int b, int z) {}
-
-  public void drawString(String a, float b, float z) {}
-
-  public void drawString(java.text.AttributedCharacterIterator a, int b, int z) {}
-
-  public void drawGlyphVector(GlyphVector a, float b, float z) {}
-
-  public boolean hit(Rectangle a, Shape b, boolean z) {
-    return false;
-  }
-
-  public GraphicsConfiguration getDeviceConfiguration() {
-    return null;
-  }
-
-  public void setComposite(Composite z) {}
-
-  public void setPaint(Paint z) {}
-
-  public void setStroke(Stroke z) {}
-
-  public void setRenderingHint(RenderingHints.Key a, Object z) {}
-
-  public Object getRenderingHint(RenderingHints.Key z) {
-    return null;
-  }
-
-  public void setRenderingHints(java.util.Map z) {}
-
-  public void addRenderingHints(java.util.Map z) {}
-
-  public RenderingHints getRenderingHints() {
-    return null;
-  }
-
-  public void translate(double a, double z) {}
-
-  public void translate(int a, int z) {}
-
-  public void rotate(double a, double b, double z) {}
-
-  public void rotate(double z) {}
-
-  public void scale(double a, double z) {}
-
-  public void shear(double a, double z) {}
-
-  public void setTransform(AffineTransform z) {}
-
-  public AffineTransform getTransform() {
-    return null;
-  }
-
-  public Paint getPaint() {
-    return null;
-  }
-
-  public Composite getComposite() {
-    return null;
-  }
-
-  public void setBackground(Color z) {}
-
-  public Color getBackground() {
-    return null;
-  }
-
-  public Stroke getStroke() {
-    return null;
-  }
-
-  public void clip(Shape z) {}
-
-  public FontRenderContext getFontRenderContext() {
-    return null;
-  }
-
-  public void setColor(Color z) {}
-
-  public Graphics create() {
-    return null;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, int f, int g, int h, int i, ImageObserver z) {
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, ImageObserver z) {
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, Color d, ImageObserver z) {
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, Color f, ImageObserver z) {
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, ImageObserver z) {
-    return false;
-  }
-
-  public boolean drawImage(Image a, int b, int c, int d, int e, int f, int g, int h, int i, Color j, ImageObserver z) {
-    return false;
-  }
-
-  public Color getColor() {
-    return null;
-  }
-
-  public void fillRect(int a, int b, int c, int z) {}
-
-  public void setPaintMode() {}
-
-  public void setXORMode(Color z) {}
-
-  public Font getFont() {
-    return null;
-  }
-
-  public void setFont(Font z) {}
-
-  public FontMetrics getFontMetrics(Font z) {
-    return null;
-  }
-
-  // public  Rectangle getClipBounds () {  return null;}
-  public void clipRect(int a, int b, int c, int z) {}
-
-  // public  void setClip(int a,int b,int c,int z) {  }
-  public void setClip(Shape z) {}
-
-  public Shape getClip() {
-    return null;
-  }
-
-  public void copyArea(int a, int b, int c, int d, int e, int z) {}
-
-  public void drawLine(int a, int b, int c, int z) {}
-
-  public void clearRect(int a, int b, int c, int z) {}
-
-  public void drawRoundRect(int a, int b, int c, int d, int e, int z) {}
-
-  public void fillRoundRect(int a, int b, int c, int d, int e, int z) {}
-
-  public void drawOval(int a, int b, int c, int z) {}
-
-  public void fillOval(int a, int b, int c, int z) {}
-
-  public void drawArc(int a, int b, int c, int d, int e, int z) {}
-
-  public void fillArc(int a, int b, int c, int d, int e, int z) {}
-
-  public void drawPolyline(int[] a, int[] b, int z) {}
-
-  public void drawPolygon(int[] a, int[] b, int z) {}
-
-  public void fillPolygon(int[] a, int[] b, int z) {}
-
-  public void dispose() {}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AGLPixelGraphics.java b/graphics/AtlantisJava/src/atlantis/graphics/AGLPixelGraphics.java
deleted file mode 100644
index 299aa5fd26b0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AGLPixelGraphics.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package atlantis.graphics;
-
-import atlantis.canvas.AGLGraphics;
-
-/*
- * This class subclasses APixelGraphics to allow some optimisations slightly
- * higher up the graphics chain in cases where OpenGL renders faster in
- * certain ways
- * 
- * @author Adam Davison
- */
-
-public class AGLPixelGraphics extends APixelGraphics {
-
-    protected AGLGraphics m_glg;
-
-    public AGLPixelGraphics(AGLGraphics g) {
-        super(g);
-        m_glg = g;
-    }
-
-    @Override
-    public void fillPolygon(double[] h, double[] v, int numPoints) {
-        /*int type = getContainmentType(h, v, numPoints, POLYGON);
-        if (type == FULLY_INSIDE || type == INTERSECTS) {
-            if (type == INTERSECTS) {
-                ACoord clipped = clipper.clipPolygon(h, v, numPoints);
-                h = clipped.hv[0][0];
-                v = clipped.hv[1][0];
-                numPoints = h.length;
-            }*/
-            /*int[] hInt = new int[numPoints];
-            int[] vInt = new int[numPoints];
-            for (int i = 0; i < numPoints; ++i) {
-                hInt[i] = (int) h[i];
-                vInt[i] = (int) v[i];
-            }*/
-            updateColor();
-            m_glg.fillPolygon(h, v, numPoints);
-            //g.drawPolygon(hInt, vInt, numPoints);
-        /*} else if (type == CONTAINS) {
-            Rectangle bounds = g.getClipBounds();
-            updateColor();
-            g.fillRect((int) Math.rint(bounds.getX()), (int) Math.rint(bounds.getY()), (int) Math.rint(bounds.getWidth()), (int) Math.rint(bounds.getHeight()));
-        }*/
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AGraphics.java b/graphics/AtlantisJava/src/atlantis/graphics/AGraphics.java
deleted file mode 100755
index 225eb608a887..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AGraphics.java
+++ /dev/null
@@ -1,407 +0,0 @@
-package atlantis.graphics;
-
-import atlantis.canvas.AGLGraphics;
-import java.awt.Color;
-import java.awt.AlphaComposite;
-import java.awt.Composite;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.Image;
-import java.awt.Stroke;
-
-import atlantis.event.AData;
-import atlantis.geometry.ADetectors;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-import atlantis.utils.APolygon;
-
-import org.sourceforge.jlibeps.epsgraphics.*;
-import org.apache.batik.svggen.SVGGraphics2D;
-
-/**
- * Normally all drawing should be done on an AGraphics. For special uses, e.g.
- * Braintest projections, standard Java Graphics may be used. To allow this,
- * projections are always given a graphics which they must convert to an
- * AGraphics with AGraphics.makeAGraphics. AGraphics provides picking of drawn
- * objects.
- */
-
-public abstract class AGraphics
-{
-    protected Graphics2D g;
-    AClipper clipper = null;
-    Color currentColor;
-    Color lastDrawnColor = null;
-    Rectangle bounds;
-    int lineWidth = 1;
-    int size;
-    int symbol;
-    ADrawParameters lastDrawParameters = null;
-
-    static AData currentData = null;
-    static ADetectors currentDetector = null;
-    static int currentIndex;
-
-    public static final int SYMBOL_FILLED_BOX = 0;
-    public static final int SYMBOL_HORIZONTAL_LINE = 1;
-    public static final int SYMBOL_VERTICAL_LINE = 2;
-    public static final int SYMBOL_PLUS = 3;
-    public static final int SYMBOL_FILLED_CIRCLE = 4;
-
-    public static final int DRAW = 0;
-    public static final int FILL = 1;
-
-    protected static final int NUM_LAYERS = 2;
-
-    protected static final int FULLY_INSIDE = 0;
-    protected static final int FULLY_OUTSIDE = 1;
-    protected static final int CONTAINS = 2;
-    protected static final int INTERSECTS = 3;
-
-    protected static final int POLYGON = 0;
-    protected static final int POLYLINE = 1;
-
-    AGraphics(Graphics g)
-    {
-        this.g = (Graphics2D) g;
-        if (g.getClipBounds() != null)
-            clipper = new AClipper(g.getClipBounds());
-        currentColor = g.getColor();
-    }
-
-    public Graphics2D getGraphics2D()
-    {
-        return g;
-    }
-
-    public static AGraphics makeAGraphics(Graphics g)
-    {
-        if (g instanceof EpsGraphics2D || g instanceof APickingGraphics2D ||
-            g instanceof ADrawnGraphics2D || g instanceof SVGGraphics2D)
-        {
-            return new AVectorGraphics(g);
-        }
-        else if (g instanceof AGLGraphics)
-        {
-            return new AGLPixelGraphics((AGLGraphics)g);
-        }
-        else
-        {
-            return new APixelGraphics(g);
-        }
-    }
-
-    public static void setCurrentDataAndIndex(AData current, int index)
-    {
-        currentData = current;
-        currentIndex = index;
-    }
-
-    public static void setCurrentDetectorAndIndex(ADetectors current, int index)
-    {
-        currentDetector = current;
-        currentIndex = index;
-    }
-
-    public static void clearCurrentDetectorAndIndex()
-    {
-        currentDetector = null;
-        currentIndex = -1;
-    }
-
-    public static void clearCurrentDataAndIndex()
-    {
-        currentData = null;
-        currentIndex = -1;
-    }
-
-    public void setFont(Font f)
-    {
-        g.setFont(f);
-    }
-
-    public void setStroke(Stroke s)
-    {
-        g.setStroke(s);
-    }
-
-    public void setColor(Color c)
-    {
-        currentColor = c;
-    }
-
-    public void updateColor()
-    {
-        if (currentColor != lastDrawnColor)
-        {
-            g.setColor(currentColor);
-            lastDrawnColor = currentColor;
-        }
-    }
-
-    public abstract void setLineWidth(int lineWidth);
-
-    public void updateDrawParameters(ADrawParameters dp)
-    {
-        if (dp != lastDrawParameters)
-        {
-            setColor(dp.color);
-            lineWidth = Math.max(dp.lineWidth, 1) + 2 * dp.frameWidth;
-            setLineWidth(lineWidth);
-            size = dp.size + 2 * dp.frameWidth;
-            symbol = dp.symbol;
-            lastDrawParameters = dp;
-        }
-    }
-
-    public void drawString(String str, double x, double y)
-    {
-        g.drawString(str, (int) x, (int) y);
-    }
-
-    public void draw(Shape s)
-    {
-        g.draw(s);
-    }
-
-    public void drawPoint(AData detector, int index, double h, double v, int pixelsH, int pixelsV)
-    {
-        setCurrentDataAndIndex(detector, index);
-        drawPoint(h, v, pixelsH, pixelsV);
-        clearCurrentDataAndIndex();
-    }
-
-    public void drawPoint(double h, double v, int pixelsH, int pixelsV)
-    {
-        if (clipper.isPointWithin(h, v))
-            fillRect(h, v, pixelsH, pixelsV);
-    }
-
-    public void drawSymbol(double h, double v)
-    {
-        if (clipper.isPointWithin(h, v))
-        {
-            if (symbol == SYMBOL_FILLED_BOX)
-            {
-                fillRect(h, v, size, size);
-            }
-            else if (symbol == SYMBOL_HORIZONTAL_LINE)
-            {
-                fillRect(h, v, size, lineWidth);
-            }
-            else if (symbol == SYMBOL_VERTICAL_LINE)
-            {
-                fillRect(h, v, lineWidth, size);
-            }
-            else if (symbol == SYMBOL_PLUS)
-            {
-                fillRect(h, v, size, lineWidth);
-                fillRect(h, v, lineWidth, size);
-            }
-            else if (symbol == SYMBOL_FILLED_CIRCLE)
-            {
-                fillOval(h, v, size, size);
-            }
-        }
-    }
-
-    //Draw an image at postion x,y of this graphics context
-    //Introduced for FishEye symbol showing FishEye status
-    public void drawImage(Image img, int x, int y){
-        //Draw the image on screen 
-        g.drawImage(img,x,y,null);    
-    }
- 
-    
-    public void fillPolygon(AData detector, int index, double[] h, double[] v, int numPoints)
-    {
-        setCurrentDataAndIndex(detector, index);
-        fillPolygon(h, v, numPoints);
-        clearCurrentDataAndIndex();
-    }
-
-    public void fillRect(int h, int v, int width, int height)
-    {
-        updateColor();
-        g.fillRect(h, v, width, height);
-    }
-    
-    public void fillOval(int h, int v, int width, int height)
-    {
-        g.fillOval(h, v, width, height);
-    }
-
-    public abstract void drawPolyline(double[] h, double[] v, int numPoints);
-
-    public abstract void drawDottedPolyline(double[] h, double[] v, int numPoints);
-
-    public abstract void drawSmoothPolyline(double[] h0, double[] v0, int numPoints0);
-
-    public abstract void drawLine(double h0, double v0, double h1, double v1);
-    
-    public abstract void drawPolygon(double[] h, double[] v, int numPoints);
-
-    protected abstract void fillRect(double h, double v, int width, int height);
-    
-    protected abstract void fillOval(double h, double v, int width, int height);
-
-    public void fillPolygon(ADetectors det, int index, double[] h, double[] v, int numPoints)
-    {
-        setCurrentDetectorAndIndex(det, index);
-        fillPolygon(h, v, numPoints);
-        clearCurrentDetectorAndIndex();
-    }
-    
-    public void fillPolygon(double[] h, double[] v, int numPoints, float alpha)
-    {
-    	Composite originalComposite = g.getComposite();
-    	int ACtype = AlphaComposite.SRC_OVER;
-        g.setComposite(AlphaComposite.getInstance(ACtype, alpha));
-        fillPolygon(h, v, numPoints);
-    	g.setComposite(originalComposite);
-    }
-
-    protected int getContainmentType(double[] h, double[] v, int numPoints, int shape)
-    {
-        int within = clipper.fastWithin(h, v, numPoints);
-        if (within == AClipper.NONE_WITHIN)
-            return FULLY_OUTSIDE;
-        if (within == AClipper.ALL_WITHIN)
-            return FULLY_INSIDE;
-        for (int i = 0; i < numPoints - 1; ++i)
-            if (clipper.isLineWithin(h[i], v[i], h[i + 1], v[i + 1]))
-                return INTERSECTS;
-        if (shape == POLYGON && numPoints > 1)
-            if (clipper.isLineWithin(h[numPoints - 1], v[numPoints - 1], h[0], v[0]))
-                return INTERSECTS;
-        Rectangle bounds = g.getClipBounds();
-        double xCentreClipped = bounds.getX() + bounds.getWidth() / 2.;
-        double yCentreClipped = bounds.getY() + bounds.getHeight() / 2.;
-        if (isPointInside(h, v, numPoints, xCentreClipped, yCentreClipped))
-            return CONTAINS;
-        return FULLY_OUTSIDE;
-    }
-
-    public abstract void fillPolygon(double[] h, double[] v, int numPoints);
-
-    public void drawPolygon(APolygon p)
-    {
-        drawPolygon(p.getX(), p.getY(), p.nrNodes());
-    }
-    
-    public static boolean isPointInside(double[] h, double[] v, int numPoints, double hP, double vP)
-    {
-        double[] a = new double[numPoints];
-
-        for (int i = 0; i < numPoints; ++i)
-        {
-            a[i] = Math.atan2(v[i] - vP, h[i] - hP);
-        }
-        double[] d = new double[numPoints];
-
-        for (int i = 0; i < numPoints; ++i)
-        {
-            if (i < numPoints - 1)
-                d[i] = a[i + 1] - a[i];
-            else
-                d[i] = a[0] - a[i];
-            if (d[i] > Math.PI)
-                d[i] -= 2. * Math.PI;
-            else if (d[i] < -Math.PI)
-                d[i] += 2. * Math.PI;
-        }
-        double sum = 0.;
-
-        for (int i = 0; i < numPoints; ++i)
-        {
-            sum += d[i];
-        }
-        if (Math.abs(sum) > Math.PI)
-            return true;
-        else
-            return false;
-    }
-
-    public void draw(ACoord display)
-    {
-        ADrawable source = display.source;
-
-        if (source == null)
-            return;
-        ADrawParameters adp = source.getDrawParameters(0, 0);
-
-        if (adp.getForceSymbols() == true || adp.getMinSize() > 0)
-            display.toSymbols(adp.getForceSymbols(), adp.getMinSize());
-        Color[] colorMap = AColorMap.getColors();
-        int[] index = display.index;
-        int[] c = source.getColor(index);
-        int[] t = source.getType(index);
-        double[][] h = display.hv[0];
-        double[][] v = display.hv[1];
-
-        for (int layer = 0; layer < NUM_LAYERS; layer++)
-        {
-            for (int type = 0; type < source.getNumTypes(); type++)
-            {
-                ADrawParameters dp = source.getDrawParameters(layer, type);
-                int drawType = dp.getDrawOrFill();
-                updateDrawParameters(dp);
-                if (dp.draw)
-                {
-                    for (int j = 0; j < t.length; j++)
-                    {
-                        if (t[j] == type)
-                        {
-                            if (layer == NUM_LAYERS - 1)
-                            {
-                                setColor(colorMap[c[j]]);
-                                if (source instanceof AData)
-                                    setCurrentDataAndIndex((AData) source, index[j]);
-                            }
-                            if (display.type == ACoord.SYMBOLS)
-                                drawSymbol(h[0][j], v[0][j]);
-                            else if (display.type == ACoord.POLYGONS && h[j].length == 1)
-                                drawSymbol(h[j][0], v[j][0]);
-                            else if (display.type == ACoord.LINES)
-                                drawLine(h[0][j], v[0][j], h[1][j], v[1][j]);
-                            else if (display.type == ACoord.POLYLINES)
-                                drawPolyline(h[j], v[j], h[j].length);
-                            else if (display.type == ACoord.SMOOTH_POLYLINES)
-                                drawSmoothPolyline(h[j], v[j], h[j].length);
-                            else if (display.type == ACoord.DOTTED_POLYGONS)
-                                drawDottedPolyline(h[j], v[j], h[j].length);
-                            else if (display.type == ACoord.POLYGONS)
-                            {
-                                if (drawType == DRAW)
-                                    drawPolygon(h[j], v[j], h[j].length);
-                                else if (drawType == FILL)
-                                    fillPolygon(h[j], v[j], h[j].length);
-                            }
-                            else if (display.type == ACoord.TRANSPARENT_POLYGONS)
-                            {
-                            	if(g instanceof EpsGraphics2D){ 
-                            		// setComposite is currently unsupported for EpsGraphics2D
-                            		// for now just draw as an outline, so we can still see
-                            		// jets and the underlying objects
-                            		drawPolygon(h[j], v[j], h[j].length);
-                            	}
-                            	else {
-                            		Composite originalComposite = g.getComposite();
-                            		int ACtype = AlphaComposite.SRC_OVER;
-                            		g.setComposite(AlphaComposite.getInstance(ACtype, (float)APar.instance().get("Jet","Alpha").getD()));
-                            		fillPolygon(h[j], v[j], h[j].length);
-                            		g.setComposite(originalComposite);
-                            	}
-                            }
-                            clearCurrentDataAndIndex();
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AIcon.java b/graphics/AtlantisJava/src/atlantis/graphics/AIcon.java
deleted file mode 100644
index a2add88871f9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AIcon.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.Frame;
-
-import javax.swing.ImageIcon;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.AUtilities;
-
-/**
- * 
- * @author waugh
- *
- */
-public class AIcon {
-	/** Set icon image for a frame to be the Atlantis icon. */
-	public static void setIconImage(Frame f)
-	{
-	    String path = AGlobals.instance().getHomeDirectory() + "img" + 
-	    		System.getProperty("file.separator") +
-	    		"atlantis_icon.gif";
-	    ImageIcon ii = AUtilities.getFileAsImageIcon(path);
-	    f.setIconImage(ii.getImage());
-	
-	} // setIconImage() -----------------------------------------------------
-
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ALegoDraw.java b/graphics/AtlantisJava/src/atlantis/graphics/ALegoDraw.java
deleted file mode 100755
index ab9137ea80ad..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ALegoDraw.java
+++ /dev/null
@@ -1,1150 +0,0 @@
-package atlantis.graphics;
-import java.awt.BasicStroke;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Stroke;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AEvent;
-import atlantis.data.ALVL1ResultData;
-import atlantis.data.ATriggerInfoData;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.AEnumeratorParameter;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.utils.AMath;
-
-public class ALegoDraw
-{
-
-    protected static APar parameterStore = APar.instance();
-
-    private static int legendHeight=0;
-    private static int lineHeight = 17;//seperation of lines
-    //colors to use in legend
-
-    //width of lines in lego grid
-    private static float legoGridWidth = 1.6f;
-    private static float legoTowersWidth = 1.0f;
-
-    private static Color textColor=Color.white, 
-        backgroundColor=AColorMap.getColors()[parameterStore.get("Color", "BkgFill").getI()],
-        borderColor=Color.lightGray;
-
-    public static Color getBackgroundColor()
-    {
-        return backgroundColor;
-    }
-
-    public static void fillBackground(AWindow window, AGraphics ag)
-    {
-
-        backgroundColor = AColorMap.getColors()[parameterStore.get("Color", "BkgFill").getI()]; // inherit bkg colour from main background colour
-
-        ag.setColor(backgroundColor);
-        ag.fillRect(0, 0, window.getWidth(), window.getHeight());
-    }
-
-    public static void drawLegend(AWindow window, AGraphics ag, AEvent event, double met, double maxEt, double AODmaxEt)
-    {	
-        //colors to use
-        textColor=Color.black;
-        if(backgroundColor.getBlue()+backgroundColor.getGreen()+backgroundColor.getRed() < 400)
-            textColor=Color.white;
-        //change the font size (reset at end)
-        float originalFontSize= ag.g.getFont().getSize2D();
-        float newFontSize= (float) 0.9*originalFontSize;
-        ag.g.setFont(ag.g.getFont().deriveFont(newFontSize));
-        //variables to locate where to write/draw
-        legendHeight = lineHeight+2;//distance from top of legend
-        int indent = window.getWidth()- 200;//distance from left of legend
-        int pos = 90;//distance to start writing second half of line
-        //loop over Lvl1resultdata collections
-        String[] colLvl1=event.getActiveCollectionNames("LVL1Result");
-        ALVL1ResultData lvl1ResultData[] = null;
-        if(colLvl1.length>0)
-            lvl1ResultData = new ALVL1ResultData[colLvl1.length];
-        for(int i=0;i<colLvl1.length;i++)
-        {
-            lvl1ResultData[i] = (ALVL1ResultData) event.get(colLvl1[i]);
-        }
-        ATriggerInfoData triggerInfoData = event.getTriggerInfoData();
-
-        //check window is large enough
-        if(window.getWidth()<250 || window.getHeight()<250)
-        {
-            drawWindowTooSmall(window, ag, indent);
-            //reset font size
-            ag.g.setFont(ag.g.getFont().deriveFont(originalFontSize));
-            return;
-        }
-
-        //draw main legend
-        if(parameterStore.get("LegoPlot", "MainLegend").getStatus())
-            drawLegendMain(window, ag, event, met, maxEt, AODmaxEt, lvl1ResultData, indent, pos);
-        //draw lvl1 sumEt and missEt
-        if(parameterStore.get("LegoPlot", "L1EtLegend").getStatus())
-            drawLegendL1ET(ag, lvl1ResultData, triggerInfoData, indent);
-        //draw the item list
-        boolean drawLegend=false;
-        if(!drawLegend && parameterStore.get("LegoPlot", "L1Items").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "L2Items").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "EFItems").getStatus())drawLegend=true;
-        if(drawLegend)
-            drawLegendItems(window, ag, lvl1ResultData, indent);
-
-        //reset font size
-        ag.g.setFont(ag.g.getFont().deriveFont(originalFontSize));
-    }
-
-    public static void drawWindowTooSmall(AWindow window, AGraphics ag, int indent)
-    {
-
-        //change indent to make legend smaller
-        indent+=135;
-        // create legend boarder with two concentric rectangles
-        // outer rectangle:
-        ag.setColor(borderColor);
-        ag.fillRect(indent - 4, 5, 65, 3*lineHeight);
-        // inner rectangle:
-        ag.setColor(backgroundColor);
-        ag.fillRect(indent - 4 + 2, 7, 65 - 4, 3*lineHeight-4);
-        ag.setColor(textColor);
-        ag.updateColor();
-
-        ag.drawString("Window", indent + 6, legendHeight);
-        legendHeight += lineHeight;
-        ag.drawString("too small", indent + 6, legendHeight);
-        legendHeight += lineHeight;
-        ag.drawString("for legend", indent + 6, legendHeight);
-        legendHeight += lineHeight;
-    }
-
-    public static void drawLegendMain(AWindow window, AGraphics ag, AEvent event, double met, double maxEt, double AODmaxEt, ALVL1ResultData lvl1ResultData[], int indent, int pos)
-    {
-
-        // create legend boarder with two concentric rectangles
-        // outer rectangle:
-        ag.setColor(borderColor);
-        //ag.fillRect(/*indent - 4*/window.getWidth()/1.8, /*5*/window.getHeight()/3.0, (int)(1-(window.getWidth()/1.8)), (int)(1-(window.getHeight()/3.0)));
-        ag.fillRect(indent - 4, 5, 200, 105);
-
-        // inner rectangle:
-        ag.setColor(backgroundColor);
-        ag.fillRect(indent - 4 + 2, 7, 200 - 4, 105 - 4);
-        //ag.fillRect(/*indent - 4*/window.getWidth()/1.8 +2, /*5*/window.getHeight()/3.0 +2, (int)(1-(window.getWidth()/1.8))+4, (int)(1-(window.getHeight()/3.0))+4);
-
-        ag.setColor(textColor);
-        ag.updateColor();
-
-        //First item Missing ET  (may remove met box from plot later)
-        if(met!=0)
-            drawLegendPartMain1(ag, event, met, indent, pos);
-        else
-            ag.drawString("No Missing Et", indent + 6, legendHeight);
-        legendHeight += lineHeight;
-        ag.setColor(textColor);
-        ag.updateColor();
-
-        //Second item colourby
-        //make sure there are cells by checking the maximum energy
-        //and that there have been colours added to the colourset
-        //(can have maxE and no colours when scaling to AOD)
-        if(maxEt!=0 && AProjectionLegoPlot.colorset.size()>0)
-            drawLegendMain2(ag, indent, pos);
-        else
-        {
-            ag.setColor(textColor);
-            ag.updateColor();
-            ag.drawString("No cells", indent + 6, legendHeight);
-        }
-        legendHeight += lineHeight;
-        ag.setColor(textColor);
-        ag.updateColor();
-
-        //Third item maximum height of towers
-        if(maxEt!=0 || AODmaxEt!=0)
-            drawLegendMain3(ag, maxEt, AODmaxEt, indent, pos);
-        else
-        {
-            ag.drawString("No towers", indent + 6, legendHeight);
-            legendHeight += lineHeight;
-        }
-        legendHeight += lineHeight;
-        ag.setColor(textColor);
-        ag.updateColor();
-
-        //Fourth item lvl1 result
-        if (lvl1ResultData == null){
-            ag.drawString("Trigger Decision N/A", indent+6, legendHeight);
-            legendHeight+=lineHeight;//move by a line to keep same spacing
-        }else if (lvl1ResultData.length>1){
-            ag.drawString(">1 LVL1Result collections selected", indent+6, legendHeight);
-            legendHeight+=lineHeight;
-            ag.drawString("View on event properties or choose 1", indent+6, legendHeight);
-        }else{
-            drawLegendMain4(ag, lvl1ResultData[0], indent, pos);
-        }
-        legendHeight+=lineHeight;
-        ag.setColor(textColor);
-        ag.updateColor();
-    }
-
-    public static void drawLegendPartMain1(AGraphics ag, AEvent event, double met, int indent, int pos)
-    {
-        ag.setColor(AProjectionLegoPlot.defaultColorMap[parameterStore.get("ETMis", "Constant").getI()]);
-        //draw dashed line
-        ag.fillRect(indent + 6, 11, 5, 3); 
-        ag.fillRect(indent + 6 + 10, 11, 5, 3);
-        ag.fillRect(indent + 6 + 20, 11, 5, 3);
-        ag.fillRect(indent + 6 + 30, 11, 5, 3);
-        ag.setColor(textColor);
-        ag.updateColor();
-        String[] names = event.getActiveCollectionNames("ETMis");
-        if(names.length==1)
-            ag.drawString("Missing ET= " + Math.round(met) + " GeV" , indent + 0.6*pos, legendHeight);
-        else
-            ag.drawString("Max Missing ET= " + Math.round(met) + " GeV" , indent + 0.6*pos, legendHeight);
-    }
-
-    public static void drawLegendMain2(AGraphics ag, int indent, int pos)
-    {
-        String modeName;
-        if (AProjectionLegoPlot.mode == 0)
-        {
-            modeName="LAr";
-        }
-        else if (AProjectionLegoPlot.mode == 1)
-        {
-            modeName="LVL1TriggerTower";
-        }
-        else
-        {
-            modeName="LVL1JetElement";
-        }
-        AEnumeratorParameter param = (AEnumeratorParameter) parameterStore.get(modeName, "ColorFunction");
-        String colorFunction = param.getText(param.getI());
-        ag.drawString(colorFunction + " (1-" + AProjectionLegoPlot.colorset.size() + ")",indent + pos, legendHeight);
-        int barwidth = 6, barheight = 6;
-        if(AProjectionLegoPlot.getDrawEMHAD())
-        {
-            if(AProjectionLegoPlot.colorset.size()==2)
-            {
-                //for Em/had option should only have 2 colors
-                ag.setColor(AProjectionLegoPlot.defaultColorMap[AProjectionLegoPlot.colorEM]);
-                ag.fillRect(indent + barwidth * 2, 28, barwidth * 2, barheight);
-                ag.setColor(AProjectionLegoPlot.defaultColorMap[AProjectionLegoPlot.colorHad]);
-                ag.fillRect(indent + 2 * barwidth* 2, 28, barwidth * 2, barheight);
-            }
-            else
-            {
-                //if more colors then lists must be in use
-                int c = 0;
-                ++c;
-                ag.setColor(AProjectionLegoPlot.defaultColorMap[AProjectionLegoPlot.colorEM]);
-                ag.fillRect(indent + c * barwidth, 28, barwidth, barheight);
-                ++c;
-                ag.setColor(AProjectionLegoPlot.defaultColorMap[AProjectionLegoPlot.colorHad]);
-                ag.fillRect(indent + c * barwidth, 28, barwidth, barheight);
-                for (int i = 0; i <AProjectionLegoPlot.caloColorMap.length ; i++)
-                {
-                    if (!AProjectionLegoPlot.colorset.contains(new Integer(i)))
-                        continue;
-                    if(i==AProjectionLegoPlot.colorEM || i==AProjectionLegoPlot.colorHad)
-                        continue;
-                    ++c;
-                    ag.setColor(AProjectionLegoPlot.caloColorMap[i]);
-                    ag.fillRect(indent + c * barwidth, 28, barwidth, barheight);
-                }
-            }
-        }
-        else
-        {
-            //if not Em/Had then loop over colors
-            int c = 0;
-            barwidth = 90/AProjectionLegoPlot.caloColorMap.length;
-            for (int i = 0; i <AProjectionLegoPlot.caloColorMap.length ; i++)
-            {
-                if (!AProjectionLegoPlot.colorset.contains(new Integer(i)))
-                    continue;
-                ++c;
-                ag.setColor(AProjectionLegoPlot.caloColorMap[i]);
-                ag.fillRect(indent + c * barwidth, 28, barwidth, barheight);
-            }
-        }
-    }
-
-    public static void drawLegendMain3(AGraphics ag, double maxEt, double AODmaxEt, int indent, int pos)
-    {
-        ag.drawString( "Height of tallest tower:", indent + 6, legendHeight);
-        //next line has the values
-        legendHeight += lineHeight;
-        if (parameterStore.get("LegoPlot", "ETAxisHeight").getD() > 0.0)
-            ag.drawString("User selection: " + Math.round(maxEt) + " GeV ", indent +6, legendHeight);
-        else if (parameterStore.get("LegoPlot", "ScaleToAOD").getStatus())
-            ag.drawString("Scale to AOD: " + Math.round(maxEt) + " GeV ", indent +6, legendHeight);
-        else
-        {
-            if(maxEt!=0)
-            {
-                ag.drawString("Cells: " + Math.round(maxEt) + " GeV ", indent +6, legendHeight);
-                if(AODmaxEt!=0)
-                    ag.drawString("AOD: " + Math.round(AODmaxEt) + " GeV ", indent + pos, legendHeight);
-            }
-            else
-                ag.drawString("AOD: " + Math.round(AODmaxEt) + " GeV ", indent + 6, legendHeight);
-        }   
-    }
-
-    public static void drawLegendMain4(AGraphics ag, ALVL1ResultData lvl1ResultData, int indent, int pos)
-    {
-        ag.drawString("Trigger Decision:", indent +6, legendHeight);
-        legendHeight+=lineHeight;
-        String[] trigRes={"NA","NA","NA"};
-        int[] temp=new int[3];
-        temp[0]=lvl1ResultData.getPassedL1(0);
-        temp[1]=lvl1ResultData.getPassedL2(0);
-        temp[2]=lvl1ResultData.getPassedEF(0);
-        for(int i=0;i<3;i++)
-        {
-            switch(temp[i])
-            {
-            case -1:
-                trigRes[i]="N/C";
-                break;
-            case 0:
-                trigRes[i]="failed";
-                break;
-            case 1:
-                trigRes[i]="passed";
-                break;
-            default:
-                trigRes[i]="NA";
-            }
-        }
-        ag.drawString("L1:" + trigRes[0] +" L2:" + trigRes[1]+" EF:" + trigRes[2], indent +6, legendHeight);
-    }
-
-    public static void drawLegendL1ET(AGraphics ag, ALVL1ResultData lvl1ResultData[], ATriggerInfoData triggerInfoData, int indent)
-    {
-        // create legend boarder with two concentric rectangles
-        // outer rectangle:
-        ag.setColor(borderColor);
-        ag.fillRect(indent - 4, legendHeight, 200, (int) (lineHeight*1.5));
-        // inner rectangle:
-        ag.setColor(backgroundColor);
-        ag.fillRect(indent - 4 + 2, legendHeight + 2, 200 - 4, (int) (lineHeight*1.5 - 4));
-        ag.setColor(textColor);
-        ag.updateColor();
-        legendHeight+=lineHeight;
-        //if no trigger info and "All" Lvlresult selected display warning
-        if(triggerInfoData==null && lvl1ResultData!=null && lvl1ResultData.length>1){
-            ag.drawString(">1 LVL1Result collections selected", indent+6, legendHeight);
-            legendHeight+=lineHeight; 
-            return;
-        }
-
-        float LVL1EtMiss=-1.0f,LVL1SumEt=-1.0f;
-        if(triggerInfoData!=null)
-        {
-            LVL1EtMiss=triggerInfoData.getEnergyEtMiss(0);
-            LVL1SumEt=triggerInfoData.getEnergySumEt(0);  
-        }
-        else if(lvl1ResultData!=null && lvl1ResultData.length==1)
-        {
-            LVL1EtMiss=lvl1ResultData[0].getEnergyEtMiss(0);
-            LVL1SumEt=lvl1ResultData[0].getEnergySumEt(0);
-        }
-        String LVL1EtMissOutput,LVL1SumEtOutput;
-        if(LVL1EtMiss>0) 
-            LVL1EtMissOutput=""+LVL1EtMiss;
-        else 
-            LVL1EtMissOutput="N/A";
-        if(LVL1SumEt>0) 
-            LVL1SumEtOutput=""+LVL1SumEt;
-        else 
-            LVL1SumEtOutput="N/A";
-
-        ag.drawString("L1-EtMiss: "+LVL1EtMissOutput+" L1-SumEt: "+LVL1SumEtOutput, indent , legendHeight);
-        legendHeight+=lineHeight;
-    }
-
-    public static void drawLegendItems(AWindow window, AGraphics ag, ALVL1ResultData lvl1ResultData[], int indent)
-    {
-        //   ag.setStroke(new BasicStroke(legoTowersWidth)); returning to original line width
-
-        if(lvl1ResultData!=null && lvl1ResultData.length>1){
-            //create legend boarder with two concentric rectangles
-            //outer rectangle:
-            ag.setColor(borderColor);
-            ag.fillRect(indent - 4, legendHeight, 200, (int) (lineHeight*5.5));
-            // inner rectangle:
-            ag.setColor(backgroundColor);
-            ag.fillRect(indent - 4 + 2, legendHeight + 2, 200 - 4, (int) (lineHeight*5.5 - 4));
-            ag.setColor(textColor);
-            ag.updateColor();
-            legendHeight+=lineHeight;
-            ag.drawString(">1 LVL1Result collections selected", indent+6, legendHeight);
-            legendHeight+=lineHeight;
-            ag.drawString("Either select 1 LVL1Result collection", indent+6, legendHeight);
-            legendHeight+=lineHeight;
-            ag.drawString("from: Calo->LVL1Result", indent+6, legendHeight);
-            legendHeight+=lineHeight;
-            ag.drawString("or to see all items select:", indent+6, legendHeight);
-            legendHeight+=lineHeight;
-            ag.drawString("file->Event Properties", indent+6, legendHeight);
-            legendHeight+=lineHeight; 
-            return;
-        }
-
-        //output message to say no lvl1result
-        if(lvl1ResultData==null){
-            ag.setColor(borderColor);
-            ag.updateColor();
-            ag.fillRect(window.getWidth() -200 - 4, legendHeight+4, 200, (int) Math.round(1.5*lineHeight));
-            ag.setColor(backgroundColor);
-            ag.updateColor();
-            ag.fillRect(window.getWidth() -200 - 4 + 2, legendHeight +4+ 2, 200 - 4, (int) Math.round(1.5*lineHeight)-4);
-            ag.setColor(textColor);
-            ag.updateColor();
-            legendHeight+=lineHeight;
-            ag.drawString("No LVL1Result collection in event", window.getWidth() - 200 + 2, legendHeight+4);
-            return;
-        }
-
-        int origlineHeight =lineHeight;//save lineheight to be reset at end of function
-        lineHeight*=0.8;//for item list bunch together
-        int startrowHeight =legendHeight;
-
-        //now output items in columns in new legend box
-
-        //lists to draw
-        int dolist1 = parameterStore.get("LegoPlot", "L1Items").getStatus()?1:0;
-        int dolist2 = parameterStore.get("LegoPlot", "L2Items").getStatus()?1:0;
-        int dolist3 = parameterStore.get("LegoPlot", "EFItems").getStatus()?1:0;
-
-        //number of items per column and number of columns
-        int maxItems=(int) Math.round(((0.8*window.getHeight()-legendHeight)/lineHeight )-0.5);
-        int columnWidth= 72;
-        int maxColumns=(int) Math.floor((0.9*window.getWidth())/columnWidth);
-
-        // store items and headers
-        String[][] items=new String[3][];
-        if(dolist1>0) items[0]=newList("---L1 items---", lvl1ResultData[0].getCtpItemListSplit(0,true));
-        if(dolist2>0) items[1]=newList("---L2 items---", lvl1ResultData[0].getitemListL2Split(0,true));
-        if(dolist3>0) items[2]=newList("---EF items---", lvl1ResultData[0].getitemListEFSplit(0,true));
-
-        //number of columns for each list 
-        int[] num=new int[3];
-        num[0]= (dolist1==0)? 0 : (int) Math.ceil(items[0].length/((double)maxItems));
-        num[1]= (dolist2==0)? 0 : (int) Math.ceil(items[1].length/((double)maxItems));
-        num[2]= (dolist3==0)? 0 : (int) Math.ceil(items[2].length/((double)maxItems));
-
-        boolean doWarning=false;//for printing see event properties message
-        //calculate total number of columns
-        if(num[0]+num[1]+num[2]>maxColumns){
-            //too many in list so each can just have the average
-            int av = (int) Math.floor(maxColumns/((double)(dolist1+dolist2+dolist3)));
-            if(dolist1>0) num[0]=av;
-            if(dolist2>0) num[1]=av;
-            if(dolist3>0) num[2]=av;
-            doWarning=true;
-        }
-        int noOfColumns=num[0]+num[1]+num[2];
-
-        //now store each column into an array [column][row]
-        String[][] list=new String[noOfColumns][maxItems];
-        int list_counter=0;
-        //loop over each list
-        for(int i=0; i<3; i++){
-            //loop over items in a list
-            int item_counter=0;
-            //only loop over columns can display for each list
-            for(int j=0; j<num[i]; j++){
-                //loop over all items for a column
-                for(int k=0; k<maxItems; k++){
-                    if(item_counter<items[i].length)
-                        list[list_counter][k]=items[i][item_counter];
-                    else
-                        list[list_counter][k]="";
-                    item_counter++;
-                }
-                //next column
-                list_counter++;
-            }
-        }
-
-        // makes outer and inner borders of table:
-        ag.setColor(borderColor);
-        ag.fillRect(window.getWidth() -noOfColumns*columnWidth - 4, legendHeight, (int)(noOfColumns*columnWidth), (int) Math.round((maxItems+0.5)*lineHeight));
-
-        //draw columns
-        for(int i=0; i<noOfColumns; i++){
-            //draw column to draw onto
-            legendHeight=startrowHeight;
-            ag.setColor(backgroundColor);
-            ag.updateColor();
-            ag.fillRect(window.getWidth() -(noOfColumns-i)*columnWidth - 4 + 2, legendHeight + 2, columnWidth - 4, (int) Math.round((maxItems+0.5)*lineHeight)-4);
-            ag.setColor(textColor);
-            ag.updateColor();
-            //draw item
-            for(int j=0; j<maxItems; j++){
-                legendHeight+=lineHeight;   
-                ag.drawString(list[i][j], window.getWidth() - (noOfColumns-i)*columnWidth + 2, legendHeight);
-            }
-        }
-
-        //output warning if too many items
-        if(doWarning){
-            legendHeight+=lineHeight;   
-            //draw under columns
-            ag.setColor(borderColor);
-            ag.updateColor();
-            ag.fillRect(window.getWidth() -90 - 4, legendHeight+4, 90, (int) Math.round(2.5*lineHeight));
-            ag.setColor(backgroundColor);
-            ag.updateColor();
-            ag.fillRect(window.getWidth() -90 - 4 + 2, legendHeight +4+ 2, 90 - 4, (int) Math.round(2.5*lineHeight)-4);
-            ag.setColor(textColor);
-            ag.updateColor();
-            legendHeight+=lineHeight;
-            ag.drawString(" more items in", window.getWidth() - 90 + 2, legendHeight+4);
-            legendHeight+=lineHeight;
-            ag.drawString("event properties", window.getWidth() - 90 + 2, legendHeight+4);
-        }
-        lineHeight=origlineHeight;//reset line height
-    }
-
-    static String[] newList(String first, String[] rest){
-        int counter = 2;//1 for title 1 for N/A if needed
-        if(rest!=null) counter+=rest.length-1;//now don't need N/A
-
-        String[] editedList=new String[counter];
-        editedList[0]=first;
-        if(rest!=null){
-            System.arraycopy(rest, 0, editedList, 1, rest.length);
-        }else{
-            editedList[1]="N/A";
-        }
-
-        return editedList;
-    }
-
-    static void drawline(AWindow window, AGraphics ag, Point2D.Double from, Point2D.Double to)
-    {
-        from=window.calculateDisplay(from);
-        to=window.calculateDisplay(to);
-        ag.drawLine( from.x,from.y,to.x,to.y);
-    }
-
-    static void drawline(AWindow window, AGraphics ag, double fromX, double fromY, double toX, double toY)
-    {
-        Point2D.Double from= new Point2D.Double(fromX,fromY);
-        Point2D.Double to= new Point2D.Double(toX,toY);
-        drawline(window, ag, from, to);
-    }
-
-    //converts from energy into eta coords
-    static void drawline(AWindow window, AGraphics ag, double fromX, double fromY, double toX, double toY, int etAxisMaximum)
-    {
-        fromY=-5-(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(fromY/etAxisMaximum)*0.9;
-        toY=-5-(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(toY/etAxisMaximum)*0.9;
-        Point2D.Double from= new Point2D.Double(fromX,fromY);
-        Point2D.Double to= new Point2D.Double(toX,toY);
-        drawline(window, ag, from, to);
-    }
-
-    static void drawstring(AWindow window, AGraphics ag, String str, double hereX, double hereY)
-    {
-        Point2D.Double here= new Point2D.Double(hereX,hereY);
-        here=window.calculateDisplay(here);
-        ag.drawString(str, here.x,here.y);
-    }
-
-    //converts from energy into eta coords
-    static void drawstring(AWindow window, AGraphics ag, String str, double hereX, double hereY, int etAxisMaximum)
-    {
-        hereY=-5-(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(hereY/etAxisMaximum)*0.9;  
-        Point2D.Double here= new Point2D.Double(hereX,hereY);
-        here=window.calculateDisplay(here);
-        ag.drawString(str, here.x,here.y);
-    }
-
-    public static void drawGrid(AWindow window, AGraphics ag, double maxEt)
-    {   	
-        ag.setStroke(new BasicStroke(legoGridWidth));  //setting grid line width 
-        int width = window.getSize().width;
-        int dpi = 72;
-        // Set a scaling font size with window width (sqrt prevents text from going too small in the small window)
-        int newFontSize = (int) Math.round(35.0 * Math.sqrt(width) / (double) dpi);
-
-        //change the font size (reset at end)
-        float originalFontSize= ag.g.getFont().getSize2D();
-        Font f = new Font("SansSerif", Font.PLAIN, newFontSize);        
-        ag.setFont(f);
-
-        // Draw the scale and labels on Et axis    
-        ag.setColor(Color.darkGray);
-        if(backgroundColor.getBlue()+backgroundColor.getGreen()+backgroundColor.getRed() < 400)
-            ag.setColor(Color.lightGray);
-        ag.updateColor();                        
-        int etAxisMaximum=(int) maxEt;//convert to int for use later on
-        int etAxisScale = 10;//seperation of ticks in ET
-        if (AProjectionLegoPlot.defaultScale ==1 )
-        {
-            etAxisScale=1;
-        }
-        else if (maxEt > 10.0)
-        {
-            //set scale to 0.1 of nearest hundred to maximum
-            etAxisScale = 10 * ((int) Math.ceil(maxEt / 100.0));
-        }
-        else if (maxEt == 10.0)
-        {
-            etAxisScale = 5;
-        }
-        else if (maxEt < 10.0)
-        {
-            etAxisScale = 2;
-        }
-        double lowPhi=-360*AProjectionLegoPlot.getxz(window.getIndex());
-        //lowPhi = 1;
-        int ticksizex = 10;
-        double ticksizey = 0.5;		
-        //Draw Et axis
-        drawline(window,ag,lowPhi,0.0,lowPhi,etAxisMaximum, etAxisMaximum);
-        //Draw the ticks
-        for(int s = etAxisMaximum-etAxisScale; s >= 0.0; s-=etAxisScale)
-        {                         
-            drawline(window,ag,lowPhi, s,lowPhi + ticksizex,s, etAxisMaximum);
-            if (AProjectionLegoPlot.defaultScale ==1 )
-                drawstring(window,ag,"10^" + Integer.toString( s + AProjectionLegoPlot.minimumofLogScale ),lowPhi + 2*ticksizex,s,etAxisMaximum);
-            else
-                drawstring(window,ag,Integer.toString( s ),lowPhi + 2*ticksizex,s,etAxisMaximum);
-        }
-        // Draw the title on Et axis
-        drawline(window,ag,lowPhi, etAxisMaximum,lowPhi + ticksizex,etAxisMaximum, etAxisMaximum);
-        if (AProjectionLegoPlot.defaultScale ==1)
-            drawstring(window,ag,"10^" + Integer.toString( etAxisMaximum + AProjectionLegoPlot.minimumofLogScale) + " ET (GeV)",lowPhi + 2*ticksizex,etAxisMaximum,etAxisMaximum);
-        else if(AProjectionLegoPlot.defaultScale ==2)
-            drawstring(window,ag,Integer.toString( etAxisMaximum ) + " ET (GeV)^1/2",lowPhi + 2*ticksizex,etAxisMaximum,etAxisMaximum);
-        else
-            drawstring(window,ag,Integer.toString( etAxisMaximum ) + " ET (GeV)",lowPhi + 2*ticksizex,etAxisMaximum,etAxisMaximum);
-
-        // Draw a grid              
-        int t = -1;
-        for (double p = 0.; p <= 1.; p += 1. / 8.)
-        {            
-            // parallel to the right side       	           
-            drawline(window, ag, 360*p+lowPhi, -5.0, 360*p, 5.0);
-            if (++t % 2 == 0)
-            {
-                // a tick
-                drawline(window,ag,360*p,5.0,360*p,5.0+ticksizey);
-                String str = new Integer(((int) (360. * p))).toString();
-                drawstring(window,ag,str,360*p-7.0,5.0+2.0*Math.sqrt(ticksizey));
-            }
-        }                      
-        //Draw the title on phi axis
-        drawstring(window,ag,AMath.PHI,0.6*360,5.0+3.0*Math.sqrt(ticksizey));
-
-        for (double e = 0.; e <= 1.; e += 1. / 10.)
-        {
-            // parallel to the bottom
-            drawline(window, ag, lowPhi*(1-e), 10.0*e-5.0, 360.0+lowPhi*(1-e), 10.0*e-5.0);
-            // a tick
-            drawline(window, ag, lowPhi*(1-e), 10.0*e-5.0, lowPhi*(1-e), 10.0*e-5.0+ticksizey);
-            String str = new Integer((int)Math.round(e*10)-5).toString();
-            if (AProjectionLegoPlot.reverse)
-                str = new Integer((int)Math.round(-e*10)+5).toString();
-            drawstring(window,ag,str,lowPhi*(1-e)-20, 10.0*e-5.0+3.0*Math.sqrt(ticksizey));
-        }
-        //Draw the title on eta axis
-        drawstring(window,ag,AMath.ETA,0.5*lowPhi-30,+5.0*Math.sqrt(ticksizey));
-
-        //reset font size
-        ag.g.setFont(ag.g.getFont().deriveFont(originalFontSize));
-    }
-
-    public static void drawJet(double et, double eta, double phi, Color color, AWindow window, AGraphics ag, double radius)
-    {    
-        ag.setStroke(new BasicStroke(legoTowersWidth)); //Setting Lego Towers Width
-        double x = (phi*360)/ AMath.TWO_PI;//x is phi converted from rad to deg
-        int numPoints = 128;//points around circumference of circle
-        double[][] hj = new double[2][numPoints];
-        double[][] vj = new double[2][numPoints];
-        int phiwrap = 0;
-        double old_jetx = -1;
-        int[] pj = new int[2];
-        pj[0] = pj[1] = 0;
-        for (int p = 0; p < numPoints; p++)
-        {
-            //add on fraction of diameter of circle in phi
-            double jetx = x + radius*36 * Math.cos(AMath.TWO_PI * p / (numPoints - 1));
-            if (jetx < 0)
-                jetx += 360;
-            if(jetx >= 360)
-                jetx -= 360;
-            if(old_jetx > 0) 
-            {
-                double jetx_diff = Math.abs(jetx - old_jetx);
-                if(jetx_diff > 360 / 2)
-                    phiwrap = (phiwrap + 1) % 2;
-            }
-            // remember the last jetx, to see if we've wrapped around next time
-            old_jetx = jetx;
-            double y = eta;
-            if (AProjectionLegoPlot.reverse)
-                y = -y;
-            //add on fraction of diameter of circle in eta
-            double jety = y + radius * Math.sin(AMath.TWO_PI * p / (numPoints - 1));
-            jetx=AProjectionLegoPlot.adjustPhi(window,jetx,jety);//move phi value due to slant of eta axis
-            Point2D.Double[] corners=window.getUserCorners();
-            if(jetx < corners[0].x || jetx > corners[1].x || jety < corners[1].y || jety > corners[2].y)
-                continue;//exits loop if not in limits of drawn plot
-            hj[phiwrap][pj[phiwrap]] = jetx;
-            vj[phiwrap][pj[phiwrap]] = jety;
-            ++pj[phiwrap];
-        }
-
-        Point2D.Double p= new Point2D.Double(0,0);
-        for(int i=0; i<pj[0]; i++)
-        {
-            p = window.calculateDisplay(hj[0][i],vj[0][i]);
-            hj[0][i]=p.x;
-            vj[0][i]=p.y;
-        }
-        p.x=0; p.y=0;
-        for(int i=0; i<pj[1]; i++)
-        {
-            p = window.calculateDisplay(hj[1][i],vj[1][i]);
-            hj[1][i]=p.x;
-            vj[1][i]=p.y;
-        }
-        Stroke origStroke = ag.getGraphics2D().getStroke();        
-        boolean drawFrames = AColorMap.drawFrames();
-        //if drawing frames this part draws the frame otherwise draws the fill
-        ag.setStroke(new BasicStroke(3));
-        if(drawFrames)
-            ag.setColor(AProjectionLegoPlot.defaultColorMap[AColorMap.BK]);
-        else    
-            ag.setColor(color);
-
-        if (pj[0] > 2)
-        {
-            ag.drawPolygon(hj[0], vj[0], pj[0]);
-        }
-        if (pj[1] > 2)
-        {
-            ag.drawPolygon(hj[1], vj[1], pj[1]);
-        }
-
-        //this part will draw the fill color inside the frame if is not black otherwise already drawn 
-        if(drawFrames && !color.equals(AProjectionLegoPlot.defaultColorMap[AColorMap.BK]))
-        {
-            ag.setStroke(new BasicStroke(1));
-            ag.setColor(color);
-
-            if (pj[0] > 2)
-            {
-                ag.drawPolygon(hj[0], vj[0], pj[0]);
-            }
-            if (pj[1] > 2)
-            {
-                ag.drawPolygon(hj[1], vj[1], pj[1]);
-            }
-        }
-
-        //reset stroke
-        ag.setStroke(origStroke);
-    }
-
-    public static void drawJetText(double et, double eta, double phi, Color color, AWindow window, AGraphics ag, double radius)
-    {
-        double x = (phi*360)/ AMath.TWO_PI;//x is phi converted from rad to deg
-        int numPoints = 128;//points around circumference of circle
-        double[][] hj = new double[2][numPoints];
-        double[][] vj = new double[2][numPoints];
-        int phiwrap = 0;
-        double old_jetx = -1;
-        int[] pj = new int[2];
-        pj[0] = pj[1] = 0;
-        for (int p = 0; p < numPoints; p++)
-        {
-            //add on fraction of diameter of circle in phi
-            double jetx = x + radius*36 * Math.cos(AMath.TWO_PI * p / (numPoints - 1));
-            if (jetx < 0)
-                jetx += 360;
-            if(jetx >= 360)
-                jetx -= 360;
-            if(old_jetx > 0) 
-            {
-                double jetx_diff = Math.abs(jetx - old_jetx);
-                if(jetx_diff > 360 / 2)
-                    phiwrap = (phiwrap + 1) % 2;
-            }
-            // remember the last jetx, to see if we've wrapped around next time
-            old_jetx = jetx;
-            double y = eta;
-            if (AProjectionLegoPlot.reverse)
-                y = -y;
-            //add on fraction of diameter of circle in eta
-            double jety = y + radius * Math.sin(AMath.TWO_PI * p / (numPoints - 1));
-            jetx=AProjectionLegoPlot.adjustPhi(window,jetx,jety);//move phi value due to slant of eta axis
-            Point2D.Double[] corners=window.getUserCorners();
-            if(jetx < corners[0].x || jetx > corners[1].x || jety < corners[1].y || jety > corners[2].y)
-                continue;//exits loop if not in limits of drawn plot
-            hj[phiwrap][pj[phiwrap]] = jetx;
-            vj[phiwrap][pj[phiwrap]] = jety;
-            ++pj[phiwrap];
-        }
-
-        Point2D.Double p= new Point2D.Double(0,0);
-        for(int i=0; i<pj[0]; i++)
-        {
-            p = window.calculateDisplay(hj[0][i],vj[0][i]);
-            hj[0][i]=p.x;
-            vj[0][i]=p.y;
-        }
-
-        //draw the jet et as text
-        String s = Double.toString(et);
-        int dot = s.indexOf('.');
-        String ss = s.substring(0, dot+0);
-        float originalFontSize= ag.g.getFont().getSize2D();
-        float newFontSize= (float) 25.;
-        ag.g.setFont(ag.g.getFont().deriveFont(newFontSize));
-        ag.g.setColor(color);
-        ag.drawString(" "+ss, hj[0][0], vj[0][0]);
-        ag.g.setFont(ag.g.getFont().deriveFont(originalFontSize));
-    }
-
-    public static void drawMissEt(AWindow window, AGraphics ag, int phi, double pt, Color color, double maxEt)
-    {
-        //color
-        ag.setColor(color);
-
-        drawBox(window, ag, phi, 0, AProjectionLegoPlot.DRAW_MET, 0, pt, maxEt, 0.5);
-
-        double phibinsize=360.0/AProjectionLegoPlot.nPhiCells;
-        double[] h = new double[4];
-        double[] v = new double[4];
-        double etaChange = 0.5;
-        for(double etaStart=-5.0; etaStart<5.0; etaStart+=2*etaChange)
-        {
-            v[0] = etaStart;
-            h[0] = AProjectionLegoPlot.adjustPhi(window,phi*phibinsize,v[0]);
-            v[1] = v[0]+etaChange;
-            h[1] = AProjectionLegoPlot.adjustPhi(window,phi*phibinsize,v[1]);
-            v[2] = v[1];
-            h[2] = h[1] + phibinsize;
-            v[3] = v[0];
-            h[3] = h[0] + phibinsize;
-            //convert to window coords
-            Point2D.Double p= new Point2D.Double(0,0);
-            for(int i=0; i<4; i++)
-            {
-                p = window.calculateDisplay(h[i],v[i]);
-                h[i]=p.x;
-                v[i]=p.y;
-            }
-            //draw
-            ag.fillPolygon(h, v, 4);
-        }
-    }
-
-    public static void drawBox(AWindow window, AGraphics ag, int phi, int eta, int colouring, double et1, double et2, double maxEt, double boxsize)
-    {
-        Color drawingColor;
-        //if colouring < 0 ->AOD object, otherwise its cells
-        switch(colouring){
-        case AProjectionLegoPlot.DRAW_MET:
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("ETMis", "Constant").getI()];
-            break;
-        case AProjectionLegoPlot.DRAW_MUON: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("Muon", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_ELECTRON: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("Electron", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_PHOTON: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("Photon", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_CLUSTER: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("Cluster", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_COMPOSITEPARTICLE: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("CompositeParticle", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_BJET: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("BJet", "Constant").getI()];
-            break;
-        case AProjectionLegoPlot.DRAW_TAUJET: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("TauJet", "Constant").getI()]; 
-            break;
-        case AProjectionLegoPlot.DRAW_JET: 
-            drawingColor=AProjectionLegoPlot.defaultColorMap[parameterStore.get("Jet", "Constant").getI()]; 
-            break;       
-        default: drawingColor=AProjectionLegoPlot.caloColorMap[colouring];
-        }
-
-        int object = -colouring;//should be positive for "objects" and negative for calo cells
-
-        //now check transparency option
-        //result is transparent if colouring is < 0
-        switch(parameterStore.get("LegoPlot", "TowerOutlines").getI()){
-        //AOD: colouring is already correct
-        case 0: break;
-        //cells: reverse so now AOD solid
-        case 1: colouring*=-1; break;
-        //both
-        case 2: colouring=-1; break;
-        //neither
-        case 3: colouring=1; break;
-        }
-        double phibinsize=360.0/AProjectionLegoPlot.nPhiCells;
-        double etabinsize=10.0/AProjectionLegoPlot.nEtaCells;
-        double x = phi*phibinsize;//x is real phi position
-        double y = eta*etabinsize-5;//y is real eta position
-        if (object>0) {phibinsize=360./64.; etabinsize=10./100.;}
-        double x1 = AProjectionLegoPlot.adjustPhi(window,x, y);//x1 is real phi position
-        double x2 = AProjectionLegoPlot.adjustPhi(window,x, y-etabinsize);//shifted x due to eta bin size
-        double[][] h = new double[3][4];
-        double[][] v = new double[3][4];
-        //adjust the values of the energies
-        et1=(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(et1/maxEt)*0.9;
-        et2=et1+(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(et2/maxEt)*0.9;
-
-        double phishift = boxsize * (phibinsize/2);     //to center towers with recpt eta-phi coordinates x1 and x2
-        double etashift = boxsize * ((etabinsize)/2);
-
-        //front
-        h[0][0] = x1 - phishift;
-        v[0][0] = y-et1 - etashift;   // (bottom front)
-        h[0][1] = x1 - phishift;
-        v[0][1] = y-et2 - etashift;
-        h[0][2] = x1 + phishift;
-        v[0][2] = y-et2 - etashift;
-        h[0][3] = x1 + phishift;
-        v[0][3] = y-et1 - etashift;
-        //top
-        h[1][0] = x2 - phishift;
-        v[1][0] = y-et2-  etashift-etashift;    //SHIFT to make top squared
-        h[1][1] = x1 - phishift;
-        v[1][1] = y-et2 - etashift;
-        h[1][2] = x1 + phishift;
-        v[1][2] = y-et2 - etashift;
-        h[1][3] = x2 + phishift;
-        v[1][3] = y-et2-  etashift-etashift;    //SHIFT to make top squared
-        //side
-        h[2][0] = x2 - (phishift);            
-        v[2][0] = y-(et2)- etashift -etashift; // top back SHIFT to make top squared
-        h[2][1] = x1 - phishift;
-        v[2][1] = y-et2 - etashift; // top front
-        h[2][2] = x1 - phishift;
-        v[2][2] = y-(et1) - etashift; // bottom front
-        h[2][3] = x2 - (phishift);          
-        v[2][3] = y-et1 -(etashift);  // bottom back
-
-
-        //convert to window coords
-        Point2D.Double p= new Point2D.Double(0,0);
-        for(int i=0; i<4; i++)
-        {
-            p = window.calculateDisplay(h[0][i],v[0][i]);
-            h[0][i]=p.x;
-            v[0][i]=p.y;
-            p.x=0; p.y=0;
-            p = window.calculateDisplay(h[1][i],v[1][i]);
-            h[1][i]=p.x;
-            v[1][i]=p.y;
-            p.x=0; p.y=0;
-            p = window.calculateDisplay(h[2][i],v[2][i]);
-            h[2][i]=p.x;
-            v[2][i]=p.y;
-        }
-        
-        //draw sides
-        ag.setColor(drawingColor);
-		if (colouring>=0) 
-			ag.fillPolygon(h[2], v[2], 4);       	
-        else if(colouring == AProjectionLegoPlot.DRAW_JET){
-        	ag.fillPolygon(h[2], v[2], 4, (float)APar.instance().get("Jet","AlphaJets").getD());    //f specifies transparency fraction
-    	}
-    	else
-    		ag.fillPolygon(h[2], v[2], 4, 0.8f);    //f specifies transparency fraction	
-            	    	  	  	  	     				
-		//colour front
-        ag.setColor(drawingColor);
-        //draw front        
-        if (colouring>=0) 
-        	ag.fillPolygon(h[0], v[0], 4);               	        	
-    	else if(colouring == AProjectionLegoPlot.DRAW_JET){
-        	ag.fillPolygon(h[0], v[0], 4, (float)APar.instance().get("Jet","AlphaJets").getD());    //f specifies transparency fraction
-        }
-        else
-        	ag.fillPolygon(h[0], v[0], 4, 0.8f);    //f specifies transparency fraction	
-            	                      
-        //colour top
-        Color ddc = drawingColor.darker().darker();
-        ag.setColor(new Color(ddc.getRed(),ddc.getGreen(),ddc.getBlue()));
-        //draw top
-        if (colouring>=0) 
-            ag.fillPolygon(h[1], v[1], 4);
-        else if(colouring == AProjectionLegoPlot.DRAW_JET){
-        	ag.fillPolygon(h[1], v[1], 4, (float)APar.instance().get("Jet","AlphaJets").getD());    //f specifies transparency fraction
-        }
-        else
-        	ag.fillPolygon(h[1], v[1], 4, 0.8f);    //f specifies transparency fraction	       	        
-
-    }    
-
-    //draw box method that can be used when not all the towers of certain object have assigned the same colour - the parameter color specifies the i color component
-    public static void drawBox(AWindow window, AGraphics ag, int phi, int eta, int colouring, Color color, double et1, double et2, double maxEt, double boxsize)
-    { 
-        Color drawingColor;
-        switch(colouring){
-        case AProjectionLegoPlot.DRAW_MET:        
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_MUON:         
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_ELECTRON:         
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_PHOTON:         
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_CLUSTER: 
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_COMPOSITEPARTICLE: 
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_BJET:         
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_TAUJET:         
-            drawingColor= color;
-            break;
-        case AProjectionLegoPlot.DRAW_JET:         
-            drawingColor= color;
-            break;
-        default: drawingColor=AProjectionLegoPlot.caloColorMap[colouring];
-        }
-
-        int object = -colouring;//should be positive for "objects" and negative for calo cells
-
-        //now check transparency option
-        //result is transparent if colouring is < 0
-        switch(parameterStore.get("LegoPlot", "TowerOutlines").getI()){
-        //AOD: colouring is already correct
-        case 0: break;
-        //cells: reverse so now AOD solid
-        case 1: colouring*=-1; break;
-        //both
-        case 2: colouring=-1; break;
-        //neither
-        case 3: colouring=1; break;
-        }
-        double phibinsize=360.0/AProjectionLegoPlot.nPhiCells;
-        double etabinsize=10.0/AProjectionLegoPlot.nEtaCells;
-        double x = phi*phibinsize;//x is real phi position
-        double y = eta*etabinsize-5;//y is real eta position
-        if (object>0) {phibinsize=360./64.; etabinsize=10./100.;}
-        double x1 = AProjectionLegoPlot.adjustPhi(window,x, y);//x1 is real phi position
-        double x2 = AProjectionLegoPlot.adjustPhi(window,x, y-etabinsize);//shifted x due to eta bin size
-        double[][] h = new double[3][4];
-        double[][] v = new double[3][4];
-        //adjust the values of the energies
-        et1=(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(et1/maxEt)*0.9;
-        et2=et1+(1-AProjectionLegoPlot.getyz(window.getIndex()))*50*(et2/maxEt)*0.9;
-
-        double phishift = boxsize * (phibinsize/2);     //to center towers with recpt eta-phi coordinates x1 and x2
-        double etashift = boxsize * ((etabinsize)/2);
-
-        //front
-        h[0][0] = x1 - phishift;
-        v[0][0] = y-et1 - etashift;   // (bottom front)
-        h[0][1] = x1 - phishift;
-        v[0][1] = y-et2 - etashift;
-        h[0][2] = x1 + phishift;
-        v[0][2] = y-et2 - etashift;
-        h[0][3] = x1 + phishift;
-        v[0][3] = y-et1 - etashift;
-        //top
-        h[1][0] = x2 - phishift;
-        v[1][0] = y-et2-  etashift-etashift;    //SHIFT to make top squared
-        h[1][1] = x1 - phishift;
-        v[1][1] = y-et2 - etashift;
-        h[1][2] = x1 + phishift;
-        v[1][2] = y-et2 - etashift;
-        h[1][3] = x2 + phishift;
-        v[1][3] = y-et2-  etashift-etashift;    //SHIFT to make top squared
-        //side
-        h[2][0] = x2 - (phishift);            
-        v[2][0] = y-(et2)- etashift -etashift; // top back SHIFT to make top squared
-        h[2][1] = x1 - phishift;
-        v[2][1] = y-et2 - etashift; // top front
-        h[2][2] = x1 - phishift;
-        v[2][2] = y-(et1) - etashift; // bottom front
-        h[2][3] = x2 - (phishift);          
-        v[2][3] = y-et1 -(etashift);  // bottom back
-
-        //convert to window coords
-        Point2D.Double p= new Point2D.Double(0,0);
-        for(int i=0; i<4; i++)
-        {
-            p = window.calculateDisplay(h[0][i],v[0][i]);
-            h[0][i]=p.x;
-            v[0][i]=p.y;
-            p.x=0; p.y=0;
-            p = window.calculateDisplay(h[1][i],v[1][i]);
-            h[1][i]=p.x;
-            v[1][i]=p.y;
-            p.x=0; p.y=0;
-            p = window.calculateDisplay(h[2][i],v[2][i]);
-            h[2][i]=p.x;
-            v[2][i]=p.y;
-        }
-
-		//draw sides
-		ag.setColor(drawingColor);
-		if (colouring>=0) 
-			ag.fillPolygon(h[2], v[2], 4);       	
-		else if(colouring == AProjectionLegoPlot.DRAW_JET){       	
-	    	ag.fillPolygon(h[2], v[2], 4, (float)APar.instance().get("Jet","AlphaJets").getD());    
-	    }else if (colouring == AProjectionLegoPlot.DRAW_BJET) {
-	       	ag.fillPolygon(h[2], v[2], 4, 0.4f);    
-	    }else
-	    	ag.fillPolygon(h[2], v[2], 4, 0.8f);    //f specifies transparency fraction	
-		    	    	  	  	  	     				
-		//colour front
-		ag.setColor(drawingColor);
-		//draw front        
-		if (colouring>=0) 
-			ag.fillPolygon(h[0], v[0], 4);
-		else if(colouring == AProjectionLegoPlot.DRAW_JET){      	
-		    ag.fillPolygon(h[0], v[0], 4, (float)APar.instance().get("Jet","AlphaJets").getD());
-		}else if(colouring == AProjectionLegoPlot.DRAW_BJET) {
-		    ag.fillPolygon(h[0], v[0], 4, 0.4f);    
-		}else
-		    ag.fillPolygon(h[0], v[0], 4, 0.8f);    //f specifies transparency fraction	
-		    	                      
-		//colour top
-		Color ddc = drawingColor.darker().darker();
-		ag.setColor(new Color(ddc.getRed(),ddc.getGreen(),ddc.getBlue()));
-		//draw top
-		if (colouring>=0) 
-			ag.fillPolygon(h[1], v[1], 4);
-		else if(colouring == AProjectionLegoPlot.DRAW_JET){   		
-			ag.fillPolygon(h[1], v[1], 4, (float)APar.instance().get("Jet","AlphaJets").getD());    //f specifies transparency fraction
-		}else  if(colouring == AProjectionLegoPlot.DRAW_BJET) {
-			ag.fillPolygon(h[1], v[1], 4, 0.4f);    //f specifies transparency fraction
-		}
-		else
-			ag.fillPolygon(h[1], v[1], 4, 0.8f);    //f specifies transparency fraction	       	        
-	}    
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/APickingGraphics2D.java b/graphics/AtlantisJava/src/atlantis/graphics/APickingGraphics2D.java
deleted file mode 100755
index 9757b84ccdd1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/APickingGraphics2D.java
+++ /dev/null
@@ -1,432 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.Graphics;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.geom.PathIterator;
-import java.util.ArrayList;
-
-import javax.swing.JPopupMenu;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.event.AData;
-import atlantis.data.ATrackData;
-import atlantis.data.ATrackResidualData;
-import atlantis.list.AList;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjectionTrackResidual;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.ALogger;
-
-/**
- * A very limited PostScript graphics context for output of Atlantis functions
- * Any call to a none implemented will throw an exception
- */
-
-public class APickingGraphics2D extends ATemplateGraphics2D
-{
-    private static ALogger logger = ALogger.getLogger(APickingGraphics2D.class);
-    
-    public final static int PICK_HITS_AND_TRACKS = 0;
-    public final static int PICK_DETECTORS = 1;
-    public final static int MOVE = 2;
-    public final static int PICK_RESIDUAL = 3;
-
-    public static int mode;
-
-    static AData pickedData = null;
-    static ATrackResidualData pickedResidual = null;
-    static ArrayList pickedDetectors;
-    static int pickedIndex;
-
-    public static Point pickedPoint;
-    static double minDist;
-    public static double pickedH;
-    public static double pickedV;
-
-    private static JPopupMenu residualPopupMenu;
-    private static final String SHOW_RESIDUALS_X = "Show Residual X";
-    private static final String SHOW_PULLS_X = "Show Pull X";
-
-    static
-    {
-        residualPopupMenu = new JPopupMenu();
-        ActionListener residualPopupActionListener =
-            new APickingGraphics2D.ResidualPopupMenuActionListener();
-        residualPopupMenu.add(SHOW_RESIDUALS_X).addActionListener(residualPopupActionListener);
-        residualPopupMenu.add(SHOW_PULLS_X).addActionListener(residualPopupActionListener);
-    }
-
-    static class ResidualPopupMenuActionListener implements ActionListener
-    {
-        public void actionPerformed(ActionEvent e)
-        {
-            String action = e.getActionCommand();
-
-            // Use window "B" to show track residual
-            String residualWindowName = "B";
-            if(ACanvas.getCanvas().isValidWindowName(residualWindowName))
-            {
-                AWindow residualWindow = ACanvas.getCanvas().getWindow(residualWindowName);
-                AProjectionTrackResidual residualProj =
-                    (AProjectionTrackResidual) AProjectionsManager.getProjection("TrackResidual");
-                if (action.equals(SHOW_RESIDUALS_X))
-                    residualProj.setResidualType(ATrackResidualData.RESIDUAL_X);
-                else if (action.equals(SHOW_PULLS_X))
-                    residualProj.setResidualType(ATrackResidualData.PULL_X);
-
-                // when this action is activated, the pickedData must be a track
-                ATrackData trackData = (ATrackData) pickedData;
-                residualProj.setResidual(trackData.getTrackResidual(pickedIndex));
-                ACanvas.getCanvas().moveToFrontWindow(residualWindowName);
-                residualWindow.setProjection(residualProj);
-            }
-            else
-                AOutput.append("\nWindow " + residualWindowName + " is not available in current layout"
-                        + "\n", ALogInterface.WARNING);
-        }
-    }
-
-    public APickingGraphics2D(Rectangle bounds, int m, Point p)
-    {
-        super(bounds);
-        mode = m;
-        pickedPoint = p;
-        minDist = 10000000.;
-        if (mode != MOVE)
-        {
-            pickedData = null;
-            pickedIndex = -1;
-        }
-        if (pickedDetectors == null)
-        {
-            pickedDetectors = new ArrayList();
-        }
-        else
-        {
-            pickedDetectors.clear();
-        }
-    }
-
-    APickingGraphics2D(APickingGraphics2D a)
-    {
-        super(a);
-    }
-
-    public Graphics create()
-    {
-        return new APickingGraphics2D(this);
-    }
-
-    public void drawLine(double h0, double v0, double h1, double v1)
-    {
-        if (mode == PICK_DETECTORS)
-            return;
-        if (AGraphics.currentData == null)
-            return;
-        if (mode == MOVE &&
-                !(AGraphics.currentData == pickedData && AGraphics.currentIndex == pickedIndex))
-            return;
-        double hPicked = pickedPoint.getX();
-        double vPicked = pickedPoint.getY();
-        // treat first two endpoints
-        double delH = h0 - hPicked;
-        double delV = v0 - vPicked;
-        double dist = delH * delH + delV * delV;
-
-        if (dist < minDist)
-        {
-            minDist = dist;
-            setPicked(h0, v0);
-        }
-        delH = h1 - hPicked;
-        delV = v1 - vPicked;
-        dist = delH * delH + delV * delV;
-        if (dist < minDist)
-        {
-            minDist = dist;
-            setPicked(h1, v1);
-        }
-        // now treat point within line being closest
-        double h10 = h1 - h0;
-        double v10 = v1 - v0;
-        double hp0 = hPicked - h0;
-        double vp0 = vPicked - v0;
-        double size = h10 * h10 + v10 * v10;
-
-        if (size > 0.0)
-        {
-            double u = (h10 * hp0 + v10 * vp0) / size;
-
-            if (u > 0. && u < 1.)
-            {
-                double hClosest = h0 + u * h10;
-                double vClosest = v0 + u * v10;
-
-                delH = hClosest - hPicked;
-                delV = vClosest - vPicked;
-                dist = delH * delH + delV * delV;
-                if (dist < minDist)
-                {
-                    minDist = dist;
-                    setPicked(hClosest, vClosest);
-                }
-            }
-        }
-    }
-
-    public void fillRect(int h, int v, int width, int height)
-    {
-        if (mode == PICK_DETECTORS && AGraphics.currentDetector != null)
-        {
-            // Collect the different detector names.
-            String info = AGraphics.currentDetector.getInfo(AGraphics.currentIndex);
-            if (!pickedDetectors.contains(info))
-            {
-                pickedDetectors.add(info);
-            }
-        }
-        double dh = width / 2.;
-        double dv = height / 2.;
-        drawLine(h - dh, v - dv, h + dh, v - dv);
-        drawLine(h + dh, v - dv, h + dh, v + dv);
-        drawLine(h + dh, v + dv, h - dh, v + dv);
-        drawLine(h - dh, v + dv, h - dh, v - dv);
-    }
-
-    public void draw(Shape s)
-    {
-        PathIterator path = s.getPathIterator(null);
-        double[] coords = new double[6];
-        double h0 = 0.;
-        double v0 = 0.;
-        double h1 = 0.;
-        double v1 = 0.;
-        double hInit = 0.;
-        double vInit = 0.;
-        while (!path.isDone())
-        {
-            int segType = path.currentSegment(coords);
-
-            switch (segType)
-            {
-                case PathIterator.SEG_MOVETO:
-                    h0 = coords[0];
-                    v0 = coords[1];
-                    hInit = h0;
-                    vInit = v0;
-                    break;
-
-                case PathIterator.SEG_LINETO:
-                case PathIterator.SEG_CUBICTO:
-                    h1 = coords[0];
-                    v1 = coords[1];
-                    drawLine(h0, v0, h1, v1);
-                    h0 = h1;
-                    v0 = v1;
-                    break;
-
-                case PathIterator.SEG_CLOSE:
-                    drawLine(h0, v0, hInit, vInit);
-                    break;
-
-                default:
-                    logger.error(" Error unknown segment type");
-                    break;
-            }
-            path.next();
-        }
-    }
-
-    public void fill(Shape s)
-    {
-        if (mode == PICK_DETECTORS && AGraphics.currentDetector != null)
-        {
-            double[][] hv = getPolygon(s);
-            if (AGraphics.isPointInside(hv[0], hv[1], hv[0].length, pickedPoint.getX(), pickedPoint.getY()))
-            {
-                // Collect the different detector names.
-                String info = AGraphics.currentDetector.getInfo(AGraphics.currentIndex);
-                if (!pickedDetectors.contains(info))
-                {
-                    pickedDetectors.add(info);
-                }
-            }
-        }
-        else
-        {
-            draw(s);
-        }
-    }
-
-    public double[][] getPolygon(Shape s)
-    {
-        double[] coords = new double[6];
-
-        int numPoints = 0;
-        PathIterator path = s.getPathIterator(null);
-        while (!path.isDone())
-        {
-            int segType = path.currentSegment(coords);
-            switch (segType)
-            {
-                case PathIterator.SEG_MOVETO:
-                    numPoints++;
-                    break;
-
-                case PathIterator.SEG_LINETO:
-                case PathIterator.SEG_CUBICTO:
-                    numPoints++;
-                    break;
-
-                case PathIterator.SEG_CLOSE:
-                    // numPoints++;
-                    break;
-
-                default:
-                    break;
-            }
-            path.next();
-        }
-        double[][] hv = new double[2][numPoints];
-        numPoints = 0;
-        path = s.getPathIterator(null);
-        while (!path.isDone())
-        {
-            int segType = path.currentSegment(coords);
-
-            switch (segType)
-            {
-                case PathIterator.SEG_MOVETO:
-                    hv[0][numPoints] = coords[0];
-                    hv[1][numPoints] = coords[1];
-                    numPoints++;
-                    break;
-
-                case PathIterator.SEG_LINETO:
-                case PathIterator.SEG_CUBICTO:
-                    hv[0][numPoints] = coords[0];
-                    hv[1][numPoints] = coords[1];
-                    numPoints++;
-                    break;
-
-                case PathIterator.SEG_CLOSE:
-                    // drawLine(h0,v0,hInit,vInit);
-                    break;
-
-                default:
-                    logger.error(" Error unknown segment type");
-                    break;
-            }
-            path.next();
-        }
-        return hv;
-    }
-
-    private static void setPicked(double h, double v)
-    {
-        pickedData = AGraphics.currentData;
-        pickedIndex = AGraphics.currentIndex;
-        pickedH = h;
-        pickedV = v;
-    }
-
-    public static AData getPickedData()
-    {
-        return pickedData;
-
-    } // getPickedData()
-
-    public static ATrackResidualData getPickedResidual()
-    {
-        return pickedResidual;
-    }
-
-    public static int getPickedH()
-    {
-        return (int) Math.rint(pickedH);
-    }
-
-    public static int getPickedV()
-    {
-        return (int) Math.rint(pickedV);
-    }
-
-    public static AList getPickedHit()
-    {
-        if (pickedData != null)
-            return new AList(pickedData, pickedIndex);
-        else
-            return null;
-    }
-
-    public static Integer getPickedHitIndex()
-    {
-        if (pickedData != null)
-        {
-            return new Integer(pickedIndex);
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    public static void setPicked(AData data, int index)
-    {
-        pickedData = data;
-        pickedIndex = index;
-    }
-
-    public static void setPicked(ATrackResidualData data)
-    {
-        pickedResidual = data;
-    }
-
-    public static void printPicked()
-    {
-        if(mode == APickingGraphics2D.PICK_RESIDUAL)
-        {
-            AOutput.alwaysAppend("\n\n" + pickedResidual.getHitInfo(), ALogInterface.PICK);
-            mode = APickingGraphics2D.PICK_HITS_AND_TRACKS;
-        }
-        else
-        {
-            if (pickedData != null)
-            {
-                AOutput.alwaysAppend("\n\n" + pickedData.getHitInfo(pickedIndex), ALogInterface.PICK);
-            }
-            else if (pickedDetectors != null && pickedDetectors.size() > 0)
-            {
-                AOutput.alwaysAppend("\n\nYou are inside:\n", ALogInterface.PICK);
-                for (int i = 0; i < pickedDetectors.size(); i++)
-                {
-                    AOutput.alwaysAppend(" " + pickedDetectors.get(i) + "\n", ALogInterface.PICK);
-                }
-            }
-        }
-    }
-
-    /**
-     * Method is called after pick+n (navigate = show data associations)
-     */
-    public static void navigatePicked()
-    {
-        if(pickedData != null)
-        {
-            String navigateInfo = pickedData.navigate(pickedIndex);
-            AOutput.alwaysAppend("\n" + navigateInfo + "\n", ALogInterface.PICK);
-        }
-    }
-
-    public static void showTrackResiduals(AWindow window, int x, int y)
-    {
-        APickingGraphics2D.residualPopupMenu.show(window, x, y);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/APixelGraphics.java b/graphics/AtlantisJava/src/atlantis/graphics/APixelGraphics.java
deleted file mode 100755
index 44a5136d93c1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/APixelGraphics.java
+++ /dev/null
@@ -1,304 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.geom.GeneralPath;
-
-/**
- * This graphics is used for drawing on the screen and making pixel based
- * images. In the end all drawing is done in pixels(integers). Picking is
- * implemented here. Provide high quality pixel based drawing of thin frames
- * around lines and areas, in the method draw.
- */
-// When drawing borders could speed things up by only drawing what is needed
-public class APixelGraphics extends AGraphics
-{
-    APixelGraphics(Graphics g)
-    {
-        super(g);
-    }
-
-    public void setLineWidth(int lineWidth)
-    {}
-
-    public void drawLine(double h0, double v0, double h1, double v1)
-    {
-        if (clipper.isLineWithin(h0, v0, h1, v1))
-        {
-            double[][] hvClipped = clipper.getHV();
-            double h0Clipped = hvClipped[0][0];
-            double v0Clipped = hvClipped[1][0];
-            double h1Clipped = hvClipped[0][1];
-            double v1Clipped = hvClipped[1][1];
-            if (lineWidth == 1)
-            {
-                updateColor();
-                g.drawLine((int) h0Clipped, (int) v0Clipped, (int) h1Clipped, (int) v1Clipped);
-            }
-            else
-            {
-                drawThickLine(h0Clipped, v0Clipped, h1Clipped, v1Clipped);
-            }
-        }
-
-    } // drawLine()
-    
-    private void drawThickLine(double h0, double v0, double h1, double v1)
-    {
-        // Drawing thick line this way is quicker than using setLine width
-        // correct for Postscipt
-        // pretty good for pixel device (assume java line drawing is Bresenhams
-        // or similar)
-        double h = Math.abs(h1 - h0);
-        double v = Math.abs(v1 - v0);
-
-        for (int i = 0; i < lineWidth; ++i)
-        {
-            // 101/50 to avoid rounding toward 0 problem
-            int d = i + (101 - lineWidth) / 2 - 50;
-
-            int h0new = (int) h0;
-            int v0new = (int) v0;
-            int h1new = (int) h1;
-            int v1new = (int) v1;
-
-            if (h > v)
-            {
-                v0new += d;
-                v1new += d;
-            }
-            else
-            {
-                h0new += d;
-                h1new += d;
-            }
-
-            // Caution!!!
-            // When point (h0, v0) or (h1, v1) is close to the border of the
-            // drawing area, after +/- d, the (h0new, v0new) or (h1new, v1new) 
-            // might beyond the valid value range, which will cause an 
-            // IndexArrayOutOfBound error thrown from g.drawLine method.
-            if(clipper.isLineWithin(h0new, v0new, h1new, v1new))
-            {
-                updateColor();
-                h0new = (int) clipper.getH0();
-                v0new = (int) clipper.getV0();
-                h1new = (int) clipper.getH1();
-                v1new = (int) clipper.getV1();
-                g.drawLine(h0new, v0new, h1new, v1new);
-            }
-        }
-    }
-
-    public void drawSmoothLine(double h0, double v0, double ch0, double cv0,
-            double ch1, double cv1, double h1, double v1)
-    {        
-        GeneralPath curve = new GeneralPath();
-        for (int i=0; i<lineWidth; ++i) {
-            // 101/50 to avoid rounding toward 0 problem
-            int d = i + (101 - lineWidth) / 2 - 50;
-            float dh, dv;
-            
-            if (Math.abs(h1 - h0) > Math.abs(v1 - v0)) {
-                dh = 0;
-                dv = d;
-            } else {
-                dh = d;
-                dv = 0;
-            }
-            
-            curve.moveTo((float)h0+dh, (float)v0+dv);
-            curve.curveTo((float)ch0+dh, (float)cv0+dv, (float)ch1+dh, (float)cv1+dv, (float)h1+dh, (float)v1+dv);
-        }
-        updateColor();
-        g.draw(curve);
-    }
-
-    protected void fillRect(double h, double v, int width, int height)
-    {
-        updateColor();
-        g.fillRect((int) (h - width / 2.), (int) (v - height / 2.), width, height);
-    }
-
-    @Override
-    protected void fillOval(double h, double v, int width, int height) {
-        
-        g.fillOval((int) (h - width / 2.), (int) (v - height / 2.), width, height);
-        g.drawOval((int) (h - width / 2.), (int) (v - height / 2.), width, height);
-    }
-    
-    public void drawPolygon(double[] h, double[] v, int numPoints)
-    {
-        int type = getContainmentType(h, v, numPoints, POLYGON);
-
-        if (type == FULLY_INSIDE || type == INTERSECTS)
-        {
-            for (int i = 0; i < numPoints - 1; ++i)
-            {
-                drawLine(h[i], v[i], h[i + 1], v[i + 1]);
-            }
-            if (numPoints > 1)
-            {
-                drawLine(h[numPoints - 1], v[numPoints - 1], h[0], v[0]);
-            }
-        }
-    } // drawPolygon()
-
-    public void drawPolyline(double[] h, double[] v, int numPoints)
-    {
-        int type = getContainmentType(h, v, numPoints, POLYLINE);
-        if (type == FULLY_INSIDE || type == INTERSECTS)
-        {
-            // Some code here to simplify polylines by only drawing segments
-            // at least 1 pixel long, speeds up the ellipses for recvertices
-            // quite a lot since they're often very small but have thousands
-            // of line segments - AD
-            double lasth = 0.0;
-            double lastv = 0.0;
-            
-            for (int i = 0; i < numPoints - 1; ++i) {
-                if (i == 0) {
-                    // Always draw something
-                    lasth = h[1];
-                    lastv = v[1];
-                    drawLine(h[0], v[0], h[1], v[1]);
-                }
-               
-                double diffh = h[i+1] - lasth;
-                double diffv = v[i+1] - lastv;
-                
-                if ((diffh*diffh + diffv*diffv) > 1.0) {
-                    drawLine(lasth, lastv, h[i + 1], v[i + 1]);
-                    lasth = h[i+1];
-                    lastv = v[i+1];
-                }
-            }
-        }
-    } // drawPolyline()
-
-    public void drawDottedPolyline(double[] h, double[] v, int numPoints)
-    {
-        int type = getContainmentType(h, v, numPoints, POLYLINE);
-        if (type == FULLY_INSIDE || type == INTERSECTS)
-        {
-            for (int i = 0; i < numPoints - 1; i += 2)
-                drawLine(h[i], v[i], h[i + 1], v[i + 1]);
-        }
-    } // drawDottedPolyline()
-
-    public void drawSmoothPolyline(double[] h0, double[] v0, int numPoints0) {
-        
-        // For curves having less than 3 points and for picking use the normal polyline.
-        if (numPoints0 < 3 || g instanceof APickingGraphics2D) {
-            drawPolyline(h0, v0, numPoints0);
-            return;
-        }
-
-        int type = getContainmentType(h0, v0, numPoints0, POLYLINE);
-        if (type == FULLY_INSIDE || type == INTERSECTS) {
-
-            int numPoints = 3 * numPoints0 - 2;
-
-            // Add the control points to the array, at 1/3 and 2/3
-            // between the already existing points.
-            float[] h = new float[numPoints];
-            float[] v = new float[numPoints];
-            for (int i=0; i<numPoints; i++) {
-
-                switch (i%3) {
-                    case 0:
-                        // One of the fixed points.
-                        h[i] = (float)h0[i/3];
-                        v[i] = (float)v0[i/3];
-                        break;
-                    case 1:
-                        // First control point.
-                        h[i] = (float)(2./3. * h0[i/3] + 1./3. * h0[i/3+1]);
-                        v[i] = (float)(2./3. * v0[i/3] + 1./3. * v0[i/3+1]);
-                        break;
-                    case 2:
-                        // Second control point.
-                        h[i] = (float)(1./3. * h0[i/3] + 2./3. * h0[i/3+1]);
-                        v[i] = (float)(1./3. * v0[i/3] + 2./3. * v0[i/3+1]);
-                        break;
-                }
-            }
-
-            // Now we have a normal polyline (straight line segments between fixed points),
-            // but as a cubic Bezier curve. All we need to do to make it smooth is to move
-            // the control points away from the curve, in such a way that [control point 2] -
-            // [fixed point] - [control point 1] is a straight line for every fixed point.
-            // We do this by averaging the angles of the line segments on either side of a
-            // fixed point.
-            for (int i=3; i<numPoints-2; i+=3) {
-                double lenLeft = Math.sqrt(Math.pow(h[i]-h[i-1], 2) + Math.pow(v[i]-v[i-1], 2));
-                double lenRight = Math.sqrt(Math.pow(h[i+1]-h[i], 2) + Math.pow(v[i+1]-v[i], 2));
-
-                // Without length we cannot define an angle, so skip the point.
-                if (lenLeft < 1e-6 || lenRight < 1e-6) continue;
-
-                double phiLeft = Math.atan2(v[i]-v[i-1], h[i]-h[i-1]);
-                double phiRight = Math.atan2(v[i+1]-v[i], h[i+1]-h[i]);
-
-                if (phiLeft-phiRight > Math.PI) {
-                    phiRight += 2.*Math.PI;
-                } else if (phiRight-phiLeft > Math.PI) {
-                    phiLeft += 2.*Math.PI;
-                }
-
-                if (Math.abs(phiLeft-phiRight) > Math.PI/2.) {
-                    // The line turns more than 90 degrees, this is wrong. Move the control points
-                    // back in so they are the same as the point on the line. This disables the smooth
-                    // curve locally, reverting to a normal connect-the-dots polyline.
-                    h[i-1] = h[i+1] = h[i];
-                    v[i-1] = v[i+1] = v[i];
-                } else {
-                    // Calculate the desired angle for the tangent by weighting the angle on each side,
-                    // the weight is inverse proportional to the distance to the next point.
-                    double phi = (lenRight*phiLeft + lenLeft*phiRight) / (lenLeft+lenRight);
-
-                    h[i-1] = h[i] - (float)(lenLeft*Math.cos(phi));
-                    v[i-1] = v[i] - (float)(lenLeft*Math.sin(phi));
-                    h[i+1] = h[i] + (float)(lenRight*Math.cos(phi));
-                    v[i+1] = v[i] + (float)(lenRight*Math.sin(phi));
-                }
-            }
-
-            for (int i=0; i<numPoints-1; i+=3) {
-                drawSmoothLine(h[i], v[i], h[i+1], v[i+1], h[i+2], v[i+2], h[i+3], v[i+3]);
-            }
-        }
-    }
-    
-    public void fillPolygon(double[] h, double[] v, int numPoints)
-    {
-        int type = getContainmentType(h, v, numPoints, POLYGON);
-        if (type == FULLY_INSIDE || type == INTERSECTS)
-        {
-            if (type == INTERSECTS)
-            {
-                ACoord clipped = clipper.clipPolygon(h, v, numPoints);
-                h = clipped.hv[0][0];
-                v = clipped.hv[1][0];
-                numPoints = h.length;
-            }
-            int[] hInt = new int[numPoints];
-            int[] vInt = new int[numPoints];
-            for (int i = 0; i < numPoints; ++i)
-            {
-                hInt[i] = (int) h[i];
-                vInt[i] = (int) v[i];
-            }
-            updateColor();
-            g.fillPolygon(hInt, vInt, numPoints);
-            drawPolygon(h, v, numPoints);
-        }
-        else if (type == CONTAINS)
-        {
-            Rectangle bounds = g.getClipBounds();
-            updateColor();
-            g.fillRect((int) Math.rint(bounds.getX()), (int) Math.rint(bounds.getY()), (int) Math.rint(bounds.getWidth()), (int) Math.rint(bounds.getHeight()));
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/ATemplateGraphics2D.java b/graphics/AtlantisJava/src/atlantis/graphics/ATemplateGraphics2D.java
deleted file mode 100755
index 12dcf005ccc4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/ATemplateGraphics2D.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.*;
-
-/**
- * A very limited template graphics which implements the default behaviour
- * of the clip region.
- */
-
-public abstract class ATemplateGraphics2D extends ADummyGraphics2D {
-
-  private Rectangle currentClip;
-  private Rectangle imageBounds;
-
-  public ATemplateGraphics2D(Rectangle bounds) {
-    currentClip=new Rectangle(bounds);
-    imageBounds=new Rectangle(bounds);
-  }
-
-  protected ATemplateGraphics2D(ATemplateGraphics2D parent) {
-    currentClip=new Rectangle(parent.currentClip);
-    imageBounds=new Rectangle(parent.imageBounds);
-  }
-
-  public abstract Graphics create();
-
-  public Rectangle getClipBounds() {
-    return new Rectangle(currentClip);
-  }
-
-  public void setClip(int x, int y, int width, int height) {
-    currentClip=new Rectangle(x, y, width, height);
-  }
-
-  public void clipRect(int x, int y, int width, int height) {
-    currentClip=currentClip.intersection(new Rectangle(x, y, width, height));
-  }
-
-  public void translate(int x, int y) {
-    translate((double)x, (double)y);
-  }
-
-  public void translate(double x, double y) {
-    currentClip.setLocation((int)Math.round(currentClip.x-x), (int)Math.round(currentClip.y-y));
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/AVectorGraphics.java b/graphics/AtlantisJava/src/atlantis/graphics/AVectorGraphics.java
deleted file mode 100755
index 058f8c075aa0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/AVectorGraphics.java
+++ /dev/null
@@ -1,309 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.*;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.GeneralPath;
-
-/**
- * Used when drawing to postscript
- */
-public class AVectorGraphics extends AGraphics {
-  
-  private GeneralPath path=new GeneralPath();
-  
-  AVectorGraphics(Graphics g) {
-    super(g);
-  }
-  
-  public void setLineWidth(int lineWidth) {
-    setStroke(new BasicStroke(lineWidth));
-  }
-  
-  public void drawLine(int h0, int v0, int h1, int v1) {
-    drawLine((double)h0, (double)v0, (double)h1, (double)v1);
-  }
-
-  public void drawLine(double h0, double v0, double h1, double v1) {
-    if(clipper.isLineWithin(h0, v0, h1, v1)) {
-      double[][] hvClipped=clipper.getHV();
-      double h0Clipped=hvClipped[0][0];
-      double v0Clipped=hvClipped[1][0];
-      double h1Clipped=hvClipped[0][1];
-      double v1Clipped=hvClipped[1][1];
-      
-      path.reset();
-      path.moveTo((float)h0Clipped, (float)v0Clipped);
-      path.lineTo((float)h1Clipped, (float)v1Clipped);
-      updateColor();
-      g.draw(path);
-    }
-  }
-  
-  protected void fillRect(double h, double v, int width, int height) {
-    path.reset();
-    float h0=(float)h;
-    float v0=(float)v;
-    float dh=(float)(width/2.);
-    float dv=(float)(height/2.);
-    
-    path.moveTo(h0-dh, v0-dv);
-    path.lineTo(h0+dh, v0-dv);
-    path.lineTo(h0+dh, v0+dv);
-    path.lineTo(h0-dh, v0+dv);
-    path.closePath();
-    updateColor();
-    g.fill(path);
-  }
-  
-  protected void fillOval(double h, double v, int width, int height) {
-      
-    Ellipse2D oval = new Ellipse2D.Float((float)(h-width/2.), (float)(v-height/2.), width, height);
-    updateColor();
-    g.fill(oval);
-  }
-  
-  public void drawPolygon(double[] h, double[] v, int numPoints) {
-    
-    int type=getContainmentType(h, v, numPoints, POLYGON);
-    if(type==FULLY_INSIDE||type==INTERSECTS) {
-      if(type==INTERSECTS) {
-        ACoord clipped=clipper.clipPolygon(h, v, numPoints);
-        h=clipped.hv[0][0];
-        v=clipped.hv[1][0];
-        numPoints=h.length;
-      }
-      
-      path.reset();
-      for(int i=0; i<numPoints; ++i) {
-        if(i==0)
-          path.moveTo((float)h[i], (float)v[i]);
-        else
-          path.lineTo((float)h[i], (float)v[i]);
-      }
-      if(numPoints>0) {
-        path.closePath();
-        updateColor();
-        g.draw(path);
-      }
-    }
-  }
-  
-  public void drawPolyline(double[] h, double[] v, int numPoints) {
-    int type=getContainmentType(h, v, numPoints, POLYLINE);
-    if(type==FULLY_INSIDE||type==INTERSECTS) {
-      int start=0;
-      int end=numPoints-1;
-      
-      if(type==INTERSECTS) {
-        // clip polylines if there is only one interval
-        for(int i=0; i<numPoints-1; i++) {
-          if(clipper.isLineWithin(h[i], v[i], h[i+1], v[i+1])) {
-            start=i;
-            break;
-          }
-        }
-        for(int i=numPoints-1; i>start; i--) {
-          if(clipper.isLineWithin(h[i], v[i], h[i-1], v[i-1])) {
-            end=i;
-            break;
-          }
-        }
-        for(int i=start; i<end; i++) {
-          if(!clipper.isLineWithin(h[i], v[i], h[i+1], v[i+1])) {
-            start=0;
-            end=numPoints-1;
-            break;
-          }
-        }
-      }
-      
-      /*
-       if (type == INTERSECTS) {
-       ACoord clipped = clipper.clipPolygon(h, v, numPoints);
-       h = clipped.hv[0][0];
-       v = clipped.hv[1][0];
-       numPoints = h.length;
-       }
-       */
-      
-      path.reset();
-      for(int i=start; i<=end; ++i) {
-        if(i==start)
-          path.moveTo((float)h[i], (float)v[i]);
-        else
-          path.lineTo((float)h[i], (float)v[i]);
-      }
-      if(end-start>0) {
-        updateColor();
-        g.draw(path);
-      }
-    }
-  }
-  
-  // very similar with drawPolyline, but draw a dotted instead
-  public void drawDottedPolyline(double[] h, double[] v, int numPoints) {
-    int type=getContainmentType(h, v, numPoints, POLYLINE);
-    if(type==FULLY_INSIDE||type==INTERSECTS) {
-      int start=0;
-      int end=numPoints-1;
-      
-      if(type==INTERSECTS) {
-        // clip polylines if there is only one interval
-        for(int i=0; i<numPoints-1; i++) {
-          if(clipper.isLineWithin(h[i], v[i], h[i+1], v[i+1])) {
-            start=i;
-            break;
-          }
-        }
-        for(int i=numPoints-1; i>start; i--) {
-          if(clipper.isLineWithin(h[i], v[i], h[i-1], v[i-1])) {
-            end=i;
-            break;
-          }
-        }
-        for(int i=start; i<end; i++) {
-          if(!clipper.isLineWithin(h[i], v[i], h[i+1], v[i+1])) {
-            start=0;
-            end=numPoints-1;
-            break;
-          }
-        }
-      }
-      
-      path.reset();
-      boolean drawFlag = false;
-      for(int i=start; i<=end; ++i) {
-        if(drawFlag)
-          path.lineTo((float)h[i], (float)v[i]);
-        else
-          path.moveTo((float)h[i], (float)v[i]);
-        drawFlag = !drawFlag;
-      }
-      if(end-start>0) {
-        updateColor();
-        g.draw(path);
-      }
-    }
-    
-  }
-  
-  public void drawSmoothPolyline(double[] h0, double[] v0, int numPoints0) {
-
-    // For curves having less than 3 points and for picking use the normal polyline.
-    if (numPoints0 < 3 || g instanceof APickingGraphics2D) {
-      drawPolyline(h0, v0, numPoints0);
-      return;
-    }
-    
-    int type = getContainmentType(h0, v0, numPoints0, POLYLINE);
-    if (type == FULLY_INSIDE || type == INTERSECTS) {
-
-        GeneralPath curve = new GeneralPath();
-        int numPoints = 3 * numPoints0 - 2;
-
-        // Add the control points to the array, at 1/3 and 2/3
-        // between the already existing points.
-        float[] h = new float[numPoints];
-        float[] v = new float[numPoints];
-        for (int i=0; i<numPoints; i++) {
-
-            switch (i%3) {
-                case 0:
-                    // One of the fixed points.
-                    h[i] = (float)h0[i/3];
-                    v[i] = (float)v0[i/3];
-                    break;
-                case 1:
-                    // First control point.
-                    h[i] = (float)(2./3. * h0[i/3] + 1./3. * h0[i/3+1]);
-                    v[i] = (float)(2./3. * v0[i/3] + 1./3. * v0[i/3+1]);
-                    break;
-                case 2:
-                    // Second control point.
-                    h[i] = (float)(1./3. * h0[i/3] + 2./3. * h0[i/3+1]);
-                    v[i] = (float)(1./3. * v0[i/3] + 2./3. * v0[i/3+1]);
-                    break;
-            }
-        }
-
-        // Now we have a normal polyline (straight line segments between fixed points),
-        // but as a cubic Bezier curve. All we need to do to make it smooth is to move
-        // the control points away from the curve, in such a way that [control point 2] -
-        // [fixed point] - [control point 1] is a straight line for every fixed point.
-        // We do this by averaging the angles of the line segments on either side of a
-        // fixed point.
-        for (int i=3; i<numPoints-2; i+=3) {
-            double lenLeft = Math.sqrt(Math.pow(h[i]-h[i-1], 2) + Math.pow(v[i]-v[i-1], 2));
-            double lenRight = Math.sqrt(Math.pow(h[i+1]-h[i], 2) + Math.pow(v[i+1]-v[i], 2));
-
-            // Without length we cannot define an angle, so skip the point.
-            if (lenLeft < 1e-6 || lenRight < 1e-6) continue;
-
-            double phiLeft = Math.atan2(v[i]-v[i-1], h[i]-h[i-1]);
-            double phiRight = Math.atan2(v[i+1]-v[i], h[i+1]-h[i]);
-
-            if (phiLeft-phiRight > Math.PI) {
-                phiRight += 2.*Math.PI;
-            } else if (phiRight-phiLeft > Math.PI) {
-                phiLeft += 2.*Math.PI;
-            }
-
-            if (Math.abs(phiLeft-phiRight) > Math.PI/2.) {
-                // The line turns more than 90 degrees, this is wrong. Move the control points
-                // back in so they are the same as the point on the line. This disables the smooth
-                // curve locally, reverting to a normal connect-the-dots polyline.
-                h[i-1] = h[i+1] = h[i];
-                v[i-1] = v[i+1] = v[i];
-            } else {
-                // Calculate the desired angle for the tangent by weighting the angle on each side,
-                // the weight is inverse proportional to the distance to the next point.
-                double phi = (lenRight*phiLeft + lenLeft*phiRight) / (lenLeft+lenRight);
-
-                h[i-1] = h[i] - (float)(lenLeft*Math.cos(phi));
-                v[i-1] = v[i] - (float)(lenLeft*Math.sin(phi));
-                h[i+1] = h[i] + (float)(lenRight*Math.cos(phi));
-                v[i+1] = v[i] + (float)(lenRight*Math.sin(phi));
-            }
-        }
-
-        curve.moveTo(h[0], v[0]);
-        for (int i=3; i<numPoints; i+=3) {
-            curve.curveTo(h[i-2], v[i-2], h[i-1], v[i-1], h[i], v[i]);
-        }
-
-        updateColor();
-        g.draw(curve);
-    }
-  }
-  
-  public void fillPolygon(double[] h, double[] v, int numPoints) {
-    int type=getContainmentType(h, v, numPoints, POLYGON);
-    if(type==FULLY_INSIDE||type==INTERSECTS) {
-      if(type==INTERSECTS) {
-        ACoord clipped=clipper.clipPolygon(h, v, numPoints);
-        h=clipped.hv[0][0];
-        v=clipped.hv[1][0];
-        numPoints=h.length;
-      }
-      path.reset();
-      
-      for(int i=0; i<numPoints; ++i)
-        if(i==0)
-          path.moveTo((float)h[i], (float)v[i]);
-        else
-          path.lineTo((float)h[i], (float)v[i]);
-      if(numPoints>0) {
-        path.closePath();
-        updateColor();
-        g.fill(path);
-        g.draw(path);
-      }
-    } else if(type==CONTAINS) {
-      Rectangle bounds=g.getClipBounds();
-      updateColor();
-      g.fillRect((int)Math.rint(bounds.getX()), (int)Math.rint(bounds.getY()),
-              (int)Math.rint(bounds.getWidth()), (int)Math.rint(bounds.getHeight()));
-    }
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/colormap/AColorMap.java b/graphics/AtlantisJava/src/atlantis/graphics/colormap/AColorMap.java
deleted file mode 100755
index 423a613163a3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/colormap/AColorMap.java
+++ /dev/null
@@ -1,365 +0,0 @@
-package atlantis.graphics.colormap;
-
-import java.io.File;
-import java.io.InputStream;
-import java.awt.Color;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-import atlantis.globals.AGlobals;
-import atlantis.output.AExceptionHandler;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.utils.AUtilities;
-import atlantis.utils.ALogger;
-import atlantis.utils.xml.AXMLErrorHandler;
-
-
-public final class AColorMap
-{
-	private static ALogger logger = ALogger.getLogger(AColorMap.class);
-	
-    private static final boolean VALIDATION = true;
-    final public static int NO_COLOR = -1;
-    final public static int INVISIBLE = -2;
-    static final public int BG = 8;   //background
-    static final public int WH = 0;   //white
-    static final public int GY = 14;  //grey
-    static final public int RD = 20;  //red
-    static final public int GN = 21;  //green
-    static final public int BL = 22;  //blue
-    static final public int YE = 23;  //yellow
-    static final public int MA = 24;  //magenta
-    static final public int CY = 25;  //cyan
-    static final public int BK = 26;  //black
-    static final public int OR = 27;  //orange
-    static final public int CB = 28;  //cornflower blue
-    private static final String[] mapNames = {"Default(1)", "Default(2)", "M4+M5", "GrayDet", 
-                                             "Original", "Gray", "B/W", "HitCol", "GrayHitCol"};
-    private static final String[] mapNamesPS = {"default1","default2","m4m5", "graydet", 
-                                             "original", "gray",  "bw", "hitcol", "grayhitcol"};
-    private static MappedColor[][] maps;
-    private static int numColors;
-    private static int numMaps;
-
-    // Color map indices.
-    public static final int COLOR_MAP_DEFAULT1 = 0;
-    public static final int COLOR_MAP_DEFAULT2 = 1;
-    public static final int COLOR_MAP_M4M5 = 2;
-    public static final int COLOR_MAP_GRAYDET = 3;
-    public static final int COLOR_MAP_ORIGINAL = 4;
-    public static final int COLOR_MAP_GRAY = 5;
-    public static final int COLOR_MAP_BW = 6;
-    public static final int COLOR_MAP_HITCOL = 7;
-    public static final int COLOR_MAP_GRAY_HITCOL = 8;
-
-    //color map used if wrong value in config file 
-    static int currentMap = COLOR_MAP_DEFAULT1;
-
-
-    public static void readColorMap(String name)
-    {
-        String fileName = null;
-        String FILE_SEPAR = System.getProperty("file.separator");
-
-        if(name != null && new File(name).canRead())
-        {
-            // color map file specified as command line argument
-            fileName = name;
-        }
-        else
-        {
-            if(name != null)
-            {
-                logger.warn("Can't read color map file: " + name);
-            }
-            // color map file wasn't specified as command line argument
-            fileName = ".Atlantis-colormap.xml"; // default name
-            String fileNameFull = System.getProperty("user.home") + FILE_SEPAR + fileName;
-            if(new File(fileNameFull).canRead())
-            {
-                // use existing user's color map file
-                fileName = fileNameFull;
-            }
-            else
-            {
-                // use default color map file from Atlantis distribution
-                fileName = AGlobals.instance().getHomeDirectory() + "configuration" +
-                           FILE_SEPAR + "colormap.xml";
-            }
-        }
-
-        logger.info("Using color map file: " + fileName);
-        try
-        {
-        	InputStream isColorMap = AUtilities.getFileAsStream(fileName);
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            factory.setValidating(VALIDATION);
-            DocumentBuilder parser = factory.newDocumentBuilder();
-            parser.setErrorHandler(new AXMLErrorHandler());
-            Node colormap = parser.parse(isColorMap).getDocumentElement();
-            NamedNodeMap cm = colormap.getAttributes();
-            numMaps = Integer.parseInt(cm.getNamedItem("numMaps").getNodeValue().
-                                       trim());
-            numColors = Integer.parseInt(cm.getNamedItem("numColors").
-                                         getNodeValue().trim());
-            maps = new MappedColor[numMaps][numColors];
-            NodeList list = colormap.getChildNodes();
-            int count = list.getLength();
-            for(int i = 0; i < count; i++)
-            {
-                Node mapping = list.item(i);
-                if(mapping.getNodeType() == Node.ELEMENT_NODE)
-                {
-                    NamedNodeMap atts = mapping.getAttributes();
-                    try
-                    {
-                        int map = Integer.parseInt(atts.getNamedItem("map").
-                            getNodeValue().trim());
-                        int index = Integer.parseInt(atts.getNamedItem("index").
-                            getNodeValue().trim());
-                        int r = Integer.parseInt(atts.getNamedItem("r").
-                                                 getNodeValue().trim());
-                        int g = Integer.parseInt(atts.getNamedItem("g").
-                                                 getNodeValue().trim());
-                        int b = Integer.parseInt(atts.getNamedItem("b").
-                                                 getNodeValue().trim());
-                        if(map < maps.length)
-                        {
-                            if(index < maps[map].length)
-                            {
-                                maps[map][index] = new MappedColor(r, g, b,
-                                    index);
-                            }
-                        }
-                    }
-                    catch(NumberFormatException e)
-                    {
-                        AExceptionHandler.processException("Colour map error:\n" +
-                            mapping, e);
-                    }
-                } // if
-            } // for
-        }
-        catch(Exception e)
-        {
-            AExceptionHandler.processException("Error while reading colour map:\n" +
-                                               fileName, e);
-        }
-        for(int i = 0; i < maps.length; i++)
-        {
-            for(int j = 0; j < maps[i].length; j++)
-            {
-                if(maps[i][j] == null)
-                {
-                    AOutput.append("\nColorMap (" + i + "," + j +
-                                   ") is not present",
-                                   ALogInterface.BAD_COMMAND);
-                }
-            }
-        }
-
-    } // readColorMap() -----------------------------------------------------
-
-
-
-    public static int getNumMaps()
-    {
-        return numMaps;
-    }
-
-
-    public static int getNumColors()
-    {
-        return numColors;
-    }
-
-
-    /**
-     * Returns color map in the XML format.
-     * [Former method writeColorMap() was writing the XML data directly into
-     * the file.]
-     * @return String
-     */
-    public static String getColorMapXML()
-    {
-        StringBuffer buffer = new StringBuffer();
-        // color map DTD
-        buffer.append(
-            "<?xml version=\"1.0\"?>\n" +
-            "<!DOCTYPE colormap  [\n" +
-            " <!ELEMENT colormap (Mapping*)>" +
-            " <!ATTLIST colormap\n" +
-            "   numMaps   CDATA #REQUIRED\n" +
-            "   numColors CDATA #REQUIRED>\n" +
-            " <!ELEMENT Mapping EMPTY>\n" +
-            " <!ATTLIST Mapping\n" +
-            "   map   CDATA #REQUIRED\n" +
-            "   index CDATA #REQUIRED\n" +
-            "   r     CDATA #REQUIRED\n" +
-            "   g     CDATA #REQUIRED\n" +
-            "   b     CDATA #REQUIRED>\n" +
-            "]>\n\n\n");
-        buffer.append("<colormap numMaps=\"" + maps.length +
-                      "\" numColors=\"" + maps[0].length + "\" >\n");
-        for(int i = 0; i < maps.length; i++)
-        {
-            for(int j = 0; j < maps[i].length; j++)
-            {
-                int r = maps[i][j].getRed();
-                int g = maps[i][j].getGreen();
-                int b = maps[i][j].getBlue();
-                buffer.append("  <Mapping  map=\"" + i + "\" index=\"" + j +
-                              "\"  r=\"" + r + "\" g=\"" + g + "\" b=\"" +
-                              b + "\"/>\n");
-            }
-        }
-        buffer.append("</colormap>\n");
-        return buffer.toString();
-
-    } // getColorMapXML() ---------------------------------------------------
-
-
-
-    public static String getPSPrologColorMap()
-    {
-        StringBuffer s = new StringBuffer();
-        String newLine = System.getProperty("line.separator");
-        s.append(newLine);
-        for(int i = 0; i < maps.length; ++i)
-        {
-            s.append("/" + mapNamesPS[i] + "ColorMap" + newLine);
-            s.append("<<" + newLine);
-            for(int j = 0; j < maps[i].length; ++j)
-                s.append(" /C" + j + " [" +
-                         String.format("%.3f",maps[i][j].getRed() / 255.) + " "
-                         + String.format("%.3f",maps[i][j].getGreen() / 255.) + " " +
-                         String.format("%.3f",maps[i][j].getBlue() / 255.)
-                         + "]" + newLine);
-            s.append(">> def" + newLine);
-            s.append(newLine);
-        }
-        return s.toString();
-
-    } // getPSPrologColorMap() ----------------------------------------------
-
-
-
-    public static Color[] getColors(int map)
-    {
-        Color[] col = new Color[maps[map].length];
-        for(int i = 0; i < col.length; ++i)
-            col[i] = (Color) maps[map][i];
-        return col;
-    }
-
-    //From hot (red), index 255, to cold (blue), index 0
-    public static Color[] getShades(int num)
-    {
-        assert (num>=2);
-        Color[] col = new Color[num];
-        col[0]=new Color(170,170,170);//grey for "other"
-        for(int i = 1; i < num-1; ++i)
-            col[i] = new Color(((255*i)/num),80,255-((255*i)/num));
-        return col;
-    }
-
-    public static Color[] getColors()
-    {
-        return getColors(currentMap);
-    }
-
-
-    public static void setColorMap(int map)
-    {
-        if(map >= 0 && map < maps.length)
-        {
-            currentMap = map;
-        	APar parameterStore = APar.instance();
-            parameterStore.get("Prefs","ColorMap").setI(map);
-        }
-    }
-
-
-    public static void setColorMap(String mapName)
-    {
-        for(int i = 0; i < mapNames.length; i++)
-            if(mapNames[i].equals(mapName))
-                setColorMap(i);
-    }
-
-
-    public static int getColorMap()
-    {
-        return currentMap;
-    }
-
-    public static boolean drawFrames()
-    {
-        if(currentMap==COLOR_MAP_GRAY  || currentMap==COLOR_MAP_BW)
-            return true;
-        else
-            return false;
-    }
-    
-    public static String getPSColorMapName()
-    {
-        return mapNamesPS[getColorMap()];
-
-    } // getPSColorMapName() ------------------------------------------------
-
-
-    public MappedColor getMappedColor(int colorIndex)
-    {
-        if(colorIndex < 0 && colorIndex >= maps[currentMap].length)
-        {
-            return null;
-        }
-        else
-        {
-            return maps[currentMap][colorIndex];
-        }
-    }
-
-
-    public Color getColor(int colorIndex)
-    {
-        if(colorIndex < 0 && colorIndex >= maps[currentMap].length)
-        {
-            return null;
-        }
-        else
-        {
-            return(Color) maps[currentMap][colorIndex];
-        }
-    }
-
-
-    public static String getTag(int colorIndex)
-    {
-        if(colorIndex < 0 && colorIndex >= maps[0].length)
-        {
-            return null;
-        }
-        else
-        {
-            return "C" + colorIndex;
-        }
-    }
-
-
-    public static String[] getMapNames()
-    {
-        return(String[]) mapNames.clone();
-    }
-    
-    public static MappedColor[][] getMaps() {
-    	return maps;
-    }
-
-} // class AColorMap ========================================================
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/colormap/MappedColor.java b/graphics/AtlantisJava/src/atlantis/graphics/colormap/MappedColor.java
deleted file mode 100755
index 53ace099fe82..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/colormap/MappedColor.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2000, CERN, Geneva, Switzerland and University of Santa Cruz, California, U.S.A.
-package atlantis.graphics.colormap;
-
-
-import java.awt.Color;
-
-
-/**
- *
- * @author Charles Loomis
- **/
-public class MappedColor extends java.awt.Color {
-
-  /**
-   * Index of the color in the color map. */
-  protected int colorIndex;
-
-  /**
-   * Value of the brightness/darkness of this color. Larger values
-   * indicate darker colors and vice versa. */
-  protected int brightness;
-
-  /**
-   * Constructor takes the RGB color components and the color index. */
-  public MappedColor(int r, int g, int b,
-      int colorIndex) {
-
-    // Call the Color constructor.
-    super(r, g, b);
-
-    // Set the color index and brightness.
-    this.colorIndex=colorIndex;
-    brightness=0;
-  }
-
-  /**
-   * Constructor takes the RGB color components, the color index,
-   * and the brightness. */
-  public MappedColor(int r, int g, int b,
-      int colorIndex,
-      int brightness) {
-
-    // Call the Color constructor.
-    super(r, g, b);
-
-    // Set the color index and brightness.
-    this.colorIndex=colorIndex;
-    this.brightness=brightness;
-  }
-
-  /**
-   * Make a brightened color based on this color. */
-  public Color brighter() {
-
-    int r=getRed()*10/7;
-    int g=getGreen()*10/7;
-    int b=getBlue()*10/7;
-
-    r=Math.max(0, Math.min(255, r));
-    g=Math.max(0, Math.min(255, g));
-    b=Math.max(0, Math.min(255, b));
-
-    return (Color)new MappedColor(r, g, b, colorIndex, brightness-1);
-  }
-
-  /**
-   * Make a darkened color based on this color. */
-  public Color darker() {
-
-    int r=getRed()*7/10;
-    int g=getGreen()*7/10;
-    int b=getBlue()*7/10;
-
-    r=Math.max(0, Math.min(255, r));
-    g=Math.max(0, Math.min(255, g));
-    b=Math.max(0, Math.min(255, b));
-
-    return (Color)new MappedColor(r, g, b, colorIndex, brightness-1);
-  }
-
-  /**
-   * Get the brightness of this color. */
-  public int getBrightness() {
-    return brightness;
-  }
-
-  /**
-   * Get the tag associated with this color. */
-  public String getColorTag() {
-    return AColorMap.getTag(colorIndex);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ACallBack.java b/graphics/AtlantisJava/src/atlantis/graphics/dnd/ACallBack.java
deleted file mode 100755
index 5cc4ec0a64c4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ACallBack.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package atlantis.graphics.dnd;
-
-
-/**
- * Used in the Drag and Drop operations.
- */
-public interface ACallBack {
-  void callBack(Object from);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDButton.java b/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDButton.java
deleted file mode 100755
index f637b28172b4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDButton.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package atlantis.graphics.dnd;
-
-import java.awt.Point;
-import java.awt.Graphics;
-import javax.swing.JButton;
-import java.awt.image.BufferedImage;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceEvent;
-import java.util.Vector;
-
-/**
- * A button wich has Drag and Drop support ( see java.awt.dnd.*)
- * Used by the rubberbands.
- */
-
-public class ADnDButton extends JButton
-  implements DragSourceListener, DragGestureListener, ACallBack {
-
-  private DragSource dragSource;
-  private Vector dragListeners;
-
-  public ADnDButton(String name) {
-    super(name);
-    setName(name);
-
-    dragSource=DragSource.getDefaultDragSource();
-    dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
-
-    dragListeners=new Vector();
-  }
-
-  // implementation of DragSourceListener
-
-  // This method is invoked to signify that the Drag and Drop operation is complete.
-  public void dragDropEnd(DragSourceDropEvent dsde) {}
-
-  // Called as the hotspot enters a platform dependent drop site.
-  public void dragEnter(DragSourceDragEvent dsde) {
-    dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_VALID);
-  }
-
-  // Called as the hotspot exits a platform dependent drop site.
-  public void dragExit(DragSourceEvent dse) {
-    dse.getDragSourceContext().setCursor(ADnDLabel.DROP_INVALID);
-  }
-
-  // Called as the hotspot moves over a platform dependent drop site.
-  public void dragOver(DragSourceDragEvent dsde) {
-    dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_VALID);
-  }
-
-  // Called when the user has modified the drop gesture.
-  public void dropActionChanged(DragSourceDragEvent dsde) {}
-
-  // implementation of DragGestureListener
-
-  public void dragGestureRecognized(DragGestureEvent dge) {
-    BufferedImage resizeCursorImage=new BufferedImage(64, 64, BufferedImage.TYPE_4BYTE_ABGR);
-
-    Graphics g=resizeCursorImage.getGraphics();
-
-    g.drawLine(0, 0, 64, 64);
-    g.dispose();
-
-    // return Toolkit.getDefaultToolkit().createCustomCursor(resizeCursorImage, center, "resize")
-
-
-    AObjectTransferable cbt=new AObjectTransferable(this);
-
-    dragSource.startDrag(dge, ADnDLabel.DROP_INVALID, resizeCursorImage, new Point(0, 0), cbt, this);
-  }
-
-  public void callBack(Object to) {
-    for(int i=0; i<dragListeners.size(); i++)
-      ((ADragListener)dragListeners.get(i)).dragPerformed(this, to, -1);
-  }
-
-  public void addDragListener(ADragListener l) {
-    dragListeners.addElement(l);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDLabel.java b/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDLabel.java
deleted file mode 100755
index 2b1873f55637..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADnDLabel.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package atlantis.graphics.dnd;
-
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.dnd.DropTarget;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.util.Vector;
-
-import javax.swing.JLabel;
-
-import atlantis.graphics.ACursorFactory;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-
-/**
- * A label which has Drag and Drop support.
- * Used in the Window Control.
- */
-public class ADnDLabel extends JLabel
-implements DropTargetListener, DragSourceListener, DragGestureListener {
-	
-	private DragSource dragSource=null;
-	private Vector dragListeners;
-	private boolean dragHighlight;
-	private String[] page;
-	
-	public JLabel getLabel() {
-		return this;
-	}
-	
-	public static final Cursor DROP_VALID;
-	public static final Cursor DROP_INVALID;
-	
-	static {
-	/*	if(Toolkit.getDefaultToolkit().getBestCursorSize(64, 64).equals(new Dimension(64, 64))) {
-			DROP_VALID=Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage(Atlantis.getHomeDirectory()
-					+"img"+Atlantis.fileSep+"cursor_DnD_valid_64x64.gif"),
-					new Point(1, 1), "ValidDnD");
-			DROP_INVALID=Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage(Atlantis.getHomeDirectory()
-					+"img"+Atlantis.fileSep+"cursor_DnD_invalid_64x64.gif"),
-					new Point(9, 9), "InvalidDnD");
-		} else {
-			DROP_VALID=DragSource.DefaultMoveDrop;
-			DROP_INVALID=DragSource.DefaultMoveNoDrop;
-		} */
-          DROP_VALID = ACursorFactory.getInstance().getDragValidCursor();
-          DROP_INVALID = ACursorFactory.getInstance().getDragInvalidCursor();
-	}
-	
-	public ADnDLabel(String name, boolean dragHighlight) {
-		super(name, JLabel.CENTER);
-		setName(name);
-		setOpaque(true);
-		page=null;
-		this.dragHighlight=dragHighlight;
-		
-		dragSource=new DragSource();
-		dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
-        this.setDropTarget(new DropTarget(this, this));
-		dragListeners=new Vector();
-	}
-	
-	public ADnDLabel(String name, String[] wnames, boolean dragHighlight) {
-		super(name, JLabel.CENTER);
-		setName(name);
-		setOpaque(true);
-		page=wnames;
-		this.dragHighlight=dragHighlight;
-		
-		dragSource=new DragSource();
-		dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
-        this.setDropTarget(new DropTarget(this, this));
-		dragListeners=new Vector();
-	}
-	
-	public Dimension getPreferredSize() {
-		return new Dimension(15, 15);
-	}
-	
-	// implementation of DropTargetListener
-	
-	private Color old;
-	
-	// Called when a drag operation has encountered the DropTarget.
-	public void dragEnter(DropTargetDragEvent dtde) {
-		dtde.acceptDrag(DnDConstants.ACTION_MOVE);
-		if(dragHighlight) {
-			old=getBackground();
-			setBackground(new Color(150, 150, 150));
-		}
-	}
-	
-	// The drag operation has departed the DropTarget without dropping.
-	public void dragExit(DropTargetEvent dte) {
-		if(dragHighlight)
-			setBackground(old);
-	}
-	
-	// Called when a drag operation is ongoing on the DropTarget.
-	public void dragOver(DropTargetDragEvent dtde) {
-        }
-	
-	// The drag operation has terminated with a drop on this DropTarget.
-	public void drop(DropTargetDropEvent dtde) {
-		try {
-			Transferable transferable=dtde.getTransferable();
-			DataFlavor javaObjectDataFlavor=new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
-			
-			if(transferable.isDataFlavorSupported(javaObjectDataFlavor)) {
-				dtde.acceptDrop(DnDConstants.ACTION_MOVE);
-				Object object=transferable.getTransferData(javaObjectDataFlavor);
-				
-				if(object instanceof ACallBack)
-					((ACallBack)object).callBack(this);
-				else
-					fireDragEvent(object);
-				dtde.getDropTargetContext().dropComplete(true);
-			} else
-				AOutput.append("Cannot accept drop\n", ALogInterface.BAD_COMMAND);
-		} catch(Exception e) {
-			e.printStackTrace();
-			dtde.rejectDrop();
-		}
-	}
-	
-	private void fireDragEvent(Object from) {
-		for(int i=0; i<dragListeners.size(); i++)
-			((ADragListener)dragListeners.get(i)).dragPerformed(from, this, -1);
-	}
-	
-	// Called if the user has modified the current drop gesture.
-	public void dropActionChanged(DropTargetDragEvent dtde) {}
-	
-	// implementation of DragSourceListener
-	
-	// This method is invoked to signify that the Drag and Drop operation is complete.
-	public void dragDropEnd(DragSourceDropEvent dsde) {}
-	
-	// Called as the hotspot enters a platform dependent drop site.
-	public void dragEnter(DragSourceDragEvent dsde) {
-		dsde.getDragSourceContext().setCursor(DROP_VALID);
-	}
-	
-	// Called as the hotspot exits a platform dependent drop site.
-	public void dragExit(DragSourceEvent dse) {
-		dse.getDragSourceContext().setCursor(DROP_INVALID);
-	}
-	
-	// Called as the hotspot moves over a platform dependent drop site.
-	public void dragOver(DragSourceDragEvent dsde) {
- 		dsde.getDragSourceContext().setCursor(DROP_VALID);
-	}
-	
-	// Called when the user has modified the drop gesture.
-	public void dropActionChanged(DragSourceDragEvent dsde) {}
-	
-	// implementation of DragGestureListener
-	public void dragGestureRecognized(DragGestureEvent dge) {
-		dragSource.startDrag(dge, DROP_VALID, new AObjectTransferable(this), this);
-	}
-	
-	public void addDragListener(ADragListener l) {
-		dragListeners.addElement(l);
-	}
-	
-	public String[] returnPageName()
-	{
-		return page;
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADragListener.java b/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADragListener.java
deleted file mode 100755
index 429b9a0af144..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/dnd/ADragListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package atlantis.graphics.dnd;
-
-
-/**
- * The listener to drag operations. It is suported by ADnDLabel and ADnDButton.
- */
-public interface ADragListener {
-  void dragPerformed(Object from, Object to, int action);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/dnd/AObjectTransferable.java b/graphics/AtlantisJava/src/atlantis/graphics/dnd/AObjectTransferable.java
deleted file mode 100755
index d823077f674b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/dnd/AObjectTransferable.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package atlantis.graphics.dnd;
-
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-
-
-/**
- * Used by Drag and Drop
- * A implementation of a transferable which
- * transfers an Java object (really an pointer to it).
- */
-public class AObjectTransferable implements Transferable {
-  private Object object;
-
-  /**
-   * Creates the Transferable which will transfer the specified object.
-   * @param object The object to be transferred
-   */
-  public AObjectTransferable(Object object) {
-    this.object=object;
-  }
-
-  /**
-   * Returns the transferred for a specific DataFlavor.
-   * @param flavor The DataFlavor for which to get the transferred object.
-   * @return The transferred object.
-   */
-  public Object getTransferData(DataFlavor flavor) {
-    return object;
-  }
-
-  /**
-   * Returns an array of DataFlavor objects indicating the flavors the
-   * data can be provided in.
-   * @return The set of available flavors.
-   */
-  public DataFlavor[] getTransferDataFlavors() {
-    DataFlavor df=null;
-
-    try {
-      df=new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
-    } catch(ClassNotFoundException e) {
-      throw new Error("Cannot create DataFlavor.javaJVMLocalObjectMimeType "+e.getMessage());
-    }
-    return new DataFlavor[] {df};
-  }
-
-  /**
-   * Returns whether or not the specified data flavor is
-   * supported by this transferable.
-   * @param flavor The data flavor that needs to be checked
-   * @return True if the flavor is supported. False Otherwise.
-   */
-  public boolean isDataFlavorSupported(DataFlavor flavor) {
-    if(flavor.getHumanPresentableName().equals(DataFlavor.javaJVMLocalObjectMimeType))
-      return true;
-    else
-      return false;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/encoders/AImageEncoder.java b/graphics/AtlantisJava/src/atlantis/graphics/encoders/AImageEncoder.java
deleted file mode 100644
index a27b4f07d8b1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/encoders/AImageEncoder.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package atlantis.graphics.encoders;
-
-import atlantis.canvas.ACanvas;
-import atlantis.utils.ALogger;
-
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.RenderingHints;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.BufferedOutputStream;
-
-import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.svggen.SVGGraphics2D;
-
-import org.sourceforge.jlibeps.epsgraphics.*;
-import org.w3c.dom.*;
-import org.w3c.dom.svg.SVGDocument;
-
-/**
- * Takes the image drawn on the canvas and encodes it in the given format
- * @author sboeser
- */
-public class AImageEncoder {
-
-  //The logger
-  private final static ALogger logger = ALogger.getLogger(AImageEncoder.class);
-
-    /**
-     * Grabs canvas and encodes the data in PNG format.
-     * @param imageWidth resulting image width
-     * @param imageHeight resulting image height
-     * @return byte[]
-     */
-    public byte[] getPNGData(int imageWidth, int imageHeight){
-
-      // Draw image
-      Image image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
-      ACanvas.getCanvas().drawScaledCanvas(image.getGraphics(), imageWidth, imageHeight, "png");
-
-      // Encode as PNG.
-      PngEncoder encoder = new PngEncoder(image, true, PngEncoder.FILTER_NONE, 9);
-      byte[] data = encoder.pngEncode();
-      return data;
-
-    }
-
-    /**
-     * Get a scaled version of the PNG image - mostly used to create thumbnails
-     * NOTE: in contrast to getPNGData, this will first create the image with given
-     * width and height and then scale everything (including window
-     * borders, title bar, etc...)
-     * @param width image width before scaling
-     * @param height image height before scaling
-     * @param scale the scale factor
-     * @return the PNG data
-     */
-    public byte[] getScaledPNGData(int width, int height, double scale){
-
-      // Draw a temporary full-size image
-      Image inputImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-      ACanvas.getCanvas().drawScaledCanvas(inputImage.getGraphics(), width, height, "png");
-
-      //Calculate target height keeping aspect ratio
-      int targetHeight = (int)(scale*height);
-      int targetWidth = (int)(scale*width);
-
-
-      /**
-       * Now rescale the image in steps - do not use Image.getScaledInstance,
-       * which is outdated and way to slow!
-       */
-
-      while (inputImage.getWidth(null) != targetWidth){
-
-        //Resize by no more than a factor of two in one step
-        if (inputImage.getWidth(null)/targetWidth > 2. ){
-          width = (int)(inputImage.getWidth(null)/2.);
-          height = (int)(inputImage.getHeight(null)/2.);
-        } else {
-          width = targetWidth;
-          height = targetHeight;
-        }
-
-        //log for debugging
-        logger.debug("Rescaling image from "+inputImage.getWidth(null)+"x"+inputImage.getHeight(null)+
-                     " to "+width+"x"+height);
-
-        //Now redraw that to the scaled image
-        BufferedImage scaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D scaledGraphics = scaledImage.createGraphics();
-        scaledGraphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
-        scaledGraphics.drawImage(inputImage, 0, 0, width, height, null);
-        scaledGraphics.dispose();
-
-        //Provide the scaled image as new input in case we need to rescale once more
-        inputImage = scaledImage;
-      }
-
-      // Encode as PNG.
-      PngEncoder encoder = new PngEncoder(inputImage, true, PngEncoder.FILTER_NONE, 9);
-      byte[] data = encoder.pngEncode();
-      return data;
-
-    }
-
-
-    /**
-     * Grab canvas, encode the information as EPS and save to a file
-     * @param imageWidth image width
-     * @param imageHeight  image height
-     * @param saveFile save file
-     */
-    
-    public void saveEPS(int imageWidth, int imageHeight, File saveFile) throws IOException{
-
-      //Create the output stream
-      FileOutputStream fos = new FileOutputStream(saveFile);
-      BufferedOutputStream bos = new BufferedOutputStream(fos);
-
-      // Create a new postscript graphics object
-      EpsGraphics2D g = new EpsGraphics2D("Atlantis",bos,0,0,imageWidth,imageHeight);
-      // Draw text as shapes
-      g.setAccurateTextMode(true);
-      // Draw into the postscript graphics
-      ACanvas.getCanvas().drawScaledCanvas(g, imageWidth, imageHeight, "eps");
-      g.flush();
-      g.close();
-      fos.close();
-      bos.close();
-
-    }
-    
-    /**
-     * Grab canvas, encode the information as SVG and save to a file
-     * @param imageWidth image width
-     * @param imageHeight  image height
-     * @param saveFile save file
-     */
-    
-    public void saveSVG(int imageWidth, int imageHeight, File saveFile) throws IOException{
-
-      // Document Object Model to define our SVG Document
-      DOMImplementation domImpl =
-          SVGDOMImplementation.getDOMImplementation();
-
-      // We need to write the SVG into a Document
-      String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
-      SVGDocument doc = (SVGDocument) domImpl.createDocument(svgNS, "svg", null);
-     
-      // Construct an SVGGraphics2D from our Document
-      SVGGraphics2D g = new SVGGraphics2D(doc);
-
-      g.setSVGCanvasSize(new Dimension(imageWidth, imageHeight));
-
-      // Paint the scaled Canvas onto our SVG Graphics2D
-      ACanvas.getCanvas().drawScaledCanvas(g, imageWidth, imageHeight, "svg");
-
-      // Stream the output into our chosen file
-      g.stream(saveFile.getAbsolutePath());
-
-
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/encoders/PngEncoder.java b/graphics/AtlantisJava/src/atlantis/graphics/encoders/PngEncoder.java
deleted file mode 100755
index a9c7b5aa61b3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/encoders/PngEncoder.java
+++ /dev/null
@@ -1,582 +0,0 @@
-package atlantis.graphics.encoders;
-
-// package com.keypoint;
-
-
-import java.awt.*;
-import java.awt.image.*;
-import java.util.zip.*;
-import java.io.*;
-
-/**
- * PngEncoder takes a Java Image object and creates a byte string which can be saved as a PNG file.
- * The Image is presumed to use the DirectColorModel.
- *
- * Thanks to Jay Denny at KeyPoint Software
- *    http://www.keypoint.com/
- * who let me develop this code on company time.
- *
- * You may contact me with (probably very-much-needed) improvements,
- * comments, and bug fixes at:
- *
- *   david@catcode.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * A copy of the GNU LGPL may be found at
- * http://www.gnu.org/copyleft/lesser.html,
- *
- * @author J. David Eisenberg
- * @version 1.4, 31 March 2000
- *
- * Added ImageObserver so that getHeight, getWidth calls work properly.
- *
- * @author M.Donszelmann
- */
-public class PngEncoder extends Object implements ImageObserver {
-
-  /** Constant specifying that alpha channel should be encoded. */
-  public static final boolean ENCODE_ALPHA=true;
-
-  /** Constant specifying that alpha channel should not be encoded. */
-  public static final boolean NO_ALPHA=false;
-
-  /** Constants for filters */
-  public static final int FILTER_NONE=0;
-  public static final int FILTER_SUB=1;
-  public static final int FILTER_UP=2;
-  public static final int FILTER_LAST=2;
-
-  protected byte[] pngBytes;
-  protected byte[] priorRow;
-  protected byte[] leftBytes;
-  protected Image image;
-  protected int width, height;
-  protected int bytePos, maxPos;
-  protected int hdrPos, dataPos, endPos;
-  protected CRC32 crc=new CRC32();
-  protected long crcValue;
-  protected boolean encodeAlpha;
-  protected int filter;
-  protected int bytesPerPixel;
-  protected int compressionLevel;
-
-  public PngEncoder() {
-    this(null, false, FILTER_NONE, 0);
-  }
-
-  /**
-   * Class constructor specifying Image to encode, with no alpha channel encoding.
-   *
-   * @param image A Java Image object which uses the DirectColorModel
-   * @see java.awt.Image
-   */
-  public PngEncoder(Image image) {
-    this(image, false, FILTER_NONE, 0);
-  }
-
-  /**
-   * Class constructor specifying Image to encode, and whether to encode alpha.
-   *
-   * @param image A Java Image object which uses the DirectColorModel
-   * @param encodeAlpha Encode the alpha channel? false=no; true=yes
-   * @see java.awt.Image
-   */
-  public PngEncoder(Image image, boolean encodeAlpha) {
-    this(image, encodeAlpha, FILTER_NONE, 0);
-  }
-
-  /**
-   * Class constructor specifying Image to encode, whether to encode alpha, and filter to use.
-   *
-   * @param image A Java Image object which uses the DirectColorModel
-   * @param encodeAlpha Encode the alpha channel? false=no; true=yes
-   * @param whichFilter 0=none, 1=sub, 2=up
-   * @see java.awt.Image
-   */
-  public PngEncoder(Image image, boolean encodeAlpha, int whichFilter) {
-    this(image, encodeAlpha, whichFilter, 0);
-  }
-
-  /**
-   * Class constructor specifying Image source to encode, whether to encode alpha, filter to use, and compression level.
-   *
-   * @param image A Java Image object
-   * @param encodeAlpha Encode the alpha channel? false=no; true=yes
-   * @param whichFilter 0=none, 1=sub, 2=up
-   * @param compLevel 0..9
-   * @see java.awt.Image
-   */
-  public PngEncoder(Image image, boolean encodeAlpha, int whichFilter,
-      int compLevel) {
-    this.image=image;
-    this.encodeAlpha=encodeAlpha;
-    setFilter(whichFilter);
-    if(compLevel>=0&&compLevel<=9) {
-      this.compressionLevel=compLevel;
-    }
-  }
-
-  /**
-   * Set the image to be encoded
-   *
-   * @param image A Java Image object which uses the DirectColorModel
-   * @see java.awt.Image
-   */
-  public void setImage(Image image) {
-    this.image=image;
-    pngBytes=null;
-  }
-
-  /** method to wait for image */
-  private int imageStatus;
-
-  public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
-    imageStatus=flags;
-    if(((flags&ALLBITS)==ALLBITS)||((flags&(ABORT|ERROR))!=0)) {
-      return false;
-    }
-    return true;
-  }
-
-  /**
-   * Creates an array of bytes that is the PNG equivalent of the current image, specifying whether to encode alpha or not.
-   *
-   * @param encodeAlpha boolean false=no alpha, true=encode alpha
-   * @return an array of bytes, or null if there was a problem
-   */
-  public byte[] pngEncode(boolean encodeAlpha) {
-    byte[]  pngIdBytes= { -119, 80, 78, 71, 13, 10, 26, 10 };
-
-    if(image==null) {
-      return null;
-    }
-
-    imageStatus=0;
-    boolean status=Toolkit.getDefaultToolkit().prepareImage(image, -1, -1, this);
-
-    if(!status) {
-      while(((imageStatus&(ALLBITS))==0)&&((imageStatus&(ABORT|ERROR))==0)) {
-        try {
-          Thread.sleep(100);
-        } catch(Exception e) {}
-      }
-      // FIXED: moved this inside the "if (!status)" area
-      if((imageStatus&(ALLBITS))==0) {
-        return null;
-      }
-    }
-
-    width=image.getWidth(null);
-    height=image.getHeight(null);
-
-    /*
-     * start with an array that is big enough to hold all the pixels
-     * (plus filter bytes), and an extra 200 bytes for header info
-     */
-    pngBytes=new byte[((width+1)*height*3)+200];
-
-    /*
-     * keep track of largest byte written to the array
-     */
-    maxPos=0;
-
-    bytePos=writeBytes(pngIdBytes, 0);
-    hdrPos=bytePos;
-    writeHeader();
-    dataPos=bytePos;
-    if(writeImageData()) {
-      writeEnd();
-      pngBytes=resizeByteArray(pngBytes, maxPos);
-    } else {
-      pngBytes=null;
-    }
-    return pngBytes;
-  }
-
-  /**
-   * Creates an array of bytes that is the PNG equivalent of the current image.
-   * Alpha encoding is determined by its setting in the constructor.
-   *
-   * @return an array of bytes, or null if there was a problem
-   */
-  public byte[] pngEncode() {
-    return pngEncode(encodeAlpha);
-  }
-
-  /**
-   * Set the alpha encoding on or off.
-   *
-   * @param encodeAlpha  false=no, true=yes
-   */
-  public void setEncodeAlpha(boolean encodeAlpha) {
-    this.encodeAlpha=encodeAlpha;
-  }
-
-  /**
-   * Retrieve alpha encoding status.
-   *
-   * @return boolean false=no, true=yes
-   */
-  public boolean getEncodeAlpha() {
-    return encodeAlpha;
-  }
-
-  /**
-   * Set the filter to use
-   *
-   * @param whichFilter from constant list
-   */
-  public void setFilter(int whichFilter) {
-    this.filter=FILTER_NONE;
-    if(whichFilter<=FILTER_LAST) {
-      this.filter=whichFilter;
-    }
-  }
-
-  /**
-   * Retrieve filtering scheme
-   *
-   * @return int (see constant list)
-   */
-  public int getFilter() {
-    return filter;
-  }
-
-  /**
-   * Set the compression level to use
-   *
-   * @param level 0 through 9
-   */
-  public void setCompressionLevel(int level) {
-    if(level>=0&&level<=9) {
-      this.compressionLevel=level;
-    }
-  }
-
-  /**
-   * Retrieve compression level
-   *
-   * @return int in range 0-9
-   */
-  public int getCompressionLevel() {
-    return compressionLevel;
-  }
-
-  /**
-   * Increase or decrease the length of a byte array.
-   *
-   * @param array The original array.
-   * @param newLength The length you wish the new array to have.
-   * @return Array of newly desired length. If shorter than the
-   *         original, the trailing elements are truncated.
-   */
-  protected byte[] resizeByteArray(byte[] array, int newLength) {
-    byte[]  newArray=new byte[newLength];
-    int     oldLength=array.length;
-
-    System.arraycopy(array, 0, newArray, 0, Math.min(oldLength, newLength));
-    return newArray;
-  }
-
-  /**
-   * Write an array of bytes into the pngBytes array.
-   * Note: This routine has the side effect of updating
-   * maxPos, the largest element written in the array.
-   * The array is resized by 1000 bytes or the length
-   * of the data to be written, whichever is larger.
-   *
-   * @param data The data to be written into pngBytes.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   */
-  protected int writeBytes(byte[] data, int offset) {
-    maxPos=Math.max(maxPos, offset+data.length);
-    if(data.length+offset>pngBytes.length) {
-      pngBytes=resizeByteArray(pngBytes, pngBytes.length+Math.max(1000, data.length));
-    }
-    System.arraycopy(data, 0, pngBytes, offset, data.length);
-    return offset+data.length;
-  }
-
-  /**
-   * Write an array of bytes into the pngBytes array, specifying number of bytes to write.
-   * Note: This routine has the side effect of updating
-   * maxPos, the largest element written in the array.
-   * The array is resized by 1000 bytes or the length
-   * of the data to be written, whichever is larger.
-   *
-   * @param data The data to be written into pngBytes.
-   * @param nBytes The number of bytes to be written.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   */
-  protected int writeBytes(byte[] data, int nBytes, int offset) {
-    maxPos=Math.max(maxPos, offset+nBytes);
-    if(nBytes+offset>pngBytes.length) {
-      pngBytes=resizeByteArray(pngBytes, pngBytes.length+Math.max(1000, nBytes));
-    }
-    System.arraycopy(data, 0, pngBytes, offset, nBytes);
-    return offset+nBytes;
-  }
-
-  /**
-   * Write a two-byte integer into the pngBytes array at a given position.
-   *
-   * @param n The integer to be written into pngBytes.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   */
-  protected int writeInt2(int n, int offset) {
-    byte[] temp= { (byte)((n>>8)&0xff), (byte)(n&0xff) };
-    return writeBytes(temp, offset);
-  }
-
-  /**
-   * Write a four-byte integer into the pngBytes array at a given position.
-   *
-   * @param n The integer to be written into pngBytes.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   */
-  protected int writeInt4(int n, int offset) {
-    byte[] temp= { (byte)((n>>24)&0xff), (byte)((n>>16)&0xff), (byte)((n>>8)&0xff), (byte)(n&0xff) };
-    return writeBytes(temp, offset);
-  }
-
-  /**
-   * Write a single byte into the pngBytes array at a given position.
-   *
-   * @param b The integer to be written into pngBytes.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   */
-  protected int writeByte(int b, int offset) {
-    byte[] temp= { (byte)b };
-    return writeBytes(temp, offset);
-  }
-
-  /**
-   * Write a string into the pngBytes array at a given position.
-   * This uses the getBytes method, so the encoding used will
-   * be its default.
-   *
-   * @param s The string to be written into pngBytes.
-   * @param offset The starting point to write to.
-   * @return The next place to be written to in the pngBytes array.
-   * @see java.lang.String#getBytes()
-   */
-  protected int writeString(String s, int offset) {
-    return writeBytes(s.getBytes(), offset);
-  }
-
-  /**
-   * Write a PNG "IHDR" chunk into the pngBytes array.
-   */
-  protected void writeHeader() {
-    int startPos;
-
-    startPos=bytePos=writeInt4(13, bytePos);
-    bytePos=writeString("IHDR", bytePos);
-    width=image.getWidth(null);
-    height=image.getHeight(null);
-    bytePos=writeInt4(width, bytePos);
-    bytePos=writeInt4(height, bytePos);
-    bytePos=writeByte(8, bytePos); // bit depth
-    bytePos=writeByte((encodeAlpha)?6:2, bytePos); // direct model
-    bytePos=writeByte(0, bytePos); // compression method
-    bytePos=writeByte(0, bytePos); // filter method
-    bytePos=writeByte(0, bytePos); // no interlace
-    crc.reset();
-    crc.update(pngBytes, startPos, bytePos-startPos);
-    crcValue=crc.getValue();
-    bytePos=writeInt4((int)crcValue, bytePos);
-  }
-
-  /**
-   * Perform "sub" filtering on the given row.
-   * Uses temporary array leftBytes to store the original values
-   * of the previous pixels.  The array is 16 bytes long, which
-   * will easily hold two-byte samples plus two-byte alpha.
-   *
-   * @param pixels The array holding the scan lines being built
-   * @param startPos Starting position within pixels of bytes to be filtered.
-   * @param width Width of a scanline in pixels.
-   */
-  protected void filterSub(byte[] pixels, int startPos, int width) {
-    int i;
-    int offset=bytesPerPixel;
-    int actualStart=startPos+offset;
-    int nBytes=width*bytesPerPixel;
-    int leftInsert=offset;
-    int leftExtract=0;
-
-    for(i=actualStart; i<startPos+nBytes; i++) {
-      leftBytes[leftInsert]=pixels[i];
-      pixels[i]=(byte)((pixels[i]-leftBytes[leftExtract])%256);
-      leftInsert=(leftInsert+1)%0x0f;
-      leftExtract=(leftExtract+1)%0x0f;
-    }
-  }
-
-  /**
-   * Perform "up" filtering on the given row.
-   * Side effect: refills the prior row with current row
-   *
-   * @param pixels The array holding the scan lines being built
-   * @param startPos Starting position within pixels of bytes to be filtered.
-   * @param width Width of a scanline in pixels.
-   */
-  protected void filterUp(byte[] pixels, int startPos, int width) {
-    int     i, nBytes;
-    byte    current_byte;
-
-    nBytes=width*bytesPerPixel;
-
-    for(i=0; i<nBytes; i++) {
-      current_byte=pixels[startPos+i];
-      pixels[startPos+i]=(byte)((pixels[startPos+i]-priorRow[i])%256);
-      priorRow[i]=current_byte;
-    }
-  }
-
-  /**
-   * Write the image data into the pngBytes array.
-   * This will write one or more PNG "IDAT" chunks. In order
-   * to conserve memory, this method grabs as many rows as will
-   * fit into 32K bytes, or the whole image; whichever is less.
-   *
-   *
-   * @return true if no errors; false if error grabbing pixels
-   */
-  protected boolean writeImageData() {
-    int rowsLeft=height;  // number of rows remaining to write
-    int startRow=0;       // starting row to process this time through
-    int nRows;              // how many rows to grab at a time
-
-    byte[] scanLines;       // the scan lines to be compressed
-    int scanPos;            // where we are in the scan lines
-    int startPos;           // where this line's actual pixels start (used for filtering)
-
-    byte[] compressedLines; // the resultant compressed lines
-    int nCompressed;        // how big is the compressed area?
-
-    PixelGrabber pg;
-
-    bytesPerPixel=(encodeAlpha)?4:3;
-
-    Deflater scrunch=new Deflater(compressionLevel);
-    ByteArrayOutputStream outBytes=new ByteArrayOutputStream(1024);
-
-    DeflaterOutputStream compBytes=new DeflaterOutputStream(outBytes, scrunch);
-    try {
-      while(rowsLeft>0) {
-        nRows=Math.min(32767/(width*(bytesPerPixel+1)), rowsLeft);
-        // nRows = rowsLeft;
-        int[] pixels=new int[width*nRows];
-
-        pg=new PixelGrabber(image, 0, startRow, width, nRows, pixels, 0, width);
-        try {
-          pg.grabPixels();
-        } catch(Exception e) {
-          System.err.println("interrupted waiting for pixels!");
-          return false;
-        }
-        if((pg.getStatus()&ImageObserver.ABORT)!=0) {
-          System.err.println("image fetch aborted or errored");
-          return false;
-        }
-
-        /*
-         * Create a data chunk. scanLines adds "nRows" for
-         * the filter bytes.
-         */
-        scanLines=new byte[width*nRows*bytesPerPixel+nRows];
-
-        if(filter==FILTER_SUB) {
-          leftBytes=new byte[16];
-        }
-        if(filter==FILTER_UP) {
-          priorRow=new byte[width*bytesPerPixel];
-        }
-
-        scanPos=0;
-        startPos=1;
-        for(int i=0; i<width*nRows; i++) {
-          if(i%width==0) {
-            scanLines[scanPos++]=(byte)filter;
-            startPos=scanPos;
-          }
-          scanLines[scanPos++]=(byte)((pixels[i]>>16)&0xff);
-          scanLines[scanPos++]=(byte)((pixels[i]>>8)&0xff);
-          scanLines[scanPos++]=(byte)((pixels[i])&0xff);
-          if(encodeAlpha) {
-            scanLines[scanPos++]=(byte)((pixels[i]>>24)&0xff);
-          }
-          if((i%width==width-1)&&(filter!=FILTER_NONE)) {
-            if(filter==FILTER_SUB) {
-              filterSub(scanLines, startPos, width);
-            }
-            if(filter==FILTER_UP) {
-              filterUp(scanLines, startPos, width);
-            }
-          }
-        }
-
-        /*
-         * Write these lines to the output area
-         */
-        compBytes.write(scanLines, 0, scanPos);
-
-        startRow+=nRows;
-        rowsLeft-=nRows;
-      }
-      compBytes.close();
-
-      /*
-       * Write the compressed bytes
-       */
-      compressedLines=outBytes.toByteArray();
-      nCompressed=compressedLines.length;
-
-      crc.reset();
-      bytePos=writeInt4(nCompressed, bytePos);
-      bytePos=writeString("IDAT", bytePos);
-      crc.update("IDAT".getBytes());
-      bytePos=writeBytes(compressedLines, nCompressed, bytePos);
-      crc.update(compressedLines, 0, nCompressed);
-
-      crcValue=crc.getValue();
-      bytePos=writeInt4((int)crcValue, bytePos);
-      scrunch.finish();
-      return true;
-    } catch(IOException e) {
-      System.err.println(e.toString());
-      return false;
-    }
-  }
-
-  /**
-   * Write a PNG "IEND" chunk into the pngBytes array.
-   */
-  protected void writeEnd() {
-    bytePos=writeInt4(0, bytePos);
-    bytePos=writeString("IEND", bytePos);
-    crc.reset();
-    crc.update("IEND".getBytes());
-    crcValue=crc.getValue();
-    bytePos=writeInt4((int)crcValue, bytePos);
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/layout/AFlowLayout.java b/graphics/AtlantisJava/src/atlantis/graphics/layout/AFlowLayout.java
deleted file mode 100755
index 1d391e05e845..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/layout/AFlowLayout.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package atlantis.graphics.layout;
-
-import java.awt.Container;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.awt.Component;
-import java.awt.Dimension;
-
-/**
- * This Layout manager aranges the components in a flow like awt.FlowLayout.
- * The difference is that this layout resizes the container to the minimum
- * size after every layout operation, and therefore ensures that all components
- * it laysout are visible. Nothing to do with the layout of the Atlantis canvas.
- */
-
-public class AFlowLayout implements LayoutManager {
-  private int hgap;
-  private int vgap;
-
-  public AFlowLayout(int hgap, int vgap) {
-    this.hgap=hgap;
-    this.vgap=vgap;
-  }
-
-  public void addLayoutComponent(String name, Component comp) {}
-
-  public void removeLayoutComponent(Component comp) {}
-
-  public Dimension minimumLayoutSize(Container target) {
-    return preferredLayoutSize(target);
-  }
-
-  public Dimension preferredLayoutSize(Container target) {
-    Insets insets=target.getInsets();
-    Dimension D=target.getSize();
-    int W=D.width-insets.left-insets.right;
-    int L=hgap;
-    int y=vgap;
-    int w, h, hmax=0;
-
-    for(int i=0; i<target.getComponentCount(); i++) {
-      Dimension d=target.getComponent(i).getPreferredSize();
-
-      w=d.width;
-      h=d.height;
-
-      if(L+w+hgap<W) {
-        L+=w+hgap;
-        if(h>hmax) hmax=h;
-      } else {
-        L=hgap+w+hgap;
-        y+=hmax+vgap;
-        hmax=0;
-        if(h>hmax) hmax=h;
-      }
-    }
-    if(target.getComponentCount()>0)
-      y+=hmax+vgap;
-
-    return new Dimension(W, y);
-  }
-
-  public void layoutContainer(Container target) {
-    Insets insets=target.getInsets();
-    Dimension D=target.getSize();
-    int W=D.width-insets.left-insets.right;
-    int L=hgap;
-    int y=vgap;
-    int from=0;
-    int to=0;
-    int w, h, hmax=0;
-
-    for(int i=0; i<target.getComponentCount(); i++) {
-      Dimension d=target.getComponent(i).getPreferredSize();
-
-      w=d.width;
-      h=d.height;
-
-      if(L+w+hgap<W) {
-        L+=w+hgap;
-        to=i;
-        if(h>hmax) hmax=h;
-      } else {
-        layout(target, hgap+insets.left+(W/2-L/2), y, from, to);
-        L=hgap+w+hgap;
-        from=i;
-        to=i;
-        y+=hmax+vgap;
-        hmax=0;
-        if(h>hmax) hmax=h;
-      }
-    }
-
-    if(target.getComponentCount()>0)
-      layout(target, hgap+insets.left+(W/2-L/2), y, from, to);
-
-    /*
-     if (y + hmax + vgap != D.height)
-     SwingUtilities.invokeLater(new ARunAnotherLayout(target));
-     */
-  }
-
-  public void layout(Container target, int x, int y, int from, int to) {
-    int xi=x;
-
-    for(int i=from; i<=to; i++) {
-      Component comp=target.getComponent(i);
-      Dimension d=comp.getPreferredSize();
-
-      comp.setBounds(xi, y, d.width, d.height);
-      xi+=d.width+hgap;
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/layout/AGridLayout.java b/graphics/AtlantisJava/src/atlantis/graphics/layout/AGridLayout.java
deleted file mode 100755
index 034287a49e1f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/layout/AGridLayout.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package atlantis.graphics.layout;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.LayoutManager2;
-import java.awt.Rectangle;
-
-import javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-
-import atlantis.canvas.ACanvas;
-
-/**
- * This layout manager is a simplification of the
- * <code>ConstrainedGridLayout</code> layout manager written by Charles A.
- * Loomis. This layout manager hase two modes of operation: 1) CONSTRAINED -
- * cell size is calculated by dividing the container size acording to aspect
- * ratio. 2) PREFERRED - cell size is given at creation time
- * 
- * @author Dumitru Petrusca.
- */
-public class AGridLayout implements LayoutManager2
-{
-    private Dimension gridSize;
-    private int cellSize;
-    private Dimension initialSize;
-
-    public final static int CONSTRAINED = 0;
-    public final static int PREFERRED = 1;
-    private int layoutType;
-    private boolean secondLayout;
-
-    final public static String GRID_SIZE_ERROR = "Grid size must have width and height > 0.";
-
-    final public static String ASPECT_RATIO_ERROR = "Aspect ratio must have width and height > 0.";
-
-    final public static String CONSTRAINT_ERROR = "Constraint must be a Rectangle with positive width and height.";
-
-    final public static String AGRID_LAYOUT_CONSTRAINT = "ConstrainedGridLayout.RectangularConstraint";
-
-    /**
-     * Creates a new GridLayout of type CONSTRAINNED.
-     */
-    public AGridLayout(Dimension gridSize, Dimension initialSize)
-    {
-        layoutType = CONSTRAINED;
-        setGridSize(gridSize);
-        secondLayout = true;
-        this.initialSize = initialSize;
-    }
-
-    /**
-     * Creates a new GridLayout of type PREFERRED
-     */
-    public AGridLayout(Dimension gridSize, int cellSize)
-    {
-        layoutType = PREFERRED;
-        setGridSize(gridSize);
-        this.cellSize = cellSize;
-        secondLayout = false;
-        initialSize = null;
-    }
-
-    private void setGridSize(Dimension gridSize)
-    {
-        // Check that all of the dimensions given are reasonable.
-        if (gridSize.width <= 0 || gridSize.height <= 0 || gridSize.width > 100 || gridSize.height > 100)
-            throw new IllegalArgumentException(GRID_SIZE_ERROR);
-
-        // Copy the information into the layout manager.
-        this.gridSize = new Dimension(0, 0);
-        this.gridSize.setSize(gridSize);
-    }
-
-    public Dimension getGridSize()
-    {
-        return new Dimension(gridSize);
-    }
-
-    /**
-     * Set (or reset) the constraints for the given component.
-     */
-    public void setConstraints(Component comp, Rectangle constraints)
-    {
-        if (comp instanceof JComponent)
-        {
-            Rectangle copy = new Rectangle(constraints);
-            JComponent jc = (JComponent) comp;
-
-            jc.putClientProperty(AGRID_LAYOUT_CONSTRAINT, copy);
-        }
-    }
-
-    /**
-     * Get the constraints being used for the given component.
-     */
-    public Rectangle getConstraints(Component comp)
-    {
-        Rectangle r = null;
-
-        if (comp instanceof JComponent)
-        {
-            JComponent jc = (JComponent) comp;
-            Object constraint = jc.getClientProperty(AGRID_LAYOUT_CONSTRAINT);
-
-            if (constraint instanceof Rectangle)
-                r = (Rectangle) constraint;
-        }
-
-        return (r != null) ? new Rectangle(r) : null;
-    }
-
-    // implementation of LayoutMamager interface
-
-    public void addLayoutComponent(String name, Component comp)
-    {}
-
-    public void removeLayoutComponent(Component comp)
-    {}
-
-    public Dimension preferredLayoutSize(Container parent)
-    {
-        if (layoutType == CONSTRAINED)
-        {
-            Dimension d = parent.getSize();
-            if (initialSize != null)
-            {
-                d = new Dimension(initialSize);
-                initialSize = null;
-            }
-
-            int hCellSize = d.width / gridSize.width;
-            int vCellSize = d.height / gridSize.height;
-            if(ACanvas.getCanvas().getCurrentLayout().getName().equals("FULL SCREEN"))
-            {
-                return new Dimension(gridSize.width * hCellSize, gridSize.height * vCellSize);
-            }
-            cellSize = Math.min(hCellSize, vCellSize);
-        }
-
-        return new Dimension(gridSize.width * cellSize, gridSize.height * cellSize);
-    }
-
-    public Dimension minimumLayoutSize(Container parent)
-    {
-        return preferredLayoutSize(parent);
-    }
-
-    public void layoutContainer(Container parent)
-    {
-        Dimension d = parent.getSize();
-        int hCellSize = d.width / gridSize.width;
-        int vCellSize = d.height / gridSize.height;
-        int compCount = parent.getComponentCount();
-
-        for (int i = 0; i < compCount; i++)
-        {
-            Component comp = parent.getComponent(i);
-            Rectangle r = getConstraints(comp);
-
-            if (r != null)
-            {
-                if(ACanvas.getCanvas().getCurrentLayout().getName().equals("FULL SCREEN"))
-                    comp.setBounds(r.x * hCellSize, r.y * vCellSize, r.width * hCellSize, r.height * vCellSize);
-                else
-                    comp.setBounds(r.x * cellSize, r.y * cellSize, r.width * cellSize, r.height * cellSize);
-            }
-        }
-
-        if (secondLayout)
-            SwingUtilities.invokeLater(new ARunAnotherLayout(parent));
-    }
-
-    // implementation of LayoutMamager2 interface
-
-    /**
-     * Adds the specified component to the layout, using the specified
-     * constraint object.
-     */
-    public void addLayoutComponent(Component comp, Object constraints)
-    {
-        if (constraints instanceof Rectangle)
-        {
-            Rectangle r = (Rectangle) constraints;
-
-            if (r.width <= 0 || r.height <= 0)
-                throw new IllegalArgumentException(CONSTRAINT_ERROR);
-
-            setConstraints(comp, r);
-        }
-        else if (constraints != null)
-            throw new IllegalArgumentException(CONSTRAINT_ERROR);
-    }
-
-    public Dimension maximumLayoutSize(Container target)
-    {
-        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-    }
-
-    public float getLayoutAlignmentX(Container target)
-    {
-        return 0.5f;
-    }
-
-    public float getLayoutAlignmentY(Container target)
-    {
-        return 0.5f;
-    }
-
-    public void invalidateLayout(Container target)
-    {}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/layout/ARunAnotherLayout.java b/graphics/AtlantisJava/src/atlantis/graphics/layout/ARunAnotherLayout.java
deleted file mode 100755
index ce1330374e3f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/layout/ARunAnotherLayout.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package atlantis.graphics.layout;
-
-
-import java.awt.Container;
-import java.awt.Window;
-import javax.swing.SwingUtilities;
-
-
-/**
- * Used by the Layout Managers to invoke another layout operation.
- * Needed to resize the canvas preserving aspect ratio.
- */
-
-public class ARunAnotherLayout implements Runnable {
-  private Container parent;
-
-  public ARunAnotherLayout(Container parent) {
-    this.parent=parent;
-  }
-
-  public void run() {
-    Window window=SwingUtilities.getWindowAncestor(parent);
-
-    if(window!=null) window.pack();
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/graphics/package.html b/graphics/AtlantisJava/src/atlantis/graphics/package.html
deleted file mode 100644
index 0d498ed42593..000000000000
--- a/graphics/AtlantisJava/src/atlantis/graphics/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>2D graphical classes, graphical primitives.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AAboutDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AAboutDialog.java
deleted file mode 100755
index 62546b209703..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AAboutDialog.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.GridLayout;
-import java.awt.Font;
-import java.awt.Color;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JPanel;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JTextPane;
-import javax.swing.BorderFactory;
-import javax.swing.JFrame;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.utils.AUtilities;
-
-
-/**
- *
- * About information dialog (Help -> About)
- *
- * @author Zdenek Maxa, Mark Stockton
- */
-public class AAboutDialog extends JFrame
-{
-
-    private static JPanel a_panel1 = null;
-    private static JPanel a_panel2 = null;
-    private static JPanel a_panel3 = null;
-    private static JPanel a_panel4 = null;
-    private static JPanel a_textPanel = null;
-    private static JLabel a_label1 = null;
-    private static JTextPane a_label2 = null;
-    private static JLabel a_label3 = null;
-    private static JTextPane a_label4 = null;
-    
-    private static JPanel m_panel1 = null;
-    private static JPanel m_panel2 = null;
-    private static JPanel m_panel3 = null;
-    private static JPanel m_panel4 = null;
-    private static JPanel m_textPanel = null;
-    private static JLabel m_label1 = null;
-    private static JTextPane m_label2 = null;
-    private static JTextPane m_label3 = null;
-    private static JTextPane m_label4 = null;
-    
-    private static JPanel c_panel1 = null;
-    
-    private static JPanel mainPanel = null;
-
-
-    private static JButton closeButton = null;
-
-    private static AAboutDialog instance = null;
-
-    private static final AGlobals globals = AGlobals.instance();
-
-
-    private AAboutDialog(String title)
-    {
-        super(title);
-        try
-        {
-            createGUI();
-            pack();
-        }
-        catch(Exception ex)
-        {
-            ex.printStackTrace();
-        }
-
-        AIcon.setIconImage(this);
-
-    } // AAboutDialog() -----------------------------------------------------
-
-
-
-    private void createGUI()
-    {
-        // top panel - atlantis
-        a_panel1 = new JPanel();
-        a_panel1.setLayout(new GridLayout(1,2));
-
-        // top left text panel (4 lines of text)
-        a_panel2 = new JPanel();
-        a_label2 = new JTextPane();
-        Font font = new Font(a_panel2.getFont().getName(),
-                             Font.BOLD,
-                             a_panel2.getFont().getSize() + 6);
-        a_label2.setFont(font);
-        a_label2.setEditable(false);
-        a_label2.setBackground(a_panel2.getBackground());
-        a_label2.setText(AGlobals.instance().getVersion());
-        a_panel2.add(a_label2);
-
-        a_panel3 = new JPanel();
-        a_label3 = new JLabel("Event display for ATLAS");
-        a_panel3.add(a_label3);
-
-        a_panel4 = new JPanel();
-        a_label4 = new JTextPane();
-        a_label4.setBackground(a_panel4.getBackground());
-        a_label4.setForeground(Color.blue);
-        a_label4.setText("http://www.cern.ch/atlantis" + "\n" +
-                       "hn-atlas-AtlantisDisplay@cern.ch");
-        a_label4.setEditable(false);
-        a_panel4.add(a_label4);
-
-        a_textPanel = new JPanel();
-        a_textPanel.setLayout(new GridLayout(3,1));
-        a_textPanel.add(a_panel2);
-        a_textPanel.add(a_panel3);
-        a_textPanel.add(a_panel4);
-
-        a_panel1.add(a_textPanel);
-
-        String FILE_SEPAR = System.getProperty("file.separator");
-        String homeDirectory = AGlobals.instance().getHomeDirectory();
-        
-        // top right atlantis image
-        String path = homeDirectory + "img" + FILE_SEPAR +
-                      "atlantis_log.gif";
-        a_label1 = new JLabel(AUtilities.getFileAsImageIcon(path));
-        a_panel1.add(a_label1);
-
-        // middle panel - minerva
-        m_panel1 = new JPanel();
-        m_panel1.setLayout(new GridLayout(1,2));
-
-        // middle left minerva image
-        path = homeDirectory + "img" + FILE_SEPAR +
-                      "minerva_log.gif";
-        m_label1 = new JLabel(AUtilities.getFileAsImageIcon(path));
-        m_panel1.add(m_label1);        
-
-        // middle right text panel 
-        m_panel2 = new JPanel();
-        m_label2 = new JTextPane();
-        m_label2.setFont(font);
-        m_label2.setEditable(false);
-        m_label2.setBackground(m_panel2.getBackground());
-        m_label2.setText("MINERVA");
-        m_panel2.add(m_label2);
-
-        m_panel3 = new JPanel();
-        m_label3 = new JTextPane();
-        m_label3.setBackground(m_panel3.getBackground());
-        m_label3.setEditable(false);
-        m_label3.setText("     Masterclass INvolving Event \n Recognition Visualised with Atlantis");
-        m_panel3.add(m_label3);
-
-        m_panel4 = new JPanel();
-        m_label4 = new JTextPane();
-        m_label4.setBackground(m_panel4.getBackground());
-        m_label4.setForeground(Color.blue);
-        m_label4.setText("http://www.cern.ch/atlas-minerva");
-        m_label4.setEditable(false);
-        m_panel4.add(m_label4);
-
-        m_textPanel = new JPanel();
-        m_textPanel.setLayout(new GridLayout(3,1));
-        m_textPanel.add(m_panel2);
-        m_textPanel.add(m_panel3);
-        m_textPanel.add(m_panel4);
-
-        m_panel1.add(m_textPanel);
-
-        // bottom panel - close button
-        c_panel1 = new JPanel(new BorderLayout());
-        closeButton = new JButton("Close");
-        closeButton.addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AAboutDialog.getInstance().dispose();
-            }
-        });
-        c_panel1.add(closeButton, BorderLayout.EAST);
-        c_panel1.setBorder(BorderFactory.createEmptyBorder(15, 0, 15, 15));
-
-
-        // main panel
-        mainPanel = new JPanel();
-        mainPanel.setLayout(new BorderLayout());
-        mainPanel.add(a_panel1, BorderLayout.NORTH);
-        mainPanel.add(m_panel1, BorderLayout.CENTER);
-        mainPanel.add(c_panel1, BorderLayout.SOUTH);
-
-        this.getContentPane().add(mainPanel, BorderLayout.CENTER);
-
-        this.setResizable(false);
-
-        this.setLocation(globals.getGuiFrame().getLocation());
-
-    } // createGUI() --------------------------------------------------------
-
-
-    public static AAboutDialog getInstance()
-    {
-        if(instance == null)
-        {
-            instance = new AAboutDialog("About Atlantis");
-        }
-        return instance;
-
-    } // getInstance() ------------------------------------------------------
-
-
-
-} // class AAboutDialog =====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ACheckBox.java b/graphics/AtlantisJava/src/atlantis/gui/ACheckBox.java
deleted file mode 100755
index f4af0033a9fa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ACheckBox.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package atlantis.gui;
-
-import java.awt.event.ActionListener;
-import javax.swing.JCheckBox;
-
-/**
- * This class does not generate an ActionEvent
- * when the setSelected() method is called.
- */
-public class ACheckBox extends JCheckBox {
-  ActionListener listener;
-
-  public ACheckBox(String text) {
-    super(text);
-  }
-
-  public ACheckBox() {
-    super();
-  }
-
-  public void addActionListener(ActionListener l) {
-    if(listener==null) {
-      super.addActionListener(listener);
-      listener=l;
-    }
-  }
-
-  public void setSelected(boolean b) {
-    if(listener!=null) super.removeActionListener(listener);
-    super.setSelected(b);
-    if(listener!=null) super.addActionListener(listener);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ACheckNode.java b/graphics/AtlantisJava/src/atlantis/gui/ACheckNode.java
deleted file mode 100755
index e2bac2cf8a3c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ACheckNode.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package atlantis.gui;
-
-import java.util.Iterator;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AStatusParameter;
-import atlantis.parameters.ACommandProcessor;
-import hep.wired.util.DefaultTristateTreeNode;
-import hep.wired.util.TristateCheckBox;
-
-/**
- *
- * @author Qiang
- */
-
-public class ACheckNode extends DefaultTristateTreeNode {
-  
-  public static final byte SINGLE_SELECTION = 0;
-  
-  public static final byte MULTI_SELECTION = 1;
-  
-  private byte selectionMode;
-  
-  private AParameter parameter;
-  
-  public ACheckNode(Object userObject, boolean selectionValue, byte selectionMode, AParameter parameter) {
-    super(userObject, selectionValue, true);
-    setSelectionMode(selectionMode);
-    this.parameter = parameter;
-  }
-  
-  public void setSelectionMode(byte selectionMode) {
-    this.selectionMode = selectionMode;
-  }
-  
-  public byte getSelectionMode() {
-    return this.selectionMode;
-  }
-  
-  public AParameter getParameter(){
-    return this.parameter;
-  }
-  
-  public void updateState(){
-    if(children!=null){
-      int checkedNumber = 0;
-      for(Iterator it=children.iterator(); it.hasNext();){
-        ACheckNode aChildNode = (ACheckNode)it.next();
-        aChildNode.updateState();
-        if(aChildNode.isSelected())
-          checkedNumber++;
-      }
-      if(checkedNumber==0)
-        this.setSelected(false);
-      else
-        this.setSelected(true);
-    } else{
-      ACheckBox cellComponent = (ACheckBox)getUserObject();
-      cellComponent.setSelected(getParameter().getStatus());
-      setSelected(cellComponent.isSelected());
-    }
-  }
-  
-  public void getClicked(boolean selectionFlag, boolean statusChange) {
-    setSelected(selectionFlag);
-    if((parameter instanceof AStatusParameter) && statusChange){
-      // a leaf node is found here
-      AStatusParameter theStatusParameter = (AStatusParameter)parameter;
-      ACommandProcessor.receive(theStatusParameter.getName());
-      theStatusParameter.apply();
-    } else{
-      // parameter is either AStatusRootParameter or AStatusGroupParameter
-      if((selectionMode==MULTI_SELECTION) && (children!=null)){
-        ((TristateCheckBox)this.getUserObject()).setSelected(selectionFlag);
-        for(Iterator it=children.iterator(); it.hasNext();){
-          ACheckNode aChildNode = (ACheckNode)it.next();
-          // either AStatusGrooupParameter node or AStatusParameter node
-          aChildNode.getClicked(selectionFlag, !(aChildNode.isSelected()==selectionFlag));
-        }
-      }
-    }
-    if(parent!=null){
-      ((ACheckNode)parent).updateState();
-    }
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AClosingConfirmationDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AClosingConfirmationDialog.java
deleted file mode 100755
index 3872b0960e51..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AClosingConfirmationDialog.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import javax.swing.JOptionPane;
-
-import atlantis.config.ADefaultValues;
-import atlantis.utils.ALogger;
-
-/**
- *
- * Atlantis application closing confirmation dialog.
- * All Atlantis closing actions can be added here and this
- * class shall be used for closing the application.
- *
- */
-public class AClosingConfirmationDialog extends WindowAdapter
-{
-	private static ALogger logger = ALogger.getLogger(AClosingConfirmationDialog.class);
-	
-    private Frame adaptee;
-
-    
-    public AClosingConfirmationDialog(Frame adaptee)
-    {
-        this.adaptee = adaptee;
-
-    } // AClosingConfirmationDialog() ---------------------------------------
-
-
-
-    public void windowClosing(WindowEvent e)
-    {
-        exitApp();
-
-    } // windowClosing() ----------------------------------------------------
-
-
-
-    public void exitApp()
-    {
-        
-        String msg = "Do you really want to quit Atlantis?";
-        int i = JOptionPane.showConfirmDialog(adaptee, msg, "Exit Atlantis",
-                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
-        if(i == JOptionPane.YES_OPTION)
-        {
-        	logger.debug("Shutting down, going to save runtime values...");        	
-            ADefaultValues.saveRuntimeValues();
-            logger.warn("Shutting down, calling System.exit(0)");
-            System.exit(0);
-        }
-        else
-        {
-            return;
-        }
-
-    } // exitApp() ----------------------------------------------------------
-
-
-
-} // class AClosingConfirmationDialog =======================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AColorComboBoxRenderer.java b/graphics/AtlantisJava/src/atlantis/gui/AColorComboBoxRenderer.java
deleted file mode 100755
index d0eed9427aaf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AColorComboBoxRenderer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.ToolTipManager;
-import javax.swing.BorderFactory;
-import javax.swing.JList;
-import javax.swing.ListCellRenderer;
-import javax.swing.border.Border;
-
-import atlantis.graphics.colormap.AColorMap;
-
-/**
- * The class used as a renderer when displaying the colors in the UI.
- */
-public class AColorComboBoxRenderer extends JLabel
-  implements ListCellRenderer {
-
-  private ColorIcon icon=new ColorIcon();
-  private Border selectedBorder;
-  private Border deselectedBorder=BorderFactory.createEmptyBorder(2, 2, 2, 2);
-
-  public Component getListCellRendererComponent(
-      JList list, Object value, int index,
-      boolean isSelected, boolean cellHasFocus) {
-
-    int colorIndex=((Integer)value).intValue();
-    Color[] colorMap=AColorMap.getColors();
-    Color color=colorMap[colorIndex];
-
-    icon.setColor(color);
-    setIcon(icon);
-    setText(""+((Integer)value).intValue());
-
-    if(isSelected) {
-      selectedBorder=BorderFactory.createLineBorder(list.getSelectionBackground(), 2);
-
-      setBorder(selectedBorder);
-
-      ToolTipManager.sharedInstance().setInitialDelay(1);
-      ToolTipManager.sharedInstance().setReshowDelay(1);
-
-      String message;
-
-      if(color.equals(Color.black))
-        message="Black: ";
-      else if(color.equals(Color.blue))
-        message="Blue: ";
-      else if(color.equals(Color.cyan))
-        message="Cyan: ";
-      else if(color.equals(Color.darkGray))
-        message="DarkGray: ";
-      else if(color.equals(Color.gray))
-        message="Gray: ";
-      else if(color.equals(Color.green))
-        message="Green: ";
-      else if(color.equals(Color.lightGray))
-        message="LightGray: ";
-      else if(color.equals(Color.magenta))
-        message="Magenta: ";
-      else if(color.equals(Color.orange))
-        message="Orange: ";
-      else if(color.equals(Color.pink))
-        message="Pink: ";
-      else if(color.equals(Color.red))
-        message="Red: ";
-      else if(color.equals(Color.white))
-        message="White: ";
-      else if(color.equals(Color.yellow))
-        message="Yellow: ";
-      else
-        message="";
-
-      list.setToolTipText(message+color.getRed()+", "+color.getGreen()+", "+color.getBlue());
-    } else setBorder(deselectedBorder);
-
-    return this;
-  }
-
-  private static class ColorIcon implements Icon {
-	  private int w, h;
-	  private Color color;
-
-	  public ColorIcon() {
-		  this(Color.gray, 50, 15);
-	  }
-
-	  public ColorIcon(Dimension d) {
-		  this.w=d.width;
-		  this.h=d.height;
-	  }
-
-	  public ColorIcon(Color color, int w, int h) {
-		  this.color=color;
-		  this.w=w;
-		  this.h=h;
-	  }
-
-	  public void paintIcon(Component c, Graphics g, int x, int y) {
-		  g.setColor(Color.black);
-		  g.drawRect(x, y, w-1, h-1);
-		  g.setColor(color);
-		  g.fillRect(x+1, y+1, w-2, h-2);
-	  }
-
-	  public Color getColor() {
-		  return color;
-	  }
-
-	  public void setColor(Color color) {
-		  this.color=color;
-	  }
-
-	  public int getIconWidth() {
-		  return w;
-	  }
-
-	  public int getIconHeight() {
-		  return h;
-	  }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AColorHelpDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AColorHelpDialog.java
deleted file mode 100755
index 695a2814bd37..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AColorHelpDialog.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-
-import javax.swing.JFrame;
-import javax.swing.JTextField;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-
-/**
- * The help dialog displays the current color of objects
- * 
- * @author Mark Stockton
- */
-public class AColorHelpDialog extends JFrame implements WindowListener
-{
-    private static JTextField[] textField;
-    public static Color[] colorMap = AColorMap.getColors();
-    private static AColorHelpDialog instance = null;
-
-    private static APar parameterStore = APar.instance();
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    public static AColorHelpDialog getInstance()
-    {
-        if (AGlobals.isAtlantisHeadless()) {
-            return null;
-        }
-        if (instance == null)
-            instance = new AColorHelpDialog();
-        return instance;
-    }
-
-    public void update()
-    {
-        if(!this.isVisible())
-            return;
-        getContentPane().removeAll();
-        validate();
-        
-        String[] dataObjectsToDisplay={"RVx", "TRT", "SiCluster", "SiClusterRDO", "S3D", "PixelCluster", "PixelRDO", "TrigS3D",
-                "MDT", "CSC", "RPC", "TGC",
-                "EmTauROI", "JetROI", "MuonROI", "LVL1TriggerTower", "LVL1JetElement", 
-                "STr", "SNP", "SMTr", "SVx"};
-        String[] dataObjectsWithCollectionsToDisplay={"InDetTrack", "InDetSegment", "Cluster", "MuonTrack", 
-                "MuonSegment", "Jet", "ETMis", "BJet","Electron","Muon","Photon","TauJet","CompositeParticle"};
-        String[] geometryObjectsToDisplay={"PIXFill", "SILFill", "TRTFill", "SolFill", "ECALFill",
-                "HCALFill", "RPCFill", "TGCFill", "MDTFill", "CSCFill", "BkgFill"};
-        
-        int numObjects = Math.max(dataObjectsWithCollectionsToDisplay.length,dataObjectsToDisplay.length);
-        int numOfColumns = 4;
-        getContentPane().setLayout(new GridLayout(numObjects+1,numOfColumns));
-        textField = new JTextField[(numObjects+1)*4];
-        AEvent event = eventManager.getCurrentEvent();
-  
-        //table column titles
-        fillTextField(0, Color.white, Color.black, "       Geometry color");
-        fillTextField(1, Color.white, Color.black, "       Color of objects without collections");
-        fillTextField(2, Color.white, Color.black, "       Color of objects with collections");
-        fillTextField(3, Color.white, Color.black, "       Object Collection");
-
-        //loop over objects
-        for(int j=0; j<numObjects; j++)
-        {
-            int i=4*j + 4;
-            //display geometry color
-            if(j<geometryObjectsToDisplay.length)
-            {
-            	String source = "Det";
-            	if(geometryObjectsToDisplay[j].equals("BkgFill"))
-            		source = "Color";
-                Color backgroundColor=colorMap[parameterStore.get(source, geometryObjectsToDisplay[j]).getI()];
-                //display screen name
-                String text=parameterStore.get(source, geometryObjectsToDisplay[j]).getScreenName();
-                fillTextField(i, backgroundColor, text);
-            }else{
-                fillTextField(i);//nothing to display
-            }
-            
-            i++;
-            //display object without collection color
-            if(j<dataObjectsToDisplay.length){
-                fillTextField(i,dataObjectsToDisplay[j]);
-            }else{
-                fillTextField(i);//nothing to display
-            }
-
-            i++;
-            //display object with collection color
-            if(j<dataObjectsWithCollectionsToDisplay.length){
-                fillTextField(i,dataObjectsWithCollectionsToDisplay[j]);
-            }else{
-                fillTextField(i);//nothing to display
-            }
-
-            //display object collection
-            i++;
-            if(j<dataObjectsWithCollectionsToDisplay.length){
-                //get collections
-                String[] collections=event.getActiveCollectionNames(dataObjectsWithCollectionsToDisplay[j]);
-                String text;
-                //check is on/has collectons/not all selected
-                if(!parameterStore.get("Data", dataObjectsWithCollectionsToDisplay[j]).getStatus() || 
-                        collections==null || collections.length==0)
-                    text = "n/a";
-                else if(collections.length>1)
-                    text = ">1 selected";
-                else
-                {
-                    text = collections[0].substring(dataObjectsWithCollectionsToDisplay[j].length());
-                }
-                fillTextField(i, Color.white, Color.black, text);
-                
-            }else{
-                 fillTextField(i);//nothing to display
-            }
-        }
-        
-        invalidate();
-        pack();
-    }
-    
-    /**
-     * Fills the text field with chosen colours and text
-     * foreground colour and text can be null to just fill background 
-     * 
-     * @param index - textfield index
-     * @param background - background colour
-     * @param foreground - foreground color
-     * @param text - text to display
-     */
-    private void fillTextField(int index, Color background, Color foreground, String text)
-    {
-        if(textField[index]==null)
-            textField[index]=new JTextField();
-        textField[index].setEditable(false);
-        textField[index].setBackground(background);
-        if(foreground!=null)
-            textField[index].setForeground(foreground);
-        if(text!=null)
-            textField[index].setText(text);
-        getContentPane().add(textField[index]);
-    }
-    
-    /**
-     * Will fill a blank text field
-     * 
-     * @param index - textfield index
-     */
-    private void fillTextField(int index)
-    {
-        //nothing to display so set color to be the 
-        //same as the outline color of the text boxes
-        fillTextField(index, (new Color(184,207,229)), null, null);
-    }
-
-    /**
-     * Automatically decides the forground text colour
-     * depending on the background color
-     * 
-     * @param index - textfield index
-     * @param background - background colour
-     * @param text - text to display
-     */
-    private void fillTextField(int index, Color background, String text)
-    {
-        //find out if too dark for black text
-        if( background.getBlue()==background.getRed()
-                && background.getBlue()==background.getGreen()
-                && background.getBlue()<=128)
-            fillTextField(index, background, Color.white, text);
-        else
-            fillTextField(index, background, Color.black, text);
-    }
-    
-    /**
-     * Get information from object for background
-     * colour and objedct name + status gives the text
-     * 
-     * @param index - textfield index
-     * @param object - name of object
-     */
-    private void fillTextField(int index, String object)
-    {
-        //if color by constant or has no colour option (e.g. vertex)
-        if(parameterStore.get(object, "ColorFunction")==null 
-                || parameterStore.get(object, "ColorFunction").getI()==0)
-        {
-            Color backgroundColor=colorMap[parameterStore.get(object, "Constant").getI()];
-            String text = object;
-            if(!parameterStore.get("Data", object).getStatus())
-                text += " - data type not active";
-            fillTextField(index, backgroundColor, text);
-        }
-        else
-        {
-            String text = object;
-            if(parameterStore.get("Data", object).getStatus())
-                text += " is not being colored constant";
-            else
-                text += " - data type not active";
-            fillTextField(index, Color.white, Color.black, text);
-        }
-    }
-        
-    private AColorHelpDialog()
-    {
-        this.setTitle("Current window Geometry and Object colors and Object Collection");
-        AIcon.setIconImage(this);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-
-        this.update();
-        this.setResizable(false);
-        addWindowListener(this);
-
-        // set the initial location
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        int screenHeight = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getHeight());
-        this.setLocation((int) Math.max(0, 0.1*screenWidth), (int) Math.max(0, 0.1*screenHeight));
-    }
-
-    public void dispose()
-    {
-        instance = null;
-        super.dispose();
-    }
-    
-    public void windowOpened(WindowEvent e)
-    {
-        this.update();
-    }
-    
-    public void windowClosing(WindowEvent e)
-    {}
-    
-    public void windowClosed(WindowEvent e)
-    {}
-    
-    public void windowIconified(WindowEvent e)
-    {}
-    
-    public void windowDeiconified(WindowEvent e)
-    {}
-    
-    public void windowActivated(WindowEvent e)
-    {}
-    
-    public void windowDeactivated(WindowEvent e)
-    {}
-    
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AColorMapDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AColorMapDialog.java
deleted file mode 100755
index e0b91297e229..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AColorMapDialog.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Frame;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.colormap.AColorMap;
-
-/**
- * This dialog is displayed when the user wants to change the current color set.
- */
-public class AColorMapDialog extends JDialog implements ActionListener
-{
-    private JPanel choosePanel;
-    private JPanel buttonsPanel;
-    private JButton okButton, cancelButton;
-    private JRadioButton selected;
-    
-    private static final AGlobals globals = AGlobals.instance();
-    
-    public AColorMapDialog()
-    {
-        super(globals.getGuiFrame(), "Select Map Dialog", true);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-        setResizable(false);
-        
-        choosePanel = new JPanel();
-        choosePanel.setBorder(BorderFactory.createTitledBorder(" Select Color Map "));
-        
-        ButtonGroup group = new ButtonGroup();
-        
-        choosePanel.setLayout(new GridLayout(5, 1));
-        for (int i = 0; i < AColorMap.getMapNames().length - 2; i++)
-        { // quick fix to not select hitcolor CT
-            JRadioButton r = new JRadioButton(AColorMap.getMapNames()[i]);
-            
-            r.addActionListener(this);
-            if (AColorMap.getColorMap() == i)
-            {
-                selected = r;
-                r.setSelected(true);
-            }
-            else
-                r.setSelected(false);
-            group.add(r);
-            choosePanel.add(r);
-        }
-        getContentPane().setLayout(new BorderLayout());
-        getContentPane().add(choosePanel, BorderLayout.CENTER);
-        
-        okButton = new JButton("OK");
-        okButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                AColorMap.setColorMap(selected.getText());
-                ACanvas.getCanvas().repaintAllFromScratch();
-                dispose();
-            }
-                });
-        
-        cancelButton = new JButton("Cancel");
-        cancelButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                dispose();
-            }
-                });
-        
-        buttonsPanel = new JPanel();
-        buttonsPanel.add(okButton);
-        buttonsPanel.add(cancelButton);
-        getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
-        pack();
-        
-        // set the initial location
-        Frame owner = globals.getGuiFrame();
-        int guiWidth = owner.getWidth();
-        int guiHeight = owner.getHeight();
-        int guiX = owner.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        if(guiX+guiWidth+(dialogWidth-guiWidth)/2>screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), Math.max(0, (guiHeight - dialogHeight) / 3));
-        setVisible(true);
-    }
-    
-    public void actionPerformed(ActionEvent e)
-    {
-        selected = (JRadioButton) e.getSource();
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AColorMapEditor.java b/graphics/AtlantisJava/src/atlantis/gui/AColorMapEditor.java
deleted file mode 100755
index 1c534d129677..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AColorMapEditor.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JColorChooser;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
-
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.graphics.colormap.MappedColor;
-import atlantis.graphics.layout.AFlowLayout;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.utils.AUtilities;
-
-/**
- * The dialog allows the user to edit the colors maps (at runtime).
- */
-public class AColorMapEditor extends JDialog implements ADragListener
-{
-    private static AColorMapEditor instance;
-    private ADnDLabel[][] labels = new ADnDLabel[AColorMap.getNumMaps()][AColorMap.getNumColors()];
-    private int colorMap;
-    private int index;
-    private MappedColor previousColor;
-    private ADnDLabel source;
-    
-    private JPanel colorPanel, buttonsPanel;
-    private JButton okButton, applyButton, cancelButton;
-    
-    private static final AGlobals globals = AGlobals.instance();
-
-    private AColorMapEditor()
-    {
-        super(globals.getGuiFrame(), "Color Map Editor", false);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-        setResizable(false);
-        colorPanel = new JPanel();
-        colorPanel.setLayout(new GridLayout(AColorMap.getNumColors() + 1, AColorMap.getNumMaps() + 1, 0, 0));
-        
-        // creating the names row
-        JLabel padding = new JLabel("");
-        colorPanel.add(padding);
-        for (int i = 0; i < AColorMap.getNumMaps(); i++)
-        {
-            JLabel label = new JLabel("  " + AColorMap.getMapNames()[i] + "  ", JLabel.CENTER);
-            label.setFont(new Font("Dialog", Font.BOLD, 14));
-            colorPanel.add(label);
-        }
-        
-        // creating the color table
-        Color[] col;
-        MouseListener labelMouseListener = new LabelMouseListener();
-        
-        for (int j = 0; j < AColorMap.getNumColors(); j++)
-        {
-            JLabel label = new JLabel("" + j, JLabel.CENTER);
-            label.setFont(new Font("Dialog", Font.BOLD, 14));
-            colorPanel.add(label);
-            for (int i = 0; i < AColorMap.getNumMaps(); i++)
-            {
-                col = AColorMap.getColors(i);
-                labels[i][j] = new ADnDLabel("text", false);
-                labels[i][j].addDragListener(this);
-                labels[i][j].setOpaque(true);
-                labels[i][j].setBackground(col[j]);
-                labels[i][j].setForeground(col[j]);
-                labels[i][j].setToolTipText(col[j].getRed() + ", " + col[j].getGreen() + ", " + col[j].getBlue());
-                setLineBorder(labels[i][j]);
-                labels[i][j].addMouseListener(labelMouseListener);
-                colorPanel.add(labels[i][j]);
-            }
-        }
-        
-        buttonsPanel = new JPanel();
-        buttonsPanel.setLayout(new AFlowLayout(10, 10));
-        
-        okButton = new JButton("OK");
-        okButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                applyColors();
-                dispose();
-                instance = null;
-            }
-                });
-        buttonsPanel.add(okButton);
-        
-        applyButton = new JButton("Apply");
-        applyButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                applyColors();
-            }
-                });
-        buttonsPanel.add(applyButton);
-        
-        cancelButton = new JButton("Cancel");
-        cancelButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                dispose();
-                instance = null;
-            }
-                });
-        buttonsPanel.add(cancelButton);
-        
-        getContentPane().setLayout(new BorderLayout());
-        getContentPane().add(colorPanel, BorderLayout.CENTER);
-        getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
-        pack();
-        
-        // set the initial location
-        Frame owner = globals.getGuiFrame();
-        int guiWidth = owner.getWidth();
-        int guiHeight = owner.getHeight();
-        int guiX = owner.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        if(guiX+guiWidth+(dialogWidth-guiWidth)/2>screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), Math.max(0, (guiHeight - dialogHeight) / 3));
-        setVisible(true);
-    }
-    
-    public static AColorMapEditor getInstance()
-    {
-        if (instance == null)
-        {
-            instance = new AColorMapEditor();
-        }
-        return instance;
-    }
-    
-    public void updateColors()
-    {
-        if (instance != null)
-        {
-        	MappedColor[][] maps = AColorMap.getMaps();
-            for (int i = 0; i < maps.length; i++)
-                for (int j = 0; j < maps[i].length; j++)
-                {
-                    Color c = maps[i][j];
-                    
-                    labels[i][j].setBackground(c);
-                    labels[i][j].setForeground(c);
-                    labels[i][j].setToolTipText(c.getRed() + ", " + c.getGreen() + ", " + c.getBlue());
-                }
-            repaint();
-        }
-    }
-    
-    public void dragPerformed(Object from, Object to, int action)
-    {
-        ADnDLabel fromLabel = (ADnDLabel) from;
-        ADnDLabel toLabel = (ADnDLabel) to;
-        
-        toLabel.setBackground(fromLabel.getBackground());
-    }
-    
-    class LabelMouseListener extends MouseAdapter
-    {
-        public void mouseClicked(MouseEvent e)
-        {
-            if (SwingUtilities.isLeftMouseButton(e))
-            {
-                source = (ADnDLabel) e.getSource();
-                Color color = JColorChooser.showDialog(instance, "Color Map Editor - Chooser", source.getBackground());
-                if (color != null)
-                {
-                    source.setBackground(color);
-                    source.setForeground(color);
-                    setLineBorder(source);
-                    source.setToolTipText(color.getRed() + ", " + color.getGreen() + ", " + color.getBlue());
-                }
-            }
-        }
-        
-        public void mousePressed(MouseEvent e)
-        {
-            source = (ADnDLabel) e.getSource();
-            getPosition();
-            
-            if (AUtilities.isRightMouseButton(e))
-            {
-                if (index < 8)
-                    for (int j = 8; j < AColorMap.getNumColors(); j++)
-                        labels[colorMap][j].setBackground(labels[colorMap][index].getBackground());
-                else
-                    for (int j = 0; j < 8; j++)
-                        labels[colorMap][j].setForeground(labels[colorMap][index].getForeground());
-                
-            }
-            else if (SwingUtilities.isMiddleMouseButton(e))
-            {
-            	MappedColor[][] maps = AColorMap.getMaps();
-                previousColor = maps[colorMap][index];
-                MappedColor c = maps[colorMap][index];
-                
-                if (c.getGreen() > 128)
-                    maps[colorMap][index] = maps[colorMap][AColorMap.BK];
-                else
-                    maps[colorMap][index] = maps[colorMap][AColorMap.WH];
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-        
-        public void mouseReleased(MouseEvent e)
-        {
-            if (AUtilities.isRightMouseButton(e))
-            {
-                if (index < 8)
-                    for (int j = 8; j < AColorMap.getNumColors(); j++)
-                        labels[colorMap][j].setBackground(labels[colorMap][j].getForeground());
-                else
-                    for (int j = 0; j < 8; j++)
-                        labels[colorMap][j].setForeground(labels[colorMap][j].getBackground());
-            }
-            else if (SwingUtilities.isMiddleMouseButton(e))
-            {
-            	MappedColor[][] maps = AColorMap.getMaps();
-                maps[colorMap][index] = previousColor;
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-    }
-    
-    private void setLineBorder(JComponent comp)
-    {
-        comp.setBorder(BorderFactory.createLineBorder(new Color(207, 207, 207), 3));
-    }
-    
-    private void getPosition()
-    {
-        for (int i = 0; i < AColorMap.getNumMaps(); i++)
-            for (int j = 0; j < AColorMap.getNumColors(); j++)
-                if (labels[i][j] == source)
-                {
-                    colorMap = i;
-                    index = j;
-                    break;
-                }
-    }
-    
-    private void applyColors()
-    {
-    	MappedColor[][] maps = AColorMap.getMaps();
-        for (int i = 0; i < maps.length; i++)
-            for (int j = 0; j < maps[i].length; j++)
-            {
-                Color c = labels[i][j].getBackground();
-                
-                maps[i][j] = new MappedColor(c.getRed(), c.getGreen(), c.getBlue(), j);
-            }
-        AGUI.getGUI().repaintTable();
-        ACanvas.getCanvas().repaintAllFromScratch();
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AComboBox.java b/graphics/AtlantisJava/src/atlantis/gui/AComboBox.java
deleted file mode 100755
index d91a35879b6e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AComboBox.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package atlantis.gui;
-
-
-import java.awt.event.ItemListener;
-import javax.swing.JComboBox;
-
-
-/**
- * This class does not generate an ItemEvent
- * when the setSelectedItem() method is called.
- */
-
-public class AComboBox extends JComboBox {
-  private ItemListener listener;
-
-  /**
-   * Just calls the superclass constructor.
-   */
-  public AComboBox() {
-    super();
-  }
-
-  /**
-   * Set the GUIItemListener to be informed of ItemEvents.
-   * Only one listener is allowed.
-   * @param aListener
-   */
-  public void setGUIItemListener(ItemListener aListener) {
-	// Remove any existing listeners.
-    for (ItemListener listener : this.getItemListeners()) this.removeItemListener(listener);
-    super.addItemListener(aListener);
-    listener=aListener;
-  }
-  
-  /**
-   * Check whether the GUIItemListener has already been set.
-   * @return true if this AComboBox has a GUIItemListener
-   */
-  public boolean hasGUIItemListener() {return (listener!=null);}
-
-  /**
-   * Set the selected item without telling any item listeners.
-   * @param item
-   */
-  public void setGUISelectedItem(Object item) {
-    if(listener!=null) super.removeItemListener(listener);
-    super.setSelectedItem(item);
-    if(listener!=null) super.addItemListener(listener);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AConfigWriter.java b/graphics/AtlantisJava/src/atlantis/gui/AConfigWriter.java
deleted file mode 100755
index a903e939ef44..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AConfigWriter.java
+++ /dev/null
@@ -1,417 +0,0 @@
-package atlantis.gui;
-
-import java.awt.geom.Point2D;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Vector;
-
-import javax.swing.JOptionPane;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParametersGroup;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-
-/**
- *
- * <ul><li>Reads the configuration file (given file name) and makes the corrections
- * according to the actual configuration which might have been changed by the
- * user.</li>
- * <li>Reads parameters differences (values from the parameters store).</li>
- * <li>Reads canvas / window configuration.</li>
- * <li>Creates XML config files from three above parts.</li></ul>
- *
- * <p>Writes out the current status. This is not a robust piece of code and make
- * break if the format of config.xml is changed by hand.
- * This class should throw an exception if there is a problem.
- * </p>
- *
- * @author Gary Taylor, Zdenek Maxa
- */
-public class AConfigWriter
-{
-
-	private static ALogger logger = ALogger.getLogger(AConfigWriter.class);
-	
-	protected static APar parameterStore = APar.instance();
-
-    private AConfigWriter()
-    {
-    }
-
-    /**
-     * Main method from the class
-     * @param sourceFile String
-     * @return String
-     */
-    public static String getConfiguration(String sourceFile)
-    {
-    	logger.trace("Trying to read the distribution configuration ...");
-        String config = null;
-        StringBuffer output = new StringBuffer("");
-
-        config = readConfiguration(sourceFile);
-
-        if(config != null)
-        {
-        	logger.debug("Loading source configuration successful.");
-            output.append(config);
-            output.append(getParametersDifferences());
-            output.append(getWindowCorners());
-            output.append("\n</AtlantisConfiguration>\n");
-            return output.toString();
-        }
-        else
-        {
-        	logger.error("Loading source configuration failed.");
-            return null;
-        }
-    } // getConfiguration() -------------------------------------------------
-
-
-
-    private static String getParametersDifferences()
-    {
-        StringBuffer output = new StringBuffer("");
-
-        output.append("\n\n");
-        output.append("\t<ParameterDifferences>\n");
-
-        AParametersGroup[][] group = parameterStore.getUIGroups();
-        for(int i = 0; i < group.length; i++)
-        {
-          for(int j = 0; j < group[i].length; j++)
-          {
-              Vector v = group[i][j].getParameters(999);
-              for(int k = 0; k < v.size(); ++k)
-              {
-                  output.append(((AParameter)v.elementAt(k)).getDifferences(group[i][j].getGroupName()));
-              }
-          }
-        }
-        output.append("\t</ParameterDifferences>\n\n");
-
-        return output.toString();
-
-    } // getParametersDifferences() -----------------------------------------
-
-
-
-    private static String getWindowCorners()
-    {
-        StringBuffer output = new StringBuffer("");
-
-        output.append("\n\n");
-        output.append("\t<WindowCorners>\n");
-
-        String[] windowNames = ACanvas.getCanvas().getKnownWindowNames();
-
-        for(int i = 0; i < windowNames.length; i++)
-        {
-            Point2D.Double[] corners =
-                ACanvas.getCanvas().getWindow(windowNames[i]).getUserCorners();
-            if(corners != null)
-            {
-                output.append("\t\t<CORNERS windowName=\"" +
-                              windowNames[i] + "\"");
-                for(int j = 0; j < corners.length; ++j)
-                {
-                  output.append(" x" + j + "=\"" + corners[j].getX() + "\"");
-                  output.append(" y" + j + "=\"" + corners[j].getY() + "\"");
-                }
-                output.append("/>\n");
-            }
-        }
-
-        output.append("\t</WindowCorners>\n\n\n");
-
-        return output.toString();
-    } // getWindowCorners() -------------------------------------------------
-
-
-    // Read one logic line from xml file
-    // contain <....> or <..../>
-    private static String readLogicLine(BufferedReader reader) throws IOException
-    {
-        String startLine = reader.readLine();
-        if(startLine == null)
-            return null;
-        
-        StringBuffer logicLine = new StringBuffer(startLine);
-        
-        while(logicLine.indexOf("<") >= 0 && logicLine.indexOf(">") < 0)
-        {
-            logicLine.append("\n");
-            logicLine.append(reader.readLine()); 
-        }
-        return logicLine.toString();
-    }
-    
-    
-    private static String readConfiguration(String fileName)
-    {
-        String groupName = "";
-        String parameterName = "";
-        AParameter aParam = null;
-        BufferedReader curr = null;
-        String str;
-        StringBuffer buffer = new StringBuffer(""); // working buffer
-        StringBuffer output = new StringBuffer(""); // final result
-        boolean inComment = false;
-
-        try
-        {
-        	logger.debug("Trying to open configuration file: " + fileName);
-        	InputStream fis = AUtilities.getFileAsStream(fileName);
-        	InputStreamReader isr = new InputStreamReader(fis);
-        	curr = new BufferedReader(isr, 10000);
-            
-        	while((str = readLogicLine(curr)) != null)
-            {
-                buffer = new StringBuffer(str);
-                // in a comment ?
-                if(buffer.indexOf("<!--") >= 0)
-                {
-                    inComment = true;
-                }
-                if(buffer.indexOf("-->") >= 0)
-                {
-                    inComment = false;
-                }
-                if(!inComment)
-                {
-                    // nearly finished writing
-                    if(buffer.indexOf("</Parameters>") >= 0)
-                    {
-                        output.append(buffer);
-                        output.append("\n");
-                        break;
-                    }
-                    
-                    // modification in the initialisation
-                    if(buffer.indexOf("<Canvas") >= 0) {
-                        buffer = replace(buffer, "startupLayout", ACanvas.getCanvas().getCurrentLayout().getName());
-                        String ar = Double.toString(ACanvas.getCanvas().getAspectRatio());
-                        buffer = replace(buffer, "aspectRatio", ar);
-                    }
-                    
-                    if(buffer.indexOf("<UsedWindow") >= 0)
-                    {
-                        String name = get(buffer, "name");
-                        if(name != null)
-                        {
-                            AWindow w = ACanvas.getCanvas().getWindow(name);
-                            if(w != null)
-                            {
-                                if(w.getProjection() != null)
-                                {
-                                    buffer = replace(buffer, "projection", w.getProjection().getName());
-                                }
-                                buffer = replace(buffer, "group", w.getGroupName());
-                            }
-                        }
-                    }
-
-                    if(buffer.indexOf("<Layout") >= 0)
-                    {
-                        String name = get(buffer, "name");
-                        if(name != null && name.equals(ACanvas.getCanvas().getCurrentLayout().getName()))
-                        {
-                            buffer = replace(buffer, "startupWindow", ACanvas.getCanvas().getCurrentWindowName());
-                            buffer = replace(buffer, "startup", ACanvas.getCanvas().getStartupString());
-                        }
-                    }
-
-                    // new group encountered
-                    if(buffer.indexOf("<Group") >= 0)
-                    {
-                        groupName = get(buffer, "name");
-                    }
-
-                    // new parameter encountered
-                    aParam = null;
-                    if(buffer.indexOf(" fn=\"") >= 0 &&
-                       buffer.indexOf("<StatusRoot") < 0 &&
-                       buffer.indexOf("<StatusGroup") < 0)
-                    {
-                        parameterName = removeSpaces(get(buffer, "fn"));
-                        aParam = parameterStore.getUnknown(groupName, parameterName);
-                    }
-                    if(aParam != null)
-                    {
-                        // replacing status
-                        if(buffer.indexOf(" st=\"") >= 0)
-                        {
-                            String status = "OFF";
-                            if(aParam.getStatus())
-                            {
-                                status = "ON";
-                            }
-                            buffer = replace(buffer, "st", status);
-                        }
-
-                        // replacing value
-                        if(buffer.indexOf(" va=\"") >= 0)
-                        {
-                            String value = aParam.getValue();
-                                                        
-                            if(parameterName.equals("Area/Energy"))
-                            {
-                                value = "0.0";
-                            }
-                            // for instance Track Collections listbox should
-                            // always remain:
-                            // sn="Track Collections" va="0" pv="none=0"
-                            // current 'value' mustn't be put there
-                            else if(parameterName.endsWith("Collections"))
-                            {
-                                value = "0";
-                            }
-                            buffer = replace(buffer, "va", value);
-                                                     
-                        }
-
-                        // replacing operator
-                        if(buffer.indexOf(" dop=\"") >= 0)
-                        {
-                            String dop = aParam.getOperator();
-                            if(dop.equals("<"))
-                            {
-                                dop = "&lt;";
-                            }
-                            if(dop.equals("<="))
-                            {
-                                dop = "&le;";
-                            }
-                            if(dop.equals(">"))
-                            {
-                                dop = "&gt;";
-                            }
-                            if(dop.equals(">="))
-                            {
-                                dop = "&ge;";
-                            }
-                            buffer = replace(buffer, "dop", dop);
-                        }
-
-                        // replacing scope
-                        if(buffer.indexOf(" scope=\"") >= 0)
-                        {
-                            if(aParam.getScope() == AParameter.GLOBAL)
-                            {
-                                buffer = replace(buffer, "scope", "GLOBAL");
-                            }
-                            else if(aParam.getScope() == AParameter.LOCAL)
-                            {
-                                buffer = replace(buffer, "scope", "LOCAL");
-                            }
-                        }
-                        else if(buffer.indexOf(" fn=\"") > 0)
-                        {
-                            // in a parameter - adding scope if needed
-                            if(aParam.getScope() != parameterStore.getGroup(groupName).getScope())
-                            {
-                                int index = buffer.indexOf("/>");
-                                if(index > 0)
-                                {
-                                    if(aParam.getScope() == AParameter.GLOBAL)
-                                    {
-                                        buffer.insert(index,
-                                            " scope=\"GLOBAL\"");
-                                    }
-                                    else
-                                    {
-                                        buffer.insert(index,
-                                            " scope=\"LOCAL\"");
-                                    }
-                                }
-                            }
-                        }
-                    } // aParam != null
-                } // !inComment
-                output.append(buffer);
-                output.append("\n");
-            } // while
-            curr.close();
-        } // try
-        catch(IOException ex)
-        {
-        	String m = "I/O error occured when reading the source " +
-        	           "configuration file: " + fileName;
-        	logger.error(m);
-        	logger.debug(m, ex);
-            output = null;
-        }
-    	catch(AAtlantisException ae)
-    	{
-    		//throw ae;
-    	}
-        
-
-        return (output != null) ? output.toString() : null;
-        
-    } // readConfiguration() ------------------------------------------------
-
-
-
-   /**
-    * Removing spaces from the parameter name
-    * @param name String
-    * @return String
-    */
-    private static String removeSpaces(String name)
-    {
-        StringBuffer strBuffer = new StringBuffer(name);
-        int i = 0;
-        while(i < strBuffer.length())
-        {
-            if(Character.isWhitespace(strBuffer.charAt(i)))
-            {
-                strBuffer.deleteCharAt(i);
-            }
-            else
-            {
-                i++;
-            }
-        }
-        return new String(strBuffer);
-    } // removeSpaces() -----------------------------------------------------
-
-
-    private static StringBuffer replace(StringBuffer s, String variable, String text)
-    {
-        int name = s.indexOf(variable + "=\"");
-        if(name >= 0)
-        {
-            int start = s.indexOf("\"", name);
-            int stop = s.indexOf("\"", start + 1);
-            s.delete(start + 1, stop);
-            s.insert(start + 1, text);
-        }
-        
-        return s;
-    } // replace() ----------------------------------------------------------
-
-
-    private static String get(StringBuffer s, String variable)
-    {
-        // insert a space before the variable name to prevent from the variable
-        // name is a substring of another variable name
-        int name = s.indexOf(" " + variable + "=\"");
-        if(name >= 0)
-        {
-            int start = s.indexOf("\"", name);
-            int stop = s.indexOf("\"", start + 1);
-            return s.substring(start + 1, stop);
-        }
-        return null;
-    } // get() --------------------------------------------------------------
-
-} // class AConfigWriter ====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AControlButton.java b/graphics/AtlantisJava/src/atlantis/gui/AControlButton.java
deleted file mode 100755
index 007cd0427571..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AControlButton.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package atlantis.gui;
-
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.Timer;
-import javax.swing.JButton;
-
-/**
- * This class is not used at the moment.
- * Was used to control animation.
- */
-public class AControlButton extends JButton {
-
-  public static final int STANDARD_ACTION=0;
-  public static final int ACCELERATED_ACTION=1;
-
-  private ActionListener controlListener;
-  private ActionEvent standardAction, acceleratedAction;
-  private long ticks;
-  private Timer timer;
-  private int initialDelay;
-  private int tickLength;
-  private int accelerationLimit;
-  private boolean ignoreClick=false;
-
-  public AControlButton(String text, int initialDelay, int tickLength, int accelerationLimit) {
-    super(text);
-    this.initialDelay=initialDelay;
-    this.tickLength=tickLength;
-    this.accelerationLimit=accelerationLimit;
-    initialize();
-  }
-
-  private void initialize() {
-    standardAction=new ActionEvent(this, 0, "", STANDARD_ACTION);
-    acceleratedAction=new ActionEvent(this, 0, "", ACCELERATED_ACTION);
-
-    timer=new Timer(tickLength, new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        ticks++;
-        fireControlActionPerformed();
-        ignoreClick=true;
-      }
-    });
-    timer.setInitialDelay(initialDelay);
-
-    addMouseListener(new MouseAdapter() {
-      public void mousePressed(MouseEvent e) {
-        ticks=0;
-        timer.restart();
-      }
-
-      public void mouseReleased(MouseEvent e) {
-        timer.stop();
-      }
-
-      public void mouseClicked(MouseEvent e) {
-        if(ignoreClick)
-          ignoreClick=false;
-        else
-          fireControlActionPerformed();
-      }
-    });
-
-  }
-
-  private void fireControlActionPerformed() {
-    if(controlListener!=null) {
-      if(ticks>accelerationLimit)
-        controlListener.actionPerformed(acceleratedAction);
-      else
-        controlListener.actionPerformed(standardAction);
-    }
-  }
-
-  public void addControlActionListener(ActionListener controlListener) {
-    if(this.controlListener!=null)
-      throw new Error("AControlButton supports only 1 listener");
-    this.controlListener=controlListener;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ACrashReporter.java b/graphics/AtlantisJava/src/atlantis/gui/ACrashReporter.java
deleted file mode 100644
index d47949481a8f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ACrashReporter.java
+++ /dev/null
@@ -1,232 +0,0 @@
-// NOTE: revert to previous version once support for Java 1.5 is dropped
-
-package atlantis.gui;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.globals.AGlobals;
-import java.awt.Desktop;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.net.URI;
-import java.net.URLEncoder;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-
-/**
- * This class handles any unhandled exception (program crash). It asks the user for
- * permission to submit a crash report by e-mail and pre-formats the message. It then
- * fires the default system mail client with this message to allow the user to add
- * additional commands and send it.
- *
- * @author Eric Jansen
- */
-public class ACrashReporter implements UncaughtExceptionHandler {
-
-    // Dialog asking for permission to report the crash
-    private static final String title = "An uncaught exception occured";
-    private static final String msg =
-            "An uncaught exception occured!\n\n"
-            + "Please help us prevent this in the future by reporting this incident.\n"
-            + "If you click yes, Atlantis will try to open your mail client and create\n"
-            + "a preformatted crash report for you. You can review the information\n"
-            + "and add additional comments before it is sent.\n\n"
-            + "Do you want to report this crash?";
-
-    // Address that receives crash reports, chopped up in case spiders go through this code
-    private static final String address = "atlas-atlantis-developers" + "@" + "cern" + "." + "ch";
-
-    // Tag for easy filtering, prefix for the mail subject
-    private static final String tag = "[crash-report] ";
-
-    // System properties included in the report
-    private static final String[] properties = {
-        "java.version", "java.vendor", "java.vm.specification.version",
-        "java.vm.specification.vendor", "java.vm.specification.name", "java.vm.version",
-        "java.vm.vendor", "java.vm.name", "java.specification.version", "java.specification.vendor",
-        "java.specification.name", "os.name", "os.arch", "os.version"};
-
-    /** Flag indicating whether CrashReporter has already been shown */
-    private static boolean shownCrashReporter = false;
-    
-    /**
-     * Exception handler for uncaught exceptions in Atlantis. The only way to
-     * "handle" such an exception is to tell the developers that they failed.
-     * So that is what we will do.
-     * @param t thread
-     * @param e uncaught exception
-     */
-    public void uncaughtException(Thread t, Throwable e) {
-    	// Ensure this only happens once
-    	if (shownCrashReporter) return;
-    	shownCrashReporter = true;
-    	
-        int confirm = JOptionPane.showConfirmDialog(null, msg, title,
-                JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null);
-
-        if (confirm == JOptionPane.YES_OPTION) {
-            String report = "### Please explain briefly what you did when the problem occured (optional)\n\n";
-
-            report += "\n### Exception information\n\n";
-            report += getExceptionInformation(e);
-
-            report += "\n### General information\n\n";
-            report += getGeneralInformation();
-
-            report += "\n### Event information\n\n";
-            report += getEventInformation();
-
-            // If possible, we open the mail client and create a new message
-            if (Desktop.isDesktopSupported()) {
-                Desktop desktop = Desktop.getDesktop();
-
-                if (desktop.isSupported(Desktop.Action.MAIL)) {
-                    String subject = getSubject(e);
-                    try {
-                        URI uri = new URI("mailto:" + address + "?SUBJECT="
-                                + encode(subject) + "&BODY=" + encode(report));
-                        desktop.mail(uri);
-                    } catch (Throwable ex) {
-                        // Something went wrong, save report to file instead
-                        saveToFile(report);
-                    }
-                } else {
-                    // No mail support, save report to file instead
-                    saveToFile(report);
-                }
-            } else {
-                // No desktop support, save report to file instead
-                saveToFile(report);
-            }
-        }
-    }
-
-    /**
-     * Provides mail encoding of a string (URLEncoding but with %20 for space)
-     * @param s string to encode
-     * @return encoded string
-     */
-    private static String encode(String s) {
-        try {
-            return URLEncoder.encode(s, "utf-8").replaceAll("\\+", "%20");
-        } catch (Throwable ex) {
-            return s;
-        }
-    }
-
-    /**
-     * This provides is the backup option if starting the mail client doesn't
-     * work. The report will be saved to a local file and we ask the user to
-     * send it.
-     * @param report crash report contents
-     */
-    private void saveToFile(String report) {
-        String directory = AGlobals.instance().getHomeDirectory();
-        JFileChooser chooser = new JFileChooser(directory);
-        chooser.setDialogTitle("Save crash report");
-        chooser.setSelectedFile(new File("crash-report.txt"));
-
-        // Remind people where this report should go at the top of the file
-        report = "### Atlantis crash report, please send to " + address + "\n\n"
-                + report;
-
-        // Continue asking until the user chooses a valid file or cancels
-        while (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
-            File file = chooser.getSelectedFile();
-            try {
-                OutputStream out = new FileOutputStream(file.getAbsolutePath());
-                out.write(report.getBytes());
-                out.close();
-
-                JOptionPane.showMessageDialog(null, "The crash report has been saved successfully.\n"
-                        + "Please send the file to " + address);
-                return;
-            } catch (Throwable ex) {
-                JOptionPane.showMessageDialog(null, "Cannot write file: " + ex.toString());
-            }
-        }
-    }
-
-    /**
-     * Takes the exception and finds the most helpful mail subject, in general
-     * the exact location of the crash should be helpful when dealing with a 
-     * lot of reports.
-     * @param e uncaught exception
-     * @return subject string
-     */
-    private static String getSubject(Throwable e) {
-        StackTraceElement[] st = e.getStackTrace();
-        if (st.length > 0) {
-            return tag + st[0].toString();
-        } else {
-            return tag + e.toString();
-        }
-    }
-
-    /**
-     * Formats general information about the system, Java and Atlantis
-     * @return information string
-     */
-    private static String getGeneralInformation() {
-        StringBuilder s = new StringBuilder();
-        s.append("Atlantis version = " + AGlobals.instance().getVersion() + "\n");
-
-        for (String property : properties) {
-            String value = System.getProperty(property);
-            if (value == null) {
-                value = "(not set)";
-            }
-            s.append(property + " = " + value + "\n");
-        }
-
-        return s.toString();
-    }
-
-    /**
-     * Formats stack trace and exception information
-     * @param e unhandled exception
-     * @return information string
-     */
-    private static String getExceptionInformation(Throwable e) {
-        StringBuilder s = new StringBuilder();
-        String pad = "";
-
-        s.append(e.toString() + "\n\n");
-
-        StackTraceElement[] st = e.getStackTrace();
-        for (StackTraceElement traceline : st) {
-            s.append(pad + traceline + "\n");
-            pad = "  ";
-        }
-
-        return s.toString();
-    }
-
-    /**
-     * Formats event information, such as source, file, run/event and datatypes
-     * @return information string
-     */
-    private static String getEventInformation() {
-        StringBuilder s = new StringBuilder();
-        AEventManager eventManager = AEventManager.instance();
-        AEvent event = eventManager.getCurrentEvent();
-        if (event == null) {
-            return "(no current event)";
-        }
-
-        s.append("Source = " + event.getSourceName() + "\n");
-        s.append("Run = " + event.getRunNumber() + "\n");
-        s.append("Event = " + event.getEventNumber() + "\n");
-
-        s.append("\nData types present:\n");
-        String[][] info = event.getInfo();
-        for (String[] item : info) {
-            s.append("  " + item[0] + " (" + item[1] + ")\n");
-        }
-
-        return s.toString();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ADefaultCellAttribute.java b/graphics/AtlantisJava/src/atlantis/gui/ADefaultCellAttribute.java
deleted file mode 100755
index 1a17ebd0ef97..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ADefaultCellAttribute.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Dimension;
-
-public class ADefaultCellAttribute
-{
-    public static final int ROW    = 0;
-    public static final int COLUMN = 1;
-    
-    //
-    // !!!! CAUTION !!!!!
-    // these values must be synchronized to Table data
-    //
-    protected int rowSize;
-    protected int columnSize;
-    protected int[][][] span;
-
-    public ADefaultCellAttribute()
-    {
-        this(1, 1);
-    }
-
-    public ADefaultCellAttribute(int numRows, int numColumns)
-    {
-        setSize(new Dimension(numColumns, numRows));
-    }
-
-    protected void initValue()
-    {
-        for (int i = 0; i < span.length; i++)
-        {
-            for (int j = 0; j < span[i].length; j++)
-            {
-                span[i][j][COLUMN] = 1;
-                span[i][j][ROW] = 1;
-            }
-        }
-    }
-
-    public int[] getSpan(int row, int column)
-    {
-        if (isOutOfBounds(row, column))
-        {
-            int[] ret_code = { 1, 1 };
-            return ret_code;
-        }
-        return span[row][column];
-    }
-
-    public boolean isVisible(int row, int column)
-    {
-        if (isOutOfBounds(row, column))
-            return false;
-        if ((span[row][column][COLUMN] < 1)
-                || (span[row][column][ROW] < 1))
-            return false;
-        return true;
-    }
-
-    public void combine(int[] rows, int[] columns)
-    {
-        if (isOutOfBounds(rows, columns))
-            return;
-        int rowSpan = rows.length;
-        int columnSpan = columns.length;
-        int startRow = rows[0];
-        int startColumn = columns[0];
-        for (int i = 0; i < rowSpan; i++)
-        {
-            for (int j = 0; j < columnSpan; j++)
-            {
-                if ((span[startRow + i][startColumn + j][COLUMN] != 1)
-                        || (span[startRow + i][startColumn + j][ROW] != 1))
-                {
-                    return;
-                }
-            }
-        }
-        for (int i = 0, ii = 0; i < rowSpan; i++, ii--)
-        {
-            for (int j = 0, jj = 0; j < columnSpan; j++, jj--)
-            {
-                span[startRow + i][startColumn + j][COLUMN] = jj;
-                span[startRow + i][startColumn + j][ROW] = ii;
-            }
-        }
-        span[startRow][startColumn][COLUMN] = columnSpan;
-        span[startRow][startColumn][ROW] = rowSpan;
-    }
-
-    public Dimension getSize()
-    {
-        return new Dimension(rowSize, columnSize);
-    }
-
-    public void setSize(Dimension size)
-    {
-        columnSize = size.width;
-        rowSize = size.height;
-        span = new int[rowSize][columnSize][2]; // 2: COLUMN,ROW
-        initValue();
-    }
-
-    protected boolean isOutOfBounds(int row, int column)
-    {
-        if ((row < 0) || (rowSize <= row) || (column < 0)
-                || (columnSize <= column))
-        {
-            return true;
-        }
-        return false;
-    }
-
-    protected boolean isOutOfBounds(int[] rows, int[] columns)
-    {
-        for (int i = 0; i < rows.length; i++)
-        {
-            if ((rows[i] < 0) || (rowSize <= rows[i]))
-                return true;
-        }
-        for (int i = 0; i < columns.length; i++)
-        {
-            if ((columns[i] < 0) || (columnSize <= columns[i]))
-                return true;
-        }
-        return false;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ADemoDialog.java b/graphics/AtlantisJava/src/atlantis/gui/ADemoDialog.java
deleted file mode 100755
index be69b6c21e26..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ADemoDialog.java
+++ /dev/null
@@ -1,434 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSeparator;
-import javax.swing.JSpinner;
-import javax.swing.JTextField;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.SwingConstants;
-import javax.swing.WindowConstants;
-import javax.swing.border.Border;
-
-import java.util.Arrays;
-import java.util.Vector;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.projection.AProjectionsManager;
-import atlantis.parameters.ACommandProcessor;
-import atlantis.utils.ALogger;
-
-
-
-
-
-/**
- * A Dialog in which user can set parameters for demo mode, as well as start and
- * stop the demo mode. This class holds and controls the demo loop thread. 
- * This is a singleton, but there is no point why it needs to be.
- *
- * @author Sebastian Boeser (with traces from Qiang Lu)
- */
-public class ADemoDialog extends JFrame implements ActionListener
-{
-    //Get a logger
-    private final static ALogger logger = ALogger.getLogger(ADemoDialog.class);
-
-    //Some GUI elements
-    private JSpinner timerSpinner;
-    private SpinnerNumberModel timerSpinnerModel;
-    private static final Integer TIMER_MIN = new Integer(1);
-    private static final Integer TIMER_MAX = new Integer(120);
-    private static final Integer TIMER_INIT = new Integer(3);
-
-    //The text label showing the projection sequence
-    private JTextField sequenceTextField = null;
-    //And the panel housing these
-    private JPanel projControlPanel=null;
-    
-    //The action buttons
-    private JButton startButton = null;
-    private JButton stopButton = null;
-    private JButton closeButton = null;
-
-
-    //The thread that is runing the loop
-    private ADemoLoop demo = null;
-
-    private static final AGlobals globals = AGlobals.instance();
-
-    //The singleton instance
-    private static ADemoDialog instance = null;
-
-    /**
-     * Public access-instantiation accessor
-     * @return the singleton instance
-     */
-    public static ADemoDialog getInstance(){
-      //Create instance if needed
-      if (instance == null) instance = new ADemoDialog();
-      //and return it
-      return instance;
-    }
-
-    /**
-     * Private Constructor
-     */
-    private ADemoDialog() {
-      super("Demo");
-      createGUI();
-      pack();
-    }
-
-    // initialize the GUI
-    private void createGUI()
-    {
-        JPanel timerControlPanel = createTimeControlPanel();
-        projControlPanel = createProjControlPanel();
-        JPanel buttonControlPanel = createButtonControlPanel();
-
-        JPanel contentPane = new JPanel(new GridBagLayout());
-        contentPane.setOpaque(true);
-        GridBagConstraints c = new GridBagConstraints();
-        c.weightx = 1;
-        c.weighty = 1;
-        c.gridwidth = GridBagConstraints.REMAINDER;
-        c.fill=GridBagConstraints.HORIZONTAL;
-        c.anchor = GridBagConstraints.CENTER;
-        contentPane.add(timerControlPanel, c);
-        contentPane.add(projControlPanel, c);
-        contentPane.add(buttonControlPanel, c);
-        this.setResizable(false);
-        this.setContentPane(contentPane);
-        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-        this.setAlwaysOnTop(true);
-
-        // set the initial location
-        Frame gui = globals.getGuiFrame();
-        int guiWidth = gui.getWidth();
-        int guiHeight = gui.getHeight();
-        int guiX = gui.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        if(guiX + guiWidth + (dialogWidth - guiWidth) / 2 > screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), 
-                    Math.max(0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), 
-                    Math.max(0, (guiHeight - dialogHeight) / 3));
-        AIcon.setIconImage(this);
-    }
-
-     private JPanel createTimeControlPanel()
-    {
-
-        JPanel aPanel = new JPanel(new GridBagLayout());
-        GridBagConstraints c = new GridBagConstraints();
-        aPanel.setOpaque(true);
-        //aPanel.setPreferredSize(new Dimension(FRAME_WIDTH, PANEL_HEIGHT));
-        aPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        //Add timer label
-        JLabel timerLabel= new JLabel("Interval");
-        c.gridwidth = 1;
-        c.fill = GridBagConstraints.HORIZONTAL;
-        c.weightx=1;
-        c.gridx=0;
-        aPanel.add(timerLabel,c);
-        //Add timer spinner
-        timerSpinner = new JSpinner();
-        timerSpinner.setEnabled(true);
-        timerSpinnerModel = new SpinnerNumberModel(TIMER_INIT, TIMER_MIN,
-                TIMER_MAX, new Integer(1));
-        timerSpinner.setModel(timerSpinnerModel);
-        c.gridwidth = 1;
-        c.weightx=1;
-        c.fill = GridBagConstraints.HORIZONTAL;
-        c.gridx=1;
-        aPanel.add(timerSpinner,c);
-        //Add units label
-        c.weightx = 0.5;
-        c.gridwidth = GridBagConstraints.REMAINDER;
-        c.gridx=2;
-        aPanel.add(new JLabel(" sec"),c);
-
-
-        //Add the labels for th selected projections
-        c.gridx=GridBagConstraints.RELATIVE;
-        c.weightx=1;
-        c.gridwidth=1;
-        aPanel.add(new JLabel("Sequence:"), c);
-
-        //Now generate the sequence label and make it span the remaining columns
-        sequenceTextField = new JTextField();
-        c.gridwidth=GridBagConstraints.REMAINDER;
-        c.fill=GridBagConstraints.HORIZONTAL;
-        aPanel.add(sequenceTextField,c);
-
-        return aPanel;
-    }
-
-    private JPanel createProjControlPanel()
-    {
-
-        JPanel aPanel = new JPanel(new GridLayout(3,4));
-        aPanel.setOpaque(true);
-        Border outerBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5);
-        Border innerBorder = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY),
-                "Add Projection / Action");
-        aPanel.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));
-
-        //Create the list of check boxes
-        for (String projName : AProjectionsManager.getKnownProjectionNames()){
-
-          //Check wether this projection name should be used in the demo dialog
-          if (AProjectionsManager.useProjectionInDemoMode(projName)){
-
-            //Create the respective button with the screen name of the projection
-            String projScreenName = AProjectionsManager.getProjection(projName).getScreenName();
-            JButton projButton = new JButton(projScreenName);
-            //Store the name of the projection as the name of the JCheckBox
-            //Where we can retrieve it once the demo dialog is started
-            projButton.setName(projName);
-            projButton.setFocusPainted(false);
-
-            //Add ourselves as action listener of this button
-            projButton.addActionListener(this);
-            aPanel.add(projButton);
-          }
-       }
-       //Also add a "next event" button
-        JButton nextEvtBut = new JButton("Next event");
-        nextEvtBut.setName("NE");
-        nextEvtBut.addActionListener(this);
-        aPanel.add(nextEvtBut);
-
-       return aPanel;
-    }
-
-    private JPanel createButtonControlPanel()
-    {
-        //final int PANEL_HEIGHT = 40;
-        Dimension buttonDimension = new Dimension(100,25);
-
-        JPanel aPanel = new JPanel(new GridBagLayout());
-        aPanel.setOpaque(true);
-        //aPanel.setPreferredSize(new Dimension(FRAME_WIDTH, PANEL_HEIGHT));
-        aPanel.setBorder(BorderFactory.createEmptyBorder(5,5,10,5));
-
-        GridBagConstraints c = new GridBagConstraints();
-        startButton = new JButton("Start");
-        //startButton.setFocusPainted(false);
-        startButton.setEnabled(true);
-        startButton.setPreferredSize(buttonDimension);
-        startButton.addActionListener(this);
-        c.weightx = 1;
-        c.weighty = 1;
-        c.anchor = GridBagConstraints.CENTER;
-        aPanel.add(startButton, c);
-        stopButton = new JButton("Stop");
-        stopButton.setFocusPainted(false);
-        stopButton.setEnabled(false);
-        stopButton.setPreferredSize(buttonDimension);
-        stopButton.addActionListener(this);
-        aPanel.add(stopButton, c);
-        JSeparator aSeparator = new JSeparator(SwingConstants.VERTICAL);
-        //aSeparator.setPreferredSize(new Dimension(5, PANEL_HEIGHT));
-        aPanel.add(aSeparator, c);
-        closeButton = new JButton("Close");
-        closeButton.setFocusPainted(false);
-        closeButton.setEnabled(true);
-        closeButton.setPreferredSize(buttonDimension);
-        closeButton.addActionListener(this);
-        c.gridwidth = GridBagConstraints.REMAINDER;
-        aPanel.add(closeButton, c);
-
-        return aPanel;
-    }
-
-    /**
-     * @return true if demo thread is running, otherwise false
-     */
-    boolean isRunning(){
-      //no thread -> false
-      if (demo == null) return false;
-      //otherwise use thread status
-      return demo.isRunning();
-    }
-   
-
-    // return interval in millisecond
-    int getTimerInterval()
-    {
-        return 1000 * timerSpinnerModel.getNumber().intValue();
-    }
-
-    public void setTimerInterval(Integer intervalInSec)
-    {
-      try {
-        timerSpinnerModel.setValue(intervalInSec);
-      } catch (IllegalArgumentException iae){
-        //Just ignore in case of illegal argument
-      }
-    }
-
-
-    /**
-     * Set the sequence of projections
-     * @param projNames colon seperated list of projection names
-     */
-    public void setSequence(String projNames){
-      //store this in our text entry
-      sequenceTextField.setText(projNames);
-    }
-
-    /**
-     * Set the default sequence
-     */
-    public void setDefaultSequence(){
-      //Create default sequence
-      StringBuilder sequence = new StringBuilder();
-      //Add all default projections
-      for (String projName : AProjectionsManager.getKnownProjectionNames()){
-        if (AProjectionsManager.defaultProjectionInDemoMode(projName))
-          sequence.append(projName+":");
-      }
-      //End sequence with next event
-      sequence.append("NE");
-      //And set this in the text field
-      sequenceTextField.setText(sequence.toString());
-    }
-
-    /**
-     * @return a vector with the names of the projections
-     */
-    private Vector<String> getSequence()
-    {
-      return new Vector<String>(Arrays.asList(sequenceTextField.getText().split(":")));
-    }
-
-    /**
-     * Validate whether the given sequence is valid
-     * @return the number of selected projections
-     */
-    private boolean validateSequence()
-    {
-      //Get the projections sequence
-      Vector<String> sequence = getSequence();
-
-      //Check on number of projections
-      if(sequence.size() < 1){
-        JOptionPane.showMessageDialog(this,
-         "No projection/event is selected, please select at least select one",
-         "Warning", JOptionPane.WARNING_MESSAGE);
-        return false;
-      }
-
-      //Now check each item of the sequence for validity
-      for (String projName : sequence){
-        //The "new event" action is an exception here
-        if (projName.equals("NE")) continue;
-        //check wether this is a known and allowed projection
-        if ((! Arrays.asList(AProjectionsManager.getKnownProjectionNames()).contains(projName)) ||
-            (! AProjectionsManager.useProjectionInDemoMode(projName)))
-        {
-         JOptionPane.showMessageDialog(this,
-           "Not a valid projection name: '"+projName+"'",
-           "Warning", JOptionPane.WARNING_MESSAGE);
-         return false;
-        }
-
-      }
-
-      //Seems all okay
-      return true;
-    }
-
-   
-
-    /**
-     * Start the demo thread
-     */
-    public void startDemo()
-    {
-
-      //First make sure some projections have been selected
-      if (!validateSequence()) return;
-
-      //Set single full window mode
-      ACommandProcessor.receive("WW");
-
-      //Start the demo, setting "stopOnNoMoreEvents" to false
-      //TODO: make stopOnNoMoreEvents a checkbox in the Dialog
-      demo = new ADemoLoop(getTimerInterval(),getSequence(),false);
-      demo.startDemoLoop();
-      //Now disable all GUI elements
-      timerSpinner.setEnabled(false);
-      sequenceTextField.setEnabled(false);
-      for (Component comp: projControlPanel.getComponents()) comp.setEnabled(false);
-      startButton.setEnabled(false);
-      stopButton.setEnabled(true);
-      closeButton.setEnabled(false);
-      //Do not allowe the user to close the window, so he doesn't loose access
-      this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-    }
-
-    /**
-     * Stop the demo thread
-     */
-    synchronized void stopDemo()
-    {
-      //exit the demo
-      demo.stopDemoLoop();
-      //Now reenable all GUI elements
-      timerSpinner.setEnabled(true);
-      sequenceTextField.setEnabled(true);
-      for (Component comp: projControlPanel.getComponents()) comp.setEnabled(true);
-      stopButton.setEnabled(false);
-      startButton.setEnabled(true);
-      closeButton.setEnabled(true);
-
-      this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-    }
-
-    /**
-     * Implementation of the Action listener
-     * - gets called for every button that is pressed
-     * @param e the action event
-     */
-    public void actionPerformed(ActionEvent e) {
-      //Check for action buttons first
-      if (e.getSource() == startButton ) startDemo();
-      else if (e.getSource() == stopButton) stopDemo();
-      else if (e.getSource() == closeButton ) dispose();
-      //this should be one of the projection buttons
-      else {
-        //get the projectio name to append
-        String projName = ((JButton)e.getSource()).getName();
-        //get the existing sequence
-        String sequence = sequenceTextField.getText();
-        //append new projection
-        sequence += ((sequence.length()!=0) ? ":" : "") + projName;
-        //Set this as new sequence
-        sequenceTextField.setText(sequence);
-      }
-
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ADemoFileChooser.java b/graphics/AtlantisJava/src/atlantis/gui/ADemoFileChooser.java
deleted file mode 100755
index c9768ef7aab8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ADemoFileChooser.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Component;
-import java.io.File;
-
-import atlantis.config.ADefaultValues;
-
-/**
-* A dialog which appears when a user asks to read a new event.
-*
-* @author Qiang Lu
-*/
-public class ADemoFileChooser extends AXMLFileChooser
-{
-    private File fileSelected;
-
-    public ADemoFileChooser(String path, Component parent)
-    {
-        super(path, parent);
-    }
-
-    public boolean processSelectedFile(File file)
-    {
-        if (file.canRead())
-        {
-            // save last visited location
-            ADefaultValues.set("LastEventFilesSourceDir", file.getParent() +
-                               System.getProperty("file.separator"));
-
-            fileSelected = file;
-            return true;
-        }
-        return false;
-    }
-
-    public File getFileSelected()
-    {
-        return fileSelected;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ADemoLoop.java b/graphics/AtlantisJava/src/atlantis/gui/ADemoLoop.java
deleted file mode 100755
index 85f387a97080..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ADemoLoop.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-
-import atlantis.canvas.ACanvas;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionsManager;
-import atlantis.parameters.ACommandProcessor;
-import atlantis.utils.ALogger;
-import java.awt.event.ActionListener;
-import java.util.Iterator;
-import java.util.Vector;
-import javax.swing.JOptionPane;
-
-import javax.swing.Timer;
-
-/**
- * A class to automatically loop over different projections given in a
- * colon-seperated list. The special projection name "NE" stands for next event.
- * This is also used in headless mode to generate an event loop. The stopOnNoMoreEvents
- * allows to control wether the loop ends if no more events can be obtained.
- *
- * NOTE: The previous implementation of this was using java.awt.Thread - we are
- *       far from providing the standards of a thread-safe application.
- *      
- * @author Sebastian Boeser
- */
-public class ADemoLoop extends Timer implements ActionListener
-{
-  //The logger
-  private static ALogger logger = ALogger.getLogger(ADemoLoop.class);
-
-  //whether to stop the loop if there are no more events
-  private boolean stopOnNoMoreEvents = false;
-  
-  //A list of projections to show
-  private final ArrayList<String> projectionList = new ArrayList<String>();
-  
-  //An iterator that loops through the list above
-  private Iterator<String> projIter = null;
-
-  private static final AGlobals globals = AGlobals.instance();
-
-  /**
-   * Fully specified Constructor
-   * @param sleepTime time to sleep inbetween projections in milliseconds
-   * @param projectionList list of projections to loop through
-   * @param stopOnNoMoreEvents wether to stop loop if there are no more events
-   */
-  public ADemoLoop(int sleepTime, Vector<String> projectionList, boolean stopOnNoMoreEvents){
-
-    //Initialize the timer
-    super(sleepTime,null);
-    addActionListener(this);
-
-    //Initialize the timer to start immediately only on first event
-    setInitialDelay(0);
-
-    //Store the list of projections
-    for (String projName : projectionList)
-      this.projectionList.add(projName);
-
-    //Set the stop on no more events flag
-    this.stopOnNoMoreEvents = stopOnNoMoreEvents;
-
-  }
-
-
-  /***
-   * prepare the demo loop and start the timer thread
-   */
-  public void startDemoLoop(){
-	AGlobals.instance().setDemoMode(true);
-    
-    //be verbose
-    logger.trace("Starting demo loop with interval "+Integer.toString(getDelay())+
-                 " ms and projections "+projectionList.toString());
-
-    //Generate the list iterator to point to the start of the list
-    projIter = projectionList.listIterator(0);
-
-    //Finally start the loop
-    start();
-  }
-
-  /**
-   * stop the demo loop
-   */
-  public void stopDemoLoop(){
-    stop();
-	globals.setDemoMode(true);
-  }
-
-  /**
-   * This gets fired by the timer every time after it returns from sleep
-   * @param event the action event
-   */
-  public void actionPerformed(ActionEvent event) {
-
-    //If we have reached the end, start from beginning
-    if (! projIter.hasNext()) projIter = projectionList.listIterator(0);
-
-    //proceed to next element in list
-    String projName = projIter.next();
-
-    //add debugging output
-    logger.trace("Next in demo loop: "+projName);
-
-    //Check if this is a next event tag
-    if (projName.equals("NE")) {
-      //Change the event or stop loop if this did not succeed
-      if (!changeEvent()) {
-        //stop the loop
-        stop();
-        //notify everyone that we are done (so the application can finish)
-        synchronized(this) { notifyAll(); }
-      }
-
-      //Immediatly go to the next projection if this is not just a nextEvent again
-      Iterator<String> nextProjIter = projIter;
-      if (nextProjIter.hasNext() && (!nextProjIter.next().equals("NE"))) restart();
-      //be verbose
-      logger.trace("Timer is"+(isRunning()?" running":" stopped")+" with "+getDelay()+" ms delay");
-    }
-    //else just change the projection
-    else changeProjection(projName);
-
-  }
- 
-
-  /**
-   * Change the current projection to the one given by projName
-   * and select that as active projeciton in the GUI
-   * @param projName the name of the projection
-   */
-  private void changeProjection(String projName)
-  {
-       //First get the projection object
-       AProjection p = AProjectionsManager.getProjection(projName);
-       //And set the projection
-       ACanvas.getCanvas().getCurrentWindow().setProjection(p);
-       //Make sure aspect ratio is always okay
-       if(projName.equals("YX")||projName.equals("RZ")||projName.equals("XZ")||projName.equals("YZ"))
-          ((AProjection2D) p).setAspectRatio1(ACanvas.getCanvas().getCurrentWindow());
-       //Finally Change the current GUI selection by signaling the command processor
-       ACommandProcessor.receive(projName + ".");
-  }
-
-  /**
-   * Switch to the next event
-   * @return if the return value is true, the loop will be continued, otherwise not
-   */
-  private boolean changeEvent(){
-	Frame gui = globals.getGuiFrame();
-    //try reading the next event
-    try{
-      //Then get next event
-      AEventManager eventManager = AEventManager.instance();
-      eventManager.nextEvent();
-      return true;
-    } catch (NoMoreEventsException ex) {
-      //Just wait for next event
-      logger.info("No next event for demo - "+((stopOnNoMoreEvents)?"stopping loop":"keeping same"));
-      //return wether loop shall be stopped due to this or not.
-      return (!stopOnNoMoreEvents);
-    } catch (InvalidEventSourceException ex) {
-      //log warning
-      logger.warn("Invalid event source for demo - "
-                  +((stopOnNoMoreEvents)?"stopping loop":"will try again")
-                  +"\n"+ex.getCauseMessages());
-      //quit here in headless mode
-      if (AGlobals.isAtlantisHeadless()) return (!stopOnNoMoreEvents);
-      //Otherwise give a user warning
-      JOptionPane.showMessageDialog(gui,
-        "Invalid event source for demo - stopping loop",
-        "Warning", JOptionPane.WARNING_MESSAGE);
-      //Always quit the loop if not in headless mode
-      return false;
-    } catch (ReadEventException ex) {
-      //log warning
-      logger.warn("Received invalid event - stopping loop:\n"+ex.getCauseMessages());
-      //and tell user unless we are in headless
-      if (AGlobals.isAtlantisHeadless()) return false;
-      //in headless mode, don't show a dialog
-       JOptionPane.showMessageDialog(gui,
-         "Received invalid event for demo - stopping loop",
-         "Warning", JOptionPane.WARNING_MESSAGE);
-      return false;
-    }
-  }
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AEventLoopDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AEventLoopDialog.java
deleted file mode 100755
index 152bc9f5c2cd..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AEventLoopDialog.java
+++ /dev/null
@@ -1,346 +0,0 @@
-package atlantis.gui;
-
-import java.util.Date;
-
-import java.awt.Color;
-import java.awt.Frame;
-import java.awt.event.WindowListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-
-import java.text.SimpleDateFormat;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.border.Border;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JSpinner;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.Timer;
-
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.output.ALogInterface;
-import atlantis.utils.ALogger;
-
-
-/**
- * Read events in a loop using a given timer intervall
- * This is a singleton class using the getInstance pattern.
- *
- * @author Sebastian Boeser
- */
-public class AEventLoopDialog extends JFrame
-        implements WindowListener, ActionListener, ChangeListener
-{
-	// the logger 
-  private static ALogger logger = ALogger.getLogger(AEventLoopDialog.class);
-
-  private static final AGlobals globals = AGlobals.instance();
-
-  //create singleton instance
-  private static AEventLoopDialog instance;
-	
-    // some GUI attributes
-    private static final String TITLE = "Event loop";
-    private static final Integer SPINNER_INIT = new Integer(4);
-    private static final Integer SPINNER_MIN = new Integer(1);
-    private static final Integer SPINNER_MAX = new Integer(120);
-    private static final Integer SPINNER_STEP = new Integer(2);
-    
-    // We don't need more than one button
-    private static JButton button = null;
-
-    //The update time in seconds
-    private static JSpinner updateIntervalSpinner = null;
-    //A logging pane
-    private static ALogPane log = null;
- 
-    // The update timer
-    private static final Timer timer = new Timer(SPINNER_INIT*1000,null);
-   
-
-    private AEventLoopDialog()
-    {
-      //Create dialog with title
-      super(TITLE);
-      
-      //Construct GUI
-      createGUI();
-  
-    } // AReadEventFromServerDialog() ---------------------------------------
-
-    /**
-     * @return the singleton instance
-     */
-    public static AEventLoopDialog getInstance(){
-      if (instance == null) instance = new AEventLoopDialog();
-      return instance;
-    } // getInstance() ------------------------------------------------------
-    
-    
-    /**
-     * Non-static set functions so user is forced to obtain an instance first
-     * @param UpdateInterval the update intervall
-     */
-    public void setUpdateInterval(int UpdateInterval) {
-      try {
-        updateIntervalSpinner.setValue(UpdateInterval);
-      } catch (IllegalArgumentException iae){
-        //Just ignore in case of an invalid argument
-      }
-    }
-        
-   /**
-   * Design of the dialog - panels, buttons, etc
-   */
-   private void createGUI() {
-
-    //Definde default component gap
-    final int defaultGap = 5;
-    final Border defaultBorder = BorderFactory.createEmptyBorder(5, 10, 5, 10);
-
-    /**
-     * Looping panel
-     */
-    //Create a spinner for the update time
-    SpinnerNumberModel numberModel = new SpinnerNumberModel(SPINNER_INIT, SPINNER_MIN, SPINNER_MAX, SPINNER_STEP);
-    updateIntervalSpinner = new JSpinner(numberModel);
-    updateIntervalSpinner.addChangeListener(this);
-
-    // looping panel
-    JPanel loopingPanel = new JPanel();
-    loopingPanel.setLayout(new BorderLayout(defaultGap, 0));
-    loopingPanel.setBorder(defaultBorder);
-    loopingPanel.add(updateIntervalSpinner, BorderLayout.CENTER);
-    loopingPanel.add(new JLabel("[secs]"), BorderLayout.EAST);
-
-
-    /**
-     * Main action buttons
-     */
-    // action button panel
-    JPanel buttonsPanel = new JPanel();
-    buttonsPanel.setLayout(new BorderLayout(0, 0));
-    buttonsPanel.setBorder(defaultBorder);
-    button = new JButton("Start");
-    //Set a preferred size so it doesn't change if we change its label
-    button.setPreferredSize(new Dimension(100,25));
-    buttonsPanel.add(button, BorderLayout.CENTER);
-    //React when button is pressed
-    button.addActionListener(this);
-
-    //the top row panel
-    JPanel topRowPanel = new JPanel();
-    topRowPanel.setLayout(new BorderLayout(defaultGap, 0));
-    topRowPanel.add(loopingPanel, BorderLayout.CENTER);
-    topRowPanel.add(buttonsPanel, BorderLayout.EAST);
-
- 
-
-    /**
-     * Logging panel
-     */
-    // the logging panel at the bottom
-    JPanel logPanel = new JPanel();
-    logPanel.setLayout(new BorderLayout(0, 0));
-    logPanel.setBorder(defaultBorder);
-    //Add a logpane to it
-    log = new ALogPane();
-    log.setEnabled(true);
-    log.setBorder(BorderFactory.createLineBorder(Color.black));
-    log.setRequestFocusEnabled(false);
-    log.setPreferredSize(new Dimension(350, 200));
-    logPanel.add(log, BorderLayout.CENTER);
-
-
-    // main panel
-    JPanel mainPanel = new JPanel();
-    mainPanel.setLayout(new BorderLayout(0, 0));
-    // logPanel must be CENTER to be resisable vertically (otherwise,
-    // it keeps its size), hence upper part must be extra panel for
-    // NORTH position to accommodate topRowPanel and loopingPanel
-    JPanel upperMainPanel = new JPanel();
-    upperMainPanel.setLayout(new BorderLayout(0, 0));
-    upperMainPanel.add(topRowPanel, BorderLayout.NORTH);
-    mainPanel.add(upperMainPanel, BorderLayout.NORTH);
-    mainPanel.add(logPanel, BorderLayout.CENTER);
-
-    // Finally add this MainPanel
-    getContentPane().add(mainPanel, BorderLayout.CENTER);
-
-    //arrange all GUI items
-    pack();
-
-    //Set location to top left GUI corner so it does not hide Canvas
-    setLocation(globals.getGuiFrame().getLocation());
-
-    //give it a nice icon when minimized
-    AIcon.setIconImage(this);
-
-
-    /**
-     *  end of dialog design, set listeners and handlers
-     */    //add ourselfs as state listeners to catch closing
-    addWindowListener(this);
-
-    //also set ourselfs as action handler for the timer
-    timer.addActionListener(this);
-    //And have the timer start immediately on the first event
-    timer.setInitialDelay(0);
-
-
-
-  } // createGUI() --------------------------------------------------------
-  
-  /**
-   * State change events are only generated by the updateIntervalSpinner
-   * @param e the Change event
-   */
-  public void stateChanged(ChangeEvent e) {
-    //Set timer delay to new value
-    timer.setDelay((Integer)updateIntervalSpinner.getValue()*1000);
-  }
-
-  /**
-   * Stop event loop when closing the window
-   * @param e the Window event
-   */  
-  public void windowClosing(WindowEvent e){
-    
-    //Make sure the timer is not running anymore
-    if (timer.isRunning()) stopEventLoop();
-  
-  } // closeActionsAndDispose() ------------------------------------------
-
-  /**
-   * Small helper to print a message with timestamp to the log
-   * @param msg the message
-   */
-  private void timeStampedLog(String msg){
-   
-    //Record the time of the incident
-    SimpleDateFormat dateForm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    log.append("\n"+dateForm.format(new Date())+" ",ALogInterface.NORMAL_BOLD);
-    log.append(msg);
-  }
-  
-  
-  /**
-   * Try to read the next event from the server, handle all exceptions
-   */
-  private void getNextEvent() {
-    
-    //try reading the next event
-    try{
-      //tell the user
-      timeStampedLog("Reading next event...");
-      //Then get next event
-      AEventManager.instance().nextEvent();
-    } catch (NoMoreEventsException ex) {
-      //Just wait for next event
-      log.append("\n -- No next event available");
-      logger.info("No next event available:\n"+ex.getCauseMessages());
-    } catch (InvalidEventSourceException ex) {
-      //Do not break loop on invalid event source -- good for ACR
-      log.append("\n -- Invalid event source");
-      logger.warn("Invalid event source:\n"+ex.getCauseMessages());
-    } catch (ReadEventException ex) {
-      //Don't break loop on invalid events
-      log.append("\n -- Received invalid event");
-      logger.warn("Received invalid event:\n"+ex.getCauseMessages());
-    }
-  }
-  
-  /**
-   * Stop the event loop, reenabling all GUI elements
-   */
-  private void stopEventLoop(){
-  
-    //Stop the timer loop
-    timer.stop();
-    
-    //Reset button label and states
-    button.setText("Start");
-    updateIntervalSpinner.setEnabled(true);
-  
-    //tell the user
-    timeStampedLog("Stopped event loop...");
-  }
-  
-  /**
-   * Start the event loop, disable all GUI elements - is public to facilitate
-   * automated start of event loop (e.g with command-line options)
-   */
-  public void startEventLoop(){
-   
-    //tell the user
-    timeStampedLog("Starting event loop...");
- 
-    //enable/disable buttons
-    updateIntervalSpinner.setEnabled(false);
-    button.setText("Stop");
-  
-    //Stop the timer loop
-    timer.start();
-   
-  }
-  
-  /**
-   * Called every time the button is hit or we get a callback from the timer
-   * @param e the action event
-   */
-  public void actionPerformed(ActionEvent e) {
-    
-    //Check if we got called from the timer loop
-    if (e.getSource() == timer){
-      //If so just read next event and return
-      getNextEvent();
-      return;
-    }
-    
-    //Being called because button was hit.
-    //Check if event loop is running - stop it
-    if (timer.isRunning()) {
-      stopEventLoop();
-    } else { 
-      startEventLoop();
-    }
-  }
-  
-
-  /**
-   * Show the dialog
-   */
-  public void showDialog() {
-
-    // clear the iconified bit (no matter whether or not it is iconified)
-    setExtendedState(getExtendedState() & ~Frame.ICONIFIED);
-    setVisible(true);
-
-  } // show() ----------------------------------------------------
-
-  
-  /**
-   * Empty default implementation of WindowListeners
-   * @param e
-   */
-  public void windowOpened(WindowEvent e) {}
-  public void windowClosed(WindowEvent e) {}
-  public void windowIconified(WindowEvent e) {}
-  public void windowDeiconified(WindowEvent e) {}
-  public void windowActivated(WindowEvent e) {}
-  public void windowDeactivated(WindowEvent e) {}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AEventPropertiesDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AEventPropertiesDialog.java
deleted file mode 100755
index 8b7a7a332781..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AEventPropertiesDialog.java
+++ /dev/null
@@ -1,721 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.JTable;
-import javax.swing.JScrollPane;
-
-import com.Ostermiller.util.CSVParser;
-
-import atlantis.data.ACalorimeterData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.data.ALVL1ResultData;
-import atlantis.event.ANewEventListener;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.layout.AFlowLayout;
-import atlantis.data.ATriggerInfoData;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-
-/**
- * The dialog which is used to display the current event properties.
- */
-public class AEventPropertiesDialog extends JFrame implements ANewEventListener
-{
-    private static ALogger logger = ALogger.getLogger(AEventPropertiesDialog.class);
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    private JTable table, propertiesTable, level1Table, level2Table, 
-                   eventFilterTable, trigInfoItemsTable, trigInfoStreamTable,
-                   userSelectedTable, mbtsTable;
-    private JPanel buttonsPanel;
-    private JTabbedPane tabbedPane;
-    private JButton okButton;
-    private JButton refreshButton;
-    private static AEventPropertiesDialog instance = null;
-    protected static String[] USER_ITEMS = null;
-    private static final String LOOKUP_FILENAME = "epusti.csv";
-    private static final AGlobals globals = AGlobals.instance();
-    private static final String LOOKUP_FILE =
-    		globals.getHomeDirectory() + "configuration" + 
-        		System.getProperty("file.separator") +
-        		LOOKUP_FILENAME;
-
-    public static boolean isInUse()
-    {
-        if(instance ==null || !instance.isVisible())
-            return false;
-        else
-            return true;
-    }
-    
-    public static AEventPropertiesDialog getInstance()
-    {
-        if (instance == null)
-            instance = new AEventPropertiesDialog();
-        return instance;
-    }
-
-    public AEventPropertiesDialog()
-    {
-    	Frame gui = globals.getGuiFrame();
-    	eventManager.addNewEventListener(this);
-        this.setTitle("Event Properties Dialog");
-        AIcon.setIconImage(this);
-        // setResizable(false);
-        
-        // From Java 1.5 we can tell the window to be always on top
-        this.setAlwaysOnTop(true);
-        
-        // check whether there is any event data are present
-        if (eventManager.getCurrentEvent() == null)
-        {
-            JOptionPane.showMessageDialog(gui,
-                    "Current event is null\n" + "(no event data currently present)",
-                    "Event null", JOptionPane.WARNING_MESSAGE);
-            return;
-        }
-        
-        try
-        {
-            readFromLookupFile();
-        }
-        catch(AAtlantisException ex)
-        {
-            logger.warn(": reading " + LOOKUP_FILE +
-                    " failed, user trigger items will not " +
-                    "be available, reason: " + ex.getMessage(), ex);
-        }
-        
-        fillTabbedPane(0);
-        addButtonPane();
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);        
-        pack();
-
-        // set the initial location
-        int guiWidth = gui.getWidth();
-        int guiHeight = gui.getHeight();
-        int guiX = gui.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit()
-                .getScreenSize().getWidth());
-        if (guiX + guiWidth + (dialogWidth - guiWidth) / 2 > screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(
-                    0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2),
-                    Math.max(0, (guiHeight - dialogHeight) / 3));
-
-        setVisible(true);
-    }
-
-    private void readFromLookupFile() throws AAtlantisException
-    {
-        if(USER_ITEMS==null)
-        {
-            try
-            {
-                InputStream is = AUtilities.getFileAsStream(LOOKUP_FILE);
-                CSVParser parser = new CSVParser(is);
-                parser.setCommentStart("#");
-                String valueArray = parser.nextValue(); // shall now contain all values
-                CSVParser parserArray = new CSVParser(new StringReader(valueArray));
-                String[][] s = parserArray.getAllValues();
-                if(s!=null)
-                {
-                    USER_ITEMS = s[0];
-                }
-            }
-            catch (IOException e)
-            {
-                   throw new AAtlantisException("exception while reading file: " +
-                            LOOKUP_FILE);
-            }
-            catch (AAtlantisException e)
-            {
-                throw e;
-            }
-        }
-    }
-
-    
-    public void dispose()
-    {
-        instance = null;
-        super.dispose();
-    }
-
-    public void updatePane()
-    {
-    	
-        JTabbedPane currentTabbedPane = (JTabbedPane) getContentPane().getComponent(0);
-        int currentIndex = currentTabbedPane.getSelectedIndex();
-        getContentPane().removeAll();
-        validate();
-        
-        fillTabbedPane(currentIndex);
-        addButtonPane();
-        
-        pack();
-    }
-    
-    private void addButtonPane()
-    {
-        okButton = new JButton("OK");
-        okButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-                dispose();
-            }
-        });
-        
-        // Add button to refresh data after cuts have been applied
-        refreshButton = new JButton("Refresh Cuts");
-        refreshButton.setToolTipText("Display data passing cuts for active window");
-        refreshButton.addActionListener(new ActionListener() {
-        	public void actionPerformed(ActionEvent e)
-        	{
-        		updatePane();
-        	}
-        });
-
-        buttonsPanel = new JPanel(new AFlowLayout(10, 5));
-        buttonsPanel.add(okButton);
-        buttonsPanel.add(refreshButton);
-        getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
-        
-      
-        
-    }
-    
-    /** fills the tabbed pane with the event information
-     *  @param index the currently selected index 
-     */
-    private void fillTabbedPane(int index)
-    {
-        fillTablePane();
-        AEvent event = eventManager.getCurrentEvent();
-        
-        //now need to loop over the lvl1result collections
-        Vector<String> keys = event.getCollections().get("LVL1Result");
-        ALVL1ResultData lvl1ResultData[]=null;
-        if(keys!=null){
-            lvl1ResultData = new ALVL1ResultData[keys.size()];
-            for(int i=0; i<keys.size();i++)
-            {
-                String colLvl1= "LVL1Result" + (String)keys.elementAt(i);
-                lvl1ResultData[i] = (ALVL1ResultData) event.get(colLvl1);
-            }
-        }
-        
-        ATriggerInfoData triggerInfoData = event.getTriggerInfoData();
-        fillPropertiesPane(lvl1ResultData, triggerInfoData);
-        String[][] L1_items = fillLevel1Pane(lvl1ResultData);
-        String[][] L2_items = fillLevel2Pane(lvl1ResultData);
-        String[][] EF_items = fillEventFilterPane(lvl1ResultData);
-        fillTrigInfoItemsPane(triggerInfoData);
-        fillTrigInfoStreamPane(triggerInfoData);
-        fillUserSelectedPane(L1_items, L2_items, EF_items);
-        fillmbtsPane();
-        
-        tabbedPane = new JTabbedPane();
-        tabbedPane.addTab("Number of Hits", new JScrollPane(table));
-        tabbedPane.addTab("Properties", new JScrollPane(propertiesTable));
-        tabbedPane.addTab("Level 1 Trigger Items", new JScrollPane(level1Table));
-        tabbedPane.addTab("Level 2 Trigger Items", new JScrollPane(level2Table));
-        tabbedPane.addTab("Event Filter Trigger Items", new JScrollPane(eventFilterTable));
-        tabbedPane.addTab("Trigger Info Items", new JScrollPane(trigInfoItemsTable));
-        tabbedPane.addTab("Trigger Info Stream Tag", new JScrollPane(trigInfoStreamTable));
-        tabbedPane.addTab("User Selected Trigger Items", new JScrollPane(userSelectedTable));
-        tabbedPane.addTab("All MBTS cell details", new JScrollPane(mbtsTable));
-        tabbedPane.setSelectedIndex(index);
-        
-        getContentPane().setLayout(new BorderLayout());
-        getContentPane().add(tabbedPane, BorderLayout.CENTER);
-    }
-    
-    private void fillTablePane()
-    {
-    	// For total data and data passing cuts, use .getInfoDraw()
-    	// for total event data, use getInfo()
-        table = new JTable(eventManager.getCurrentEvent().getInfoDraw(),
-                new String[] { "detector / datatype", "data items", "passing cuts" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        table.setRowHeight(20);
-        table.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        table.getColumnModel().getColumn(0).setPreferredWidth(350);
-        table.getColumnModel().getColumn(1).setPreferredWidth(100);
-        table.getColumnModel().getColumn(2).setPreferredWidth(100);
-    }
-
-    private void fillPropertiesPane(ALVL1ResultData lvl1ResultData[], ATriggerInfoData triggerInfoData)
-    {
-        double et = 0;
-        List<ACalorimeterData> calo = eventManager.getCurrentEvent().getCalorimeters();
-
-        for (int i = 0; i < calo.size(); i++)
-            et += calo.get(i).getTotalTransverseEnergy();
-
-        String[][] properties;
-        
-        if (lvl1ResultData == null)
-        {
-            if(triggerInfoData==null)
-            {
-                properties = new String[2][2]; 
-                properties[1][0] = "Trigger Decision";
-                properties[1][1] = "N/A";
-            }
-            else
-            {
-                properties = new String[7][2]; 
-                properties[1][0] = "Trigger Decision";
-                properties[1][1] = "N/A";
-                properties[2][0] = "Trigger Info: Level 1 EtMiss";
-                properties[2][1] = String.valueOf(triggerInfoData.getEnergyEtMiss(0));
-                properties[3][0] = "Trigger Info: Level 1 SumEt";
-                properties[3][1] = String.valueOf(triggerInfoData.getEnergyEtMiss(0));
-                properties[4][0] = "Trigger Info: ExtL1ID";
-                properties[4][1] = triggerInfoData.getTrigInfoExtL1ID(0);
-                properties[5][0] = "Trigger Info: Lvl1Type";
-                properties[5][1] = triggerInfoData.getTrigInfoLvl1Type(0);
-                properties[6][0] = "Trigger Info: Status";
-                properties[6][1] = triggerInfoData.getTrigInfoStatus(0);
-                
-            }
-        }
-        else
-        {
-            properties = new String[5*lvl1ResultData.length+6][2];
-            
-            //output the trigger info:
-            properties[1][0] = "Trigger Info: Level 1 EtMiss";
-            properties[2][0] = "Trigger Info: Level 1 SumEt";
-            properties[3][0] = "Trigger Info: ExtL1ID";
-            properties[4][0] = "Trigger Info: Lvl1Type";
-            properties[5][0] = "Trigger Info: Status";
-
-            if(triggerInfoData!=null)
-            {
-                properties[1][1] = String.valueOf(triggerInfoData.getEnergyEtMiss(0));
-                properties[2][1] = String.valueOf(triggerInfoData.getEnergySumEt(0));
-                properties[3][1] = triggerInfoData.getTrigInfoExtL1ID(0);
-                properties[4][1] = triggerInfoData.getTrigInfoLvl1Type(0);
-                properties[5][1] = triggerInfoData.getTrigInfoStatus(0);
-            }else{
-                properties[1][1] = "N/A";
-                properties[2][1] = "N/A";
-                properties[3][1] = "N/A";
-                properties[4][1] = "N/A";
-                properties[5][1] = "N/A";
-            }
-            
-            for(int j=0; j<lvl1ResultData.length;j++){
-                int ref=j*5;//reference to allow >1 collection in the list
-                String name=lvl1ResultData[j].getStoreGateKey();
-            
-                properties[6+ref][0] = name + ": Level 1 result";
-                properties[7+ref][0] = name + ": Level 2 result";
-                properties[8+ref][0] = name + ": Event Filter result";
-                properties[9+ref][0] = name + ": Level 1 EtMiss";
-                properties[10+ref][0] = name + ": Level 1 SumEt";
-    
-                int[] temp=new int[3];
-                temp[0]=lvl1ResultData[j].getPassedL1(0);
-                temp[1]=lvl1ResultData[j].getPassedL2(0);
-                temp[2]=lvl1ResultData[j].getPassedEF(0);
-                for(int i=0;i<3;i++)
-                {
-                    switch(temp[i])
-                    {
-                        case -1:
-                            properties[i+6+ref][1]="N/C";
-                            break;
-                        case 0:
-                            properties[i+6+ref][1]="failed";
-                            break;
-                        case 1:
-                            properties[i+6+ref][1]="passed";
-                            break;
-                        default:
-                            properties[i+6+ref][1]="N/A";
-                    }
-                }
-                float LVL1EtMiss=lvl1ResultData[j].getEnergyEtMiss(0);
-                float LVL1SumEt=lvl1ResultData[j].getEnergySumEt(0);
-                if(LVL1EtMiss>0) 
-                    properties[9+ref][1] = String.valueOf(LVL1EtMiss);
-                else 
-                    properties[9+ref][1] = "N/A";
-                if(LVL1SumEt>0) 
-                    properties[10+ref][1] = String.valueOf(LVL1SumEt);
-                else 
-                    properties[10+ref][1] = "N/A";
-            }
-        }
-        
-        //first item always Transv. Energy
-        properties[0][0] = "Transv. Energy (GeV)"; 
-        properties[0][1] = String.format("%.2f",et);
-        
-        propertiesTable = new JTable(properties, new String[] { "Name", "Value" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        propertiesTable.setRowHeight(20);
-        propertiesTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        propertiesTable.getColumnModel().getColumn(0).setPreferredWidth(350);
-        propertiesTable.getColumnModel().getColumn(1).setPreferredWidth(100);
-    }
-
-    private String[][] fillLevel1Pane(ALVL1ResultData lvl1ResultData[])
-    {
-        String[][] properties;
-        
-        if (lvl1ResultData == null)
-        {
-            properties = new String[1][2]; 
-            properties[0][0] = "N/A"; 
-            properties[0][1] = "N/A";
-        }
-        else
-        {
-            String[][] items=new String[lvl1ResultData.length][];
-            String[][] prescales=new String[lvl1ResultData.length][];
-            int numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                items[j]=lvl1ResultData[j].getCtpItemListSplit(0,false);
-                prescales[j]=lvl1ResultData[j].getPrescaleListL1Split(0);
-                numItems+=items[j].length;
-            }
-            properties = new String[numItems][2]; 
-            numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                String name=lvl1ResultData[j].getStoreGateKey();
-                for(int i=0; i<items[j].length; i++)
-                {
-                    properties[numItems][0]= name + ": " + items[j][i];
-                    properties[numItems][1]=(prescales[j] != null && i<prescales[j].length) ? prescales[j][i]: "N/A";
-                    numItems++;
-                }
-            }
-        }
-        level1Table = new JTable(properties, new String[] { "Item passed", "Prescale"}) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        level1Table.setRowHeight(20);
-        level1Table.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        level1Table.getColumnModel().getColumn(0).setPreferredWidth(350);
-        level1Table.getColumnModel().getColumn(1).setPreferredWidth(100);
-        
-        return properties;
-    }
-
-    private String[][] fillLevel2Pane(ALVL1ResultData lvl1ResultData[])
-    {
-        String[][] properties;
-        
-        if (lvl1ResultData == null)
-        {
-            properties = new String[1][2]; 
-            properties[0][0] = "N/A"; 
-            properties[0][1] = "N/A";
-        }
-        else
-        {
-            String[][] items=new String[lvl1ResultData.length][];
-            String[][] prescales=new String[lvl1ResultData.length][];
-            int numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                items[j]=lvl1ResultData[j].getitemListL2Split(0,false);
-                prescales[j]=lvl1ResultData[j].getPrescaleListL2Split(0);
-                numItems+=items[j].length;
-            }
-            properties = new String[numItems][2]; 
-            numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                String name=lvl1ResultData[j].getStoreGateKey();
-                for(int i=0; i<items[j].length; i++)
-                {
-                    properties[numItems][0]= name + ": " + items[j][i];
-                    properties[numItems][1]=(prescales[j] != null && i<prescales[j].length) ? prescales[j][i]: "N/A";
-                    numItems++;
-                }
-            }
-        }
-        level2Table = new JTable(properties, new String[] { "Item passed", "Prescale" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        level2Table.setRowHeight(20);
-        level2Table.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        level2Table.getColumnModel().getColumn(0).setPreferredWidth(350);
-        level2Table.getColumnModel().getColumn(1).setPreferredWidth(100);
-        
-        return properties;
-    }
-
-    private String[][] fillEventFilterPane(ALVL1ResultData lvl1ResultData[])
-    {
-        String[][] properties;
-        
-        if (lvl1ResultData == null)
-        {
-            properties = new String[1][2]; 
-            properties[0][0] = "N/A";
-            properties[0][1] = "N/A";
-        }
-        else
-        {
-            String[][] items=new String[lvl1ResultData.length][];
-            String[][] prescales=new String[lvl1ResultData.length][];
-            int numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                items[j]=lvl1ResultData[j].getitemListEFSplit(0,false);
-                prescales[j]=lvl1ResultData[j].getPrescaleListEFSplit(0);
-                numItems+=items[j].length;
-            }
-            properties = new String[numItems][2]; 
-            numItems=0;
-            for(int j=0; j<lvl1ResultData.length;j++){
-                String name=lvl1ResultData[j].getStoreGateKey();
-                for(int i=0; i<items[j].length; i++)
-                {
-                    properties[numItems][0]= name + ": " + items[j][i];
-                    properties[numItems][1]=(prescales[j] != null && i<prescales[j].length) ? prescales[j][i]: "N/A";
-                    numItems++;
-                }
-            }
-        }
-        eventFilterTable = new JTable(properties, new String[] { "Item passed", "Prescale" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        eventFilterTable.setDefaultEditor(String.class, null);
-        eventFilterTable.setRowHeight(20);
-        eventFilterTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        eventFilterTable.getColumnModel().getColumn(0).setPreferredWidth(350);
-        eventFilterTable.getColumnModel().getColumn(1).setPreferredWidth(100);
-        
-        return properties;
-    }
-
-    private void fillTrigInfoItemsPane(ATriggerInfoData triggerInfoData)
-    {
-        String[][] properties;
-        
-        if (triggerInfoData == null)
-        {
-            properties = new String[1][3]; 
-            properties[0][0] = "N/A";
-            properties[0][1] = "N/A";
-            properties[0][2] = "N/A";
-        }
-        else
-        {
-            String[] itemsL1=triggerInfoData.getTrigInfoL1SplitHex(0);
-            String[] itemsL2=triggerInfoData.getTrigInfoL2SplitHex(0);
-            String[] itemsEF=triggerInfoData.getTrigInfoEFSplitHex(0);
-            //find list with largest amount of items
-            int items = Math.max(Math.max(itemsL1.length, itemsL2.length),itemsEF.length);
-            properties = new String[items][3]; 
-            for(int i=0; i<items; i++)
-            {
-                properties[i][0]= (i<itemsL1.length) ? itemsL1[i] : "";
-                properties[i][1]= (i<itemsL2.length) ? itemsL2[i] : "";
-                properties[i][2]= (i<itemsEF.length) ? itemsEF[i] : "";
-            }
-        }
-        trigInfoItemsTable = new JTable(properties, new String[] { "L1", "L2", "EF" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        trigInfoItemsTable.setRowHeight(20);
-        trigInfoItemsTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        trigInfoItemsTable.getColumnModel().getColumn(0).setPreferredWidth(100);
-        trigInfoItemsTable.getColumnModel().getColumn(1).setPreferredWidth(100);
-        trigInfoItemsTable.getColumnModel().getColumn(1).setPreferredWidth(100);
-
-    }
-
-    private void fillTrigInfoStreamPane(ATriggerInfoData triggerInfoData)
-    {
-        String[][] properties;
-        
-        if (triggerInfoData == null)
-        {
-            properties = new String[1][1]; 
-            properties[0][0] = "N/A";
-        }
-        else
-        {
-            String[] items=triggerInfoData.getTrigInfoStreamTagSplit(0);
-            properties = new String[items.length][1]; 
-            for(int i=0; i<items.length; i++)
-            {
-                properties[i][0]=items[i];
-            }
-        }
-        trigInfoStreamTable = new JTable(properties, new String[] { "Stream Tag"}) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        trigInfoStreamTable.setRowHeight(20);
-        trigInfoStreamTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        trigInfoStreamTable.getColumnModel().getColumn(0).setPreferredWidth(450);
-    }
-
-    private void fillUserSelectedPane(String[][] L1_items, String[][] L2_items, String[][] EF_items)
-    {
-        String[][] properties;
-        if (USER_ITEMS==null)
-        {
-            properties = new String[1][2]; 
-            properties[0][0] = "Please add items to: " + LOOKUP_FILENAME;
-            properties[0][1] = "N/A";
-        }
-        else
-        {
-            Vector<String> v_c1 = new Vector<String>();//column 1 - item
-            Vector<String> v_c2 = new Vector<String>();//column 2 - prescales
-            Vector<String> v_u = new Vector<String>();//user items
-            for(int i=0; i<USER_ITEMS.length; i++)
-            {
-                v_u.add(USER_ITEMS[i]);
-            }
-            //loop over L1 items
-            for(int j=0; j<L1_items.length; j++)
-            {
-                for(int i=0; i<v_u.size(); i++)
-                {
-                    if(v_u.elementAt(i).equals(L1_items[j][0]))
-                    {
-                        v_c1.add(L1_items[j][0]);
-                        v_c2.add(L1_items[j][1]);
-                        v_u.remove(i);
-                    }                    
-                }
-            }
-            //if still have user items left loop over L2
-            if(v_u.size()>0)
-            {
-                for(int j=0; j<L2_items.length; j++)
-                {
-                    for(int i=0; i<v_u.size(); i++)
-                    {
-                        if(v_u.elementAt(i).equals(L2_items[j][0]))
-                        {
-                            v_c1.add(L2_items[j][0]);
-                            v_c2.add(L2_items[j][1]);
-                            v_u.remove(i);
-                        }                    
-                    }
-                }
-            }
-            //if still have user items left loop over EF
-            if(v_u.size()>0)
-            {
-                for(int j=0; j<EF_items.length; j++)
-                {
-                    for(int i=0; i<v_u.size(); i++)
-                    {
-                        if(v_u.elementAt(i).equals(EF_items[j][0]))
-                        {
-                            v_c1.add(EF_items[j][0]);
-                            v_c2.add(EF_items[j][1]);
-                            v_u.remove(i);
-                        }                    
-                    }
-                }
-            }            
-            //now store items in String[][]
-            properties = new String[v_c1.size()][2];
-            for(int i=0; i<v_c1.size(); i++)
-            {
-                properties[i][0]=v_c1.elementAt(i).toString();
-                properties[i][1]=v_c2.elementAt(i).toString();
-            }
-        }
-        userSelectedTable = new JTable(properties, new String[] { "Item passed", "Prescale" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        userSelectedTable.setRowHeight(20);
-        userSelectedTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        userSelectedTable.getColumnModel().getColumn(0).setPreferredWidth(350);
-        userSelectedTable.getColumnModel().getColumn(1).setPreferredWidth(100);
-    }
-    
-    private void fillmbtsPane()
-    {
-        ACalorimeterData calorimeter=null;
-        List<ACalorimeterData> detectors = eventManager.getCurrentEvent().getCalorimeters();
-        for (int det = 0; det < detectors.size(); det++)
-        {
-            ACalorimeterData testcalorimeter = detectors.get(det);
-            if (!testcalorimeter.getName().equals("MBTS")) continue;
-            if(testcalorimeter.getNumData()>0) calorimeter=testcalorimeter;
-        }
-        
-            
-        String[][] properties;
-        if (calorimeter==null)
-        {
-            properties = new String[1][5]; 
-            properties[0][0] = "N/A";
-            properties[0][1] = "N/A";
-            properties[0][2] = "N/A";
-            properties[0][3] = "N/A";
-            properties[0][4] = "N/A";
-        }
-        else
-        {
-            properties = new String[calorimeter.getNumData()][5];
-            //AMBTSData mbtsdata = calorimeter.eta[i];
-            for (int i = 0; i < calorimeter.getNumData(); ++i)
-            {
-                properties[i][0] = "" + i;
-                properties[i][1] = "" + String.format("%.3f",(calorimeter.getET(i)));
-                properties[i][2] = "" + String.format("%.1f",calorimeter.getEta(i));
-                properties[i][3] = "" + String.format("%.1f",calorimeter.getPhi(i));
-                properties[i][4] = "" + calorimeter.getSampling(i);
-            }
-        }
-        mbtsTable = new JTable(properties, new String[] { "Index", "Energy (MeV)", "Type", "Module", "Channel" }) {
-            public boolean isCellEditable(int row, int column) { return false; }
-        };
-        mbtsTable.setRowHeight(20);
-        mbtsTable.setFont(new Font("Monospaced", Font.PLAIN, 16));
-        mbtsTable.getColumnModel().getColumn(0).setPreferredWidth(90);
-        mbtsTable.getColumnModel().getColumn(1).setPreferredWidth(90);
-        mbtsTable.getColumnModel().getColumn(2).setPreferredWidth(90);
-        mbtsTable.getColumnModel().getColumn(3).setPreferredWidth(90);
-        mbtsTable.getColumnModel().getColumn(4).setPreferredWidth(90);
-    }
-
-    /**
-     * Implementing NewEvent listener
-     * @param event the new event
-     */
-    public void newEvent(AEvent event) {
-      if (isInUse()) updatePane();
-    }
-    
-    
-    
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AEventQueue.java b/graphics/AtlantisJava/src/atlantis/gui/AEventQueue.java
deleted file mode 100755
index 081e214dd295..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AEventQueue.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package atlantis.gui;
-
-import java.awt.EventQueue;
-import java.awt.AWTEvent;
-import java.awt.Frame;
-import java.awt.event.KeyEvent;
-import atlantis.parameters.APar;
-import atlantis.canvas.ACanvas;
-import atlantis.data.AG4StepData;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.interactions.AModifier;
-import javax.swing.JOptionPane;
-import atlantis.utils.ALogger;
-
-/**
- * Because we use Mouse Actions and Keyboard Modifiers (letters) we need a way of
- * getting all the keyboard events independent of the focussed compenent. This is
- * done by catching them directly from the Event Queue. So, we just replace the
- * default Java Queue by this one.
- */
-public class AEventQueue extends EventQueue {
-
-    /**
-     * Contains the code of the key (is some key is pressed)
-     * or KeyEvent.VK_UNDEFINED if no key is holded down.
-     */
-    private static int keyboardState;
-    private static AModifier defInt = new AModifier(KeyEvent.VK_UNDEFINED, false, "");
-
-    private KeyEvent keyEvent;
-
-    private final static ALogger logger = ALogger.getLogger(AEventQueue.class);
-    private static AEventManager eventManager = AEventManager.instance();
-
-    private static boolean isRightMouseButton;
-    
-    protected static APar parameterStore = APar.instance();
-    
-    private static final AGlobals globals = AGlobals.instance();
-
-    public static int getKeyboardState() {
-        int ret = 0;
-
-        if (keyboardState == KeyEvent.VK_UNDEFINED) {
-            ret = defInt.getKeyCode();
-        } else {
-            ret = keyboardState;
-        }
-
-        // Bit of a hack because fastzoom is handled differently from other
-        // interactions
-        if (ret == KeyEvent.VK_F) {
-            parameterStore.get("Projection", "SkipData").setStatus(true);
-        } else {
-            parameterStore.get("Projection", "SkipData").setStatus(false);
-        }
-
-        return ret;
-    }
-
-    public static AModifier getDefault() {
-        return defInt;
-    }
-
-    public static void setDefault(AModifier mod) {
-        defInt = mod;
-
-    }
-
-    public static int getKeyboardDefault() {
-        return defInt.getKeyCode();
-    }
-
-    public static boolean getIntRightMouseButton() {
-        if (keyboardState == KeyEvent.VK_UNDEFINED) {
-            // Non-default action selected, use the right click option from it
-            return defInt.getRightClick() || isRightMouseButton;
-        } else {
-            return isRightMouseButton;
-        }
-    }
-
-    // FIXME: isRightMouseButton sometimes has spurious true value: see Trac #488
-    protected void dispatchEvent(AWTEvent event) {
-    	Frame gui = globals.getGuiFrame();
-        super.dispatchEvent(event);
-
-        if(event instanceof KeyEvent) {
-            keyEvent=(KeyEvent)event;
-// this is the right mouse click on single mouse button mac's
-            switch(keyEvent.getID()) {
-                case KeyEvent.KEY_PRESSED:
-                    if(keyEvent.getKeyCode()==17) {
-                        isRightMouseButton=true;
-                        return;
-                    }
-                    keyboardState=keyEvent.getKeyCode();
-                    //atlantis.utils.AOutput.append(" key pressed :" + keyboardState + ":\n", atlantis.utils.ALogPane.NORMAL_BOLD);
-
-                    if (keyEvent.getKeyCode()==33){//page up
-                        System.out.println("Go to previous event");
-                        try {
-                            eventManager.previousEvent();
-                        } catch (NoMoreEventsException nme) {
-                            String msg = "Already at first event from this source!";
-                            JOptionPane.showMessageDialog(gui, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(nme.getCauseMessages());
-                        } catch (InvalidEventSourceException ies) {
-                            String msg = "Not a valid event source - please select one!";
-                            JOptionPane.showMessageDialog(gui, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(ies.getCauseMessages());
-                        } catch (ReadEventException ree) {
-                            String msg = "Can not read event(s)!";
-                            JOptionPane.showMessageDialog(gui, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(ree.getCauseMessages());
-                        }
-                    }
-                    if (keyEvent.getKeyCode()==34) {//page down
-                        System.out.println("Go to next event");
-                        try {
-                            eventManager.nextEvent();
-                        } catch (NoMoreEventsException nme) {
-                            String msg = "Already at last event from this source!";
-                            JOptionPane.showMessageDialog(gui, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(nme.getCauseMessages());
-                        } catch (InvalidEventSourceException ies) {
-                            String msg = "Not a valid event source - please select one!";
-                            JOptionPane.showMessageDialog(gui, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(ies.getCauseMessages());
-                        } catch (ReadEventException ree) {
-                            String msg = "Can not read event(s)!";
-                            JOptionPane.showMessageDialog(gui, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-                            logger.warn(ree.getCauseMessages());
-                        }
-                    }
-                    
-                    if (keyEvent.getKeyCode()==47) {// "/"
-                        AG4StepData.ReadG4Steps();
-                    }//key "/"
-
-                    if (keyEvent.getKeyCode() == KeyEvent.VK_F) {
-                        parameterStore.get("Projection", "SkipData").setStatus(true);
-                    }
-                    break;
-
-                case KeyEvent.KEY_RELEASED:
-                    if (keyEvent.getKeyCode() == 17) {
-                        isRightMouseButton = false;
-                        return;
-                    }
-                    keyboardState = KeyEvent.VK_UNDEFINED;
-                    if (keyEvent.getKeyCode() == KeyEvent.VK_F) {
-                        parameterStore.get("Projection", "SkipData").setStatus(false);
-                        ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-                    }
-                    break;
-            }
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AEventSourceToolBar.java b/graphics/AtlantisJava/src/atlantis/gui/AEventSourceToolBar.java
deleted file mode 100644
index 8f5534a6dd52..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AEventSourceToolBar.java
+++ /dev/null
@@ -1,523 +0,0 @@
-
-package atlantis.gui;
-
-import atlantis.config.ADefaultValues;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource;
-import atlantis.event.ANewEventSourceListener;
-import atlantis.event.AURLEventSource;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NavigationMode;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.event.AStreamedEventSource;
-import atlantis.event.AStreamedEventSource.InvalidStreamException;
-import atlantis.globals.AGlobals;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Vector;
-import javax.swing.Box;
-import javax.swing.ButtonGroup;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-
-/**
- * This toolbar contains all the elements to set a new event source or stream,
- * browse through the events or set the event navigation mode
- * @author maillard
- * @author sboeser
- */
-class AEventSourceToolBar extends JToolBar implements ANewEventSourceListener {
-
-  /** The text field that allows us to enter a new event source */
-  private JTextField addressBar;
-
-  /** The event stream selection combo box */
-  private JComboBox eventStreamComboBox;
-
-  /** The radio buttons that allow to select the event navigation mode */
-  private JRadioButton randomButton, sequentialButton, loopButton;
-  
-  /** The logger */
-  private final static ALogger logger = ALogger.getLogger(AEventSourceToolBar.class);
-
-  private static AEventManager eventManager = AEventManager.instance();
-  
-  /** Spacing between components in the toolbar */
-  private static int SPACE = 4;
-
-  /**
-   * Constructor
-   */
-  public AEventSourceToolBar() {
-
-    //call parent constructor
-    super();
-
-    setFloatable(false);
-
-    //Get the path to the icon files
-    String iconPath = AGlobals.instance().getHomeDirectory()+"img"+System.getProperty("file.separator");
-
-    // setting up the 'open file' button
-    ImageIcon openIcon = AUtilities.getFileAsImageIcon(iconPath+"toolbar_open.png");
-    JButton openFile = new JButton(openIcon);
-    openFile.setVerticalTextPosition(JButton.BOTTOM);
-    openFile.setHorizontalTextPosition(JButton.CENTER);
-    openFile.setMargin(new Insets(2, 2, 2, 2));
-    openFile.setToolTipText("Open local file");
-    // And add an action listener for it
-    openFile.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        openFileButtonAction();
-      }
-    });
-    // adding the open file button to the toolbar
-
-    add(Box.createHorizontalStrut(SPACE));
-    add(openFile);
-    add(Box.createHorizontalStrut(SPACE));
-
-    // setting up the address bar
-    addressBar = new JTextField(30);
-    // and an action listener
-    addressBar.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        addressBarAction((JTextField)e.getSource());
-      }
-    });
-    // adding the address bar to the toolbar
-    add(addressBar);
-
-    //Set up previous and  next buttons
-    ImageIcon nextIcon = AUtilities.getFileAsImageIcon(iconPath+"toolbar_next.png");
-    ImageIcon previousIcon = AUtilities.getFileAsImageIcon(iconPath+"toolbar_previous.png");
-
-    JButton nextButton = new JButton(nextIcon);
-    JButton previousButton = new JButton(previousIcon);
-    
-    //customize and add action listener for next
-    nextButton.setName("nextButton");
-    nextButton.setVerticalTextPosition(JButton.BOTTOM);
-    nextButton.setHorizontalTextPosition(JButton.CENTER);
-    nextButton.setMargin(new Insets(2, 2, 2, 2));
-    nextButton.setToolTipText("Next event (PageDown)");
-    nextButton.addActionListener(new ActionListener(){
-      public void actionPerformed(ActionEvent e){
-        nextButtonAction();
-      }
-    });
-
-    //customize and add action listener for previous
-    previousButton.setName("previousButton");
-    previousButton.setVerticalTextPosition(JButton.BOTTOM);
-    previousButton.setHorizontalTextPosition(JButton.CENTER);
-    previousButton.setMargin(new Insets(2, 2, 2, 2));
-    previousButton.setToolTipText("Previous event (PageUp)");
-    previousButton.addActionListener(new ActionListener(){
-      public void actionPerformed(ActionEvent e){
-        previousButtonAction();
-      }
-    });
-    //Add both to toolbar
-    add(Box.createHorizontalStrut(SPACE));
-    add(previousButton);
-    add(nextButton);
-    add(Box.createHorizontalStrut(SPACE));
-
-    //Next add a seperator
-    addSeparator();
-
-    //Add a combo box, but set it to invisble
-    String[] streamNames = { "--n/a--" };
-    eventStreamComboBox = new JComboBox(streamNames);
-    eventStreamComboBox.setVisible(false);
-    add(eventStreamComboBox);
-
-    // set up the navigation mode button icons
-    ImageIcon sequentialIcon = AUtilities.getFileAsImageIcon(iconPath+"mode_sequential.png");
-    ImageIcon loopIcon = AUtilities.getFileAsImageIcon(iconPath+"mode_loop.png");
-    ImageIcon randomIcon = AUtilities.getFileAsImageIcon(iconPath+"mode_random.png");
-    ImageIcon sequentialIconOn = AUtilities.getFileAsImageIcon(iconPath+"mode_sequential_on.png");
-    ImageIcon loopIconOn = AUtilities.getFileAsImageIcon(iconPath+"mode_loop_on.png");
-    ImageIcon randomIconOn = AUtilities.getFileAsImageIcon(iconPath+"mode_random_on.png");
-
-    //put these buttons in a group
-    ButtonGroup group = new ButtonGroup();
-    // sequential mode
-    sequentialButton = new JRadioButton(sequentialIcon);
-    sequentialButton.setOpaque(false);
-    sequentialButton.setSelectedIcon(sequentialIconOn);
-    sequentialButton.setToolTipText("Sequential mode");
-    sequentialButton.setName("Sequential mode");
-    // loop mode
-    loopButton = new JRadioButton(loopIcon);
-    loopButton.setSelectedIcon(loopIconOn);
-    loopButton.setOpaque(false);
-    loopButton.setToolTipText("Loop mode");
-    loopButton.setName("Loop mode");
-    // random mode
-    randomButton = new JRadioButton(randomIcon);
-    randomButton.setOpaque(false);
-    randomButton.setSelectedIcon(randomIconOn);
-    randomButton.setToolTipText("Random mode");
-    randomButton.setName("Random mode");
-    // the mode buttons are initially disabled, since we
-    // don't know which event source will be loaded first
-    sequentialButton.setEnabled(false);
-    loopButton.setEnabled(false);
-    randomButton.setEnabled(false);
-
-    // when one of the buttons is pressed, set the required display mode
-    sequentialButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        navigationModeAction(NavigationMode.SEQUENTIAL);
-      }
-    });
-
-    loopButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        navigationModeAction(NavigationMode.LOOP);
-      }
-    });
-
-    randomButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        navigationModeAction(NavigationMode.RANDOM);
-      }
-    });
-    //Add all buttons to the group
-    group.add(sequentialButton);
-    group.add(loopButton);
-    group.add(randomButton);
-
-    add(sequentialButton);
-    add(loopButton);
-    add(randomButton);
-  }
-  
-  /**
-   * Called whenever the event text field changed
-   */
-  private synchronized void addressBarAction(JTextField tf){
-
-    //Get the new text
-    String sourceName = tf.getText();
-
-    // if sourceName is a local path but doesn't provide an [type]://,
-    // prepend file:// as default
-    if(! sourceName.contains("://")) sourceName = "file://" + sourceName;
-    try {
-      eventManager.setEventSource(sourceName);
-      eventManager.nextEvent();
-    } catch (NoMoreEventsException nme) {
-      JOptionPane.showMessageDialog(this, "No more events found from this source!", "No more events", JOptionPane.ERROR_MESSAGE);
-      logger.warn(nme.getCauseMessages());
-    } catch (InvalidEventSourceException ies) {
-      JOptionPane.showMessageDialog(this, "Not a valid event source: "+sourceName, "Invalid event source", JOptionPane.ERROR_MESSAGE);
-      logger.error(ies.getCauseMessages());
-    } catch (ReadEventException ree ){
-      JOptionPane.showMessageDialog(this, "Cannot read event(s).", "Read error", JOptionPane.ERROR_MESSAGE);
-      logger.warn(ree.getCauseMessages());
-    }
-  }
-
-  /**
-   * Called whenever the previous button is pressed
-   */
-  private synchronized void previousButtonAction(){
-	  
-    try {
-      eventManager.previousEvent();
-    } catch (NoMoreEventsException nme) {
-      String msg = "Already at first event from this source!";
-      JOptionPane.showMessageDialog(this, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-      logger.warn(nme.getCauseMessages());
-    } catch (InvalidEventSourceException ies ){
-      String msg = "Not a valid event source - please select one!";
-      JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-      logger.warn(ies.getCauseMessages());
-    } catch (ReadEventException ree ){
-      String msg = "Can not read event(s)!";
-      JOptionPane.showMessageDialog(this, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-      logger.warn(ree.getCauseMessages());
-    }
-	refreshAddressBar();
-  }
-
-  /**
-   * Called whenever the next button is pressed
-   */
-  private synchronized void nextButtonAction(){
-    try {
-      eventManager.nextEvent();
-    } catch (NoMoreEventsException nme) {
-      String msg = "Already at last event from this source!";
-      JOptionPane.showMessageDialog(this, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-      logger.warn(nme.getCauseMessages());
-    } catch (InvalidEventSourceException ies ){
-      String msg = "Not a valid event source - please select one!";
-      JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-      logger.warn(ies.getCauseMessages());
-    } catch (ReadEventException ree ){
-      String msg = "Can not read event(s)!";
-      JOptionPane.showMessageDialog(this, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-      logger.warn(ree.getCauseMessages());
-    }
-	refreshAddressBar();
-  }
-  
-  /**
-   * Update the address bar to show the current event source
-   */
-  private synchronized void refreshAddressBar(){  
-      AEventSource source = eventManager.getEventSource();
-      AEvent event = eventManager.getCurrentEvent();
-      if (source != null && event != null) {
-          // if the source is a URL, we should always use '/' as the separator
-          // else we'll use the system file separator
-          if (source instanceof AURLEventSource) {
-              addressBar.setText(source.getSourceName() + "/" + event.getSourceName());
-          } else {
-              addressBar.setText(source.getSourceName() + System.getProperty("file.separator") + event.getSourceName());
-          }
-      }
-  }
-
-  /**
-   * Open a file dialog and read the selected event or directory
-   */
-  private synchronized void openFileButtonAction(){
-    //get the last location from the default values
-    String lastLoc = ADefaultValues.get("LastEventFilesSourceDir");
-    //Create a file chooser dialog
-    AReadFileChooser fileDialog = new AReadFileChooser(lastLoc);
-    //Check if the user pressed ok in the dialog
-    if ( fileDialog.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
-      //Get the selected file path, prepend file://
-      String fullFilePath = "file://" + fileDialog.getSelectedFile().getPath();
-
-      try {
-        //Now set this as a new event source
-        eventManager.setEventSource(fullFilePath);
-        eventManager.nextEvent();
-      } catch (NoMoreEventsException nme) {
-        String msg = "No events found from this source!";
-        JOptionPane.showMessageDialog(this, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-        logger.warn(nme.getCauseMessages());
-      } catch (InvalidEventSourceException ies ){
-        String msg = "Not a valid event source";
-        JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-        logger.warn(ies.getCauseMessages());
-      } catch (ReadEventException ree ){
-        String msg = "Can not read event(s)";
-        JOptionPane.showMessageDialog(this, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-        logger.warn(ree.getCauseMessages());
-      }
-    } // okay pressed - otherwise do nothing
-  } // openFileButtonAction() ----------------------------------------------------
-
-  /**
-   * Called whenever the navigation mode is changed in the GUI
-   */
-  private synchronized void navigationModeAction( NavigationMode mode ){
-    try {
-      eventManager.setNavigationMode(mode); }
-    catch (InvalidEventSourceException ies) {
-      JOptionPane.showMessageDialog(this, ies.getCauseMessages(), "Invalid navigation mode", JOptionPane.ERROR_MESSAGE);
-    }
-  }
-
-  /**
-   * Called whenever the event stream is changed in the GUI
-   */
-  private synchronized void selectedStreamAction(AStreamedEventSource source){
-
-    //Get the newly selected stream
-    String stream = (String) eventStreamComboBox.getSelectedItem();
-    
-    try {
-      //Try to set a new stream
-      source.setStream(stream);
-      //Also get a new event
-      eventManager.nextEvent();
-      //And update the event source field
-      refreshAddressBar();
-
-    } catch (NoMoreEventsException nme){
-      //In case we already have the latest event from this stream - ignore
-    } catch (InvalidStreamException ise) {
-      //This can happen if the stream list changes inbetween
-      //opening the popup and selecting an item
-      String msg = "Cannot set stream '"+stream+"' for event source";
-      JOptionPane.showMessageDialog(this, msg, "Invalid stream", JOptionPane.ERROR_MESSAGE);
-      logger.error(msg+"\n"+ise.getCauseMessages());
-      //Also clear the stream list
-      eventStreamComboBox.removeAllItems();
-    } catch (InvalidEventSourceException ies) {
-      //This can happen if the source turned invalid inbetween
-      //opening the popup and selecting an item
-      String msg = "Invalid event source when setting new stream";
-      JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-      logger.error(msg+"\n"+ies.getCauseMessages());
-      //Also clear the stream list
-      eventStreamComboBox.removeAllItems();
-    } catch (ReadEventException ree){
-      //Do nothing special with stream list in this case
-      String msg = "Can not read event from new stream '"+stream+"'";
-      JOptionPane.showMessageDialog(this, msg, "Invalid event", JOptionPane.ERROR_MESSAGE);
-      logger.error(msg+"\n"+ree.getCauseMessages());
-    }
-
-  }
-
-  /**
-   * This is called whenever the event stream combo is poped up
-   * Use this to update the event list every time
-   */
-  private synchronized void updateEventStreamCombo(AStreamedEventSource eventSource){
-    /**
-     * NOTE: We are NOT using "removeAllItems" + "addItems" to update the
-     *       combo box as this will always fire a new ActionEvent with the first
-     *       added Item. The proper way to do is to change the data model, as the
-     *       new data model will only fire AFTER the user selected from the open
-     *       ComboBox.
-     */
-
-    //Create an empty list
-    Vector<String> streamNames = new Vector<String>();
-
-    try {
-      //Get the stream names
-      streamNames = eventSource.getAvailableStreams();
-    } catch (InvalidEventSourceException ies) {
-      //If we fail to update the list show some messages
-      //NOTE: we can not show dialog here, as this will steal the focus
-      //      from the combo box, so it does not pop-down later on
-      String msg = "Invalid event source when getting stream list";
-      //JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-      logger.error(msg+"\n"+ies.getCauseMessages());
-    }
-
-    //In any case update the stream list by setting a new data model
-    // -- even if it is empty
-    finally {
-      //Create a new data model
-      DefaultComboBoxModel newDataModel = new DefaultComboBoxModel(streamNames);
-      //Select the same stream we had before, if its still there
-      newDataModel.setSelectedItem(eventStreamComboBox.getSelectedItem());
-      //Now install the new DataModel
-      eventStreamComboBox.setModel(newDataModel);
-    }
-  }
-
-  /**
-   * This implementation of the ANewEventSourceListener gets called whenever
-   * the event source changes in AEventManager
-   * @param eventSource the new event source (final as being bound by combo action listener)
-   */
-  public synchronized void newEventSource(final AEventSource eventSource) {
-
-    //Stream selection is off by default
-    eventStreamComboBox.setVisible(false);
-
-    //Check if this event source supports streams
-    if (eventSource instanceof AStreamedEventSource){
-      
-      AStreamedEventSource streamedSource = (AStreamedEventSource) eventSource;
-
-      //Update the list in the event stream combo box
-      updateEventStreamCombo(streamedSource);
-
-      //Temporarily remove all the update handler
-      for (ActionListener al : eventStreamComboBox.getActionListeners())
-         eventStreamComboBox.removeActionListener(al);
-      for (PopupMenuListener pml : eventStreamComboBox.getPopupMenuListeners())
-         eventStreamComboBox.removePopupMenuListener(pml);
-
-      try {
-        //Now right away select the stream given by the event source
-        eventStreamComboBox.setSelectedItem(((AStreamedEventSource) eventSource).getStream());
-      } catch (InvalidEventSourceException ies) {
-        //If we fail to update the list show some messages
-        String msg = "Invalid event source when getting stream list";
-        JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-        logger.error(msg+"\n"+ies.getCauseMessages());
-      } catch (NoMoreEventsException nme) {
-         //If we fail to update the list show some messages
-        String msg = "No streams (yet) available for this source";
-        JOptionPane.showMessageDialog(this, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-        logger.error(msg+"\n"+nme.getCauseMessages());
-      }
-   
-      //(Re-)set the update handler
-      eventStreamComboBox.addActionListener( new ActionListener () {
-        public void actionPerformed(ActionEvent e) {
-          selectedStreamAction((AStreamedEventSource)eventSource);
-        }
-      });
-
-      //Also have the combobox update its item list every time the
-      //popup is selected
-      eventStreamComboBox.addPopupMenuListener(new PopupMenuListener(){
-        //update stream list when popup appears
-        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-          updateEventStreamCombo((AStreamedEventSource)eventSource);
-        }
-        //Do nothing in other cases
-        public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
-        public void popupMenuCanceled(PopupMenuEvent e) {}
-        }
-      );
-
-      //Finally make it visible
-      eventStreamComboBox.setVisible(true);
-    }
-      
-    //And repaint to show/hide the combo box
-    repaint();
-
-    // disable all the mode buttons
-    sequentialButton.setEnabled(false);
-    loopButton.setEnabled(false);
-    randomButton.setEnabled(false);
-  
-    // enable the modes that are supported by the current event source
-    // and mark the current display mode as active
-    if(eventSource.supportsNavigationMode(NavigationMode.SEQUENTIAL)) {
-      if(eventSource.getNavigationMode() == NavigationMode.SEQUENTIAL)
-        sequentialButton.setSelected(true);
-      sequentialButton.setEnabled(true);
-    }
-
-    if(eventSource.supportsNavigationMode(NavigationMode.LOOP)) {
-      if(eventSource.getNavigationMode() == NavigationMode.LOOP)
-        loopButton.setSelected(true);
-      loopButton.setEnabled(true);
-    }
-
-    if(eventSource.supportsNavigationMode(NavigationMode.RANDOM)) {
-      if(eventSource.getNavigationMode() == NavigationMode.RANDOM)
-        randomButton.setSelected(true);
-      randomButton.setEnabled(true);
-    }
-
-    // change the address in the address bar to the current event source
-    refreshAddressBar();
-
-  } // newEventSource() -----------------------------------------------------
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AFileControl.java b/graphics/AtlantisJava/src/atlantis/gui/AFileControl.java
deleted file mode 100755
index 7cf12548f0ec..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AFileControl.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JMenu;
-import javax.swing.JOptionPane;
-import javax.swing.JSeparator;
-
-import atlantis.config.ADefaultValues;
-import atlantis.data.AG4StepData;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.utils.ALogger;
-import javax.swing.JFileChooser;
-
-
-/**
- * The File menu in the GUI.
- */
-public class AFileControl extends JMenu
-{
-    private static ALogger logger = ALogger.getLogger(AFileControl.class);
-    private static AEventManager eventManager = AEventManager.instance();
-    private static final AGlobals globals = AGlobals.instance();
-
-    public AFileControl()
-    {
-        super("File");
-
-        add("Read Event Locally").addActionListener(new ActionListener() 
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-              readEventLocally(); 
-            
-            }
-        }); // add("Read Event Locally")
-
-        add("Read Event From URL (live)").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                readEventFromURL();
-            }
-        }); // add("Read Event From URL")
-
-        add(new JSeparator());
-
-        add("Loop over events").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AEventLoopDialog.getInstance().showDialog();
-            }
-        });
-
-        add(new JSeparator());
-
-        add("Save Image of Canvas").addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-               //Create a new dialog
-              ASaveCanvasDialog dialog = new ASaveCanvasDialog();
-              //And show it
-              dialog.showDialog();
-            }
-        });
-
-        add(new JSeparator());
-
-        add("Event Properties").addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-                AEventPropertiesDialog.getInstance().setVisible(true);
-            }
-        }); // add("Event Properties")
-
-        add(new JSeparator());
-
-        add("Read Geometry").addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-                new AReadGeometryChooser();
-            }
-        }); // add("Read Geometry")
-
-        add("Read G4Steps").addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-                AG4StepData.ReadG4Steps();
-            }
-        }); // add ("Read G4Steps")
-        
-        int userLevel = APar.instance().getUserLevel();
-        if(userLevel>=3) // TODO: Use name for "debug" instead of magic number
-        {
-            add("Memory information").addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e)
-                {
-                    System.gc();
-                    long total = Runtime.getRuntime().totalMemory();
-                    long free = Runtime.getRuntime().freeMemory();
-                    long max = Runtime.getRuntime().maxMemory();
-                    int fac = 1024 * 1024; // Mega factor
-                    String newLine = System.getProperty("line.separator");
-                    AOutput.append("\nMemory information:"+newLine, ALogInterface.NORMAL);
-                    AOutput.append(" total: " + total + " B  " + total / fac + " MB"+newLine, ALogInterface.NORMAL);
-                    AOutput.append(" free : " + free + " B  " + free / fac + " MB"+newLine, ALogInterface.NORMAL);
-                    AOutput.append(" max  : " + max + " B  " + max / fac + " MB"+newLine, ALogInterface.NORMAL);
-                }
-            });
-            
-        } // if(logger.isDebugEnabled())
-
-        add(new JSeparator());
-
-        add("Exit").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                new AClosingConfirmationDialog(globals.getGuiFrame()).exitApp();
-            }
-        });
-
-    } // AFileControl() -----------------------------------------------------
-
-    
-    /**
-     * Open a file dialog and read the selected event or directory
-     */
-    private static void readEventLocally(){
-      Frame gui = globals.getGuiFrame();
-      //get the last location from the default values  
-      String lastLoc = ADefaultValues.get("LastEventFilesSourceDir");
-      //Create a file chooser dialog
-      AReadFileChooser fileDialog = new AReadFileChooser(lastLoc);
-      //Check if the user pressed ok in the dialog
-      if ( fileDialog.showOpenDialog(gui) == JFileChooser.APPROVE_OPTION) {
-        //Get the selected file path, prepend file://
-        String fullFilePath = "file://" + fileDialog.getSelectedFile().getPath();
-        
-        try {
-          //Now set this as a new event source
-          eventManager.setEventSource(fullFilePath);
-          eventManager.nextEvent();
-        } catch (NoMoreEventsException nme) {
-          String msg = "No events found from this source!";
-          JOptionPane.showMessageDialog(gui, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-          logger.warn(nme.getCauseMessages());
-        } catch (InvalidEventSourceException ies ){
-          String msg = "Not a valid event source";
-          JOptionPane.showMessageDialog(gui, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-          logger.warn(ies.getCauseMessages());
-        } catch (ReadEventException ree ){
-          String msg = "Can not read event(s)";
-          JOptionPane.showMessageDialog(gui, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-          logger.warn(ree.getCauseMessages());
-        }
-      } // okay pressed - otherwise do nothing
-    }
-    
-    
-    private static void readEventFromURL()
-    {
-        // URL may end with .zip - archive of event files, .xml - single
-        // XML event file (in this case Read Next, Previous works on the web
-        // directory starting from this single file) or URL only of a web
-        // directory (string input considered to end with whatever else) -
-        // in this case Atlantis gets the first event in the directory,
-        // Read Next, Previous work as expected
-        // this URL should always start with http://
-    	
-        Frame gui = globals.getGuiFrame();
-        String urlString = JOptionPane.showInputDialog(gui,
-                           "Enter URL:", AGlobals.instance().getLivePoint1EventsURL());
-                
-        //Make sure this is a proper string - otherwise abort
-        if(urlString == null || urlString.trim().length()==0) return;
-        
-        // event manager further distinguishes the particular event
-        // reader whether URL ends with .zip or .xml
-        try {
-          //Now set this as a new event source
-          eventManager.setEventSource(urlString);
-          eventManager.nextEvent();
-        } catch (NoMoreEventsException nme) {
-          String msg = "No events found from this source!";
-          JOptionPane.showMessageDialog(gui, msg, "No more events", JOptionPane.ERROR_MESSAGE);
-          logger.warn(nme.getCauseMessages());
-        } catch (InvalidEventSourceException ies ){
-          String msg = "Not a valid event source";
-          JOptionPane.showMessageDialog(gui, msg, "Invalid source", JOptionPane.ERROR_MESSAGE);
-          logger.warn(ies.getCauseMessages());
-        } catch (ReadEventException ree ){
-          String msg = "Can not read event(s)";
-          JOptionPane.showMessageDialog(gui, msg, "Read error", JOptionPane.ERROR_MESSAGE);
-          logger.warn(ree.getCauseMessages());
-        }
-    } // readEventFromURL() -------------------------------------------------
-   
-} // class AFileControl =====================================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AGUI.java b/graphics/AtlantisJava/src/atlantis/gui/AGUI.java
deleted file mode 100644
index a4327b379589..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AGUI.java
+++ /dev/null
@@ -1,572 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.JFrame;
-import javax.swing.JMenuBar;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTabbedPane;
-
-import java.net.Authenticator;
-import java.util.List;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.ALayoutChangeListener;
-import atlantis.canvas.AWindow;
-import atlantis.event.AEventInfoPrinter;
-import atlantis.event.AEventManager;
-import atlantis.event.AEventSource.InvalidEventSourceException;
-import atlantis.event.AEventSource.NoMoreEventsException;
-import atlantis.event.AEventSource.ReadEventException;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.list.AListManager;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.ACommandProcessor;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParameterChangeListener;
-import atlantis.parameters.AParameterSuperGroup;
-import atlantis.parameters.AParametersGroup;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import javax.swing.*;
-
-/**
- * The Atlantis Graphical User Interface
- * This is a singleton class (and probably one of the few cases where this is
- * justified!). By implementing the ALayoutChangeListener it adjusts its size to
- * the canvas size.
- */
-public class AGUI extends JFrame implements ChangeListener,
-ALayoutChangeListener,
-AParameterChangeListener
-{
-    private final static ALogger logger = ALogger.getLogger(AGUI.class);
-    private final static AGlobals globals = AGlobals.instance();
-    public AEventManager eventManager = AEventManager.instance();
-
-    private static AGUI instance;
-
-    private static APar parameterStore = APar.instance();
-
-    /** Limit the total width of Atlantis to this number of pixels (0 = screen width). */
-    private int maxWidth = 0;
-
-    private AItemTabbedPane[] tabbedPane;
-    private AParametersPage[][] pages;
-    private AParametersGroup[][] groups;
-    private ChangeListener[] tabChangeListener;
-    private ChangeListener outerTabChangeListener;
-    private JPanel panel;
-    private JSplitPane split;
-    private JTabbedPane outerTabbedPane;
-    private AInteractionToolBar interactionToolBar;
-
-    /**
-     * Public singleton instantian-accessor
-     * @return the singleton instance
-     */
-    public static AGUI getGUI()
-    {
-        //Don't create any GUI in headless mode
-        if (AGlobals.isAtlantisHeadless()) return null;
-        //Create the GUI if it does not exist
-        if (instance == null) {
-            instance = new AGUI();
-            globals.setGuiFrame(instance);
-        }
-        //return the singleton instance
-        return instance;
-    }
-
-    /**
-     * Private singleton constructor
-     */
-    private AGUI()
-    {
-        //intialize parent
-        super("Atlantis GUI");
-
-        //be verbose
-        logger.debug("Creating GUI...");
-
-        // AClosingConfirmationDialog class handles closing Atlantis
-        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
-        this.addWindowListener(new AClosingConfirmationDialog(this));
-
-        getContentPane().setLayout(new BorderLayout());
-        AIcon.setIconImage(this);
-
-        // Creating all menu bar items
-        JMenuBar menuBar = constructAndGetMenuBar();
-        setJMenuBar(menuBar); // set menubar to this frame
-
-        // Create a new toolbar for the event sources
-        AEventSourceToolBar toolBar = new AEventSourceToolBar();
-        toolBar.setName("Atlantis event source toolbar");
-        //Does not go into main panel as it need BorderLayout
-        add(toolBar, BorderLayout.PAGE_START);
-        // register as an event source listener
-        eventManager.addNewEventSourceListener(toolBar);
-
-        // building the panel with our own layout manager
-        // Why do we actually need it??
-        panel = new JPanel(new AGUILayoutManager());
-
-        // setting the Window Control
-        AWindowControl windowControl = new AWindowControl();
-        windowControl.setName("windowControl");
-        panel.add(windowControl, AGUILayoutManager.AVAILABLExPREFERRED);
-
-        // setting the Parameters Table
-        groups = parameterStore.getUIGroups();
-        pages = new AParametersPage[groups.length][];
-        tabbedPane = new AItemTabbedPane[groups.length];
-        tabChangeListener = new TabChangeListener[groups.length];
-
-        for(int i = 0; i < groups.length; i++)
-        {
-            pages[i] = new AParametersPage[groups[i].length];
-            tabbedPane[i] = new AItemTabbedPane(JTabbedPane.LEFT);
-
-            for(int j = 0; j < groups[i].length; j++)
-            {
-                pages[i][j] = new AParametersPage(groups[i][j]);
-                String title = groups[i][j].getScreenName();
-                tabbedPane[i].addTab(title, null,
-                        pages[i][j], groups[i][j].getToolTip());
-                pages[i][j].setName(title);
-                if(groups[i][j].getScreenName().equals("Residual") || 
-                        groups[i][j].getScreenName().equals("Physics") )
-                    tabbedPane[i].setEnabledAt(tabbedPane[i].getTabCount()-1, false);
-            }
-            tabbedPane[i].setSelectedIndex(-1);
-            tabChangeListener[i] = new TabChangeListener();
-            tabbedPane[i].addChangeListener(tabChangeListener[i]);
-            tabbedPane[i].addMouseListener(new MouseAdapter()
-            {
-                public void mousePressed(MouseEvent e)
-                {
-                    if(AUtilities.isRightMouseButton(e))
-                    {
-                        JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
-                        int tab = tabbedPane.getUI().tabForCoordinate(tabbedPane, e.getX(), e.getY());
-                        int parentTab = ((JTabbedPane) tabbedPane.getParent()).getSelectedIndex();
-                        if(tab != -1)
-                        {
-                            String helpName = groups[parentTab][tab].
-                                    getGroupName();
-                            AHelpSystem.getInstance().showPage(helpName);
-                        }
-                    }
-                }
-            });
-        }
-        // for loop - setting the outer Table
-
-        outerTabbedPane = new AItemTabbedPane(JTabbedPane.TOP);
-        outerTabbedPane.setName("parameterGroups");
-        List<AParameterSuperGroup> superGroups = parameterStore.getUISuperGroups();
-        for(int i = 0; i < superGroups.size(); i++) {
-            AParameterSuperGroup superGroup = superGroups.get(i);
-            String title = superGroup.getName();
-            String toolTip = superGroup.getToolTip();
-            outerTabbedPane.addTab(title, null, tabbedPane[i], toolTip);
-            tabbedPane[i].setName(title);
-        }
-        outerTabChangeListener = new OuterTabChangeListener();
-        outerTabbedPane.addChangeListener(outerTabChangeListener);
-        outerTabbedPane.addMouseListener(new MouseAdapter()
-        {
-            public void mousePressed(MouseEvent e)
-            {
-                if(AUtilities.isRightMouseButton(e))
-                {
-                    JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
-                    int tab = tabbedPane.getUI().tabForCoordinate(tabbedPane, e.getX(), e.getY());
-                    if(tab != -1)
-                    {
-                        String helpName = tabbedPane.getTitleAt(tab);
-                        AHelpSystem.getInstance().showPage(helpName);
-                    }
-                }
-            }
-        });
-        panel.add(outerTabbedPane, AGUILayoutManager.AVAILABLExAVAILABLE);
-
-        // Set up the output (log) pane.
-        AMainLogPane outputDisplay = new AMainLogPane();
-        // Make it available to all
-        AOutput.setOutput(outputDisplay);
-        // Display details of each new event
-        AEventInfoPrinter eventInfoPrinter = new AEventInfoPrinter(outputDisplay);
-        eventManager.addNewEventListener(eventInfoPrinter);
-        // Put it in the GUI
-        split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, panel, outputDisplay);
-        split.setOneTouchExpandable(true);
-        split.setResizeWeight(0.75); //Give 25% to the log pane by default
-        getContentPane().add(split);
-
-        // setting the window, projection and group listeners
-        ACanvas.getCanvas().addWindowChangeListener(this);
-        String[] wName = ACanvas.getCanvas().getKnownWindowNames();
-        for(int i = 0; i < wName.length; i++) {
-            AWindow w = ACanvas.getCanvas().getWindow(wName[i]);
-            w.addProjectionChangeListener(new ChangeListener() {
-                public void stateChanged(ChangeEvent e) {
-                    AWindow window = (AWindow) e.getSource();
-                    if(window.equals(ACanvas.getCanvas().getCurrentWindow())) {
-                        if(interactionToolBar != null) panel.remove(interactionToolBar);
-                        interactionToolBar = window.getInteractionToolBar();
-                        if(interactionToolBar == null)
-                            window.getInteractionManager().forgetContext();
-                        else {
-                            // the interactions tabpanes are added here
-                            panel.add(interactionToolBar, AGUILayoutManager.AVAILABLExPREFERRED, 0);
-                            interactionToolBar.connect();
-                            validate();
-                        }
-                    }
-                }
-            });
-
-            w.addGroupChangeListener(new ChangeListener() {
-                public void stateChanged(ChangeEvent e) {
-                    AWindow window = (AWindow) e.getSource();
-                    if(window.equals(ACanvas.getCanvas().getCurrentWindow()))
-                        setSelectedTab(window.getGroupName());
-                }
-            });
-        }
-
-        // Set Authenticator for password-protected URL access to use
-        // APasswordDialog.
-        Authenticator.setDefault(APasswordDialog.getAuthenticator(this));
-
-    } // AGUI() -------------------------------------------------------------
-
-
-
-    /**
-     * Limit the total width of Atlantis to this number of pixels.
-     *
-     * @param maxWidth the maximum allowed width in pixels (0 = screen width)
-     */
-    public void setMaxWidth(int maxWidth) {
-        this.maxWidth = maxWidth;
-    }
-
-    /**
-     * Constructs all menu bar (master) items and returns its instance
-     * @return JMenuBar
-     */
-    private JMenuBar constructAndGetMenuBar()
-    {
-        JMenuBar menuBar = new JMenuBar();
-        menuBar.add(new AFileControl()); // File menu bar item
-        menuBar.add(new APreferencesControl()); // Preferences menu bar item
-        menuBar.add(new AListsControl()); // List manager
-
-        // Spacing, remaining buttons are aligned to the right
-        menuBar.add(Box.createHorizontalGlue());
-
-        // Reset button
-        AMenuButton defaults = new AMenuButton("Reset");
-        defaults.setToolTipText("Reload default settings");
-        defaults.setBorder(null);
-        defaults.addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                restoreDefaults();
-            }
-        });
-        menuBar.add(defaults);
-
-        // Demo button
-        AMenuButton demoButton = new AMenuButton("Demo");
-        demoButton.setToolTipText("Start Demo mode");
-        demoButton.setBorder(null);
-        demoButton.addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                ADemoDialog.getInstance().setVisible(true);
-            }
-        });
-        menuBar.add(demoButton);
-
-        // Help menu item
-        menuBar.add(new AHelpControl());
-
-        return menuBar;
-
-    } // constructAndGetMenuBar() -------------------------------------------
-
-
-
-    /**
-     * This gets called when the current layout changes in ACanvas
-     */
-    public void layoutChanged(ACanvas canvas) {
-
-        // adapt the width of the GUI
-        Rectangle screenSize = canvas.getScreenSize();
-
-        int useWidth = screenSize.width;
-        if (maxWidth > 0 && useWidth > maxWidth) {
-            useWidth = maxWidth;
-        }
-
-        Rectangle canvbound = canvas.getStartupCanvasSize();
-        int guiHeight = canvbound.height;
-        if (canvas.getCurrentLayout().getName().equals("FULL SCREEN")) {
-            int guiWidth = useWidth / 4;
-            setBounds(useWidth * 3 / 4, 0, guiWidth, guiHeight);
-            // minimise the gui in fullscreen mode
-            int state = getExtendedState();
-            state |= JFrame.ICONIFIED;
-            setExtendedState(state);
-        } else {
-            int guiWidth = useWidth - canvbound.width - canvbound.x;
-            setBounds(canvbound.x + canvbound.width, canvbound.y, guiWidth, guiHeight);
-        }
-    } // layoutChanged() -----------------------------------------------------
-
-    /**
-     * This gets called when the current window changes in ACanvas
-     * @param e The ChangeEvent from the Window
-     */
-    public void stateChanged(ChangeEvent e)
-    {
-        setSelectedTab(ACanvas.getCanvas().getCurrentWindow().getGroupName());
-        if(interactionToolBar != null) panel.remove(interactionToolBar);
-        interactionToolBar = ACanvas.getCanvas().getCurrentWindow().getInteractionToolBar();
-        // if there is an InteractionToolBar for this window (and projection)
-        // add it to the GUI.
-        if(interactionToolBar != null)
-        {
-            interactionToolBar.setName("Atlantis interaction toolbar");
-            panel.add(interactionToolBar, AGUILayoutManager.AVAILABLExPREFERRED, 0);
-            interactionToolBar.connect();
-        }
-        validate();
-    } // stateChanged() -----------------------------------------------------
-
-
-
-    private void setSelectedTab(String newTabName)
-    {
-        for(int i = 0; i < groups.length; i++)
-            for(int j = 0; j < groups[i].length; j++)
-                if(groups[i][j].getGroupName().equals(newTabName))
-                {
-                    for(int k = 0; k < groups.length; k++)
-                        if(k != i)
-                        {
-                            if(tabbedPane[k].getSelectedIndex() != -1)
-                            {
-                                tabbedPane[k].removeChangeListener(tabChangeListener[k]);
-                                tabbedPane[k].setSelectedIndex( -1);
-                                tabbedPane[k].addChangeListener(tabChangeListener[k]);
-                            }
-                        }
-                    tabbedPane[i].removeChangeListener(tabChangeListener[i]);
-                    tabbedPane[i].setSelectedIndex(j);
-                    tabbedPane[i].addChangeListener(tabChangeListener[i]);
-                    outerTabbedPane.setSelectedIndex(i);
-                    if(pages[i][j].pTable != null)
-                        pages[i][j].pTable.refresh();
-                    break;
-                }
-    } // setSelectedTab() ---------------------------------------------------
-
-
-
-    public String getCurrentGroup()
-    {
-        return ACanvas.getCanvas().getCurrentWindow().getGroupName();
-    } // getCurrentGroup() --------------------------------------------------
-
-
-
-    public void refresh()
-    {
-        if(groups != null)
-        {
-            for(int i = 0; i < groups.length; i++)
-                for(int j = 0; j < groups[i].length; j++)
-                    if(pages[i][j].pTable != null)
-                        pages[i][j].pTable.refresh();
-        }
-    } // refresh() ----------------------------------------------------------
-
-
-    public void repaintTable()
-    {
-        if(tabbedPane != null)
-            for(int i = 0; i < tabbedPane.length; i++)
-                if(tabbedPane[i] != null)
-                    tabbedPane[i].repaint();
-    } // repaintTable() -----------------------------------------------------
-
-
-
-    /**
-     * Restore all the default configuration
-     */
-    public void restoreDefaults()
-    {
-        //restore default parameters
-        parameterStore.restoreDefaults();
-        //reset primary vertex in current event if there is one
-        if (eventManager.getCurrentEvent() != null) {
-            eventManager.getCurrentEvent().setPrimaryVertex();
-        }
-        //reset all list
-        AListManager.getInstance().reset();
-        //Finally refresh GUI and canvas
-        this.refresh();
-        ACanvas.getCanvas().restoreDefaults();
-
-    } // restoreDefaults() --------------------------------------------------
-
-
-
-    class TabChangeListener implements ChangeListener
-    {
-        public void stateChanged(ChangeEvent e)
-        {
-            JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
-            int index = tabbedPane.getSelectedIndex();
-            if(index > -1)
-            {
-                int parentIndex = ((JTabbedPane) tabbedPane.getParent()).
-                        getSelectedIndex();
-                String name = groups[parentIndex][index].getGroupName();
-                ACommandProcessor.receive(name + ".");
-                pages[parentIndex][index].repaint();
-                pages[parentIndex][index].pTable.refresh();
-                if(groups[parentIndex][index].getUIUsage() ==
-                        AParametersGroup.PROJECTION)
-                {
-                    AProjection p = AProjectionsManager.getProjection(name);
-                    ACanvas.getCanvas().getCurrentWindow().setProjection(p);
-                }
-            }
-
-        } // stateChanged() -------------------------------------------------
-
-    } // class TabChangeListener ============================================
-
-
-
-    class OuterTabChangeListener implements ChangeListener
-    {
-        public void stateChanged(ChangeEvent e)
-        {
-            JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
-            int parentIndex = tabbedPane.getSelectedIndex();
-            if(parentIndex > -1)
-            {
-                JTabbedPane child = (JTabbedPane) tabbedPane.getSelectedComponent();
-                if(child.getTabCount() == 0)
-                {
-                    child.setSelectedIndex( -1);
-                }
-                else
-                {
-                    int index = 0;
-                    String name = groups[parentIndex][index].getGroupName();
-                    // for projections don't change the current one
-                    if(groups[parentIndex][index].getUIUsage() ==
-                            AParametersGroup.PROJECTION)
-                    {
-                        name = ACanvas.getCanvas().getCurrentWindow().getProjection().
-                                getName();
-                        for(int i = 0; i < groups[parentIndex].length; ++i)
-                        {
-                            if(groups[parentIndex][i].getGroupName().equals(name))
-                                index = i;
-                        }
-                    }
-                    ACommandProcessor.receive(name + ".");
-                    pages[parentIndex][index].repaint();
-                    pages[parentIndex][index].pTable.refresh();
-                    if(groups[parentIndex][index].getUIUsage() ==
-                            AParametersGroup.PROJECTION)
-                    {
-                        AProjection p = AProjectionsManager.getProjection(name);
-                        ACanvas.getCanvas().getCurrentWindow().setProjection(p);
-                    }
-                }
-            }
-
-        } // stateChanged() -------------------------------------------------
-
-    } // class OuterTabChangeListener =======================================
-
-
-
-    static class TabDragListener implements ADragListener
-    {
-        public void dragPerformed(Object from, Object to, int action)
-        {
-            String wName;
-            if(to instanceof ADnDLabel)
-                wName = ((ADnDLabel) to).getText();
-            else if(to instanceof AWindow)
-                wName = ((AWindow) to).getName();
-            else
-                wName = "???";
-            JTabbedPane tp = (JTabbedPane) from;
-            String tabName = tp.getTitleAt(tp.getSelectedIndex());
-            AOutput.append("Drag of " + tabName + " into window " + wName + "\n",
-                    ALogInterface.COMMAND);
-            parameterStore.copyCurrentGroupLocalsTo(wName);
-            ACanvas.getCanvas().getWindow(wName).repaintFromScratch();
-
-        } // dragPerformed() ------------------------------------------------
-
-    } // class TabDragListener ==============================================
-
-    @Override
-    public void parameterChanged(AParameter parameter) {
-        this.repaintTable();
-
-        if(parameter.getName().equals("Mode")){
-            int calomode = parameterStore.get("LegoPlot", "Mode").getI();
-
-            //set different nphicells and netacells combinations depending on the <calo view> selection as it is used in the L1Calo configuration file 
-            if (calomode== 0){
-                parameterStore.get("LegoPlot", "nphicells").setI(128);
-                parameterStore.get("LegoPlot", "netacells").setI(200);
-            }
-            else if (calomode== 1){
-                parameterStore.get("LegoPlot", "nphicells").setI(64);
-                parameterStore.get("LegoPlot", "netacells").setI(100);
-            }
-            else if (calomode== 2){
-                parameterStore.get("LegoPlot", "nphicells").setI(32);
-                parameterStore.get("LegoPlot", "netacells").setI(50);
-            }
-        }	
-    }
-
-} // class AGUI =============================================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AGUILayoutManager.java b/graphics/AtlantisJava/src/atlantis/gui/AGUILayoutManager.java
deleted file mode 100755
index f7959d5155e9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AGUILayoutManager.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Container;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.LayoutManager2;
-import javax.swing.JComponent;
-import javax.swing.JToolBar;
-
-/**
- * The layout manager used by the GUI. It arranges the componets in a column.
- * The width is set to that of the window.
- * The height is set to the preffered height of the component.
- * One of the components will take all the remaining space.
- */
-public class AGUILayoutManager implements LayoutManager2 {
-
-  private final static int PxP=0;
-  private final static int AxP=1;
-  private final static int AxA=2;
-
-  public final static Integer PREFERREDxPREFERRED=new Integer(PxP);
-  public final static Integer AVAILABLExPREFERRED=new Integer(AxP);
-  public final static Integer AVAILABLExAVAILABLE=new Integer(AxA);
-
-  private final static String AGUI_LAYOUT_CONSTRAINT="AGUILayoutManager.StringConstraint";
-
-  /**
-   * Get the constraints registered for given component.
-   */
-  public Integer getConstraints(Component comp) {
-    JComponent jc=(JComponent)comp;
-
-    Integer constraint=(Integer)jc.getClientProperty(AGUI_LAYOUT_CONSTRAINT);
-
-    return constraint;
-  }
-
-  public void addLayoutComponent(Component comp, Object constraint) {
-    if(!(comp instanceof JComponent))
-      throw new Error("AGUILayoutManager: not a JComponent");
-
-    if(!(constraint instanceof Integer))
-      throw new Error("AGUILayoutManager: not a Integer");
-
-    JComponent jc=(JComponent)comp;
-
-    jc.putClientProperty(AGUI_LAYOUT_CONSTRAINT, constraint);
-  }
-
-  public void layoutContainer(Container parent) {
-    int W=parent.getSize().width;
-    int H=parent.getSize().height;
-
-    Component[] comp=parent.getComponents();
-    int[] constraint=new int[comp.length];
-
-    int AxA_Index=comp.length;
-
-    for(int i=0; i<comp.length; i++) {
-      constraint[i]=getConstraints(comp[i]).intValue();
-      if(constraint[i]==AxA) AxA_Index=i;
-    }
-
-    int hi=0;
-
-    for(int i=0; i<AxA_Index; i++) {
-      comp[i].setSize(W, 0);
-      Dimension cSize=comp[i].getPreferredSize();
-
-      switch(constraint[i]) {
-      case PxP:
-        comp[i].setBounds((W-cSize.width)/2, hi, cSize.width, cSize.height);
-        break;
-
-      case AxP:
-        comp[i].setBounds(0, hi, W, cSize.height);
-        break;
-      }
-      hi+=cSize.height;
-    }
-
-    int hi2=H;
-
-    for(int i=comp.length-1; i>AxA_Index; i--) {
-      comp[i].setSize(W, 0);
-      Dimension cSize=comp[i].getPreferredSize();
-
-      hi2-=cSize.height;
-      switch(constraint[i]) {
-      case PxP:
-        comp[i].setBounds((W-cSize.width)/2, hi2, cSize.width, cSize.height);
-        break;
-
-      case AxP:
-        comp[i].setBounds(0, hi2, W, cSize.height);
-        break;
-      }
-    }
-
-    if(AxA_Index!=comp.length)
-      comp[AxA_Index].setBounds(0, hi, W, hi2-hi);
-  }
-
-  public Dimension minimumLayoutSize(Container parent) {
-    return new Dimension(0, 0);
-  }
-
-  public Dimension preferredLayoutSize(Container parent) {
-    return new Dimension(0, 0);
-  }
-
-  public float getLayoutAlignmentX(Container target) {
-    return 0.5f;
-  }
-
-  public float getLayoutAlignmentY(Container target) {
-    return 0.5f;
-  }
-
-  public Dimension maximumLayoutSize(Container target) {
-    return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-  }
-
-  public void addLayoutComponent(String name, Component comp) {}
-
-  public void removeLayoutComponent(Component comp) {}
-
-  public void invalidateLayout(Container target) {}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AGUIUtilities.java b/graphics/AtlantisJava/src/atlantis/gui/AGUIUtilities.java
deleted file mode 100644
index e699def52ebc..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AGUIUtilities.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Component;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AUtilities;
-
-/**
- * Utility methods related to the GUI. Moved from utils.Utilities.
- * 
- * @author waugh
- */
-public class AGUIUtilities {
-
-	private static final AGlobals globals = AGlobals.instance();
-
-	/**
-	 * Save file dialog. Show the dialog with prepared name of the file in
-	 * the directory. Returns the selected directory.
-	 *
-	 * @param component JDialog
-	 * @param directory String
-	 * @param fileName String
-	 * @param data byte[]
-	 * @param title String
-	 * @param ext extension for file filter
-	 * return selectedDirectory String
-	 */
-	public static String chooseFileAndWrite(Component component, String directory,
-			String fileName, byte[] data, String title, String ext)
-	throws AAtlantisException
-	{
-		String selectedDirectory = directory;
-
-		if(directory == null)
-		{
-			directory = AGlobals.instance().getHomeDirectory();
-		}
-
-		JFileChooser chooser = new JFileChooser(directory);
-		chooser.setDialogTitle(title);
-		chooser.setSelectedFile(new File(fileName));
-		SaveDialogFileFilter filter = new SaveDialogFileFilter(ext);
-		chooser.setFileFilter(filter);
-
-		int returnVal = chooser.showSaveDialog(component);
-
-		if(returnVal == JFileChooser.APPROVE_OPTION)
-		{
-			String absPath = chooser.getSelectedFile().getAbsolutePath();
-			File f = new File(absPath);
-			if(f.exists())
-			{
-				try
-				{
-					renameFile(absPath, title);
-				}
-				catch(Exception ex)
-				{
-					throw new AAtlantisException(ex.getMessage());
-				}
-			}
-			// the selected file either existed and is now successfully
-			// renamed, or didn't exist so can proceed to store data
-			try
-			{
-				OutputStream  s =
-					new BufferedOutputStream(new FileOutputStream(absPath));
-				s.write(data);
-				s.close();
-				selectedDirectory = chooser.getSelectedFile().getParent();
-			}
-			catch(FileNotFoundException ex)
-			{
-				String msg = "Couldn't create the file.\nInsufficient permissions.";
-				throw new AAtlantisException(msg);
-			}
-			catch(IOException ex)
-			{
-				String msg = "IO Error when writing the\ndata into the file.";
-				throw new AAtlantisException(msg);
-			}
-		}
-		return selectedDirectory;
-
-	} // chooseFileAndWrite() -----------------------------------------------
-
-	
-	/**
-	 * renames file (backup when saving configuration, canvas plot, etc)
-	 * to 'name' + backup suffix
-	 */
-	private static void renameFile(String name, String title) throws Exception
-	{
-		String backupSuffix = "-backup_on_" + AUtilities.getDateTimeString();
-		String dstName = name + backupSuffix;
-		String errorMsg = "Renaming\n" + name + "\nto\n" + dstName + "\nfailed.";
-		String msg = name + "\nexists and was successfully renamed to\n" + dstName;
-
-		try
-		{
-			AUtilities.logger.debug("Renaming file " + name + " to " + dstName + " ...");
-			File f = new File(name);
-			if(! f.renameTo(new File(dstName)))
-			{
-				AUtilities.logger.error(errorMsg);
-				throw new Exception(errorMsg);
-			}
-			AUtilities.logger.debug(msg);
-			JOptionPane.showMessageDialog(globals.getGuiFrame(), msg, title,
-					JOptionPane.INFORMATION_MESSAGE);
-		}
-		catch(Exception ex)
-		{
-			AUtilities.logger.debug(ex.getMessage(), ex);
-			throw new Exception(errorMsg);
-		}
-
-	} // renameFile() -------------------------------------------------------
-
-	
-	private static class SaveDialogFileFilter extends FileFilter
-	{
-		private String extension = null;
-
-		public SaveDialogFileFilter(String acceptedExtension)
-		{
-			extension = acceptedExtension;
-		}
-
-		// accept all directories and all files of "extension"
-		public boolean accept(File f)
-		{
-			if (f.isDirectory())
-			{
-				return true;
-			}
-
-			String s = f.getName();
-
-			if(s.toLowerCase().endsWith(extension))
-			{
-				return true;
-			}
-
-			return false;
-		}
-
-		public String getDescription()
-		{
-			return extension;
-		}
-
-	} // SaveDialogFileFilter ===================================================
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AHelpControl.java b/graphics/AtlantisJava/src/atlantis/gui/AHelpControl.java
deleted file mode 100755
index 787c56609d76..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AHelpControl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package atlantis.gui;
-
-import javax.swing.JMenu;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-/**
- * The Help menu in the GUI.
- */
-public class AHelpControl extends JMenu
-{
-    public AHelpControl()
-    {
-        super("Help");
-        add("Online Help System").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AHelpSystem.getInstance().showPage("HelpHowTo");
-            }
-        });
-        add("Modifier Keys").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AMouseHelpDialog.getInstance().setVisible(true);
-            }
-        });
-        add("Current color and collection summary").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AColorHelpDialog.getInstance().setVisible(true);
-            }
-        });
-        add("About...").addActionListener(new ActionListener()
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                AAboutDialog.getInstance().setVisible(true);
-            }
-        });
-
-    } // AHelpControl() -----------------------------------------------------
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AHelpSystem.java b/graphics/AtlantisJava/src/atlantis/gui/AHelpSystem.java
deleted file mode 100755
index 43ee7551bd73..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AHelpSystem.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package atlantis.gui;
-
-import atlantis.graphics.AIcon;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.ALogger;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Toolkit;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.net.URL;
-
-import javax.help.BadIDException;
-import javax.help.HelpSet;
-import javax.help.JHelp;
-import javax.swing.JFrame;
-
-
-
-public class AHelpSystem extends JFrame
-{
-    private static ALogger logger = ALogger.getLogger(AHelpSystem.class);
-    
-    private static AHelpSystem instance = null;
-    private static String hsPath = "jhelpset.hs";
-    private static JHelp helpViewer = null;
-
-
-    static
-    {
-        HelpSet hs = getHelpSet(hsPath);
-        // HelpBroker hb = hs.createHelpBroker();
-        helpViewer = new JHelp(hs);
-        helpViewer.setCurrentID("HelpHowTo");
-    }
-
-
-    private AHelpSystem()
-    {
-        super("Atlantis Online Help");
-        addWindowListener(new WindowAdapter()
-        {
-            public void windowClosing(WindowEvent e)
-            {
-                dispose();
-                instance = null;
-            }
-        });
-        this.getContentPane().add(helpViewer);
-        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        AIcon.setIconImage(this);
-        this.setSize(900, 600);
-
-    } // AHelpSystem() ------------------------------------------------------
-
-
-
-    public static AHelpSystem getInstance()
-    {
-        if(instance == null)
-        {
-            instance = new AHelpSystem();
-        }
-        return instance;
-
-    } // getInstance() ------------------------------------------------------
-
-
-
-    public void showPage(String pageName)
-    {
-        try
-        {
-            helpViewer.setCurrentID(pageName);
-            // clear the iconified bit (no matter whether or not it is
-            // current iconified)
-            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-            this.setLocation((int)(Math.max(0, (screenSize.getWidth()-this.getWidth())/2)), (int)((screenSize.getHeight()-this.getHeight())/3));
-            this.setExtendedState(this.getExtendedState() & ~Frame.ICONIFIED);
-            this.setVisible(true);
-        }
-        catch(BadIDException ex)
-        {
-            AOutput.alwaysAppend("\nNo help for \"" + pageName + "\", sorry.\n",
-                           ALogInterface.BAD_COMMAND);
-        }
-
-    } // showPage() ---------------------------------------------------------
-
-
-
-    private static HelpSet getHelpSet(String helpSetFile)
-    {
-        HelpSet hs = null;
-        // ClassLoader cl = this.getClass().getClassLoader(); // if not static
-        ClassLoader cl = AHelpSystem.class.getClassLoader();
-        try
-        {
-            // helpSetFile must contain just the name of HelpSet file (.hs),
-            // .jar file containing the whole help must be in the classpath
-            // then the file is successfully found. returns null if helpSetFile
-            // contains the whole absolute / relative path
-            URL hsURL = HelpSet.findHelpSet(cl, helpSetFile);
-            // hs = new HelpSet(null, hsURL);
-            hs = new HelpSet(cl, hsURL);
-        }
-        catch(Exception ee)
-        {
-            logger.error("AHelpSystem: " + ee.getMessage(), ee);
-            logger.error("AHelpSystem: " + helpSetFile + " not found");
-        }
-        return hs;
-
-    } // getHelpSet() -------------------------------------------------------
-
-
-} // class AHelpSystem ======================================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AInteractionToolBar.java b/graphics/AtlantisJava/src/atlantis/gui/AInteractionToolBar.java
deleted file mode 100755
index ff7e0e652344..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AInteractionToolBar.java
+++ /dev/null
@@ -1,429 +0,0 @@
-package atlantis.gui;
-
-import java.awt.FlowLayout;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import java.lang.reflect.Constructor;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import javax.swing.ButtonGroup;
-import javax.swing.ImageIcon;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JToggleButton;
-import javax.swing.JToolBar;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.layout.AFlowLayout;
-import atlantis.interactions.AInteractionGroup;
-import atlantis.interactions.AInteractionsConfigReader;
-import atlantis.interactions.AInteractionsManager;
-import atlantis.output.AExceptionHandler;
-import atlantis.projection.AProjectionsManager;
-import atlantis.utils.AUtilities;
-import javax.swing.*;
-
-/**
- * The ToolBar that appears in the GUI and shows the set of interactions for a
- * window. 
- * @author maillard
- */
-
-public class AInteractionToolBar extends JToolBar {
-  // the interactionsmanager this toolbar talks to
-  private AInteractionsManager iManager;
-  
-  // currently selected group
-  private AInteractionGroup currentGroup;
-  
-  /* previously selected group, needed for the history feature:
-   * when we select a global interaction (eg SyncCursors), then all windows will use it.
-   * If then we deselect it, all the windows will go back to their previous interactions */
-  private AInteractionGroup previousGroup;
-  
-  // a panel that displays the additional controls needed by some interaction groups
-  private JPanel controls;
-  
-  // base path for all radio button icons
-  private final static String iconBasePath =
-		  AGlobals.instance().getHomeDirectory()+"img"+System.getProperty("file.separator")+"interaction_";
-  
-  // button group for all radio buttons
-  private ButtonGroup buttonGroup;
-  
-  // vector containing all interactionsgroups belonging to this toolbar
-  Vector<AInteractionGroup> groups;
-
-  // make the pool for holding the Interactions Control and the projections Menus
-  private static Hashtable<String, Hashtable<String, AInteractionToolBar>> interactionControlsPool =
-		  new Hashtable<String, Hashtable<String, AInteractionToolBar>>(20);
-
-  public static Hashtable<String, Hashtable<String, JPopupMenu>> interactionMenusPool =
-		  new Hashtable<String, Hashtable<String, JPopupMenu>>(20);
-
-  /**
-   * Creates an InteractionToolBar to work with a particular
-   * InteractionsManager.
-   * 
-   * @param iManager The InteractionsManager.
-   */
-  public AInteractionToolBar(AInteractionsManager iManager) {
-    // call parent constructor
-    super();
-    this.setLayout(new AFlowLayout(5, 5));
-
-    //make the toolbar non-detachable (can not be detachable
-    //as long as it does not sit inside an BorderLayout)
-    this.setFloatable(false);
-    this.setOpaque(false);
-
-    this.iManager = iManager;
-
-    groups = new Vector<AInteractionGroup>();
-    controls = new JPanel();
-    buttonGroup = new ButtonGroup();
-  }
-
-  /**
-   * Returns the InteractionsManager associated with this InteractionToolBar.
-   * 
-   * @return The InteractionsManager
-   */
-  public AInteractionsManager getInteractionsManager() {
-    return iManager;
-  }
-
-  /**
-   * Called each time by the InteractionsManager when the ToolBar is connected
-   * to it. Should be used to perform some initializations.
-   */
-  public void connect() {
-    iManager.setContext(getSelectedGroup());
-    if (getSelectedGroup() != null)
-      AMouseHelpDialog.getInstance().processInteractionChange(getSelectedGroup().getInteractions());
-  }
-
-  /**
-   * Adds the group to the InteractionToolBar. The group can
-   * register some interactions.
-   * @param group the group to be added.
-   */
-  public void addGroup(AInteractionGroup group, String toolTipText) {
-    groups.addElement(group);
-    final String groupName = group.getGroupName();
-    
-    // set up a button for the interaction group
-    String iconPath = iconBasePath + groupName.toLowerCase() + ".png";
-
-    ImageIcon newIcon = AUtilities.getFileAsImageIcon(iconPath);
-    JToggleButton newButton = new JToggleButton(newIcon);
-    newButton.setName(group.getGroupName());
-    newButton.setToolTipText(toolTipText);
-
-    // add the action listener
-    newButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        buttonClicked(groupName);
-      }
-    });
-    
-    // add the mouse listener for the help system
-    newButton.addMouseListener(new MouseAdapter() {
-      public void mousePressed(MouseEvent e) {
-        // if the user right clicks on a button
-        if (AUtilities.isRightMouseButton(e)) {
-          JToggleButton butt = (JToggleButton) e.getSource();       
-          // find the corresponding interactions group
-          if(findGroup(butt.getName()) != null) {
-            String className = findGroup(butt.getName()).getClass().getName();
-            String temp = className.substring(className.lastIndexOf('.') + ".A".length());
-            className = temp.substring(0, temp.length() - "Group".length());
-            // show the help page for the group
-            AHelpSystem.getInstance().showPage(className);
-          }
-        }
-      }
-    });
-    
-    // remove the controls panel so that the new button will
-    // not appear after it
-    this.remove(controls);
-
-    // add the button to the ButtonGroup and to the ToolBar
-    buttonGroup.add(newButton);
-    this.add(newButton);
-    
-    // now we can put the controls panel back
-    this.add(controls,-1);
-    
-    // repaint the toolbar
-    this.validate();
-    this.repaint();
-  }
-
-  /**
-   * Returns an array containing all the groups registered in this ToolBar.
-   * @return the groups
-   */
-  public AInteractionGroup[] getGroups() {
-    return (AInteractionGroup[]) groups.toArray(new AInteractionGroup[0]);
-  }
-
-  /**
-   * Returns the current interactionsgroup.
-   * @return the selected group.
-   */
-  public AInteractionGroup getSelectedGroup() {
-    return currentGroup;
-  }
-
-  /**
-   * Returns the name of the current interactionsgroup.
-   * 
-   * @return the selected group name.
-   */
-  public String getSelectedGroupName() {
-    return currentGroup.getGroupName();
-  }
-
-  /**
-   * Sets the interactionsgroup given its name, by
-   * performing a click on it.
-   * @param groupName the name of the group.
-   */
-  public void setSelectedGroup(String groupName) {
-    // loop through the interaction groups
-    for(AInteractionGroup iG : groups) {
-      // find the one with the corresponding name
-      if(iG.getGroupName().equals(groupName)) {
-        // click the corresponding button
-        for(int i = 0; i < groups.size(); i++) {
-          if(this.getComponentAtIndex(i) instanceof JToggleButton 
-              && this.getComponentAtIndex(i).getName().equals(groupName)) {
-            ((JToggleButton) this.getComponentAtIndex(i)).doClick();
-            return;
-          }
-        }
-      }
-    }
-  }
-  
-  /**
-   * Returns a group based on its name
-   * @return the interactionsgroup (if found) or null
-   */
-  public AInteractionGroup findGroup(String screenName) {
-    for(AInteractionGroup iG : groups) {
-      if(iG.getGroupName().equals(screenName)) return iG;
-    }
-    return null;
-  }
-
-  /**
-   * Activate the default interactionsgroup (the first one)
-   */
-  public void setDefaultGroup() {
-    // if there are any interaction groups
-    if (groups.size() > 0) {
-      // select the first one
-      setSelectedGroup(groups.elementAt(0).getGroupName());
-    }
-  }
-
-  /**
-   * Restore the previously selected group, if there was one.
-   */
-  public void restorePreviousGroup() {
-    if (previousGroup != null)
-      this.setSelectedGroup(previousGroup.getGroupName());
-  }
-
-  /**
-   * This gets called when one of the buttons in the toolbar
-   * is clicked. It notifies the InteractionManager.
-   * @param groupName the name of the InteractionGroup to be activated
-   */
-  public void buttonClicked(String groupName) {
-    AInteractionGroup deselectedGroup = currentGroup;
-    // loop through the groups
-    for(AInteractionGroup iG : groups) {
-      // find the one with the corresponding name
-      if(iG.getGroupName().equals(groupName)) {
-        // notify the interactionsmanager of the change
-        iManager.setContext(iG);
-        
-        // remove the old additional controls panel, add the new one
-        this.remove(controls);
-        if(iG.hasAdditionalControls()) controls = iG.getAdditionalControls(); 
-        else controls = new JPanel();
-        this.add(controls,-1);
-        if (this.getParent() != null) {
-            this.getParent().validate();
-        }
-        
-        // take care of the history (previousGroup remembers the last non-global group)
-        AMouseHelpDialog.getInstance().processInteractionChange(iG.getInteractions());
-        if (currentGroup != null && currentGroup.isWindowGroup()) {
-          previousGroup = currentGroup;
-        }
-        currentGroup = iG;
-       
-        if(ACanvas.getCanvas().getCurrentWindow() != null)
-          // if the interactionsgroup is global, update the other windows
-          if ((iG.isCanvasGroup()) && iManager.getWindow().isCurrent()) {
-            String[] wName = ACanvas.getCanvas().getCurrentLayout().getWindowNames();
-            for (int i = 0; i < wName.length; i++)
-              if (!wName[i].equals(iManager.getWindow().getName())) {
-                ACanvas.getCanvas().getWindow(wName[i])
-                  .getInteractionToolBar().setSelectedGroup(iG.getGroupName());
-              }        
-          } 
-        // if a global interactionsgroup was deselected, restore the
-        // previous groups in all the other windows
-        if(deselectedGroup != null && deselectedGroup.isCanvasGroup() 
-              && iManager.getWindow().isCurrent()) {
-            String[] wName = ACanvas.getCanvas().getCurrentLayout().getWindowNames();
-            for (int i = 0; i < wName.length; i++)
-              if (!wName[i].equals(iManager.getWindow().getName()))
-                  ACanvas.getCanvas().getWindow(wName[i])
-                    .getInteractionToolBar().restorePreviousGroup();
-          }
-      }
-    }
-  }
-
-  /**
-   * Used to get the InteractionControl object for a specific window and projection.
-   * @param wName The name of the window
-   * @param pName The name of the projection
-   * @return The AInteractionToolBar for that window and projection
-   */
-  public static AInteractionToolBar getInteractionToolBar(String wName, String pName) {
-	  if(!ACanvas.getCanvas().isValidWindowName(wName))
-		  throw new Error("Invalid window name");
-
-	  if(!AProjectionsManager.isValidProjection(pName))
-		  throw new Error("Invalid projection name");
-
-	  Hashtable<String, AInteractionToolBar> list = interactionControlsPool.get(wName);
-
-	  if(list==null) {
-		  list=new Hashtable<String, AInteractionToolBar>(10);
-		  interactionControlsPool.put(wName, list);
-	  }
-
-	  AInteractionToolBar control=list.get(pName);
-
-	  if(control==null) {
-		  control=makeInteractionToolBar(ACanvas.getCanvas().getWindow(wName),
-				  AInteractionsConfigReader.getNode(pName));
-		  // if there really existed an InteractionControl register it.
-		  if(control!=null)
-			  list.put(pName, control);
-	  }
-
-	  return control;
-  }
-
-  /**
-   * Returns the Interaction's PopupMenu.
-   * @param window
-   * @return the new popup menu object
-   */
-  public static JPopupMenu getInteractionMenu(AWindow window) {
-	  String wName=window.getName();
-	  String pName=window.getProjection().getName();
-
-	  if(!ACanvas.getCanvas().isValidWindowName(wName))
-		  throw new Error("Invalid window name");
-
-	  if(!AProjectionsManager.isValidProjection(pName))
-		  throw new Error("Invalid projection name");
-
-	  Hashtable<String, JPopupMenu> list=interactionMenusPool.get(wName);
-
-	  if(list==null) {
-		  list=new Hashtable<String, JPopupMenu>(10);
-		  interactionMenusPool.put(wName, list);
-	  }
-
-	  JPopupMenu menu=list.get(pName);
-
-	  if(menu==null) {
-		  menu=makePopupMenu(getInteractionToolBar(wName, pName));
-		  list.put(pName, menu);
-	  }
-
-	  return menu;
-  }
-
-  /** Creates the AInteractionToolBar and returns a pointer to it
-   * 
-   * @param window
-   * @param node
-   * @return the interaction tool bar
-   */
-  public static AInteractionToolBar makeInteractionToolBar(AWindow window, Node node) {
-	  // check whether we really got a Node with information. If not return null;
-	  if(node==null) return null;
-
-	  AInteractionToolBar root=new AInteractionToolBar(window.getInteractionManager());
-
-	  NodeList childs=node.getChildNodes();
-
-	  for(int i=0; i<childs.getLength(); i++) {
-		  Node child=childs.item(i);
-
-		  if(child.getNodeType()==Node.ELEMENT_NODE) {
-			  String fileName=child.getAttributes().getNamedItem("fileName").getNodeValue();
-			  String screenName=child.getAttributes().getNamedItem("screenName").getNodeValue();
-			  String toolTip=child.getAttributes().getNamedItem("toolTip").getNodeValue();
-
-			  if(child.getNodeName().equals("Panel"))
-				  root.addGroup(makeInteractionGroup(window, fileName, screenName), toolTip);
-		  }
-	  }
-
-	  //Also select the default interaction group
-	  root.setDefaultGroup();
-
-	  return root;
-  }
-
-  private static AInteractionGroup makeInteractionGroup(
-		  AWindow window, String fileName, String screenName) {
-	  Object group=null;
-
-	  try {
-		  Constructor[] c=Class.forName("atlantis.interactions.A"+fileName+"Group").getDeclaredConstructors();
-
-		  group=c[0].newInstance(new Object[] {window.getInteractionManager()});
-	  } catch(Exception e) {
-		  e.printStackTrace();
-		  AExceptionHandler.processException("Cannot make interaction group "+"A"+fileName+"Group", e);
-	  }
-	  ((AInteractionGroup)group).setGroupName(screenName);
-	  return(AInteractionGroup)group;
-  }
-
-  private static JPopupMenu makePopupMenu(AInteractionToolBar root) {
-	  JPopupMenu menu=new JPopupMenu();
-
-	  AInteractionGroup[] panels=root.getGroups();
-
-	  for(int i=0; i<panels.length; i++)
-		  menu.add(panels[i].getPopupItem());
-
-	  return menu;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AItemTabbedPane.java b/graphics/AtlantisJava/src/atlantis/gui/AItemTabbedPane.java
deleted file mode 100755
index 901642ad4d73..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AItemTabbedPane.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package atlantis.gui;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.event.*;
-
-// Gary- DnD facility commented out as it does not fully work
-//  ( Window control is left in funny state)
-// and is not something i have ever used.....
-
-/**
- * A TabbedPane which generates events when a tab is selected
- * and when a tab is deselected.
- * Provides DnD support.
- */
-public class AItemTabbedPane extends JTabbedPane
-  implements // for Item Selectability
-      ItemSelectable, ChangeListener {
-//      // for drag and drop
-//      DragSourceListener, DragGestureListener, ACallBack {
-
-  private Component current;
-  private Component previous;
-  private ItemListener itemListener;
-  private ItemEvent itemEvent;
-
-//  private DragSource dragSource=null;
-//  private Vector dragListeners;
-
-  public AItemTabbedPane(int tabPlacement) {
-    super(tabPlacement);
-    // tabs don't change on right click rather help appears.
-    setUI(new ATabbedPaneUI());
-
-    current=null;
-    previous=null;
-    this.addChangeListener(this);
-
-//    // initializing drag and drop
-//    dragSource=new DragSource();
-//    dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
-
-//    dragListeners=new Vector();
-  }
-
-  public Component getPreviousSelectedComponent() {
-    if(previous==null)
-      return getSelectedComponent();
-    else
-      return previous;
-  }
-
-  public void stateChanged(ChangeEvent e) {
-    previous=current;
-
-    if((current!=null)&&(itemListener!=null)) {
-      itemEvent=new ItemEvent(this, 0, current, ItemEvent.DESELECTED);
-      itemListener.itemStateChanged(itemEvent);
-    }
-
-    current=getSelectedComponent();
-
-    if(itemListener!=null) {
-      itemEvent=new ItemEvent(this, 0, current, ItemEvent.SELECTED);
-      itemListener.itemStateChanged(itemEvent);
-    }
-  }
-
-  // Add a listener to recieve item events when the state of an tab changes.
-  public void addItemListener(ItemListener l) {
-    itemListener=l;
-  }
-
-  // Returns the selected items or null if no items are selected.
-  public Object[] getSelectedObjects() {
-    return null;
-  }
-
-  // Removes an item listener.
-  public void removeItemListener(ItemListener l) {
-    if(itemListener.equals(l))
-      itemListener=null;
-  }
-
-  public Dimension getPreferredSize() {
-    this.getLayout().layoutContainer(this);
-    return super.getPreferredSize();
-  }
-
-/*
-  // implementation of DragSourceListener
-
-  // This method is invoked to signify that the Drag and Drop operation is complete.
-  public void dragDropEnd(DragSourceDropEvent dsde) {}
-
-  // Called as the hotspot enters a platform dependent drop site.
-  public void dragEnter(DragSourceDragEvent dsde) {
-    dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_VALID);
-  }
-
-  // Called as the hotspot exits a platform dependent drop site.
-  public void dragExit(DragSourceEvent dse) {
-    dse.getDragSourceContext().setCursor(ADnDLabel.DROP_INVALID);
-  }
-
-  // Called as the hotspot moves over a platform dependent drop site.
-  public void dragOver(DragSourceDragEvent dsde) {
-    dsde.getDragSourceContext().setCursor(ADnDLabel.DROP_VALID);
-  }
-
-  // Called when the user has modified the drop gesture.
-  public void dropActionChanged(DragSourceDragEvent dsde) {}
-
-  // implementation of DragGestureListener
-
-  public void dragGestureRecognized(DragGestureEvent dge) {
-    Point p=dge.getDragOrigin();
-
-    if(getSelectedIndex()==getUI().tabForCoordinate(this, p.x, p.y)) {
-      AObjectTransferable cbt=new AObjectTransferable(this);
-
-      dragSource.startDrag(dge, ADnDLabel.DROP_INVALID, cbt, this);
-    }
-  }
-
-  public void callBack(Object to) {
-    for(int i=0; i<dragListeners.size(); i++)
-      ((ADragListener)dragListeners.get(i)).dragPerformed(this, to, -1);
-  }
-
-  public void addDragListener(ADragListener l) {
-    dragListeners.addElement(l);
-  }
-
-  public void addChangeListener(ChangeListener l) {
-   super.addChangeListener(l);
-  }
-
-  public void removeChangeListener(ChangeListener l) {
-   super.removeChangeListener(l);
-  }
-*/
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ALayoutDialog.java b/graphics/AtlantisJava/src/atlantis/gui/ALayoutDialog.java
deleted file mode 100755
index 93e07f52794a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ALayoutDialog.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-
-/**
- * A dialog which lets the user to select between the different layouts of the
- * canvas.
- */
-public class ALayoutDialog extends JDialog implements ActionListener
-{
-    private JPanel choosePanel;
-    private JPanel buttonsPanel;
-    private JButton okButton, cancelButton;
-    private JRadioButton selected;
-    
-    private static final AGlobals globals = AGlobals.instance();
-
-    public ALayoutDialog()
-    {
-        super(globals.getGuiFrame(), "Layout Properties Dialog", true);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-        setResizable(false);
-        
-        choosePanel = new JPanel();
-        choosePanel.setBorder(BorderFactory.createTitledBorder(" Select Layout "));
-        
-        String[] layoutNames = ACanvas.getCanvas().getLayoutNames();
-        ButtonGroup group = new ButtonGroup();
-        
-        choosePanel.setLayout(new GridLayout(layoutNames.length, 1));
-        for (int i = 0; i < layoutNames.length; i++)
-        {
-            JRadioButton r = new JRadioButton(layoutNames[i]);
-            
-            r.addActionListener(this);
-            if (ACanvas.getCanvas().getCurrentLayout().getName().equals(layoutNames[i]))
-            {
-                selected = r;
-                r.setSelected(true);
-            }
-            else
-                r.setSelected(false);
-            group.add(r);
-            choosePanel.add(r);
-        }
-        getContentPane().setLayout(new BorderLayout());
-        getContentPane().add(choosePanel, BorderLayout.CENTER);
-        
-        okButton = new JButton("OK");
-        okButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                ACanvas.getCanvas().setCurrentLayout(selected.getText());
-                dispose();
-                ACanvas.getCanvas().bringToFront();
-            }
-                });
-        
-        cancelButton = new JButton("Cancel");
-        cancelButton.addActionListener(new ActionListener()
-                {
-            public void actionPerformed(ActionEvent e)
-            {
-                dispose();
-            }
-                });
-        
-        buttonsPanel = new JPanel();
-        buttonsPanel.add(okButton);
-        buttonsPanel.add(cancelButton);
-        getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
-        pack();
-        
-        // set the initial location
-        AGUI gui = AGUI.getGUI();
-        int guiWidth = gui.getWidth();
-        int guiHeight = gui.getHeight();
-        int guiX = gui.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        if(guiX+guiWidth+(dialogWidth-guiWidth)/2>screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), Math.max(0, (guiHeight - dialogHeight) / 3));
-        setVisible(true);
-    }
-    
-    public void actionPerformed(ActionEvent e)
-    {
-        selected = (JRadioButton) e.getSource();
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ALazyPanel.java b/graphics/AtlantisJava/src/atlantis/gui/ALazyPanel.java
deleted file mode 100755
index d6caed6c259b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ALazyPanel.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Graphics;
-import javax.swing.JPanel;
-
-/**
- * LazyPanel is an abstract base class that provides functionality
- * to defer populating a Panel object until it is actually viewed.
- * This is extremely useful when using CardLayout and tab panel
- * views because it allows the construction of the subviews to
- * be done on a pay-as-you-go basis instead of absorbing all the cost
- * of construction up front.
- *
- * If subclasses choose to override any of the following methods,
- * it is their responsibility to ensure their overridden methods
- * call the parent's method first. The methods are:
- *
- * public void paint (Graphics)
- * public void paintComponents(Graphics)
- * public void paintAll (Graphics)
- * public void repaint ()
- * public void repaint (long)
- * public void repaint (int, int, int, int)
- * public void repaint (long, int, int, int, int)
- * public void update (Graphics)
- *
- * Each of these methods ensures the panel is constructed
- * and then simply forwards the call to the parent class.
- *
- * You use this class by extending it and moving as much of the
- * constructor code as possible from the child class into the method
- * lazyConstructor.
- */
-
-public abstract class ALazyPanel extends JPanel {
-
-  // We want to call the lazyConstructor only once.
-  private boolean lazyConstructorCalled=false;
-
-  public void paint(Graphics g) {
-    callLazyConstructor();
-    super.paint(g);
-  }
-
-  public void paintAll(Graphics g) {
-    callLazyConstructor();
-    super.paintAll(g);
-  }
-
-  public void paintComponents(Graphics g) {
-    callLazyConstructor();
-    super.paintComponents(g);
-  }
-
-  public void repaint() {
-    callLazyConstructor();
-    super.repaint();
-  }
-
-  public void repaint(long l) {
-    callLazyConstructor();
-    super.repaint(l);
-  }
-
-  public void repaint(int i1, int i2, int i3, int i4) {
-    callLazyConstructor();
-    super.repaint(i1, i2, i3, i4);
-  }
-
-  public void repaint(long l, int i1, int i2, int i3, int i4) {
-    callLazyConstructor();
-    super.repaint(l, i1, i2, i3, i4);
-  }
-
-  public void update(Graphics g) {
-    callLazyConstructor();
-    super.update(g);
-  }
-
-  /**
-   * Force the lazyConstructor() method implemented in the child class
-   * to be called. If this method is called more than once on
-   * a given object, all calls but the first do nothing.
-   */
-  public synchronized final void callLazyConstructor() {
-    // The general idea below is as follows:
-    // 1) See if this method has already been successfully called.
-    // If so, return without doing anything.
-    //
-    // 2) Otherwise ... call the lazy constructor.
-    // 3) Call validate so that any components added are visible.
-    // 4) Note that we have run.
-
-    if((lazyConstructorCalled==false)&&(getParent()!=null)) {
-      lazyConstructor();
-      lazyConstructorCalled=true;
-      validate();
-    }
-  }
-
-  /**
-   * This method must be implemented by any child class. Most of
-   * the component creation code that would have gone in the constructor
-   * of the child goes here instead. See the example
-   * at the top.
-   */
-  abstract protected void lazyConstructor();
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AListsControl.java b/graphics/AtlantisJava/src/atlantis/gui/AListsControl.java
deleted file mode 100755
index 4e8810bc05c4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AListsControl.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package atlantis.gui;
-
-import atlantis.list.AListManager;
-import atlantis.utils.AUtilities;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-/**
- * The preferences menu.
- */
-public class AListsControl extends AMenuButton {
-
-  public AListsControl() {
-    super("Lists");
-    this.setToolTipText("List control dialog" );
-    this.setBorder(null);
-    this.addMouseListener(new MouseAdapter() {
-      public void mousePressed(MouseEvent e) {
-        if (AUtilities.isRightMouseButton(e)) {
-          AHelpSystem.getInstance().showPage("Lists");
-        } else {
-          AListManager.getInstance().showLists();
-        }
-      }
-    });
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ALogPane.java b/graphics/AtlantisJava/src/atlantis/gui/ALogPane.java
deleted file mode 100644
index 693c6f4be771..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ALogPane.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTextPane;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-
-import atlantis.output.ALogInterface;
-import atlantis.utils.ALogger;
-
-/**
- * This class is a subclass of JTextPane which can be used for any kind of
- * logging/text output window in Atlantis. It unifies the old AOutput and
- * ALogOutput classes
- *
- * @author Adam Davison
- */
-public class ALogPane extends JScrollPane implements ALogInterface {
-
-    private static ALogger logger = ALogger.getLogger(ALogPane.class);
-    private Style m_systemDefaultStyle = null;
-    
-    private JTextPane m_textPane;
-    private JPopupMenu m_popupMenu;
-    private JMenuItem m_menuItemClearTextPane;
-    
-    public ALogPane() {
-        m_textPane = new JTextPane();
-        m_textPane.setEditable(false);
-        m_textPane.setBackground(Color.white);
-        
-        setViewportView(m_textPane);
-        setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-        
-        // popup menu at text pane (info output at the bottom of the GUI)
-        m_popupMenu = new JPopupMenu();
-        m_menuItemClearTextPane = new JMenuItem("Erase info output");
-        m_menuItemClearTextPane.addActionListener(new PopupMenuActionListener(this));
-        m_popupMenu.add(m_menuItemClearTextPane);
-        
-        m_textPane.addMouseListener(new PopupMenuListener_textPane(m_popupMenu));
-        
-        // create style which are used to add text to the document
-        StyleContext context = StyleContext.getDefaultStyleContext();
-        Style defaultStyle = context.getStyle(StyleContext.DEFAULT_STYLE);
-
-        Style newStyle = m_textPane.addStyle(NORMAL, defaultStyle);
-
-        StyleConstants.setFontFamily(newStyle, "Courier");
-        StyleConstants.setFontSize(newStyle, 14);
-
-        newStyle = m_textPane.addStyle(NORMAL_BOLD, defaultStyle);
-        StyleConstants.setFontFamily(newStyle, "Courier");
-        StyleConstants.setFontSize(newStyle, 14);
-        StyleConstants.setBold(newStyle, true);
-
-        newStyle = m_textPane.addStyle(COMMAND, defaultStyle);
-        StyleConstants.setFontFamily(newStyle, "Courier");
-        StyleConstants.setFontSize(newStyle, 14);
-        StyleConstants.setForeground(newStyle, Color.blue);
-
-        newStyle = m_textPane.addStyle(BAD_COMMAND, defaultStyle);
-        StyleConstants.setFontFamily(newStyle, "Courier");
-        StyleConstants.setFontSize(newStyle, 14);
-        StyleConstants.setForeground(newStyle, Color.red);
-
-        newStyle = m_textPane.addStyle(WARNING, defaultStyle);
-        // was Courier - didn't print some greek letters under Linux
-        StyleConstants.setFontFamily(newStyle, "Arial");
-        StyleConstants.setFontSize(newStyle, 15);
-        StyleConstants.setBold(newStyle, true);
-        StyleConstants.setForeground(newStyle, Color.red);
-
-        newStyle = m_textPane.addStyle(TITLE, defaultStyle);
-        StyleConstants.setFontFamily(newStyle, "Courier");
-        StyleConstants.setFontSize(newStyle, 16);
-        StyleConstants.setItalic(newStyle, true);
-        StyleConstants.setForeground(newStyle, Color.blue);
-
-        newStyle = m_textPane.addStyle(PICK, defaultStyle);
-        // was Courier - didn't print some greek letters under Linux
-        StyleConstants.setFontFamily(newStyle, "Arial");
-
-        StyleConstants.setFontSize(newStyle, 13);
-        StyleConstants.setItalic(newStyle, true);
-        StyleConstants.setForeground(newStyle, Color.blue);
-        
-        // This is the way ALogOutput styled it's text, perhaps we should
-        // use NORMAL instead to unify the look of all the output boxes? - AD
-        m_systemDefaultStyle = context.getStyle(StyleContext.DEFAULT_STYLE);
-    }
-
-    @Override
-	public synchronized void append(String s) {
-        append(s, m_systemDefaultStyle);
-    }
-    
-    @Override
-	public synchronized void append(String s, String style) {
-        append(s, m_textPane.getStyle(style));
-    }
-    
-    private synchronized void append(String s, Style style) {
-        Document document = m_textPane.getDocument();
-        try {
-            int size = document.getLength();
-
-            // if the string being appended gets too long, which happens in the
-            // demo mode runs and leads to OutOfMemory here, cut off the first
-            // half of the string in the information output
-            if (size > 51200) // 50kB
-            {
-                document.remove(0, size / 2);
-
-                // another option of cutting the string would be
-                // (but it doesn't preserve styles):
-                // String text = textPane.getText();
-                // textPane.setText(""); // clear all
-                // s = text.substring(size / 2, size - 1) + s;
-
-                size = document.getLength();
-            }
-
-            document.insertString(size, s, style);
-
-            // set the scrollbar to the bottom of the window
-            // previous solution:
-            // scrollPane.getViewport().setViewPosition(new Point(0, 9999999));
-            // was sometimes crashing with IndexOutOfBoundException
-            m_textPane.setCaretPosition(document.getLength());
-
-            if (style.equals(ALogInterface.BAD_COMMAND) || style.equals(ALogInterface.WARNING)) {
-                Toolkit.getDefaultToolkit().beep();
-            }
-        } catch (BadLocationException e) {
-            logger.error("Problem in ALogPane", e);
-        }
-    }
-
-    @Override
-	public void clear() {
-        m_textPane.setText("");
-    }
-    
-}
-
-class PopupMenuListener_textPane extends MouseAdapter
-{
-    private JPopupMenu popupMenu;
-
-    PopupMenuListener_textPane(JPopupMenu popupMenu)
-    {
-        this.popupMenu = popupMenu;
-    }
-
-    public void mousePressed(MouseEvent evt)
-    {
-        showPopupMenu(evt);
-    }
-
-    public void mouseReleased(MouseEvent evt)
-    {
-        showPopupMenu(evt);
-    }
-
-    private void showPopupMenu(MouseEvent evt)
-    {
-        // decides whether right 'trigger' action was performed to show
-        // the popup menu (on the text pane - info output in GUI)
-        if (evt.isPopupTrigger())
-        {
-            popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
-        }
-    }
-
-} // class PopupMenuListener_textPane =======================================
-
-class PopupMenuActionListener implements ActionListener
-{
-    ALogInterface adaptee;
-
-    PopupMenuActionListener(ALogInterface adaptee)
-    {
-        this.adaptee = adaptee;
-    }
-
-    // clear info output if the popup menu item was pressed
-    public void actionPerformed(ActionEvent e)
-    {
-        adaptee.clear();
-    }
-
-} // class PopupMenuActionListener ==========================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AMainLogPane.java b/graphics/AtlantisJava/src/atlantis/gui/AMainLogPane.java
deleted file mode 100644
index c493fad653f5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AMainLogPane.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package atlantis.gui;
-
-/**
- * The main logging pane showing user information
- * @author Adam Davison
- */
-public class AMainLogPane extends ALogPane {
-
-    public AMainLogPane() {
-        super();
-        append("Welcome to Atlantis !\n", TITLE);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AMenuButton.java b/graphics/AtlantisJava/src/atlantis/gui/AMenuButton.java
deleted file mode 100644
index 3a939230f0dc..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AMenuButton.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Dimension;
-import java.awt.FontMetrics;
-import javax.swing.JMenuItem;
-
-/**
- * AMenuButton is an object that acts like a JMenuItem but looks like a JMenu.
- * This is for the buttons that we add directly to the menu bar. It does not 
- * allow the layout manager to change it size.
- *
- * @author Eric Jansen
- */
-public class AMenuButton extends JMenuItem {
-
-    /** Extra space needed to make JMenuItem and JMenu look the same */
-    private static int EXTRA_SPACE = 6;
-    
-    /** Initial preferred size */
-    private Dimension size;
-
-    public AMenuButton(String title) {
-        super(title);
-        setOpaque(false);
-        
-        FontMetrics fm = getFontMetrics(getFont());        
-        size = super.getPreferredSize();
-        size.width = getMargin().left + fm.stringWidth(title) 
-                + getMargin().right + EXTRA_SPACE;
-    }
-    
-    @Override
-    public Dimension getMinimumSize() {
-        return size;
-    }
-
-    @Override
-    public Dimension getMaximumSize() {
-        return size;
-    }
-    
-    @Override
-    public Dimension getPreferredSize() {
-        return size;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AMouseHelpDialog.java b/graphics/AtlantisJava/src/atlantis/gui/AMouseHelpDialog.java
deleted file mode 100755
index c8c691abe24c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AMouseHelpDialog.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package atlantis.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Toolkit;
-import java.util.ArrayList;
-import java.util.EventObject;
-import java.util.Iterator;
-import java.util.Vector;
-
-import javax.swing.JFrame;
-import javax.swing.JTable;
-import javax.swing.event.CellEditorListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.ButtonGroup;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.JRadioButton;
-
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.interactions.AInteraction;
-import atlantis.interactions.AModifier;
-
-import java.awt.event.*;
-
-/**
- * This dialog is used to display the mouse modifiers which are currently active
- * Once more a singleton, but at least a proper one (private constructor)
- */
-public class AMouseHelpDialog extends JFrame {
-
-    private static JTable table;
-    static Object[][] rowData;
-    static Object[] columnNames;
-    private static AMouseHelpDialog instance;
-    private static final AGlobals globals = AGlobals.instance();
-
-    /**
-     * Private singleton constructor
-     */
-    private AMouseHelpDialog() {
-        super("Help - Modifier Keys");
-        
-        AIcon.setIconImage(this);
-        
-        table = new JTable() {
-            public TableCellRenderer getCellRenderer(int row, int column) {
-                if (column == 0) {
-                    return new RadioRenderer();
-                }
-                // else...
-                return super.getCellRenderer(row, column);
-            }
-            
-            public TableCellEditor getCellEditor(int row, int column) {
-                if (column == 0) {
-                    return new RadioEditor();
-                } else {
-                    return super.getCellEditor(row, column);
-                }
-            }
-        };
-        
-        table.setRowHeight(20);
-        
-        table.setFont(new Font("Monospaced", Font.PLAIN, table.getFont().getSize()));
-        table.setRowSelectionAllowed(false);
-        
-        getContentPane().add(table.getTableHeader(), BorderLayout.NORTH);
-        getContentPane().add(table, BorderLayout.CENTER);
-        setResizable(false);
-        
-        // From Java 1.5 we can tell the window to be always on top
-        this.setAlwaysOnTop(true);
-        
-        this.addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {
-                // Reset key modifier when closing the window
-                AEventQueue.setDefault(AModifier.nothing);
-            }
-        });
-        
-        pack();
-
-    }
-
-    /**
-     * Get an instance of this singleton
-     * @return the AMouseHelpDialog instance
-     */
-    public static AMouseHelpDialog getInstance() {
-      //Make sure no GUI object is created in headless mode
-      if (AGlobals.isAtlantisHeadless()) return null;
-
-      //Create instance if it does not exist
-      if (instance == null) instance = new AMouseHelpDialog();
-      return instance;
-    }
-
-
-    /**
-     * Overwrite setVisible to ensure proper placement of the dialog
-     * @param visible wether the dialog should be visible
-     */
-    @Override
-    public void setVisible(boolean visible){
-
-      //Set the proper location on the screen
-      Frame gui = globals.getGuiFrame();
-      int guiWidth = gui.getWidth();
-      int guiX = gui.getX();
-      int guiY = gui.getY();
-      int dialogWidth = (int) instance.getPreferredSize().getWidth();
-      int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-      if (guiX + guiWidth + (dialogWidth - guiWidth) / 2 > screenWidth)
-          instance.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(0, guiY));
-      else
-          instance.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), Math.max(0, guiY));
-
-      //And finally do set it visible!
-      super.setVisible(visible);
-    }
-    
-    public static void processInteractionChange(Vector interactions) {
-        if (ACanvas.getCanvas().getCurrentWindow() == null)
-            return;
-        
-        AModifier[] modifiers = ACanvas.getCanvas().getCurrentWindow().getInteractionManager().getMouseModifiers();
-        ArrayList<AModifier> m = new ArrayList<AModifier>();
-        for (int i = 0; i < modifiers.length; ++i)
-            m.add(modifiers[i]);
-        for (int i = 0; i < interactions.size(); ++i) {
-            AModifier[] mod = ((AInteraction) interactions.get(i)).getModifiers();
-            for (int j = 0; j < mod.length; ++j)
-                m.add(mod[j]);
-        }
-        
-        // remove duplicates
-        for (int i = 0; i < m.size(); ++i)
-            for (int j = i + 1; j < m.size(); ++j)
-                if (m.get(i) != null && m.get(j) != null && ((AModifier)m.get(i)).sameAs((AModifier)m.get(j))) {
-            m.set(i, null);
-                }
-        
-        Iterator<AModifier> it = m.iterator();
-        while (it.hasNext())
-            if (it.next() == null)
-                it.remove();
-        
-        // sort
-        for (int i = 0; i < m.size(); ++i)
-            for (int j = i + 1; j < m.size(); ++j) {
-            String n = m.get(i).toKeyString();
-            String o = m.get(j).toKeyString();
-            if (o.length() > n.length() || (o.length() == n.length() && (o.length() > 0 && (o.charAt(0) < n.charAt(0))))) {
-                AModifier temp = m.get(i);
-                m.set(i, m.get(j));
-                m.set(j, temp);
-            }
-            }
-        
-        int foundnull = -1;
-        for (int i = 0; i < m.size(); i++) {
-            AModifier mod = (AModifier)m.get(i);
-            if (mod.sameAs(AModifier.nothing)) {
-                foundnull = i;
-            }
-        }
-        
-        if (foundnull == -1) {
-            m.add(AModifier.nothing);
-        }
-        
-        ButtonGroup bgroup = new ButtonGroup();
-        
-        rowData = new Object[m.size()][3];
-        for (int i = 0; i < rowData.length; ++i) {
-            AModifier mod = (AModifier)m.get(i);
-            JRadioButton but = new MouseHelpRadio(mod);
-
-            if (mod.sameAs(AEventQueue.getDefault())) {
-                but.setSelected(true);
-            }
-            
-            if (mod.sameAs(AModifier.nothing)) {
-                foundnull = i;
-            }
-            
-            bgroup.add(but);
-            
-            rowData[i][0] = but;
-            rowData[i][1] = mod.toKeyString();
-            rowData[i][2] = mod.toDescString();
-        }
-        
-        columnNames = new String[] { "", "Key", "Action" };
-        TableModel model = new AbstractTableModel() {
-            public String getColumnName(int column) {
-                return columnNames[column].toString();
-            }
-            
-            public int getRowCount() {
-                return rowData.length;
-            }
-            
-            public int getColumnCount() {
-                return columnNames.length;
-            }
-            
-            public Object getValueAt(int row, int col) {
-                return rowData[row][col];
-            }
-            
-            public boolean isCellEditable(int row, int column) {
-                if (column == 0) { 
-                    return true;
-                } else {
-                    return false;
-                }
-            }
-            
-            public void setValueAt(Object value, int row, int col) {
-                rowData[row][col] = value;
-                fireTableCellUpdated(row, col);
-            }
-        };
-        
-        table.setModel(model);
-        table.getColumnModel().getColumn(0).setPreferredWidth(22);
-        table.getColumnModel().getColumn(1).setPreferredWidth(80);
-        table.getColumnModel().getColumn(2).setPreferredWidth(300);
-        instance.pack();
-    }
-
-    private static class MouseHelpRadio extends JRadioButton {
-
-    	AModifier m_mod;
-
-    	public MouseHelpRadio(AModifier mod) {
-    		m_mod = mod;
-
-    		this.addActionListener(new ActionListener() {
-    			public void actionPerformed(ActionEvent e) {
-    				if (isSelected()) {
-    					AEventQueue.setDefault(m_mod);
-    				}
-    				// Previously selected radio button doesn't always paint it's
-    				// unselection if you aren't careful
-    				getParent().repaint();
-    			}
-    		});
-    	}
-
-    }
-
-    private static class RadioRenderer implements TableCellRenderer {
-
-    	public RadioRenderer() {
-    	}
-
-    	public Component getTableCellRendererComponent(JTable table, Object value,
-    			boolean isSelected, boolean hasFocus, int row, int column) {
-
-    		return (JRadioButton)value;
-    	}
-
-    }
-
-    private static class RadioEditor implements TableCellEditor {
-
-    	private JRadioButton button;
-
-    	public RadioEditor() {
-
-    	}
-
-    	public Object getCellEditorValue() {
-    		return button;
-    	}
-
-    	public boolean shouldSelectCell(EventObject anEvent) {
-    		return false;
-    	}
-
-    	public boolean isCellEditable(EventObject anEvent) {
-    		return true;
-    	}
-
-    	public void removeCellEditorListener(CellEditorListener l) {
-    	}
-
-    	public void addCellEditorListener(CellEditorListener l) {
-    	}
-
-    	public boolean stopCellEditing() {
-    		return true;
-    	}
-
-    	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-    		button = (JRadioButton)value;
-    		return button;
-    	}
-
-    	public void cancelCellEditing() {
-    	}
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AMultiSpanCellTableUI.java b/graphics/AtlantisJava/src/atlantis/gui/AMultiSpanCellTableUI.java
deleted file mode 100755
index cf0054cee6d7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AMultiSpanCellTableUI.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-
-import javax.swing.JComponent;
-import javax.swing.plaf.basic.BasicTableUI;
-import javax.swing.table.TableCellRenderer;
-
-public class AMultiSpanCellTableUI extends BasicTableUI
-{
-    public void paint(Graphics g, JComponent c)
-    {
-        for (int index = 0; index < table.getRowCount(); index++)
-        {
-            paintRow(g, index);
-        }
-    }
-    
-    private void paintRow(Graphics g, int row)
-    {
-        AParamGUIDataModel tableModel = (AParamGUIDataModel) table.getModel();
-        ADefaultCellAttribute cellAtt = tableModel.getCellAttribute();
-        int numColumns = table.getColumnCount();
-        
-        for (int column = 0; column < numColumns; column++)
-        {
-            Rectangle cellRect = table.getCellRect(row, column, true);
-            int cellRow, cellColumn;
-            if (cellAtt.isVisible(row, column))
-            {
-                cellRow = row;
-                cellColumn = column;
-            }
-            else
-            {
-                cellRow = row + cellAtt.getSpan(row, column)[ADefaultCellAttribute.ROW];
-                cellColumn = column + cellAtt.getSpan(row, column)[ADefaultCellAttribute.COLUMN];
-            }
-            paintCell(g, cellRect, cellRow, cellColumn);
-        }
-    }
-    
-    private void paintCell(Graphics g, Rectangle cellRect, int row, int column)
-    {
-        int spacingHeight = table.getRowMargin();
-        int spacingWidth = table.getColumnModel().getColumnMargin();
-        
-        Color c = g.getColor();
-        g.setColor(table.getGridColor());
-        g.drawRect(cellRect.x, cellRect.y, cellRect.width - 1,
-                cellRect.height - 1);
-        g.setColor(c);
-        
-        cellRect.setBounds(cellRect.x + spacingWidth / 2, cellRect.y
-                + spacingHeight / 2, cellRect.width - spacingWidth,
-                cellRect.height - spacingHeight);
-        
-        if (table.isEditing() && table.getEditingRow() == row
-                && table.getEditingColumn() == column)
-        {
-            Component component = table.getEditorComponent();
-            component.setBounds(cellRect);
-            component.validate();
-        }
-        else
-        {
-            TableCellRenderer renderer = table.getCellRenderer(row, column);
-            Component component = table.prepareRenderer(renderer, row, column);
-            
-            if (component.getParent() == null)
-            {
-                rendererPane.add(component);
-            }
-            rendererPane.paintComponent(g, component, table, cellRect.x,
-                    cellRect.y, cellRect.width, cellRect.height, true);
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AMutableCheckBox.java b/graphics/AtlantisJava/src/atlantis/gui/AMutableCheckBox.java
deleted file mode 100755
index 92390995e52e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AMutableCheckBox.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.LayoutManager;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.Vector;
-
-import javax.swing.BorderFactory;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.LookAndFeel;
-
-import atlantis.utils.AUtilities;
-
-/**
- * Used to display the status and the operator(<,>,=..etc) of a Cut Parameter.
- */
-public class AMutableCheckBox extends JPanel {
-	private JLabel label;
-	private ACheckBox checkBox;
-	private javax.swing.Timer timer;
-	private JPopupMenu popup;
-	private String selectedText;
-	private ActionListener statusActionListener, textActionListener;
-	private Vector oper=new Vector();
-	
-	public AMutableCheckBox(String name) {
-		setLayout(new AMutableCheckBoxLayout());
-		setBorder(null);
-		
-		checkBox=new ACheckBox(name);
-        checkBox.setBackground(new Color(204, 204, 204));
-		checkBox.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				if(statusActionListener!=null)
-					statusActionListener.actionPerformed(new ActionEvent(get(), 0, ""));
-			}
-		});
-		add("CHECKBOX", checkBox);
-		
-		popup=new JPopupMenu();
-	}
-	
-	// must be called after all the parameters whose added
-	public void finalizeConstruction() {
-		label=new JLabel("", JLabel.CENTER);
-		label.setBorder(BorderFactory.createLineBorder(new Color(153, 153, 153), 1));
-		LookAndFeel.installColorsAndFont(label, "CheckBox.background", "CheckBox.foreground",
-		"CheckBox.font");
-		add("LABEL", label);
-		
-		// setting the timmer and popup (if more than 2 supportedOperators)
-		if(oper.size()>2) {
-			timer=new javax.swing.Timer(50, new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					Dimension d=label.getSize();
-					
-					popup.show(label, 0, d.height);
-				}
-			});
-			timer.setRepeats(false);
-		}
-		
-		// setting the mouse listeners
-		if(oper.size()<=2)
-			label.addMouseListener(new MouseAdapter() {
-				public void mousePressed(MouseEvent e) {
-					if(AUtilities.isRightMouseButton(e)||oper.size()==1){
-						return;
-					}
-					String text0=(String)oper.elementAt(0);
-					String text1=(String)oper.elementAt(1);
-					
-					if(selectedText.equals(text0)) setSelectedText(text1);
-					else if(selectedText.equals(text1)) setSelectedText(text0);
-					
-					if(textActionListener!=null)
-						textActionListener.actionPerformed(new ActionEvent(get(), 0, ""));
-				}
-			});
-		else
-			label.addMouseListener(new MouseAdapter() {
-				public void mousePressed(MouseEvent e) {
-					if(!AUtilities.isRightMouseButton(e))
-						timer.start();
-				}
-				
-				public void mouseReleased(MouseEvent e) {
-					if(!AUtilities.isRightMouseButton(e))
-						timer.stop();
-				}
-			});
-	}
-	
-	private JPanel get() {
-		return this;
-	}
-	
-	public ACheckBox getCheckBox(){
-		return checkBox;
-	}
-	
-	public void addItem(String s) {
-		oper.addElement(s);
-		
-		popup.add(s).addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				JMenuItem item=(JMenuItem)e.getSource();
-				
-				setSelectedText(item.getText());
-				if(textActionListener!=null)
-					textActionListener.actionPerformed(new ActionEvent(get(), 0, ""));
-			}
-		});
-	}
-	
-	public void setSelectedText(String text) {
-		selectedText=text;
-		label.setText(selectedText);
-	}
-	
-	public String getSelectedText() {
-		return selectedText;
-	}
-	
-	public boolean getStatus() {
-		return checkBox.isSelected();
-	}
-	
-	public void setStatus(boolean status) {
-		checkBox.setSelected(status);
-	}
-	
-	public void addTextActionListener(ActionListener listener) {
-		textActionListener=listener;
-	}
-	
-	public void addStatusActionListener(ActionListener listener) {
-		statusActionListener=listener;
-	}
-	
-	public void setForeground(Color color) {
-		if(checkBox!=null)
-			checkBox.setForeground(color);
-	}
-}
-
-class AMutableCheckBoxLayout implements LayoutManager {
-	private Component checkBox, label;
-	
-	public void addLayoutComponent(String name, Component comp) {
-		if(name.equals("CHECKBOX")) checkBox=comp;
-		else if(name.equals("LABEL")) label=comp;
-	}
-	
-	public void layoutContainer(Container parent) {
-		Dimension p=parent.getSize();
-		Dimension l=label.getPreferredSize();
-		Dimension c=checkBox.getPreferredSize();
-		
-		checkBox.setBounds(0, (p.height-c.height)/2, p.width-l.width-10, c.height);
-		label.setBounds(p.width-l.width-10, -1, l.width+10+1, p.height+2);
-	}
-	
-	public Dimension minimumLayoutSize(Container parent) {
-		return new Dimension(10, 10);
-	}
-	
-	public Dimension preferredLayoutSize(Container parent) {
-		return new Dimension(100, 100);
-	}
-	
-	// Removes the specified component from the layout.
-	public void removeLayoutComponent(Component comp) {}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AOpenGLControl.java b/graphics/AtlantisJava/src/atlantis/gui/AOpenGLControl.java
deleted file mode 100644
index 3df9c139c016..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AOpenGLControl.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package atlantis.gui;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.canvas.AWindowGLView;
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JSeparator;
-import javax.swing.event.MenuEvent;
-import javax.swing.event.MenuListener;
-
-/**
- *
- * @author Adam
- */
-public class AOpenGLControl extends JMenu implements MenuListener, ActionListener {
-
-    private ButtonGroup m_bg = new ButtonGroup();
-    private JRadioButtonMenuItem m_fsaa0 = new JRadioButtonMenuItem("No AA");
-    private JRadioButtonMenuItem m_fsaa2 = new JRadioButtonMenuItem("2x FSAA");
-    private JRadioButtonMenuItem m_fsaa4 = new JRadioButtonMenuItem("4x FSAA");
-    private JRadioButtonMenuItem m_fsaa6 = new JRadioButtonMenuItem("6x FSAA");
-    private JRadioButtonMenuItem m_fsaa8 = new JRadioButtonMenuItem("8x FSAA");
-    private JCheckBoxMenuItem m_blendborder = new JCheckBoxMenuItem("Blend Border");
-    private boolean m_updating = false;
-
-    public AOpenGLControl() {
-        super("OpenGL");
-
-        m_bg.add(m_fsaa0);
-        m_bg.add(m_fsaa2);
-        m_bg.add(m_fsaa4);
-        m_bg.add(m_fsaa6);
-        m_bg.add(m_fsaa8);
-
-        add(m_fsaa0);
-        add(m_fsaa2);
-        add(m_fsaa4);
-        add(m_fsaa6);
-        add(m_fsaa8);
-        add(new JSeparator());
-        add(m_blendborder);
-
-        m_fsaa0.addActionListener(this);
-        m_fsaa2.addActionListener(this);
-        m_fsaa4.addActionListener(this);
-        m_fsaa6.addActionListener(this);
-        m_fsaa8.addActionListener(this);
-
-        m_blendborder.addActionListener(this);
-
-        addMenuListener(this);
-    }
-
-    public void menuSelected(MenuEvent e) {
-        m_updating = true;
-
-        int maxFSAA = AWindowGLView.getMaxFSAA();
-
-        m_fsaa2.setEnabled(false);
-        m_fsaa4.setEnabled(false);
-        m_fsaa6.setEnabled(false);
-        m_fsaa8.setEnabled(false);
-
-        if (maxFSAA >= 2) {
-            m_fsaa2.setEnabled(true);
-
-            if (maxFSAA >= 4) {
-                m_fsaa4.setEnabled(true);
-
-                if (maxFSAA >= 6) {
-                    m_fsaa6.setEnabled(true);
-
-                    if (maxFSAA >= 8) {
-                        m_fsaa8.setEnabled(true);
-                    }
-                }
-            }
-        }
-
-        int currentFSAA = AWindowGLView.getCurrentFSAA();
-
-        switch (currentFSAA) {
-            case 0:
-                m_fsaa0.setSelected(true);
-                break;
-            case 2:
-                m_fsaa2.setSelected(true);
-                break;
-            case 4:
-                m_fsaa4.setSelected(true);
-                break;
-            case 6:
-                m_fsaa6.setSelected(true);
-                break;
-            case 8:
-                m_fsaa8.setSelected(true);
-                break;
-            default:
-                break;
-        }
-
-        m_updating = false;
-    }
-
-    public void menuDeselected(MenuEvent e) {
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void menuCanceled(MenuEvent e) {
-    //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        if (m_updating) {
-            return;
-        }
-
-        JMenuItem src = (JMenuItem) (e.getSource());
-
-        if (src == m_fsaa0) {
-            AWindowGLView.setCurrentFSAA(0);
-        } else if (src == m_fsaa2) {
-            AWindowGLView.setCurrentFSAA(2);
-        } else if (src == m_fsaa4) {
-            AWindowGLView.setCurrentFSAA(4);
-        } else if (src == m_fsaa6) {
-            AWindowGLView.setCurrentFSAA(6);
-        } else if (src == m_fsaa8) {
-            AWindowGLView.setCurrentFSAA(8);
-        } else if (src == m_blendborder) {
-            int oldr = AWindow.BORDER_BACKGROUND_COLOR.getRed();
-            int oldg = AWindow.BORDER_BACKGROUND_COLOR.getGreen();
-            int oldb = AWindow.BORDER_BACKGROUND_COLOR.getBlue();
-            int oldselr = AWindow.BORDER_SELECTED_BACKGROUND_COLOR.getRed();
-            int oldselg = AWindow.BORDER_SELECTED_BACKGROUND_COLOR.getGreen();
-            int oldselb = AWindow.BORDER_SELECTED_BACKGROUND_COLOR.getBlue();
-            if (m_blendborder.getState()) {
-                AWindow.BORDER_BACKGROUND_COLOR = new Color(oldr, oldg, oldb, 127);
-                AWindow.BORDER_SELECTED_BACKGROUND_COLOR = new Color(
-                        oldselr, oldselg, oldselb, 127);
-            } else {
-                AWindow.BORDER_BACKGROUND_COLOR = new Color(oldr, oldg, oldb, 255);
-                AWindow.BORDER_SELECTED_BACKGROUND_COLOR = new Color(
-                        oldselr, oldselg, oldselb, 255);
-            }
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AParamGUIDataModel.java b/graphics/AtlantisJava/src/atlantis/gui/AParamGUIDataModel.java
deleted file mode 100755
index b1b03a9a1ebf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AParamGUIDataModel.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Component;
-import java.util.EventObject;
-import java.util.Vector;
-
-import javax.swing.JTable;
-import javax.swing.JTree;
-import javax.swing.event.CellEditorListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParametersGroup;
-import atlantis.parameters.AStatusRootParameter;
-
-/**
- * The data model used to create the custom tables which contain parameters.
- */
-class AParamGUIDataModel extends AbstractTableModel implements
-        TableCellEditor, TableCellRenderer
-{
-    private Vector<AParameter> parametersList;
-    // if there is a tree in a cell, the height of the cell should be decided by the tree
-    private int[] rowHeight;
-    // indicate if there is a tree in this table
-    private boolean isTree = false;
-    private JTree tree = null;
-    private int treeRowNumber = -1;
-    private ADefaultCellAttribute cellAtt;
-
-    AParamGUIDataModel(AParametersGroup group)
-    {
-        parametersList = group.getParameters(APar.instance().getUserLevel());
-        rowHeight = new int[parametersList.size()];
-
-        cellAtt = new ADefaultCellAttribute(rowHeight.length, 2);
-
-        for (int i = 0; i < parametersList.size(); i++)
-        {
-            AParameter p = (AParameter) parametersList.elementAt(i);
-            if (!p.isInitialized())
-                p.initialize();
-            if (p instanceof AStatusRootParameter)
-            {
-                isTree = true;
-                tree = (JTree) ((AStatusRootParameter) p).getNameComponent();
-                treeRowNumber = i;
-                rowHeight[i] = tree.getRowCount()
-                        * (int) (tree.getRowBounds(0).getHeight());
-                int[] columns = { 0, 1 };
-                int[] rows = { i };
-                cellAtt.combine(rows, columns);
-            }
-            else
-                rowHeight[i] = 25;
-        }
-    }
-
-    public ADefaultCellAttribute getCellAttribute()
-    {
-        return cellAtt;
-    }
-
-    int getRowHeight(int rowIndex)
-    {
-        return rowHeight[rowIndex];
-    }
-
-    public int getTreeRow()
-    {
-        return treeRowNumber;
-    }
-
-    public boolean hasTree()
-    {
-        return isTree;
-    }
-
-    public JTree getTree()
-    {
-        return tree;
-    }
-
-    public int getRowCount()
-    {
-        return parametersList.size();
-    }
-
-    public int getColumnCount()
-    {
-        return 2;
-    }
-
-    public Object getValueAt(int rowIndex, int columnIndex)
-    {
-        return new Integer(0);
-    }
-
-    public boolean isCellEditable(int rowIndex, int columnIndex)
-    {
-        return true;
-    }
-
-    public void refresh()
-    {
-        for (int i = 0; i < parametersList.size(); i++)
-        {
-            AParameter p = (AParameter) parametersList.elementAt(i);
-            p.refresh();
-        }
-    }
-
-    // TableCellRenderer implementation
-    public Component getTableCellRendererComponent(JTable table, Object value,
-            boolean isSelected, boolean hasFocus, int row, int column)
-    {
-        return getTableCellEditorComponent(table, value, isSelected, row,
-                column);
-    }
-
-    // TableCellEditor implementation
-    public Component getTableCellEditorComponent(JTable table, Object value,
-            boolean isSelected, int row, int column)
-    {
-        AParameter p = (AParameter) parametersList.elementAt(row);
-        switch (column)
-        {
-            case 0:
-                return p.getNameComponent();
-            case 1:
-                return p.getValueComponent();
-            default:
-                return null;
-        }
-    }
-
-    public AParameter getParameter(int row)
-    {
-        return (AParameter) parametersList.elementAt(row);
-    }
-
-    public Object getCellEditorValue()
-    {
-        return new Integer(0);
-    }
-
-    public boolean isCellEditable(EventObject anEvent)
-    {
-        return true;
-    }
-
-    public boolean shouldSelectCell(EventObject anEvent)
-    {
-        return true;
-    }
-
-    public boolean stopCellEditing()
-    {
-        return true;
-    }
-
-    public void cancelCellEditing()
-    {}
-
-    public void addCellEditorListener(CellEditorListener l)
-    {}
-
-    public void removeCellEditorListener(CellEditorListener l)
-    {}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AParametersPage.java b/graphics/AtlantisJava/src/atlantis/gui/AParametersPage.java
deleted file mode 100755
index 6217ed42aa08..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AParametersPage.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package atlantis.gui;
-
-import atlantis.graphics.layout.AFlowLayout;
-import atlantis.parameters.ACommand;
-import atlantis.parameters.AParametersGroup;
-import javax.swing.JScrollPane;
-import javax.swing.JPanel;
-
-/**
- * Used to display a table of parameters together with their associated
- * commands in the Parameters Control.
- */
-public class AParametersPage extends ALazyPanel {
-  private AParametersGroup group;
-  AParametersTable pTable;
-
-  public AParametersPage(AParametersGroup group) {
-    this.group=group;
-  }
-
-  protected void lazyConstructor() {
-    setLayout(new AGUILayoutManager());
-    setBorder(null);
-
-    add(createCommandsPanel(group), AGUILayoutManager.AVAILABLExPREFERRED);
-
-    pTable=new AParametersTable(group);
-    pTable.setName(group.getScreenName());
-    add(new JScrollPane(pTable), AGUILayoutManager.AVAILABLExAVAILABLE);
-  }
-
-  private JPanel createCommandsPanel(AParametersGroup group) {
-    JPanel commandPanel=new JPanel(new AFlowLayout(5, 5));
-
-    commandPanel.setBorder(null);
-    ACommand[] commands=group.getCommands();
-
-    for(int j=0; j<commands.length; j++)
-      commandPanel.add(commands[j]);
-
-    return commandPanel;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AParametersTable.java b/graphics/AtlantisJava/src/atlantis/gui/AParametersTable.java
deleted file mode 100755
index 869510eaf7ff..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AParametersTable.java
+++ /dev/null
@@ -1,253 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.util.Enumeration;
-
-import javax.swing.JPopupMenu;
-import javax.swing.JTable;
-import javax.swing.JTree;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.table.TableColumn;
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.AParametersGroup;
-import atlantis.parameters.AStatusRootParameter;
-import atlantis.utils.AUtilities;
-
-/**
- * The graphical object which contains all the parameter of a single group.
- * Appears in the GUI.
- */
-public class AParametersTable extends JTable
-{
-    private TableColumn column;
-    private AParamGUIDataModel dataModel;
-    public final static String SET_GLOBAL = "Set Global";
-    public final static String SET_LOCAL = "Set Local";
-    public final static String SET_ALL_GLOBAL = "Set All Global";
-    public final static String SET_ALL_LOCAL = "Set All Local";
-    
-    public AParametersTable(AParametersGroup g)
-    {
-        super();
-        dataModel = new AParamGUIDataModel(g);
-        setModel(dataModel);
-        for (int i = 0; i < dataModel.getRowCount(); i++)
-            this.setRowHeight(i, dataModel.getRowHeight(i));
-        if (dataModel.hasTree())
-        {
-            JTree theTree = dataModel.getTree();
-            theTree.addTreeExpansionListener(new ATreeExpansionListener(
-                    theTree, this, dataModel.getTreeRow()));
-        }
-        column = getColumnModel().getColumn(0);
-        column.setHeaderValue("Name");
-        column.setCellEditor(dataModel);
-        column.setCellRenderer(dataModel);
-        column.setPreferredWidth(110);
-        column = getColumnModel().getColumn(1);
-        column.setHeaderValue("Value");
-        column.setCellEditor(dataModel);
-        column.setCellRenderer(dataModel);
-        column.setPreferredWidth(100);
-        setUI(new AMultiSpanCellTableUI());
-        setCellSelectionEnabled(true);
-        
-        addMouseListener(new MouseAdapter() {
-            private int pressedX;
-            private int pressedY;
-            
-            public void mousePressed(MouseEvent e)
-            {
-                int clickedRow = rowAtPoint(e.getPoint());
-                int clickedCol = columnAtPoint(e.getPoint());
-                final AParameter p = ((AParamGUIDataModel) getModel())
-                .getParameter(clickedRow);
-                if ((p instanceof AStatusRootParameter) && (clickedCol == 0))
-                {
-                    MouseListener[] theMLs = ((JTree) p.getNameComponent())
-                    .getMouseListeners();
-                    for (int i = 0; i < theMLs.length; i++)
-                    {
-                        if (theMLs[i] instanceof AStatusRootParameter.NodeSelectionListener)
-                        {
-                            Rectangle clickedRec = getCellRect(clickedRow,
-                                    clickedCol, false);
-                            ((AStatusRootParameter.NodeSelectionListener) theMLs[i])
-                            .setOffset(clickedRec.x, clickedRec.y);
-                            e.translatePoint(-clickedRec.x, -clickedRec.y);
-                            if (AUtilities.isRightMouseButton(e))
-                                theMLs[i].mousePressed(e);
-                            else
-                            {
-                                pressedX = e.getX();
-                                pressedY = e.getY();
-                            }
-                        }
-                    }
-                    return;
-                }
-                if (AUtilities.isRightMouseButton(e) && (clickedCol == 0))
-                {
-                    JPopupMenu popupMenu = new JPopupMenu();
-                    if (p.getScope() == AParameter.LOCAL)
-                    {
-                        popupMenu.add(SET_GLOBAL).addActionListener(
-                                new ActionListener() {
-                                    public void actionPerformed(ActionEvent e)
-                                    {
-                                        p.changeScope(AParameter.GLOBAL);
-                                        refresh();
-                                    }
-                                });
-                    }
-                    else
-                    {
-                        popupMenu.add(SET_LOCAL).addActionListener(
-                                new ActionListener() {
-                                    public void actionPerformed(ActionEvent e)
-                                    {
-                                        p.changeScope(AParameter.LOCAL);
-                                        refresh();
-                                    }
-                                });
-                    }
-                    popupMenu.show(AParametersTable.this, e.getX(), e.getY());
-                }
-            }
-            
-            // have no idea why mouseClicked cannot be invoked when clicking the
-            // table
-            // only mousePressed & mouseReleased can be invoked
-            public void mouseReleased(MouseEvent e)
-            {
-                int clickedRow = rowAtPoint(e.getPoint());
-                // when the position of mouse releasing is out of the table,
-                // clickedRow = -1
-                // e.g. when you change a value of a combo box, and the list of
-                // this combo box is rather long
-                if (clickedRow < 0)
-                    return;
-                int clickedCol = columnAtPoint(e.getPoint());
-                final AParameter p = ((AParamGUIDataModel) getModel())
-                .getParameter(clickedRow);
-                if ((p instanceof AStatusRootParameter) && (clickedCol == 0))
-                {
-                    MouseListener[] theMLs = ((JTree) p.getNameComponent())
-                    .getMouseListeners();
-                    for (int i = 0; i < theMLs.length; i++)
-                    {
-                        if (theMLs[i] instanceof AStatusRootParameter.NodeSelectionListener)
-                        {
-                            Rectangle clickedRec = getCellRect(clickedRow,
-                                    clickedCol, false);
-                            ((AStatusRootParameter.NodeSelectionListener) theMLs[i])
-                            .setOffset(clickedRec.x, clickedRec.y);
-                            e.translatePoint(-clickedRec.x, -clickedRec.y);
-                            if ((pressedX == e.getX())
-                                    && (pressedY == e.getY()))
-                                theMLs[i].mouseClicked(e);
-                        }
-                    }
-                    return;
-                }
-            }
-        });
-        // needed but I don't know why gary 25/10/2002
-        refresh();
-    }
-    
-    public void refresh()
-    {
-        dataModel.refresh();
-        setEditingColumn(2);
-        setEditingRow(0);
-    }
-    
-    public Rectangle getCellRect(int row, int column, boolean includeSpacing)
-    {
-        Rectangle sRect = super.getCellRect(row, column, includeSpacing);
-        if ((row < 0) || (column < 0) || (getRowCount() <= row)
-                || (getColumnCount() <= column))
-        {
-            return sRect;
-        }
-        ADefaultCellAttribute cellAtt = ((AParamGUIDataModel) getModel()).getCellAttribute();
-        if (!cellAtt.isVisible(row, column))
-        {
-            int temp_row = row;
-            int temp_column = column;
-            row += cellAtt.getSpan(temp_row, temp_column)[ADefaultCellAttribute.ROW];
-            column += cellAtt.getSpan(temp_row, temp_column)[ADefaultCellAttribute.COLUMN];
-        }
-        int[] n = cellAtt.getSpan(row, column);
-        
-        int index = 0;
-        int columnMargin = getColumnModel().getColumnMargin();
-        Rectangle cellFrame = new Rectangle();
-        int aCellHeight = sRect.height + rowMargin;
-        cellFrame.y = sRect.y;
-        cellFrame.height = n[ADefaultCellAttribute.ROW] * aCellHeight;
-        
-        Enumeration enumeration = getColumnModel().getColumns();
-        while (enumeration.hasMoreElements())
-        {
-            TableColumn aColumn = (TableColumn) enumeration.nextElement();
-            cellFrame.width = aColumn.getWidth() + columnMargin;
-            if (index == column)
-                break;
-            cellFrame.x += cellFrame.width;
-            index++;
-        }
-        for (int i = 0; i < n[ADefaultCellAttribute.COLUMN] - 1; i++)
-        {
-            TableColumn aColumn = (TableColumn) enumeration.nextElement();
-            cellFrame.width += aColumn.getWidth() + columnMargin;
-        }
-        
-        if (!includeSpacing)
-        {
-            Dimension spacing = getIntercellSpacing();
-            cellFrame.setBounds(cellFrame.x + spacing.width / 2, cellFrame.y
-                    + spacing.height / 2, cellFrame.width - spacing.width,
-                    cellFrame.height - spacing.height);
-        }
-        return cellFrame;
-    }
-    
-    public void columnSelectionChanged(ListSelectionEvent e)
-    {
-        repaint();
-    }
-    
-    public void valueChanged(ListSelectionEvent e)
-    {
-        int firstIndex = e.getFirstIndex();
-        int lastIndex = e.getLastIndex();
-        if (firstIndex == -1 && lastIndex == -1)
-        {
-            repaint();
-        }
-        Rectangle dirtyRegion = getCellRect(firstIndex, 0, false);
-        int numCoumns = getColumnCount();
-        int index = firstIndex;
-        for (int i = 0; i < numCoumns; i++)
-        {
-            dirtyRegion.add(getCellRect(index, i, false));
-        }
-        index = lastIndex;
-        for (int i = 0; i < numCoumns; i++)
-        {
-            dirtyRegion.add(getCellRect(index, i, false));
-        }
-        repaint(dirtyRegion.x, dirtyRegion.y, dirtyRegion.width,
-                dirtyRegion.height);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/APasswordDialog.java b/graphics/AtlantisJava/src/atlantis/gui/APasswordDialog.java
deleted file mode 100755
index eb54cbf2ec8c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/APasswordDialog.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.awt.Container;
-import java.awt.BorderLayout;
-import java.awt.GridLayout;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.JPasswordField;
-import javax.swing.JLabel;
-import javax.swing.BoxLayout;
-
-import java.net.PasswordAuthentication;
-import java.net.Authenticator;
-
-import atlantis.utils.ALogger;
-
-/**
- * Provides a dialogue to prompt the user for a username and password for
- * reading events from a password-protected URL.
- * 
- * @author waugh
- */
-public class APasswordDialog extends JDialog
-{    
-    private static final long serialVersionUID = 1L;
-
-    private static ALogger logger = ALogger.getLogger(APasswordDialog.class);
-    // input fields
-    protected JTextField userField;
-    protected JPasswordField passwordField;
-    // authentication object containing username and password
-    protected PasswordAuthentication pwAuth;
-    
-    /**
-     * Create APasswordDialog belonging to given frame
-     * @param frame owner of dialogue
-     */
-    protected APasswordDialog(Frame frame, String prompt) {
-	// There is almost certainly a better way to do the layout...
-	super(frame,"Password Dialogue",true);
-	Container contentPane = getContentPane();
-
-	// Create panels to place in content pane
-	JPanel mainPanel = new JPanel();
-	JPanel labelPanel = new JPanel();
-	JPanel inputPanel = new JPanel();
-	JPanel buttonPanel = new JPanel();
-
-	// Create components (labels, inputs) to put in panels
-	JLabel label = new JLabel(prompt);
-	JLabel userLabel = new JLabel("User name");
-	JLabel passwordLabel = new JLabel("Password");
-	userField = new JTextField(15);
-	passwordField = new JPasswordField(15);
-	JButton okButton = new JButton("OK");
-	JButton cancelButton = new JButton("Cancel");
-
-	// Associate labels with corresponding input fields
-	userLabel.setLabelFor(userField);
-	passwordLabel.setLabelFor(passwordField);
-
-	// Specify layout of dialogue
-	contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.Y_AXIS));
-	mainPanel.setLayout(new BoxLayout(mainPanel,BoxLayout.X_AXIS));
-	labelPanel.setLayout(new BoxLayout(labelPanel,BoxLayout.Y_AXIS));
-	inputPanel.setLayout(new BoxLayout(inputPanel,BoxLayout.Y_AXIS));
-	buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));
-
-	// Put everything together: components in panels...
-	contentPane.add(label);
-	contentPane.add(mainPanel);	
-	contentPane.add(buttonPanel);
-	
-	mainPanel.add(labelPanel);
-	mainPanel.add(inputPanel);
-	
-	labelPanel.add(userLabel);
-	labelPanel.add(passwordLabel);
-	
-	inputPanel.add(userField);
-	inputPanel.add(passwordField);
-	
-	buttonPanel.add(okButton);
-	buttonPanel.add(cancelButton);
-	
-	// click OK: construct authentication object from given name/password
-	okButton.addActionListener(new ActionListener() 
-	    {
-		public void actionPerformed(ActionEvent e) {
-		    String userName = userField.getText();
-		    char[] password = passwordField.getPassword();
-		    pwAuth = new PasswordAuthentication(userName,password);
-		    dispose();
-		}
-	    }
-	    );
-	
-	// click cancel: dispose of dialogue with no authentication object
-	cancelButton.addActionListener(new ActionListener() 
-	    {
-		public void actionPerformed(ActionEvent e) {
-		    pwAuth = null;
-		    dispose();
-		}
-	    }
-	    );		
-	pack();
-
-	// set position on screen (otherwise defaults to top left)
-        int guiWidth = frame.getWidth();
-        int guiHeight = frame.getHeight();
-        int guiX = frame.getX();
-        int dialogWidth = (int) this.getPreferredSize().getWidth();
-        int dialogHeight = (int) this.getPreferredSize().getHeight();
-        int screenWidth = Math.round((float) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
-        if(guiX+guiWidth+(dialogWidth-guiWidth)/2>screenWidth)
-            this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(0, (guiHeight - dialogHeight) / 3));
-        else
-            this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2), Math.max(0, (guiHeight - dialogHeight) / 3));
-
-    }
-
-    /**
-     * Create APasswordDialog belonging to given frame, with default prompt
-     * @param frame owner of dialogue
-     */
-    protected APasswordDialog(Frame frame) {
-	this(frame,"Authentication required");
-    }
-    
-    /** Gets authentication object
-     * 
-     * @return PasswordAuthentication object required by Authenticator
-     */
-    protected PasswordAuthentication getPasswordAuthentication() {
-	return pwAuth;
-    }
-    
-    /**
-     * Displays username/password dialogue and returns authentication object. 
-     * @param frame owner of dialogue, e.g. Atlantis GUI
-     * @prompt prompt to show user
-     * @return authentication object constructed from entered username/password,
-     *         or null if dialogue cancelled
-     */
-    public static PasswordAuthentication showDialog(Frame frame, String prompt) {
-	APasswordDialog d = new APasswordDialog(frame,prompt);
-	d.setVisible(true);
-	return d.getPasswordAuthentication();
-    }
-    
-    /**
-     * Displays username/password dialogue with default prompt and returns authentication object. 
-     * @param frame owner of dialogue, e.g. Atlantis GUI
-     * @return authentication object constructed from entered username/password,
-     *         or null if dialogue cancelled
-     */
-    public static PasswordAuthentication showDialog(Frame frame) {
-	APasswordDialog d = new APasswordDialog(frame);
-	d.setVisible(true);
-	return d.getPasswordAuthentication();
-    }
-
-    /**
-     * Constructs and returns Authenticator object as required by
-     * java.net.Authenticator.setDefault()
-     * @param f owner of dialogue, e.g. Atlantis GUI
-     * @return Authenticator that will create APasswordDialog when called
-     */
-    public static Authenticator getAuthenticator(Frame f) {
-	return new PasswordAuthenticator(f);
-    }
-    
-    /**
-     * Private nested Authenticator subclass to be instantiated and returned
-     * by getAuthenticator().
-     * @author waugh
-     */
-    private static class PasswordAuthenticator extends Authenticator {
-	protected Frame f;
-	public PasswordAuthenticator(Frame frame) {f=frame;}
-	protected PasswordAuthentication getPasswordAuthentication() {
-	    logger.info("Authentication required: requesting host:"+getRequestingHost());
-	    logger.info("Authentication required: requesting site:"+getRequestingSite());
-	    logger.info("Authentication required: requesting protocol:"+getRequestingProtocol());
-	    logger.info("Authentication required: requesting prompt:"+getRequestingPrompt());
-	    logger.info("Authentication required: requesting scheme:"+getRequestingScheme());
-	    //	    logger.info("Authentication required: requesting URL:"+getRequestingURL());
-	    String prompt = "Authentication required by host "+getRequestingHost()+
-		" with prompt \""+getRequestingPrompt()+"\"";
-	    return APasswordDialog.showDialog(f,prompt);
-	}
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/APointerPositionWindow.java b/graphics/AtlantisJava/src/atlantis/gui/APointerPositionWindow.java
deleted file mode 100755
index dffdc697ca1d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/APointerPositionWindow.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Color;
-import java.awt.Frame;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-
-import javax.swing.JFrame;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTextPane;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-
-import java.awt.BorderLayout;
-import java.awt.event.MouseListener;
-import javax.swing.JLabel;
-
-
-/**
- * The pointer postion window apears when selected in the preferences menu or
- * by using o+right click.
- * 
- * @author Sebastian Boeser
- */
-public class APointerPositionWindow extends JFrame 
-             implements WindowListener, ActionListener, MouseListener
-             
-{
-    private static JLabel infoLabel;
-    private static JPopupMenu popupMenu;
-    private static JMenuItem menuItemClearTextPane;
-    private static JTextPane textPane;
-    private static JScrollPane scrollPane;
-    private static APointerPositionWindow instance = null;
-    private static final AGlobals globals = AGlobals.instance();
-
-    public static APointerPositionWindow getInstance()
-    {
-        if (instance == null)
-            instance = new APointerPositionWindow();
-        return instance;
-    }
-    
-    private APointerPositionWindow()
-    {
-	  	this.setTitle("Your Pointer Position");
-	  	AIcon.setIconImage(this);
-    
-      //delete window if closed
-      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-      addWindowListener(this);
- 
-      //Tell user how to use this
-      infoLabel = new JLabel();
-      infoLabel.setText("To output your pointer position use: O + Right click\n");
-        
-      // popup menu at text pane (info output at bottom half of window)
-      popupMenu = new JPopupMenu();
-      menuItemClearTextPane = new JMenuItem("Erase output");
-      menuItemClearTextPane.addActionListener(this);
-      popupMenu.add(menuItemClearTextPane);
-        
-      // Text panel to show coordinates
-      textPane = new JTextPane();
-      textPane.setEditable(false);
-      textPane.setBackground(Color.white);
-      textPane.setText("Coordinates will be displayed here\n");
-      textPane.addMouseListener(this);
-        
-      // Embedd in a scroll frame       
-      scrollPane = new JScrollPane(textPane);
-      scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-
-      add(infoLabel,BorderLayout.NORTH);
-      add(scrollPane,BorderLayout.CENTER);
-        
-      // set the initial location
-      Frame gui = globals.getGuiFrame();
-      int guiWidth = gui.getWidth();
-      int guiHeight = gui.getHeight();
-      int guiX = gui.getX();
-      int dialogWidth = (int) this.getPreferredSize().getWidth();
-      int dialogHeight = (int) this.getPreferredSize().getHeight();
-      int screenWidth = Math.round((float) Toolkit.getDefaultToolkit()
-               .getScreenSize().getWidth());
-      if (guiX + guiWidth + (dialogWidth - guiWidth) / 2 > screenWidth)
-        this.setLocation(Math.max(0, screenWidth - dialogWidth), Math.max(
-                    0, (guiHeight - dialogHeight) / 3));
-      else
-        this.setLocation(Math.max(0, guiX + (guiWidth - dialogWidth) / 2),
-                    Math.max(0, (guiHeight - dialogHeight) / 3));
-      //Layout the window
-      pack();
-    }
-    
-    public static void append(String s)
-    {
-        String text = textPane.getText();
-        int size = text.length();
-        //just as a precaution incase too many coordinates output
-        if(size > 51200) // 50kB
-        {
-            textPane.setText(""); // clear all
-            text = text.substring(size / 2, size - 1) + "\n";
-        }
-        s = text + "\n" + s;
-        textPane.setText(s);
-    }
-    
-    void clearTextPane(ActionEvent e)
-    {
-        textPane.setText("Coordinates will be displayed here\n");
-    }
-    
-    public void dispose()
-    {
-        instance = null;
-        super.dispose();
-    }
-    
-    // clear info output if the popup menu item was pressed
-    public void actionPerformed(ActionEvent e)
-    {
-      clearTextPane(e);
-    }
-
-    
-    public void windowClosed(WindowEvent e)
-    {
-        // when this window is disposed, the menu item is switched off
-        APreferencesControl.setPosMenuItem(false);
-    }
-    
-    public void mousePressed(MouseEvent evt)
-    {
-        showPopupMenu(evt);
-    }
-
-    public void mouseReleased(MouseEvent evt)
-    {
-        showPopupMenu(evt);
-    }
-
-    private void showPopupMenu(MouseEvent evt)
-    {
-        // decides whether right 'trigger' action was performed to show
-        // the popup menu (on the text pane - info output in GUI)
-        if (evt.isPopupTrigger())
-        {
-            popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
-        }
-    }
-    
-    // Empty implementations of unused windows events
-    public void windowOpened(WindowEvent e){} 
-    public void windowClosing(WindowEvent e){}
-    public void windowIconified(WindowEvent e){}
-    public void windowDeiconified(WindowEvent e){}
-    public void windowActivated(WindowEvent e){}
-    public void windowDeactivated(WindowEvent e){}
-
-    // Empty implementation of unused mouse events
-    public void mouseClicked(MouseEvent e) {}
-    public void mouseEntered(MouseEvent e) {}
-    public void mouseExited(MouseEvent e) {}
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/APopupHelper.java b/graphics/AtlantisJava/src/atlantis/gui/APopupHelper.java
deleted file mode 100644
index ef1dd510ce04..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/APopupHelper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * APopupHelper.java
- *
- * Created on 24 October 2007, 09:12
- *
- * @author Adam Davison
- */
-
-package atlantis.gui;
-
-import javax.swing.JPopupMenu;
-import javax.swing.JMenuItem;
-import java.awt.Point;
-import java.awt.Component;
-
-/**
- *
- * @author Adam Davison
- */
-
-public class APopupHelper {
-        
-    public static void showPopupMenu(Point p, Component window, JMenuItem[] items) {
-        JPopupMenu pop = getPopupMenu(items);
-        
-        if (pop == null) {
-            return;
-        }
-        
-        pop.show(window, (int)p.getX(), (int)p.getY());
-    }
-    
-    public static JPopupMenu getPopupMenu(JMenuItem[] items) {
-        
-        if (items == null) {
-            return null;
-        }
-        
-        JPopupMenu jp = new JPopupMenu();
-        
-        for (int i = 0; i < items.length; i++) {
-            jp.add(items[i]);
-        }
-        
-        return jp;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/APreferencesControl.java b/graphics/AtlantisJava/src/atlantis/gui/APreferencesControl.java
deleted file mode 100755
index f329c437e383..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/APreferencesControl.java
+++ /dev/null
@@ -1,429 +0,0 @@
-package atlantis.gui;
-
-import java.io.File;
-import java.awt.Frame;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JOptionPane;
-import javax.swing.JSeparator;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.ALegendWindow;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.APar;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-
-
-/**
- * Preferences menu item
- *
- * @author Gary Taylor, Zdenek Maxa
- */
-public class APreferencesControl extends JMenu implements ActionListener, ItemListener
-{
-	private static ALogger logger = ALogger.getLogger(APreferencesControl.class);
-	
-	private static AGlobals globals = AGlobals.instance();
-	
-	protected static APar parameterStore = APar.instance();
-	
-    private static final String LAYOUT = "Change Canvas Layout";
-    private static final String SELECT_COLOR_MAP = "Select Color Map";
-    private static final String COLOR_MAP_EDITOR = "Color Map Editor";
-    private static final String READ_COLOR_MAP = "Read Color Map";
-    private static final String WRITE_COLOR_MAP = "Save Current Color Map";
-    private static final String WRITE_CONFIG = "Save Current Configuration";
-    private static final String POINTER_POSITION = "Show Pointer Position Window";
-    private static final String LEGEND = "Show Legend Window";
-    private static final String CANVAS_TITLE = "Show Canvas Title";
-    private static final String WINDOW_TITLES = "Show Window Titles";
-    private static final String FISHEYE_LOGO = "Show Fisheye Indicator";
-    private static final String HIDE_SCALES = "Hide Scales";
-    private static final String ATLAS_LOGO = "Show ATLAS logo on saved images";
-    private static final String ANTI_ALIASING = "Use Anti-Aliasing";
-    private static final String OPEN_GL = "Use OpenGL";
-
-    private static JCheckBoxMenuItem posMenuItem;
-    private static JCheckBoxMenuItem legMenuItem;
-    private static JCheckBoxMenuItem canvasTitleMenuItem;
-    private static JCheckBoxMenuItem windowTitleMenuItem;
-    private static JCheckBoxMenuItem fisheyeIndicatorMenuItem;
-    private static JCheckBoxMenuItem hideScalesMenuItem;
-    private static JCheckBoxMenuItem atlasLogoMenuItem;
-    private static JCheckBoxMenuItem aliasMenuItem;
-    private static JCheckBoxMenuItem openglMenuItem;
-
-    // ----------------------------------------------------------------------
-
-    public APreferencesControl()
-    {
-        super("Preferences");
-        this.setToolTipText("Preferences");
-
-        add(SELECT_COLOR_MAP).addActionListener(this);
-        add(COLOR_MAP_EDITOR).addActionListener(this);
-        add(READ_COLOR_MAP).addActionListener(this);
-        add(WRITE_COLOR_MAP).addActionListener(this);
-
-        add(new JSeparator());
-
-        add(LAYOUT).addActionListener(this);
-        add(WRITE_CONFIG).addActionListener(this);
-
-        add(new JSeparator());
-
-        posMenuItem = new JCheckBoxMenuItem(POINTER_POSITION, false);
-        posMenuItem.addItemListener(this);
-        add(posMenuItem);
-
-        legMenuItem = new JCheckBoxMenuItem(LEGEND, false);
-        legMenuItem.addItemListener(this);
-        add(legMenuItem);
-
-        add(new JSeparator());
-        
-        canvasTitleMenuItem = new JCheckBoxMenuItem(CANVAS_TITLE, parameterStore.get("Prefs", "CanvasTitle").getStatus());
-        canvasTitleMenuItem.addItemListener(this);
-        add(canvasTitleMenuItem);
-
-        windowTitleMenuItem = new JCheckBoxMenuItem(WINDOW_TITLES, parameterStore.get("Prefs", "WindowTitle").getStatus());
-        windowTitleMenuItem.addItemListener(this);
-        add(windowTitleMenuItem);
-
-        fisheyeIndicatorMenuItem = new JCheckBoxMenuItem(FISHEYE_LOGO, parameterStore.get("Prefs", "FisheyeIndicator").getStatus());
-        fisheyeIndicatorMenuItem.addItemListener(this);
-        add(fisheyeIndicatorMenuItem);
-        
-        hideScalesMenuItem = new JCheckBoxMenuItem(HIDE_SCALES, parameterStore.get("Prefs", "HideScales").getStatus());
-        hideScalesMenuItem.addItemListener(this);
-        add(hideScalesMenuItem);
-        
-        atlasLogoMenuItem = new JCheckBoxMenuItem(ATLAS_LOGO, parameterStore.get("Prefs", "AtlasLogo").getStatus());
-        atlasLogoMenuItem.addItemListener(this);
-        add(atlasLogoMenuItem);
-       
-        
-        add(new JSeparator());
-        
-        aliasMenuItem = new JCheckBoxMenuItem(ANTI_ALIASING, parameterStore.get("Prefs", "AntiAlias").getStatus());
-        aliasMenuItem.addItemListener(this);
-        add(aliasMenuItem);
-        
-        openglMenuItem = new JCheckBoxMenuItem(OPEN_GL, parameterStore.get("Prefs", "OpenGL").getStatus());
-        openglMenuItem.addItemListener(this);
-        
-        if (globals.getUseOpenGL()) {
-            add(new JSeparator());
-            add(new AOpenGLControl());
-        }
-    } // APreferencesControl() ----------------------------------------------
-
-
-
-    public void itemStateChanged(ItemEvent e)
-    {
-        if(((JCheckBoxMenuItem)e.getSource()).getText().equals(CANVAS_TITLE))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-            {
-                parameterStore.get("Prefs", "CanvasTitle").setStatus(true);
-                ACanvas.getCanvas().getTitleBar().setVisible(true);
-            }
-            else
-            {
-                parameterStore.get("Prefs", "CanvasTitle").setStatus(false);
-                ACanvas.getCanvas().getTitleBar().setVisible(false);
-            }
-            ACanvas.getCanvas().validate();
-            ACanvas.getCanvas().repaint();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(POINTER_POSITION))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                APointerPositionWindow.getInstance().setVisible(true);
-            else
-                APointerPositionWindow.getInstance().dispose();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(LEGEND))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-            {
-                ALegendWindow legendWindow = ALegendWindow.getInstance();
-                // Want to deselect legend menu item if legend window is closed
-                legendWindow.addWindowListener(new WindowAdapter() {
-                	@Override
-                	public void windowClosed(WindowEvent e) {
-                		setLegMenuItem(false);
-                	}
-                });
-
-                legendWindow.setVisible(true);
-                ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-            }
-            else
-                ALegendWindow.getInstance().dispose();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(WINDOW_TITLES))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "WindowTitle").setStatus(true);
-            else
-                parameterStore.get("Prefs", "WindowTitle").setStatus(false);
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(FISHEYE_LOGO))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "FisheyeIndicator").setStatus(true);
-            else
-                parameterStore.get("Prefs", "FisheyeIndicator").setStatus(false);
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(HIDE_SCALES))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "HideScales").setStatus(true);
-            else
-                parameterStore.get("Prefs", "HideScales").setStatus(false);
-            
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(ATLAS_LOGO))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "AtlasLogo").setStatus(true);
-            else
-                parameterStore.get("Prefs", "AtlasLogo").setStatus(false);
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(ANTI_ALIASING))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "AntiAlias").setStatus(true);
-            else
-                parameterStore.get("Prefs", "AntiAlias").setStatus(false);
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        else if(((JCheckBoxMenuItem)e.getSource()).getText().equals(OPEN_GL))
-        {
-            if(e.getStateChange() == ItemEvent.SELECTED)
-                parameterStore.get("Prefs", "OpenGL").setStatus(true);
-            else
-                parameterStore.get("Prefs", "OpenGL").setStatus(false);
-            System.out.println("No effect at present");
-        }
-    } // itemStateChanged() -------------------------------------------------
-
-
-
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-
-        if(LAYOUT.equals(action))
-        {
-            new ALayoutDialog();
-        }
-        else if(SELECT_COLOR_MAP.equals(action))
-        {
-            new AColorMapDialog();
-        }
-        else if(COLOR_MAP_EDITOR.equals(action))
-        {
-            AColorMapEditor.getInstance().setVisible(true);
-        }
-        else if(READ_COLOR_MAP.equals(action))
-        {
-            new AReadColorMapChooser().showMyDialog();
-        }
-        else if(WRITE_COLOR_MAP.equals(action))
-        {
-            writeColorMap();
-        }
-        else if(WRITE_CONFIG.equals(action))
-        {
-            writeConfiguration();
-        }
-
-    } // actionPerformed() --------------------------------------------------
-
-
-
-    private static void writeColorMap()
-    {
-        String fileName = ".Atlantis-colormap.xml";
-        String title = "Saving current color map";
-        Frame gui = globals.getGuiFrame();
-
-        logger.debug("Going to write customised color map file ...");
-        String data = AColorMap.getColorMapXML();
-
-        // color map data should be ready and valid - store it into file
-        try
-        {
-            AGUIUtilities.chooseFileAndWrite(gui, System.getProperty("user.home"),
-                    fileName, data.getBytes(), title, "xml");
-            logger.debug("Current color map written (or cancelled by user).");
-        }
-        catch(AAtlantisException ex)
-        {
-            JOptionPane.showMessageDialog(gui, ex.getMessage(),
-                    title, JOptionPane.ERROR_MESSAGE);
-            logger.debug(ex.getMessage(), ex);
-        }
-
-    } // writeColorMap() ----------------------------------------------------
-
-
-
-    private static void writeConfiguration()
-    {
-    	String FILE_SEPAR = System.getProperty("file.separator");
-        String fileName = globals.getUserConfigFile();
-        String title = "Saving current configuration";
-        String fileNameFull = System.getProperty("user.home") + FILE_SEPAR + fileName;
-        String sourceFileNameFull = "";
-        Frame gui = globals.getGuiFrame();
-        
-        logger.debug("Writing customised configuration ...");
-
-        // get currently used configuration file and data from it
-        File user = new File(fileNameFull);
-        if(user.canRead())
-        {
-            sourceFileNameFull = fileNameFull;
-        	logger.debug("User has already got " + fileNameFull + 
-        			     " this will be used as source.");
-        }
-        else
-        {
-            sourceFileNameFull = globals.getHomeDirectory() +
-                                 "configuration" + FILE_SEPAR +
-                                 "config.xml";
-            logger.debug(sourceFileNameFull + " will be used as source.");
-            
-        }
-
-        String data = AConfigWriter.getConfiguration(sourceFileNameFull);
-        if(data == null)
-        {
-            String msg = "Error when reading source configuration from file\n" +
-                         sourceFileNameFull;
-            logger.error(msg);
-            JOptionPane.showMessageDialog(gui, msg, title,
-                    JOptionPane.INFORMATION_MESSAGE);
-            return;
-        }
-
-        // configuration data should be ready and valid - store it into file
-        try
-        {
-        	logger.debug("Current customised configuration made, going to save it ...");
-            AGUIUtilities.chooseFileAndWrite(gui, System.getProperty("user.home"),
-                    fileName, data.getBytes(), title, "xml");
-            logger.debug("Saving customised configuration successful (or cancelled by user).");
-        }
-        catch(AAtlantisException ex)
-        {
-        	String m = ex.getMessage();
-            JOptionPane.showMessageDialog(gui, m, title,
-            		                      JOptionPane.ERROR_MESSAGE);
-            logger.error(m);
-            logger.debug(m, ex);
-        }
-
-    } // writeConfiguration() -----------------------------------------------
-
-    public static void setPosMenuItem(boolean selected)
-    {
-        posMenuItem.setSelected(selected);
-    }
-
-    public static void setLegMenuItem(boolean selected)
-    {
-        legMenuItem.setSelected(selected);
-    }
-    
-    public static void setWindowTitleMenuItem(boolean selected)
-    {
-        windowTitleMenuItem.setSelected(selected);
-        parameterStore.get("Prefs", "WindowTitle").setStatus(selected);
-    }
-    
-    public static void setFisheyeIndicatorMenuItem(boolean selected)
-    {
-        fisheyeIndicatorMenuItem.setSelected(selected);
-        parameterStore.get("Prefs", "FisheyeIndicator").setStatus(selected);
-    }
-    
-    public static void setHideScalesMenuItem(boolean selected)
-    {
-    	hideScalesMenuItem.setSelected(selected);
-    	parameterStore.get("Prefs", "HideScales").setStatus(selected);
-	}
-    
-    public static void setAtlasLogoMenuItem(boolean selected)
-    {
-        atlasLogoMenuItem.setSelected(selected);
-        parameterStore.get("Prefs", "AtlasLogo").setStatus(selected);
-    }
-    
-    public static void setAliasMenuItem(boolean selected)
-    {
-        if (!AGlobals.isAtlantisHeadless()) {
-            aliasMenuItem.setSelected(selected);
-        }
-        parameterStore.get("Prefs", "AntiAlias").setStatus(selected);
-    }
-
-    public static boolean getWindowTitleMenuItem()
-    {
-        if(windowTitleMenuItem!=null)
-            return windowTitleMenuItem.isSelected();
-        else
-            return parameterStore.get("Prefs", "WindowTitle").getStatus();
-    }
-    
-    public static boolean getFisheyeIndicatorMenuItem()
-    {
-        if(fisheyeIndicatorMenuItem!=null)
-            return fisheyeIndicatorMenuItem.isSelected();
-        else
-            return parameterStore.get("Prefs", "FisheyeIndicator").getStatus();
-    }
-    
-    public static boolean getHideScalesMenuItem()
-    {
-    	if(hideScalesMenuItem!=null)
-    		return hideScalesMenuItem.isSelected();
-    	else
-    		return parameterStore.get("Prefs", "HideScales").getStatus();
-    }
-    
-    
-    public static boolean getAtlasLogoMenuItem()
-    {
-        if(atlasLogoMenuItem!=null)
-            return atlasLogoMenuItem.isSelected();
-        else
-            return parameterStore.get("Prefs", "AtlasLogo").getStatus();
-    }
-    
-    public static boolean getAliasMenuItem()
-    {
-        return parameterStore.get("Prefs", "AntiAlias").getStatus();
-        /*if(aliasMenuItem!=null)
-            return aliasMenuItem.isSelected();
-        else
-            return false;*/
-    }
-
-} // class APreferencesControl ==============================================
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AReadColorMapChooser.java b/graphics/AtlantisJava/src/atlantis/gui/AReadColorMapChooser.java
deleted file mode 100755
index 303935d5c1e8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AReadColorMapChooser.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package atlantis.gui;
-
-import java.io.File;
-
-import atlantis.canvas.ACanvas;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.colormap.AColorMap;
-
-/**
- * The dialog which appears when a user asks to read a new colormap
- */
-public class AReadColorMapChooser extends AXMLFileChooser
-{
-	private static final String FILE_SEPAR = System.getProperty("file.separator");
-	private static final AGlobals globals = AGlobals.instance();
-	
-    public AReadColorMapChooser()
-    {
-        super(System.getProperty("user.dir") + FILE_SEPAR
-                + "configuration" + FILE_SEPAR + "colormap.xml", globals.getGuiFrame());
-    }
-    
-    public boolean processSelectedFile(File file)
-    {
-        if (file.canRead())
-        {
-            AColorMap.readColorMap(file.getPath());
-            AColorMapEditor.getInstance().updateColors();
-            AGUI.getGUI().repaintTable();
-            ACanvas.getCanvas().repaintAllFromScratch();
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AReadFileChooser.java b/graphics/AtlantisJava/src/atlantis/gui/AReadFileChooser.java
deleted file mode 100755
index 48ff74726576..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AReadFileChooser.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package atlantis.gui;
-
-import java.io.File;
-
-import javax.swing.JFileChooser;
-import javax.swing.filechooser.FileFilter;
-import javax.swing.JCheckBox;
-import javax.swing.JPanel;
-
-import java.awt.Component;
-import java.awt.BorderLayout;
-
-import atlantis.config.ADefaultValues;
-
-/**
- * This dialog appears when a user asks to read events from a file
- * @author sboeser
- */
-public class AReadFileChooser extends JFileChooser {
-  //Check box indicating to set the new default location  
-  private JCheckBox defaultLoc = null;
-
-  /**
-   * Constructor with a default path
-   * @param path the default path
-   */
-  public AReadFileChooser(String path) {
-
-    //Create a file chooser pointing to path
-    //Use users default dir if null
-    super(path);
-
-    //Create a new panel with the checkbox
-    JPanel p = new JPanel();
-    defaultLoc = new JCheckBox("default location");
-    p.setLayout(new BorderLayout());
-    p.add(defaultLoc, BorderLayout.SOUTH);
-    setAccessory(p);
-
-
-    setFileFilter(new XMLFilter());
-  }
-
-  /**
-   * Show the dialog waiting for user input
-   */
-  @Override
-  public int showOpenDialog(Component parent) {
-
-    //Get the return state 
-    int state = super.showOpenDialog(parent);
-    
-    //Store the default location if user pressed ok
-    if (state == APPROVE_OPTION) {
-      //Only if checkbox is ticked
-      if (defaultLoc.isSelected()) {
-        // save last visited location
-        ADefaultValues.set("LastEventFilesSourceDir",
-                getSelectedFile().getParent() + System.getProperty("file.separator"));
-      }
-    }
-    
-    //return the result state
-    return state;
-  }
-  
- /**
-  * A filter for XML files
-  */
-  private static class XMLFilter extends FileFilter {
-    
-    /**
-     * Acceptance algorithm for xml files and directories
-     * @param file the file to test
-     * @return true if accepted
-     */
-    public boolean accept(File file) {
-      
-      //accept all directories
-      if (file.isDirectory()) return true;
-
-      //check the file ending
-      String name = file.getName().toLowerCase();
-
-      if (name.endsWith(".xml")) return true;
-      if (name.endsWith(".zip")) return true;
-      if (name.endsWith(".gzip")) return true;
-      if (name.endsWith(".gz"))  return true;
-     
-      //None of the requested criteria matched
-      return false;
-    }
-
-    /**
-     * Gives a description of the files that are accepted by this filter
-     * @return string with list of file endings
-     */
-    public String getDescription() {
-      return ".xml, .zip, .gzip, .gz";
-    }
-  }  
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AReadGeometryChooser.java b/graphics/AtlantisJava/src/atlantis/gui/AReadGeometryChooser.java
deleted file mode 100755
index ae77061aeeaf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AReadGeometryChooser.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package atlantis.gui;
-
-import atlantis.geometry.AEndcapTRTDetector;
-
-import java.awt.Frame;
-import java.io.File;
-import javax.swing.JOptionPane;
-
-import atlantis.canvas.ACanvas;
-import atlantis.data.ACalorimeterData;
-import atlantis.geometry.AAtlasDetector;
-import atlantis.geometry.ABarrelSiliconDetector;
-import atlantis.geometry.ABarrelTRTDetector;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.geometry.AEndcapSiliconDetector;
-import atlantis.globals.AGlobals;
-
-
-/**
- * The dialog which appears when a user asks to read in geometry XML file
- */
-public class AReadGeometryChooser extends AXMLGeometryChooser {
-
-  private static final AGlobals globals = AGlobals.instance();
-
-  public AReadGeometryChooser() {
-    super();
-  }
-
-  public void fileChosen(int state) {
-	Frame gui = globals.getGuiFrame();
-    do {
-      if(state==APPROVE_OPTION) {
-        File file=getSelectedFile();
-
-        if(file!=null)
-          if(file.canRead()) {
-            processSelectedFile(file);
-            break;
-          } else {
-            JOptionPane.showMessageDialog(gui,
-                "Unable to open " + file, "IO Error", JOptionPane.ERROR_MESSAGE);
-          }
-      } else
-        break;
-      state=showOpenDialog(gui);
-    } while(true);
-  }
-
-  public boolean processSelectedFile(File file)
-  {
-      if(file.canRead())
-      {
-          // ACalorimterDetector keeps a list of its instances, clear this list.
-          ACalorimeterDetector.clear();
-          ABarrelSiliconDetector.clear();
-          AEndcapSiliconDetector.clear();
-          ABarrelTRTDetector.clear();
-          AEndcapTRTDetector.clear();
-
-          String muonname = file.getParent() + System.getProperty("file.separator") +
-                            file.getName().substring(0, 1) + "Muon" +
-                            file.getName().substring(1);
-          File mufile = new File(muonname);
-          if(mufile.canRead())
-          {
-              AAtlasDetector.setDetector(new AAtlasDetector(file.getAbsolutePath(), muonname));
-          }
-          else
-          {
-              AAtlasDetector.setDetector(new AAtlasDetector(file.getAbsolutePath()));
-          }
-          ACalorimeterData.remakeHitToGeometryMapping();
-          ACanvas.getCanvas().repaintAllFromScratch();
-          return true;
-      }
-      return false;
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ASaveCanvasDialog.java b/graphics/AtlantisJava/src/atlantis/gui/ASaveCanvasDialog.java
deleted file mode 100755
index 2f0d67a39820..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ASaveCanvasDialog.java
+++ /dev/null
@@ -1,477 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.image.RasterFormatException;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.filechooser.FileFilter;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.canvas.ACanvas;
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.AUtilities;
-import atlantis.config.ADefaultValues;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.encoders.AImageEncoder;
-import atlantis.utils.ALogger;
-
-
-/**
- * Dialog window for saving a picture of the current canvas. This dialog allows
- * the user to pick the resolution and file type. 
- *
- * @author Eric Jansen
- * @author Sebastian Boeser
- */
-public class ASaveCanvasDialog extends JFileChooser
-  implements PropertyChangeListener {
-  
-    private final ALogger logger = ALogger.getLogger(ASaveCanvasDialog.class);
-    private static AEventManager eventManager = AEventManager.instance();
-	private static final AGlobals globals = AGlobals.instance();
-
-    // GUI component that contains the resolution selection panel.
-    private AResolutionChooser resolutionChooser;
-
-    // Possible image widths shown to user. Heights are fixed by layout restrictions.
-    private final int[] IMAGE_WIDTHS = {800, 1024, 2400, 5000};//{512, 800, 1024, 2400};
-
-    // Default selected image width. Also the (fixed) width of the EPS images.
-    private final int DEFAULT_IMAGE_WIDTH = 1;
-
-    // String holding the default file name, need to be reset after change of file type.
-    private String defaultFileName = null;
-
-    // Private image encoder instance
-    private final AImageEncoder imageEncoder = new AImageEncoder();
-
-
-    /**
-     * Constructor creating the dialog
-     */
-    public ASaveCanvasDialog()
-    {
-      //Initialize the file chooser dialog
-      super(ADefaultValues.get("LastCanvasPlotSaveDir"));
-      setDialogTitle("Save Canvas");
-
-      //Add file filters
-      addChoosableFileFilter(new AFileFilter("eps", "Encapsulated Postscript (*.eps)"));
-      addChoosableFileFilter(new AFileFilter("png", "Portable Network Graphics (*.png)"));
-      addChoosableFileFilter(new AFileFilter("svg", "Scalable Vector Graphics (*.svg)"));
-
-      //Set default values
-      setAcceptAllFileFilterUsed(false);
-      // In OpenJDK JRE filter is set to null by setAcceptAllFileFilterUsed, so
-      // have to set it to something:
-      setFileFilter(getChoosableFileFilters()[1]);
-      
-      //Add the resoluton chooser
-      resolutionChooser = new AResolutionChooser();
-      setAccessory(resolutionChooser);
-      addPropertyChangeListener(this);
-
-      //Set a default file name and extension
-      defaultFileName = makeEventFileName() + "-" + AUtilities.getDateTimeString();
-      String ext = ((AFileFilter) getFileFilter()).getExtension();
-      setSelectedFile(new File(defaultFileName + "." + ext));
-    }
-
-    /**
-     * Pops up the "Save Canvas" dialog.
-     */
-    public void showDialog(){
-      //Show dialog with GUI as parent
-      showSaveDialog(globals.getGuiFrame());
-    }
-
-
-    /**
-     * @return the defualt file name
-     */
-    public String getDefaultFileName()
-    {
-      return defaultFileName;
-    }
-
-    /**
-     * Get the currently selected image width.
-     * @return selected image width
-     */
-    public int getImageWidth()
-    {
-        return resolutionChooser.getImageWidth();
-    }
-
-
-
-    /**
-     * Gets the image height on this button.
-     * @return image height
-     */
-    public int getImageHeight()
-    {
-        return resolutionChooser.getImageHeight();
-    }
-
-
-
-    /**
-     * Called when the user has selected a file and pushes the save button.
-     * This function will only
-     * approve the selection when the actual saving was successful.
-     */
-  @Override
-    public void approveSelection()
-    {
-	  	Frame gui = globals.getGuiFrame();
-        File file = new File(getSelectedFile().getAbsolutePath());
-
-        // If the file exists and the user does not want to overwrite it, cancel the save operation.
-        // The dialog is still on screen and the user can pick another file.
-        if (file.exists() && JOptionPane.showConfirmDialog(gui, "File exists, overwrite?",
-                "File exists", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION)
-            return;
-
-        // All exceptions are handled equally: the user is sent back to the save canvas dialog.
-        try {
-            String type = ((AFileFilter)getFileFilter()).getExtension();
-            // Since EPS files can be pretty big, they're saved directly
-            if (type.equals("eps")){
-              // Since vector images are scalable, the image size only determines the relative size of
-              // the data objects. To make the generated EPS independent of the canvas size, we always
-              // rescale the image to the default size.
-              int width = IMAGE_WIDTHS[DEFAULT_IMAGE_WIDTH];
-              int height = ACanvas.getCanvas().getRespectiveHeight(width);
-              imageEncoder.saveEPS(width,height,file);
-            } else if (type.equals("png")) {
-              // Generate the canvas image in memory
-              byte[] data;
-              int width = resolutionChooser.getImageWidth();
-              int height = resolutionChooser.getImageHeight();
-              data = imageEncoder.getPNGData(width,height);
-              // And finally write the image to the selected file.
-              OutputStream stream = new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath()));
-              stream.write(data);
-              stream.close();
-            } else if (type.equals("svg")){
-                // Since vector images are scalable, the image size only determines the relative size of
-                // the data objects. To make the generated EPS independent of the canvas size, we always
-                // rescale the image to the default size.
-                int width = IMAGE_WIDTHS[DEFAULT_IMAGE_WIDTH];
-                int height = ACanvas.getCanvas().getRespectiveHeight(width);
-                imageEncoder.saveSVG(width,height,file);
-              } else{
-              //Throw an exception if none of the above
-              throw new AAtlantisException("Unknown image type: '" + type + "'");
-            }
-        }
-        catch(RasterFormatException e)
-        {
-            JOptionPane.showMessageDialog(gui,
-                    "The chosen resolution for canvas is too high, try a lower option!",
-                    "Error saving canvas", JOptionPane.INFORMATION_MESSAGE);
-            AGUI.getGUI().restoreDefaults();
-            this.cancelSelection();
-        } catch(Exception e)
-        {
-            // Show a dialog with the error message.
-            JOptionPane.showMessageDialog(AGUI.getGUI(), e.getMessage(),
-                    "Error saving canvas", JOptionPane.ERROR_MESSAGE);
-
-            // The selection is not approved, the user has to select another file or type.
-            return;
-        }
-
-        // This approves the selection and ends the saving processs.
-        super.approveSelection();
-        ADefaultValues.set("LastCanvasPlotSaveDir", file.getParent() + 
-        		System.getProperty("file.separator"));
-
-    }
-
-    
-
-    /**
-     * Property change listener for the JFileChooser
-     * @param e property change event sent by JFileChooser
-     */
-    public void propertyChange(PropertyChangeEvent e)
-    {
-        if (e.getPropertyName().equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY))
-        {
-            String oldExt = ((AFileFilter)e.getOldValue()).getExtension();
-            String newExt = ((AFileFilter)e.getNewValue()).getExtension();
-
-            if ((oldExt.equals("eps") || oldExt.equals("svg")) && !(newExt.equals("eps") || newExt.equals("svg")))
-            {
-                for (int i=0; i<resolutionChooser.getComponentCount(); i++)
-                {
-                    resolutionChooser.getComponent(i).setEnabled(true);
-                }
-            }
-            else if (!(oldExt.equals("eps") || oldExt.equals("svg")) && ((newExt.equals("eps")) || newExt.equals("svg")))
-            {
-                for (int i=0; i<resolutionChooser.getComponentCount(); i++)
-                    resolutionChooser.getComponent(i).setEnabled(false);
-            }
-
-            // The behaviour of the JFileChooser is somewhat strange. Regardless of what the user has entered,
-            // the input text field will be emptied when the user selects another file type. It is impossible
-            // to retrieve the text that was in this field, so we just reset the default file name.
-            if (getSelectedFile() == null)
-            {
-                // Reset our default with the new extension
-                setSelectedFile(new File(defaultFileName + "." + newExt));
-                updateUI();
-                rescanCurrentDirectory();
-            }
-        }
-    }
-
-
-
-    /**
-     * Generates a file name based on the current event name and the visible projections.
-     * @return auto generated image file name
-     */
-    private static String makeEventFileName()
-    {
-        String name = "Untitled";
-        AEvent ev = eventManager.getCurrentEvent();
-        if(ev != null)
-        {
-            name = ev.getSourceName();
-            if(name.toLowerCase().endsWith(".xml"))
-            {
-                // current event comes from XML file, run and event number
-                // are probably already part of the current filename
-                name = name.substring(0, name.length() - 4);
-            }
-            else
-            {
-                // current event was probably retrieved online, add run and
-                // event numbers into the file name of the canvas plot
-                if(! ("n/a".equals(ev.getRunNumber()) &&
-                      "n/a".equals(ev.getEventNumber())))
-                {
-                    name += "_" + ev.getRunNumber() + "_" + ev.getEventNumber();
-                }
-            }
-        }
-
-        ACanvas canvas = ACanvas.getCanvas();
-        String[] windows = canvas.getCurrentLayout().getWindowNames();
-        StringBuilder listWindows = new StringBuilder();
-        for(int i = 0; i < windows.length; i++)
-        {
-            if(canvas.isReallyOnScreen(canvas.getWindow(windows[i])))
-            {
-                listWindows.append("-" + canvas.getWindow(windows[i]).getProjection().getName());
-            }
-        }
-        name += listWindows.toString();
-
-        return name;
-    }
-
-
-
-    /**
-     * GUI component for the resolution selection panel.
-     */
-    class AResolutionChooser extends JPanel implements ActionListener
-    {
-        /** Currently selected button. */
-        private AResolutionButton selectedButton;
-
-        /**
-         * Constructor.
-         */
-        public AResolutionChooser()
-        {
-            super(new GridLayout(IMAGE_WIDTHS.length+1, 1));
-            setBorder(BorderFactory.createTitledBorder(" Resolution: "));
-
-            ButtonGroup group = new ButtonGroup();
-            for (int i=0; i<IMAGE_WIDTHS.length; i++)
-            {
-                int width = IMAGE_WIDTHS[i];
-                int height = ACanvas.getCanvas().getRespectiveHeight(IMAGE_WIDTHS[i]);
-
-                AResolutionButton button = new AResolutionButton(width, height);
-                button.addActionListener(this);
-                if(i == DEFAULT_IMAGE_WIDTH)
-                {
-                    selectedButton = button;
-                    button.setSelected(true);
-                }
-                group.add(button);
-                add(button);
-            }
-        }
-
-        /**
-         * Get the currently selected image width.
-         * @return selected image width
-         */
-        public int getImageWidth()
-        {
-            return selectedButton.getImageWidth();
-        }
-
-        /**
-         * Gets the currently selected image height.
-         * @return selected image height
-         */
-        public int getImageHeight()
-        {
-            return selectedButton.getImageHeight();
-        }
-
-        public void updateResolutions()
-        {
-            for (int i=0; i<getComponentCount(); i++)
-            {
-                if (getComponent(i) instanceof AResolutionButton)
-                {
-                    AResolutionButton button = (AResolutionButton)getComponent(i);
-                    int height = ACanvas.getCanvas().getRespectiveHeight(button.getImageWidth());
-                    button.setImageHeight(height);
-                }
-            }
-        }
-
-  
-
-        /**
-         * Action listener for the resolution panel.
-         * @param e performed action
-         */
-        public void actionPerformed(ActionEvent e)
-        {
-            selectedButton = (AResolutionButton)e.getSource();
-        }
-
-        /**
-         * Radio button for the resolution chooser.
-         */
-        public class AResolutionButton extends JRadioButton
-        {
-            /** Image width for this button. */
-            int imageWidth;
-            /** Image height for this button. */
-            int imageHeight;
-
-            /**
-             * Constructor.
-             * @param targetWidth image width this button corresponds to
-             * @param targetHeight image height this button corresponds to
-             */
-            public AResolutionButton(int imageWidth, int imageHeight)
-            {
-                super(imageWidth + "x" + imageHeight);
-                this.imageWidth = imageWidth;
-                this.imageHeight = imageHeight;
-            }
-
-            /**
-             * Gets the image width on this button.
-             * @return image width
-             */
-            public int getImageWidth()
-            {
-                return imageWidth;
-            }
-
-            /**
-             * Gets the image height on this button.
-             * @return image height
-             */
-            public int getImageHeight()
-            {
-                return imageHeight;
-            }
-
-            public void setImageHeight(int imageHeight)
-            {
-                this.imageHeight = imageHeight;
-                setText(imageWidth + "x" + imageHeight);
-            }
-        }
-    }
-
-    /**
-     * Simple filter class that filters files by extension.
-     */
-    private static class AFileFilter extends FileFilter
-    {
-        /** File extension. */
-        private String extension;
-        /** Description of the file type this filter shows. */
-        private String description;
-
-        /**
-         * Constructs a file filter.
-         * @param extension file extension that passes the filter
-         * @param description description of the file type this filter selects
-         */
-        public AFileFilter(String extension, String description)
-        {
-            super();
-            this.extension = extension;
-            this.description = description;
-        }
-
-        /**
-         * Decides if the filter allows a file to pass or not
-         * @param f file under consideration
-         * @return decision of the filter
-         */
-        public boolean accept(File f)
-        {
-          //Accept all directories
-          if (f.isDirectory()) return true;
-
-          //Accept all files that end with given extension
-          if (f.getName().toLowerCase().endsWith(extension)) return true;
-
-          //Nothing else
-          return false;
-        }
-
-        /**
-         * Get the extension this filter filters on.
-         * @return file extension
-         */
-        public String getExtension()
-        {
-            return extension;
-        }
-
-        /**
-         * Get description of the filter.
-         * @return description
-         */
-        public String getDescription()
-        {
-            return description;
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AStartupWindow.java b/graphics/AtlantisJava/src/atlantis/gui/AStartupWindow.java
deleted file mode 100755
index 4743e6d20814..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AStartupWindow.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package atlantis.gui;
-
-import atlantis.globals.AGlobals;
-import atlantis.graphics.AIcon;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import java.awt.*;
-import javax.swing.*;
-
-
-/**
- * The startup window appears when the program starts up and displays the
- * progress of the operation. No need for this to be a singleton at all.
- */
-public class AStartupWindow {
-
-  //add a logger
-  private final ALogger logger = ALogger.getLogger(AStartupWindow.class);
-
-  //the frame showing the startup image and progress
-  private final JFrame frame = (AGlobals.isAtlantisHeadless()) ? null : new JFrame();
-
-  //how often we will update the progress bar
-  private final int progressUpdateDiff;
-
-  //GUI items that will be updated
-  private JLabel text = null;
-  private JProgressBar progress = null;
-
-  public AStartupWindow(int numUpdates) {
-    
-    //Store how often we will update the progress bar
-    progressUpdateDiff=(int)100./numUpdates;
-
-    //Don't do anything in headless mode
-    if (AGlobals.isAtlantisHeadless()) return;
-
-    frame.getContentPane().setLayout(new BorderLayout());
-
-    String fileName = AGlobals.instance().getHomeDirectory() + "img" +
-    		System.getProperty("file.separator") + "atlas.jpg";
-    ImageIcon icon = AUtilities.getFileAsImageIcon(fileName);
-
-    frame.getContentPane().add(new JLabel(icon), BorderLayout.CENTER);
-    text = new JLabel("Welcome to Atlantis", JLabel.CENTER);
-    JPanel p = new JPanel();
-
-    p.setLayout(new GridLayout(2, 1));
-    p.add(text);
-    progress = new JProgressBar(0, 100);
-    progress.setStringPainted(true);
-    p.add(progress);
-    frame.getContentPane().add(p, BorderLayout.SOUTH);
-    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-    frame.setLocation(screenSize.width / 4, screenSize.height / 3);
-    frame.setUndecorated(true);
-    AIcon.setIconImage(frame);
-    frame.setTitle("Atlantis starting up...");
-    frame.pack();
-    frame.setVisible(true);
-  }
-
-  /**
-   * Update the frame and log to the logger
-   * @param newText the new text for the startup window
-   */
-  public void updateText(String newText) {
-    //Also send this to the logger
-    logger.info(newText);
-
-    //Don't do graphics update in headless mode
-    if (AGlobals.isAtlantisHeadless()) return;
-    
-    //Update text and progress bar
-    text.setText(newText); 
-    progress.setValue(progress.getValue()+progressUpdateDiff);
-  }
-
-  /**
-   * When dispsoing this object, also dispose of the frame
-   */
-  public void dispose(){
-    if (frame!=null) frame.dispose();
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ATabbedPaneUI.java b/graphics/AtlantisJava/src/atlantis/gui/ATabbedPaneUI.java
deleted file mode 100755
index ea5cf518a7d6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ATabbedPaneUI.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package atlantis.gui;
-
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-
-import javax.swing.JComponent;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.metal.MetalTabbedPaneUI;
-
-import atlantis.utils.AUtilities;
-
-/**
- * Once installed on a TabbedPane this UI will allow changing the tabs only with
- * the left mouse button. By default this is possible with any button.
- * In Atlantis the right mouse button provides help
- */
-
-public class ATabbedPaneUI extends MetalTabbedPaneUI {
-
-  public static ComponentUI createUI(JComponent c) {
-    return new ATabbedPaneUI();
-  }
-
-  protected MouseListener createMouseListener() {
-    return new myMouseHandler();
-  }
-
-  public class myMouseHandler extends MouseHandler {
-    public void mousePressed(MouseEvent e) {
-      if(!AUtilities.isRightMouseButton(e))
-        super.mousePressed(e);
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ATextField.java b/graphics/AtlantisJava/src/atlantis/gui/ATextField.java
deleted file mode 100755
index a7aae0b222b4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ATextField.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package atlantis.gui;
-
-
-import java.awt.event.ActionListener;
-import javax.swing.JTextField;
-
-
-/**
- * This textfield will not generate an event when the setText() function is called.
- */
-
-public class ATextField extends JTextField {
-  ActionListener listener;
-
-  public ATextField() {
-    super();
-  }
-
-  public void addActionListener(ActionListener l) {
-    if(listener==null) {
-      super.addActionListener(l);
-      listener=l;
-    }
-  }
-
-  public void setText(String t) {
-    if(listener!=null) super.removeActionListener(listener);
-    super.setText(t);
-    if(listener!=null) super.addActionListener(listener);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ATreeCellRenderer.java b/graphics/AtlantisJava/src/atlantis/gui/ATreeCellRenderer.java
deleted file mode 100755
index 3979507b6ff0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ATreeCellRenderer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package atlantis.gui;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.tree.*;
-import atlantis.parameters.AStatusParameter;
-import hep.wired.util.TristateCheckBox;
-
-public class ATreeCellRenderer implements TreeCellRenderer {
-  
-  public ATreeCellRenderer() {
-  }
-  
-  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean isSelected,
-          boolean expanded, boolean leaf, int row, boolean hasFocus) {
-    if(value instanceof ACheckNode){
-      ACheckNode cellNode = (ACheckNode)value;
-      cellNode.updateState();
-      if (cellNode.getParameter() instanceof AStatusParameter){
-        ACheckBox cellComponent = (ACheckBox)cellNode.getUserObject();
-        cellComponent.setBorderPaintedFlat(true);
-        return cellComponent;
-      } else{
-        TristateCheckBox cellComponent = (TristateCheckBox)cellNode.getUserObject();
-        cellComponent.setState(cellNode.getState());
-        cellComponent.setBorderPaintedFlat(true);
-        return cellComponent;
-      }
-    }
-    
-    return new JLabel("not a checkNode");
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/ATreeExpansionListener.java b/graphics/AtlantisJava/src/atlantis/gui/ATreeExpansionListener.java
deleted file mode 100755
index cb7d0b791603..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/ATreeExpansionListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ATreeExpansionListener.java
- *
- * Created on 17 March 2005, 15:55
- */
-
-package atlantis.gui;
-
-import javax.swing.event.TreeExpansionListener;
-import javax.swing.event.TreeExpansionEvent;
-import javax.swing.JTree;
-
-/**
- *
- * @author Qiang
- */
-public class ATreeExpansionListener implements TreeExpansionListener {
-    
-    private JTree tree;
-    
-    private AParametersTable table;
-    
-    // the row number which the tree locates
-    private int treeRow;
-    
-    /** Creates a new instance of ATreeExpansionListener */
-    public ATreeExpansionListener(JTree tree, AParametersTable table, int treeRow) {
-        this.tree = tree;
-        this.table = table;
-        this.treeRow = treeRow;
-    }
-
-    public void treeExpanded(TreeExpansionEvent event) {
-        int newHeight = tree.getRowCount() * (int)(tree.getRowBounds(0).getHeight());
-        table.setRowHeight(treeRow, newHeight);
-    }
-
-    public void treeCollapsed(TreeExpansionEvent event) {
-        int newHeight = tree.getRowCount() * (int)(tree.getRowBounds(0).getHeight());
-        table.setRowHeight(treeRow, newHeight);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AWindowControl.java b/graphics/AtlantisJava/src/atlantis/gui/AWindowControl.java
deleted file mode 100755
index abac35788b16..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AWindowControl.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package atlantis.gui;
-
-import atlantis.canvas.ALayoutChangeListener;
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.canvas.ALayout;
-import atlantis.graphics.layout.AFlowLayout;
-import atlantis.graphics.layout.AGridLayout;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.parameters.ACommandProcessor;
-import atlantis.utils.*;
-import java.util.*;
-import javax.swing.BorderFactory;
-import javax.swing.SwingUtilities;
-import javax.swing.JPanel;
-import java.awt.Color;
-import java.awt.Rectangle;
-import java.awt.Dimension;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import java.awt.event.*;
-
-/**
- * Allows user to select the current window and to
- * copy between windows.
- */
-public class AWindowControl extends JPanel
-  implements ALayoutChangeListener, ADragListener {
-
-  private String selectedWindowName;
-  private Vector pages=new Vector(10);
-
-  public AWindowControl getPanel() {
-    return this;
-  }
-
-  public AWindowControl() {
-    super();
-    setLayout(new AFlowLayout(10, 10));
-
-    addMouseListener(new MouseAdapter() {
-      public void mousePressed(MouseEvent e) {
-        if(AUtilities.isRightMouseButton(e))
-          AHelpSystem.getInstance().showPage("WindowControl");
-      }
-    });
-
-    // registering as a listener to of window lock changes
-    ACanvas.getCanvas().addLockChangeListener(new ChangeListener() {
-
-      public void stateChanged(ChangeEvent e) {
-        for(int i=0; i<pages.size(); i++) {
-          Hashtable page=(Hashtable)pages.elementAt(i);
-          Enumeration labels=page.elements();
-          while(labels.hasMoreElements()) {
-            ADnDLabel label=(ADnDLabel)labels.nextElement();
-            if(ACanvas.getCanvas().getWindow(label.getName()).isLocked())
-              label.setForeground(Color.red);
-            else
-              label.setForeground(Color.black);
-          }
-        }
-      }
-    });
-
-    // registering as a listener to APar
-    ACanvas.getCanvas().addLayoutChangeListener(this);
-
-    ACanvas.getCanvas().addWindowChangeListener(new ChangeListener() {
-      public void stateChanged(ChangeEvent e) {
-        ADnDLabel label;
-
-        if(selectedWindowName!=null)
-          for(int i=0; i<pages.size(); i++) {
-            Hashtable page=(Hashtable)pages.elementAt(i);
-
-            label=(ADnDLabel)page.get(selectedWindowName);
-            if(label!=null)
-              label.setBackground(new Color(207, 207, 207));
-          }
-
-        selectedWindowName=ACanvas.getCanvas().getCurrentWindow().getName();
-        for(int i=0; i<pages.size(); i++) {
-          Hashtable page=(Hashtable)pages.elementAt(i);
-
-          label=(ADnDLabel)page.get(selectedWindowName);
-          if(label!=null)
-            label.setBackground(Color.white);
-        }
-      }
-    });
-  }
-
-  // function gets called when the current layout is changed in APar
-  public void layoutChanged(ACanvas c) {
-    removeAll();
-    ALayout layout = c.getCurrentLayout();
-    Dimension d=layout.getSize();
-    WindowMouseListener windowMouseListener=new WindowMouseListener();
-
-    // adding new set of pages
-    pages.clear();
-    String[] pageNames=layout.getPageNames();
-    Hashtable pageHashtable;
-
-    for(int i=0; i<pageNames.length; i++) {
-      String[] wNames=layout.getPageContent(pageNames[i]);
-
-      JPanel page=new JPanel(new AGridLayout(d, 15));
-
-      pageHashtable=new Hashtable();
-      for(int k=0; k<wNames.length; k++) {
-        Rectangle constraint=layout.getWindowConstraints(wNames[k]);
-        ADnDLabel w=new ADnDLabel(wNames[k], wNames, true);
-
-        w.setBorder(BorderFactory.createLineBorder(new Color(150, 150, 150)));
-        pageHashtable.put(wNames[k], w);
-        page.add(w, constraint);
-        w.addMouseListener(windowMouseListener);
-        w.addDragListener(this);
-      }
-
-      pages.addElement(pageHashtable);
-      add(page);
-      setToolTipText("Current Layout - "+layout.getName());
-      revalidate();
-      repaint();
-    }
-  }
-
-  public void dragPerformed(Object from, Object to, int action) {
-    if((from instanceof ADnDLabel)&&(to instanceof ADnDLabel))
-      ACanvas.getCanvas().copyWindowSettings(((ADnDLabel)from).getText(), ((ADnDLabel)to).getText());
-  }
-
-  private Hashtable findPage(String[] wNames)
-  {
-    for (int i = 0; i < pages.size(); i++)
-    {
-      int matches = 0;
-      Hashtable page = (Hashtable)pages.get(i);
-
-      for (int j = 0; j < wNames.length; j++)
-      {
-        if (page.containsKey(wNames[j]))
-          matches++;
-        else break;
-      }
-      if (matches == wNames.length)
-        return page;
-    }
-    return null;
-  }
-
-  class WindowMouseListener extends MouseAdapter {
-
-    public void mousePressed(MouseEvent e) {
-      ADnDLabel label = (ADnDLabel) e.getSource();
-
-      if (AUtilities.isRightMouseButton(e)) {
-        if (AEventQueue.getKeyboardState() == KeyEvent.VK_A) {
-
-          String[] pageName = label.returnPageName();
-          Hashtable page = findPage(pageName);
-          if(page==null)
-            return;
-
-          for (Enumeration labels = page.elements(); labels.hasMoreElements(); ) {
-            label = (ADnDLabel) labels.nextElement();
-            if (label != null)
-              ACommandProcessor.receive("W" + label.getName());
-          }
-        }
-        else {
-          AWindow.getPopupMenu().show(label, e.getX(), e.getY());
-          ACommandProcessor.receive("W" + label.getName());
-        }
-      }
-    }
-
-    public void mouseReleased(MouseEvent e) {
-      ADnDLabel label=(ADnDLabel)e.getSource();
-
-      if(SwingUtilities.isLeftMouseButton(e)) {
-        ACommandProcessor.receive("W"+label.getName());
-      }
-    }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AXMLFileChooser.java b/graphics/AtlantisJava/src/atlantis/gui/AXMLFileChooser.java
deleted file mode 100755
index b5c2421bfcdd..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AXMLFileChooser.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Component;
-import java.io.File;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-
-
-/**
- * A GUI component used choose a specific XML file
- */
-public abstract class AXMLFileChooser extends JFileChooser
-{
-    private Component parent = null;
-
-    public abstract boolean processSelectedFile(File file);
-
-
-    public AXMLFileChooser(String fileName, Component parent)
-    {
-        super();
-        this.parent = parent;
-
-        setFileFilter(new XMLFilter());
-        if (fileName == null)
-        {
-            setCurrentDirectory(new File(System.getProperty("user.dir")));
-        }
-        else
-        {
-            File f = new File(fileName);
-            if (f.isFile())
-            {
-                setCurrentDirectory(new File(f.getAbsolutePath()));
-                setSelectedFile(f);
-            }
-            else
-            {
-                setCurrentDirectory(f);
-            }
-        }
-
-    } // AXMLFileChooser() --------------------------------------------------
-
-
-
-    public void showMyDialog()
-    {
-        do
-        {
-            int state = showOpenDialog(this.parent);
-            if(state == APPROVE_OPTION)
-            {
-                File file = getSelectedFile();
-                if(file != null)
-                {
-                    if(processSelectedFile(file))
-                    {
-                        break;
-                    }
-                    else
-                    {
-                        JOptionPane.showMessageDialog(parent,
-                            "Unable to open\n" + file, "IO Error",
-                            JOptionPane.ERROR_MESSAGE);
-                    }
-                }
-            }
-            else
-            {
-                break;
-            }
-        }
-        while(true);
-
-    } // showMyDialog() -----------------------------------------------------
-
-
-
-    private static class XMLFilter extends FileFilter
-    {
-        // Accept all directories and all valid files.
-        public boolean accept(File f)
-        {
-            if(f.isDirectory())
-            {
-                return true;
-            }
-
-            String s = f.getName();
-
-            if(s.toLowerCase().endsWith(".xml") || s.toLowerCase().endsWith(".zip")
-                    || s.toLowerCase().endsWith(".gzip") || s.toLowerCase().endsWith(".gz"))
-                return true;
-
-            return false;
-        }
-
-
-        public String getDescription()
-        {
-            return ".xml, .zip, .gzip, .gz";
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/AXMLGeometryChooser.java b/graphics/AtlantisJava/src/atlantis/gui/AXMLGeometryChooser.java
deleted file mode 100755
index c790d8aeee82..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/AXMLGeometryChooser.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package atlantis.gui;
-
-import java.awt.Frame;
-import java.io.File;
-import javax.swing.*;
-import javax.swing.filechooser.*;
-
-import atlantis.globals.AGlobals;
-
-
-/**
- * A GUI component used choose a specific XML file
- */
-public abstract class AXMLGeometryChooser extends JFileChooser {
-	
-  private static final AGlobals globals = AGlobals.instance();
-
-  public AXMLGeometryChooser(String fileName) {
-    super();
-    String FILE_SEPAR = System.getProperty("file.separator");
-    Frame gui = globals.getGuiFrame();
-    setFileFilter(new XMLFilter());
-    setCurrentDirectory(new File(System.getProperty("user.dir")+FILE_SEPAR+
-                                 "geometry"));
-    if(fileName!=null)
-      setSelectedFile(new File(System.getProperty("user.dir")+FILE_SEPAR
-          +fileName));
-    do {
-      int state=showOpenDialog(gui);
-      if(state==APPROVE_OPTION) {
-        File file=getSelectedFile();
-        if(file!=null)
-          if(processSelectedFile(file))
-            break;
-          else {
-            JOptionPane.showMessageDialog(gui,
-                "Unable to open " + file, "IO Error", JOptionPane.ERROR_MESSAGE);
-          }
-      } else
-        break;
-    } while(true);
-  }
-
-
-  public AXMLGeometryChooser() {
-    this(null);
-  }
-
-
-  public abstract boolean processSelectedFile(File file);
-
-
-  private static class XMLFilter extends FileFilter {
-    // Accept all directories and all XML files.
-
-    public boolean accept(File f) {
-      if(f.isDirectory())
-          return true;
-
-      String s=f.getName();
-      if(s.startsWith("AMuon")) return false;
-      if(s.equals("config.xml")) return false;
-      if(s.equals("pdg.xml")) return false;
-      if(s.toLowerCase().lastIndexOf(".xml")==s.length()-".xml".length()) return true;
-      return false;
-    }
-
-    public String getDescription() {
-      return ".xml";
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/gui/package.html b/graphics/AtlantisJava/src/atlantis/gui/package.html
deleted file mode 100644
index 67b415276a29..000000000000
--- a/graphics/AtlantisJava/src/atlantis/gui/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Maintenance of GUI components (layouts, tabbed panes, etc). The
-contents (not the structure) of the GUI is defined in config.xml.
-</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxGroup.java
deleted file mode 100755
index 88cb802db3d0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxGroup.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package atlantis.interactions;
-
-
-public class A3DBoxGroup extends AInteractionGroup {
-
-  private A3DBoxInteraction transformInteraction;
-
-  public A3DBoxGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-    transformInteraction=new A3DBoxInteraction();
-    this.addInteraction(transformInteraction);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxInteraction.java
deleted file mode 100755
index 7d264df9cc7d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/A3DBoxInteraction.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.event.KeyEvent;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.Point2D;
-
-import javax.swing.JMenuItem;
-
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection3DBox;
-import atlantis.graphics.ACursorFactory;
-
-/**
- * The Zoom and Rotate interaction.
- */
-public class A3DBoxInteraction extends AInteraction implements
-        ASleepMouseDragListener, AMousePressListener, AEnterExitListener
-{
-    private static final int ZOOM_MODE = 0;
-    private static final int HORIZONTAL_ZOOM_MODE = 1;
-    private static final int VERTICAL_ZOOM_MODE = 2;
-    private static final int ROTATE_MODE = 3;
-
-    private int d = 10;
-    private Point2D.Double p0;
-    private int previousKey = KeyEvent.VK_UNDEFINED;
-    private int mode;
-
-    public A3DBoxInteraction()
-    {
-        super(1, AUTOMATIC_REPAINT, SCREEN_COORDINATES, false);
-
-        // The center of the ellipse is in (0, 0) in User Space
-        // dummy for now
-        hr[0] = new Ellipse2D.Double(-d / 2, -d / 2, d, d);
-    }
-
-    public void connect(AInteractionsManager manager)
-    {
-        super.connect(manager);
-    }
-
-    public int getPressButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    public int init(Point2D.Double p, int key)
-    {
-        keyChange(p, key);
-        return -1;
-    }
-
-    public void pressed(Point2D.Double p, int button, int key)
-    {}
-
-    public int getButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    public void start(Point2D.Double p, int region, int key)
-    {}
-
-    private void keyChange(Point2D.Double p, int key)
-    {
-        p0 = p;
-
-        switch (key)
-        {
-            case KeyEvent.VK_UNDEFINED:
-                mode = ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_H:
-                mode = HORIZONTAL_ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_V:
-                mode = VERTICAL_ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_R:
-                mode = ROTATE_MODE;
-                break;
-
-            case KeyEvent.VK_Z:
-                mode = ZOOM_MODE;
-                break;
-        }
-    }
-
-    public void drag(Point2D.Double p, int region, int key)
-    {
-        if (key != previousKey)
-        {
-            keyChange(p, key);
-            previousKey = key;
-        }
-
-        double zf;
-        AProjection proj = window.getProjection();
-        Point2D.Double center = ((AProjection3DBox) proj).getCenter(window);
-
-        switch (mode)
-        {
-            case ZOOM_MODE:
-                zf = p0.distance(center.getX(), center.getY())
-                        / p.distance(center.getX(), center.getY());
-                ((AProjection3DBox) proj).zoom(zf);
-                p0 = p;
-                window.repaintFromScratch();
-                break;
-            case HORIZONTAL_ZOOM_MODE:
-                zf = Math.abs((p0.getX() - center.getX())
-                        / (p.getX() - center.getX()));
-                ((AProjection3DBox) proj).zoomHorizontal(zf);
-                p0 = p;
-                window.repaintFromScratch();
-                break;
-            case VERTICAL_ZOOM_MODE:
-                zf = Math.abs((p0.getY() - center.getY())
-                        / (p.getY() - center.getY()));
-                ((AProjection3DBox) proj).zoomVertical(zf);
-                p0 = p;
-                window.repaintFromScratch();
-                break;
-            case ROTATE_MODE:
-                AParameter phiPar = parameterStore.get(proj.getName(), "Phi");
-                double height = window.getCurrDisp().getHeight();
-                double deltaV = p.getY() - p0.getY();
-                phiPar.setD(adjustPhi(phiPar.getD() + 360. * deltaV / height));
-                p0 = p;
-                window.repaintFromScratch();
-                break;
-        }
-    }
-
-    private double adjustPhi(double phi)
-    {
-        while (phi < 0)
-            phi += 360;
-        while (phi > 360)
-            phi -= 360;
-        return phi;
-    }
-
-    public void stop()
-    {}
-
-    public void cancel()
-    {}
-
-    public void paint(Graphics2D g)
-    {
-        Point2D.Double p = ((AProjection3DBox) window.getProjection()).getCenter(window);
-        g.setColor(Color.red);
-        g.fillOval((int) (p.x - d / 2), (int) (p.y - d / 2), d, d);
-    }
-
-    public void entered()
-    {
-//        if (region == 0)
-            window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-    public void exited()
-    {
- //       if (region == 0)
-            window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-    public int getPopupType()
-    {
-        return APopupListener.WINDOW_POPUP;
-    }
-
-    /*public void showPopup(Point p, int region)
-    {
-        popupMenu.show(window, p.x, p.y);
-    }*/
-    
-    public JMenuItem[] getPopupItems() {
-        return null;
-    }
-
-    public AModifier[] getModifiers()
-    {
-        return new AModifier[] {
-            new AModifier(KeyEvent.VK_UNDEFINED, false, "Change the volume of the box"),
-            new AModifier(KeyEvent.VK_Z, false, "Change the volume of the box"),
-            new AModifier(KeyEvent.VK_H, false, "Change the length of the box"),
-            new AModifier(KeyEvent.VK_V, false, "Change the height of the box"),
-            new AModifier(KeyEvent.VK_R, false, "Rotate around axis of box")
-        };
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AClockGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AClockGroup.java
deleted file mode 100755
index 8bfd75d8ffe4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AClockGroup.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.ACanvas;
-import atlantis.parameters.APar;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import javax.swing.JCheckBox;
-import javax.swing.JPanel;
-
-public class AClockGroup extends AInteractionGroup {
-
-  private AClockInteraction clockInteraction;
-  private JCheckBox checkbox;
-  // the panel that will contain the additional controls for the interactions
-  private JPanel additionalControls;
-
-  public AClockGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-    
-    clockInteraction=new AClockInteraction();
-    addInteraction(clockInteraction);
-    
-    // create the additional controls panel
-    additionalControls = new JPanel();
-
-    checkbox=new JCheckBox("on/off", false);
-    checkbox.addItemListener(new ItemListener() {
-      public void itemStateChanged(ItemEvent e) {
-        switch(e.getStateChange()) {
-        case ItemEvent.SELECTED:
-          parameterStore.get("YX", "Clock").setStatus(true);
-          break;
-
-        case ItemEvent.DESELECTED:
-          parameterStore.get("YX", "Clock").setStatus(false);
-          break;
-        }
-        ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-      }
-    });
-    additionalControls.add(checkbox);
-  }
-
-  public void connect() {
-    checkbox.setSelected(parameterStore.get("YX", "Clock").getStatus());
-  }
-  
-  /**
-   * this interaction group has additional controls, so return true
-   */
-  
-  public boolean hasAdditionalControls() {
-	  return true;
-  }
-  /**
-   * returns the additional controls
-   */
-  public JPanel getAdditionalControls() {
-	  return additionalControls;
-  }
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AClockInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AClockInteraction.java
deleted file mode 100755
index 13a44dbe9f5e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AClockInteraction.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-import atlantis.graphics.*;
-import atlantis.parameters.*;
-import atlantis.projection.*;
-import atlantis.utils.*;
-
-
-public class AClockInteraction extends AInteraction
-  implements ASleepMouseDragListener {
-
-  private ALineSegment line;
-  private double phi;
-
-  public AClockInteraction() {
-    super(1, WINDOW_TOTAL_REPAINT, WORLD_COORDINATES, false);
-    // double phi = APar.get("YX","Phi").getD()*AMath.DEGREES_TO_RADIANS+Math.PI;
-    double phi=Math.toRadians(parameterStore.get("YX", "Phi").getD());
-
-    line=new ALineSegment(0, 0, 1500*Math.cos(phi), 1500*Math.sin(phi), 10);
-    hr[0]=line;
-  }
-
-  public RectangularShape getScreenHotRegion(int region) {
-    if(region==0)
-      return new ALineSegment(window.calculateDisplay(line.p1), window.calculateDisplay(line.p2), 10);
-    else
-      return null;
-  }
-
-  public int init(Point2D.Double p, int key) {
-    return 1;
-  }
-
-  public int getButton() {
-    return AInteractionsManager.LEFT;
-  }
-
-  public void start(Point2D.Double p, int region, int key) {
-    // if(parameterStore.get("YX","Clock").getStatus())
-    if(region==0)
-      parameterStore.get("YX", "Clock").setD(0.0000001);
-    else if(region==1) {
-      AProjection2D projection=(AProjection2D)window.getProjection();
-      Point2D.Double p0=projection.inverseNonLinearTransform(p);
-
-      this.phi=Math.atan2(p0.y, p0.x);
-    }
-  }
-
-  public void drag(Point2D.Double p, int region, int key) {
-    if(region==0) {
-      double phi=Math.atan2(p.y, p.x);
-
-      // phi+=Math.PI;
-      if(phi<0) phi+=2*Math.PI;
-      parameterStore.get("YX", "Phi").setD(Math.toDegrees(phi));
-    } else if(region==1&&parameterStore.get("YX", "Clock").getStatus()) {
-      double phiPrime=Math.atan2(p.y, p.x);
-      double phi0=Math.toRadians(parameterStore.get("YX", "Phi").getD());
-      double deltaPhiPrime=phiPrime-phi0;
-
-      if(deltaPhiPrime<-Math.PI) deltaPhiPrime+=2*Math.PI;
-      if(deltaPhiPrime>Math.PI) deltaPhiPrime-=2*Math.PI;
-      double deltaPhi=this.phi-phi0;
-
-      if(deltaPhi<-Math.PI) deltaPhi+=2*Math.PI;
-      if(deltaPhi>Math.PI) deltaPhi-=2*Math.PI;
-
-      if((deltaPhi>0.&&deltaPhiPrime-deltaPhi>0.)||(deltaPhi<0.&&deltaPhiPrime-deltaPhi<0.)) {
-        double a=(deltaPhi*Math.PI-deltaPhiPrime*Math.abs(deltaPhi))/(deltaPhiPrime-deltaPhi);
-
-        parameterStore.get("YX", "Clock").setD(Math.min(Math.max(Math.PI/a, 0.000001), 7.));
-      } else {
-        parameterStore.get("YX", "Clock").setD(0.000001);
-      }
-    }
-  }
-
-  public void stop() {}
-
-  public void cancel() {}
-
-  public void paint(Graphics2D g) {
-    // double phi = parameterStore.get("YX","Phi").getD()*AMath.DEGREES_TO_RADIANS+Math.PI;
-    double phi=Math.toRadians(parameterStore.get("YX", "Phi").getD());
-
-    line.p2.setLocation(1500*Math.cos(phi), 1500*Math.sin(phi));
-    ALineSegment screenLine=(ALineSegment)getScreenHotRegion(0);
-
-    AGraphics ag=AGraphics.makeAGraphics(g);
-
-    ag.updateDrawParameters(frameDrawParameters);
-    ag.drawLine(screenLine.p1.x, screenLine.p1.y, screenLine.p2.x, screenLine.p2.y);
-    ag.updateDrawParameters(drawParameters);
-    ag.drawLine(screenLine.p1.x, screenLine.p1.y, screenLine.p2.x, screenLine.p2.y);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AEnterExitListener.java b/graphics/AtlantisJava/src/atlantis/interactions/AEnterExitListener.java
deleted file mode 100755
index 7bc8fdb6fb48..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AEnterExitListener.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package atlantis.interactions;
-
-
-/**
- * The listener is supported by AInteractionsManager,
- * it generated events when the mouse is entering or exiting a Hot Region.
- */
-public interface AEnterExitListener {
-
-  void entered();
-  void exited();
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeChangeListener.java b/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeChangeListener.java
deleted file mode 100644
index 5b6c091c3630..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeChangeListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package atlantis.interactions;
-
-/**
- * Interface for all FishEyeChangeListener classes. Each time the FishEye
- * parameters are changed, all listeners are called with the new paremeters
- * @author sboeser
- */
-public interface AFishEyeChangeListener {
-
-  /**
-   * This method gets called each time new fisheye parameters are set
-   * @param status the new fishEye status
-   * @param value the new fishEye value
-   */
-  abstract public void fishEyeChange(boolean status, double value);  
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeGroup.java
deleted file mode 100755
index d2784b782666..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeGroup.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.ACanvas;
-import java.awt.event.*;
-import javax.swing.JCheckBox;
-import javax.swing.JFormattedTextField;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import java.awt.BorderLayout;
-import java.text.NumberFormat;
-
-public class AFishEyeGroup extends AInteractionGroup implements AFishEyeChangeListener {
-
-  private final AFishEyeInteraction fishEyeInteraction;
-  private final JCheckBox checkbox;
-  private final JFormattedTextField valueField;
-  // the panel that will contain the additional controls for the interactions
-  private JPanel additionalControls;
-
-//Format, label and label string for value field
-  private NumberFormat valueFormat;
-  private JLabel valueLabel;
-  private static String valueString = "Value: ";
-
-  public AFishEyeGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-
-    fishEyeInteraction=new AFishEyeInteraction();
-    addInteraction(fishEyeInteraction);
-
-    // create the additional controls panel
-    additionalControls = new JPanel();
-
-    checkbox=new JCheckBox("on/off", false);
-    checkbox.addItemListener(new ItemListener() {
-      public void itemStateChanged(ItemEvent e) {
-        switch(e.getStateChange()) {
-        case ItemEvent.SELECTED:
-          fishEyeInteraction.setStatus(true);
-          //fishEyeInteraction.getParameter("FishEye").setStatus(true);
-          break;
-
-        case ItemEvent.DESELECTED:
-          fishEyeInteraction.setStatus(false);          
-          //fishEyeInteraction.getParameter("FishEye").setStatus(false);
-          break;
-        }
-        ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-      }
-    });
-
-//Create the label
-    valueLabel = new JLabel(valueString);
-    valueFormat = NumberFormat.getNumberInstance();
-    valueFormat.setMaximumIntegerDigits(2);
-    valueField=new JFormattedTextField(valueFormat);
-    valueField.setToolTipText("Enter fish eye value between 0 and 25");
-    valueField.setValue(new Double(0));
-    valueField.setColumns(3);
-    valueField.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e)
-      {
-        Number value =(Number)valueField.getValue();
-        double dvalue = value.doubleValue();
-        if(dvalue>0 && dvalue<25)
-        {
-          fishEyeInteraction.setValue(dvalue);
-          ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-        }
-        else
-        {
-          Double val = new Double(fishEyeInteraction.getValue());
-          valueField.setValue(val);
-        }
-      }
-    });
-
-    JPanel nestedPanel = new JPanel();
-    nestedPanel.add(valueLabel);
-    nestedPanel.add(valueField);
-
-    JPanel borderPanel = new JPanel(new BorderLayout());
-    borderPanel.add(checkbox, BorderLayout.WEST);
-    borderPanel.add(nestedPanel, BorderLayout.EAST);
-
-    additionalControls.add(borderPanel);
-    
-  }
-
-  public void connect() {
-    super.connect();
-    
-    //Only after we are connected to a window, add ourselves as update listener
-    fishEyeInteraction.addFishEyeChangeListener(this);
-  }
-
-  public void fishEyeChange(boolean status, double value) {
-    valueField.setValue(value);
-    checkbox.setSelected(status);
-  }
-  
-  /**
-   * FishEye has additional controls, so return true
-   */
-  public boolean hasAdditionalControls() {
-    return true;
-  }
-  
-  /**
-   * return the additional controls 
-   */
-  public JPanel getAdditionalControls() {
-    return additionalControls;
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeInteraction.java
deleted file mode 100755
index b1abf8608b4a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AFishEyeInteraction.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.graphics.ACursorFactory;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.projection.*;
-import java.awt.Graphics2D;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JMenuItem;
-import java.awt.geom.*;
-import java.util.Vector;
-
-/**
- * The FishEye transformation will expand the central part of the display,
- * while keeping the outer borders. This helps in e.g. expanding the inner detector region.
- **/
-
-public class AFishEyeInteraction extends AInteraction
-    implements ASleepMouseDragListener, ActionListener, AEnterExitListener {
-
-  //A list of listeners for fishEye changes
-  private Vector<AFishEyeChangeListener> fishEyeChangeListeners = new Vector<AFishEyeChangeListener>();
-
-  private final int d=20;
-  private final int region = 0;
-  private Point2D.Double firstP;
-  private JMenuItem[] popupItems;
-
-  private final static String TOGGLE_FISHEYE="Fish Eye On/Off";
- 
-  /**
-   * Create a new FishEye interaction
-   */
-  public AFishEyeInteraction() {
-    super(1, WINDOW_TOTAL_REPAINT, WORLD_COORDINATES, false);
-
-    hr[0]=new Ellipse2D.Double(0, 0, d, d);
-
-    popupItems = new JMenuItem[] {
-      new JMenuItem(TOGGLE_FISHEYE),
-    };
-    
-    for (int i = 0; i < popupItems.length; i++) {
-        popupItems[i].addActionListener(this);
-    }
-  }
-
- 
-  /**
-   * Initialize FishEye transformation using an inital point
-   */
-  public int init(Point2D.Double p, int key) {
-      
-    AProjection2D projection=(AProjection2D)window.getProjection();
-
-    firstP=new Point2D.Double(Math.abs(p.x), Math.abs(p.y));
-    firstP=projection.inverseNonLinearTransform(firstP);
-
-    return region;
-  }
-
-  /** 
-   * Returns the button this interaction uses
-   **/
-  public int getButton() {
-    return AInteractionsManager.LEFT;
-  }
-
-  /**
-   * Get projection parameters using APar
-   **/
-  private AParameter getParameter(String name) {
-    AProjection projection=window.getProjection();
-
-    if(projection instanceof AProjectionYX)
-      return parameterStore.get("YX", name);
-    else if(projection instanceof AProjectionRZ)
-      return parameterStore.get("RZ", name);
-    else if(projection instanceof AProjection3D)
-      return parameterStore.get("3D", name);
-    else if(projection instanceof AProjectionYZ||projection instanceof AProjectionXZ)
-      return parameterStore.get("XZ", name);
-    else if(projection instanceof AProjectionFR)
-      return parameterStore.get("FR", name);
-    else if(projection instanceof AProjectionFZ)
-      return parameterStore.get("FZ", name);
-    else
-      throw new Error("Fish Eye should be used ONLY in YX, RZ, FZ and FR");
-  }
-
-  /**
-   * Get new FishEye parameter if mouse has moved to p in YX projection
-   **/
-  private void updateYX(Point2D.Double p, int key) {
-    double r1=Math.sqrt(firstP.x*firstP.x+firstP.y*firstP.y);
-    double r2=Math.sqrt(p.x*p.x+p.y*p.y);
-    double rTo=getParameter("rTo").getD();
-
-    if(r1<rTo&&r2>rTo) return;
-    if(r2<rTo&&r1>rTo) return;
-
-    double newFishEyeValue=1000*(r2-r1)/(r1*rTo-r1*r2);
-
-    if(newFishEyeValue<0||newFishEyeValue>25) return;
-
-    setValue(newFishEyeValue);
-    fireFishEyeChange(getStatus(),getValue());
-  }
-
-  /**
-   * Get new FishEye parameter if mouse has moved to p in RZ projection
-   **/
-  private void updateRZ(Point2D.Double p, int key) {
-    double newFishEyeValue=0;
-
-    switch(key) {
-    case KeyEvent.VK_UNDEFINED:
-    case KeyEvent.VK_F:
-    case KeyEvent.VK_H:
-      double z1=firstP.x;
-      double z2=Math.abs(p.x);
-      double zTo=getParameter("zTo").getD();
-
-      if(z1<zTo&&z2>zTo) return;
-      if(z2<zTo&&z1>zTo) return;
-
-      newFishEyeValue=1000*(z2-z1)/(z1*zTo-z1*z2);
-      break;
-
-    case KeyEvent.VK_V:
-      double r1=Math.abs(firstP.y);
-      double r2=Math.abs(p.y);
-      double rTo=getParameter("rTo").getD();
-
-      if(r1<rTo&&r2>rTo) return;
-      if(r2<rTo&&r1>rTo) return;
-
-      newFishEyeValue=1000*(r2-r1)/(r1*rTo-r1*r2);
-      break;
-    }
-
-    if(newFishEyeValue<0||newFishEyeValue>25) return;
-    setValue(newFishEyeValue);
-    fireFishEyeChange(getStatus(),getValue());
-  }
-
-  /**
-   * Get new FishEye parameter if mouse has moved to p in XZ projection
-   **/
-  private void updateXZ(Point2D.Double p, int key) {
-    double newFishEyeValue=0;
-
-    switch(key) {
-    case KeyEvent.VK_UNDEFINED:
-    case KeyEvent.VK_F:
-    case KeyEvent.VK_H:
-      double z1=firstP.x;
-      double z2=Math.abs(p.x);
-      double zTo=getParameter("zTo").getD();
-
-      if(z1<zTo&&z2>zTo) return;
-      if(z2<zTo&&z1>zTo) return;
-
-      newFishEyeValue=1000*(z2-z1)/(z1*zTo-z1*z2);
-      break;
-
-    case KeyEvent.VK_V:
-      double r1=Math.abs(firstP.y);
-      double r2=Math.abs(p.y);
-      double rTo=getParameter("yTo").getD();
-
-      if(r1<rTo&&r2>rTo) return;
-      if(r2<rTo&&r1>rTo) return;
-
-      newFishEyeValue=1000*(r2-r1)/(r1*rTo-r1*r2);
-      break;
-    }
-
-    if(newFishEyeValue<0||newFishEyeValue>25) return;
-    setValue(newFishEyeValue);
-    fireFishEyeChange(getStatus(),getValue());
-  }
-
-  /**
-   * Get new FishEye parameter if mouse has moved to p in Phi-R projection
-   **/
-  private void updateFR(Point2D.Double p, int key) {
-    double r1=firstP.x;
-    double r2=p.x;
-    double rTo=getParameter("rTo").getD();
-
-    if(r1<rTo&&r2>rTo) return;
-    if(r2<rTo&&r1>rTo) return;
-
-    double newFishEyeValue=1000*(r2-r1)/(r1*rTo-r1*r2);
-
-    if(newFishEyeValue<0||newFishEyeValue>25) return;
-
-    setValue(newFishEyeValue);
-    fireFishEyeChange(getStatus(),getValue());
-  }
-
-  /**
-   * Get new FishEye parameter if mouse has moved to p in Phi-Z projection
-   **/
-  private void updateFZ(Point2D.Double p, int key) {
-    double z1=Math.abs(firstP.x);
-    double z2=Math.abs(p.x);
-    double zTo=getParameter("zTo").getD();
-
-    if(z1<zTo&&z2>zTo) return;
-    if(z2<zTo&&z1>zTo) return;
-
-    double newFishEyeValue=1000*(z2-z1)/(z1*zTo-z1*z2);
-
-    if(newFishEyeValue<0||newFishEyeValue>25) return;
-
-    setValue(newFishEyeValue);
-    fireFishEyeChange(getStatus(),getValue());
-  }
-
-  /**
-   * Change FishEye parameter for corresponding projection
-   * if mouse is draged
-   **/
-  public void drag(Point2D.Double p, int region, int key) {
-    if(!getParameter("FishEye").getStatus()) return;
-
-    AProjection proj=window.getProjection();
-
-    if(proj instanceof AProjectionYX)
-      updateYX(p, key);
-    else if(proj instanceof AProjectionRZ||proj instanceof AProjection3D)
-      updateRZ(p, key);
-    else if(proj instanceof AProjectionXZ||proj instanceof AProjectionYZ)
-      updateXZ(p, key);
-    else if(proj instanceof AProjectionFR)
-      updateFR(p, key);
-    else if(proj instanceof AProjectionFZ)
-      updateFZ(p, key);
-  }
-  
-  // Empty interface implementations
-  public void stop() {}
-  public void start(Point2D.Double p, int region, int key) {}
-  public void cancel() {}
-  public void paint(Graphics2D g) {}
-
-  public int getPopupType() {
-    return APopupListener.WINDOW_POPUP;
-  }
-
-  /*public void showPopup(Point p, int region) {
-    popupMenu.show(window, p.x, p.y);
-  }*/
-
-  public JMenuItem[] getPopupItems() {
-      return popupItems;
-  }
-  
-
-  /**
-   * Implementaiton of the ActionListener
-   * @param e 
-   */
-  public void actionPerformed(ActionEvent e) {
-    String action=e.getActionCommand();
-
-    if(action.equals(TOGGLE_FISHEYE)) {
-      //toggle the fisheye status
-      setStatus(!getStatus());
-      //Update the window
-      window.repaintFromScratch();
-      //And the GUI
-      fireFishEyeChange(getStatus(),getValue());
-    }
-  }
-
-  /**
-   * Public method so it can be called from the AFishEyeGroup to change the
-   * fish eye amount to a fixed value
-   * @param value the new value
-   */
-  public void setValue(double value){
-    getParameter("FishEye").setD(value);
-  }
-
-  /**
-   * Return FishEye value (e.g to update the FishEye panel)
-   * @return the fishEye value
-   */
-  public double getValue(){
-    return getParameter("FishEye").getD();
-  }
-
-  /**
-   * Public method so it can be called externally from the AFishEyeGroup 
-   * @param status true or false
-   */
-  public void setStatus(boolean status) {
-    getParameter("FishEye").setStatus(status);
-  }
-
-  /** 
-   * @return the current fishEye status(true or false)
-   */
-  public boolean getStatus() {
-    return getParameter("FishEye").getStatus();
-  }  
-  
-  /**
-   * Gets called each time we enter a window in which this interaction is active
-   */
-  public void entered(){
-      //Set mouse cursor
-      window.setCursor(ACursorFactory.getInstance().getFishEyeCursor());
-  }
-   
-  /**
-   * Gets called each time we leave a window in which this interaction is active
-   */
-  public void exited(){
-     //Set mouse cursor
-     window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-  }
-
-  /**
-   * Return modifier keys for this projection
-   * - F for Fast (only detectors are update)
-   * - V for react only to Vertical mouse movement (only in RZ and XZ projection)
-   * - H for react only to Horizontal mouse movement (only in RZ and XZ projection, default)
-   **/
-  public AModifier[] getModifiers(){
-    if(window.getProjection() instanceof AProjectionRZ ||
-       window.getProjection() instanceof AProjectionXZ) {
-      return new AModifier[] {
-          new AModifier(KeyEvent.VK_F, false, "Fast (data not drawn)"),
-          new AModifier(KeyEvent.VK_V, false, "Vertically defined FishEye"),
-          new AModifier(KeyEvent.VK_UNDEFINED, false, "Horizontally defined FishEye"),
-          new AModifier(KeyEvent.VK_H, false, "Horizontally defined FishEye")
-      };
-    } else {
-
-      return new AModifier[] {
-          new AModifier(KeyEvent.VK_F, false, "Fast (data not drawn)")  
-      };
-    }
-  }
-  
-  /**
-   * Add a new listener for FishEyeChange incidents
-   * @param listener to be added to list
-   */
-  public void addFishEyeChangeListener(AFishEyeChangeListener listener) {
-    //Add this listener
-    fishEyeChangeListeners.addElement(listener);
-    //And bring it up to date
-    listener.fishEyeChange(getStatus(), getValue());
-  
-  }
-
-  /**
-   * Remove a listener from the liste
-   * @param listener to be removed from list
-   */
-  public void removeFishEyeChangeListener(AFishEyeChangeListener listener) {
-    //Remove this listener
-    fishEyeChangeListeners.removeElement(listener);
-  }
-
-  /**
-   * Call fishEyeChange method of all FishEyeChange listeners
-   * @param status the new fisheye status
-   * @param value the new fisheye value
-   */
-  private void fireFishEyeChange(boolean status, double value) {
-
-    // Loop over all listeners
-    for (AFishEyeChangeListener listener : fishEyeChangeListeners) 
-    {
-      // give them the new status
-      listener.fishEyeChange(status,value);
-    }
-  }
-  
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AInteraction.java
deleted file mode 100755
index 446aedc3f93b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AInteraction.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.geom.Point2D;
-import java.awt.geom.RectangularShape;
-import java.awt.Point;
-import javax.swing.JPopupMenu;
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.gui.APopupHelper;
-import atlantis.parameters.APar;
-import atlantis.utils.APolygon;
-
-/**
- * The abstract supperclass of all the Atlantis interactions.
- */
-public abstract class AInteraction
-{
-	protected static APar parameterStore = APar.instance();
-	
-    /** When the inteaction does'nt need repainting */
-    public final static int NO_REPAINT = 0;
-
-    /**
-     * When the inteaction needs an automatic repainting (acoording to its hot
-     * regions)
-     */
-    public final static int AUTOMATIC_REPAINT = 1;
-
-    /** When the inteaction needs an repaint of all windows */
-    public final static int ALL_WINDOWS_REPAINT = 3;
-
-    /** When the inteaction needs to reapint from scratch its window */
-    public final static int WINDOW_TOTAL_REPAINT = 4;
-
-    /**
-     * The constant used to specify that the interaction wants SCREEN
-     * COORDINATES
-     */
-    public final static int SCREEN_COORDINATES = 0;
-
-    /** The constant used to specify that the interaction wants WORLD COORDINATES */
-    public final static int WORLD_COORDINATES = 1;
-
-    protected final static ADrawParameters frameDrawParameters = new ADrawParameters(true, AColorMap.BK, 4, 1, 1, AGraphics.SYMBOL_FILLED_BOX);
-
-    protected final static ADrawParameters drawParameters = new ADrawParameters(true, AColorMap.WH, 4, 1, 0, AGraphics.SYMBOL_FILLED_BOX);
-
-    protected AWindow window;
-    protected static final int ctrlPtSize = 1;
-    protected RectangularShape[] hr;
-    protected Point2D.Double[] pt;
-    protected Rectangle oldAffectedRegion;
-    protected int hotRegionsCount;
-    protected int repaintMode;
-    protected int coordinatesType;
-    protected boolean isPrintable;
-
-    /**
-     * Creates a new Interaction.
-     * 
-     * @param hotRegionsCount The number of hot regions used be the interaction
-     * @param repaintMode The type of repaint wanted. Could be: NO_REPAINT,
-     *        AUTOMATIC_REPAINT, WINDOW_REPAINT, ALL_WINDOWS_REPAINT,
-     *        WINDOW_TOTAL_REPAINT, ALL_WINDOWS_TOTAL_REPAINT.
-     * @param coordinatesType Could be: SCREEN_COORDINATES, WORLD_COORDINATES.
-     * @param isPrintable A boolean which indicates whether or not this
-     *        interaction should be printable.
-     */
-    public AInteraction(int hotRegionsCount, int repaintMode, int coordinatesType, boolean isPrintable)
-    {
-
-        this.hotRegionsCount = hotRegionsCount;
-        this.repaintMode = repaintMode;
-        this.coordinatesType = coordinatesType;
-        this.isPrintable = isPrintable;
-
-        hr = new RectangularShape[hotRegionsCount];
-
-        /*
-         * pt = new Point2D.Double[getPointsToIncludeCount()]; for (int i = 0; i <
-         * pt.length; i++) pt[i] = new Point2D.Double(0, 0);
-         */
-    }
-
-    /**
-     * Called by the InteractionsManager when the interaction gets connected to
-     * it.
-     */
-    public void connect(AInteractionsManager manager)
-    {
-        this.window = manager.getWindow();
-    }
-
-    /**
-     * Called by the InteractionsManager when the interaction gets disconnected
-     * from it.
-     */
-    public void disconnect()
-    {
-        this.window = null;
-    }
-
-    /**
-     * Called by the window on which this interaction works in order to allow
-     * the interaction to draw on it.
-     * 
-     * @param g The graphical context on which to draw.
-     */
-    public abstract void paint(Graphics2D g);
-
-    /**
-     * This method should convert any hot region used by interaction from user
-     * coordinates to screen coordinates.
-     * 
-     * @param region The number of the hot region which needs to be converted.
-     * @return The new RectangularShape object which contains the converted
-     *         region.
-     */
-    public RectangularShape getScreenHotRegion(int region)
-    {
-        switch (coordinatesType)
-        {
-            case AInteraction.SCREEN_COORDINATES:
-                return hr[region];
-
-            case AInteraction.WORLD_COORDINATES:
-                RectangularShape screenShape = (RectangularShape) hr[region].clone();
-                Point2D.Double center = window.calculateDisplay(screenShape.getCenterX(), screenShape.getCenterY());
-                double w = screenShape.getWidth();
-                double h = screenShape.getHeight();
-
-                screenShape.setFrame(center.x - w / 2, center.y - w / 2, w, h);
-                return screenShape;
-
-            default:
-                return null;
-        }
-    }
-
-    /**
-     * Returns an APolygon made up of the first 4 Hot Regions.
-     * 
-     * @return The APolygon.
-     */
-    public APolygon getAPolygon()
-    {
-        APolygon p = new APolygon();
-
-        for (int i = 0; i < 4; i++)
-            p.addPoint(hr[i].getCenterX(), hr[i].getCenterY());
-
-        return p;
-    }
-
-    /**
-     * Sets the x-coordinate of the center of a RectangularShape.
-     * 
-     * @param shape The shape to set the center to.
-     * @param x The new x-coordinate of the center.
-     */
-    protected void setCenterX(RectangularShape shape, double x)
-    {
-        double w = shape.getWidth();
-        double h = shape.getHeight();
-
-        shape.setFrame(x - w / 2, shape.getY(), w, h);
-    }
-
-    /**
-     * Sets the y-coordinate of the center of a RectangularShape.
-     * 
-     * @param shape The shape to set the center to.
-     * @param y The new y-coordinate of the center.
-     */
-    protected void setCenterY(RectangularShape shape, double y)
-    {
-        double w = shape.getWidth();
-        double h = shape.getHeight();
-
-        shape.setFrame(shape.getX(), y - h / 2, w, h);
-    }
-
-    /**
-     * Sets the center of a RectangularShape to (x, y).
-     * 
-     * @param shape The shape to set the center to.
-     * @param x The new x-coordinate of the center.
-     * @param y The new y-coordinate of the center.
-     */
-    protected void setCenter(RectangularShape shape, double x, double y)
-    {
-        double w = shape.getWidth();
-        double h = shape.getHeight();
-
-        shape.setFrame(x - w / 2, y - h / 2, w, h);
-    }
-
-    /**
-     * Returns the center of an arbitrary hot-region.
-     * 
-     * @param s The RectangularShape object the center of which is required
-     * @return The center in double format
-     */
-    public Point2D.Double getCenter(RectangularShape s)
-    {
-        return new Point2D.Double(s.getCenterX(), s.getCenterY());
-    }
-
-    /**
-     * Returns the distance between two hot-regions. The result depends on the
-     * coordinates type.
-     * 
-     * @param region1 The first region
-     * @param region2 The second region
-     * @return The distance
-     */
-    protected double getRadius(int region1, int region2)
-    {
-        double dx = hr[region1].getCenterX() - hr[region2].getCenterX();
-        double dy = hr[region1].getCenterX() - hr[region2].getCenterY();
-
-        return Math.sqrt(dx * dx + dy * dy);
-    }
-
-    /**
-     * Returns the distance between a point and a hot-regions. The result
-     * depends on the coordinates type.
-     * 
-     * @param x The x coordinate of the point
-     * @param y The y coordinate of the point
-     * @param region The region index to be used to get the region itself
-     * @return The distance
-     */
-    protected double getRadius(double x, double y, int region)
-    {
-        double dx = x - hr[region].getCenterX();
-        double dy = y - hr[region].getCenterY();
-
-        return Math.sqrt(dx * dx + dy * dy);
-    }
-
-    /**
-     * Returns the distance between the center (0, 0) and a hot-regions. The
-     * result depends on the coordinates type.
-     * 
-     * @param s The hot-region
-     * @return The distance
-     */
-    protected double getRadius(RectangularShape s)
-    {
-        return s.getCenterX() * s.getCenterX() + s.getCenterY() * s.getCenterY();
-    }
-
-    /**
-     * Retirns the angle made by the line connecting the two hot-regions and the
-     * horizontal axis.
-     * 
-     * @param region1 The first region
-     * @param region2 The second region
-     * @return the angle in radians.
-     */
-    protected double getAngle(int region1, int region2)
-    {
-        double dx = hr[region1].getCenterX() - hr[region2].getCenterX();
-        double dy = hr[region1].getCenterY() - hr[region2].getCenterY();
-
-        if (dx != 0 || dy != 0)
-            // is this correct
-            return Math.atan2(dx, dy);
-        else
-            return 0.;
-    }
-
-    protected void drawActivePoint(double x, double y, AGraphics g)
-    {
-        g.updateDrawParameters(frameDrawParameters);
-        g.drawSymbol(x, y);
-        g.updateDrawParameters(drawParameters);
-        g.drawSymbol(x, y);
-    }
-
-    protected void drawActivePoint(int region, AGraphics g)
-    {
-        g.updateDrawParameters(frameDrawParameters);
-        g.drawSymbol(hr[region].getCenterX(), hr[region].getCenterY());
-        g.updateDrawParameters(drawParameters);
-        g.drawSymbol(hr[region].getCenterX(), hr[region].getCenterY());
-    }
-
-    protected void drawLine(int region1, int region2, AGraphics g)
-    {
-        g.drawLine(hr[region1].getCenterX(), hr[region1].getCenterY(), hr[region2].getCenterX(), hr[region2].getCenterY());
-    }
-
-    public boolean isPrintable()
-    {
-        return isPrintable;
-    }
-
-    public AModifier[] getModifiers()
-    {
-        return new AModifier[0];
-    }
-    
-    public void showPopupMenu(Point p, int region) {
-        APopupHelper.showPopupMenu(p, window, getPopupItems());
-    }
-    
-    public JPopupMenu getPopupMenu() {
-        return APopupHelper.getPopupMenu(getPopupItems());
-    }
-    
-    public JMenuItem[] getPopupItems() {
-        return null;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AInteractionGroup.java
deleted file mode 100755
index fece4376137f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionGroup.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.ACanvas;
-import atlantis.parameters.APar;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import java.util.Vector;
-
-
-/**
- * The InteractionGroup groups interactions of the same kind under a single
- * object. The InteractionToolBar deals with the InteractionGroups instead
- * of dealing with the interactions directly.
- */
-public abstract class AInteractionGroup {
-  protected static APar parameterStore = APar.instance();
-
-  /** A group type which once made current affects only the window in which it works*/
-  public static final int WINDOW_GROUP=0;
-
-  /** A group type which once made current affects all the windows of the Canvas*/
-  public static final int CANVAS_GROUP=1;
-
-  protected String name;
-  protected String toolTip;
-  protected AInteractionsManager iManager;
-  private int groupType;
-  private boolean isCurrent=false;
-  private Vector<AInteraction> interactions;
-
-  /**
-   * Creates an InteractionGroup of a specific type
-   * and connected to some InteractionsManager
-   * @param groupType The type of the interface. Can be: WINDOW_GROUP or CANVAS_GROUP
-   * @param iManager The InteractionsManager to which this group will be connected.
-   */
-  public AInteractionGroup(int groupType, AInteractionsManager iManager) {
-
-    this.groupType=groupType;
-    this.iManager=iManager;
-
-    interactions=new Vector<AInteraction>();
-  }
-
-  public void setGroupName(String name) {
-    this.name=name;
-  }
-
-  public String getGroupName() {
-    return name;
-  }
-
-  public void setToolTip(String toolTip) {
-    this.toolTip=toolTip;
-  }
-
-  public String getToolTip() {
-    return toolTip;
-  }
-
-  public JMenuItem getPopupItem() {
-    JMenuItem item=new JMenuItem(name);
-
-    item.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        ACanvas.getCanvas().getCurrentWindow().getInteractionToolBar().setSelectedGroup(name);
-      }
-    });
-
-    return item;
-  }
-
-  /**
-   * Called by the InteractionsManager when the group gets connected to it.
-   */
-  public void connect() {}
-
-  /**
-   * Called by the InteractionsManager when the group gets disconnected from it.
-   */
-  public void disconnect() {}
-
-  public boolean isWindowGroup() {
-    return(groupType==WINDOW_GROUP);
-  }
-
-  public boolean isCanvasGroup() {
-    return(groupType==CANVAS_GROUP);
-  }
-  
-  /**
-   * Checks if any additional controls are provided by the current interaction group
-   * @return true if the interaction group has additional controls
-   */
-  public boolean hasAdditionalControls() { return false; }
-  
-  /**
-   * Returns the additional controls for the current interaction group
-   * @return the panel containing the additional controls
-   */
-  
-  public  JPanel getAdditionalControls() { return new JPanel(); }
-
-  /**
-   * Registers a new interaction which will be available with this group.
-   * @param i The Interaction to be registered.
-   */
-  protected void addInteraction(AInteraction i) {
-    interactions.addElement(i);
-    if(isCurrent)
-      iManager.setContext(this);
-  }
-
-  /**
-   * Removes a previously registered interaction from the group.
-   * @param i The Interaction to be removed.
-   */
-  protected void removeInteraction(AInteraction i) {
-    interactions.remove(i);
-  }
-
-  /**
-   * Removes all previously registered interactions from the group.
-   */
-  protected void removeAllInteractions() {
-    interactions.clear();
-  }
-
-  public Vector<AInteraction> getInteractions() {
-    return interactions;
-  }
-
-  /**
-   * Used to help copying of group. The group should set its internal state to be
-   * the same as the state of the given group.
-   * @param givenGroup The group to be copied.
-   */
-  public void setGroupState(AInteractionGroup givenGroup) {}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsConfigReader.java b/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsConfigReader.java
deleted file mode 100644
index 8b4dcaeb95f3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsConfigReader.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package atlantis.interactions;
-
-import java.util.Hashtable;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.projection.AProjectionsManager;
-
-/**
- * Handles the "Interactions" node in the XML configuration file:
- * <ul>
- * <li>store the InteractionControl node for each projection</li>
- * <li>process the lists of available/default projections in demo mode</li>
- * </ul>
- * 
- * @author waugh
- */
-public class AInteractionsConfigReader {
-
-	/** The set of XML nodes with projection information (name : node). */
-	private final static Hashtable<String,Node> projectionNodes = new Hashtable<String, Node>();
-
-	/**
-	 * Read and process the Interactions information from the XML configuration file.
-	 * 
-	 * @param node The XML Node which contains the <bold>Interactions</bold> node.
-	 */
-	public static void readInteractions(Node node) {
-		initProjectionNodes(node);
-		setAvailableProjectionsInDemoMode();
-	}
-	
-	/**
-	 * Get the configuration XML node corresponding to a given projection.
-	 * 
-	 * @param projectionName the name of the projection
-	 * @return the corresponding InteractionControl node
-	 */
-	public static Node getNode(String projectionName) {
-		return projectionNodes.get(projectionName);
-	}
-
-	private static void initProjectionNodes(Node node) {
-		NodeList childNodes=node.getChildNodes();
-		for(int i=0; i<childNodes.getLength(); i++) {
-			Node child=childNodes.item(i);
-
-			if(child.getNodeType()==Node.ELEMENT_NODE) {
-				String name=child.getAttributes().getNamedItem("projectionName").getNodeValue();
-				projectionNodes.put(name, child);
-			}
-		}
-	}
-
-	private static void setAvailableProjectionsInDemoMode() {
-		Set<Entry<String, Node>> entries = projectionNodes.entrySet();
-		for (Entry<String,Node> entry : entries) {
-			String name = entry.getKey();
-			Node node = entry.getValue();
-			boolean availableInDemoMode = node.getAttributes().getNamedItem("availableInDemoMode").getNodeValue().equals("YES");
-			boolean defaultInDemoMode = node.getAttributes().getNamedItem("defaultInDemoMode").getNodeValue().equals("YES");
-			if (availableInDemoMode) AProjectionsManager.makeProjectionAvailableInDemoMode(name);
-			if (defaultInDemoMode) AProjectionsManager.makeProjectionDefaultInDemoMode(name);
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsManager.java b/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsManager.java
deleted file mode 100755
index 40b0a2d484fb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AInteractionsManager.java
+++ /dev/null
@@ -1,535 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Rectangle;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-import java.awt.event.WindowFocusListener;
-import java.awt.event.WindowEvent;
-import java.awt.geom.Point2D;
-import java.awt.geom.RectangularShape;
-import java.util.LinkedList;
-import java.util.Vector;
-
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.gui.AEventQueue;
-import atlantis.gui.AInteractionToolBar;
-import atlantis.gui.APointerPositionWindow;
-import atlantis.gui.APreferencesControl;
-import atlantis.projection.AProjectionTrackResidual;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjection2D;
-
-/**
- * The InteractionsManager connects to the corresponding window in order to
- * provide basic functionality to the interactions.
- */
-public class AInteractionsManager
-implements MouseListener, MouseMotionListener, WindowFocusListener {
-    
-    public final static int LEFT=0;
-    public final static int MIDDLE=1;
-    public final static int RIGHT=2;
-    public final static int ALL=3;
-    
-    private final static int safetySize=5;
-    
-    private AWindow window;            //The window that is monitored by this interaction manager
-    private LinkedList<AInteraction> interactions;   //A list of all the interactions linked to this manager
-    private AInteraction dragInter;
-    private int dragInterHotRegion;
-//    private AInteraction mcInteraction;  //This one is set but not used by anything
-//    private int mcRegion;                //This one is set but not used by anything
-    private RectangularShape[] old_hr;
-    private AInteractionGroup previousInterface;
-    private AModifier[] mouseModifiers;
-    private boolean origAlias=false;
-    
-    /**
-     * Creates an InteractionsManager to work with a specific window.
-     * @param _window The window with wich the InteractionsManager should work.
-     */
-    public AInteractionsManager(AWindow _window) {
-        this.window=_window;
-        
-        interactions=new LinkedList<AInteraction>();
-//        mcInteraction=null;
-//        mcRegion=-1;
-        
-        window.addMouseListener(this);
-        window.addMouseMotionListener(this);
-        
-        mouseModifiers=new AModifier[] {
-            new AModifier(KeyEvent.VK_O, true, "Output of pointer position"),
-            new AModifier(KeyEvent.VK_W, true, "Window Menu pops up"),
-            new AModifier(KeyEvent.VK_I, true, "Interaction Manager pops up"),
-            new AModifier(KeyEvent.VK_UNDEFINED, true, "Interaction Menu pops up")
-        };
-    }
-    
-    public AModifier[] getMouseModifiers() {
-        return mouseModifiers;
-    }
-    
-    // Implementation of MouseListener
-    
-    public void mousePressed(MouseEvent e) {
-        
-        if(!ACanvas.getCanvas().getCurrentWindow().equals(window))
-            ACanvas.getCanvas().setCurrentWindow(window.getName());
-        
-        if(AInteractionsManager.isIntRightMouseButton(e))
-            switch(AEventQueue.getKeyboardState()) {
-                    
-                case KeyEvent.VK_W:
-                    if(!(window.getProjection() instanceof AProjectionTrackResidual))
-                        AWindow.getPopupMenu().show(window, e.getX(), e.getY());
-                    return;
-                    
-                case KeyEvent.VK_I:
-                    JPopupMenu menu=AInteractionToolBar.getInteractionMenu(window);
-                    
-                    menu.show(window, e.getX(), e.getY());
-                    return;
-                    
-                case KeyEvent.VK_O:
-                    Point2D.Double position =window.calculateUser(e.getX(),e.getY());
-                    //If LegoPlot need to alter phi coord using reverse of the adjustPhi function
-                    if( window.getProjection() instanceof AProjectionLegoPlot)
-                        position.x=-AProjectionLegoPlot.adjustPhi(window,-position.x,position.y);
-                    //Apply inverse non-linear transforms, if in 2D projection 
-                    if ( window.getProjection() instanceof AProjection2D)
-                      position = ((AProjection2D)window.getProjection()).inverseNonLinearTransform(position);
-                    //Add labels
-                    String positionX = window.getProjection().getXLabel() + parseUnits(position.x, window.getProjection().getXUnits());
-                    String positionY = window.getProjection().getYLabel() + parseUnits(position.y, window.getProjection().getYUnits());
-                    APreferencesControl.setPosMenuItem(true);//shows window if not already visible
-                    APointerPositionWindow.getInstance().toFront();//brings to front
-                    APointerPositionWindow.append(positionX + ", " + positionY + "\n");
-                    return;
-            }
-        
-        processMousePressed(e);
-        
-        if(dragInter!=null) {
-            dragInter.hr=old_hr;
-            ((AMouseDragListener)dragInter).cancel();
-//            if(dragInter instanceof AEnterExitListener)
-//                ((AEnterExitListener)dragInter).exited(dragInterHotRegion);
-            repaintInteraction(dragInter);
-            dragInter=null;
-            return;
-        }
-        
-        if(AInteractionsManager.isIntRightMouseButton(e))
-            if(processPopupShow(e))
-                return;
-        
-        if(setupDraggingByHotRegion(e)) return;
-        if(initializeSleepingInteraction(e)) return;
-    }
-    
-    private boolean processPopupShow(MouseEvent e) {
-        for(int i=interactions.size()-1; i>=0; i--) {
-            AInteraction interaction=(AInteraction)interactions.get(i);
-            
-            for(int region=0; region<interaction.hr.length; region++) {
-                if(interaction.getScreenHotRegion(region).contains(e.getPoint())) {
-                    interaction.showPopupMenu(e.getPoint(), region);
-                    return true;
-                }
-            }
-        }
-        
-        for(int i=interactions.size()-1; i>=0; i--) {
-            AInteraction interaction=(AInteraction)interactions.get(i);
-            
-            //Turn off right click menu for pick interaction
-            JMenuItem[] projmenu = (interaction instanceof APickInteraction) ? null : window.getProjection().getPopupItems();
-            JMenuItem[] intmenu = (interaction instanceof APickInteraction) ? null : interaction.getPopupItems();
-            
-            JPopupMenu finalmenu = new JPopupMenu();
-                  
-            // Combine projection and interaction menus     
-            for (int it = 0; intmenu != null && it < intmenu.length; it++) {
-                finalmenu.add(intmenu[it]);
-            }
-            
-            if (projmenu != null && projmenu.length > 0 && 
-                    intmenu != null && intmenu.length > 0) {
-                
-                finalmenu.addSeparator();
-            }
-            
-            for (int it = 0; projmenu != null && it < projmenu.length; it++) {
-                finalmenu.add(projmenu[it]);
-            }
-            
-            if (finalmenu.getComponentCount() != 0) {
-                finalmenu.show(window, (int)e.getPoint().getX(), (int)e.getPoint().getY());
-            }
-        }
-        
-        return false;
-    }
-    
-    public void mouseReleased(MouseEvent e) {
-        if(dragInter!=null) {
-            ((AMouseDragListener)dragInter).stop();
-//            if(dragInter instanceof AEnterExitListener)
-//                ((AEnterExitListener)dragInter).exited(dragInterHotRegion);
-            repaintInteraction(dragInter);
-            dragInter=null;
-        }
-        //reset anti-alias
-        if(origAlias && !(dragInter instanceof ASelection))
-            APreferencesControl.setAliasMenuItem(true);
-    }
-    
-    public void mouseClicked(MouseEvent e) {}
-    
-    /**
-     * This function is called each time we enter the window this interaction manager is assigned to
-     */
-    public void mouseEntered(MouseEvent e) {
-        
-      //Loop over interaction list from the end
-      for(int i=interactions.size()-1; i>=0; i--) {
-        
-        //get the interaction
-        AInteraction interaction=(AInteraction)interactions.get(i);
-        
-        //Check if this one listens to Enter/Exit events
-        if (interaction instanceof AEnterExitListener){           
-          ((AEnterExitListener)interaction).entered();
-        }
-      }
-    }
-    
-    /**
-     * This function is called each time we exit the window this interaction manager is assigned to
-     */
-    public void mouseExited(MouseEvent e) {
- 
-      //Loop over interaction list from the end
-      for(int i=interactions.size()-1; i>=0; i--) {
-            
-        //get the interaction
-        AInteraction interaction=(AInteraction)interactions.get(i);
-        
-        //Check if this one listens to Enter/Exit events
-        if (interaction instanceof AEnterExitListener) 
-          ((AEnterExitListener)interaction).exited();
-      }
-    }
-    
-    private void processMousePressed(MouseEvent e) {
-        //update if using anti-alias so can switch off during drag
-        if(!(dragInter instanceof ASelection))
-            origAlias = APreferencesControl.getAliasMenuItem();
-        for(int i=interactions.size()-1; i>=0; i--) {
-            AInteraction interaction=(AInteraction)interactions.get(i);
-            
-            if(!(interaction instanceof AMousePressListener)) continue;
-            AMousePressListener clickListener=(AMousePressListener)interaction;
-            
-            if(clickListener.getPressButton()!=AInteractionsManager.ALL)
-                if(clickListener.getPressButton()!=getButton(e)) continue;
-            Point2D.Double p=null;
-            
-            switch(interaction.coordinatesType) {
-                case AInteraction.SCREEN_COORDINATES:
-                    p=new Point2D.Double(e.getX(), e.getY());
-                    break;
-                    
-                case AInteraction.WORLD_COORDINATES:
-                    // p = window.calculateUser(inverseNonLinearTransform(e.getPoint()));
-                    p=window.calculateUser(e.getPoint());
-                    break;
-            }
-            clickListener.pressed(p, getButton(e), AEventQueue.getKeyboardState());
-            setTopZOrder(interaction);
-            repaintInteraction(interaction);
-        }
-    }
-    
-    // Implementation of MouseMotionListener
-    
-    public void mouseDragged(MouseEvent e) {
-        if(dragInter==null) return;
-        
-        //switch off anti-alias
-        if(origAlias && !(dragInter instanceof ASelection))
-            APreferencesControl.setAliasMenuItem(false);
-        Point2D.Double p=new Point2D.Double(e.getX(), e.getY());
-        
-        if(dragInter.coordinatesType==AInteraction.WORLD_COORDINATES)
-            // p = dragInter.manager.getWindow().calculateUser(inverseNonLinearTransform(p));
-            p=window.calculateUser(p);
-        
-        ((AMouseDragListener)dragInter).drag(p, dragInterHotRegion, AEventQueue.getKeyboardState());
-        repaintInteraction(dragInter);
-    }
-    
-    //This function is called every time the mouse is moved on the window
-    public void mouseMoved(MouseEvent e) {
-    }
-    
-    // Implementation of WindowsFocusListener
-    
-    /**
-     * Get called each time the canvas has obtained a focus
-     */
-    public void windowGainedFocus(WindowEvent e) {
-        //Check if the mouse is over this window (or any of its children)
-        if (getWindow().getMousePosition(true) != null){
-          //raise a mouseEntered event, so the cursor gets updated
-          this.mouseEntered(null);
-        }
-    }
-    
-    /**
-     * Get called each time the canvas has lost a focus
-     */
-    public void windowLostFocus(WindowEvent e) {}  
-    
-    //Methods belonging to this class
-    
-    /**
-     * Returns all the interactions associated with this InteractionsManager.
-     * @return The LinkedList containing the interactions.
-     * DO NOT CHANGE THIS LINKEDLIST, JUST READ IT.
-     */
-    public LinkedList<AInteraction> getInteractions() {
-        return interactions;
-    }
-    
-    public AWindow getWindow() {
-        return window;
-    }
-    
-    /**
-     * This function disconnects the current pannel and all it's
-     * interactions from the InteractionsManager.
-     */
-    public void forgetContext() {
-        // Disconnect all the old interactions
-        if(previousInterface!=null) previousInterface.disconnect();
-        for(int i=0; i<interactions.size(); i++) {
-            AInteraction inter=(AInteraction)interactions.get(i);
-            
-            inter.disconnect();
-        }
-        
-        // Clear the list and repaint the window
-        interactions.clear();
-        window.repaint();
-    }
-    
-    /**
-     * Sets the current interaction interface and adds its interactions to the list
-     * (removing first the old interface and its interactions).
-     * @param iFace The new interface.
-     */
-    public void setContext(AInteractionGroup iFace) {
-        forgetContext();
-        
-        if(iFace!=null)
-        {
-            // add to the list, connect and repaint the new interactions
-            Vector<AInteraction> iFaceInter=iFace.getInteractions();
-            
-            for(int i=0; i<iFaceInter.size(); i++) {
-                AInteraction inter=(AInteraction)iFaceInter.get(i);
-                interactions.addLast(inter);
-                inter.connect(this);
-                repaintInteraction(inter);
-            }
-            
-            iFace.connect();
-        }
-        previousInterface=iFace;
-    }
-    
-    private void repaintInteraction(AInteraction interaction) {
-        switch(interaction.repaintMode) {
-            case AInteraction.NO_REPAINT:
-                return;
-                
-            case AInteraction.ALL_WINDOWS_REPAINT:
-                window.repaint();
-                ACanvas.getCanvas().repaintOthers(window);
-                return;
-                
-            case AInteraction.WINDOW_TOTAL_REPAINT:
-                window.repaintFromScratch();
-                return;
-                
-            case AInteraction.AUTOMATIC_REPAINT:
-                Rectangle regionToRedraw=interaction.getScreenHotRegion(0).getBounds();
-                
-                for(int i=1; i<interaction.hr.length; i++)
-                    regionToRedraw.add(interaction.getScreenHotRegion(i).getBounds());
-                
-                if((interaction.pt!=null)&&(interaction.pt.length!=0))
-                    for(int i=0; i<interaction.pt.length; i++)
-                        regionToRedraw.add(getScreenPointToInclude(interaction, i));
-                
-                regionToRedraw.x-=safetySize;
-                regionToRedraw.y-=safetySize;
-                regionToRedraw.width+=2*safetySize;
-                regionToRedraw.height+=2*safetySize;
-                
-                if(interaction.oldAffectedRegion==null)
-                    window.repaint(regionToRedraw);
-                else
-                    window.repaint(SwingUtilities.computeUnion(interaction.oldAffectedRegion.x,
-                            interaction.oldAffectedRegion.y, interaction.oldAffectedRegion.width,
-                            interaction.oldAffectedRegion.height, new Rectangle(regionToRedraw)));
-                
-                interaction.oldAffectedRegion=regionToRedraw;
-                return;
-        }
-    }
-    
-    /**
-     * This method converts the specified "point to include" from user
-     * coordinates to screen coordinates.
-     * If the point is already in screen coordinates it just returns it.
-     */
-    private Point2D.Double getScreenPointToInclude(AInteraction interaction, int n) {
-        switch(interaction.coordinatesType) {
-            case AInteraction.SCREEN_COORDINATES:
-                return interaction.pt[n];
-                
-            case AInteraction.WORLD_COORDINATES:
-                return window.calculateDisplay(interaction.pt[n]);
-                
-            default:
-                return null;
-        }
-    }
-    
-    private boolean setupDraggingByHotRegion(MouseEvent e) {
-        for(int i=interactions.size()-1; i>=0; i--) {
-            AInteraction interaction=(AInteraction)interactions.get(i);
-            
-            if(!(interaction instanceof AMouseDragListener)) continue;
-            AMouseDragListener dInter=(AMouseDragListener)interaction;
-            
-            if(dInter.getButton()!=getButton(e)) continue;
-            
-            for(int j=0; j<interaction.hr.length; j++) {
-                if(interaction.getScreenHotRegion(j).contains(e.getPoint())) {
-                    dragInter=interaction;
-                    dragInterHotRegion=j;
-                    
-                    old_hr=new RectangularShape[dragInter.hr.length];
-                    for(int region=0; region<dragInter.hr.length; region++)
-                        old_hr[region]=(RectangularShape)dragInter.hr[region].clone();
-                    
-                    Point2D.Double p=new Point2D.Double(e.getX(), e.getY());
-                    
-                    if(interaction.coordinatesType==AInteraction.WORLD_COORDINATES)
-                        p=window.calculateUser(p);
-                    
-                    // add this statement to guarantee "p0" in AZMRInteraction is initialized
-                    // maybe need more analysis here
-                    if(dragInter instanceof AZMRInteraction)
-                        ((ASleepMouseDragListener)dragInter).init(p, AEventQueue.getKeyboardState());
-                    
-                    setTopZOrder(dragInter);
-                    ((AMouseDragListener)dragInter).start(p, dragInterHotRegion, AEventQueue.getKeyboardState());
-                    repaintInteraction(dragInter);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-    
-    private boolean initializeSleepingInteraction(MouseEvent e) {
-        for(int i=interactions.size()-1; i>=0; i--) {
-            AInteraction interaction=(AInteraction)interactions.get(i);
-            
-            if(interaction instanceof ASleepMouseDragListener) {
-                ASleepMouseDragListener sdListener=(ASleepMouseDragListener)interaction;
-                
-                if(sdListener.getButton()==getButton(e)) {
-                    dragInter=interaction;
-                    
-                    old_hr=new RectangularShape[dragInter.hr.length];
-                    for(int region=0; region<dragInter.hr.length; region++)
-                        old_hr[region]=(RectangularShape)dragInter.hr[region].clone();
-                    
-                    Point2D.Double p=new Point2D.Double(e.getX(), e.getY());
-                    
-                    if(interaction.coordinatesType==AInteraction.WORLD_COORDINATES)
-                        p=window.calculateUser(p);
-                    
-                    dragInterHotRegion=((ASleepMouseDragListener)dragInter).init(p, AEventQueue.getKeyboardState());
-                    
-                    setTopZOrder(dragInter);
-                    ((AMouseDragListener)dragInter).start(p, dragInterHotRegion, AEventQueue.getKeyboardState());
-//                    if(dragInter instanceof AEnterExitListener)
-//                        ((AEnterExitListener)dragInter).entered(dragInterHotRegion);
-                    
-                    repaintInteraction(dragInter);
-                    return true;
-                }
-            }
-        }
-        
-        return false;
-    }
-    
-    private void setTopZOrder(AInteraction ineraction) {
-        interactions.remove(ineraction);
-        interactions.addLast(ineraction);
-        repaintInteraction((AInteraction)interactions.getLast());
-    }
-    
-    private int getButton(MouseEvent e) {
-        if(SwingUtilities.isLeftMouseButton(e))
-            return LEFT;
-        else if(SwingUtilities.isMiddleMouseButton(e))
-            return MIDDLE;
-        else if(AInteractionsManager.isIntRightMouseButton(e))
-            return RIGHT;
-        else
-            return -1;
-    }
-    
-	private static boolean isIntRightMouseButton(MouseEvent e)
-	{
-	    return SwingUtilities.isRightMouseButton(e) ||
-	        AEventQueue.getIntRightMouseButton();
-	}
-	
-    private String parseUnits(double d, String units)
-    {
-        //covert units and value units shown are cm by default
-        double abs = Math.abs(d);
-        if(units.equals("(cm)"))
-        {
-            if (abs >= 100.)
-                return ": " + Math.rint(1000. * d / 100.) / 1000. + " m";
-            else if (abs >= 1.)
-                return ": " + Math.rint(1000. * d / 1.) / 1000. + " cm";
-            else if (abs >= 0.1)
-                return ": " + Math.rint(1000. * d / 0.1) / 1000. + " mm";
-            else
-                return ": " + Math.rint(d / 0.0001) + " um";
-        }
-        else
-        {
-            return ": " + Math.rint(1000. * d / 1.) / 1000. + units;
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ALineSegment.java b/graphics/AtlantisJava/src/atlantis/interactions/ALineSegment.java
deleted file mode 100755
index 7fe3cfe1acf8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ALineSegment.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package atlantis.interactions;
-
-
-import atlantis.utils.AVector;
-import java.awt.geom.*;
-
-
-/**
- * A implementation of the java.awt.RectangularShape which
- * represents a segment of a line.
- */
-public class ALineSegment extends RectangularShape implements PathIterator {
-
-  Point2D.Double p1;
-  Point2D.Double p2;
-  double thickness;
-
-  public ALineSegment(Point2D.Double p1, Point2D.Double p2, double thickness) {
-    this.p1=p1;
-    this.p2=p2;
-    this.thickness=thickness;
-  }
-
-  public ALineSegment(double x1, double y1, double x2, double y2, double thickness) {
-    this.p1=new Point2D.Double(x1, y1);
-    this.p2=new Point2D.Double(x2, y2);
-    this.thickness=thickness;
-  }
-
-  private Point2D.Double[] calculateNodes() {
-    AVector v1=new AVector(p1, p2).makeUnitary().scale(thickness/2).rotate(Math.PI/2);
-    AVector v2=new AVector(p1, p2).makeUnitary().scale(thickness/2).rotate(-Math.PI/2);
-
-    Point2D.Double[] p=new Point2D.Double[4];
-
-    p[0]=new Point2D.Double(p1.x+v1.dx, p1.y+v1.dy);
-    p[1]=new Point2D.Double(p2.x+v1.dx, p2.y+v1.dy);
-    p[2]=new Point2D.Double(p2.x+v2.dx, p2.y+v2.dy);
-    p[3]=new Point2D.Double(p1.x+v2.dx, p1.y+v2.dy);
-
-    return p;
-  }
-
-  public Rectangle2D getBounds2D() {
-    Point2D.Double[] p=calculateNodes();
-
-    double minX, minY, maxX, maxY;
-
-    minX=maxX=p[0].x;
-    minY=maxY=p[0].y;
-
-    for(int i=1; i<p.length; i++) {
-      if(p[i].x<minX) minX=p[i].x;
-      if(p[i].x>maxX) maxX=p[i].x;
-      if(p[i].y<minY) minY=p[i].y;
-      if(p[i].y>maxY) maxY=p[i].y;
-    }
-
-    return new Rectangle2D.Double(minX, minY, maxX-minX, maxY-minY);
-  }
-
-  public boolean contains(double x, double y) {
-    boolean c=false;
-    Point2D.Double[] p=calculateNodes();
-
-    for(int i=0, j=p.length-1; i<p.length; j=i++)
-      if((((p[i].y<=y)&&(y<p[j].y))||((p[j].y<=y)&&(y<p[i].y)))
-          &&(x<(p[j].x-p[i].x)*(y-p[i].y)/(p[j].y-p[i].y)+p[i].x)
-          )  c=!c;
-
-    return c;
-  }
-
-  public boolean intersects(double x, double y, double w, double h) {
-    return false;
-  }
-
-  public boolean contains(double x, double y, double w, double h) {
-    return false;
-  }
-
-  public PathIterator getPathIterator(AffineTransform at) {
-    lineNumber=-1;
-    return this;
-  }
-
-  public void setFrame(double x, double y, double w, double h) {}
-
-  public boolean isEmpty() {
-    return false;
-  }
-
-  public double getWidth() {
-    return getBounds2D().getWidth();
-  }
-
-  public double getHeight() {
-    return getBounds2D().getHeight();
-  }
-
-  public double getX() {
-    return getBounds2D().getX();
-  }
-
-  public double getY() {
-    return getBounds2D().getY();
-  }
-
-  // PathIterator implementation
-  int lineNumber;
-
-  // Returns the coordinates and type of the current path segment in the iteration.
-  public int currentSegment(double[] coords) {
-    Point2D.Double[] p=calculateNodes();
-
-    if(lineNumber==-1) {
-      coords[0]=p[0].x;
-      coords[1]=p[0].y;
-      return PathIterator.SEG_MOVETO;
-    }
-
-    if(lineNumber==4) return PathIterator.SEG_CLOSE;
-
-    coords[0]=p[lineNumber].x;
-    coords[1]=p[lineNumber].y;
-    return PathIterator.SEG_LINETO;
-  }
-
-  public int currentSegment(float[] coords) {
-    Point2D.Double[] p=calculateNodes();
-
-    if(lineNumber==-1) {
-      coords[0]=(float)p[0].x;
-      coords[1]=(float)p[0].y;
-      return PathIterator.SEG_MOVETO;
-    }
-
-    if(lineNumber==4) return PathIterator.SEG_CLOSE;
-
-    coords[0]=(float)p[lineNumber].x;
-    coords[1]=(float)p[lineNumber].y;
-    return PathIterator.SEG_LINETO;
-  }
-
-  // Returns the winding rule for determining the interior of the path.
-  public int getWindingRule() {
-    return PathIterator.WIND_NON_ZERO;
-  }
-
-  public boolean isDone() {
-    if(lineNumber>4)
-      return true;
-    else
-      return false;
-  }
-
-  public void next() {
-    lineNumber++;
-  }
-
-  public String toString() {
-    return "ALineSegment["+p1.x+", "+p1.y+", "+p2.x+", "+p2.y+"]";
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AModifier.java b/graphics/AtlantisJava/src/atlantis/interactions/AModifier.java
deleted file mode 100644
index d1b57d65f839..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AModifier.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * AModifier.java
- *
- * Created on 16 July 2007, 12:17 by Adam Davison <adamd at hep.ucl.ac.uk>
- */
-
-package atlantis.interactions;
-
-import java.awt.event.KeyEvent;
-
-/**
- * A structure for holding details of an interaction modifier key
- *
- * @author Adam Davison
- */
-public class AModifier {
-    
-    public static AModifier nothing = new AModifier(KeyEvent.VK_UNDEFINED, false, "Default interaction");
-    
-    private int m_keycode;
-    private char m_keychar;
-    
-    // Won't use mouse button id's from MouseEvent because i have some memory
-    // of this not being very platform independant, can fiddle this if we need
-    // middle click or something later.
-    private boolean m_right;
-    
-    private String m_desc;
-    
-    public AModifier(int keycode, boolean right, String desc) {
-        m_keycode = keycode;
-        m_keychar = (char)keycode;
-        m_right = right;
-        m_desc = desc;
-    }
-    
-    public int getKeyCode() {
-        return m_keycode;
-    }
-    
-    public char getKeyChar() {
-        return m_keychar;
-    }
-    
-    public boolean getRightClick() {
-        return m_right;
-    }
-    
-    public String toKeyString() {
-        String ret = "";
-        if (m_keycode != KeyEvent.VK_UNDEFINED) {
-            ret = String.valueOf(m_keychar);
-            if (m_right) {
-                ret = ret.concat(" + ");
-            }
-        }
-        
-        if (m_right) {
-            ret = ret.concat("Right");
-        }
-
-        return ret;
-    }
-    
-    public String toDescString() {
-        return m_desc;
-    }
-    
-    // Two interactions are pretty much the same even if they have different
-    // descriptions, hence I won't override equals here and cause problems
-    // putting these things in containers or anything.
-    public boolean sameAs(AModifier acmp) {
-        if (acmp == null) { return false; }
-        
-        if (acmp.getKeyCode() != getKeyCode()) {
-            return false;
-        }
-        
-        if (acmp.getRightClick() != getRightClick()) {
-            return false;
-        }
-        
-        return true;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AMouseDragListener.java b/graphics/AtlantisJava/src/atlantis/interactions/AMouseDragListener.java
deleted file mode 100755
index 155f9126f2e5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AMouseDragListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.geom.*;
-
-
-/**
- * Implemented by the interactions to get drag events
- * from the InteractionsManager.
- */
-public interface AMouseDragListener {
-
-  // Should return one of the LEFT, MIDDLE or RIGHT constants from AWindow
-  int getButton();
-
-  void start(Point2D.Double p, int region, int key);
-  void drag(Point2D.Double p, int region, int key);
-  void stop();
-  void cancel();
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AMousePressListener.java b/graphics/AtlantisJava/src/atlantis/interactions/AMousePressListener.java
deleted file mode 100755
index a71c7ca21871..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AMousePressListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.geom.*;
-
-
-/**
- * Implemented by the interactions to get press events
- * from the InteractionsManager.
- */
-public interface AMousePressListener {
-
-  int getPressButton();
-  void pressed(Point2D.Double p, int button, int key);
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ANZMRGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/ANZMRGroup.java
deleted file mode 100644
index 713743861be9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ANZMRGroup.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package atlantis.interactions;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANZMRGroup extends AInteractionGroup {
-  
-    private ANZMRInteraction transformInteraction;
-
-  public ANZMRGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-    transformInteraction=new ANZMRInteraction();
-    this.addInteraction(transformInteraction);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ANZMRInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/ANZMRInteraction.java
deleted file mode 100644
index 99ac11f99f3e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ANZMRInteraction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.nge.ANManager;
-import atlantis.nge.ANPickDrawer;
-import atlantis.nge.ANPickResultPrinter;
-import atlantis.nge.ANProjection;
-import atlantis.nge.ANProjection3D;
-import atlantis.nge.ANProjectionPhysics;
-import java.awt.Graphics2D;
-import java.awt.geom.Point2D.Double;
-
-/**
- *
- * @author Adam Davison, Mark Stockton
- */
-public class ANZMRInteraction extends AInteraction implements ASleepMouseDragListener, AMousePressListener {
-
-    private Double m_last = null;
-    
-    public ANZMRInteraction() {
-        super(0, WINDOW_TOTAL_REPAINT, SCREEN_COORDINATES, false);
-    }
-    
-    @Override
-    public void paint(Graphics2D g) {
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void doRotation(double dx, double dy) {
-        ANProjection np = (ANManager.getManager().getFrameManager(window).getTargetProjection());
-        if (np instanceof ANProjection3D) {
-            ((ANProjection3D) np).dPhi((float) (dx / 4.0));
-            ((ANProjection3D) np).dElev((float) (dy / 4.0));
-        }else if (np instanceof ANProjectionPhysics) {
-            ((ANProjectionPhysics) np).dPhi((float) (dx / 4.0));
-            ((ANProjectionPhysics) np).dElev((float) (dy / 4.0));
-        }
-    }
-    
-    public int getButton() {
-        return AInteractionsManager.LEFT;
-    }
-
-    public void start(Double p, int region, int key) {
-        m_last = p;
-    }
-
-    public void drag(Double p, int region, int key) {
-        double dx = (p.getX() - m_last.getX());
-        double dy = (p.getY() - m_last.getY());
-        
-        doRotation(dx,dy);
-        
-        m_last = p;
-    }
-
-    public void stop() {
-        
-    }
-
-    public void cancel() {
-        
-    }
-
-    public int init(Double p, int key) {
-        return -1;
-    }
-
-    public int getPressButton() {
-        return AInteractionsManager.ALL;
-    }
-
-    public void pressed(Double p, int button, int key) {
-        System.out.println("ZMR PRESS: " + p.getX() + ":" + p.getY());
-        ANPickDrawer pd = new ANPickDrawer(window, window.getWidth(), window.getHeight(),
-                (int)p.getX(), (int)p.getY(), new ANPickResultPrinter());
-        pd.doPick();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AParallelogramSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/AParallelogramSelection.java
deleted file mode 100755
index 75e3f512cbc0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AParallelogramSelection.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-public class AParallelogramSelection extends ASelection {
-  final private static int STARTING_WIDTH=25;
-
-  public AParallelogramSelection() {
-    super(6);
-  }
-
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    setCenter(hr[0], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[1], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[2], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[3], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[4], p.x, p.y);
-    setCenter(hr[5], p.x, p.y);
-
-    region=5;
-    return region;
-  }
-
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-
-    double dx, dy;
-
-    switch(region) {
-    case 4:
-      dx=hr[0].getCenterX()-hr[4].getCenterX();
-      dy=hr[0].getCenterY()-hr[4].getCenterY();
-
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[0], p.x+dx, p.y+dy);
-      setCenter(hr[3], p.x-dx, p.y-dy);
-      break;
-
-    case 5:
-      dx=hr[1].getCenterX()-hr[5].getCenterX();
-      dy=hr[1].getCenterY()-hr[5].getCenterY();
-
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[1], p.x+dx, p.y+dy);
-      setCenter(hr[2], p.x-dx, p.y-dy);
-      break;
-
-    case 0:
-    case 3:
-      setCenter(hr[region], p.x, p.y);
-
-      dx=hr[region].getCenterX()-hr[4].getCenterX();
-      dy=hr[region].getCenterY()-hr[4].getCenterY();
-
-      if(region==3) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[1], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      setCenter(hr[2], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      setCenter(hr[0], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[3], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      break;
-
-    case 1:
-    case 2:
-      setCenter(hr[region], p.x, p.y);
-
-      dx=hr[region].getCenterX()-hr[5].getCenterX();
-      dy=hr[region].getCenterY()-hr[5].getCenterY();
-
-      if(region==2) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[1], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      setCenter(hr[2], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      setCenter(hr[0], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[3], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      break;
-    }
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  /**
-   * Make the affine transform which corresponds to this
-   * paralleogram-shaped selection.
-   */
-  public Point2D.Double[] getCorners() {
-    int first=getUpperLeftRegion();
-
-    // Calculate the opposite index.
-    int third=(first+2)%4;
-
-    // Now use the cross-product to determine which of the
-    // remaining points is the one which keep the path going
-    // clockwise.
-    int second=(first+1)%4;
-    double dx0=hr[third].getCenterX()-hr[first].getCenterX();
-    double dy0=hr[third].getCenterY()-hr[first].getCenterY();
-    double dx1=hr[second].getCenterX()-hr[first].getCenterX();
-    double dy1=hr[second].getCenterY()-hr[first].getCenterY();
-
-    if(dx0*dy1-dy0*dx1>0) second=(first+3)%4;
-
-    return convert(first, second, third);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/APickGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/APickGroup.java
deleted file mode 100755
index e45447479dd5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/APickGroup.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JComboBox;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-
-import atlantis.canvas.ACanvas;
-import atlantis.parameters.APar;
-
-public class APickGroup extends AInteractionGroup
-{
-    private APickInteraction pickInteraction;
-    private JComboBox mode;
-    // the panel that will contain the additional controls for the interactions
-    private JPanel additionalControls;
-
-    private final static String HITS = "Event Data";
-    private final static String DETECTORS = "Detectors";
-
-    public APickGroup(AInteractionsManager iManager)
-    {
-        super(AInteractionGroup.CANVAS_GROUP, iManager);
-        
-        // create the additional controls panel
-        additionalControls = new JPanel();
-
-        pickInteraction = new APickInteraction();
-        addInteraction(pickInteraction);
-        mode = new JComboBox();
-        mode.addItem(HITS);
-        mode.addItem(DETECTORS);
-        if (parameterStore.get("Event", "PickingMode").getI() == 0)
-            mode.setSelectedItem(HITS);
-        else
-            mode.setSelectedItem(DETECTORS);
-        mode.addActionListener(new ModeListener());
-        additionalControls.add(mode);
-    }
-    
-    /**
-     * pick has additional controls, so return true
-     */
-    public boolean hasAdditionalControls() {
-      return true;
-    }
-    
-    /**
-     * returns the additional controls
-     */
-    public JPanel getAdditionalControls() {
-      return additionalControls;
-    }
-
-    public JMenuItem getPopupItem()
-    {
-        // generating the menu
-        JMenu menu = new JMenu(name);
-        ActionListener l = new PopUpListener();
-
-        menu.add(HITS).addActionListener(l);
-        menu.add(DETECTORS).addActionListener(l);
-        return menu;
-    }
-
-    public void connect()
-    {
-        super.connect();
-        if (parameterStore.get("Event", "PickingMode").getI() == 0)
-            mode.setSelectedItem(HITS);
-        else
-            mode.setSelectedItem(DETECTORS);
-    }
-
-    class PopUpListener implements ActionListener
-    {
-        public void actionPerformed(ActionEvent e)
-        {
-            ACanvas.getCanvas().getCurrentWindow().getInteractionToolBar().setSelectedGroup(name);
-            mode.setSelectedItem(e.getActionCommand());
-            if (e.getActionCommand().equals(HITS))
-                parameterStore.get("Event", "PickingMode").setI(0);
-            else if (e.getActionCommand().equals(DETECTORS))
-                parameterStore.get("Event", "PickingMode").setI(1);
-        }
-    }
-
-    class ModeListener implements ActionListener
-    {
-        public void actionPerformed(ActionEvent e)
-        {
-            if (mode.getSelectedItem().equals(HITS))
-                parameterStore.get("Event", "PickingMode").setI(0);
-            else if (mode.getSelectedItem().equals(DETECTORS))
-                parameterStore.get("Event", "PickingMode").setI(1);
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/APickInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/APickInteraction.java
deleted file mode 100755
index a12cdce3ee14..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/APickInteraction.java
+++ /dev/null
@@ -1,419 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Robot;
-import java.awt.AWTException;
-import java.awt.geom.Point2D;
-import java.awt.event.KeyEvent;
-import javax.swing.SwingUtilities;
-
-import atlantis.list.AList;
-import atlantis.list.AListManager;
-import atlantis.nge.ANManager;
-import atlantis.nge.ANProjectionPhysics;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.ALVL1TriggerTowerData;
-import atlantis.data.AMuonHitData;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionNPhysics;
-import atlantis.projection.AProjectionTrackResidual;
-import atlantis.projection.AProjectionsManager;
-import atlantis.event.AData;
-import atlantis.data.AJetData;
-import atlantis.data.ACalorimeterData;
-import atlantis.data.ALArData;
-import atlantis.data.ASVxData;
-import atlantis.data.ARVxData;
-import atlantis.data.ATILEData;
-import atlantis.data.ATrackData;
-import atlantis.graphics.ACursorFactory;
-import atlantis.graphics.APickingGraphics2D;
-import atlantis.utils.AMath;
-
-
-
-public class APickInteraction extends AInteraction implements AMousePressListener, AEnterExitListener
-{
-    
-    public APickInteraction()
-    {
-        super(0, NO_REPAINT, SCREEN_COORDINATES, false);
-    }
-    
-    
-    
-    public int getPressButton()
-    {
-        return AInteractionsManager.ALL;
-    }
-    
-    
-    
-    private void showCaloPulseShapePlot(AList picked, boolean withcurve)
-    {
-        Integer i = APickingGraphics2D.getPickedHitIndex();
-        if(i != null)
-        {
-            ACalorimeterData c = (ACalorimeterData) picked.getSource();
-            c.plotPulseShapes(i.intValue(), withcurve);
-        }
-    }
-    
-    
-    
-    private void showTriggerPulseShapePlot(AList picked)
-    {
-        Integer i = APickingGraphics2D.getPickedHitIndex();
-        if(i != null)
-        {
-            ALVL1TriggerTowerData t = (ALVL1TriggerTowerData) picked.getSource();
-            t.plotPulseShapes(i.intValue());
-        }
-    }
-    
-    
-    
-    private void ignorePickedItem(AList picked)
-    {
-        Integer i = APickingGraphics2D.getPickedHitIndex();
-        if(i != null)
-        {
-            AData d = (AData) picked.getSource();
-            String k = d.getStoreGateKey() != null ? ":" + d.getStoreGateKey() : "";
-            String m = "\n\n" + d.getNameScreenName() + k + " ID " +
-            d.getIdFromIndex(i.intValue()) + " (index " + i.intValue() +
-            ")  will be invisible and ignored " +
-            "(until removed from the Invisible list)";
-            AOutput.alwaysAppend(m, ALogInterface.WARNING);
-            AListManager.getInstance().addInvisible(picked);
-        }
-        
-    }
-    
-    
-    
-    private void showMuonSector(AList picked)
-    {
-        if(picked.getSource() instanceof AMuonHitData)
-        {
-            int sector = ((AMuonHitData) picked.getSource()).getSector(picked.getItems()[0]);
-            int signRZ = ((AMuonHitData) picked.getSource()).getRZSign(picked.getItems()[0]);
-            if(signRZ == -1)
-            {
-                sector = (sector + 8) % 16;
-            }
-            parameterStore.get("YZ", "Phi").setD(sector * 22.5);
-            window.repaintFromScratch();
-        }
-    }
-    
-    
-    
-    private void showTrackResidualPlot(AList picked)
-    {
-        AData pickedData = picked.getSource();
-        if(pickedData instanceof ATrackData)
-        {
-            if(((ATrackData)pickedData).getResidualStatus())
-            {
-                APickingGraphics2D.showTrackResiduals(window,
-                                                      (int) APickingGraphics2D.getPickedH(), (int) APickingGraphics2D.getPickedV());
-            }
-            else
-            {
-                AOutput.append("\nNo residual information available for this track\n",
-                               ALogInterface.PICK);
-            }
-        }
-    }
-    
-    private void showJetView(AList picked)
-    {
-        AData pickedData = picked.getSource();
-        if(pickedData instanceof AJetData){
-            
-            // Use window "B" to show jets
-            String jetWindowName = "B";
-            if(!ACanvas.getCanvas().isValidWindowName(jetWindowName))
-            {
-                AOutput.append("\nWindow " + jetWindowName + " is not available in current layout"
-                               + "\n", ALogInterface.WARNING);
-            }
-            else if(window.getName().equals(jetWindowName)){
-                AOutput.append("\nPlease select jet view from a window other than window " + jetWindowName, ALogInterface.WARNING);
-            }
-            else{
-                AWindow jetWindow = ACanvas.getCanvas().getWindow(jetWindowName);
-                
-                //set as NYX to get transition
-                AProjectionNPhysics jetProj =
-                (AProjectionNPhysics) AProjectionsManager.getProjection("NPhysics");
-                
-                //setup the projection
-                ACanvas.getCanvas().moveToFrontWindow(jetWindowName);
-                jetWindow.setProjection(jetProj);
-                
-                //configure the projection
-                jetProj.configureFrame(ANManager.getManager().getFrameManager(jetWindow));
-                ANProjectionPhysics finalProj = (ANProjectionPhysics) ANManager.getManager().getFrameManager(jetWindow).getTargetProjection();
-                
-                AJetData jd = ((AJetData) pickedData);
-                int index=picked.getItems()[0];
-                finalProj.lookAt(jd, index);
-            }
-        }
-    }
-    
-    
-    /**
-     * @param picked AList
-     * Check if picked data is SimVertex or RecVertex (RVx) and use the values
-     * as Atlantis primary vertex: Projection->eta/phi menu
-     */
-    private void setAtlantisPrimaryVertex(AList picked)
-    {
-        Integer i = APickingGraphics2D.getPickedHitIndex();
-        AData pickedData = picked.getSource();
-        double[] vtx = null;
-        
-        if(i != null)
-        {
-            if(pickedData instanceof ARVxData)
-            {
-                vtx = ((ARVxData) pickedData).getVertex(i.intValue());
-            }
-            if(pickedData instanceof ASVxData)
-            {
-                vtx = ((ASVxData) pickedData).getVertex(i.intValue());
-            }
-            
-            if(vtx != null)
-            {
-                parameterStore.get("Event", "XVtx").setD(vtx[0]);
-                parameterStore.get("Event", "YVtx").setD(vtx[1]);
-                parameterStore.get("Event", "ZVtx").setD(vtx[2]);
-                AOutput.append("\n\nPrimary vertex set: Projection->" +
-                               AMath.PHI + AMath.ETA + ":\n" +
-                               "  XVtx = " + String.format("%.5f",vtx[0]) + " cm\n" +
-                               "  YVtx = " + String.format("%.5f",vtx[1]) + " cm\n" +
-                               "  ZVtx = " + String.format("%.5f",vtx[2]) + " cm\n",
-                               ALogInterface.WARNING);
-            }
-        }
-        
-    } // setAtlantisPrimaryVertex() -----------------------------------------
-    
-    
-    
-    public void pressed(Point2D.Double p, int button, int key)
-    {
-        Point ps = null;
-        Point pw = null;
-        int pickingMode = parameterStore.get("Event", "PickingMode").getI();
-        
-        if(button == AInteractionsManager.LEFT)
-        {
-            if(key == KeyEvent.VK_C)
-            {
-                AListManager.getInstance().clearHighlightAndMassCalculation();
-            }
-            else
-            {
-                Rectangle bounds = window.getBounds();
-                bounds.setLocation(0, 0);
-                window.paintWindowFromScratch(new APickingGraphics2D(bounds,
-                                                                     pickingMode, new Point((int) p.x, (int) p.y)));
-                
-                // this call prints pick information (calls datatype's getHitInfo())
-                if(!(key == KeyEvent.VK_L))
-                {
-                	APickingGraphics2D.printPicked();
-                }
-                AList picked = APickingGraphics2D.getPickedHit();
-                
-                if(picked != null && pickingMode == APickingGraphics2D.PICK_HITS_AND_TRACKS)
-                {
-                    
-                    // highlight by default (not only when key==KeyEvent.VK_H)
-                    AListManager.getInstance().highlight(picked);
-                    
-                    // try to always show calo pulse shapes plot by default
-                    // if no key modifier is pressed
-                    if(picked.getSource() instanceof ACalorimeterData &&
-                       key == KeyEvent.KEY_LOCATION_UNKNOWN)
-                    {
-                        showCaloPulseShapePlot(picked, true);
-                    }
-                    // 2009-01-19 for LAr only, see comment at
-                    // the ALArData.plotADCCounts() method
-                    if(picked.getSource() instanceof ACalorimeterData &&
-                       key == KeyEvent.VK_D)
-                    {
-                        showCaloPulseShapePlot(picked, false);
-                    }
-                    if(picked.getSource() instanceof ATILEData &&
-                       key == KeyEvent.VK_T) {
-                        
-                        Integer i = APickingGraphics2D.getPickedHitIndex();
-                        if (i != null) {
-                            ATILEData c = (ATILEData) picked.getSource();
-                            c.plotPulseShapesWithTiming(i.intValue());
-                        }
-                    }
-                    if(picked.getSource() instanceof ALVL1TriggerTowerData &&
-                       key == KeyEvent.KEY_LOCATION_UNKNOWN)
-                    {
-                        showTriggerPulseShapePlot(picked);
-                    }
-                    
-                    if(picked.getSource() instanceof AJetData)
-                    {
-                        double phi = ((AJetData) picked.getSource()).getPhi(picked.getItems()[0]);
-                        parameterStore.get("XZ", "Phi").setD(Math.toDegrees(phi));
-                    }
-                    
-                    switch(key)
-                    {
-                        case KeyEvent.VK_A:
-                            AListManager.getInstance().add(picked);
-                            break;
-                        case KeyEvent.VK_S:
-                            showMuonSector(picked);
-                            break;
-                        case KeyEvent.VK_N:
-                            APickingGraphics2D.navigatePicked();
-                            break;
-                        case KeyEvent.VK_R:
-                            showTrackResidualPlot(picked);
-                            break;
-                        case KeyEvent.VK_V:
-                            setAtlantisPrimaryVertex(picked);
-                            break;
-                        case KeyEvent.VK_I:
-                            ignorePickedItem(picked);
-                            break;
-                        case KeyEvent.VK_J:
-                            if(parameterStore.get("Prefs", "OpenGL").getStatus()){
-                                showJetView(picked);
-                            }
-                            break;
-                        case KeyEvent.VK_M:
-                            AListManager.getInstance().massCalc(picked);
-                            break;
-                        case KeyEvent.VK_L: // Mass calculation for Neutral Decay scenarios
-                        	AListManager.getInstance().massCalcV0(picked);
-                        	break;
-                        case KeyEvent.VK_P: // Calculate delta Phi for picked objects
-                        	AListManager.getInstance().deltaR(picked);
-                        	break;
-                        	
-                            
-                    } // switch
-                    
-                }
-                else if(pickingMode == APickingGraphics2D.PICK_DETECTORS)
-                {
-                    AListManager.getInstance().clearHighlight();
-                }
-            }
-            
-        } // if(button == AInteractionsManager.LEFT)
-        
-        else if(button == AInteractionsManager.RIGHT)
-        {
-            Rectangle bounds = window.getBounds();
-            bounds.setLocation(0, 0);
-            window.paintWindowFromScratch(new APickingGraphics2D(bounds, APickingGraphics2D.MOVE,
-                                                                 new Point((int) p.x, (int) p.y)));
-        }
-        
-        if(pickingMode != APickingGraphics2D.PICK_DETECTORS)
-        {
-            if(APickingGraphics2D.getPickedData() != null
-               || APickingGraphics2D.getPickedResidual() != null)
-            {
-                /* int numEvents = Atlantis.getEventManager().getNumberOfEvents();
-                 if(numEvents > 0)
-                 {
-                 AOutput.append("\n(" + ++numEvents + " events currently displayed)\n", ALogPane.PICK);
-                 }*/
-                
-                //TODO fix to avoid problems with nge
-                if(window==null)
-                    return;
-                
-                pw = new Point(APickingGraphics2D.getPickedH(), APickingGraphics2D.getPickedV());
-                if(pw.x != 0 && pw.y != 0)
-                    try
-                {
-                    ps = new Point(pw);
-                    SwingUtilities.convertPointToScreen(ps, window);
-                    new Robot().mouseMove(ps.x, ps.y);
-                }
-                catch(AWTException e)
-                {}
-                else
-                {
-                    AOutput.alwaysAppend("\n\nYou must pick before you can move", ALogInterface.BAD_COMMAND);
-                }
-            }
-            else
-            {
-                if(!(window.getProjection() instanceof AProjectionTrackResidual))
-                    AOutput.alwaysAppend("\n\nNothing to pick", ALogInterface.BAD_COMMAND);
-            }
-        }
-        
-    } // pressed() ------------------------------------------------------------
-    
-    
-    public void paint(Graphics2D g)
-    {}
-    
-    /**
-     * Gets called each time we enter a window in which this interaction is active
-     */
-    public void entered()
-    {
-        //Set mouse cursor
-        window.setCursor(ACursorFactory.getInstance().getPickCursor());
-    }
-    
-    /**
-     * Gets called each time we leave a window in which this interaction is active
-     */
-    public void exited()
-    {
-        //Set mouse cursor
-        window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-    
-    public AModifier[] getModifiers()
-    {
-        AModifier[] mods = new AModifier[] {
-            new AModifier(KeyEvent.VK_UNDEFINED, false, "Pick"),
-            new AModifier(KeyEvent.VK_UNDEFINED, true, "Move to last picked"),
-            new AModifier(KeyEvent.VK_A, false, "Add to the current (active) list"),
-            new AModifier(KeyEvent.VK_C, false, "Clear highlighted and calculation lists"),
-            new AModifier(KeyEvent.VK_D, false, "Plot ADC counts (digits) only"),
-            new AModifier(KeyEvent.VK_T, false, "Plot raw and cell time pulses (TILE only)"),
-            new AModifier(KeyEvent.VK_I, false, "Ignore (make invisible) picked hits/tracks"),
-            new AModifier(KeyEvent.VK_L, false, "Add to the V0 mass calculation list"),
-            new AModifier(KeyEvent.VK_M, false, "Add to the mass calculation list"),    
-            new AModifier(KeyEvent.VK_P, false, "Calculate Delta R for 2 tracks"),
-            new AModifier(KeyEvent.VK_N, false, "Navigate (show data associations)"),
-            new AModifier(KeyEvent.VK_R, false, "Plot track residuals if available"),
-            new AModifier(KeyEvent.VK_S, false, "Select this muon Sector"),
-            new AModifier(KeyEvent.VK_V, false, "Set prim.vertex from picked rec/sim vertex"),
-            new AModifier(KeyEvent.VK_J, false, "Jet view (OpenGL only)")
-        };
-        
-        return mods;
-        
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/APopupListener.java b/graphics/AtlantisJava/src/atlantis/interactions/APopupListener.java
deleted file mode 100755
index f7b462043d6c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/APopupListener.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.Point;
-
-
-/**
- * The interactions implement this listener to get popup trigger events.
- */
-public interface APopupListener {
-  int REGION_POPUP=0;
-  int WINDOW_POPUP=1;
-
-  int getPopupType();
-  void showPopup(Point p, int region);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ARectangleSelection.java
deleted file mode 100755
index 818dd6120b24..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleSelection.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
-
-import atlantis.graphics.ACursorFactory;
-import atlantis.graphics.AGraphics;
-
-public class ARectangleSelection extends ASelection implements AEnterExitListener
-{
-    public ARectangleSelection()
-    {
-        super(4);
-    }
-
-    public int init(Point2D.Double p, int key)
-    {
-        isValid = false;
-
-        for (int i = 0; i < 4; i++)
-            setCenter(hr[i], p.x, p.y);
-
-        this.region = 2;
-        return region;
-    }
-
-    public void drag(Point2D.Double p, int region, int key)
-    {
-        isValid = true;
-
-        // Update the active control point.
-        setCenter(hr[region], p.x, p.y);
-
-        // Get the opposite control point.
-        int oppCtrlPt = (region + 2) % 4;
-        double xOpp = hr[oppCtrlPt].getCenterX();
-        double yOpp = hr[oppCtrlPt].getCenterY();
-
-        // Now choose the next control point so that we maintain a
-        // clockwise order to the points.
-        int otherCtrlPt = ((p.x < xOpp && p.y > yOpp) || (p.x > xOpp && p.y < yOpp)) ? 1 : 3;
-
-        otherCtrlPt = (region + otherCtrlPt) % 4;
-
-        // Set the other two control points.
-        setCenter(hr[otherCtrlPt], p.x, yOpp);
-        otherCtrlPt = (otherCtrlPt + 2) % 4;
-        setCenter(hr[otherCtrlPt], xOpp, p.y);
-    }
-
-    public void paint(Graphics2D g)
-    {
-        if (!isValid)
-            return;
-
-        AGraphics ag = AGraphics.makeAGraphics(g);
-
-        ag.updateDrawParameters(frameDrawParameters);
-        ag.drawPolygon(getAPolygon());
-        ag.updateDrawParameters(drawParameters);
-        ag.drawPolygon(getAPolygon());
-        drawActivePoint(region, ag);
-    }
-
-    public Point2D.Double[] getCorners()
-    {
-        int first = getUpperLeftRegion();
-
-        // Calculate the adjacent partner and the opposite corner.
-        int second = (first + 1) % 4;
-        int third = (first + 2) % 4;
-
-        return convert(first, second, third);
-    }
-
-    /**
-     * Get called each time we enter a window in which this interaction is
-     * active
-     */
-    public void entered()
-    {
-        // Set mouse cursor
-        window.setCursor(ACursorFactory.getInstance().getRectSelectCursor());
-    }
-
-    /**
-     * Get called each time we leave a window in which this interaction is active
-     */
-    public void exited()
-    {
-        //Set mouse cursor
-        window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleVPSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ARectangleVPSelection.java
deleted file mode 100755
index 8d26e25ff33e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleVPSelection.java
+++ /dev/null
@@ -1,524 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.geom.Point2D;
-import javax.swing.JMenuItem;
-import java.util.List;
-import java.util.ArrayList;
-
-import atlantis.event.AData;
-import atlantis.event.AEventManager;
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.ACalorimeterData;
-import atlantis.event.AEvent;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.utils.AMath;
-import atlantis.utils.A3Vector;
-
-public class ARectangleVPSelection extends ARectangleSelection
-                                   implements ActionListener, ADragListener
-{
-
-    public final static String RUBBERBAND_WHOLE_WINDOW = "Rubberband Whole Window";
-    public final static String ZOOM_LAR = "Zoom LAr";
-    public final static String ZOOM_CALORIMETERS = "Zoom Calorimeters";
-    public final static String CUT_ETAPHI = "Cut  ( " + AMath.ETA + AMath.PHI + " cut )";
-    public final static String PRINT_CONTENTS = "Print Contents";
-    public final static String SHOW_IN_3DBOX = "Show in 3DBox";
-    public final static String TURN_OFF_ETAPHI_CUT = "Turn off " + CUT_ETAPHI;
-
-    private static AEventManager eventManager = AEventManager.instance();
-
-    public ARectangleVPSelection()
-    {
-        super();
-
-        addActionButton(ZOOM_LAR, this, this);
-        addActionButton(ZOOM_CALORIMETERS, this, this);
-        addActionButton(CUT_ETAPHI, this, this);
-        addActionButton(RUBBERBAND_WHOLE_WINDOW, this, this);
-        addActionButton(PRINT_CONTENTS, this, this);
-        addActionButton(SHOW_IN_3DBOX, this, this);
-
-    }
-
-
-
-  @Override
-    public JMenuItem[] getPopupItems()
-    {
-        ArrayList al = new ArrayList();
-        if (window.getUnzoomPossible())
-        {
-            JMenuItem item = new JMenuItem("Unzoom");
-            al.add(item);
-            item.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e)
-                {
-                    window.unzoom();
-                }
-            });
-        }
-        if(window.getUnzoomAllPossible(ZOOM_LAR))
-        {
-            JMenuItem item = new JMenuItem("Unzoom LAr");
-            al.add(item);
-            item.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e) {
-                  window.unzoom(ARectangleVPSelection.ZOOM_LAR);
-                }
-             });
-        }
-        if(window.getUnzoomAllPossible(ZOOM_CALORIMETERS))
-        {
-            JMenuItem item = new JMenuItem("Unzoom Calorimeters");
-            al.add(item);
-            item.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e) {
-                  window.unzoom(ZOOM_CALORIMETERS);
-                }
-             });
-        }
-        if (window.getUnzoomFullPossible())
-        {
-            JMenuItem item = new JMenuItem("Unzoom Full");
-            al.add(item);
-            item.addActionListener(new ActionListener()
-                    {
-                public void actionPerformed(ActionEvent e)
-                {
-                    window.unzoomFull();
-                }
-                    });
-        }
-
-        JMenuItem rww = new JMenuItem(RUBBERBAND_WHOLE_WINDOW);
-        rww.addActionListener(this);
-
-        JMenuItem toec = new JMenuItem(TURN_OFF_ETAPHI_CUT);
-        toec.addActionListener(this);
-
-        al.add(rww);
-        al.add(toec);
-
-        // Can't cast arrays very easily...
-        JMenuItem[] ret = new JMenuItem[al.size()];
-        for (int i = 0; i < al.size(); i++) {
-            ret[i] = (JMenuItem)al.get(i);
-        }
-
-        return ret;
-    }
-
-
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-
-        if(ZOOM_LAR.equals(action))
-        {
-            performZoom(ZOOM_LAR);
-        }
-        else if(ZOOM_CALORIMETERS.equals(action))
-        {
-            performZoom(ZOOM_CALORIMETERS);
-        }
-        else if(CUT_ETAPHI.equals(action))
-        {
-            applyCutIn(window.getName());
-        }
-        else if(RUBBERBAND_WHOLE_WINDOW.equals(action))
-        {
-            rubberbandWholeWindow();
-        }
-        else if(PRINT_CONTENTS.equals(action))
-        {
-            performOperationWithCuts(PRINT_CONTENTS);
-        }
-        else if(SHOW_IN_3DBOX.equals(action))
-        {
-            tracksTo3DBox();
-        }
-        else if(TURN_OFF_ETAPHI_CUT.equals(action))
-        {
-            turnOffEtaPhiCuts();
-        }
-
-    }
-
-
-    private void turnOffEtaPhiCuts()
-    {
-        parameterStore.get("CutsATLAS", "CutPhi").setStatus(false);
-        parameterStore.get("CutsATLAS", "CutEta").setStatus(false);
-        String warning = "\n\nCuts -> ATLAS -> Cut " + AMath.ETA + " deactivated" +
-                         "\nCuts -> ATLAS -> Cut " + AMath.PHI + " deactivated\n\n";
-        AOutput.append(warning, ALogInterface.WARNING);
-        ACanvas.getCanvas().repaintAllFromScratch();
-
-    }
-
-
-
-    private void tracksTo3DBox() {
-        Point2D.Double[] corners = getCorners();
-        double eta = (corners[2].x + corners[0].x) / 2.;
-        double phi = Math.toRadians((corners[2].y + corners[0].y) / 2.);
-
-        A3Vector ray = A3Vector.fromEtaPhiR(eta, phi, 1.0);
-
-        // Need to make sure we change existing 3DBoxes
-        parameterStore.get("3D", "xAxis").changeScope(AParameter.GLOBAL);
-        parameterStore.get("3D", "yAxis").changeScope(AParameter.GLOBAL);
-        parameterStore.get("3D", "zAxis").changeScope(AParameter.GLOBAL);
-        parameterStore.get("3D", "xAxis").setD(ray.x);
-        parameterStore.get("3D", "yAxis").setD(ray.y);
-        parameterStore.get("3D", "zAxis").setD(ray.z);
-
-        // 3DBoxes can be anywhere on the screen:
-        ACanvas.getCanvas().repaintAllFromScratch();
-    }
-
-
-    public void dragPerformed(Object from, Object to, int action)
-    {
-        if (to instanceof ADnDLabel)
-        {
-            applyCutIn(((ADnDLabel) to).getText());
-        }
-        else if (to instanceof AWindow)
-        {
-            applyCutIn(((AWindow) to).getName());
-        }
-    }
-
-
-
-    private boolean checkEtaPhiCutValues(double eta, double phi,
-                                      double cutPhi, double cutEta)
-    {
-        if (!(parameterStore.get("CutsATLAS", "PhiMiddle").validateValue(phi) &&
-              parameterStore.get("CutsATLAS", "EtaMiddle").validateValue(eta) &&
-              parameterStore.get("CutsATLAS", "CutPhi").validateValue(cutPhi) &&
-              parameterStore.get("CutsATLAS", "CutEta").validateValue(cutEta)))
-          {
-              String etaphi = AMath.ETA + AMath.PHI;
-              AOutput.append("\nOperation cancelled: " + etaphi +
-                             " cut values outside allowed range\n", ALogInterface.WARNING);
-              return false;
-
-          }
-          else
-          {
-              return true;
-          }
-
-    }
-
-
-
-    public void applyCutIn(String zoomWindowName)
-    {
-        Point2D.Double[] corners = getCorners();
-        double eta = (corners[2].x + corners[0].x) / 2.;
-        double cutEta = Math.abs((corners[2].x - corners[0].x)) / 2.;
-        double phi = (corners[2].y + corners[0].y) / 2.;
-        double cutPhi = Math.abs((corners[2].y - corners[0].y)) / 2.;
-        double rhoVPlot = AProjectionVP.getRhoZoomVPlot();
-        double zVPlot = AProjectionVP.getZZoomVPlot();
-        double zVtx = parameterStore.get("Event", "ZVtx").getD();
-        double zLower = Math.max(Math.min(rhoVPlot * AMath.tanLambda(eta - cutEta) + zVtx, 0.), -zVPlot);
-        double zUpper = Math.min(Math.max(rhoVPlot * AMath.tanLambda(eta + cutEta) + zVtx, 0.), zVPlot);
-
-        if(! checkEtaPhiCutValues(eta, phi, cutPhi, cutEta))
-        {
-            return;
-        }
-
-        String currentWindowName = window.getName();
-
-        parameterStore.selectWindowParameters(zoomWindowName);
-        parameterStore.get("CutsATLAS", "PhiMiddle").setD(phi);
-        parameterStore.get("CutsATLAS", "EtaMiddle").setD(eta);
-        parameterStore.get("CutsATLAS", "CutPhi").setD(cutPhi);
-        parameterStore.get("CutsATLAS", "CutPhi").setStatus(true);
-        parameterStore.get("CutsATLAS", "CutEta").setD(cutEta);
-        parameterStore.get("CutsATLAS", "CutEta").setStatus(true);
-
-        String warning = "\n\nCuts -> ATLAS -> Cut " + AMath.ETA + " now active" +
-                         "\nCuts -> ATLAS -> Cut " + AMath.PHI + " now active\n\n";
-        AOutput.append(warning, ALogInterface.WARNING);
-
-        AWindow zoomWindow = ACanvas.getCanvas().getWindow(zoomWindowName);
-        AProjection zoomProjection = zoomWindow.getProjection();
-
-        if (zoomProjection instanceof AProjectionFR)
-        {
-            zoomWindow.setUserCorners(0., rhoVPlot, phi - cutPhi, phi + cutPhi);
-        }
-        else if (zoomProjection instanceof AProjectionFZ)
-        {
-            zoomWindow.setUserCorners(zLower, zUpper, phi - cutPhi, phi + cutPhi);
-        }
-        else if (zoomProjection instanceof AProjectionVP)
-        {
-            if (!zoomWindowName.equals(currentWindowName))
-                zoomWindow.setUserCorners(eta - cutEta, eta + cutEta, phi - cutPhi, phi + cutPhi);
-        }
-        else if (zoomProjection instanceof AProjectionYX)
-        {
-            zoomWindow.setUserCorners(-rhoVPlot, rhoVPlot, -rhoVPlot, rhoVPlot);
-        }
-        else if (zoomProjection instanceof AProjectionXZ)
-        {
-            double rhoZoom = Math.min(rhoVPlot, 110.);
-
-            zoomWindow.setUserCorners(zLower, zUpper, 0., rhoZoom);
-            parameterStore.get("XZ", "Phi").setD(AMath.nearestPhiDegrees(phi));
-        }
-        else if (zoomProjection instanceof AProjectionYZ)
-        {
-            double rhoZoom = Math.min(rhoVPlot, 110.);
-
-            zoomWindow.setUserCorners(zLower, zUpper, -rhoZoom, rhoZoom);
-            parameterStore.get("YZ", "Phi").setD(AMath.nearestPhiDegrees(phi));
-        }
-        else if (zoomProjection instanceof AProjectionRZ)
-        {
-            zoomWindow.setUserCorners(zLower, zUpper, 0., rhoVPlot);
-            parameterStore.get("RZ", "Phi").setD(AMath.nearestPhiDegrees(phi));
-        }
-        parameterStore.restoreWindowParameters();
-
-        // don't repaint just the current window after cut(s) are applied,
-        // but repaint everything (all windows)
-        // zoomWindow.repaintFromScratch();
-        ACanvas.getCanvas().repaintAllFromScratch();
-
-    }
-
-    public void performZoom(String typeOfZoom)
-    {
-        int numberOfWindows=0;
-
-        if(ZOOM_LAR.equals(typeOfZoom))
-        {
-            numberOfWindows = 4;
-        }
-        else if(ZOOM_CALORIMETERS.equals(typeOfZoom))
-        {
-            numberOfWindows = 8;
-        }
-
-        AWindow currentWindow = window;
-        String name = currentWindow.getName();
-        currentWindow.saveLayout();
-        boolean scaleStatus = currentWindow.getScaleStatus();
-        Point2D.Double[] zoomedCorners = getCorners();
-        layoutChange(typeOfZoom);
-        int nameIndex=-1;
-        for (int i = 0; i < numberOfWindows; i++)
-        {
-            String wName = Integer.toString(i + 1);
-            AWindow w = ACanvas.getCanvas().getWindow(wName);
-            //dont zoom current window as will not save corners correctly
-            if (w != null && !name.equals(wName))
-            {
-                w.saveParameters(typeOfZoom);
-                ACanvas.getCanvas().copyWindowSettings(currentWindow.getName(), wName);
-                w.saveCorners(typeOfZoom);
-                w.setUserCorners(zoomedCorners);
-                w.setScaleStatus(scaleStatus);
-                parameterStore.selectWindowParameters(wName);
-                parameterStore.get("VP", "Mode").setI(AProjectionVP.MODE_ECAL_LAYER_0 + i);
-                parameterStore.restoreWindowParameters();
-                ACanvas.getCanvas().moveToFrontWindow(w.getName());
-                w.repaintFromScratch();
-            }
-            else if(name.equals(wName))
-            {
-                nameIndex=i;
-            }
-        }
-        //now do zoom of current window if needed
-        if(nameIndex>0)
-        {
-            currentWindow.saveParameters(typeOfZoom);
-            currentWindow.saveCorners(typeOfZoom);
-            currentWindow.setUserCorners(zoomedCorners);
-            currentWindow.setScaleStatus(scaleStatus);
-            parameterStore.selectWindowParameters(name);
-            parameterStore.get("VP", "Mode").setI(AProjectionVP.MODE_ECAL_LAYER_0 + nameIndex);
-            parameterStore.restoreWindowParameters();
-            ACanvas.getCanvas().moveToFrontWindow(name);
-            currentWindow.repaintFromScratch();
-        }
-        for (int i = 0; i < numberOfWindows; i++)
-            if (name.equals(Integer.toString(i + 1)))
-                invalidate();
-    }
-
-    public void layoutChange(String typeOfZoom)
-    {
-        // change layout
-        if(!ACanvas.getCanvas().getCurrentLayout().getName().equals("SQUARE"))
-        {
-            ACanvas.getCanvas().setCurrentLayout("SQUARE");
-        }
-
-        // print info message
-        AOutput.append("\nWindows changed to: \n",ALogInterface.TITLE);
-        AOutput.append("Window 1: ECAL sampling 0\n",ALogInterface.NORMAL);
-        AOutput.append("Window 2: ECAL sampling 1\n",ALogInterface.NORMAL);
-        AOutput.append("Window 3: ECAL sampling 2\n",ALogInterface.NORMAL);
-        AOutput.append("Window 4: ECAL sampling 3\n",ALogInterface.NORMAL);
-
-        if(ZOOM_CALORIMETERS.equals(typeOfZoom))
-        {
-            AOutput.append("Window 5: HCAL sampling 0\n",ALogInterface.NORMAL);
-            AOutput.append("Window 6: HCAL sampling 1\n",ALogInterface.NORMAL);
-            AOutput.append("Window 7: HCAL sampling 2\n",ALogInterface.NORMAL);
-            AOutput.append("Window 8: HCAL sampling 3\n",ALogInterface.NORMAL);
-        }
-    }
-
-
-    private void printContents()
-    {
-        // get all data within selection (eta/phi cut already applied)
-        AEvent event = eventManager.getCurrentEvent();
-        StringBuffer output = new StringBuffer("Data inside Rubberband selection:");
-        // hits and tracks first
-        List hitsAndTracks = event.getHitsAndTracks(window.getProjection());
-        for(int i = 0; i < hitsAndTracks.size(); i++)
-        {
-            String info = ((AData) hitsAndTracks.get(i)).getVPHitInfo();
-            if(! "".equals(info))
-            {
-                output.append("\n" + info);
-            }
-        }
-
-        // calorimeters (as they are handled differently)
-        List cal = event.getCalorimeters();
-        for (int i = 0; i < cal.size(); i++)
-        {
-            ACalorimeterData calorimeter = (ACalorimeterData) cal.get(i);
-            calorimeter.makeDrawList();
-            String info = calorimeter.getVPHitInfo();
-            if(! "".equals(info))
-            {
-                output.append("\n" + info);
-            }
-        }
-
-        AOutput.alwaysAppend("\n" + output + "\n", ALogInterface.PICK);
-
-    }
-
-
-
-    /**
-     * Apply eta phi cuts based on the selected (rubberband region), then
-     * perform the desired operation with data in the selection and
-     * restore previous cuts settings.
-     */
-    private void performOperationWithCuts(String operation)
-    {
-        // which corners fall into eta/phi rubberband selection
-        Point2D.Double[] corners = getCorners();
-        double eta = (corners[2].x + corners[0].x) / 2.;
-        double cutEta = Math.abs((corners[2].x - corners[0].x)) / 2.;
-        double phi = (corners[2].y + corners[0].y) / 2.;
-        double cutPhi = Math.abs((corners[2].y - corners[0].y)) / 2.;
-
-        if(! checkEtaPhiCutValues(eta, phi, cutPhi, cutEta))
-        {
-            return;
-        }
-
-        // need to temporarily apply eta/phi cut, but get the current
-        // eta/phi cut values first and save them
-        AParameter phiPar = parameterStore.get("CutsATLAS", "PhiMiddle");
-        AParameter cutPhiPar = parameterStore.get("CutsATLAS", "CutPhi");
-        AParameter etaPar = parameterStore.get("CutsATLAS", "EtaMiddle");
-        AParameter cutEtaPar = parameterStore.get("CutsATLAS", "CutEta");
-        double oldEta = etaPar.getD();
-        double oldCutEta = cutEtaPar.getD();
-        boolean oldCutEtaStatus = cutEtaPar.getStatus();
-        double oldPhi = phiPar.getD();
-        double oldCutPhi = cutPhiPar.getD();
-        boolean oldCutPhiStatus = cutPhiPar.getStatus();
-
-        // set new (temporary) values of eta/phi cuts according to selection
-        phiPar.setD(phi);
-        etaPar.setD(eta);
-        cutPhiPar.setD(cutPhi);
-        cutPhiPar.setStatus(true);
-        cutEtaPar.setD(cutEta);
-        cutEtaPar.setStatus(true);
-
-        if(PRINT_CONTENTS.equals(operation))
-        {
-            printContents();
-        }
-
-        // set back the previous eta/phi cut values
-        phiPar.setD(oldPhi);
-        etaPar.setD(oldEta);
-        cutPhiPar.setD(oldCutPhi);
-        cutPhiPar.setStatus(oldCutPhiStatus);
-        cutEtaPar.setD(oldCutEta);
-        cutEtaPar.setStatus(oldCutEtaStatus);
-
-    } // printContents() ----------------------------------------------------
-
-
-
-    public void rubberbandWholeWindow()
-    {
-        Rectangle curr = window.getCurrDisp();
-
-        double x = curr.getX();
-        double y = curr.getY();
-        double w = curr.getWidth();
-        double h = curr.getHeight();
-
-        setCenter(hr[0], x, y);
-        setCenter(hr[1], x + w, y);
-        setCenter(hr[2], x + w, y + h);
-        setCenter(hr[3], x, y + h);
-        isValid = true;
-        region = 1;
-        stop();
-        window.repaint();
-        oldAffectedRegion = curr;
-        int safetySize = 5;
-
-        oldAffectedRegion.x -= safetySize;
-        oldAffectedRegion.y -= safetySize;
-        oldAffectedRegion.width += 2 * safetySize;
-        oldAffectedRegion.height += 2 * safetySize;
-
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleYXSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ARectangleYXSelection.java
deleted file mode 100755
index 0a01c70592c8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARectangleYXSelection.java
+++ /dev/null
@@ -1,320 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.geom.Point2D;
-import java.util.ArrayList;
-
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionsManager;
-
-/**
- * Contains the function for selecting zoom endcap layers and summed endcaps
- * 
- * @author Mark Stockton
- */
-public class ARectangleYXSelection extends ARectangleSelection implements ActionListener, ADragListener
-{
-    public final static String ZOOM_SUMMED = "summed";
-    public final static String ZOOM_LAYERS = "layers";
-    
-    public ARectangleYXSelection()
-    {
-        super();
-        addActionButton("Zoom Summed Endcaps", new ActionListener()                
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                if (e.getActionCommand().equals("Zoom Summed Endcaps"))
-                    performZoom(ZOOM_SUMMED);
-            }
-        });
-        addActionButton("Zoom Endcap Layers -", new ActionListener()                
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                if (e.getActionCommand().equals("Zoom Endcap Layers -"))
-                    zoomLayersMinus();
-            }
-        });
-        addActionButton("Zoom Endcap Layers +", new ActionListener()                
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                if (e.getActionCommand().equals("Zoom Endcap Layers +"))
-                    zoomLayersPlus();
-            }
-        });
-        addActionButton("Zoom Both Endcap Layers", new ActionListener()                
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                if (e.getActionCommand().equals("Zoom Both Endcap Layers"))
-                    zoomLayersCombined();
-            }
-        });
-    }
-
-    public void zoomLayersMinus()
-    {
-        parameterStore.get("CutsCalo", "FCAL").setI(0);
-        parameterStore.get("CutsCalo", "LAr").setI(0);
-        parameterStore.get("CutsCalo", "HEC").setI(-2);
-        performZoom(ZOOM_LAYERS);
-    }
-    
-    public void zoomLayersPlus()
-    {
-        parameterStore.get("CutsCalo", "FCAL").setI(1);
-        parameterStore.get("CutsCalo", "LAr").setI(1);
-        parameterStore.get("CutsCalo", "HEC").setI(2);
-        performZoom(ZOOM_LAYERS);
-    }
-    
-    public void zoomLayersCombined()
-    {
-        parameterStore.get("CutsCalo", "FCAL").setI(-1);
-        parameterStore.get("CutsCalo", "LAr").setI(-1);
-        parameterStore.get("CutsCalo", "HEC").setI(-1);
-        performZoom(ZOOM_LAYERS);
-    }
-    
-    public void performZoom(String typeOfZoom)
-    {
-        int numberOfWindows=0;
-        if(typeOfZoom.equals(ZOOM_SUMMED))
-            numberOfWindows=4;
-        else if(typeOfZoom.equals(ZOOM_LAYERS))
-            numberOfWindows=8;
-        
-        AWindow currentWindow = window;
-        String name = currentWindow.getName();
-        currentWindow.saveLayout();
-        boolean scaleStatus = currentWindow.getScaleStatus();
-        Point2D.Double[] zoomedCorners = getCorners();
-        //change layout and print info message
-        layoutChange(typeOfZoom);
-        int nameIndex=-1;
-        for (int i = numberOfWindows; i >=1; i--)
-        {
-            String wName = Integer.toString(i);
-            AWindow w = ACanvas.getCanvas().getWindow(wName);
-            //dont zoom current window as will not save corners correctly
-            if (w != null && !name.equals(wName))
-            {
-                w.saveParameters(typeOfZoom);
-                ACanvas.getCanvas().copyWindowSettings(currentWindow.getName(), wName);
-                w.saveCorners(typeOfZoom);
-                w.setUserCorners(zoomedCorners);
-                w.setScaleStatus(scaleStatus);
-                parameterStore.selectWindowParameters(wName);
-
-                if(typeOfZoom.equals(ZOOM_SUMMED))
-                    zoomSummedOptions(i-1);
-                else if(typeOfZoom.equals(ZOOM_LAYERS))
-                    parameterStore.get("YX", "Mode").setI(AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER + i -1);
-               
-                parameterStore.restoreWindowParameters();
-                ACanvas.getCanvas().moveToFrontWindow(w.getName());
-                w.repaintFromScratch();
-            }
-            else if(name.equals(wName))
-            {
-                nameIndex=i;
-            }
-        }
-        //now do zoom of current window if needed
-        if(nameIndex>0)
-        {
-            currentWindow.saveParameters(typeOfZoom);
-            currentWindow.saveCorners(typeOfZoom);
-            currentWindow.setUserCorners(zoomedCorners);
-            currentWindow.setScaleStatus(scaleStatus);
-            parameterStore.selectWindowParameters(name);
-            if(typeOfZoom.equals(ZOOM_SUMMED))
-                zoomSummedOptions(nameIndex-1);
-            else if(typeOfZoom.equals(ZOOM_LAYERS))
-                parameterStore.get("YX", "Mode").setI(AProjectionYX.MODE_LAR_ENDCAP_PRESAMPLER + nameIndex -1);
-            parameterStore.restoreWindowParameters();
-            ACanvas.getCanvas().moveToFrontWindow(name);
-            currentWindow.repaintFromScratch();
-        }
-        for (int i = 1; i <= numberOfWindows; i++)
-            if (name.equals(Integer.toString(i)))
-                invalidate();
-        //if doing layers zoom last window shows rhoZ view
-        if(typeOfZoom.equals(ZOOM_LAYERS))
-            zoomLastWindow(scaleStatus, name);
-    }
-    
-    public void layoutChange(String typeOfZoom)
-    {
-        if(typeOfZoom.equals(ZOOM_SUMMED))
-        {
-            //change layout
-            if(!ACanvas.getCanvas().getCurrentLayout().getName().equals("FOUR SQUARES"))
-                ACanvas.getCanvas().setCurrentLayout("FOUR SQUARES");
-            //print info message
-            AOutput.append("\nWindows changed to:\n",ALogInterface.TITLE);
-            AOutput.append("Window 1: LAr Endcap -\n",ALogInterface.NORMAL);
-            AOutput.append("Window 2: LAr Endcap +\n",ALogInterface.NORMAL);
-            AOutput.append("Window 3: HEC -\n",ALogInterface.NORMAL);
-            AOutput.append("Window 4: HEC +\n",ALogInterface.NORMAL);
-        }
-        else if(typeOfZoom.equals(ZOOM_LAYERS))
-        {
-            //change layout
-            if(!ACanvas.getCanvas().getCurrentLayout().getName().equals("SQUARE"))
-                ACanvas.getCanvas().setCurrentLayout("SQUARE");
-            //print info message
-            AOutput.append("\nWindows changed to:\n",ALogInterface.TITLE);
-            AOutput.append("Window 1: LAr Endcap Presampler\n",ALogInterface.NORMAL);
-            AOutput.append("Window 2: LAr Endcap 1\n",ALogInterface.NORMAL);
-            AOutput.append("Window 3: LAr Endcap 2\n",ALogInterface.NORMAL);
-            AOutput.append("Window 4: LAr Endcap 3\n",ALogInterface.NORMAL);
-            AOutput.append("Window 5: HEC 1\n",ALogInterface.NORMAL);
-            AOutput.append("Window 6: HEC 2\n",ALogInterface.NORMAL);
-            AOutput.append("Window 7: HEC 3\n",ALogInterface.NORMAL);
-            AOutput.append("Window 8: HEC 4\n",ALogInterface.NORMAL);
-            AOutput.append("Window 9: rhoZ view showing both endcaps\n",ALogInterface.NORMAL);
-        }
-    }
-    
-    public void zoomSummedOptions(int i)
-    {
-        parameterStore.get("CutsCalo", "LAr").changeScope(AParameter.LOCAL);
-        parameterStore.get("CutsCalo", "HEC").changeScope(AParameter.LOCAL);
-        switch (i)
-        {
-            case 0:
-                parameterStore.get("CutsCalo", "LAr").setI(0);
-                parameterStore.get("CutsCalo", "HEC").setI(-1);
-                break;
-            case 1:
-                parameterStore.get("CutsCalo", "LAr").setI(1);
-                parameterStore.get("CutsCalo", "HEC").setI(-1);
-                break;
-            case 2:
-                parameterStore.get("CutsCalo", "LAr").setI(-1);
-                parameterStore.get("CutsCalo", "HEC").setI(-2);
-                break;
-            case 3:
-                parameterStore.get("CutsCalo", "LAr").setI(-1);
-                parameterStore.get("CutsCalo", "HEC").setI(2);
-                break;
-        }
-        parameterStore.get("YX", "Mode").setI(AProjectionYX.MODE_LAR_ENDCAP_SUMMED + (int) Math.floor(i/2));
-    }
-    
-    public void zoomLastWindow(boolean scaleStatus, String name)
-    {
-        String wName = Integer.toString(9);
-        AWindow w = ACanvas.getCanvas().getWindow(wName);
-        //want last window to be RZ view but won't change its zoom                    
-        AProjection p = AProjectionsManager.getProjection("RZ");
-        w.setProjection(p);
-        Point2D.Double[] newCorners = new Point2D.Double[3];
-        //FIXME hardcoded geometry of endcaps
-        //set region to be round the endcaps
-        newCorners[0]=new Point2D.Double(-650.0, 225);
-        newCorners[1]=new Point2D.Double(650.0, 225);
-        newCorners[2]=new Point2D.Double(650.0, -225);
-        
-        w.setUserCorners(newCorners);
-        w.setScaleStatus(scaleStatus);
-        parameterStore.selectWindowParameters(wName);
-        parameterStore.restoreWindowParameters();
-        ACanvas.getCanvas().moveToFrontWindow(w.getName());
-        w.repaintFromScratch();
-        if (name.equals(wName))
-                invalidate();
-    }
-    
-    public void dragPerformed(Object from, Object to, int action)
-    {}
-    
-    public JMenuItem[] getPopupItems() {
-        ArrayList al = new ArrayList();
-        if(window.getUnzoomPossible())
-        {
-            JMenuItem it = new JMenuItem("Unzoom");
-            it.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e) 
-                {
-                    window.unzoom();
-                }
-            });
-            al.add(it);
-        }
-        if(window.getUnzoomAllPossible(ZOOM_LAYERS))
-        {
-            JMenuItem it = new JMenuItem("Unzoom layers");
-            it.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e) 
-                {
-                    window.unzoom(ZOOM_LAYERS);
-                }
-            });
-            al.add(it);
-        }
-        if(window.getUnzoomAllPossible(ZOOM_SUMMED))
-        {
-            JMenuItem it = new JMenuItem("Unzoom summed");
-            it.addActionListener(new ActionListener()
-            {       
-                public void actionPerformed(ActionEvent e) 
-                {
-                    window.unzoom(ZOOM_SUMMED);
-                }
-            });
-            al.add(it);
-        }
-        if (window.getUnzoomFullPossible())
-        {
-            JMenuItem it = new JMenuItem("Unzoom Full");
-            it.addActionListener(new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e)
-                {
-                    window.unzoomFull();
-                }
-            });
-            al.add(it);
-        }
-        // Can't cast arrays very easily...
-        JMenuItem[] ret = new JMenuItem[al.size()];
-        for(int i = 0; i < al.size(); i++)
-        {
-            ret[i] = (JMenuItem) (al.get(i));
-        }
-        return ret;
-    }
-    
-    public void actionPerformed(ActionEvent e) {
-        String action=e.getActionCommand();
-        if(action.equals("Unzoom")) {
-            window.unzoom();
-        }
-        if(action.equals("Unzoom layers")) {
-            window.unzoom(ZOOM_LAYERS);
-        }
-        if(action.equals("Unzoom summed")) {
-            window.unzoom(ZOOM_SUMMED);
-        }
-        if(action.equals("Unzoom Full")) {
-            window.unzoomFull();
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARotatedRectangleSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ARotatedRectangleSelection.java
deleted file mode 100755
index 3cf0fd33bbe0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARotatedRectangleSelection.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-public class ARotatedRectangleSelection extends ASelection {
-
-  // The initial starting width of the first and last sides.
-  private final static int STARTING_WIDTH=25;
-
-  public ARotatedRectangleSelection() {
-    super(6);
-  }
-
-  // Initialize the control points given the starting point (x,y).
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    setCenter(hr[0], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[1], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[2], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[3], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[4], p.x, p.y);
-    setCenter(hr[5], p.x, p.y);
-
-    region=5;
-    return region;
-  }
-
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-    double dx, dy, deltax, deltay, angle, radius;
-
-    switch(region) {
-    case 0:
-      radius=getRadius(p.x, p.y, 4);
-      angle=getAngle();
-
-      deltax=p.x-hr[4].getCenterX();
-      deltay=p.y-hr[4].getCenterY();
-
-      dx=-Math.round(radius*Math.sin(angle));
-      dy=Math.round(radius*Math.cos(angle));
-
-      if(deltax*dx+deltay*dy<0) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[0], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[3], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      setCenter(hr[1], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      setCenter(hr[2], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      break;
-
-    case 1:
-      radius=getRadius(p.x, p.y, 5);
-      angle=getAngle();
-
-      deltax=p.x-hr[5].getCenterX();
-      deltay=p.y-hr[5].getCenterY();
-
-      dx=-Math.round(radius*Math.sin(angle));
-      dy=Math.round(radius*Math.cos(angle));
-
-      if(deltax*dx+deltay*dy<0) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[0], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[3], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      setCenter(hr[1], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      setCenter(hr[2], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      break;
-
-    case 2:
-      radius=getRadius(p.x, p.y, 5);
-      angle=getAngle();
-
-      deltax=p.x-hr[5].getCenterX();
-      deltay=p.y-hr[5].getCenterX();
-
-      dx=-Math.round(radius*Math.sin(angle));
-      dy=Math.round(radius*Math.cos(angle));
-
-      if(deltax*dx+deltay*dy<0) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[0], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      setCenter(hr[3], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[1], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      setCenter(hr[2], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      break;
-
-    case 3:
-      radius=getRadius(p.x, p.y, 4);
-      angle=getAngle();
-
-      deltax=p.x-hr[4].getCenterX();
-      deltay=p.y-hr[4].getCenterY();
-
-      dx=-Math.round(radius*Math.sin(angle));
-      dy=Math.round(radius*Math.cos(angle));
-
-      if(deltax*dx+deltay*dy<0) {
-        dx=-dx;
-        dy=-dy;
-      }
-
-      setCenter(hr[0], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      setCenter(hr[3], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[1], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      setCenter(hr[2], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      break;
-
-    case 4:
-    case 5:
-      radius=getRadius(hr[0].getCenterX(), hr[0].getCenterY(), 4);
-
-      // Update the active control point.
-      setCenter(hr[region], p.x, p.y);
-      angle=getAngle();
-
-      dx=-Math.round(radius*Math.sin(angle));
-      dy=Math.round(radius*Math.cos(angle));
-
-      setCenter(hr[0], hr[4].getCenterX()+dx, hr[4].getCenterY()+dy);
-      setCenter(hr[3], hr[4].getCenterX()-dx, hr[4].getCenterY()-dy);
-      setCenter(hr[1], hr[5].getCenterX()+dx, hr[5].getCenterY()+dy);
-      setCenter(hr[2], hr[5].getCenterX()-dx, hr[5].getCenterY()-dy);
-      break;
-    }
-  }
-
-  private double getAngle() {
-    double deltax=hr[5].getCenterX()-hr[4].getCenterX();
-    double deltay=hr[5].getCenterY()-hr[4].getCenterY();
-
-    if(deltax!=0||deltay!=0)
-      return Math.atan2(deltay, deltax);
-    else
-      return 0.;
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  /**
-   * Make the affine transform which corresponds to this rectangular selection.
-   */
-  public Point2D.Double[] getCorners() {
-    int first=getUpperLeftRegion();
-
-    // Calculate the index of the opposite corner.
-    int third=(first+2)%4;
-
-    // Now use the cross-product to determine which of the
-    // remaining points is the one which keep the path going
-    // clockwise.
-    int second=(first+1)%4;
-    double dx0=hr[third].getCenterX()-hr[first].getCenterX();
-    double dy0=hr[third].getCenterY()-hr[first].getCenterY();
-    double dx1=hr[second].getCenterX()-hr[first].getCenterX();
-    double dy1=hr[second].getCenterY()-hr[first].getCenterY();
-
-    if(dx0*dy1-dy0*dx1>0)
-      second=(first+3)%4;
-    // Get the appropriate radius.
-    int centerIndex=(first==0||first==3)?4:5;
-    double radius=getRadius(hr[first].getCenterX(), hr[first].getCenterY(), centerIndex);
-    double angle=getAngle();
-    // Calculate the delta-x and delta-y for the points.
-    double dx=Math.abs(radius*Math.sin(angle));
-    double dy=Math.abs(radius*Math.cos(angle));
-    // Get the sign of the offsets from the control points.
-    double sdx;
-    double sdy;
-
-    // The point closest to the origin.
-    centerIndex=(first==0||first==3)?4:5;
-    sdx=((hr[first].getCenterX()-hr[centerIndex].getCenterX())>0)?1.:-1.;
-    sdy=((hr[first].getCenterY()-hr[centerIndex].getCenterY())>0)?1.:-1.;
-    double x0=hr[centerIndex].getCenterX()+sdx*dx;
-    double y0=hr[centerIndex].getCenterY()+sdy*dy;
-
-    // The next point clockwise.
-    centerIndex=(second==0||second==3)?4:5;
-    sdx=((hr[second].getCenterX()-hr[centerIndex].getCenterX())>0)?1.:-1.;
-    sdy=((hr[second].getCenterY()-hr[centerIndex].getCenterY())>0)?1.:-1.;
-    double x1=hr[centerIndex].getCenterX()+sdx*dx;
-    double y1=hr[centerIndex].getCenterY()+sdy*dy;
-
-    // The next point clockwise.
-    centerIndex=(third==0||third==3)?4:5;
-    sdx=((hr[third].getCenterX()-hr[centerIndex].getCenterX())>0)?1.:-1.;
-    sdy=((hr[third].getCenterY()-hr[centerIndex].getCenterY())>0)?1.:-1.;
-    double x2=hr[centerIndex].getCenterX()+sdx*dx;
-    double y2=hr[centerIndex].getCenterY()+sdy*dy;
-
-    // The control points are in the correct order, so we can just
-    // call the utility function of the parent.
-    return convert(x0, y0, x1, y1, x2, y2);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandGroup.java
deleted file mode 100755
index fe8e54b62bde..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandGroup.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.ACanvas;
-import atlantis.output.AExceptionHandler;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-
-import java.lang.reflect.Constructor;
-import java.util.HashMap;
-
-public class ARubberbandGroup extends AInteractionGroup {
-
-  private final static String[] RUBBERBAND_NAMES= {"Rectangle", "RotatedRectangle", "Parallelogram",
-    "Square", "XSkew", "YSkew", "XSlice", "YSlice"};
-
-  private HashMap rubberbands;
-  private JComboBox rbComboBox;
-  // the panel that will contain the additional controls for the interactions
-  private JPanel additionalControls;
-
-  public ARubberbandGroup(AInteractionsManager manager) {
-    super(AInteractionGroup.WINDOW_GROUP, manager);
-    
-    // create the additional controls panel
-    additionalControls = new JPanel();
-
-    rubberbands=new HashMap();
-    rbComboBox=new JComboBox();
-
-    for(int i=0; i<RUBBERBAND_NAMES.length; i++) {
-      rbComboBox.addItem(RUBBERBAND_NAMES[i]);
-      try {
-        Constructor[] c=Class.forName("atlantis.interactions.A"+RUBBERBAND_NAMES[i]+"Selection").getDeclaredConstructors();
-
-        rubberbands.put(RUBBERBAND_NAMES[i], c[0].newInstance(new Object[] {}));
-      } catch(Exception e) {
-        AExceptionHandler.processException("Cannot make selection "+"A"+RUBBERBAND_NAMES[i]
-            +"Selection",
-            e);
-      }
-    }
-
-    rbComboBox.addActionListener(new RuberbandListener());
-    additionalControls.add(rbComboBox);
-
-    changeRubberband();
-  }
-  
-  /**
-   * rubberband has additional controls, so return true
-   */
-  public boolean hasAdditionalControls() {
-    return true;
-  }
-  
-  /**
-   * returns the additional controls
-   */
-  public JPanel getAdditionalControls() {
-    return additionalControls;
-  }
-  
-  private void changeRubberband() {
-    String item=(String)rbComboBox.getSelectedItem();
-
-    removeAllInteractions();
-    addInteraction((AInteraction)rubberbands.get(item));
-    iManager.setContext(this);
-  }
-
-  // generating the menu
-  public JMenuItem getPopupItem() {
-    JMenu menu=new JMenu(name);
-    ActionListener l=new PopupListener();
-
-    for(int i=0; i<RUBBERBAND_NAMES.length; i++)
-      menu.add(RUBBERBAND_NAMES[i]).addActionListener(l);
-
-    return menu;
-  }
-
-  public void setGroupState(AInteractionGroup givenGroup) {
-    if(givenGroup instanceof ARubberbandGroup) {
-      ARubberbandGroup panel=(ARubberbandGroup)givenGroup;
-
-      this.rbComboBox.setSelectedIndex(panel.rbComboBox.getSelectedIndex());
-    }
-  }
-
-  class RuberbandListener implements ActionListener {
-    public void actionPerformed(ActionEvent e) {
-      changeRubberband();
-    }
-  }
-
-
-  class PopupListener implements ActionListener {
-    public void actionPerformed(ActionEvent e) {
-      ACanvas.getCanvas().getCurrentWindow().getInteractionToolBar().setSelectedGroup(name);
-      rbComboBox.setSelectedItem(e.getActionCommand());
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandYXGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandYXGroup.java
deleted file mode 100755
index 705da5e8e137..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ARubberbandYXGroup.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.ACanvas;
-import atlantis.output.AExceptionHandler;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-
-import java.lang.reflect.Constructor;
-import java.util.HashMap;
-
-public class ARubberbandYXGroup extends AInteractionGroup {
-
-  private final static String[] RUBBERBAND_NAMES= {"RectangleYX", "RotatedRectangle", "Parallelogram",
-    "Square", "XSkew", "YSkew", "XSlice", "YSlice"};
-
-  private HashMap rubberbands;
-  private JComboBox rbComboBox;
-  // the panel that will contain the additional controls for the interactions
-  private JPanel additionalControls;
-
-  public ARubberbandYXGroup(AInteractionsManager manager) {
-    super(AInteractionGroup.WINDOW_GROUP, manager);
-    
-    // create the additional controls panel
-    additionalControls = new JPanel();
-
-    rubberbands=new HashMap();
-    rbComboBox=new JComboBox();
-
-    for(int i=0; i<RUBBERBAND_NAMES.length; i++) {
-      rbComboBox.addItem(RUBBERBAND_NAMES[i]);
-      try {
-        Constructor[] c=Class.forName("atlantis.interactions.A"+RUBBERBAND_NAMES[i]+"Selection").getDeclaredConstructors();
-
-        rubberbands.put(RUBBERBAND_NAMES[i], c[0].newInstance(new Object[] {}));
-      } catch(Exception e) {
-        AExceptionHandler.processException("Cannot make selection "+"A"+RUBBERBAND_NAMES[i]
-            +"Selection",
-            e);
-      }
-    }
-
-    rbComboBox.addActionListener(new RuberbandListener());
-    additionalControls.add(rbComboBox);
-
-    changeRubberband();
-  }
-  
-  /**
-   * rubberband has additional controls, so return true
-   */
-  public boolean hasAdditionalControls() {
-    return true;
-  }
-
-  /**
-   * returns the additional controls
-   */
-  public JPanel getAdditionalControls() {
-    return additionalControls;
-  }
-  
-  private void changeRubberband() {
-    String item=(String)rbComboBox.getSelectedItem();
-
-    removeAllInteractions();
-    addInteraction((AInteraction)rubberbands.get(item));
-    iManager.setContext(this);
-  }
-
-  // generating the menu
-  public JMenuItem getPopupItem() {
-    JMenu menu=new JMenu(name);
-    ActionListener l=new PopupListener();
-
-    for(int i=0; i<RUBBERBAND_NAMES.length; i++)
-      menu.add(RUBBERBAND_NAMES[i]).addActionListener(l);
-
-    return menu;
-  }
-
-  public void setGroupState(AInteractionGroup givenGroup) {
-    if(givenGroup instanceof ARubberbandYXGroup) {
-      ARubberbandYXGroup panel=(ARubberbandYXGroup)givenGroup;
-
-      this.rbComboBox.setSelectedIndex(panel.rbComboBox.getSelectedIndex());
-    }
-  }
-
-  class RuberbandListener implements ActionListener {
-    public void actionPerformed(ActionEvent e) {
-      changeRubberband();
-    }
-  }
-
-
-  class PopupListener implements ActionListener {
-    public void actionPerformed(ActionEvent e) {
-      ACanvas.getCanvas().getCurrentWindow().getInteractionToolBar().setSelectedGroup(name);
-      rbComboBox.setSelectedItem(e.getActionCommand());
-    }
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyGroup.java
deleted file mode 100755
index 05a6d681437c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyGroup.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package atlantis.interactions;
-
-
-public class AScaleCopyGroup extends AInteractionGroup {
-
-  AScaleCopyInteraction scaleCopyInteraction;
-
-  public AScaleCopyGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.CANVAS_GROUP, iManager);
-    scaleCopyInteraction=new AScaleCopyInteraction();
-    this.addInteraction(scaleCopyInteraction);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyInteraction.java
deleted file mode 100755
index 6e4492014d79..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AScaleCopyInteraction.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.*;
-import java.awt.geom.*;
-
-public class AScaleCopyInteraction extends AInteraction {
-
-  public AScaleCopyInteraction() {
-    super(1, AUTOMATIC_REPAINT, SCREEN_COORDINATES, false);
-    hr[0]=new Rectangle2D.Double(0, 0, 0, 0);
-  }
-
-  public void paint(Graphics2D g) {}
-
-  public void connect(AInteractionsManager manager) {
-    super.connect(manager);
-    window.setScaleCopyStatus(true);
-  }
-
-  public void disconnect() {
-    window.setScaleCopyStatus(false);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ASelection.java
deleted file mode 100755
index 1a7b181aea5c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASelection.java
+++ /dev/null
@@ -1,455 +0,0 @@
-package atlantis.interactions;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-
-import java.awt.GridLayout;
-import java.awt.Point;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.Dimension;
-import java.awt.Polygon;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.awt.geom.Ellipse2D;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JMenuItem;
-import javax.swing.JButton;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.graphics.ADrawnGraphics2D;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.dnd.ADnDButton;
-import atlantis.graphics.dnd.ADnDLabel;
-import atlantis.graphics.dnd.ADragListener;
-import atlantis.gui.AGUI;
-import atlantis.gui.ALogPane;
-import atlantis.list.AListManager;
-import atlantis.list.AList;
-import atlantis.output.AExceptionHandler;
-import atlantis.output.AOutput;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-
-
-
-/**
- * The superclass of all the selection (rubberband) interactions.
- */
-public abstract class ASelection extends AInteraction
-                                 implements ASleepMouseDragListener, ActionListener
-{
-
-  private static ALogger logger = ALogger.getLogger(ASelection.class);
-    
-  private JPanel actionsPanel;
-  private GridLayout actionsPanelLayout;
-  private int d = 10;
-  private boolean[][] map;
-  protected final static int radius = 10;
-  protected int region;
-  protected boolean isValid = false;
-
-
-  public final static String ZOOM = "Zoom";
-  public final static String NEW_LIST = "New List";
-  public final static String SUMMARIZE = "Summarize";
-
-
-
-  public ASelection(int hotRegionsCount)
-  {
-      super(hotRegionsCount, AUTOMATIC_REPAINT, SCREEN_COORDINATES, true);
-
-      for(int i = 0; i < hr.length; i++)
-      {
-          hr[i] = new Ellipse2D.Double(0, 0, radius, radius);
-      }
-
-      actionsPanelLayout = new GridLayout(0, 1);
-      actionsPanel = new JPanel(actionsPanelLayout);
-
-
-      addActionButton(ZOOM, new ADragListener()
-      {
-          public void dragPerformed(Object from, Object to, int action)
-          {
-              if(to instanceof ADnDLabel)
-              {
-                  zoomIn(((ADnDLabel) to).getText());
-              }
-              else if(to instanceof AWindow)
-              {
-                  zoomIn(((AWindow) to).getName());
-              }
-              invalidate();
-          }
-      },
-          new ActionListener()
-          {
-              public void actionPerformed(ActionEvent e)
-              {
-                  window.saveCorners();
-                  window.setUserCorners(getCorners());
-                  invalidate();
-              }
-      });
-
-
-      addActionButton(NEW_LIST, new ActionListener()
-      {
-          public void actionPerformed(ActionEvent e)
-          {
-              if(e.getActionCommand().equals(NEW_LIST))
-              {
-                  Point2D.Double[] zoomedCorners = getCorners();
-                  Point2D.Double[] userCorners = window.getUserCorners();
-                  window.setUserCornersNoRepaint(zoomedCorners);
-                  Rectangle bounds = window.getBounds();
-                  bounds.setLocation(0, 0);
-                  window.paintWindowFromScratch(new ADrawnGraphics2D(bounds));
-                  ADrawnGraphics2D.updateLastDrawn();
-                  AListManager.getInstance().copyLastDrawn();
-                  AListManager.getInstance().showLists();
-                  window.setUserCornersNoRepaint(userCorners);
-              }
-          }
-      });
-
-
-      addActionButton(SUMMARIZE, new ActionListener()
-      {
-          public void actionPerformed(ActionEvent e)
-          {
-              if(e.getActionCommand().equals(SUMMARIZE))
-              {
-                  Point2D.Double[] zoomedCorners = getCorners();
-                  Point2D.Double[] userCorners = window.getUserCorners();
-                  window.setUserCornersNoRepaint(zoomedCorners);
-                  Rectangle bounds = window.getBounds();
-                  bounds.setLocation(0, 0);
-                  window.paintWindowFromScratch(new ADrawnGraphics2D(bounds));
-                  ADrawnGraphics2D.updateLastDrawn();
-                  AListManager.getInstance().summarize();
-                  window.setUserCornersNoRepaint(userCorners);
-              }
-          }
-      });
-
-  } // ASelection() ---------------------------------------------------------
-
-
-
-
-  public void invalidate()
-  {
-      isValid = false;
-      actionsPanel.setVisible(false);
-  }
-
-
-  public void addActionButton(String buttonName, ADragListener dragList,
-                              ActionListener clickList)
-  {
-      ADnDButton b = new ADnDButton(buttonName);
-      b.setFocusPainted(false);
-      b.addActionListener(clickList);
-      b.addDragListener(dragList);
-      actionsPanelLayout.setRows(actionsPanelLayout.getRows() + 1);
-      actionsPanel.add(b);
-      actionsPanel.setSize(actionsPanel.getPreferredSize());
-  }
-
-
-  public void addActionButton(String buttonName, ActionListener clickListener)
-  {
-      JButton b = new JButton(buttonName);
-      b.setFocusPainted(false);
-      b.addActionListener(clickListener);
-      actionsPanelLayout.setRows(actionsPanelLayout.getRows() + 1);
-      actionsPanel.add(b);
-      actionsPanel.setSize(actionsPanel.getPreferredSize());
-  }
-
-
-  public JMenuItem[] getPopupItems()
-  {
-      ArrayList<JMenuItem> al = new ArrayList<JMenuItem>();
-      if(window.getUnzoomPossible())
-      {
-          JMenuItem it = new JMenuItem("Unzoom");
-          it.addActionListener(new ActionListener()
-          {
-              public void actionPerformed(ActionEvent e)
-              {
-                  window.unzoom();
-              }
-          });
-          al.add(it);
-      }
-      if(window.getUnzoomFullPossible())
-      {
-          JMenuItem it = new JMenuItem("Unzoom Full");
-          it.addActionListener(new ActionListener()
-          {
-              public void actionPerformed(ActionEvent e)
-              {
-                  window.unzoomFull();
-              }
-          });
-          al.add(it);
-      }
-      // Can't cast arrays very easily...
-      JMenuItem[] ret = new JMenuItem[al.size()];
-      for(int i = 0; i < al.size(); i++)
-      {
-          ret[i] = al.get(i);
-      }
-      return ret;
-
-  }
-
-
-  public void actionPerformed(ActionEvent e)
-  {
-      String action = e.getActionCommand();
-      if(action.equals("Unzoom"))
-      {
-          window.unzoom();
-      }
-  }
-
-
-  public int getPopupType()
-  {
-      return APopupListener.WINDOW_POPUP;
-  }
-
-
-  public void connect(AInteractionsManager manager)
-  {
-      super.connect(manager);
-      window.getView().add(actionsPanel);
-      if(isValid)
-      {
-          actionsPanel.setVisible(true);
-      }
-      else
-      {
-          actionsPanel.setVisible(false);
-      }
-      window.validate();
-  }
-
-
-  public void disconnect()
-  {
-      window.getView().remove(actionsPanel);
-  }
-
-
-  public int getButton()
-  {
-      return AInteractionsManager.LEFT;
-  }
-
-
-  public void start(Point2D.Double p, int region, int key)
-  {
-      this.region = region;
-      actionsPanel.setVisible(false);
-  }
-
-
-  public void cancel() {}
-
-
-  private boolean canLayout(int i0, int j0)
-  {
-      Dimension panelSize = actionsPanel.getSize();
-      panelSize.width = (int) Math.ceil((panelSize.width + d) / (double) d);
-      panelSize.height = (int) Math.ceil((panelSize.height + d) / (double) d);
-      for(int j = 0; j < panelSize.height; j++)
-      {
-          for(int i = 0; i < panelSize.width; i++)
-          {
-              if(i0 + i > map[0].length - 1)return false;
-              if(j0 + j > map.length - 1)return false;
-              if(map[j0 + j][i0 + i] == false)return false;
-          }
-      }
-      return true;
-
-  }
-
-
-  private Point calculateBestPosition()
-  {
-      AWindow w = window;
-      Dimension size = w.getView().getSize();
-      int ny = (int) Math.ceil(size.height / (double) d);
-      int nx = (int) Math.ceil(size.width / (double) d);
-      map = new boolean[ny][nx];
-      Polygon p = new Polygon();
-      for(int i = 0; i < 4; i++)
-      {
-          p.addPoint((int) hr[i].getCenterX(), (int) hr[i].getCenterY());
-      }
-
-      for(int j = 0; j < map.length; j++)
-      {
-          for(int i = 0; i < map[0].length; i++)
-          {
-              if(p.intersects(i * d, j * d, d, d) || p.contains(i * d, j * d, d, d))
-              {
-                  map[j][i] = false;
-              }
-              else
-              {
-                  map[j][i] = true;
-              }
-          }
-      }
-
-      for(int j = 0; j < map.length; j++)
-      {
-          for(int i = 0; i < map[0].length; i++)
-          {
-              if(canLayout(i, j))
-              {
-                  map[j][i] = true;
-              }
-              else
-              {
-                  map[j][i] = false;
-              }
-          }
-      }
-
-      int x0 = (int) hr[region].getMaxX();
-      int y0 = (int) hr[region].getMaxY();
-      int i_min = 0, j_min = 0;
-      double dist, dist_min = 1e10;
-      for(int j = 0; j < map.length; j++)
-      {
-          for(int i = 0; i < map[0].length; i++)
-          {
-              if(map[j][i] == true)
-              {
-                  dist = Math.hypot(x0 - i*d, y0 - j*d);
-                  if(dist < dist_min)
-                  {
-                      i_min = i;
-                      j_min = j;
-                      dist_min = dist;
-                  }
-              }
-          }
-      }
-
-      return new Point(i_min * d + d / 2, j_min * d + d / 2);
-  }
-
-
-  public void stop()
-  {
-      if(isValid)
-      {
-          Point p = calculateBestPosition();
-          actionsPanel.setLocation(p.x, p.y);
-          actionsPanel.setVisible(true);
-          window.revalidate();
-      }
-  }
-
-
-  protected int getUpperLeftRegion()
-  {
-      int point = 0;
-      double savedValue = getRadius(hr[0]);
-      for(int i = 1; i < 4; i++)
-      {
-          double value = getRadius(hr[i]);
-          if(value < savedValue)
-          {
-              savedValue = value;
-              point = i;
-          }
-      }
-      return point;
-  }
-
-
-  protected Point2D.Double[] convert(
-      double x0, double y0, double x1, double y1, double x2, double y2)
-  {
-      if(!isValid)
-      {
-          return window.getUserCorners();
-      }
-      if(Math.abs(getAPolygon().getArea()) == 0)
-      {
-          return window.getUserCorners();
-      }
-
-      double[][][] hv = new double[2][1][3];
-      hv[0][0][0] = x0;
-      hv[1][0][0] = y0;
-      hv[0][0][1] = x1;
-      hv[1][0][1] = y1;
-      hv[0][0][2] = x2;
-      hv[1][0][2] = y2;
-      ACoord d = window.calculateUser(new ACoord(hv));
-      Point2D.Double[] corners = new Point2D.Double[3];
-      for(int i = 0; i < 3; i++)
-      {
-          corners[i] = new Point2D.Double(d.hv[0][0][i], d.hv[1][0][i]);
-      }
-
-      return corners;
-  }
-
-
-  protected Point2D.Double[] convert(int region1, int region2, int region3)
-  {
-      return convert(hr[region1].getCenterX(), hr[region1].getCenterY(),
-                     hr[region2].getCenterX(),
-                     hr[region2].getCenterY(), hr[region3].getCenterX(),
-                     hr[region3].getCenterY());
-  }
-
-
-  public abstract Point2D.Double[] getCorners();
-
-
-  protected void paintStandard(Graphics2D g)
-  {
-      if(isValid)
-      {
-          AGraphics ag = AGraphics.makeAGraphics(g);
-          ag.updateDrawParameters(frameDrawParameters);
-          ag.drawPolygon(getAPolygon());
-          drawLine(4, 5, ag);
-          ag.updateDrawParameters(drawParameters);
-          ag.drawPolygon(getAPolygon());
-          drawLine(4, 5, ag);
-          drawActivePoint(region, ag);
-      }
-  }
-
-
-  public void zoomIn(String zoomWindow)
-  {
-      String currentWindow = window.getName();
-      ACanvas.getCanvas().copyWindowSettings(currentWindow, zoomWindow);
-      ACanvas.getCanvas().getWindow(zoomWindow).setUserCorners(getCorners());
-  }
-
-} // class ASelection =======================================================
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASkewGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/ASkewGroup.java
deleted file mode 100755
index 70057212cca9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASkewGroup.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package atlantis.interactions;
-
-
-public class ASkewGroup extends AInteractionGroup {
-
-  ASkewInteraction skewInteraction;
-
-  public ASkewGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-    skewInteraction=new ASkewInteraction();
-    this.addInteraction(skewInteraction);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASkewInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/ASkewInteraction.java
deleted file mode 100755
index a338f168638e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASkewInteraction.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package atlantis.interactions;
-
-import atlantis.canvas.AWindow;
-import atlantis.parameters.APar;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjectionRZ;
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-/**
- * The interaction that performs a skew on the picture.
- */
-public class ASkewInteraction extends AInteraction
-  implements ASleepMouseDragListener, ActionListener {
-
-  private int d=20;
-  private Point2D.Double p0;
-  private JMenuItem[] popupItems;
-  private final static String NO_SKEW="Set No Skew";
-
-  public ASkewInteraction() {
-    super(1, WINDOW_TOTAL_REPAINT, WORLD_COORDINATES, false);
-
-    popupItems = new JMenuItem[] {
-        new JMenuItem(NO_SKEW)
-    };
-    
-    popupItems[0].addActionListener(this);
-    
-    // The center of the ellipse is in (0, 0) in User Space
-    hr[0]=new Ellipse2D.Double(-d/2, -d/2, d, d);
-  }
-
-  public int init(Point2D.Double p, int key) {
-    p0=p;
-    return 0;
-  }
-
-  public int getButton() {
-    return AInteractionsManager.LEFT;
-  }
-
-  public void start(Point2D.Double p, int region, int key) {}
-
-  public void drag(Point2D.Double p, int region, int key) {
-    AProjection proj=window.getProjection();
-
-    if(proj instanceof AProjectionFR) {
-      performFRSkew(-(p.y-p0.y)/p0.x, window);
-    } else if(proj instanceof AProjectionFZ) {
-      performFZSkew(-(p.y-p0.y)/p0.x, window);
-    } else if(proj instanceof AProjectionRZ) {
-      if(key==KeyEvent.VK_V)
-        performFZSkew(-(p.y-p0.y)/p0.x, window);
-      else
-        performRZSkew(-(p.x-p0.x)/p0.y, window);
-    }
-  }
-
-  public static void performFRSkew(double f, AWindow window) {
-    Point2D.Double[] corners=window.getUserCorners();
-
-    for(int i=0; i<corners.length; i++)
-      corners[i].y+=f*corners[i].x;
-
-    window.setUserCorners(corners);
-  }
-
-  public static void performFZSkew(double f, AWindow window) {
-    Point2D.Double[] corners=window.getUserCorners();
-
-    double zVtx=parameterStore.get("Event", "ZVtx").getD();
-
-    for(int i=0; i<corners.length; i++)
-      corners[i].y+=f*(corners[i].x-zVtx);
-
-    window.setUserCorners(corners);
-  }
-
-  public static void performRZSkew(double f, AWindow window) {
-    Point2D.Double[] corners=window.getUserCorners();
-
-    for(int i=0; i<corners.length; i++)
-      corners[i].x+=f*corners[i].y;
-
-    window.setUserCorners(corners);
-  }
-
-  public void stop() {}
-
-  public void cancel() {}
-
-  public void paint(Graphics2D g) {}
-
-  public int getPopupType() {
-    return APopupListener.WINDOW_POPUP;
-  }
-
-  public JMenuItem[] getPopupItems() {
-    return popupItems;
-  }
-  
-  public void actionPerformed(ActionEvent e) {
-    
-  }
-  public AModifier[] getModifiers(){
-    if(window.getProjection() instanceof AProjectionRZ) {
-      return new AModifier[] {
-          new AModifier(KeyEvent.VK_V, false, "Y Skew"),
-          new AModifier(KeyEvent.VK_H, false, "X Skew"),
-          new AModifier(KeyEvent.VK_UNDEFINED, false, "X Skew")
-      };
-    } else {
-      return new AModifier[0];
-    }
-    }
-
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASleepMouseDragListener.java b/graphics/AtlantisJava/src/atlantis/interactions/ASleepMouseDragListener.java
deleted file mode 100755
index 60b145d8b132..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASleepMouseDragListener.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.geom.*;
-
-
-/**
- * This listener extends AMouseDragListener in order to make it possible to
- * get drag events even without any hot region.
- */
-public interface ASleepMouseDragListener extends AMouseDragListener {
-  int init(Point2D.Double p, int key);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASquareSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/ASquareSelection.java
deleted file mode 100755
index 0f12dae04d57..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASquareSelection.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
-
-import atlantis.graphics.AGraphics;
-import atlantis.utils.AMath;
-
-public class ASquareSelection extends ASelection
-{
-    public ASquareSelection()
-    {
-        super(5);
-    }
-
-    public int init(Point2D.Double p, int key)
-    {
-        isValid = false;
-
-        for (int i = 0; i < 5; i++)
-            setCenter(hr[i], p.x, p.y);
-
-        this.region = 2;
-        return region;
-    }
-
-    public void drag(Point2D.Double p, int region, int key)
-    {
-        isValid = true;
-
-        if (region == 4)
-        {
-            double dx = p.x - hr[4].getCenterX();
-            double dy = p.y - hr[4].getCenterY();
-
-            for (int i = 0; i < 5; i++)
-                setCenter(hr[i], hr[i].getCenterX() + dx, hr[i].getCenterY() + dy);
-        }
-        else
-        {
-            double ratio = ((double) window.getSize().width) / ((double) window.getSize().height);
-
-            double sx1 = AMath.getSign(p.x - hr[4].getCenterX());
-            double sy1 = AMath.getSign(p.y - hr[4].getCenterY());
-            double sx2 = sy1;
-            double sy2 = sx1;
-            double dy = getRadius(p.x, p.y, 4) / Math.sqrt(1 + ratio * ratio);
-            double dx = dy * ratio;
-
-            setCenter(hr[region], hr[4].getCenterX() + dx * sx1, hr[4].getCenterY() + dy * sy1);
-            setCenter(hr[(region + 2) % 4], hr[4].getCenterX() - dx * sx1, hr[4].getCenterY() - dy * sy1);
-
-            setCenter(hr[(region + 1) % 4], hr[4].getCenterX() - dx * sx2, hr[4].getCenterY() + dy * sy2);
-            setCenter(hr[(region + 3) % 4], hr[4].getCenterX() + dx * sx2, hr[4].getCenterY() - dy * sy2);
-        }
-    }
-
-    public void paint(Graphics2D g)
-    {
-        if (isValid)
-        {
-            AGraphics ag = AGraphics.makeAGraphics(g);
-
-            ag.updateDrawParameters(frameDrawParameters);
-            ag.drawPolygon(getAPolygon());
-            drawLine(0, 2, ag);
-            drawLine(1, 3, ag);
-            ag.updateDrawParameters(drawParameters);
-            ag.drawPolygon(getAPolygon());
-            drawLine(0, 2, ag);
-            drawLine(1, 3, ag);
-            drawActivePoint(region, ag);
-        }
-    }
-
-    public Point2D.Double[] getCorners()
-    {
-        int first = getUpperLeftRegion();
-
-        // Calculate the adjacent partner and the opposite corner.
-        int second = (first + 1) % 4;
-        int third = (first + 2) % 4;
-
-        return convert(first, second, third);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsGroup.java
deleted file mode 100755
index 4a74be687a74..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsGroup.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package atlantis.interactions;
-
-
-public class ASynchroCursorsGroup extends AInteractionGroup {
-
-  private ASynchroCursorsInteraction mmSelection;
-
-  public ASynchroCursorsGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.CANVAS_GROUP, iManager);
-
-    mmSelection=new ASynchroCursorsInteraction();
-    addInteraction(mmSelection);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsInteraction.java
deleted file mode 100755
index 9f7915a17dc9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/ASynchroCursorsInteraction.java
+++ /dev/null
@@ -1,483 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Graphics2D;
-import java.awt.event.KeyEvent;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.ACanvas;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ACursorFactory;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameterUtilities;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.utils.AMath;
-
-public class ASynchroCursorsInteraction extends AInteraction
-        implements ASleepMouseDragListener, AEnterExitListener
-{
-    /**
-     * The position of the moving marker in 3D. Phi is in degrees.
-     * (Must be static)
-     */
-    private static double rho, phi, z, sign_rho;
-
-    private static final double NOT_DEFINED = 9999.0;
-    private static final double RHO_MAX = 3000.0;
-    private static final double PHI_MAX = 400.0;
-    private static final double Z_MAX = 3000.0;
-    private static final double ETA_MAX = 10.0;
-
-    private static int key = 0;
-    protected int radius = 10;
-
-    public ASynchroCursorsInteraction()
-    {
-        super(1, ALL_WINDOWS_REPAINT, WORLD_COORDINATES, true);
-        hr[0] = new Ellipse2D.Double(0, 0, radius, radius);
-    }
-
-    public int getButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    /**
-     * Initialize the control points based on the starting point
-     */
-    public int init(Point2D.Double p, int key)
-    {
-        this.key = key;
-        setCenter(hr[0], p.x, p.y);
-        // ACanvas.getCanvas().repaintOthers(window);
-        return 0;
-    }
-
-    public void start(Point2D.Double p, int region, int key)
-    {
-      //call drag to update the cursor even if only a button is pressed
-      drag(p,region,key);
-    }
-
-    /**
-     * Move the active control point to the point (x, y).
-     *
-     * @param pInput the input point
-     * @param region the region
-     * @param key the current key being pressed
-     */
-    public void drag(Point2D.Double pInput, int region, int key)
-    {
-        this.key = key;
-        AProjection2D projection = (AProjection2D) window.getProjection();
-
-        Point2D.Double p = projection.inverseNonLinearTransform(pInput);
-
-        setCenter(hr[0], p.x, p.y);
-
-        rho = NOT_DEFINED;
-        z = NOT_DEFINED;
-        phi = NOT_DEFINED;
-        sign_rho = 1.;
-
-        if (projection instanceof AProjectionYX)
-        {
-            phi = Math.toDegrees(Math.atan2(p.y, p.x));
-            if (phi < 0.)
-                phi += 360.;
-            rho = AParameterUtilities.getRhoSign(p.x, p.y) * Math.sqrt(p.x * p.x + p.y * p.y);
-        }
-        else if (projection instanceof AProjectionFR)
-        {
-            phi = p.y;
-            rho = p.x;
-        }
-        else if (projection instanceof AProjectionFZ)
-        {
-            phi = p.y;
-            z = p.x;
-        }
-        else if (projection instanceof AProjectionRZ)
-        {
-            rho = Math.abs(p.y);
-            if (p.y < 0.)
-                sign_rho = -1.;
-            z = p.x;
-        }
-        else if (projection instanceof AProjectionYZ)
-        {
-            z = p.x;
-        }
-        else if (projection instanceof AProjectionXZ)
-        {
-            z = p.x;
-        }
-        else if (projection instanceof AProjectionVP)
-        {
-            phi = p.y;
-            rho = parameterStore.get("VP", "RMax").getD();
-            double eta = p.x;
-
-            z = parameterStore.get("Event", "ZVtx").getD() + 0.5 * rho * (Math.exp(eta) - 1. / Math.exp(eta));
-        }
-        else if (projection instanceof AProjectionLegoPlot)
-        {
-            // added by Mark Stockton
-            // update parameters
-            AProjectionLegoPlot.update();
-            //reverse the adjustPhi function
-            p.x=-(AProjectionLegoPlot.adjustPhi(window,-p.x,p.y));
-            if(p.x>-1.0 && p.x<361.0 && p.y>-5.01 && p.y<5.01)
-            {
-                phi=p.x;
-                rho = parameterStore.get("VP", "RMax").getD();
-                double eta=p.y;
-                if (AProjectionLegoPlot.reverse)
-                    eta = -eta;
-                z = parameterStore.get("Event", "ZVtx").getD() + 0.5 * rho * (Math.exp(eta) - 1. / Math.exp(eta));
-            }
-        }
-        if (key == KeyEvent.VK_P && phi != NOT_DEFINED)
-        {
-            double phiRZ = phi + 90.;
-
-            if (phiRZ < 0.)
-                phiRZ += 360;
-            if (phiRZ > 360.)
-                phiRZ -= 360;
-            parameterStore.get("RZ", "Phi").setD(phiRZ);
-            parameterStore.get("RZ", "Phi").globalize(ACanvas.getCanvas().getCurrentWindow().getIndex());
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        else
-            ACanvas.getCanvas().repaintOthers(window);
-    }
-
-    public void cancel()
-    {}
-
-    public void stop()
-    {}
-
-    public void paint(Graphics2D g)
-    {
-        // must use the window version of the parameters
-        parameterStore.selectWindowParameters(window.getName());
-        AProjection2D projection = (AProjection2D) window.getProjection();
-        AGraphics ag = AGraphics.makeAGraphics(g);
-
-        for (int i = 0; i < 2; i++)
-        {
-            if (i == 0)
-                ag.updateDrawParameters(frameDrawParameters);
-            else
-                ag.updateDrawParameters(drawParameters);
-
-            if (projection instanceof AProjectionYX)
-            {
-                if (phi != NOT_DEFINED)
-                {
-                    double r = (rho == NOT_DEFINED) ? RHO_MAX : Math.abs(rho);
-                    double cosPhi = Math.cos(Math.toRadians(phi));
-                    double sinPhi = Math.sin(Math.toRadians(phi));
-
-                    Point2D.Double p = window.calculateDisplay(projection.nonLinearTransform(0, 0));
-                    Point2D.Double p1 = window.calculateDisplay(projection.nonLinearTransform(r * cosPhi, r * sinPhi));
-                    Point2D.Double p2 = window.calculateDisplay(projection.nonLinearTransform(RHO_MAX * cosPhi, RHO_MAX * sinPhi));
-                    Point2D.Double p3 = window.calculateDisplay(projection.nonLinearTransform(-RHO_MAX * cosPhi, -RHO_MAX * sinPhi));
-
-                    if (key == KeyEvent.VK_P)
-                    {
-                        ag.drawLine(p2.x, p2.y, p3.x, p3.y);
-                    }
-                    else
-                    {
-                        ag.drawLine(p.x, p.y, p2.x, p2.y);
-                        if (rho != NOT_DEFINED)
-                            ag.drawSymbol(p1.x, p1.y);
-                    }
-
-                }
-                else if (rho != NOT_DEFINED)
-                {
-                    int numPoints = 48;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    for (int j = 0; j < numPoints; j++)
-                    {
-                        hv[0][0][j] = rho * Math.cos(Math.PI * 2 * j / 48);
-                        hv[1][0][j] = rho * Math.sin(Math.PI * 2 * j / 48);
-                    }
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawPolygon(d.hv[0][0], d.hv[1][0], numPoints);
-                }
-            }
-            else if (projection instanceof AProjectionFR)
-            {
-                int numPoints = 5;
-                double[][][] hv = new double[2][1][numPoints];
-
-                hv[0][0][0] = Math.abs(rho);
-                hv[1][0][0] = phi;
-                hv[0][0][1] = Math.abs(rho);
-                hv[1][0][1] = 0.;
-                hv[0][0][2] = Math.abs(rho);
-                hv[1][0][2] = RHO_MAX;
-                hv[0][0][3] = 0.;
-                hv[1][0][3] = phi;
-                hv[0][0][4] = RHO_MAX;
-                hv[1][0][4] = phi;
-                ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                if (rho != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][1], d.hv[1][0][1], d.hv[0][0][2], d.hv[1][0][2]);
-                if (phi != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][3], d.hv[1][0][3], d.hv[0][0][4], d.hv[1][0][4]);
-                if (rho != NOT_DEFINED && phi != NOT_DEFINED)
-                    ag.drawSymbol(d.hv[0][0][0], d.hv[1][0][0]);
-            }
-            else if (projection instanceof AProjectionFZ)
-            {
-                int numPoints = 5;
-                double[][][] hv = new double[2][1][numPoints];
-
-                hv[0][0][0] = z;
-                hv[1][0][0] = phi;
-                hv[0][0][1] = z;
-                hv[1][0][1] = 0.;
-                hv[0][0][2] = z;
-                hv[1][0][2] = PHI_MAX;
-                hv[0][0][3] = -Z_MAX;
-                hv[1][0][3] = phi;
-                hv[0][0][4] = Z_MAX;
-                hv[1][0][4] = phi;
-                ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                if (z != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][1], d.hv[1][0][1], d.hv[0][0][2], d.hv[1][0][2]);
-                if (phi != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][3], d.hv[1][0][3], d.hv[0][0][4], d.hv[1][0][4]);
-                if (z != NOT_DEFINED && phi != NOT_DEFINED)
-                    ag.drawSymbol(d.hv[0][0][0], d.hv[1][0][0]);
-            }
-            else if (projection instanceof AProjectionRZ)
-            {
-                if (rho != NOT_DEFINED && phi != NOT_DEFINED && z != NOT_DEFINED && (rho != 0. || z != 0.))
-                {
-                    int numPoints = 15;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    double dr, dz;
-                    if (Math.abs(rho/RHO_MAX) > Math.abs(z/Z_MAX)) {
-                        dr = RHO_MAX / (numPoints-1);
-                        dz = z * (RHO_MAX / ((numPoints-1)*rho));
-                    } else {
-                        dz = AMath.getSign(z) * Z_MAX / (numPoints-1);
-                        dr = rho * Math.abs(Z_MAX / ((numPoints-1)*z));
-                    }
-                    
-                    double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-
-                    if (phiMid > AMath.TWO_PI)
-                        phiMid -= AMath.TWO_PI;
-                    double phiDiff = Math.abs(Math.toRadians(phi) - phiMid);
-
-                    if (phiDiff > Math.PI / 2. && phiDiff < 3 * Math.PI / 2.)
-                        dr *= -1;
-
-                    for (int j=0; j<numPoints; j++) {
-                        hv[0][0][j] = j*dz;
-                        hv[1][0][j] = j*dr;
-                    }
-
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawSmoothPolyline(d.hv[0][0], d.hv[1][0], numPoints);
-                }
-                else
-                {
-                    int numPoints = 5;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    hv[0][0][0] = z;
-                    hv[1][0][0] = rho * sign_rho;
-                    hv[0][0][1] = z;
-                    hv[1][0][1] = -RHO_MAX;
-                    hv[0][0][2] = z;
-                    hv[1][0][2] = RHO_MAX;
-                    hv[0][0][3] = -Z_MAX;
-                    hv[1][0][3] = rho * sign_rho;
-                    hv[0][0][4] = Z_MAX;
-                    hv[1][0][4] = rho * sign_rho;
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    if (z != NOT_DEFINED)
-                        ag.drawLine(d.hv[0][0][1], d.hv[1][0][1], d.hv[0][0][2], d.hv[1][0][2]);
-                    if (rho != NOT_DEFINED)
-                        ag.drawLine(d.hv[0][0][3], d.hv[1][0][3], d.hv[0][0][4], d.hv[1][0][4]);
-                    if (z != NOT_DEFINED && rho != NOT_DEFINED)
-                        ag.drawSymbol(d.hv[0][0][0], d.hv[1][0][0]);
-                }
-            }
-            else if (projection instanceof AProjectionYZ)
-            {
-                if (rho != NOT_DEFINED && phi != NOT_DEFINED && z != NOT_DEFINED)
-                {
-                    int numPoints = 2;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    hv[0][0][0] = 0.;
-                    hv[1][0][0] = 0.;
-                    double phiRot = AProjectionXZ.getPhi();
-
-                    hv[0][0][1] = z;
-                    hv[1][0][1] = rho * Math.sin(phiRot);
-
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawLine(d.hv[0][0][0], d.hv[1][0][0], d.hv[0][0][1], d.hv[1][0][1]);
-                    ag.drawSymbol(d.hv[0][0][1], d.hv[1][0][1]);
-                }
-                else if (z != NOT_DEFINED)
-                {
-                    int numPoints = 2;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    hv[0][0][0] = z;
-                    hv[1][0][0] = -RHO_MAX;
-                    hv[0][0][1] = z;
-                    hv[1][0][1] = RHO_MAX;
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawLine(d.hv[0][0][0], d.hv[1][0][0], d.hv[0][0][1], d.hv[1][0][1]);
-                }
-            }
-            else if (projection instanceof AProjectionXZ)
-            {
-                if (rho != NOT_DEFINED && phi != NOT_DEFINED && z != NOT_DEFINED)
-                {
-                    int numPoints = 2;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    hv[0][0][0] = 0.;
-                    hv[1][0][0] = 0.;
-                    double phiRot = AProjectionXZ.getPhi();
-
-                    hv[0][0][1] = z;
-                    hv[1][0][1] = rho * Math.cos(phiRot);
-
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawLine(d.hv[0][0][0], d.hv[1][0][0], d.hv[0][0][1], d.hv[1][0][1]);
-                    ag.drawSymbol(d.hv[0][0][1], d.hv[1][0][1]);
-                }
-                else if (z != NOT_DEFINED)
-                {
-                    int numPoints = 2;
-                    double[][][] hv = new double[2][1][numPoints];
-
-                    hv[0][0][0] = z;
-                    hv[1][0][0] = -RHO_MAX;
-                    hv[0][0][1] = z;
-                    hv[1][0][1] = RHO_MAX;
-                    ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                    ag.drawLine(d.hv[0][0][0], d.hv[1][0][0], d.hv[0][0][1], d.hv[1][0][1]);
-                }
-            }
-            else if (projection instanceof AProjectionVP)
-            {
-                int numPoints = 5;
-                double[][][] hv = new double[2][1][numPoints];
-                double eta = 1.;
-
-                if (z != NOT_DEFINED && rho != NOT_DEFINED)
-                    eta = AParameterUtilities.eta(z, rho);
-                hv[0][0][0] = eta;
-                hv[1][0][0] = phi;
-                hv[0][0][1] = eta;
-                hv[1][0][1] = 0.;
-                hv[0][0][2] = eta;
-                hv[1][0][2] = PHI_MAX;
-                hv[0][0][3] = -ETA_MAX;
-                hv[1][0][3] = phi;
-                hv[0][0][4] = ETA_MAX;
-                hv[1][0][4] = phi;
-                ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-
-                if (z != NOT_DEFINED && rho != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][1], d.hv[1][0][1], d.hv[0][0][2], d.hv[1][0][2]);
-                if (phi != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][3], d.hv[1][0][3], d.hv[0][0][4], d.hv[1][0][4]);
-
-                if (z != NOT_DEFINED && phi != NOT_DEFINED && rho != NOT_DEFINED)
-                    ag.drawSymbol(d.hv[0][0][0], d.hv[1][0][0]);
-            }
-            else if (projection instanceof AProjectionLegoPlot)
-            {
-                //added by Mark Stockton
-                double eta = 1.;
-                double[][][] hv = new double[2][1][3];
-                Point2D.Double[] userCorners = window.getUserCorners();
-                Point2D.Double[] displayCorners = window.getDisplayCorners();
-                //update parameters
-                AProjectionLegoPlot.update();
-                if (z != NOT_DEFINED && rho != NOT_DEFINED)
-                    eta = AParameterUtilities.eta(z, rho);
-                if (AProjectionLegoPlot.reverse)
-                    eta = -eta;
-                hv[0][0][0] = AProjectionLegoPlot.adjustPhi(window,phi,eta);
-                hv[1][0][0] = eta;
-                //top of plot coordinate
-                hv[0][0][1] = AProjectionLegoPlot.adjustPhi(window,phi,userCorners[0].y);
-                hv[1][0][1] = userCorners[0].y;
-                //bottom of plot coordinate
-                hv[0][0][2] = AProjectionLegoPlot.adjustPhi(window,phi,userCorners[2].y);
-                hv[1][0][2] = userCorners[2].y;
-                //convert to screen positions
-                ACoord d = window.calculateDisplay(projection.nonLinearTransform(new ACoord(hv)));
-                if (z != NOT_DEFINED && rho != NOT_DEFINED)
-                    ag.drawLine(0, d.hv[1][0][0], displayCorners[1].x, d.hv[1][0][0]);//eta line
-                if (phi != NOT_DEFINED)
-                    ag.drawLine(d.hv[0][0][1], d.hv[1][0][1],d.hv[0][0][2], d.hv[1][0][2]);//phi line
-                if (z != NOT_DEFINED && phi != NOT_DEFINED && rho != NOT_DEFINED)
-                    ag.drawSymbol(d.hv[0][0][0], d.hv[1][0][0]);//square where axis cross
-            }
-        }
-        parameterStore.restoreWindowParameters();
-    }
-
-    /**
-     * Gets called each time we enter a window in which this interaction is active
-     */
-    public void entered()
-    {
-        //Set mouse cursor
-        window.setCursor(ACursorFactory.getInstance().getSyncCursor());
-    }
-
-    /**
-     * Gets called each time we leave a window in which this interaction is active
-     */
-    public void exited()
-    {
-       //Set mouse cursor
-       window.setCursor(ACursorFactory.getInstance().getSyncCursor());
-    }
-
-    public AModifier[] getModifiers()
-    {
-        return new AModifier[] { new AModifier(KeyEvent.VK_P, false, "Copy phi to RZ projection" ) };
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AVPSelectionGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AVPSelectionGroup.java
deleted file mode 100755
index c439d48ee422..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AVPSelectionGroup.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package atlantis.interactions;
-
-
-public class AVPSelectionGroup extends AInteractionGroup {
-
-  private ARectangleVPSelection rectangleVPSelection;
-
-  public AVPSelectionGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-
-    rectangleVPSelection=new ARectangleVPSelection();
-    addInteraction(rectangleVPSelection);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AWindowInfoInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AWindowInfoInteraction.java
deleted file mode 100755
index 80d439b8e5fa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AWindowInfoInteraction.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.geom.Point2D;
-
-import atlantis.graphics.ACursorFactory;
-
-public class AWindowInfoInteraction extends AInteraction implements AMouseDragListener, AEnterExitListener
-{
-    // private int width=64;
-    private Point pickedPoint;
-    private Color c;
-
-    public AWindowInfoInteraction()
-    {
-        super(1, AUTOMATIC_REPAINT, SCREEN_COORDINATES, true);
-
-        this.c = Color.white;
-
-        // hr[0] = new Rectangle2D.Double(x, y, width, width);
-        pickedPoint = new Point(0, 0);
-    }
-
-    public int getButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    public void paint(Graphics2D g)
-    {
-        g.setColor(c);
-        g.fill(hr[0]);
-
-        /*
-         * g.fillRect(hr[0].getX(), hr[0].getY(), hr[0].getWidth(),
-         * hr[0].getHeight());
-         */
-    }
-
-    public void start(Point2D.Double p, int region, int key)
-    {
-        pickedPoint.setLocation(p.x - hr[0].getX(), p.y - hr[0].getY());
-    }
-
-    public void drag(Point2D.Double p, int region, int key)
-    {
-        hr[0].setFrame(p.x - pickedPoint.x, p.y - pickedPoint.y, hr[0].getWidth(), hr[0].getHeight());
-    }
-
-    public void stop()
-    {}
-
-    public void cancel()
-    {}
-
-    public void entered()
-    {
-        window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-    public void exited()
-    {
-        window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-    public int getPopupType()
-    {
-        return APopupListener.REGION_POPUP;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AXSkewSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/AXSkewSelection.java
deleted file mode 100755
index 1aac47fd38ed..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AXSkewSelection.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-/**
- * A panel which selects a parallogram-shaped region in which two
- * sides are parallel to the y-axis and the other two are skewed with
- * respect to the x-axis.
- *
- * @author Charles Loomis
- **/
-public class AXSkewSelection extends ASelection {
-
-  final private static int STARTING_WIDTH=25;
-
-  public AXSkewSelection() {
-    super(6);
-  }
-
-  /**
-   * Initialize the control points based in the starting point
-   */
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    setCenter(hr[0], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[1], p.x-STARTING_WIDTH, p.y);
-    setCenter(hr[2], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[3], p.x+STARTING_WIDTH, p.y);
-    setCenter(hr[4], p.x, p.y);
-    setCenter(hr[5], p.x, p.y);
-
-    region=5;
-    return region;
-  }
-
-  /**
-   * Move the active control point to the point (x,y).
-   */
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-
-    double width;
-
-    // Change what is done depending on which control point is active.
-    switch(region) {
-    case 0:
-      width=p.x-hr[4].getCenterX();
-      setCenterX(hr[0], hr[4].getCenterX()+width);
-      setCenterX(hr[1], hr[5].getCenterX()+width);
-      setCenterX(hr[2], hr[5].getCenterX()-width);
-      setCenterX(hr[3], hr[4].getCenterX()-width);
-      break;
-
-    case 1:
-      width=p.x-hr[5].getCenterX();
-      setCenterX(hr[0], hr[4].getCenterX()+width);
-      setCenterX(hr[1], hr[5].getCenterX()+width);
-      setCenterX(hr[2], hr[5].getCenterX()-width);
-      setCenterX(hr[3], hr[4].getCenterX()-width);
-      break;
-
-    case 2:
-      width=p.x-hr[5].getCenterX();
-      setCenterX(hr[0], hr[4].getCenterX()-width);
-      setCenterX(hr[1], hr[5].getCenterX()-width);
-      setCenterX(hr[2], hr[5].getCenterX()+width);
-      setCenterX(hr[3], hr[4].getCenterX()+width);
-      break;
-
-    case 3:
-      width=p.x-hr[4].getCenterX();
-      setCenterX(hr[0], hr[4].getCenterX()-width);
-      setCenterX(hr[1], hr[5].getCenterX()-width);
-      setCenterX(hr[2], hr[5].getCenterX()+width);
-      setCenterX(hr[3], hr[4].getCenterX()+width);
-      break;
-
-    case 4:
-      width=hr[4].getCenterX()-hr[0].getCenterX();
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[0], p.x-width, p.y);
-      setCenter(hr[3], p.x+width, p.y);
-      break;
-
-    case 5:
-      width=hr[4].getCenterX()-hr[0].getCenterX();
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[1], p.x-width, p.y);
-      setCenter(hr[2], p.x+width, p.y);
-      break;
-    }
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  /**
-   * Make the affine transform which corresponds to this skewed region.
-   */
-  public Point2D.Double[] getCorners() {
-    int first=getUpperLeftRegion();
-
-    // Calculate which is the opposite corner.
-    int third=(first+2)%4;
-
-    // Now use the cross-product to determine which of the
-    // remaining points is the one which keep the path going clockwise.
-    int second=(first+1)%4;
-    double dx0=hr[third].getCenterX()-hr[first].getCenterX();
-    double dy0=hr[third].getCenterY()-hr[first].getCenterY();
-    double dx1=hr[second].getCenterX()-hr[first].getCenterX();
-    double dy1=hr[second].getCenterY()-hr[first].getCenterY();
-
-    if(dx0*dy1-dy0*dx1>0) second=(first+3)%4;
-
-    return convert(first, second, third);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AXSliceSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/AXSliceSelection.java
deleted file mode 100755
index 596f81aa6e8e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AXSliceSelection.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-/**
- * A panel which selects a slice of the window in the x-direction.
- * That is, it selects a rectangular region with a height equal to the
- * full height of the window and with an adjustable width.
- *
- * @author Charles Loomis
- **/
-public class AXSliceSelection extends ASelection {
-
-  public AXSliceSelection() {
-    super(6);
-  }
-
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    int ymax=window.getSize().height;
-    int ymid=ymax/2;
-
-    setCenter(hr[0], p.x, 0);
-    setCenter(hr[1], p.x, 0);
-    setCenter(hr[2], p.x, ymax);
-    setCenter(hr[3], p.x, ymax);
-    setCenter(hr[4], p.x, ymid);
-    setCenter(hr[5], p.x, ymid);
-
-    region=5;
-    return region;
-  }
-
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-
-    switch(region) {
-    case 0:
-    case 3:
-    case 4:
-      setCenterX(hr[0], p.x);
-      setCenterX(hr[3], p.x);
-      setCenterX(hr[4], p.x);
-      break;
-
-    case 1:
-    case 2:
-    case 5:
-      setCenterX(hr[1], p.x);
-      setCenterX(hr[2], p.x);
-      setCenterX(hr[5], p.x);
-      break;
-    }
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  public Point2D.Double[] getCorners() {
-    // Sort out which are the three control points.
-    int first=0;
-    int second=1;
-    int third=2;
-
-    if(hr[1].getCenterX()<hr[0].getCenterX()) {
-      first=1;
-      second=0;
-      third=3;
-    }
-
-    return convert(first, second, third);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AYSkewSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/AYSkewSelection.java
deleted file mode 100755
index 9e98bde0f403..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AYSkewSelection.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-/**
- * A panel which selects a parallogram-shaped region in which two
- * sides are parallel to the y-axis and the other two are skewed with
- * respect to the x-axis.
- *
- * @author Charles Loomis
- **/
-public class AYSkewSelection extends ASelection {
-
-  final private static int STARTING_WIDTH=25;
-
-  public AYSkewSelection() {
-    super(6);
-  }
-
-  /**
-   * Initialize the control points based in the starting point
-   */
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    setCenter(hr[0], p.x, p.y-STARTING_WIDTH);
-    setCenter(hr[1], p.x, p.y-STARTING_WIDTH);
-    setCenter(hr[2], p.x, p.y+STARTING_WIDTH);
-    setCenter(hr[3], p.x, p.y+STARTING_WIDTH);
-    setCenter(hr[4], p.x, p.y);
-    setCenter(hr[5], p.x, p.y);
-
-    region=5;
-    return region;
-  }
-
-  /**
-   * Move the active control point to the point (x,y).
-   */
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-
-    double width;
-
-    // Change what is done depending on which control point is active.
-    switch(region) {
-    case 0:
-      width=p.y-hr[4].getCenterY();
-      setCenterY(hr[0], hr[4].getCenterY()+width);
-      setCenterY(hr[1], hr[5].getCenterY()+width);
-      setCenterY(hr[2], hr[5].getCenterY()-width);
-      setCenterY(hr[3], hr[4].getCenterY()-width);
-      break;
-
-    case 1:
-      width=p.y-hr[5].getCenterY();
-      setCenterY(hr[0], hr[4].getCenterY()+width);
-      setCenterY(hr[1], hr[5].getCenterY()+width);
-      setCenterY(hr[2], hr[5].getCenterY()-width);
-      setCenterY(hr[3], hr[4].getCenterY()-width);
-      break;
-
-    case 2:
-      width=p.y-hr[5].getCenterY();
-      setCenterY(hr[0], hr[4].getCenterY()-width);
-      setCenterY(hr[1], hr[5].getCenterY()-width);
-      setCenterY(hr[2], hr[5].getCenterY()+width);
-      setCenterY(hr[3], hr[4].getCenterY()+width);
-      break;
-
-    case 3:
-      width=p.y-hr[4].getCenterY();
-      setCenterY(hr[0], hr[4].getCenterY()-width);
-      setCenterY(hr[1], hr[5].getCenterY()-width);
-      setCenterY(hr[2], hr[5].getCenterY()+width);
-      setCenterY(hr[3], hr[4].getCenterY()+width);
-      break;
-
-    case 4:
-      width=hr[4].getCenterY()-hr[0].getCenterY();
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[0], p.x, p.y-width);
-      setCenter(hr[3], p.x, p.y+width);
-      break;
-
-    case 5:
-      width=hr[4].getCenterY()-hr[0].getCenterY();
-      setCenter(hr[region], p.x, p.y);
-      setCenter(hr[1], p.x, p.y-width);
-      setCenter(hr[2], p.x, p.y+width);
-      break;
-    }
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  /**
-   * Make the affine transform which corresponds to this skewed region.
-   */
-  public Point2D.Double[] getCorners() {
-    int first=getUpperLeftRegion();
-
-    // Calculate which is the opposite corner.
-    int third=(first+2)%4;
-
-    // Now use the cross-product to determine which of the
-    // remaining points is the one which keep the path going clockwise.
-    int second=(first+1)%4;
-    double dx0=hr[third].getCenterX()-hr[first].getCenterX();
-    double dy0=hr[third].getCenterY()-hr[first].getCenterY();
-    double dx1=hr[second].getCenterX()-hr[first].getCenterX();
-    double dy1=hr[second].getCenterY()-hr[first].getCenterY();
-
-    if(dx0*dy1-dy0*dx1>0) second=(first+3)%4;
-
-    return convert(first, second, third);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AYSliceSelection.java b/graphics/AtlantisJava/src/atlantis/interactions/AYSliceSelection.java
deleted file mode 100755
index 41c0a8293cdb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AYSliceSelection.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package atlantis.interactions;
-
-
-import java.awt.*;
-import java.awt.geom.*;
-
-
-/**
- * A panel which selects a slice of the window in the x-direction.
- * That is, it selects a rectangular region with a height equal to the
- * full height of the window and with an adjustable width.
- *
- * @author Charles Loomis
- **/
-public class AYSliceSelection extends ASelection {
-
-  public AYSliceSelection() {
-    super(6);
-  }
-
-  public int init(Point2D.Double p, int key) {
-    isValid=false;
-
-    int xmax=window.getSize().width;
-    int xmid=xmax/2;
-
-    setCenter(hr[0], 0, p.y);
-    setCenter(hr[1], 0, p.y);
-    setCenter(hr[2], xmax, p.y);
-    setCenter(hr[3], xmax, p.y);
-    setCenter(hr[4], xmid, p.y);
-    setCenter(hr[5], xmid, p.y);
-
-    region=5;
-    return region;
-  }
-
-  public void drag(Point2D.Double p, int region, int key) {
-    isValid=true;
-
-    switch(region) {
-    case 0:
-    case 3:
-    case 4:
-      setCenterY(hr[0], p.y);
-      setCenterY(hr[3], p.y);
-      setCenterY(hr[4], p.y);
-      break;
-
-    case 1:
-    case 2:
-    case 5:
-      setCenterY(hr[1], p.y);
-      setCenterY(hr[2], p.y);
-      setCenterY(hr[5], p.y);
-      break;
-    }
-  }
-
-  public void paint(Graphics2D g) {
-    paintStandard(g);
-  }
-
-  public Point2D.Double[] getCorners() {
-    // Sort out which are the three control points.
-    int first=1;
-    int second=2;
-    int third=3;
-
-    if(hr[1].getCenterY()>hr[0].getCenterY()) {
-      first=0;
-      second=3;
-      third=2;
-    }
-
-    return convert(first, second, third);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AZMRGroup.java b/graphics/AtlantisJava/src/atlantis/interactions/AZMRGroup.java
deleted file mode 100755
index 9b6903d9fb4f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AZMRGroup.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package atlantis.interactions;
-
-
-public class AZMRGroup extends AInteractionGroup {
-
-  private AZMRInteraction transformInteraction;
-
-  public AZMRGroup(AInteractionsManager iManager) {
-    super(AInteractionGroup.WINDOW_GROUP, iManager);
-    transformInteraction=new AZMRInteraction();
-    this.addInteraction(transformInteraction);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/AZMRInteraction.java b/graphics/AtlantisJava/src/atlantis/interactions/AZMRInteraction.java
deleted file mode 100755
index db82da56f335..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/AZMRInteraction.java
+++ /dev/null
@@ -1,700 +0,0 @@
-package atlantis.interactions;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.Line2D;
-import java.awt.geom.Point2D;
-
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.event.AEventManager;
-import atlantis.graphics.ACursorFactory;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.projection.AProjection;
-import atlantis.projection.AProjection2D;
-import atlantis.projection.AProjection3D;
-import atlantis.projection.AProjectionFR;
-import atlantis.projection.AProjectionFZ;
-import atlantis.projection.AProjectionLegoPlot;
-import atlantis.projection.AProjectionRZ;
-import atlantis.projection.AProjectionVP;
-import atlantis.projection.AProjectionXZ;
-import atlantis.projection.AProjectionYX;
-import atlantis.projection.AProjectionYZ;
-import atlantis.utils.AMath;
-import atlantis.utils.AVector;
-
-/**
- * The Zoom, Move and Rotate interaction.
- */
-public class AZMRInteraction extends AInteraction implements
-        ASleepMouseDragListener, AMousePressListener, AEnterExitListener, ActionListener
-{
-    // when these values are reached on any of the coordinates, zooming takes
-    // no longer any effect
-    private static final double MINIMAL_ZOOM_LIMIT = 0.001; // [cm] = 10 um
-    private static final double MAXIMAL_ZOOM_LIMIT = 100000; // [cm] = 1000 m
-
-    private static final int ZOOM_MODE = 0;
-    private static final int HORIZONTAL_ZOOM_MODE = 1;
-    private static final int VERTICAL_ZOOM_MODE = 2;
-    private static final int ROTATE_MODE = 3;
-    private static final int MOVE_MODE = 5;
-
-    private int centerMarkRadius = 6;
-    private Point2D.Double p0;
-    private int previousKey = KeyEvent.VK_UNDEFINED;
-    private int mode;
-    private JMenuItem[] popupItems;
-    private final static String TO_CENTER_OF_DETECTOR = "To Center Of Detector";
-    private final static String CENTER_PICTURE = "Center The Picture";
-    private final static String ASPECT_RATIO_1 = "Aspect Ratio 1";
-    private final static String UNZOOM_FULL = "Unzoom Full";
-
-    // if false, none of the ZMR interactions will have the red central dot
-    // painted
-    private static boolean paintCenterDot = true;
-
-    public AZMRInteraction()
-    {
-        super(1, AUTOMATIC_REPAINT, WORLD_COORDINATES, false);
-
-        popupItems = new JMenuItem[] {
-            new JMenuItem(TO_CENTER_OF_DETECTOR),
-            new JMenuItem(CENTER_PICTURE),
-            new JMenuItem(UNZOOM_FULL)};
-        
-        for (int i = 0; i < popupItems.length; i++) {
-            popupItems[i].addActionListener(this);
-        }
-
-        // The center of the ellipse is in (0, 0) in User Space
-        hr[0] = new Ellipse2D.Double(-centerMarkRadius / 2,
-                -centerMarkRadius / 2, centerMarkRadius, centerMarkRadius);
-        
-        //By default we are in zoom mode
-        mode = ZOOM_MODE;
-    }
-
-    public static void setPaintCenterDot(boolean state)
-    {
-        paintCenterDot = state;
-    }
-
-    public void connect(AInteractionsManager manager)
-    {
-        super.connect(manager);
-        Point2D.Double c = ((AProjection2D) window.getProjection()).getCenter();
-
-        setCenter(hr[0], c.x, c.y);
-    }
-
-    public int getPressButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    public int init(Point2D.Double p, int key)
-    {
-        keyChange(p, key);
-        return -1;
-    }
-
-    public void pressed(Point2D.Double p, int button, int key)
-    {
-        if (key == KeyEvent.VK_C)
-            setCenter(hr[0], p.x, p.y);
-        if (key == KeyEvent.VK_0){
-            double[] primaryVertex = AEventManager.instance().getCurrentEvent().getPrimaryVertex();
-            if(window.getProjection().getName().equals("YX")) setCenter(hr[0], primaryVertex[0], primaryVertex[1]);
-            if(window.getProjection().getName().equals("RZ")) {
-                double phiMid2 = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-                double phiDiff = Math.abs(Math.atan2(primaryVertex[1], primaryVertex[0]) - phiMid2);
-                int s=-1;
-                if (phiDiff < Math.PI / 2. || phiDiff > 3 * Math.PI / 2.) s = 1;
-                setCenter(hr[0], primaryVertex[2], s*Math.sqrt(primaryVertex[0]*primaryVertex[0]+primaryVertex[1]*primaryVertex[1]));
-            }
-        }
-    }
-
-    public int getButton()
-    {
-        return AInteractionsManager.LEFT;
-    }
-
-    public void start(Point2D.Double p, int region, int key)
-    {}
-
-    private double getHd0(Point2D.Double p)
-    {
-        Point2D.Double[] c = window.getUserCorners();
-        AVector v21 = new AVector(c[2].x, c[2].y, c[1].x, c[1].y);
-        AVector v10 = new AVector(c[1].x, c[1].y, c[0].x, c[0].y);
-        Point2D.Double center = getCenter(hr[0]);
-
-        return p.distance(AMath.intersectionPoint(center, v21, p, v10));
-    }
-
-    private double getVd0(Point2D.Double p)
-    {
-        Point2D.Double[] c = window.getUserCorners();
-        AVector v01 = new AVector(c[0].x, c[0].y, c[1].x, c[1].y);
-        AVector v12 = new AVector(c[1].x, c[1].y, c[2].x, c[2].y);
-        Point2D.Double center = getCenter(hr[0]);
-
-        return p.distance(AMath.intersectionPoint(center, v01, p, v12));
-    }
-
-    private void keyChange(Point2D.Double p, int key)
-    {
-        p0 = p;
-
-        switch (key)
-        {
-            case KeyEvent.VK_UNDEFINED:
-                mode = ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_H:
-                mode = HORIZONTAL_ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_V:
-                mode = VERTICAL_ZOOM_MODE;
-                break;
-
-            case KeyEvent.VK_R:
-                mode = ROTATE_MODE;
-                break;
-
-            case KeyEvent.VK_M:
-                mode = MOVE_MODE;
-                break;
-
-            case KeyEvent.VK_Z:
-                mode = ZOOM_MODE;
-                break;
-        }
-        
-        //Update cursor mode when key changes
-        setCursorMode();
-    }
-
-    public void drag(Point2D.Double p, int region, int key)
-    {
-
-        if (key != previousKey)
-        {
-            keyChange(p, key);
-            previousKey = key;
-        }
-
-        double zf;
-        Point2D.Double center = getCenter(hr[0]);
-        AProjection proj = window.getProjection();
-
-        switch (mode)
-        {
-            case ZOOM_MODE:
-                zf = p0.distance(center.x, center.y)
-                        / p.distance(center.x, center.y);
-                performZoom(getCenter(hr[0]), zf, window);
-                break;
-
-            case HORIZONTAL_ZOOM_MODE:
-                zf = getHd0(p0) / getHd0(p);
-                performHorizontalZoom(center, zf, window);
-                break;
-
-            case VERTICAL_ZOOM_MODE:
-                zf = getVd0(p0) / getVd0(p);
-                performVerticalZoom(center, zf, window);
-                break;
-
-            case ROTATE_MODE:
-                if ((proj instanceof AProjectionFR)
-                        || (proj instanceof AProjectionFZ)
-                        || (proj instanceof AProjectionVP))
-                    performPhiRotation(p.y - p0.y, window);
-                else if (proj instanceof AProjectionLegoPlot)
-                    performLegoRotation(center, p.x - p0.x, p.y - p0.y, window);
-                else
-                {
-                    if ((proj instanceof AProjectionRZ)
-                            || (proj instanceof AProjectionXZ)
-                            || (proj instanceof AProjectionYZ)
-                            || (proj instanceof AProjection3D))
-                    {
-                        AParameter phiPar = parameterStore.get(proj.getName(), "Phi");
-                        if (proj instanceof AProjection3D)
-                        {
-                            Point2D.Double pDisp = window.calculateDisplay(p);
-                            Point2D.Double p0Disp = window.calculateDisplay(p0);
-                            double height = window.getCurrDisp().getHeight();
-                            double deltaV = pDisp.getY() - p0Disp.getY();
-                            phiPar.setD(adjustPhi(phiPar.getD() + 360. * deltaV
-                                    / height));
-                        }
-                        else
-                            phiPar.setD(adjustPhi(phiPar.getD() + (p.y - p0.y)));
-                        p0 = p;
-                        ACanvas.getCanvas().repaintAllFromScratch();
-                    }
-                    else
-                    {
-                        double alpha = AMath.getAngle(p0, center)
-                                - AMath.getAngle(p, center);
-
-                        performRotation(alpha, center, window);
-                        if (proj instanceof AProjectionYX)
-                        {
-                            AParameter phiPar = parameterStore.get(proj.getName(), "Phi");
-
-                            phiPar.setD(adjustPhi(phiPar.getD() + Math.toDegrees(alpha)));
-                        }
-                    }
-                }
-                break;
-
-            case MOVE_MODE:
-                if ((proj instanceof AProjectionFR)
-                        || (proj instanceof AProjectionFZ)
-                        || (proj instanceof AProjectionVP))
-                {
-                    performMove(p.x - p0.x, 0, window);
-                    performPhiRotation(p.y - p0.y, window);
-                }
-                else
-                    performMove(p.x - p0.x, p.y - p0.y, window);
-                break;
-        }
-    } // drag()
-        // ---------------------------------------------------------------
-
-    private double adjustPhi(double phi)
-    {
-        while (phi < 0)
-            phi += 360;
-        while (phi > 360)
-            phi -= 360;
-        return phi;
-    }
-
-    public void stop()
-    {}
-
-    public void cancel()
-    {}
-
-    public void paint(Graphics2D g)
-    {
-        Point2D.Double p = window.calculateDisplay(getCenter(hr[0]));
-
-        //don't draw red dot if not drawing the lego plot 
-        //(i.e. when just drawing the legend)
-        boolean paintingJustLegoLegend = false;
-        if(window.getProjection().getName().equals("LegoPlot"))
-        {
-            parameterStore.selectWindowParameters(window.getName());
-            if(!parameterStore.get("LegoPlot","DrawPlot").getStatus())
-                paintingJustLegoLegend=true;
-            parameterStore.restoreWindowParameters();
-        }
-        
-        if (paintCenterDot && !paintingJustLegoLegend)
-        {
-            g.setColor(Color.red);
-            g.fillOval((int) (p.x - centerMarkRadius / 2),
-                    (int) (p.y - centerMarkRadius / 2), centerMarkRadius,
-                    centerMarkRadius);
-        }
-    }
-
-    /**
-     * Check the coordinates of the corners. If any of the limits was already
-     * reached, zooming / unzooming takes no longer any effect.
-     * 
-     * @param corners Double
-     * @return boolean
-     */
-    private static boolean checkCornerLimits(Point2D.Double[] corners)
-    {
-        
-        for (int i = 0; i < corners.length; i++)
-        {
-            //Get the difference in x and y off this corner and the next
-            //There is at most 3 corners - this will give us all of the combinations
-            double dX=Math.abs(corners[i].x-corners[(i+1)%(corners.length-1)].x);
-            double dY=Math.abs(corners[i].y-corners[(i+1)%(corners.length-1)].y);
-            //Coordinates will differ in only x OR y, get the one that does
-            double dMax = Math.max(dX,dY);
-            //Check that corner coordinate difference is within limits
-            if ((dMax < MINIMAL_ZOOM_LIMIT) || (dMax > MAXIMAL_ZOOM_LIMIT))
-            {
-              AOutput.alwaysAppend("zoom / unzoom limit reached\n",
-              ALogInterface.NORMAL);
-              return false;
-            }
-        }
-          return true;
-    } // checkTheCornerLimits()
-
-    
-    public static void performZoom(Point2D.Double center, double zf,
-            AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        for (int i = 0; i < corners.length; i++)
-        {
-            corners[i].x = center.x + (corners[i].x - center.x) * zf;
-            corners[i].y = center.y + (corners[i].y - center.y) * zf;
-        }
-
-        if (!checkCornerLimits(corners))
-        {
-            return; // zooming has already reached its limit
-        }
-
-        window.setUserCorners(corners);
-    }
-
-    public static void performRotation(double angle, Point2D.Double center,
-            AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        double cos = Math.cos(angle);
-        double sin = Math.sin(angle);
-
-        for (int i = 0; i < corners.length; i++)
-        {
-            double dx = corners[i].x - center.x;
-            double dy = corners[i].y - center.y;
-
-            corners[i].x = center.x + dx * cos - dy * sin;
-            corners[i].y = center.y + dx * sin + dy * cos;
-        }
-
-        window.setUserCorners(corners);
-    }
-
-    public static void performMinus90Rotation(AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        AVector v12 = new AVector(corners[1], corners[2]);
-        double x3 = corners[0].x + v12.dx;
-        double y3 = corners[0].y + v12.dy;
-
-        corners[0].setLocation(corners[1]);
-        corners[1].setLocation(corners[2]);
-        corners[2].setLocation(x3, y3);
-
-        window.setUserCorners(corners);
-    }
-
-    public static void performPlus90Rotation(AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        AVector v12 = new AVector(corners[1], corners[2]);
-        double x3 = corners[0].x + v12.dx;
-        double y3 = corners[0].y + v12.dy;
-
-        corners[2].setLocation(corners[1].x, corners[1].y);
-        corners[1].setLocation(corners[0].x, corners[0].y);
-        corners[0].setLocation(x3, y3);
-
-        window.setUserCorners(corners);
-    }
-
-    public static void performPhiRotation(double dPhi, AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        for (int i = 0; i < corners.length; i++)
-            corners[i].y -= dPhi;
-
-        window.setUserCorners(corners);
-    }
-
-    public void performLegoRotation(Point2D.Double center, double dPhi,
-            double dEta, AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        if (dPhi != 0.0 || dEta != 0.0)
-        {
-            //get original phi coord in 0-360 range
-            double centerX = -AProjectionLegoPlot.adjustPhi(window, -center.x, center.y);
-                        
-            corners[0].x -= (dPhi);
-            // x offset=xz*360 so xz=change/360
-            AProjectionLegoPlot.setxz(window.getIndex(), AProjectionLegoPlot
-                    .getxz(window.getIndex())
-                    + (dPhi) / 360);
-
-            if (AProjectionLegoPlot.getyz(window.getIndex()) < 1.0
-                    || (dEta) > 0.0)
-            {
-                corners[0].y -= (dEta);
-                corners[1].y -= (dEta);
-                // y offset=yz*50 so yz=change/50
-                AProjectionLegoPlot.setyz(window.getIndex(),
-                        AProjectionLegoPlot.getyz(window.getIndex()) - (dEta)
-                                / 50);
-            }
-            
-            //now have changed xz recalcuate phi coordinte
-            center.x = AProjectionLegoPlot.adjustPhi(window, centerX, center.y);
-            setCenter(hr[0], center.x, center.y);
-            
-            window.setUserCorners(corners);
-        }
-    }
-
-    public static void performHorizontalZoom(Point2D.Double center, double f,
-            AWindow window)
-    {
-        Point2D.Double[] c = window.getUserCorners();
-        AVector v21 = new AVector(c[2].x, c[2].y, c[1].x, c[1].y);
-        Point2D.Double center1 = new Point2D.Double(center.x + v21.dx, center.y
-                + v21.dy);
-        Point2D.Double p0 = AMath
-                .intersectionPoint(c[0], c[1], center, center1);
-
-        AVector v0 = new AVector(p0, c[0]).scale(f);
-        AVector v1 = new AVector(p0, c[1]).scale(f);
-
-        c[0].x = p0.x + v0.dx;
-        c[0].y = p0.y + v0.dy;
-
-        c[1].x = p0.x + v1.dx;
-        c[1].y = p0.y + v1.dy;
-
-        v21.invert();
-        p0.setLocation(p0.x + v21.dx, p0.y + v21.dy);
-        c[2].x = p0.x + v1.dx;
-        c[2].y = p0.y + v1.dy;
-
-        if (!checkCornerLimits(c))
-        {
-            return; // zooming has already reached its limit
-        }
-
-        window.setUserCorners(c);
-
-    }
-
-    public static void performVerticalZoom(Point2D.Double center, double f,
-            AWindow window)
-    {
-        Point2D.Double[] c = window.getUserCorners();
-        AVector v01 = new AVector(c[0].x, c[0].y, c[1].x, c[1].y);
-        Point2D.Double center1 = new Point2D.Double(center.x + v01.dx, center.y
-                + v01.dy);
-        Point2D.Double p0 = AMath
-                .intersectionPoint(c[1], c[2], center, center1);
-
-        AVector v1 = new AVector(p0, c[1]).scale(f);
-        AVector v2 = new AVector(p0, c[2]).scale(f);
-
-        c[1].x = p0.x + v1.dx;
-        c[1].y = p0.y + v1.dy;
-
-        c[2].x = p0.x + v2.dx;
-        c[2].y = p0.y + v2.dy;
-
-        v01.invert();
-        p0.setLocation(p0.x + v01.dx, p0.y + v01.dy);
-        c[0].x = p0.x + v1.dx;
-        c[0].y = p0.y + v1.dy;
-
-        if (!checkCornerLimits(c))
-        {
-            return; // zooming has already reached its limit
-        }
-
-        window.setUserCorners(c);
-
-    }
-
-    public static void performMove(double dx, double dy, AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-
-        for (int i = 0; i < corners.length; i++)
-        {
-            corners[i].x -= dx;
-            corners[i].y -= dy;
-        }
-
-        window.setUserCorners(corners);
-    }
-
-    public static Line2D.Double getMiddleHorizontalLine(AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-        AVector v12 = new AVector(corners[1], corners[2]).scale(0.5);
-
-        return new Line2D.Double(corners[0].x + v12.dx, corners[0].y + v12.dy,
-                corners[1].x + v12.dx, corners[1].y + v12.dy);
-    }
-
-    public static Line2D.Double getMiddleVerticalLine(AWindow window)
-    {
-        Point2D.Double[] corners = window.getUserCorners();
-        AVector v10 = new AVector(corners[1], corners[0]).scale(0.5);
-
-        return new Line2D.Double(corners[1].x + v10.dx, corners[1].y + v10.dy,
-                corners[2].x + v10.dx, corners[2].y + v10.dy);
-    }
-
-    public static void performFlip(Line2D.Double line, AWindow window)
-    {
-        if (line == null)
-            return;
-
-        Point2D.Double[] corners = window.getUserCorners();
-        double dSquare = Point2D.distanceSq(line.x1, line.y1, line.x2, line.y2);
-
-        for (int i = 0; i < corners.length; i++)
-        {
-            double u = (1 / dSquare)
-                    * ((corners[i].x - line.x1) * (line.x2 - line.x1) + (corners[i].y - line.y1)
-                            * (line.y2 - line.y1));
-
-            double x0 = line.x1 + u * (line.x2 - line.x1);
-            double y0 = line.y1 + u * (line.y2 - line.y1);
-
-            corners[i].x = 2 * x0 - corners[i].x;
-            corners[i].y = 2 * y0 - corners[i].y;
-        }
-
-        window.setUserCorners(corners);
-    }
-
-    /**
-     * Set cursor acording to current mode
-     */
-    public void setCursorMode(){
-        //check which mode we have
-        switch (mode)
-        {
-            case ZOOM_MODE:
-                window.setCursor(ACursorFactory.getInstance().getZoomCursor());
-                break;
-
-            case HORIZONTAL_ZOOM_MODE:
-                window.setCursor(ACursorFactory.getInstance().getZoomCursor());
-                break;
-
-            case VERTICAL_ZOOM_MODE:
-                window.setCursor(ACursorFactory.getInstance().getZoomCursor());
-                break;
-
-            case ROTATE_MODE:
-                window.setCursor(ACursorFactory.getInstance().getRotateCursor());
-                break;
-
-            case MOVE_MODE:
-                window.setCursor(ACursorFactory.getInstance().getMoveCursor());
-                break;
-        }        
-    }
-    
-    /**
-     * Gets called each time we enter a window in which this interaction is active
-     */
-    public void entered()
-    {
-        //Set mouse cursor according to current mode
-        setCursorMode();
-    }
-
-    /**
-     * Gets called each time we leave a window in which this interaction is active
-     */
-    public void exited()
-    {
-       //Set mouse cursor
-       window.setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-
-    public int getPopupType()
-    {
-        return APopupListener.WINDOW_POPUP;
-    }
-
-    public JMenuItem[] getPopupItems() {
-        return popupItems;
-    }
-    
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-
-        if (action.equals(TO_CENTER_OF_DETECTOR))
-        {
-            Point2D.Double c = ((AProjection2D) window.getProjection())
-                    .getCenter();
-
-            setCenter(hr[0], c.x, c.y);
-            window.repaint();
-        }
-        else if (action.equals(CENTER_PICTURE))
-        {
-            Point2D.Double[] c = window.getUserCorners();
-            AVector v02 = new AVector(c[0].x, c[0].y, c[2].x, c[2].y)
-                    .scale(0.5);
-            double xc = c[0].x + v02.dx;
-            double yc = c[0].y + v02.dy;
-            AVector vC0 = new AVector(xc, yc, 0, 0);
-            AProjection proj = window.getProjection();
-            if (proj instanceof AProjectionLegoPlot)
-                vC0 = new AVector(xc, yc, 180 * (1 - AProjectionLegoPlot
-                        .getxz(window.getIndex())), -5);
-            // 180*(1-AProjectionLegoPlot.xz), -5 is different center as center
-            // of plot is not at 0,0
-
-            for (int i = 0; i < c.length; i++)
-            {
-                c[i].x += vC0.dx;
-                c[i].y += vC0.dy;
-            }
-            window.setUserCorners(c);
-        } else if (action.equals(ASPECT_RATIO_1)) {
-            ((AProjection2D) window.getProjection()).setAspectRatio1(window);
-        }
-        else if (action.equals(UNZOOM_FULL))
-        {
-            window.setUserCorners(((AProjection2D) window.getProjection()).
-                    calculateNoZoomCorners(window.getSize()));
-        }
-    }
-
-    public AModifier[] getModifiers()
-    {
-        return new AModifier[] {
-            new AModifier(KeyEvent.VK_UNDEFINED, false, "Zoom"),
-            new AModifier(KeyEvent.VK_Z, false, "Zoom"),
-            new AModifier(KeyEvent.VK_H, false, "Horizonatal Zoom"),
-            new AModifier(KeyEvent.VK_V, false, "Vertical Zoom"),
-            new AModifier(KeyEvent.VK_R, false, "Rotate"),
-            new AModifier(KeyEvent.VK_F, false, "Fast Zoom"),
-            new AModifier(KeyEvent.VK_M, false, "Move (pan)"),
-            new AModifier(KeyEvent.VK_C, false, "Modify Central Point")
-        };
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/interactions/package.html b/graphics/AtlantisJava/src/atlantis/interactions/package.html
deleted file mode 100644
index 85cfaaddcc87..000000000000
--- a/graphics/AtlantisJava/src/atlantis/interactions/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>This package contains implementation of various interactions with
-the application such as the main ZMR (1Zoom Move Rotation), Fisheye,
-etc. Each AWindow has an AInteractionManager which tells the current
-interaction, e.g. ZMR, about what is happening with the mouse on that
-window.
-</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/list/AColorIcon.java b/graphics/AtlantisJava/src/atlantis/list/AColorIcon.java
deleted file mode 100755
index a77acc2917d3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/list/AColorIcon.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package atlantis.list;
-
-
-import javax.swing.Icon;
-import java.awt.*;
-
-import atlantis.graphics.colormap.AColorMap;
-
-
-// icon with size and color
-
-class AColorIcon implements Icon {
-  private int w, h;
-  private int colorIndex;
-
-  public AColorIcon() {
-    this(AColorMap.WH, 50, 15);
-  }
-
-  public AColorIcon(Dimension d) {
-    this.w=d.width;
-    this.h=d.height;
-  }
-
-  public AColorIcon(int colorIndex, int w, int h) {
-    this.colorIndex=colorIndex;
-    this.w=w;
-    this.h=h;
-  }
-
-  public void paintIcon(Component c, Graphics g, int x, int y) {
-    g.setColor(Color.black);
-    g.drawRect(x, y, w-1, h-1);
-    if(colorIndex==AColorMap.INVISIBLE) {
-      g.setColor(AColorMap.getColors()[AColorMap.WH]);
-      g.fillRect(x+1, y+1, w-2, h-2);
-      g.setColor(Color.black);
-      g.drawLine(x, y, x+w-1, y+h-1);
-      g.drawLine(x, y+h-1, x+w-1, y);
-    } else if(colorIndex==AColorMap.NO_COLOR) {
-      g.setColor(AColorMap.getColors()[AColorMap.WH]);
-      g.fillRect(x+1, y+1, w-2, h-2);
-      g.setColor(Color.black);
-      int xc=x+w/2;
-      int yc=y+h/2;
-      g.drawLine(xc, yc-2, xc, yc+2);
-      g.drawLine(xc-2, yc, xc+2, yc);
-    } else {
-      g.setColor(AColorMap.getColors()[colorIndex]);
-      g.fillRect(x+1, y+1, w-2, h-2);
-    }
-  }
-
-  public int getColorIndex() {
-    return colorIndex;
-  }
-
-  public void setColorIndex(int colorIndex) {
-    this.colorIndex=colorIndex;
-  }
-
-  public int getIconWidth() {
-    return w;
-  }
-
-  public int getIconHeight() {
-    return h;
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/list/AList.java b/graphics/AtlantisJava/src/atlantis/list/AList.java
deleted file mode 100755
index 7377bef99e9b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/list/AList.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package atlantis.list;
-
-import atlantis.event.AData;
-
-/**
- * Instance of AList as seen in AListManager (Lists)
- * source references instance of the datatype in the list
- * <ul>
- *   <li>itemsIndex is a list of indices (Atlantis internal datatitems indices)
- *               of the particular datape which are in the list</li>
- *    <li>itemsID is a list of dataitems IDs of the datatype in the list</li>
- * </ul>
- *
- * <p>index and id is identical for Track for instance, but different for
- * calo cells. When masking data on cross-event basis, IDs are necessary
- * (e.g. masking hot calo cells based on their IDs)</p>
- *
- * <p>Copyright: Copyright (c) 2002</p>
- *
- * @author not attributable
- * @version 1.0
- */
-public class AList
-{
-    private AData source;
-    private int[] itemsIndex;
-    private int[] itemsID;
-
-
-    /**
-     *
-     * @param data AData
-     * @param singleItem int - index of the dataitem to put in the list
-     */
-    public AList(AData data, int singleItem)
-    {
-        source = data;
-        itemsIndex = new int[] { singleItem };
-        itemsID = new int[] { source.getIdFromIndex(singleItem) };
-
-    } // AList() ------------------------------------------------------------
-
-
-
-    public AList(AData data, boolean[] drawn)
-    {
-        source = data;
-        int num = 0;
-        for(int i = 0; i < drawn.length; ++i)
-        {
-            if(drawn[i])
-            {
-                num++;
-            }
-        }
-
-        itemsIndex = new int[num];
-        itemsID = new int[num];
-        num = 0;
-
-        for(int i = 0; i < drawn.length; ++i)
-        {
-            if(drawn[i])
-            {
-                itemsIndex[num] = i;
-                itemsID[num] = source.getIdFromIndex(i);
-                num++;
-            }
-        }
-
-    } // AList() ------------------------------------------------------------
-
-
-
-    /**
-     * String representation of the AList instance. Returns the datatype name,
-     * resp. screen name and if there one item in the only, then the item's
-     * ID. If there are more items, it says the number of dataitems.
-     * @return String
-     */
-    public String toString()
-    {
-        String key = source.getStoreGateKey();
-        String sn = source.getNameScreenName();
-        String name = key != null ? sn + ":" + key : sn;
-
-        if(itemsIndex.length == 1)
-        {
-            return name + " " + source.getIdFromIndex(itemsIndex[0]);
-        }
-        else
-        {
-            return name + " (" + itemsIndex.length + " items)";
-        }
-
-    } // toString() ---------------------------------------------------------
-
-
-
-    public AData getSource()
-    {
-        return source;
-
-    } // getSource() --------------------------------------------------------
-
-
-
-    /**
-     * Returns indices of the items in the list (internal Atlantis indices
-     * which are *sometimes* identical with IDs)
-     * @return int[]
-     */
-    public int[] getItems()
-    {
-        return itemsIndex;
-
-    } // getItems() ---------------------------------------------------------
-
-
-
-    public int[] getItemsID()
-    {
-        return itemsID;
-
-    } // getItemsID() -------------------------------------------------------
-
-
-} // class AList ============================================================
diff --git a/graphics/AtlantisJava/src/atlantis/list/AListManager.java b/graphics/AtlantisJava/src/atlantis/list/AListManager.java
deleted file mode 100755
index 815d922e087b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/list/AListManager.java
+++ /dev/null
@@ -1,1765 +0,0 @@
-package atlantis.list;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.dnd.DragSource;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.MutableTreeNode;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
-
-import atlantis.canvas.ACanvas;
-import atlantis.data.AHelix;
-import atlantis.data.ARVxData;
-import atlantis.data.ATrackData;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACursorFactory;
-import atlantis.graphics.AIcon;
-import atlantis.graphics.APickingGraphics2D;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.gui.AGUI;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.APar;
-import atlantis.utils.A4Vector;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-import atlantis.utils.AUtilities;
-
-public class AListManager extends JTree implements MouseListener, MouseMotionListener
-{
-    private static ALogger logger = ALogger.getLogger(AListManager.class);
-    private static AEventManager eventManager = AEventManager.instance();
-
-    // used to display the tree
-    static private JFrame dialog; // rather than JDialog
-    // special nodes
-    static private final DefaultMutableTreeNode root = new DefaultMutableTreeNode("Lists");
-    static private final DefaultMutableTreeNode highlight = new DefaultMutableTreeNode("Highlight");
-    static private final DefaultMutableTreeNode lastDrawn = new DefaultMutableTreeNode("Last Drawn");
-    static private final DefaultMutableTreeNode others = new DefaultMutableTreeNode("Others");
-    static private final DefaultMutableTreeNode invisible = new DefaultMutableTreeNode("Invisible");
-    static private final DefaultMutableTreeNode mass = new DefaultMutableTreeNode("Calculation");
-    // instance
-    static private final AListManager listManager = new AListManager();
-    static private DefaultTreeModel dtm;
-    static private int numLists = 0;
-    // source and status of Drag and Drop
-    static private DefaultMutableTreeNode source = null;
-    static private boolean draging = false;
-    static private HashMapSet nodeColors;
-    
-    // counters for V0 mass calc
-    static private int V0vx=0;
-    static private int V0tracks=0;
-    static private int V0charge=0;
-    
-    // private static final Cursor DROP_VALID = DragSource.DefaultMoveDrop;
-    private static final Cursor DROP_VALID_COPY = DragSource.DefaultCopyDrop;
-    // private static final Cursor DROP_INVALID = DragSource.DefaultMoveNoDrop;
-    
-    
-    
-    private AListManager()
-    {
-        super(root, true);
-        dtm = (DefaultTreeModel) getModel();
-        nodeColors = new HashMapSet();
-        reset();
-        
-        addMouseListener(this);
-        addMouseMotionListener(this);
-        setSelectionRow(1);
-        setPreferredSize(new Dimension(200, 300));
-        setRootVisible(true);
-        setScrollsOnExpand(true);
-        setShowsRootHandles(false);
-        setCellRenderer(new ColorRenderer());
-        
-        if (!AGlobals.isAtlantisHeadless()) {
-            // set up the visual representation
-            dialog = new JFrame("List manager");
-            AIcon.setIconImage(dialog);
-            Box b = Box.createHorizontalBox();
-            b.add(new JScrollPane(this));
-            b.add(new ColorPanel());
-            dialog.getContentPane().add(b);
-            dialog.pack();
-            dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
-        }
-        
-    } // AListManager() -----------------------------------------------------
-    
-    
-    
-    public static AListManager getInstance()
-    {
-        return listManager;
-        
-    } // getInstance() ------------------------------------------------------
-    
-    
-    
-    public void showLists()
-    {
-    	Component gui = AGlobals.instance().getGuiFrame();
-        if (gui != null)
-        {
-            dialog.setLocation(gui.getLocation());
-        }
-        dialog.setVisible(true);
-        
-    } // showLists() --------------------------------------------------------
-    
-    
-    
-    private boolean isAlreadyInTheList(AList list,
-                                       DefaultMutableTreeNode destination)
-    {
-        boolean already = false;
-        for(int i = 0; i < destination.getChildCount(); i++)
-        {
-            DefaultMutableTreeNode child =
-            (DefaultMutableTreeNode) destination.getChildAt(i);
-            if(!child.getAllowsChildren())
-            {
-                AList a = (AList) child.getUserObject();
-                if(a.getSource() == list.getSource())
-                {
-                    int[] items = a.getItems();
-                    int newItem = list.getItems()[0];
-                    for(int j = 0; j < items.length; ++j)
-                    {
-                        if(items[j] == newItem)
-                        {
-                            already = true;
-                        }
-                    }
-                }
-            }
-        }
-        
-        return already;
-        
-    } // isAlreadyInTheList() -----------------------------------------------
-    
-    
-    
-    public void add(AList list)
-    {
-        if(!dialog.isVisible())
-        {
-            dialog.setVisible(true);
-        }
-        
-        // default destination
-        DefaultMutableTreeNode destination = root;
-        TreePath tp = getSelectionPath();
-        if(tp != null)
-        {
-            destination = (DefaultMutableTreeNode) tp.getLastPathComponent();
-        }
-        
-        if(destination != null && destination.getAllowsChildren())
-        {
-            if(destination == others || destination == lastDrawn ||
-               destination == highlight || destination == invisible ||
-               destination == mass)
-            {
-                AOutput.alwaysAppend("Can't add to " + destination, ALogInterface.WARNING);
-                return;
-            }
-            
-            // check if it's already in the list and if so, don't add
-            boolean already = this.isAlreadyInTheList(list, destination);
-            if(already)
-            {
-                logger.info(list + " is already in this list, not added");
-            }
-            else
-            {
-                dtm.insertNodeInto(new DefaultMutableTreeNode(list, false),
-                                   destination, destination.getChildCount());
-                expandPath(new TreePath(dtm.getPathToRoot(destination)));
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-        
-    } // add() -------------------------------------------------------------
-    
-    
-    
-    /**
-     * Adds the selected item to the mass list and outputs the invariant mass in the output window
-     * Doesn't make the list visible as really only need to see output window
-     * @param list
-     */
-    public void massCalc(AList list)
-    {
-        // default destination
-        DefaultMutableTreeNode destination = mass;
-        TreePath tp = getSelectionPath();
-        
-        if(destination != null && destination.getAllowsChildren())
-        {
-            // check if it's already in the list and if so, don't add
-            boolean already = this.isAlreadyInTheList(list, destination);
-            if(already)
-            {
-                logger.info(list + " is already in this list, not added");
-            }
-            else
-            {
-                dtm.insertNodeInto(new DefaultMutableTreeNode(list, false),
-                                   destination, destination.getChildCount());
-                expandPath(new TreePath(dtm.getPathToRoot(destination)));
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-        
-        if (tp != null)
-        {
-            setSelectionPath(tp);
-        }
-        
-        // added to list, now do summarise
-        Summarizer summ = new Summarizer();
-        AOutput.alwaysAppend(summ.getHeader(), ALogInterface.NORMAL);
-        
-        AList[] children = getChildren(mass);
-        
-        int chiLength = children.length;
-        
-        for(int i = 0; i < chiLength; i++)
-        {
-            int num = children[i].getItems().length;
-            A4Vector v = children[i].getSource().get4Vector(num,
-                                                            children[i].getItems(),0.14); //assume pion mass
-            
-            
-            if(v != null && num > 0)
-            {
-                String info = summ.addAndGetInfo(v, children[i].toString());
-                AOutput.alwaysAppend(info, ALogInterface.NORMAL);
-            }
-        }
-        
-        String msg = summ.getTotalInfo();
-        
-        AOutput.alwaysAppend(msg, ALogInterface.NORMAL_BOLD); // Print default summary (ie, assuming pi mass for all)
-        
-        summ = null;
-        
-    } // massCalc() -------------------------------------------------------------
-    
-    /**
-     * Adds the selected item to the mass list and outputs the invariant mass in the output window
-     * Doesn't make the list visible as really only need to see output window
-     * This is the massCalc function for V0 decays. Check for up to 2 tracks and display 4 mass scenarios
-     * @param list
-     */
-    public void massCalcV0(AList list)
-    {
-    	// default destination
-        DefaultMutableTreeNode destination = mass;
-        TreePath tp = getSelectionPath();
-        
-        if(getChildren(mass).length == 0) // if list is empty, make sure counters are reinitialised
-        {
-        	V0vx=0;
-        	V0tracks=0;
-        	V0charge=0;
-        }
-        
-        if(destination != null && destination.getAllowsChildren())
-        {
-            // check if it's already in the list and if so, don't add
-            boolean already = this.isAlreadyInTheList(list, destination);
-            
-            // check list for tracks and vertices (to a maximum of 2 tracks and 1 vertex)
-            if(getChildren(mass).length < 3)
-            {
-            	if(already)
-            	{
-            		logger.info(list + " is already in this list, not added");
-            	}
-            	else if(!(list.getSource() instanceof ARVxData || list.getSource() instanceof ATrackData))
-            	{
-            		logger.info("not selected a track or vertex");
-            		AOutput.alwaysAppend("\n\n Not selected a track or vertex\n\n",ALogInterface.PICK);
-            		return;
-            	}
-            	else if((list.getSource() instanceof ARVxData && V0vx>=1) || (list.getSource() instanceof ATrackData && V0tracks>=2))
-            	{
-            		logger.info("already a vertex or two tracks selected");
-            		AOutput.alwaysAppend("\n\n Already a vertex or two tracks selected\n",ALogInterface.PICK);
-            		return;
-            	}
-            	else
-            	{
-            		
-            		// check the charges of the two tracks are opposite
-            		//
-            		if((list.getSource() instanceof ATrackData))
-            		{
-            			ATrackData track = (ATrackData) list.getSource();
-            			AHelix h = track.getModifiableHelix(list.getItemsID()[0]);
-            			if((V0charge != 0) && (V0charge * AMath.getSign(h.pT()) > 0))
-            			{
-            				logger.info("2nd track is same charge as 1st track");
-            				AOutput.alwaysAppend("\n\nPlease pick an oppositely charged track\n", ALogInterface.PICK);
-            				return;
-            			}
-            		} //end check charge
-            		
-            		// now increment the counters
-            		// all tests passed, now can input into list.
-            		
-            		if(list.getSource() instanceof ATrackData)
-            		{
-            			V0tracks++;
-            			logger.info("Selected a Track");
-            		}
-            		else if(list.getSource() instanceof ARVxData)
-            		{
-            			V0vx++;
-            			logger.info("Selected a Vertex");
-            		}
-            		
-            		dtm.insertNodeInto(new DefaultMutableTreeNode(list, false),
-                                       destination, destination.getChildCount());
-            		expandPath(new TreePath(dtm.getPathToRoot(destination)));
-            		ACanvas.getCanvas().repaintAllFromScratch();
-            	}
-                
-            }
-            else
-            {
-            	logger.info("list full (max 2 tracks + 1 vertex)");
-        		AOutput.alwaysAppend("\n\n List full (max 2 tracks + 1 vertex)\n",ALogInterface.PICK);
-            	return;
-            }
-        }
-        if (tp != null)
-        {
-            setSelectionPath(tp);
-        }
-        
-        
-        // added to list, now do summarise
-        Summarizer summK = new Summarizer(); // K -> pi pi
-        Summarizer summL = new Summarizer(); // Lambda -> pi p
-        Summarizer summAL = new Summarizer(); // AntiLambda -> pi pbar
-        Summarizer summG = new Summarizer(); // gamma -> ee
-        
-        double[] secVx = new double[3]; // initialisation of secVx x,y,z array, if no vertex selected, use primary
-        double[] priVx = new double[3]; // primary vertex container (used to calculate decay length)
-        APar parameterStore = APar.instance();
-        priVx[0]=parameterStore.get("Event", "XVtx").getD();
-        priVx[1]=parameterStore.get("Event", "YVtx").getD();
-        priVx[2]=parameterStore.get("Event", "ZVtx").getD();
-        
-        secVx=priVx;
-        
-        AList[] children = getChildren(mass);
-        
-        
-        int chiLength = children.length;
-        
-    	if(chiLength == 3)
-        {
-            boolean V0title = true;
-            for(int i = 0; i < chiLength; i++)
-            {
-                AData source = children[i].getSource();
-                //ordering of the list is important.
-                //if vertex selected second, then the tracks selected before use primary vertex...
-                //need to get secVx first, THEN calculate tracks...
-                if(source instanceof ARVxData) 
-                {	
-                    ARVxData rvx = (ARVxData) source;
-                    secVx = rvx.getVertex(children[i].getItemsID()[0]); // gets x,y,z of the picked vertex.	
-                }
-            }
-            
-            for(int i = 0; i < chiLength; i++)
-            {
-                
-                AData source = children[i].getSource();
-                
-                if(source instanceof ATrackData)
-                {
-                    ATrackData track = (ATrackData) source;
-                    
-                    // get helix of picked track
-                    AHelix h = track.getModifiableHelix(children[i].getItemsID()[0]); 
-                    
-                    // get charge for charge check
-                    V0charge = (int) (Math.abs(h.pT())/h.pT());
-                    
-                    int num = children[i].getItems().length;
-                    
-                    // initialise 4 vectors
-                    A4Vector vK = source.get4Vector(num,
-                                                    children[i].getItems(),0.0);
-                    A4Vector vL = source.get4Vector(num,
-                                                    children[i].getItems(),0.0);
-                    A4Vector vAL = source.get4Vector(num,
-                                                     children[i].getItems(),0.0);
-                    A4Vector vG = source.get4Vector(num,
-                                                    children[i].getItems(),0.0);
-                    
-                    
-                    // now calculate the 4 vector
-                    if(V0vx > 0)
-                    {
-            			double R = parameterStore.get("Event", "Curvature").getD() * Math.abs(h.pT());
-                        
-            			// +1/-1 for a clockwise/anti-clockwise helix 
-            			double S = (int) (Math.abs(h.pT())/h.pT());
-                        
-            			// Coordinates of the center point for the helix
-            			double xC = (S * h.d0() - R) * Math.cos(Math.toRadians(h.phi0()) + S * Math.PI / 2.);
-            			double yC = (S * h.d0() - R) * Math.sin(Math.toRadians(h.phi0()) + S * Math.PI / 2.);
-            			
-            			// calculate new phi from centre of curvature and secondary vertex
-            			double phiPrime = Math.atan2(yC-secVx[1], xC-secVx[0]) + S*(Math.PI / 2.0);
-            			
-            			double px = Math.abs(h.pT()) * Math.cos(h.phi0());
-            			double py = Math.abs(h.pT()) * Math.sin(h.phi0());
-            			double pz = Math.abs(h.pT()) * Math.sinh(h.eta()); 
-            			
-            			// recalculate px/py at secondary vertex
-            			double pxPrime = Math.sqrt((px*px) + (py*py))*Math.cos(phiPrime);
-            			double pyPrime = Math.sqrt((px*px) + (py*py))*Math.sin(phiPrime);
-            			
-            			px = pxPrime;
-            			py = pyPrime;
-            			
-            			if(chiLength == 3 && !parameterStore.get("Minerva", "hideV0massoutput").getStatus())
-            			{
-                            logger.info("recalculating tracks");
-                            AOutput.alwaysAppend("\n\nRecalculated track values:\n", ALogInterface.PICK); 
-                            AOutput.alwaysAppend(source.getNameScreenName()+" index: " + (children[i].getItemsID()[0]) + "\n"
-                                                 +"PT="+String.format("%.3f",h.pT()) +" GeV\n"
-                                                 +AMath.ETA+" = "+String.format("%.3f",h.eta())+"\n"
-                                                 +AMath.PHI+" = "+String.format("%.3f",Math.toDegrees(phiPrime))+AMath.DEGREES+"\n"
-                                                 +"Px=" + String.format("%.3f",px) +" GeV\n"
-                                                 +"Py=" + String.format("%.3f",py) +" GeV\n"
-                                                 +"Pz=" + String.format("%.3f",pz) +" GeV\n"
-                                                 +"Charge = " + V0charge//Math.abs(V0charge)
-                                                 ,ALogInterface.PICK);
-            			}
-            			else if(chiLength == 3)
-            			{
-            				if(V0title)
-            				{
-            					V0title = false;
-                                
-            					double decayLength = Math.sqrt(Math.pow(secVx[0]-priVx[0], 2.0)+Math.pow(secVx[1]-priVx[1], 2.0)+Math.pow(secVx[2]-priVx[2], 2.0));
-            					
-            					AOutput.alwaysAppend("\n Decay length for selected vertex: "+String.format("%.2f",decayLength)+" cm\n\n", ALogInterface.PICK);
-            					
-            					
-            					AOutput.alwaysAppend("\n Momentum for selected tracks: \n\n", ALogInterface.PICK);
-            				}
-            				if(V0charge>0)
-            					AOutput.alwaysAppend("+ve track (px,py,pz): ("+String.format("%.3f",px)+", "+String.format("%.3f",py)+", "+String.format("%.3f",pz)+")\n", ALogInterface.PICK);
-            				else if(V0charge <0)
-            					AOutput.alwaysAppend("-ve track (px,py,pz): ("+String.format("%.3f",px)+", "+String.format("%.3f",py)+", "+String.format("%.3f",pz)+")\n", ALogInterface.PICK);
-            				
-            			}
-            			
-            			
-            			/* now check charges of particles again and add to corresponding 4vectors
-                         *
-                         *	scenarios:
-                         *
-                         *	(K) Kaon -> pi+ pi-
-                         *	(L) Lambda -> proton pi-
-                         *	(AL)AntiLambda -> antiproton pi+
-                         *	(G) Gamma -> e+ e-
-                         *
-                         *	
-                         *
-                         */
-            			
-            			// negative charge
-            			if(V0charge < 0)
-            			{
-            				vK.set(px, py, pz, 0.1396);
-            				vL.set(px, py, pz, 0.1396);
-            				vAL.set(px, py, pz, 0.938);
-            				vG.set(px, py, pz, 0.000511);
-            			}
-            			// positive charge
-            			else if(V0charge > 0)
-            			{
-            				vK.set(px, py, pz, 0.1396);
-            				vL.set(px, py, pz, 0.938);
-            				vAL.set(px, py, pz, 0.1396);
-            				vG.set(px, py, pz, 0.000511);
-            			}
-            			
-            			
-                        
-                        // this is to display each track summary. 
-                        // currently off as too much summary crowds the output
-                        if(vK != null && vL != null && vAL != null && vG != null && num > 0 && chiLength == 3)
-                        {
-                            String info = summK.addAndGetInfo(vK, children[i].toString());
-                            //AOutput.alwaysAppend(info, ALogPane.NORMAL);
-                            info = summL.addAndGetInfo(vL, children[i].toString());
-                            //AOutput.alwaysAppend(info, ALogPane.NORMAL);
-                            info = summAL.addAndGetInfo(vAL, children[i].toString());
-                            //AOutput.alwaysAppend(info, ALogPane.NORMAL);
-                            info = summG.addAndGetInfo(vG, children[i].toString());
-                            //AOutput.alwaysAppend(info, ALogPane.NORMAL);
-                        }
-                    }
-                    
-                }
-            }
-            
-            if(chiLength ==3 && !parameterStore.get("Minerva", "hideV0massoutput").getStatus())
-            {
-                // Config switch to display either mass or px,py,pz.
-                String msgK = summK.getTotalInfo();
-                String msgL = summL.getTotalInfo();
-                String msgAL = summAL.getTotalInfo();
-                String msgG = summG.getTotalInfo();
-                
-                AOutput.alwaysAppend("\n V0 Decay Scenarios", ALogInterface.NORMAL_BOLD);
-                
-                AOutput.alwaysAppend(summK.getHeader(), ALogInterface.NORMAL);
-                
-                // print out the resultant mass calculation for each scenario
-                AOutput.alwaysAppend("K"+AMath.RARROW+AMath.PION+AMath.SUPPLUS+AMath.PION+AMath.SUPMINUS+"\n", ALogInterface.NORMAL); 
-                AOutput.alwaysAppend(msgK, ALogInterface.NORMAL_BOLD); // Print kaon summary
-                AOutput.alwaysAppend("\n"+AMath.LAMBDACAP+AMath.RARROW+"p"+AMath.PION+AMath.SUPMINUS+"\n", ALogInterface.NORMAL); 
-                AOutput.alwaysAppend(msgL, ALogInterface.NORMAL_BOLD); // Print lambda summary
-                AOutput.alwaysAppend("\n"+AMath.LAMBDACAP+AMath.OVERLINE+AMath.RARROW+"p"+AMath.OVERLINE+AMath.PION+AMath.SUPPLUS+"\n", ALogInterface.NORMAL); 
-                AOutput.alwaysAppend(msgAL, ALogInterface.NORMAL_BOLD); // Print antilambda summary
-                AOutput.alwaysAppend("\n"+AMath.GAMMA+AMath.RARROW+"e"+AMath.SUPPLUS+"e"+AMath.SUPMINUS+"\n", ALogInterface.NORMAL); 
-                AOutput.alwaysAppend(msgG, ALogInterface.NORMAL_BOLD); // Print gamma summary
-                AOutput.alwaysAppend("\n", ALogInterface.NORMAL);
-            }
-        }
-        summK = null;
-        summL = null;
-        summAL = null;
-        summG = null;
-        
-    } // massCalcV0() -------------------------------------------------------------
-    
-    /**
-     * Takes two vectors from a list (added with the pick interaction and P key modifier)
-     * and prints the delta R and delta Phi of the vectors
-     * @param list
-     */
-    public void deltaR(AList list)
-    {
-    	// default destination
-        DefaultMutableTreeNode destination = mass;
-        TreePath tp = getSelectionPath();
-        
-        if(destination != null && destination.getAllowsChildren())
-        {
-            // check if it's already in the list and if so, don't add
-            boolean already = this.isAlreadyInTheList(list, destination);
-            
-            if(already)
-            {
-                logger.info(list + " is already in this list, not added");
-            }
-            else
-            {
-                if(getChildren(mass).length >= 2){
-                    logger.info(list + " is full, maximum of 2 objects for delta phi calculation " +
-                                "\n Clearing list");
-                    //AOutput.alwaysAppend("\n\n List full \n Clearing List \n",ALogPane.PICK);
-                    mass.removeAllChildren();
-                }
-                dtm.insertNodeInto(new DefaultMutableTreeNode(list, false),
-                                   destination, destination.getChildCount());
-                expandPath(new TreePath(dtm.getPathToRoot(destination)));
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-        
-        if (tp != null)
-        {
-            setSelectionPath(tp);
-        }
-        
-        AList[] children = getChildren(mass);
-        
-        int chiLength = children.length;
-        if(chiLength == 2){
-        	A4Vector v1 = children[0].getSource().get4Vector(children[0].getItems().length,
-                                                             children[0].getItems(),0.0);
-        	A4Vector v2 = children[1].getSource().get4Vector(children[1].getItems().length,
-                                                             children[1].getItems(),0.0);
-            
-            if(v1 != null && v2 != null)
-            {
-                double deltaPhi = Math.abs(v1.getPhi() - v2.getPhi()) > Math.PI ? (2*Math.PI) - Math.abs(v1.getPhi() - v2.getPhi()) : Math.abs(v1.getPhi() - v2.getPhi());
-                double deltaEta = Math.abs(v1.getEta() - v2.getEta());
-                double deltaR = Math.sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
-                
-                String info = "\n\n"+AMath.DELTA+AMath.PHI+" = "+String.format("%.1f",Math.toDegrees(deltaPhi))+AMath.DEGREES+" ("+String.format("%.3f",deltaPhi)+")"
-                + "\n"+AMath.DELTA+"R = "+String.format("%.3f",deltaR)+"\n";
-                AOutput.alwaysAppend(info, ALogInterface.NORMAL_BOLD);
-            }
-            
-        }
-    }
-    
-    public void highlight(AList list)
-    {
-        highlight.removeAllChildren();
-        dtm.insertNodeInto(new DefaultMutableTreeNode(list, false), highlight, 0);
-        dtm.reload(highlight);
-        expandPath(new TreePath(dtm.getPathToRoot(highlight)));
-        ACanvas.getCanvas().repaintAllFromScratch();
-        
-    } // highlight() --------------------------------------------------------
-    
-    
-    
-    public void addLastDrawn(AList list)
-    {
-        dtm.insertNodeInto(new DefaultMutableTreeNode(list, false), lastDrawn, 0);
-        dtm.reload(lastDrawn);
-        
-    } // addLastDrawn() -----------------------------------------------------
-    
-    
-    
-    public void addInvisible(AList list)
-    {
-        if(!dialog.isVisible())
-        {
-            dialog.setVisible(true);
-        }
-        
-        // check if it's already in the list and if so, don't add
-        boolean already = this.isAlreadyInTheList(list, invisible);
-        if(already)
-        {
-            logger.info(list + " is already in the Invisible list, not added");
-        }
-        else
-        {
-            dtm.insertNodeInto(new DefaultMutableTreeNode(list, false),
-                               invisible, invisible.getChildCount());
-            expandPath(new TreePath(dtm.getPathToRoot(invisible)));
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-        
-    } // addInvisible() -----------------------------------------------------
-    
-    
-    /**
-     * When adding items to the list using rubberband they are grouped by type
-     * and appear as "InDetTrack (5 items)". This method allows the user to expand
-     * these items so they can manipulate individual items.
-     * @param s Collection
-     * @return Action
-     */
-    private Action expand(final Collection s)
-    {
-        // This is called when the user right-clicks, we first determine if this 
-        // item can be expanded or not.
-        if (s.contains(root) || s.size() != 1)
-        {
-            return null;
-        }
-        
-        DefaultMutableTreeNode node = (DefaultMutableTreeNode) s.iterator().next();
-        if (node.getUserObject() instanceof AList)
-        {
-            AList a = (AList) node.getUserObject();
-            if (a.getItems().length < 1)
-            {
-                return null;
-            }
-        }
-        else
-        {
-            return null;
-        }
-        
-        // It can be expanded, so we add a menu item to the popup with the callback 
-        // function as specified below.
-        return new AbstractAction("Expand items")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                // We checked these casts before adding the callback
-                DefaultMutableTreeNode node = (DefaultMutableTreeNode) s.iterator().next();
-                AList a = (AList) node.getUserObject();
-                DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
-                int index = parent.getIndex(node);
-                
-                // Now go through the list and add the items one by one to the parent.
-                for (int i=0; i<a.getItems().length; i++)
-                {
-                    AList list = new AList(a.getSource(), a.getItems()[i]);
-                    dtm.insertNodeInto(new DefaultMutableTreeNode(list, false), parent, index);
-                }
-                
-                // And remove the old list.
-                dtm.removeNodeFromParent(node);
-            }
-        };
-        
-    } // expand() -----------------------------------------------------------
-    
-    
-    private Action remove(final Collection s)
-    {
-        if(s.contains(root))
-        {
-            return null;
-        }
-        
-        return new AbstractAction("Remove")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                for (Iterator i = s.iterator(); i.hasNext();)
-                {
-                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) i.next();
-                    if (node.getUserObject() instanceof AList)
-                    {
-                        AList a = (AList) node.getUserObject();
-                        a.getSource().remove(a.getItems());
-                    }
-                    dtm.removeNodeFromParent(node);
-                    ACanvas.getCanvas().repaintAllFromScratch();
-                }
-            }
-        };
-        
-    } // remove() -----------------------------------------------------------
-    
-    
-    
-    /**
-     * This method is called after right-click -> summarize on the list-item in
-     * the list dialog
-     * @param s Collection
-     * @return Action
-     */
-    private Action newSummarize(final Collection s)
-    {
-        if(s.contains(root) || s.size() != 1)
-        {
-            return null;
-        }
-        
-        return new AbstractAction("Summarize")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                Summarizer summ = new Summarizer();
-                AOutput.alwaysAppend(summ.getHeader(), ALogInterface.NORMAL);
-                
-                for(Iterator j = s.iterator(); j.hasNext();)
-                {
-                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) j.next();
-                    AList[] children = getChildren(node);
-                    
-                    for(int i = 0; i < children.length; i++)
-                    {
-                        int num = children[i].getItems().length;
-                        AList child = children[i];
-                        AData source = child.getSource();
-                        A4Vector v = source.get4Vector(num, child.getItems());
-                        
-                        if(v != null && num > 0)
-                        {
-                            String info = summ.addAndGetInfo(v, children[i].toString());
-                            AOutput.alwaysAppend(info, ALogInterface.NORMAL);
-                        }
-                    }
-                }
-                
-                String msg = summ.getTotalInfo();
-                AOutput.alwaysAppend(msg, ALogInterface.NORMAL_BOLD);
-                
-                summ = null;
-                
-            } // actionPerformed()
-        };
-        
-    } // newSummarize() -----------------------------------------------------
-    
-    
-    
-    /**
-     * This summarize method is called from rubberbanding menu - Summarize
-     * (from ASelection class)
-     */
-    public void summarize()
-    {
-        if(lastDrawn == null)
-        {
-            return;
-        }
-        
-        Summarizer summ = new Summarizer();
-        
-        AList[] children = getChildren(lastDrawn);
-        
-        AOutput.alwaysAppend(summ.getHeader(), ALogInterface.NORMAL);
-        
-        for(int i = 0; i < children.length; i++)
-        {
-            int num = children[i].getItems().length;
-            A4Vector v = children[i].getSource().get4Vector(num, children[i].getItems());
-            
-            if(v != null && num > 0)
-            {
-                String msg = summ.addAndGetInfo(v, children[i].toString());
-                AOutput.alwaysAppend(msg, ALogInterface.NORMAL);
-            }
-        }
-        
-        String msg = summ.getTotalInfo();
-        AOutput.alwaysAppend(msg, ALogInterface.NORMAL_BOLD);
-        
-        summ = null;
-        
-    } // summarize() --------------------------------------------------------
-    
-    
-    
-    private Action reset(final Collection s)
-    {
-        if(s.size() == 1 && s.contains(root))
-        {
-            return new AbstractAction("Reset")
-            {
-                public void actionPerformed(ActionEvent e)
-                {
-                    reset();
-                    ACanvas.getCanvas().repaintAllFromScratch();
-                }
-            };
-        }
-        else
-        {
-            return null;
-        }
-        
-    } // reset() ------------------------------------------------------------
-    
-    
-    
-    public void clearHighlight()
-    {
-        highlight.removeAllChildren();
-        dtm.reload(highlight);
-        ACanvas.getCanvas().repaintAllFromScratch();
-        
-    } // clearHighlight() ---------------------------------------------------
-    
-    
-    
-    public void clearHighlightAndMassCalculation()
-    {
-        highlight.removeAllChildren();
-        dtm.reload(highlight);
-        mass.removeAllChildren();
-        dtm.reload(mass);
-        ACanvas.getCanvas().repaintAllFromScratch();
-        
-    } // clearHighlightAndMassCalculation() ---------------------------------------------------
-    
-    
-    
-    public void clearLastDrawn()
-    {
-        lastDrawn.removeAllChildren();
-        dtm.reload(lastDrawn);
-        
-    } // clearLastDrawn() ---------------------------------------------------
-    
-    
-    
-    /**
-     * Check if list (list of IDs id) of datatimes (toMask datatype) is present
-     * in the current event and if so, the items are added into the Invisible
-     * list, thus masked and igrored.
-     *
-     * @param toMask AData
-     * @param id int[]
-     * @param index int[]
-     */
-    private boolean checkAndAddIntoInvisible(int[] id, int[] indexCheck, String key)
-    {
-        boolean result = false;
-        
-        // check if the datatype (key) exists in the new event
-        AEvent e = eventManager.getCurrentEvent();
-        AData toMask = e.get(key);
-        
-        if(toMask != null)
-        {
-            // iterate over all data items in this list
-            for(int i = 0; i < id.length; i++)
-            {
-                // check if this ID is present in the current event
-                int index = toMask.getIndexFromId(id[i]);
-                if(index != -1)
-                {
-                    // AList expects datatype and its index
-                    AList l = new AList(toMask, index);
-                    addInvisible(l);
-                    AOutput.alwaysAppend("  " + l.toString() + "\n", ALogInterface.NORMAL);
-                    result = true;
-                    
-                    // 2007-08-29: debugging check, remove after some time if the
-                    // problem is not observed (then indexCheck param is not needed)
-                    if(index != indexCheck[i])
-                    {
-                        logger.warn("AListManager: problem, indices not equal!");
-                    }
-                    // </debug>
-                }
-            }
-        }
-        
-        return result;
-        
-    } // checkAndAddIntoInvisible() -----------------------------------------
-    
-    
-    
-    /**
-     * restore Invisible list, cross-event invisible
-     * @param backup AList[]
-     */
-    private void restoreInvisible(AList[] backup)
-    {
-        if(backup.length > 0)
-        {
-            AOutput.alwaysAppend("\nPrevious Invisible list not empty, masked items:\n",
-                                 ALogInterface.WARNING);
-            
-            boolean somethingInvisible = false;
-            
-            for(int i = 0; i < backup.length; i++)
-            {
-                AData d = backup[i].getSource();
-                String sg = d.getStoreGateKey();
-                String accessKey = d.getName() + (sg != null ? sg : "");
-                
-                if(backup[i].getItems().length > 1)
-                {
-                    somethingInvisible = checkAndAddIntoInvisible(backup[i].getItemsID(),
-                                                                  backup[i].getItems(), accessKey);
-                }
-                else
-                {
-                    int id = backup[i].getItemsID()[0];
-                    int index = backup[i].getItems()[0];
-                    somethingInvisible = checkAndAddIntoInvisible(new int[] { id },
-                                                                  new int[] { index }, accessKey);
-                }
-                
-            } // for (overall items in the Invisible list)
-            
-            if(!somethingInvisible)
-            {
-                AOutput.alwaysAppend("  none\n", ALogInterface.NORMAL);
-            }
-            
-        } // if(backup.length > 0)
-        
-    } // restoreInvisible() -------------------------------------------------
-    
-    
-    
-    public void resetAndPreserveInvisible()
-    {
-        AList[] invisibleBackup = getChildren(invisible);
-        reset();
-        restoreInvisible(invisibleBackup);
-        
-    } // resetAndPreserveInvisible() ----------------------------------------
-    
-    
-    
-    public void reset()
-    {
-        root.removeAllChildren();
-        highlight.removeAllChildren();
-        lastDrawn.removeAllChildren();
-        invisible.removeAllChildren();
-        mass.removeAllChildren();
-        
-        root.add(highlight);
-        root.add(lastDrawn);
-        root.add(others);
-        root.add(invisible);
-        root.add(mass);
-        
-        numLists = 0;
-        root.add(new DefaultMutableTreeNode("List " + numLists++));
-        
-        nodeColors.clear();
-        nodeColors.put(highlight, new Integer(AColorMap.WH));
-        nodeColors.put(invisible, new Integer(AColorMap.INVISIBLE));
-        nodeColors.put(mass, new Integer(AColorMap.WH));
-        dtm.reload();
-        
-    } // reset() ------------------------------------------------------------
-    
-    
-    
-    private Action rename(Collection s)
-    {
-        if(s.size() != 1)
-        {
-            return null;
-        }
-        
-        final DefaultMutableTreeNode selected =
-        (DefaultMutableTreeNode) (s.iterator().next());
-        
-        if(!selected.getAllowsChildren() || selected == root ||
-           selected == others || selected == highlight ||
-           selected == lastDrawn || selected == invisible ||
-           selected == mass)
-        {
-            return null;
-        }
-        
-        return new AbstractAction("Rename")
-        {
-            public void actionPerformed(ActionEvent h)
-            {
-                String name = JOptionPane.showInputDialog(listManager,
-                                                          "Enter new name");
-                selected.setUserObject(name);
-            }
-        };
-        
-    } // rename() -----------------------------------------------------------
-    
-    
-    
-    private Action newParent(final Collection s)
-    {
-        if(s.contains(root))
-        {
-            return null;
-        }
-        
-        Set parents = new HashSet();
-        
-        for(Iterator i = s.iterator(); i.hasNext();)
-        {
-            parents.add(((TreeNode) (i.next())).getParent());
-        }
-        
-        if(parents.size() != 1)
-        {
-            return null;
-        }
-        
-        final DefaultMutableTreeNode oldParent =
-        (DefaultMutableTreeNode) (parents.iterator().next());
-        
-        return new AbstractAction("New Parent")
-        {
-            public void actionPerformed(ActionEvent e)
-            {
-                DefaultMutableTreeNode newParent =
-                new DefaultMutableTreeNode("List " + numLists++);
-                int index = 0;
-                for(Iterator i = s.iterator(); i.hasNext();)
-                {
-                    index = Math.min(oldParent.getIndex((TreeNode) (i.next())),
-                                     index);
-                }
-                
-                for(Iterator i = s.iterator(); i.hasNext();)
-                {
-                    dtm.removeNodeFromParent((MutableTreeNode) (i.next()));
-                }
-                
-                dtm.insertNodeInto(newParent, oldParent, index);
-                
-                for(Iterator i = s.iterator(); i.hasNext();)
-                {
-                    dtm.insertNodeInto((MutableTreeNode) (i.next()), newParent, 0);
-                }
-                
-                expandPath(new TreePath(dtm.getPathToRoot(newParent)));
-            }
-        };
-        
-    } // newParent() --------------------------------------------------------
-    
-    
-    
-    private Action newChild(final Collection s)
-    {
-        if(s.size() != 1)
-        {
-            return null;
-        }
-        
-        final DefaultMutableTreeNode selected =
-        (DefaultMutableTreeNode) (s.iterator().next());
-        
-        if(!selected.getAllowsChildren())
-        {
-            return null;
-        }
-        
-        return new AbstractAction("New Child")
-        {
-            public void actionPerformed(ActionEvent h)
-            {
-                dtm.insertNodeInto(new DefaultMutableTreeNode("List " + numLists++),
-                                   selected, 0);
-                expandPath(new TreePath(dtm.getPathToRoot(selected)));
-            }
-        };
-        
-    } // newChild() ---------------------------------------------------------
-    
-    
-    
-    private DefaultMutableTreeNode getNode(Point m)
-    {
-        TreePath p = getPathForLocation(m.x, m.y);
-        if(p != null)
-        {
-            TreeNode tn = (TreeNode) p.getLastPathComponent();
-            if(tn instanceof DefaultMutableTreeNode)
-            {
-                return (DefaultMutableTreeNode) tn;
-            }
-        }
-        return null;
-        
-    } // getNode() ----------------------------------------------------------
-    
-    
-    
-    private static class HashMapSet extends HashMap
-    {
-        public Object put(Object key, Object value)
-        {
-            // don't allow duplicates
-            if(containsKey(key))
-            {
-                this.remove(key);
-            }
-            
-            if(value != null)
-            {
-                return super.put(key, value);
-            }
-            
-            else
-            {
-                return null;
-            }
-        }
-    }
-    
-    
-    
-    class ColorRenderer extends DefaultTreeCellRenderer
-    {
-        AColorIcon folderIcon;
-        AColorIcon leafIcon;
-        
-        public ColorRenderer()
-        {
-            folderIcon = new AColorIcon(AColorMap.WH, 15, 11);
-            leafIcon = new AColorIcon(AColorMap.WH, 11, 11);
-        }
-        
-        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
-        {
-            
-            super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
-            
-            int c = getColor((TreeNode) value);
-            if (c == AColorMap.NO_COLOR)
-                setToolTipText("No Color");
-            else if (c == AColorMap.INVISIBLE)
-                setToolTipText("Invisible");
-            else
-                setToolTipText("");
-            
-            if (leaf)
-            {
-                leafIcon.setColorIndex(c);
-                setIcon(leafIcon);
-            }
-            else
-            {
-                folderIcon.setColorIndex(c);
-                setIcon(folderIcon);
-            }
-            
-            return this;
-        }
-        
-    }
-    
-    private int getColor(TreeNode node)
-    {
-        TreeNode[] parents = dtm.getPathToRoot(node);
-        int color = AColorMap.NO_COLOR;
-        for (int i = 0; i < parents.length; ++i)
-        {
-            Object o = nodeColors.get(parents[i]);
-            if (o != null)
-                color = ((Integer) o).intValue();
-        }
-        return color;
-    }
-    
-    private DefaultMutableTreeNode[] getLeafs()
-    {
-        java.util.List list = new ArrayList();
-        for (int i = 0; i < root.getChildCount(); ++i)
-        {
-            DefaultMutableTreeNode node = (DefaultMutableTreeNode) root.getChildAt(i);
-            if (node != lastDrawn)
-            {
-                if (node.getAllowsChildren())
-                {
-                    Enumeration descendents = node.breadthFirstEnumeration();
-                    while (descendents.hasMoreElements())
-                    {
-                        DefaultMutableTreeNode descendent = (DefaultMutableTreeNode) (descendents.nextElement());
-                        if (!descendent.getAllowsChildren())
-                            list.add(descendent);
-                    }
-                }
-                else
-                {
-                    list.add(node);
-                }
-            }
-        }
-        return (DefaultMutableTreeNode[]) list.toArray(new DefaultMutableTreeNode[list.size()]);
-    }
-    
-    public int[][] getColorMapping(AData data)
-    {
-        DefaultMutableTreeNode[] leafs = getLeafs();
-        int num = 0;
-        for (int i = 0; i < leafs.length; ++i)
-            if (((AList) (leafs[i].getUserObject())).getSource() == data)
-                num += ((AList) (leafs[i].getUserObject())).getItems().length;
-        
-        int[] index = new int[num];
-        int[] color = new int[num];
-        num = 0;
-        for (int i = 0; i < leafs.length; ++i)
-        {
-            if (((AList) (leafs[i].getUserObject())).getSource() == data)
-            {
-                int[] items = ((AList) (leafs[i].getUserObject())).getItems();
-                int c = getColor(leafs[i]);
-                for (int j = 0; j < items.length; ++j)
-                {
-                    index[num] = items[j];
-                    color[num] = c;
-                    num++;
-                }
-            }
-        }
-        int[][] temp = new int[2][];
-        temp[0] = index;
-        temp[1] = color;
-        return temp;
-    }
-    
-    public int getColorOfOthers()
-    {
-        return getColor(others);
-    }
-    
-    public boolean[] getSelection(AData data)
-    {
-        boolean[] selected = new boolean[data.getNumData()];
-        
-        TreePath[] paths = getSelectionPaths();
-        if (paths != null)
-        {
-            for (int i = 0; i < paths.length; ++i)
-            {
-                Enumeration nodes = ((DefaultMutableTreeNode) (paths[i].getLastPathComponent())).breadthFirstEnumeration();
-                while (nodes.hasMoreElements())
-                {
-                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) (nodes.nextElement());
-                    if (!node.getAllowsChildren())
-                    {
-                        AList a = (AList) (node.getUserObject());
-                        if (a.getSource() == data)
-                        {
-                            int[] items = a.getItems();
-                            for (int j = 0; j < items.length; ++j)
-                                selected[items[j]] = true;
-                        }
-                    }
-                }
-            }
-        }
-        return selected;
-    }
-    
-    public AList[] getChildren(DefaultMutableTreeNode node)
-    {
-        java.util.List children = new ArrayList();
-        
-        Object o = node.getUserObject();
-        if (o instanceof AList)
-        {
-            children.add(o);
-        }
-        else
-        {
-            // process the child nodes recursively
-            for (int i = 0; i < node.getChildCount(); ++i)
-            {
-                AList[] grandChildren = getChildren((DefaultMutableTreeNode) node.getChildAt(i));
-                for (int j = 0; j < grandChildren.length; ++j)
-                {
-                    children.add(grandChildren[j]);
-                }
-            }
-        }
-        return (AList[]) (children.toArray(new AList[children.size()]));
-    }
-    
-    public static Collection uniqueExpansion(Collection s)
-    {
-        Collection c = new HashSet();
-        for (Iterator i = s.iterator(); i.hasNext();)
-        {
-            Enumeration en = ((DefaultMutableTreeNode) (i.next())).depthFirstEnumeration();
-            while (en.hasMoreElements())
-            {
-                c.add(en.nextElement());
-            }
-        }
-        return c;
-    }
-    
-    class ColorPanel extends JPanel
-    {
-        ColorPanel()
-        {
-            Color[] colorMap = AColorMap.getColors();
-            ActionListener a = new ActionListener()
-            {
-                public void actionPerformed(ActionEvent e)
-                {
-                    int colorIndex = ((AColorIcon) (((JButton) (e.getSource())).getIcon())).getColorIndex();
-                    TreePath[] sel = getSelectionPaths();
-                    if (sel != null)
-                    {
-                        for (int i = 0; i < sel.length; ++i)
-                            nodeColors.put(sel[i].getLastPathComponent(), new Integer(colorIndex));
-                    }
-                    listManager.repaint();
-                    ACanvas.getCanvas().repaintAllFromScratch();
-                }
-            };
-            Box b = Box.createVerticalBox();
-            for (int i = 0; i < colorMap.length; i++)
-            {
-                JButton l = new JButton(new AColorIcon(i, 13, 13));
-                l.setMargin(new Insets(0, 0, 0, 0));
-                l.setBorder(null);
-                b.add(l);
-                b.add(Box.createVerticalStrut(3));
-                l.addActionListener(a);
-            }
-            b.add(Box.createVerticalStrut(6));
-            JButton l = new JButton(new AColorIcon(AColorMap.NO_COLOR, 13, 13));
-            l.setMargin(new Insets(0, 0, 0, 0));
-            l.setBorder(null);
-            l.setToolTipText("No specified color");
-            b.add(l);
-            b.add(Box.createVerticalStrut(3));
-            l.addActionListener(a);
-            l = new JButton(new AColorIcon(AColorMap.INVISIBLE, 13, 13));
-            l.setMargin(new Insets(0, 0, 0, 0));
-            l.setBorder(null);
-            l.setToolTipText("Invisible");
-            b.add(l);
-            l.addActionListener(a);
-            super.add(b);
-        }
-    }
-    
-    
-    
-    public ArrayList getLastDrawn()
-    {
-        ArrayList result = new ArrayList();
-        
-        Enumeration myenum = lastDrawn.children();
-        while(myenum.hasMoreElements())
-        {
-            Object o = ((DefaultMutableTreeNode) (myenum.nextElement())).getUserObject();
-            if(o instanceof AList)
-            {
-                if(((AList) o).getItems().length > 0)
-                {
-                    result.add(o);
-                }
-            }
-        }
-        
-        return result;
-    }
-    
-    
-    
-    public void copyLastDrawn()
-    {
-        
-        DefaultMutableTreeNode copy = new DefaultMutableTreeNode("List " + numLists++);
-        Enumeration myenum = lastDrawn.children();
-        while (myenum.hasMoreElements())
-        {
-            Object o = ((DefaultMutableTreeNode) (myenum.nextElement())).getUserObject();
-            if (o instanceof AList)
-            {
-                if (((AList) o).getItems().length > 0)
-                    copy.add(new DefaultMutableTreeNode(o, false));
-            }
-        }
-        dtm.insertNodeInto(copy, root, 0);
-        setSelectionPath(new TreePath(dtm.getPathToRoot(copy)));
-        // expandPath(getPathForLocation(e.getX(), e.getY()));
-    }
-    
-    public void mouseExited(MouseEvent e)
-    {
-        update(e);
-    } // DnD
-    
-    public void mouseClicked(MouseEvent e)
-    {}
-    
-    public void mouseEntered(MouseEvent e)
-    {
-        update(e);
-    } // DnD
-    
-    
-    public void mousePressed(MouseEvent e)
-    {
-        // source of DnD
-        source = getNode(e.getPoint());
-        // set picked object to selection if possible
-        TreePath tp = getPathForLocation(e.getPoint().x, e.getPoint().y);
-        if (tp != null)
-        {
-        	
-            DefaultMutableTreeNode node = (DefaultMutableTreeNode) (tp.getLastPathComponent());
-            if (!node.getAllowsChildren())
-            {
-                AList a = (AList) (node.getUserObject());
-                if (a.getItems().length == 1)
-                    APickingGraphics2D.setPicked(a.getSource(), a.getItems()[0]);
-            }
-        }
-        // special for right button
-        if (!AUtilities.isRightMouseButton(e))
-            return;
-        // make right button act on selection just as left button does
-        if (tp != null)
-        {
-            if (e.isControlDown())
-            {
-                addSelectionPath(tp);
-            }
-            else
-            {
-                setSelectionPath(tp);
-            }
-        }
-        // pop up menu on right click
-        TreePath[] sel = getSelectionPaths();
-        Collection selection = new ArrayList(sel.length);
-        for (int i = 0; i < sel.length; ++i)
-            selection.add(sel[i].getLastPathComponent());
-        
-        JPopupMenu popup = new JPopupMenu();
-        Action temp;
-        temp = expand(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = remove(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = reset(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = rename(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = newParent(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = newChild(selection);
-        if (temp != null)
-            popup.add(temp);
-        temp = newSummarize(selection);
-        if (temp != null)
-            popup.add(temp);
-        // gary just remove this for now
-        
-        AListProcessor[] listProcessors = eventManager.getCurrentEvent().getData();
-        
-        for (int i = 0; i < listProcessors.length; i++)
-        {
-            Action[] actions = listProcessors[i].getActions(selection);
-            for (int j = 0; j < actions.length; ++j)
-            {
-                popup.add(actions[j]);
-            }
-        }
-        
-        popup.show(e.getComponent(), e.getX(), e.getY());
-        
-    }
-    
-    public void mouseMoved(MouseEvent e)
-    {}
-    
-    public void mouseDragged(MouseEvent e)
-    {
-        // start of drag
-        if (!draging)
-        {
-            if (source != null && isDragSource(source))
-                draging = true;
-        }
-        update(e);
-    }
-    
-    public void mouseReleased(MouseEvent e)
-    {
-        // DnD event
-        if (draging && source != null)
-        {
-            DefaultMutableTreeNode destination = getNode(e.getPoint());
-            if (destination != null && source != destination && destination.getAllowsChildren() && isValidDrag(source, destination))
-            {
-                if (!e.isControlDown() && source != lastDrawn)
-                {
-                    dtm.removeNodeFromParent(source);
-                }
-                if (source == lastDrawn)
-                {
-                    DefaultMutableTreeNode copy = new DefaultMutableTreeNode("List " + numLists++);
-                    Enumeration myenum = source.children();
-                    while (myenum.hasMoreElements())
-                    {
-                        Object o = ((DefaultMutableTreeNode) (myenum.nextElement())).getUserObject();
-                        copy.add(new DefaultMutableTreeNode(o, false));
-                    }
-                    dtm.insertNodeInto(copy, destination, 0);
-                }
-                else
-                    dtm.insertNodeInto(source, destination, 0);
-                expandPath(getPathForLocation(e.getX(), e.getY()));
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-        draging = false;
-        source = null;
-        setCursor(ACursorFactory.getInstance().getDefaultCursor());
-    }
-    
-    private boolean isDragSource(DefaultMutableTreeNode source)
-    {
-        if (source == null || source == root || source == highlight || source == others || source==mass)
-            return false;
-        else
-            return true;
-    }
-    
-    private boolean isValidDrag(DefaultMutableTreeNode source, DefaultMutableTreeNode destination)
-    {
-        if (source == null || destination == null)
-            return false;
-        if (source == root || source == highlight || source == others || source == mass)
-            return false;
-        if (destination == others)
-            return false;
-        if (destination == lastDrawn)
-            return false;
-        if (destination == highlight)
-        {
-            if (source.getAllowsChildren())
-                return false;
-            if (((AList) (source.getUserObject())).getItems().length != 1)
-                return false;
-            if (highlight.getChildCount() != 0)
-                return false;
-        }
-        return true;
-    }
-    
-    private void update(MouseEvent e)
-    {
-        if (!draging)
-            return;
-        Point point = e.getPoint();
-        DefaultMutableTreeNode current = getNode(point);
-        if (current != null && current.getAllowsChildren() && isValidDrag(source, current))
-        {
-            TreePath p = getPathForLocation(point.x, point.y);
-            setSelectionPath(p);
-            if (e.isControlDown())
-            {
-                setCursor(DROP_VALID_COPY);
-            }
-            else
-            {
-                setCursor(ACursorFactory.getInstance().getDragValidCursor());
-            }
-        }
-        else
-        {
-            setCursor(ACursorFactory.getInstance().getDragInvalidCursor());
-        }
-    }
-    
-}
-
-
-class Summarizer
-{
-    private A4Vector vector = null;
-    private double etSum = 0;
-    
-    
-    public Summarizer()
-    {
-        vector = new A4Vector();
-        
-    }
-    
-    
-    public String getHeader()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append("\nSummary output:\n");
-        sb.append("                  "); // 18 spaces
-        sb.append("    PT  ");
-        sb.append("    ET  ");
-        sb.append("    E   ");
-        sb.append("    M   ");
-        sb.append("    MT  ");
-        sb.append("\n");
-        
-        return sb.toString();
-        
-    }
-    
-    
-    public String addAndGetInfo(A4Vector item, String description)
-    {
-        vector.add(item);
-        etSum += item.getEt();
-        StringBuffer sb = new StringBuffer();
-        sb.append(description);
-        sb.append("\n");
-        sb.append("                  "); // 18 spaces
-        sb.append(String.format("%7.1f",item.getPt()));
-        sb.append(String.format("%8.1f",item.getEt()));
-        sb.append(String.format("%7.1f",item.getE()));
-        sb.append(String.format("%8.3f",item.getMass()));
-        sb.append(String.format("%8.1f",item.getMt()));
-        sb.append("\n");
-        
-        return sb.toString();
-    }
-    
-    public double getTotalEt()
-    {
-    	return etSum;
-    }
-    
-    public double getTotalPt()
-    {
-    	return vector.getPt();
-    }
-    
-    public double getTotalMt()
-    {
-    	double et = getTotalEt();
-    	double pt = getTotalPt();
-    	return Math.sqrt(et*et - pt*pt);
-    }
-    
-    public String getTotalInfo()
-    {
-    	StringBuffer sb = new StringBuffer();
-        sb.append(String.format("%-18s", "Total"));
-        sb.append(String.format("%7.1f",getTotalPt()));
-        sb.append(String.format("%8.1f",getTotalEt()));
-        sb.append(String.format("%7.1f",vector.getE()));
-        sb.append(String.format("%8.3f",vector.getMass()));
-        sb.append(String.format("%8.1f",getTotalMt()));
-        sb.append("\n");
-        
-        return sb.toString();
-        
-    }
-    
-}
-
diff --git a/graphics/AtlantisJava/src/atlantis/list/AListProcessor.java b/graphics/AtlantisJava/src/atlantis/list/AListProcessor.java
deleted file mode 100755
index 6c58995a4a5b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/list/AListProcessor.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package atlantis.list;
-
-
-import javax.swing.Action;
-import java.util.Collection;
-
-
-public interface AListProcessor {
-  Action[] getActions(Collection nodes);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/list/package.html b/graphics/AtlantisJava/src/atlantis/list/package.html
deleted file mode 100644
index ca84b937bc77..000000000000
--- a/graphics/AtlantisJava/src/atlantis/list/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Implementation of lists which are used to store event datatypes.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimInterpolate.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimInterpolate.java
deleted file mode 100644
index 90e0284bc683..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimInterpolate.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANAnimInterpolate extends ANAnimSegment {
-
-    private ANAnimVar m_var;
-    private double m_t1;
-    private double m_t2;
-    private double m_v1;
-    private double m_v2;
-    private int m_interp;
-    
-    public ANAnimInterpolate(ANAnimVar var, double t1, double t2,
-            double v1, double v2, int interp) {
-        m_var = var;
-        m_t1 = t1;
-        m_t2 = t2;
-        m_v1 = v1;
-        m_v2 = v2;
-        m_interp = interp;
-    }
-    
-    public void evaluate(double now) {
-        if (now < m_t1) { return; }
-        switch(m_interp) {
-            case (ANAnimationManager.INTERP_LINEAR):
-                //System.out.println("now: " + now + " m_t1: " + m_t1 + " m_t2: " + m_t2);
-                double t = (now - m_t1) / (m_t2 - m_t1);
-                //System.out.println("t: " + t);
-                m_var.setValue((t * (m_v2 - m_v1)) + m_v1);
-                break;
-        }
-    }
-
-    @Override
-    public double getStart() {
-        return m_t1;
-    }
-
-    @Override
-    public double getEnd() {
-        return m_t2;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimSegment.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimSegment.java
deleted file mode 100644
index 6678cade19f6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimSegment.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public abstract class ANAnimSegment {
-
-    public abstract double getStart();
-    public abstract double getEnd();
-    
-    public abstract void evaluate(double now);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimSetProjection.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimSetProjection.java
deleted file mode 100644
index 6ca352555ac0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimSetProjection.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANAnimSetProjection extends ANAnimSegment {
-    private ANFrameManager m_fm;
-    private ANProjection m_p;
-    private double m_when;
-
-    public ANAnimSetProjection(ANFrameManager fm, ANProjection p, double when) {
-        m_fm = fm;
-        m_p = p;
-        m_when = when;
-    }
-    
-    @Override
-    public void evaluate(double now) {
-        //System.out.println("Evaluate in SetProjection: " + now);
-        if (now > m_when) {
-            //System.out.println("CHANGE!");
-            m_fm.setCurrentProjection(m_p);
-        }
-    }
-
-    @Override
-    public double getStart() {
-        return m_when;
-    }
-
-    @Override
-    public double getEnd() {
-        return m_when;
-    }
-    
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimThread.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimThread.java
deleted file mode 100644
index 97185bb17cde..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimThread.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package atlantis.nge;
-
-import atlantis.canvas.AWindow;
-import atlantis.utils.ALogger;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANAnimThread implements Runnable {
-
-    private static ALogger logger = ALogger.getLogger(ANAnimThread.class);
-    private ANAnimationManager m_am;
-    private Object m_wait = new Object();
-    private AWindow m_w;
-
-    public ANAnimThread(ANAnimationManager am, AWindow w) {
-        m_am = am;
-        m_w = w;
-    }
-
-    public void reschedule() {
-        //System.out.println("Rescheduling");
-        synchronized (m_wait) {
-            m_wait.notifyAll();
-        }
-        //System.out.println("Rescheduled");
-    }
-
-    public void run() {
-        while (true) {
-            double wait = m_am.timeToWait();
-
-            //System.out.println("Told to wait: " + wait);
-
-            double mintime = 1.0 / 100.0;
-
-            if (wait == -1.0) {
-                // wait forever
-                synchronized (m_wait) {
-                    try {
-                        m_wait.wait();
-                    } catch (InterruptedException ex) {
-                        logger.error("Interrupted in sleep", ex);
-                    }
-                }
-            } else if (wait > mintime) {
-                // wait until we're supposed to do something
-                synchronized (m_wait) {
-                    try {
-                        m_wait.wait((long) (wait * 1000));
-                    } catch (InterruptedException ex) {
-                        logger.error("Interrupted in sleep", ex);
-                    }
-                }
-            } else {
-                // do something now
-                //System.out.println("Forcing Repaint!");
-                m_w.invalidateQuietly();
-                //m_w.getView().paintImmediately(0, 0, m_w.getWidth(), m_w.getHeight());
-                m_w.repaint();
-            }
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimVar.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimVar.java
deleted file mode 100644
index 2dd5c9c9b382..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimVar.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package atlantis.nge;
-
-/**
- * A variable which is animatable, pretty much a wrapper around a double...
- * 
- * @author Adam Davison
- */
-public class ANAnimVar {
-    
-    private double m_val;
-    
-    public ANAnimVar(double val) {
-        m_val = val;
-    }
-    
-    public ANAnimVar() {
-        m_val = 0.0;
-    }
-    
-    public double getValue() {
-        return m_val;
-    }
-    
-    public void setValue(double val) {
-        m_val = val;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANAnimationManager.java b/graphics/AtlantisJava/src/atlantis/nge/ANAnimationManager.java
deleted file mode 100644
index a4d7e3fe0c88..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANAnimationManager.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package atlantis.nge;
-
-import atlantis.canvas.AWindow;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANAnimationManager {
-
-    public static final int INTERP_LINEAR = 1;
-    private ArrayList<ANAnimSegment> m_segs;
-    private double m_now;
-    
-    private ANAnimThread m_at;
-
-    public ANAnimationManager(AWindow w) {
-        m_segs = new ArrayList<ANAnimSegment>();
-        updateNow();
-        m_at = new ANAnimThread(this, w);
-        new Thread(m_at).start();
-    }
-
-    public void updateNow() {
-        m_now = ((double) System.currentTimeMillis()) / 1000.0;
-    }
-
-    public void scheduleAnimationAbsolute(ANAnimVar v, double t1, double t2, double v1, double v2) {
-        m_segs.add(new ANAnimInterpolate(v, t1, t2, v1, v2, INTERP_LINEAR));
-        m_at.reschedule();
-    }
-
-    public void scheduleAnimation(ANAnimVar v, double t1, double t2, double v1, double v2) {
-        updateNow();
-        scheduleAnimationAbsolute(v, t1 + m_now, t2 + m_now, v1, v2);
-    }
-
-    public void scheduleProjectionChange(ANFrameManager fm, ANProjection p, double t) {
-        updateNow();
-        m_segs.add(new ANAnimSetProjection(fm, p, t + m_now));
-        m_at.reschedule();
-    }
-
-    public void animate() {
-        updateNow();
-
-        //System.out.println("Animating at: " + m_now);
-
-        Iterator<ANAnimSegment> it = m_segs.listIterator();
-        while (it.hasNext()) {
-            ANAnimSegment seg = it.next();
-            //System.out.println("Seg: " + seg + " start: " + seg.getStart() + " end: " + seg.getEnd());
-            if (seg.getStart() < m_now) {
-                seg.evaluate(m_now);
-            }
-            if (seg.getEnd() < m_now) {
-                it.remove();
-            }
-        }
-    }
-
-    public double timeToWait() {
-        double next = -1.0;
-        updateNow();
-
-        //System.out.println("Wait testing at: " + m_now);
-
-        Iterator<ANAnimSegment> it = m_segs.listIterator();
-        while (it.hasNext()) {
-            ANAnimSegment seg = it.next();
-            //System.out.println("Seg: " + seg + " start: " + seg.getStart() + " end: " + seg.getEnd());
-            if (seg.getStart() <= next && seg.getEnd() >= next) {
-                //System.out.println("In segment, returning 0.0");
-                return 0.0;
-            } else if (seg.getStart() >= next) {
-                double wait = seg.getStart() - m_now;
-                if (wait < next || next == -1.0) {
-                    if (wait < 0.0) {
-                        wait = 0.0;
-                    }
-                    next = wait;
-                }
-            }
-        }
-
-        return next;
-    }
-}
-
-
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANCacheToken.java b/graphics/AtlantisJava/src/atlantis/nge/ANCacheToken.java
deleted file mode 100644
index 3ec2fe065ac5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANCacheToken.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANCacheToken<T> {
-
-    
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANColor.java b/graphics/AtlantisJava/src/atlantis/nge/ANColor.java
deleted file mode 100644
index 87c01543c86a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANColor.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package atlantis.nge;
-
-import atlantis.graphics.colormap.AColorMap;
-
-import java.awt.Color;
-
-/**
- * A floating point colour class that enforces very little
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANColor {
-
-    public float r;
-    public float g;
-    public float b;
-    public float a;
-
-    public ANColor(Color c) {
-        r = ((float) c.getRed()) / 255.0f;
-        g = ((float) c.getGreen()) / 255.0f;
-        b = ((float) c.getBlue()) / 255.0f;
-        a = ((float) c.getAlpha()) / 255.0f;
-    }
-
-    public ANColor(float _r, float _g, float _b, float _a) {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-
-    public ANColor(float _r, float _g, float _b) {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = 1.0f;
-    }
-
-    public static ANColor getBGColor() {
-        return getMapColor(AColorMap.BG);
-    }
-
-    public static ANColor getMapColor(int index) {
-        Color bg = AColorMap.getColors()[index];
-
-        float r = ((float) bg.getRed()) / 255.0f;
-        float g = ((float) bg.getGreen()) / 255.0f;
-        float b = ((float) bg.getBlue()) / 255.0f;
-
-        return new ANColor(r, g, b);
-    }
-
-    public static ANColor getMapColor(int index, float trans) {
-        Color bg = AColorMap.getColors()[index];
-
-        float r = ((float) bg.getRed()) / 255.0f;
-        float g = ((float) bg.getGreen()) / 255.0f;
-        float b = ((float) bg.getBlue()) / 255.0f;
-
-        return new ANColor(r, g, b, trans);
-    }
-    
-    public void mult(float c) {
-        r *= c;
-        g *= c;
-        b *= c;
-        if (r < 0.0f) { r = 0.0f; }
-        if (r > 1.0f) { r = 1.0f; }
-        if (g < 0.0f) { g = 0.0f; }
-        if (g > 1.0f) { g = 1.0f; }
-        if (b < 0.0f) { b = 0.0f; }
-        if (b > 1.0f) { b = 1.0f; }
-    }
-    
-    public void lighten(float c) {
-        r = 1.0f - ((1.0f - r)*c);
-        g = 1.0f - ((1.0f - g)*c);
-        b = 1.0f - ((1.0f - b)*c);
-        if (r < 0.0f) { r = 0.0f; }
-        if (r > 1.0f) { r = 1.0f; }
-        if (g < 0.0f) { g = 0.0f; }
-        if (g > 1.0f) { g = 1.0f; }
-        if (b < 0.0f) { b = 0.0f; }
-        if (b > 1.0f) { b = 1.0f; }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANFrameManager.java b/graphics/AtlantisJava/src/atlantis/nge/ANFrameManager.java
deleted file mode 100644
index adb6cb778c01..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANFrameManager.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package atlantis.nge;
-
-import atlantis.canvas.AWindow;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.IntBuffer;
-import javax.media.opengl.DebugGL;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.glu.GLU;
-
-/**
- * Decides which projection should be onscreen and in what state.
- * Handles animation, performance and probably all sorts of other things.
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANFrameManager {
-    
-    // Targ is what we're aiming to display but proj is what we're really
-    // displaying, could be the same but could also be some transition into
-    // targ
-    
-    private ANProjection m_targ;
-    private ANProjection m_proj;
-    
-    private ANAnimationManager m_am;
-    
-    public ANFrameManager(AWindow w) {
-        // Default, if not told anything else construct 3d projection
-        m_proj = null;
-        m_am = new ANAnimationManager(w);
-        
-    }
-
-    public ANPickResult pick(GLAutoDrawable drawable, int w, int h, int x, int y) {
-        
-        if (m_proj == null) { return null; }
-        
-        long before = System.nanoTime();
-        
-        GL gl = drawable.getGL();
-        gl.glViewport(0, 0, w, h);
-        
-        GLU glu = new GLU();
-        int maxsize = 100000;
-        
-        ByteBuffer bb = ByteBuffer.allocateDirect(4*maxsize);
-        bb.order(ByteOrder.nativeOrder());
-        // FIXME: Reuse this object for performance
-        IntBuffer ib = bb.asIntBuffer();
-        gl.glSelectBuffer(maxsize, ib);
-        gl.glRenderMode(GL.GL_SELECT);
-        gl.glMatrixMode(GL.GL_PROJECTION);
-        int[] viewport = new int[4];
-        gl.glLoadIdentity();
-        gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
-        y = h - y;
-        glu.gluPickMatrix(x - 1, y - 1, 3, 3, viewport, 0);
-        
-        ANRenderHints rh = new ANRenderHints();
-        rh.setPick(true);
-        rh.setPickHelper(new ANPickHelper(gl));
-        
-        //gl.glPushName(0);
-        m_proj.display(drawable, w, h, rh);
-        //gl.glPopName();
-        
-        int hits = gl.glRenderMode(GL.GL_RENDER);
-    
-        System.out.println("HITS: " + hits);
-        ANSelectionList sl = new ANSelectionList(ib);
-        //System.out.println("FRONT: " + sl.getFrontID());
-        int[] front = sl.getFrontID();
-        
-        ANPickResult ret = null;
-        
-        if (front != null) {
-            int id = front[0];
-            System.out.println(id);
-            int data = front[1];
-            System.out.println(data);
-            ANPickHandler ph = rh.getPickHelper().getPickHandler(id);
-            System.out.println(ph);
-            if (ph != null) {
-                ret = ph.getHitInfo(data);
-            }
-        }
-        
-        long after = System.nanoTime();
-        System.out.println("Pick took: " + (after - before) / 1000);
-        
-        System.out.println(ret);
-        return ret;
-    }
-    
-    public void display(GLAutoDrawable drawable, int w, int h) {
-        System.out.println("Asked to display!");
-        
-        if (m_proj == null) { return; }
-        
-        long before = System.nanoTime();
-
-        GL gl = new DebugGL(drawable.getGL());
-        gl.glViewport(0, 0, w, h);
-
-        m_am.animate();
-        
-        m_proj.display(drawable, w, h, new ANRenderHints());
-
-        long after = System.nanoTime();
-        System.out.println("Frame took: " + (after - before) / 1000);
-    }
-    
-    public double timeToWait() {
-        return m_am.timeToWait();
-    }
-
-    public ANProjection getTargetProjection() {
-        return m_targ;
-    }
-    
-    public ANProjection getCurrentProjection() {
-        return m_proj;
-    }
-
-    public void setCurrentProjection(ANProjection proj) {
-        m_proj = proj;
-    }
-
-    public void scheduleTransition(ANProjection p) {
-        //(new Exception()).printStackTrace();
-        
-        m_targ = p;
-        
-        if (m_proj == null || m_proj == p) { m_proj = p; return; }
-        
-        //System.out.println(m_proj);
-        //System.out.println(p);
-        
-        if (m_proj instanceof ANLinearProjection &&
-                p instanceof ANLinearProjection) {
-
-            //System.out.println("HERE!");
-            
-            ANLinearTransition trans = new ANLinearTransition(
-                    (ANLinearProjection) m_proj,
-                    (ANLinearProjection) p);
-
-            setCurrentProjection(trans);
-
-            double length = 1.0;
-
-            m_am.scheduleAnimation(trans.getTransformTimeVar(), 0.0, length, 0.0, 1.0);
-            m_am.scheduleAnimation(trans.getFadeTimeVar(), 0.0, length, 0.0, 1.0);
-            m_am.scheduleProjectionChange(this, p, length);
-
-        } else {
-            m_proj = p;
-        }
-    }
-
-    public void checkProjectionYX() {
-        //System.out.println("checkProjectionYX: m_proj: " + m_proj);
-        if (!(m_targ instanceof ANProjectionYX)) {
-            //System.out.println("RECREATING");
-            scheduleTransition(new ANProjectionYX());
-        }
-    }
-
-    public void checkProjection3D() {
-        if (!(m_targ instanceof ANProjection3D)) {
-            scheduleTransition(new ANProjection3D());
-        }
-    }
-
-    public ANProjectionPhysics checkProjectionPhysics() {
-        if (!(m_targ instanceof ANProjectionPhysics)) {
-            ANProjectionPhysics pp = new ANProjectionPhysics();
-            scheduleTransition(pp);
-            return pp;
-        } else {
-            return (ANProjectionPhysics)(m_targ);
-        }
-    }
-    
-    public ANAnimationManager getAnimationManager() {
-        return m_am;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANGlobalFlags.java b/graphics/AtlantisJava/src/atlantis/nge/ANGlobalFlags.java
deleted file mode 100644
index 5a96788eafa1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANGlobalFlags.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package atlantis.nge;
-
-/**
- * This class contains some static final boolean flags that can be used to
- * control behaviour such as debugging and sanity checking.
- * 
- * The java compiler guarantees that code enclosed in an if(var) where var
- * is a final and false boolean is entirely excluded from your class file
- * 
- * This is better than just using logger.debug() here because we don't want
- * to do the debug level testing inside the fast rendering path
- * 
- * @author Adam Davison
- */
-public class ANGlobalFlags {
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANLinearProjection.java b/graphics/AtlantisJava/src/atlantis/nge/ANLinearProjection.java
deleted file mode 100644
index c3cda8cb6275..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANLinearProjection.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package atlantis.nge;
-
-import atlantis.nge.object.data.ANObjectDataJet;
-import atlantis.nge.object.geometry.ANObjectGeomMuon;
-import atlantis.nge.object.geometry.ANObjectGeomCalo;
-import atlantis.nge.object.data.ANObjectDataCell;
-import atlantis.data.ACalorimeterData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.data.AJetData;
-import atlantis.data.ALArData;
-import atlantis.geometry.AAtlasDetector;
-import atlantis.geometry.ABarrelCalorimeterDetector;
-import atlantis.geometry.ABoxDetector;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.geometry.ADetector;
-import atlantis.geometry.ADetectors;
-import atlantis.geometry.AEndcapCalorimeterDetector;
-import atlantis.geometry.AEndcapCryostatDetector;
-import atlantis.utils.AMath;
-
-import java.util.ArrayList;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-
-/**
- * This class represents projections which are a linear transformation on
- * 3d space. These are easy to handle for a variety of reasons
- *
- * @author Adam Davison, Mark Stockton
- */
-public abstract class ANLinearProjection extends ANProjection {
-
-    // DEPRECATED
-    public ANObjectGeomMuon m_ogm;//muon
-    public ANObjectGeomCalo m_ogc;//calo barrel
-    public ANObjectGeomCalo m_ogetp;//extended tile +z
-    public ANObjectGeomCalo m_ogtsp;//mbts +z
-    public ANObjectGeomCalo m_ogecp;//endcap +z
-    public ANObjectGeomCalo m_ogetm;//extended tile -z
-    public ANObjectGeomCalo m_ogtsm;//mbts -z
-    public ANObjectGeomCalo m_ogecm;//endcap -z
-    
-    public ANObjectDataJet m_jet;//jets
-    public ANObjectDataCell m_lar;//lar cells
-    
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    /**
-     * The contract of applyLinearTransform is that you can assume
-     * the matrix stack is in an identity state and you should always apply
-     * the transformation in a relative manner, ie glTransform, glRotate
-     * nothing like glLoadMatrix or glLoadIdentity
-     * 
-     * @param drawable
-     */
-    public abstract void applyLinearTransform(GLAutoDrawable drawable, int w, int h);
-
-    public abstract void drawScene(GLAutoDrawable drawable, ANRenderHints hint);
-
-    // TODO: A lot of this function should probably be broken up into more
-    // subclasses to allow this functionality to be selected more
-    // granularly
-    @Override
-    public final void display(GLAutoDrawable drawable, int w, int h, ANRenderHints hint) {
-        GL gl = drawable.getGL();
-        gl.glMatrixMode(GL.GL_MODELVIEW);
-        gl.glLoadIdentity();
-        
-        gl.glMatrixMode(GL.GL_PROJECTION);
-        
-        // This is a bit of a hack maybe...
-        if (!hint.getPick()) {
-            gl.glLoadIdentity();
-        }
-        
-        gl.glEnable(gl.GL_BLEND);
-        gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA);
-        gl.glEnable(GL.GL_DEPTH_TEST);
-
-        gl.glPolygonOffset(2.0f, 1.0f);
-        gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
-
-        applyLinearTransform(drawable, w, h);
-
-        ANColor bg = ANColor.getBGColor();
-
-        gl.glClearColor(bg.r, bg.g, bg.b, 1.0f);
-        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
-
-        drawScene(drawable, hint);
-    }    // Some function that calls applyLinearTransform and extracts the matrix
-    // is needed for the transitions but that can come later...
-    
-    
-    // DEPRECATED - to be replaced shortly by ANObjectGenerator
-    public final void createGeometry(){
-        ArrayList<ABoxDetector> m_boxes = new ArrayList<ABoxDetector>();
-        ArrayList<ACalorimeterDetector> m_calo = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_extt = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_mbts = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_endc = new ArrayList<ACalorimeterDetector>();
-        
-        ADetectors[] ds = AAtlasDetector.getDetector().getDetectors();
-        for (int i = 0; i < ds.length; i++) {
-            ADetector[] d = ds[i].getDetectors();
-            for (int j = 0; j < d.length; j++) {
-                if (d[j] instanceof ABoxDetector) {
-                    ABoxDetector bd = (ABoxDetector) d[j];
-                    //TODO temporary code to show cut away detector
-                    //if((bd.getPhi()>1.2 && bd.getPhi()<5.1) || !ACanvas.getCanvas().getPaintingWindow().getProjection().getName().equals("N3D"))
-                    m_boxes.add(bd);
-                }else if (d[j] instanceof ABarrelCalorimeterDetector) {
-                    ACalorimeterDetector cd = (ACalorimeterDetector) d[j];
-                    //extended tile only has one end in geom file and not relicated like others
-                    if(d[j].getName().equals("Extended TILE")){
-                        m_extt.add(cd);
-                    }else{
-                        m_calo.add(cd);
-                    }
-                        
-                } else if (d[j] instanceof AEndcapCryostatDetector) {
-                    //adds MBTS but only has one end in geom file
-                    AEndcapCryostatDetector ecd = (AEndcapCryostatDetector) d[j];
-                    m_mbts.add(ecd);
-                } else if (d[j] instanceof AEndcapCalorimeterDetector) {
-                    //adds LAr endcap + HEC but only has one end in geom file
-                    AEndcapCalorimeterDetector ecd = (AEndcapCalorimeterDetector) d[j];
-                    m_endc.add(ecd);
-                    
-                }
-                
-            }
-        }
-        
-        m_ogm = new ANObjectGeomMuon(m_boxes);
-        m_ogc = new ANObjectGeomCalo(m_calo, 4, false);
-        m_ogetp = new ANObjectGeomCalo(m_extt, 4, false);
-        m_ogtsp = new ANObjectGeomCalo(m_mbts, 1, false);
-        m_ogecp = new ANObjectGeomCalo(m_endc, 1, false);
-        m_ogetm = new ANObjectGeomCalo(m_extt, 4, true);
-        m_ogtsm = new ANObjectGeomCalo(m_mbts, 1, true);
-        m_ogecm = new ANObjectGeomCalo(m_endc, 1, true);
-        
-
-    }
-    
-    // DEPRECATED - to be replaced shortly by ANObjectGenerator
-    public final void createData(){
-     
-        AEvent ev = eventManager.getCurrentEvent();
-        AJetData ajd = ev.getJetData();
-        ajd.makeDrawList();
-        m_jet = new ANObjectDataJet(ajd);
-        
-        ALArData ald = ev.getLArData();
-        ald.makeDrawList();
-        m_lar = new ANObjectDataCell(ald);
-        
-    }
-    
-    // DEPRECATED - to be replaced shortly by ANObjectGenerator
-    public final void createGeometry(float phi, float eta, float dr){
-        ArrayList<ABoxDetector> m_boxes = new ArrayList<ABoxDetector>();
-        ArrayList<ACalorimeterDetector> m_calo = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_extt = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_mbts = new ArrayList<ACalorimeterDetector>();
-        ArrayList<ACalorimeterDetector> m_endc = new ArrayList<ACalorimeterDetector>();
-        
-        
-        ADetectors[] ds = AAtlasDetector.getDetector().getDetectors();
-        for (int i = 0; i < ds.length; i++) {
-            ADetector[] d = ds[i].getDetectors();
-            for (int j = 0; j < d.length; j++) {
-                if (d[j] instanceof ABoxDetector) {
-                    ABoxDetector bd = (ABoxDetector) d[j];
-                    //code to show cut away detector
-                    float etabd = (float) AMath.etaAbs(bd.getZMin(), bd.getRMin());
-                    if(AMath.deltaR(phi,eta,(float)bd.getPhi(),etabd)<dr)
-                        m_boxes.add(bd);
-                }else if (d[j] instanceof ABarrelCalorimeterDetector) {
-                    ACalorimeterDetector cd = (ACalorimeterDetector) d[j];
-                    //extended tile only has one end in geom file and not relicated like others
-                    if(d[j].getName().equals("Extended TILE")){
-                        m_extt.add(cd);
-                    }else{
-                        m_calo.add(cd);
-                    }
-                        
-                } else if (d[j] instanceof AEndcapCryostatDetector) {
-                    //adds MBTS but only has one end in geom file
-                    AEndcapCryostatDetector ecd = (AEndcapCryostatDetector) d[j];
-                    m_mbts.add(ecd);
-                } else if (d[j] instanceof AEndcapCalorimeterDetector) {
-                    //adds LAr endcap + HEC but only has one end in geom file
-                    AEndcapCalorimeterDetector ecd = (AEndcapCalorimeterDetector) d[j];
-                    m_endc.add(ecd);
-                    
-                }
-                
-            }
-        }
-        
-        m_ogm = new ANObjectGeomMuon(m_boxes);
-        m_ogc = new ANObjectGeomCalo(m_calo, 4, false);
-        m_ogetp = new ANObjectGeomCalo(m_extt, 4, false);
-        m_ogtsp = new ANObjectGeomCalo(m_mbts, 1, false);
-        m_ogecp = new ANObjectGeomCalo(m_endc, 1, false);
-        m_ogetm = new ANObjectGeomCalo(m_extt, 4, true);
-        m_ogtsm = new ANObjectGeomCalo(m_mbts, 1, true);
-        m_ogecm = new ANObjectGeomCalo(m_endc, 1, true);
-        
-
-    }
-    
-    public final void createData(float phi, float eta, float dr){
-     
-        AEvent ev = eventManager.getCurrentEvent();
-        AJetData ajd = ev.getJetData();
-        ajd.makeDrawList();
-        m_jet = new ANObjectDataJet(ajd, phi, eta, dr);
-
-        ALArData ald = ev.getLArData();
-        ald.makeDrawList();
-        m_lar = new ANObjectDataCell((ACalorimeterData)ald, phi, eta, dr);
-
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANLinearTransition.java b/graphics/AtlantisJava/src/atlantis/nge/ANLinearTransition.java
deleted file mode 100644
index 918caf427d84..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANLinearTransition.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package atlantis.nge;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANLinearTransition extends ANLinearProjection {
-
-    private ANLinearProjection m_a;
-    private ANLinearProjection m_b;
-    private ANAnimVar m_vtttime = new ANAnimVar();
-    private ANAnimVar m_fadetime = new ANAnimVar();
-    
-    public ANLinearTransition(ANLinearProjection a, ANLinearProjection b) {
-        m_a = a;
-        m_b = b;
-    }
-
-    public ANAnimVar getTransformTimeVar() { return m_vtttime; }
-    public ANAnimVar getFadeTimeVar() { return m_fadetime; }
-    
-    @Override
-    public void applyLinearTransform(GLAutoDrawable drawable, int w, int h) {
-        GL gl = drawable.getGL();
-        
-        double vtttime = m_vtttime.getValue();
-        
-        if (vtttime < 0.0) { vtttime = 0.0; }
-        
-        if (vtttime <= 0.0f) {
-            m_a.applyLinearTransform(drawable, w, h);
-        } else if (vtttime >= 1.0f) {
-            m_b.applyLinearTransform(drawable, w, h);
-        } else {
-
-            float[] ma = new float[16];
-            float[] mb = new float[16];
-
-            // TODO: Make this whole thing better
-            // Maybe this is ok. If getFloatv is problematic we may have trouble
-            // but generally this allows us to transform between moving projections!
-            gl.glMatrixMode(GL.GL_PROJECTION);
-            gl.glPushMatrix();
-            gl.glLoadIdentity();
-            m_a.applyLinearTransform(drawable, w, h);
-            gl.glGetFloatv(GL.GL_PROJECTION_MATRIX, ma, 0);
-            gl.glLoadIdentity();
-            m_b.applyLinearTransform(drawable, w, h);
-            gl.glGetFloatv(GL.GL_PROJECTION_MATRIX, mb, 0);
-            gl.glPopMatrix();
-
-            float[] matrix = new float[16];
-
-            // Scaling the matrix linearly means that x/w moves in a highly
-            // non-linear way, especially where large scale changes in w are
-            // involved, try to compensate this by using a highly non-linear
-            // time coordinate
-
-            // Final solution involves inverting the formula for the transformation
-            // to calculate what time coordinate should be applied to ensure
-            // linear motion of a test eye coordinate between it's clip
-            // coordinates under transformation by ma and mb
-            // Should document the maths at some point for sanity...
-
-            // Operating on normalised time here, length 1
-            double[] zerosums = new double[4];
-            double[] gradsums = new double[4];
-
-            for (int y = 0; y < 4; y++) {
-                zerosums[y] = 0.0f;
-                gradsums[y] = 0.0f;
-                for (int x = 0; x < 4; x++) {
-                    zerosums[y] += ma[(4 * x) + y];
-                    gradsums[y] += mb[(4 * x) + y] - ma[(4 * x) + y];
-                }
-            }
-
-            double w0 = ma[3] + ma[7] + ma[11] + ma[15];
-            double wT = mb[3] + mb[7] + mb[11] + mb[15];
-
-            double[] timeest = new double[3];
-            for (int i = 0; i < 3; i++) {
-                // Target value of coord/w
-                double c0w = (ma[0 + i] + ma[4 + i] + ma[8 + i] + ma[12 + i]) / w0;
-                double cTw = (mb[0 + i] + mb[4 + i] + mb[8 + i] + mb[12 + i]) / wT;
-                // Beta is the target value for this component, this could be
-                // a non-linear function for smoother transitions
-                // i.e. something with 0 first derivative at times 0 and 1
-                double beta = (c0w + ((cTw - c0w) * vtttime));
-                timeest[i] = (zerosums[i] - zerosums[3] * beta) / (gradsums[3] * beta - gradsums[i]);
-            }
-
-            // They seem to tend to scale similarly at the moment but this
-            // may fall apart for some really wierd transformation matrix...
-            // ... just take the mean for now and look out for problems
-            double meantime = (timeest[0] + timeest[1] + timeest[2]) / 3.0;
-
-            for (int i = 0; i < 16; i++) {
-                matrix[i] = (float) (ma[i] + ((mb[i] - ma[i]) * meantime));
-            }
-
-            gl.glMultMatrixf(matrix, 0);
-        }
-    }
-
-    @Override
-    public void drawScene(GLAutoDrawable drawable, ANRenderHints hint) {        
-        GL gl = drawable.getGL();
-        
-        
-        
-        if (m_fadetime.getValue() > 0.0) {
-            m_a.drawScene(drawable, hint);
-        
-            gl.glMatrixMode(GL.GL_PROJECTION);
-            gl.glPushMatrix();
-            gl.glLoadIdentity();
-            gl.glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
-            ANColor bgc = ANColor.getBGColor();
-            gl.glColor4f(bgc.r, bgc.g, bgc.b, (float)(m_fadetime.getValue()));
-            gl.glDisable(GL.GL_DEPTH_TEST);
-            gl.glBegin(GL.GL_QUADS);
-            gl.glVertex3f(-1.0f, -1.0f, 0.0f);
-            gl.glVertex3f(1.0f, -1.0f, 0.0f);
-            gl.glVertex3f(1.0f, 1.0f, 0.0f);
-            gl.glVertex3f(-1.0f, 1.0f, 0.0f);
-            gl.glEnd();
-            // FIXME: Don't always want this back on here potentially
-            gl.glEnable(GL.GL_DEPTH_TEST);
-            gl.glPopMatrix();
-            gl.glClear(GL.GL_DEPTH_BUFFER_BIT);
-        }
-            
-        m_b.drawScene(drawable, hint);
-        
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANManager.java b/graphics/AtlantisJava/src/atlantis/nge/ANManager.java
deleted file mode 100644
index 0b7350c29e4e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANManager.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package atlantis.nge;
-
-import atlantis.canvas.AWindow;
-import atlantis.utils.ALogger;
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLCapabilities;
-import javax.media.opengl.GLDrawableFactory;
-import javax.media.opengl.GLEventListener;
-import javax.media.opengl.GLPbuffer;
-
-/**
- * This class keeps handy resources for you...
- * 
- * @author Adam Davison
- */
-public class ANManager implements GLEventListener {
-
-    private static ALogger logger = ALogger.getLogger(ANManager.class);
-    private static ANManager manager = new ANManager();
-
-    public static ANManager getManager() {
-        return manager;
-    }
-    private Hashtable<AWindow, ANFrameManager> m_fms = null;
-    private GLPbuffer m_buf = null;
-    private GLEventListener m_gll;
-
-    public ANManager() {
-        m_fms = new Hashtable<AWindow, ANFrameManager>();
-    }
-
-    public ANFrameManager getFrameManager(AWindow w) {
-        if (w == null) {
-            return null;
-        }
-        ANFrameManager fm = m_fms.get(w);
-        if (fm == null) {
-            fm = new ANFrameManager(w);
-            m_fms.put(w, fm);
-        }
-        return fm;
-    }
-
-    public static int getNextPower2(int v) {
-        int p = 1;
-        for (int i = 0; i < 16; i++) {
-            p *= 2;
-            if (p >= v) {
-                return p;
-            }
-        }
-
-        logger.warn("Returning non power of 2 buffer size!");
-        return v;
-    }
-
-    public void requestBufferDraw(int w, int h, GLEventListener gll) {
-
-        if (m_buf != null && m_buf.getWidth() >= w && m_buf.getHeight() >= h) {
-            //System.out.println("BUFFER OK");
-            // Do nothing
-        } else {
-            //System.out.println("BUFFER CREATE/REPLACE");
-            if (m_buf != null) {
-                m_buf.destroy();
-            }
-
-            GLCapabilities pbcap = new GLCapabilities();
-            pbcap.setHardwareAccelerated(true);
-            pbcap.setSampleBuffers(true);
-            pbcap.setNumSamples(4);
-            //pbcap.setPbufferRenderToTexture(true);
-            //pbcap.setDoubleBuffered(false);
-
-            //logger.info("w: " + m_w + " 2: " + getNextPower2(m_w));
-
-            m_buf = GLDrawableFactory.getFactory().createGLPbuffer(pbcap, null,
-                    getNextPower2(w), getNextPower2(h), null);
-
-            if (m_buf == null) {
-                logger.error("Got null when trying to create pbuffer!");
-                return;
-            }
-            
-            m_buf.addGLEventListener(this);
-
-            logger.info("Created pbuffer w: " + m_buf.getWidth() + " h: " + m_buf.getHeight());
-            
-            if (m_buf.getChosenGLCapabilities() == null) {
-                logger.warn("Your implementation returns null for pbuffer capabilities...");
-            } else {
-                logger.info("Pbuffer hardware accelleration: " + m_buf.getChosenGLCapabilities().getHardwareAccelerated());
-            }
-        }
-
-        // Set up events to go back to the projection
-        m_gll = gll;
-        
-        //System.out.println("CALLING DISPLAY");
-        m_buf.display();
-    }
-    
-    public void init(GLAutoDrawable arg0) {
-        m_gll.init(arg0);
-    }
-
-    public void display(GLAutoDrawable arg0) {
-        //System.out.println("HIT DISPLAY CALLBACK");
-        m_gll.display(arg0);
-    }
-
-    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
-        m_gll.reshape(arg0, arg1, arg2, arg3, arg4);
-    }
-
-    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
-        m_gll.displayChanged(arg0, arg1, arg2);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANObjectGenerator.java b/graphics/AtlantisJava/src/atlantis/nge/ANObjectGenerator.java
deleted file mode 100644
index 260518afd220..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANObjectGenerator.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package atlantis.nge;
-
-import atlantis.event.AEventManager;
-import atlantis.data.ACalorimeterData;
-import atlantis.event.AEvent;
-import atlantis.data.AJetData;
-import atlantis.data.ATrackData;
-import atlantis.geometry.ABoxDetector;
-import atlantis.nge.object.ANObject;
-import atlantis.nge.object.ANObjectList;
-import atlantis.nge.object.data.ANObjectPointing;
-import atlantis.nge.object.data.ANObjectTracks;
-import atlantis.nge.object.geometry.ANObjectGeomMuon;
-import atlantis.utils.ALogger;
-import atlantis.utils.AMath;
-import java.nio.IntBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * These things get arrays of ANObjects out of the Atlantis data store
- * 
- * The general idea is to separate the selection of objects from the way
- * they're represented in the projection. But I suspect that'll break down
- * 
- * For now it's a static object but if we ever want to unstatic it then it's
- * only accessible via getGenerator() so it should be easy to refactor
- * 
- * A lot of the functionality should one day be pushed back into the detector
- * objects themselves
- * 
- * @author Adam Davison
- */
-public class ANObjectGenerator {
-
-    private static ALogger logger = ALogger.getLogger(ANObjectGenerator.class);
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    private static ANObjectGenerator thegenerator = new ANObjectGenerator();
-
-    private ANObjectGenerator() {
-    }
-
-    public static ANObjectGenerator getGenerator() {
-        return thegenerator;
-    }
-
-    public ANObject getGeometryMuon() {
-        return new ANObjectGeomMuon(ANTerribleHacks.getMuonDetectors());
-    }
-    
-    // Ideally change layout of detector stuff so this can be more generic
-    // not like one search per type, since basically everything has eta/phi
-    public ANObject getGeometryMuon(float phi, float eta, float dr) {
-        ArrayList<ABoxDetector> boxes = ANTerribleHacks.getMuonDetectors();
-        ArrayList<ABoxDetector> hits = new ArrayList<ABoxDetector>();
-
-        for (int i = 0; i < boxes.size(); i++) {
-            ABoxDetector bd = boxes.get(i);
-            // TODO - This formula is wrong, it's only checking one corner
-            float etabd = (float) AMath.etaAbs(bd.getZMin(), bd.getRMin());
-            if (AMath.deltaR(phi, eta, (float) bd.getPhi(), etabd) < dr) {
-                hits.add(bd);
-            }
-        }
-
-        return new ANObjectGeomMuon(hits);
-    }
-    
-    public ANObject getDataCaloForJet(int j, String key) {
-        
-        ANObjectList ol = new ANObjectList();
-        
-        AEvent ev = eventManager.getCurrentEvent();
-        AJetData jd = ev.getJetData();
-        String assockey = jd.getFullName();
-        int[][] assoc = ev.getAssociationManager().get(assockey, key);
-        if (assoc == null) { return ol; }
-        if (assoc[j] == null) { return ol; }
-        int[] dl = new int[assoc[j].length];
-        List calolist = ev.getCalorimeters();
-        ACalorimeterData calo = null;
-        for (int i = 0; i < calolist.size(); i++) {
-            ACalorimeterData tc = (ACalorimeterData)(calolist.get(i));
-            if (tc.getName().equals(key)) {
-                calo = tc;
-            }
-        }
-        if (calo == null) {
-            logger.error("Requested unavailable calo key!");
-            return ol;
-        }
-        
-        calo.makeDrawList();
-        int[] calodl = calo.getDrawList();
-        
-        IntBuffer ib = IntBuffer.allocate(assoc[j].length);
-        for (int i = 0; i < assoc[j].length; i++) {
-            int id = assoc[j][i];
-            int index = calo.getIndexFromId(id);
-            boolean found = false;
-            for (int d = 0; d < calo.getNumDraw(); d++) {
-                if (calodl[d] == index) {
-                    found = true;
-                }
-            }
-            if (found) {
-                ib.put(index);
-            }
-        }
-        
-        ol.addObject(new ANObjectPointing(calo, ib.array(), ib.position(), true));
-        ol.addObject(new ANObjectPointing(calo, ib.array(), ib.position(), false));
-        
-        return ol;
-    }
-
-    public ANObject getInDetTracksForJet(int j) {
-        AEvent ev = eventManager.getCurrentEvent();
-        AJetData jd = ev.getJetData();
-        int jetid = jd.getIdFromIndex(j);
-        ATrackData tracks = ev.getTrackData("InDetTrack");
-        int[] trackdl = tracks.getDrawList();
-        String jetassockey = jd.getFullName();
-        String trackassockey = tracks.getName() + tracks.getStoreGateKey();
-        int[][] assoc = ev.getAssociationManager().get(trackassockey, jetassockey);
-        
-        IntBuffer ib = IntBuffer.allocate(assoc.length);
-        for (int i = 0; i < assoc.length; i++) {
-            for (int s = 0; s < assoc[i].length; s++) {
-                if (assoc[i][s] == jetid) {
-                    boolean display = false;
-                    for (int d = 0; d < trackdl.length; d++) {
-                        if (trackdl[d] == i) {
-                            display = true;
-                        }
-                    }
-                    if (display) {ib.put(i);}
-                }
-            }
-        }
-        
-        return new ANObjectTracks(tracks, ib.array());
-    }
-    
-    public ANObject getInDetTracks() {
-        AEvent ev = eventManager.getCurrentEvent();
-        ATrackData td = ev.getTrackData("InDetTrack");
-        return new ANObjectTracks(td);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickDrawer.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickDrawer.java
deleted file mode 100644
index 938f0a4f3707..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickDrawer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package atlantis.nge;
-
-import atlantis.canvas.AWindow;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLEventListener;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANPickDrawer implements GLEventListener {
-
-    private AWindow m_window;
-    private int m_w;
-    private int m_h;
-    private int m_x;
-    private int m_y;
-    
-    private ANPickResult m_pr;
-    private boolean m_pickdone;
-    
-    private ANPickListener m_pl;
-    
-    public ANPickDrawer(AWindow window, int w, int h, int x, int y, ANPickListener pl) {
-        m_window = window;
-        m_w = w;
-        m_h = h;
-        m_x = x;
-        m_y = y;
-        m_pickdone = false;
-        m_pl = pl;
-    }
-    
-    public void doPick() {
-        ANManager.getManager().requestBufferDraw(m_w, m_h, this);
-    }
-    
-    public void init(GLAutoDrawable arg0) {
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void display(GLAutoDrawable arg0) {
-        m_pr = ANManager.getManager().getFrameManager(m_window).pick(arg0, m_w, m_h, m_x, m_y);
-        m_pickdone = true;
-        
-        if (m_pl != null) {
-            m_pl.pickCompleted(m_pr);
-        }
-    }
-
-    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickHandler.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickHandler.java
deleted file mode 100644
index baaeb581efe6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickHandler.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public interface ANPickHandler {
-
-    // Turn your 32 bits of data into a result somehow
-    public ANPickResult getHitInfo(int data);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickHandlerSimple.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickHandlerSimple.java
deleted file mode 100644
index 7b1f713e79eb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickHandlerSimple.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANPickHandlerSimple implements ANPickHandler {
-
-    private String m_name;
-
-    public ANPickHandlerSimple(String name) {
-        m_name = name;
-    }
-    
-    public ANPickResult getHitInfo(int data) {
-        return new ANPickResult(m_name);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickHelper.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickHelper.java
deleted file mode 100644
index e8912acfdf97..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickHelper.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package atlantis.nge;
-
-import atlantis.nge.object.ANObject;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import javax.media.opengl.GL;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANPickHelper {
-    
-    private ArrayList<ANObject> m_all = new ArrayList<ANObject>();
-    private GL m_gl;
-    
-    public ANPickHelper(GL gl) {
-        m_gl = gl;
-    }
-    
-    public ANPickHandler getPickHandler(int id) {
-        System.out.println(m_all.get(id));
-        return m_all.get(id).getPickHandler();
-    }
-            
-    public int getIndex(ANObject p) {
-        int id = m_all.indexOf(p);
-        
-        if (id == -1) {
-            m_all.add(p);
-            id = m_all.indexOf(p);
-        }
-        
-        return id;
-    }
-    
-    // Worry about it being fast much later...
-    public void startPick(ANObject p, int data) {
-        startPick(getIndex(p), data);
-    }
-    
-    public void startPick(int pickid, int data) {
-        m_gl.glPushName(pickid);
-        m_gl.glPushName(data);
-    }
-    
-    public void endPick() {
-        m_gl.glPopName();
-        m_gl.glPopName();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickListener.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickListener.java
deleted file mode 100644
index f7a118143faf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickListener.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package atlantis.nge;
-
-/**
- *
- * @author Adam
- */
-public interface ANPickListener {
-
-    public void pickCompleted(ANPickResult pr);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickResult.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickResult.java
deleted file mode 100644
index d1d05d7efcfa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickResult.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package atlantis.nge;
-
-/**
- * This class encapsulates all the information you might want to get out of a 
- * pick interaction and back into Atlantis
- * 
- * @author Adam Davison
- */
-public class ANPickResult {
-
-    private String m_result;
-    
-    public ANPickResult(String result) {
-        m_result = result;
-    }
-    
-    public String getResult() {
-        return m_result;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANPickResultPrinter.java b/graphics/AtlantisJava/src/atlantis/nge/ANPickResultPrinter.java
deleted file mode 100644
index 1b28bd2a45e8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANPickResultPrinter.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package atlantis.nge;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANPickResultPrinter implements ANPickListener {
-
-    public void pickCompleted(ANPickResult pr) {
-        if (pr != null) {
-            AOutput.append("Picked: " + pr.getResult() + "\n\n", ALogInterface.PICK);
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANProjection.java b/graphics/AtlantisJava/src/atlantis/nge/ANProjection.java
deleted file mode 100644
index f49fb76086be..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANProjection.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package atlantis.nge;
-
-import javax.media.opengl.GLAutoDrawable;
-
-/**
- * So this class represents a projection, which in this model is the class
- * that decides what objects to draw and how to draw them
- * 
- * It is controlled by the ANFrameManager which tells it what to do. 
- * 
- * It shouldn't touch the Atlantis core at all. It gets ANObjects from an
- * ANObjectGenerator which is can then render in any order it chooses into a
- * renderer it can configure in any way it likes.
- * 
- * @author Adam Davison
- */
-public abstract class ANProjection {
-
-    public abstract void display(GLAutoDrawable drawable, int w, int h, ANRenderHints hint);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANProjection3D.java b/graphics/AtlantisJava/src/atlantis/nge/ANProjection3D.java
deleted file mode 100644
index 954f0ead4457..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANProjection3D.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package atlantis.nge;
-
-import atlantis.nge.object.ANObjectTestAxes;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-
-import atlantis.parameters.APar;
-
-/**
- * The plain 3d projection, simple for debugging
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANProjection3D extends ANLinearProjection {
-
-    
-    private float m_phi;
-    private float m_elev;
-    private float m_distance;
-    private float m_tx,  m_ty,  m_tz;
-
-    public ANProjection3D() {
-
-        m_phi = -45.0f;
-        m_elev = 20.0f;
-        m_distance = 3000.0f;
-        m_tx = 0.0f;
-        m_ty = 0.0f;
-        m_tz = 0.0f;
-
-    // create the object generator here
-    }
-
-    @Override
-    public void applyLinearTransform(GLAutoDrawable drawable, int width, int height) {
-        GL gl = drawable.getGL();
-        
-        float w = 1000.0f;
-        float h = (w * drawable.getHeight()) / drawable.getWidth();
-
-        gl.glFrustum(-w, w, -h, h, 1000.0f, 10000.0f);
-
-        // Remember, these are in reverse so essentially:
-        // 0. GL default, start at 0,0,-1 looking at 0,0,0
-        // 1. Spin around y axis to give phi
-        // 2. Spin around x axis to give elevation
-        // 3. Pull back to give distance
-        gl.glTranslatef(0.0f, 0.0f, -m_distance);
-        gl.glRotatef(m_elev, 1.0f, 0.0f, 0.0f);
-        gl.glRotatef(m_phi, 0.0f, 1.0f, 0.0f);
-        gl.glTranslatef(-m_tx, -m_ty, -m_tz);
-    }
-
-    @Override
-    public void drawScene(GLAutoDrawable drawable, ANRenderHints hint) {
-        ANRenderer r = new ANRendererBasic(drawable);
-        if(APar.instance().get("N3D","Axis").getStatus()){
-            ANObjectTestAxes ota = new ANObjectTestAxes();
-            ota.render(r, hint);
-        }
-
-        if (m_ogm == null) {
-            //m_ogm = new ANObjectGeom();
-            createGeometry();
-        }
-
-        m_ogm.render(r, hint);
-        m_ogc.render(r, hint);
-        m_ogetp.render(r, hint);
-        m_ogecp.render(r, hint);
-        m_ogtsp.render(r, hint);
-        m_ogetm.render(r, hint);
-        m_ogecm.render(r, hint);
-        m_ogtsm.render(r, hint);
-        
-        createData();
-        m_jet.render(r, hint);
-        
-    }
-    
-    public void dPhi(float phi) {
-        m_phi += phi;
-    }
-    
-    public void dElev(float elev) {
-        m_elev += elev;
-        if (m_elev < -90.0f) { m_elev = -90.0f; }
-        if (m_elev > 90.0f) { m_elev = 90.0f; }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANProjectionPhysics.java b/graphics/AtlantisJava/src/atlantis/nge/ANProjectionPhysics.java
deleted file mode 100644
index 47e95f65d9f9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANProjectionPhysics.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package atlantis.nge;
-
-import atlantis.event.AData;
-import atlantis.data.AJetData;
-import atlantis.nge.object.ANObjectTestAxes;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-
-import atlantis.parameters.APar;
-import atlantis.utils.A3Vector;
-import atlantis.utils.AMath;
-import javax.media.opengl.glu.GLU;
-
-/**
- * The plain 3d projection, simple for debugging
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANProjectionPhysics extends ANLinearProjection {
-
-    private float m_focus_phi;
-    private float m_focus_eta;
-    private ANAnimVar m_phi;
-    private ANAnimVar m_elev;
-    private float m_distance;
-    private float m_tx,  m_ty,  m_tz;
-    private AData m_data;
-    private int m_data_index;
-
-    public ANProjectionPhysics() {
-
-        m_focus_phi = 0;
-        m_focus_eta = 0;
-        m_phi = new ANAnimVar(-45.0);
-        m_elev = new ANAnimVar(20.0);
-        m_distance = 2000.0f;
-        m_tx = 0.0f;
-        m_ty = 0.0f;
-        m_tz = 0.0f;
-
-
-    // create the object generator here
-    }
-
-    @Override
-    public void applyLinearTransform(GLAutoDrawable drawable, int w, int h) {
-        GL gl = drawable.getGL();
-
-        //float w = 1000.0f;
-        //float h = (w * drawable.getHeight()) / drawable.getWidth();
-
-        //gl.glFrustum(-w, w, -h, h, 1000.0f, 10000.0f);
-        GLU glu = new GLU();
-        glu.gluPerspective(7.0f, w / h, 200.0f, 10000.0f);
-
-        /*gl.glTranslatef(0.0f, 0.0f, -2000.0f);
-        gl.glRotatef(m_elev, 1.0f, 0.0f, 0.0f);
-        gl.glRotatef(m_phi, 0.0f, 1.0f, 0.0f);
-        gl.glRotatef(m_focus_phi, 0.0f, 0.0f, 1.0f);
-        gl.glRotatef(-theta, 0.0f, 1.0f, 0.0f);
-        gl.glTranslatef(0.0f, 0.0f, 500.0f);
-        gl.glRotatef(theta, 0.0f, 1.0f, 0.0f);
-        gl.glRotatef(-m_focus_phi, 0.0f, 0.0f, 1.0f);*/
-        // Remember, these are in reverse so essentially:
-        // 0. GL default, start at 0,0,-1 looking at 0,0,0
-        // 1. Spin around y axis to give phi
-        // 2. Spin around x axis to give elevation
-        // 3. Pull back to give distance
-        gl.glTranslatef(0.0f, 0.0f, -m_distance);
-        gl.glRotatef((float) m_elev.getValue(), 1.0f, 0.0f, 0.0f);
-        gl.glRotatef((float) m_phi.getValue(), 0.0f, 1.0f, 0.0f);
-        gl.glTranslatef(-m_tx, -m_ty, -m_tz);
-
-
-    }
-
-    @Override
-    public void drawScene(GLAutoDrawable drawable, ANRenderHints hint) {
-        ANRenderer r = new ANRendererBasic(drawable);
-
-        GL gl = drawable.getGL();
-        gl.glColor3f(1.0f, 0.0f, 0.0f);
-        gl.glPointSize(2.0f);
-        gl.glBegin(GL.GL_POINTS);
-        gl.glVertex3f(m_tx, m_ty, m_tz);
-        gl.glEnd();
-
-        if (APar.instance().get("NPhysics", "Axis").getStatus()) {
-            ANObjectTestAxes ota = new ANObjectTestAxes();
-            ota.render(r, hint);
-        }
-
-        //ANObjectGenerator.getGenerator()
-        //        .getGeometryMuon(m_focus_phi, m_focus_eta, 1.0f).render(r, pick);
-        //.getGeometryMuon().render(r, pick);
-
-        ANObjectGenerator.getGenerator().getDataCaloForJet(m_data_index, "LAr").render(r, hint);
-        ANObjectGenerator.getGenerator().getDataCaloForJet(m_data_index, "TILE").render(r, hint);
-        ANObjectGenerator.getGenerator().getDataCaloForJet(m_data_index, "HEC").render(r, hint);
-        //ANObjectGenerator.getGenerator().getDataCaloForJet(m_data_index, "FCAL").render(r, pick);
-        ANObjectGenerator.getGenerator().getInDetTracksForJet(m_data_index).render(r, hint);
-
-    //createGeometry(m_focus_phi, m_focus_eta, 1.0f);
-    //m_ogm.render(r, pick);
-        /*m_ogc.render(r);
-    m_ogetp.render(r);
-    m_ogecp.render(r);
-    m_ogtsp.render(r);
-    m_ogetm.render(r);
-    m_ogecm.render(r);
-    m_ogtsm.render(r);*/
-
-    //createData(m_focus_phi, m_focus_eta, 2.0f);
-    //m_jet.render(r, pick);
-    //m_lar.render(r, pick);
-
-    }
-
-    public void dPhi(float phi) {
-        m_phi.setValue(m_phi.getValue() + phi);
-    }
-
-    public void dElev(float elev) {
-        m_elev.setValue(m_elev.getValue() + elev);
-        if (m_elev.getValue() < -90.0) {
-            m_elev.setValue(-90.0);
-        }
-        if (m_elev.getValue() > 90.0) {
-            m_elev.setValue(90.0);
-        }
-    }
-
-    public void lookAt(AJetData jd, int jet_index) {
-
-        m_data = jd;
-        m_data_index = jet_index;
-
-        A3Vector centre = ANTerribleHacks.getCellCentreLArForJet(jet_index);
-        m_tx = (float) centre.x;
-        m_ty = (float) centre.y;
-        m_tz = (float) centre.z;
-
-        float phi = jd.getPhi(jet_index);
-        float eta = jd.getEta(jet_index);
-
-        m_focus_phi = phi;
-        m_focus_eta = eta;
-
-        // m_elev is Spin around y axis to give phi
-        // m_phi is Spin around x axis to give elevation   
-        float theta = (float) (2.0f * Math.atan(Math.exp(eta)));
-        theta = (float) Math.toDegrees(theta);
-        phi = (float) Math.toDegrees(phi);
-
-        //produce coords to try to look perpendicular to jet
-        //needs improving
-        if (eta < 0) {
-            eta = -1;
-        } else {
-            eta = 1;
-        }
-        float x = (float) (m_distance * Math.cos(phi) * Math.sin(theta));
-        float z = (float) (m_distance * Math.cos(theta));
-
-        float rot = (float) Math.toDegrees(Math.atan(z / x));
-
-        if (theta < 90) {
-            m_elev.setValue(eta * -theta);
-            m_phi.setValue(rot);
-        } else {
-            m_elev.setValue(eta * (180. - theta));
-            m_phi.setValue(rot - 45.);
-        }
-        //actually dont need to set melev
-        m_elev.setValue(0);
-
-    }
-    
-    public ANAnimVar getElevVar() { return m_elev; }
-    public ANAnimVar getPhiVar() { return m_phi; }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANProjectionYX.java b/graphics/AtlantisJava/src/atlantis/nge/ANProjectionYX.java
deleted file mode 100644
index 6ca68b65f10f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANProjectionYX.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package atlantis.nge;
-
-import atlantis.nge.object.ANObjectTestAxes;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-
-import atlantis.parameters.APar;
-
-/**
- *
- * @author Adam Davison, Mark Stockton
- */
-public class ANProjectionYX extends ANLinearProjection {
-
-
-    @Override
-    public void applyLinearTransform(GLAutoDrawable drawable, int w, int h) {
-        GL gl = drawable.getGL();
-
-        gl.glMatrixMode(GL.GL_PROJECTION);
-        float scale = ((float) drawable.getHeight()) / ((float) drawable.getWidth());
-        gl.glOrtho(-1500.0f, 1500.0f, -1500.0f * scale, 1500.0f * scale, -100000.0f, 100000.0f);
-    }
-
-    @Override
-    public void drawScene(GLAutoDrawable drawable, ANRenderHints hint) {
-        ANRenderer r = new ANRendererBasic(drawable);
-        if(APar.instance().get("NYX","Axis").getStatus()){
-            ANObjectTestAxes ota = new ANObjectTestAxes();
-            ota.render(r, hint);
-        }
-
-        if (m_ogm == null) {
-            //m_ogm = new ANObjectGeomMuon();
-            createGeometry();
-        }
-
-        m_ogm.render(r, hint);
-        
-        m_ogc.render(r, hint);
-        
-        createData();
-        m_jet.render(r, hint);
-        m_lar.render(r, hint);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANRenderHints.java b/graphics/AtlantisJava/src/atlantis/nge/ANRenderHints.java
deleted file mode 100644
index c370fdf3a98a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANRenderHints.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package atlantis.nge;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANRenderHints {
-
-    private boolean pick;
-    private ANPickHelper pickHelper;
-    
-    public ANRenderHints() {
-        pick = false;
-        pickHelper = null;
-    }
-    
-    public ANPickHelper getPickHelper() {
-        return pickHelper;
-    }
-
-    public void setPickHelper(ANPickHelper pickHelper) {
-        this.pickHelper = pickHelper;
-    }
-    
-    public boolean getPick() {
-        return pick;
-    }
-
-    public void setPick(boolean pick) {
-        this.pick = pick;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANRenderer.java b/graphics/AtlantisJava/src/atlantis/nge/ANRenderer.java
deleted file mode 100644
index 918179874077..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANRenderer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package atlantis.nge;
-
-/**
- * This class provides an interface for drawing into a context of some kind
- * essentially it's a drawing API, much like java.awt.Graphics but rather
- * tuned towards drawing 3-d objects via OpenGL
- * 
- * @author Adam Davison
- */
-public abstract class ANRenderer {
-    
-    public abstract void begin(int type);
-    public abstract void end();
-    
-    public abstract void vertex3f(float x, float y, float z);
-    public abstract void color3f(float r, float g, float b);
-    public abstract void color4f(float r, float g, float b, float a);
-    public abstract void lineWidth(float w);
-    
-    public abstract void drawVertices(float[] vert);
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANRendererBasic.java b/graphics/AtlantisJava/src/atlantis/nge/ANRendererBasic.java
deleted file mode 100644
index c0895accf383..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANRendererBasic.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package atlantis.nge;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.glu.GLU;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANRendererBasic extends ANRenderer {
-
-    private GLAutoDrawable m_drawable;
-    private GL m_gl;
-
-    public ANRendererBasic(GLAutoDrawable drawable) {
-        m_drawable = drawable;
-        m_gl = drawable.getGL();
-    }
-
-    @Override
-    public void begin(int type) {
-        m_gl.glBegin(type);
-    }
-
-    @Override
-    public void end() {
-        m_gl.glEnd();
-    }
-
-    @Override
-    public void drawVertices(float[] vert) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void vertex3f(float x, float y, float z) {
-    //    if (m_btesting) {
-    //        doBoundTest(x, y, z);
-    //    }
-        
-        m_gl.glVertex3f(x, y, z);
-    }
-
-    @Override
-    public void color3f(float r, float g, float b) {
-        m_gl.glColor3f(r, g, b);
-    }
-
-    @Override
-    public void lineWidth(float w) {
-        m_gl.glLineWidth(w);
-    }
-
-    @Override
-    public void color4f(float r, float g, float b, float a) {
-        m_gl.glColor4f(r, g, b, a);
-    }
-    
-/*    private float[] m_tmat = new float[16];
-    private float m_minx;
-    private float m_maxx;
-    private float m_miny;
-    private float m_maxy;
-    
-    private boolean m_btesting = false;
-    
-    public void beginBoundsTest() {
-        // This function assumes no new transformations take place
-        // So bear that in mind...
-        
-        m_gl.glGetFloatv(GL.GL_MODELVIEW_MATRIX, m_tmat, 0);
-        m_minx = Float.MAX_VALUE;
-        m_maxx = Float.MIN_VALUE;
-        m_miny = Float.MAX_VALUE;
-        m_maxy = Float.MIN_VALUE;
-        
-        m_btesting = true;
-    }
-    
-    public void stopBoundsTest() {
-        m_btesting = false;
-    }
-    
-    private void doBoundTest(float x, float y, float z) {
-
-    }*/
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANSelectionList.java b/graphics/AtlantisJava/src/atlantis/nge/ANSelectionList.java
deleted file mode 100644
index 52e404eda2a1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANSelectionList.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package atlantis.nge;
-
-import java.nio.IntBuffer;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANSelectionList {
-
-    private long[] m_zmax;
-    private long[] m_zmin;
-    private int[][] m_names;
-    private int m_ent;
-    
-    public ANSelectionList(IntBuffer ib) {
-        int s = ib.limit();
-        // Shortest possible entry is 4 ints long, could two pass to get
-        // memory requirements right but better to just spend a few bytes
-        int maxent = s/4;
-        m_zmax = new long[maxent];
-        m_zmin = new long[maxent];
-        m_names = new int[maxent][];
-        
-        /*for (int i = 0; i < 20; i++) {
-            System.out.print(":" + ib.get(i));
-        }
-        System.out.println();*/
-        
-        m_ent = 0;
-        int pos = 0;
-        while((pos = processEntry(ib, pos, m_ent)) != -1) {
-            m_ent++;
-        }
-        //System.out.println("Got " + m_ent + " entries in selection list");
-    }
-
-    private int processEntry(IntBuffer ib, int pos, int ent) {
-        //System.out.println("Processing at " + pos + " entry " + ent);
-        int nn = ib.get(pos);
-        //System.out.println("nn: " + nn);
-        if (nn == 0) {
-            // At the end
-            return -1;
-        }
-        m_zmin[ent] = getUnsigned(ib.get(pos+1));
-        m_zmax[ent] = getUnsigned(ib.get(pos+2));
-        m_names[ent] = new int[nn];
-        for (int i = 0; i < nn; i++) {
-            m_names[ent][i] = ib.get(pos+3+i);
-            //System.out.println("Name " + i + " is " + m_names[ent][i]);
-        }
-        pos += 3 + nn;
-        return pos;
-    }
-    
-    public long getUnsigned(int a) {
-        long b = a;
-        if (b < 0) { b -= 2L*(long)Integer.MIN_VALUE; }
-        return b;
-    }
-    
-    public int[] getFrontID() {
-        int found = -1;
-        long max = Long.MIN_VALUE;
-        for (int i = 0; i < m_ent; i++) {
-            System.out.println(m_zmax[i] + ":" + max);
-            if (m_zmax[i] > max) {
-                max = m_zmax[i];
-                found = i;
-            }
-        }
-        
-        System.out.println(found);
-        if (found == -1) {
-            return null;
-        } else {
-            return m_names[found];
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANTerribleHacks.java b/graphics/AtlantisJava/src/atlantis/nge/ANTerribleHacks.java
deleted file mode 100644
index 1fd1b1c106ab..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANTerribleHacks.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package atlantis.nge;
-
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.data.AJetData;
-import atlantis.data.ALArData;
-import atlantis.geometry.AAtlasDetector;
-import atlantis.geometry.ABarrelCalorimeterDetector;
-import atlantis.geometry.ABoxDetector;
-import atlantis.geometry.ACalorimeterDetector;
-import atlantis.geometry.ADetector;
-import atlantis.geometry.ADetectors;
-import atlantis.geometry.AEndcapCalorimeterDetector;
-import atlantis.geometry.AEndcapCryostatDetector;
-import atlantis.utils.A3Vector;
-import java.util.ArrayList;
-
-/**
- * This class encapsulates everything that we shouldn't have to do in one place
- * 
- * Mainly it relates to the fact that there's no way to ask the detector
- * store for something like the muon geometry only at the moment
- * 
- * One day if we really use this code then we need to add sensible access
- * methods like that to the detector store
- * 
- * This class should definitely be deleted one day
- * 
- * @author Adam Davison
- */
-public class ANTerribleHacks {
-
-    private static ArrayList<ABoxDetector> m_boxes = null;
-    private static ArrayList<ACalorimeterDetector> m_calo = null;
-    private static ArrayList<ACalorimeterDetector> m_extt = null;
-    private static ArrayList<ACalorimeterDetector> m_mbts = null;
-    private static ArrayList<ACalorimeterDetector> m_endc = null;
-
-    public static ArrayList<ABoxDetector> getMuonDetectors() {
-        if (m_boxes == null) {
-            fillArrays();
-        }
-        return m_boxes;
-    }
-
-    private static void fillArrays() {
-        m_boxes = new ArrayList<ABoxDetector>();
-        m_calo = new ArrayList<ACalorimeterDetector>();
-        m_extt = new ArrayList<ACalorimeterDetector>();
-        m_mbts = new ArrayList<ACalorimeterDetector>();
-        m_endc = new ArrayList<ACalorimeterDetector>();
-
-        ADetectors[] ds = AAtlasDetector.getDetector().getDetectors();
-        for (int i = 0; i < ds.length; i++) {
-            ADetector[] d = ds[i].getDetectors();
-            for (int j = 0; j < d.length; j++) {
-                if (d[j] instanceof ABoxDetector) {
-                    ABoxDetector bd = (ABoxDetector) d[j];
-                    //TODO temporary code to show cut away detector
-                    //if((bd.getPhi()>1.2 && bd.getPhi()<5.1) || !ACanvas.getCanvas().getPaintingWindow().getProjection().getName().equals("N3D"))
-                    m_boxes.add(bd);
-                } else if (d[j] instanceof ABarrelCalorimeterDetector) {
-                    ACalorimeterDetector cd = (ACalorimeterDetector) d[j];
-                    //extended tile only has one end in geom file and not relicated like others
-                    if (d[j].getName().equals("Extended TILE")) {
-                        m_extt.add(cd);
-                    } else {
-                        m_calo.add(cd);
-                    }
-
-                } else if (d[j] instanceof AEndcapCryostatDetector) {
-                    //adds MBTS but only has one end in geom file
-                    AEndcapCryostatDetector ecd = (AEndcapCryostatDetector) d[j];
-                    m_mbts.add(ecd);
-                } else if (d[j] instanceof AEndcapCalorimeterDetector) {
-                    //adds LAr endcap + HEC but only has one end in geom file
-                    AEndcapCalorimeterDetector ecd = (AEndcapCalorimeterDetector) d[j];
-                    m_endc.add(ecd);
-
-                }
-
-            }
-        }
-    }
-
-    public static A3Vector getCellCentreLArForJet(int j) {
-        float xsum = 0.0f;
-        float ysum = 0.0f;
-        float zsum = 0.0f;
-        int count = 0;
-        AEvent ev = AEventManager.instance().getCurrentEvent();
-        AJetData jd = ev.getJetData();
-        String assockey = jd.getFullName();
-        int[][] assoc = ev.getAssociationManager().get(assockey, "LAr");
-        int[] dl = new int[assoc[j].length];
-        ALArData calo = ev.getLArData();
-        for (int i = 0; i < assoc[j].length; i++) {
-            int index = calo.getIndexFromId(assoc[j][i]);
-            float eta = (float) (calo.getEta(index));
-
-            float theta = (float) (2.0f * Math.atan(Math.exp(-eta)));
-
-            float phi = (float) (calo.getPhi(index));
-
-            float rmin = (float) calo.getDetector(index).getRMin();
-            float rmax = (float) calo.getDetector(index).getRMax();
-            float r = 0.5f * (rmin + rmax);
-
-            xsum += (float) (r * Math.cos(phi));
-            ysum += (float) (r * Math.sin(phi));
-            zsum += (float) (r / Math.tan(theta));
-            count++;
-        }
-        
-        
-        
-        return new A3Vector(xsum / count, ysum / count, zsum / count);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/ANTestWindow.java b/graphics/AtlantisJava/src/atlantis/nge/ANTestWindow.java
deleted file mode 100644
index f4340ca844e6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/ANTestWindow.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package atlantis.nge;
-
-import com.sun.opengl.util.Screenshot;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.util.Random;
-import javax.media.opengl.GL;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLCapabilities;
-import javax.media.opengl.GLDrawableFactory;
-import javax.media.opengl.GLEventListener;
-import javax.media.opengl.GLPbuffer;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-
-/**
- * The ubiquitous test window class...
- * 
- * @author Adam Davison
- */
-public class ANTestWindow implements GLEventListener {
-
-    private Random m_r = new Random();
-    
-    private int m_h = 400;
-    private int m_w = 400;
-    
-    private JFrame m_f;
-    private BufferedImage m_img;
-    
-    private ANFrameManager m_fm;
-    
-    private GLPbuffer m_context;
-    
-    public ANTestWindow() {
-        m_f = new JFrame("Happy Time!");
-        m_f.setBounds(100, 100, m_w, m_h);
-        
-        TestComponent tc = new TestComponent(this);
-        
-        m_f.add(tc);
-        
-        GLCapabilities pbcap = new GLCapabilities();
-        pbcap.setSampleBuffers(true);
-        pbcap.setNumSamples(4);
-        //pbcap.setPbufferRenderToTexture(true);
-        //pbcap.setDoubleBuffered(false);
-        m_context = GLDrawableFactory.getFactory().createGLPbuffer(pbcap, null, m_w, m_h, null);
-        m_context.addGLEventListener(this);
-        
-        m_fm = new ANFrameManager(null);
-        
-        m_f.setVisible(true);
-        
-        //(new Thread(new TimingThread(tc))).start();
-    }
-
-    public void causeRepaint(Graphics g) {
-        m_context.display();
-        g.drawImage(m_img, 0, 0, null);
-    }
-    
-    public void init(GLAutoDrawable arg0) {
-    }
-
-    public void display(GLAutoDrawable arg0) {
-        //m_fm.display(arg0);
-        m_img = Screenshot.readToBufferedImage(m_w, m_h);
-    }
-
-    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
-    }
-
-    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-    
-}
-
-class TestComponent extends JComponent {
-    private ANTestWindow m_parent;
-
-    public TestComponent(ANTestWindow parent) {
-        m_parent = parent;
-    }
-    
-    @Override
-    protected void paintComponent(Graphics g) {
-        m_parent.causeRepaint(g);
-    }
-    
-}
-
-class TimingThread implements Runnable {
-    private JComponent m_parent;
-    
-    private long m_sum;
-    private int m_count;
-    
-    public TimingThread(JComponent parent) {
-        m_parent = parent;
-    }
-
-    public void run() {
-        m_sum = 0;
-        m_count = 0;
-        try {
-            Thread.sleep(5000);
-        } catch (Exception e) {}
-        for (int i = 0; i < 100; i++) {
-            long before = System.nanoTime();
-            m_parent.paintImmediately(0, 0, m_parent.getWidth(), m_parent.getHeight());
-            long after = System.nanoTime();
-            m_sum += after - before;
-            m_count++;
-        }
-        System.out.println("Mean time: " + m_sum/m_count + "ns");
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/ANObject.java b/graphics/AtlantisJava/src/atlantis/nge/object/ANObject.java
deleted file mode 100644
index 944c3c461b9c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/ANObject.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package atlantis.nge.object;
-
-import atlantis.nge.*;
-
-/**
- * An ANObject is the superclass of anything which knows how to draw itself
- * using an ANRenderer
- * 
- * Specifically these will tend to represent some kind of visual onscreen
- * element and will contain all the information required to draw the
- * representation
- * 
- * @author Adam Davison
- */
-public abstract class ANObject {
-
-    public abstract void render(ANRenderer r, ANRenderHints hint);
-    
-    private ANPickHandler m_ph = null;
-    protected void setPickHandler(ANPickHandler ph) {
-        m_ph = ph;
-    }
-    
-    public ANPickHandler getPickHandler() {
-        return m_ph;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectList.java b/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectList.java
deleted file mode 100644
index 7e79f7f10e5d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectList.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package atlantis.nge.object;
-
-import atlantis.nge.ANRenderHints;
-import atlantis.nge.ANRenderer;
-import java.util.ArrayList;
-
-/**
- * A composite object, of course these can be nested to make trees of objects
- * 
- * @author Adam Davison
- */
-public class ANObjectList extends ANObject {
-
-    private ArrayList<ANObject> m_list;
-    
-    public ANObjectList() {
-        m_list = new ArrayList<ANObject>();
-    }
-    
-    public void addObject(ANObject o) {
-        m_list.add(o);
-    }
-    
-    public void render(ANRenderer r, ANRenderHints hint) {
-        for (int i = 0; i < m_list.size(); i++) {
-            m_list.get(i).render(r, hint);
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectTestAxes.java b/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectTestAxes.java
deleted file mode 100644
index c32ad4e2fec9..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectTestAxes.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package atlantis.nge.object;
-
-import atlantis.nge.*;
-import javax.media.opengl.GL;
-
-/**
- * A simple test object
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANObjectTestAxes extends ANObject {
-
-    public ANObjectTestAxes() {
-        
-    }
-    
-    @Override
-    public void render(ANRenderer r, ANRenderHints hint) {
-        
-        r.lineWidth(2.0f);
-        
-        // x
-        r.color3f(1.0f, 0.0f, 0.0f);
-        r.begin(GL.GL_LINES);
-        r.vertex3f(0.0f, 0.0f, 0.0f);
-        r.vertex3f(1500.0f, 0.0f, 0.0f);
-        r.end();
-        
-        // y
-        r.color3f(0.0f, 1.0f, 0.0f);
-        r.begin(GL.GL_LINES);
-        r.vertex3f(0.0f, 0.0f, 0.0f);
-        r.vertex3f(0.0f, 1500.0f, 0.0f);
-        r.end();
-        
-        // z
-        r.color3f(0.0f, 0.0f, 1.0f);
-        r.begin(GL.GL_LINES);
-        r.vertex3f(0.0f, 0.0f, 0.0f);
-        r.vertex3f(0.0f, 0.0f, 1500.0f);
-        r.end();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectVL.java b/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectVL.java
deleted file mode 100644
index 091ac5ffb58a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/ANObjectVL.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package atlantis.nge.object;
-
-import atlantis.nge.*;
-
-/**
- * An object which draws from a vertex list
- * 
- * @author Adam Davison
- */
-public abstract class ANObjectVL extends ANObject {
-    
-    public abstract float[][] getVertices();
-    
-    public abstract int[] getPrimTypes();
-
-    // What the hell is this?
-    public final int DRAW_LINE=-9;
-    
-    public ANColor getColor(int i) {
-        return new ANColor(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-
-    /**
-     * This function is like the software equivalent of just dumping a block
-     * of vertex information in GL 3.1...
-     * @param r
-     * @param hint
-     */
-    @Override
-    public void render(ANRenderer r, ANRenderHints hint) {
-        r.lineWidth(1.5f);
-        
-        int pid = -1;
-        ANPickHelper ph = null;
-        if (hint.getPick()) {
-            ph = hint.getPickHelper();
-            pid = ph.getIndex(this);
-        }
-        
-        int[] pt = getPrimTypes();
-        float[][] v = getVertices();
-        
-        if (pt == null) {
-            return;
-        }
-        
-        for (int i = 0; i < pt.length; i++) {
-            if (hint.getPick()) {
-                ph.startPick(pid, i);
-            }
-            
-            ANColor c = getColor(i);
-            r.color4f(c.r, c.g, c.b, c.a);
-            r.begin(pt[i]);
-            for (int j = 0; j < v[i].length; j+=3) {
-                r.vertex3f(v[i][j], v[i][j+1], v[i][j+2]);
-            }
-            r.end();
-            
-            if (hint.getPick()) {
-                ph.endPick();
-            }
-        }
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataCell.java b/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataCell.java
deleted file mode 100644
index 410ea527370b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataCell.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package atlantis.nge.object.data;
-
-import atlantis.nge.object.*;
-import atlantis.nge.*;
-import atlantis.data.ACalorimeterData;
-import atlantis.geometry.AEndcapCalorimeterDetector;
-import atlantis.utils.AMath;
-
-import javax.media.opengl.GL;
-
-/**
- * Object that draws cells
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANObjectDataCell extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    private int[] m_color;
-
-    public ANObjectDataCell() {
-    }
-
-    public ANObjectDataCell(ACalorimeterData ald) {
-
-        m_pt = new int[ald.getNumDraw()];
-        m_v = new float[ald.getNumDraw()][];
-        m_color = new int[ald.getNumDraw()];
-
-        for (int j = 0; j < ald.getNumDraw(); j++) {
-            int i = ald.getDrawIndex(j);
-
-            m_pt[j] = GL.GL_TRIANGLE_STRIP;
-            m_color[j] = ald.getColor(i);
-            m_v[j] = getVert(ald, i);
-
-        }
-    }
-
-    public ANObjectDataCell(ACalorimeterData ald, int dl[]) {
-        
-        m_pt = new int[dl.length];
-        m_v = new float[dl.length][];
-        m_color = new int[dl.length];
-
-        for (int j = 0; j < dl.length; j++) {
-            int i = dl[j];
-
-            m_pt[j] = GL.GL_TRIANGLE_STRIP;
-            m_color[j] = ald.getColor(i);
-            m_v[j] = getVert(ald, i);
-
-        }
-    }
-    
-    // This logic should be in ANObjectGenerator
-    public ANObjectDataCell(ACalorimeterData ald, float phi, float eta, float dr) {
-
-        int num = 0;
-        for (int j = 0; j < ald.getNumDraw(); j++) {
-            int i = ald.getDrawIndex(j);
-            if (AMath.deltaR(phi, eta, (float) ald.getPhi(i), (float) ald.getEta(i)) < dr) {
-                num++;
-            }
-        }
-
-        m_pt = new int[num];
-        m_v = new float[num][];
-        m_color = new int[num];
-        num = 0;
-        for (int j = 0; j < ald.getNumDraw(); j++) {
-            int i = ald.getDrawIndex(j);
-            if (AMath.deltaR(phi, eta, (float) ald.getPhi(i), (float) ald.getEta(i)) > dr) {
-                continue;
-            }
-            m_pt[num] = GL.GL_TRIANGLE_STRIP;
-            m_color[num] = ald.getColor(i);
-            m_v[num] = getVert(ald, i);
-            num++;
-
-        }
-    }
-
-    private float[] getVert(ACalorimeterData ald, int index) {
-
-        float etamin = (float) (ald.getEta(index) - ald.getdEta(index));
-        float etamax = (float) (ald.getEta(index) + ald.getdEta(index));
-
-        float thetamin = (float) (2.0f * Math.atan(Math.exp(-etamin)));
-        float thetamax = (float) (2.0f * Math.atan(Math.exp(-etamax)));
-
-        float phimin = (float) (ald.getPhi(index) - ald.getdPhi(index));
-        float phimax = (float) (ald.getPhi(index) + ald.getdPhi(index));
-
-        float rmin = (float) ald.getDetector(index).getRMin();
-        float rmax = (float) ald.getDetector(index).getRMax();
-
-        // TODO: Push this up to the getZ??? functions in this detector
-        // class.
-        if (ald.getDetector(index) instanceof AEndcapCalorimeterDetector) {
-            //correction taken from AEndcapCalorimeterDetector
-            String name = ald.getDetector(index).getName();
-            float zmin = (float) (ald.getDetector(index).getZMin());
-            //This shouldn't be 0, but just to be on the safe side.
-            int side = ald.getSide(index);
-            if (side != 0) {
-                side /= Math.abs(side);
-            }
-            zmin *= side;
-            if (name.indexOf("Inner") >= 0 || name.indexOf("Outer") >= 0 || name.indexOf("Presampler") >= 0) {
-                rmax = (float) (zmin / Math.sinh(etamin));
-            }
-            rmin = (float) (zmin / Math.sinh(etamax));
-        }
-
-        float[][] v = new float[8][3];
-
-        fillVert(v[0], rmin, thetamin, phimin);
-        fillVert(v[1], rmin, thetamax, phimin);
-        fillVert(v[2], rmax, thetamax, phimin);
-        fillVert(v[3], rmax, thetamin, phimin);
-        fillVert(v[4], rmin, thetamin, phimax);
-        fillVert(v[5], rmin, thetamax, phimax);
-        fillVert(v[6], rmax, thetamax, phimax);
-        fillVert(v[7], rmax, thetamin, phimax);
-
-        float[] vert = new float[3 * 14];
-        int[] wind = {6, 5, 7, 4, 0, 5, 1, 2, 0, 3, 7, 2, 6, 5};
-        for (int i = 0; i < 14; i++) {
-            copyVert(v[wind[i]], vert, i);
-        }
-
-        return vert;
-    }
-
-    private void copyVert(float[] v, float[] t, int ti) {
-        t[(ti * 3) + 0] = v[0];
-        t[(ti * 3) + 1] = v[1];
-        t[(ti * 3) + 2] = v[2];
-
-    }
-
-    private void fillVert(float[] v, float r, float theta, float phi) {
-
-        v[0] = (float) (r * Math.cos(phi));
-        v[1] = (float) (r * Math.sin(phi));
-        v[2] = (float) (r / Math.tan(theta));
-    }
-
-    @Override
-    public float[][] getVertices() {
-        return m_v;
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        return m_pt;
-    }
-
-    @Override
-    public ANColor getColor(int i) {
-
-        if (m_color[i] == DRAW_LINE) {
-            return new ANColor(0.0f, 0.0f, 0.0f, 1.0f);
-        } else {
-            return ANColor.getMapColor(m_color[i]);
-        }
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataJet.java b/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataJet.java
deleted file mode 100644
index f97774fe95f3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectDataJet.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package atlantis.nge.object.data;
-
-import atlantis.nge.object.*;
-import atlantis.nge.*;
-import atlantis.data.AJetData;
-import atlantis.utils.AMath;
-
-import javax.media.opengl.GL;
-
-/**
- * Object that draws geometry of the muon system
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANObjectDataJet extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    private int[] m_color;
-    
-    public ANObjectDataJet() {
-
-    }
-    
-public ANObjectDataJet(AJetData ajd) {
-         
-        
-        m_pt = new int[2*ajd.getNumDraw()];
-        m_v = new float[2*ajd.getNumDraw()][];
-        m_color = new int[2*ajd.getNumDraw()];
-        
-        for (int j = 0; j < ajd.getNumDraw(); j++) {
-            int i= ajd.getDrawIndex(j);
-            float theta = (float) (2.0f * Math.atan(Math.exp(-ajd.getEta(i))));
-            
-            m_pt[2*j] = GL.GL_TRIANGLE_FAN;
-            //m_v[2*j] = getCone(ajd.getET(i), ajd.getPhi(i), theta);
-            m_v[2*j] = getCone(1300.0f, ajd.getPhi(i), theta);
-            m_color[2*j]=ajd.getColor(i);
-            m_pt[2*j+1] = GL.GL_LINES;
-            //m_v[2*i+1] = getCore(ajd.getET(i), ajd.getPhi(i), theta);
-            m_v[2*j+1] = getCore(1300.0f, ajd.getPhi(i), theta);
-            m_color[2*j+1]=DRAW_LINE;
-        }
-    }
-    
-    public ANObjectDataJet(AJetData ajd, float phi, float eta, float dr) {
-        
-        int num=0;
-        for (int j = 0; j < ajd.getNumDraw(); j++) {
-            int i= ajd.getDrawIndex(j);
-            if(AMath.deltaR(phi,eta,(float)ajd.getPhi(i),(float)ajd.getEta(i))<dr){
-                num++;
-            }
-        }
-        
-        m_pt = new int[2*num];
-        m_v = new float[2*num][];
-        m_color = new int[2*num];
-        num=0;
-        for (int j = 0; j < ajd.getNumDraw(); j++) {
-            int i= ajd.getDrawIndex(j);
-            if(AMath.deltaR(phi,eta,(float)ajd.getPhi(i),(float)ajd.getEta(i))>dr)
-                continue;
-            float theta = (float) (2.0f * Math.atan(Math.exp(-ajd.getEta(i))));
-            
-            m_pt[2*num] = GL.GL_TRIANGLE_FAN;
-            //m_v[2*num] = getCone(ajd.getET(i), ajd.getPhi(i), theta);
-            m_v[2*num] = getCone(1300.0f, ajd.getPhi(i), theta);
-            m_color[2*num]=ajd.getColor(i);
-            m_pt[2*num+1] = GL.GL_LINES;
-            //m_v[2*num+1] = getCore(ajd.getET(i), ajd.getPhi(i), theta);
-            m_v[2*num+1] = getCore(1300.0f, ajd.getPhi(i), theta);
-            m_color[2*num+1]=DRAW_LINE;
-            num++;
-        }
-    }
-    
-
-    
-    private float[] getCore(float len, float phi, float theta){
-
-        // Jets are in detector eta so primary vertex set to 0 is sensible for now
-        float[] core = {0.0f, 0.0f, 0.0f,
-                (float) (len * Math.cos(phi) * Math.sin(theta)),
-                (float) (len * Math.sin(phi) * Math.sin(theta)),
-                (float) (len * Math.cos(theta))
-        };
-        return core;
-    }
-    
-    private float[] getCone(float len, float phi, float theta){
-        int segs = 8;
-
-        float[] cone = new float[3 * (2 + segs)];
-        cone[0] = 0.0f;
-        cone[1] = 0.0f;
-        cone[2] = 0.0f;
-
-        //temporary jet radius
-        float jetr = 100.0f;
-
-        for (int i = 0; i < segs; i++) {
-            float lphi = (float) (i * 2.0f * Math.PI / segs);
-            float ax = (float) (jetr * Math.cos(lphi));
-            float ay = (float) (jetr * Math.sin(lphi));
-            float az = len;
-
-            float bx = (float) (ax * Math.cos(phi) * Math.cos(theta) +
-                    az * Math.sin(theta) * Math.cos(phi) - ay * Math.sin(phi));
-            float by = (float) (ax * Math.cos(theta) * Math.sin(phi) +
-                    az * Math.sin(theta) * Math.sin(phi) + ay * Math.cos(phi));
-            float bz = (float) (-ax * Math.sin(theta) + az * Math.cos(theta));
-            
-            cone[i*3+3] = bx;
-            cone[i*3+4] = by;
-            cone[i*3+5] = bz;
-        }
-        
-        cone[(3*(2+segs)) - 3] = cone[3];
-        cone[(3*(2+segs)) - 2] = cone[4];
-        cone[(3*(2+segs)) - 1] = cone[5];
-        
-        return cone;
-    }
-    
-    @Override
-    public float[][] getVertices() {
-        return m_v;
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        return m_pt;
-    }
-
-    @Override
-    public ANColor getColor(int i) {
-        
-        if(m_color[i]==DRAW_LINE)
-            return new ANColor(0.0f, 0.0f, 0.0f, 1.0f);
-        else
-            return ANColor.getMapColor(m_color[i], 0.5f);
-
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectPointing.java b/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectPointing.java
deleted file mode 100644
index 2fddcee1d372..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectPointing.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package atlantis.nge.object.data;
-
-import atlantis.data.ACalorimeterData;
-import atlantis.data.ATILEData;
-import atlantis.geometry.AEndcapCalorimeterDetector;
-import atlantis.nge.ANColor;
-import atlantis.nge.object.ANObjectVL;
-import atlantis.utils.AMath;
-import javax.media.opengl.GL;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANObjectPointing extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    private ANColor[] m_c;
-
-    public ANObjectPointing(ACalorimeterData ald, int dl[], int dllen, boolean outline) {
-        m_pt = new int[dllen];
-        m_v = new float[dllen][];
-        m_c = new ANColor[dllen];
-
-        double[] area = new double[dl.length];
-        for (int i = 0; i < dllen; i++) {
-            area[i] = 1.0;
-        }
-
-        ald.calibrateLocalDensity(dl, area);
-        double[] scale = ald.getScaleFactors(dl, area);
-
-        if (outline) {
-            for (int j = 0; j < dllen; j++) {
-                int i = dl[j];
-                m_pt[j] = GL.GL_LINES;
-                m_c[j] = ANColor.getMapColor(ald.getColor(i));
-                m_c[j].mult(0.5f);
-                m_v[j] = getVert(ald, i, (float)scale[j], true);
-                //m_v[j] = getVert(ald, i, 1.0f, true);
-            }
-        } else {
-            
-            for (int j = 0; j < dllen; j++) {
-                int i = dl[j];
-                m_pt[j] = GL.GL_TRIANGLE_STRIP;
-                m_c[j] = ANColor.getMapColor(ald.getColor(i));
-                m_v[j] = getVert(ald, i, (float)scale[j], false);
-            }
-        }
-
-    }
-
-    @Override
-    public float[][] getVertices() {
-        return m_v;
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        return m_pt;
-    }
-
-    @Override
-    public ANColor getColor(int i) {
-        return m_c[i];
-    }
-
-    private float[] getVert(ACalorimeterData ald, int index, float scale, boolean outline) {
-
-        // Possibly should apply scale to theta not eta?
-        float etamin = (float) (ald.getEta(index) - 0.5f*scale*ald.getdEta(index));
-        float etamax = (float) (ald.getEta(index) + 0.5f*scale*ald.getdEta(index));
-
-        float thetamin = (float) (2.0f * Math.atan(Math.exp(-etamin)));
-        float thetamax = (float) (2.0f * Math.atan(Math.exp(-etamax)));
-
-        float phimin = (float) (ald.getPhi(index) - 0.5f*scale*ald.getdPhi(index));
-        float phimax = (float) (ald.getPhi(index) + 0.5f*scale*ald.getdPhi(index));
-
-        float rmin = (float) ald.getDetector(index).getRMin();
-        float rmax = (float) ald.getDetector(index).getRMax();
-        float dr = 0.5f*(rmax - rmin);
-        rmin += (1.0f - scale)*dr;
-        rmax -= (1.0f - scale)*dr;
-
-        // TODO: Push this up to the getZ??? functions in this detector
-        // class.
-        if (ald.getDetector(index) instanceof AEndcapCalorimeterDetector) {
-            //correction taken from AEndcapCalorimeterDetector
-            String name = ald.getDetector(index).getName();
-            float zmin = (float) (ald.getDetector(index).getZMin());
-            //This shouldn't be 0, but just to be on the safe side.
-            int side = ald.getSide(index);
-            if (side != 0) {
-                side /= Math.abs(side);
-            }
-            zmin *= side;
-            if (name.indexOf("Inner") >= 0 || name.indexOf("Outer") >= 0 || name.indexOf("Presampler") >= 0) {
-                rmax = (float) (zmin / Math.sinh(etamin));
-            }
-            rmin = (float) (zmin / Math.sinh(etamax));
-        }
-
-        float[][] v = new float[8][3];
-
-        fillVert(v[0], rmin, thetamin, phimin);
-        fillVert(v[1], rmin, thetamax, phimin);
-        fillVert(v[2], rmax, thetamax, phimin);
-        fillVert(v[3], rmax, thetamin, phimin);
-        fillVert(v[4], rmin, thetamin, phimax);
-        fillVert(v[5], rmin, thetamax, phimax);
-        fillVert(v[6], rmax, thetamax, phimax);
-        fillVert(v[7], rmax, thetamin, phimax);
-
-        int[] wind = null;
-        if (!outline) {
-            int[] inwind = {6, 5, 7, 4, 0, 5, 1, 2, 0, 3, 7, 2, 6, 5};
-            wind = inwind;
-        } else {
-            int[] outwind = {0, 3, 0, 1, 0, 4, 2, 1, 2, 3, 2, 6,
-                            7, 4, 7, 6, 7, 3, 5, 6, 5, 4, 5, 1};
-            wind = outwind;
-        }
-        float[] vert = new float[3 * wind.length];
-        for (int i = 0; i < wind.length; i++) {
-            copyVert(v[wind[i]], vert, i);
-        }
-
-        return vert;
-    }
-
-    private void copyVert(float[] v, float[] t, int ti) {
-        t[(ti * 3) + 0] = v[0];
-        t[(ti * 3) + 1] = v[1];
-        t[(ti * 3) + 2] = v[2];
-
-    }
-
-    private void fillVert(float[] v, float r, float theta, float phi) {
-
-        v[0] = (float) (r * Math.cos(phi));
-        v[1] = (float) (r * Math.sin(phi));
-        v[2] = (float) (r / Math.tan(theta));
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectTracks.java b/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectTracks.java
deleted file mode 100644
index f8599c1f12a6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/data/ANObjectTracks.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package atlantis.nge.object.data;
-
-import atlantis.data.ALArData;
-import atlantis.data.ATrackData;
-import atlantis.nge.ANColor;
-import atlantis.nge.object.ANObjectVL;
-import javax.media.opengl.GL;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANObjectTracks extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    private int[] m_color;
-
-    public ANObjectTracks(ATrackData td) {
-        float[][] x = td.getX();
-        float[][] y = td.getY();
-        float[][] z = td.getZ();
-
-        m_pt = new int[x.length];
-        m_v = new float[x.length][];
-        m_color = new int[x.length];
-
-        for (int i = 0; i < x.length; i++) {
-            m_pt[i] = GL.GL_LINE_STRIP;
-            m_v[i] = new float[x[i].length * 3];
-            m_color[i] = td.getColor(i);
-            for (int p = 0; p < x[i].length; p++) {
-                m_v[i][p * 3] = x[i][p];
-                m_v[i][p * 3 + 1] = y[i][p];
-                m_v[i][p * 3 + 2] = z[i][p];
-            }
-        }
-    }
-
-    public ANObjectTracks(ATrackData td, int[] dl) {
-        float[][] x = td.getX();
-        if (x == null) {
-            System.out.println("ARGH!!");
-            m_pt = null;
-            m_v = null;
-            m_color = null;
-            return;
-        }
-        float[][] y = td.getY();
-        float[][] z = td.getZ();
-
-        m_pt = new int[dl.length];
-        m_v = new float[dl.length][];
-        m_color = new int[dl.length];
-
-        for (int i = 0; i < dl.length; i++) {
-            m_pt[i] = GL.GL_LINE_STRIP;
-            int index = td.getIndexFromId(dl[i]);
-            m_v[i] = new float[x[index].length * 3];
-            m_color[i] = td.getColor(index);
-            for (int p = 0; p < x[index].length; p++) {
-                m_v[i][p * 3] = x[index][p];
-                m_v[i][p * 3 + 1] = y[index][p];
-                m_v[i][p * 3 + 2] = z[index][p];
-            }
-        }
-    }
-
-    @Override
-    public float[][] getVertices() {
-        return m_v;
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        return m_pt;
-    }
-
-    public ANColor getColor(int i) {
-        return ANColor.getMapColor(m_color[i]);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectBeamLine.java b/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectBeamLine.java
deleted file mode 100644
index ad9d7da77b47..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectBeamLine.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package atlantis.nge.object.geometry;
-
-import atlantis.nge.object.ANObjectVL;
-
-/**
- *
- * @author Adam Davison
- */
-public class ANObjectBeamLine extends ANObjectVL {
-
-    @Override
-    public float[][] getVertices() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomCalo.java b/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomCalo.java
deleted file mode 100644
index 5705182ecc6d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomCalo.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package atlantis.nge.object.geometry;
-
-import atlantis.nge.object.*;
-import atlantis.nge.*;
-import atlantis.geometry.ACalorimeterDetector;
-
-import java.util.ArrayList;
-import javax.media.opengl.GL;
-
-/**
- * Object that draws geometry of the muon system
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANObjectGeomCalo extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    
-    private int[] m_color;
-    
-    public ANObjectGeomCalo(ArrayList<ACalorimeterDetector> m_calo, int nv_scale, boolean duplicate) {
-
-        m_pt = new int[7*m_calo.size()];
-        m_v = new float[7*m_calo.size()][];
-        m_color = new int[7*m_calo.size()]; 
-
-        //all endcaps and extended tile only has one end in geom file and not relicated like others
-        for (int j = 0; j < m_calo.size(); j++) {
-            int i=7*j;
-            ACalorimeterDetector cd = m_calo.get(j);
-            m_pt[i]=GL.GL_TRIANGLE_STRIP;
-            m_pt[i+1]=GL.GL_TRIANGLE_STRIP;
-            m_pt[i+2]=GL.GL_TRIANGLE_STRIP;
-            m_pt[i+3]=GL.GL_LINE_LOOP;
-            m_pt[i+4]=GL.GL_LINE_LOOP;
-            m_pt[i+5]=GL.GL_LINE_LOOP;
-            m_pt[i+6]=GL.GL_LINE_LOOP;
-            m_color[i]=cd.getFillColor();
-            m_color[i+1]=cd.getFillColor();
-            m_color[i+2]=cd.getFillColor();
-            m_color[i+3]=DRAW_LINE;
-            m_color[i+4]=DRAW_LINE;
-            m_color[i+5]=DRAW_LINE;
-            m_color[i+6]=DRAW_LINE;
-            
-            float zMin=(float) cd.getZMin();
-            float zMax=(float) cd.getZMax();
-            if(duplicate){
-                zMin*=-1.;
-                zMax*=-1.;
-            }
-            m_v[i] = getEndTris(zMin, (float) cd.getRMin(), (float) cd.getRMax(), cd.getNumPhi() / nv_scale);
-            m_v[i+1] = getEndTris(zMax, (float) cd.getRMin(), (float) cd.getRMax(), cd.getNumPhi() / nv_scale);
-            m_v[i+2] = getBarrelTris(zMin, zMax, (float) cd.getRMin(), (float) cd.getRMax(), cd.getNumPhi() / nv_scale);
-            m_v[i+3] = getEdges(zMin, (float) cd.getRMin(), cd.getNumPhi() / nv_scale, true);
-            m_v[i+4] = getEdges(zMax, (float) cd.getRMin(), cd.getNumPhi() / nv_scale, true);
-            m_v[i+5] = getEdges(zMin, (float) cd.getRMax(), cd.getNumPhi() / nv_scale, false);
-            m_v[i+6] = getEdges(zMax, (float) cd.getRMax(), cd.getNumPhi() / nv_scale, false);
-        }
-    }
-    
-   
-        private float[] getEdges(float z, float r, int nv, boolean inner) {
-            float[] v = new float[3 * nv];
-
-            float dphi = (2 * (float) Math.PI) / nv;
-            float hdphi = 0.5f * dphi;
-            //if (inner) { hdphi = 0.0f; }
-
-            for (int i = 0; i < nv; i++) {
-                int ie = i * 3;
-                v[ie] = r * (float) Math.cos(i * dphi + hdphi);
-                v[ie + 1] = r * (float) Math.sin(i * dphi + hdphi);
-                v[ie + 2] = (float) z;
-            }
-
-            return v;
-        }
-        
-        private float[] getBarrelTris(float zmin, float zmax, float rmin, float rmax, int nv) {
-            float[] v = new float[3 * (nv * 2 + 2)];
-
-            float dphi = (2 * (float) Math.PI) / nv;
-            float hdphi = 0.5f * dphi;
-
-            float r = (float) rmax;
-
-            for (int i = 0; i < nv; i++) {
-                int ie = i * 2 * 3;
-                int oe = (i * 2 + 1) * 3;
-                v[ie] = r * (float) Math.cos(i * dphi + hdphi);
-                v[ie + 1] = r * (float) Math.sin(i * dphi + hdphi);
-                v[ie + 2] = (float) zmin;
-                v[oe] = r * (float) Math.cos(i * dphi + hdphi);
-                v[oe + 1] = r * (float) Math.sin(i * dphi + hdphi);
-                v[oe + 2] = (float) zmax;
-            }
-
-            // Close the strip
-            for (int i = 0; i < 6; i++) {
-                v[i + v.length - 6] = v[i];
-            }
-
-            return v;
-        }
-
-        private float[] getEndTris(float z, float rmin, float rmax, int nv) {
-            float[] v = new float[3 * (nv * 2 + 2)];
-
-            float dphi = (2 * (float) Math.PI) / nv;
-            float hdphi = 0.5f * dphi;
-
-            for (int i = 0; i < nv; i++) {
-                int ie = i * 2 * 3;
-                int oe = (i * 2 + 1) * 3;
-                v[ie] = (float) rmin * (float) Math.cos(i * dphi);
-                v[ie + 1] = (float) rmin * (float) Math.sin(i * dphi);
-                v[ie + 2] = z;
-                v[oe] = (float) rmax * (float) Math.cos(i * dphi + hdphi);
-                v[oe + 1] = (float) rmax * (float) Math.sin(i * dphi + hdphi);
-                v[oe + 2] = z;
-            }
-
-            // Close the strip
-            for (int i = 0; i < 6; i++) {
-                v[i + v.length - 6] = v[i];
-            }
-
-            return v;
-        }
-    
-        
-        
-    public ANObjectGeomCalo() {
-
-    }
-
-    @Override
-    public int[] getPrimTypes()
-    {
-        return m_pt;
-    }
-
-    @Override
-    public float[][] getVertices()
-    {
-        return m_v;
-    }
-    
-    @Override
-    public ANColor getColor(int i) {
-        
-        if(m_color[i]==DRAW_LINE)
-            return new ANColor(0.0f, 0.0f, 0.0f, 1.0f);
-        else
-            return ANColor.getMapColor(m_color[i], 1.0f);
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomMuon.java b/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomMuon.java
deleted file mode 100644
index dd115cb360ac..000000000000
--- a/graphics/AtlantisJava/src/atlantis/nge/object/geometry/ANObjectGeomMuon.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package atlantis.nge.object.geometry;
-
-import atlantis.nge.object.*;
-import atlantis.nge.*;
-import atlantis.geometry.ABoxDetector;
-import java.util.ArrayList;
-import javax.media.opengl.GL;
-
-/**
- * Object that draws geometry of the muon system
- * 
- * @author Adam Davison, Mark Stockton
- */
-public class ANObjectGeomMuon extends ANObjectVL {
-
-    private float[][] m_v;
-    private int[] m_pt;
-    private int[] m_color;
-    
-    public ANObjectGeomMuon() {
-        setPickHandler(new ANPickHandlerSimple("Muon Spectrometer"));
-    }
-    
-    public ANObjectGeomMuon(ArrayList<ABoxDetector> m_boxes) {
-        setPickHandler(new ANPickHandlerSimple("Muon Spectrometer")); 
-        
-        m_pt = new int[2*m_boxes.size()];
-        m_v = new float[2*m_boxes.size()][];
-        m_color = new int[2*m_boxes.size()];
-        
-        for (int i = 0; i < m_boxes.size(); i++) {
-            ABoxDetector b = m_boxes.get(i);
-            m_pt[2*i] = GL.GL_TRIANGLE_STRIP;
-            m_v[2*i] = getBoxFaces((float)b.getZMin(), (float)b.getZMax(),
-                    (float)b.getRMin(), (float)b.getRMax(), (float)b.getPhi(),
-                    (float)b.getSize());
-            m_color[2*i]=b.getFillColor();
-            m_pt[2*i+1] = GL.GL_LINES;
-            m_v[2*i+1] = getBoxEdges((float)b.getZMin(), (float)b.getZMax(),
-                    (float)b.getRMin(), (float)b.getRMax(), (float)b.getPhi(),
-                    (float)b.getSize());
-            m_color[2*i+1]=DRAW_LINE;
-        }
-    }
-    
-        // This code answers the question, how do you wrap a strip of 14 triangles
-    // to form a cube?
-    private float[] getBoxFaces(float zmin, float zmax, float rmin, float rmax, float phi, float w) {
-        float[] v = new float[3*14];
-        
-        float sinPhi = (float)Math.sin(phi);
-        float cosPhi = (float)Math.cos(phi);
-        
-        float xmi = rmin*cosPhi;
-        float ymi = rmin*sinPhi;
-        float xmo = rmax*cosPhi;
-        float ymo = rmax*sinPhi;
-        float dx = -sinPhi*w/2.0f;
-        float dy = cosPhi*w/2.0f;
-        
-        v[0] = xmi + dx;
-        v[1] = ymi + dy;
-        v[2] = zmax;
-        
-        v[3] = xmi - dx;
-        v[4] = ymi - dy;
-        v[5] = zmax;
-        
-        v[6] = xmo + dx;
-        v[7] = ymo + dy;
-        v[8] = zmax;
-        
-        v[9] = xmo - dx;
-        v[10] = ymo - dy;
-        v[11] = zmax;
-        
-        v[12] = v[9];
-        v[13] = v[10];
-        v[14] = zmin;
-        
-        v[15] = v[3];
-        v[16] = v[4];
-        v[17] = v[5];
-        
-        v[18] = v[3];
-        v[19] = v[4];
-        v[20] = zmin;
-        
-        v[21] = v[0];
-        v[22] = v[1];
-        v[23] = zmin;
-        
-        v[24] = v[12];
-        v[25] = v[13];
-        v[26] = v[14];
-        
-        v[27] = v[6];
-        v[28] = v[7];
-        v[29] = zmin;
-        
-        v[30] = v[6];
-        v[31] = v[7];
-        v[32] = v[8];
-        
-        v[33] = v[21];
-        v[34] = v[22];
-        v[35] = v[23];
-        
-        v[36] = v[0];
-        v[37] = v[1];
-        v[38] = v[2];
-        
-        v[39] = v[3];
-        v[40] = v[4];
-        v[41] = v[5];
-        
-        return v;
-    }
-    
-    private float[] getBoxEdges(float zmin, float zmax, float rmin, float rmax, float phi, float w) {
-        float[] v = new float[3*12*2]; // 3d*12edges*2ends
-        
-        float sinPhi = (float)Math.sin(phi);
-        float cosPhi = (float)Math.cos(phi);
-        
-        float xmi = rmin*cosPhi;
-        float ymi = rmin*sinPhi;
-        float xmo = rmax*cosPhi;
-        float ymo = rmax*sinPhi;
-        float dx = -sinPhi*w/2.0f;
-        float dy = cosPhi*w/2.0f;
-        
-        v[0] = xmi + dx;
-        v[1] = ymi + dy;
-        v[2] = zmin;
-        
-        v[3] = xmi - dx;
-        v[4] = ymi - dy;
-        v[5] = zmin;
-        
-        v[6] = v[3];
-        v[7] = v[4];
-        v[8] = v[5];
-        
-        v[9] = xmo - dx;
-        v[10] = ymo - dy;
-        v[11] = zmin;
-        
-        v[12] = v[9];
-        v[13] = v[10];
-        v[14] = v[11];
-        
-        v[15] = xmo + dx;
-        v[16] = ymo + dy;
-        v[17] = zmin;
-        
-        v[18] = v[15];
-        v[19] = v[16];
-        v[20] = v[17];
-        
-        v[21] = v[0];
-        v[22] = v[1];
-        v[23] = v[2];
-        
-        for (int i = 24; i < 48; i++) {
-            if (i % 3 == 2) {
-                v[i] = zmax;
-            } else {
-                v[i] = v[i - 24];
-            }
-            
-        }
-        
-        v[48] = v[0];
-        v[49] = v[1];
-        v[50] = v[2];
-        
-        v[51] = v[0];
-        v[52] = v[1];
-        v[53] = zmax;
-        
-        v[54] = v[3];
-        v[55] = v[4];
-        v[56] = v[5];
-        
-        v[57] = v[3];
-        v[58] = v[4];
-        v[59] = zmax;
-        
-        v[60] = v[9];
-        v[61] = v[10];
-        v[62] = v[11];
-        
-        v[63] = v[9];
-        v[64] = v[10];
-        v[65] = zmax;
-        
-        v[66] = v[15];
-        v[67] = v[16];
-        v[68] = v[17];
-        
-        v[69] = v[15];
-        v[70] = v[16];
-        v[71] = zmax;
-        
-        return v;
-    }
-
-    @Override
-    public float[][] getVertices() {
-        return m_v;
-    }
-
-    @Override
-    public int[] getPrimTypes() {
-        return m_pt;
-    }
-
-    @Override
-    public ANColor getColor(int i) {
-        
-        if(m_color[i]==DRAW_LINE)
-            return new ANColor(0.0f, 0.0f, 0.0f, 1.0f);
-        else
-            return ANColor.getMapColor(m_color[i], 1.0f);
-
-    }
-    
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/output/AExceptionHandler.java b/graphics/AtlantisJava/src/atlantis/output/AExceptionHandler.java
deleted file mode 100755
index 7be2501d9e74..000000000000
--- a/graphics/AtlantisJava/src/atlantis/output/AExceptionHandler.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package atlantis.output;
-
-import javax.swing.JOptionPane;
-
-import atlantis.globals.AGlobals;
-
-/**
- * Handles an exception thrown in the AWT event-dispatch thread. If the system
- * property "sun.awt.exception.handler" is defined then when an exception occurs
- * in the AWT event-dispatch thread, the thread wii do the following: 1) Load
- * the class named by the value of that property, using the current thread's
- * context class loader, 2) Instantiate that class using its zero-argument
- * constructor, 3) Find the resulting handler object's "public void handle"
- * method, which should take a single argument of type "Throwable", and 4)
- * Invoke the handler's "handle" method, passing it the exception as an
- * argument.
- *
- * Note: The magic "sun.awt.exception.handler" property will be
- * removed in a future release.
- *
- * Comment: No wonder - centrally handling all exceptions is not a good idea
- * in the first place (S.B.)
- */
-
-public class AExceptionHandler {
-	private static final AGlobals globals = AGlobals.instance();
-	
-    public void handle(Throwable exception)
-    {
-        processException("AWT Event Dispatch Thread Exception:", exception);
-    }
-
-    public static void processException(String message, Throwable exception)
-    {
-        exception.printStackTrace();
-        showMessageDialog(message);
-    }
-
-    public static void processException(String type, String message)
-    {
-
-        if (type.equals("fatal")){
-            showMessageDialog(type + ": " + message + "\n");
-            System.exit(1);
-        }
-        AOutput.append(type + ": " + message + "\n", ALogInterface.BAD_COMMAND);
-    }
-
-    private static void showMessageDialog(String message)
-    {
-      //Do not show messages in headless mode
-      if(AGlobals.isAtlantisHeadless()) return;
-
-      //Do not show messages in demo mode
-      if (AGlobals.instance().isDemoMode()) return;
-
-      //Else show a message box with the exception
-      JOptionPane.showMessageDialog(globals.getGuiFrame(), message, "Atlantis", JOptionPane.ERROR_MESSAGE);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/output/ALogInterface.java b/graphics/AtlantisJava/src/atlantis/output/ALogInterface.java
deleted file mode 100644
index 3a3f416a71f5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/output/ALogInterface.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package atlantis.output;
-
-/**
- * Non-GUI-dependent interface for ALogPane.
- * 
- * @author waugh
- *
- */
-public interface ALogInterface {
-
-	public static final String TITLE = "TITLE";
-	public static final String NORMAL = "NORMAL";
-	public static final String NORMAL_BOLD = "NORMAL_BOLD";
-	public static final String COMMAND = "COMMAND";
-	public static final String BAD_COMMAND = "BAD_COMMAND";
-	public static final String PICK = "PICK";
-	public static final String WARNING = "WARNING";
-
-	void append(String s);
-
-	void append(String s, String style);
-
-	void clear();
-
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/output/AOutput.java b/graphics/AtlantisJava/src/atlantis/output/AOutput.java
deleted file mode 100755
index 4f5285cb5a55..000000000000
--- a/graphics/AtlantisJava/src/atlantis/output/AOutput.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package atlantis.output;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.ALogger;
-
-/**
- * AOutput provides access to the specific static instance of AMainLogPane which
- * is used for displaying general information within Atlantis
- * @author Adam Davison
- */
-public class AOutput
-{
-  //Handle to the main log pane  
-  private static ALogInterface outputPane;
-
-  /** Logger for when not outputting to the GUI (Minerva). */
-  private final static ALogger logger = ALogger.getLogger(AOutput.class);
-  
-  /** Append text to output pane/logger depending on output level. */
-  public static void append(String s, String style) { 
-	  if (outputPane==null) return; // in case not set yet, or no GUI
-	  if(AGlobals.instance().getSimpleOutput()>0){
-		  if (style.equals(ALogInterface.BAD_COMMAND) || style.equals(ALogInterface.WARNING)) {
-			  logger.warn(s);
-		  }else{
-			  logger.info(s);
-		  }
-	  }else{
-		  outputPane.append(s, style); 
-	  }
-  }
-  
-  /** Append text to output pane - only for pick info (and select event/debug info). */
-  public static void alwaysAppend(String s, String style) {
-	  if (outputPane==null) return; // in case not set yet, or no GUI
-	  outputPane.append(s, style);
-  }
-
-  /**
-   * Provide interface to the log pane in the GUI.
-   * @param outputDisplay the log pane
-   */
-  public static void setOutput(ALogInterface outputDisplay) {
-	  AOutput.outputPane = outputDisplay;
-  }
-
-  /**
-   * Get interface to the log pane in the GUI, if any.
-   * @param outputDisplay the log pane
-   */
-  public static ALogInterface getOutput() {
-	  return outputPane;
-  }   
-}
diff --git a/graphics/AtlantisJava/src/atlantis/package.html b/graphics/AtlantisJava/src/atlantis/package.html
deleted file mode 100644
index 9d160b36ad3a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head></head>
-<body>
-  Root package of the Atlantis application.
-  Contains main class Atlantis, whose purpose is to parse the command line,
-  initialise the application's main components and provide access to them.
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AAbstractParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AAbstractParameter.java
deleted file mode 100755
index 74401090c6e0..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AAbstractParameter.java
+++ /dev/null
@@ -1,913 +0,0 @@
-package atlantis.parameters;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPopupMenu;
-import javax.swing.LookAndFeel;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.gui.ACheckBox;
-import atlantis.gui.AParametersTable;
-import atlantis.output.AExceptionHandler;
-import atlantis.utils.AUtilities;
-
-/**
- * The class is used as a default implementation of the AParameter interface.
- * All parameters extend this class except ALinkParameter which implements
- * AParameter directly.
- */
-abstract class AAbstractParameter implements AParameter
-{
-    // range constants
-    protected final static int MIN = 0;
-    protected final static int MAX = 1;
-    protected final static int SVAL = 2;
-    
-    // unitsOf constants
-    protected final static int NOTHING = 0;
-    protected final static int LENGTH = 1;
-    protected final static int ENERGY = 2;
-    protected final static int ENERGYMEV = 3;
-    
-    /**
-     * List of listeners/observers to be informed of changes to parameters.
-     * Currently this is just the GUI, which repaints its tables when a parameter
-     * changes.
-     */
-    private List<AParameterChangeListener> parameterChangeListeners = new ArrayList<AParameterChangeListener>();
-    
-    /** The internal name of the parameter. */
-    protected String name;
-    /** The name which is displayed in the user interface. */
-    protected String screenName;
-    /** Tool tip, i.e. text that appears when mouse hovers over control. */
-    protected String toolTip;
-    
-    protected boolean hasStatus;
-    protected int valueType;
-    protected int scope;
-    protected int defaultScope;
-    protected boolean isModulus;
-    protected int userLevel;
-    protected int unitsOf;
-    protected String[] operators;
-    /** Allowed values for this parameter:
-     *    range[MIN][i] and range[MAX][i] are the limits of the i'th range;
-     *    range[SVAL][j] is the j'th allowed single value. */
-    protected double[][] range;
-    
-    private ACheckBox nameLabel;
-    private JLabel label;
-    private boolean isInitialized = false;
-
-    /** The number of windows in the canvas. */
-    protected int wCount = 0; // initialised later in constructor
-
-    /** Contains the values for each window. */
-    protected AParameterData data;
-
-	@Override
-	public void addParameterChangeListener(AParameterChangeListener listener) {
-		parameterChangeListeners.add(listener);		
-	}
-
-	public AAbstractParameter(String name, String screenName, String toolTip, 
-            int valueType, double value, String op, String dop, 
-            boolean haseStatus, boolean status, boolean isMod, int userLevel, 
-            int scope, int unitsOf)
-    {
-        // initialising wCount
-        // for running without Canvas (e.g. calling geometry methods from GraXML),
-        // this may run without Canvas initialised
-        // check if Canvas actually exists
-        // dependency of AAbstractParameter on ACanvas should be revised, this
-        // current solution is not very elegant
-        ACanvas canvas = ACanvas.getCanvas();
-        this.wCount = canvas == null ? 0 : canvas.getWindowsCount();
-        
-        this.isModulus = isMod;
-        this.unitsOf = unitsOf;
-        
-        if (!screenName.trim().equals(""))
-            this.screenName = screenName;
-        else
-            this.screenName = name;
-        
-        if (isMod)
-            this.screenName = "|" + this.screenName + "|";
-        
-        // removing spaces from the parameter name
-        StringBuffer strBuffer = new StringBuffer(name);
-        int i = 0;
-        
-        while (i < strBuffer.length())
-        {
-            if (Character.isWhitespace(strBuffer.charAt(i)))
-                strBuffer.deleteCharAt(i);
-            else
-                i++;
-        }
-        this.name = strBuffer.toString();
-        
-        if ((toolTip == null) || (toolTip.trim().length() == 0))
-            this.toolTip = this.screenName;
-        else
-            this.toolTip = toolTip;
-        
-        this.hasStatus = haseStatus;
-        this.valueType = valueType;
-        
-        // set up the local window copies
-        this.data = new AParameterData(wCount);
-        
-        for (i = 0; i < wCount; i++)
-        {
-            this.data.setValue(i, value);
-            this.data.setStatus(i, status);
-        }
-        
-        // decompose supportedOperators
-        if ((op == null) || (op.trim().equals("")))
-        {
-            this.operators = new String[1];
-            operators[0] = "=";
-        }
-        else
-        {
-            String[] tempOperators = new String[10];
-            
-            int operatorsCount = 0;
-            StringTokenizer st = new StringTokenizer(op, ",");
-            
-            while (st.hasMoreTokens())
-            {
-                String oper = st.nextToken().trim();
-                
-                if (isKnownOperator(oper))
-                {
-                    tempOperators[operatorsCount] = oper;
-                    operatorsCount++;
-                }
-                else
-                    throw new Error("Unknown operator: " + oper);
-            }
-            
-            this.operators = new String[operatorsCount];
-            for (i = 0; i < operatorsCount; i++)
-                this.operators[i] = tempOperators[i];
-        }
-        
-        if ((dop == null) || (dop.trim().equals("")))
-            for (i = 0; i < wCount; i++)
-                this.data.setOperator(i, operators[0]);
-        else
-            for (i = 0; i < wCount; i++)
-                this.data.setOperator(i, dop);
-        
-        this.userLevel = userLevel;
-        setScope(scope);
-        saveDefaults();
-    }
-    
-    public void saveDefaults()
-    {
-    	this.data.saveDefaults();
-        this.defaultScope = this.scope;
-    }
-    
-    public void restoreDefaults()
-    {
-    	this.data.restoreDefaults();
-        changeScope(this.defaultScope);
-    }
-    
-    /**
-     * This method is called to apply the change in the value of the parameter
-     */
-    public void apply()
-    {
-        if (getScope() == LOCAL)
-            ACommandProcessor.receive("DO");
-        else
-            ACanvas.getCanvas().repaintAllFromScratch();
-    }
-    
-    /**
-     * Called by the User Interface in order to initialize the graphics of the
-     * parameter (if it will be displayed in the UI).
-     */
-    public void initialize()
-    {
-        if (hasStatus)
-        {
-            nameLabel = new ACheckBox(screenName);
-            nameLabel.setSelected(getStatus());
-            nameLabel.setBackground(new Color(204, 204, 204));
-            if (getScope() == LOCAL)
-                setForeground(Color.black);
-            else
-                setForeground(Color.blue);
-            
-            nameLabel.setToolTipText(toolTip);
-            nameLabel.addActionListener(new ActionListener()
-                    {
-                public void actionPerformed(ActionEvent e)
-                {
-                    ACommandProcessor.receive(name);
-                    apply();
-                }
-                    });
-            
-            // after the first left click at the table in the parameter tabbed
-            // pane, all the followingmouse mouse event will be catched by the
-            // mouselisteners of those components inside the table cells, not 
-            // the table itself, so in order for the local/global
-            // switch (right click to change) to always work, have to add mouse
-            // listeners to these components as well.
-            nameLabel.addMouseListener(new MouseAdapter()
-                    {
-                public void mousePressed(MouseEvent e)
-                {
-                    if (AUtilities.isRightMouseButton(e))
-                    {
-                        JPopupMenu popupMenu = new JPopupMenu();
-                        if (getScope() == AParameter.LOCAL)
-                        {
-                            popupMenu.add(AParametersTable.SET_GLOBAL).addActionListener(new ActionListener()
-                                    {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    changeScope(AParameter.GLOBAL);
-                                    refresh();
-                                }
-                                    });
-                        }
-                        else
-                        {
-                            popupMenu.add(AParametersTable.SET_LOCAL).addActionListener(new ActionListener()
-                                    {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    changeScope(AParameter.LOCAL);
-                                    refresh();
-                                }
-                                    });
-                        }
-                        popupMenu.show(nameLabel, e.getX(), e.getY());
-                    }
-                }
-                    });
-        }
-        else
-        {
-            label = new JLabel(screenName);
-            if (getScope() == LOCAL)
-                setForeground(Color.black);
-            else
-                setForeground(Color.blue);
-            
-            // after the first left click at the table in the parameter tabbed
-            // pane, all the followingmouse mouse event will be catched by the
-            // mouselisteners of those components inside the table cells, not 
-            // the table itself, so in order for the local/global
-            // switch (right click to change) to always work, have to add mouse
-            // listeners to these components as well.
-            label.addMouseListener(new MouseAdapter()
-                    {
-                public void mousePressed(MouseEvent e)
-                {
-                    if (AUtilities.isRightMouseButton(e))
-                    {
-                        JPopupMenu popupMenu = new JPopupMenu();
-                        if (getScope() == AParameter.LOCAL)
-                        {
-                            popupMenu.add(AParametersTable.SET_GLOBAL).addActionListener(new ActionListener()
-                                    {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    changeScope(AParameter.GLOBAL);
-                                    refresh();
-                                }
-                                    });
-                        }
-                        else
-                        {
-                            popupMenu.add(AParametersTable.SET_LOCAL).addActionListener(new ActionListener()
-                                    {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    changeScope(AParameter.LOCAL);
-                                    refresh();
-                                }
-                                    });
-                        }
-                        popupMenu.show(label, e.getX(), e.getY());
-                    }
-                }
-                    });
-            label.setOpaque(true);
-            label.setToolTipText(toolTip);
-            LookAndFeel.installColorsAndFont(label, "CheckBox.background", "CheckBox.foreground", "CheckBox.font");
-        }
-        
-        isInitialized = true;
-    }
-    
-    public boolean isInitialized()
-    {
-        return this.isInitialized;
-    }
-    
-    /**
-     * Copies from one window to another the value of the parameter
-     */
-    public void copy(int from, int to)
-    {
-    	data.copy(from,to);
-    }
-    
-    /**
-     * This function is called for GLOBAL parameters to apply the value in all
-     * windows.
-     */
-    public void globalize(int window)
-    {
-    	data.globalize(window);
-    }
-    
-    public void setScope(int scope)
-    {
-        this.scope = scope;
-        if (scope == LOCAL)
-            setForeground(Color.black);
-        else
-            setForeground(Color.blue);
-    }
-    
-    public void changeScope(int scope)
-    {
-        if (scope != this.scope)
-        {
-            this.scope = scope;
-            if (scope == LOCAL)
-                setForeground(Color.black);
-            else
-            {
-                setForeground(Color.blue);
-                data.globalize();
-                ACanvas.getCanvas().repaintAllFromScratch();
-            }
-        }
-    }
-    
-    public int getScope()
-    {
-        return scope;
-    }
-    
-    public String getName()
-    {
-        return name;
-    }
-    
-    public String getScreenName()
-    {
-        return screenName;
-    }
-    
-    public String getToolTip()
-    {
-        return toolTip;
-    }
-    
-    // public String getOperator() { return operator; }
-    public boolean isModulus()
-    {
-        return isModulus;
-    }
-    
-    public int getValueType()
-    {
-        return valueType;
-    }
-    
-    public String getOperator()
-    {
-        return data.getOperator();
-    }
-    
-    protected void _setOperator(String oper)
-    {
-        // if (!validateValue(v))
-        // throw new Error("Value " + v + " for parameter " + screenName + " is
-        // out of range ");
-        data.setOperator(oper);
-        if (scope == GLOBAL) data.globalize();
-    }
-    
-    protected void _setOperator(String windowName, String oper)
-    {
-        if (scope == GLOBAL || windowName.equals("*")) {
-            data.setOperator(oper);
-            data.globalize();
-        } else {
-            data.setOperator(ACanvas.getCanvas().getWindow(windowName).getIndex(), oper);
-        }
-    }
-    
-    protected void _setValue(String windowName, double val)
-    {
-        if (scope == GLOBAL || windowName.equals("*")) {
-            data.setValue(val);
-            data.globalize();
-        } else {
-            data.setValue(ACanvas.getCanvas().getWindow(windowName).getIndex(), val);
-        }
-    }
-    
-    protected void _setStatus(String windowName, boolean stat)
-    {
-        if (scope == GLOBAL || windowName.equals("*")) {
-            data.setStatus(stat);
-            data.globalize();
-        } else {
-            data.setStatus(ACanvas.getCanvas().getWindow(windowName).getIndex(), stat);
-        }
-    }
-    
-    /**
-     * _setD and _setI are used by subclasses when changing the values of
-     * parameters.
-     */
-    protected void _setD(double v)
-    {
-        if (!validateValue(v))
-            throw new Error("Value " + v + " for parameter " + screenName + " is out of range ");
-        data.setValue(v);
-        if (scope == GLOBAL) data.globalize();
-    }
-    
-    protected void _setI(int v)
-    {
-        if (!validateValue(v))
-            throw new Error("Value " + v + " for parameter " + screenName + " is out of range ");
-        data.setValue(v);
-        if (scope == GLOBAL) data.globalize();
-    }
-    
-    public double getD()
-    {
-        if (valueType != FLOAT)
-            throw new Error("getD acces on not FLOAT parameter");
-        return data.getValue();
-    }
-    
-    public int getI()
-    {
-        if (valueType != INT)
-            throw new Error("getI acces on not INT parameter");
-        return (int) data.getValue();
-    }
-    
-    public String getValue()
-    {
-        if (valueType == FLOAT)
-            return Double.toString(data.getValue());
-        else
-            return Integer.toString((int) data.getValue());
-    }
-    
-    public void setStatus(boolean st)
-    {
-        if (!hasStatus)
-            throw new Error("Parameter has no status");
-        data.setStatus(st);
-        if (scope == GLOBAL) data.globalize();
-        
-        refresh();
-        fireParameterChanged();
-    }
-    
-    public boolean getStatus()
-    {
-        if (!hasStatus)
-            throw new Error("Parameter hase no status");
-        
-        return data.getStatus();
-    }
-    
-    public JComponent getNameComponent()
-    {
-        if (hasStatus)
-            return nameLabel;
-        else
-            return label;
-    }
-    
-    public JComponent getValueComponent()
-    {
-        return new JLabel("error");
-    }
-    
-    protected void _refresh()
-    {
-        if (hasStatus)
-            if (nameLabel != null)
-                nameLabel.setSelected(getStatus());
-    }
-    
-    /**
-     * Parses the PossibleValues string and returns the double[][] containing
-     * the range of this parameter.
-     */
-    protected static double[][] resolvePossibleValues(String possibleValues, int type)
-    {
-        double[][] range = new double[3][100];
-        int valCount = 0;
-        int rangeCount = 0;
-        StringTokenizer st = new StringTokenizer(possibleValues, ",");
-        String sval;
-        double val = 0;
-        
-        while (st.hasMoreTokens())
-        {
-            String token = st.nextToken().trim();
-            StringTokenizer st1 = new StringTokenizer(token, ":");
-            
-            switch (st1.countTokens())
-            {
-                case 1:
-                    sval = st1.nextToken().trim();
-                    try
-                    {
-                        if (type == FLOAT)
-                            val = Double.parseDouble(sval);
-                        else if (type == INT)
-                            val = Integer.parseInt(sval);
-                        range[SVAL][valCount] = val;
-                        valCount++;
-                    }
-                    catch (NumberFormatException nfe)
-                    {
-                        AExceptionHandler.processException("Corrupt Possible Value: " + sval, nfe);
-                    }
-                    break;
-                    
-                case 2:
-                    for (int i = 0; i < 2; i++)
-                    {
-                        sval = st1.nextToken().trim();
-                        try
-                        {
-                            if (type == FLOAT)
-                                val = Double.parseDouble(sval);
-                            else if (type == INT)
-                                val = Integer.parseInt(sval);
-                        }
-                        catch (NumberFormatException nfe)
-                        {
-                            if (sval.equals("inf"))
-                                val = Double.POSITIVE_INFINITY;
-                            else if (sval.equals("-inf"))
-                                val = Double.NEGATIVE_INFINITY;
-                            else
-                                AExceptionHandler.processException("Corrupt Possible Range: (" + token + ")", nfe);
-                        }
-                        range[i][rangeCount] = val;
-                    }
-                    rangeCount++;
-                    break;
-                    
-                default:
-                    AExceptionHandler.processException("fatal", "Corrupt \"pv\" definition: \"" + possibleValues + "\"");
-                break;
-            }
-        }
-        
-        double[] min = new double[rangeCount];
-        double[] max = new double[rangeCount];
-        
-        for (int i = 0; i < rangeCount; i++)
-            if (range[MIN][i] <= range[MAX][i])
-            {
-                min[i] = range[MIN][i];
-                max[i] = range[MAX][i];
-            }
-            else
-                throw new Error("Bad range definiton: (" + range[0][i] + ":" + range[1][i] + ")");
-        
-        double[] v = new double[valCount];
-        
-        for (int i = 0; i < valCount; i++)
-            v[i] = range[SVAL][i];
-        
-        range[MIN] = min;
-        range[MAX] = max;
-        range[SVAL] = v;
-        return range;
-    }
-    
-    protected static int[] getValues(String possibleValues)
-    {
-        int[] pVal = new int[100];
-        int[] range = new int[2];
-        int i, valCount = 0;
-        String token;
-        StringTokenizer st, st1;
-        
-        st = new StringTokenizer(possibleValues, ",");
-        while (st.hasMoreTokens())
-        {
-            token = st.nextToken().trim();
-            st1 = new StringTokenizer(token, ":");
-            switch (st1.countTokens())
-            {
-                case 1:
-                    try
-                    {
-                        pVal[valCount++] = Integer.parseInt(st1.nextToken().trim());
-                    }
-                    catch (NumberFormatException nfe)
-                    {
-                        AExceptionHandler.processException("Corrupt Possible Value", nfe);
-                    }
-                    break;
-                    
-                case 2:
-                    for (i = 0; i < 2; i++)
-                        try
-                    {
-                            range[i] = Integer.parseInt(st1.nextToken().trim());
-                    }
-                    catch (NumberFormatException nfe)
-                    {
-                        AExceptionHandler.processException("fatal", "error in range definition");
-                    }
-                    
-                    if (range[0] <= range[1])
-                        for (i = range[0]; i <= range[1]; i++)
-                            pVal[valCount++] = i;
-                    break;
-                    
-                default:
-                    AExceptionHandler.processException("fatal", "Corrupt range definition: \"" + possibleValues + "\"");
-            }
-        }
-        
-        int[] pValFinal = new int[valCount];
-        
-        for (i = 0; i < valCount; i++)
-            pValFinal[i] = pVal[i];
-        
-        return pValFinal;
-    }
-    
-    public boolean processCommand(String oper, double v)
-    {
-        // first I validate the operator and the value
-        if (!validateOperator(oper))
-            return false;
-        if (!validateValue(v))
-            return false;
-        
-        if (valueType == FLOAT)
-            _setD(v);
-        else
-            _setI((int) v);
-        
-        _setOperator(oper);
-        
-        refresh();
-        fireParameterChanged();
-
-        return true;
-    }
-    
-    public boolean validateValue(double v)
-    {
-        if (range[SVAL] != null)
-            for (int i = 0; i < range[SVAL].length; i++)
-                if (v == range[SVAL][i])
-                    return true;
-        
-        if (range[MIN] != null)
-            for (int i = 0; i < range[MIN].length; i++)
-                if ((v >= range[MIN][i]) && (v <= range[MAX][i]))
-                    return true;
-        
-        return false;
-    }
-    
-    public boolean validateOperator(String oper)
-    {
-        for (int i = 0; i < operators.length; i++)
-            if (oper.equals(operators[i]))
-                return true;
-        
-        return false;
-    }
-    
-    public int getUserLevel()
-    {
-        return userLevel;
-    }
-    
-
-    public String toString()
-    {
-        StringBuilder s = new StringBuilder(screenName + ": ");
-        
-        if (scope == GLOBAL)
-            s.append("GLOBAL");
-        else if (scope == LOCAL)
-            s.append("LOCAL");
-        
-        s.append("[");
-        
-        // for running without Canvas (e.g. calling geometry methods from GraXML),
-        // this may run without Canvas initialised
-        // check if Canvas actually exists
-        // dependency of AAbstractParameter on ACanvas should be revised, this
-        // current solution is not very elegant
-        ACanvas canvas = ACanvas.getCanvas();
-        String[] wName = canvas == null ? new String[0] : canvas.getKnownWindowNames();
-        
-        for (int i = 0; i < wName.length; i++)
-        {
-            AWindow w = ACanvas.getCanvas().getWindow(wName[i]);
-            
-            s.append(wName[i] + ": " + data.getValue(w.getIndex()) + ": ");
-        }
-        
-        return s.toString() + "]" + " :" + toolTip + ":";
-    }
-
-    
-    private final void setForeground(Color color)
-    {
-        if (getNameComponent() != null)
-            getNameComponent().setForeground(color);
-    }
-    
-    public String getDifferences(String groupName)
-    {
-        StringBuffer b = new StringBuffer();
-        String[] windowNames = ACanvas.getCanvas().getKnownWindowNames();
-        int[] inverse = new int[windowNames.length];
-        for (int i = 0; i < windowNames.length; i++)
-            inverse[ACanvas.getCanvas().getWindow(windowNames[i]).getIndex()] = i;
-        
-        for (int i = 0; i < wCount; ++i)
-        {
-            if (data.getStatus() != data.getStatus(i) || !data.getOperator().equals(data.getOperator(i)) || data.getValue() != data.getValue(i))
-            {
-                
-                b.append("\t\t<DIFFERENCE group=\"" + groupName + "\" name=\"" + getName() + "\" windowName=\"" + windowNames[inverse[i]] + "\"");
-                
-                if (data.getValue() != data.getValue(i))
-                    b.append(" va=\"" + data.getValue(i) + "\"");
-                if (data.getStatus() != data.getStatus(i))
-                {
-                    if (data.getStatus(i))
-                        b.append(" st=\"ON\"");
-                    else
-                        b.append(" st=\"OFF\"");
-                }
-                if (!data.getOperator().equals(data.getOperator(i)))
-                    b.append(" op=\"" + data.getOperator(i) + "\"");
-                b.append("/>\n");
-            }
-        }
-        return b.toString();
-    }
-    
-    protected double parseUnitsDouble(String text)
-    {
-        // units shown are cm
-        if (unitsOf == LENGTH)
-        {
-            if (text.endsWith("MM") || text.endsWith("mm"))
-                return 0.1 * Double.parseDouble(text.substring(0, text.length() - 2));
-            if (text.endsWith("CM") || text.endsWith("cm"))
-                return Double.parseDouble(text.substring(0, text.length() - 2));
-            if (text.endsWith("UM") || text.endsWith("um"))
-                return 0.0001 * Double.parseDouble(text.substring(0, text.length() - 2));
-            else if (text.endsWith("M") || text.endsWith("m"))
-                return 100. * Double.parseDouble(text.substring(0, text.length() - 1));
-            else
-                return Double.parseDouble(text.substring(0, text.length()));
-        }
-        else if (unitsOf == ENERGY)
-        {
-            if (text.endsWith("GeV") || text.endsWith("gev") || text.endsWith("GEV"))
-                return Double.parseDouble(text.substring(0, text.length() - 3));
-            else if (text.endsWith("MeV") || text.endsWith("mev") || text.endsWith("MEV"))
-                return .001 * Double.parseDouble(text.substring(0, text.length() - 3));
-            else
-                return Double.parseDouble(text);
-        }
-        else if (unitsOf == ENERGYMEV)
-        {
-            if (text.endsWith("MeV") || text.endsWith("mev") || text.endsWith("MEV"))
-                return Double.parseDouble(text.substring(0, text.length() - 3));
-            else if (text.endsWith("KeV") || text.endsWith("kev") || text.endsWith("KEV"))
-                return .001 * Double.parseDouble(text.substring(0, text.length() - 3));
-            else if (text.endsWith(" eV") || text.endsWith(" ev") || text.endsWith(" EV"))
-                return .000001 * Double.parseDouble(text.substring(0, text.length() - 3));
-            else
-                return Double.parseDouble(text);
-        }
-        else
-        {
-            return Double.parseDouble(text);
-        }
-    }
-    
-    protected String parseUnits(double d)
-    {
-        // units shown are cm
-        double abs = Math.abs(d);
-        if (unitsOf == LENGTH)
-        {
-            if (abs >= 100.)
-                return "" + trim(d, 100.) + " m";
-            else if (abs >= 1.)
-                return "" + trim(d, 1.) + " cm";
-            else if (abs >= 0.1)
-                return "" + trim(d, 0.1) + " mm";
-            else
-                return "" + trim(d, 0.0001) + " um";
-        }
-        else if (unitsOf == ENERGY)
-        {
-            if (abs >= 1.)
-                return "" + trim(d, 1.) + " GeV";
-            else
-                return "" + trim(d, 0.001) + " MeV";
-        }
-        else if (unitsOf == ENERGYMEV)
-        {
-            if (abs >= 1.)
-                return "" + trim(d, 1.) + " MeV";
-            else if(abs >=0.001)
-                return "" + trim(d, 0.001) + " KeV";
-            else
-                return "" + trim(d, 0.000001) + " eV";
-        }
-        else
-        {
-            return "" + trim(d, 1.);
-        }
-    }
-    
-    private String trim(double d, double factor)
-    {
-        // only display with 3 significant digits
-        if (unitsOf == LENGTH && Math.abs(d) < .1)
-            return "" + Math.rint(d / factor);
-        else if (unitsOf == ENERGY && Math.abs(d) < 1.)
-            return "" + Math.rint(d / factor);
-        else if (unitsOf == ENERGYMEV && Math.abs(d) < 1.)
-            return "" + Math.rint(d / factor);
-        else
-            return "" + Math.rint(1000. * d / factor) / 1000.;
-    }
-    
-    public ACheckBox getCheckBox()
-    {
-        return this.nameLabel;
-    }
-    
-    /**
-     * Check if a given operator is one of the allowed supportedOperators.
-     * @param oper the operator to check
-     * @return true if this is a known operator
-     */
-    protected static boolean isKnownOperator(String oper) 
-    {
-        for(int i=0; i<AParameter.supportedOperators.length; i++)
-            if(oper.equals(AParameter.supportedOperators[i]))
-                return true;
-        
-        return false;
-    }
-
-	/**
-	 * Tell the listeners that a parameter has changed.
-	 */
-	protected void fireParameterChanged() {
-		for (AParameterChangeListener listener : parameterChangeListeners) {
-			listener.parameterChanged(this);
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AColorParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AColorParameter.java
deleted file mode 100755
index 34972e6e1891..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AColorParameter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package atlantis.parameters;
-
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import javax.swing.JComponent;
-
-import atlantis.gui.AColorComboBoxRenderer;
-import atlantis.gui.AComboBox;
-
-/**
- * A parameter representing a selectable colour.
- */
-public class AColorParameter extends AAbstractParameter {
-  private AComboBox colorComboBox;
-
-  public AColorParameter(
-      String name, String screenName, String toolTip, String pv, double value,
-      boolean haseStatus, boolean status, int userLevel, int scope) {
-
-    super(name, screenName, toolTip, INT, value, null, null, haseStatus, status, false, userLevel,
-        scope, NOTHING);
-
-    range=resolvePossibleValues(pv, INT);
-    if((range[SVAL]==null)&&(range[MIN]==null)) {
-      range[MIN]=new double[] {0};
-      range[MAX]=new double[] {29};
-    }
-
-  }
-
-  public void setD(double v) {
-    throw new IllegalArgumentException("is not allowed to use setD on ColorParameter");
-  }
-
-  public void setI(int v) {
-    if(colorComboBox!=null)
-      colorComboBox.setGUISelectedItem(new Integer(v));
-
-    _setI(v);
-    refresh();
-    fireParameterChanged();
-  }
-
-  public void initialize() {
-    super.initialize();
-    colorComboBox=new AComboBox();
-    colorComboBox.setRenderer(new AColorComboBoxRenderer());
-    colorComboBox.setToolTipText(toolTip);
-
-    int i, j;
-
-    for(i=0; i<range[SVAL].length; i++) {
-      int color=(int)range[SVAL][i];
-
-      if((color>=0)&&(color<=29))
-        colorComboBox.addItem(new Integer(color));
-    }
-
-    for(i=0; i<range[MIN].length; i++) {
-      int color1=(int)range[MIN][i];
-      int color2=(int)range[MAX][i];
-
-      if((color1>=0)&&(color1<=29)&&(color2>=0)&&(color2<=29))
-        for(j=color1; j<=color2; j++)
-          colorComboBox.addItem(new Integer(j));
-    }
-
-    colorComboBox.setGUIItemListener(new ItemListener() {
-      public void itemStateChanged(ItemEvent e) {
-        if(e.getStateChange()==ItemEvent.SELECTED) {
-          int color=((Integer)colorComboBox.getSelectedItem()).intValue();
-
-          ACommandProcessor.receive(name+"="+color);
-          apply();
-        }
-      }
-    });
-
-    colorComboBox.setGUISelectedItem(new Integer(getI()));
-  }
-
-  public JComponent getValueComponent() {
-    return colorComboBox;
-  }
-
-  public void refresh() {
-    _refresh();
-    if(colorComboBox!=null)
-      colorComboBox.setGUISelectedItem(new Integer(getI()));
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/ACommand.java b/graphics/AtlantisJava/src/atlantis/parameters/ACommand.java
deleted file mode 100755
index 1ae57ad8ffcf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/ACommand.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package atlantis.parameters;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JButton;
-
-/**
- * This class is a GUI representation of a command button.
- * It just generates the corresponding command when pressed.
- */
-public class ACommand extends JButton {
-  private String command;
-
-  ACommand(String name, String _command, String toolTip) {
-    super(name);
-
-    this.command=_command;
-
-    setToolTipText(toolTip);
-    addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        ACommandProcessor.receive(command);
-      }
-    });
-  }
-
-  public String getName() {
-    return getText();
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/ACommandProcessor.java b/graphics/AtlantisJava/src/atlantis/parameters/ACommandProcessor.java
deleted file mode 100755
index 9c023708c66c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/ACommandProcessor.java
+++ /dev/null
@@ -1,451 +0,0 @@
-package atlantis.parameters;
-
-import java.util.Vector;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.event.AEventManager;
-import atlantis.event.AFilter;
-import atlantis.data.AS3DData;
-import atlantis.data.ATrackData;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.projection.AProjection;
-import atlantis.utils.ALogger;
-
-/**
- * (almost?) All actions on the GUI generate a command (which is basically a
- * text string) which is passed to the command processor which performs the
- * actions associated with that command. This should allow a simple
- * implementation of scripting and logging
- *
- * NOTE: This design has been dramatically neglected in the past and should
- *       probably be revised (Sebastian Boeser, 06.10.09)
- */
-
-public class ACommandProcessor
-{
-    private static ALogger logger = ALogger.getLogger(ACommandProcessor.class);
-    private static AEventManager eventManager = AEventManager.instance();
-    
-    private static String legoLayoutName ="";
-    private static String[] legoWindowNames = {"current", "W", "1", "2", "3", "4"};
-    private final static String[] legoStatusParameterNames = {"DrawPlot", "MainLegend", "L1EtLegend", "L1Items", "L2Items", "EFItems"};
-    private final static String[] legoIntParameterNames = {"Mode", "nphicells", "netacells"};
-    private final static String[] legoCaloParameterNames = {"LAr", "TILE", "FCAL", "MBTS"};
-    private static boolean[][] legoStatusParameter = new boolean[6][6];
-    private static int[][] legoIntParameter = new int[6][3];
-    private static boolean[][] legoCaloParameter = new boolean[2][4];
-    
-    private static APar parameterStore = APar.instance();
-
-    /**
-     * While this is called receive, it is actually just a small wrapper to
-     * processes a command and at the same time log it
-     * @param command the command to process
-     */
-    public synchronized static void receive(String command)
-    {
-      //In debug mode show the command
-      logger.debug("ACommandProcessor.receive(): " + command);
-      //In trace mode show also who called this
-      logger.trace("Calling hierarchy",new Exception());
-
-      //Now process the command
-      boolean status = process(command);
-
-      //And log the result
-      logger.debug( ((status)?"  success: ":"   bad command:") + command);
-
-    }
-
-
-
-    private synchronized static boolean process(String c)
-    {
-
-        if (processGlobal(c))
-        {
-            return true;
-        }
-
-        AProjection p = ACanvas.getCanvas().getCurrentWindow().getProjection();
-        // projection dependent command could be processed here
-        if (p.processLocalCommand(c))
-        {
-            return true;
-        }
-
-        if (parameterStore.processParameterChangeCommand(c))
-        {
-            return true;
-        }
-
-        return false;
-    }
-
-    // used for checking all command are implemented
-    private synchronized static boolean found(int mode, String name, String command)
-    {
-        if (mode != 0)
-        {
-            logger.warn("Command not found: " + command);
-            return false;
-        }
-        if (name.equals(command))
-            return true;
-        return false;
-    }
-
-    private synchronized static boolean foundWindow(int mode, String name, String command)
-    {
-        if (mode != 0)
-        {
-            String[] windowNames = ACanvas.getCanvas().getKnownWindowNames();
-
-            for (int i = 0; i < windowNames.length; ++i)
-                logger.debug(command + windowNames[i]);
-            return false;
-        }
-
-        if (name.substring(0, name.length() - 1).equals(command))
-            if (ACanvas.getCanvas().isValidWindowName(name.substring(name.length() - 1)))
-                if (ACanvas.getCanvas().getWindow(name.substring(name.length() - 1)) != null)
-                    return true;
-        return false;
-    }
-
-    private synchronized static boolean processGlobal(String c)
-    {
-        return processGlobal(c, 0);
-    }
-
-    private static void getGlobalCommands()
-    {
-        processGlobal("GARY", 1);
-    }
-
-    private static boolean processZoomTrack(String name, int mode)
-    {
-        ATrackData tr = null;
-
-        // check if STr (Simulated Track) Zoom Next Track was pressed
-        if(found(mode, name, "ZOOMNEXTSTR"))
-        {
-            tr = eventManager.getCurrentEvent().getSTrData();
-        }
-        // check if Track (InDetTrack) Zoom Next Track was pressed
-        else if(found(mode, name, "ZOOMNEXTTRACK"))
-        {
-            AEnumeratorParameter listBox = null;
-            listBox = (AEnumeratorParameter) parameterStore.get("InDetTrack", "InDetTrackCollections");
-            String col = listBox.getCurrentText();
-            if("All".equals(col))
-            {
-                String msg = "Choose a particular Track collection, " +
-                             "can't zoom next track when 'All' is selected.\n";
-                AOutput.alwaysAppend(msg, ALogInterface.WARNING);
-                return false;
-            }
-            else
-            {
-                tr = eventManager.getCurrentEvent().getTrackData("InDetTrack", col);
-            }
-        }
-
-        if(tr == null)
-        {
-            // STr or Track of requested collection doesn't exits in this event
-            return false;
-        }
-
-        // check if the datatype where Zoom Next Track was pressed is actually
-        // turned on and thus visible
-        if(! parameterStore.get("Data", tr.getName()).getStatus())
-        {
-            AOutput.alwaysAppend("Can't zoom next track, " + tr.getNameScreenName() +
-                           " is turned off.\n", ALogInterface.WARNING);
-            return false;
-        }
-
-        AParameter nextTrPar = parameterStore.get(tr.getName(), "NextTrack");
-        nextTrPar.setStatus(true);
-        nextTrPar.setI(nextTrPar.getI() + 1);
-        tr.zoomAroundTracks();
-        ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-
-        AOutput.alwaysAppend(tr.getNameScreenName() + " -> Next Track cut active now.\n",
-                       ALogInterface.WARNING);
-
-        return true;
-
-    } // processZoomTrack()
-    // ---------------------------------------------------
-
-    private synchronized static boolean processGlobal(String name, int mode)
-    {
-        // is this a group in the parameter file ?
-        Vector<String> groups = parameterStore.getUIGroupNames();
-        for (int i = 0; i < groups.size(); ++i)
-        {
-            String groupName = groups.elementAt(i);
-            if (found(mode, name, groupName + "."))
-            {
-                ACanvas.getCanvas().getCurrentWindow().setGroup(groupName);
-                return true;
-            }
-        }
-
-        if(found(mode, name, "SETORIGINALPRIMARYVERTEX"))
-        {
-            eventManager.getCurrentEvent().setPrimaryVertex();
-            ACanvas.getCanvas().repaintAllFromScratch();
-        }
-
-
-        if (found(mode, name, "LEGOTRIGGER"))
-        {
-            processLegoTrigger();
-            return true;
-        }
-
-        if (found(mode, name, "RETURNLEGOTRIGGER"))
-        {
-            if(legoLayoutName.equals(""))
-            {
-                AOutput.append("No trigger debugging to return from\n", ALogInterface.NORMAL);
-                return true;
-            }
-            
-            returnLegoTrigger();
-            return true;
-        }
-
-        if (found(mode, name, "PREVSECTOR"))
-        {
-            AParameter phi = parameterStore.get("YZ", "Phi");
-            phi.setD(((Math.round(phi.getD()/22.5) + 15) % 16) * 22.5);
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-            return true;
-        }
-
-        if (found(mode, name, "NEXTSECTOR"))
-        {
-            AParameter phi = parameterStore.get("YZ", "Phi");
-            phi.setD(((Math.round(phi.getD()/22.5) + 1) % 16) * 22.5);
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-            return true;
-        }
-
-        if (found(mode, name, "ZOOMNEXTSTR") || found(mode, name, "ZOOMNEXTTRACK"))
-        {
-            return processZoomTrack(name, mode);
-        }
-
-        if (found(mode, name, "PC"))
-        {
-            getGlobalCommands();
-            return true;
-        }
-        if (found(mode, name, "DO"))
-        {
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-            return true;
-        }
-
-        // turning all datatypes on/off command: - see code which was
-        // commented out in AtlantisJava-09-05-71 and before
-
-        // Toggle: PT,D0,Z0,NU off:NG,NB,NS,NR,SH
-        if (found(mode, name, "CC"))
-        {
-            if (parameterStore.get("CutsInDet", "z0-zVtx").getStatus())
-            {
-                parameterStore.get("CutsInDet", "z0-zVtx").setStatus(false);
-                parameterStore.get("CutsInDet", "d0").setStatus(false);
-                parameterStore.get("CutsInDet", "Pt").setStatus(false);
-                parameterStore.get("CutsInDet", "NumS3D").setStatus(false);
-            }
-            else
-            {
-                parameterStore.get("CutsInDet", "z0-zVtx").setStatus(true);
-                parameterStore.get("CutsInDet", "d0").setStatus(true);
-                parameterStore.get("CutsInDet", "Pt").setStatus(true);
-                parameterStore.get("CutsInDet", "NumS3D").setStatus(true);
-            }
-            parameterStore.get("CutsInDet", "RTrIndex").setStatus(false);
-            parameterStore.get("CutsInDet", "STr").setStatus(false);
-            parameterStore.get("CutsInDet", "Group").setStatus(false);
-            parameterStore.get("CutsATLAS", "Index").setStatus(false);
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-            return true;
-        }
-        if (found(mode, name, "FH"))
-        {
-          //Try to get SpacePoints
-          AS3DData spacePoints = (AS3DData) eventManager.getCurrentEvent().get("S3D");
-          //Apply Hans Drevermanns hit filter
-          if (spacePoints != null){
-            AFilter.filter(spacePoints);
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-          }
-          return true;
-        }
-        if (foundWindow(mode, name, "W"))
-        {
-            ACanvas.getCanvas().setCurrentWindow(name.substring(1, 2));
-            return true;
-        }
-        if (foundWindow(mode, name, "C"))
-        {
-            return true;
-        }
-        if (foundWindow(mode, name, "Z"))
-        {
-            return true;
-        }
-        return false;
-    } // processGlobal() ------------------------------------------------------
-
-    private synchronized static void processLegoTrigger()
-    {
-        String currentWindowName = ACanvas.getCanvas().getCurrentWindowName();
-        String currentLayoutName = ACanvas.getCanvas().getCurrentLayout().getName();
-
-        //save status of windows on first time button pressed
-        if(legoLayoutName.equals(""))
-        {
-            //output message to the user
-            AOutput.append("\nWindows changed to:\n",ALogInterface.TITLE);
-            AOutput.append("Window 1: LegoPlot with Calo View\n", ALogInterface.NORMAL);
-            AOutput.append("Window 2: LegoPlot with Trigger Tower View\n", ALogInterface.NORMAL);
-            AOutput.append("Window 3: LegoPlot with Jet Element View\n", ALogInterface.NORMAL);
-            AOutput.append("Window 4: LegoPlot Legend (may not be displayed if window too small)\n", ALogInterface.NORMAL);
-            //save current window name and layout to then parameters to restore later
-            legoWindowNames[0]=currentWindowName;
-            legoLayoutName=currentLayoutName;
-            for(int i=0; i<legoWindowNames.length; i++)
-            {
-                parameterStore.selectWindowParameters(legoWindowNames[i]);
-                if (ACanvas.getCanvas().getWindow(legoWindowNames[i]) != null)
-                {
-                    //save lego status parameters
-                    for(int j=0; j<legoStatusParameterNames.length; j++){
-                        legoStatusParameter[i][j]=parameterStore.get("LegoPlot", legoStatusParameterNames[j]).getStatus();
-                    }
-                    //save lego int parameters
-                    for(int j=0; j<legoIntParameterNames.length; j++){
-                        legoIntParameter[i][j]=parameterStore.get("LegoPlot", legoIntParameterNames[j]).getI();
-                    }
-                    //save data parameters for windows 1 and 4
-                    if(legoWindowNames[i].equals("1")){
-                        for(int j=0; j<legoCaloParameterNames.length; j++){
-                            legoCaloParameter[0][j]=parameterStore.get("Data", legoCaloParameterNames[j]).getStatus();
-                        }
-                    }else if(legoWindowNames[i].equals("4")){
-                        for(int j=0; j<legoCaloParameterNames.length; j++){
-                            legoCaloParameter[1][j]=parameterStore.get("Data", legoCaloParameterNames[j]).getStatus();
-                        }
-                    }
-                }
-                parameterStore.restoreWindowParameters();
-            }
-        }
-        //copy to W to make sure can switch layout to 4 squares
-        ACanvas.getCanvas().copyWindowSettings(currentWindowName, "W");
-        if(!currentLayoutName.equals("FOUR SQUARES"))
-            ACanvas.getCanvas().setCurrentLayout("FOUR SQUARES");
-        //for cell sizing take defaults values and then roughly scaled for different views
-        int nphicells = 128;
-        int netacells = 200;
-        //now copy to each window and set the display correctly
-        for (int i = 0; i < 4; i++)
-        {
-            String wName = Integer.toString(i + 1);
-            AWindow w = ACanvas.getCanvas().getWindow(wName);
-            parameterStore.selectWindowParameters(wName);
-            if (w != null)
-            {
-                ACanvas.getCanvas().copyWindowSettings("W", wName);
-                //first 3 windows show data items (calo, trigger towers, jet elements)
-                if(i<3)
-                {
-                    parameterStore.get("LegoPlot", "Mode").setI(i);
-                    parameterStore.get("LegoPlot", "DrawPlot").setStatus(true);
-                    parameterStore.get("LegoPlot", "MainLegend").setStatus(false);
-                    parameterStore.get("LegoPlot", "L1EtLegend").setStatus(false);
-                    parameterStore.get("LegoPlot", "L1Items").setStatus(false);
-                    parameterStore.get("LegoPlot", "L2Items").setStatus(false);
-                    parameterStore.get("LegoPlot", "EFItems").setStatus(false);
-                    parameterStore.get("LegoPlot", "nphicells").setI(nphicells/((int) Math.pow(2.0, i)));
-                    parameterStore.get("LegoPlot", "netacells").setI(netacells/((int) Math.pow(2.0, i)));
-                }
-                else
-                {
-                    //last window shows legend
-                    parameterStore.get("LegoPlot", "DrawPlot").setStatus(false);
-                    parameterStore.get("LegoPlot", "MainLegend").setStatus(true);
-                    parameterStore.get("LegoPlot", "L1EtLegend").setStatus(true);
-                    parameterStore.get("LegoPlot", "L1Items").setStatus(true);
-                    parameterStore.get("LegoPlot", "L2Items").setStatus(true);
-                    parameterStore.get("LegoPlot", "EFItems").setStatus(true);
-                }
-                //if first or last window it needs the data items turned on
-                if(i==0 || i==3)
-                {
-                    for(int j=0; j<legoCaloParameterNames.length; j++){
-                        parameterStore.get("Data", legoCaloParameterNames[j]).setStatus(true);
-                    }
-                }
-            }
-            parameterStore.restoreWindowParameters();
-            ACanvas.getCanvas().moveToFrontWindow(w.getName());
-            w.repaintFromScratch();
-
-        }
-    }
-
-    private synchronized static void returnLegoTrigger()
-    {
-        //now will reset the parameters explictly set by trigger debug mode
-        //others may be changed as on doing trigger debug others might get changed
-        //when the current window is copied to W but these have been changed by the
-        //user so not so important to reset
-        
-        //loop backwards so can reset each window before reverting to previous layout
-        for(int i=legoWindowNames.length-1; i>=0; i--)
-        {
-            //reset the lego status parameters 
-            parameterStore.selectWindowParameters(legoWindowNames[i]);
-            for(int j=0; j<legoStatusParameterNames.length; j++){
-                parameterStore.get("LegoPlot", legoStatusParameterNames[j]).setStatus(legoStatusParameter[i][j]);
-            }
-            //reset the lego int parameters
-            for(int j=0; j<legoIntParameterNames.length; j++){
-                parameterStore.get("LegoPlot", legoIntParameterNames[j]).setI(legoIntParameter[i][j]);
-            }
-            //reset the data ites for windows 1 and 4
-            if(legoWindowNames[i].equals("1")){
-                for(int j=0; j<legoCaloParameterNames.length; j++){
-                    parameterStore.get("Data", legoCaloParameterNames[j]).setStatus(legoCaloParameter[0][j]);
-                }
-            }else if(legoWindowNames[i].equals("4")){
-                for(int j=0; j<legoCaloParameterNames.length; j++){
-                    parameterStore.get("Data", legoCaloParameterNames[j]).setStatus(legoCaloParameter[1][j]);
-                }
-            }
-            parameterStore.restoreWindowParameters();
-            //finished altering window so repaint
-            ACanvas.getCanvas().getWindow(legoWindowNames[i]).repaintFromScratch();
-            //have just finished W window so now can reset the layout 
-            if(i==1){
-                ACanvas.getCanvas().setCurrentLayout(legoLayoutName);
-                legoLayoutName="";
-            }
-        }
-        //everything reset now make the original window where trigger debug
-        //was started the current window
-        ACanvas.getCanvas().setCurrentWindow(legoWindowNames[0]);
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/ACutParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/ACutParameter.java
deleted file mode 100755
index 490114e3e659..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/ACutParameter.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package atlantis.parameters;
-
-import java.awt.Color;
-import java.awt.event.*;
-import javax.swing.*;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.AUtilities;
-import atlantis.gui.AMutableCheckBox;
-import atlantis.gui.AParametersTable;
-import atlantis.gui.ATextField;
-
-/**
- * A parameter representing a cut on a variable.
- */
-public class ACutParameter extends AAbstractParameter {
-  // name component
-  private AMutableCheckBox checkBox;
-  
-  // value component
-  private ATextField textField;
-  
-  private ActionListener statusActionListener, valueActionListener;
-  
-  public ACutParameter(
-          String name, String screenName, String toolTip, String pv, int valueType, double value,
-          String operators, String defOperator, boolean haseStatus, boolean status, boolean isMod,
-          int userLevel, int scope, int unitsOf) {
-    
-    super(name, screenName, toolTip, valueType, value, operators, defOperator, haseStatus, status,
-            isMod, userLevel, scope, unitsOf);
-    
-    range=resolvePossibleValues(pv, valueType);
-  }
-  
-  public void setD(double v) {
-    if(valueType!=FLOAT) throw new IllegalArgumentException("setD acces on not FLOAT parameter");
-    
-    if(textField!=null) textField.setText(""+v);
-    _setD(v);
-    
-    refresh();
-  }
-  
-  public void setI(int v) {
-    if(valueType!=INT) throw new IllegalArgumentException("setI acces on not INT parameter");
-    
-    if(textField!=null) textField.setText(""+v);
-    _setI(v);
-    
-    refresh();
-  }
-  
-  public void initialize() {
-    checkBox=new AMutableCheckBox(screenName);
-    checkBox.setToolTipText(toolTip);
-    if(getScope()==LOCAL)
-        checkBox.setForeground(Color.black);
-    else
-        checkBox.setForeground(Color.blue);
-    
-    for(int i=0; i<operators.length; i++)
-      checkBox.addItem(operators[i]);
-    
-    checkBox.finalizeConstruction();
-    checkBox.setSelectedText(getOperator());
-    
-    statusActionListener=new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        ACommandProcessor.receive(name);
-        apply();
-      }
-    };
-    
-    valueActionListener=new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        applyInput();
-      }
-    };
-    
-    checkBox.addStatusActionListener(statusActionListener);
-    checkBox.addTextActionListener(valueActionListener);
-    
-    // after the first left click at the table in the parameter tabbed pane,
-    // all the followingmouse mouse event will be catched by the mouselisteners of those
-    // components inside the table cells, not the table itself, so in order for the local/global
-    // switch (right click to change) to always work, have to add mouse listeners to these components
-    // as well.
-    checkBox.getCheckBox().addMouseListener(new MouseAdapter() {
-      public void mousePressed(MouseEvent e) {
-        if(AUtilities.isRightMouseButton(e)) {
-          JPopupMenu popupMenu=new JPopupMenu();
-          if(getScope()==AParameter.LOCAL) {
-            popupMenu.add(AParametersTable.SET_GLOBAL).addActionListener(new ActionListener() {
-              public void actionPerformed(ActionEvent e) {
-                changeScope(AParameter.GLOBAL);
-                refresh();
-              }
-            });
-          } else {
-            popupMenu.add(AParametersTable.SET_LOCAL).addActionListener(new ActionListener() {
-              public void actionPerformed(ActionEvent e) {
-                changeScope(AParameter.LOCAL);
-                refresh();
-              }
-            });
-          }
-          popupMenu.show(checkBox.getCheckBox(), e.getX(), e.getY());
-        }
-      }
-    });
-    
-    textField=new ATextField();
-    textField.setToolTipText(toolTip);
-    
-    if(valueType==FLOAT)
-      textField.setText(""+getD());
-    else
-      textField.setText(""+getI());
-    
-    textField.addActionListener(valueActionListener);
-    
-    /*
-     textField.addFocusListener(new FocusAdapter() {
-     public void focusLost(FocusEvent e) {
-     applyInput();
-     }
-     });
-     */
-  }
-  
-  private void applyInput() {
-    try {
-      if(valueType==FLOAT) {
-        double v=parseUnitsDouble(textField.getText());
-        
-        ACommandProcessor.receive(name+checkBox.getSelectedText()+v);
-        apply();
-      } else {
-        int v=Integer.parseInt(textField.getText());
-        
-        ACommandProcessor.receive(name+checkBox.getSelectedText()+v);
-        apply();
-      }
-    } catch(NumberFormatException nfe) {
-      AOutput.append("value: "+textField.getText()+", is not correct!", ALogInterface.BAD_COMMAND);
-    }
-  }
-  
-  public JComponent getValueComponent() {
-    return textField;
-  }
-  
-  public JComponent getNameComponent() {
-    return checkBox;
-  }
-  
-  public void refresh() {
-    if(textField!=null) {
-      if(valueType==FLOAT)
-        textField.setText(parseUnits(getD()));
-      else
-        textField.setText(""+getI());
-    }
-    if(checkBox!=null) checkBox.setStatus(getStatus());
-    if(checkBox!=null) checkBox.setSelectedText(getOperator());
-    fireParameterChanged();
-  }
-  
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AEnumeratorParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AEnumeratorParameter.java
deleted file mode 100755
index 92cdc8019c75..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AEnumeratorParameter.java
+++ /dev/null
@@ -1,278 +0,0 @@
-package atlantis.parameters;
-
-import java.util.StringTokenizer;
-import java.util.Hashtable;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import javax.swing.JComponent;
-
-import atlantis.output.AExceptionHandler;
-import atlantis.gui.AComboBox;
-
-
-/**
- * A parameter that displays a finite list of possible values.
- * Used to contain items in pTexts String[], reimplemented to contain items
- * in Hash in order to be able to change the contents from event to event
- * (because of the multiple collections cuts).
- */
-public class AEnumeratorParameter extends AAbstractParameter
-{
-    private AComboBox comboBox;
-    private Hashtable<Integer, String> pTexts;
-
-
-
-    public AEnumeratorParameter(String name, String screenName, String toolTip,
-                                String possibleValues, double value,
-                                boolean haseStatus, boolean status,
-                                int userLevel, int scope)
-    {
-        super(name, screenName, toolTip, INT, value, null, null, haseStatus,
-              status, false, userLevel, scope, NOTHING);
-
-        StringTokenizer st, tokenSt;
-        st = new StringTokenizer(possibleValues, ",");
-        int num = st.countTokens();
-        if(num <= 0)
-        {
-            throw new Error("Empty \"pv\" attribute for ENUM: " + name);
-        }
-        pTexts = new Hashtable<Integer, String>();
-        comboBox = new AComboBox();
-        comboBox.setName(screenName);
-
-        range = new double[3][];
-        range[MIN] = null;
-        range[MAX] = null;
-        range[SVAL] = new double[num];
-
-        for(int i = 0; i < num; i++)
-        {
-            tokenSt = new StringTokenizer(st.nextToken(), "=");
-            if(tokenSt.countTokens() != 2)
-            {
-                throw new Error("Incomplete \"text = value\" declaration " +
-                                "for ENUM: " + name);
-            }
-            pTexts.put(new Integer(i), tokenSt.nextToken().trim());
-
-            try
-            {
-                if(valueType == FLOAT)
-                {
-                    range[SVAL][i] =
-                        Double.parseDouble(tokenSt.nextToken().trim());
-                }
-                else if(valueType == INT)
-                {
-                    range[SVAL][i] =
-                        Integer.parseInt(tokenSt.nextToken().trim());
-                }
-            }
-            catch(NumberFormatException nfe)
-            {
-                String msg = "Number error for ENUM: " + name + possibleValues;
-                AExceptionHandler.processException(msg, nfe);
-            }
-        }
-
-    } // AEnumeratorParameter() ---------------------------------------------
-
-
-
-    public void setD(double v)
-    {
-        if(valueType != FLOAT)
-        {
-            throw new Error("setD access on not FLOAT parameter");
-        }
-        if(comboBox != null)
-        {
-            comboBox.setGUISelectedItem(getText(v));
-        }
-        _setD(v);
-        refresh();
-
-    } // setD() -------------------------------------------------------------
-
-
-
-    public void setI(int v)
-    {
-        if(valueType != INT)
-        {
-            throw new Error("setI access on not INT parameter");
-        }
-        if(comboBox != null)
-        {
-            comboBox.setGUISelectedItem(getText(v));
-        }
-        _setI(v);
-        refresh();
-
-    } // setI() -------------------------------------------------------------
-
-
-
-    public String getCurrentText()
-    {
-        return getText(getI());
-
-    } // getCurrentText() ---------------------------------------------------
-
-
-
-    public void clear()
-    {
-        pTexts.clear();
-
-    } // clear() ------------------------------------------------------------
-
-
-
-    public Hashtable<Integer, String> getValuesHashtable()
-    {
-        return pTexts;
-
-    } // getValuesHashtable() -----------------------------------------------
-
-
-
-    public int size()
-    {
-        return pTexts.size();
-
-    } // size() -------------------------------------------------------------
-
-
-
-    public String getText(double v)
-    {
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            if(range[SVAL][i] == v)
-            {
-                return pTexts.get(new Integer(i));
-            }
-        }
-        return null;
-
-    } // getText() ----------------------------------------------------------
-
-
-
-    public double getValue(String text)
-    {
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            if(text.equals(pTexts.get(new Integer(i))))
-            {
-                return range[SVAL][i];
-            }
-        }
-        return 0;
-
-    } // getValue() ---------------------------------------------------------
-
-
-
-    public void addItem(int key, String item)
-    {
-        pTexts.put(new Integer(key), item);
-        range[SVAL] = new double[pTexts.size()];
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            range[SVAL][i] = i;
-        }
-
-    } // addItem() ----------------------------------------------------------
-
-
-    public void removeItem(String itemToRemove)
-    {
-        Hashtable<Integer, String> pTextsNew = new Hashtable<Integer, String>();
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            String item = pTexts.get(new Integer(i));
-            if(itemToRemove.equals(item))
-            {
-                continue;
-            }
-            else
-            {
-                pTextsNew.put(new Integer(pTextsNew.size()), item);
-            }
-        }
-        pTexts = pTextsNew;
-
-        range[SVAL] = new double[pTexts.size()];
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            range[SVAL][i] = i;
-        }
-
-    } // removeItem() -------------------------------------------------------
-
-
-
-    /**
-     * Initialize the contained AComboBox with the list of items stored in this AEnumeratorParameter.
-     * Also sets a listener to send the appropriate command when an item is selected.
-     */
-    public void initialize()
-    {
-        super.initialize();
-        // remove all existing items from, in the constructor created, comboBox
-        // rather than create a new instance here, because after the first
-        // call of this initialize() method is not possible to update items
-        // in the comboBox
-        comboBox.removeAllItems();
-        comboBox.setToolTipText(toolTip);
-        for(int i = 0; i < pTexts.size(); i++)
-        {
-            String item = pTexts.get(new Integer(i));
-            comboBox.addItem(item);
-        }
-        comboBox.setGUISelectedItem(getText(getI()));
-        if (!comboBox.hasGUIItemListener()) {
-        	comboBox.setGUIItemListener(new ItemListener()
-        	{
-        		public void itemStateChanged(ItemEvent e)
-        		{
-        			if(e.getStateChange() == ItemEvent.SELECTED)
-        			{
-        				int index = comboBox.getSelectedIndex();
-        				String command =  name + "=" + range[SVAL][index];
-        				ACommandProcessor.receive(command);
-        				apply();
-        			}
-        		}
-        	});
-        }
-        refresh();
-    } // initialize() -------------------------------------------------------
-
-
-
-    public JComponent getValueComponent()
-    {
-        return comboBox;
-
-    } // getValueComponent() ------------------------------------------------
-
-
-
-    public void refresh()
-    {
-        _refresh();
-        if(comboBox != null)
-        {
-            comboBox.setGUISelectedItem(getText(getI()));
-        }
-        fireParameterChanged();
-    } // refresh() ----------------------------------------------------------
-
-
-
-} // class AEnumeratorParameter =============================================
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/ALinkParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/ALinkParameter.java
deleted file mode 100755
index c1c732e42e67..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/ALinkParameter.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package atlantis.parameters;
-
-
-import java.util.StringTokenizer;
-import javax.swing.JComponent;
-
-
-/**
- * A parameter which represents a link to another parameter.
- */
-public class ALinkParameter implements AParameter {
-  private String groupName, parameterName;
-  private AParameter parameter=null;
-
-  public ALinkParameter(String linkTo) {
-    StringTokenizer st=new StringTokenizer(linkTo.trim(), ".");
-
-    groupName=st.nextToken().trim();
-    parameterName=st.nextToken().trim();
-  }
-
-  public void solveLink() {
-    parameter=APar.instance().get(groupName, parameterName);
-  }
-
-  public void initialize() {
-    parameter.initialize();
-  }
-
-  public boolean isInitialized() {
-    return parameter.isInitialized();
-  }
-
-  public void copy(int from, int to) {
-    parameter.copy(from, to);
-  }
-
-  public void globalize(int window) {
-    parameter.globalize(window);
-  }
-
-  public boolean isModulus() {
-    return parameter.isModulus();
-  }
-
-  public int getValueType() {
-    return parameter.getValueType();
-  }
-
-  public void setScope(int scope) {}
-
-  public void changeScope(int scope) {
-    parameter.changeScope(scope);
-  }
-
-  public int getScope() {
-    return parameter.getScope();
-  }
-
-  public String getName() {
-    return parameter.getName();
-  }
-
-  public String getScreenName() {
-      return parameter.getScreenName();
-  }
-  
-  public String getToolTip() {
-    return parameter.getToolTip();
-  }
-
-  public boolean validateOperator(String oper) {
-    return parameter.validateOperator(oper);
-  }
-
-  public boolean validateValue(double v) {
-    return parameter.validateValue(v);
-  }
-
-  public void setD(double v) {
-    parameter.setD(v);
-  }
-
-  public void setI(int v) {
-    parameter.setI(v);
-  }
-
-  public double getD() {
-    return parameter.getD();
-  }
-
-  public int getI() {
-    return parameter.getI();
-  }
-
-  public String getValue() {
-    return parameter.getValue();
-  }
-
-  public String getCurrentText(){
-      if(parameter instanceof AEnumeratorParameter)
-          return ((AEnumeratorParameter) parameter).getCurrentText();
-      else
-          return null;
-  }  
-  
-  public void setStatus(boolean status) {
-    parameter.setStatus(status);
-  }
-
-  public boolean getStatus() {
-    return parameter.getStatus();
-  }
-
-  public String toString() {
-    return parameter.toString();
-  }
-
-  public String getOperator() {
-    return parameter.getOperator();
-  }
-
-  public boolean processCommand(String oper, double value) {
-    return parameter.processCommand(oper, value);
-  }
-
-  public JComponent getValueComponent() {
-    return parameter.getValueComponent();
-  }
-
-  public JComponent getNameComponent() {
-    return parameter.getNameComponent();
-  }
-
-  public void refresh() {
-    parameter.refresh();
-  }
-
-  public int getUserLevel() {
-    return parameter.getUserLevel();
-  }
-
-  public String getDifferences(String groupName) {
-    return "";
-  }
-
-  @Override
-  public void addParameterChangeListener(AParameterChangeListener listener) {
-	  if (parameter!=null) parameter.addParameterChangeListener(listener);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AListIntegerParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AListIntegerParameter.java
deleted file mode 100755
index 0f26c1588136..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AListIntegerParameter.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package atlantis.parameters;
-
-import atlantis.utils.*;
-import atlantis.gui.AComboBox;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import javax.swing.JComponent;
-
-/**
- * A parameter which shows a list of possible integer values.
- */
-public class AListIntegerParameter extends AAbstractParameter {
-    
-  private static ALogger logger = ALogger.getLogger(AListIntegerParameter.class);
-    
-  private AComboBox comboBox;
-  int[] displayableValues;
-
-  public AListIntegerParameter(
-      String name, String screenName, String toolTip, String pv, int value,
-      boolean haseStatus, boolean status, int userLevel, int scope) {
-
-    super(name, screenName, toolTip, INT, value, null, null, haseStatus, status, false, userLevel,
-        scope, NOTHING);
-
-    range=resolvePossibleValues(pv, INT);
-    displayableValues=getValues(pv);
-  }
-
-  public void setD(double v) {
-    throw new IllegalArgumentException("is not allowed to use setD on AListIntegerParameter");
-  }
-
-  public void setI(int v) {
-    if(comboBox!=null) comboBox.setGUISelectedItem(""+v);
-    _setI(v);
-    refresh();
-  }
-
-  public void initialize() {
-    super.initialize();
-    comboBox=new AComboBox();
-    comboBox.setEditable(true);
-    comboBox.setToolTipText(toolTip);
-
-    for(int i=0; i<displayableValues.length; i++)
-      if(validateValue(displayableValues[i]))
-        comboBox.addItem(""+displayableValues[i]);
-      else throw new Error("Displayable Value: "+displayableValues[i]+" cannot be validated"
-            +toString());
-
-    comboBox.setGUISelectedItem(""+getI());
-
-    comboBox.setGUIItemListener(new ItemListener() {
-      public void itemStateChanged(ItemEvent e) {
-        if(e.getStateChange()==ItemEvent.SELECTED)
-          applyInput();
-      }
-    });
-
-    /*
-     comboBox.addFocusListener(new FocusAdapter() {
-     public void focusLost(FocusEvent e) {
-     applyInput();
-     }
-     });
-     */
-  }
-
-  private void applyInput() {
-    boolean error=false;
-
-    try {
-      int val=Integer.parseInt((String)comboBox.getSelectedItem());
-
-      if(validateValue(val)) {
-        ACommandProcessor.receive(name+"="+val);
-        apply();
-      } else
-        error=true;
-    } catch(NumberFormatException nfe) {
-      error=true;
-    }
-    if(error)
-      logger.error("value: "+comboBox.getSelectedItem()+", is not correct!");
-  }
-
-  public JComponent getValueComponent() {
-    return comboBox;
-  }
-
-  public void refresh() {
-    _refresh();
-    if(comboBox!=null) comboBox.setGUISelectedItem(""+getI());
-    fireParameterChanged();
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/ANumberParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/ANumberParameter.java
deleted file mode 100755
index 403285e8648c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/ANumberParameter.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package atlantis.parameters;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JComponent;
-
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.gui.ATextField;
-
-public class ANumberParameter extends AAbstractParameter {
-  private ATextField textField;
-
-  public ANumberParameter(
-      String name, String screenName, String toolTip, String pv, int valueType, double value,
-      boolean haseStatus, boolean status, boolean isMod, int userLevel, int scope, int unitsOf) {
-
-    super(name, screenName, toolTip, valueType, value, null, null, haseStatus, status, isMod,
-        userLevel, scope, unitsOf);
-    range=resolvePossibleValues(pv, valueType);
-  }
-
-  public void setD(double v) {
-    if(valueType!=FLOAT)
-      throw new IllegalArgumentException("setD acces on not FLOAT parameter");
-
-    _setD(v);
-    refresh();
-  }
-
-  public void setI(int v) {
-    if(valueType!=INT)
-      throw new IllegalArgumentException("setI acces on not INT parameter");
-
-    if(textField!=null) textField.setText(""+v);
-    _setI(v);
-  }
-
-  public void initialize() {
-    super.initialize();
-
-    textField=new ATextField();
-    textField.setEditable(true);
-    textField.setToolTipText(toolTip);
-
-    if(valueType==FLOAT)
-      textField.setText(""+getD());
-    else
-      textField.setText(""+getI());
-
-    textField.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        applyInput();
-      }
-    });
-
-    /*
-     textField.addFocusListener(new FocusAdapter() {
-     public void focusLost(FocusEvent e) {
-     applyInput();
-     }
-     });
-     */
-  }
-
-  private void applyInput() {
-    boolean error=false;
-
-    try {
-      double val=parseUnitsDouble(textField.getText());
-
-      if(validateValue(val)) {
-        if(valueType==FLOAT) {
-          ACommandProcessor.receive(name+getOperator()+val);
-          apply();
-        } else {
-          ACommandProcessor.receive(name+getOperator()+(int)val);
-          apply();
-        }
-      } else
-        error=true;
-    } catch(NumberFormatException nfe) {
-      error=true;
-    }
-    if(error)
-      AOutput.append("value: "+textField.getText()+", is not correct!", ALogInterface.BAD_COMMAND);
-  }
-
-  public JComponent getValueComponent() {
-    return textField;
-  }
-
-  public void refresh() {
-    _refresh();
-    if(textField!=null) {
-      if(valueType==FLOAT)
-        textField.setText(parseUnits(getD()));
-      else
-        textField.setText(""+getI());
-    }
-    fireParameterChanged();
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/APar.java b/graphics/AtlantisJava/src/atlantis/parameters/APar.java
deleted file mode 100644
index 1aefa78f03b7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/APar.java
+++ /dev/null
@@ -1,657 +0,0 @@
-package atlantis.parameters;
-
-import java.util.ArrayList;
-
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.AJetData;
-import atlantis.event.AEvent;
-import atlantis.event.AEventManager;
-import atlantis.event.ANewEventListener;
-import atlantis.utils.ALogger;
-import atlantis.utils.xml.AXMLUtils;
-
-/**
- * The Atlantis parameters store. Contains a list of AParametersGroup
- * groups of parameters.
- * 
- * The class keeps a reference to a singleton instance, but this must initially be created using
- * the method {@link #construct(Node)}. Attempting to access the instance before initialization will
- * cause an Error to be thrown.
- * 
- * Ideally the APar instance would be passed to the classes that need it when the application is
- * initalized, but currently the instance is fetched where it is needed, in many different parts of 
- * the code.
- */
-public final class APar implements ANewEventListener, AParameterChangeListener
-{
-    private static ALogger logger = ALogger.getLogger(APar.class);
-
-    private final List<AParameterSuperGroup> superGroups = new ArrayList<AParameterSuperGroup>();
-
-    /** Index of the currently selected window */
-    private int currentWindowIndex;
-    /** Index of the previously selected window.
-     *  Used for obtaining temporary access to parameters of some window!
-     */
-    private int previousIndex;
-
-    /** Parameter change listeners: just the GUI for now. */
-    private List<AParameterChangeListener> parameterChangeListeners = new ArrayList<AParameterChangeListener>();
-
-    /** The user level of the program */
-    private int userLevel;
-
-    /** The singleton instance */
-    private static APar instance;
-
-    /**
-     * Create and return the singleton instance.
-     * @param parameters
-     */
-    public synchronized static APar construct(Node parameters) {
-        instance = new APar();
-        instance.initialize(parameters);
-        return instance;
-    }
-
-    /**
-     * Get the singleton instance.
-     * @return
-     */
-    public synchronized static APar instance() {
-        if (instance==null) throw new Error("Attempted to access APar instance before initialization.");
-        return instance;
-    }
-
-    /**
-     * For testing only: create instance without initializing.
-     * @return
-     */
-    public static synchronized APar constructDummyForTesting() {
-        instance = new APar();
-        return instance;
-    }
-
-    /**
-     * Constructs dummy singleton instance for testing.
-     */
-    private APar() {}
-
-    /**
-     * Constructs the singleton instance by reading the config file.
-     */
-    private void initialize(Node parameters) 
-    {
-        String ul=parameters.getAttributes().getNamedItem("userLevel").getNodeValue();
-        userLevel=Integer.parseInt(ul);
-
-        NodeList superGroupNodes=parameters.getChildNodes();
-        for(int s=0; s<superGroupNodes.getLength(); s++) 
-        {
-            Node superGroupNode = superGroupNodes.item(s);
-            if (superGroupNode.getNodeType() == Node.ELEMENT_NODE) 
-            {
-                // here we have a <SuperGroup> element
-                AParameterSuperGroup superGroup = AParameterSuperGroup.readSuperGroup(superGroupNode,userLevel);
-                superGroup.addParameterChangeListener(this);
-
-                this.superGroups.add(superGroup);
-            }
-        }
-        // Can't resolve link parameters until all parameters configured.
-        for (AParameterSuperGroup superGroup : superGroups) {
-            superGroup.resolveLinkParameters();
-        }
-
-        previousIndex=-1;
-    }
-
-    /** Used to take into account differences in local parameters. */
-    public void update(Node differences) 
-    {
-        if(differences==null) return;
-        NodeList children=differences.getChildNodes();
-        int childrenCount=children.getLength();
-        for(int i=0; i<childrenCount; i++) 
-        {
-            Node diff=children.item(i);
-            if(diff.getNodeType()==Node.ELEMENT_NODE) 
-            {
-                NamedNodeMap attributes=diff.getAttributes();
-                String group=AXMLUtils.tryAttribut(attributes, "group");
-                String name=AXMLUtils.tryAttribut(attributes, "name");
-                String windowName=AXMLUtils.tryAttribut(attributes, "windowName");
-                String va=AXMLUtils.tryAttribut(attributes, "va");
-                String st=AXMLUtils.tryAttribut(attributes, "st");
-                String op=AXMLUtils.tryAttribut(attributes, "op");
-                AParameter p=get(group, name);
-                if(p instanceof AAbstractParameter) 
-                {
-                    // When setting a global variable for just one window, make it local first
-                    if (((AAbstractParameter)p).getScope() == AAbstractParameter.GLOBAL && !windowName.equals("*")) {
-                        System.out.println("Setting scope to local for "+p.getName());
-                        ((AAbstractParameter)p).setScope(AAbstractParameter.LOCAL);
-                    }
-                    if(va!=null&&!va.equals("")) 
-                    {
-                        ((AAbstractParameter)p)._setValue(windowName, Double.parseDouble(va));
-                    }
-                    if(st!=null&&!st.equals("")) 
-                    {
-                        if(st.equals("ON"))
-                            ((AAbstractParameter)p)._setStatus(windowName, true);
-                        else if(st.equals("OFF"))
-                            ((AAbstractParameter)p)._setStatus(windowName, false);
-                    }
-                    if(op!=null&&!op.equals("")) 
-                    {
-                        ((AAbstractParameter)p)._setOperator(windowName, op);
-                    }
-                    ((AAbstractParameter)p).saveDefaults();
-                }
-            }
-        }
-    }
-
-    /** Restore default settings of all parameters. */
-    public void restoreDefaults() 
-    {
-        for (AParameterSuperGroup superGroup : superGroups) {
-            superGroup.restoreDefaults();
-        }
-    }
-
-    /**
-     * Get parameter supergroups corresponding to current user level.
-     * i.e. Those with a user level less than or equal to the current level.
-     * @return supergroups corresponding to current user level
-     */
-    public List<AParameterSuperGroup> getUISuperGroups() {
-        List<AParameterSuperGroup> uiSuperGroups = new ArrayList<AParameterSuperGroup>();
-        for (AParameterSuperGroup superGroup : superGroups) {
-            if (superGroup.getUserLevel()<=this.userLevel) uiSuperGroups.add(superGroup);
-        }
-        return uiSuperGroups;
-    }
-
-    /**
-     * Get all the parameter groups used by the GUI, according to the user level.
-     * @return the parameter groups
-     */
-    public AParametersGroup[][] getUIGroups() 
-    {
-        List<AParametersGroup[]> uiSuperGroups = new ArrayList<AParametersGroup[]>();
-        for (AParameterSuperGroup superGroup : superGroups) {
-            List<AParametersGroup> uiGroups = superGroup.getUIGroups();
-            AParametersGroup[] uiGroupsArray = uiGroups.toArray(new AParametersGroup[uiGroups.size()]);
-            uiSuperGroups.add(uiGroupsArray);
-        }
-        AParametersGroup[][] groups = 
-                uiSuperGroups.toArray(new AParametersGroup[uiSuperGroups.size()][]);
-        return groups;
-    }
-
-    /**
-     * Get names of groups of given usage type to display in GUI.
-     * @param uiUsage UI usage type to select
-     * @return the group names
-     */
-    public Vector<String> getUIGroupNames(int uiUsage) {return getUIGroupNames(false,uiUsage);}
-
-    /**
-     * Get names of groups to display in GUI.
-     * @return the group names
-     */
-    public Vector<String> getUIGroupNames() {return getUIGroupNames(true,0);}
-
-    /**
-     * Get names of groups to display in GUI.
-     * @param selectAll true to select all regardless of UI usage
-     * @param uiUsage ignored if selectAll is true
-     * @return the group names
-     */
-    private Vector<String> getUIGroupNames(boolean selectAll, int uiUsage) {
-        Vector<String> v=new Vector<String>();
-        AParametersGroup[][] g=getUIGroups();
-        for(int i=0;i<g.length;++i)
-            for(int j=0;j<g[i].length;++j)
-                if(selectAll || (g[i][j].getUIUsage()==uiUsage))
-                    v.addElement(g[i][j].getGroupName());
-        return v;
-    }
-
-    /**
-     * Find parameter group with given name.
-     * @param groupName name to look for
-     * @return the group, or null if not found
-     */
-    public AParametersGroup getGroup(String groupName) 
-    {
-        for (AParameterSuperGroup superGroup : superGroups) {
-            AParametersGroup group = superGroup.getGroup(groupName);
-            if (group!=null) return group;
-        }
-        return null;
-    }
-
-    public int getUserLevel() 
-    {
-        return userLevel;
-    }
-
-    public AParameter get(String group, String name) 
-    {
-        AParametersGroup g = getGroup(group);
-        if(g == null)
-        {
-            logger.debug("No group named \"" + group + "\"");
-            return null;
-        }
-
-        AParameter p = g.getParameter(name);
-        if(p == null)
-        {
-            logger.debug("No parameter named \"" + group + ":" + name + "\"");
-        }
-
-        return p;
-    }
-
-    public AParameter getUnknown(String group, String name) 
-    {
-        AParametersGroup grp = getGroup(group);
-        if(grp==null)
-            return null;
-        else
-            return grp.getParameter(name);
-    }
-
-    /**
-     * Returns the values of an array of parameters
-     * (can be ANY order: C1, C2, C3 ...)
-     */
-    public int[] getArray(String groupName, String name, int numEntries) 
-    {
-        int[] array=new int[numEntries];
-
-        String baseName=name.substring(0, name.length()-1);
-        int baseNumber=Integer.parseInt(name.substring(name.length()-1, name.length()));
-
-        for(int i=0; i<numEntries; i++)
-            array[i]=this.get(groupName, baseName+(baseNumber+i)).getI();
-
-        return array;
-    }
-
-    boolean processParameterChangeCommand(String parameterChangeCommand) 
-    {
-        String parameterName, sValue;
-        double value;
-        AParameter parameter=null;
-        String groupName = ACanvas.getCanvas().getCurrentWindow().getGroupName();
-
-        for(int i=0; i<AParameter.supportedOperators.length; i++) 
-        {
-            int index=parameterChangeCommand.indexOf(AParameter.supportedOperators[i]);
-
-            if(index!=-1) 
-            {
-                parameterName=parameterChangeCommand.substring(0, index).trim();
-                AParametersGroup pg = getGroup(groupName);
-
-                parameter=pg.getParameter(parameterName);
-
-                /* AEvent calls listbox initialize in order to change its values from
-                 event to event basis
-                 AEnumeratorParameter.initialize() ->
-                 ACommandProcessor.receive() -> .process() ->
-                 APar.processParameterChangeCommand()
-
-                 In case of ETMis - warning 'ETMisCollections=0.0 bad command' when
-                 ATLAS->ETMis group wasn't the active one for a current window.
-                 Following statement however continues if the group tab (ETMis) is
-                 active, so it's not a bad command.
-                 This will have to be dealt with when implementing the keyboard
-                 commands mode of driving Atlantis, it would have to be possible to
-                 change values, etc of group tabs which are not active. It should be
-                 easy as local commands (like ETMisCollections) would say name of
-                 parameter group they belong to. Proper groupName would the only problem.
-                 */
-                if(parameter==null)
-                {
-                    logger.debug("APar: warning: parameter " + parameterName +
-                            " doesn't exist " + "in active group tab " + groupName);
-                    return true; // prevent printing warning 'bad command ...'
-
-                    // return false; - used to, hence raising 'bad command ... ' in
-                    // ACommandProcessor.receive(). the same effect.
-                }
-
-                sValue=parameterChangeCommand.substring(index+AParameter.supportedOperators[i].length(), parameterChangeCommand.length()).trim();
-
-                if(sValue.equals("")) break;
-
-                try 
-                {
-                    value=Double.parseDouble(sValue);
-                } 
-                catch(NumberFormatException e) 
-                {
-                    return false;
-                }
-
-                return parameter.processCommand(AParameter.supportedOperators[i], value);
-            }
-        }
-
-        AParametersGroup pg = getGroup(groupName);
-
-        parameterName=parameterChangeCommand.trim();
-        parameter=pg.getParameter(parameterName);
-        if(parameter!=null) 
-        {
-            if(parameter.getStatus()==true)
-                parameter.setStatus(false);
-            else
-                parameter.setStatus(true);
-            return true;
-        } 
-        else
-            return false;
-    }
-
-    /**
-     * Copy parameters from one window to another.
-     * @param sourceName name of source window
-     * @param destName name of destination window
-     */
-    public void copyParameters(String sourceName, String destName) 
-    {
-        for (AParameterSuperGroup superGroup : superGroups) {
-            superGroup.copyParameters(sourceName, destName);
-        }
-    }
-
-    public void copyCurrentGroupLocalsTo(String destinationWindow) 
-    {
-        if(ACanvas.getCanvas().isValidWindowName(destinationWindow)) 
-        {
-            AWindow w=ACanvas.getCanvas().getCurrentWindow();
-            Vector<AParameter> params=(getGroup(w.getGroupName())).getParameters(userLevel);
-
-            int from=w.getIndex();
-            int to=ACanvas.getCanvas().getWindow(destinationWindow).getIndex();
-
-            for(int i=0; i<params.size(); i++) 
-            {
-                AParameter p=(AParameter)params.elementAt(i);
-
-                if(p.getScope()==AParameter.LOCAL)
-                    p.copy(from, to);
-            }
-        } 
-        else
-            throw new Error("copyCurrentGroupLocalsTo, unknown: "+destinationWindow);
-    }
-
-    /**
-     * selectWindowParameters/restoreWindowParameters methods are used for
-     * obtaining temporary access to parameters of some window
-     */
-    public void selectWindowParameters(String newWindow) 
-    {
-        //ACH - this was getting thrown sometimes, and I don't know why...
-        //if(previousIndex!=-1)
-        //throw new Error("selectWindowParameters, Try to select twice !?");
-
-        if(ACanvas.getCanvas().isValidWindowName(newWindow)) 
-        {
-            previousIndex=getCurrentWindowIndex();
-            setCurrentWindowIndex(ACanvas.getCanvas().getWindow(newWindow).getIndex());
-        } 
-        else 
-            throw new Error("selectWindowParameters, window: "+newWindow+" , doesn't exist !?");
-    }
-
-    /**
-     * selectWindowParameters/restoreWindowParameters methods are used for
-     * obtaining temporary access to parameters of some window
-     */
-    public void restoreWindowParameters() 
-    {
-        if(previousIndex!=-1) 
-        {
-            setCurrentWindowIndex(previousIndex);
-            previousIndex=-1;
-        } 
-        else
-            throw new Error("restoreWindowParameters: you have nothing to restore !?");
-    }
-
-    /**
-     * @param currentWindowIndex the currentWindowIndex to set
-     */
-    public void setCurrentWindowIndex(int currentWindowIndex) {
-        this.currentWindowIndex = currentWindowIndex;
-    }
-
-    /**
-     * @return the currentWindowIndex
-     */
-    public int getCurrentWindowIndex() {
-        return currentWindowIndex;
-    }
-
-    /**
-     * Add a listener to be informed of parameter changes.
-     * 
-     * @param listener
-     */
-    public void addParameterChangeListener(AParameterChangeListener listener) {
-        parameterChangeListeners.add(listener);
-    }
-
-    /**
-     * Tell the listeners that a parameter has changed.
-     */
-    @Override
-    public void parameterChanged(AParameter parameter) {
-        if(parameter.getName().equals("JetBTagger")){
-            this.setDefaultBTaggerValue(parameter);
-        }
-        for (AParameterChangeListener listener : parameterChangeListeners) {
-            listener.parameterChanged(parameter);
-        }
-    }
-
-    @Override
-    public void newEvent(AEvent event) {
-        // update collection cut listboxes for collection-aware datatypes
-        updateCollectionsListBoxes(event);
-        updateBTaggerListBox(event);
-    }
-
-    /**
-     * Update collection cut listboxes for collection-aware datatypes.
-     */
-    private void updateCollectionsListBoxes(AEvent event)
-    {
-        Hashtable<String,Vector<String>> collections = event.getCollections();
-        String listBoxName = null;
-        Hashtable<Integer, String> listBoxPreviousContents = null;
-        Vector<String> keys = null;
-        String[] keysArray = null;
-        boolean contentsChanged = false; // contents of listbox change watchdog
-        Set<AEnumeratorParameter> updatedEnumeratorParameters = new HashSet<AEnumeratorParameter>();
-
-        // note - listBox.initialize()
-        // if tab containing this particular listbox was active, it didn't
-        // take effect to set different value by .setI() as default value
-        // was in this case always the first one added - .initialize() called
-        // automatically when tabpane is active
-        // if tabpane wasn't active it worked fine
-        for (String dataTypeName : collections.keySet())
-        {
-            contentsChanged = false;
-            listBoxName = dataTypeName + "Collections";
-            keys =  collections.get(dataTypeName);
-            AEnumeratorParameter listBox = (AEnumeratorParameter) this.get(dataTypeName, listBoxName);
-            keysArray = keys.toArray(new String[keys.size()]);
-
-            listBoxPreviousContents = listBox.getValuesHashtable();
-
-            for(int i = 0; i < listBoxPreviousContents.size(); i++)
-            {
-                String item = (String) listBoxPreviousContents.get(new Integer(i));
-                if(keys.contains(item) || "All".equals(item))
-                {
-                    continue;
-                }
-                else
-                {
-                    contentsChanged = true;
-                    listBox.removeItem(item);
-                }
-            }
-
-            for(int i = 0; i < keysArray.length; i++)
-            {
-                if(listBoxPreviousContents.containsValue(keysArray[i]))
-                {
-                    continue;
-                }
-                else
-                {
-                    contentsChanged = true;
-                    listBox.addItem(listBox.size(), keysArray[i]);
-                }
-            }
-
-            // if the previous event had completely different collections than
-            // the current one, 'all' item will be the only one which remained
-            // after removal (the first loop). then the current (new) collections
-            // were added in the secold loop and 'all' item was in this case the
-            // fist, hence the default one - not desired
-            // solution: if any changes were performed in these two loops
-            // (contentsChanged variable set to true), the listbox will
-            // get re-initialised anyway. by removing 'all' and subsequent
-            // adding it the first collection from the event will be the default
-            // one and 'all' would be the last item - as desired
-            if(contentsChanged && !dataTypeName.endsWith("Segment"))
-            {
-                listBox.removeItem("All");
-                listBox.addItem(listBox.size(), "All");
-                listBox.initialize();
-            }
-            updatedEnumeratorParameters.add(listBox);
-        } // while
-        // Get the enumerator parameters so we can tell them about the new event.
-        List<AEnumeratorParameter> collectionParameters = new ArrayList<AEnumeratorParameter>();
-        for (AParameterSuperGroup superGroup : superGroups) {
-            collectionParameters.addAll(superGroup.getCollectionParameters());
-        }
-        for (AEnumeratorParameter listBox : collectionParameters) {
-            if (!updatedEnumeratorParameters.contains(listBox)) {
-                listBox.clear();
-                listBox.addItem(0, "None");
-                listBox.initialize();
-            }
-        }
-    } // updateCollectionsCutListBoxes() ------------------------------------
-
-    /**
-     * Update btagging cut listboxes for available btaggers.
-     * 
-     * @param event The current event
-     * 
-     * TODO: Make this independent of context (ie. pass it the name of the listBox to update, plus the values it should use) ? - Tom
-     */
-    private void updateBTaggerListBox(AEvent event)
-    {
-        AJetData currentjets = event.getJetData();
-        if (currentjets==null) return;
-        List<String> taggers = currentjets.getBTaggers();
-        Set<AEnumeratorParameter> updatedEnumeratorParameters = new HashSet<AEnumeratorParameter>();
-        AEnumeratorParameter listBox = (AEnumeratorParameter) this.get("CutsObjects", "JetBTagger");
-
-        if(taggers.size() == 0) {
-            listBox.clear();
-            listBox.addItem(0, "None");
-        }
-
-        for(int i=0; i<taggers.size(); i++) {
-            listBox.addItem(i, taggers.get(i));
-        }
-
-        listBox.initialize();
-        updatedEnumeratorParameters.add(listBox);
-
-    } // updateBTaggerListBox() ------------------------------------
-
-    /**
-     *  Keep a list of popular 'default' values for various b-taggers
-     *  If we don't know about the b-tagger, use a fallback default of 1.0
-     *  
-     * @param parameter The current BTagger parameter
-     */
-    public void setDefaultBTaggerValue(AParameter parameter) {
-        AEventManager eventManager = AEventManager.instance();
-        
-        //Necessary code to stop B-tagging listener when having no-jet-info xml file
-        AJetData Jetss =   eventManager.getCurrentEvent().getJetData();
-        if(Jetss == null)
-            return;	
-    
-        // Grab the b-taggers from the current Jet Collection
-        List<String> taggers = eventManager.getCurrentEvent().getJetData().getBTaggers();
-        if(taggers.size() == 0)
-            return;
-    
-        // Get the BTagName corresponding to the current selection (ordering!)
-        //	String newTagger = taggers.get(parameter.getI());
-        String newTagger = taggers.get(parameter.getI());
-    
-    
-        if(newTagger.equals(new String("SV0"))){
-            get("CutsObjects", "JetBTagweight").setD(5.25);
-        }
-        else if(newTagger.equals(new String("SV1"))){
-            get("CutsObjects", "JetBTagweight").setD(1.00);
-        }
-        else if(newTagger.equals(new String("JetFitterCOMBNN"))){
-            get("CutsObjects", "JetBTagweight").setD(2.4);
-        }
-        else if(newTagger.equals(new String("IP3D+SV1")) || newTagger.equals(new String("IP3DSV1"))){
-            get("CutsObjects", "JetBTagweight").setD(1.55);
-        }
-        else if(newTagger.equals(new String("JetFitterTagNN"))){
-            get("CutsObjects", "JetBTagweight").setD(1.55);
-        }
-        else if(newTagger.equals(new String("IP2D"))){
-            get("CutsObjects", "JetBTagweight").setD(1.00);
-        }
-        else if(newTagger.equals(new String("IP3D"))){
-            get("CutsObjects", "JetBTagweight").setD(1.00);
-        }
-        else if(newTagger.equals(new String("SV2"))){
-            get("CutsObjects", "JetBTagweight").setD(1.00);
-        }
-        else if(newTagger.equals(new String("MV1"))){
-            get("CutsObjects", "JetBTagweight").setD(0.601713);
-        }
-        else {
-            get("CutsObjects", "JetBTagweight").setD(1.00);
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameter.java
deleted file mode 100755
index 31b3ce329c6c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package atlantis.parameters;
-
-
-import javax.swing.JComponent;
-
-
-/**
- * This interface defines all the methods a parameter should have.
- */
-public interface AParameter {
-  // scope constants
-  int LOCAL=1;
-  int GLOBAL=2;
-
-  // value type constants
-  int NO_VALUE=0;
-  int INT=1;
-  int FLOAT=2;
-  
-  /** All supported supportedOperators */
-  static final String[] supportedOperators= {"!=", ">=", ">", "<=", "<", "="};
-
-  /** Initializes graphics for this parameter. */
-  void initialize();
-
-  /** Checks if the parameters graphics is initialized. */
-  boolean isInitialized();
-
-  /** Copies the value and status from one window to the other. */
-  void copy(int from, int to);
-
-  /** Copies the value and status from "window" in all the others. */
-  void globalize(int window);
-
-  /** Returns true if parameter is modulus, i.e. sign is irrelevant. */
-  boolean isModulus();
-
-  /** Return NO_VALUE, INT or FLOAT. */
-  int getValueType();
-
-  /** sets the scope to LOCAL or GLOBAL. */
-  void setScope(int scope);
-
-  /** Returns the scope of the parameter. */
-  int getScope();
-
-  /** Changes scope after it has originally been set. */
-  void changeScope(int scope);
-
-  /** Returns the name of the parameter. */
-  String getName();
-
-  /** returns the screen name of the parameter. */
-  String getScreenName();
-
-  /** Returns the tooltip text. */
-  String getToolTip();
-
-  /** Returns the current operator assigned to parameter. */
-  String getOperator();
-
-  /** Sets the double value for parameter. */
-  void setD(double v);
-  void setI(int v);
-
-  /** Returns the value of the parameter. */
-  double getD();
-  /** Returns the value of the parameter. */
-  int getI();
-  /** Returns the value of the parameter. */
-  String getValue();
-
-  /** Sets the parameter's status. */
-  void setStatus(boolean status);
-
-  /** Returns the current status. */
-  boolean getStatus();
-
-  /** Returns the graphical component used to display the Name and Status of this parameter. */
-  JComponent getNameComponent();
-
-  /** Returns the graphical component used to display the value of this parameter. */
-  JComponent getValueComponent();
-
-  /** Make synchronisation between the value and status and graphical components. */
-  void refresh();
-
-  /** Returns true if "oper" represents an valid operator for this parameter. */
-  boolean validateOperator(String oper);
-
-  /** Returns true if "v" represents a valid value for this parameter. */
-  boolean validateValue(double v);
-
-  String getDifferences(String groupName);
-
-  /** Validates and updates the current operator and value. */
-  boolean processCommand(String oper, double v);
-
-  /** Returns the user level associated with the parameter. */
-  int getUserLevel();
-
-  /** Returns a String representation of the parameter. */
-  String toString();
-
-  /** Add a parameter change listener. */
-  void addParameterChangeListener(AParameterChangeListener listener);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterChangeListener.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterChangeListener.java
deleted file mode 100644
index b65e530b826d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterChangeListener.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package atlantis.parameters;
-
-/**
- * Used by GUI to listen for changed parameters.
- * 
- * @author waugh
- *
- */
-public interface AParameterChangeListener {
-	void parameterChanged(AParameter parameter);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterConfigReader.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterConfigReader.java
deleted file mode 100644
index 8a2a88e9eae7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterConfigReader.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package atlantis.parameters;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-import atlantis.utils.xml.AXMLUtils;
-
-/**
- * Construct AParameter objects from the XML configuration file.
- * 
- * @author waugh
- *
- */
-public class AParameterConfigReader {
-    /**
-     * This function reads any type of parameters.
-     * @param parameter The Node containing the definition of the parameter.
-     * @return An AParameter object.
-     */
-    static AParameter readParameter(Node parameter, int groupScope) 
-    {
-        AParameter par=null;
-        
-        // the node name of the parameter decides its type
-        String type=parameter.getNodeName();
-        
-        // read all the parameter atributes
-        NamedNodeMap attributes=parameter.getAttributes();
-        String fn=AXMLUtils.tryAttribut(attributes, "fn");
-        String sn=AXMLUtils.tryAttribut(attributes, "sn");
-        String sst=AXMLUtils.tryAttribut(attributes, "st");
-        String sisMod=AXMLUtils.tryAttribut(attributes, "isMod");
-        String sva=AXMLUtils.tryAttribut(attributes, "va");
-        String op=AXMLUtils.tryAttribut(attributes, "op");
-        String dop=AXMLUtils.tryAttribut(attributes, "dop");
-        String to=AXMLUtils.tryAttribut(attributes, "to");
-        String pv=AXMLUtils.tryAttribut(attributes, "pv");
-        String tip=AXMLUtils.tryAttribut(attributes, "tip");
-        String scopeAtt=AXMLUtils.tryAttribut(attributes, "scope");
-        String unitsOfAtt=AXMLUtils.tryAttribut(attributes, "u");
-        
-        // set scope value for this parameter
-        int scope=groupScope;
-        if(scopeAtt!=null) 
-        {
-            if(scopeAtt.equals("LOCAL"))
-                scope=AParameter.LOCAL;
-            else if(scopeAtt.equals("GLOBAL"))
-                scope=AParameter.GLOBAL;
-        }
-        
-        // set user level for this parameter
-        int ul=-1;
-        if(!type.equals("LINK"))
-            ul=Integer.parseInt(AXMLUtils.tryAttribut(attributes, "ul"));
-        
-        double va=0;
-        if(sva!=null) va=Double.parseDouble(sva);
-        
-        // set initial status of this parameter
-        boolean st=false;
-        if(sst!=null)
-            if(sst.equals("ON"))
-                st=true;
-        
-        boolean isMod=false;
-        if(sisMod!=null)
-            if(sisMod.equals("YES"))
-                isMod=true;
-        
-        int unitsOf=0;
-        if(unitsOfAtt!=null)
-            unitsOf=Integer.parseInt(unitsOfAtt);
-        
-        // create an AParameter object based on its type
-        if(type.equals("LINK"))
-            par=new ALinkParameter(to);
-        else if(type.equals("COLOR"))
-            par=new AColorParameter(fn, sn, tip, pv, va, false, st, ul, scope);
-        else if(type.equals("SCOLOR"))
-            par=new AColorParameter(fn, sn, tip, pv, va, true, st, ul, scope);
-        else if(type.equals("ENUM"))
-            par=new AEnumeratorParameter(fn, sn, tip, pv, va, false, st, ul, scope);
-        else if(type.equals("SENUM"))
-            par=new AEnumeratorParameter(fn, sn, tip, pv, va, true, st, ul, scope);
-        else if(type.equals("ICUT"))
-            par=new ACutParameter(fn, sn, tip, pv, AParameter.INT, va, op, dop, false, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("SICUT"))
-            par=new ACutParameter(fn, sn, tip, pv, AParameter.INT, va, op, dop, true, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("FCUT"))
-            par=new ACutParameter(fn, sn, tip, pv, AParameter.FLOAT, va, op, dop, false, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("SFCUT"))
-            par=new ACutParameter(fn, sn, tip, pv, AParameter.FLOAT, va, op, dop, true, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("FLOAT"))
-            par=new ANumberParameter(fn, sn, tip, pv, AParameter.FLOAT, va, false, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("SFLOAT"))
-            par=new ANumberParameter(fn, sn, tip, pv, AParameter.FLOAT, va, true, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("INT"))
-            par=new ANumberParameter(fn, sn, tip, pv, AParameter.INT, (int)va, false, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("SINT"))
-            par=new ANumberParameter(fn, sn, tip, pv, AParameter.INT, (int)va, true, st, isMod, ul, scope, unitsOf);
-        else if(type.equals("LINT"))
-            par=new AListIntegerParameter(fn, sn, tip, pv, (int)va, false, st, ul, scope);
-        else if(type.equals("SLINT"))
-            par=new AListIntegerParameter(fn, sn, tip, pv, (int)va, true, st, ul, scope);
-        else if(type.equals("STATUS"))
-            par=new AStatusParameter(fn, sn, tip, st, ul, scope);
-        else if(type.equals("StatusRoot"))
-            par = new AStatusRootParameter(parameter, fn, sn, tip, ul, scope);
-        else if(type.equals("StatusGroup"))
-            par = new AStatusGroupParameter(parameter, fn, sn, tip, ul, scope);
-        return par;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterData.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterData.java
deleted file mode 100644
index 0abcdf857995..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterData.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package atlantis.parameters;
-
-/**
- * Encapsulates the per-window data belonging to a parameter.
- * 
- * @author waugh
- *
- */
-public class AParameterData {
-	private AParameterState[] state;
-	private AParameterState[] defaultState;
-
-    protected final APar parameterStore = APar.instance();
-
-    /**
-     * Create AParameterData for given number of windows.
-     * @param numWindows number of windows in the canvas
-     */
-	AParameterData(int numWindows) {
-		state = new AParameterState[numWindows];
-		defaultState = new AParameterState[numWindows];
-		initializeParameterState(state);
-		initializeParameterState(defaultState);
-	}
-	
-	/**
-	 * Initialize arrays of AParameterState objects.
-	 * @param state
-	 */
-	private static void initializeParameterState(AParameterState[] state) {
-		for (int i=0; i<state.length; ++i) {
-			state[i] = new AParameterState();
-		}
-	}
-	
-	/**
-	 * Return the state of this parameter for a given window.
-	 * @param windowIndex index of window 
-	 * @return the state
-	 */
-	AParameterState getState(int windowIndex) {
-		return state[windowIndex];
-	}
-
-	/**
-	 * Get value of parameter for current window.
-	 * @return value
-	 */
-	public double getValue() {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-		return getValue(currentWindowIndex);
-	}
-
-	/**
-	 * Get value of parameter for given window.
-	 * @param windowIndex index of window
-	 * @return value
-	 */
-	public double getValue(int windowIndex) {
-		return state[windowIndex].value;
-	}
-
-	/**
-	 * Set value of parameter for current window.
-	 * @param value
-	 */
-	public void setValue(double value) {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-        setValue(currentWindowIndex,value);
-	}
-
-	/**
-	 * Set value of parameter for given window.
-	 * @param windowIndex index of window
-	 * @param value
-	 */
-	public void setValue(int windowIndex, double value) {
-		this.state[windowIndex].value = value;
-	}
-
-	/**
-	 * Get status (whether parameter is enabled) for current window.
-	 * @return true if enabled
-	 */
-	public boolean getStatus() {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-		return getStatus(currentWindowIndex);
-	}
-
-	/**
-	 * Get status (whether parameter is enabled) for given window.
-	 * @param windowIndex index of window
-	 * @return true if enabled
-	 */
-	public boolean getStatus(int windowIndex) {
-		return state[windowIndex].status;
-	}
-
-	/**
-	 * Set status (whether parameter is enabled) for current window.
-	 * @param status true to enable
-	 */
-	public void setStatus(boolean status) {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-		setStatus(currentWindowIndex,status);
-	}
-
-	/**
-	 * Set status (whether parameter is enabled) for given window).
-	 * @param windowIndex index of window
-	 * @param status true to enable
-	 */
-	public void setStatus(int windowIndex, boolean status) {
-		this.state[windowIndex].status = status;
-	}
-
-	/**
-	 * Get operator for current window.
-	 * @return operator
-	 */
-	public String getOperator() {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-		return getOperator(currentWindowIndex);
-	}
-
-	/**
-	 * Get operator for given window.
-	 * @param windowIndex index of window
-	 * @return operator
-	 */
-	public String getOperator(int windowIndex) {
-		return state[windowIndex].operator;
-	}
-
-	/**
-	 * Set operator for current window.
-	 * @param operator
-	 */
-	public void setOperator(String operator) {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-		setOperator(currentWindowIndex,operator);
-	}
-
-	/**
-	 * Set operator for given window.
-	 * @param windowIndex index of window
-	 * @param operator
-	 */
-	public void setOperator(int windowIndex, String operator) {
-		this.state[windowIndex].operator = operator;
-	}
-
-	/**
-	 * Copy values from one window to another.
-	 * @param from index of source window
-	 * @param to index of destination window
-	 */
-	public void copy(int from, int to) {
-		if (to!=from) state[to] = state[from].copy();
-	}
-
-	/**
-	 * Save current values for each window to be restored later.
-	 */
-	public void saveDefaults() {
-        int numWindows = state.length;
-        for (int iWindow = 0; iWindow<numWindows; ++iWindow) {
-        	defaultState[iWindow] = state[iWindow].copy();
-        }
-	}
-
-	/**
-	 * Restore values for each window from saved values.
-	 */
-	public void restoreDefaults() {
-        int numWindows = state.length;
-        for (int iWindow = 0; iWindow<numWindows; ++iWindow) {
-        	state[iWindow] = defaultState[iWindow].copy();
-        }
-	}
-	
-    /**
-     * This function is called for GLOBAL parameters to apply the value in all
-     * windows.
-     */
-    public void globalize()
-    {
-        int currentWindowIndex = parameterStore.getCurrentWindowIndex();
-        globalize(currentWindowIndex);
-    }
-
-    /**
-     * This function is called for GLOBAL parameters to apply the value in all
-     * windows.
-     */
-    public void globalize(int window)
-    {
-        int numWindows = state.length;
-        for (int i = 0; i < numWindows; i++)
-            copy(window, i);
-    }
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterState.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterState.java
deleted file mode 100644
index 0c93ee31a72b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterState.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package atlantis.parameters;
-
-/**
- * Encapsulate the state (value, status, operator) of a given parameter for a
- * single window.
- * 
- * @author waugh
- *
- */
-public class AParameterState implements Cloneable {
-	double value;
-	boolean status;
-	String operator = "";
-	
-	/**
-	 * Make a new AParameterState with default values.
-	 */
-	AParameterState() {}
-	
-	/**
-	 * Make a new AParameterState that is a copy of another.
-	 * Other classes should use the public copy() method.
-	 * @param from the object to copy
-	 */
-	private AParameterState(AParameterState from) {
-		this.value = from.value;
-		this.status = from.status;
-		this.operator = from.operator;
-	}
-	
-	/**
-	 * Make a new AParameterState that is a copy of this one.
-	 * @return copy
-	 */
-	public AParameterState copy() {
-		return new AParameterState(this);
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterSuperGroup.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterSuperGroup.java
deleted file mode 100644
index fe01d3b3d7bf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterSuperGroup.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package atlantis.parameters;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * A supergroup of parameters, i.e. a group of groups, corresponding to one of the
- * top-level tabs in the GUI, e.g. "Projections" or "Data".
- * 
- * @author waugh
- *
- */
-public class AParameterSuperGroup implements AParameterChangeListener {
-	private String name;
-	private String toolTip;
-	private int userLevel;
-	
-	private Map<String,AParametersGroup> parameterGroups = new HashMap<String,AParametersGroup>();
-	private List<AParametersGroup> uiGroups = new ArrayList<AParametersGroup>();
-    /** Keep track of enumerator parameters so we can tell them about new events. */
-    private final List<AEnumeratorParameter> collectionParameters = new ArrayList<AEnumeratorParameter>();
-
-    private List<AParameterChangeListener> parameterChangeListeners = new ArrayList<AParameterChangeListener>();
-
-	private AParameterSuperGroup() {}
-	
-	static AParameterSuperGroup readSuperGroup(Node node, int applicationUserLevel) {
-		AParameterSuperGroup superGroup = new AParameterSuperGroup();
-		superGroup.name = node.getAttributes().getNamedItem("name").getNodeValue();
-		superGroup.toolTip = node.getAttributes().getNamedItem("toolTip").getNodeValue();
-		String sUserLevel = node.getAttributes().getNamedItem("userLevel").getNodeValue();
-		superGroup.userLevel = Integer.parseInt(sUserLevel);
-		superGroup.readGroups(node,applicationUserLevel);
-		return superGroup;
-	}
-	
-	/**
-	 * Populate the lists of parameter groups and UI groups.
-	 * @param superGroupNode
-	 */
-	private void readGroups(Node superGroupNode, int applicationUserLevel) {
-		NodeList groups = superGroupNode.getChildNodes();
-		for (int i = 0; i < groups.getLength(); i++) 
-		{
-			Node group = groups.item(i);
-			if (group.getNodeType() == Node.ELEMENT_NODE) 
-			{
-				// here we have a <Group> element and create an AParametersGroup object from it
-				AParametersGroup g = readGroup(group);
-
-				String gName = g.getGroupName();
-				if (parameterGroups.containsKey(gName))
-					throw new Error("Duplicate definition of group " + gName);
-				parameterGroups.put(gName, g);
-				int guiUsage = g.getUIUsage();
-
-				if ( ( (guiUsage == AParametersGroup.TABLE) ||
-						(guiUsage == AParametersGroup.PROJECTION)
-						|| (guiUsage == AParametersGroup.BRAIN_TEST)
-						) && (g.getUserLevel() <= userLevel))
-					uiGroups.add(g);
-			}
-		}
-
-	}
-	
-    private AParametersGroup readGroup(Node group) 
-    {
-        // first we read all the attributes
-        NamedNodeMap attributes=group.getAttributes();
-        String groupName=attributes.getNamedItem("name").getNodeValue();
-        String screenName=attributes.getNamedItem("sname").getNodeValue();
-        String guiUsageAttribut=attributes.getNamedItem("guiUsage").getNodeValue();
-        String scopeAttribut=attributes.getNamedItem("scope").getNodeValue();
-        int ul=Integer.parseInt(attributes.getNamedItem("userLevel").getNodeValue());
-        String groupToolTip=attributes.getNamedItem("toolTip").getNodeValue();
-        
-        // set guiUsage value for this group
-        int guiUsage;
-        if(guiUsageAttribut.equals("TABLE"))
-            guiUsage=AParametersGroup.TABLE;
-        else if(guiUsageAttribut.equals("PROJECTION"))
-            guiUsage=AParametersGroup.PROJECTION;
-        else if(guiUsageAttribut.equals("BRAIN_TEST"))
-            guiUsage=AParametersGroup.BRAIN_TEST;
-        else
-            guiUsage=AParametersGroup.NO_USE;
-        
-        // set scope value for this group
-        int scope;
-        if(scopeAttribut.equals("LOCAL"))
-            scope=AParameter.LOCAL;
-        else if(scopeAttribut.equals("GLOBAL"))
-            scope=AParameter.GLOBAL;
-        else
-            scope=AParameter.GLOBAL;
-        
-        // create an AParametersGroup object based on the attributes
-        AParametersGroup thisGroup=new AParametersGroup(groupName, screenName, guiUsage, scope, ul, groupToolTip);
-        
-        // report error if no parameters in this group
-        NodeList childrens=group.getChildNodes();
-        if(childrens==null) throw new Error("this group contains no parameters");
-        int childrensCount=childrens.getLength();
-        if(childrensCount==0) throw new Error("this group contains no parameters");
-        
-        // read all the parameters of this group recursively
-        for(int i=0; i<childrensCount; i++) 
-        {
-            Node child=childrens.item(i);
-            if(child.getNodeType()==Node.ELEMENT_NODE) 
-            {
-                // for each parameter, create an object (either ACommnad or AParameter)
-                // and add it into the to be returned AParametersGroup object
-                String childName=child.getNodeName();
-                if(childName.equals("Command")) {
-                    ACommand c=readCommand(child);
-                    if(c!=null) thisGroup.add(c);
-                } 
-                else {
-                	AParameter parameter = AParameterConfigReader.readParameter(child, scope);
-                	parameter.addParameterChangeListener(this);
-                    thisGroup.add(parameter);
-                    if (parameter instanceof AEnumeratorParameter &&
-                    	parameter.getScreenName().endsWith("Collections")) {
-                    		collectionParameters.add((AEnumeratorParameter)parameter);
-                    }
-                }
-            }
-        }
-        
-        return thisGroup;
-    }
-    
-
-    
-    private ACommand readCommand(Node commandNode) 
-    {
-        NamedNodeMap attributes=commandNode.getAttributes();
-        
-        String name=attributes.getNamedItem("name").getNodeValue();
-        String command=attributes.getNamedItem("command").getNodeValue();
-        String toolTip=attributes.getNamedItem("toolTip").getNodeValue();
-        String userLevel=attributes.getNamedItem("ul").getNodeValue();
-        if(Integer.parseInt(userLevel)<=this.userLevel)
-            return new ACommand(name, command, toolTip);
-        else
-            return null;
-    }
-    
-	/**
-	 * Get the name of the supergroup.
-	 * @return the name
-	 */
-	public String getName() {return name;}
-	
-	/**
-	 * Get the tool tip for this supergroup.
-	 * @return the tool tip
-	 */
-	public String getToolTip() {return toolTip;}
-	
-	/**
-	 * Get the user level of this supergroup.
-	 * @return the user level
-	 */
-	public int getUserLevel() {return userLevel;}
-
-	/**
-	 * Get parameter group with given name.
-	 * @param name name of group
-	 * @return parameter group
-	 */
-	public AParametersGroup getGroup(String name) {return parameterGroups.get(name);}
-	
-	/**
-	 * Get the parameter groups that are displayed in the UI in the current user level.
-	 * @return list of parameter groups
-	 */
-	public List<AParametersGroup> getUIGroups() {return uiGroups;}
-
-	/**
-	 * Tell the listeners that a parameter has changed.
-	 */
-	@Override
-	public void parameterChanged(AParameter parameter) {
-		for (AParameterChangeListener listener : parameterChangeListeners) {
-			listener.parameterChanged(parameter);
-		}
-	}
-
-	public Map<? extends String, ? extends AParametersGroup> getParameterGroups() {
-		return parameterGroups;
-	}
-
-	public Collection<? extends AEnumeratorParameter> getCollectionParameters() {
-		return collectionParameters;
-	}
-
-	/**
-	 * Add a listener to be informed of parameter changes.
-	 * 
-	 * @param listener
-	 */
-	public void addParameterChangeListener(AParameterChangeListener listener) {
-		this.parameterChangeListeners.add(listener);
-	}
-
-	/**
-	 * Restore all groups in supergroup to defaults.
-	 */
-	public void restoreDefaults() {
-		for (AParametersGroup group : parameterGroups.values()) {
-			group.restoreDefaults();
-		}
-	}
-
-    /**
-     * Copy parameters from one window to another.
-     * @param sourceName name of source window
-     * @param destName name of destination window
-     */
-	public void copyParameters(String sourceName, String destName) {
-		for (AParametersGroup group : parameterGroups.values()) {
-			group.copyParameters(sourceName, destName);
-		}
-	}
-
-	public void resolveLinkParameters() {
-		for (AParametersGroup group : parameterGroups.values()) {
-			group.resolveLinkParameters();
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParameterUtilities.java b/graphics/AtlantisJava/src/atlantis/parameters/AParameterUtilities.java
deleted file mode 100644
index 7dada86fe693..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParameterUtilities.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 
- */
-package atlantis.parameters;
-
-import atlantis.utils.AMath;
-
-/**
- * Mathematical utility methods that act on Parameters.
- * Moved from atlantis.utils.AMath to reduce dependencies of utils on other packages.
- *
- * @author waugh
- *
- */
-public class AParameterUtilities {
-
-	private final static APar parameterStore = APar.instance();
-	private final static AParameter xVertexPar = parameterStore.get("Event", "XVtx");
-	private final static AParameter yVertexPar = parameterStore.get("Event", "YVtx");
-	private final static AParameter zVertexPar = parameterStore.get("Event", "ZVtx");
-
-	/**
-	 * Get coordinates of event vertex.
-	 * 
-	 * @return (x,y,z) of vertex
-	 */
-    public static double[] getPrimaryVertex()
-    {
-        double[] primaryVertex = new double[3];
-        primaryVertex[0] = parameterStore.get("Event", "XVtx").getD();
-        primaryVertex[1] = parameterStore.get("Event", "YVtx").getD();
-        primaryVertex[2] = parameterStore.get("Event", "ZVtx").getD();
-        return primaryVertex;
-    }
-
-	/**
-	 * Returns phi with respect to the primary vertex.
-	 * @param x double x coordinate
-	 * @param y double y coordinate
-	 * @return double phi
-	 */
-	public static double phi(double x, double y) {
-	    double phi = Math.atan2(y-yVertexPar.getD(), x-xVertexPar.getD());
-	    if (phi < 0) phi += 2.*Math.PI;
-	    return Math.toDegrees(phi);
-	}
-
-	/**
-	 * Returns eta with respect to the primary vertex.
-	 * @param z double z coordinate
-	 * @param rho double rho coordinate
-	 * @return double eta
-	 */
-	public static double eta(double z, double rho)
-	{
-	    return AMath.etaAbs(z - zVertexPar.getD(), rho);
-	}
-
-	public static double getPhiStereo(double rho, double phi, double z)
-	{
-	    AParameter stereoAnglePar = parameterStore.get("SiCluster", "Stereo");
-	    if(!stereoAnglePar.getStatus())
-	    {
-	        return phi;
-	    }
-	    double stereoAngle = stereoAnglePar.getI() * 0.04;
-	    return phi + stereoAngle * (z-parameterStore.get("Event", "ZVtx").getD()) / rho;
-	}
-
-	/**
-	 * Get the sign of the rho coordinate based on the x and y coordinates and
-	 * the phi value set by the user.
-	 * @param x double x coordinate
-	 * @param y double y coordinate
-	 * @return int sign of rho (-1 or +1)
-	 */
-	public static int getRhoSign(double x, double y) {
-	    return getRhoSign(Math.atan2(y, x));
-	}
-
-	/**
-	 * Get the sign of the rho coordinate based on the phi coordinate and
-	 * the phi value set by the user.
-	 * @param phi double phi coordinate
-	 * @return int sign of rho (-1 or +1)
-	 */
-	private static int getRhoSign(double phi) {
-	    int sign;
-	    if (phi < 0.) phi += 2.*Math.PI;
-	
-	    double phiMid = Math.toRadians(parameterStore.get("RZ", "Phi").getD());
-	    double phiDiff = Math.abs(phi-phiMid);
-	
-	    if(phiDiff <= Math.PI/2.|| phiDiff > 3*Math.PI/2.) {
-	        sign = 1;
-	    } else {
-	        sign = -1;
-	    }
-	    return sign;
-	}
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AParametersGroup.java b/graphics/AtlantisJava/src/atlantis/parameters/AParametersGroup.java
deleted file mode 100755
index eeadb9d31839..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AParametersGroup.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package atlantis.parameters;
-
-import atlantis.canvas.ACanvas;
-import java.util.*;
-
-/**
- * This class is used to store a set of parameters. Provides functions for
- * fast searching of a parameter by its name.
- */
-public class AParametersGroup {
-    public static final int NO_USE=0;
-    public static final int TABLE=1;
-    public static final int PROJECTION=2;
-    public static final int BRAIN_TEST=3;
-    
-    private String name;
-    private String screenName;
-    private String toolTip;
-    private int scope;
-    private int guiUsage;
-    private int userLevel;
-    
-    private Vector<AParameter> parametersVector = new Vector<AParameter>();
-    private HashMap<String, AParameter> parametersMap = new HashMap<String, AParameter>();
-    private Vector<ACommand> commandsVector = new Vector<ACommand>();
-    
-    public AParametersGroup(String name, String screenName, int guiUsage, 
-            int scope, int userLevel, String toolTip) {
-        
-        this.name=name;
-        
-        if(!screenName.trim().equals(""))
-            this.screenName=screenName;
-        else
-            this.screenName=name;
-        
-        this.guiUsage=guiUsage;
-        this.scope=scope;
-        this.userLevel=userLevel;
-        this.toolTip=toolTip;
-    }
-    
-    public void restoreDefaults() {
-        Enumeration<AParameter> parameters = parametersVector.elements();
-        while(parameters.hasMoreElements()) {
-            AParameter p = parameters.nextElement();
-            if(p instanceof AAbstractParameter)
-                ((AAbstractParameter)p).restoreDefaults();
-        }
-    }
-    
-    
-    private void addToMap(AParameter p) {
-        if(parametersMap.containsKey(p.getName()))
-            throw new Error("Duplicate definition of parameter full name "+p.getName());
-        
-        parametersMap.put(p.getName(), p);
-    }
-    
-    public void add(AParameter p) {
-        parametersVector.addElement(p);
-        if(!(p instanceof ALinkParameter))
-            addToMap(p);
-    }
-    
-    public void add(ACommand c) {
-        for(int i=0; i<commandsVector.size(); i++) {
-            ACommand command = commandsVector.elementAt(i);
-            if(command.getName().equals(c.getName()))
-                throw new Error("Duplicate definition of command "+c.getName());
-        }
-        commandsVector.addElement(c);
-    }
-    
-    public int getScope() {
-        return scope;
-    }
-    
-    public String getGroupName() {
-        return name;
-    }
-    
-    public String getScreenName() {
-        return screenName;
-    }
-    
-    public String getToolTip() {
-        return toolTip;
-    }
-    
-    public int getUIUsage() {
-        return guiUsage;
-    }
-    
-    public int getUserLevel() {
-        return userLevel;
-    }
-    
-    public ACommand[] getCommands() {
-        ACommand[] commands=new ACommand[commandsVector.size()];
-        
-        for(int i=0; i<commands.length; i++)
-            commands[i]=commandsVector.elementAt(i);
-        
-        return commands;
-    }
-    
-    public Vector<AParameter> getParameters(int userLevel) {
-        Vector<AParameter> v=new Vector<AParameter>(parametersVector.size());
-        
-        for(int i=0; i<parametersVector.size(); i++) {
-            AParameter p = parametersVector.elementAt(i);
-            if(p.getUserLevel()<=userLevel)
-                v.addElement(p);
-        }
-        
-        return v;
-    }
-    
-    public AParameter getParameter(String name) {
-        if(parametersMap.get(name)!=null)
-            return parametersMap.get(name);
-        // if under group "Data", should find the parameter in the whole tree
-        else if(parametersMap.get("Status")!=null){
-            return ((AStatusRootParameter)parametersMap.get("Status")).getParameter(name);
-        }
-        else
-            return null;
-    }
-    
-    /**
-     * Copy parameters from one window to another.
-     * @param sourceName name of source window
-     * @param destName name of destination window
-     */
-    public void copyParameters(String sourceName, String destName) {
-        int source=ACanvas.getCanvas().getWindow(sourceName).getIndex();
-        int dest=ACanvas.getCanvas().getWindow(destName).getIndex();
-        
-        for(int i=0; i<parametersVector.size(); i++) {
-            AParameter p = parametersVector.elementAt(i);
-            if(p.getScope()==AParameter.LOCAL)
-                p.copy(source, dest);
-        }
-    }
-    
-    public void resolveLinkParameters() {
-        for(int i=0; i<parametersVector.size(); i++) {
-            AParameter p = parametersVector.elementAt(i);
-            if(p instanceof ALinkParameter) {
-                ((ALinkParameter)p).solveLink();
-                addToMap(p);
-            }
-        }
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AStatusGroupParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AStatusGroupParameter.java
deleted file mode 100755
index 59bc40f1fc22..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AStatusGroupParameter.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package atlantis.parameters;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import javax.swing.JComponent;
-import java.util.ArrayList;
-import java.awt.Color;
-import hep.wired.util.TristateCheckBox;
-
-import atlantis.gui.ACheckNode;
-import atlantis.gui.ACheckBox;
-
-/**
- * Created on 16 March 2005, 16:15
- *
- * @author Qiang Lu
- */
-public class AStatusGroupParameter extends AAbstractParameter
-{
-    private ArrayList<AParameter> parameterNodeList;
-
-    private ACheckNode statusGroupNode;
-
-    /** Creates a new instance of AStatusGroupParameter */
-    AStatusGroupParameter(Node statusGroup, String name, String screenName, String toolTip, int userLevel, int scope)
-    {
-        super(name, screenName, toolTip, AParameter.NO_VALUE, 0, null, null, false, false, 
-                false, userLevel, scope, AAbstractParameter.NOTHING);
-
-        // get child element of statusGroup
-        NodeList childrens = statusGroup.getChildNodes();
-        // report error if no parameters
-        if (childrens == null)
-            throw new Error("StatusGroup element contains no parameters");
-        int childrensCount = childrens.getLength();
-        if (childrensCount == 0)
-            throw new Error("StatusGroup element contains no parameters");
-
-        // create an AParameter object for each node under statusGroup
-        // and add them into parameterNodeList
-        parameterNodeList = new ArrayList<AParameter>();
-        for (int i = 0; i < childrensCount; i++)
-        {
-            Node child = childrens.item(i);
-
-            if (child.getNodeType() == Node.ELEMENT_NODE)
-            {
-                // here we have a <StatusGroup> or <Status> element
-                parameterNodeList.add(AParameterConfigReader.readParameter(child, scope));
-            }
-        }
-    }
-
-    public void initialize()
-    {
-        super.initialize();
-
-        // create the tree node using the <StatusGroup> element
-        TristateCheckBox groupCheckBox = new TristateCheckBox(screenName);
-        groupCheckBox.setBackground(new Color(204, 204, 204));
-        if (getScope() == LOCAL)
-            groupCheckBox.setForeground(Color.black);
-        else
-            groupCheckBox.setForeground(Color.blue);
-
-        groupCheckBox.setToolTipText(toolTip);
-        statusGroupNode = new ACheckNode(groupCheckBox, false, ACheckNode.MULTI_SELECTION, this);
-
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            aNodeParameter.initialize();
-            if (aNodeParameter instanceof AStatusParameter)
-            {
-                if (aNodeParameter.getUserLevel() <= APar.instance().getUserLevel())
-                {
-                    ACheckBox statusCheckBox = ((AStatusParameter) aNodeParameter).getCheckBox();
-                    ACheckNode aNode = new ACheckNode(statusCheckBox, statusCheckBox.isSelected(), ACheckNode.SINGLE_SELECTION, aNodeParameter);
-                    statusGroupNode.add(aNode);
-                }
-            }
-            else if (aNodeParameter instanceof AStatusGroupParameter)
-            {
-                statusGroupNode.add(((AStatusGroupParameter) aNodeParameter).getCheckNode());
-            }
-        }
-    }
-
-    public JComponent getValueComponent()
-    {
-        return null;
-    }
-
-    public ACheckNode getCheckNode()
-    {
-        return statusGroupNode;
-    }
-
-    ArrayList<AParameter> getParameterList()
-    {
-        return parameterNodeList;
-    }
-
-    public AParameter getParameter(String name)
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            if (aNodeParameter instanceof AStatusParameter)
-            {
-                if (aNodeParameter.getName().equals(name))
-                    return aNodeParameter;
-            }
-            else if (((AStatusGroupParameter) aNodeParameter).getParameter(name) != null)
-            {
-                return ((AStatusGroupParameter) aNodeParameter).getParameter(name);
-            }
-        }
-        return null;
-    }
-    
-    public AParameter getGroupParameter(String name)
-    {
-        if(getName().equals(name))
-            return this;
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            if (aNodeParameter instanceof AStatusGroupParameter)
-            {
-                if (((AStatusGroupParameter) aNodeParameter).getGroupParameter(name) != null)
-                {
-                    return ((AStatusGroupParameter) aNodeParameter).getGroupParameter(name);
-                }
-            }
-        }
-        return null;
-    }
-
-    public boolean getStatus()
-    {
-        return statusGroupNode.isSelected();
-    }
-    
-    public void setStatus(boolean status)
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            aNodeParameter.setStatus(status);
-        }
-    }
-    
-    public void refresh()
-    {
-        _refresh();
-        fireParameterChanged();
-    }
-
-    public void setD(double v)
-    {
-        throw new IllegalArgumentException("StatusGroupParameter hase no value");
-    }
-
-    public void setI(int v)
-    {
-        throw new IllegalArgumentException("StatusGroupParameter hase no value");
-    }
-
-    public void saveChildrenDefaults()
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            if(aNodeAbstractParameter instanceof AStatusGroupParameter)
-                ((AStatusGroupParameter)aNodeAbstractParameter).saveChildrenDefaults();
-            else
-                ((AStatusParameter)aNodeAbstractParameter).saveDefaults();
-        }
-    }
-
-    public void restoreDefaults()
-    {
-        super.restoreDefaults();
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            aNodeAbstractParameter.restoreDefaults();
-        }
-    }
-
-    public void copy(int from, int to) 
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            aNodeAbstractParameter.copy(from, to);
-        }
-    }
-
-    public String getDifferences(String groupName)
-    {
-        StringBuffer ret = new StringBuffer();
-        
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            if(aNodeAbstractParameter instanceof AStatusGroupParameter)
-                ret.append(((AStatusGroupParameter)aNodeAbstractParameter).getDifferences(groupName));
-            else
-                ret.append(aNodeAbstractParameter.getDifferences(groupName));
-        }
-        
-        return ret.toString();
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AStatusParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AStatusParameter.java
deleted file mode 100755
index ad42a168db9f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AStatusParameter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package atlantis.parameters;
-
-import javax.swing.JLabel;
-import javax.swing.LookAndFeel;
-import javax.swing.JComponent;
-
-/**
- * A parameter representing an on/off value. Corresponds to an ACheckBox in the GUI.
- */
-public class AStatusParameter extends AAbstractParameter
-{
-    private JLabel valueLabel;
-
-    public AStatusParameter(String name, String screenName, String toolTip,
-                            boolean status, int userLevel, int scope)
-    {
-        super(name, screenName, toolTip, NO_VALUE, 0, null, null, true,
-              status, false, userLevel, scope, NOTHING);
-    }
-
-
-    public void setD(double v)
-    {
-        throw new IllegalArgumentException("StatusParameter has no value");
-    }
-
-
-    public void setI(int v)
-    {
-        throw new IllegalArgumentException("StatusParameter has no value");
-    }
-
-
-    public void initialize()
-    {
-        super.initialize();
-        valueLabel = new JLabel();
-        valueLabel.setOpaque(true);
-        valueLabel.setToolTipText(toolTip);
-        LookAndFeel.installColorsAndFont(valueLabel, "CheckBox.background",
-                                         "CheckBox.foreground",
-                                         "CheckBox.font");
-    }
-
-
-    public JComponent getValueComponent()
-    {
-        return valueLabel;
-    }
-
-
-    public void refresh()
-    {
-        _refresh();
-        fireParameterChanged();
-    }
-
-} // class AStatusParameter =================================================
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/AStatusRootParameter.java b/graphics/AtlantisJava/src/atlantis/parameters/AStatusRootParameter.java
deleted file mode 100755
index fbbf4f40448e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/AStatusRootParameter.java
+++ /dev/null
@@ -1,435 +0,0 @@
-package atlantis.parameters;
-
-import hep.wired.util.TristateCheckBox;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.swing.JComponent;
-import javax.swing.JPopupMenu;
-import javax.swing.JTree;
-import javax.swing.ToolTipManager;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreePath;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import atlantis.utils.AUtilities;
-import atlantis.gui.ACheckBox;
-import atlantis.gui.ACheckNode;
-import atlantis.gui.AParametersTable;
-import atlantis.gui.ATreeCellRenderer;
-
-/**
- * AStatusRootParameter.java 
- * 
- * Created on 14 March 2005, 17:49 
- * 
- * @author Qiang Lu
- */
-public class AStatusRootParameter extends AAbstractParameter
-{
-    private ArrayList<AParameter> parameterNodeList;
-
-    private JTree statusTree;
-
-    private ACheckNode statusRootNode;
-    
-    /** Creates a new instance of AStatusGroupParameter */
-    AStatusRootParameter(Node statusRoot, String name, String screenName, String toolTip, int userLevel, int scope)
-    {
-        super(name, screenName, toolTip, AParameter.NO_VALUE, 0, null, null, false, false, 
-                false, userLevel, scope, AAbstractParameter.NOTHING);
-        // get child element of statusRoot
-        NodeList childrens = statusRoot.getChildNodes();
-        // report error if no parameters
-        if (childrens == null)
-            throw new Error("this group contains no parameters");
-        int childrensCount = childrens.getLength();
-        if (childrensCount == 0)
-            throw new Error("this group contains no parameters");
-
-        // create an AParameter object for each node under statusRoot
-        // and add them into parameterNodeList
-        parameterNodeList = new ArrayList<AParameter>();
-        for (int i = 0; i < childrensCount; i++)
-        {
-            Node child = childrens.item(i);
-
-            if (child.getNodeType() == Node.ELEMENT_NODE)
-            {
-                // here we have a <StatusGroup> or <Status> element
-                parameterNodeList.add(AParameterConfigReader.readParameter(child, scope));
-            }
-        }
-    }
-
-    public void initialize()
-    {
-        super.initialize();
-
-        // create the root node of the tree using the <StatusRoot> element
-        TristateCheckBox rootCheckBox = new TristateCheckBox(screenName);
-        rootCheckBox.setBackground(new Color(204, 204, 204));
-        if (getScope() == LOCAL)
-            rootCheckBox.setForeground(Color.black);
-        else
-            rootCheckBox.setForeground(Color.blue);
-
-        rootCheckBox.setToolTipText(toolTip);
-        statusRootNode = new ACheckNode(rootCheckBox, false, ACheckNode.MULTI_SELECTION, this);
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            aNodeParameter.initialize();
-            if (aNodeParameter instanceof AStatusParameter)
-            {
-                if (aNodeParameter.getUserLevel() <= APar.instance().getUserLevel())
-                {
-                    ACheckBox statusCheckBox = ((AStatusParameter) aNodeParameter).getCheckBox();
-                    ACheckNode aNode = new ACheckNode(statusCheckBox, statusCheckBox.isSelected(), ACheckNode.SINGLE_SELECTION, aNodeParameter);
-                    statusRootNode.add(aNode);
-                }
-            }
-            else if (aNodeParameter instanceof AStatusGroupParameter)
-            {
-                statusRootNode.add(((AStatusGroupParameter) aNodeParameter).getCheckNode());
-            }
-        }
-
-        statusTree = new JTree(statusRootNode);
-        statusTree.setBackground(new Color(204, 204, 204));
-        statusTree.setCellRenderer(new ATreeCellRenderer());
-        statusTree.addMouseListener(new NodeSelectionListener(statusTree));
-        ToolTipManager.sharedInstance().registerComponent(statusTree);
-    }
-
-    public JComponent getValueComponent()
-    {
-        return null;
-    }
-
-    public JComponent getNameComponent()
-    {
-        return statusTree;
-    }
-
-    ArrayList<AParameter> getParameterList()
-    {
-        return parameterNodeList;
-    }
-
-    public AParameter getParameter(String name)
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            if (aNodeParameter instanceof AStatusParameter)
-            {
-                if (aNodeParameter.getName().equals(name))
-                    return aNodeParameter;
-            }
-            else if (((AStatusGroupParameter) aNodeParameter).getParameter(name) != null)
-            {
-                return ((AStatusGroupParameter) aNodeParameter).getParameter(name);
-            }
-        }
-        return null;
-    }
-
-    public AParameter getGroupParameter(String name)
-    {
-        if(!isInitialized())
-            initialize();
-        
-        if(getName().equals(name))
-            return this;
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            if (aNodeParameter instanceof AStatusGroupParameter)
-            {
-                if (((AStatusGroupParameter) aNodeParameter).getGroupParameter(name) != null)
-                {
-                    return ((AStatusGroupParameter) aNodeParameter).getGroupParameter(name);
-                }
-            }
-        }
-        return null;
-    }
-
-    public boolean getStatus()
-    {
-        return statusRootNode.isSelected();
-    }
-    
-    public void setStatus(boolean status)
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            aNodeParameter.setStatus(status);
-        }
-    }
-    
-    public void refresh()
-    {
-        _refresh();
-        fireParameterChanged();
-    }
-
-    public void setD(double v)
-    {
-        throw new IllegalArgumentException("StatusRootParameter hase no value");
-    }
-
-    public void setI(int v)
-    {
-        throw new IllegalArgumentException("StatusRootParameter hase no value");
-    }
-
-    public void saveChildrenDefaults()
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            if(aNodeAbstractParameter instanceof AStatusGroupParameter)
-                ((AStatusGroupParameter)aNodeAbstractParameter).saveChildrenDefaults();
-            else
-                ((AStatusParameter)aNodeAbstractParameter).saveDefaults();
-        }
-    }
-
-    public void restoreDefaults()
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            aNodeAbstractParameter.restoreDefaults();
-        }
-        if(statusTree != null)
-        {
-            for (int i = 1; i < statusTree.getRowCount(); i++)
-                statusTree.collapseRow(i);
-        }
-    }
-
-    public void copy(int from, int to) 
-    {
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            aNodeAbstractParameter.copy(from, to);
-        }
-    }
-
-    public String getDifferences(String groupName)
-    {
-        StringBuffer ret = new StringBuffer();
-        
-        for (AParameter aNodeParameter : parameterNodeList)
-        {
-            AAbstractParameter aNodeAbstractParameter = (AAbstractParameter) aNodeParameter;
-            if(aNodeAbstractParameter instanceof AStatusGroupParameter)
-                ret.append(((AStatusGroupParameter)aNodeAbstractParameter).getDifferences(groupName));
-            else
-                ret.append(((AStatusParameter)aNodeAbstractParameter).getDifferences(groupName));
-        }
-        
-        return ret.toString();
-    }
-    
-    public class NodeSelectionListener extends MouseAdapter
-    {
-        private JTree tree;
-
-        private int offsetX;
-        private int offsetY;
-
-        NodeSelectionListener(JTree tree)
-        {
-            this.tree = tree;
-            offsetX = 0;
-            offsetY = 0;
-        }
-
-        public void setOffset(int x, int y)
-        {
-            offsetX = x;
-            offsetY = y;
-        }
-
-        public int getOffsetX()
-        {
-            return offsetX;
-        }
-
-        public int getOffsetY()
-        {
-            return offsetY;
-        }
-
-        public void mousePressed(MouseEvent e)
-        {
-            if (AUtilities.isRightMouseButton(e))
-            {
-                AParameter clickedPar = null;
-                int x = e.getX();
-                int y = e.getY();
-                int row = tree.getRowForLocation(x, y);
-                TreePath path = tree.getPathForRow(row);
-                if (path != null)
-                {
-                    Object clickedNode = path.getLastPathComponent();
-                    if (clickedNode instanceof ACheckNode)
-                    {
-                        ACheckNode node = (ACheckNode) clickedNode;
-                        clickedPar = node.getParameter();
-                    }
-
-                    final AParameter effectPar = clickedPar;
-                    if(effectPar instanceof AStatusParameter)
-                    {
-                        JPopupMenu popupMenu = new JPopupMenu();
-                        if (effectPar.getScope() == AParameter.LOCAL)
-                        {
-                            popupMenu.add(AParametersTable.SET_GLOBAL).addActionListener(new ActionListener()
-                            {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    effectPar.changeScope(AParameter.GLOBAL);
-                                    refresh();
-                                }
-                            });
-                        }
-                        else
-                        {
-                            popupMenu.add(AParametersTable.SET_LOCAL).addActionListener(new ActionListener()
-                            {
-                                public void actionPerformed(ActionEvent e)
-                                {
-                                    effectPar.changeScope(AParameter.LOCAL);
-                                    refresh();
-                                }
-                            });
-                        }
-                        if (tree.isShowing())
-                            popupMenu.show(tree, e.getX(), e.getY());
-                        else
-                            // when e.getSource() is the table
-                            popupMenu.show((Component) e.getSource(), e.getX() + getOffsetX(), e.getY() + getOffsetY());
-                    }
-                    else
-                    {
-                        popupGroupScopeMenu(effectPar, e);
-                    }
-                }
-            }
-        }
-
-        // groupPar is either AStatusRootParameter or AStatusGroupParameter
-        private final void changeGroupScopes(AParameter groupPar, int scope)
-        {
-            Iterator<AParameter> it;
-            if(groupPar instanceof AStatusRootParameter)
-                it = ((AStatusRootParameter) groupPar).getParameterList().iterator();
-            else
-                it = ((AStatusGroupParameter) groupPar).getParameterList().iterator();
-            while (it.hasNext())
-            {
-                AParameter aPar = it.next();
-                // aPar is either AStatusGroupParameter or AStatusParameter
-                if(aPar instanceof AStatusGroupParameter)
-                    changeGroupScopes(aPar, scope);
-                else
-                    aPar.changeScope(scope);
-            }
-        }
-        
-        // groupPar is either AStatusRootParameter or AStatusGroupParameter
-        private void popupGroupScopeMenu(AParameter groupPar, MouseEvent e)
-        {
-            final AParameter tmpPar = groupPar;
-            JPopupMenu popupMenu = new JPopupMenu();
-            popupMenu.add(AParametersTable.SET_ALL_LOCAL).addActionListener(
-                    new ActionListener()
-                    {
-                        public void actionPerformed(ActionEvent e)
-                        {
-                            changeGroupScopes(tmpPar, AParameter.LOCAL);
-                            refresh();
-                        }
-                    });
-            popupMenu.add(AParametersTable.SET_ALL_GLOBAL).addActionListener(
-                    new ActionListener()
-                    {
-                        public void actionPerformed(ActionEvent e)
-                        {
-                            changeGroupScopes(tmpPar, AParameter.GLOBAL);
-                            refresh();
-                        }
-                    });
-            if (tree.isShowing())
-                popupMenu.show(tree, e.getX(), e.getY());
-            else
-                // when e.getSource() is the table
-                popupMenu.show((Component) e.getSource(), e.getX() + getOffsetX(), e.getY() + getOffsetY());
-        }
-        
-        public void mouseClicked(MouseEvent e)
-        {
-            if (AUtilities.isRightMouseButton(e))
-            {
-                return;
-            }
-            int x = e.getX();
-            int y = e.getY();
-            int row = tree.getRowForLocation(x, y);
-            TreePath path = tree.getPathForRow(row);
-            if (path != null)
-            {
-                Object clickedNode = path.getLastPathComponent();
-                if (clickedNode instanceof ACheckNode)
-                {
-                    ACheckNode node = (ACheckNode) clickedNode;
-                    boolean newSelectionFlag;
-                    if (node.getParameter() instanceof AStatusParameter)
-                        newSelectionFlag = !node.isSelected();
-                    else
-                    {
-                        TristateCheckBox.State currentState = ((TristateCheckBox) node.getUserObject()).getState();
-                        if (currentState == TristateCheckBox.NOT_SELECTED)
-                            newSelectionFlag = true;
-                        else
-                            newSelectionFlag = false;
-                    }
-                    node.getClicked(newSelectionFlag, true);
-
-                    if ((node.getSelectionMode() == ACheckNode.MULTI_SELECTION))
-                    {
-                        if (node.isSelected())
-                        {
-                            tree.expandPath(path);
-                        }
-                        else
-                        {
-                            if (row != 0)
-                                tree.collapsePath(path);
-                        }
-                    }
-                    ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
-                    // I need revalidate if node is root. but why?
-                    if (row == 0)
-                    {
-                        tree.revalidate();
-                        tree.repaint();
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/parameters/package.html b/graphics/AtlantisJava/src/atlantis/parameters/package.html
deleted file mode 100644
index 8572821c5f1e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/parameters/package.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Application parameter store where APar and AParameter are the main
-  classes.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjection.java b/graphics/AtlantisJava/src/atlantis/projection/AProjection.java
deleted file mode 100755
index 2cd72969cf86..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjection.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package atlantis.projection;
-
-
-import java.awt.event.ActionListener;
-import atlantis.canvas.AWindow;
-import atlantis.event.AEventManager;
-import atlantis.parameters.APar;
-
-import javax.swing.*;
-import java.awt.*;
-
-
-public abstract class AProjection implements ActionListener {
-	
-  protected static APar parameterStore = APar.instance();
-  protected static AEventManager eventManager = AEventManager.instance();
-    
-  public abstract String getName();
-  public abstract String getScreenName();
-  public abstract void paint(AWindow window, Graphics g);
-  
-  public abstract JMenuItem[] getPopupItems();
-  
-  // next 4/5 needed for normal 2d projections, not for others e.g. Braintests
-  // should be changed at some point.....
-  public abstract String getXLabel();
-  public abstract String getYLabel();
-  public abstract String getXUnits();
-  public abstract String getYUnits();
-  public abstract void setScales();
-  public abstract boolean processLocalCommand(String name);
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjection2D.java b/graphics/AtlantisJava/src/atlantis/projection/AProjection2D.java
deleted file mode 100755
index d7a12dd4ead1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjection2D.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.ACalorimeterData;
-import atlantis.data.ADHelix;
-import atlantis.event.AData;
-import atlantis.event.AEvent;
-import atlantis.geometry.AAtlasDetector;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.parameters.AParameter;
-import atlantis.utils.APolygon;
-import atlantis.utils.AVector;
-
-/**
- * Base class of Standard 2D projections handles the painting of a projection
- * Handles non-linear transforms (linear transforms in AWindow)
- */
-public abstract class AProjection2D extends AProjection
-{
-    private boolean debug = false;
-    protected ArrayList<JMenuItem> popupItems;
-    protected final static String ASPECT_RATIO_1 = "Aspect Ratio 1";
-    
-    public AProjection2D()
-    {
-        popupItems = new ArrayList<JMenuItem>();
-    }
-    
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-        
-        if (action.equals(ASPECT_RATIO_1))
-            setAspectRatio1(ACanvas.getCanvas().getCurrentWindow());
-    }
-    
-    public void setAspectRatio1(AWindow window)
-    {
-        //Get the extend of the shown projection (i.e. the corners in user coordinates)
-        Point2D.Double[] corners = window.getUserCorners();
-        AVector v01 = new AVector(corners[0], corners[1]);
-        AVector v12 = new AVector(corners[1], corners[2]);
-        //Get the actual size of this window on the screen
-        Rectangle wSize = window.getBounds();
-        
-        //Calculate new corner positions
-        //This seems a bit longish to me... CLEANUP - S.B.
-
-        //Calculate stretch factor f such that we keep the larger one of the two extends in user coordinates 
-        //"modulus" just means length of vector!
-        double f = Math.min(wSize.width / v01.modulus(), wSize.height / v12.modulus());
-    
-        //Rescale new width and height
-        double w = wSize.width / f;
-        double h = wSize.height / f;
-        
-        //All this just to calculate the center and the new scale
-        //Maybe easier to split with an if-statement rather than using "Math.min" above
-        AVector down = v12.getUnitary().scale(h / 2);
-        AVector up = v12.getUnitary().invert().scale(h / 2);
-        
-        AVector v0 = v01.getUnitary().invert().scale(w / 2).add(up);
-        AVector v1 = v01.getUnitary().scale(w / 2).add(up);
-        AVector v2 = v01.getUnitary().scale(w / 2).add(down);
-        
-        AVector v02 = new AVector(corners[0], corners[2]).scale(0.5);
-        Point2D.Double center = new Point2D.Double(corners[0].x + v02.dx, corners[0].y + v02.dy);
-        
-        //Set the new corner positions
-        corners[0].setLocation(center.x + v0.dx, center.y + v0.dy);
-        corners[1].setLocation(center.x + v1.dx, center.y + v1.dy);
-        corners[2].setLocation(center.x + v2.dx, center.y + v2.dy);
-        
-        //Apply new user coordinates
-        window.setUserCorners(corners);
-    }
-    
-    public boolean processLocalCommand(String name)
-    {
-        return false;
-    }
-    
-    public abstract String getName();
-    
-    public String getScreenName()
-    {
-        return getName();
-    }
-    
-    protected Color getBackgroundFillColor(Color[] colorMap)
-    {
-        return colorMap[parameterStore.get("Color", "BkgFill").getI()];
-    }
-    
-    // min rho for tracks
-    public double getMinRho()
-    {
-        return 0.;
-    }
-    
-    public void paint(AWindow window, Graphics g)
-    {
-        
-        AEvent event = null;
-        List hitsAndTracks = null;
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        long time = 0;
-        
-        if (debug)
-        {
-            time = System.currentTimeMillis();
-        }
-        fillBackground(window, ag);
-        if (debug)
-        {
-            System.out.println("fill " + (System.currentTimeMillis() - time));
-            time = System.currentTimeMillis();
-        }
-        
-        // draw detector geometry
-        AAtlasDetector.getDetector().draw(window, ag, this);
-        if (debug)
-        {
-            System.out.println("det " + (System.currentTimeMillis() - time));
-            time = System.currentTimeMillis();
-        }
-        
-        // is true when F key is pressed during ZMR operations (detector is
-        // zoomed for instance, but data are not drawn during the operation)
-        boolean fastZooming = parameterStore.get("Projection", "SkipData").getStatus();
-        if (fastZooming)
-        {
-            return;
-        }
-
-        // draw the current event 
-        event = eventManager.getCurrentEvent();
-        
-        //If there is no current event do nothing
-        if (event == null) return;
-        
-        ACalorimeterData.drawCalorimeters(window, ag, this, event);
-        
-        hitsAndTracks = event.getHitsAndTracks(this);
-        if (debug)
-        {
-            System.out.println("calo " + (System.currentTimeMillis() - time));
-            time = System.currentTimeMillis();
-        }
-        for (int h = 0; h < hitsAndTracks.size(); h++)
-        {
-            ((AData) hitsAndTracks.get(h)).draw(window, ag, this);
-            if (debug)
-            {
-                long delta = (System.currentTimeMillis() - time);
-                if (delta > 0)
-                {
-                    System.out.println(((AData) hitsAndTracks.get(h)).getName() + " " + delta);
-                }
-                time = System.currentTimeMillis();
-            }
-        } // for
-     
-    } // paint()
-    
-    protected void fillBackground(AWindow window, AGraphics ag)
-    {
-        ag.setColor(getBackgroundFillColor(AColorMap.getColors()));
-        ag.fillRect(0, 0, window.getWidth(), window.getHeight());
-    }
-    
-    // this is here to make drawing of tracks fast enough
-    public abstract ACoord getUserPoint(ADHelix dH, double s);
-    
-    public ACoord nonLinearTransform(ACoord user)
-    {
-        return user;
-    }
-    
-    public ACoord[] nonLinearTransform(ACoord[] user)
-    {
-        if (user != null)
-            for (int i = 0; i < user.length; i++)
-                user[i] = nonLinearTransform(user[i]);
-        return user;
-    }
-    
-    public Point2D.Double nonLinearTransform(double x, double y)
-    {
-        ACoord c = nonLinearTransform(new ACoord(x, y));
-        return new Point2D.Double(c.hv[0][0][0], c.hv[1][0][0]);
-    }
-    
-    public Point2D.Double nonLinearTransform(Point2D.Double user)
-    {
-        return nonLinearTransform(user.x, user.y);
-    }
-    
-    public ACoord inverseNonLinearTransform(ACoord user)
-    {
-        return user;
-    }
-    
-    public Point2D.Double inverseNonLinearTransform(double x, double y)
-    {
-        ACoord c = inverseNonLinearTransform(new ACoord(x, y));
-        
-        return new Point2D.Double(c.hv[0][0][0], c.hv[1][0][0]);
-    }
-    
-    public Point2D.Double inverseNonLinearTransform(Point2D.Double user)
-    {
-        return inverseNonLinearTransform(user.x, user.y);
-    }
-    
-    protected static ACoord nonLinearTransform2D(ACoord user, String projectionName)
-    {
-        AParameter fishEyePar = parameterStore.get(projectionName, "FishEye");
-        
-        if (fishEyePar.getStatus())
-        {
-            double[] z, r;
-            double fishEye = 0.001 * fishEyePar.getD();
-            double rTo = parameterStore.get(projectionName, "rTo").getD();
-            double zTo = parameterStore.get(projectionName, "zTo").getD();
-            
-            for (int j = 0; j < user.hv[0].length; ++j)
-            {
-                z = user.hv[0][j];
-                r = user.hv[1][j];
-                for (int i = 0; i < z.length; ++i)
-                {
-                    z[i] *= (1 + fishEye * zTo) / (1 + fishEye * Math.abs(z[i]));
-                    r[i] *= (1 + fishEye * rTo) / (1 + fishEye * Math.abs(r[i]));
-                }
-            }
-        }
-        return user;
-    }
-    
-    protected static ACoord inverseNonLinearTransform2D(ACoord user, String projectionName)
-    {
-        AParameter fishEyePar = parameterStore.get(projectionName, "FishEye");
-        
-        if (fishEyePar.getStatus())
-        {
-            double[] z, r;
-            double fishEye = 0.001 * fishEyePar.getD();
-            double rTo = parameterStore.get(projectionName, "rTo").getD();
-            double zTo = parameterStore.get(projectionName, "zTo").getD();
-            
-            for (int j = 0; j < user.hv[0].length; ++j)
-            {
-                z = user.hv[0][j];
-                r = user.hv[1][j];
-                for (int i = 0; i < z.length; ++i)
-                {
-                    z[i] *= 1 / (1 + fishEye * (zTo - Math.abs(z[i])));
-                    r[i] *= 1 / (1 + fishEye * (rTo - Math.abs(r[i])));
-                }
-            }
-        }
-        return user;
-    }
-    
-    protected static Point2D.Double[] aspectRatioLayout(double width, double height, Dimension wSize)
-    {
-        double f = Math.min(wSize.width / width, wSize.height / height);
-        
-        width = wSize.width / f;
-        height = wSize.height / f;
-        
-        Point2D.Double[] corners = new Point2D.Double[3];
-        
-        corners[0] = new Point2D.Double(-width, +height);
-        corners[1] = new Point2D.Double(+width, +height);
-        corners[2] = new Point2D.Double(+width, -height);
-        return corners;
-    }
-    
-    public void setScales()
-    {}
-    
-    public abstract Point2D.Double[] calculateNoZoomCorners(Dimension wSize);
-    
-    public abstract Point2D.Double getCenter();
-    
-    public Point2D.Double[] validateCorners(Point2D.Double[] corners)
-    {
-        APolygon p = new APolygon();
-        
-        for (int i = 0; i < corners.length; i++)
-            p.addPoint(corners[i].x, corners[i].y);
-        
-        if (p.getArea() == 0)
-            return null;
-        else
-            return corners;
-    }
-    
-    /**
-     * This function is called when the ACanvas configuration was written on
-     * a screen with one aspect ratio but the current screen has a different
-     * aspect ratio. Subclasses may re-implement this to behave however they
-     * like. At present (when this was written) only YX does anything.
-     * 
-     *  -- Adam Davison
-     * 
-     * @param w AWindow object containing this
-     * @param oldaspect Aspect ratio of screen where current window corners were chosen
-     * @param newaspect Aspect ratio of screen now
-     */
-    
-    public void aspectRatioChange(AWindow w, double oldaspect, double newaspect) {
-        // Do nothing by default
-    }
-    
-    public JMenuItem[] getPopupItems()
-    {
-        // Can't cast arrays very easily...
-        JMenuItem[] ret = new JMenuItem[popupItems.size()];
-        for (int i = 0; i < popupItems.size(); i++) {
-            ret[i] = (JMenuItem)popupItems.get(i);
-        }
-        return ret;
-    }
-    
-    protected void addPopupItem(String str) {
-        JMenuItem it = new JMenuItem(str);
-        popupItems.add(it);
-        it.addActionListener(this);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjection3D.java b/graphics/AtlantisJava/src/atlantis/projection/AProjection3D.java
deleted file mode 100755
index 28bf192814cf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjection3D.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package atlantis.projection;
-
-import atlantis.data.ADHelix;
-import atlantis.graphics.*;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import atlantis.event.*;
-import java.awt.*;
-import java.awt.geom.*;
-import javax.swing.JMenuItem;
-
-public class AProjection3D extends AProjection2D {
-
-  // axis about which the rotations take place
-  static private double phi;
-  static private double sinPhi, cosPhi;
-  // center of rotation in xyz frame
-  static private double rx, ry, rz;
-  // three axis abc in the xyz frame
-  static private double ax, ay, az;
-  static private double bx, by, bz;
-  static private double cx, cy, cz;
-
-  static private double[][] abc=new double[3][3];
-
-  public AProjection3D() {
-    JMenuItem asp = new JMenuItem(ASPECT_RATIO_1);
-    asp.addActionListener(this);
-    popupItems.add(asp);
-  }
-
-  public String getName() {
-    return "3D";
-  }
-
-  public String getXLabel() {
-    return "V";
-  }
-
-  public String getYLabel() {
-    return "H";
-  }
-
-  public String getXUnits() {
-    return "(cm)";
-  }
-
-  public String getYUnits() {
-    return "(cm)";
-  }
-
-  public Point2D.Double getCenter() {
-    return new Point2D.Double(0, 0);
-  }
-
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    double radius=parameterStore.get("Projection", "TrackingRadius").getD();
-    double length=parameterStore.get("Projection", "TrackingLength").getD();
-    return aspectRatioLayout(length, radius, wSize);
-  }
-
-  public static double getPhi() {
-    return parameterStore.get("3D", "Phi").getD();
-  }
-
-  public static void updateParameters() {
-    phi=Math.toRadians(getPhi());
-    sinPhi=Math.sin(phi);
-    cosPhi=Math.cos(phi);
-    ax=parameterStore.get("3D", "xAxis").getD();
-    ay=parameterStore.get("3D", "yAxis").getD();
-    az=parameterStore.get("3D", "zAxis").getD();
-    rx=parameterStore.get("Event", "XVtx").getD();
-    ry=parameterStore.get("Event", "YVtx").getD();
-    rz=parameterStore.get("Event", "ZVtx").getD();
-    double dx;
-    double dy;
-    double dz;
-
-    if(ax==0.&&ay==0) {
-      // d is the y-axis
-      dx=0.;
-      dy=-1.;
-      dz=0.;
-    } else {
-      // d is the z-axis
-      dx=0.;
-      dy=0.;
-      dz=1.;
-    }
-
-    bx=+ay*dz-az*dy;
-    by=-ax*dz+az*dx;
-    bz=+ax*dy-ay*dx;
-
-    cx=+ay*bz-az*by;
-    cy=-ax*bz+az*bx;
-    cz=+ax*by-ay*bx;
-  }
-
-  public static double[][] getRotationMatrix() {
-    updateParameters();
-    abc[0][0]=ax;
-    abc[0][1]=ay;
-    abc[0][2]=az;
-    abc[1][0]=bx;
-    abc[1][1]=by;
-    abc[1][2]=bz;
-    abc[2][0]=cx;
-    abc[2][1]=cy;
-    abc[2][2]=cz;
-    return abc;
-  }
-
-  public static double[] getRotated(double[] p) {
-    updateParameters();
-    double x=p[0]-rx;
-    double y=p[1]-ry;
-    double z=p[2]-rz;
-
-    double u=x*ax+y*ay+z*az;
-    double v=x*bx+y*by+z*bz;
-    double w=x*cx+y*cy+z*cz;
-
-    p[0]=u;
-    p[1]=v*cosPhi-w*sinPhi;
-    p[2]=v*sinPhi+w*cosPhi;
-    return p;
-  }
-
-  public static double[][] getRotated(int numDraw, int[] listdl, float[] x, float[] y, float[] z) {
-    updateParameters();
-
-    double[][] uvw=new double[3][numDraw];
-
-    for(int i=0; i<numDraw; i++) {
-      int list=listdl[i];
-      double xx=x[list]-rx;
-      double yy=y[list]-ry;
-      double zz=z[list]-rz;
-      double u=xx*ax+yy*ay+zz*az;
-      double v=xx*bx+yy*by+zz*bz;
-      double w=xx*cx+yy*cy+zz*cz;
-      uvw[0][i]=u;
-      uvw[1][i]=v*cosPhi-w*sinPhi;
-      uvw[2][i]=v*sinPhi+w*cosPhi;
-    }
-    return uvw;
-  }
-
-  public static int[] getAxisMapping() {
-    return new int[] {0, 1, 2};
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return nonLinearTransform(dH.get3DPoint(s));
-  }
-
-  public ACoord nonLinearTransform(ACoord user) {
-    return nonLinearTransform2D(user, getName());
-  }
-
-  public ACoord inverseNonLinearTransform(ACoord user) {
-    return inverseNonLinearTransform2D(user, getName());
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjection3DBox.java b/graphics/AtlantisJava/src/atlantis/projection/AProjection3DBox.java
deleted file mode 100755
index 62ae22b6913c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjection3DBox.java
+++ /dev/null
@@ -1,569 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.util.LinkedList;
-
-import javax.swing.JMenuItem;
-
-import Jama.Matrix;
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.A3DPointData;
-import atlantis.data.ADHelix;
-import atlantis.event.AEvent;
-import atlantis.data.ATrackData;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.ADrawable;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-
-public class AProjection3DBox extends AProjection
-{
-    // angle of the rotation about the axis
-    static private double phi;
-    static private double sinPhi;
-    static private double cosPhi;
-
-    static private double scale;
-    static private double zP;
-    static private double xz;
-    static private double yz;
-    
-    static private AVec3D centerDisplay;
-    static private AVec3D sizeDisplay;
-    
-    static private AVec3D sizeUser = new AVec3D(1.1, .5, .5);
-    
-    static final String RESTORE_DEFAULTS = "Default Box Volume";
-    
-    static private LinkedList<AVec3D[]> planes = new LinkedList<AVec3D[]>();
-    
-    static private JMenuItem[] popupItems;
-    
-    public AProjection3DBox()
-    {
-        popupItems = new JMenuItem[1];
-        popupItems[0] = new JMenuItem(RESTORE_DEFAULTS);
-        popupItems[0].addActionListener(this);
-    }
-    
-    public String getName()
-    {
-        return "3DBox";
-    }
-    
-    public String getScreenName()
-    {
-        return "3DBox";
-    }
-    
-    public String getXLabel()
-    {
-        return "V";
-    }
-    
-    public String getYLabel()
-    {
-        return "H";
-    }
-    
-    public String getXUnits()
-    {
-        return "(cm)";
-    }
-    
-    public String getYUnits()
-    {
-        return "(cm)";
-    }
-    
-    public void setScales()
-    {}
-    
-    public boolean processLocalCommand(String name)
-    {
-        return false;
-    }
-    
-    public Point2D.Double getCenter(AWindow window)
-    {
-        updateParameters(window);
-        return new Point2D.Double(centerDisplay.x, centerDisplay.y);
-    }
-    
-    public void zoom(double factor)
-    {
-        if (factor != 0.)
-        {
-            sizeUser = sizeUser.scale(factor);
-            updateScale();
-        }
-    }
-    
-    public static void setSizeUser(double size)
-    {
-        if (size != 0.)
-        {
-            sizeUser.x = size;
-            // updateScale();
-            // ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-        }
-    }
-    
-    public void zoomHorizontal(double factor)
-    {
-        if (factor != 0.)
-        {
-            sizeUser.x *= factor;
-            updateScale();
-        }
-    }
-    
-    public void zoomVertical(double factor)
-    {
-        if (factor != 0. && !Double.isInfinite(factor))
-        {
-            sizeUser.y *= factor;
-            sizeUser.z *= factor;
-            updateScale();
-        }
-    }
-    
-    public static void updateScale()
-    {
-        scale = parameterStore.get("3DBox", "Scale").getD();
-        ACanvas.getCanvas().getCurrentWindow().setUserCorners(0, 2. * sizeUser.x / scale, -sizeUser.y / scale, sizeUser.y / scale);
-    }
-    
-    public static void updateScale(AWindow window)
-    {
-        scale = parameterStore.get("3DBox", "Scale").getD();
-        window.setUserCorners(0, 2. * sizeUser.x / scale, -sizeUser.y / scale, sizeUser.y / scale);
-    }
-    
-    public static double getPhi()
-    {
-        return parameterStore.get("3DBox", "Phi").getD();
-    }
-    
-    public static void updateParameters(AWindow window)
-    {
-        phi = Math.toRadians(getPhi());
-        sinPhi = Math.sin(phi);
-        cosPhi = Math.cos(phi);
-        scale = parameterStore.get("3DBox", "Scale").getD();
-        zP = parameterStore.get("3DBox", "ZP").getD();
-        xz = parameterStore.get("3DBox", "xz").getD();
-        yz = parameterStore.get("3DBox", "yz").getD();
-        
-        Rectangle bounds = window.getCurrDisp();
-        centerDisplay = new AVec3D(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2, 0.);
-        sizeDisplay = new AVec3D(0.5 * bounds.width * scale, 0.5 * bounds.height * scale, 0.5 * bounds.height * scale);
-        centerDisplay.x -= sizeDisplay.x;
-        updateScale(window);
-    }
-    
-    protected void drawBox(AGraphics ag)
-    {
-        double x = sizeDisplay.x;
-        double y = sizeDisplay.y;
-        double z = sizeDisplay.z;
-        
-        AVec3D[] firstPlane = new AVec3D[] { new AVec3D(0, y, z), new AVec3D(0, y, -z), new AVec3D(0, -y, -z), new AVec3D(0, -y, z) };
-        AVec3D[] middlePlane = new AVec3D[] { new AVec3D(x, y, z), new AVec3D(x, y, -z), new AVec3D(x, -y, -z), new AVec3D(x, -y, z) };
-        AVec3D[] lastPlane = new AVec3D[] { new AVec3D(2 * x, y, z), new AVec3D(2 * x, y, -z), new AVec3D(2 * x, -y, -z), new AVec3D(2 * x, -y, z) };
-        
-        planes = new LinkedList<AVec3D[]>();
-        
-        planes.add(firstPlane);
-        planes.add(middlePlane);
-        planes.add(lastPlane);
-        
-        for (int i = 0; i < planes.size(); i++)
-        {
-            AVec3D[] plane = (AVec3D[]) (planes.get(i));
-            for (int j = 0; j < plane.length; ++j)
-                plane[j] = applyViewPoint(plane[j]);
-        }
-        
-        double[] h = new double[4];
-        double[] v = new double[4];
-        
-        // back
-        AVec3D[] back = new AVec3D[] { firstPlane[3], firstPlane[1], lastPlane[1], lastPlane[3] };
-        for (int j = 0; j < back.length; ++j)
-        {
-            h[j] = back[j].x;
-            v[j] = back[j].y;
-        }
-        
-        ag.updateDrawParameters(new ADrawParameters(true, 0, 0, 1, 0, 0));
-        ag.setColor(Color.gray);
-        ag.fillPolygon(h, v, 4);
-        ag.setColor(Color.white);
-        ag.drawPolygon(h, v, 4);
-        // base
-        AVec3D[] base = new AVec3D[] { firstPlane[0], firstPlane[1], lastPlane[1], lastPlane[0] };
-        for (int j = 0; j < base.length; ++j)
-        {
-            h[j] = base[j].x;
-            v[j] = base[j].y;
-        }
-        ag.setColor(Color.black);
-        ag.fillPolygon(h, v, 4);
-        ag.setColor(Color.white);
-        ag.drawPolygon(h, v, 4);
-        
-        for (int i = 0; i < planes.size(); i++)
-        {
-            AVec3D[] plane = (AVec3D[]) (planes.get(i));
-            for (int j = 0; j < plane.length; ++j)
-            {
-                h[j] = plane[j].x;
-                v[j] = plane[j].y;
-            }
-            ag.setColor(Color.black);
-            ag.fillPolygon(h, v, 4);
-            ag.setColor(Color.white);
-            ag.drawPolygon(h, v, 4);
-        }
-        
-        // top
-        AVec3D[] top = new AVec3D[] { firstPlane[3], firstPlane[2], lastPlane[2], lastPlane[3] };
-        for (int j = 0; j < top.length; ++j)
-        {
-            h[j] = top[j].x;
-            v[j] = top[j].y;
-        }
-        ag.setColor(Color.white);
-        ag.drawPolygon(h, v, 4);
-    }
-    
-    protected void touchupBox(AGraphics ag)
-    {
-        ag.updateDrawParameters(new ADrawParameters(true, 0, 0, 1, 0, 0));
-        ag.setColor(Color.white);
-        for (int i = 0; i < planes.size(); i++)
-        {
-            AVec3D[] plane = (AVec3D[]) (planes.get(i));
-            ag.drawLine(plane[1].x, plane[1].y, plane[2].x, plane[2].y);
-        }
-    }
-    
-    AVec3D scale(AVec3D v)
-    {
-        return v.mult(sizeDisplay).divide(sizeUser);
-    }
-    
-    AVec3D rotate(AVec3D v)
-    {
-        return new AVec3D(v.x, v.y * cosPhi - v.z * sinPhi, v.y * sinPhi + v.z * cosPhi);
-    }
-    
-    static AVec3D applyViewPoint(AVec3D v)
-    {
-        return new AVec3D((v.x + xz * v.z) * (1 - v.z * zP) + centerDisplay.x, (v.y + yz * v.z) * (1 - v.z * zP) + centerDisplay.y, v.z);
-    }
-    
-    public void paint(AWindow window, Graphics g)
-    {
-        updateParameters(window);
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        fillBackground(window, ag);
-        drawBox(ag);
-        AEvent event = eventManager.getCurrentEvent();
-        if (event == null)
-            return;
-        
-        java.util.List hitsAndTracks = event.getHitsAndTracks(this);
-        
-        for (int h = 0; h < hitsAndTracks.size(); h++)
-        {
-            Object o = hitsAndTracks.get(h);
-            if (o instanceof ATrackData)
-                drawTracks((ATrackData) o, window, ag);
-            else if (o instanceof A3DPointData)
-                drawPoints((A3DPointData) o, window, ag);
-        }
-        touchupBox(ag);
-    }
-    
-    protected void drawPoints(A3DPointData pointData, AWindow window, AGraphics ag)
-    {
-        double[][] points = pointData.get3DPoints();
-        int[] index = pointData.get3DPointsIndex();
-        
-        double[][][] hv = new double[2][1][index.length];
-        
-        for (int i = 0; i < points.length; ++i)
-        {
-            AVec3D point = rotate(new AVec3D(AProjection3D.getRotated(points[i])));
-            
-            if (point.x > 0 && point.x < 2 * sizeUser.x && point.y > -sizeUser.y && point.y < sizeUser.y && point.z > -sizeUser.z && point.z < sizeUser.z)
-            {
-                point = applyViewPoint(scale(point));
-                hv[0][0][i] = point.x;
-                hv[1][0][i] = point.y;
-            }
-            else
-            {
-                // aaargh allow this to be clipped from picture for now
-                hv[0][0][i] = -1000.;
-                hv[1][0][i] = -1000.;
-            }
-        }
-        
-        ag.draw(new ACoord(hv, index, pointData, ACoord.SYMBOLS));
-    }
-    
-    protected void drawTracks(ATrackData tracks, AWindow window, AGraphics ag)
-    {
-        ADHelix[] dhelix = tracks.getHelices();
-
-        int numPlanes = planes.size();
-        int numSegments = numPlanes + 4;
-        AVec3D[][] intersection = new AVec3D[dhelix.length][numPlanes];
-        
-        double[][][] hv = new double[2][dhelix.length * numSegments][0];
-        int[] index = new int[dhelix.length * numSegments];
-        int[] indexTemp = tracks.getDrawList();
-        for (int i = 0; i < indexTemp.length; ++i)
-            for (int j = 0; j < numSegments; ++j)
-                index[i * numSegments + j] = indexTemp[i];
-        
-        int numPointsOnEllipse = 24;
-        AVec3D[] ellipse = new AVec3D[numPointsOnEllipse + 1];
-        double radius = 0.005;
-        for (int i = 0; i < ellipse.length; i++)
-        {
-            double phi = 2. * Math.PI * i / numPointsOnEllipse;
-            ellipse[i] = new AVec3D(0., radius * Math.sin(phi), radius * Math.cos(phi));
-        }
-        
-        for (int j = 0; j < dhelix.length; ++j)
-            if (dhelix[j] != null)
-            {
-                // s always 0? I don't know why that is...
-                double s = 0.;
-                AVec3D start = new AVec3D(dhelix[j].get3DPointAsArray(s));
-                AVec3D end = new AVec3D(dhelix[j].get3DPointAsArray(s + 0.01));
-                
-                boolean backwards = false;
-                
-                // calculate intersections
-                for (int p = 0; p < planes.size(); ++p)
-                {
-                    // position of plane
-                    double xInt = p * sizeUser.x;
-                    double m = (xInt - start.x) / (end.x - start.x);
-                    
-                    // While we're in here, can check if we're pointing in the right direction
-                    if (p == 1 && m < 0.0) { backwards = true; }
-                    
-                    double yInt = start.y + m * (end.y - start.y);
-                    double zInt = start.z + m * (end.z - start.z);
-                    intersection[j][p] = new AVec3D(xInt, yInt, zInt);
-                }
-                
-                // Throw out anything that isn't pointing in the right direction...
-                if (backwards) { continue; }
-                
-                AVec3D first = rotate(intersection[j][0]);
-                AVec3D middle = rotate(intersection[j][1]);
-                AVec3D last = rotate(intersection[j][numPlanes - 1]);
-                
-                if (first.y > -sizeUser.y && first.y < sizeUser.y && first.z > -sizeUser.z && first.z < sizeUser.z && last.y > -sizeUser.y && last.y < sizeUser.y && last.z > -sizeUser.z && last.z < sizeUser.z)
-                {
-                    
-                    double[][] cov = dhelix[j].helix.getCovariance();
-                    if (cov != null)
-                    {
-                        double[][] c = new double[2][2];
-                        c[0][0] = cov[0][0];
-                        c[0][1] = cov[0][1];
-                        c[1][0] = cov[1][0];
-                        c[1][1] = cov[1][1];
-                        Matrix covM = new Matrix(c);
-                        Matrix errM = covM.inverse();
-                        
-                        double b1 = errM.get(0, 0);
-                        double b2 = errM.get(1, 1);
-                        
-                        double b3 = 2. * errM.get(0, 1);
-                        if (parameterStore.get("3DBox", "ellipses").getStatus())
-                        {
-                            ellipse = new AVec3D[180];
-                            
-                            for (int i = 0; i < 360; i += 2)
-                            {
-                                double thetat = Math.toRadians(i);
-                                double tt = Math.tan(thetat);
-                                double xx = Math.sqrt(1. / (b1 + b2 * tt * tt + b3 * tt));
-                                if (i > 90 && i <= 270)
-                                    xx *= -1.;
-                                ellipse[i / 2] = new AVec3D(0., xx, xx * tt);
-                            }
-                        }
-                        // add intersections to draw list
-                        for (int p = 0; p < planes.size(); ++p)
-                        {
-                            double[] h = new double[ellipse.length];
-                            double[] v = new double[ellipse.length];
-                            
-                            for (int i = 0; i < ellipse.length; i++)
-                            {
-                                AVec3D point = applyViewPoint(scale(rotate(intersection[j][p].add(ellipse[i]))));
-                                h[i] = point.x;
-                                v[i] = point.y;
-                            }
-                            
-                            hv[0][numSegments * j + p] = h;
-                            hv[1][numSegments * j + p] = v;
-                        }
-                    }
-                    first = applyViewPoint(scale(first));
-                    middle = applyViewPoint(scale(middle));
-                    last = applyViewPoint(scale(last));
-                    
-                    double[][] edge = new double[planes.size()][2];
-                    for (int i = 0; i < planes.size(); i++)
-                    {
-                        AVec3D[] plane = (AVec3D[]) (planes.get(i));
-                        double xInt = plane[1].x;
-                        double m = (xInt - first.x) / (last.x - first.x);
-                        double yInt = first.y + m * (last.y - first.y);
-                        edge[i] = new double[] { xInt, yInt };
-                    }
-                    
-                    hv[0][numSegments * j + 3] = new double[] { first.x, edge[1][0] };
-                    hv[1][numSegments * j + 3] = new double[] { first.y, edge[1][1] };
-                    hv[0][numSegments * j + 4] = new double[] { middle.x, edge[2][0] };
-                    hv[1][numSegments * j + 4] = new double[] { middle.y, edge[2][1] };
-                    
-                    drawDashed(ag, tracks, indexTemp[j], edge[1][0], edge[1][1], middle.x, middle.y);
-                    drawDashed(ag, tracks, indexTemp[j], edge[2][0], edge[2][1], last.x, last.y);
-                }
-            }
-        ag.draw(new ACoord(hv, index, tracks, ACoord.POLYLINES));
-    }
-    
-    protected void drawDashed(AGraphics ag, ADrawable source, int ind, double h0, double v0, double h1, double v1)
-    {
-        double dH = h1 - h0;
-        double dV = v1 - v0;
-        double dist = Math.sqrt(dH * dH + dV * dV);
-        double dashSize = 4;
-        int num = (int) (dist / dashSize);
-        int[] index = new int[num / 2 + 1];
-        double[][][] hv = new double[2][num / 2 + 1][2];
-        
-        for (int i = 0; i < num; ++i)
-        {
-            if (i % 2 == 1)
-            {
-                int n = i / 2;
-                index[n] = ind;
-                hv[0][n][0] = h0 + dH * i / num;
-                hv[0][n][1] = h0 + dH * (i + 1) / num;
-                hv[1][n][0] = v0 + dV * i / num;
-                hv[1][n][1] = v0 + dV * (i + 1) / num;
-                if (i >= num - 2)
-                {
-                    hv[0][n][1] = h1;
-                    hv[1][n][1] = v1;
-                }
-            }
-        }
-        ag.draw(new ACoord(hv, index, source, ACoord.POLYLINES));
-    }
-    
-protected void fillBackground(AWindow window, AGraphics ag)
-    {
-        Color[] colorMap = AColorMap.getColors();
-        ag.setColor(colorMap[getBackgroundFillColor()]);
-        ag.fillRect(0, 0, window.getWidth(), window.getHeight());
-    }
-    
-    protected int getBackgroundFillColor()
-    {
-        return parameterStore.get("Color", "BkgFill").getI();
-    }
-    
-    public JMenuItem[] getPopupItems()
-    {
-        return popupItems;
-    }
-    
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-        if (action.equals(RESTORE_DEFAULTS))
-        {
-            sizeUser.x = 2.;
-            sizeUser.y = .1;
-            sizeUser.z = .1;
-            updateScale();
-            ACanvas.getCanvas().getCurrentWindow().repaintFromScratch();
-        }
-    }
-    
-}
-
-class AVec3D
-{
-    double x, y, z;
-    
-    AVec3D(double x, double y, double z)
-    {
-        this.x = x;
-        this.y = y;
-        this.z = z;
-    }
-    
-    AVec3D(double[] v)
-    {
-        this.x = v[0];
-        this.y = v[1];
-        this.z = v[2];
-    }
-    
-    AVec3D cross(AVec3D d)
-    {
-        return new AVec3D(+this.y * d.z - this.z * d.y, -this.x * d.z + this.z * d.x, +this.x * d.y - this.y * d.x);
-    }
-    
-    AVec3D add(AVec3D d)
-    {
-        return new AVec3D(x + d.x, y + d.y, z + d.z);
-    }
-    
-    AVec3D mult(AVec3D d)
-    {
-        return new AVec3D(x * d.x, y * d.y, z * d.z);
-    }
-    
-    AVec3D divide(AVec3D d)
-    {
-        return new AVec3D(x / d.x, y / d.y, z / d.z);
-    }
-    
-    AVec3D scale(double s)
-    {
-        return new AVec3D(s * x, s * y, s * z);
-    }
-    
-    public String toString()
-    {
-        return x + " " + y + " " + z;
-    }
-    
-    public double mag2() {
-        return x*x + y*y + z*z;
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionEventInfo.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionEventInfo.java
deleted file mode 100644
index 1735ec2a666b..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionEventInfo.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import javax.swing.ImageIcon;
-import javax.swing.JMenuItem;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.ADHelix;
-import atlantis.event.AEvent;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.utils.AUtilities;
-
-/** Class used to display the ATLAS Experiment logo, along with
- *  Event Number, Run Number, and Date/Time
- *
- *  @author Tom McLaughlan
- */
-public class AProjectionEventInfo extends AProjectionInfo {
-
-    private static long EventNumber;
-    private static long RunNumber;
-    private static String DateTime;
-    private static String Source;
-    private static Color textColor = Color.white,
-            backgroundColor = Color.black;
-
-    public String getName() {
-        return "EventInfo";
-    }
-
-    public void paint(AWindow window, Graphics g) {
-
-        AEvent event = eventManager.getCurrentEvent();
-
-        if (event != null) {
-            RunNumber = event.getRunNumber();
-            EventNumber = event.getEventNumber();
-            DateTime = event.getDateTime();
-            Source = event.getSourceName();
-        }
-
-        // Begin drawing
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        // Fill the background
-        ag.setColor(backgroundColor);
-        ag.fillRect(0, 0, window.getWidth(), window.getHeight());
-
-        String iconPath = AGlobals.instance().getHomeDirectory() + "img" + System.getProperty("file.separator");
-
-        ImageIcon i = AUtilities.getFileAsImageIcon(iconPath + "atlas_logo_shadow.png");
-
-
-        // Determine height and width of current window, and width of ATLAS logo
-        // These are then used to determine a scaling factor which is used in the
-        // scale function.
-        //
-        int height = window.getSize().height;
-        int width = window.getSize().width;
-        int iwidth = i.getIconWidth();
-        double factor = (double) width / (double) iwidth;
-
-        // Call scale function to scale image to window size
-        ImageIcon iscale = AUtilities.scale(i.getImage(), factor, parameterStore.get("Prefs", "AntiAlias").getStatus());
-        // x, y calculated to position image exactly centred
-        int x = (width / 2) - (iscale.getIconWidth() / 2);
-        int y = (height / 2) - ((3 * iscale.getIconHeight()) / 4);
-
-        // get screen dpi for resolution independent scaling
-        // commented out 27/3 -- EJ
-        //   without a screen you obviously do not have a screen resolution
-        int dpi = 72; //Toolkit.getDefaultToolkit().getScreenResolution();
-
-        // Set a scaling font size with window width
-        int fontSize = (int) Math.round(3.0 * width / (double) dpi);
-
-        Font f = new Font("SansSerif", Font.PLAIN, fontSize);
-
-        ag.drawImage(iscale.getImage(), x, y);
-
-        ag.setColor(textColor); // Set colour for text
-        ag.updateColor(); // Update current colour for drawing
-
-        String DateString = "", RunEventString = "";
-        String DisclaimerString1 = "", DisclaimerString2 = "";
-        if (event != null) {
-            DateString = "Date: " + DateTime;
-            RunEventString = "Run Number: " + RunNumber + ", Event Number: " + EventNumber;
-            DisclaimerString1 = "Snapshot of a proton collision";
-            DisclaimerString2 = "directly from the ATLAS experiment";
-        } else {
-            RunEventString = "No event data available";
-        }
-
-        FontMetrics fm = g.getFontMetrics(f);
-        int DateWidth = fm.stringWidth(DateString);
-        int RunEventWidth = fm.stringWidth(RunEventString);
-        int Disclaimer1Width = fm.stringWidth(DisclaimerString1);
-        int Disclaimer2Width = fm.stringWidth(DisclaimerString2);
-
-        // This may need changing to be a bit more elegant
-        // -- currently under investigation by Tom
-
-        // Check if font is wider than the window and scale down til it fits.
-        while ((RunEventWidth > width - 20) || (DateWidth > width - 20))
-        {
-
-            fontSize = fontSize - 1;
-            f = new Font("SansSerif", Font.PLAIN, fontSize);
-            fm = g.getFontMetrics(f);
-            RunEventWidth = fm.stringWidth(RunEventString);
-            DateWidth = fm.stringWidth(DateString);
-            Disclaimer1Width = fm.stringWidth(DisclaimerString1);
-            Disclaimer2Width = fm.stringWidth(DisclaimerString2);
-        }
-
-        ag.setFont(f); // set font as defined above
-
-        // For the streams at P1, we include a disclaimer
-        // Anything without .xml is considered a stream for now
-        if (Source != null && !Source.endsWith(".xml")) {
-            ag.drawString(DisclaimerString1,
-                    (width / 2) - Disclaimer1Width / 2, 0.89 * height);
-            ag.drawString(DisclaimerString2,
-                    (width / 2) - Disclaimer2Width / 2, 0.95 * height);
-        }
-
-        if (event != null && !DateTime.equals("") && !DateTime.equals("n/a")) {
-            // If event contains Date/Time data, draw Run Number, Event Number and Date/Time
-            // and position text in centre of window
-            ag.drawString(RunEventString,
-                    (width / 2) - RunEventWidth / 2, y + (1.1 * iscale.getIconHeight()));
-
-            ag.drawString(DateString,
-                    (width / 2) - DateWidth / 2, y + (1.3 * iscale.getIconHeight()));
-        } else {
-            // Draw text (No Date/Time, for MC events, etc)
-            ag.drawString(RunEventString,
-                    (width / 2) - RunEventWidth / 2, y + (1.1 * iscale.getIconHeight()));
-
-        }
-
-    }
-
-    public JMenuItem[] getPopupItems() {
-        return null;
-    }
-
-    public String getXLabel() {
-        return "";
-    }
-
-    public String getXUnits() {
-        return "";
-    }
-
-    public String getYLabel() {
-        return "";
-    }
-
-    public String getYUnits() {
-        return "";
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent e) {
-    	assert false : "Did not expect AProjectionEventInfo to be used as ActionListener";
-    }
-
-    public void setScales() {
-    }
-
-    public Point2D.Double getCenter() {
-        return new Point2D.Double(0.0, 0.0);
-    }
-
-    public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-        Point2D.Double[] corners = new Point2D.Double[3];
-
-        corners[0] = new Point2D.Double(0., 2.);
-        corners[1] = new Point2D.Double(100., 2.);
-        corners[2] = new Point2D.Double(100., -2.);
-        return corners;
-    }
-
-    public ACoord getUserPoint(ADHelix dH, double s) {
-        return ACoord.NO_DATA;
-    }
-}//end of EventInfoProjection class
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionFR.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionFR.java
deleted file mode 100755
index ddc52bdb54cf..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionFR.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Dimension;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.ACanvas;
-import atlantis.data.ADHelix;
-import atlantis.graphics.ACoord;
-import atlantis.interactions.AZMRInteraction;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParameter;
-import atlantis.utils.AMath;
-
-public class AProjectionFR extends AProjectionPhi
-{
-    public String getName()
-    {
-        return "FR";
-    }
-
-    public String getXLabel()
-    {
-        return AMath.RHO;
-    }
-
-    public String getXUnits()
-    {
-        return "(cm)";
-    }
-
-    public Point2D.Double[] calculateNoZoomCorners(Dimension wSize)
-    {
-        Point2D.Double[] corners = new Point2D.Double[3];
-        int phiWrap = parameterStore.get(getName(), "PhiWrap").getI();
-
-        double radius = parameterStore.get("Projection", "Radius").getD();
-        corners[0] = new Point2D.Double(0, 360 + phiWrap);
-        corners[1] = new Point2D.Double(radius, 360 + phiWrap);
-        corners[2] = new Point2D.Double(radius, 0);
-        return corners;
-    }
-
-    public ACoord getUserPoint(ADHelix dH, double s)
-    {
-        return nonLinearTransform(dH.getFRPoint(s));
-    }
-
-    public ACoord nonLinearTransform(ACoord user)
-    {
-        AParameter fishEyePar = parameterStore.get(getName(), "FishEye");
-
-        // Fisheye of projection FR should not change phi
-        if (fishEyePar.getStatus())
-        {
-            double[] r;
-            //double[] phi;
-            double fishEye = 0.001 * fishEyePar.getD();
-            double rTo = parameterStore.get(getName(), "rTo").getD();
-            //Point2D.Double[] corners = ACanvas.getCanvas().getCurrentWindow().getUserCorners();
-            //double phiMid = (corners[0].getY() + corners[2].getY()) / 2.;
-
-            for (int j = 0; j < user.hv[0].length; ++j)
-            {
-                r = user.hv[0][j];
-                //phi = user.hv[1][j];
-                for (int i = 0; i < r.length; ++i)
-                {
-                    double fact = (1 + fishEye * rTo) / (1 + fishEye * r[i]);
-
-                    //phi[i] = phiMid + (phi[i] - phiMid) * fact;
-                    r[i] *= fact;
-                }
-            }
-        }
-        
-       // Horizontal Zoom is applied in ZMR interaction -
-       // don't know what this has to do here?
-       // CLEANUP - S.B.
-   /*     AParameter horZoomPar = APar.get(getName(), "HorizontalZoom");
-
-        if (horZoomPar.getStatus())
-        {
-            // performe initial horizontal zoom
-            double hzf = APar.get("FR", "HorizontalZoom").getD();
-            Point2D.Double[] corners = ACanvas.getCanvas().getCurrentWindow().getUserCorners();
-            double centerRho = corners[0].getX();
-            double centerPhi = (corners[0].getY() + corners[2].getY()) / 2.;
-            Point2D.Double center = new Point2D.Double(centerRho, centerPhi);
-            AZMRInteraction.performHorizontalZoom(center, hzf, ACanvas.getCanvas().getPaintingWindow());
-            
-            horZoomPar.setStatus(false);
-        }
-    */    
-        return user;
-    }
-
-    public ACoord inverseNonLinearTransform(ACoord user)
-    {
-        AParameter fishEyePar = parameterStore.get(getName(), "FishEye");
-
-        if (fishEyePar.getStatus())
-        {
-            double[] r;
-            //double[] phi;
-            double fishEye = 0.001 * fishEyePar.getD();
-            double rTo = parameterStore.get(getName(), "rTo").getD();
-            //Point2D.Double[] corners = ACanvas.getCanvas().getCurrentWindow().getUserCorners();
-            //double phiMid = (corners[0].getY() + corners[2].getY()) / 2.;
-
-            for (int j = 0; j < user.hv[0].length; ++j)
-            {
-                r = user.hv[0][j];
-                //phi = user.hv[1][j];
-                for (int i = 0; i < r.length; ++i)
-                {
-                    double fact = 1 / (1 + fishEye * (rTo - r[i]));
-
-                    //phi[i] = phiMid + (phi[i] - phiMid) * fact;
-                    r[i] *= fact;
-                }
-            }
-        }
-
-        return user;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionFZ.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionFZ.java
deleted file mode 100755
index 32c092064bd5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionFZ.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package atlantis.projection;
-
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import java.awt.geom.*;
-import java.awt.*;
-import atlantis.graphics.ACoord;
-import atlantis.data.ADHelix;
-
-
-public class AProjectionFZ extends AProjectionPhi {
-
-  public String getName() {
-    return "FZ";
-  }
-
-  public String getXLabel() {
-    return "Z";
-  }
-
-  public String getXUnits() {
-    return "(cm)";
-  }
-
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    Point2D.Double[] corners=new Point2D.Double[3];
-    int phiWrap=parameterStore.get(getName(), "PhiWrap").getI();
-
-    double length=parameterStore.get("Projection", "Length").getD();
-
-    corners[0]=new Point2D.Double(-length, 360+phiWrap);
-    corners[1]=new Point2D.Double(length, 360+phiWrap);
-    corners[2]=new Point2D.Double(length, 0);
-    return corners;
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return nonLinearTransform(dH.getFZPoint(s));
-  }
-
-  public ACoord nonLinearTransform(ACoord user) {
-    AParameter fishEyePar=parameterStore.get(getName(), "FishEye");
-
-    if(fishEyePar.getStatus()) {
-      double[] z;
-      double fishEye=0.001*fishEyePar.getD();
-      double zTo=parameterStore.get(getName(), "zTo").getD();
-
-      for(int j=0; j<user.hv[0].length; ++j) {
-        z=user.hv[0][j];
-        for(int i=0; i<z.length; ++i)
-          z[i]*=(1+fishEye*zTo)/(1+fishEye*Math.abs(z[i]));
-      }
-    }
-    return user;
-  }
-
-  public ACoord inverseNonLinearTransform(ACoord user) {
-    AParameter fishEyePar=parameterStore.get(getName(), "FishEye");
-
-    if(fishEyePar.getStatus()) {
-      double[] z;
-      double fishEye=0.001*fishEyePar.getD();
-      double zTo=parameterStore.get(getName(), "zTo").getD();
-
-      for(int j=0; j<user.hv[0].length; ++j) {
-        z=user.hv[0][j];
-        for(int i=0; i<z.length; ++i)
-          z[i]*=1/(1+fishEye*(zTo-Math.abs(z[i])));
-      }
-    }
-    return user;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionInfo.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionInfo.java
deleted file mode 100644
index b7428f177514..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionInfo.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.image.BufferedImage;
-
-import javax.swing.ImageIcon;
-
-import atlantis.canvas.AWindow;
-import atlantis.event.AEvent;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-
-/**
- * Stripped down clone of the 2D Projection class
- * Used simply to display event data (as text) in a window
- * with the ATLAS experiment logo, for publications and presentation purposes
- * 
- * Also contains rudimentary image scaling code used to scale the ATLAS logo depending
- * on window size
- * 
- * @author Tom McLaughlan
- */
-public abstract class AProjectionInfo extends AProjection
-{
-    private boolean debug = false;
-
-    protected final static String ASPECT_RATIO_1 = "Aspect Ratio 1";
-    
-    public AProjectionInfo()
-    {}
-    
-    public boolean processLocalCommand(String name)
-    {
-        return false;
-    }
-    
-    public abstract String getName();
-    
-    public String getScreenName()
-    {
-        return getName();
-    }
-    
-    protected Color getBackgroundFillColor(Color[] colorMap)
-    {
-        return colorMap[parameterStore.get("Color", "BkgFill").getI()]; 
-    }
-    
-    public void paint(AWindow window, Graphics g)
-    {
-        
-        AEvent event = null;
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        long time = 0;
-        
-        if (debug)
-        {
-            time = System.currentTimeMillis();
-        }
-        fillBackground(window, ag);
-        if (debug)
-        {
-            System.out.println("fill " + (System.currentTimeMillis() - time));
-            time = System.currentTimeMillis();
-        }
-        
-
-        // draw the current event 
-        event = eventManager.getCurrentEvent();
-        
-        //If there is no current event do nothing
-        if (event == null) return;
-     
-    } // paint()
-    
-    protected void fillBackground(AWindow window, AGraphics ag)
-    {
-        ag.setColor(getBackgroundFillColor(AColorMap.getColors()));
-        ag.fillRect(0, 0, window.getWidth(), window.getHeight());
-    }
-    
-    protected static Point2D.Double[] aspectRatioLayout(double width, double height, Dimension wSize)
-    {
-        double f = Math.min(wSize.width / width, wSize.height / height);
-        
-        width = wSize.width / f;
-        height = wSize.height / f;
-        
-        Point2D.Double[] corners = new Point2D.Double[3];
-        
-        corners[0] = new Point2D.Double(-width, +height);
-        corners[1] = new Point2D.Double(+width, +height);
-        corners[2] = new Point2D.Double(+width, -height);
-        return corners;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionLegoPlot.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionLegoPlot.java
deleted file mode 100755
index 2179a2d7f2e2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionLegoPlot.java
+++ /dev/null
@@ -1,402 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.geom.Point2D;
-import java.util.HashSet;
-import java.util.Set;
-
-import atlantis.canvas.ACanvas;
-import atlantis.canvas.AWindow;
-import atlantis.data.ACalorimeterData;
-import atlantis.data.ADHelix;
-import atlantis.event.AEvent;
-import atlantis.data.ALegoData;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.ALegoDraw;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.utils.AMath;
-
-public class AProjectionLegoPlot extends AProjection2D
-{
-    public static byte nLayers = 29;//also used in ALegoData
-    //xz and yz are used to define the angle of the eta axis (altered in rotate interaction)
-    private static double[] xz;
-    private static double[] yz;
-    //Variables needed by ALegoDraw and ALegoData that are updated here from changes to the gui value
-    public static int defaultScale = parameterStore.get("LegoPlot", "Scale").getI();//set the axis scale (standard, log or sqrt)
-    public static int nPhiCells = parameterStore.get("LegoPlot", "nphicells").getI();
-    public static int nEtaCells = parameterStore.get("LegoPlot", "netacells").getI();
-    public static Color[] defaultColorMap = AColorMap.getColors();
-    public static Color[] caloColorMap = AColorMap.getColors();//to allow colouring by energy
-    public static boolean reverse = false;//also used by ASynchroCursorsInteraction
-    public static int mode = parameterStore.get("LegoPlot", "Mode").getI();
-    public static int colorEM, colorHad;
-    public static Set colorset = new HashSet();//not updated here
-    public static final int minimumofLogScale=(int) Math.round(Math.log10(0.01));// we set 10MeV to lego height 0 on log scale
-    protected final static String VIEW_DEFAULT = "View normal";
-    protected final static String VIEW_FROM_ABOVE = "View from above";
-    protected final static String VIEW_ET_ETA = "View Et v " + AMath.ETA;
-    protected final static String VIEW_ET_PHI = "View Et v " + AMath.PHI;
-    
-    //to select th right drawing options for AOD object towers
-    public final static int DRAW_MET = -21;
-    public final static int DRAW_MUON = -2;
-    public final static int DRAW_ELECTRON = -3;
-    public final static int DRAW_PHOTON = -4;
-    public final static int DRAW_CLUSTER = -5;
-    public final static int DRAW_COMPOSITEPARTICLE = -6;
-    public final static int DRAW_BJET = -7;
-    public final static int DRAW_TAUJET = -8;
-    public final static int DRAW_JET = -9;
-    
-    public AProjectionLegoPlot() {
-        addPopupItem(VIEW_DEFAULT);
-        addPopupItem(VIEW_FROM_ABOVE);
-        addPopupItem(VIEW_ET_ETA);
-        addPopupItem(VIEW_ET_PHI);
-    }
-    
-    @Override
-    public void actionPerformed(ActionEvent e)
-    {
-        String action = e.getActionCommand();
-        int index=0;
-        AWindow currentWindow = ACanvas.getCanvas().getCurrentWindow();
-        index=currentWindow.getIndex();
-        Point2D.Double[] corners = currentWindow.getUserCorners();
-        double dPhi=0,dEta=0,currentxz=xz[index],currentyz=yz[index];
-
-        if (action.equals(VIEW_DEFAULT))
-        {
-            xz[index]=0.6;
-            yz[index]=0.5;
-        }
-        else if (action.equals(VIEW_FROM_ABOVE))
-        {
-            xz[index]=0.8;
-            yz[index]=0.9;
-        }
-        else if (action.equals(VIEW_ET_PHI))
-        {
-            xz[index]=0.0;
-            yz[index]=-50;
-        }
-        else if (action.equals(VIEW_ET_ETA))
-        {
-            xz[index]=360.0;
-            yz[index]=-75;
-        }
-        dPhi=360*(xz[index]-currentxz);
-        dEta=50*(currentyz-yz[index]);
-        corners[0].x -= (dPhi);
-        corners[0].y -= (dEta);
-        corners[1].y -= (dEta);
-        currentWindow.setUserCorners(corners);
-        //reset the center of detector dot on ZMR
-        // TODO: Check if this really is superfluous. I can't find any situation where it
-        //       sets the interaction group to anything other than its old value. - Ben Waugh 2011-11-09
-//        currentWindow.getInteractionManager().setContext(currentWindow.getInteractionToolBar().getSelectedGroup());
-    }
-
-    @Override
-    public void setAspectRatio1(AWindow window)
-    {
-        AOutput.append("\nNot implemented for this projection\n", ALogInterface.WARNING);
-    }
-    
-    public String getName()
-    {
-        return "LegoPlot";
-    }
-    
-    public String getXLabel()
-    {
-        return AMath.PHI;
-    }
-    
-    public String getYLabel()
-    {
-        return AMath.ETA;
-    }
-    
-    public String getXUnits()
-    {
-        return AMath.DEGREES;
-    }
-    
-    public String getYUnits()
-    {
-        return "";
-    }
-    
-    public Point2D.Double getCenter()
-    {
-        /*in the lego plot the center changes if there is rotation
-        however the getCenter is also needed in initialization
-        which is before windows are indexed*/
-        int index=0;
-        double temp=0;
-        //check to see if the windows are indexed 
-        try
-        {
-            index=ACanvas.getCanvas().getCurrentWindow().getIndex();
-        }
-        catch(Throwable t)
-        {
-            temp=0.6;//hasn't indexed windows yet
-        }
-        if(temp==0)
-            temp=xz[index];
-        return new Point2D.Double(-360.0*temp,-5.0);
-    }
-    
-    public Point2D.Double[] calculateNoZoomCorners(Dimension wSize)
-    {
-        if(xz==null)
-        {
-            xz=new double[ACanvas.getCanvas().getWindowsCount()];
-            for(int i=0; i<ACanvas.getCanvas().getWindowsCount(); i++)
-            {
-                xz[i]=0.6;
-            }
-        }
-        if(yz==null)
-        {
-            yz=new double[ACanvas.getCanvas().getWindowsCount()];
-            for(int i=0; i<ACanvas.getCanvas().getWindowsCount(); i++)
-            {
-                yz[i]=0.5;
-            }
-        }
-        if(ACanvas.getCanvas().getCurrentWindow()!=null)
-        {
-            int currentIndex =ACanvas.getCanvas().getCurrentWindow().getIndex();
-            xz[currentIndex]=0.6;
-            yz[currentIndex]=0.5;
-        }        
-        //called before have windows so xz=0.6 and yz=0.5
-        Point2D.Double[] corners = new Point2D.Double[3];
-        corners[0]=new Point2D.Double(-360.0*0.6,-5-0.5*50);
-        corners[1]=new Point2D.Double(360.0, -5-0.5*50);
-        corners[2]=new Point2D.Double(360.0, 5);
-        //add on an offset
-        corners[0].x-=25.0;
-        corners[1].x+=25.0;
-        corners[2].x+=25.0;
-        corners[2].y+=3.0;
-        return corners;
-    }
-    
-    public ACoord getUserPoint(ADHelix dH, double s)
-    {
-        return nonLinearTransform(dH.getLEGOPoint(s));
-    }
-    
-    @Override
-    public void paint(AWindow window, Graphics g) 
-    {
-        // update parameters
-        update();
-        // Load the event
-        AEvent event = eventManager.getCurrentEvent();
-        if (event == null)
-            return;
-        // Create and fill histograms
-        double[][][] lego = new double[nPhiCells][nEtaCells][nLayers];
-        ALegoData.fillHistograms(event, lego);
-        // Find the maximum energy
-        double maxEt = 0.0, AODmaxEt = 0.0, LEGOmaxEt = 0.0;
-        // loop over histogram data to scale towers and find maxEt
-        LEGOmaxEt = ALegoData.findMaxEt(lego);
-        maxEt=LEGOmaxEt;
-        // loop over AOD data
-        AODmaxEt = ALegoData.findAODMaxEt(event);
-        //check if user wants to scale to AOD objects rather than cells
-        //but only if the AOD max is greater than 0
-        if(AODmaxEt==0)
-        {
-            if(!parameterStore.get("LegoPlot", "ScaleToAOD").isInitialized())
-                parameterStore.get("LegoPlot", "ScaleToAOD").initialize();
-            parameterStore.get("LegoPlot", "ScaleToAOD").getNameComponent().setEnabled(false);
-        }
-        else
-        {
-            if(!parameterStore.get("LegoPlot", "ScaleToAOD").isInitialized())
-                parameterStore.get("LegoPlot", "ScaleToAOD").initialize();
-            parameterStore.get("LegoPlot", "ScaleToAOD").getNameComponent().setEnabled(true);
-        }
-        if(AODmaxEt>0 && parameterStore.get("LegoPlot", "ScaleToAOD").getStatus())
-        {
-            maxEt=AODmaxEt;
-            //user can no longer set the scale manually
-            if(!parameterStore.get("LegoPlot", "ETAxisHeight").isInitialized())
-                parameterStore.get("LegoPlot", "ETAxisHeight").initialize();
-            parameterStore.get("LegoPlot", "ETAxisHeight").getNameComponent().setEnabled(false);
-            parameterStore.get("LegoPlot", "ETAxisHeight").getValueComponent().setEnabled(false);
-        }
-        else
-        {
-            //user can now set the scale maually
-            if(!parameterStore.get("LegoPlot", "ETAxisHeight").isInitialized())
-                parameterStore.get("LegoPlot", "ETAxisHeight").initialize();
-            parameterStore.get("LegoPlot", "ETAxisHeight").getNameComponent().setEnabled(true);
-            parameterStore.get("LegoPlot", "ETAxisHeight").getValueComponent().setEnabled(true);
-            //check if user has defined a scale
-            if (parameterStore.get("LegoPlot", "ETAxisHeight").getD() > 0.0) 
-            {
-                // use the user defined scale
-                maxEt = parameterStore.get("LegoPlot", "ETAxisHeight").getD();
-            }
-        }
-        // Find the missing ET
-        double met = ALegoData.findMissingEt(window,lego,event);
-        // Begin drawing
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        // Fill the background
-        ALegoDraw.fillBackground(window, ag);
-        // Draw the legend
-        boolean drawLegend=false;
-        if(!drawLegend && parameterStore.get("LegoPlot", "MainLegend").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "L1EtLegend").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "L1Items").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "L2Items").getStatus())drawLegend=true;
-        if(!drawLegend && parameterStore.get("LegoPlot", "EFItems").getStatus())drawLegend=true;
-        if(drawLegend)ALegoDraw.drawLegend(window,ag,event,met,maxEt,AODmaxEt);
-
-        // Scale the values for the axis type
-        maxEt=scaleMaxET(maxEt,AODmaxEt);
-        AODmaxEt=ALegoData.scaleValue(AODmaxEt);
-        met=ALegoData.scaleValue(met);
-        if(parameterStore.get("LegoPlot","DrawPlot").getStatus())
-        {
-            // Draw the grid
-            //System.out.println("maxEt = "+maxEt+" and LEGOmaxEt = "+LEGOmaxEt);
-            ALegoDraw.drawGrid(window, ag, maxEt);
-            // Draw the histograms
-            ALegoData.drawHistograms(window, ag, event, lego, maxEt, met, AODmaxEt);
-        }
-    } // paintLego()
-    
-    /**
-     * MaxEt is rounded to get the axis height as well as being scaled
-     */
-    private static double scaleMaxET(double maxEt, double AODmaxEt)
-    {
-        //for drawing if maxEt is 0 use AODmaxEt for scaling
-        if (maxEt == 0)
-            maxEt = AODmaxEt;
-        maxEt=ALegoData.scaleValue(maxEt);
-        //now round to get axis height
-        if (defaultScale ==1 )
-        {
-            maxEt = Math.ceil(maxEt);
-        }
-        else if (maxEt > 10.0)
-        {
-            //set maximum to nearest 5 above maxEt
-            maxEt = 5 * (Math.ceil(maxEt / 5.0));
-        }
-        else if (maxEt < 10.0)
-        {
-            maxEt = Math.ceil(maxEt);
-        }
-        return maxEt;
-    }
-    
-    /** Shifts the real value of phi to the screen coord to account for the slope of the eta axis.
-     *  For reverse of operation use -adjustPhi(window,-phi,eta)
-     */
-    public static double adjustPhi(AWindow window, double phi, double eta)
-    {
-        int index=window.getIndex();
-        eta+=5;//scale to between 0 and 10
-        eta/=10.0;//scale to between 0 and 1
-        eta-=1;//scale to between -1 and 0
-        eta*=(xz[index]*360.0);//fraction of full offset to take off
-        phi+=eta;//take off the fraction
-        return phi;//now adjusted from slant of eta axis
-    }
-    
-    public static double getxz(int index)
-    {
-        return xz[index];
-    }
-
-    public static double getyz(int index)
-    {
-        return yz[index];
-    }
-
-    public static void setxz(int index, double xznew)
-    {
-        xz[index]=xznew;
-    }
-    
-    public static void setyz(int index, double yznew)
-    {
-        yz[index]=yznew;
-    }
-    
-    /**check if colouring by EM/HAD
-     * 
-     * @return boolean drawEMHAD 
-     */
-    public static boolean getDrawEMHAD()
-    {
-        boolean drawEMHAD=false;
-        if (mode == 0 && parameterStore.get("LAr", "ColorFunction").getI()==6)
-        {
-            //Calorimeter Lego
-            drawEMHAD=true;
-        }
-        else if (mode == 1 && parameterStore.get("LVL1TriggerTower", "ColorFunction").getI()==1)
-        {
-            //Trigger Tower Lego
-            drawEMHAD=true;
-        }
-        return drawEMHAD;
-    }
-    
-    public static void update()
-    {
-        defaultScale = parameterStore.get("LegoPlot", "Scale").getI();
-        nPhiCells = parameterStore.get("LegoPlot", "nphicells").getI();
-        nEtaCells = parameterStore.get("LegoPlot", "netacells").getI();
-        defaultColorMap = AColorMap.getColors();
-        caloColorMap = AColorMap.getColors();
-        if (parameterStore.get("LAr", "ColorFunction").getI() == ACalorimeterData.COLOR_FUNC_ENERGY)
-        {
-            switch (AColorMap.getColorMap())
-            {
-                case AColorMap.COLOR_MAP_DEFAULT1:
-                case AColorMap.COLOR_MAP_DEFAULT2:
-                case AColorMap.COLOR_MAP_M4M5:
-                case AColorMap.COLOR_MAP_GRAYDET:
-                case AColorMap.COLOR_MAP_ORIGINAL:
-                    // Use colors.
-                    caloColorMap = AColorMap.getColors(AColorMap.COLOR_MAP_HITCOL);
-                    break;
-                case AColorMap.COLOR_MAP_GRAY:
-                case AColorMap.COLOR_MAP_BW:
-                    // Use grayscale.
-                    caloColorMap = AColorMap.getColors(AColorMap.COLOR_MAP_GRAY_HITCOL);
-                    break;
-            }
-        }
-        else if (parameterStore.get("LAr", "ColorFunction").getI() == ACalorimeterData.COLOR_FUNC_TIME)
-        {
-            caloColorMap = AColorMap.getShades(nLayers+1);
-        }
-        reverse = parameterStore.get("LegoPlot", "Reverse").getStatus();
-        mode = parameterStore.get("LegoPlot", "Mode").getI();
-        //Use detector color but add on 12 to get different shade of same color
-        colorEM = parameterStore.get("Det", "ECAL" + "Fill").getI() + 12;
-        colorHad = parameterStore.get("Det", "HCAL" + "Fill").getI() + 12;
-    }
-}//end of LegoProjection class
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionN3D.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionN3D.java
deleted file mode 100644
index 1c57d9e8a719..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionN3D.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package atlantis.projection;
-
-import atlantis.nge.ANFrameManager;
-import java.awt.event.ActionEvent;
-import javax.swing.JMenuItem;
-
-/**
- *
- * @author Adam Davison
- */
-public class AProjectionN3D extends AProjectionNGE {
-
-    @Override
-    public void configureFrame(ANFrameManager fm) {
-        fm.checkProjection3D();
-    }
-
-    @Override
-    public String getName() {
-        return "N3D";
-    }
-
-    @Override
-    public String getScreenName() {
-        return "N3D";
-    }
-
-    @Override
-    public JMenuItem[] getPopupItems() {
-        return null;
-    }
-
-    @Override
-    public String getXLabel() {
-        return "X";
-    }
-
-    @Override
-    public String getYLabel() {
-        return "Y";
-    }
-
-    @Override
-    public String getXUnits() {
-        return "m";
-    }
-
-    @Override
-    public String getYUnits() {
-        return "m";
-    }
-
-    @Override
-    public void setScales() {
-        
-    }
-
-    @Override
-    public boolean processLocalCommand(String name) {
-        return false;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNGE.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionNGE.java
deleted file mode 100644
index 3f9294ff858f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNGE.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package atlantis.projection;
-
-import atlantis.canvas.AWindow;
-import atlantis.nge.ANFrameManager;
-import atlantis.nge.ANManager;
-import atlantis.utils.ALogger;
-import com.sun.opengl.util.Screenshot;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLEventListener;
-
-/**
- * This projection bridges between the traditional canvas and the new graphics
- * engine code. Essentially it looks like an old style projection but when
- * asked to paint it calls the new code and returns an image
- * 
- * @author Adam Davison
- */
-public abstract class AProjectionNGE extends AProjection implements GLEventListener {
-
-    private static ALogger logger = ALogger.getLogger(AProjectionNGE.class);
-    
-    //private GLPbuffer m_buf = null;
-    private BufferedImage m_img = null;
-    private int m_h = 0;
-    private int m_w = 0;
-    
-    private AWindow m_currentWindow;
-    
-    public AProjectionNGE() {
-    
-    }
-
-/*    @Override
-    public String getName() {
-        return "NGE";
-    }
-
-    @Override
-    public String getScreenName() {
-        return "NGE";
-    }*/
-
-    public abstract void configureFrame(ANFrameManager fm);
-    
-    @Override
-    public void paint(AWindow window, Graphics g) {
-       
-        m_currentWindow = window;
-        
-        long before = System.nanoTime();
-        
-        m_w = window.getWidth();
-        m_h = window.getHeight();
-
-        //logger.info("Window w: " + m_w + " h: " + m_h);
-        
-        //System.out.println("TAG A");
-        
-        configureFrame(ANManager.getManager().getFrameManager(window));
-        
-        //System.out.println("TAG B");
-        
-        ANManager.getManager().requestBufferDraw(m_w, m_h, this);
-
-        //System.out.println("TAG C");
-        
-        // TODO: Check m_img isn't null
-        //g.drawImage(m_img, 0, 0, m_w, m_h, null);
-        g.drawImage(m_img, 0, 0, m_w, m_h, 0, m_img.getHeight()-m_h, m_w, m_img.getHeight(), null);
-        
-        //System.out.println("TAG D copyback done");
-        
-        long after = System.nanoTime();
-        //System.out.println("Draw took: " + (after - before)/1000);
-        
-        //ANManager.getManager().requestReschedule(window);
-    }
-
-/*    @Override
-    public JMenuItem[] getPopupItems() {
-        return null;
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public String getXLabel() {
-        return "XLABEL";
-    }
-
-    @Override
-    public String getYLabel() {
-        return "YLABEL";
-    }
-
-    @Override
-    public String getXUnits() {
-        return "";
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public String getYUnits() {
-        return "";
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void setScales() {
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public boolean processLocalCommand(String name) {
-        return false;
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        System.out.println(e.toString());
-        //throw new UnsupportedOperationException("Not supported yet.");
-    }*/
-
-    public void init(GLAutoDrawable arg0) {
-    }
-
-    public void display(GLAutoDrawable arg0) {
-        
-        //System.out.println("DISPLAY IN NGE");
-        ANManager.getManager().getFrameManager(m_currentWindow).display(arg0, m_w, m_h);
-        //System.out.println("PAINT DONE");
-        m_img = Screenshot.readToBufferedImage(ANManager.getNextPower2(m_w),
-                        ANManager.getNextPower2(m_h));
-        //System.out.println("COPIED BACK");
-    }
-
-    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
-    }
-
-    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNPhysics.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionNPhysics.java
deleted file mode 100644
index e608bd9e51cc..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNPhysics.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package atlantis.projection;
-
-import atlantis.nge.ANAnimVar;
-import atlantis.nge.ANFrameManager;
-import atlantis.nge.ANProjectionPhysics;
-import atlantis.utils.AMath;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JMenuItem;
-
-/**
- *
- * @author Adam Davison, Mark Stockton
- */
-public class AProjectionNPhysics extends AProjectionNGE {
-
-    private ANProjectionPhysics m_p = null;
-    private ANFrameManager m_fm = null;
-    
-    @Override
-    public void configureFrame(ANFrameManager fm) {
-        m_fm = fm;
-        m_p = fm.checkProjectionPhysics();
-    }
-
-    @Override
-    public String getName() {
-        return "NPhysics";
-    }
-
-    @Override
-    public String getScreenName() {
-        return "NPhysics";
-    }
-
-    @Override
-    public JMenuItem[] getPopupItems() {
-        
-        JMenuItem phi = new JMenuItem(AMath.ETA + " view");
-        phi.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                phiView();
-            }
-        });
-        
-        JMenuItem[] i = {
-            phi
-        };
-        return i;
-    }
-
-    @Override
-    public String getXLabel() {
-        return "X";
-    }
-
-    @Override
-    public String getYLabel() {
-        return "Y";
-    }
-
-    @Override
-    public String getXUnits() {
-        return "m";
-    }
-
-    @Override
-    public String getYUnits() {
-        return "m";
-    }
-
-    @Override
-    public void setScales() {
-        
-    }
-
-    @Override
-    public boolean processLocalCommand(String name) {
-        return false;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-    }
-    
-    public void phiView() {
-        
-        ANAnimVar pelev = m_p.getElevVar();
-        ANAnimVar pphi = m_p.getPhiVar();
-        
-        m_fm.getAnimationManager().scheduleAnimation(pelev, 0.0, 1.0, pelev.getValue(), -90.0);
-        m_fm.getAnimationManager().scheduleAnimation(pphi, 0.0, 1.0, pphi.getValue(), 0.0);
-        
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNYX.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionNYX.java
deleted file mode 100644
index fb95d8ff95aa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionNYX.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package atlantis.projection;
-
-import atlantis.nge.ANFrameManager;
-import java.awt.event.ActionEvent;
-import javax.swing.JMenuItem;
-
-/**
- *
- * @author Adam Davison
- */
-public class AProjectionNYX extends AProjectionNGE {
-
-    public AProjectionNYX() {
-        
-    }
-    
-    @Override
-    public void configureFrame(ANFrameManager fm) {
-        fm.checkProjectionYX();
-    }
-
-    @Override
-    public String getName() {
-        return "NYX";
-    }
-
-    @Override
-    public String getScreenName() {
-        return "NYX";
-    }
-
-    @Override
-    public JMenuItem[] getPopupItems() {
-        return null;
-    }
-
-    @Override
-    public String getXLabel() {
-        return "X";
-    }
-
-    @Override
-    public String getYLabel() {
-        return "Y";
-    }
-
-    @Override
-    public String getXUnits() {
-        return "m";
-    }
-
-    @Override
-    public String getYUnits() {
-        return "m";
-    }
-
-    @Override
-    public void setScales() {
-        
-    }
-
-    @Override
-    public boolean processLocalCommand(String name) {
-        return false;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        //
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionPhi.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionPhi.java
deleted file mode 100755
index 92785454bb58..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionPhi.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package atlantis.projection;
-
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import atlantis.utils.AVector;
-import java.awt.geom.*;
-
-/**
- * Base class of all phi projections
- */
-
-public abstract class AProjectionPhi extends AProjection2D {
-
-  public String getScreenName()
-  {
-    return AMath.PHI+ getXLabel();
-  }  
-    
-  public String getYLabel() {
-    return AMath.PHI;
-  }
-
-  public String getYUnits() {
-    return AMath.DEGREES;
-  }
-
-  public double getMinRho() {
-    return 2.;
-  }
-
-  public Point2D.Double getCenter() {
-    int phiWrap=parameterStore.get(getName(), "PhiWrap").getI();
-
-    return new Point2D.Double(0, (360+phiWrap)/2);
-  }
-
-  public Point2D.Double[] validateCorners(Point2D.Double[] corners) {
-    if(super.validateCorners(corners)==null)
-      return null;
-    int phiWrap=parameterStore.get(getName(), "PhiWrap").getI();
-    AParameter initialFramePar=parameterStore.get(getName(), "InitialFrame");
-
-    if(Math.abs(getMaxPhi(corners)-getMinPhi(corners))>(360+phiWrap))
-      return null;
-    if(getMaxPhi(corners)>(initialFramePar.getI()*360+2*360-90))
-      initialFramePar.setI(initialFramePar.getI()+1);
-    if(getMinPhi(corners)<(initialFramePar.getI()*360+90))
-      initialFramePar.setI(initialFramePar.getI()-1);
-    return corners;
-  }
-
-  private static double getMinPhi(Point2D.Double[] corners) {
-    double phiMin=corners[0].y;
-    
-    for(int i=0; i<corners.length; i++)
-      if(corners[i].y<phiMin) phiMin=corners[i].y;
-    AVector v12=new AVector(corners[1], corners[2]);
-
-    return Math.min(phiMin, corners[0].y+v12.dy);
-  }
-
-  private static double getMaxPhi(Point2D.Double[] corners) {
-    double phiMax=corners[0].y;
-
-    for(int i=0; i<corners.length; i++)
-      if(corners[i].y>phiMax) phiMax=corners[i].y;
-    AVector v12=new AVector(corners[1], corners[2]);
-
-    return Math.max(phiMax, corners[0].y+v12.dy);
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionRZ.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionRZ.java
deleted file mode 100755
index a47d1e0f05ff..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionRZ.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package atlantis.projection;
-
-import atlantis.data.ADHelix;
-import atlantis.graphics.ACoord;
-import atlantis.utils.AMath;
-import java.awt.*;
-import java.awt.geom.*;
-import atlantis.event.*;
-import atlantis.parameters.*;
-
-public class AProjectionRZ extends AProjection2D {
-
-  public AProjectionRZ() {
-    addPopupItem(ASPECT_RATIO_1);
-  }
-
-  public String getName() {
-    return "RZ";
-  }
-
-  public String getScreenName()
-  {
-      return AMath.RHO + "Z";
-  }
-  
-  public String getXLabel() {
-    return "Z";
-  }
-
-  public String getYLabel() {
-    return AMath.RHO;
-  }
-
-  public String getXUnits() {
-    return "(cm)";
-  }
-
-  public String getYUnits() {
-    return "(cm)";
-  }
-
-  public Point2D.Double getCenter() {
-    return new Point2D.Double(0, 0);
-  }
-
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    double radius=parameterStore.get("Projection", "Radius").getD();
-    double length=parameterStore.get("Projection", "Length").getD();
-    return aspectRatioLayout(length, radius, wSize);
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return nonLinearTransform(dH.getRZPoint(s));
-  }
-
-  public ACoord nonLinearTransform(ACoord user) {
-    return nonLinearTransform2D(user, getName());
-  }
-
-  public ACoord inverseNonLinearTransform(ACoord user) {
-    return inverseNonLinearTransform2D(user, getName());
-  }
-
-  public static int[] getAxisMapping() {
-    return new int[] {2, 1, 0};
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionTrackResidual.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionTrackResidual.java
deleted file mode 100644
index fc07eddcbea4..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionTrackResidual.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.ADHelix;
-import atlantis.data.ATrackResidualData;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.AGraphics;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-
-public class AProjectionTrackResidual extends AProjection2D
-{
-    private ATrackResidualData residual;
-    private String residualType;
-    private double xLength;
-    private double yLength = 1.0;
-    
-    /**
-     * @param residual The residual to set.
-     */
-    public void setResidual(ATrackResidualData residual)
-    {
-        this.residual = residual;
-    }
-
-    public ATrackResidualData getResidual()
-    {
-        return residual;
-    }
-    
-    public void setResidualType(String type)
-    {
-        residualType = type;
-    }
-
-    public String getResidualType()
-    {
-        return residualType;
-    }
-
-    public String getName()
-    {
-        return "TrackResidual";
-    }
-
-    public String getXLabel()
-    {
-        return "Index";
-    }
-
-    public String getYLabel()
-    {
-        return "Res";
-    }
-
-    public String getXUnits()
-    {
-        return "";
-    }
-
-    public String getYUnits()
-    {
-        return "(mm)";
-    }
-
-    public double getXLength()
-    {
-        return xLength;
-    }
-
-    public double getYLength()
-    {
-        return yLength;
-    }
-
-    public Point2D.Double getCenter()
-    {
-        return new Point2D.Double(0.0, 0.0);
-    }
-
-    // not useful for this projection, only put here to be compatible with
-    // other code
-    public Point2D.Double[] calculateNoZoomCorners(Dimension wSize)
-    {
-        Point2D.Double[] corners=new Point2D.Double[3];
-        
-        corners[0]=new Point2D.Double(0., 2.);
-        corners[1]=new Point2D.Double(100., 2.);
-        corners[2]=new Point2D.Double(100., -2.);
-        return corners;
-    }
-
-    public Point2D.Double[] calculateNoZoomCorners()
-    {
-        float[] dataArray;
-        if(residualType.equals(ATrackResidualData.RESIDUAL_X))
-            dataArray = residual.getResLoc1();
-        else
-            dataArray = residual.getPullLoc1();
-        
-        xLength = dataArray.length;
-        if(parameterStore.get(getName(), "Scale").getI() == 0)    // linear
-        {
-            yLength = (AMath.maxAbsInArray(dataArray) + 0.1) * 2;
-        }
-        else    // logarithmic
-        {
-            float[] dataArrayCopy = new float[dataArray.length];
-            for(int i=0; i<dataArrayCopy.length; ++i)
-            {
-                if(dataArray[i] == -99.0f)
-                    dataArrayCopy[i] = 0.0f;
-                else
-                    dataArrayCopy[i] = dataArray[i];
-            }
-            double minValue = (double) AMath.minAbsInArray(dataArrayCopy);
-            double maxValue = (double) AMath.maxAbsInArray(dataArrayCopy);
-            double magnitude;
-            
-            // all data is either invalid or 0
-            if(maxValue == 0.0 && minValue == 0.0)
-            {
-                magnitude = 1;
-                residual.setLogMagnitudeMin(-1.0);
-            }
-            else if (minValue == 0.0)
-            {
-                double minNonZeroValue = (double) AMath.minNonZeroAbsInArray(dataArrayCopy);
-                magnitude = Math.floor(Math.log10(maxValue)) - 
-                    Math.floor(Math.log10(minNonZeroValue))+ 1.0;
-                residual.setLogMagnitudeMin(Math.floor(Math.log10(minNonZeroValue)));
-            }
-            else
-            {
-                magnitude = Math.floor(Math.log10(maxValue)) -
-                    Math.floor(Math.log10(minValue))+ 1.0;
-                residual.setLogMagnitudeMin(Math.floor(Math.log10(minValue)));
-            }
-            yLength = magnitude * 2;
-        }
-        Point2D.Double[] corners = new Point2D.Double[3];
-        
-        corners[0] = new Point2D.Double(0., yLength/2);
-        corners[1] = new Point2D.Double(xLength, yLength/2);
-        corners[2] = new Point2D.Double(xLength, -yLength/2);
-        return corners;
-    }
-
-    public ACoord getUserPoint(ADHelix dH, double s)
-    {
-        return ACoord.NO_DATA;
-    }
-
-    public void paint(AWindow window, Graphics g) 
-    {
-        AGraphics ag = AGraphics.makeAGraphics(g);
-        
-        fillBackground(window, ag);
-        if(residual != null)
-            residual.draw(window, ag, this);
-    }
-    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionVP.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionVP.java
deleted file mode 100755
index 210d848d4472..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionVP.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package atlantis.projection;
-
-import atlantis.graphics.ACoord;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.output.ALogInterface;
-import atlantis.output.AOutput;
-import atlantis.parameters.AParameter;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.geom.Point2D;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.ADHelix;
-
-public class AProjectionVP extends AProjectionPhi {
-
-  // this should be moved ugly
-  // sign is which arm of the v is being drawn at this point in time
-  public static int sign;
-
-  private static double qcp=0.00035936;
-
-  // Display modes as defined in the configuration file.
-  public static final int MODE_STANDARD = 0;
-  public static final int MODE_SPACEPOINT = 1;
-  public static final int MODE_TRT_DRIFT_CIRCLE = 2;
-  public static final int MODE_ECAL_LAYER_0 = 3;
-  public static final int MODE_ECAL_LAYER_1 = 4;
-  public static final int MODE_ECAL_LAYER_2 = 5;
-  public static final int MODE_ECAL_LAYER_3 = 6;
-  public static final int MODE_HCAL_LAYER_0 = 7;
-  public static final int MODE_HCAL_LAYER_1 = 8;
-  public static final int MODE_HCAL_LAYER_2 = 9;
-  public static final int MODE_HCAL_LAYER_3 = 10;
-  
-  public static final double MAX_ETA = 5.;
-
-  private static boolean first=true;
-  // draw V apex at this rho or Z
-  private static double[] rhoMode=new double[]
-      { 55., 55., 108., 138., 154., 173., 193., 244., 306., 368., 368.};
-  private static double[] zMode=new double[]
-      {277., 277., 338., 360., 374., 394., 414., 441., 482., 561., 561.};
-  // zoom in another projection to this rho and Z
-  private static double[] rhoZoomMode=new double[]
-      { 56., 56., 110., 200., 200., 200., 200., 400., 400., 400., 400.};
-  private static double[] zZoomMode=new double[]
-      {280., 280., 340., 440., 440., 440., 440., 374., 374., 374., 374.};
-
-  private static AParameter modePar;
-  private static AParameter rMaxPar;
-  private static AParameter zMaxPar;
-  private static AParameter gradientPar;
-  private static AParameter zVtxPar;
-
-  public AProjectionVP() {}
-
-  public String getName() {
-    return "VP";
-  }
-
-  public String getXLabel() {
-    return AMath.ETA;
-  }
-
-  public String getXUnits() {
-    return "";
-  }
-
-  public void setAspectRatio1(AWindow window)
-  {
-      AOutput.append("\nNot implemented for this projection\n", ALogInterface.WARNING);
-  }
-  
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    Point2D.Double[] corners=new Point2D.Double[3];
-
-    corners[0]=new Point2D.Double(-5.0, 360);
-    corners[1]=new Point2D.Double(5.0, 360);
-    corners[2]=new Point2D.Double(5.0, 0);
-    return corners;
-  }
-
-  protected Color getBackgroundFillColor(Color[] colorMap) {
-    int mode=parameterStore.get("VP", "Mode").getI();
-
-    switch(mode) {
-        case MODE_SPACEPOINT:
-            return colorMap[parameterStore.get("Det", "SIL"+"Fill").getI()];
-        case MODE_TRT_DRIFT_CIRCLE:
-            return colorMap[parameterStore.get("Det", "TRT"+"Fill").getI()];
-        case MODE_ECAL_LAYER_0:
-        case MODE_ECAL_LAYER_1:
-        case MODE_ECAL_LAYER_2:
-        case MODE_ECAL_LAYER_3:
-            return colorMap[parameterStore.get("Det", "ECAL"+"Fill").getI()];
-        case MODE_HCAL_LAYER_0:
-        case MODE_HCAL_LAYER_1:
-        case MODE_HCAL_LAYER_2:
-        case MODE_HCAL_LAYER_3:
-            return colorMap[parameterStore.get("Det", "HCAL"+"Fill").getI()];
-        default:
-            return colorMap[parameterStore.get("Color", "Bkg"+"Fill").getI()];
-    }
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return dH.getVPPoint(s, this.sign);
-  }
-
-  public static double getDeltaEta(double rho, double z) {
-    if(first) {
-      modePar=parameterStore.get("VP", "Mode");
-      rMaxPar=parameterStore.get("VP", "RMax");
-      zMaxPar=parameterStore.get("VP", "ZMax");
-      gradientPar=parameterStore.get("VP", "Gradient");
-      zVtxPar=parameterStore.get("VP", "ZVtx");
-      first=false;
-    }
-    double fact=qcp*gradientPar.getD();
-    int mode=modePar.getI();
-    double zLayer=zMode[mode];
-
-    if(zMaxPar.getStatus())
-      zLayer=Math.min(zLayer, zMaxPar.getD());
-    double rhoLayer=rhoMode[mode];
-
-    if(rMaxPar.getStatus())
-      rhoLayer=Math.min(rhoLayer, rMaxPar.getD());
-    double zVtx=zVtxPar.getD();
-    double zsign=1.;
-
-    if(z<0.) zsign=-1.;
-    if(Math.abs((z-zVtx)/rho)<(zLayer-zVtx)/rhoLayer)
-      return fact*(rhoLayer-rho);
-    else
-      return fact*rho*(zsign*zLayer-z)/(z-zVtx);
-  }
-
-  public static double getRhoVPlot() {
-    double rhoLayer=rhoMode[parameterStore.get("VP", "Mode").getI()];
-    AParameter rMaxPar=parameterStore.get("VP", "RMax");
-
-    if(rMaxPar.getStatus())
-      rhoLayer=Math.min(rhoLayer, rMaxPar.getD());
-    return rhoLayer;
-  }
-
-  public static double getZVPlot() {
-    double zLayer=zMode[parameterStore.get("VP", "Mode").getI()];
-    AParameter zMaxPar=parameterStore.get("VP", "ZMax");
-
-    if(zMaxPar.getStatus())
-      zLayer=Math.min(zLayer, zMaxPar.getD());
-    return zLayer;
-  }
-
-  public static double getRhoZoomVPlot() {
-    return rhoZoomMode[parameterStore.get("VP", "Mode").getI()];
-  }
-
-  public static double getZZoomVPlot() {
-    return zZoomMode[parameterStore.get("VP", "Mode").getI()];
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionXZ.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionXZ.java
deleted file mode 100755
index 24f2d9b17cc2..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionXZ.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package atlantis.projection;
-
-import atlantis.data.ADHelix;
-import atlantis.graphics.ACoord;
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import atlantis.event.*;
-import java.awt.*;
-import java.awt.geom.*;
-
-public class AProjectionXZ extends AProjection2D {
-
-  public AProjectionXZ() {
-    addPopupItem(ASPECT_RATIO_1);
-  }
-
-  public String getName() {
-    return "XZ";
-  }
-
-  public String getXLabel() {
-    return "Z";
-  }
-
-  public String getYLabel() {
-    return "X"+AMath.PRIME;
-  }
-
-  public String getXUnits() {
-    return "(cm)";
-  }
-
-  public String getYUnits() {
-    return "(cm)";
-  }
-
-  public Point2D.Double getCenter() {
-    return new Point2D.Double(0, 0);
-  }
-
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    double radius=parameterStore.get("Projection", "TrackingRadius").getD();
-    double length=parameterStore.get("Projection", "TrackingLength").getD();
-    return aspectRatioLayout(length, radius, wSize);
-  }
-
-  public static double getPhi() {
-    return parameterStore.get("XZ", "Phi").getD();
-  }
-
-  public static double[][] getRotationMatrix() {
-    double phi=Math.toRadians(getPhi());
-    double cos=Math.cos(phi);
-    double sin=Math.sin(phi);
-    double[][] r=new double[3][3];
-
-    r[0][0]=cos;
-    r[1][1]=cos;
-    r[2][2]=1.;
-    r[0][1]=sin;
-    r[1][0]=-sin;
-    return r;
-  }
-
-  public static int[] getAxisMapping() {
-    return new int[] {2, 0, 1};
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return nonLinearTransform(dH.getXZPoint(s));
-  }
-
-  public ACoord nonLinearTransform(ACoord user) {
-    return nonLinearTransform2D(user, getName());
-  }
-
-  public ACoord inverseNonLinearTransform(ACoord user) {
-    return inverseNonLinearTransform2D(user, getName());
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionYX.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionYX.java
deleted file mode 100755
index ef2a7d28db6e..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionYX.java
+++ /dev/null
@@ -1,307 +0,0 @@
-package atlantis.projection;
-
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
-
-import javax.swing.ImageIcon;
-
-import atlantis.canvas.AWindow;
-import atlantis.data.ADHelix;
-import atlantis.globals.AGlobals;
-import atlantis.graphics.ACoord;
-import atlantis.graphics.ADrawParameters;
-import atlantis.graphics.AGraphics;
-import atlantis.graphics.colormap.AColorMap;
-import atlantis.interactions.AZMRInteraction;
-import atlantis.parameters.AParameter;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-
-public class AProjectionYX extends AProjection2D
-{
-    private static ALogger logger = ALogger.getLogger(AProjectionYX.class);
-    
-    // Different display modes, as defined in the configuration file.
-    public static final int MODE_STANDARD = 0;
-    public static final int MODE_TGC_INNER = 1;
-    public static final int MODE_TGC_MIDDLE_1 = 2;
-    public static final int MODE_TGC_MIDDLE_2 = 3;
-    public static final int MODE_TGC_MIDDLE_3 = 4;
-    public static final int MODE_MDT_INNER = 5;
-    public static final int MODE_MDT_EXTENSION = 6;
-    public static final int MODE_MDT_MIDDLE = 7;
-    public static final int MODE_MDT_OUTER = 8;
-    public static final int MODE_FCAL_EM = 9;
-    public static final int MODE_FCAL_HAD_1 = 10;
-    public static final int MODE_FCAL_HAD_2 = 11;
-    public static final int MODE_LAR_ENDCAP_PRESAMPLER = 12;
-    public static final int MODE_LAR_ENDCAP_1 = 13;
-    public static final int MODE_LAR_ENDCAP_2 = 14;
-    public static final int MODE_LAR_ENDCAP_3 = 15;
-    public static final int MODE_HEC_1 = 16;
-    public static final int MODE_HEC_2 = 17;
-    public static final int MODE_HEC_3 = 18;
-    public static final int MODE_HEC_4 = 19;
-    public static final int MODE_LAR_ENDCAP_SUMMED = 20;
-    public static final int MODE_HEC_SUMMED = 21;
-    public static final int MODE_MBTS = 22;
-
-    public AProjectionYX()
-    {
-        addPopupItem(ASPECT_RATIO_1);
-    }
-
-    public String getName()
-    {
-        return "YX";
-    }
-
-    public String getXLabel()
-    {
-        return "X";
-    }
-
-    public String getYLabel()
-    {
-      return "Y";
-    }
-
-    public String getXUnits()
-    {
-      return "(cm)";
-    }
-
-    public String getYUnits()
-    {
-      return "(cm)";
-    }
-
-    public Point2D.Double getCenter()
-    {
-      return new Point2D.Double(0, 0);
-    }
-
-    public Point2D.Double[] calculateNoZoomCorners(Dimension wSize)
-    {
-      // should not be here
-      parameterStore.get(getName(), "Phi").setD(0.);
-      double radius = parameterStore.get("Projection", "Radius").getD();
-      return aspectRatioLayout(radius, radius, wSize);
-    }
-
-    public static double[][] getRotationMatrix()
-    {
-      double[][] r = new double[3][3];
-
-      r[0][0] = 1.;
-      r[1][1] = 1.;
-      r[2][2] = 1.;
-      return r;
-    }
-
-    public static int[] getAxisMapping()
-    {
-      return new int[] { 0, 1, 2 };
-    }
-
-    public ACoord getUserPoint(ADHelix dH, double s)
-    {
-      return nonLinearTransform(dH.getYXPoint(s));
-    }
-
-    public ACoord nonLinearTransform(ACoord user)
-    {
-      AParameter fishEyePar = parameterStore.get(getName(), "FishEye");
-
-      if (fishEyePar.getStatus())
-      {
-        double[] x, y;
-        double r, fact;
-        double fishEye = 0.001 * fishEyePar.getD();
-        double rTo = parameterStore.get(getName(), "rTo").getD();
-
-        for (int j = 0; j < user.hv[0].length; ++j)
-        {
-          x = user.hv[0][j];
-          y = user.hv[1][j];
-          for (int i = 0; i < x.length; ++i)
-          {
-            r = Math.sqrt(x[i] * x[i] + y[i] * y[i]);
-            fact = (1 + fishEye * rTo) / (1 + fishEye * r);
-            x[i] *= fact;
-            y[i] *= fact;
-          }
-        }
-      }
-      AParameter clockPar = parameterStore.get(getName(), "Clock");
-
-      if (clockPar.getStatus())
-      {
-        double clock = Math.PI / clockPar.getD();
-        double phiClock = Math.toRadians(parameterStore.get(getName(), "Phi").getD());
-
-        for (int j = 0; j < user.hv[0].length; ++j)
-        {
-          double[] x = user.hv[0][j];
-          double[] y = user.hv[1][j];
-
-          for (int i = 0; i < x.length; ++i)
-          {
-            double phi = Math.atan2(y[i], x[i]);
-
-            if (phi < 0.)
-              phi += 2 * Math.PI;
-            double rho = Math.sqrt(x[i] * x[i] + y[i] * y[i]);
-            double dPhi = phi - phiClock;
-
-            if (dPhi > Math.PI)
-              dPhi -= 2 * Math.PI;
-            else if (dPhi <= -Math.PI)
-              dPhi += 2 * Math.PI;
-            double fact = (clock + Math.PI) / (clock + Math.abs(dPhi));
-
-            phi = phiClock + fact * dPhi;
-            x[i] = rho * Math.cos(phi);
-            y[i] = rho * Math.sin(phi);
-          }
-        }
-      }
-
-      return user;
-    }
-
-    public ACoord inverseNonLinearTransform(ACoord user)
-    {
-      AParameter fishEyePar = parameterStore.get(getName(), "FishEye");
-
-      if (fishEyePar.getStatus())
-      {
-        double[] x, y;
-        double r, fact;
-        double fishEye = 0.001 * fishEyePar.getD();
-        double rTo = parameterStore.get(getName(), "rTo").getD();
-
-        for (int j = 0; j < user.hv[0].length; ++j)
-        {
-          x = user.hv[0][j];
-          y = user.hv[1][j];
-          for (int i = 0; i < x.length; ++i)
-          {
-            r = Math.sqrt(x[i] * x[i] + y[i] * y[i]);
-            fact = 1 / (1 + fishEye * (rTo - r));
-            x[i] *= fact;
-            y[i] *= fact;
-          }
-        }
-      }
-      AParameter clockPar = parameterStore.get(getName(), "Clock");
-
-      if (clockPar.getStatus())
-      {
-        double clock = Math.PI / clockPar.getD();
-        double phiClock = Math.toRadians(parameterStore.get(getName(), "Phi").getD());
-
-        for (int j = 0; j < user.hv[0].length; ++j)
-        {
-          double[] x = user.hv[0][j];
-          double[] y = user.hv[1][j];
-
-          for (int i = 0; i < x.length; ++i)
-          {
-            double phi = Math.atan2(y[i], x[i]);
-
-            if (phi < 0.)
-              phi += 2 * Math.PI;
-            double dPhi = phi - phiClock;
-
-            if (dPhi > Math.PI)
-              dPhi -= 2 * Math.PI;
-            else if (dPhi <= -Math.PI)
-              dPhi += 2 * Math.PI;
-
-            double dPhiPrime = (clock * dPhi) / (clock + Math.PI - Math.abs(dPhi));
-
-            phi = phiClock + dPhiPrime;
-
-            double rho = Math.sqrt(x[i] * x[i] + y[i] * y[i]);
-
-            x[i] = rho * Math.cos(phi);
-            y[i] = rho * Math.sin(phi);
-          }
-        }
-      }
-      return user;
-    }
-
-    public void paint(AWindow window, Graphics g)
-    {
-      super.paint(window, g);
-
-      // draw RZ cutting plane
-        if (parameterStore.get("YX", "RZCuttingPlane").getStatus())
-        {
-            AGraphics ag = AGraphics.makeAGraphics(g);
-            final ADrawParameters drawParameters = 
-                new ADrawParameters(true, AColorMap.WH, 4, 1, 0, AGraphics.SYMBOL_FILLED_BOX);
-            ag.updateDrawParameters(drawParameters);
-            final double RHO_MAX = 3000.0;
-
-            double phi = Math.toRadians(parameterStore.get("RZ", "Phi").getD()) - Math.PI / 2;
-            double cosPhi = Math.cos(phi);
-            double sinPhi = Math.sin(phi);
-            String iconPath = AGlobals.instance().getHomeDirectory() + "img" + System.getProperty("file.separator");
-            
-            // draw the cutting plane
-            Point2D.Double p1 = window.calculateDisplay(nonLinearTransform(RHO_MAX * cosPhi, RHO_MAX * sinPhi));
-            Point2D.Double p2 = window.calculateDisplay(nonLinearTransform(-RHO_MAX * cosPhi, -RHO_MAX * sinPhi));
-
-            ag.drawLine(p1.x, p1.y, p2.x, p2.y);
-
-            // draw the arrows
-            Point2D.Double p3 = window.calculateDisplay(nonLinearTransform(1500 * Math.cos(phi+.07), 1500 * Math.sin(phi+.07)));
-            Point2D.Double p4 = window.calculateDisplay(nonLinearTransform(1500 * Math.cos(phi+3.21), 1500 * Math.sin(phi+3.21)));
-
-            ImageIcon upArrow = AUtilities.getFileAsImageIcon(iconPath+"uparrow.png");
-            ImageIcon downArrow = AUtilities.getFileAsImageIcon(iconPath+"downarrow.png");
-
-            Graphics2D g2d = (Graphics2D) g;
-
-            g2d.drawImage(upArrow.getImage(),(int) p3.x,(int) p3.y,null);
-            g2d.drawImage(downArrow.getImage(),(int) p4.x,(int) p4.y,null);
-
-        }
-    }
-
-    /** This function ensures that when the aspect ratio of the display changes
-     * the aspect ratio of the contents of a YX projection remain at the same
-     * aspect ratio.
-     * 
-     * It uses the (thankfully) static methods of AZMRInteraction to do the
-     * actual zooming, which can involve some non-trivial mathematics...
-     *  -- Adam Davison
-     */
-    @Override
-    public void aspectRatioChange(AWindow w, double oldaspect, double newaspect) {
-        logger.debug("ProjectionYX informed of aspect ratio change from " + oldaspect + " to " + newaspect);
-        
-        Point2D.Double[] corners = w.getUserCorners();
-        
-        // Get center
-        Point2D.Double center = new Point2D.Double(
-                0.5*(corners[0].x+corners[2].x),
-                0.5*(corners[0].y+corners[2].y));
-        
-        // If > 1, the new view is taller if < 1 it's wider
-        double fracchange = newaspect/oldaspect;
-        
-        if (fracchange > 1) {
-            // Need to vzoom "away" to restore aspect ratio
-            AZMRInteraction.performVerticalZoom(center, fracchange, w);
-        } else {
-            // Need to hzoom
-            AZMRInteraction.performHorizontalZoom(center, 1.0/fracchange, w);
-        }
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionYZ.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionYZ.java
deleted file mode 100755
index 490afb72dfd8..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionYZ.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package atlantis.projection;
-
-
-import atlantis.graphics.ACoord;
-import atlantis.utils.AMath;
-import java.awt.*;
-import java.awt.geom.*;
-import atlantis.data.ADHelix;
-import atlantis.parameters.*;
-
-
-public class AProjectionYZ extends AProjection2D {
-
-  public AProjectionYZ() {
-    addPopupItem(ASPECT_RATIO_1);
-  }
-
-  public String getName() {
-    return "YZ";
-  }
-
-  public String getXLabel() {
-    return "Z";
-  }
-
-  public String getYLabel() {
-    return "Y"+AMath.PRIME;
-  }
-
-  public String getXUnits() {
-    return "(cm)";
-  }
-
-  public String getYUnits() {
-    return "(cm)";
-  }
-
-  public Point2D.Double getCenter() {
-    return new Point2D.Double(0, 0);
-  }
-
-  public Point2D.Double[] calculateNoZoomCorners(Dimension wSize) {
-    double radius=parameterStore.get("Projection", "TrackingRadius").getD();
-    double length=parameterStore.get("Projection", "TrackingLength").getD();
-    return aspectRatioLayout(length, radius, wSize);
-  }
-
-  public static double getPhi() {
-    return AProjectionXZ.getPhi();
-  }
-
-  public static double[][] getRotationMatrix() {
-    return AProjectionXZ.getRotationMatrix();
-  }
-
-  public static int[] getAxisMapping() {
-    return new int[] {2, 1, 0};
-  }
-
-  public ACoord getUserPoint(ADHelix dH, double s) {
-    return nonLinearTransform(dH.getYZPoint(s));
-  }
-
-  public ACoord nonLinearTransform(ACoord user) {
-    return nonLinearTransform2D(user, getName());
-  }
-
-  public ACoord inverseNonLinearTransform(ACoord user) {
-    return inverseNonLinearTransform2D(user, getName());
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/AProjectionsManager.java b/graphics/AtlantisJava/src/atlantis/projection/AProjectionsManager.java
deleted file mode 100755
index e9886ac1fefb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/AProjectionsManager.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package atlantis.projection;
-
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Set;
-import java.util.Vector;
-
-import atlantis.output.AExceptionHandler;
-import atlantis.parameters.APar;
-import atlantis.parameters.AParametersGroup;
-
-/**
- * This manager keeps references to all projections.
- * 
- * The code keeping track of the list and states of interactions associated with each
- * projection in each window, and creating the corresponding pop-up menus, has been
- * moved to atlantis.gui.AInteractionToolBar and atlantis.interactions.AInteractionsByProjection.
- */
-public class AProjectionsManager {
-	
-	// the set of projections (name : AProjection)
-	private static Hashtable<String,AProjection> projections = new Hashtable<String, AProjection>();
-	private static Set<String> projectionsAvailableInDemoMode = new HashSet<String>();
-	private static Set<String> defaultProjectionsInDemoMode = new HashSet<String>();
-
-	/**
-	 * Creates projections using information from APar.
-	 */
-	public static void initialise() {
-		Vector<String> projVector=APar.instance().getUIGroupNames(AParametersGroup.PROJECTION);
-		
-		for (String projName : projVector) {
-			createProjection(projName);
-		}
-	}
-	
-	/**
-	 * Used to request the projection with the given name
-	 * @param projectionName The name of the projection
-	 * @return The AProjection corespoinding to the projection name.
-	 */
-	public static AProjection getProjection(String projectionName) {
-		return projections.get(projectionName);
-	}
-	
-	/**
-	 * Checks whether the given name is a valid projection name.
-	 * @param name The name to be checked
-	 * @return True/False
-	 */
-	public static boolean isValidProjection(String name) {
-		return projections.containsKey(name);
-	}
-	
-	/**
-	 * Returns an array containing the names of all known projections
-	 * @return The name array
-	 */
-	public static String[] getKnownProjectionNames() {
-		String[] names=new String[projections.size()];
-		
-		Enumeration<String> myenum=projections.keys();
-		
-		for(int i=0; i<projections.size(); i++)
-			names[i]=myenum.nextElement();
-		
-		return names;
-	}
-
-	/**
-	 * Check whether the projection should be used in the demo dialog
-	 * @return false if the projection should not be used or does not exist
-	 */
-	public static boolean useProjectionInDemoMode(String name){
-		return projectionsAvailableInDemoMode.contains(name);
-	}
-
-	/**
-	 * @return true if  the projection should be selected by default in the demo dialog
-	 */
-	public static boolean defaultProjectionInDemoMode(String name){
-		return defaultProjectionsInDemoMode.contains(name);
-	}
-
-	/**
-	 * Creates an instance of a given projection and pushes it into the
-	 * <code>projections</code> Hashtable. The name shold be for example: YX if you
-	 * want to create a instance of AProjectionYX.java class.
-	 * @param name The name of the projection.
-	 */
-	private static void createProjection(String name) {
-		try {
-			
-			AProjection p=(AProjection)Class.forName("atlantis.projection.AProjection"+name).newInstance();
-			
-			projections.put(name, p);
-		} catch(Exception e) {
-			AExceptionHandler.processException("Cannot create AProjection"+name, e);
-		}
-	}
-
-	public static void makeProjectionAvailableInDemoMode(String projection) {
-		projectionsAvailableInDemoMode.add(projection);
-	}
-
-	public static void makeProjectionDefaultInDemoMode(String name) {
-		defaultProjectionsInDemoMode.add(name);
-	}
-}
diff --git a/graphics/AtlantisJava/src/atlantis/projection/package.html b/graphics/AtlantisJava/src/atlantis/projection/package.html
deleted file mode 100644
index 471774c48caa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/projection/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Implementation of projections (XY, Rho Z, V plot, etc). Class
-  AProjectionManager changes the current projection and informs the
-  AEvent class instance of how to draw itself, e.g. in the XY
-  projection.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/utils/A3Vector.java b/graphics/AtlantisJava/src/atlantis/utils/A3Vector.java
deleted file mode 100755
index 649a18dd317f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/A3Vector.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package atlantis.utils;
-
-
-/**
- * Provides basic 3D vector operations.
- */
-
-public class A3Vector {
-
-  public double x, y, z;
-
-  /**
-   * Construct zero 3-vector.
-   */
-  public A3Vector() {}
-
-  /**
-   * Construct 3-vector from Cartesian coordinates.
-   * @param dx
-   * @param dy
-   * @param dz
-   */
-  public A3Vector(double x, double y, double z) {
-	    this.x=x;
-	    this.y=y;
-	    this.z=z;
-  }
-  
-  /**
-   * Create 3-vector from eta, phi and magnitude.
-   * @param eta pseudorapidity along z direction
-   * @param phi azimuthal angle [radians]
-   * @param r   magnitude of vector
-   * @return new A3Vector
-   */
-  public static A3Vector fromEtaPhiR(double eta, double phi, double r) {
-      double theta = 2.0 * Math.atan(Math.exp(-eta));
-      return new A3Vector(r * Math.sin(theta) * Math.cos(phi),
-              r * Math.sin(theta) * Math.sin(phi),
-              r * Math.cos(theta));
-  }
-
-  /**
-   * Create 3-vector from cylindrical coordinates rho, phi, z.
-   * @param rho component perpendicular to z axis
-   * @param phi azimuthal angle [radians]
-   * @param z
-   * @return
-   */
-  public static A3Vector fromRhoPhiZ(double rho, double phi, double z) {
-	  double x=rho*Math.cos(phi);
-	  double y=rho*Math.sin(phi);
-	  return new A3Vector(x,y,z);
-  }
-  
-  public A3Vector getNormalized() {
-    double r=Math.sqrt(x*x+y*y+z*z);
-    return new A3Vector(x/r, y/r, z/r);
-  }
-
-  public A3Vector normalize() {
-    double r=magnitude();
-    x/=r;
-    y/=r;
-    z/=r;
-    return this;
-  }
-
-  public double magnitude() {
-    return Math.sqrt(x*x+y*y+z*z);
-  }
-
-  public A3Vector scale(double a) {
-    x*=a;
-    y*=a;
-    z*=a;
-    return this;
-  }
-
-  public A3Vector add(A3Vector v) {
-    x+=v.x;
-    y+=v.y;
-    z+=v.z;
-    return this;
-  }
-
-  public A3Vector subtract(A3Vector v) {
-    x-=v.x;
-    y-=v.y;
-    z-=v.z;
-    return this;
-  }
-
-  public String toString() {
-    return "A3Vector[x="+x+", y="+y+", z="+z+"]";
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/A4Vector.java b/graphics/AtlantisJava/src/atlantis/utils/A4Vector.java
deleted file mode 100755
index 5032250f170c..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/A4Vector.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package atlantis.utils;
-
-/**
- * Provides basic 4D vector operations.
- */
-public class A4Vector
-{
-    public double px, py, pz, e;
-
-    public A4Vector()
-    {}
-
-    public A4Vector(double dx, double dy, double dz, double m)
-    {
-        set(dx, dy, dz, m);
-    }
-
-    public A4Vector(A3Vector v, double m)
-    {
-        set(v.x, v.y, v.z, m);
-    }
-
-    public void set(double dx, double dy, double dz, double m)
-    {
-        px = dx;
-        py = dy;
-        pz = dz;
-        e = Math.sqrt(px * px + py * py + pz * pz + m * m);
-    }
-
-    public void setPtEtaPhiM(double pT, double eta, double phi, double mass)
-    {
-        double ptAbs = Math.abs(pT);
-        px = ptAbs*Math.cos(phi);
-        py = ptAbs*Math.sin(phi);
-        pz = ptAbs*Math.sinh(eta);
-        e = Math.sqrt(px * px + py * py + pz * pz + mass * mass);
-    }
-
-    public double getP()
-    {
-        return Math.sqrt(px * px + py * py + pz * pz);
-    }
-
-    public double getPt()
-    {
-        return Math.sqrt(px * px + py * py);
-    }
-
-    public double getE()
-    {
-        return e;
-    }
-
-    /**
-     * getEt() returns the transverse energy.
-     * The formula used to calculate it is:
-     * Et^2 = E^2 * Pt^2 / P^2.
-     */
-    public double getEt()
-    {
-    	double pt2 = px * px + py * py;
-    	double p2 = pt2 + pz * pz;
-    	return Math.sqrt(e * e * pt2/p2);
-    }
-
-    public double getMass()
-    {
-        return Math.sqrt(e * e - px * px - py * py - pz * pz);
-    }
-
-    /**
-     * getMt() returns the transverse mass.
-     * The formula used to calculate it is:
-     * Mt^2 = Et^2 - Pt^2.
-     * 
-     * This is from the Particle Data Group (http://pdg.lbl.gov/)
-     * 
-     * Note this is different to another definition in the PDG:
-     * Mt^2 = E^2 - Pz^2 = m^2 + Pt^2
-     *   
-     * [J. Beringer et al. (Particle Data Group), Phys. Rev. D86, 010001 (2012).
-     * (Kinematics, 43.6.1 and 43.5.2)]
-     */
-    public double getMt()
-    {
-    	double pt2 = px * px + py * py;
-    	double Et = getEt();
-    	return Math.sqrt(Et * Et - pt2);
-    }
-
-    public double getPhi()
-    {
-    	return px == 0.0 && py == 0.0 ? 0.0 : Math.atan2(py,px);
-    }
-
-    public double getEta()
-    {
-    	double ptot = getP();
-    	double cosTheta = ptot == 0.0 ? 1.0 : pz/ptot;
-    	if (cosTheta*cosTheta < 1) return -0.5* Math.log( (1.0-cosTheta)/(1.0+cosTheta) );
-    	if (pz > 0) return 10e10;
-    	else        return -10e10;
-    }
-
-    public void add(double dx, double dy, double dz, double m)
-    {
-        px += dx;
-        py += dy;
-        pz += dz;
-        e += Math.sqrt(dx * dx + dy * dy + dz * dz + m * m);
-    }
-
-    public void add(A4Vector v)
-    {
-        px += v.px;
-        py += v.py;
-        pz += v.pz;
-        e += v.e;
-    }
-
-    public String toString()
-    {
-        return "A4Vector[px=" + px + ", py=" + py + ", pz=" + pz + ", E=" + e + ", m=" + getMass() + "]";
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AAtlantisException.java b/graphics/AtlantisJava/src/atlantis/utils/AAtlantisException.java
deleted file mode 100755
index d8a4edc6d38f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AAtlantisException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package atlantis.utils;
-
-/**
- * 
- * @author Zdenek Maxa
- */
-public class AAtlantisException extends Exception
-{
-    private boolean isFatal = true;
-    
-    // private static ALogger logger = ALogger.getLogger(AAtlantisException.class);
-
-
-    public AAtlantisException(String msg)
-    {
-        super(msg);
-        // logger.debug(msg, this);
-        this.isFatal = true;
-
-    } // AAtlantisException() -----------------------------------------------
-
-
-
-    public AAtlantisException(String msg, boolean isFatal)
-    {
-        super(msg);
-        // logger.debug(msg, this);
-        this.isFatal = isFatal;
-
-    } // AAtlantisException() -----------------------------------------------
-
-
-
-    public boolean isFatal()
-    {
-        return this.isFatal;
-
-    } // isFatal() ----------------------------------------------------------
-
-
-} // class AAtlantisException ===============================================
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AClipPolygon.java b/graphics/AtlantisJava/src/atlantis/utils/AClipPolygon.java
deleted file mode 100755
index ad73aac1bfd1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AClipPolygon.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package atlantis.utils;
-
-/**
- * This class is used when clipping polygons.
- */
-public class AClipPolygon extends APolygon {
-
-  public AClipPolygon(double[] x, double[] y) {
-    super(x, y);
-    calc_hesse();
-  }
-
-  private double[][] normalized;
-  private double[] distances;
-
-  public double[] get_normalized(int index) {
-    if(index>=0&&index<normalized.length&&normalized[index].length==3)
-      return normalized[index];
-    else
-      return null;
-  }
-
-  public double get_distance(int index) {
-    if(index>=0&&index<distances.length)
-      return distances[index];
-    else
-      return Double.NaN;
-  }
-
-  public void calc_hesse() {
-    int degree=nodes.size();
-
-    // Check if fields are already allocated
-    if(distances==null||distances.length!=degree)
-      distances=new double[nodes.size()]; // Generate array for distances
-
-    if(normalized==null||normalized.length!=degree)
-      normalized=new double[nodes.size()][]; // array for normal vectors
-
-    // Loop over all components and determine the normal vectors
-    for(int i=0; i<degree; i++) {
-      APoint r, next=null, current=null;
-
-      if(nodes.elementAt(i) instanceof APoint)
-        current=(APoint)nodes.elementAt(i);
-      if(nodes.elementAt((i+1)%degree) instanceof APoint)
-        next=(APoint)nodes.elementAt((i+1)%degree);
-
-      // If both APoints exist, calculate the normalized vector
-      if(next!=null&&current!=null) {
-
-        normalized[i]=new double[3];
-        r=next.minus(current);
-
-        // Check values and determine normalized vector.
-        if(r.x==0)
-          if(r.y>0) {
-            normalized[i][0]=1.0;
-            normalized[i][1]=0.0;
-            normalized[i][2]=1.0;
-          } else if(r.y<0) {     // on the negative y-Axis
-            normalized[i][0]=-1.0;
-            normalized[i][1]=0.0;
-            normalized[i][2]=1.0;
-          }
-
-        if(r.y==0)
-          if(r.x>0) {       // on the positive x-Axis
-            normalized[i][0]=0.0;
-            normalized[i][1]=-1.0;
-            normalized[i][2]=1.0;
-          } else if(r.x<0) {    // on the negative x-Axis
-            normalized[i][0]=0.0;
-            normalized[i][1]=1.0;
-            normalized[i][2]=1.0;
-          }
-
-        if(r.y!=0)
-          if(r.x>0) {     // right of the y-Axis
-            double x_val=r.y/r.x;
-            double length=Math.sqrt(x_val*x_val+1);
-
-            normalized[i][0]=x_val/length;
-            normalized[i][1]=-1.0/length;
-            normalized[i][2]=1.0;
-          } else if(r.x<0) {   // left of the y-Axis
-            double x_val=-r.y/r.x;
-            double length=Math.sqrt(x_val*x_val+1);
-
-            normalized[i][0]=x_val/length;
-            normalized[i][1]=1.0/length;
-            normalized[i][2]=1.0;
-          }
-        distances[i]=-current.dot_product(normalized[i]);
-      }
-    }
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/ACommandHistory.java b/graphics/AtlantisJava/src/atlantis/utils/ACommandHistory.java
deleted file mode 100755
index b226d78b0fac..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/ACommandHistory.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package atlantis.utils;
-
-import java.util.Vector;
-import javax.swing.text.JTextComponent;
-
-
-/**
- * Implementation of simple command history (up and down
- * arrows) and tab completion based upon the already typed commands.
- * No cross-sessions commands history so far.
- *
- * @author Zdenek Maxa
- */
-public class ACommandHistory extends Vector
-{
-    // the component upon which the history operates
-    private JTextComponent comp = null;
-    // item on the size() position of the history (content of the text field)
-    private String tempItem = "";
-    private int pointer = 0;
-    private int tabPointer = 0; // help pointer when doing tab completion
-    private String tabItem = null;
-
-
-    // ----------------------------------------------------------------------
-    public ACommandHistory(JTextComponent compoment)
-    {
-        super();
-        this.comp = compoment;
-        this.pointer = 0;
-        this.tabPointer = 0;
-        this.tempItem = "";
-        this.nullTabItem();
-
-    } // ACommandHistory() --------------------------------------------------
-
-
-    /**
-     * add the item into the history container, if it's already there it's
-     * removed first and then added (placed to the end)
-     * @param item String
-     */
-    public void add(String item)
-    {
-        if(super.contains(item))
-        {
-            super.remove(item);
-        }
-        super.add(item);
-        pointer = super.size();
-        nullTabItem();
-
-    } // add() --------------------------------------------------------------
-
-
-    /**
-     * erase the content of the tabItem string upon which the tab-completion
-     * searching is performed
-     */
-    public void nullTabItem()
-    {
-        this.tabItem = null;
-
-    } // nullTabItem() ------------------------------------------------------
-
-
-    private String getItem()
-    {
-        if(pointer < super.size())
-        {
-            return super.get(pointer).toString();
-        }
-        else
-        {
-            return tempItem;
-        }
-
-    } // getItem() ----------------------------------------------------------
-
-
-
-    private void desc()
-    {
-        if(pointer > 0)
-        {
-            pointer--;
-        }
-
-    } // desc() -------------------------------------------------------------
-
-
-
-    private void inc()
-    {
-        if(pointer < super.size())
-        {
-            pointer++;
-        }
-
-    } // inc() --------------------------------------------------------------
-
-
-
-    /**
-     * compares the actual content of the text field with the history item
-     * on the matching position. if they differ (user changed the item in the
-     * text field) the item in the history (or the tempItem attribute - the
-     * last item, not yet added to the container) gets updated
-     */
-    private void compareAndUpdate()
-    {
-        String currItem = comp.getText();
-        if(pointer < super.size())
-        {
-            String histItem = super.get(pointer).toString();
-            if(! histItem.equals(currItem))
-            {
-                super.remove(pointer);
-                super.add(pointer, currItem);
-            }
-        }
-        else
-        {
-            if(! tempItem.equals(currItem))
-            {
-                tempItem = currItem;
-            }
-        }
-
-    } // compareAndUpdate() -------------------------------------------------
-
-
-
-    /**
-     * up-arrow handler - it will decrease the pointer and return former
-     * command
-     */
-    public void upArrow()
-    {
-        if(! super.isEmpty())
-        {
-            compareAndUpdate();
-            desc();
-            comp.setText(getItem());
-        }
-        nullTabItem();
-
-    } // upArrow() ----------------------------------------------------------
-
-
-
-    /**
-     * down-arrow handler - it will increase the pointer toward the more
-     * recent commands
-     */
-    public void downArrow()
-    {
-        if(! super.isEmpty())
-        {
-            compareAndUpdate();
-            inc();
-            comp.setText(getItem());
-        }
-        nullTabItem();
-
-    } // downArrow() --------------------------------------------------------
-
-
-
-    /**
-     * tabulator handler, tab-completion
-     */
-    public void tabulator()
-    {
-        // check tabItem - first or subsequent tab-key hit?
-        if(tabItem == null)
-        {
-            tabItem = comp.getText().trim();
-            if("".equals(tabItem) || tabItem == null)
-            {
-                nullTabItem();
-                return;
-            }
-        }
-
-        if(! super.isEmpty())
-        {
-            compareAndUpdate();
-
-            if(tabPointer >= super.size())
-            {
-                tabPointer = 0; // rotate again from the beginning
-            }
-
-            for( ; tabPointer < super.size(); tabPointer++)
-            {
-                String item = super.get(tabPointer).toString();
-                if(item.startsWith(tabItem))
-                {
-                    pointer = tabPointer;
-                    comp.setText(item);
-                    tabPointer++; // for next iteration (next tab hit)
-                    break;
-                }
-            }
-
-        } // if(! super.isEmpty())  [container empty]
-
-    } // tabulator() --------------------------------------------------------
-
-
-
-} // class ACommandHistory ==================================================
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AHashMap.java b/graphics/AtlantisJava/src/atlantis/utils/AHashMap.java
deleted file mode 100755
index 6e4f5f1c9d4a..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AHashMap.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package atlantis.utils;
-
-import java.util.HashMap;
-import atlantis.Atlantis;
-
-/**
- * Based on a standard Hashmap with an modified interface
- */
-
-public class AHashMap extends HashMap
-{
-
-    private static ALogger logger = ALogger.getLogger(AHashMap.class);
-    
-    private void printWarningMessage(String msg)
-    {
-        logger.warn("AHashMap: " + msg);
-    }
-
-
-    public AHashMap(int num)
-    {
-        super(num);
-    }
-
-    public AHashMap put(String name, int i)
-    {
-        put(name, new Integer(i));
-        return this;
-    }
-
-    public float[] getFloatArray(String name)
-    {
-        Object temp = get(name);
-        if(temp == null)
-        {
-            printWarningMessage("getFloatArray(): can't find float array named " +
-                                name);
-            return null;
-        }
-        else
-        {
-            return (float[]) temp;
-        }
-    } // getFloatArray() -------------------------------------------------------
-
-    public float[][][] getFloatArray3D(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getFloatArray3D(): can't find 3D float array named "
-                                + name);
-        }
-        return (float[][][]) temp;
-    }
-
-    public String[] getStringArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getStringArray(): can't find String array named "
-                                + name);
-        }
-        return (String[]) temp;
-    }
-
-    public String[][] getStringArray2D(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getStringArray2D(): can't find String array named "
-                                + name);
-        }
-        return (String[][]) temp;
-    }
-
-
-    public int[] getIntArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null && !name.equals("sub"))
-        {
-            printWarningMessage("getIntArray(): can't find int array named " +
-                                name);
-        }
-        return (int[]) temp;
-    }
-
-
-    public int[][] getIntArray2D(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getIntArray2D(): can't find 2D int array named " +
-                                name);
-        }
-        return (int[][]) temp;
-    }
-
-
-    public int getInt(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getInt(): can't find int named " + name);
-        }
-        return ((Integer) temp).intValue();
-    }
-
-    public long getLong(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getLong(): can't find int named " + name);
-	    return -1;
-        }
-        return ((Long) temp).longValue();
-    }
-
-    public float getFloat(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-        {
-            printWarningMessage("getFloat(): can't find int named " + name);
-	    return -1;
-        }
-        return ((Float) temp).floatValue();
-    }
-
-
-    public float[] getUnknownFloatArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return new float[getInt("numData")];
-        return (float[]) temp;
-    }
-
-    public long[] getUnknownLongArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return new long[getInt("numData")];
-        return (long[]) temp;
-    }
-
-
-    public int[] getUnknownIntArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return new int[getInt("numData")];
-        return (int[]) temp;
-    }
-
-
-    public float[] getUnsureFloatArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return null;
-        return (float[]) temp;
-    }
-
-    public int[] getUnsureIntArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return null;
-        return (int[]) temp;
-    }
-
-    public String[] getUnsureStringArray(String name)
-    {
-        Object temp = get(name);
-
-        if(temp == null)
-            return null;
-        return (String[]) temp;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AIdDictionary.java b/graphics/AtlantisJava/src/atlantis/utils/AIdDictionary.java
deleted file mode 100644
index 9d04ec7239c5..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AIdDictionary.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package atlantis.utils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * Class representing an identifier dictionary, used for decoding of compact IDs.
- *
- * @author Eric Jansen
- */
-class AIdDictionary extends AIdField {
-
-    private HashMap<String, Node> subregions = null;
-    private HashMap<String, Node> labels = null;
-    private HashMap<String, List<AIdRange>> ranges = new HashMap<String, List<AIdRange>>();
-    
-    /**
-     * Empty constructor, used to create a placeholder dictionary that 
-     * can be initialized later.
-     */
-    AIdDictionary() {}
-    
-    /**
-     * Construct and initialize dictionary from an &lt;IdDictionary&gt; XML node.
-     * @param dict dictionary XML node
-     * @throws AAtlantisException 
-     */
-    AIdDictionary(Node dict) throws AAtlantisException {
-        initialize(dict);
-    }
-    
-    /**
-     * Initializes a dictionary from an &lt;IdDictionary&gt; XML node.
-     * @param dict dictionary XML node
-     * @throws AAtlantisException 
-     */
-    final void initialize(Node dict) throws AAtlantisException {
-        
-        this.dictionary = this;
-        
-        NodeList nodes = dict.getChildNodes();
-        
-        for (int i=0; i<nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                
-                if ("field".equals(node.getNodeName())) {
-                    String fieldName = node.getAttributes().getNamedItem("name").getNodeValue();
-                    if (labels == null) {
-                        labels = new HashMap<String, Node>();
-                    }
-                    labels.put(fieldName, node);
-                
-                } else if ("subregion".equals(node.getNodeName())) {
-                    String subregionName = node.getAttributes().getNamedItem("name").getNodeValue();
-                    if (subregions == null) {
-                        subregions = new HashMap<String, Node>();
-                    }
-                    subregions.put(subregionName, node);
-                
-                } else if ("region".equals(node.getNodeName())) {
-                    parseRegion(node, null, 0);
-                
-                } else if ("alternate_regions".equals(node.getNodeName())) {
-                    NodeList altnodes = node.getChildNodes();
- 
-                    for (int j=0; j<altnodes.getLength(); j++) {
-                        Node altnode = altnodes.item(j);
-                        if (altnode.getNodeType() == Node.ELEMENT_NODE
-                                && "region".equals(altnode.getNodeName())) {
-                            parseRegion(altnode, null, 0);
-                        }
-                    }
-                }
-            }
-        }
-        
-        // Clean up the HashMaps, they are only needed during initialization.
-        ranges = null;
-        labels = null;
-        subregions = null;
-    }
-    
-    /**
-     * Returns true if the dictionary contains labels for the named field.
-     * @param fieldName name of the field
-     * @return true if labels are present
-     */
-    boolean hasLabels(String fieldName) {
-        return labels.containsKey(fieldName);
-    }
-    
-    /**
-     * Returns the &lt;field&gt; node containing the labels for the named field.
-     * @param fieldName name of the field
-     * @return &lt;field&gt; XML node
-     * @throws AAtlantisException 
-     */
-    Node getLabels(String fieldName) throws AAtlantisException {
-        if (labels.containsKey(fieldName)) {
-            return labels.get(fieldName);
-        } else {
-            throw new AAtlantisException("Labels for field '"+fieldName+"' not found");
-        }        
-    }
-    
-    /**
-     * Returns the &lt;subregion&gt; node containing the named subregion.
-     * @param subRegionName name of the subregion
-     * @return &lt;subregion&gt; XML node
-     * @throws AAtlantisException 
-     */
-    Node getSubRegion(String subRegionName) throws AAtlantisException {
-        if (subregions.containsKey(subRegionName)) {
-            return subregions.get(subRegionName);
-        } else {
-            throw new AAtlantisException("Subregion '"+subRegionName+"' not found");
-        }
-    }
-    
-    /**
-     * One AIdRange object for every unique field range is kept inside the dictionary. 
-     * It serves to collect all possible values for the named field. Due to the tree 
-     * structure of the identifiers multiple AIdFields with the same name might be 
-     * created, but they will always have the same range. The first AIdField with a 
-     * certain name will be the parent of the range, but it is only used for decoding 
-     * of labelled fields. The field name has to be set before creating the range in the 
-     * dictionary.
-     * @param field named identifier field
-     * @return global range corresponding to the named field
-     */
-    AIdRange getRange(String group, int level) throws AAtlantisException {
-
-        List<AIdRange> range;
-        if (ranges.containsKey(group)) {
-            range = ranges.get(group);
-        } else {
-            range = new ArrayList<AIdRange>();
-            ranges.put(group, range);
-        }
-        
-        while (range.size() <= level) {
-            range.add(new AIdRange());
-        }
-
-        return range.get(level);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AIdField.java b/graphics/AtlantisJava/src/atlantis/utils/AIdField.java
deleted file mode 100644
index a1f9c7d8d8d7..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AIdField.java
+++ /dev/null
@@ -1,537 +0,0 @@
-package atlantis.utils;
-
-import java.util.HashMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * Class representing a single field in an identifier. Each field has a parent, 
- * a range of allowed values and child fields that may depend on the value of the 
- * current field. The possible values of a field will determine the number of bits
- * needed to store it in the compact identifier. The AIdField tree is capable of 
- * encoding and decoding these compact identifiers.
- *
- * @author Eric Jsnsen
- */
-class AIdField {
-    
-    /** 
-     * Dictionary that this field belongs to. The dictionary is used to keep track 
-     * of the possible values of a field, 
-     */
-    protected AIdDictionary dictionary = null;
-    
-    /** Parent field in the identifier tree. */
-    private AIdField parent = null;
-    
-    /** Level of nesting this field is at. */
-    private int level = 0;
-    
-    /** Field name. */
-    private String name = null;
-    
-    /** All known values found for this field in the dictionary. */
-    private AIdRange fieldRange = null;
-
-    /** Map of value ranges to child AIdField objects, inverse of parent. */
-    private HashMap<AIdRange, AIdField> children = new HashMap<AIdRange, AIdField>();
-    
-    /** Map of string labels in case of an enumerated field. */
-    private HashMap<Integer, String> labels = null;
-    
-    /** Reference to idHelper for retrieving dictionaries. */
-    protected static ANewIdHelper idHelper = ANewIdHelper.instance();
-    
-    /**
-     * Empty constructor.
-     */
-    protected AIdField() {}
-    
-    /**
-     * Constructor, setting dictionary and parent field.
-     * @param dict dictionary the field belongs to
-     * @param parentField parent field
-     */
-    protected AIdField(AIdDictionary dict, AIdField parentField) {
-        
-        dictionary = dict;
-        if (parentField != null) {
-            parent = parentField;
-            level = parent.getLevel()+1;
-        }
-    }
-    
-    /**
-     * Get the name of the field.
-     * @return field name
-     */
-    String getName() {
-        return name;
-    }
-    
-    /**
-     * Get the nesting level of the field.
-     * @return nesting level
-     */
-    int getLevel() {
-        return level;
-    }
-    
-    /**
-     * Obtain the value of the named field from a compact identifier.
-     * @param fieldName field name
-     * @param id compact identifier
-     * @return value of the given field in the identifier
-     * @throws AAtlantisException 
-     */
-    public int get(String fieldName, long id) throws AAtlantisException {
-        if (id > Integer.MAX_VALUE) {
-            return get(fieldName, id, 64);
-        } else {
-            return get(fieldName, id, 32);
-        }
-    }
-    
-    /**
-     * Obtain the string value of the named field from a compact identifier.
-     * @param fieldName field name
-     * @param id compact identifier
-     * @return value of the given field in the identifier
-     * @throws AAtlantisException 
-     */
-    public String getString(String fieldName, long id) throws AAtlantisException {
-        if (id > Integer.MAX_VALUE) {
-            return getString(fieldName, id, 64);
-        } else {
-            return getString(fieldName, id, 32);
-        }
-    }
-    
-    /**
-     * Internal version of get(String, long), propagating the bit offset in 
-     * the compact identifier.
-     * @param fieldName field name
-     * @param id compact identifier
-     * @param offset bit offset accumulated from parent fields
-     * @return value of the given field in the identifier
-     * @throws AAtlantisException 
-     */
-    private int get(String fieldName, long id, int offset) throws AAtlantisException {
-        
-        if (fieldRange == null) {
-            throw new AAtlantisException("No range known for identifier field"
-                    + " '" + name + "' while decoding '" + fieldName + "'");
-        }
-        
-        // The following code is duplicated a few times in this class. This is 
-        // necessary to extract the value but also update offset at the same time.
-        int bits = fieldRange.bits();
-        offset -= bits;
-        int mask = (int)(Math.pow(2, bits)) - 1;
-
-        int value;
-        try {
-            value = fieldRange.get((int)(id >> offset & mask));
-        } catch (AAtlantisException e) {
-            throw new AAtlantisException("Unable to decode identifier field"
-                    + " '" + name + "': " + e);
-        }
-        
-        if (fieldName.equals(name)) {
-            // This is me, return value
-            return value;
-        } else {
-            // Find the correct child to delegate this ID to
-            for(AIdRange range : children.keySet()) {
-                if (range.contains(value)) {
-                    return children.get(range).get(fieldName, id, offset);
-                }
-            }
-        }
-        
-        throw new AAtlantisException("Invalid identifier '" + id + "'");
-    }
-
-    /**
-     * Internal version of get(String, long), propagating the bit offset in 
-     * the compact identifier.
-     * @param fieldName field name
-     * @param id compact identifier
-     * @param offset bit offset accumulated from parent fields
-     * @return value of the given field in the identifier
-     * @throws AAtlantisException 
-     */
-    private String getString(String fieldName, long id, int offset) throws AAtlantisException {
-        
-        if (fieldRange == null) {
-            throw new AAtlantisException("No range known for identifier field"
-                    + " '" + name + "' while decoding '" + fieldName + "'");
-        }
-        
-        // The following code is duplicated a few times in this class. This is 
-        // necessary to extract the value but also update offset at the same time.
-        int bits = fieldRange.bits();
-        offset -= bits;
-        int mask = (int)(Math.pow(2, bits)) - 1;
-
-        int value;
-        try {
-            value = fieldRange.get((int)(id >> offset & mask));
-        } catch (AAtlantisException e) {
-            throw new AAtlantisException("Unable to decode identifier field"
-                    + " '" + name + "': " + e);
-        }
-        
-        if (fieldName.equals(name)) {
-            // This is me, return value
-            return getLabel(value);
-        } else {
-            // Find the correct child to delegate this ID to
-            for(AIdRange range : children.keySet()) {
-                if (range.contains(value)) {
-                    return children.get(range).getString(fieldName, id, offset);
-                }
-            }
-        }
-        
-        throw new AAtlantisException("Invalid identifier '" + id + "'");
-    }
-    
-    /**
-     * Convert a compact identifier into a "/" delimited expanded identifier.
-     * @param id compact identifier
-     * @return expanded identifier, fields delimited by "/"
-     */
-    public String getFullIdentifier(long id) throws AAtlantisException {
-        
-        StringBuilder s = new StringBuilder();
-        if (id > Integer.MAX_VALUE) {
-            getFullIdentifier(id, 64, s);
-        } else {
-            getFullIdentifier(id, 32, s);
-        }
-        return s.toString();
-    }
-    
-    /**
-     * Internal version of getFullIdentifier(long), passing the bit offset a 
-     * StringBuilder object. The output is appended to the StringBuilder object.
-     * @param id compact identifier
-     */
-    private void getFullIdentifier(long id, int offset, StringBuilder s) throws AAtlantisException {
-        
-        // The following code is duplicated a few times in this class. This is 
-        // necessary to extract the value but also update offset at the same time.
-        int bits = fieldRange.bits();
-        offset -= bits;
-        int mask = (int)(Math.pow(2, bits)) - 1;
-
-        int value;
-        try {
-            value = fieldRange.get((int)(id >> offset & mask));
-        } catch (AAtlantisException e) {
-            throw new AAtlantisException("Unable to decode identifier field"
-                    + " '" + name + "': " + e.getMessage());
-        }
-        
-        if (hasLabels()) {
-            s.append(getLabel(value));//.append("=").append(value);
-        } else {
-            s.append(value);
-        }
-
-        if (children != null) {
-            for (AIdRange range : children.keySet()) {
-                if (range.contains(value)) {
-                    AIdField child = children.get(range);
-                    if (child != null && !child.isEmpty()) {
-                        s.append("/");
-                        child.getFullIdentifier(id, offset, s);
-                    }
-                    return;
-                }
-            }
-
-            throw new AAtlantisException("Invalid identifier '" + id + "', "
-                    + "field '" + name +"' does not allow value " + value + " "
-                    + "(partially decoded: '" + s.toString() + "')");
-        }
-    }
-    
-    /**
-     * Parses a &lt;region&gt; element in the XML file. This method should be 
-     * called on an AIdField instance that represents the first field in the 
-     * region. Children will be added by recursively calling this method.
-     * @param region XML element to parse
-     * @param start Starting child element
-     * @return Last child parsed
-     * @throws AAtlantisException 
-     */
-    AIdField parseRegion(Node region, String group, int start) throws AAtlantisException {
-        NodeList nodes = region.getChildNodes();
-        
-        if (start == 0) {
-            // In a new region, first set the group all parsed elements belong to (if any).
-            Node groupNode = region.getAttributes().getNamedItem("group");
-            if (groupNode != null) {
-                group = groupNode.getNodeValue();
-            }
-        }
-        
-        for (int i=start; i<nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-            
-            /* Select only elements, not the text in between. */
-            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                
-                if ("range".equals(node.getNodeName())) {
-                    
-                    // The first <range> encountered is for the current AIdFied. For the 
-                    // given values of this field, the next will be a child. For example, 
-                    // when called with:
-                    // 
-                    //   <range field="subdet" value="2" />
-                    //   <range field="part" value=1" />
-                    //   ...
-                    // 
-                    // This field will become "subdet". In case the value of this field 
-                    // in the identifier is "2", the next field in the chain is "part".
-                    // More values of "part" will probably be added later, plus other 
-                    // values of "subdet" for which the next field is not "part" but 
-                    // something different.
-                    if (name == null) {
-                        name = node.getAttributes().getNamedItem("field").getNodeValue();
-                        if (dictionary.hasLabels(name)) {
-                            parseLabels(dictionary.getLabels(name));
-                        }
-                        
-                        fieldRange = dictionary.getRange(group, level);
-                    }
-
-                    AIdRange range = new AIdRange(this, group, node);
-                    
-                    // Fields are sometimes repeated without specifying any allowed values,
-                    // in that case we allow all existing values (so we copy fieldRange).
-                    if (range.isEmpty() && !fieldRange.isEmpty()) {
-                        range.add(fieldRange);
-                    }
-                    
-                    // If this particular range is already present, give the next 
-                    // node (i+1) to the correct child and tell it to parse it.
-                    if (children.containsKey(range) && children.get(range) != null) {
-                        
-                        return children.get(range).parseRegion(region, group, i+1);
-                    }
-                    
-                    // If there is another range that fully contains this range, we add the 
-                    // current node there. This is a reasonable shortcut, since we are not 
-                    // interested in fully validating IDs (i.e. raise an exception when an 
-                    // RPC identifier is presented for a muon station that should not contain 
-                    // RPCs), this is a reasonable shortcut. 
-                    for (AIdRange childRange : children.keySet()) {
-                        if (childRange.contains(range)) {
-                            return children.get(childRange).parseRegion(region, group, i+1);
-                        }
-                    }
-
-                    if (group != null && !group.equals("")) {
-                        
-                        // Two ranges within the same group means that they should be 
-                        // considered to lead to the same child. In that case expand 
-                        // the range using AIdRange.add().
-                        for (AIdRange childRange : children.keySet()) {
-                            if (group.equals(childRange.group())) {
-                                AIdField child = children.get(childRange);
-                                
-                                if (child != null) {
-                                    fieldRange.add(range);
-                                    children.remove(childRange);
-                                    childRange.add(range);
-                                    children.put(childRange, child);
-                                    return child.parseRegion(region, group, i+1);
-                                }
-                            }
-                        }
-                    }
-
-                    fieldRange.add(range);
-
-                    AIdField child = new AIdField(dictionary, this);
-                    AIdField retfield = child.parseRegion(region, group, i+1);
-                    if (retfield instanceof AIdDictionary) {
-                        children.put(range, retfield);
-                    } else {
-                        children.put(range, child);
-                    }
-
-                    return retfield;
-
-                } else if ("dictionary".equals(node.getNodeName())) {
-                    
-                    // A dictionary is a reference to another file. The AIdDictionary class
-                    // inherits from AIdField and can will act as the first field in the 
-                    // dictionary. Dictionaries are initialized one by one, so when a dictionary
-                    // does not exist yet, it is created empty so that it can be initialized later.
-                    String dictName = node.getAttributes().getNamedItem("name").getNodeValue();
-                    if (idHelper.hasDictionary(dictName)) {
-                        return idHelper.getDictionary(dictName);
-                    } else {
-                        AIdDictionary dict = new AIdDictionary();
-                        idHelper.addDictionary(dictName, dict);
-                        return dict;
-                    }
-                    
-                } else if ("reference".equals(node.getNodeName())) {
-
-                    // A reference is a link to a <subregion> element. The elements within the 
-                    // subregion are parsed as if they were present instead of the reference.
-                    String reference = node.getAttributes().getNamedItem("subregion").getNodeValue();                    
-                    AIdField child = parseRegion(dictionary.getSubRegion(reference), group, 0);
-
-                    // After parsing the subregion, we need to continue with the current region.
-                    AIdField retfield = child.parseRegion(region, group, i+1);
-                    return retfield;
-                }
-            }
-        }
-        
-        // Reached the end of a region or subregion, 
-        // return the last object parsed (which is us).
-        return this;
-    }
-
-    /**
-     * Parse a &lt;field&gt; object in the XML file.
-     * @param field XML element to parse
-     * @throws AAtlantisException 
-     */
-    private void parseLabels(Node field) throws AAtlantisException {
-
-        labels = new HashMap<Integer, String>();
-        int lastValue = 0;
-        
-        NodeList nodes = field.getChildNodes();
-        for (int i=0; i<nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                
-                if (node.getNodeName().equals("label")) {
-                    String label = node.getAttributes().getNamedItem("name").getNodeValue();
-                    Integer value;
-                    
-                    Node valueNode = node.getAttributes().getNamedItem("value");
-                    if (valueNode == null) {
-                        value = lastValue+1;
-                    } else {
-                        value = Integer.parseInt(valueNode.getNodeValue().replaceAll("\\+", ""));
-                    }
-
-                    labels.put(value, label);
-                    lastValue = value.intValue();
-                }
-            }
-        }
-    }
-    
-    /**
-     * Check if this field has string labels.
-     * @return true if string labels are present
-     */
-    boolean hasLabels() {
-        return labels != null && labels.size() > 0;
-    }
-
-    /**
-     * Check if this field is empty/uninitialized. Fields at the end of the tree 
-     * will remain in this state, during construction all newly initialized fields 
-     * will be in this state.
-     * @return 
-     */
-    boolean isEmpty() {
-        return name == null;
-    }
-    
-    /**
-     * Return label corresponding to an integer value.
-     * @param value field value
-     * @return label
-     */
-    String getLabel(Integer value) {
-        if (labels.containsKey(value)) {
-            return labels.get(value);
-        } else {
-            return "?";
-        }
-    }
-
-    /**
-     * Convert a field value as it appears in the XML file into a true integer.
-     * For example "+2" is converted into 2 and labelled fields are converted 
-     * into their integer equivalents.
-     * @param fieldName field name (for label lookup)
-     * @param value "raw" field value in the XML
-     * @return integer value
-     * @throws AAtlantisException 
-     */
-    protected int valueToInt(String fieldName, String value) throws AAtlantisException {
-
-        try {
-            return Integer.parseInt(value.replaceAll("\\+", ""));
-        } catch (NumberFormatException e) {
-            return labelToInt(fieldName, value);
-        }
-    }
-    
-    /**
-     * Convert a field label into an integer value.
-     * @param fieldName field name
-     * @param label value of the labelled field
-     * @return integer label
-     * @throws AAtlantisException 
-     */
-    protected int labelToInt(String fieldName, String label) throws AAtlantisException {
-        if (labels != null) {
-            if (labels.containsValue(label)) {
-                for (Integer value : labels.keySet()) {
-                    if (label.equals(labels.get(value))) {
-                        return value;
-                    }
-                }
-            }
-        }
-        
-        throw new AAtlantisException("Field/label not found in"
-                +" dictionary: " + fieldName + "/" + label);
-    }
-    
-    /**
-     * Convert the field structure into a printable form, starting from this node.
-     * @return string representation of the identifier tree
-     */
-    @Override
-    public String toString() {
-        return toString("");
-    }
-
-    /**
-     * Private version of toString(), used recursively and passing an indentation
-     * string to print the entire tree structure.
-     * @param indent identation string, appended to all lines
-     * @return string representation of the identifier tree
-     */
-    private String toString(String indent) {
-        StringBuilder s = new StringBuilder();
-
-        s.append(indent).append(name).append(" ").append(fieldRange).append("\n");
-
-        for (AIdRange range : children.keySet()) {
-            s.append(indent).append(range).append("\n");
-            AIdField child = children.get(range);
-            if (child != null) {
-                s.append(child.toString(indent + "  "));
-            }
-        }
-
-        return s.toString();
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AIdHelper.java b/graphics/AtlantisJava/src/atlantis/utils/AIdHelper.java
deleted file mode 100755
index 48561f8232ea..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AIdHelper.java
+++ /dev/null
@@ -1,599 +0,0 @@
-package atlantis.utils;
-
-import java.util.ArrayList;
-
-/**
- * This class contains methods for extracting various properties from the 32 bit
- * identifiers used for hits. It works very similarly to the IdHelpers in Athena,
- * hence its name.
- *
- * @author Eric Jansen
- */
-public class AIdHelper {
-    
-    private static ANewIdHelper idHelper = null;
-    
-    /**
-     * Returns the decoded athena identifier (id) as a string, resp. an
-     * array of strings: first item is the full id expanded (decoded) and
-     * particular subparts are separated by "/" in one sting, further
-     * interesting subparts of the decoded id are provided in the following
-     * items of the array with an explanation given.
-     * So far (2009-01-20), this is implemented only for LAr and Tile, for
-     * other subsystems only first array item is returned with the expanded
-     * id.
-     * @param id int compact identifier
-     * @return String decoded identifier
-     */
-    public static String[] getFullIdentifier(long id)
-    {
-        // more than 10 items should not be necessary
-        ArrayList<String> r = new ArrayList<String>(10);
-        String s = null;
-
-        try 
-        {
-            switch (subDetector(id))
-            {
-                case 2:
-                    switch (indetPart(id))
-                    {
-                        case 1:
-                            // Pixel identifiers are complicated and we don't use them anyway.
-                            throw new AAtlantisException("Pixel identifiers not implemented: " + id);
-                        case 2:
-                            s = "2/2/" + sctBarrelEndcap(id) + "/" +
-                                sctLayerDisk(id) + "/" + sctPhiModule(id) + "/" +
-                                sctEtaModule(id) + "/" + sctPhiIndex(id) + "/" +
-                                sctEtaIndex(id); 
-                            r.add(s);
-                            return r.toArray(new String[r.size()]);
-                        case 3:
-                            
-                            int part = 3;
-                            int barrelEndcap = trtBarrelEndcap(id);
-                            int layerWheel = trtLayerWheel(id);
-                            int phiModule = trtPhiModule(id);
-                            int strawLayer = trtStrawLayer(id);
-                            int straw = trtStraw(id);
-                                   
-                            s = "2" + "/" + part + "/" + barrelEndcap + "/" +
-                                layerWheel + "/" + phiModule + "/" + strawLayer +
-                                "/" + straw;
-                            r.add(s);
-                            r.add("barrel-endcap: " + barrelEndcap);
-                            r.add("layer wheel: " + layerWheel);
-                            r.add("phi module: " + phiModule);
-                            r.add("straw layer: " + strawLayer);
-                            r.add("straw: " + straw);
-                            return r.toArray(new String[r.size()]);
-                            
-                        default:
-                            throw new AAtlantisException("Invalid identifier: " + id);
-                    }
-                case 4:
-                    int part = larPart(id);
-                    int sampling = part < 3 ? 0 : larSampling(id);
-                    int eta = larEta(id);
-                    int phi = larPhi(id);
-                    
-                    if(part == 1) // LAr barrel, LAr endcap
-                    {
-                        int barrelEndcap = larBarrelEndcap(id);
-                        int region = larRegion(id);
-                        s = "4/" + part + "/" + barrelEndcap + "/" +
-                            sampling + "/" + region + "/" + eta + "/" + phi;
-                        r.add(s);
-                        if(barrelEndcap == 1)
-                        {
-                            //r.add("barrel A");
-                            r.add("EMBA");
-                        }
-                        else if(barrelEndcap == -1)
-                        {
-                            //r.add("barrel C");
-                            r.add("EMBC");
-                        }
-                        else if(barrelEndcap == 2 || barrelEndcap == 3)
-                        {
-                            //r.add("endcap A");
-                            r.add("EMECA");
-                        }
-                        else if(barrelEndcap == -2 || barrelEndcap == -3)
-                        {
-                            //r.add("endcap C");
-                            r.add("EMECC");
-                        }
-                    }
-                    else if(part == 2) // HEC
-                    {
-                        int posNeg = larBarrelEndcap(id);
-                        int region = larRegion(id);
-                        s = "4/" + part + "/" + posNeg + "/" + sampling + "/" +
-                            region + "/" + eta + "/" + phi;
-                        r.add(s);
-                        if(posNeg == 2)
-                        {
-                            //r.add("A");
-                            r.add("HECA");
-                        }
-                        else if(posNeg == -2)
-                        {
-                            //r.add("C");
-                            r.add("HECC");
-                        }
-                    }
-                    else if(part == 3) // FCAL
-                    {
-                        int posNeg = larBarrelEndcap(id);
-                        s = "4/" + part + "/" + posNeg + "/" + sampling + "/" +
-                            eta + "/" + phi;
-                        r.add(s);
-                        if(posNeg == 2)
-                        {
-                            //r.add("A");
-                            r.add("FCALA");
-                        }
-                        else if(posNeg == -2)
-                        {
-                            //r.add("C");
-                            r.add("FCALC");
-                        }                        
-                    }
-                    else
-                    {
-                        throw new AAtlantisException("Invalid identifier: " + id);
-                    }
-                    
-                    r.add("sampling: " + sampling); // sampling remains          
-                    
-                    return r.toArray(new String[r.size()]);
-                    
-                case 5:
-                    // tile calorimeter (first number of full id is 5)
-                    int section = tileSection(id);
-                    int side = tileSide(id);
-                    int module = tileModule(id);
-                    int tower = tileTower(id);
-                    sampling = tileSampling(id);
-                    int pmt = tilePmt(id);
-                    int adc = tileAdc(id);
-                    
-                    s = "5/" + section + "/" + side + "/" + module + "/" + 
-                        tower + "/" + sampling + "/" + pmt + "/" + adc;
-                    r.add(s);
-                    
-                    r.add("section: " + section);
-                    r.add("side: " + side);
-                    r.add("module: " + module);
-                    r.add("tower: " + tower);
-                    r.add("sampling: " + sampling);
-                    r.add("PMT: " + pmt);
-                    r.add("ADC: " + adc);
-                    
-                    return r.toArray(new String[r.size()]);
-                    
-                case 7:
-                    String technology = technology(id);
-                    if (technology.equals("MDT")) 
-                    {
-                        s = "7/" + stationName(id) + "/" + stationEta(id) +
-                            "/" + stationPhi(id) + "/" + "MDT/" +
-                            mdtMultiLayer(id) + "/" + mdtTubeLayer(id) + "/" +
-                            mdtTube(id);
-                        r.add(s);
-                        return r.toArray(new String[r.size()]);
-                    }
-                    else if (technology.equals("RPC"))
-                    {
-                        s = "7/" + stationName(id) + "/" + stationEta(id) + "/" +
-                            stationPhi(id) + "/" + "RPC/" + rpcDoubletR(id) + "/" +
-                            rpcDoubletZ(id) + "/" + rpcDoubletPhi(id) + "/" +
-                            rpcGasGap(id) + "/" + rpcMeasuresPhi(id) + "/" +
-                            rpcStrip(id);
-                        r.add(s);
-                        return r.toArray(new String[r.size()]);
-                    }
-                    else if (technology == "TGC")
-                    {
-                        s = "7/" + stationName(id) + "/" + stationEta(id) +
-                            "/" + stationPhi(id) + "/" + "TGC/" + tgcGasGap(id) +
-                            "/" + tgcIsStrip(id) + "/" + tgcChannel(id);
-                        r.add(s);
-                        return r.toArray(new String[r.size()]);                        
-                    }
-                    else if (technology == "CSC")
-                    {
-                        s = "7/" + stationName(id) + "/" + stationEta(id) + "/" +
-                            stationPhi(id) + "/" + "CSC/" + cscChamberLayer(id) +
-                            "/" + cscWireLayer(id) + "/" + cscMeasuresPhi(id) +
-                            "/" + cscStrip(id);
-                        r.add(s);
-                        return r.toArray(new String[r.size()]);                                                
-                    }
-                    else
-                    {
-                        throw new AAtlantisException("Invalid identifier: " + id);
-                    }
-                default:
-                    throw new AAtlantisException("Not yet implemented for identifier: " + id);
-            }
-        } 
-        catch (AAtlantisException e) 
-        {
-            s = id + " (unable to decode: " + e.getMessage() + ")";
-            r.add(s);
-            return r.toArray(new String[r.size()]);                                                
-        }
-        
-    } // getFullIdentifier() ------------------------------------------------
-
-    
-    
-    /** @deprecated */
-    public static int subDetector(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("subdet", id);
-    }
-
-    /** @deprecated */
-    public static int indetPart(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("part", id);
-    }
-
-    /** @deprecated */
-    public static int trtBarrelEndcap(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("barrel_endcap", id);
-    }
-
-
-    /** @deprecated */
-    public static int trtLayerWheel(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("layer_or_wheel", id);
-    }
-
-    /** @deprecated */
-    public static int trtPhiModule(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("phi_sector", id);
-    }
-
-    /** @deprecated */
-    public static int trtStrawLayer(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("straw_layer", id);
-    }
-
-    /** @deprecated */
-    public static int trtStraw(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("straw", id);
-    }
-
-    /** @deprecated */
-    public static final int sctBarrelEndcap(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("barrel_endcap", id);
-    }
-
-    /** @deprecated */
-    public static int sctLayerDisk(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("layer", id);
-    }
-
-    /** @deprecated */
-    public static int sctPhiModule(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("phi_module", id);
-    }
-
-    /** @deprecated */
-    public static int sctEtaModule(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("eta_module", id);
-    }
-
-    /** @deprecated */
-    public static int sctPhiIndex(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("side", id); // This seems odd, phi_index <-> side?
-    }
-
-    /** @deprecated */
-    public static int sctEtaIndex(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("strip", id);
-    }
-
-    /** @deprecated */
-    public static int larPart(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("part", id);
-    }
-
-    /** @deprecated */
-    public static int larBarrelEndcap(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("barrel-endcap", id);
-    }
-
-    /** @deprecated */
-    public static int larPosNeg(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("pos_neg", id);
-    }
-
-    /** @deprecated */
-    public static int larSampling(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("sampling", id);
-    }
-
-    /** @deprecated */
-    public static int larRegion(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("region", id);
-    }
-
-    /** @deprecated */
-    public static int larEta(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        if (larPart(id) < 3) {
-            return idHelper.get("eta", id);
-        } else {
-            return idHelper.get("eta-fcal", id);
-        }
-    }
-
-    /** @deprecated */
-    public static int larPhi(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        if (larPart(id) < 3) {
-            return idHelper.get("phi", id);
-        } else {
-            return idHelper.get("phi-fcal", id);
-        }
-    }
-
-    /** @deprecated */
-    public static int larModule(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("module", id);
-    }
-
-
-    /** @deprecated */
-    public static boolean larIsBarrel(long id) throws AAtlantisException
-    {
-        switch(Math.abs(larBarrelEndcap(id)))
-        {
-            case 1:
-                return true;  // yes, it's barrel
-            case 2:
-                return false; // is endcap
-            case 3:
-                return false; // is endcap
-            default:
-                throw new AAtlantisException("Not a LAr identifier: " + id);
-        }
-    }
-
-    /** @deprecated */
-    public static int tileSection(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("section", id);
-    }
-
-    /** @deprecated */
-    public static int tileSide(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("side", id);
-    }
-
-    /** @deprecated */
-    public static int tileModule(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("module", id);
-    }
-
-    /** @deprecated */
-    public static int tileTower(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("tower", id);
-    }
-
-    /** @deprecated */
-    public static int tileSampling(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("sampling", id);
-    }
-
-    /** @deprecated */
-    public static int tilePmt(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("pmt", id);
-    }
-
-    /** @deprecated */
-    public static int tileAdc(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("adc", id);
-    }
-
-
-    /**
-     * Decodes Athena 32-bit ID to following form (5 is Tile):
-     * 5/section/side/module/tower/sampling/pmt/adc - official identifier
-     *
-     * Identifier used by TileCal collaboration, conversion is clear from the
-     * code and is explained in Sasha Solodkov's email on 2006-09-18
-     *
-     * @param id int
-     * @return String
-     */
-    public static String getDecodedTileIndentifier(long id)
-    {
-        try
-        {
-            int sec = tileSection(id);
-            int side = tileSide(id);
-            int mod = tileModule(id);
-            int tow = tileTower(id);
-            int samp = tileSampling(id);
-
-            // section/side/module into decoded form
-            String secSideMod = "\n[could not work out section/side]";
-            mod++;
-            if(sec == 1 && side == 1)  secSideMod = "LBA" + mod;
-            if(sec == 1 && side == -1) secSideMod = "LBC" + mod;
-            if(sec == 2 && side == 1)  secSideMod = "EBA" + mod;
-            if(sec == 3 && side == 1)  secSideMod = "EBA" + mod;
-            if(sec == 2 && side == -1) secSideMod = "EBC" + mod;
-            if(sec == 3 && side == -1) secSideMod = "EBC" + mod;
-
-            // sampling/tower into decoded form
-            String sampTow = "\n[could not work out sampling/tower]";
-            if(samp == 0) sampTow = "A" + (int)(tow + 1);
-            if(samp == 1) sampTow = "B" + (int)(tow + 1);
-            if(samp == 2) sampTow = "D" + (int)(tow/2);
-            if(samp == 3)
-            {
-                if(tow == 10) sampTow = "E1";
-                if(tow == 11) sampTow = "E2";
-                if(tow == 13) sampTow = "E3";
-                if(tow == 15) sampTow = "E4";
-            }
-
-            return secSideMod + " " + sampTow;
-        }
-        catch (AAtlantisException e)
-        {
-            return id + " (unable to decode: " + e.getMessage() + ")";
-        }
-    }
-
-
-    /** @deprecated */
-    public static String stationName(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.getString("stationName", id);
-    }
-
-    /** @deprecated */
-    public static String technology(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.getString("technology", id);
-    }
-
-    /** @deprecated */
-    public static int stationEta(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("stationEta", id);
-    }
-
-    /** @deprecated */
-    public static int stationPhi(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("stationPhi", id);
-    }
-
-    /** @deprecated */
-    public static int mdtMultiLayer(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("multiLayer", id);
-    }
-
-    /** @deprecated */
-    public static int mdtTubeLayer(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("tubeLayer", id);
-    }
-
-    /** @deprecated */
-    public static int mdtTube(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("tube", id);
-    }
-
-    /** @deprecated */
-    public static int rpcDoubletR(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("doubletR", id);
-    }
-
-    /** @deprecated */
-    public static int rpcDoubletZ(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("doubletZ", id);
-    }
-
-    /** @deprecated */
-    public static int rpcDoubletPhi(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("doubletPhi", id);
-    }
-
-    /** @deprecated */
-    public static int rpcGasGap(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("rpcGasGap", id);
-    }
-
-    /** @deprecated */
-    public static int rpcMeasuresPhi(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("rpcMeasuresPhi", id);
-    }
-
-    /** @deprecated */
-    public static int rpcStrip(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("rpcStrip", id);
-    }
-
-    /** @deprecated */
-    public static int tgcGasGap(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("tgcGasGap", id);
-    }
-
-    /** @deprecated */
-    public static int tgcIsStrip(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("isStrip", id);
-    }
-
-    /** @deprecated */
-    public static int tgcChannel(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("channel", id);
-    }
-
-    /** @deprecated */
-    public static int cscChamberLayer(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("chamberLayer", id);
-    }
-
-    /** @deprecated */
-    public static int cscWireLayer(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("wireLayer", id);
-    }
-
-    /** @deprecated */
-    public static int cscMeasuresPhi(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("cscMeasuresPhi", id);
-    }
-
-    /** @deprecated */
-    public static int cscStrip(long id) throws AAtlantisException {
-        if (idHelper == null) idHelper = ANewIdHelper.instance();
-        return idHelper.get("cscStrip", id);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AIdRange.java b/graphics/AtlantisJava/src/atlantis/utils/AIdRange.java
deleted file mode 100644
index b38d5523882f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AIdRange.java
+++ /dev/null
@@ -1,392 +0,0 @@
-package atlantis.utils;
-
-import java.util.Arrays;
-import org.w3c.dom.Node;
-
-
-/**
- * Class representing a range of possible values for an identifier field.
- *
- * @author Eric Jansen
- */
-class AIdRange {
-    
-    /** Group the field belongs to, ranges of the same group should be merged. */
-    private String group = null;
-    
-    /** Parent field, needed only for printing of labelled fields. */
-    AIdField parent = null;
-    
-    /** A discrete range with values specified in this array. */
-    private int[] values = null;
-    
-    /** A continuous range from min to max (if values == null). */
-    private int minValue, maxValue;
-    
-    /**
-     * Empty constructor, creates an empty range.
-     */
-    AIdRange() {
-        this.values = new int[0];
-    }
-
-    /**
-     * Continuous range constructor, contains all values &gt;= minValue &lt;= maxValue.
-     * @param minValue first value in the range
-     * @param maxValue last value in the range
-     * @throws AAtlantisException 
-     */
-    AIdRange(int minValue, int maxValue) throws AAtlantisException {
-        
-        if (minValue > maxValue) {
-            throw new AAtlantisException("Invalid range: " + minValue + " -> " + maxValue);
-        }
-        
-        this.minValue = minValue;
-        this.maxValue = maxValue;
-    }
-    
-    /**
-     * Discrete range constructor, contains the values given in values[].
-     * @param values ordered array of values
-     */
-    AIdRange(int[] values) {
-        this.values = values;
-    }
-
-    /**
-     * XML constructor, initialize the range from a &lt;range&gt; element.
-     * @param parent id field the values belong to
-     * @param group group this field belongs to
-     * @param node &lt;range&gt; XML element
-     * @throws AAtlantisException 
-     */
-    AIdRange(AIdField parent, String group, Node node) throws AAtlantisException {
-        
-        String fieldName = node.getAttributes().getNamedItem("field").getNodeValue();
-        this.parent = parent;
-        this.group = group;
-
-        Node minValueAttr = node.getAttributes().getNamedItem("minvalue");
-        Node maxValueAttr = node.getAttributes().getNamedItem("maxvalue");
-
-        if (minValueAttr != null && maxValueAttr != null) {
-
-            minValue = parent.valueToInt(fieldName, minValueAttr.getNodeValue());
-            maxValue = parent.valueToInt(fieldName, maxValueAttr.getNodeValue());
-                        
-            if (minValue > maxValue) {
-                throw new AAtlantisException("Invalid range: " + minValue + " -> " + maxValue);
-            }
-
-        } else {
-            Node valueAttr = node.getAttributes().getNamedItem("value");
-            Node valuesAttr = node.getAttributes().getNamedItem("values");
-            
-            if (valueAttr != null) {
-                values = new int[1];
-                values[0] = parent.valueToInt(fieldName, valueAttr.getNodeValue());
-            } else if (valuesAttr != null) {
-                String[] list = valuesAttr.getNodeValue().split(" ");
-                values = new int[list.length];
-                for (int i=0; i<list.length; i++) {
-                    values[i] = parent.valueToInt(fieldName, list[i]);
-                }
-            } else {
-                values = new int[0];
-            }
-        }
-    }
-    
-    /**
-     * Get group name for this range.
-     * @return group name
-     */
-    String group() {
-        return group;
-    }
-    
-    /**
-     * Check if the range contains value.
-     * @param value value to check
-     * @return true if value is part of this range
-     */
-    boolean contains(int value) {
-        if (values == null) {
-            if (value >= minValue && value <= maxValue) {
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            for (int val : values) {
-                if (val == value) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-    
-    /**
-     * Check if the range fully contains another range.
-     * @param range range to check
-     * @return true if all values in the argument are in this range
-     */
-    boolean contains(AIdRange range) {
-        if (range.values == null) {
-            for (int value=range.minValue; value<=range.maxValue; value++) {
-                if (!this.contains(value)) return false;
-            }
-        } else {
-            for (int value : range.values) {
-                if (!this.contains(value)) return false;                
-            }
-        }
-        
-        return true;
-    }
-    
-    /**
-     * Check if this range equals another.
-     * @param obj other range
-     * @return true if obj is an AIdRange object and its values match
-     */
-    @Override
-    public boolean equals(Object obj) {
-
-        if (!(obj instanceof AIdRange)) {
-            return false;
-        }
-
-        AIdRange other = (AIdRange)obj;
-        
-        if (values == null && other.values == null) {
-
-            // Continuous range, check boundaries
-            if (minValue == other.minValue && maxValue == other.maxValue) {
-                return true;
-            } else {
-                return false;
-            }
-
-        } else if (values == null) {
-            
-            // Continuous and discrete range
-            if (other.values.length == maxValue - minValue + 1
-                    && other.values[other.values.length-1] == maxValue
-                    && other.values[0] == minValue) {
-                return true;
-            } else {
-                return false;
-            }
-            
-        } else if (other.values == null) {
-            
-            // Discrete and continuous range
-            if (values.length == other.maxValue - other.minValue + 1
-                    && values[values.length-1] == other.maxValue
-                    && values[0] == other.minValue) {
-                return true;
-            } else {
-                return false;
-            }
-            
-        } else {
-
-            // Discrete range, check length and individual entries
-            if (values.length != other.values.length) {
-                return false;
-            } else {
-                for (int i=0; i<values.length; i++) {
-                    if (values[i] != other.values[i]) {
-                        return false;
-                    }
-                }
-
-                return true;
-            }
-        }
-    }
-    
-    /**
-     * Check if the range specifies any values or not.
-     * @return true if the range is empty, false if not
-     */
-    public boolean isEmpty() {
-        return values != null && values.length == 0;
-    }
-
-    /**
-     * Hash code to facilitate lookups.
-     * @return hash
-     */
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 89 * hash + Arrays.hashCode(this.values);
-        hash = 89 * hash + this.minValue;
-        hash = 89 * hash + this.maxValue;
-        return hash;
-    }
-    
-    /**
-     * Merge the given range with the current one.
-     * @param other range to be added to the current range
-     * @return current range after new range has been added
-     * @throws AAtlantisException 
-     */
-    AIdRange add(AIdRange other) throws AAtlantisException {
-
-        if (values == null && other.values == null) {
-            
-            // Both are continuous ranges, find min and max values.
-            minValue = Math.min(minValue, other.minValue);
-            maxValue = Math.max(maxValue, other.maxValue);
-            
-        } else if (values == null || other.values == null) {
-
-            // One is continous, the other is discrete.
-            if (values == null) {
-
-                if (other.values.length > 0) {
-                    // If the discrete range is not empty, find min and max values.
-                    minValue = Math.min(minValue, other.values[0]);
-                    maxValue = Math.max(maxValue, other.values[other.values.length-1]);
-                }
-                
-                // If we add an empty range, there is nothing to be done.
-
-            } else {
-
-                if (values.length > 0) {
-                    // If the discrete range is not empty, find min and max values.
-                    minValue = Math.min(values[0], other.minValue);
-                    maxValue = Math.max(values[values.length-1], other.maxValue);
-                    values = null;
-                } else {
-                    // if this is an empty range, copy min and max from the other.
-                    minValue = other.minValue;
-                    maxValue = other.maxValue;
-                    values = null;
-                }
-            }
-
-        } else {
-
-            // Both ranges are discrete, count how many unique elements.
-            int numValues = values.length;
-            for (int value : other.values) {
-                if (!this.contains(value)) {
-                    numValues++;
-                }
-            }
-            
-            // Merge two arrays, skipping duplicates and keeping order.
-            int[] newValues = new int[numValues];
-            for (int i=0, j=0, k=0; i<numValues; i++) {
-                if (j == values.length) {
-
-                    newValues[i] = other.values[k++];                        
-
-                } else if (k == other.values.length) {
-
-                    newValues[i] = values[j++];
-
-                } else {
-
-                    if (this.values[j] == other.values[k]) {
-                        newValues[i] = values[j++];
-                        k++;
-                    } else if (values[j] < other.values[k]) {
-                        newValues[i] = values[j++];
-                    } else {
-                        newValues[i] = other.values[k++];                        
-                    }
-                }
-            }
-            
-            values = newValues;
-        }
-        
-        return this;
-    }
-    
-    /**
-     * Check the allowed values and return the number of bits needed to encode them.
-     * @return number of bits
-     */
-    int bits() {
-        
-        // Cound how many values this field can have.
-        int numValues;
-        if (values != null) {
-            numValues = values.length;
-        } else {
-            numValues = maxValue - minValue + 1;
-        }
-        
-        if (numValues <= 2) {
-            // A field takes at least 1 bit, so return 1.
-            return 1;
-        } else {
-            // The number of bits required to store numValues different values.
-            return (int)(Math.ceil(Math.log(numValues) / Math.log(2)));
-        }
-    }
-    
-    /**
-     * Get the field value corresponding to the given range index. For example 
-     * for a field that has range [ -2, 0, +2 ], get(0) will return -2.
-     * @param index, decoded from compact identifier
-     * @return field value
-     * @throws AAtlantisException 
-     */
-    int get(int index) throws AAtlantisException {
-        if (values != null) {
-            if (index < values.length) {
-                return values[index];
-            } else {
-                throw new AAtlantisException("Invalid field index: " + index);
-            }
-        } else {
-            if (minValue + index <= maxValue) {
-                return minValue + index;
-            } else {
-                throw new AAtlantisException("Invalid field value: " + index);
-            }
-        }
-    }
-
-    /**
-     * Convert the range into a convenient form for printing.
-     * @return formatted string representing range
-     */
-    @Override
-    public String toString() {
-        StringBuilder s = new StringBuilder();
-        s.append("[ ");
-
-        if (values == null) {
-            if (parent != null && parent.hasLabels()) {
-                String minLabel = parent.getLabel(minValue);
-                String maxLabel = parent.getLabel(maxValue);
-                s.append(minLabel).append("=").append(minValue);
-                s.append(" -> ").append(maxLabel).append("=").append(maxValue);
-            } else {
-                s.append(minValue).append(" -> ").append(maxValue).append(" ");
-            }
-        } else {
-            for (int value : values) {
-                if (parent != null && parent.hasLabels()) {
-                    String label = parent.getLabel(value);
-                    s.append(label).append("=").append(value).append(" ");
-                } else {
-                    s.append(value).append(" ");
-                }
-            }
-        }
-        s.append("]");
-        return s.toString();
-    }    
-}
\ No newline at end of file
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AIntHashtable.java b/graphics/AtlantisJava/src/atlantis/utils/AIntHashtable.java
deleted file mode 100755
index 04b0adbcd5f1..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AIntHashtable.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package atlantis.utils;
-
-
-// does not copy input arrays for efficiency
-// these arrays must not be modified !
-
-public class AIntHashtable {
-
-  int size;
-  int shift;
-  int[] key;
-  int[] value;
-  int[] next;
-  int[] first;
-
-  /*
-   public AIntHashtable(int size) {
-   this.size=size;
-   shift=0;
-   count = 0;
-   key = new int[size];
-   value = new int[size];
-   next = new int[size];
-   first = new int[size];
-   for (int i = 0; i < size; ++i)
-   first[i] = -1;
-   }
-   */
-
-  public AIntHashtable(int[] key, int[] value) {
-    this.size=key.length;
-    this.key=key;
-    this.value=value;
-    //
-    int mask=0;
-    for(int i=0; i<size; ++i) {
-      mask=mask|key[i];
-      if((mask&1)==1) break;
-    }
-    shift=0;
-    for(int i=0; i<size; ++i) {
-      if((mask>>i&1)==1) break;
-      shift++;
-    }
-    //
-    next=new int[size];
-    first=new int[size];
-    for(int i=0; i<size; ++i)
-      first[i]=-1;
-    for(int i=0; i<size; ++i) {
-      int index=(key[i]>>shift)%size;
-      if(index<0) index=-index;
-      this.next[i]=first[index];
-      first[index]=i;
-    }
-  }
-
-  public AIntHashtable(int[] key) {
-    this(key, makeIndexArray(key.length));
-  }
-
-  private static int[] makeIndexArray(int length) {
-    int[] temp=new int[length];
-    for(int i=0; i<length; ++i)
-      temp[i]=i;
-    return temp;
-  }
-
-  public int get(int key) {
-    if(size<=0) return -1;
-    int index=(key>>shift)%size;
-    if(index<0) index=-index;
-    for(int e=first[index]; e!=-1; e=next[e])
-      if(this.key[e]==key)
-        return value[e];
-    return -1;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/ALogger.java b/graphics/AtlantisJava/src/atlantis/utils/ALogger.java
deleted file mode 100644
index 3079c1931739..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/ALogger.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package atlantis.utils;
-
-import java.io.IOException;
-import java.io.File;
-import java.util.Properties;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.Level;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.log4j.FileAppender;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Layout;
-
-
-
-/**
- * The class is a common wrapper for logging facility, uses
- * apache-logging library log4j (more complex and powerful than Java
- * native java.util.logging (e.g. flushing is automated, allows customised
- * message logs layout, different levels for different sources, etc).
- * Because it is subclassing from Logger, it needs LoggerFactory mechanism
- * to be in place. Reference to it is given via Properties, if more
- * complex properties are to be defined, it will be put in a file (such
- * properties file must be accessed generically so that it is load in
- * correctly no matter whether Atlantis is run locally (and have distribution
- * directories available) or from a .jar file (webstart execution).
- *
- * @author Zdenek Maxa
- */
-public final class ALogger extends Logger
-{		
-	// the class is a singleton, reference to itself
-	private static Logger root = null;
-	
-	// it's enough to instantiate a factory once and for all
-	private static ALoggerFactory loggerFactory = new ALoggerFactory();
-	
-	// logging layouts definition (format characters explained at PatternLayout class)
-	private static final String CONSOLE_LOGGING_LAYOUT =
-		"%-5p %d{yyyy-MM-dd HH:mm:ss,SSS}  %m%n";
-	// %c - cathegory (must be specified at .getLogger(Class.class))
-	private static final String FILE_LOGGING_LAYOUT =
-		"%-5p %d{yyyy-MM-dd HH:mm:ss,SSS}  %m%n  (%c thread:%t)%n";
-	// contains some format characters which are slow - *only* for debugging
-	private static final String FILE_LOGGING_LAYOUT_FULL =
-		"%-5p %d{yyyy-MM-dd HH:mm:ss,SSS}  %m%n  (%c.%M() [line %L], thread:%t)%n";
-	
-	
-	
-	// logging levels as defined in org.apache.log4j.Level
-	// this variable is used via a getter method to print out command
-	// line options help
-	private static String stringLevels = 
-		Level.TRACE.toString()  + ", " + // int value: 10000
-    Level.DEBUG.toString()  + ", " + // int value: 10000
-		Level.INFO.toString()   + ", " + // int value: 20000
-		Level.WARN.toString()   + ", " + // int value: 30000
-		Level.ERROR.toString() + ", " +  // int value: 30000
-		Level.FATAL.toString();          // int value: 50000
-
-	// default logging level (if it wasn't specified or was incorrect)
-	private static Level defaultLevel = Level.INFO;
-	
-	
-	/**
-	 * The constructor must be protected so that it is visible
-	 * from ALoggerFactory. Should not be instantiated directly, but via
-	 * .getInstance() 
-	 * @param name
-	 */
-	protected ALogger(String name) 
-	{
-		super(name);
-		
-	} // ALogger() ----------------------------------------------------------
-
-	
-	
-	/**
-	 * initialize(String[] options)
-	 * Initializes the logger
-   * @param level severity level as read from the command line option
-   * @param destination destination to write logs to, as read from the command line
-   */
-	public static void initialize(String level, String destination)
-	{
-
-		// set logging level, if level contains nonsense, set default
-		Level currentLevel = Level.toLevel(level, defaultLevel);
-		
-
-		// set properties - LogggerFactory
-		// log4j.loggerFactory=atlantis.utils.ALoggerFactory
-		// this may also be done via properties file (if necessary for
-		// more complex logging configuration without necessity to
-		// recompile). properties file is contains pairs key=value
-		// caution: must be accessed generically (so that it also
-		// works when atlantis is packed in a .jar file)
-		// without setting LoggerFactory - ClassCastException when getting
-		// Logger via ALogger.getLogger("Atlantis");
-		Properties up = new Properties();
-		up.setProperty("log4j.loggerFactory",
-				       "atlantis.utils.ALoggerFactory");
-		PropertyConfigurator.configure(up);
-		
-		// if instantiated this way
-		// logger = new ALogger();
-		// -> NullPointerException when adding appender
-		
-		// all loggers created afterwards will have properties of this root logger
-		root = Logger.getRootLogger();
-		
-		root.setLevel(currentLevel);
-
-		
-		// logging will always be done to console (System.out - stdout)
-
-		Layout consoleLayout = new PatternLayout(CONSOLE_LOGGING_LAYOUT);
-		ConsoleAppender ca = new ConsoleAppender(consoleLayout,
-				ConsoleAppender.SYSTEM_OUT);
-		ca.setImmediateFlush(true);
-		root.addAppender(ca);
-
-		root.info("Logging to console (System.out) initialised");
-	
-		// if a file was specified as logging destination, then logs
-		// will be duplicated to that file as well
-		if(destination != null)
-		{
-			// check if the file already exists
-			File f = new File(destination);
-			boolean fileExists = false;
-			if(f.exists())
-			{
-				fileExists = true;
-			}
-			try
-			{
-				// some file was specified on the command line
-				Layout fileLayout = new PatternLayout(FILE_LOGGING_LAYOUT);
-				// if the file exists, it will be appended to
-				FileAppender fa = new FileAppender(fileLayout, destination);
-				fa.setImmediateFlush(true);
-				root.addAppender(fa);
-				if(fileExists)
-				{
-					String msg = "==================================  " +
-					             "Log file " + destination + " exists, " +
-					             "opening it for appending";
-					root.warn(msg);
-				}
-				root.warn("Logging to " + destination + " initialised");
-			}
-			catch(IOException ex)
-			{
-				root.warn("Can't write log messages to: "+ destination);
-			}
-		}
-				
-	} // initialize() -------------------------------------------------------
-
-	
-
-	public static ALogger getLogger(String name) 
-	{
-		if(root != null)
-		{	
-			return (ALogger) Logger.getLogger(name, loggerFactory);
-		}
-		else
-		{
-			// logger hasn't been initialised yet, initialise with
-			// default values (i.e. logging only to console with INFO level)			
-			try
-			{
-				initialize(defaultLevel.toString(),null);
-			}
-			catch(Exception ex)
-			{
-				// this exception should never occur
-				ex.printStackTrace();
-			}
-			return (ALogger) Logger.getLogger(name, loggerFactory);
-		}
-		
-	} // getLogger() --------------------------------------------------------
-
-	
-
-	public static ALogger getLogger(Class clazz)
-	{
-		return ALogger.getLogger(clazz.getName());
-		
-	} // getLogger() --------------------------------------------------------
-
-	
-	
-	public void forcedLog(String fqcn, Object msg, Throwable t)
-	{
-		super.forcedLog(fqcn, Level.ALL, msg, t);
-		
-	} // forcedLog() --------------------------------------------------------
-
-	
-	
-	public static String getStringLevels()
-	{
-		return stringLevels;
-		
-	} // getStringLevels() --------------------------------------------------
-	
-} // class ALogger ==========================================================
diff --git a/graphics/AtlantisJava/src/atlantis/utils/ALoggerFactory.java b/graphics/AtlantisJava/src/atlantis/utils/ALoggerFactory.java
deleted file mode 100644
index f4b5a772b9fa..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/ALoggerFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package atlantis.utils;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggerFactory;
-
-/**
- * LoggerFactory as used by ALogger - necessary when subclassing Logger
- * @author Zdenek Maxa
- */
-public class ALoggerFactory implements LoggerFactory
-{
-
-	/**
-	 * The constructor should be public as it will be called by
-	 * configurators in different packages.
-	 */
-	public ALoggerFactory() { }
-	
-	
-	public Logger makeNewLoggerInstance(String name) 
-	{
-		return new ALogger(name);
-	}
-
-} // class ALoggerFactory ===================================================
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AMath.java b/graphics/AtlantisJava/src/atlantis/utils/AMath.java
deleted file mode 100755
index f52b826ab653..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AMath.java
+++ /dev/null
@@ -1,328 +0,0 @@
-package atlantis.utils;
-
-import java.awt.geom.Point2D;
-
-
-/**
- * Contains generally useful constants and mathematical functions
- * and functions for formatting
- */
-public class AMath
-{
-    final public static double TWO_PI = 2. * Math.PI;
-    final public static double PI_BY_8 = Math.PI / 8.;
-
-    // Constant giving the unicode value of a small Greek eta.
-    final static public String ETA = "\u03B7";
-    // Constant giving the unicode value of a small Greek lambda.
-    final static public String LAMBDA = "\u03BB";
-    // Unicode capital Lambda
-    final static public String LAMBDACAP = "\u039B";
-    // Unicode lowercase gamma
-    final static public String GAMMA = "\u03B3";
-    // Constant giving the unicode value of a small Greek rho.
-    final static public String RHO = "\u03C1";
-    // Constant giving the unicode value of a small Greek phi.
-    // final static public String PHI = "\u03C6"; // small
-    final static public String PHI = "\u03A6"; // capital
-    // Constant giving the unicode value of degrees symbol.
-    final static public String DEGREES = "\u00B0";
-    // Constant giving the unicode value of a capital Greek delta.
-    final static public String DELTA = "\u0394";
-    // final static public String PRIME = "\u00b4";
-    final static public String PRIME = "'";
-    final static public String MICRO = "\u00b5";
-    final static public String TIMES = "\u00d7";
-    final static public String ASYMP = "\u2248";
-    final static public String PROP = "\u221D";
-    final static public String RADIC = "\u221A";
-
-    final static public String PLUSMINUS = "\u00b1";
-    final static public String NOTEQUAL = "\u2260";
-    final static public String LESSEQUAL = "\u2264";
-    final static public String GREATEREQUAL = "\u2265";
-    final static public String PION = "\u03C0";
-    final static public String SIGMA = "\u03A3";
-    final static public String TAU = "\u03C4";
-    final static public String XI = "\u039E";
-    final static public String OMEGA = "\u03A9";
-    final static public String MU = "\u03BC";
-    
-    final static public String RARROW = "\u279D"; // right arrow
-    final static public String DOT = "\u00b7"; // middle dot
-
-
-    /**
-     * Use the unicode overline diacritical mark to place an overline over the preceeding character
-     * 
-     */
-    final static public String OVERLINE = "\u0305";
-    // superscript plus and minus
-    final static public String SUPPLUS = "\u207A";
-    final static public String SUPMINUS = "\u207B";
-    
-
-    /**
-     * Returns eta with respect to z = 0.
-     * @param z double z coordinate
-     * @param rho double eta coordinate
-     * @return double eta
-     */
-    public static double etaAbs(double z, double rho) {
-        double zrho = z / rho;
-        return Math.log(zrho + Math.sqrt(zrho * zrho + 1.));
-    }
-
-    public static double tanLambda(double eta)
-    {
-        double e = Math.exp(eta);
-        return 0.5 * (e-1./e);
-    }
-
-    public static double lambda(double eta)
-    {
-        double e = Math.exp(eta);
-        return Math.atan(0.5 * (e-1./e));
-    }
-
-    public static double getPFromPttL(double pT, double tL)
-    {
-        return Math.abs(pT / Math.cos(Math.atan(tL)));
-    }
-
-    public static double getPtFromPtL(double p, double tL)
-    {
-        return Math.abs(p * Math.cos(Math.atan(tL)));
-    }
-
-    /**
-     * Force phi into range [0,360) degrees.
-     * @param phi angle in degrees
-     * @return equivalent angle in range [0,360) degrees
-     */
-    public static double nearestPhiDegrees(double phi)
-    {
-        while(phi >= 360.)
-        {
-            phi -= 360;
-        }
-        while(phi < 0.)
-        {
-            phi += 360;
-        }
-        return phi;
-    }
-
-    /**
-     * Force phi into range [0,2 pi) radians.
-     * @param phi angle in radians
-     * @return equivalent angle in range [0,2 pi) radians
-     */
-    public static double nearestPhiRadians(double phi)
-    {
-        while(phi >= TWO_PI)
-        {
-            phi -= TWO_PI;
-        }
-        while(phi<0.)
-        {
-            phi += TWO_PI;
-        }
-        return phi;
-    }
-
-    /**
-     * Force phi into range [phiMid-180,phiMid+360) degrees.
-     * @param phi angle in degrees
-     * @param phiMid mid-point of required phi range
-     * @return equivalent angle in range [phiMid-180,phiMid+360) degrees
-     */
-    public static double nearestPhiDegrees(double phi, double phiMid)
-    {
-        while(phi-phiMid >= 180.)
-        {
-            phi -= 360;
-        }
-        while(phi-phiMid < -180.)
-        {
-            phi += 360;
-        }
-        return phi;
-    }
-
-    /**
-     * Force phi into range [phiMid-pi,phiMid+pi) radians.
-     * @param phi angle in degrees
-     * @param phiMid phiMid mid-point of required phi range
-     * @return equivalent angle in range [phiMid-pi,phiMid+pi) radians
-     */
-    public static double nearestPhiRadians(double phi, double phiMid)
-    {
-        while(phi - phiMid >= Math.PI)
-        {
-            phi -= TWO_PI;
-        }
-        while(phi - phiMid < -Math.PI)
-        {
-            phi += TWO_PI;
-        }
-        return phi;
-    }
-
-    public static double[] splitLineIntoPieces(double[] input, int numPieces)
-    {
-        if(input.length != 2)
-        {
-            return input;
-        }
-        double[] output = new double[numPieces + 1];
-        for(int p = 0; p < numPieces + 1; p++)
-        {
-            output[p] = input[0] +
-            (input[1] - input[0]) * (double) p / (double) numPieces;
-        }
-        return output;
-    }
-
-/**
- * "Stretches" the values in the input array over a longer array.
- * A number numPieces[i] of equally spaced values between input[i] and input[i+1]
- * are put into the output array. So the numPieces array must have the same length
- * as the input array, and the length of the output array is the sum of the
- * elements of numPieces. For example:
- *  input = {0.0, 1.0, 5.0}   numPieces = {2, 4, 1}
- *    output = {0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0}
- * The output array must already exist and have the correct number of entries,
- * otherwise this method will do nothin.
- * Only used by ATGCData.getYXUser().
- * @param input array to stretch
- * @param output stretched array
- * @param numPieces number of output elements corresponding to each input element
- */
-    public static void splitArrayIntoPieces(double[] input, double[] output, int[] numPieces)
-    {
-    	// Previously had "output = (double[]) input.clone();" but this is not
-    	// passed back to the calling code so no point.
-        if(input.length != numPieces.length) return;
-        
-        int totalNumPieces = 0;
-        for (int num : numPieces) totalNumPieces += num;
-        if(totalNumPieces != output.length) return;
-
-        int index = 0;
-        for(int i = 0; i < input.length; i++) {
-            int nextI = (i + 1) % input.length; // "loop back" to start of input
-            double start = input[i];
-            double end = input[nextI];
-            for(int p = 0; p < numPieces[i]; p++)
-            {
-                output[index++] = start +
-                (end - start) * (double) p / (double) numPieces[i];
-            }
-        }
-    }
-
-    /**
-     * Calculate angle between two 3-vectors represented by Point2D.Double
-     * objects.
-     * @param p1
-     * @param p2
-     * @return angle [radians]
-     */
-    public static double getAngle(Point2D.Double p1, Point2D.Double p2)
-    {
-        double dx = p2.x - p1.x;
-        double dy = p2.y - p1.y;
-        return Math.atan2(dy, dx);
-    }
-
-    public static Point2D.Double intersectionPoint(
-            Point2D.Double p1, Point2D.Double p2, Point2D.Double p3, Point2D.Double p4)
-    {
-
-        double u = ((p4.x-p3.x)*(p1.y-p3.y)-(p4.y-p3.y)*(p1.x-p3.x)) /
-        ((p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y));
-        return new Point2D.Double(p1.x+u*(p2.x-p1.x), p1.y+u*(p2.y-p1.y));
-    }
-
-    public static Point2D.Double intersectionPoint(
-            Point2D.Double p1, AVector v1, Point2D.Double p3, AVector v3)
-    {
-        Point2D.Double p2 = new Point2D.Double(p1.x+v1.dx, p1.y+v1.dy);
-        Point2D.Double p4 = new Point2D.Double(p3.x+v3.dx, p3.y+v3.dy);
-
-        return intersectionPoint(p1, p2, p3, p4);
-    }
-
-
-    public static double[] xBox(double x,double dx)
-    {
-        return new double[] {x-dx,x-dx,x+dx,x+dx};
-    }
-
-    public static double[] yBox(double y,double dy)
-    {
-        return new double[] {y-dy,y+dy,y+dy,y-dy};
-    }
-
-    /**
-     * Returns the sign of a double value.
-     * Unlike Math.signum() it never returns zero.
-	 */
-    public static double getSign(double value) {
-        return (value > 0) ? 1.0 : -1.0;
-    }
-
-    /**
-     * Returns the sign of a int value.
-     * Unlike Math.signum() it never returns zero.
-     * 
-     */
-    public static int getSign(int value) {
-        return (value > 0) ? 1 : -1;
-    }
-
-    public static float maxAbsInArray(float[] floatArray)
-    {
-        float maxAbs = Math.abs(floatArray[0]);
-        for(int i=1; i<floatArray.length; ++i)
-        {
-            maxAbs = Math.max(Math.abs(floatArray[i]), maxAbs);
-        }
-        return maxAbs;
-    }
-
-    public static float minAbsInArray(float[] floatArray)
-    {
-        float minAbs = Math.abs(floatArray[0]);
-        for(int i=1; i<floatArray.length; ++i)
-        {
-            minAbs = Math.min(Math.abs(floatArray[i]), minAbs);
-        }
-        return minAbs;
-    }
-    
-    public static float minNonZeroAbsInArray(float[] floatArray)
-    {
-        float minAbs = Math.abs(floatArray[0]);
-        for(int i=1; i<floatArray.length; ++i)
-        {
-            if(minAbs == 0.0f && floatArray[i] != 0.0f)
-                minAbs = floatArray[i];
-            else
-                minAbs = Math.min(Math.abs(floatArray[i]), minAbs);
-        }
-        return minAbs;
-    }
-    
-    public static float deltaR(float phi1, float eta1, float phi2, float eta2){
-       
-        float deta=Math.abs(eta1-eta2);
-        float dphi=Math.abs(phi1-phi2);
-        if(dphi>Math.PI)
-            dphi=(float)(Math.PI*2.0f)-dphi;
-        float dr=(float)Math.sqrt(deta*deta+dphi*dphi);
-        return dr;
-    }
-
-} // class AMath -------------------------------------------------------------
diff --git a/graphics/AtlantisJava/src/atlantis/utils/ANewIdHelper.java b/graphics/AtlantisJava/src/atlantis/utils/ANewIdHelper.java
deleted file mode 100644
index 5de597b66846..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/ANewIdHelper.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package atlantis.utils;
-
-import java.util.HashMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * Helper tool for decoding compact readout channel identifiers.
- *
- * @author Eric Jansen
- */
-public final class ANewIdHelper {
-    
-    /** Singleton instance. */
-    private static ANewIdHelper instance = null;
-
-    /** Link to ATLAS dictionary. */
-    private AIdDictionary atlas = null;
-    
-    /** Collection of named (sub-)dictionaries. */
-    private HashMap<String, AIdDictionary> dictionaries = null;
-
-    /** Logging facility. */
-    public static ALogger logger = ALogger.getLogger(ANewIdHelper.class);
-    
-    /**
-     * Static construct method, initializes ANewIdHelper from XML dictionaries.
-     * @param rootNode XML root node of type IdDict.
-     */
-    public synchronized static void construct(Node rootNode) throws AAtlantisException {
-        if (instance == null) instance = new ANewIdHelper();
-        try {
-            instance.initialize(rootNode);
-        } catch (AAtlantisException e) {
-            throw new AAtlantisException("Error initializing ANewIdHelper: " + e.getMessage());
-            
-        }
-    }
-
-    /**
-     * Obtain instance of ANewIdHelper.
-     * @return ANewIdHelper instance.
-     */
-    public synchronized static ANewIdHelper instance() {
-        if (instance == null) {
-            throw new Error("Attempted to access ANewIdHelper instance before initialization.");
-        }
-        return instance;
-    }
-
-    /**
-     * Private constructor.
-     */
-    private ANewIdHelper() {};
-
-    /**
-     * Non-static, private initialization method.
-     * @param rootNode XML root node of type IdDict.
-     */
-    private void initialize(Node rootNode) throws AAtlantisException {
-        NodeList nodes = rootNode.getChildNodes();
-        for (int i=0; i<nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                if ("IdDictionary".equals(node.getNodeName())) {
-                    String name = node.getAttributes().getNamedItem("name").getNodeValue();
-                    try {
-                        if (dictionaries != null && dictionaries.containsKey(name)) {
-                            AIdDictionary dictionary = dictionaries.get(name);
-                            dictionary.initialize(node);
-                        } else {
-                            if (dictionaries == null) {
-                                dictionaries = new HashMap<String,AIdDictionary>();
-                            }
-                            dictionaries.put(name, new AIdDictionary(node));
-                        }
-                    } catch (AAtlantisException e) {
-                        logger.error("Exception occurred while initializing IdHelper:" + e.getMessage());
-                    }
-                }
-            }
-        }
-        
-        if (dictionaries.containsKey("ATLAS")) {
-            atlas = dictionaries.get("ATLAS");
-        } else {
-            throw new AAtlantisException("No 'ATLAS' dictionary found");
-        }
-    }
-
-    /**
-     * Check for presence of a named dictionary.
-     * @param dictName dictionary name.
-     * @return true if dictionary is present, false is not.
-     */
-    boolean hasDictionary(String dictName) {
-        return dictionaries.containsKey(dictName);
-    }
-    
-    /**
-     * Return pointer to an existing named dictionary.
-     * @param dictName dictionary name
-     * @return dictionary object
-     */
-    AIdDictionary getDictionary(String dictName) throws AAtlantisException {
-        if (dictionaries != null && dictionaries.containsKey(dictName)) {
-            return dictionaries.get(dictName);
-        } else {
-            throw new AAtlantisException("Dictionary " + dictName + " could not be found");
-        }
-    }
-    
-    /**
-     * Add a named dictionary to the idHelper.
-     * @param dictName dictionary name
-     * @param dict dictionary
-     */
-    void addDictionary(String dictName, AIdDictionary dict) {
-        if (dictionaries == null){
-            dictionaries = new HashMap<String,AIdDictionary>();
-        }
-        dictionaries.put(dictName, dict);
-    }
-    
-    /**
-     * Convert a compact identifier into a "/" delimited expanded identifier.
-     * @param id compact identifier
-     * @return expanded identifier, fields delimited by "/"
-     */
-    public String getFullIdentifier(long id) throws AAtlantisException {
-        return atlas.getFullIdentifier(id);
-    }
-    
-    /**
-     * Extract named field from a compact identifier.
-     * @param field identifier field name
-     * @param id compact identifier
-     * @return value of named field
-     */
-    public int get(String field, long id) throws AAtlantisException {
-        return atlas.get(field, id);
-    }
-    
-    /**
-     * Extract string value of a named field from a compact identifier. For 
-     * example:
-     *   get("stationName", id) = 49
-     *   getString("stationName", id) = "EIS"
-     * 
-     * @param field identifier field name
-     * @param id compact identifier
-     * @return string value of named field
-     */
-    public String getString(String field, long id) throws AAtlantisException {
-        return atlas.getString(field, id);
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/APoint.java b/graphics/AtlantisJava/src/atlantis/utils/APoint.java
deleted file mode 100755
index 38c9d1fd4adb..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/APoint.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package atlantis.utils;
-
-
-/**
- * Used by APolygon and AClipPolygon in order to perform clipping.
- */
-public class APoint {
-
-  public double x, y;
-
-  public APoint(APoint p) {
-    this.x=p.x;
-    this.y=p.y;
-  }
-
-  public APoint(double x, double y) {
-    this.x=x;
-    this.y=y;
-  }
-
-  public double dot_product(double[] normPoint) {
-    if(normPoint==null||normPoint.length!=3)
-      return 0.0;
-    else
-      return x*normPoint[0]+y*normPoint[1];
-  }
-
-  public APoint minus(APoint cgp) {
-    if(cgp==null)
-      return new APoint(this);
-    else
-      return new APoint(x-cgp.x, y-cgp.y);
-  }
-
-  public APoint plus(APoint cgp) {
-    if(cgp==null)
-      return new APoint(this);
-    else
-      return new APoint(x+cgp.x, y+cgp.y);
-  }
-
-  public void scalar_multiply(double d) {
-    x*=d;
-    y*=d;
-  }
-
-  public boolean inside(double[] normalizedVector, double distance) {
-    if(normalizedVector==null||normalizedVector.length!=3) return false;
-    double k=dot_product(normalizedVector)+distance;
-
-    return(k<=0);
-  }
-
-  public double calculate_tls(APoint secondPoint, APoint clipNode, double[] normalized) {
-    APoint dv1, dv2;
-
-    dv1=minus(clipNode);
-    dv2=secondPoint.minus(this);
-    return -(dv1.dot_product(normalized)/dv2.dot_product(normalized));
-  }
-
-  public APoint point_of_intersection(APoint second, double tls) {
-    if(second!=null) {
-      APoint v=second.minus(this);
-
-      if(v!=null) v.scalar_multiply(tls);
-      return plus(v);
-    } else
-      return null;
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/APolygon.java b/graphics/AtlantisJava/src/atlantis/utils/APolygon.java
deleted file mode 100755
index 9a0c4e33bc3f..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/APolygon.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package atlantis.utils;
-
-
-import java.util.Vector;
-import java.awt.geom.*;
-
-
-/**
- * Used in the process of clipping.
- */
-
-public class APolygon {
-  protected Vector nodes=new Vector(5, 10);
-
-  public APolygon() {}
-
-  public APolygon(double[] x, double[] y) {
-    for(int i=0; i<x.length; i++)
-      nodes.addElement(new APoint(x[i], y[i]));
-
-    if(getSignedArea()<0) {
-      Vector newNodes=new Vector(5, 10);
-
-      for(int i=nodes.size()-1; i>=0; i--)
-        newNodes.addElement(nodes.elementAt(i));
-      nodes=newNodes;
-    }
-  }
-
-  public void addPoint(double x, double y) {
-    nodes.addElement(new APoint(x, y));
-  }
-
-  public double getSignedArea() {
-    APoint p;
-    double[] x=new double[nodes.size()];
-    double[] y=new double[nodes.size()];
-
-    for(int i=0; i<nodes.size(); i++) {
-      p=(APoint)nodes.elementAt(i);
-      x[i]=p.x;
-      y[i]=p.y;
-    }
-
-    return getSignedArea(x, y);
-  }
-
-  // this function returns the ABSOLUT VALUE of the area
-  public double getArea() {
-    return Math.abs(getSignedArea());
-  }
-
-  public static double getSignedArea(double[] x, double[] y) {
-    if(x.length!=y.length)
-      throw new Error("x.length != y.length");
-    if(x.length==0) return 0;
-
-    double s=0;
-
-    for(int i=0; i<x.length-1; i++)
-      s+=x[i]*y[i+1]-x[i+1]*y[i];
-
-    s+=x[x.length-1]*y[0]-x[0]*y[x.length-1];
-    return s/2;
-  }
-
-  public static double getArea(double[] x, double[] y) {
-    return Math.abs(getSignedArea(x, y));
-  }
-
-  public static Point2D.Double getCenter(double[] x, double[] y, Point2D.Double p) {
-    if(x.length==0 || y.length==0) return null;
-    if(p==null) p=new Point2D.Double(0, 0);
-
-    double s=0, v;
-
-    for(int i=0; i<x.length-1; i++) {
-      v=x[i]*y[i+1]-x[i+1]*y[i];
-      s+=v;
-      p.x+=(x[i]+x[i+1])*v;
-      p.y+=(y[i]+y[i+1])*v;
-    }
-
-    v=x[x.length-1]*y[0]-x[0]*y[x.length-1];
-    s+=v;
-    p.x+=(x[x.length-1]+x[0])*v;
-    p.y+=(y[x.length-1]+y[0])*v;
-
-    double f=1/(6*s/2);
-
-    p.setLocation(p.x*f, p.y*f);
-    return p;
-  }
-
-  public static void scale(double[] x, double[] y, double factor) {
-    Point2D.Double center=APolygon.getCenter(x, y, null);
-
-    for(int i=0; i<x.length; i++) {
-      x[i]=(x[i]-center.x)*factor+center.x;
-      y[i]=(y[i]-center.y)*factor+center.y;
-    }
-  }
-
-  /*
-   public boolean isClockwise() {
-   if (getArea() < 0)
-   return true;
-   else
-   return false;
-   }
-   */
-
-  public APoint getNode(int index) {
-    if(index>=0&&index<nodes.size())
-      return(APoint)(nodes.elementAt(index));
-    else
-      return null;
-  }
-
-  public int nrNodes() {
-    return nodes.size();
-  }
-
-  public boolean clip(AClipPolygon clipPolygon) {
-    int i=0;
-    int limit=clipPolygon.nrNodes();
-
-    APoint node=null;
-    double[] normalized=new double[3];
-    double distance=0.0;
-
-    for(i=0; i<limit; i++) {
-      normalized=clipPolygon.get_normalized(i);
-      node=clipPolygon.getNode(i);
-      distance=clipPolygon.get_distance(i);
-      if(normalized!=null&&node!=null&& !Double.isNaN(distance))
-        s_h_clip_poly(normalized, node, distance);
-    }
-
-    return(nodes.size()>0);
-  }
-
-  public void s_h_clip_poly(double[] normalized, APoint node, double distance) {
-    int degree=nodes.size();
-    APoint s=null, p=null, q=null;
-    boolean s_inside, p_inside;
-    double tls=0.0;
-    Vector keptNodes=new Vector();
-
-    if(degree>0&&nodes.elementAt(degree-1) instanceof APoint)
-      s=(APoint)nodes.elementAt(degree-1);
-
-    for(int i=0; i<nodes.size(); i++) {
-      if(nodes.elementAt(i) instanceof APoint) {
-        p=(APoint)nodes.elementAt(i);
-        s_inside=s.inside(normalized, distance);
-        p_inside=p.inside(normalized, distance);
-        if(s_inside)
-          if(!p_inside) {
-            tls=s.calculate_tls(p, node, normalized);
-            q=s.point_of_intersection(p, tls);
-            keptNodes.addElement(q);
-          } else
-            keptNodes.addElement(p);
-        else if(p_inside) {
-          tls=s.calculate_tls(p, node, normalized);
-          q=s.point_of_intersection(p, tls);
-          keptNodes.addElement(q);
-          keptNodes.addElement(p);
-        }
-      }
-      s=p;
-    }
-    nodes=keptNodes;
-  }
-
-  public double[][] getPolygon() {
-    int nrPoints=nodes.size();
-    double[][] coord=new double[nrPoints][nrPoints];
-
-    if(nrPoints>0)
-      for(int i=0; i<nrPoints; i++) {
-        APoint aPoint=getNode(i);
-
-        if(aPoint!=null) {
-          coord[0][i]=aPoint.x;
-          coord[1][i]=aPoint.y;
-        }
-      }
-    return coord;
-  }
-
-  public double[] getX() {
-    int nrPoints=nodes.size();
-    double[] coord=new double[nrPoints];
-
-    if(nrPoints>0)
-      for(int i=0; i<nrPoints; i++) {
-        APoint aPoint=getNode(i);
-
-        if(aPoint!=null)
-          coord[i]=aPoint.x;
-      }
-    return coord;
-  }
-
-  public double[] getY() {
-    int nrPoints=nodes.size();
-    double[] coord=new double[nrPoints];
-
-    if(nrPoints>0)
-      for(int i=0; i<nrPoints; i++) {
-        APoint aPoint=getNode(i);
-
-        if(aPoint!=null)
-          coord[i]=aPoint.y;
-      }
-    return coord;
-  }
-
-  public String toString() {
-    StringBuilder s = new StringBuilder();
-    int limit=nodes.size();
-
-    s.append("x:{ ");
-    for(int i=0; i<limit; i++) {
-      s.append(((APoint)nodes.elementAt(i)).x);
-      s.append(" :: ");
-    }
-    s.append(" }\ny:{ ");
-    for(int i=0; i<limit; i++) {
-      s.append(((APoint)nodes.elementAt(i)).y);
-      s.append(" :: ");
-    }
-    return s.toString();
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AUtilities.java b/graphics/AtlantisJava/src/atlantis/utils/AUtilities.java
deleted file mode 100755
index 0c01e84f0994..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AUtilities.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package atlantis.utils;
-
-import java.io.FileNotFoundException;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.File;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.RenderingHints;
-import java.awt.event.MouseEvent;
-import java.awt.image.BufferedImage;
-import javax.swing.SwingUtilities;
-import javax.swing.ImageIcon;
-
-
-/**
- *
- * @author Gary Taylor, Zdenek Maxa
- */
-public class AUtilities
-{	
-	public static ALogger logger = ALogger.getLogger(AUtilities.class);
-
-    private static final String dateFormat = "yyyy-MM-dd-HH-mm-ss";
-
-
-    private AUtilities()
-    {
-    } // AUtilities() -------------------------------------------------------
-
-
-    /**
-     * Allow Ctrl+click as alternative to right-click so can use single-button
-     * mouse on the Mac computer
-     */
-    public static boolean isRightMouseButton(MouseEvent e)
-    {
-        return SwingUtilities.isRightMouseButton(e) ||
-            e.isControlDown();
-
-    } // isRightMouseButton() -----------------------------------------------
-
-    /**
-     * Returns string with current data and time formatted according to
-     * dateFomat attribute (currently: yyyy-MM-dd-HH-mm-ss)
-     * @return String
-     */
-    public static String getDateTimeString()
-    {
-        String r = null;
-        Date d = new Date(System.currentTimeMillis());
-        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
-        r = sdf.format(d);
-        return r;
-
-    } // getDateTimeString() ------------------------------------------------
-
-
-    /**
-     * Returns last directory and file name from fullPath which is assumed to be
-     * some path to a file. This method assumes it is used when a file is retrieved
-     * from a .jar file.
-     * @param fullPath
-     */
-    private static String getLastDirectoryAndFileName(String fullPath)
-    {
-    	// if running on Windows, Atlantis.fileSep is '\', but accessing a .jar
-    	// file uses '/' as file separator - so replace all '\' occurrences
-    	// '/' (troubles when running via webstart (from jar file (/ as file
-    	// separator) on windows (uses \ as file separator))
-		logger.debug("Trying to extract last directory and filename, input: " + fullPath);
-    	char[] charArray = fullPath.replaceAll("\\\\", "/").toCharArray();
-		int sepOccurence = 0; // file separator (e.g. '/') occurrence counter
-		int i;
-		for(i = fullPath.length() - 1; i > 0; i--)
-		{
-			// compare only to '/', even on Windows '\' was already replaced
-			// by '/'
-			if(charArray[i] == '/')
-			{
-				sepOccurence++;
-			}
-			if(sepOccurence == 2)
-			{
-				// i variable now holds second file separator occurrence from end
-				break;
-			}
-		}
-		
-		String relPath = null;
-		
-		if(sepOccurence == 0)
-		{
-		    logger.warn("No file separator found in the file path: " + fullPath);
-		    relPath = fullPath;
-		}
-        else if(i == 0)
-        {
-            logger.warn("The path looks like relative path already, using: " +
-                        fullPath);
-            relPath = fullPath;
-        }
-		else
-		{
-		    relPath = new String(charArray).substring(i + 1);
-		    logger.debug("Last directory and filename result: " + relPath);
-		}
-		
-		return relPath;
-
-    } // getLastDirectoryAndFileName() --------------------------------------
-    
-    
-    
-    /**
-     * Reads either locally (full path in fileName) or from atlantis.jar. Using
-     * this method for reading files makes Atlantis running either with runtime
-     * distribution directories (e.g. img, geometry, etc) or from .jar file
-     * (everything including runtime directories packed in a jar file)
-     * transparent. Having everything in .jar files is a requirement for 
-     * running as Java WebStart.
-     * This method is used for files (text, xml) as InputStream.   
-     * @param fileName - full path
-     */    
-    public static InputStream getFileAsStream(String fileName) throws AAtlantisException
-    {
-    	InputStream is = null;
-    	
-    	if(fileName == null || "".equals(fileName))
-    	{
-    		String m = "Input parameter fileName is null or empty";
-    		logger.debug(m);
-    		throw new AAtlantisException(m);
-    	}
-    	
-    	try
-    	{
-    		logger.debug("Trying to access file: " + fileName + " ...");
-    		is = new FileInputStream(fileName);
-    		logger.debug("Reading " + fileName + " successful.");    		
-    	}
-    	catch(FileNotFoundException fnfe)
-    	{
-    		logger.warn(fileName + " not found, trying atlantis.jar ... ");
-    		
-    		// need to get file name and the last directory from the full path    		
-    		String relPath = getLastDirectoryAndFileName(fileName);
-    		    		    		
-    		ClassLoader cl = AUtilities.class.getClassLoader();
-    		is = cl.getResourceAsStream(relPath);
-    		if(is == null)
-    		{
-    			String m = fileName + " doesn't exist, reading " + relPath + 
-    			           " from atlantis.jar failed.";
-    			logger.error(m);
-    			throw new AAtlantisException(m);
-    		}
-    		logger.debug(fileName + " reading from atlantis.jar successful.");
-    	}
-    	
-    	return is;
-    	
-    } // getFileAsStream() --------------------------------------------------
-    
-    
-    
-    /**
-     * Reads either locally (full path in fileName) or from atlantis.jar. Using
-     * this method for reading files makes Atlantis running either with runtime
-     * distribution directories (e.g. img, geometry, etc) or from .jar file
-     * (everything including runtime directories packed in a jar file)
-     * transparent. Having everything in .jar files is a requirement for 
-     * running as Java WebStart.
-     * This method is used for reading images.   
-     * @param fileName - full path
-     */
-    public static ImageIcon getFileAsImageIcon(String fileName)
-    {
-    	
-    	ImageIcon ii = null;
-    	
-    	if(fileName == null || "".equals(fileName))
-    	{
-    		String m = "Input parameter fileName is null or empty, can't get ImageIcon";
-    		logger.debug(m);
-    		return null;
-    	}
-    	
-    	File test = new File(fileName);
-    	if(test.exists() && test.canRead())
-    	{
-    		ii = new ImageIcon(fileName);
-    		logger.debug("Reading " + fileName + " successful.");
-    	}
-    	else
-    	{
-    		logger.debug(fileName + " not found, trying atlantis.jar ... ");
-    		
-    		// need to get file name and the last directory from the full path
-    		String relPath = getLastDirectoryAndFileName(fileName);    		
-        
-    		ClassLoader cl = AUtilities.class.getClassLoader();
-    		try {
-        		ii = new ImageIcon(cl.getResource(relPath));
-    			logger.debug(fileName + " reading from atlantis.jar successful.");
-    		}
-    		catch (Throwable e) {
-    			String m = "Failed to read "+ fileName + " from " + relPath + 
- 			           " in atlantis.jar";
-    			logger.debug(m);
-    		}
-    	}
-    	
-    	return ii;
-    	
-    } // getFileAsImageIcon() -----------------------------------------------
-    
-    // Function used to rescale an Image and return an ImageIcon
-	//
-   public static ImageIcon scale(Image src, double scale, boolean antiAlias) {
-        int w = (int)(scale*src.getWidth(null));
-        int h = (int)(scale*src.getHeight(null));
-        int type = BufferedImage.TYPE_INT_ARGB;
-        BufferedImage dst = new BufferedImage(w, h, type);
-        Graphics2D g2 = dst.createGraphics();
-        if(antiAlias) // Render png High Quality when AntiAliasing selected
-        {
-        	g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
-        	g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-        }
-        else // else render it for speed.
-        {
-        	g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
-        	g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
-        }
-        g2.drawImage(src, 0, 0, w, h, null);
-        g2.dispose();
-        return new ImageIcon(dst);
-    } // ------- scale()
-
-} // class AUtilities =======================================================
diff --git a/graphics/AtlantisJava/src/atlantis/utils/AVector.java b/graphics/AtlantisJava/src/atlantis/utils/AVector.java
deleted file mode 100755
index 2d3f7b8c9769..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/AVector.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package atlantis.utils;
-
-
-import java.awt.geom.Point2D;
-
-
-/**
- * Provides basic 2D vector operations.
- */
-
-public class AVector {
-
-  public double dx, dy;
-
-  public AVector(double dx, double dy) {
-    set(dx, dy);
-  }
-
-  public AVector(double x1, double y1, double x2, double y2) {
-    set(x2-x1, y2-y1);
-  }
-
-  public AVector(Point2D p1, Point2D p2) {
-    this(p1.getX(), p1.getY(), p2.getX(), p2.getY());
-  }
-
-  public AVector set(double dx, double dy) {
-    this.dx=dx;
-    this.dy=dy;
-    return this;
-  }
-
-  public AVector getUnitary() {
-    double r=Math.sqrt(dx*dx+dy*dy);
-
-    return new AVector(dx/r, dy/r);
-  }
-
-  public AVector makeUnitary() {
-    double r=Math.sqrt(dx*dx+dy*dy);
-
-    dx/=r;
-    dy/=r;
-    return this;
-  }
-
-  public AVector rotate(double alpha) {
-    double sin=Math.sin(alpha);
-    double cos=Math.cos(alpha);
-    double dx_prime=dx*cos-dy*sin;
-    double dy_prime=dx*sin+dy*cos;
-
-    dx=dx_prime;
-    dy=dy_prime;
-    return this;
-  }
-
-  public AVector scale(double factor) {
-    dx*=factor;
-    dy*=factor;
-    return this;
-  }
-
-  public AVector invert() {
-    dx*=-1;
-    dy*=-1;
-    return this;
-  }
-
-  public double modulus() {
-    return Math.sqrt(dx*dx+dy*dy);
-  }
-
-  public AVector add(AVector v) {
-    dx+=v.dx;
-    dy+=v.dy;
-    return this;
-  }
-
-  public String toString() {
-    return "AVector[dx="+dx+", dy="+dy+"]";
-  }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/package.html b/graphics/AtlantisJava/src/atlantis/utils/package.html
deleted file mode 100644
index ba4e3fa430d3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<head></head>
-<body>
-<p>Helper classes.</p>
-</body>
-</html>
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AArrayParser.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AArrayParser.java
deleted file mode 100755
index 027bd7e0f74d..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AArrayParser.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package atlantis.utils.xml;
-
-/**
- * The superclass of Integer and Float array parsers used e.g. in parseing
- * arrays stored in xml files
- */
-
-public abstract class AArrayParser
-{
-    protected int count;
-    protected int state;
-    protected int sign;
-    protected boolean finished;
-
-    protected static final char space = ' ';
-    protected static final char cariage = '\n';
-    protected static final char zero = '0';
-    protected static final char nine = '9';
-    protected static final char minus = '-';
-    protected static final char plus = '+';
-    protected static final char dot = '.';
-    protected static final char smallExp = 'e';
-    protected static final char bigExp = 'E';
-
-    public abstract void parse(char[] ch, int start, int end);
-
-    public abstract Object getArray();
-
-    /**
-     * @return Returns the count.
-     */
-    public int getCount()
-    {
-        return count;
-    }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AFloatArrayParser.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AFloatArrayParser.java
deleted file mode 100755
index 413eb6ccc877..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AFloatArrayParser.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package atlantis.utils.xml;
-
-/**
- * The parser used to generate arrays of float values.
- */
-
-public class AFloatArrayParser extends AArrayParser
-{
-    private final static int SKIPPING_BLANKS = 0;
-    private final static int CHECKING_MINUS = 1;
-    private final static int CHECKING_INF1 = 2;
-    private final static int CHECKING_INF2 = 3;
-    private final static int CHECKING_INF3 = 4;
-    private final static int READING_INT = 5;
-    private final static int CHECKING_DOT = 6;
-    private final static int READING_FLOAT = 7;
-    private final static int CHECKING_EXP = 8;
-    private final static int CHECKING_EXP_SIGN = 9;
-    private final static int READING_EXP = 10;
-    private final static int FINISHING = 11;
-    private final static int IGNORE = 12;
-
-    private static double[] powers = new double[200 * 2];
-    private float[] array;
-    private float number = 0;
-    private int floatDigits = 0;
-    private int exp = 0;
-    private int expSign = 1;
-    private boolean isInf = false;
-
-    static
-    {
-        for(int i = 0; i < 2 * 200; i++)
-            powers[i] = Math.pow(10, i - 200);
-    }
-
-    public AFloatArrayParser(int size)
-    {
-        array = new float[size];
-        count = 0;
-        if(size == 0)
-            state = IGNORE;
-        else
-            state = SKIPPING_BLANKS;
-        sign = 1;
-    }
-
-    public void parse(char[] ch, int start, int length)
-    {
-        if(state == IGNORE)
-        {
-            finished = true;
-            return;
-        }
-
-        int end = start + length;
-        nextChar: for(int i = start; i < end; i++)
-        {
-            char c = ch[i];
-            thisChar: while(true)
-            {
-
-                switch(state)
-                {
-
-                    case SKIPPING_BLANKS:
-                        if(c == space || c == cariage)
-                            continue nextChar;
-                        else
-                        {
-                            finished = false;
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_MINUS:
-                        if(c == minus)
-                        {
-                            sign = -1;
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_INF1:
-                        if(c == 'i' || c == 'I')
-                        {
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state = READING_INT;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_INF2:
-                        if(c == 'n' || c == 'N')
-                        {
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state = FINISHING;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_INF3:
-                        if(c == 'f' || c == 'F')
-                        {
-                            state = FINISHING;
-                            isInf = true;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state = FINISHING;
-                            continue thisChar;
-                        }
-
-                    case READING_INT:
-                        if(c >= zero && c <= nine)
-                        {
-                            number = number * 10 + c - zero;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_DOT:
-                        if(c == dot)
-                        {
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case READING_FLOAT:
-                        if(c >= zero && c <= nine)
-                        {
-                            number = number * 10 + c - zero;
-                            floatDigits++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_EXP:
-                        if(c == smallExp || c == bigExp)
-                        {
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state = FINISHING;
-                            continue thisChar;
-                        }
-
-                    case CHECKING_EXP_SIGN:
-                        if(c == minus)
-                        {
-                            expSign = -1;
-                            state++;
-                            continue nextChar;
-                        }
-                        if(c == plus)
-                        {
-                            expSign = +1;
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case READING_EXP:
-                        if(c >= zero && c <= nine)
-                        {
-                            exp = exp * 10 + c - zero;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case FINISHING:
-                        if(c == space || c == cariage)
-                        {
-                            try
-                            {
-                                if(isInf)
-                                {
-                                    if(sign == 1)
-                                        array[count] = Float.POSITIVE_INFINITY;
-                                    else
-                                        array[count] = Float.NEGATIVE_INFINITY;
-                                    isInf = false;
-                                }
-                                else
-                                    array[count] = (float) (number * sign * powers[expSign * exp - floatDigits + 200]);
-                            }
-                            catch(IndexOutOfBoundsException e)
-                            {
-                                // the real number of data is more than the 
-                                // expected number of data
-                                throw new IndexOutOfBoundsException("more");
-                            }
-                            state = SKIPPING_BLANKS;
-                            sign = 1;
-                            exp = 0;
-                            expSign = 1;
-                            floatDigits = 0;
-                            number = 0;
-                            count++;
-                            finished = true;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            throw new NumberFormatException("" + c);
-                        }
-                }
-            } // while true
-        } // for
-    }
-
-    public Object getArray()
-    {
-        if(!finished)
-            array[count] = (float) (number * sign * powers[expSign * exp
-                    - floatDigits + 200]);
-        return array;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AIntArrayParser.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AIntArrayParser.java
deleted file mode 100755
index 74ed17a767f3..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AIntArrayParser.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package atlantis.utils.xml;
-
-/**
- * The parser used to generate arrays of integer values.
- */
-
-public class AIntArrayParser extends AArrayParser
-{
-    private final static int SKIPPING_BLANKS = 0;
-    private final static int CHECKING_MINUS = 1;
-    private final static int READING_INT = 2;
-    private final static int FINISHING = 3;
-    private final static int IGNORE = 4;
-
-    private int[] array;
-    private long number = 0;
-
-    public AIntArrayParser(int size)
-    {
-        array = new int[size];
-        count = 0;
-        if(size == 0)
-            state = IGNORE;
-        else
-            state = SKIPPING_BLANKS;
-        sign = 1;
-    }
-
-    public void parse(char[] ch, int start, int length)
-    {
-        if(state == IGNORE)
-        {
-            finished = true;
-            return;
-        }
-
-        int end = start + length;
-        nextChar: for(int i = start; i < end; i++)
-        {
-            char c = ch[i];
-            thisChar: while(true)
-            {
-                switch(state)
-                {
-                    case READING_INT:
-                        if(c >= zero && c <= nine)
-                        {
-                            number = number * 10 + c - zero;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-                    case SKIPPING_BLANKS:
-                        if(c == space || c == cariage)
-                            continue nextChar;
-                        else
-                        {
-                            finished = false;
-                            state++;
-                            continue thisChar;
-                        }
-                    case CHECKING_MINUS:
-                        if(c == minus)
-                        {
-                            sign = -1;
-                            state++;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-                    case FINISHING:
-                        if(c == space || c == cariage)
-                        {
-                            try
-                            {
-                                // This is a hack to make 64-bit identifiers work without 
-                                // using long internally. It works because for most 
-                                // identifiers only the most significant 32 bits are 
-                                // actually used. Proper support for 64-bit integer 
-                                // identifiers needs to be implemented asap (#618).
-                                // -- EJ 09/2012
-                                if (number > Integer.MAX_VALUE && number >> 32 != 0) {
-                                    number = number >> 32;
-                                }
-                                array[count] = (int)number * sign;
-                            }
-                            catch(IndexOutOfBoundsException e)
-                            {
-                                // the real number of data is more than the 
-                                // expected number of data
-                                throw new IndexOutOfBoundsException("more");
-                            }
-                            number = 0;
-                            count++;
-                            sign = 1;
-                            state = SKIPPING_BLANKS;
-                            finished = true;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            throw new NumberFormatException("" + c);
-                        }
-                }
-            } // while true
-        } // for
-    }
-
-    public Object getArray()
-    {
-        if(!finished) {
-            if (number > Integer.MAX_VALUE) {
-                number = number >> 32;
-            }
-            array[count] = (int)number * sign;
-        }
-        return array;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AStringArrayParser.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AStringArrayParser.java
deleted file mode 100755
index 1029bbb4a6c6..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AStringArrayParser.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package atlantis.utils.xml;
-
-/**
- * The parser used to generate arrays of integer values.
- */
-
-public class AStringArrayParser extends AArrayParser
-{
-    private final static int SKIPPING_BLANKS = 0;
-    private final static int READING_STRING = 1;
-    private final static int FINISHING = 2;
-    private final static int IGNORE = 3;
-
-    StringBuffer buffer;
-    private String[] array;
-
-    public AStringArrayParser(int size)
-    {
-        array = new String[size];
-        buffer = new StringBuffer(20);
-        count = 0;
-        if(size == 0)
-            state = IGNORE;
-        else
-            state = SKIPPING_BLANKS;
-    }
-
-    public void parse(char[] ch, int start, int length)
-    {
-        if(state == IGNORE)
-        {
-            finished = true;
-            return;
-        }
-
-        int end = start + length;
-        nextChar: for(int i = start; i < end; i++)
-        {
-            char c = ch[i];
-            thisChar: while(true)
-            {
-
-                switch(state)
-                {
-
-                    case READING_STRING:
-                        if(!(c == space || c == cariage))
-                        {
-                            buffer.append(c);
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case SKIPPING_BLANKS:
-                        if(c == space || c == cariage)
-                            continue nextChar;
-                        else
-                        {
-                            finished = false;
-                            state++;
-                            continue thisChar;
-                        }
-
-                    case FINISHING:
-                        if(c == space || c == cariage)
-                        {
-                            try
-                            {
-                                array[count++] = new String(buffer);
-                            }
-                            catch(IndexOutOfBoundsException e)
-                            {
-                                // the real number of data is more than the 
-                                // expected number of data
-                                throw new IndexOutOfBoundsException("more");
-                            }
-
-                            buffer.setLength(0);
-                            state = SKIPPING_BLANKS;
-                            finished = true;
-                            continue nextChar;
-                        }
-                        else
-                        {
-                            throw new NumberFormatException("" + c);
-                        }
-                }
-            } // while true
-        } // for
-    }
-
-    public Object getArray()
-    {
-        if(!finished && array.length > 0)
-            array[count] = new String(buffer);
-        return array;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLEntityResolver.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLEntityResolver.java
deleted file mode 100644
index 0b7a7274a483..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLEntityResolver.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package atlantis.utils.xml;
-
-import atlantis.utils.AAtlantisException;
-import atlantis.utils.ALogger;
-import atlantis.utils.AUtilities;
-import java.io.IOException;
-import java.io.InputStream;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * Entity resolver, used for relaying XML file includes to AUtilities. 
- * AUtilities.getFileAsStream() handles including files that are located in 
- * the webstart jar file.
- *
- * @author Eric Jansen
- */
-public class AXMLEntityResolver implements EntityResolver {
-
-    public static ALogger logger = ALogger.getLogger(AXMLEntityResolver.class);
-        
-    @Override
-    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
-        
-        InputStream input = null;
-        try {
-            if (systemId.startsWith("file://")) {
-                systemId = systemId.substring(7);
-            }
-            input = AUtilities.getFileAsStream(systemId);
-        } catch (AAtlantisException e) {
-
-            logger.error("Could not resolve external entity"
-                    +" '"+systemId+"': " + e.getMessage());
-        }
-        
-        return new InputSource(input);
-    }    
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLErrorHandler.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLErrorHandler.java
deleted file mode 100755
index fddab8ec5dbd..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLErrorHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package atlantis.utils.xml;
-
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXParseException;
-
-import atlantis.utils.ALogger;
-
-/**
- * Used in the XML processing code to catch and store the possible exceptions and errors.
- */
-public class AXMLErrorHandler implements ErrorHandler {
-  
-  //the logger
-  private final ALogger logger =  ALogger.getLogger(AXMLErrorHandler.class);
-  /**
-   * Thee different error states encountered in XML parsing 
-   */
-  public enum ErrorState {
-
-    NO_ERROR,         // no error
-    IGNORED_DATA,     // the given data will be ignored
-    UNKNOWN_TAG,      // unknown tag
-    INVALID_DATA,     // the given data is not valid (e.g. string instead of int) 
-    OTHER_ERROR,      // some other error
-    FATAL_ERROR       // some fatal error - event has to be aborted
-  }
-  
-  //Store the current error state
-  private ErrorState errorState = ErrorState.NO_ERROR;
-  //Store the exception causing  the error
-  private Throwable cause = null;
-  
-  /**
-   * @return the current error state of the parser
-   */
-  public ErrorState getErrorState() {
-    return errorState;
-  }
-  
-  /**
-   * @return the cause of the last error
-   */
-  public Throwable getErrorCause(){
-    return cause;
-  }
-
-  /**
-   * Set the error state of the parser
-   * @param errorState The errorState to set.
-   * @param cause the cause of the error
-   */
-  public void setError(ErrorState errorState, Throwable cause) {
-    
-    //check that the user had actually given a cause for all errors
-    if (cause == null && (errorState != ErrorState.NO_ERROR ))
-      throw new IllegalArgumentException("Cause can not be NULL"); 
-    
-    this.errorState = errorState;
-    
-    //force cause null for NO_ERROR
-    if (errorState == ErrorState.NO_ERROR) 
-      this.cause = null;
-    else 
-      this.cause = cause;
-  }
-
-  /**
-   * Handles all errors occurding during parsing
-   * @param exception the SAXParseException causing the error
-   */
-  public void error(SAXParseException exception) {
-
-    //Only keep the first error, ignore subsequents
-    if ( getErrorState() != ErrorState.NO_ERROR ) return;
-
-    //Decode error from exception message (is there no better way?!
-    String errorMessage = exception.getMessage();
-    
-    //Check for undeclared elements
-    if ( errorMessage.startsWith("Element type") &&
-         errorMessage.indexOf("must be declared") >= 0) {
-      // an undeclared element is found in event file
-      // errorMessage - Element type "elementName" must be declared.
-      setError(ErrorState.UNKNOWN_TAG,exception);
-      return;
-      
-    } else if (errorMessage.startsWith("The content of element type") &&
-               errorMessage.indexOf("must match") >= 0) {
-      /* errorMessage - The content of element type "elementName" must
-      match ... -
-      this error will occur if any undeclared element is found.
-       */
-      setError(ErrorState.INVALID_DATA,exception);
-      return;
-    } else {
-      // an untreated error (e.g. undeclared attributes, etc.)
-      // supposed to be corrected by modifying event.dtd or retrievers
-      logger.error("Parsing XML in line " + exception.getLineNumber() + ": " + errorMessage);
-      setError(ErrorState.OTHER_ERROR,exception);
-      return;
-    }
-
-  }
-
-  /**
-   * Handle warning exceptions
-   * @param exception the SAX exception
-   */
-  public void warning(SAXParseException exception) {
-    //Write a warning output, otherwise ignore
-    logger.warn("Parsing XML at position " + exception.getLineNumber() + ", " + exception.getColumnNumber() + " :: " + exception.getMessage());
-  }
-  
-  /**
-   * Handle fatal exceptions
-   * @param exception the SAX exception
-   */
-  public void fatalError(SAXParseException exception) {
-      //Only fatal exceptions are handled by global exception handler
-      String m = "Fatal error while parsing XML, line: " +
-                 exception.getLineNumber() + " column: " +
-                 exception.getColumnNumber() + " reason: " +
-                 exception.getMessage();
-      logger.fatal(m);
-      System.exit(1);
-  }
-}
diff --git a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLUtils.java b/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLUtils.java
deleted file mode 100755
index c745a4766903..000000000000
--- a/graphics/AtlantisJava/src/atlantis/utils/xml/AXMLUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package atlantis.utils.xml;
-
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-
-/**
- * Provides some basic XML utilities which are not present in the XML library.
- */
-public class AXMLUtils
-{
-    public static Node getChild(Node node, String name)
-    {
-        NodeList childs = node.getChildNodes();
-
-        for (int i = 0; i < childs.getLength(); i++)
-        {
-            Node child = childs.item(i);
-
-            if (child.getNodeType() == Node.ELEMENT_NODE)
-            {
-                if (child.getNodeName().equals(name))
-                    return child;
-            }
-        }
-        return null;
-    }
-
-    public static String tryAttribut(NamedNodeMap attributes, String attName)
-    {
-        Node node = attributes.getNamedItem(attName);
-
-        return (node != null) ? node.getNodeValue() : null;
-    }
-
-}
diff --git a/graphics/AtlantisJava/src/overview.html b/graphics/AtlantisJava/src/overview.html
deleted file mode 100644
index ebe0e3f52e9b..000000000000
--- a/graphics/AtlantisJava/src/overview.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-<head></head>
-<body>
-
-<p>Atlantis is an event display for the ATLAS experiment at
-CERN's Large Hadron Collider.</p>
-
-<p>The primary goals of the program are the visual investigation and
-  the understanding of the physics of complete events. Secondary goals
-  are to help develop reconstruction and analysis algorithms, to
-  facilitate debugging during commisioning and to provided a tool for
-  creating pictures and animations for publications, presentations and
-  exhibitions.</p>
-
-<p>Atlantis is based on the ALEPH event display DALI.</p>
-
-<p>Atlantis is written entirely in Java. JiveXML (event converter) is
-  a C++ interface between Atlantis and the Athena ATLAS offline SW
-  framework.</p>
-
-<p>Atlantis event visualisation is a fast, interactive and intuitive
-  application allowing study of complete ATLAS events.</p>
-
-</body>
-</html>
diff --git a/graphics/AtlantisJava/test/events/emptyEvent.xml b/graphics/AtlantisJava/test/events/emptyEvent.xml
deleted file mode 100644
index 575abcaba0bf..000000000000
--- a/graphics/AtlantisJava/test/events/emptyEvent.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="JiveXML_event.xsl"?>
-<?ATLAS Release: "dummy"?>
-<!DOCTYPE Event SYSTEM "event.dtd">
-<Event version="dummy" runNumber="1" eventNumber="1" lumiBlock="1" dateTime="" eventProperty="">
-</Event>
diff --git a/graphics/AtlantisJava/test/events/muonCollections.xml b/graphics/AtlantisJava/test/events/muonCollections.xml
deleted file mode 100644
index c9281c94d4df..000000000000
--- a/graphics/AtlantisJava/test/events/muonCollections.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="JiveXML_event.xsl"?>
-<?ATLAS Release: "dummy"?>
-<!DOCTYPE Event SYSTEM "event.dtd">
-<Event version="dummy" runNumber="1" eventNumber="1" lumiBlock="1" dateTime="" eventProperty="">
-
-<!-- Test event with two muon track collections, ConvertedMBoyMuonSpectroOnlyTracks and ConvertedMBoyTracks,
-     each containing two tracks. Edited down from JiveXML_105200_190249.xml. -->
-
-<Track count="2" storeGateKey="ConvertedMBoyMuonSpectroOnlyTracks">
-
-<barcode>
-0 0 
-</barcode>
-<chi2>
-11.516 97.6254 
-</chi2>
-<cotTheta>
--0.769442 1.26983 
-</cotTheta>
-<covMatrix multiple="15">
-19219.9 -213.586 22.2079 -47.5008 0.526573 0.135968 0.532181 -0.384001 -0.00148101 0.00808431
--0.0402467 0.104992 0.000158801 -0.00114179 0.00470875 54908.6 11775 4453.41 -220.818 -39.2807
-1.26332 -73.45 -46.6243 0.226787 0.609096 -77.0102 42.0205 0.986568 -0.892189 6.4339
-
-</covMatrix>
-<d0>
-0 0 
-</d0>
-<driftSign multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 
-</driftSign>
-<hits multiple="36">
-2100232864 2100236992 2100241088 2100245216 2100249472 2100249504 2100253568 2100253600 2100257728 2100261824
-1730609632 1730613760 1730617856 1730621984 1730626336 1730626368 1730630432 1730630464 1730634592 1730638688
-1647284976 1647284336 1647286000 1647285364 1646731264 1646731296 1646739744 1646743840 1646747968 1646748000
-1646772976 1646772272 1646774000 1646773300 1680278368 1680282464 1680286592 1680295072 1680299168 1680303296
-1680315180 1680314384 1618215712 1618219840 1618219872 1618223968 1618228096 1618228128 2035453088 2035451984
-1802240896 1802245024 1802245056 1802249152 1802253280 1802257568 1802261664 1802261696 1802265824 1802269952
-1651803772 1651803200 1651769920 1651774016 1651778144 1651786592 1651790688 1651794816 1651823224 1651822616
-1651823644 1684836392 
-</hits>
-<id>
-0 1 
-</id>
-<isOutlier multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 1 1 1 0 1 1 0 0
-0 0 
-</isOutlier>
-<nPixHits>
-0 0 
-</nPixHits>
-<nSCTHits>
-0 0 
-</nSCTHits>
-<nTRTHits>
-0 0 
-</nTRTHits>
-<numDoF>
-32 19 
-</numDoF>
-<numHits>
-42 30 
-</numHits>
-<numPolyline>
-42 30 
-</numPolyline>
-<phi0>
--0.799777 2.98857 
-</phi0>
-<polylineX multiple="36">
-362.371 364.017 365.663 367.309 381.139 382.149 382.786 383.796 385.443 387.09
-415.16 416.809 418.457 420.106 433.955 434.965 435.605 436.614 438.264 439.914
-471.844 471.844 473.398 473.398 485.111 486.12 509.514 511.168 512.822 513.83
-519.096 519.096 520.65 520.65 646.788 648.447 650.105 674.583 676.242 677.902
-682.726 682.726 -477.38 -479.179 -480.655 -482.454 -484.254 -485.73 -578.526 -578.526
--594.877 -597.01 -598.693 -600.825 -602.958 -620.809 -622.98 -624.767 -626.938 -630.896
--683.109 -683.109 -690.955 -693.412 -695.868 -731.028 -733.561 -736.094 -744.69 -744.69
--746.92 -979.54 
-</polylineX>
-<polylineY multiple="36">
--372.719 -374.414 -376.108 -377.802 -392.037 -393.077 -393.732 -394.773 -396.468 -398.163
--427.056 -428.753 -430.451 -432.148 -446.404 -447.443 -448.102 -449.141 -450.839 -452.538
--485.408 -485.408 -487.007 -487.007 -499.066 -500.104 -524.189 -525.892 -527.594 -528.632
--534.054 -534.054 -535.654 -535.654 -665.539 -667.248 -668.956 -694.165 -695.875 -697.584
--702.553 -702.553 85.6237 85.754 85.8609 85.9913 86.1216 86.2285 88.9471 88.9471
-89.0356 89.0428 89.0486 89.0558 89.063 89.101 89.1036 89.1058 89.1083 89.1131
-89.1739 89.1739 89.1895 89.1953 89.2011 89.329 89.3419 89.3547 89.4028 89.4028
-89.4162 92.8672 
-</polylineY>
-<polylineZ multiple="36">
--392.694 -394.508 -396.321 -398.134 -413.36 -414.472 -415.172 -416.284 -418.096 -419.908
--450.754 -452.563 -454.373 -456.182 -471.371 -472.478 -473.179 -474.285 -476.093 -477.901
--512.838 -512.838 -514.536 -514.536 -527.329 -528.43 -553.946 -555.748 -557.549 -558.648
--564.384 -564.384 -566.076 -566.076 -702.92 -704.714 -706.508 -732.968 -734.761 -736.554
--741.766 -741.766 624.853 627.02 628.798 630.966 633.133 634.911 734.06 734.06
-749.096 750.985 752.476 754.365 756.254 771.538 773.328 774.802 776.592 779.856
-819.572 819.572 825.126 826.836 828.545 851.948 853.557 855.167 860.549 860.549
-861.929 979.729 
-</polylineZ>
-<pt>
-55.8412 -1.03551 
-</pt>
-<trackAuthor>
-9 9 
-</trackAuthor>
-<z0>
--319.781 549.784 
-</z0>
-</Track>
-
-<Track count="2" storeGateKey="ConvertedMBoyTracks">
-
-<barcode>
-0 0 
-</barcode>
-<chi2>
-11.516 97.6254 
-</chi2>
-<cotTheta>
--0.770806 1.3117 
-</cotTheta>
-<covMatrix multiple="15">
-82352.8 -562.768 12126.3 -112.852 1.11282 0.199247 2.26463 -40.4407 -0.00427538 0.146613
--0.0227186 0.948083 0.00233271 -0.00250997 0.00411825 1.41767e+07 175813 5.07167e+07 -38589 17704.2
-133.741 5445.87 -130132 -66.2113 351.292 -4460.38 20560 25.2706 -57.2321 21.1558
-
-</covMatrix>
-<d0>
-0.493352 11.5304 
-</d0>
-<driftSign multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 
-</driftSign>
-<hits multiple="36">
-2100232864 2100236992 2100241088 2100245216 2100249472 2100249504 2100253568 2100253600 2100257728 2100261824
-1730609632 1730613760 1730617856 1730621984 1730626336 1730626368 1730630432 1730630464 1730634592 1730638688
-1647284976 1647284336 1647286000 1647285364 1646731264 1646731296 1646739744 1646743840 1646747968 1646748000
-1646772976 1646772272 1646774000 1646773300 1680278368 1680282464 1680286592 1680295072 1680299168 1680303296
-1680315180 1680314384 1618215712 1618219840 1618219872 1618223968 1618228096 1618228128 2035453088 2035451984
-1802240896 1802245024 1802245056 1802249152 1802253280 1802257568 1802261664 1802261696 1802265824 1802269952
-1651803772 1651803200 1651769920 1651774016 1651778144 1651786592 1651790688 1651794816 1651823224 1651822616
-1651823644 1684836392 
-</hits>
-<id>
-0 1 
-</id>
-<isOutlier multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 1 1 1 0 1 1 0 0
-0 0 
-</isOutlier>
-<nPixHits>
-0 0 
-</nPixHits>
-<nSCTHits>
-0 0 
-</nSCTHits>
-<nTRTHits>
-0 0 
-</nTRTHits>
-<numDoF>
-32 19 
-</numDoF>
-<numHits>
-42 30 
-</numHits>
-<numPolyline>
-42 30 
-</numPolyline>
-<phi0>
--0.790721 2.76041 
-</phi0>
-<polylineX multiple="36">
-362.371 364.017 365.663 367.309 381.139 382.149 382.786 383.796 385.443 387.09
-415.16 416.809 418.457 420.106 433.955 434.965 435.605 436.614 438.264 439.914
-471.844 471.844 473.398 473.398 485.111 486.12 509.514 511.168 512.822 513.83
-519.096 519.096 520.65 520.65 646.788 648.447 650.105 674.583 676.242 677.902
-682.726 682.726 -477.38 -479.179 -480.655 -482.454 -484.254 -485.73 -578.526 -578.526
--594.877 -597.01 -598.693 -600.825 -602.958 -620.809 -622.98 -624.767 -626.938 -630.896
--683.109 -683.109 -690.955 -693.412 -695.868 -731.028 -733.561 -736.094 -744.69 -744.69
--746.92 -979.54 
-</polylineX>
-<polylineY multiple="36">
--372.719 -374.414 -376.108 -377.802 -392.037 -393.077 -393.732 -394.773 -396.468 -398.163
--427.056 -428.753 -430.451 -432.148 -446.404 -447.443 -448.102 -449.141 -450.839 -452.538
--485.408 -485.408 -487.007 -487.007 -499.066 -500.104 -524.189 -525.892 -527.594 -528.632
--534.054 -534.054 -535.654 -535.654 -665.539 -667.248 -668.956 -694.165 -695.875 -697.584
--702.553 -702.553 85.6237 85.754 85.8609 85.9913 86.1216 86.2285 88.9471 88.9471
-89.0356 89.0428 89.0486 89.0558 89.063 89.101 89.1036 89.1058 89.1083 89.1131
-89.1739 89.1739 89.1895 89.1953 89.2011 89.329 89.3419 89.3547 89.4028 89.4028
-89.4162 92.8672 
-</polylineY>
-<polylineZ multiple="36">
--392.694 -394.508 -396.321 -398.134 -413.36 -414.472 -415.172 -416.284 -418.096 -419.908
--450.754 -452.563 -454.373 -456.182 -471.371 -472.478 -473.179 -474.285 -476.093 -477.901
--512.838 -512.838 -514.536 -514.536 -527.329 -528.43 -553.946 -555.748 -557.549 -558.648
--564.384 -564.384 -566.076 -566.076 -702.92 -704.714 -706.508 -732.968 -734.761 -736.554
--741.766 -741.766 624.853 627.02 628.798 630.966 633.133 634.911 734.06 734.06
-749.096 750.985 752.476 754.365 756.254 771.538 773.328 774.802 776.592 779.856
-819.572 819.572 825.126 826.836 828.545 851.948 853.557 855.167 860.549 860.549
-861.929 979.729 
-</polylineZ>
-<pt>
-58.6356 -3.08337 
-</pt>
-<trackAuthor>
-9 9 
-</trackAuthor>
-<z0>
-7.67828 -4.26881 
-</z0>
-</Track>
-</Event>
-
diff --git a/graphics/AtlantisJava/test/events/muonCollections2.xml b/graphics/AtlantisJava/test/events/muonCollections2.xml
deleted file mode 100644
index 36c046de320d..000000000000
--- a/graphics/AtlantisJava/test/events/muonCollections2.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="JiveXML_event.xsl"?>
-<?ATLAS Release: "dummy"?>
-<!DOCTYPE Event SYSTEM "event.dtd">
-
-<Event version="dummy" runNumber="2" eventNumber="2" lumiBlock="2" dateTime="" eventProperty="">
-
-<!-- Test event with two muon track collections, ConvertedMBoyTracks and
-     ConvertedMuIdCBTracks, each containing 2 tracks.
-     Edited down from JiveXML_105200_190249.xml.
--->
-
-<Track count="2" storeGateKey="ConvertedMBoyTracks">
-<barcode>
-0 0 
-</barcode>
-<chi2>
-11.516 97.6254 
-</chi2>
-<cotTheta>
--0.770806 1.3117 
-</cotTheta>
-<covMatrix multiple="15">
-82352.8 -562.768 12126.3 -112.852 1.11282 0.199247 2.26463 -40.4407 -0.00427538 0.146613
--0.0227186 0.948083 0.00233271 -0.00250997 0.00411825 1.41767e+07 175813 5.07167e+07 -38589 17704.2
-133.741 5445.87 -130132 -66.2113 351.292 -4460.38 20560 25.2706 -57.2321 21.1558
-
-</covMatrix>
-<d0>
-0.493352 11.5304 
-</d0>
-<driftSign multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 
-</driftSign>
-<hits multiple="36">
-2100232864 2100236992 2100241088 2100245216 2100249472 2100249504 2100253568 2100253600 2100257728 2100261824
-1730609632 1730613760 1730617856 1730621984 1730626336 1730626368 1730630432 1730630464 1730634592 1730638688
-1647284976 1647284336 1647286000 1647285364 1646731264 1646731296 1646739744 1646743840 1646747968 1646748000
-1646772976 1646772272 1646774000 1646773300 1680278368 1680282464 1680286592 1680295072 1680299168 1680303296
-1680315180 1680314384 1618215712 1618219840 1618219872 1618223968 1618228096 1618228128 2035453088 2035451984
-1802240896 1802245024 1802245056 1802249152 1802253280 1802257568 1802261664 1802261696 1802265824 1802269952
-1651803772 1651803200 1651769920 1651774016 1651778144 1651786592 1651790688 1651794816 1651823224 1651822616
-1651823644 1684836392 
-</hits>
-<id>
-0 1 
-</id>
-<isOutlier multiple="36">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 1 1 1 0 1 1 0 0
-0 0 
-</isOutlier>
-<nPixHits>
-0 0 
-</nPixHits>
-<nSCTHits>
-0 0 
-</nSCTHits>
-<nTRTHits>
-0 0 
-</nTRTHits>
-<numDoF>
-32 19 
-</numDoF>
-<numHits>
-42 30 
-</numHits>
-<numPolyline>
-42 30 
-</numPolyline>
-<phi0>
--0.790721 2.76041 
-</phi0>
-<polylineX multiple="36">
-362.371 364.017 365.663 367.309 381.139 382.149 382.786 383.796 385.443 387.09
-415.16 416.809 418.457 420.106 433.955 434.965 435.605 436.614 438.264 439.914
-471.844 471.844 473.398 473.398 485.111 486.12 509.514 511.168 512.822 513.83
-519.096 519.096 520.65 520.65 646.788 648.447 650.105 674.583 676.242 677.902
-682.726 682.726 -477.38 -479.179 -480.655 -482.454 -484.254 -485.73 -578.526 -578.526
--594.877 -597.01 -598.693 -600.825 -602.958 -620.809 -622.98 -624.767 -626.938 -630.896
--683.109 -683.109 -690.955 -693.412 -695.868 -731.028 -733.561 -736.094 -744.69 -744.69
--746.92 -979.54 
-</polylineX>
-<polylineY multiple="36">
--372.719 -374.414 -376.108 -377.802 -392.037 -393.077 -393.732 -394.773 -396.468 -398.163
--427.056 -428.753 -430.451 -432.148 -446.404 -447.443 -448.102 -449.141 -450.839 -452.538
--485.408 -485.408 -487.007 -487.007 -499.066 -500.104 -524.189 -525.892 -527.594 -528.632
--534.054 -534.054 -535.654 -535.654 -665.539 -667.248 -668.956 -694.165 -695.875 -697.584
--702.553 -702.553 85.6237 85.754 85.8609 85.9913 86.1216 86.2285 88.9471 88.9471
-89.0356 89.0428 89.0486 89.0558 89.063 89.101 89.1036 89.1058 89.1083 89.1131
-89.1739 89.1739 89.1895 89.1953 89.2011 89.329 89.3419 89.3547 89.4028 89.4028
-89.4162 92.8672 
-</polylineY>
-<polylineZ multiple="36">
--392.694 -394.508 -396.321 -398.134 -413.36 -414.472 -415.172 -416.284 -418.096 -419.908
--450.754 -452.563 -454.373 -456.182 -471.371 -472.478 -473.179 -474.285 -476.093 -477.901
--512.838 -512.838 -514.536 -514.536 -527.329 -528.43 -553.946 -555.748 -557.549 -558.648
--564.384 -564.384 -566.076 -566.076 -702.92 -704.714 -706.508 -732.968 -734.761 -736.554
--741.766 -741.766 624.853 627.02 628.798 630.966 633.133 634.911 734.06 734.06
-749.096 750.985 752.476 754.365 756.254 771.538 773.328 774.802 776.592 779.856
-819.572 819.572 825.126 826.836 828.545 851.948 853.557 855.167 860.549 860.549
-861.929 979.729 
-</polylineZ>
-<pt>
-58.6356 -3.08337 
-</pt>
-<trackAuthor>
-9 9 
-</trackAuthor>
-<z0>
-7.67828 -4.26881 
-</z0>
-</Track>
-
-
-<Track count="2" storeGateKey="ConvertedMuIdCBTracks">
-
-<barcode>
-0 0 
-</barcode>
-<chi2>
-42.814 49.7505 
-</chi2>
-<cotTheta>
--0.771556 1.27815 
-</cotTheta>
-<covMatrix multiple="15">
-0.00826928 0.00161205 0.524101 -0.000787796 -0.000158775 9.16577e-05 -9.49e-05 -0.0391607 1.23985e-05 0.00336271
--0.00155346 -0.000959667 0.000188491 8.20954e-05 0.00144041 0.169634 -0.0124204 0.789371 -0.0337235 0.00136704
-0.00730118 0.0015583 -0.128944 -0.000194753 0.02396 -0.0501037 0.0144917 0.0149698 -0.00297823 0.352475
-
-</covMatrix>
-<d0>
-0.089879 -0.11419 
-</d0>
-<driftSign multiple="75.5">
-0 0 0 0 0 0 0 0 0 0
-0 1 1 -1 1 -1 -1 -1 -1 -1
--1 1 -1 -1 1 1 -1 1 -1 -1
--1 -1 1 1 -1 1 -1 1 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 -1 -1 -1 -1
--1 -1 -1 1 1 1 -1 -1 -1 1
--1 1 -1 -1 -1 -1 -1 1 1 1
--1 -1 -1 1 -1 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 
-</driftSign>
-<hits multiple="75.5">
-2725184265 2888627033 3047989021 168699032 168697991 171025537 171024522 173350018 173348972 175676530
-175675510 331359616 331360672 331361728 331362752 331364832 331384384 331386400 331388416 331390464
-331392480 331395520 331396544 331398560 331399584 331401600 331405664 331416928 331419008 331422144
-331424224 331427360 331428384 331430464 331432576 331433600 331435680 331436736 2100232864 2100236992
-2100241088 2100245216 2100249472 2100249504 2100253568 2100253600 2100257728 2100261824 1730609632 1730613760
-1730617856 1730621984 1730626336 1730630432 1730630464 1730634592 1730638688 1647286000 1647285364 1646731264
-1646731296 1646739744 1646743840 1646747968 1646748000 1646773300 1646774000 1680278368 1680282464 1680286592
-1680295072 1680299168 1680303296 1680314384 1680315180 2706406253 2855456339 3002378023 168253015 168251976
-170483061 170482036 172713122 172712111 174909133 174908084 383784512 383786592 383788640 383789664
-383790720 383791680 383792736 383793760 383812192 383814272 383816288 383818368 383820416 383821440
-383822496 383823520 383825536 383827616 383846048 383848128 383850144 383851168 383853216 383855296
-383857312 383859392 383877824 383882944 383885024 1618215712 1618219840 1618219872 1618223968 1618228096
-1618228128 2035453096 2035451984 1802240896 1802245024 1802245056 1802249152 1802253280 1802257568 1802261664
-1802261696 1802265824 1802269952 1651803772 1651803200 1651769920 1651774016 1651778144 1651786592 1651790688
-1651794816 1651823224 1651823644 1684800672 1684804768 1684808896 1684817248 1684821312 1684825440 1684838064
-1684837408 
-</hits>
-<id>
-0 1 
-</id>
-<isOutlier multiple="75.5">
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 1 1 1 1 1
-1 0 0 0 0 0 0 0 0 0
-0 0 1 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0
-0 
-</isOutlier>
-<nPixHits>
-3 3 
-</nPixHits>
-<nSCTHits>
-8 8 
-</nSCTHits>
-<nTRTHits>
-27 29 
-</nTRTHits>
-<numDoF>
-73 67 
-</numDoF>
-<numHits>
-75 76 
-</numHits>
-<numPolyline>
-75 76 
-</numPolyline>
-<phi0>
--0.792403 2.83724 
-</phi0>
-<polylineX multiple="75.5">
-3.76812 6.33631 8.61433 21.2214 21.2854 26.2311 26.295 31.4707 31.5345 36.4392
-36.5029 44.1987 44.685 45.1907 45.675 46.6756 49.9041 50.7914 51.6869 52.5953
-53.5071 54.8868 55.3573 56.2911 56.7603 57.7053 59.6133 61.3182 62.2339 63.6216
-64.5559 65.9688 66.4364 67.3895 68.3545 68.8261 69.7947 70.2729 361.985 363.632
-365.28 366.928 380.774 381.786 382.423 383.434 385.083 386.732 414.834 416.484
-418.135 419.786 433.65 435.302 436.313 437.964 439.616 471.581 472.359 484.864
-485.874 509.294 510.949 512.605 513.614 519.664 519.664 646.717 648.378 650.038
-674.541 676.203 677.864 682.699 682.699 -4.69928 -8.49491 -11.7275 -28.6103 -28.6966
--35.5786 -35.6658 -43.2266 -43.3145 -49.3888 -49.4759 -62.7019 -63.94 -65.41 -66.0181
--66.6494 -67.4119 -68.0438 -68.6522 -70.5337 -71.7754 -73.1723 -74.4154 -75.8909 -76.4981
--77.1352 -77.7425 -79.1421 -80.3877 -82.3188 -83.5658 -84.9682 -85.5738 -87.0543 -88.3031
--89.7074 -90.9573 -92.824 -96.0854 -97.3375 -477.031 -478.837 -480.315 -482.129 -483.948
--485.428 -578.457 -578.457 -594.879 -597.008 -598.688 -600.823 -602.96 -620.821 -622.986
--624.768 -626.94 -630.918 -683.109 -683.109 -691.068 -693.535 -696.015 -731.403 -733.952
--736.508 -744.69 -745.805 -927.496 -930.236 -932.976 -967.838 -969.536 -972.29 -979.54
--980.655 
-</polylineX>
-<polylineY multiple="75.5">
--3.69527 -6.30342 -8.61847 -21.4575 -21.5229 -26.5724 -26.6377 -31.9298 -31.995 -37.0174
--37.0826 -44.9778 -45.4772 -45.9968 -46.4943 -47.5225 -50.8422 -51.7552 -52.6767 -53.6118
--54.5506 -55.9717 -56.4564 -57.4187 -57.9022 -58.8765 -60.8442 -62.6033 -63.5486 -64.9814
--65.9465 -67.4063 -67.8896 -68.8748 -69.8726 -70.3604 -71.3623 -71.8571 -373.106 -374.798
--376.49 -378.183 -392.402 -393.442 -394.096 -395.135 -396.828 -398.522 -427.384 -429.079
--430.774 -432.47 -446.71 -448.406 -449.444 -451.141 -452.837 -485.67 -486.469 -499.314
--500.351 -524.41 -526.11 -527.811 -528.848 -535.063 -535.063 -665.602 -667.309 -669.015
--694.196 -695.903 -697.61 -702.579 -702.579 1.57025 2.70537 3.64723 8.20767 8.22939
-9.91078 9.93148 11.6655 11.6851 12.9935 13.0117 15.5953 15.8191 16.081 16.1881
-16.2985 16.4308 16.5395 16.6435 16.9605 17.1658 17.3931 17.5922 17.8246 17.9191
-18.0174 18.1104 18.3221 18.5071 18.7879 18.9655 19.1617 19.2453 19.4468 19.6134
-19.7969 19.9571 20.1911 20.5846 20.7305 72.212 72.4473 72.6375 72.8677 73.0952
-73.2777 81.2266 81.2266 82.1853 82.3048 82.3986 82.5175 82.6355 83.5933 83.7065
-83.7992 83.9127 84.1196 86.7554 86.7554 87.1596 87.2851 87.4124 89.2493 89.3834
-89.5192 89.9559 90.0156 100.839 101.018 101.197 103.504 103.618 103.802 104.29
-104.366 
-</polylineY>
-<polylineZ multiple="75.5">
-3.50153 0.677387 -1.82855 -15.7119 -15.7825 -21.2359 -21.3064 -27.0176 -27.088 -32.5043
--32.5746 -41.0812 -41.619 -42.1784 -42.7141 -43.821 -47.3938 -48.3761 -49.3675 -50.3733
--51.383 -52.9113 -53.4324 -54.4669 -54.9867 -56.034 -58.1486 -60.0387 -61.0541 -62.5931
--63.6294 -65.1968 -65.7157 -66.7733 -67.8442 -68.3677 -69.4429 -69.9738 -392.695 -394.508
--396.321 -398.134 -413.359 -414.471 -415.172 -416.284 -418.095 -419.907 -450.752 -452.562
--454.371 -456.181 -471.369 -473.178 -474.284 -476.092 -477.9 -512.837 -513.686 -527.328
--528.429 -553.945 -555.747 -557.549 -558.648 -565.23 -565.23 -702.927 -704.721 -706.516
--732.978 -734.772 -736.565 -741.784 -741.784 13.9188 18.9826 23.283 45.5935 45.7069
-54.7381 54.8523 64.7366 64.8514 72.7677 72.881 90.0479 91.6506 93.5526 94.3391
-95.1555 96.1413 96.9581 97.7443 100.175 101.778 103.581 105.185 107.087 107.87
-108.691 109.474 111.277 112.881 115.367 116.972 118.776 119.555 121.458 123.063
-124.868 126.473 128.87 133.055 134.661 625.142 627.308 629.076 631.238 633.399
-635.154 734.06 734.06 749.091 750.989 752.48 754.369 756.247 771.525 773.326
-774.801 776.589 779.835 819.417 819.417 824.967 826.666 828.354 851.354 852.938
-854.512 859.492 860.163 951.515 952.693 953.866 968.469 969.167 970.296 973.262
-973.717 
-</polylineZ>
-<pt>
-59.5287 -3.02081 
-</pt>
-<trackAuthor>
-1 1 
-</trackAuthor>
-<z0>
-7.57297 7.58689 
-</z0>
-</Track>
-
-</Event>
diff --git a/graphics/AtlantisJava/test/events/rvxEvent.xml b/graphics/AtlantisJava/test/events/rvxEvent.xml
deleted file mode 100644
index 21c7b7ca07e5..000000000000
--- a/graphics/AtlantisJava/test/events/rvxEvent.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="JiveXML_event.xsl"?>
-<?ATLAS Release: "dummy"?>
-<!DOCTYPE Event SYSTEM "event.dtd">
-<Event version="dummy" runNumber="1" eventNumber="1" lumiBlock="1" dateTime="" eventProperty="">
-
-<RVx count="4" storeGateKey="">
-
-<chi2>
-13.3549 13.3549 0.979663 0.979663 
-</chi2>
-<covMatrix multiple="6">
-3145 1516.27 739.31 230.495 111.531 34.7901 3145 1516.27 739.31 230.495
-111.531 34.7901 0.0057955 0.00580698 0.0161258 0.00385126 0.0066793 0.172986 0.0057955 0.00580698
-0.0161258 0.00385126 0.0066793 0.172986 
-</covMatrix>
-<numTracks>
-2 2 29 0 
-</numTracks>
-<primVxCand>
-2 2 1 0 
-</primVxCand>
-<sgkey>
-TrackParticleCandidate TrackParticleCandidate TrackParticleCandidate TrackParticleCandidate 
-</sgkey>
-<tracks multiple="8.25">
-41 33 41 33 0 1 2 3 4 5
-6 7 8 9 10 11 12 13 14 15
-16 17 18 19 20 21 22 23 24 25
-26 27 28
-</tracks>
-<x>
-35.1249 35.1249 -0.0114638 -0.0114638 
-</x>
-<y>
-18.3795 18.3795 0.0945006 0.0945006 
-</y>
-<z>
-7.44812 7.44812 5.03257 5.03257 
-</z>
-</RVx>
-
-
-</Event>
diff --git a/graphics/AtlantisJava/test/events/rvxInconsistentEvent.xml b/graphics/AtlantisJava/test/events/rvxInconsistentEvent.xml
deleted file mode 100644
index 3c745253f7ce..000000000000
--- a/graphics/AtlantisJava/test/events/rvxInconsistentEvent.xml
+++ /dev/null
@@ -1,258 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="JiveXML_event.xsl"?>
-<?ATLAS Release: "dummy"?>
-<!DOCTYPE Event SYSTEM "event.dtd">
-<Event version="dummy" runNumber="1" eventNumber="1" lumiBlock="1" dateTime="" eventProperty="">
-
-<RVx count="4" storeGateKey="">
-
-<chi2>
-13.3549 13.3549 0.979663 0.979663 
-</chi2>
-<covMatrix multiple="6">
-3145 1516.27 739.31 230.495 111.531 34.7901 3145 1516.27 739.31 230.495
-111.531 34.7901 0.0057955 0.00580698 0.0161258 0.00385126 0.0066793 0.172986 0.0057955 0.00580698
-0.0161258 0.00385126 0.0066793 0.172986 
-</covMatrix>
-<numTracks>
-2 2 29 0 
-</numTracks>
-<primVxCand>
-2 2 1 0 
-</primVxCand>
-<sgkey>
-TrackParticleCandidate TrackParticleCandidate TrackParticleCandidate TrackParticleCandidate 
-</sgkey>
-<tracks multiple="544.5">
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 41 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 33
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 41 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 33 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 0 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 2 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 3 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 4 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 5
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 6 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 7 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-8 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 9 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 10 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 11 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 12 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 13 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 14 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 15
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 16 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 17 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-18 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 19 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 20 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 21 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 22 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 23 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 24 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 25
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 26 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 27 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-28 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1
--1 -1 -1 -1 -1 -1 -1 -1 
-</tracks>
-<x>
-35.1249 35.1249 -0.0114638 -0.0114638 
-</x>
-<y>
-18.3795 18.3795 0.0945006 0.0945006 
-</y>
-<z>
-7.44812 7.44812 5.03257 5.03257 
-</z>
-</RVx>
-
-
-</Event>
diff --git a/graphics/AtlantisJava/test/src/atlantis/AtlantisHeadlessTestCase.java b/graphics/AtlantisJava/test/src/atlantis/AtlantisHeadlessTestCase.java
deleted file mode 100644
index 25f0a50137d3..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/AtlantisHeadlessTestCase.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package atlantis;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import testutils.TeeOutputStream;
-import testutils.TestUtils;
-
-public class AtlantisHeadlessTestCase {
-	ByteArrayOutputStream stdOutCopy = new ByteArrayOutputStream();
-	protected String eventFileName = null; // Event file to give on the command line
-
-	/** Start Atlantis in headless mode.
-	 */
-	protected void startHeadlessMode() {
-		// Redirect standard output to ByteArrayOutputStream as well as normal System.out
-		TeeOutputStream teeOut = new TeeOutputStream(System.out,stdOutCopy);
-		System.setOut(new PrintStream(teeOut));
-		
-		String atlantisHomeDir = Atlantis.getHomeDirectory();
-		String testEventsDir = atlantisHomeDir+"/test/events";
-		TestUtils.setPropertyIfNotSet("atlantis.test.events",testEventsDir);
-
-		System.setProperty("java.awt.headless", "true");
-		String[] args = {"--debug","DEBUG"};
-		if (eventFileName!=null) {
-			String[] newArgs = new String[args.length+1];
-			for (int i=0; i<args.length; ++i) {
-				newArgs[i] = args[i];
-			}
-			String eventsDirectory = System.getProperty("atlantis.test.events");
-			newArgs[args.length] = eventsDirectory+"/"+eventFileName;
-			args = newArgs;
-		}
-		Atlantis.main(args);
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/HeadlessTest.java b/graphics/AtlantisJava/test/src/atlantis/HeadlessTest.java
deleted file mode 100644
index 759ea917c954..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/HeadlessTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package atlantis;
-
-import org.fest.swing.timing.Condition;
-import org.junit.Test;
-import static org.fest.swing.timing.Pause.pause;
-import static org.fest.swing.timing.Timeout.timeout;
-
-public class HeadlessTest extends AtlantisHeadlessTestCase {
-
-	@Test
-	/** Start Atlantis in headless mode and make sure it doesn't crash part-way through.
-	 *  Atlantis.initAtlantis catches all Exceptions so we check for "Atlantis Ready" in
-	 *  the output console.
-	 */
-	public void testHeadlessMode() {
-		startHeadlessMode();
-		pause(new Condition("output to contain \"Atlantis Ready\"") {
-			public boolean test() {return stdOutCopy.toString().contains("Atlantis Ready");}
-		},timeout(10000));
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/InconsistentEventTest.java b/graphics/AtlantisJava/test/src/atlantis/InconsistentEventTest.java
deleted file mode 100644
index 5dbfffcd532b..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/InconsistentEventTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package atlantis;
-
-import static org.fest.swing.timing.Pause.pause;
-import static org.fest.swing.timing.Timeout.timeout;
-import static org.junit.Assert.*;
-
-import org.fest.swing.timing.Condition;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test for bug#556, where a JiveXML file from Atlas release 17 causes an error
- * on startup when the file is given on the command line, though not when it is
- * opened after Atlantis has started.
- * 
- * @author waugh
- *
- */
-public class InconsistentEventTest extends AtlantisHeadlessTestCase {
-	@Before
-	public void setUp() {
-		eventFileName = "rel17vtxEvent.xml";
-		System.setProperty("java.awt.headless", "true");
-		startHeadlessMode();
-	}
-	
-	@Test
-	public void loadEvent() {
-		pause(new Condition("output to contain \"Atlantis Ready\"") {
-			public boolean test() {return stdOutCopy.toString().contains("Atlantis Ready");}
-		},timeout(10000));
-		String output = stdOutCopy.toString();
-		assertTrue("Could not find or parse event ",output.contains("Parsing event"));
-		assertFalse("Error reading event",output.contains("Can not read events"));
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/NoTracksElementTest.java b/graphics/AtlantisJava/test/src/atlantis/NoTracksElementTest.java
deleted file mode 100644
index e761ec038c14..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/NoTracksElementTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package atlantis;
-
-import static org.fest.swing.timing.Pause.pause;
-import static org.fest.swing.timing.Timeout.timeout;
-import static org.junit.Assert.*;
-
-import org.fest.swing.timing.Condition;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test for bug#552, where a JiveXML file contains a "numTracks" element but
- * not a corresponding "tracks" element in the "RVx" section, as in some
- * of the events from the Hypatia masterclass.
- * 
- * @author waugh
- *
- */
-public class NoTracksElementTest extends AtlantisHeadlessTestCase {
-	@Before
-	public void setUp() {
-		eventFileName = "masterclassMuonEvents.zip";
-		System.setProperty("java.awt.headless", "true");
-		startHeadlessMode();
-	}
-	
-	@Test
-	public void loadEvent() {
-		pause(new Condition("output to contain \"Atlantis Ready\"") {
-			public boolean test() {return stdOutCopy.toString().contains("Atlantis Ready");}
-		},timeout(10000));
-		String output = stdOutCopy.toString();
-		assertTrue("Could not find or parse event ",output.contains("Parsing event"));
-		assertFalse("Error when constructing RVx",output.contains("Error when constructing RVx"));
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleBorderTest.java b/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleBorderTest.java
deleted file mode 100644
index 9ec8b4504a83..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleBorderTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package atlantis.canvas;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class AScaleBorderTest {
-
-	@Test
-	public void testGetNumDecimalPlaces() {
-		assertEquals("Wrong number of decimal places",0,AScaleBorder.getNumDecimalPlaces(1.0));
-		assertEquals("Wrong number of decimal places",0,AScaleBorder.getNumDecimalPlaces(10.0));
-		assertEquals("Wrong number of decimal places",1,AScaleBorder.getNumDecimalPlaces(0.5));
-		assertEquals("Wrong number of decimal places",2,AScaleBorder.getNumDecimalPlaces(0.02));
-		assertEquals("Wrong number of decimal places",0,AScaleBorder.getNumDecimalPlaces(-2.0));
-		assertEquals("Wrong number of decimal places",1,AScaleBorder.getNumDecimalPlaces(-0.5));
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleTest.java b/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleTest.java
deleted file mode 100644
index 75b0e7c58827..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/canvas/AScaleTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package atlantis.canvas;
-
-import static org.junit.Assert.*;
-
-import java.awt.geom.GeneralPath;
-import java.awt.geom.PathIterator;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class AScaleTest {
-	
-	private static final double TOLERANCE = 0.00001;
-
-	@Test
-	public void testCalculateScale() {
-		AScale scale = AScale.calculateScale(0, 10, 100, 3, 7, 0, 0, null);
-		for (double label : scale.labelValues) {
-			System.out.println("label = "+label);
-		}
-		for (double pos : scale.labelPositions) {
-			System.out.println("position: "+pos);
-		}
-		System.out.println("Primary tick marks = " + scale.primaryTicks);
-		GeneralPath primaryTicks = scale.primaryTicks;
-		PathIterator iterPTicks = primaryTicks.getPathIterator(null);
-		double[] coords = new double[2];
-		int i = 0;
-		while (!iterPTicks.isDone()) {
-			int type = iterPTicks.currentSegment(coords);
-			System.out.format("point %d has type %d%n",i,type);
-			System.out.print("Coords: ");
-			for (int j=0; j<2; ++j) {
-				System.out.format(" %f", coords[j]);
-			}
-			System.out.println();
-			i++;
-			iterPTicks.next();
-		}
-	}
-	
-	@Test
-	public void testRoundNumbers() {
-		assertEquals("Wrong rounding", 5.0, AScale.getRoundNumber(9.0), TOLERANCE);
-		assertEquals("Wrong rounding", -5.0, AScale.getRoundNumber(-9.0), TOLERANCE);
-		assertEquals("Wrong rounding", 1.0, AScale.getRoundNumber(1.01), TOLERANCE);
-		assertEquals("Wrong rounding", 500.0, AScale.getRoundNumber(999.0), TOLERANCE);
-	}
-	
-	@Test
-	public void testGetScaleIntervals() {
-		double[] intervals, expectedValues;
-		intervals = AScale.getScaleIntervals(-11.0,11.0);
-		expectedValues = new double[] {10.0, 5.0, 1.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-110.0,110.0);
-		expectedValues = new double[] {100.0, 50.0, 10.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-51.0,51.0);
-		expectedValues = new double[] {50.0, 10.0, 5.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-50.0,50.0);
-		expectedValues = new double[] {50.0, 10.0, 5.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-49.0,49.0);
-		expectedValues = new double[] {40.0, 20.0, 5.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(1.0,49.0);
-		expectedValues = new double[] {20.0, 10.0, 2.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(1.0,101.0);
-		expectedValues = new double[] {50.0, 10.0, 5.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-101.0,-1.0);
-		expectedValues = new double[] {50.0, 10.0, 5.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(-9.5,9.5);
-		expectedValues = new double[] {5.0, 1.0, 0.5};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(19.0,61.0);
-		expectedValues = new double[] {20.0, 10.0, 2.0};
-		assertArrayEquals("Wrong intervals", expectedValues, intervals, TOLERANCE);
-		intervals = AScale.getScaleIntervals(0.0,0.0);
-		assertNull("Intervals should be null for invalid input",intervals);
-	}
-	
-	@Test
-	public void testGetScaleValues() {
-		double[] values;
-		double[] expectedValues;
-		values = AScale.getScaleValues(0.0, 1.0, 1.0);
-		expectedValues = new double[] {0.0, 1.0};
-		assertArrayEquals("Wrong scale values", expectedValues, values, TOLERANCE);
-		values = AScale.getScaleValues(-0.1, 1.1, 1.0);
-		expectedValues = new double[] {0.0, 1.0};
-		assertArrayEquals("Wrong scale values", expectedValues, values, TOLERANCE);
-	}
-	
-	@Test
-	public void testInterpolate() {
-		float result = AScale.interpolate(0.5, 10.0, 0.0, 1.0);
-		assertEquals("Wrong interpolated value",5.0,result,TOLERANCE);
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/canvas/AWindowTest.java b/graphics/AtlantisJava/test/src/atlantis/canvas/AWindowTest.java
deleted file mode 100644
index 076249c99931..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/canvas/AWindowTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package atlantis.canvas;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class AWindowTest {
-
-	@Test
-	public void test() {
-		AWindow window = new AWindow("dummyName","dummyProjection","dummyGroup",1);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/data/AHelixTest.java b/graphics/AtlantisJava/test/src/atlantis/data/AHelixTest.java
deleted file mode 100644
index b55aecf4db0d..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/data/AHelixTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package atlantis.data;
-
-import atlantis.parameters.APar;
-import atlantis.utils.AMath;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-/**
- *
- * @author ejansen
- */
-
-@RunWith(Parameterized.class)
-public class AHelixTest {
-    
-    private static final double TOLERANCE = 0.001;
-    private static final double CURVATURE = 100/0.6;
-
-    private float d0, z0, phi0, cotanTheta, pt;
-    private AHelix helix;
-    
-    public AHelixTest(float d0, float z0, float phi0, float cotanTheta, float pt) {
-        this.d0 = d0;
-        this.z0 = z0;
-        this.phi0 = phi0;
-        this.cotanTheta = cotanTheta;
-        this.pt = pt;
-    }
-    
-    @Parameters
-    public static Collection helices() {
-        Collection data = new ArrayList<Object[]>();
-        
-        for (int charge=-1; charge<=1; charge+=2) {
-            for (float d0=-1.f; d0<=1.f; d0+=1.f) {
-                for (float phi0=-(float)Math.PI; phi0<Math.PI; phi0+=Math.PI/4) {
-                    float pt = 20.f;
-                    
-                    data.add(new Object[] {d0, 0.0f, phi0, 0.5f, charge*pt});
-                }
-            }
-        }
-        
-        return data;
-    }
-    
-    @Before
-    public void setUp() {
-        APar.constructDummyForTesting();
-        helix = new AHelix(d0, z0, (float)Math.toDegrees(phi0), cotanTheta, pt);
-    }
-    
-    @Test
-    public void testBackwardsCompatibility() {
-        AOldHelix oldHelix = new AOldHelix(d0, z0, (float)Math.toDegrees(phi0), cotanTheta, pt);
-
-        assertArrayEquals(oldHelix.getPar(), helix.getPar(), TOLERANCE);
-        assertEquals(oldHelix.eta, helix.eta(), TOLERANCE);
-        assertEquals(oldHelix.startPhi, helix.getAlphaMin(), TOLERANCE);
-        assertEquals(oldHelix.rhoVertex, helix.getRhoVtx(), TOLERANCE);
-    }
-
-    @Test
-    public void testD0() {
-        // The alpha=0 point should be at distance d0
-        double rho = helix.getRho(0);
-        assertEquals(Math.abs(d0), rho, TOLERANCE);
-    }
-
-    @Test
-    public void testCenterCoordinates() {
-        // Check the center of the circle against a separate calculation
-        double charge = Math.signum(pt);
-        double rC = CURVATURE * Math.abs(pt);
-        double xC = (rC - charge * d0) * Math.cos(phi0 - charge * Math.PI / 2);
-        double yC = (rC - charge * d0) * Math.sin(phi0 - charge * Math.PI / 2);
-        assertEquals(xC, helix.getXc(), TOLERANCE);
-        assertEquals(yC, helix.getYc(), TOLERANCE);
-    }
-
-    @Test
-    public void testEndPoint() {
-        // End the helix at 1m from the beam pipe and check that the last point is at 1m
-        double alphaMax = helix.getAlphaCylinder(100., 250.);
-        assertEquals(100., helix.getRho(alphaMax), TOLERANCE);        
-    }    
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/data/AOldHelixTest.java b/graphics/AtlantisJava/test/src/atlantis/data/AOldHelixTest.java
deleted file mode 100644
index 39b5077be338..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/data/AOldHelixTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package atlantis.data;
-
-import static org.junit.Assert.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import atlantis.parameters.APar;
-
-import static java.lang.Math.PI;
-
-public class AOldHelixTest {
-	/** Arbitrary tolerance for floating-point comparisons */
-	private static final double TOLERANCE = 0.00001;
-
-	@Before
-	public void setUp() throws Exception {
-		APar.constructDummyForTesting();
-	}
-	
-	@Test
-	public void helixFromNominalVertex() {
-		// Input: rhoVtx,phiVtx,zVtx,pt,phi,eta,charge
-		// Start at (0,0,0), pt=2, eta=0 so perp to z axis
-		// phi = 0 (arbitrary), positive charge (+1)
-		// Expect all params 0 except ptInverse = 0.5
-		AOldHelix helix = new AOldHelix(0,0,0,2,0,0,1);
-		assertHelixParametersEqual("Wrong helix parameters.",0,0,0,0,0.5,helix.getPar());
-		// charge = -1 so ptInverse changes sign
-		helix = new AOldHelix(0,0,0,2,0,0,-1);
-		assertHelixParametersEqual("Wrong helix parameters.",0,0,0,0,-0.5,helix.getPar());
-	}
-
-	@Test
-	public void helixStartingAtPCA() {
-		/* Input: rhoVtx,phiVtx,zVtx,pt,phi,eta,charge
-		 * Circular track (pz=0) starting at point closest to beam, at non-zero z.
-		 * Perpendicular to line from beam to starting vertex: phi = phiVtx + PI/2
-		 * Start in upwards direction, from point to the right of the beam axis, */
-		AOldHelix helix = new AOldHelix(0.1f,0,0.25f,1,(float)(PI/2),0,1);
-		double[] actualParameters = helix.getPar();
-		/* Closest approach is where we started so phi at PCA is same as phi at start.
-		 * Note that d0 is negative. */
-		assertHelixParametersEqual("",-0.1,0.25,PI/2,0,1,actualParameters);
-		/* Same starting position and direction, but negative particle.
-		 * No change to d0, which is still negative. */
-		helix = new AOldHelix(0.1f,0,0.25f,1,(float)(PI/2),0,-1);
-		actualParameters = helix.getPar();
-		assertHelixParametersEqual("",-0.1,0.25,PI/2,0,-1,actualParameters);
-		/*
-		 * Positive and negative particles, now starting in same direction (upwards)
-		 * but from a starting position to the left of the beam.
-		 * This time d0 is positive.
-		 */
-		helix = new AOldHelix(0.1f,(float)PI,0.25f,1,(float)(PI/2),0,1);
-		actualParameters = helix.getPar();
-		assertHelixParametersEqual("",0.1,0.25,PI/2,0,1,actualParameters);
-		helix = new AOldHelix(0.1f,(float)PI,0.25f,1,(float)(PI/2),0,-1);
-		actualParameters = helix.getPar();
-		assertHelixParametersEqual("",0.1,0.25,PI/2,0,-1,actualParameters);
-	}
-	
-	protected void assertHelixParametersEqual(String message, double d0, double z0,
-			double phi0, double tL, double ptInverse, double[] actualParameters) {
-		assertD0Equals(message,d0,actualParameters);
-		assertZ0Equals(message,z0,actualParameters);
-		assertPhi0Equals(message,phi0,actualParameters);
-		assertTLEquals(message,tL,actualParameters);
-		assertPtInverseEquals(message,ptInverse,actualParameters);
-	}
-	
-	protected void assertD0Equals(String message, double expected, double[] actualParameters) {
-		assertEquals(message+" Wrong d0.",expected,actualParameters[0],TOLERANCE);
-	}
-
-	protected void assertZ0Equals(String message, double expected, double[] actualParameters) {
-		assertEquals(message+" Wrong z0.",expected,actualParameters[1],TOLERANCE);
-	}
-
-	protected void assertPhi0Equals(String message, double expected, double[] actualParameters) {
-		assertEquals(message+" Wrong phi0.",expected,actualParameters[2],TOLERANCE);
-	}
-
-	protected void assertTLEquals(String message, double expected, double[] actualParameters) {
-		assertEquals(message+" Wrong tL.",expected,actualParameters[3],TOLERANCE);
-	}
-
-	protected void assertPtInverseEquals(String message, double expected, double[] actualParameters) {
-		assertEquals(message+" Wrong ptInverse.",expected,actualParameters[4],TOLERANCE);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/event/AEventInfoTest.java b/graphics/AtlantisJava/test/src/atlantis/event/AEventInfoTest.java
deleted file mode 100644
index 8c541eecb5e7..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/event/AEventInfoTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package atlantis.event;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class AEventInfoTest {
-	private static final long eventNumber=12345;
-	private static final long runNumber=123;
-
-	@Test
-	public void testAEventInfoCreation() {
-		AEventInfo e = new AEventInfo(eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		assertAEventInfo(e,eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-	}
-
-	/**
-	 * Create AEventInfo object with null or other special values for parameters.
-	 */
-	@Test
-	public void testAEventInfoCreationChecks() {
-		AEventInfo e1 = new AEventInfo(eventNumber,runNumber,null,null,null,null);
-		assertAEventInfo(e1,eventNumber,runNumber,"n/a","n/a","default","default");
-		AEventInfo e2 = new AEventInfo(eventNumber,runNumber,null,null,"blah-1","blah-1");
-		assertAEventInfo(e2,eventNumber,runNumber,"n/a","n/a","default","default");
-	}
-
-	@Test
-	public void testAEventCopyConstructor() {
-		AEventInfo e0 = new AEventInfo(eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		AEventInfo e = new AEventInfo(e0);
-		assertAEventInfo(e,eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-	}
-
-	@Test
-	public void testHashCode() {
-		// Check different run/event numbers give different hash codes
-		AEventInfo e1 = new AEventInfo(eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		AEventInfo e2 = new AEventInfo(eventNumber+1,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		AEventInfo e3 = new AEventInfo(eventNumber,runNumber+1,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		int h1 = e1.hashCode();
-		int h2 = e2.hashCode();
-		int h3 = e3.hashCode();
-		assertTrue("hash codes should be different for e1,e2",h2!=h1);
-		assertTrue("hash codes should be different for e1,e3",h1!=h3);
-		assertTrue("hash codes should be different for e2,e3",h2!=h3);
-	}
-
-	@Test
-	public void testEqualsAEventInfo() {
-		AEventInfo e1a = new AEventInfo(eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		AEventInfo e1b = new AEventInfo(eventNumber,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		AEventInfo e2 = new AEventInfo(eventNumber+1,runNumber,"TIME","SOURCE","LUMIBLOCK","EVENTPROPERTIES");
-		assertTrue("equals should return true for e1a,e1b",e1a.equals(e1b));
-		assertFalse("equals should return false for e1a,e2",e1a.equals(e2));
-	}
-
-	/** Check values in AEventInfo object */
-	private void assertAEventInfo(AEventInfo eventInfo, long event, long run, String time, String source, String lumiBlock, String eventProperties) {
-		assertEquals("event number not set correctly",event,eventInfo.getEventNumber());
-		assertEquals("run number not set correctly",run,eventInfo.getRunNumber());
-		assertEquals("time not set correctly",time,eventInfo.getDateTime());
-		assertEquals("source not set correctly",source,eventInfo.getSourceName());
-		assertEquals("source not set correctly",lumiBlock,eventInfo.getLumiBlock());
-		assertEquals("event properties not set correctly",eventProperties,eventInfo.getEventProperties());
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/graphics/ACoordTest.java b/graphics/AtlantisJava/test/src/atlantis/graphics/ACoordTest.java
deleted file mode 100644
index 24f5de94ef37..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/graphics/ACoordTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package atlantis.graphics;
-
-import java.awt.geom.Point2D;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import atlantis.parameters.APar;
-import static org.junit.Assert.*;
-
-public class ACoordTest {
-	private static final double TOLERANCE = 0.001;
-
-	@BeforeClass
-	public static void setUpOnce() throws Exception {
-		APar.constructDummyForTesting();
-	}
-
-	@Test
-	public void constructACoordWithOnePoint() {
-		ACoord coord = new ACoord(0.0, 0.0, 0);
-		Point2D.Double point = new Point2D.Double(0.0,0.0);
-		assertContainsPoints(coord,point);
-	}
-	
-	@Test
-	public void constructACoordWithOneArrayOfPoints() {
-		double[] h = {0.0, 1.0, -1.0, 2.5};
-		double[] v = {0.0, 0.0, 1.0, -2.5};
-		ACoord coord = new ACoord(h,v);
-		Point2D.Double[] expectedPoints = createPointsArray(h,v);
-		assertContainsPoints(coord,expectedPoints);
-	}
-
-	/**
-	 * Currently just checks first set of points, i.e. x = hv[0][0][i], y = [1][0][i]
-	 * @param coord
-	 * @param points
-	 */
-	protected static void assertContainsPoints(ACoord coord, Point2D.Double... points) {
-		double[] x = coord.hv[0][0];
-		double[] y = coord.hv[1][0];
-		int xLen = x.length;
-		int yLen = y.length;
-		assertTrue(String.format(
-				"Numbers of x and y coordinates are not equal: %d, %d",xLen,yLen),
-				xLen==yLen);
-		assertTrue(String.format(
-				"Wrong number of points: expected %d, found %d",points.length,xLen),
-				points.length==xLen);
-		int i=0;
-		for (Point2D.Double point : points) {
-			Point2D.Double hvPoint = new Point2D.Double(x[i],y[i]);
-			double distance = hvPoint.distance(point);
-			if (distance>TOLERANCE) {
-				fail(String.format("Didn't find expected points. First difference is point %d: expected (%f,%f), found (%f,%f)",
-						i,point.x,point.y,hvPoint.x,hvPoint.y));
-			}
-			i++;
-		}
-	}
-	
-	private Point2D.Double[] createPointsArray(double[] x, double[] y) {
-		Point2D.Double[] points = new Point2D.Double[x.length];
-		for (int i=0; i<x.length; i++) {
-			points[i] = new Point2D.Double(x[i], y[i]);
-		}
-		return points;
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/list/AListManagerTest.java b/graphics/AtlantisJava/test/src/atlantis/list/AListManagerTest.java
deleted file mode 100644
index 3b2e70bd5bff..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/list/AListManagerTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package atlantis.list;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-import atlantis.utils.A4Vector;
-
-public class AListManagerTest {
-	private static final double TOLERANCE = 0.00001;
-
-	@Test
-	public void testTotalEt() {
-		Summarizer summ = new Summarizer();
-		A4Vector pos = new A4Vector(3.0,0,0,4.0);
-		String posDescription = "A positive 4vector";
-		A4Vector neg = new A4Vector(-3.0,0,0,4.0);
-		String negDescription = "A negative 4vector";
-		summ.addAndGetInfo(pos, posDescription);
-		summ.addAndGetInfo(neg, negDescription);
-		double totalEt = summ.getTotalEt();
-		assertEquals(totalEt,10.0,TOLERANCE);
-	}
-	
-	@Test
-	public void testTotalPt() {
-		Summarizer summ = new Summarizer();
-		A4Vector pos = new A4Vector(3.0,0,0,4.0);
-		String posDescription = "A positive 4vector";
-		A4Vector neg = new A4Vector(-3.0,0,0,4.0);
-		String negDescription = "A negative 4vector";
-		summ.addAndGetInfo(pos, posDescription);
-		summ.addAndGetInfo(neg, negDescription);
-		double totalPt = summ.getTotalPt();
-		assertEquals(totalPt,0.0,TOLERANCE);
-	}
-	
-	@Test
-	public void testTotalMt() {
-		Summarizer summ = new Summarizer();
-		A4Vector pos = new A4Vector(3.0,0,0,4.0);
-		String posDescription = "A positive 4vector";
-		A4Vector neg = new A4Vector(-3.0,0,0,4.0);
-		String negDescription = "A negative 4vector";
-		summ.addAndGetInfo(pos, posDescription);
-		summ.addAndGetInfo(neg, negDescription);
-		double totalMt = summ.getTotalMt();
-		assertEquals(totalMt,10.0,TOLERANCE);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/parameters/AAbstractParameterTest.java b/graphics/AtlantisJava/test/src/atlantis/parameters/AAbstractParameterTest.java
deleted file mode 100644
index c2df08a2a554..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/parameters/AAbstractParameterTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package atlantis.parameters;
-
-import static org.junit.Assert.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import testutils.AtlantisInit;
-
-import atlantis.canvas.ACanvas;
-
-/**
- * Tests for AAbstractParameter.
- * @author waugh
- *
- */
-public class AAbstractParameterTest {
-	/** Arbitrary tolerance for floating-point comparisons */
-	private static final double TOLERANCE = 0.00001;
-
-	private AAbstractParameter parameter;
-
-	@Before
-	public void setUp() throws Exception {
-		AtlantisInit.init();
-		APar.constructDummyForTesting();
-		ACanvas.constructDummyForTesting();
-		parameter = new AAbstractParameter("name", "screen name", null, 0, 0, null, null, false, false, false, 0, 0, 0) {
-			{wCount = 1; data = new AParameterData(wCount);}
-			public void setD(double v) {}
-			public void setI(int v) {}
-			public void refresh() {}
-		};
-	}
-
-	@Test
-	public void testAAbstractParameter() {
-		assertNotNull(parameter);
-	}
-
-	@Test
-	public void testSaveAndRestoreDefaults() {
-		// Access member variables directly since set and other methods rely on
-		// information about existing windows. Rely on uninitialized
-		// APar.currentIndex being zero.
-
-		// Set value, status etc.
-		parameter.valueType = AAbstractParameter.FLOAT;
-		parameter.data.setValue(1.0);
-		parameter.data.setStatus(false);
-		parameter.data.setOperator("");
-		parameter.range = AAbstractParameter.resolvePossibleValues("0:10", AAbstractParameter.FLOAT);
-		parameter._setD(1.0);
-		parameter.hasStatus = true;
-		parameter.setStatus(true);
-		parameter._setOperator("A"); // no restriction on value of operator?
-		parameter.setScope(AAbstractParameter.LOCAL);
-		// Save current settings as defaults then change them
-		parameter.saveDefaults();
-		parameter._setD(2.0);
-		parameter.setStatus(false);
-		parameter._setOperator("B");
-		parameter.setScope(AAbstractParameter.GLOBAL);
-		// Make sure the current settings have changed
-		double value = parameter.getD();
-		boolean status = parameter.getStatus();
-		String operator = parameter.getOperator();
-		int scope = parameter.getScope();
-		assertEquals("parameter value not changed from default",2.0,value,TOLERANCE);
-		assertEquals("parameter status not changed from default",false,status);
-		assertEquals("parameter operator not changed from default","B",operator);
-		assertEquals("parameter scope not changed from default",AAbstractParameter.GLOBAL,scope);
-		// Then restore defaults and verify the original settings are back
-		parameter.restoreDefaults();
-		double restoredValue = parameter.getD();
-		boolean restoredStatus = parameter.getStatus();
-		String restoredOperator = parameter.getOperator();
-		int restoredScope = parameter.getScope();
-		assertEquals("parameter value not set to default",1.0,restoredValue,TOLERANCE);
-		assertEquals("parameter status not set to default",true,restoredStatus);
-		assertEquals("parameter operator not set to default","A",restoredOperator);
-		assertEquals("parameter scope not set to default",AAbstractParameter.LOCAL,restoredScope);
-	}
-	
-	@Test
-	public void testPossibleValuesFloat() {
-		parameter.valueType = AAbstractParameter.FLOAT;
-		String possibleValues = "1.0:2.0,3.0:4.5";
-		parameter.range = AAbstractParameter.resolvePossibleValues(possibleValues, AAbstractParameter.FLOAT);
-		assertValidValue(parameter,possibleValues,1.2);
-		assertValidValue(parameter,possibleValues,4.4);
-		assertInvalidValue(parameter,possibleValues,0.9);
-		assertInvalidValue(parameter,possibleValues,2.1);
-		assertInvalidValue(parameter,possibleValues,9.9);
-		assertInvalidValue(parameter,possibleValues,-1.2);
-	}
-	
-	@Test
-	public void testPossibleValuesInt() {
-		parameter.valueType = AAbstractParameter.INT;
-		String possibleValues = "1,2,4";
-		parameter.range = AAbstractParameter.resolvePossibleValues(possibleValues, AAbstractParameter.FLOAT);
-		assertValidValue(parameter,possibleValues,1);
-		assertValidValue(parameter,possibleValues,2);
-		assertValidValue(parameter,possibleValues,4);
-		assertInvalidValue(parameter,possibleValues,3);
-		assertInvalidValue(parameter,possibleValues,-1);
-	}
-
-	private static void assertValidValue(AAbstractParameter parameter, String possibleValues, double value) {
-		boolean validated = parameter.validateValue(value);
-		assertTrue(String.format("Value %f incorrectly fails validation with possible values %s",value,possibleValues),validated);
-	}
-
-	private static void assertInvalidValue(AAbstractParameter parameter, String possibleValues, double value) {
-		boolean validated = parameter.validateValue(value);
-		assertFalse(String.format("Value %f incorrectly passes validation with possible values %s",value,possibleValues),validated);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/parameters/AParameterDataTest.java b/graphics/AtlantisJava/test/src/atlantis/parameters/AParameterDataTest.java
deleted file mode 100644
index afab7d5293af..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/parameters/AParameterDataTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package atlantis.parameters;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * We don't test the methods that call APar to find out the current window,
- * which is not defined in unit tests.
- * 
- * @author waugh
- *
- */
-public class AParameterDataTest {
-	private static final int numWindows = 3;
-	private static final double TOLERANCE = 0.001;
-	
-	private AParameterData paramData;
-	
-	@Before
-	public void setUp() {
-		APar.constructDummyForTesting();
-		paramData = new AParameterData(numWindows);
-	}
-
-	@Test
-	/**
-	 * Check default values for all windows.
-	 */
-	public void constructDefault() {
-		for (int iWindow=0; iWindow<numWindows; ++iWindow) {
-			AParameterState state = paramData.getState(iWindow);
-			assertValuesEqual("Default state is wrong.",0.0,false,"",state);
-		}
-	}
-	
-	@Test
-	/**
-	 * Copy values from window 1 to window 2.
-	 */
-	public void copyValues() {
-		paramData.setValue(1, 1.0);
-		paramData.setStatus(1, true);
-		paramData.setOperator(1, "+");
-		paramData.copy(1, 2);
-		AParameterState state = paramData.getState(2);
-		assertValuesEqual("Copied state is wrong.",1.0,true,"+",state);
-	}
-	
-	@Test
-	public void saveAndRestoreValues() {
-		paramData.setValue(1, 1.0);
-		paramData.setStatus(1, true);
-		paramData.setOperator(1, "+");
-		paramData.saveDefaults();
-		paramData.setValue(1, 2.0);
-		paramData.setStatus(1, false);
-		paramData.setOperator(1, "-");
-		AParameterState state = paramData.getState(1);
-		assertValuesEqual("Set state is wrong.",2.0,false,"-",state);
-		paramData.restoreDefaults();
-		state = paramData.getState(1);
-		assertValuesEqual("Restored state is wrong.",1.0,true,"+",state);
-	}
-	
-	@Test
-	public void testGlobalize() {
-		paramData.setValue(1, 1.0);
-		paramData.setStatus(1, true);
-		paramData.setOperator(1, "+");
-		paramData.globalize(1);
-		for (int iWindow=0; iWindow<numWindows; ++iWindow) {
-			AParameterState state = paramData.getState(iWindow);
-			assertValuesEqual("State wrong after globalization.",1.0,true,"+",state);
-		}
-	}
-	
-	private static void assertValuesEqual(String message, double value, boolean status, String operator, AParameterState actual) {
-		assertEquals(message+" Wrong value.",value,actual.value,TOLERANCE);
-		assertEquals(message+" Wrong status.",status,actual.status);
-		assertEquals(message+" Wrong operator.",operator,actual.operator);
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/utils/A3VectorTest.java b/graphics/AtlantisJava/test/src/atlantis/utils/A3VectorTest.java
deleted file mode 100644
index 0b88546b31d6..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/utils/A3VectorTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package atlantis.utils;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Tests for A3Vector class. Initial rather clumsy implementation just to get started.
- * @author waugh
- *
- */
-public class A3VectorTest {
-	/** Arbitrary tolerance for floating-point comparisons */
-	private static final double TOLERANCE = 0.00001;
-
-	@Test
-	public void testA3Vector() {
-		A3Vector v = new A3Vector();
-		assertA3VectorEquals("three-vector",0.0,0.0,0.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testA3VectorDoubleDoubleDouble() {
-		A3Vector v = new A3Vector(1.0,-2.5,3.3);
-		assertA3VectorEquals("three-vector",1.0,-2.5,3.3,v,TOLERANCE);
-	}
-
-	@Test
-	public void testFromEtaPhiR() {
-		A3Vector v = A3Vector.fromEtaPhiR(0.0, Math.PI, 2.0);
-		assertA3VectorEquals("three-vector",-2.0,0.0,0.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testFromRhoPhiZ() {
-		A3Vector v = A3Vector.fromRhoPhiZ(1.0, Math.PI, 1.0);
-		assertA3VectorEquals("three-vector",-1.0,0.0,1.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testGetNormalized() {
-		A3Vector v0 = new A3Vector(1.0,1.0,1.0);
-		double a = 1 / Math.sqrt(3);
-		A3Vector v = v0.getNormalized();
-		assertA3VectorEquals("three-vector",a,a,a,v,TOLERANCE);
-	}
-
-	@Test
-	public void testNormalize() {
-		A3Vector v = new A3Vector(1.0,1.0,1.0);
-		v.normalize();
-		double a = 1 / Math.sqrt(3);
-		assertA3VectorEquals("three-vector",a,a,a,v,TOLERANCE);
-	}
-
-	@Test
-	public void testMagnitude() {
-		A3Vector v = new A3Vector(1.0,1.0,1.0);
-		double r = v.magnitude();
-		double rExpected = Math.sqrt(3);
-		assertEquals("magnitude calculation",rExpected,r,TOLERANCE);
-	}
-
-	@Test
-	public void testScale() {
-		A3Vector v = new A3Vector(1.0,1.0,1.0);
-		v.scale(0.5);
-		assertA3VectorEquals("three-vector",0.5,0.5,0.5,v,TOLERANCE);
-	}
-
-	@Test
-	public void testAdd() {
-		A3Vector v = new A3Vector(1.0,2.0,3.0);
-		A3Vector v0 = new A3Vector(0.0,1.0,-0.5);
-		v.add(v0);
-		assertA3VectorEquals("three-vector",1.0,3.0,2.5,v,TOLERANCE);
-	}
-
-	@Test
-	public void testSubtract() {
-		A3Vector v = new A3Vector(1.0,2.0,3.0);
-		A3Vector v0 = new A3Vector(0.0,1.0,-0.5);
-		v.subtract(v0);
-		assertA3VectorEquals("three-vector",1.0,1.0,3.5,v,TOLERANCE);
-	}
-
-	/**
-	 * Check given A3Vector has expected components
-	 */
-	private static void assertA3VectorEquals(String message, double x, double y, double z,
-			A3Vector v, double delta) {
-		if (Math.abs(v.x-x)>delta || Math.abs(v.y-y)>delta || 
-				Math.abs(v.z-z)>delta) {
-			String vExpected = String.format("<%f,%f,%f>", x,y,z);
-			String vActual = String.format("<%f,%f,%f>", v.x,v.y,v.z);
-			String summary = message+" "+
-				"expected:"+vExpected+" but was:"+vActual;
-			fail(summary);
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/utils/A4VectorTest.java b/graphics/AtlantisJava/test/src/atlantis/utils/A4VectorTest.java
deleted file mode 100644
index 03fb94f20012..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/utils/A4VectorTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package atlantis.utils;
-
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Tests for A4Vector class.
- */
-public class A4VectorTest {
-	/** Arbitrary tolerance for floating-point comparisons */
-	private static final double TOLERANCE = 0.00001;
-
-	@Test
-	public void testA4Vector() {
-		A4Vector v = new A4Vector();
-		assertA4VectorEquals("construct zero 4-vector",0.0,0.0,0.0,0.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testA4VectorDoubleDoubleDoubleDouble() {
-		// fourth argument is mass, not energy
-		// use 3-4-5 numbers for simple arithmetic
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		assertA4VectorEquals("construct 4-vector",2.0,2.0,-1.0,5.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testA4VectorA3VectorDouble() {
-		A3Vector v3 = new A3Vector(2.0,2.0,-1.0);
-		A4Vector v = new A4Vector(v3,4.0);
-		assertA4VectorEquals("construct 4-vector",2.0,2.0,-1.0,5.0,v,TOLERANCE);
-	}
-
-	@Test
-	public void testSet() {
-		A4Vector v = new A4Vector();
-		v.set(2.0,2.0,-1.0,4.0);
-		assertA4VectorEquals("set 4-vector",2.0,2.0,-1.0,5.0,v,TOLERANCE);
-	}
-	
-	@Test
-	public void testSetPtEtaPhiM() {
-	       A4Vector v1 = new A4Vector();
-	       v1.setPtEtaPhiM(1.0, 0.0, 0.0, 0.0);
-	       assertA4VectorEquals("set 4-vector",1.0,0.0,0.0,1.0,v1,TOLERANCE);
-	       // test with negative pT
-	       A4Vector v2 = new A4Vector();
-           v2.setPtEtaPhiM(-1.0, 0.0, 0.0, 0.0);
-           assertA4VectorEquals("set 4-vector",1.0,0.0,0.0,1.0,v2,TOLERANCE);
-	}
-
-	@Test
-	public void testGetP() {
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		double p = v.getP();
-		assertEquals(3.0,p,TOLERANCE);
-	}
-
-	@Test
-	public void testGetPt() {
-		A4Vector v = new A4Vector(0.3,0.4,-1.0,4.0);
-		double pt = v.getPt();
-		assertEquals(0.5,pt,TOLERANCE);
-	}
-
-	@Test
-	public void testGetE() {
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		double e = v.getE();
-		assertEquals(5.0,e,TOLERANCE);
-	}
-	
-	@Test
-	public void testgetEt() {
-		A4Vector v = new A4Vector(1.0,1.0,2.0,3.0);
-		double et = v.getEt();
-		double x = Math.sqrt(5.0);
-		assertEquals(x,et,TOLERANCE);
-	}
-
-	@Test
-	public void testGetMass() {
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		double m = v.getMass();
-		assertEquals(4.0,m,TOLERANCE);
-	}
-	
-	@Test
-	public void testGetMt() {
-		A4Vector v = new A4Vector(1.0,1.0,2.0,3.0);
-		double mt = v.getMt();
-		double x = Math.sqrt(3.0);
-		assertEquals(x,mt,TOLERANCE);
-	}
-
-	@Test
-	public void testAddDoubleDoubleDoubleDouble() {
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		v.add(2.2,2.2,-1.1,4.4);
-		assertA4VectorEquals("add 4-vectors",4.2,4.2,-2.1,10.5,v,TOLERANCE);
-	}
-
-	@Test
-	public void testAddA4Vector() {
-		A4Vector v = new A4Vector(2.0,2.0,-1.0,4.0);
-		A4Vector v2 = new A4Vector(2.2,2.2,-1.1,4.4);
-		v.add(v2);
-		assertA4VectorEquals("add 4-vectors",4.2,4.2,-2.1,10.5,v,TOLERANCE);
-	}
-	
-	/**
-	 * Check given A4Vector has expected components
-	 */
-	private static void assertA4VectorEquals(String message, double px, double py, double pz, double e,
-			A4Vector v, double delta) {
-		if (Math.abs(v.px-px)>delta || Math.abs(v.py-py)>delta || 
-				Math.abs(v.pz-pz)>delta || Math.abs(v.e-e)>delta) {
-			String vExpected = String.format("<%f,%f,%f,%f>", px,py,pz,e);
-			String vActual = String.format("<%f,%f,%f,%f>", v.px,v.py,v.pz,v.e);
-			String summary = message+" "+
-				"expected:"+vExpected+" but was:"+vActual;
-			fail(summary);
-		}
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/utils/AIdRangeTest.java b/graphics/AtlantisJava/test/src/atlantis/utils/AIdRangeTest.java
deleted file mode 100644
index cae60427953a..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/utils/AIdRangeTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package atlantis.utils;
-
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-
-/**
- * Test for the IdHelper range class used to represent 
- * possible values of an identifier field.
- * 
- * @author Eric Jansen
- */
-public class AIdRangeTest {
-    
-    public AIdRangeTest() {}
-
-    @Test
-    public void testEmptyRange() throws Exception {
-        AIdRange a = new AIdRange();
-        AIdRange b = new AIdRange(new int[] {1, 2});
-        
-        a.add(b);
-        assertEquals(a, b);
-        
-        b.add(a);
-        assertEquals(a, b);
-    }
-    
-    @Test
-    public void testContainsRange() throws Exception {
-        AIdRange a = new AIdRange(1, 3);
-        AIdRange b = new AIdRange(new int[] {1, 2, 4});
-        AIdRange c = new AIdRange(1, 2);
-        
-        assert(a.contains(c));
-        assert(b.contains(c));
-        assert(!a.contains(b));
-        assert(!b.contains(a));
-    }
-
-    @Test
-    public void testContainsValue() throws Exception {
-        AIdRange a = new AIdRange(-5, 5);
-        AIdRange b = new AIdRange(new int[] {-1, 3, 9});
-
-        assert(!a.contains(-6));
-        assert(a.contains(-5));
-        assert(a.contains(2));
-        assert(a.contains(5));
-        assert(!a.contains(6));
-        
-        assert(b.contains(-1));
-        assert(!b.contains(2));
-        assert(b.contains(3));
-        assert(b.contains(9));
-    }
-    
-    @Test
-    public void testAddRange() throws Exception {
-        AIdRange a = new AIdRange(new int[] {-1, 0, 1, 2, 5, 6});
-        AIdRange b = new AIdRange(new int[] {-1, 1, 2, 6});
-        AIdRange c = new AIdRange(new int[] {0, 1, 2, 5});
-        
-        b.add(c);
-        assert(a.equals(b));
-        
-        AIdRange d = new AIdRange(-5, 5);
-        AIdRange e = new AIdRange(new int[] {-5, -4});
-        AIdRange f = new AIdRange(-3, 5);
-        
-        e.add(f);
-        assert(d.equals(e));
-        
-        AIdRange g = new AIdRange(0, 2);
-        AIdRange h = new AIdRange(new int[] {0, 1});
-        AIdRange i = new AIdRange(new int[] {1, 2});
-        
-        h.add(i);
-        assert(g.equals(h)); // comparing [ 0 -> 2 ] to [ 0 1 2 ]
-    }
-    
-    @Test
-    public void testToString() throws Exception {
-        AIdRange a = new AIdRange(-2, 15);
-        AIdRange b = new AIdRange(new int[] {2, 3, 5});
-        AIdRange c = new AIdRange();
-        assertEquals("[ -2 -> 15 ]", a.toString());
-        assertEquals("[ 2 3 5 ]", b.toString());
-        assertEquals("[ ]", c.toString());
-    }
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/utils/AMathTest.java b/graphics/AtlantisJava/test/src/atlantis/utils/AMathTest.java
deleted file mode 100644
index 8bb888866ac9..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/utils/AMathTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 
- */
-package atlantis.utils;
-
-import static org.junit.Assert.*;
-import org.junit.Test;
-
-import static java.lang.Math.PI;
-
-/**
- * @author waugh
- *
- */
-public class AMathTest {
-	/** Arbitrary tolerance for floating-point comparisons */
-	private static final double TOLERANCE = 0.00001;
-
-	/**
-	 * Test method for {@link atlantis.utils.AMath#nearestPhiDegrees(double)}.
-	 */
-	@Test
-	public void testNearestPhiDegreesDouble() {
-		assertEquals("Wrong value for phi",0.,AMath.nearestPhiDegrees(0.),TOLERANCE);
-		assertEquals("Wrong value for phi",0.,AMath.nearestPhiDegrees(360.),TOLERANCE);
-		assertEquals("Wrong value for phi",180.,AMath.nearestPhiDegrees(180.),TOLERANCE);
-		assertEquals("Wrong value for phi",1.,AMath.nearestPhiDegrees(1.),TOLERANCE);
-		assertEquals("Wrong value for phi",359.,AMath.nearestPhiDegrees(-1.),TOLERANCE);
-	}
-
-	/**
-	 * Test method for {@link atlantis.utils.AMath#nearestPhiRadians(double)}.
-	 */
-	@Test
-	public void testNearestPhiRadiansDouble() {
-		assertEquals("Wrong value for phi",0.,AMath.nearestPhiRadians(0.),TOLERANCE);
-		assertEquals("Wrong value for phi",0.,AMath.nearestPhiRadians(2*PI),TOLERANCE);
-		assertEquals("Wrong value for phi",PI,AMath.nearestPhiRadians(PI),TOLERANCE);
-		assertEquals("Wrong value for phi",0.1,AMath.nearestPhiRadians(0.1),TOLERANCE);
-		assertEquals("Wrong value for phi",2*PI-0.1,AMath.nearestPhiRadians(-0.1),TOLERANCE);
-	}
-
-	/**
-	 * Test method for {@link atlantis.utils.AMath#nearestPhiDegrees(double, double)}.
-	 */
-	@Test
-	public void testNearestPhiDegreesDoubleDouble() {
-		double phiMid = 360; // range [180,540)
-		assertEquals("Wrong value for phi",180.,AMath.nearestPhiDegrees(180.0,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",180.,AMath.nearestPhiDegrees(540.0,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",360.,AMath.nearestPhiDegrees(360.0,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",361.,AMath.nearestPhiDegrees(1.0,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",539.,AMath.nearestPhiDegrees(179.0,phiMid),TOLERANCE);
-	}
-
-	/**
-	 * Test method for {@link atlantis.utils.AMath#nearestPhiRadians(double, double)}.
-	 */
-	@Test
-	public void testNearestPhiRadiansDoubleDouble() {
-		double phiMid = 2*PI; // range [180,540)
-		assertEquals("Wrong value for phi",PI,AMath.nearestPhiRadians(PI,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",PI,AMath.nearestPhiRadians(PI,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",2*PI,AMath.nearestPhiRadians(2*PI,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",2*PI+0.1,AMath.nearestPhiRadians(0.1,phiMid),TOLERANCE);
-		assertEquals("Wrong value for phi",3*PI-0.1,AMath.nearestPhiRadians(PI-0.1,phiMid),TOLERANCE);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/atlantis/utils/ANewIdHelperTest.java b/graphics/AtlantisJava/test/src/atlantis/utils/ANewIdHelperTest.java
deleted file mode 100644
index bad4515a8e3e..000000000000
--- a/graphics/AtlantisJava/test/src/atlantis/utils/ANewIdHelperTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package atlantis.utils;
-
-import atlantis.globals.AGlobals;
-import atlantis.utils.xml.AXMLErrorHandler;
-import java.io.InputStream;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.w3c.dom.Document;
-import testutils.AtlantisInit;
-
-/**
- * Tests for the ANewIdHelper class. Tests are performed by fully 
- * decoding compact identifiers of several subsystems.
- *
- * @author Eric Jansen
- */
-public class ANewIdHelperTest {
-    
-    public ANewIdHelperTest() {}
-    
-    @BeforeClass
-    public static void setUpClass() throws Exception {
-        AtlantisInit.init();
-        String geometryBase = AGlobals.instance().getHomeDirectory() + "geometry/";
-        InputStream isIdDict = AUtilities.getFileAsStream(geometryBase + "ATLAS_IDS.xml");
-
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setValidating(true);
-        DocumentBuilder parser = factory.newDocumentBuilder();
-        parser.setErrorHandler(new AXMLErrorHandler());
-        
-        Document xmlDictDoc = parser.parse(isIdDict, geometryBase);
-        ANewIdHelper.construct(xmlDictDoc.getDocumentElement());
-        
-        System.out.println("The loaded identifier structure is:\n"
-                + ANewIdHelper.instance().getDictionary("ATLAS"));
-    }
-    
-    @Test
-    public void testPixel() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("InnerDetector/Pixel/negative_endcap/0/15/0/86/76", idHelper.getFullIdentifier(8661285809946624l));
-    }
-    
-    @Test
-    public void testSCT() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("InnerDetector/SCT/negative_endcap/1/23/2/0/683", idHelper.getFullIdentifier(137085611));
-        assertEquals("InnerDetector/SCT/positive_endcap/8/50/0/1/609", idHelper.getFullIdentifier(219756129));
-    }
-    
-    @Test
-    public void testTRT() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("InnerDetector/TRT/negative_endcap/2/2/6/7", idHelper.getFullIdentifier(270604512));
-        assertEquals("InnerDetector/TRT/negative_endcap/11/1/7/9", idHelper.getFullIdentifier(280010016));
-        assertEquals("InnerDetector/TRT/negative_barrel/9/0/18/7", idHelper.getFullIdentifier(311445728));
-        assertEquals("InnerDetector/TRT/positive_barrel/5/2/22/10", idHelper.getFullIdentifier(340875584));
-        assertEquals("InnerDetector/TRT/positive_endcap/7/10/1/13", idHelper.getFullIdentifier(376767904));
-        assertEquals("InnerDetector/TRT/positive_endcap/31/13/7/18", idHelper.getFullIdentifier(402038336));
-    }
-    
-    @Test
-    public void testLAr() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("LArCalorimeter/LArEM/negative-endcap-outer-wheel/2/1/37/72", idHelper.getFullIdentifier(3225785215439863808l));
-        assertEquals("LArCalorimeter/LArEM/positive-barrel/1/0/167/15", idHelper.getFullIdentifier(765546014));
-        assertEquals("LArCalorimeter/LArEM/negative-barrel/2/0/4/113", idHelper.getFullIdentifier(759171298));
-    }
-    
-    @Test
-    public void testTILE() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("TileCalorimeter/Barrel/positive/28/0/1/0/0", idHelper.getFullIdentifier(1149698064));
-        assertEquals("TileCalorimeter/Extended-barrel/negative/0/14/0/0/0", idHelper.getFullIdentifier(1207963136));
-    }
-    
-    @Test
-    public void testHEC() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("LArCalorimeter/LArHEC/negative-endcap-outer-wheel/1/0/5/22", idHelper.getFullIdentifier(815095808));
-        assertEquals("LArCalorimeter/LArHEC/negative-endcap-outer-wheel/2/0/6/22", idHelper.getFullIdentifier(823746560));
-        assertEquals("LArCalorimeter/LArHEC/positive-endcap-outer-wheel/2/1/2/20", idHelper.getFullIdentifier(860438528));
-        assertEquals("LArCalorimeter/LArHEC/positive-endcap-outer-wheel/3/0/8/0", idHelper.getFullIdentifier(866123776));
-        assertEquals("LArCalorimeter/LArHEC/positive-endcap-outer-wheel/3/1/3/29", idHelper.getFullIdentifier(869126144));
-    }
-    
-    @Test
-    public void testFCAL() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("LArCalorimeter/LArFCAL/negative-endcap-outer-wheel/1/4/13", idHelper.getFullIdentifier(873046016));
-        assertEquals("LArCalorimeter/LArFCAL/negative-endcap-outer-wheel/1/45/0", idHelper.getFullIdentifier(878313472));
-        assertEquals("LArCalorimeter/LArFCAL/positive-endcap-outer-wheel/1/3/0", idHelper.getFullIdentifier(906362880));
-        assertEquals("LArCalorimeter/LArFCAL/positive-endcap-outer-wheel/2/23/14", idHelper.getFullIdentifier(917487616));
-        assertEquals("LArCalorimeter/LArFCAL/positive-endcap-outer-wheel/3/15/15", idHelper.getFullIdentifier(924835840));
-    }
-
-    @Test
-    public void testMDT() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("MuonSpectrometer/BIL/-6/1/MDT/1/3/1", idHelper.getFullIdentifier(6922067811640541184l));
-        assertEquals("MuonSpectrometer/BIL/-6/2/MDT/2/2/34", idHelper.getFullIdentifier(1611748384));
-        assertEquals("MuonSpectrometer/BIL/1/5/MDT/1/2/3", idHelper.getFullIdentifier(1615597632));
-        assertEquals("MuonSpectrometer/BOL/1/5/MDT/1/2/7", idHelper.getFullIdentifier(1682706624));
-        assertEquals("MuonSpectrometer/EOL/2/3/MDT/2/1/6", idHelper.getFullIdentifier(1884438688));
-        assertEquals("MuonSpectrometer/EIS/-1/6/MDT/2/3/36", idHelper.getFullIdentifier(2050843744));
-    }
-    
-    @Test
-    public void testRPC() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("MuonSpectrometer/BML/-6/6/RPC/1/2/2/2/0/4", idHelper.getFullIdentifier(1645583372));
-    }
-    
-    @Test
-    public void testCSC() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("MuonSpectrometer/CSS/-1/1/CSC/2/4/0/6", idHelper.getFullIdentifier(2064056960));
-    }
-    
-    @Test
-    public void testTGC() throws Exception {
-        ANewIdHelper idHelper = ANewIdHelper.instance();
-        assertEquals("MuonSpectrometer/T4E/1/10/TGC/2/1/15", idHelper.getFullIdentifier(2035436656));
-    }
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/AAssert.java b/graphics/AtlantisJava/test/src/guitest/AAssert.java
deleted file mode 100644
index 0010a9594878..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/AAssert.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package guitest;
-
-import static org.junit.Assert.*;
-
-import java.util.Arrays;
-
-/**
- * Useful assertion methods for tests.
- * @author waugh
- *
- */
-public class AAssert {
-	public static void assertArrayEqualsIgnoreOrder(String message,
-			Object[] expecteds, Object[] actuals) {
-		int lengthExp = expecteds.length;
-		int lengthAct = actuals.length;
-		if (lengthAct!=lengthExp) fail(message+
-				": array lengths differed, "+
-				String.format("expected.length=%d,actual.length=%d",lengthExp,lengthAct));
-		Object[] copyExpecteds = new Object[lengthExp];
-		System.arraycopy(expecteds,0,copyExpecteds,0,lengthExp);
-		Object[] copyActuals = new Object[lengthAct];
-		System.arraycopy(actuals,0,copyActuals,0,lengthAct);
-		Arrays.sort(copyExpecteds);
-		Arrays.sort(copyActuals);
-		assertArrayEquals(message,copyExpecteds,copyActuals);
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/AtlantisGUIFixture.java b/graphics/AtlantisJava/test/src/guitest/AtlantisGUIFixture.java
deleted file mode 100644
index 5d49d4fae4e9..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/AtlantisGUIFixture.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package guitest;
-
-import java.awt.Dialog;
-import java.io.File;
-
-import org.fest.swing.core.BasicComponentFinder;
-import org.fest.swing.core.ComponentFinder;
-import org.fest.swing.core.ComponentFoundCondition;
-import org.fest.swing.core.Robot;
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.core.matcher.FrameMatcher;
-import org.fest.swing.core.matcher.JButtonMatcher;
-import org.fest.swing.data.TableCell;
-import org.fest.swing.data.TableCellByColumnId;
-import org.fest.swing.exception.ComponentLookupException;
-import org.fest.swing.fixture.DialogFixture;
-import org.fest.swing.fixture.FrameFixture;
-import org.fest.swing.fixture.JButtonFixture;
-import org.fest.swing.fixture.JFileChooserFixture;
-import org.fest.swing.fixture.JTabbedPaneFixture;
-import org.fest.swing.fixture.JTableCellFixture;
-import org.fest.swing.fixture.JTableFixture;
-import org.fest.swing.fixture.JToolBarFixture;
-import org.fest.swing.timing.Pause;
-
-import static org.junit.Assert.*;
-
-import atlantis.gui.AGUI;
-
-/**
- * Fixture for testing the Atlantis GUI (class AGUI).
- * @author waugh
- *
- */
-public class AtlantisGUIFixture extends FrameFixture {
-	private Robot robot;
-	private ComponentFinder finder;
-	private FrameFixture guiFixture;
-
-	/**
-	 * Construct and return AtlantisGUIFixture using specified robot.
-	 * @param robot the robot to use
-	 * @return fixture for the Atlantis GUI
-	 */
-	public static AtlantisGUIFixture getFixture(Robot robot) {
-		ComponentFinder finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
-		FrameMatcher matcherGuiTitle = FrameMatcher.withTitle("Atlantis GUI");
-		ComponentFoundCondition guiFound = new ComponentFoundCondition("Atlantis GUI found",
-				finder, matcherGuiTitle);
-		Pause.pause(guiFound,30000);
-		AGUI gui = (AGUI) guiFound.found();
-		return new AtlantisGUIFixture(robot,gui);
-	}
-
-	/**
-	 * Construct AtlantisGUIFixture.
-	 * @param robot
-	 */
-	public AtlantisGUIFixture(Robot robot, AGUI gui) {
-		super(robot,gui);
-		this.robot = robot;
-		this.finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
-		this.guiFixture = new FrameFixture(robot,gui);
-	}
-
-	/** Find AParametersTable for given supergroup and group */
-	protected JTableFixture findParametersTable(String superGroup, String group) {
-		JTabbedPaneFixture tabs = guiFixture.tabbedPane("parameterGroups");
-		tabs.selectTab(superGroup);
-		JTabbedPaneFixture subTabs = guiFixture.tabbedPane(superGroup);
-		subTabs.selectTab(group);
-		JTableFixture parametersTable = guiFixture.table(group);
-		return parametersTable;
-	}
-
-	/**
-	 * Find table cell containing given parameter.
-	 * @param superGroup
-	 * @param group
-	 * @param parameter
-	 * @return
-	 */
-	protected JTableCellFixture findParameterCell(String superGroup, String group, String parameter) {
-		JTableFixture table = findParametersTable(superGroup,group);
-		TableCell cellName = table.cell(parameter);
-		int row = cellName.row; // Row containing cell with specified name
-		JTableCellFixture cellValue = table.cell(TableCellByColumnId.row(row).columnId("Value"));
-		return cellValue;
-	}
-
-	/** Find button in GUI with given text */
-	protected JButtonFixture findGuiButton(String text) {
-		JButtonMatcher matcher = JButtonMatcher.withText(text);
-		return guiFixture.button(matcher);
-	}
-
-	/**
-	 * Open file using GUI
-	 * @param file event file
-	 */
-	protected void openEventFile(File file) {
-		guiFixture.menuItemWithPath("File", "Read Event Locally").click();
-		// Sometimes we have more than one "Open" dialog, but should be only one showing
-		Dialog dialogOpen = finder.find(DialogMatcher.withTitle("Open").andShowing());
-		DialogFixture fixtureDialogOpen = new DialogFixture(robot,dialogOpen);
-		JFileChooserFixture fileChooser = fixtureDialogOpen.fileChooser();
-		fileChooser.selectFile(file);
-		fileChooser.approve();
-	}
-
-	/**
-	 * Open file using GUI and fail if there is a problem
-	 * @param file event file
-	 */
-	protected void openEventFileAndCheck(File file) {
-		openEventFile(file);
-		try {
-			Dialog dialogInvalid = finder.find(DialogMatcher.withTitle("Invalid source"));
-			fail("Failed to open event: found invalid source dialog");
-		}
-		catch (ComponentLookupException e) {
-			// OK: no warning dialog!
-		}
-	}
-	
-	/**
-	 * Get a fixture for the event source tool bar.
-	 * @return
-	 */
-	public JToolBarFixture findEventSourceToolBar() {
-		return new JToolBarFixture(robot,"Atlantis event source toolbar");
-	}
-
-	/**
-	 * Get a fixture for the interactions tool bar.
-	 * @return
-	 */
-	public JToolBarFixture findInteractionToolBar() {
-		return new JToolBarFixture(robot,"Atlantis interaction toolbar");
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/AtlantisGuiTestCase.java b/graphics/AtlantisJava/test/src/guitest/AtlantisGuiTestCase.java
deleted file mode 100644
index 6c69d170207a..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/AtlantisGuiTestCase.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package guitest;
-
-import java.awt.Frame;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import org.fest.swing.core.BasicComponentFinder;
-import org.fest.swing.core.BasicRobot;
-import org.fest.swing.core.ComponentFinder;
-import org.fest.swing.core.Robot;
-import org.fest.swing.core.matcher.FrameMatcher;
-import org.fest.swing.edt.FailOnThreadViolationRepaintManager;
-import org.fest.swing.fixture.FrameFixture;
-import org.fest.swing.security.NoExitSecurityManagerInstaller;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-
-import testutils.AtlantisInit;
-import testutils.TeeOutputStream;
-import testutils.TestUtils;
-
-import atlantis.Atlantis;
-import atlantis.globals.AGlobals;
-
-public class AtlantisGuiTestCase {
-	protected Robot robot;
-	protected ComponentFinder finder;
-	protected FrameFixture canvasFixture;
-	protected AtlantisGUIFixture guiFixture;
-	ByteArrayOutputStream stdOutCopy = new ByteArrayOutputStream();
-	private static NoExitSecurityManagerInstaller noExitSecurityManagerInstaller;
-
-	/** Time [ms] to pause at end of test for easier viewing */
-	protected long pauseLength = 0;
-
-	/**
-	 * Install NoExitSecurityManager because JUnit gets upset if the forked JVM exits
-	 */
-	@BeforeClass
-	public static void setUpOnce() {
-		noExitSecurityManagerInstaller = NoExitSecurityManagerInstaller.installNoExitSecurityManager();
-	}
-
-	@AfterClass
-	public static void tearDownOnce() {
-		noExitSecurityManagerInstaller.uninstall();
-	}
-
-	@Before
-	public void setUp() {
-		startAtlantis();
-	}
-	
-	protected void startAtlantis() {
-		AtlantisInit.init();
-		String atlantisHomeDir=AGlobals.instance().getHomeDirectory();
-		String testEventsDir = atlantisHomeDir+"/test/events";
-		TestUtils.setPropertyIfNotSet("atlantis.test.events",testEventsDir);
-		
-		// Omit this for now since Atlantis main does not do set-up on EDT
-		//		FailOnThreadViolationRepaintManager.install();
-
-		finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
-		robot = BasicRobot.robotWithCurrentAwtHierarchy();
-
-		// Redirect standard output to ByteArrayOutputStream as well as normal System.out
-		TeeOutputStream teeOut = new TeeOutputStream(System.out,stdOutCopy);
-		System.setOut(new PrintStream(teeOut));
-
-		// Launch Atlantis application
-		String[] args = {"--debug","DEBUG"};
-		Atlantis.main(args);
-		// Don't use ACrashReporter to handle uncaught exceptions
-		Thread.setDefaultUncaughtExceptionHandler(null);
-
-		// Get fixtures for the GUI and Canvas
-		guiFixture = AtlantisGUIFixture.getFixture(robot);
-		FrameMatcher matcherCanvasTitle = FrameMatcher.withTitle("Atlantis Canvas");
-		// Cannot cast to ACanvas because the ACanvas is actually a JPanel that creates its own
-		// parent JFrame.
-		Frame canvas = finder.find(matcherCanvasTitle);
-		canvasFixture = new FrameFixture(robot,canvas);
-	}
-	
-	@After
-	public void tearDown() {
-		pause(pauseLength);
-	}
-
-	/** Pause for a second so can see end result on screen */
-	protected static void pause(long duration) {
-		try {
-			Thread.sleep(duration);
-		} catch (InterruptedException e) {
-			// allow to return if interrupted
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/EnumeratorParameterTest.java b/graphics/AtlantisJava/test/src/guitest/EnumeratorParameterTest.java
deleted file mode 100644
index 5b9c2fb1c649..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/EnumeratorParameterTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package guitest;
-
-import org.junit.Test;
-import org.fest.swing.fixture.JComboBoxFixture;
-import org.fest.swing.fixture.JTableCellFixture;
-
-public class EnumeratorParameterTest extends AtlantisGuiTestCase {
-
-	@Test
-	public void test() {
-		JTableCellFixture cell = guiFixture.findParameterCell("MuonDet","Track","Track Collections");
-		cell.click();
-		JComboBoxFixture comboBox = guiFixture.comboBox("Track Collections");
-		String[] contents = comboBox.contents();
-		comboBox.selectItem("All");
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/EventSourceToolBarTest.java b/graphics/AtlantisJava/test/src/guitest/EventSourceToolBarTest.java
deleted file mode 100644
index 15bb2f5481a3..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/EventSourceToolBarTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package guitest;
-
-import org.fest.swing.fixture.JToolBarFixture;
-import org.junit.Test;
-
-public class EventSourceToolBarTest extends AtlantisGuiTestCase {
-	@Test
-	public void testEventSourceToolBar() {
-		JToolBarFixture toolBarFixture = guiFixture.findEventSourceToolBar();
-		toolBarFixture.radioButton("Sequential mode").click();
-		toolBarFixture.radioButton("Loop mode").click();
-		toolBarFixture.radioButton("Random mode").click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/InteractionToolBarTest.java b/graphics/AtlantisJava/test/src/guitest/InteractionToolBarTest.java
deleted file mode 100644
index ffe8a982a409..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/InteractionToolBarTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package guitest;
-
-import java.awt.event.KeyEvent;
-
-import org.fest.swing.fixture.JComboBoxFixture;
-import org.fest.swing.fixture.JTextComponentFixture;
-import org.fest.swing.fixture.JToolBarFixture;
-import org.junit.Test;
-
-import static guitest.AAssert.*;
-
-public class InteractionToolBarTest extends AtlantisGuiTestCase {
-	@Test
-	public void testInteractionToolBar() {
-		JToolBarFixture toolBarFixture = guiFixture.findInteractionToolBar();
-
-		toolBarFixture.toggleButton("ZMR").click();
-		
-		toolBarFixture.toggleButton("RubberBand").click();
-		JComboBoxFixture rubberBandComboBox = toolBarFixture.comboBox();
-		String[] listRubberBand = rubberBandComboBox.contents();
-		String[] expectedRubberBand = {"RectangleYX","RotatedRectangle","Parallelogram",
-				"Square","XSkew","YSkew","XSlice","YSlice"};
-		assertArrayEqualsIgnoreOrder("Didn't find expected rubberband list",expectedRubberBand,listRubberBand);
-		
-		toolBarFixture.toggleButton("Pick").click();
-		JComboBoxFixture pickComboBox = toolBarFixture.comboBox();
-		String[] listPick = pickComboBox.contents();
-		String[] expectedPick = {"Event Data","Detectors"};
-		assertArrayEqualsIgnoreOrder("Didn't find expected pick list",expectedPick,listPick);
-		
-		toolBarFixture.toggleButton("SyncCursors").click();
-
-		toolBarFixture.toggleButton("FishEye").click();
-		JTextComponentFixture textBox = toolBarFixture.textBox();
-		textBox.setText("");      // deleteText() does not work
-		textBox.enterText("5.0"); // this does not press "enter", so...
-		textBox.pressAndReleaseKeys(KeyEvent.VK_ENTER); // we do it here
-		toolBarFixture.checkBox().click(); // turn off fish-eye
-		toolBarFixture.checkBox().click(); // turn it on again
-
-		toolBarFixture.toggleButton("Clock").click();
-		toolBarFixture.checkBox().click(); // turn on clock transformation
-		toolBarFixture.checkBox().click(); // turn it on again
-
-		toolBarFixture.toggleButton("Scale").click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/LoadEventFailureTest.java b/graphics/AtlantisJava/test/src/guitest/LoadEventFailureTest.java
deleted file mode 100644
index 48e2cabb35b8..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/LoadEventFailureTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package guitest;
-
-import java.awt.Dialog;
-import java.io.File;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.exception.ComponentLookupException;
-
-public class LoadEventFailureTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvent() {
-		guiFixture.openEventFile(new File("/nosuchfile"));
-		try {
-			Dialog dialogInvalid = finder.find(DialogMatcher.withTitle("Invalid source"));
-			// OK, correctly failed to open file
-		}
-		catch (ComponentLookupException e) {
-			fail("Did not find invalid source dialog when opening non-existent event file");
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/LoadEventTest.java b/graphics/AtlantisJava/test/src/guitest/LoadEventTest.java
deleted file mode 100644
index 7bfcaef27e66..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/LoadEventTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package guitest;
-
-import static org.junit.Assert.*;
-
-import java.awt.Dialog;
-import java.io.File;
-
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.exception.ComponentLookupException;
-import org.junit.Test;
-
-public class LoadEventTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvent() {
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFile(new File(eventsDirectory,"muonCollections.xml"));
-		try {
-			Dialog dialogInvalid = finder.find(DialogMatcher.withTitle("Invalid source"));
-			fail("Failed to open event: found invalid source dialog");
-		}
-		catch (ComponentLookupException e) {
-			// OK
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/LoadEventWithInvalidRecVertexDataTest.java b/graphics/AtlantisJava/test/src/guitest/LoadEventWithInvalidRecVertexDataTest.java
deleted file mode 100644
index 7cb70d7e2c55..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/LoadEventWithInvalidRecVertexDataTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package guitest;
-
-import static org.junit.Assert.*;
-
-import java.awt.Dialog;
-import java.io.File;
-
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.exception.ComponentLookupException;
-import org.junit.Test;
-
-public class LoadEventWithInvalidRecVertexDataTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvent() {
-		String output = stdOutCopy.toString();
-		assertTrue("Output does not contain \"Atlantis Ready\"",output.contains("Atlantis Ready"));
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFile(new File(eventsDirectory,"rvxInconsistentEvent.xml"));
-		try {
-			Dialog dialogInvalid = finder.find(DialogMatcher.withTitle("Invalid source"));
-			fail("Failed to open event: found invalid source dialog");
-		}
-		catch (ComponentLookupException e) {
-			// OK
-		}
-		output = stdOutCopy.toString();
-		assertTrue("Failed to detect inconsistent track numbers",output.contains("RVx: numbers of tracks are inconsistent."));
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/LoadEventWithValidRecVertexDataTest.java b/graphics/AtlantisJava/test/src/guitest/LoadEventWithValidRecVertexDataTest.java
deleted file mode 100644
index 846af19bf93d..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/LoadEventWithValidRecVertexDataTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package guitest;
-
-import static org.junit.Assert.*;
-
-import java.awt.Dialog;
-import java.io.File;
-
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.exception.ComponentLookupException;
-import org.junit.Test;
-
-public class LoadEventWithValidRecVertexDataTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvent() {
-		String output = stdOutCopy.toString();
-		assertTrue("Output does not contain \"Atlantis Ready\"",output.contains("Atlantis Ready"));
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFile(new File(eventsDirectory,"rvxEvent.xml"));
-		try {
-			Dialog dialogInvalid = finder.find(DialogMatcher.withTitle("Invalid source"));
-			fail("Failed to open event: found invalid source dialog");
-		}
-		catch (ComponentLookupException e) {
-			// OK
-		}
-		output = stdOutCopy.toString();
-		assertFalse("Inconsistent data incorrectly detected",output.contains("RVx: numbers of tracks are inconsistent."));
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/LoadEventsManyTimesTest.java b/graphics/AtlantisJava/test/src/guitest/LoadEventsManyTimesTest.java
deleted file mode 100644
index d395260b2f4a..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/LoadEventsManyTimesTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package guitest;
-
-import java.io.File;
-import org.junit.Test;
-import org.fest.swing.fixture.JButtonFixture;
-import org.fest.swing.fixture.JToolBarFixture;
-
-public class LoadEventsManyTimesTest extends AtlantisGuiTestCase {
-
-	private static final int numEvents = 9;
-	private static final int numRepeats = 3;
-	
-	@Test(timeout=45000)
-	public void readEvents() {
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFileAndCheck(new File(eventsDirectory,"masterclassMuonEvents.zip"));
-				JToolBarFixture toolBarFixture = guiFixture.findEventSourceToolBar();
-				JButtonFixture nextButton = toolBarFixture.button("nextButton");
-				JButtonFixture previousButton = toolBarFixture.button("previousButton");
-  		for (int i=0; i<numRepeats; i++) {
-			for (int iEvent=0; iEvent<(numEvents-1); iEvent++) {
-				System.out.println("Click number "+iEvent);
-				nextButton.click();
-			}
-			for (int iEvent=0; iEvent<(numEvents-1); iEvent++) {
-				System.out.println("Click number "+iEvent);
-				previousButton.click();
-			}
-		}
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsEmptyTest.java b/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsEmptyTest.java
deleted file mode 100644
index dddeb873b61f..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsEmptyTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package guitest;
-
-import java.io.File;
-import org.junit.Test;
-import org.fest.swing.fixture.JComboBoxFixture;
-import org.fest.swing.fixture.JTableCellFixture;
-import static guitest.AAssert.*;
-
-/**
- * Check list of muon track collections for Trac bug #507
- * Should be empty in empty event!
- * @author waugh
- *
- */
-public class MuonTrackCollectionsEmptyTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvents() {
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFileAndCheck(new File(eventsDirectory,"muonCollections.xml"));
-		checkMuonTrackCollections("ConvertedMBoyTracks",
-				"ConvertedMBoyMuonSpectroOnlyTracks",
-				"All");
-		guiFixture.openEventFileAndCheck(new File(eventsDirectory,"emptyEvent.xml"));
-		checkMuonTrackCollections("None");
-	}
-	
-	private void checkMuonTrackCollections(String... expected) {
-		String[] contents = getMuonTrackCollections();
-		assertArrayEqualsIgnoreOrder("Didn't find expected collections",expected,contents);
-	}
-
-	private String[] getMuonTrackCollections() {
-		JTableCellFixture cell = guiFixture.findParameterCell("MuonDet","Track","Track Collections");
-		cell.click();
-		JComboBoxFixture comboBox = guiFixture.comboBox("Track Collections");
-		String[] contents = comboBox.contents();
-		return contents;
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsTest.java b/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsTest.java
deleted file mode 100644
index 8ee5814913a4..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/MuonTrackCollectionsTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package guitest;
-
-import java.io.File;
-import org.junit.Test;
-import org.fest.swing.fixture.JComboBoxFixture;
-import org.fest.swing.fixture.JTableCellFixture;
-import static guitest.AAssert.*;
-
-/**
- * Check list of muon track collections for Trac bug #507
- * @author waugh
- *
- */
-public class MuonTrackCollectionsTest extends AtlantisGuiTestCase {
-	@Test
-	public void loadEvents() {
-		String eventsDirectory = System.getProperty("atlantis.test.events");
-		guiFixture.openEventFileAndCheck(new File(eventsDirectory,"muonCollections.xml"));
-		checkMuonTrackCollections("ConvertedMBoyTracks",
-				"ConvertedMBoyMuonSpectroOnlyTracks",
-				"All");
-		guiFixture.openEventFileAndCheck(new File(eventsDirectory,"muonCollections2.xml"));
-		checkMuonTrackCollections("ConvertedMBoyTracks",
-				"ConvertedMuIdCBTracks",
-				"All");
-	}
-	
-	private void checkMuonTrackCollections(String... expected) {
-		String[] contents = getMuonTrackCollections();
-		assertArrayEqualsIgnoreOrder("Didn't find expected collections",expected,contents);
-	}
-
-	private String[] getMuonTrackCollections() {
-		JTableCellFixture cell = guiFixture.findParameterCell("MuonDet","Track","Track Collections");
-		cell.click();
-		JComboBoxFixture comboBox = guiFixture.comboBox("Track Collections");
-		String[] contents = comboBox.contents();
-		return contents;
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/OverlayTest.java b/graphics/AtlantisJava/test/src/guitest/OverlayTest.java
deleted file mode 100644
index d35ca958746d..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/OverlayTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package guitest;
-
-import org.junit.Test;
-import org.fest.swing.data.TableCellByColumnId;
-import org.fest.swing.fixture.JTableCellFixture;
-import org.fest.swing.fixture.JTableFixture;
-
-public class OverlayTest extends AtlantisGuiTestCase {
-
-	@Test
-	public void testOverlay() {
-		JTableFixture table = guiFixture.findParametersTable("Appearance","Logo");
-		int row = 0;
-		JTableCellFixture check = table.cell(TableCellByColumnId.row(row).columnId("Name"));
-		//check the box to show logo
-		check.click();
-		//change the x position
-		JTableCellFixture logox = guiFixture.findParameterCell("Appearance","Logo", "Logo X");
-		logox.enterValue("0.5\n");
-		//resize
-		JTableCellFixture size = guiFixture.findParameterCell("Appearance","Logo", "Logo Size");
-		size.enterValue("0.7\n");
-		size.click();
-		//now uncheck the box
-		check.click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/ProjectionsTest.java b/graphics/AtlantisJava/test/src/guitest/ProjectionsTest.java
deleted file mode 100644
index 3b32476ab894..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/ProjectionsTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package guitest;
-
-import org.fest.swing.fixture.JPanelFixture;
-import org.junit.Test;
-
-import static atlantis.utils.AMath.*; // for Greek letters
-
-public class ProjectionsTest extends AtlantisGuiTestCase {
-	@Test
-	public void testWindowControls() {
-		JPanelFixture windowControls = guiFixture.panel("windowControl");
-		windowControls.label("W").click();
-		guiFixture.findParametersTable("Projection","YX").click();
-		guiFixture.findParametersTable("Projection",PHI+ETA).click();
-		guiFixture.findParametersTable("Projection",RHO+"Z").click();
-		guiFixture.findParametersTable("Projection",PHI+RHO).click();
-		guiFixture.findParametersTable("Projection",PHI+"Z").click();
-		guiFixture.findParametersTable("Projection","X'Z").click();
-		guiFixture.findParametersTable("Projection","Y'Z").click();
-		guiFixture.findParametersTable("Projection","3DBox").click();
-		guiFixture.findParametersTable("Projection","LegoPlot").click();
-		guiFixture.findParametersTable("Projection","Event Info").click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/ReadNextAndPreviousEventTest.java b/graphics/AtlantisJava/test/src/guitest/ReadNextAndPreviousEventTest.java
deleted file mode 100644
index 4849224a4a49..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/ReadNextAndPreviousEventTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package guitest;
-
-import java.awt.Dialog;
-
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.core.matcher.JButtonMatcher;
-import org.fest.swing.fixture.DialogFixture;
-import org.fest.swing.fixture.JButtonFixture;
-import org.fest.swing.fixture.JToolBarFixture;
-import org.junit.Test;
-
-public class ReadNextAndPreviousEventTest extends AtlantisGuiTestCase {
-
-	@Test
-	public void readNextThenPreviousEvent() {
-		JToolBarFixture toolBarFixture = guiFixture.findEventSourceToolBar();
-		JButtonFixture nextButton = toolBarFixture.button("nextButton");
-		JButtonFixture previousButton = toolBarFixture.button("previousButton");
-		nextButton.click();
-		previousButton.click();
-		guiFixture.menuItemWithPath("File", "Exit").click();
-		DialogMatcher matcherConfirmExit = DialogMatcher.withTitle("Exit Atlantis");
-		Dialog dialogConfirmExit = finder.find(matcherConfirmExit);
-		DialogFixture fixtureDialogConfirmExit = new DialogFixture(robot,dialogConfirmExit);
-	//	fixtureDialogConfirmExit.button(JButtonMatcher.withText("Yes")).click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/StartAndExitTest.java b/graphics/AtlantisJava/test/src/guitest/StartAndExitTest.java
deleted file mode 100644
index ec93dce67c43..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/StartAndExitTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package guitest;
-
-import java.awt.Dialog;
-import org.junit.Test;
-import org.fest.swing.core.matcher.DialogMatcher;
-import org.fest.swing.core.matcher.JButtonMatcher;
-import org.fest.swing.fixture.DialogFixture;
-
-public class StartAndExitTest extends AtlantisGuiTestCase {
-
-	@Test
-	public void atlantisStarts() {
-		guiFixture.menuItemWithPath("File", "Exit").click();
-		DialogMatcher matcherConfirmExit = DialogMatcher.withTitle("Exit Atlantis");
-		Dialog dialogConfirmExit = finder.find(matcherConfirmExit);
-		DialogFixture fixtureDialogConfirmExit = new DialogFixture(robot,dialogConfirmExit);
-		fixtureDialogConfirmExit.button(JButtonMatcher.withText("Yes")).click();
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/guitest/TabsTest.java b/graphics/AtlantisJava/test/src/guitest/TabsTest.java
deleted file mode 100644
index 11ba9148e3b5..000000000000
--- a/graphics/AtlantisJava/test/src/guitest/TabsTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package guitest;
-
-import org.junit.Test;
-import org.fest.swing.fixture.JTableFixture;
-
-public class TabsTest extends AtlantisGuiTestCase {
-
-	@Test
-	public void testTabs() {
-		JTableFixture table = guiFixture.findParametersTable("MuonDet","Segment");
-		// Click on cell: does nothing but checks we have found required cell
-		table.cell(table.cell("Segment Collections")).click();
-		guiFixture.findParametersTable("Projection","YX");
-		guiFixture.findParametersTable("Data","Data");
-		guiFixture.findParametersTable("Cuts","Calo");
-		guiFixture.findParametersTable("InDet","SpacePoint");
-		guiFixture.findParametersTable("Calo","HEC");
-		guiFixture.findParametersTable("MuonDet","MDT");
-		guiFixture.findParametersTable("Objects","Muon");
-		guiFixture.findParametersTable("Detector","Geo");
-		guiFixture.findParametersTable("Appearance","Logo");
-	}
-}
diff --git a/graphics/AtlantisJava/test/src/testutils/AtlantisInit.java b/graphics/AtlantisJava/test/src/testutils/AtlantisInit.java
deleted file mode 100644
index d1732aec9f84..000000000000
--- a/graphics/AtlantisJava/test/src/testutils/AtlantisInit.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package testutils;
-
-import atlantis.Atlantis;
-import atlantis.globals.AGlobals;
-
-/**
- * Do Atlantis initialization for tests: things that would be set up by main() in the
- * full application, and require access to protected Atlantis members.
- * 
- * @author waugh
- *
- */
-public class AtlantisInit extends Atlantis {
-
-	public static void init() {
-	      String homeDirectory = Atlantis.getHomeDirectory();
-	      AGlobals.instance().setHomeDirectory(homeDirectory);
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/testutils/TeeOutputStream.java b/graphics/AtlantisJava/test/src/testutils/TeeOutputStream.java
deleted file mode 100644
index e490cc19821d..000000000000
--- a/graphics/AtlantisJava/test/src/testutils/TeeOutputStream.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package testutils;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Wraps any number of OutputStreams and directs input to all of them.
- * @author waugh
- *
- */
-public class TeeOutputStream extends OutputStream {
-	private List<OutputStream> streams;
-	
-	/**
-	 * Create a TeeOutputStream that writes to the given OutputStreams.
-	 * @param outputStreams the OutputStreams to be wrapped
-	 */
-	public TeeOutputStream(OutputStream... outputStreams) {
-		streams = new ArrayList<OutputStream>();
-		for (OutputStream stream : outputStreams) {
-			streams.add(stream);
-		}
-	}
-	
-	@Override
-	public void write(int b) throws IOException {
-		for (OutputStream stream : streams) {
-			stream.write(b);
-		}
-	}
-
-}
diff --git a/graphics/AtlantisJava/test/src/testutils/TestUtils.java b/graphics/AtlantisJava/test/src/testutils/TestUtils.java
deleted file mode 100644
index d9b580329146..000000000000
--- a/graphics/AtlantisJava/test/src/testutils/TestUtils.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package testutils;
-
-public class TestUtils {
-
-	/**
-	 * Set system property if it doesn't already have a value.
-	 * Useful in providing sensible defaults for properties set in build file when
-	 * using Ant.
-	 * @param key
-	 * @param value
-	 */
-	public static void setPropertyIfNotSet(String key, String value) {
-		String old = System.getProperty(key);
-		if (old==null) System.setProperty(key,value);
-	}
-
-}
-- 
GitLab


From c469690c7da9a12b824b9056ef230c57c0eb7404 Mon Sep 17 00:00:00 2001
From: Ben Nachman <benjamin.philip.nachman@cern.ch>
Date: Fri, 15 Feb 2019 14:44:49 -0800
Subject: [PATCH 002/163] init

---
 .../RadDamage/HamburgModel/README.md          |  33 +
 .../HamburgModel/data_processing.cpp          | 770 ++++++++++++++++++
 .../RadDamage/HamburgModel/output             | Bin 0 -> 211600 bytes
 .../HamburgModel/temp_rad_data/converter      | Bin 0 -> 78624 bytes
 .../temp_rad_data/profile_combiner.cpp        | 380 +++++++++
 .../temp_rad_data/temp_IBL_2015-jan2018.txt   |   0
 6 files changed, 1183 insertions(+)
 create mode 100644 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
 create mode 100644 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
 create mode 100755 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output
 create mode 100755 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter
 create mode 100644 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp
 create mode 100644 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
new file mode 100644
index 000000000000..6271ead6172e
--- /dev/null
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
@@ -0,0 +1,33 @@
+Original author: Julien Beyer, 2019 (https://gitlab.cern.ch/jbeyer/RadDamSim)
+
+The code in data_processing.cpp is a c++ implementation of the Hamburg model of radiation damage. It calculates the effective doping concentration based on an introduction of stable/decaying acceptors and the removal of donors due to irradiation. Moreover, it handles the annealing processes depending in the temperature. According to the effective doping concentration, the depletion voltage is calculated.
+Besides the depletion voltage, the leakage current (inclusive alpha parameter) is calculated based on the Hamburg model. Again, leakage current increase due to irradiation and decrease due to annealing is handled. Two different options for the temperature averaging are available (use_CMS_paper_alpha0).
+
+In order to simulate all of these properties, a profile of irradiation dose and temperature is necessary. The profile has to have the following format:
+
+duration (in seconds!!!!!!!!!, integer) / temperature in K (float) / dose rate in neq/cm2s (integer !)
+
+Different examples are available in the temp_rad_data folder. Besides that, a program to create new profiles from two given temperature and irradiation profiles is available in this folder (help included in the cpp file).
+
+As a prerequisite make sure that Root (for plotting, tested with version 6.06) and Boost (for Date handling, tested with version 1.62) as well as a c++ 11 compatible compiler are installed. Now, the program can be compiled with:
+
+g++ data_processing.cpp -I /path/to/boost/boost_1_62_0 -Wall -std=c++11 -o output `root-config --cflags` `root-config --libs`
+
+After compilation the program can be called with:
+
+./output temp_rad_data/my_profile.txt
+
+By default, a variety of pdf files is generated and all corresponding root histograms are stored in a single root file. Furthermore, by default, the pdf files will be overwritten and the histograms will be added to the existing root file - this can be changed in the first lines of the code, a unique naming scheme based on the system clock is available!
+
+Some variables might be changed in the first part of the code, apart from that, no adaptions should be necessary.
+
+Attention:  
+1.duration in the profile file HAS to be dividable by global timestep (parameter in the code, default=1) ->Integer result required for the ratio of duration and global time step
+
+2.profile file may not have additional (even/especially empty) lines after the last line or in the beginning
+
+3.the value for the global_layer_conversion has to be changed in order to fit to another layer (parameter transforms luminosity in neq) eg: B-Layer: 2.5e12, IBL 6e12
+
+4.due to some computational reasons the final luminosity might not be correct. The fluence (in neq/cm2) however, should be exact.
+
+5. to change from one detector type to another (e.g. for a different layer in the detector), change mainly 3 things: thickness (200 for IBL and 250 for PIXEL) and global_layer_conversion (global values) and Ndonor (different for PIXEL and IBL)
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
new file mode 100644
index 000000000000..80abb6405a80
--- /dev/null
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
@@ -0,0 +1,770 @@
+/*
+Compile Code with: g++ data_processing.cpp -I /path/to/boost/boost_1_62_0 -Wall -std=c++11 -o output `root-config --cflags` `root-config --libs`
+
+Requirements: Root (for plotting) and Boost (for Date handling) have to be installed
+
+Call program with 1 Arguments:  1. name of the file with the temperature/radiation profile (you may want to uncomment the gA,Y,C to be read in again as additional parameters, around line 686)
+
+Radiation and temperature profile have to fulfil the following scheme: duration (in seconds!!!!!!!!!) / temperature in K / irradiation in neq/cm2s (ALL have to be integer !)
+
+Attention:  timesteps in the profile file HAVE to be devideable by global timestep ->Integer result required
+            profile files may not have additional (even/especially empty) lines after the last line
+
+Attention 2: the value for the global_layer_conversion has to be changed in order to fit to another layer (parameter transforms luminosity in neq) eg: B-Layer: 2.5e12, IBL 6e12
+
+Attention 3: to change from one detector type to another, change mainly 3 things: thickness and global_layer_conversion (global values) and Ndonor
+*/
+
+
+#include <iostream>			// Basic IO
+#include <fstream>			// Read and write files
+#include <cstdlib>			// convert arguments of function call into int, float,...
+#include <string>
+#include <vector>
+#include <math.h>           		// for fabs()
+#include <sstream>         		// to get string into stream
+//#include <TH2F.h>           		// root stuff for file reading
+#include <TFile.h>          		// more root stuff
+//#include <TH2D.h>           		// root stuff for file reading
+#include <TCanvas.h>
+#include <TROOT.h>
+#include <TGraphErrors.h>
+#include <TVector.h>
+#include <TStyle.h>
+#include <TAxis.h>
+#include <TF1.h>
+#include <TMath.h>
+#include <TLine.h>
+#include <TH1.h>
+#include <cmath>
+#include "TDatime.h"
+#include <time.h>
+#include <ctime>
+#include <boost/date_time/gregorian/gregorian.hpp>
+
+using namespace std;
+using namespace boost::gregorian;
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+bool use_CMS_paper_alpha0 = false; //if false: temperature averaging for leakage current calculation a la Moll (theta function for time scale change), if true: use CMS approach of temperature average (attention: constants can only be changed directly in the code in this case)
+
+bool debug=false;                                    // additional debugging console outputs
+bool plot_pdf=true;                                  // plots are by default saved as root file, but can also be directly exported as pdf
+bool overwrite_files=true;                           // false = append internal clock identifier to file name, false = overwrite pdfs, append root files // files are by default created with a unique name depending on the internal clock and you can switch it of here such that pdf files are overwritten and the root file is extended (old plots will stay in the root file as well)
+double timestep=1;                                   // step size is 1 second, do not change this!
+double donorremovalfraction=0.99;                    // fraction of donors which can be removed by donor removal
+double userTref=273.15;                              // set a reference temperature for the volume corrected leakage current plot (it will only effect this one plot!) Now: implemented!
+double bandGap=1.21;                                 // eV used for scaling temperatures
+
+string output_file_name = "simulation_results";      // set unique file name for each simulation
+
+date d(2015,May,1);                                  // IBL     //set a date for the plots to begin (to be correct it has to be equal to the beginning of your (!) temp/irr profile)
+//date d(2011,Feb,11);                               // PIXEL
+
+
+const double Ndonor_0 = 1.7e12;                      // IBL       // initial donor concentration (right now the code only works for originally n-type bulk material!)
+//const double Ndonor_0 = 1.4e12;                    // B-Layer Layer1/2 Disks
+
+double thickness=200;                                // IBL       // sensor thickness
+//double thickness=250;                              // B-Layer Layer1/2 Disks
+
+//double global_layer_conversion=0.92e12;            // Layer 1    //conversion factor from luminosity to neq (1fb-1=2.3e12neq/cm2) - is used only for computation of total luminosity, will be wrong if there are multiple conversion factor in the original profiles as for example due to different center of mass energies
+//double global_layer_conversion=1.1e12;             // L1 average
+//double global_layer_conversion=0.571e12;           // Layer 2
+//double global_layer_conversion=0.7e12;             // Layer 2 average
+//double global_layer_conversion=0.582e12;           // Disks
+double global_layer_conversion=6.262e12;             // IBL
+//double global_layer_conversion=2.8e12;//2.929e12;  // B-Layer
+
+int limit_file_size_input = 0;                       // how many lines should be read from the profile, 0 for everything
+
+float DoseRateScaling=1.;                            // this parameter is multiplied to all fluence rates from the input profile
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Do not change things below this line without thinking carefully!
+
+//Definition of Hamburg model depletion voltage functions
+
+TF1 *Naccept_rev_TF1 = new TF1("Naccept_rev_TF1","[0]*[1]*(1-TMath::Exp(-[2]*x))/[2] + [3]*TMath::Exp(-[2]*x)",0,10000000);
+TF1 *Naccept_const_TF1 = new TF1("Naccept_const_TF1","[0] * [1]*x",0,10000000);
+TF1 *Nneutrals_rev_TF1 = new TF1("Ndonor_rev_TF1","[0]*[1]*(1-TMath::Exp(-[2]*x))/[2] + [3]*TMath::Exp(-[2]*x)",0,10000000);
+TF1 *Ndonor_const_TF1 = new TF1("Ndonor_const_TF1","-[0]*(1-TMath::Exp(-[1]*[2]*x))",0,10000000);
+
+TF1 *Naccept_rev_TF1_approx = new TF1("Naccept_rev_TF1","[0]*[1]*x + [3]*TMath::Exp(-[2]*x)",0,10000000);
+TF1 *Ndonor_neutrals_rev_TF1_approx = new TF1("Ndonor_rev_TF1","[0]*[1]*x + [3]*TMath::Exp(-[2]*x)",0,10000000);
+
+TF1 *Ndonor_TF1 = new TF1("Ndonor_TF1","[0]*[1]/[2] * ([2]*x+TMath::Exp(-[2]*x)-1) +[3]*(1-TMath::Exp(-[2]*x)) ",0,10000000);
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+struct DataElement
+{
+    int duration;
+    float temperature;
+    long int dose_rate;
+};
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//calculate depletion voltage from given effective doping concentration
+
+double NtoV_function(double doping_conc)
+{
+    return 1.6021766208e-13/(2*11.68*8.854187817)*fabs(doping_conc)*thickness*thickness;                // q/2*epsilon*epsilon_0 * Neff*D^2
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+class Annealing_constants {                                         // Class to store a set of annealing specific constants and compute temperature dependent values
+private:
+    double gA;
+    double gY;
+    double gC;
+    double ka;
+    double ky1;
+    double Ea;
+    double Ey;
+    double cc;
+
+public:
+    Annealing_constants(double,double,double,double,double,double,double,double);
+    double get_gA(int) const;
+    double get_gY(int) const;
+    double get_gC(int) const;
+    double get_ka(int) const;
+    double get_ky1(int) const;
+    double get_Ea() const;
+    double get_Ey() const;
+    double get_cc() const;
+};
+
+Annealing_constants::Annealing_constants(double a ,double b ,double c ,double d ,double e ,double f ,double g , double h)
+{
+    gA=a ;
+    gY=b ;
+    gC=c ;
+    ka=d ;
+    ky1=e ;
+    Ea=f ;
+    Ey=g ;
+    cc=h ;
+}
+
+double Annealing_constants::get_gA(int T) const
+{
+    return gA;
+}
+
+double Annealing_constants::get_gY(int T) const
+{
+    return gY;
+}
+
+double Annealing_constants::get_gC(int T) const
+{
+    return gC;
+}
+
+double Annealing_constants::get_ka(int T) const
+{
+    return ka*exp(-Ea/(8.6173303e-5*(double)T));
+    //return ka;
+}
+
+double Annealing_constants::get_ky1(int T) const
+{
+    return ky1*exp(-Ey/(8.6173303e-5*(double)T));
+    //return ky1;
+}
+
+double Annealing_constants::get_Ea() const
+{
+    return Ea;
+}
+
+double Annealing_constants::get_Ey() const
+{
+    return Ey;
+}
+
+double Annealing_constants::get_cc() const
+{
+    return cc;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// leakage current constants will be stored in this struct
+
+struct leakage_current_consts
+{
+  double alpha_1;
+  double alpha_0_star;
+  double beta;
+  double k01;
+  double E1;
+  double E1_star;
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// all atributes of a sensor (like irradiation, doping concentration, leakage currents, etc) will be stored in this class
+
+class Sensor                    //Class to handle Sensors
+{
+private:							//Content of a sensor
+	double Nacceptor;
+	double Ndonor;
+  double Ndonor_const;
+  double Nacceptor_reversible;
+  double Nneutral_reversible;
+  double Nacceptor_stable_constdamage;
+  double Ndonor_stable_donorremoval;
+  double Nacceptor_stable_reverseannealing;
+
+	int Temperature;
+  vector<vector<double>> leakage_current_alpha;
+  vector<vector<double>> time_history;
+  vector<double> G_i;
+  vector<double> leakage_current;
+  double volume;
+  vector<double> alpha_vec;
+  vector<double> powerconsumption;
+  vector<double> inverse_weighted_temp;
+
+
+public:
+	Sensor(double, double, int, double, double);		    //Constructor
+  Sensor();
+	double get_Neff() const;
+  void set_Nacceptor(double);
+  void set_Ndonor(double);
+  double get_Nacceptor() const;
+  double get_Ndonor() const;
+  void set_temp(int);
+  double get_temp() const;
+  void irradiate(leakage_current_consts,Annealing_constants, long int, float, long double);
+  vector<double> get_G_i() const;
+  vector<double> get_leakage_current() const;
+  vector<double> get_alpha_vec() const;
+  vector<double> get_powerconsumption() const;
+};
+
+Sensor::Sensor( double a, double b, int c, double d, double e)	//Constructordefinition
+{
+  Nacceptor=a;
+  Ndonor=b;
+  Temperature=c;
+  Nacceptor_reversible=d;
+  Nneutral_reversible=e;
+}
+
+Sensor::Sensor()	//Constructordefinition
+{
+  Nacceptor=0;
+  Ndonor=Ndonor_0;
+  Temperature=0;
+  Nneutral_reversible=0;
+  Nacceptor_reversible=0;
+  Nneutral_reversible=0;
+  volume= 0.135;
+  Nacceptor_stable_constdamage=0;
+  Ndonor_stable_donorremoval=donorremovalfraction*fabs(Nacceptor-Ndonor);
+  Ndonor_const=Ndonor-Ndonor_stable_donorremoval;
+  Nacceptor_stable_reverseannealing=0;
+}
+
+double Sensor::get_Neff() const
+{
+	return Nacceptor-Ndonor;
+}
+
+double Sensor::get_temp() const
+{
+  return Temperature;
+}
+
+void Sensor::set_temp(int value)
+{
+  Temperature=value;
+  return;
+}
+
+double Sensor::get_Nacceptor() const
+{
+  return Nacceptor;
+}
+
+double Sensor::get_Ndonor() const
+{
+  return Ndonor;
+}
+
+void Sensor::set_Nacceptor(double new_value)
+{
+  Nacceptor=new_value;
+  return;
+}
+
+void Sensor::set_Ndonor(double new_value)
+{
+  Ndonor=new_value;
+  return;
+}
+
+vector<double> Sensor::get_G_i() const
+{
+  return G_i;
+}
+
+vector<double> Sensor::get_leakage_current() const
+{
+  return leakage_current;
+}
+
+vector<double> Sensor::get_alpha_vec() const
+{
+  return alpha_vec;
+}
+
+vector<double> Sensor::get_powerconsumption() const
+{
+  return powerconsumption;
+}
+
+void Sensor::irradiate(leakage_current_consts leconsts, Annealing_constants constants,long int phi, float t, long double totalDose)
+{
+  //t=t*3600;                                                                     //conversion from hours to seconds
+  double a=1e-30;
+//calculating the effective doping concentration
+
+if(debug) cout << t<<" "<< constants.get_gA(Temperature)<<" "<<phi<<" "<<constants.get_ka(Temperature)<<" "<<Nacceptor<<" "<< constants.get_gC(Temperature)<<" "<< constants.get_gY(Temperature)<<" "<< constants.get_ky1(Temperature) <<" "<<Ndonor <<endl;
+
+  Naccept_rev_TF1->SetParameter(0,constants.get_gA(Temperature));
+  Naccept_rev_TF1->SetParameter(1,phi);
+  Naccept_rev_TF1->SetParameter(2,constants.get_ka(Temperature));
+  Naccept_rev_TF1->SetParameter(3,Nacceptor_reversible);
+
+  Naccept_rev_TF1_approx->SetParameter(0,constants.get_gA(Temperature));
+  Naccept_rev_TF1_approx->SetParameter(1,phi);
+  Naccept_rev_TF1_approx->SetParameter(2,constants.get_ka(Temperature));
+  Naccept_rev_TF1_approx->SetParameter(3,Nacceptor_reversible);
+
+  Naccept_const_TF1->SetParameter(0,constants.get_gC(Temperature));
+  Naccept_const_TF1->SetParameter(1,phi);
+
+  Nneutrals_rev_TF1->SetParameter(0,constants.get_gY(Temperature));
+  Nneutrals_rev_TF1->SetParameter(1,phi);
+  Nneutrals_rev_TF1->SetParameter(2,constants.get_ky1(Temperature));
+  Nneutrals_rev_TF1->SetParameter(3,Nneutral_reversible);
+
+  Ndonor_neutrals_rev_TF1_approx->SetParameter(0,constants.get_gY(Temperature));
+  Ndonor_neutrals_rev_TF1_approx->SetParameter(1,phi);
+  Ndonor_neutrals_rev_TF1_approx->SetParameter(2,constants.get_ky1(Temperature));
+  Ndonor_neutrals_rev_TF1_approx->SetParameter(3,Nneutral_reversible);
+
+  Ndonor_const_TF1->SetParameter(0,Ndonor_stable_donorremoval);
+  Ndonor_const_TF1->SetParameter(1,constants.get_cc());
+  Ndonor_const_TF1->SetParameter(2,phi);
+
+  Ndonor_TF1->SetParameter(0,constants.get_gY(Temperature));
+  Ndonor_TF1->SetParameter(1,phi);
+  Ndonor_TF1->SetParameter(2,constants.get_ky1(Temperature));
+  Ndonor_TF1->SetParameter(3,Nneutral_reversible);
+
+  if(constants.get_ka(Temperature)>a && constants.get_ky1(Temperature)>a)
+  {
+    Nacceptor_reversible             =  Naccept_rev_TF1->Eval(t);
+    Nacceptor_stable_constdamage     +=  Naccept_const_TF1->Eval(t);
+    Nneutral_reversible              =  Nneutrals_rev_TF1->Eval(t);
+    Ndonor_stable_donorremoval       += Ndonor_const_TF1->Eval(t);
+    Nacceptor_stable_reverseannealing   +=  Ndonor_TF1->Eval(t);
+  }
+  else
+  {
+    cout << "Potential numerical problem due to ultra low temp and therby caused very small ky1 and ka values. Using approach in order to perform calculation. In general, no problem!"<<endl;
+
+    Nacceptor_reversible           =  Naccept_rev_TF1_approx->Eval(t);
+    Nacceptor_stable_constdamage   +=  Naccept_const_TF1->Eval(t);
+    Nneutral_reversible            =  Ndonor_neutrals_rev_TF1_approx->Eval(t);
+    Ndonor_stable_donorremoval     += Ndonor_const_TF1->Eval(t);
+    Nacceptor_stable_reverseannealing +=  Ndonor_TF1->Eval(t);
+  }
+
+  Nacceptor =  Nacceptor_reversible + Nacceptor_stable_constdamage + Nacceptor_stable_reverseannealing;
+  Ndonor    =  Ndonor_const         + Ndonor_stable_donorremoval;
+
+//calculating the leackage current in the following part
+
+  vector<double> tmp(3);
+  vector<double> tmp2(2);
+  vector<double> tmp3(2);
+
+  tmp3.at(0)=0;
+  tmp3.at(1)=0;
+
+//////////////////////////////
+
+  double G_i_tmp=0;   // G_i_tmp needs to be outside of the if clause to be existend also afterwards when it is pushed back in the G_i vector, can be put back to pos1 after finished with the if clauses
+
+  if(use_CMS_paper_alpha0)
+    {
+      double CMS_alpha0_c1=-8.9e-17;
+      double CMS_alpha0_c2=4.6e-14;
+      double CMS_beta=2.9e-18;
+
+      double inverse_weighted_temp_tmp=0;
+      inverse_weighted_temp_tmp = t/(double)Temperature;
+      inverse_weighted_temp.push_back(inverse_weighted_temp_tmp);
+
+      tmp.at(0)=phi*t*leconsts.alpha_1;
+      tmp.at(1)=phi*t;                                                          //needs to be updated at every itaration in the while loop since the averaged temperature needs to be recalculated
+      tmp.at(2)=phi*t*CMS_beta;
+
+      leakage_current_alpha.push_back(tmp);
+
+      tmp2.at(0)=t*leconsts.k01*exp(-leconsts.E1/(8.6173303e-5*(double)Temperature));             // time comes in seconds and k01 is seconds-1 so units are fine here
+      tmp2.at(1)=t / 60.0;                                                      // t/60 to convert time from seconds to minutes since this is the proposed unit here
+
+      if(time_history.size() > 0.1) tmp3=time_history.at(time_history.size()-1);
+
+      tmp2.at(0)+=tmp3.at(0);
+      tmp2.at(1)+=tmp3.at(1);
+
+      time_history.push_back(tmp2);
+
+
+      int i=0;
+      double temperature_average_i=0;
+
+      while(i<leakage_current_alpha.size())
+        {
+          temperature_average_i=0;
+
+          for(int j=i; j<leakage_current_alpha.size(); j++)                     //calculate the average inverse temperature weighted with the individual time from the moment of irradiation (i) to now (leakage_current_alpha.size())
+            {
+              temperature_average_i += inverse_weighted_temp.at(j);
+            }
+
+          if(i>=1)                                                              //for i=0 the time is not the difference but just the total time
+          {
+            temperature_average_i /= (double)(time_history.back().at(1)*60.0-time_history.at(i-1).at(1)*60.0);
+            G_i_tmp += leakage_current_alpha.at(i).at(0) * exp(-(time_history.back().at(0)-time_history.at(i-1).at(0))) + leakage_current_alpha.at(i).at(1)*(CMS_alpha0_c1+CMS_alpha0_c2*temperature_average_i) - leakage_current_alpha.at(i).at(2) * log(time_history.back().at(1)-time_history.at(i-1).at(1) )  ;
+          }
+          else
+          {
+            temperature_average_i /= (double)(time_history.back().at(1)*60.0);
+            G_i_tmp += leakage_current_alpha.at(i).at(0) * exp(-time_history.back().at(0)) + leakage_current_alpha.at(i).at(1)*(CMS_alpha0_c1+CMS_alpha0_c2*temperature_average_i) - leakage_current_alpha.at(i).at(2) * log(time_history.back().at(1)) ;
+          }
+
+          i++;
+        }
+    }
+
+  else
+  {
+      tmp.at(0)=phi*t*leconsts.alpha_1;
+      tmp.at(1)=phi*t*leconsts.alpha_0_star;            //temperature dependence of alpha0 is in the theta function of the time calculation - high temp = longer times and vice versa
+      tmp.at(2)=phi*t*leconsts.beta;
+
+      leakage_current_alpha.push_back(tmp);
+
+      tmp2.at(0)=t*leconsts.k01*exp(-leconsts.E1/(8.6173303e-5*(double)Temperature));             // time comes in seconds and k01 is seconds-1 so units are fine here
+      tmp2.at(1)=t / 60. * exp(-leconsts.E1_star*(1.0/(double)Temperature-1.0/294.15)/(8.6173303e-5));  //T-ref is hardcoded and fixed, it cannot be changed in a trivial way since the other parameters, especially alpha 0 star were evaluated at this reference temperature!!!    // t/60 to convert time from seconds to minutes since this is the proposed unit here
+
+      if(time_history.size() > 0.1) tmp3=time_history.at(time_history.size()-1);
+
+      tmp2.at(0)+=tmp3.at(0);
+      tmp2.at(1)+=tmp3.at(1);
+
+      time_history.push_back(tmp2);
+
+      //pos1
+      int i=0;
+
+      while(i<leakage_current_alpha.size())
+      {
+        if(i>=1) G_i_tmp += leakage_current_alpha.at(i).at(0) * exp(-(time_history.back().at(0)-time_history.at(i-1).at(0))) + leakage_current_alpha.at(i).at(1) - leakage_current_alpha.at(i).at(2) * log(time_history.back().at(1)-time_history.at(i-1).at(1)) ;
+        else G_i_tmp += leakage_current_alpha.at(i).at(0) * exp(-time_history.back().at(0)) + leakage_current_alpha.at(i).at(1) - leakage_current_alpha.at(i).at(2) * log(time_history.back().at(1)) ;
+        i++;
+      }
+  }
+
+//////////////////////////////
+
+
+  G_i.push_back(G_i_tmp);
+  if(G_i_tmp/(totalDose*1.0e6+(double)phi+0.001)>5e-16)alpha_vec.push_back(1e-17);    //totalDose was devided by 1e6 to fit into a long double
+  else alpha_vec.push_back(G_i_tmp/(totalDose*1.0e6+(double)phi+0.001));
+  leakage_current.push_back(G_i_tmp*1000.0*thickness*1.e-4);                                      //insert volume here for current per module
+  powerconsumption.push_back(leakage_current.back()*NtoV_function(get_Neff()));
+
+  return;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//function to read in the temp/rad profile
+
+vector<DataElement> get_Profile(string filename)                                 // reads in a file of format (timestep/temperature/radiation_dose_rate) and gives back a vector of DataElements containing each the timestep/temperature/dose_rate information of one line of the input file
+{
+    ifstream input_file(filename.c_str());                                              // open stream to data file
+    vector<DataElement> Temperature_Profile_vector;
+    DataElement tmp_data;
+
+    if (input_file.is_open())                                                           // check whether file opening was succesfull
+    {
+        if(debug) cout<< "Reading temperature/radiation file: " << filename << endl;
+
+        int timestep;
+        float temp1;
+        long int rad1;
+
+        while(true)
+        {
+            input_file >> timestep >> temp1 >> rad1;
+
+            //if(temp1<294 && temp1>290) //TODO: remove!
+            //{
+            //  cout << "modifying temperature from: " << temp1 << endl;
+            //  //temp1=temp1+5;
+            //}
+            //else //temp1=temp1+5;
+            //if (rad1!=0)temp1=temp1+5;
+
+            tmp_data.duration=timestep;
+            tmp_data.temperature=temp1;
+            tmp_data.dose_rate=rad1*DoseRateScaling;
+            Temperature_Profile_vector.push_back(tmp_data);
+
+            if(debug) cout << "Line read: " << timestep << " " << temp1 << " " << rad1  << endl;
+
+            if(input_file.eof())break;                          	// if end of file is reached: brake the loop
+
+            limit_file_size_input--;
+            if(limit_file_size_input==0)break;
+        }
+    }
+
+    else
+    {
+        if(debug) cout << "Error opening the temperature/radiation file!"<<endl;
+        return Temperature_Profile_vector;
+    }
+
+    input_file.close();
+
+    return Temperature_Profile_vector;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//function to plot different informations in root and pdf files
+
+void plot_vectors(vector<double> vecx, vector<double> vecy, string yName, string xName, long double totalDose, string plotname, int mode)
+{
+    string output_file_name_pdf=output_file_name;
+    output_file_name_pdf.insert(output_file_name_pdf.size(),"_");
+    output_file_name_pdf.insert(output_file_name_pdf.size(),plotname);
+    output_file_name_pdf.insert(output_file_name_pdf.size(),".pdf");
+
+    string output_file_name_root=output_file_name;
+    output_file_name_root.insert(output_file_name_root.size(),".root");
+
+
+    TFile *file = new TFile(output_file_name_root.c_str(),"UPDATE");
+    //file->cd();
+
+    if(mode==1 || mode==2 || mode==66 || mode==8) //in case of plot as a function of time, convert the days from simulation into a more handy date
+    {
+        for(int k=0; k<vecx.size();k++)
+        {
+            int day=vecx.at(k);
+
+            date d2 = d + days(day);
+
+            TDatime da (d2.year(), d2.month(), d2.day(),0,0,0);
+
+            vecx.at(k)=da.Convert();
+        }
+    }
+    else  //otherwise the axis is fluence and we need to reconvert it since for safty reasons it was stored devided by 1e6 in order not to overflow the long double
+    {
+        //for(int k=0; k<vecx.size();k++)
+        //{
+        //    vecx.at(k)*=1.0e6;
+        //}
+    }
+
+    if(mode==8 || mode==9) //in case of 8, change from unit area to unit surface for the leakage current (IMPLEMENT USER TREF HERE)
+    {
+        for(int k=0; k<vecy.size();k++)
+        {
+            vecy.at(k)/=thickness*1.0e-4; //convert from surface to volume normalisation
+            //vecy.at(k)*=(userTref*userTref/(294.15*294.15)*exp(-6500*(1/userTref - 1/294.15))); //scale to user defined temperature
+            vecy.at(k)*=(userTref*userTref/(294.15*294.15)*exp(-(bandGap/(2*8.6173303e-5))*(1/userTref - 1/294.15))); //scale to user defined temperature
+        }
+    }
+
+    const TVectorD t_timevector(vecx.size(),&vecx[0]);
+    const TVectorD t_vdepvector(vecy.size(),&vecy[0]);
+    const TVectorD t_time_error(vecx.size());
+    const TVectorD t_vdep_error(vecy.size());
+
+    TCanvas * c1 = new TCanvas("TCanvas_name","Title",0,0,1024,668);
+    gStyle->SetOptTitle(0);
+
+    TGraphErrors *gr = new TGraphErrors(t_timevector,t_vdepvector,t_time_error,t_vdep_error);
+
+    if(mode==1 || mode==2 || mode==66 || mode==8) //in case of plot as a function of time, convert the days from simulation into a more handy date
+    {
+        gr->GetXaxis()->SetTimeDisplay(1);
+        gr->GetXaxis()->SetNdivisions(6,2,0);
+        gr->GetXaxis()->SetTimeFormat("%d/%m/%Y");
+        gr->GetXaxis()->SetTimeOffset(0,"gmt");
+    }
+
+    gr->GetXaxis()->SetTitle(xName.c_str());
+    gr->GetYaxis()->SetTitle(yName.c_str());
+
+    if(mode!=66)
+    {
+      gr->SetName(plotname.c_str());
+      gr->Draw("AP");
+      if(plot_pdf) c1->Print(output_file_name_pdf.c_str());
+      gr->Write();
+    }
+
+    if(mode==1)
+    {
+        cout << "Final " << plotname << " is: " << vecy.at(vecy.size()-1)<< yName <<endl;
+        cout << "Total collected fluence is: " << totalDose*1.0e6/global_layer_conversion << "fb-1 (only one conversion factor supported - if more than one was used for the profile, this value will be wrong)" << endl;
+        cout << "Total collected dose is: " << totalDose*1.0e6 << "neq/cm2" << endl;
+    }
+    else
+    {
+      cout << "Final " << plotname << " is: " << vecy.at(vecy.size()-1)<<endl;
+    }
+
+    file->Close();
+    delete c1;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+int main(int argc, char *argv[]) {
+
+    if(argc!=2)                                                 		// Check for correct number of arguments
+    {
+        cout << "Wrong number of arguments! There are: " << argc << " arguments." << endl;
+        return -1;
+    }
+
+    if(!overwrite_files)
+    {
+        time_t current_time = time(nullptr);
+        output_file_name.insert(output_file_name.size(),to_string(current_time));
+    }
+
+    string profilinput_file_name = argv[1];
+
+    leakage_current_consts LeCo = { 1.23e-17,   //alpha_1
+                                    7.07e-17,   //alpha_0_star
+                                    3.3e-18,    //beta
+                                    1.2e13,     //k01
+                                    1.11,       //E1
+                                    1.3};       //E1_star
+
+    Annealing_constants AnCo( 1.0e-2,           //atof(argv[2]),       //gA
+                              1.6e-2,           //atof(argv[3]),       //gY
+                              1.0e-2,           //atof(argv[4]),       //gC
+                              2.4e13,           //ka
+                              7.4e14,           //ky
+                              1.09,             //Ea
+                              1.325,            //Ey
+                              6.4118e-14);      //cc
+
+    //DoseRateScaling = atof(argv[5]) ;
+
+
+    vector<DataElement> temp_rad_profile = get_Profile(profilinput_file_name);    //read in the input data profile, a vector containing the individual data elements (duration, temperature, dose rate) is returned
+
+    int max_steps=temp_rad_profile.size();
+
+    vector<double> V_dep_vector;
+    vector<double> Neff_vector;
+    vector<double> Ndonor_vector;
+    vector<double> Nacceptor_vector;
+    vector<double> Temperature_vector;
+
+    vector<double> time_vector;
+    vector<double> fluence_vector;
+
+    Sensor *sensor = new Sensor();
+
+    long double time=0.0;
+    long double totalDose=0;
+
+    // main loop where all irradiation steps happen
+
+    cout << "Profile succesfully read. Length of the profile is: " << max_steps << endl;
+
+    for (int t=0; t<max_steps; t++)   // iterate through the profile and irradiate the sensor at each step
+    {
+        sensor->set_temp(temp_rad_profile.at(t).temperature);
+        sensor->irradiate(LeCo,AnCo,temp_rad_profile.at(t).dose_rate,temp_rad_profile.at(t).duration,totalDose);
+
+        Temperature_vector.push_back(temp_rad_profile.at(t).temperature);
+
+        Neff_vector.push_back(sensor->get_Neff());
+        V_dep_vector.push_back(NtoV_function(sensor->get_Neff()));
+        Ndonor_vector.push_back(sensor->get_Ndonor());
+        Nacceptor_vector.push_back(sensor->get_Nacceptor());
+
+        totalDose+=temp_rad_profile.at(t).dose_rate/1.0e3*temp_rad_profile.at(t).duration/1.0e3;  // time (seconds) * dose rate (neq/cm2/s)
+
+        time+=temp_rad_profile.at(t).duration;
+        time_vector.push_back(time/(24.0*3600.0));  // time vector in days
+        fluence_vector.push_back(totalDose*1.0e6);
+
+        if(t%(int)(max_steps/100.)==0) cout << (int)((int)t*100./max_steps) << " percent done..." << endl;
+    }
+
+    // data output, plotting and visualisation
+
+    cout << "Processing finished, writing data..." << endl;
+
+    // plots as function of time
+    plot_vectors(time_vector,Neff_vector,"N_{eff} [1/cm^{3}]","Date [days]",totalDose,"Neff",1);
+    plot_vectors(time_vector,Ndonor_vector,"N_{donor} [1/cm^{3}]","Date [days]",totalDose,"Ndonors",2);
+    plot_vectors(time_vector,Nacceptor_vector,"N_{acceptor} [1/cm^{3}]","Date [days]",totalDose,"Nacceptors",2);
+    plot_vectors(time_vector,V_dep_vector,"U_{dep} [V]","Date [days]",totalDose,"U_dep",66);
+    plot_vectors(time_vector,sensor->get_alpha_vec(),"#alpha [A/cm]","Date [days]",totalDose,"alpha",2);
+    plot_vectors(time_vector,sensor->get_leakage_current(),"I_{leak} (@21C) [mA/cm^{2}]","Date [days]",totalDose,"I_leak",2);
+    plot_vectors(time_vector,sensor->get_leakage_current(),"I_{leak} (@userTref) [mA/cm^{3}]","Date [days]",totalDose,"I_leak_volume",8);
+    plot_vectors(time_vector,sensor->get_G_i(),"G_{i} [A/cm^{3}]","Date [days]",totalDose,"G_i",2);
+    plot_vectors(time_vector,sensor->get_powerconsumption(),"P [mW/cm^{2}]","Date [days]",totalDose,"powerconsumption",2);
+    plot_vectors(time_vector,Temperature_vector,"Temperature [K]","Date [days]",totalDose,"temperature",2);
+    plot_vectors(time_vector,fluence_vector,"Fluence [n_{eq}/cm^{2}]","Date [days]",totalDose,"fluence",2);
+
+    // plots as function of dose
+    plot_vectors(fluence_vector,Neff_vector,"N_{eff} [1/cm^{3}]","Fluence [n_{eq}/cm^{2}]",totalDose,"Neff_vs_fluence",3);
+    plot_vectors(fluence_vector,Ndonor_vector,"N_{donor} [1/cm^{3}]","Fluence [n_{eq}/cm^{2}]",totalDose,"Ndonors_vs_fluence",4);
+    plot_vectors(fluence_vector,Nacceptor_vector,"N_{acceptor} [1/cm^{3}]","Fluence [n_{eq}/cm^{2}]",totalDose,"Nacceptors_vs_fluence",4);
+    plot_vectors(fluence_vector,V_dep_vector,"U_{dep} [V]","Fluence [n_{eq}/cm^{2}]",totalDose,"U_dep_vs_fluence",4);
+    plot_vectors(fluence_vector,sensor->get_alpha_vec(),"#alpha [A/cm]","Fluence [n_{eq}/cm^{2}]",totalDose,"alpha_vs_fluence",4);
+    plot_vectors(fluence_vector,sensor->get_leakage_current(),"I_{leak} [mA/cm^{2}]","Fluence [n_{eq}/cm^{2}]",totalDose,"I_leak_vs_fluence",4);
+    plot_vectors(fluence_vector,sensor->get_leakage_current(),"I_{leak} (@userTref) [mA/cm^{3}]","Fluence [n_{eq}/cm^{2}]",totalDose,"I_leak_volume_vs_fluence",9);
+    plot_vectors(fluence_vector,sensor->get_G_i(),"G_{i} [A/cm^{3}]","Fluence [n_{eq}/cm^{2}]",totalDose,"G_i_vs_fluence",4);
+    plot_vectors(fluence_vector,sensor->get_powerconsumption(),"P [mW/cm^{2}]","Fluence [n_{eq}/cm^{2}]",totalDose,"powerconsumption_vs_fluence",4);
+    plot_vectors(fluence_vector,Temperature_vector,"Temperature [K]","Fluence [n_{eq}/cm^{2}",totalDose,"temperature_vs_fluence",4);
+
+    return 0;
+}
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output
new file mode 100755
index 0000000000000000000000000000000000000000..748d625712c48f0ff9381005ac7784701d7010d7
GIT binary patch
literal 211600
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%0D|%{#zJ-Bh(++
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

literal 0
HcmV?d00001

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter
new file mode 100755
index 0000000000000000000000000000000000000000..8ff05b1700dc24f730ab6ebb9564f47dad1185a1
GIT binary patch
literal 78624
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
T&6pgm<ppIptXd13Ao~3u7`gUj

literal 0
HcmV?d00001

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp
new file mode 100644
index 000000000000..411eacd59027
--- /dev/null
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp
@@ -0,0 +1,380 @@
+/*
+Compile Code with: g++ profile_combiner.cpp -Wall -std=c++11 -o converter
+
+Program reads two files (see pattern below) in and orders them and prints out a file with at least 'time_spacing' hours spacing between the data points in the format time temperature(in K) delta_radiation(in neq/cm2/sec)
+
+temperature file:
+21-11-2011 15:45:40:838 +01.99
+21-11-2011 19:45:40:838 +02.99
+
+radiation file:
+2011-11-21 15:45:40.538 00001.234
+2011-11-21 22:48:52.330 00010.142
+
+with luminosity in pb-1
+
+both files have to start at a date later than 1.1.2011 01:01:01.001 and should start at the same date!!!
+
+what needs to be changed before starting:
+    1. change conversion factor (from pb-1 to neq/cm2) before usage (two conversion factors are supported for 7/8 and 13 TeV)
+    2. change output name
+    3. call program after compiling with ./converter temperature_file_name irradiation_file_name
+*/
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <iostream>			// Basic IO
+#include <fstream>			// Read and write files
+#include <cstdlib>			// convert arguments of function call into int, float,...
+#include <string>
+#include <sstream>         		// to get string into stream
+#include <vector>
+#include <cmath>
+
+using namespace std;
+
+///////////////////////////////////////////////////////
+
+string define_output_file_name = "profile_output.txt";
+long int conversion_factor1   = 0.582e9;                    //conversion factor from pb-1 to neq/cm2 for 7TeV
+long int conversion_factor2   = 0.839e9;                    //for 13TeV
+long int changeinenergy       = 2014;                       //year< since which there is 13TeV instead of 7TeV
+int time_spacing              = 4;                          //minimal required spacing between two data points in hours
+int replacement88             = 2200;                       //replace no temperature reading from DCS (eg during shutdown) (=-88 C) with this temperature
+
+bool debug            = false;                             //switch debugging information on/off
+
+///////////////////////////////////////////////////////
+
+struct newData
+{
+  unsigned long long int timestamp;
+  int temperature;
+  int luminosity;
+};
+
+///////////////////////////////////////////////////////
+
+struct data
+{
+  int year;
+  int month;
+  int day;
+  int hour;
+  int minute;
+  int second;
+  int milisecond;
+  unsigned long long int timestamp;
+  int payload;
+};
+
+///////////////////////////////////////////////////////
+
+unsigned long long int diffintime(int time1, int time2, int offset, bool uberold, unsigned long long int conversion)
+{
+  long long int diff=0;
+  bool uber = false;
+
+  diff = time1 - time2;
+
+  if(diff<0)
+  {
+    diff+=offset;
+    uber = true;
+  }
+
+  unsigned long long diff_long=abs(diff);
+
+  if(uberold)diff_long-=1;
+
+  diff_long*=conversion;
+
+  return diff_long;
+}
+
+///////////////////////////////////////////////////////
+
+unsigned long long int BuildTimeStamp(data newpoint, data oldpoint)
+{
+  bool next_uber=false;
+  long long int difference_milisecond = diffintime(newpoint.milisecond, oldpoint.milisecond, 1000, false, 1);
+  if(newpoint.milisecond-oldpoint.milisecond<0) next_uber = true;
+
+  unsigned long long int difference_second     = diffintime(newpoint.second, oldpoint.second, 60, next_uber, 1000);
+  next_uber=false;
+  if(newpoint.second-oldpoint.second<0) next_uber = true;
+
+  unsigned long long int difference_minute     = diffintime(newpoint.minute, oldpoint.minute, 60, next_uber, 60*1000);
+  next_uber=false;
+  if(newpoint.minute-oldpoint.minute<0) next_uber = true;
+
+  unsigned long long int difference_hour       = diffintime(newpoint.hour, oldpoint.hour, 24, next_uber, 60*60*1000);
+  next_uber=false;
+  if(newpoint.hour-oldpoint.hour<0) next_uber = true;
+
+  unsigned long long int dayoffset=0;
+  if(oldpoint.month == 0) dayoffset=0;
+  else if(oldpoint.month == 2 )
+    {
+      dayoffset=28;
+      if(oldpoint.year==2008 || oldpoint.year==2012 || oldpoint.year==2016 || oldpoint.year==2020) dayoffset=29;
+    }
+  else if(oldpoint.month == 4 || oldpoint.month == 6 || oldpoint.month == 9 || oldpoint.month == 11)dayoffset=30;
+  else if(oldpoint.month == 1 || oldpoint.month == 3 || oldpoint.month == 5 || oldpoint.month == 7 || oldpoint.month == 8 || oldpoint.month == 10 || oldpoint.month == 12)dayoffset=31;
+  else
+    {
+      cout<<"Strange month, aborting..."<<oldpoint.month<<endl;
+      return -1;
+    }
+
+
+  unsigned long long int difference_day        = diffintime(newpoint.day, oldpoint.day, dayoffset, next_uber, 24*60*60*1000);
+    //cout<<"difference in days is: "<<difference_day<< " "<<next_uber<<endl;
+  next_uber=false;
+  if(newpoint.day-oldpoint.day<0) next_uber = true;
+  //cout<<difference_day<< "ddd"<<endl;
+
+  unsigned long long int difference_month      = diffintime(newpoint.month, oldpoint.month, 12, next_uber, dayoffset*24*60*60*1000);
+  next_uber=false;
+  if(newpoint.month-oldpoint.month<0) next_uber = true;
+
+  unsigned long long int difference_year       = diffintime(newpoint.year, oldpoint.year, 100000, next_uber, 365.25*24*60*60*1000);
+
+
+  unsigned long long int newtimestamp = oldpoint.timestamp + difference_milisecond + difference_second + difference_minute + difference_hour + difference_day + difference_month + difference_year;
+
+  if(debug)cout<<"Timestamp calculation: "<<oldpoint.timestamp<<"  "<<newtimestamp<<"  "<<difference_milisecond<<"  "<<difference_second<<"  "<<difference_minute<<"  "<<difference_hour<<"  "<<difference_day<<"  "<<difference_month<<"  "<<difference_year<<endl;
+
+  return newtimestamp;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+int main(int argc, char *argv[]) {
+
+      string temp_file_name = argv[1];
+      string irr_file_name = argv[2];
+
+      ofstream output_file;
+      output_file.open(define_output_file_name.c_str());
+      ifstream temp_file(temp_file_name.c_str());
+      ifstream irr_file(irr_file_name.c_str());
+
+
+      if (!temp_file.is_open())
+      {
+        cout<<"Temp file not found"<<endl;
+        return -1;
+      }
+      if (!irr_file.is_open())
+      {
+        cout<<"Irr file not found"<<endl;
+        return -1;
+      }
+
+
+      cout<<"Temperature File: " << temp_file_name << endl;
+      cout<<"Irradiation File: " << irr_file_name << endl;
+
+
+      char column_dump_temp[100];								// max 100 charachters per line!!!
+      char column_dump_irr[100];								// max 100 charachters per line!!!
+
+      vector<data> temp_data_vec;
+      vector<data> irr_data_vec;
+
+      data temp_data_element;
+      data irr_data_element;
+
+      int year_irr, year_temp;
+      int month_irr, month_temp;
+      int day_irr, day_temp;
+      int hour_irr, hour_temp;
+      int minute_irr, minute_temp;
+      int second_irr, second_temp;
+      int miliseconds_irr, miliseconds_temp;
+      unsigned long long int timestamp_irr=0;
+      unsigned long long int timestamp_temp=0;
+      int irr_i, temp_i;
+
+      irr_data_element={2011,1,1,1,1,1,1,0,0};
+      temp_data_element={2011,1,1,1,1,1,1,0,0};
+
+      irr_data_vec.push_back(irr_data_element);
+      temp_data_vec.push_back(temp_data_element);
+
+
+//read in the two files (the two while loops) and put them into a vector each, calculate a unique timestamp for each point (in ms)
+
+      cout<<"Start to read in irr file..."<<endl;
+
+      int counter=0;
+
+      while(true)
+      {
+        irr_file.getline(column_dump_irr,100);
+
+        if(debug) cout << "Originally read line is: " << column_dump_irr << endl;
+
+
+        year_irr          =   (static_cast<int>(column_dump_irr[0])-48)*1000+(static_cast<int>(column_dump_irr[1])-48)*100+(static_cast<int>(column_dump_irr[2])-48)*10+static_cast<int>(column_dump_irr[3])-48;
+        month_irr         =   (static_cast<int>(column_dump_irr[5])-48)*10+static_cast<int>(column_dump_irr[6])-48;
+        day_irr           =   (static_cast<int>(column_dump_irr[8])-48)*10+static_cast<int>(column_dump_irr[9])-48;
+        hour_irr          =   (static_cast<int>(column_dump_irr[11])-48)*10+static_cast<int>(column_dump_irr[12])-48;
+        minute_irr        =   (static_cast<int>(column_dump_irr[14])-48)*10+static_cast<int>(column_dump_irr[15])-48;
+        second_irr        =   (static_cast<int>(column_dump_irr[17])-48)*10+static_cast<int>(column_dump_irr[18])-48;
+        miliseconds_irr   =   (static_cast<int>(column_dump_irr[20])-48)*100+(static_cast<int>(column_dump_irr[21])-48)*10+(static_cast<int>(column_dump_irr[22])-48);
+        irr_i             =   (static_cast<int>(column_dump_irr[24])-48)*10000000+(static_cast<int>(column_dump_irr[25])-48)*1000000+(static_cast<int>(column_dump_irr[26])-48)*100000+(static_cast<int>(column_dump_irr[27])-48)*10000+(static_cast<int>(column_dump_irr[28])-48)*1000+(static_cast<int>(column_dump_irr[30])-48)*100+(static_cast<int>(column_dump_irr[31])-48)*10+(static_cast<int>(column_dump_irr[32])-48);
+
+        if(debug) cout<<"Datapoint irr read: "<<irr_i<<"  "<<miliseconds_irr<<"  "<<second_irr<<"  "<<minute_irr<<"  "<<hour_irr<<"  "<<day_irr<<"  "<<month_irr<<"  "<<year_irr<<endl;
+
+        if(year_irr>changeinenergy)irr_i=(int)round((double)irr_i*(double)conversion_factor2/(double)conversion_factor1);
+
+        irr_data_element={year_irr,month_irr,day_irr,hour_irr,minute_irr,second_irr,miliseconds_irr,timestamp_irr,irr_i};
+        timestamp_irr     = BuildTimeStamp(irr_data_element, irr_data_vec.back());
+        irr_data_element={year_irr,month_irr,day_irr,hour_irr,minute_irr,second_irr,miliseconds_irr,timestamp_irr,irr_i};
+
+        if(timestamp_irr == -1) return -1;
+
+        irr_data_vec.push_back(irr_data_element);
+
+        if(irr_file.eof()) break;
+
+        counter++;
+        if(counter%200 == 0) cout << counter << " lines read. Year: " << irr_data_element.year << " Month:" << irr_data_element.month << " Day:" << irr_data_element.day << endl;
+        if(debug && (counter == 1 || counter ==2))system("read");
+      }
+
+      cout<<"Irr file completed! Starting with temperature file..."<<endl;
+
+      counter=0;
+      system("read");
+
+      int numberofreplacements=0;
+
+      while(true)
+      {
+        temp_file.getline(column_dump_temp,100);
+
+        if(debug) cout << "Originally read line is: " << column_dump_temp << endl;
+
+
+        year_temp = (static_cast<int>(column_dump_temp[6])-48)*1000+(static_cast<int>(column_dump_temp[7])-48)*100+(static_cast<int>(column_dump_temp[8])-48)*10+static_cast<int>(column_dump_temp[9])-48;
+        month_temp        =   (static_cast<int>(column_dump_temp[3])-48)*10+static_cast<int>(column_dump_temp[4])-48;
+        day_temp          =   (static_cast<int>(column_dump_temp[0])-48)*10+static_cast<int>(column_dump_temp[1])-48;
+        hour_temp         =   (static_cast<int>(column_dump_temp[11])-48)*10+static_cast<int>(column_dump_temp[12])-48;
+        minute_temp       =   (static_cast<int>(column_dump_temp[14])-48)*10+static_cast<int>(column_dump_temp[15])-48;
+        second_temp       =   (static_cast<int>(column_dump_temp[17])-48)*10+static_cast<int>(column_dump_temp[18])-48;
+        miliseconds_temp  =   (static_cast<int>(column_dump_temp[20])-48)*100+(static_cast<int>(column_dump_temp[21])-48)*10+(static_cast<int>(column_dump_irr[22])-48);
+        temp_i            =(static_cast<int>(column_dump_temp[25])-48)*1000+(static_cast<int>(column_dump_temp[26])-48)*100+(static_cast<int>(column_dump_temp[28])-48)*10+(static_cast<int>(column_dump_temp[29])-48);
+
+        if(column_dump_temp[24]=='-')
+        {
+          temp_i*=-1;
+          if(debug)cout<<"negative temp"<<temp_i<<endl;
+        }
+
+        if(temp_i+8800<1)
+        {
+          numberofreplacements++;
+          temp_i=replacement88;
+          if(debug)cout << "temperature replaced! " << temp_i<< " "<< numberofreplacements<<"/"<<counter<<endl;
+        }
+        if(debug) cout<<"Datapoint temp read: "<<temp_i<<"  "<<miliseconds_temp<<"  "<<second_temp<<"  "<<minute_temp<<"  "<<hour_temp<<"  "<<day_temp<<"  "<<month_temp<<"  "<<year_temp<<endl;
+
+        temp_data_element={year_temp,month_temp,day_temp,hour_temp,minute_temp,second_temp,miliseconds_temp,timestamp_temp,temp_i};
+        timestamp_temp    = BuildTimeStamp(temp_data_element, temp_data_vec.back());
+        temp_data_element={year_temp,month_temp,day_temp,hour_temp,minute_temp,second_temp,miliseconds_temp,timestamp_temp,temp_i};
+
+        if(timestamp_temp == -1) return -1;
+
+        temp_data_vec.push_back(temp_data_element);
+
+        if(temp_file.eof()) break;
+        counter++;
+        if(counter%1000 == 0) cout << counter << " lines read. Year: " << temp_data_element.year << " Month:" << temp_data_element.month << " Day:" << temp_data_element.day << endl;
+      }
+
+      cout<<"Both files succesfully read! Beginning with sorting the data..."<<endl;
+
+//create a new vector with the ordered values in the format: timestamp Temperature luminosity
+
+      irr_data_vec.erase(irr_data_vec.begin());                                 // erase first element each because this was only a space holder
+      temp_data_vec.erase(temp_data_vec.begin());
+
+      int temp_iterator = 1;
+      int irr_iterator  = 1;
+
+      newData element;
+      element={0,0,0};
+
+      vector<newData> output_vec;
+
+      while(true)
+      {
+        if(irr_data_vec.at(irr_iterator).timestamp>temp_data_vec.at(temp_iterator).timestamp)
+        {
+          element = {temp_data_vec.at(temp_iterator).timestamp, temp_data_vec.at(temp_iterator).payload, irr_data_vec.at(irr_iterator-1).payload};
+          temp_iterator++;
+        }
+
+        else
+        {
+          element = {irr_data_vec.at(irr_iterator).timestamp, temp_data_vec.at(temp_iterator-1).payload, irr_data_vec.at(irr_iterator).payload};
+          irr_iterator++;
+        }
+
+        output_vec.push_back(element);
+
+        if(temp_data_vec.size()<=temp_iterator || irr_data_vec.size()<=irr_iterator) break;
+      }
+
+
+      cout<<"Data is sorted now! Writing file with the data with fixed time spacing..."<<endl;
+
+
+      if(debug)
+      {
+        for(int k=0;k<output_vec.size();k++)
+        {
+          cout<<output_vec.at(k).timestamp<<" "<<output_vec.at(k).temperature<<" "<<output_vec.at(k).luminosity<<endl;
+        }
+      }
+
+
+//write out a file with a constant spacing of time_spacing hours, temperature and the converted irradiation is rounded to int
+
+      output_file<<1*60*60<<" "<<(int)round(273.0+(output_vec.at(0).temperature/100.0))<<" "<<(long int)round((conversion_factor1*(output_vec.at(0).luminosity)/1000.0/60.0/60.0))<<endl;
+
+      int old_i = 0;
+      int i     = 1;
+      int time_difference=0;
+      int radiation_difference=0;
+
+      while(i<output_vec.size()-2)
+      {
+        while(i<output_vec.size()-1 && output_vec.at(i).timestamp-output_vec.at(old_i).timestamp<time_spacing*60*60*1000)               //wait until difference between to points is at least time_spacing hour
+        {
+          i++;
+
+          if(debug) cout<<"Position in output file:"<<i << " and file size is: " << output_vec.size() <<endl;
+        }
+
+        time_difference=(int)round((output_vec.at(i).timestamp-output_vec.at(old_i).timestamp)/1000.0);
+        radiation_difference=(long int)round((conversion_factor1*(output_vec.at(i).luminosity-output_vec.at(old_i).luminosity)/1000.0/(float)time_difference));
+
+        if(output_vec.at(i).luminosity-(int)round((double)conversion_factor2/(double)conversion_factor1*output_vec.at(old_i).luminosity)==0)
+        {
+          radiation_difference=0;
+          cout << "corrected for change in conversion factor, should not happen more than once!"<<endl;
+        }
+        output_file<<time_difference<<" "<<(int)round(273.0+(output_vec.at(i).temperature/100.0))<<" "<<radiation_difference<<endl;
+
+        old_i=i;
+        i++;
+      }
+
+      output_file.close();
+
+      return 0;
+}
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt
new file mode 100644
index 000000000000..e69de29bb2d1
-- 
GitLab


From a5ae7e337fd91003ec378c409af7b33e2d763b3c Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Tue, 19 Feb 2019 16:49:31 +0100
Subject: [PATCH 003/163] moved tests out of the main file that is frequently
 imported

---
 .../python/ComponentAccumulatorTest.py        | 284 ++++++++++++++++++
 1 file changed, 284 insertions(+)
 create mode 100644 Control/AthenaConfiguration/python/ComponentAccumulatorTest.py

diff --git a/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py b/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py
new file mode 100644
index 000000000000..3f059ae87694
--- /dev/null
+++ b/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py
@@ -0,0 +1,284 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+# self test of ComponentAccumulator
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator, forcomps
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+from AthenaCommon.CFElements import findSubSequence,findAlgorithm
+from AthenaCommon.Configurable import Configurable, ConfigurablePyAlgorithm # guinea pig algorithms
+from AthenaCommon.CFElements import seqAND, seqOR, parOR
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG, INFO
+
+import unittest
+
+class TestComponentAccumulator( unittest.TestCase ):
+    def setUp(self):
+
+
+        # trivial case without any nested sequences
+
+        Configurable.configurableRun3Behavior+=1
+
+        log.setLevel(DEBUG)
+
+        dummyCfgFlags=AthConfigFlags()
+        dummyCfgFlags.lock()
+
+        class Algo(ConfigurablePyAlgorithm):
+            def __init__(self, name):
+                super( ConfigurablePyAlgorithm, self ).__init__( name )
+
+        def AlgsConf1(flags):
+            acc = ComponentAccumulator()
+            a1=Algo("Algo1")
+            a2=Algo("Algo2")
+            return acc,[a1,a2]
+
+
+        def AlgsConf2(flags):
+            acc = ComponentAccumulator()
+            result,algs=AlgsConf1( flags )
+            acc.merge(result)
+            algs.append(Algo("Algo3"))
+            return acc,algs
+
+        acc = ComponentAccumulator()
+
+        # top level algs
+        acc1,algs=AlgsConf2(dummyCfgFlags)
+        acc.merge(acc1)
+        acc.addEventAlgo(algs)
+
+        def AlgsConf3(flags):
+            acc = ComponentAccumulator()
+            na1=Algo("NestedAlgo1")
+            return acc,na1
+
+        def AlgsConf4(flags):
+            acc,na1= AlgsConf3( flags )
+            NestedAlgo2 = Algo("NestedAlgo2")
+            NestedAlgo2.OutputLevel=7
+            return acc,na1,NestedAlgo2
+
+        acc.addSequence( seqAND("Nest") )
+        acc.addSequence( seqAND("subSequence1"), parentName="Nest" )
+        acc.addSequence( parOR("subSequence2"), parentName="Nest" )
+
+        acc.addSequence( seqAND("sub2Sequence1"), parentName="subSequence1")
+        acc.addSequence( seqAND("sub3Sequence1"), parentName="subSequence1")
+        acc.addSequence( seqAND("sub4Sequence1"), parentName="subSequence1")
+
+        accNA1=AlgsConf4(dummyCfgFlags)
+        acc.merge(accNA1[0])
+        acc.addEventAlgo(accNA1[1:],"sub2Sequence1" )
+        acc.store(open("testFile.pkl", "w"))
+        self.acc = acc
+
+
+    def test_algorihmsAreAdded( self ):
+        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo1", 1).name(), "Algo1", "Algorithm not added to a top sequence" )
+        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo2", 1).name(),  "Algo2", "Algorithm not added to a top sequence" )
+        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo3", 1).name(), "Algo3", "Algorithm not added to a top sequence" )
+
+    def test_sequencesAreAdded( self ):
+        self.assertIsNotNone( self.acc.getSequence("subSequence1" ), "Adding sub-sequence failed" )
+        self.assertIsNotNone( self.acc.getSequence("subSequence2" ), "Adding sub-sequence failed" )
+        self.assertIsNotNone( self.acc.getSequence("sub2Sequence1"), "Adding sub-sequence failed" )
+        self.assertIsNotNone( findSubSequence( self.acc.getSequence("subSequence1"), "sub2Sequence1"), "Adding sub-sequence done in a wrong place" )
+
+    def test_algorithmsInNestedSequences( self ):
+        self.assertIsNotNone( findAlgorithm( self.acc.getSequence(), "NestedAlgo1" ), "Algorithm added to nested sequence" )
+        self.assertIsNotNone( findAlgorithm( self.acc.getSequence(), "NestedAlgo1", 1 ) is None, "Algorithm mistakenly in top sequence" )
+        self.assertIsNotNone( findAlgorithm( findSubSequence( self.acc.getSequence(), "sub2Sequence1"), "NestedAlgo1", 1 ), "Algorithm not in right sequence" )
+
+
+    def test_readBackConfiguration( self ):
+        import pickle
+        with open( "testFile.pkl" ) as f:
+            s = pickle.load( f )
+            self.assertIsNotNone( s, "The pickle has no content")
+
+    def test_forcomps( self ):
+        forcomps(self.acc, "/*sub2*/*Algo*").OutputLevel = DEBUG
+        forcomps(self.acc, "/*sub2*/*Algo*").OutputLevel = DEBUG
+        forcomps(self.acc, "/Algo/Algo*").OutputLevel = INFO
+        self.assertEqual(self.acc.getEventAlgo("Algo3").OutputLevel, INFO, "wrong OutputLevel value for Algo3")
+        self.assertEqual(self.acc.getEventAlgo("NestedAlgo1").OutputLevel, DEBUG, "wrong OutputLevel value for NestedAlgo1")
+
+        
+
+class TestHLTCF( unittest.TestCase ):
+    def runTest( self ):
+        # replicate HLT issue, it occured because the sequnces were recorded in the order of storing in the dict and thus the
+        # some of them (in this case hltSteps) did not have properties recorded
+
+
+        Configurable.configurableRun3Behavior=1
+        acc = ComponentAccumulator()
+        acc.addSequence( seqOR("hltTop") )
+        algos2 = ConfigurablePyAlgorithm( "RecoAlgInTop" )
+        acc.addEventAlgo( algos2, sequenceName="hltTop" ) # some algo
+        acc.addSequence( seqAND("hltSteps"), parentName="hltTop" )
+        acc.addSequence( parOR("hltStep_1"), parentName="hltSteps" )
+        acc.addSequence( seqAND("L2CaloEgammaSeq"), "hltStep_1" )
+        acc.addSequence( parOR("hltStep_2"), parentName="hltSteps" )
+        acc.moveSequence( "L2CaloEgammaSeq", "hltStep_2" )
+
+        acc.store(open("testFile2.pkl", "w"))
+        import pickle
+        f = open("testFile2.pkl")
+        s = pickle.load(f)
+        f.close()
+        self.assertNotEqual( s['hltSteps']['Members'], '[]', "Empty set of members in hltSteps, Sequences recording order metters" )
+
+
+class MultipleParentsInSequences( unittest.TestCase ):
+    def runTest( self ):
+       # test if an algorithm (or sequence) can be controlled by more than one sequence
+        Configurable.configurableRun3Behavior=1
+
+        accTop = ComponentAccumulator()
+
+        recoSeq = seqAND("seqReco")
+        recoAlg = ConfigurablePyAlgorithm( "recoAlg" )
+        recoSeq += recoAlg
+
+        acc1 = ComponentAccumulator()
+        acc1.addSequence( seqAND("seq1") )
+        acc1.addSequence( recoSeq, parentName="seq1" )
+
+        acc2 = ComponentAccumulator()
+        acc2.addSequence( seqAND("seq2") )
+        acc2.addSequence( recoSeq, parentName="seq2" )
+
+        accTop.merge( acc1 )
+        accTop.merge( acc2 )
+
+        accTop.printConfig()
+
+        self.assertIsNotNone( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), "Algorithm missing in the first sequence" )
+        self.assertIsNotNone( findAlgorithm( accTop.getSequence( "seq2" ), "recoAlg" ), "Algorithm missing in the second sequence" )
+        s = accTop.getSequence( "seqReco" )
+        self.assertEqual( len( s.getChildren() ), 1, "Wrong number of algorithms in reco seq: %d " % len( s.getChildren() ) )
+        self.assertIs( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), findAlgorithm( accTop.getSequence( "seq2" ), "recoAlg" ), "Algorithms are cloned" )
+        self.assertIs( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), recoAlg, "Clone of the original inserted in sequence" )
+
+        accTop.store( open("dummy.pkl", "w") )
+        import pickle
+        # check if the recording did not harm the sequences
+        with open("dummy.pkl") as f:
+            s = pickle.load( f )
+            self.assertEquals( s['seq1']["Members"], "['AthSequencer/seqReco']", "After pickling recoSeq missing in seq1 " + s['seq1']["Members"])
+            self.assertEquals( s['seq2']["Members"], "['AthSequencer/seqReco']", "After pickling recoSeq missing in seq2 " + s['seq2']["Members"])
+            self.assertEquals( s['seqReco']["Members"], "['ConfigurablePyAlgorithm/recoAlg']", "After pickling seqReco is corrupt " + s['seqReco']["Members"] )
+
+class ForbidRecursiveSequences( unittest.TestCase ):
+    def runTest( self ):
+        #Can't add a sequence with the same name below itself, e.g.
+        # \__ AthAlgSeq (seq: PAR AND)
+        #    \__ seq1 (seq: SEQ AND)
+        #       \__ seq1 (seq: SEQ AND)
+        def selfSequence():
+            Configurable.configurableRun3Behavior=1
+            from AthenaCommon.CFElements import seqAND
+            accTop = ComponentAccumulator()
+            accTop.wasMerged()
+            seq1 = seqAND("seq1")
+            seq1_again = seqAND("seq1")
+            accTop.addSequence(seq1)
+            accTop.addSequence(seq1_again, parentName = "seq1")
+
+        #Allowed to add a sequence with the same name at same depth, e.g.
+        # \__ AthAlgSeq (seq: PAR AND)
+        #    \__ seq1 (seq: SEQ AND)
+        #       \__ seq2 (seq: SEQ AND)
+        #       \__ seq2 (seq: SEQ AND)
+        # should not raise any exceptions
+        def selfTwinSequence():
+            Configurable.configurableRun3Behavior=1
+            from AthenaCommon.CFElements import seqAND
+            accTop = ComponentAccumulator()
+            accTop.wasMerged()
+            seq1 = seqAND("seq1")
+            seq2 = seqAND("seq2")
+            seq2_again = seqAND("seq1")
+            accTop.addSequence(seq1)
+            accTop.addSequence(seq2, parentName = "seq1")
+            accTop.addSequence(seq2_again, parentName = "seq1")
+            accTop.wasMerged()
+            
+
+        #Can't add a sequence with the same name two steps below itself, e.g.
+        # \__ AthAlgSeq (seq: PAR AND)
+        #    \__ seq1 (seq: SEQ AND)
+        #       \__ seq2 (seq: SEQ AND)
+        #          \__ seq1 (seq: SEQ AND)
+        def selfGrandParentSequence():
+            Configurable.configurableRun3Behavior=1
+            from AthenaCommon.CFElements import seqAND
+            accTop = ComponentAccumulator()
+            accTop.store( open("test.pkl", "w") )#silence RuntimeError
+            seq1 = seqAND("seq1")
+            seq2 = seqAND("seq2")
+            seq1_again = seqAND("seq1")
+            accTop.addSequence(seq1)
+            accTop.addSequence(seq2, parentName = "seq1")
+            accTop.addSequence(seq1_again, parentName = "seq2")
+            accTop.wasMerged()
+
+        #Can't merge sequences with the same name two steps below itself, e.g.
+        # \__ AthAlgSeq (seq: PAR AND)
+        #    \__ seq1 (seq: SEQ AND)
+        #       \__ seq2 (seq: SEQ AND)
+        #          \__ seq1 (seq: SEQ AND)
+        def selfMergedGrandParentSequence():
+            Configurable.configurableRun3Behavior=1
+            from AthenaCommon.CFElements import seqAND
+            acc1=ComponentAccumulator()
+            acc1.wasMerged()
+            acc1.addSequence(seqAND("seq1"))
+            acc2=ComponentAccumulator()
+            acc2.wasMerged()
+            acc2.addSequence(seqAND("seq2"))
+            acc2.addSequence(seqAND("seq1"), "seq2")
+            acc1.merge(acc2)
+
+        self.assertRaises(RuntimeError, selfSequence )
+        self.assertRaises(RuntimeError, selfGrandParentSequence )
+        self.assertRaises(RuntimeError, selfMergedGrandParentSequence )
+
+class FailedMerging( unittest.TestCase ):
+    def runTest( self ):
+        topCA = ComponentAccumulator()
+
+        def badMerge():
+            someCA = ComponentAccumulator()
+            topCA.merge(  (someCA, 1, "hello")  )
+        self.assertRaises(RuntimeError, badMerge )
+        topCA.wasMerged()
+
+
+class MergeMovingAlgorithms( unittest.TestCase ):
+    def runTest( self ):
+        Configurable.configurableRun3Behavior=1
+        destinationCA = ComponentAccumulator()
+        destinationCA.addSequence( seqAND("dest") )
+
+        sourceCA = ComponentAccumulator()
+        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg1"))
+        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg2"))
+        sourceCA.addSequence( seqAND("innerSeq") )
+        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg3"), sequenceName="innerSeq" )
+
+        destinationCA.merge( sourceCA, sequenceName="dest"  )
+
+        #destinationCA.merge( sourceCA )
+        self.assertIsNotNone( findAlgorithm( destinationCA.getSequence("dest"), "alg1" ), "Algorithm not placed in sub-sequence" )
+        self.assertIsNotNone( findSubSequence( destinationCA.getSequence(), "innerSeq" ), "The sequence is not added" )
+        self.assertIsNotNone( findAlgorithm( destinationCA.getSequence("dest"), "alg3" ), "Algorithm deep in thesource CA not placed in sub-sequence of destiantion CA" )
+        destinationCA.wasMerged()
+        sourceCA.wasMerged()
+
+if __name__ == "__main__":
+    unittest.main()
-- 
GitLab


From 412733ed6efbc0debc7d81330474e99e56120555 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Tue, 19 Feb 2019 16:50:03 +0100
Subject: [PATCH 004/163] added functionality to change properties for many
 components

---
 Control/AthenaConfiguration/CMakeLists.txt    |   2 +-
 .../python/ComponentAccumulator.py            | 367 +++++-------------
 .../TrigUpgradeTest/share/newJOtest.py        |  27 +-
 3 files changed, 112 insertions(+), 284 deletions(-)

diff --git a/Control/AthenaConfiguration/CMakeLists.txt b/Control/AthenaConfiguration/CMakeLists.txt
index 9c17642b2cb3..2575ddee9b4f 100644
--- a/Control/AthenaConfiguration/CMakeLists.txt
+++ b/Control/AthenaConfiguration/CMakeLists.txt
@@ -14,7 +14,7 @@ atlas_install_runtime(python/*.pkl )
 atlas_install_scripts( share/confTool.py python/iconfTool/iconfTool )
 
 atlas_add_test( ComponentAccumulatorTest
-   SCRIPT python -m unittest -v AthenaConfiguration.ComponentAccumulator 
+   SCRIPT python -m unittest -v AthenaConfiguration.ComponentAccumulatorTest
    POST_EXEC_SCRIPT nopost.sh )
 
 atlas_add_test( UnifyPropertiesTest
diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 9d136f249a54..1ca584802a6a 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -5,7 +5,6 @@ from AthenaCommon.Configurable import Configurable,ConfigurableService,Configura
 from AthenaCommon.CFElements import isSequence,findSubSequence,findAlgorithm,flatSequencers,findOwningSequence,checkSequenceConsistency
 from AthenaCommon.AlgSequence import AthSequencer
 
-from AthenaConfiguration.AthConfigFlags import AthConfigFlags
 import GaudiKernel.GaudiHandles as GaudiHandles
 from GaudiKernel.GaudiHandles import PublicToolHandle, PublicToolHandleArray, ServiceHandle, PrivateToolHandle, PrivateToolHandleArray
 import ast
@@ -639,7 +638,6 @@ class ComponentAccumulator(object):
         self._wasMerged=True
 
     def createApp(self,OutputLevel=3):
-        log = logging.getLogger("ComponentAccumulator")
         self._wasMerged=True
         from Gaudi.Main import BootstrapHelper
         bsh=BootstrapHelper()
@@ -675,14 +673,14 @@ class ComponentAccumulator(object):
             name=comp.getJobOptName()
             for k, v in comp.getValuedProperties().items():
                 if isinstance(v,Configurable):
-                    log.debug("Adding "+name+"."+k+" = "+v.getFullName())
+                    self._msg.debug("Adding "+name+"."+k+" = "+v.getFullName())
                     bsh.addPropertyToCatalogue(jos,name,k,v.getFullName())
                     addCompToJos(v)
                 elif isinstance(v,GaudiHandles.GaudiHandleArray):
                     bsh.addPropertyToCatalogue(jos,name,k,str([ v1.getFullName() for v1 in v ]))
                 else:
                     if not isSequence(comp) and k!="Members": #This property his handled separatly
-                        log.debug("Adding "+name+"."+k+" = "+str(v))
+                        self._msg.debug("Adding "+name+"."+k+" = "+str(v))
                         bsh.addPropertyToCatalogue(jos,name,k,str(v))
                     pass
                 pass
@@ -697,7 +695,7 @@ class ComponentAccumulator(object):
 
         #Add tree of algorithm sequences:
         for seqName, algoList in flatSequencers( self._sequence ).iteritems():
-            log.debug("Members of %s : %s" % (seqName,str([alg.getFullName() for alg in algoList])))
+            self._msg.debug("Members of %s : %s" % (seqName,str([alg.getFullName() for alg in algoList])))
             bsh.addPropertyToCatalogue(jos,seqName,"Members",str( [alg.getFullName() for alg in algoList]))
             for alg in algoList:
                 addCompToJos(alg)
@@ -722,7 +720,6 @@ class ComponentAccumulator(object):
 
 
     def run(self,maxEvents=None,OutputLevel=3):
-        log = logging.getLogger("ComponentAccumulator")
         app = self.createApp (OutputLevel)
 
         #Determine maxEvents
@@ -735,19 +732,19 @@ class ComponentAccumulator(object):
         print "INITIALIZE STEP"
         sc = app.initialize()
         if not sc.isSuccess():
-            log.error("Failed to initialize AppMgr")
+            selg._msg.error("Failed to initialize AppMgr")
             return sc
 
         app.printAlgsSequences() #could be removed later ....
 
         sc = app.start()
         if not sc.isSuccess():
-            log.error("Failed to start AppMgr")
+            self._msg.error("Failed to start AppMgr")
             return sc
 
         sc = app.run(maxEvents)
         if not sc.isSuccess():
-            log.error("Failure running application")
+            self._msg.error("Failure running application")
             return sc
 
         app.stop().ignore()
@@ -768,273 +765,91 @@ def CAtoGlobalWrapper(cfgmethod,flags):
      return
 
 
+class PropSetterProxy(object):
+   __compPaths = {}
+   __scannedCA = None
+
+   def __init__(self, ca, path):      
+      self.__path = path
+      self.__findComponents( ca )
+
+      
+   def __setattr__(self, name, value):
+       if name.startswith("_PropSetterProxy"):
+           return super(PropSetterProxy, self).__setattr__(name, value)
+       
+       msg = logging.getLogger('forcomps')
+       import fnmatch
+       for component_path, component in PropSetterProxy.__compPaths.iteritems():
+           if fnmatch.fnmatch( component_path, self.__path ):
+               #print "cp", component
+               if name in component.getProperties():
+                   try:
+                       setattr( component, name, value )
+                       msg.debug( "Set property: %s to value %s of component %s because it matched %s " % ( name, str(value), component_path, self.__path )   )
+                   except Exception, ex:
+                       msg.warning( "Failed to set property: %s to value %s of component %s because it matched %s, reason: %s" % ( name, str(value), component_path, self.__path, str(ex) )   )
+                       pass
+               else:
+                   msg.warning( "No such a property: %s in component %s, tried to set it because it matched %s" % ( name, component_path, self.__path )   )
+
+
+   def __findComponents(self, ca):
+       if ca is not PropSetterProxy.__scannedCA:
+           PropSetterProxy.__scannedCA = ca
+           PropSetterProxy.__compPaths = {}
+           def __add(path, comp):
+               if comp.getName() == "":
+                   return
+               PropSetterProxy.__compPaths[ path ] = comp
+
+           for svc in ca._services:
+               PropSetterProxy.__compPaths['SvcMgr/'+svc.getFullName()] = svc
+           for t in ca._publicTools:
+               PropSetterProxy.__compPaths['ToolSvc/'+t.getFullName()] = t
+           
+           def __nestAlg(startpath, comp): # it actually dives inside the algorithms and (sub) tools               
+               if comp.getName() == "":
+                   return
+               for name, value in comp.getProperties().iteritems():
+                   if isinstance( value, ConfigurableAlgTool ) or isinstance( value, PrivateToolHandle ):
+                       __add( startpath+"/"+name+"/"+value.getFullName(), value )
+                       __nestAlg( startpath+"/"+name+"/"+value.getName(), value )
+                   if isinstance( value, PrivateToolHandleArray):
+                       for toolIndex,t in enumerate(value):
+                           __add( startpath+"/"+name+"/"+t.getFullName(), t )
+                           __nestAlg( startpath+"/"+name+"/"+t.getName(), value[toolIndex] )
+                           
+               
+           def __nestSeq(startpath, comp):
+               for c in comp.getChildren():
+                   if isSequence(c):
+                       __nestSeq( startpath+"/"+c.getName(), c)                       
+                   else: # the algorithm or tool                      
+                       PropSetterProxy.__compPaths[ startpath+"/"+c.getFullName() ] = comp
+                       __nestAlg( startpath+"/"+c.getFullName(), c )
+
+           __nestSeq("", ca._sequence)
+            
+            
+def forcomps(componentAccumulator, path):
+   """ Utility to set properties of components using wildcards
+   
+   Example:
+   forcomps(ca, "*/HLTTop/*/*Hypo*").OutputLevel=VERBOSE
+      
+   The compoments name & locations in the CF tree are translated into the unix like path. 
+   Components of matching path are taken under consideration in setting the property.
+   If the property is set succesfully an INFO message is printed. Else, a warning is printed.      
+   
+   The convention for path of nested components is as follows:
+   Sequencer - only the name is used in the path
+   Algorithm - full name - type/instance_name (aka full name) is used
+   PrivateTools - the name of the property + the type/instance_name are added
+   PublicTools - are located under ToolSvc/ and type/instance_name is used
+   Services - located under SvcMgr/ and type/instance_name is used
+   """
+   return PropSetterProxy(componentAccumulator, path)
 
-# self test
-import unittest
-
-class TestComponentAccumulator( unittest.TestCase ):
-    def setUp(self):
-
-        Configurable.configurableRun3Behavior+=1
-        # trivial case without any nested sequences
-        from AthenaCommon.Configurable import ConfigurablePyAlgorithm # guinea pig algorithms
-        from AthenaCommon.CFElements import seqAND, parOR
-        from AthenaCommon.Logging import log
-        from AthenaCommon.Constants import DEBUG
-
-        log.setLevel(DEBUG)
-
-        dummyCfgFlags=AthConfigFlags()
-        dummyCfgFlags.lock()
-
-        class Algo(ConfigurablePyAlgorithm):
-            def __init__(self, name):
-                super( ConfigurablePyAlgorithm, self ).__init__( name )
-
-        def AlgsConf1(flags):
-            acc = ComponentAccumulator()
-            a1=Algo("Algo1")
-            a2=Algo("Algo2")
-            return acc,[a1,a2]
-
-
-        def AlgsConf2(flags):
-            acc = ComponentAccumulator()
-            result,algs=AlgsConf1( flags )
-            acc.merge(result)
-            algs.append(Algo("Algo3"))
-            return acc,algs
-
-        acc = ComponentAccumulator()
-
-        # top level algs
-        acc1,algs=AlgsConf2(dummyCfgFlags)
-        acc.merge(acc1)
-        acc.addEventAlgo(algs)
-
-        def AlgsConf3(flags):
-            acc = ComponentAccumulator()
-            na1=Algo("NestedAlgo1")
-            return acc,na1
-
-        def AlgsConf4(flags):
-            acc,na1= AlgsConf3( flags )
-            NestedAlgo2 = Algo("NestedAlgo2")
-            NestedAlgo2.OutputLevel=7
-            return acc,na1,NestedAlgo2
-
-        acc.addSequence( seqAND("Nest") )
-        acc.addSequence( seqAND("subSequence1"), parentName="Nest" )
-        acc.addSequence( parOR("subSequence2"), parentName="Nest" )
-
-        acc.addSequence( seqAND("sub2Sequence1"), parentName="subSequence1")
-        acc.addSequence( seqAND("sub3Sequence1"), parentName="subSequence1")
-        acc.addSequence( seqAND("sub4Sequence1"), parentName="subSequence1")
-
-        accNA1=AlgsConf4(dummyCfgFlags)
-        acc.merge(accNA1[0])
-        acc.addEventAlgo(accNA1[1:],"sub2Sequence1" )
-        acc.store(open("testFile.pkl", "w"))
-        self.acc = acc
-
-
-    def test_algorihmsAreAdded( self ):
-        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo1", 1).name(), "Algo1", "Algorithm not added to a top sequence" )
-        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo2", 1).name(),  "Algo2", "Algorithm not added to a top sequence" )
-        self.assertEqual( findAlgorithm( self.acc.getSequence(), "Algo3", 1).name(), "Algo3", "Algorithm not added to a top sequence" )
-
-    def test_sequencesAreAdded( self ):
-        self.assertIsNotNone( self.acc.getSequence("subSequence1" ), "Adding sub-sequence failed" )
-        self.assertIsNotNone( self.acc.getSequence("subSequence2" ), "Adding sub-sequence failed" )
-        self.assertIsNotNone( self.acc.getSequence("sub2Sequence1"), "Adding sub-sequence failed" )
-        self.assertIsNotNone( findSubSequence( self.acc.getSequence("subSequence1"), "sub2Sequence1"), "Adding sub-sequence done in a wrong place" )
-
-    def test_algorithmsInNestedSequences( self ):
-        self.assertIsNotNone( findAlgorithm( self.acc.getSequence(), "NestedAlgo1" ), "Algorithm added to nested sequence" )
-        self.assertIsNotNone( findAlgorithm( self.acc.getSequence(), "NestedAlgo1", 1 ) is None, "Algorithm mistakenly in top sequence" )
-        self.assertIsNotNone( findAlgorithm( findSubSequence( self.acc.getSequence(), "sub2Sequence1"), "NestedAlgo1", 1 ), "Algorithm not in right sequence" )
-
-
-    def test_readBackConfiguration( self ):
-        import pickle
-        with open( "testFile.pkl" ) as f:
-            s = pickle.load( f )
-            self.assertIsNotNone( s, "The pickle has no content")
-
-class TestHLTCF( unittest.TestCase ):
-    def runTest( self ):
-        # replicate HLT issue, it occured because the sequnces were recorded in the order of storing in the dict and thus the
-        # some of them (in this case hltSteps) did not have properties recorded
-        from AthenaCommon.CFElements import seqAND, seqOR, parOR
-        from AthenaCommon.Configurable import ConfigurablePyAlgorithm # guinea pig algorithms
-        Configurable.configurableRun3Behavior=1
-        acc = ComponentAccumulator()
-        acc.addSequence( seqOR("hltTop") )
-        algos2 = ConfigurablePyAlgorithm( "RecoAlgInTop" )
-        acc.addEventAlgo( algos2, sequenceName="hltTop" ) # some algo
-        acc.addSequence( seqAND("hltSteps"), parentName="hltTop" )
-        acc.addSequence( parOR("hltStep_1"), parentName="hltSteps" )
-        acc.addSequence( seqAND("L2CaloEgammaSeq"), "hltStep_1" )
-        acc.addSequence( parOR("hltStep_2"), parentName="hltSteps" )
-        acc.moveSequence( "L2CaloEgammaSeq", "hltStep_2" )
-
-        acc.store(open("testFile2.pkl", "w"))
-        import pickle
-        f = open("testFile2.pkl")
-        s = pickle.load(f)
-        f.close()
-        self.assertNotEqual( s['hltSteps']['Members'], '[]', "Empty set of members in hltSteps, Sequences recording order metters" )
-
-
-class MultipleParentsInSequences( unittest.TestCase ):
-    def runTest( self ):
-       # test if an algorithm (or sequence) can be controlled by more than one sequence
-        Configurable.configurableRun3Behavior=1
-        from AthenaCommon.CFElements import seqAND
-        from AthenaCommon.Configurable import ConfigurablePyAlgorithm # guinea pig algorithms
-        accTop = ComponentAccumulator()
-
-        recoSeq = seqAND("seqReco")
-        recoAlg = ConfigurablePyAlgorithm( "recoAlg" )
-        recoSeq += recoAlg
-
-        acc1 = ComponentAccumulator()
-        acc1.addSequence( seqAND("seq1") )
-        acc1.addSequence( recoSeq, parentName="seq1" )
-
-        acc2 = ComponentAccumulator()
-        acc2.addSequence( seqAND("seq2") )
-        acc2.addSequence( recoSeq, parentName="seq2" )
-
-        accTop.merge( acc1 )
-        accTop.merge( acc2 )
-
-        accTop.printConfig()
-
-        self.assertIsNotNone( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), "Algorithm missing in the first sequence" )
-        self.assertIsNotNone( findAlgorithm( accTop.getSequence( "seq2" ), "recoAlg" ), "Algorithm missing in the second sequence" )
-        s = accTop.getSequence( "seqReco" )
-        self.assertEqual( len( s.getChildren() ), 1, "Wrong number of algorithms in reco seq: %d " % len( s.getChildren() ) )
-        self.assertIs( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), findAlgorithm( accTop.getSequence( "seq2" ), "recoAlg" ), "Algorithms are cloned" )
-        self.assertIs( findAlgorithm( accTop.getSequence( "seq1" ), "recoAlg" ), recoAlg, "Clone of the original inserted in sequence" )
 
-        accTop.store( open("dummy.pkl", "w") )
-        import pickle
-        # check if the recording did not harm the sequences
-        with open("dummy.pkl") as f:
-            s = pickle.load( f )
-            self.assertEquals( s['seq1']["Members"], "['AthSequencer/seqReco']", "After pickling recoSeq missing in seq1 " + s['seq1']["Members"])
-            self.assertEquals( s['seq2']["Members"], "['AthSequencer/seqReco']", "After pickling recoSeq missing in seq2 " + s['seq2']["Members"])
-            self.assertEquals( s['seqReco']["Members"], "['ConfigurablePyAlgorithm/recoAlg']", "After pickling seqReco is corrupt " + s['seqReco']["Members"] )
-
-class ForbidRecursiveSequences( unittest.TestCase ):
-    def runTest( self ):
-        #Can't add a sequence with the same name below itself, e.g.
-        # \__ AthAlgSeq (seq: PAR AND)
-        #    \__ seq1 (seq: SEQ AND)
-        #       \__ seq1 (seq: SEQ AND)
-        def selfSequence():
-            Configurable.configurableRun3Behavior=1
-            from AthenaCommon.CFElements import seqAND
-            accTop = ComponentAccumulator()
-            accTop.wasMerged()
-            seq1 = seqAND("seq1")
-            seq1_again = seqAND("seq1")
-            accTop.addSequence(seq1)
-            accTop.addSequence(seq1_again, parentName = "seq1")
-
-        #Allowed to add a sequence with the same name at same depth, e.g.
-        # \__ AthAlgSeq (seq: PAR AND)
-        #    \__ seq1 (seq: SEQ AND)
-        #       \__ seq2 (seq: SEQ AND)
-        #       \__ seq2 (seq: SEQ AND)
-        # should not raise any exceptions
-        def selfTwinSequence():
-            Configurable.configurableRun3Behavior=1
-            from AthenaCommon.CFElements import seqAND
-            accTop = ComponentAccumulator()
-            accTop.wasMerged()
-            seq1 = seqAND("seq1")
-            seq2 = seqAND("seq2")
-            seq2_again = seqAND("seq1")
-            accTop.addSequence(seq1)
-            accTop.addSequence(seq2, parentName = "seq1")
-            accTop.addSequence(seq2_again, parentName = "seq1")
-            accTop.wasMerged()
-            
 
-        #Can't add a sequence with the same name two steps below itself, e.g.
-        # \__ AthAlgSeq (seq: PAR AND)
-        #    \__ seq1 (seq: SEQ AND)
-        #       \__ seq2 (seq: SEQ AND)
-        #          \__ seq1 (seq: SEQ AND)
-        def selfGrandParentSequence():
-            Configurable.configurableRun3Behavior=1
-            from AthenaCommon.CFElements import seqAND
-            accTop = ComponentAccumulator()
-            accTop.store( open("test.pkl", "w") )#silence RuntimeError
-            seq1 = seqAND("seq1")
-            seq2 = seqAND("seq2")
-            seq1_again = seqAND("seq1")
-            accTop.addSequence(seq1)
-            accTop.addSequence(seq2, parentName = "seq1")
-            accTop.addSequence(seq1_again, parentName = "seq2")
-            accTop.wasMerged()
-
-        #Can't merge sequences with the same name two steps below itself, e.g.
-        # \__ AthAlgSeq (seq: PAR AND)
-        #    \__ seq1 (seq: SEQ AND)
-        #       \__ seq2 (seq: SEQ AND)
-        #          \__ seq1 (seq: SEQ AND)
-        def selfMergedGrandParentSequence():
-            Configurable.configurableRun3Behavior=1
-            from AthenaCommon.CFElements import seqAND
-            acc1=ComponentAccumulator()
-            acc1.wasMerged()
-            acc1.addSequence(seqAND("seq1"))
-            acc2=ComponentAccumulator()
-            acc2.wasMerged()
-            acc2.addSequence(seqAND("seq2"))
-            acc2.addSequence(seqAND("seq1"), "seq2")
-            acc1.merge(acc2)
-
-        self.assertRaises(RuntimeError, selfSequence )
-        self.assertRaises(RuntimeError, selfGrandParentSequence )
-        self.assertRaises(RuntimeError, selfMergedGrandParentSequence )
-
-class FailedMerging( unittest.TestCase ):
-    def runTest( self ):
-        topCA = ComponentAccumulator()
-
-        def badMerge():
-            someCA = ComponentAccumulator()
-            topCA.merge(  (someCA, 1, "hello")  )
-        self.assertRaises(RuntimeError, badMerge )
-        topCA.wasMerged()
-
-
-class MergeMovingAlgorithms( unittest.TestCase ):
-    def runTest( self ):
-        Configurable.configurableRun3Behavior=1
-        from AthenaCommon.CFElements import seqAND
-        from AthenaCommon.Configurable import ConfigurablePyAlgorithm # guinea pig algorithms
-        destinationCA = ComponentAccumulator()
-        destinationCA.addSequence( seqAND("dest") )
-
-        sourceCA = ComponentAccumulator()
-        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg1"))
-        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg2"))
-        sourceCA.addSequence( seqAND("innerSeq") )
-        sourceCA.addEventAlgo(ConfigurablePyAlgorithm("alg3"), sequenceName="innerSeq" )
-
-        destinationCA.merge( sourceCA, sequenceName="dest"  )
-
-        #destinationCA.merge( sourceCA )
-        self.assertIsNotNone( findAlgorithm( destinationCA.getSequence("dest"), "alg1" ), "Algorithm not placed in sub-sequence" )
-        self.assertIsNotNone( findSubSequence( destinationCA.getSequence(), "innerSeq" ), "The sequence is not added" )
-        self.assertIsNotNone( findAlgorithm( destinationCA.getSequence("dest"), "alg3" ), "Algorithm deep in thesource CA not placed in sub-sequence of destiantion CA" )
-        destinationCA.wasMerged()
-        sourceCA.wasMerged()
-
-if __name__ == "__main__":
-    unittest.main()
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
index 21bd5aa00cda..cd6b9b94966a 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
@@ -27,7 +27,7 @@ flags.Trigger.L1Decoder.forceEnableAllChains = True
 
 flags.lock()
 
-from AthenaCommon.Constants import INFO,DEBUG
+from AthenaCommon.Constants import INFO,DEBUG,WARNING
 acc = ComponentAccumulator()
 
 from ByteStreamCnvSvc.ByteStreamConfig import TrigBSReadCfg
@@ -68,12 +68,24 @@ if mcc:
     top += mcc
 
 
-# from TrigUpgradeTest.TestUtils import applyMenu
-# applyMenu( acc.getEventAlgo( "L1Decoder" ) )
-#acc.getEventAlgo( "L1Decoder" ).OutputLevel=DEBUG
-#acc.getEventAlgo( "L2ElectronCaloHypo" ).OutputLevel=DEBUG
-#acc.getEventAlgo( "FastEMCaloAlgo" ).OutputLevel=DEBUG
-#acc.getEventAlgo( "Filter_for_L2PhotonCaloHypo" ).OutputLevel=DEBUG
+from AthenaConfiguration.ComponentAccumulator import forcomps
+from AthenaCommon.Logging import logging
+logging.getLogger('forcomps').setLevel(DEBUG)
+forcomps(acc, "*/L1Decoder").OutputLevel = DEBUG
+forcomps(acc, "*/L1Decoder/*Tool").OutputLevel = DEBUG # tools
+forcomps(acc, "*HLTTop/*Hypo*").OutputLevel = DEBUG # hypo algs
+forcomps(acc, "*HLTTop/*Hypo*/*Tool*").OutputLevel = DEBUG # hypo tools
+forcomps(acc, "*HLTTop/RoRSeqFilter/*").OutputLevel = DEBUG # filters
+forcomps(acc, "*HLTTop/*Input*").OutputLevel = DEBUG # input makers
+forcomps(acc, "*HLTTop/*GenericMonitoringTool*").OutputLevel = WARNING # silcence mon tools (addressing by type)
+
+
+# # from TrigUpgradeTest.TestUtils import applyMenu
+# # applyMenu( acc.getEventAlgo( "L1Decoder" ) )
+# #acc.getEventAlgo( "L1Decoder" ).OutputLevel=DEBUG
+# #acc.getEventAlgo( "L2ElectronCaloHypo" ).OutputLevel=DEBUG
+# #acc.getEventAlgo( "FastEMCaloAlgo" ).OutputLevel=DEBUG
+# #acc.getEventAlgo( "Filter_for_L2PhotonCaloHypo" ).OutputLevel=DEBUG
 
 acc.printConfig()
 
@@ -86,3 +98,4 @@ with file(fname, "w") as p:
 
 
 
+
-- 
GitLab


From 4488f97b71aba6e0e44c5c237548c34822b06f9d Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Wed, 20 Feb 2019 21:26:27 +0100
Subject: [PATCH 005/163] fixed NewJO

---
 Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
index 9a2055fbe333..5bfa3555b7c2 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
@@ -68,7 +68,7 @@ if mcc:
     top += mcc
 
 
-from AthenaConfiguration.ComponentAccumulator import forcomps
+from AthenaConfiguration.ComponentAccumulator import foreach_component
 from AthenaCommon.Logging import logging
 logging.getLogger('forcomps').setLevel(DEBUG)
 foreach_component(acc, "*/L1Decoder").OutputLevel = DEBUG
-- 
GitLab


From 3b6572ea2dfcf2eb35a803c72a88019f02f55679 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Mon, 25 Feb 2019 14:50:59 +0100
Subject: [PATCH 006/163] CA on which the foreach_component was used is not
 mergable

---
 Control/AthenaConfiguration/python/ComponentAccumulator.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 965401231f77..eeb1523b89da 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -42,6 +42,7 @@ class ComponentAccumulator(object):
 
         #To check if this accumulator was merged:
         self._wasMerged=False
+        self._isMergable=True
 
 
     def empty(self):
@@ -451,7 +452,9 @@ class ComponentAccumulator(object):
 
         if not isinstance(other,ComponentAccumulator):
             raise TypeError("Attempt merge wrong type %s. Only instances of ComponentAccumulator can be added" % type(other).__name__)
-
+        
+        if not other._isMergable:
+            raise ConfigurationError("Attempted to merge the accumulator that was unsafely manipulated (likely with foreach_component, ...)")
 
         if not Configurable.configurableRun3Behavior:
             raise ConfigurationError("discoverd Configurable.configurableRun3Behavior=False while working woth ComponentAccumulator")
@@ -883,6 +886,7 @@ def foreach_component(componentAccumulator, path):
    PublicTools - are located under ToolSvc/ and type/instance_name is used
    Services - located under SvcMgr/ and type/instance_name is used
    """
+   componentAccumulator._isMergable=False
    return PropSetterProxy(componentAccumulator, path)
 
 
-- 
GitLab


From 22a8df07ab47da644a52a3daf299d68e1d279576 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 27 Feb 2019 17:38:55 +0000
Subject: [PATCH 007/163] Adding first update where I looked at implementing
 the cache into the raw data provider for RPC and need to next look at the ROD
 decoder and also how the other tools are included

---
 .../src/RPC_RawDataProviderTool.cxx           |   41 +-
 .../src/RPC_RawDataProviderTool.h             |    7 +-
 .../MuonConfig/share/MuonDataDecodeTest.ref   | 1296 ++++++++++++++++-
 3 files changed, 1321 insertions(+), 23 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
index 7cc1e4841c91..c7a9f62bd030 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
@@ -37,6 +37,7 @@ Muon::RPC_RawDataProviderTool::RPC_RawDataProviderTool(
 {
     declareInterface<IMuonRawDataProviderTool>(this);
     declareProperty("Decoder",     m_decoder);
+    declareProperty ("RpcContainerCacheKey", m_rdoContainerCacheKey, "Optional external cache for the RPC container");
 }
 
 
@@ -50,11 +51,13 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
     StatusCode sc = AlgTool::initialize();
     if (sc.isFailure()) return sc;
 
-   sc = service("ActiveStoreSvc", m_activeStore);
-   if ( !sc.isSuccess() ) {
-      ATH_MSG_FATAL(  "Could not get active store service" );
-      return sc;
-   }
+    sc = service("ActiveStoreSvc", m_activeStore);
+    if ( !sc.isSuccess() ) {
+       ATH_MSG_FATAL(  "Could not get active store service" );
+       return sc;
+    }
+
+    ATH_CHECK( m_rdoContainerCacheKey.initialize( !m_rdoContainerCacheKey.key().empty() ) );
 
     if (m_decoder.retrieve().isFailure())
     {
@@ -160,7 +163,7 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
     
     // register the container only when the imput from ByteStream is set up     
     m_activeStore->setStore( &*evtStore() ); 
-    if( has_bytestream || m_RpcPadC.key() != "RPCPAD" )
+    if( has_bytestream || m_containerKey.key() != "RPCPAD" )
     {
         m_AllowCreation= true;
     }
@@ -171,7 +174,7 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
     
     ATH_MSG_INFO( "initialize() successful in " << name());
 
-    ATH_CHECK( m_RpcPadC.initialize() );
+    ATH_CHECK( m_containerKey.initialize() );
     ATH_CHECK( m_sec.initialize() );
     
     return StatusCode::SUCCESS;
@@ -248,10 +251,25 @@ StatusCode Muon::RPC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs
                                     // on the user experience
     }
 
-    SG::WriteHandle<RpcPadContainer>  padHandle(m_RpcPadC);
-    if (padHandle.isPresent())
+    SG::WriteHandle<RpcPadContainer> rdoContainerHandle(m_containerKey);
+    if (rdoContainerHandle.isPresent())
       return StatusCode::SUCCESS;
-    auto pad = std::make_unique<RpcPadContainer> (padMaxIndex);
+
+
+    // Split the methods to have one where we use the cache and one where we just setup the container
+    const bool externalCacheRDO = !m_rdoContainerCacheKey.key().empty();
+    if(!externalCacheRDO){
+      ATH_CHECK( rdoContainerHandle.record(std::make_unique<RpcPadContainer> (padMaxIndex) ) );
+      ATH_MSG_DEBUG( "Created RpcPadContainer" );
+    }
+    else{
+      SG::UpdateHandle<RpcPad_Cache> update(m_rdoContainerCacheKey);
+      ATH_CHECK(update.isValid());
+      ATH_CHECK(rdoContainerHandle.record (std::make_unique<RpcPadContainer>( update.ptr() )));
+      ATH_MSG_DEBUG("Created container using cache for " << m_rdoContainerCacheKey.key());
+    }
+  
+    RpcPadContainer* pad = rdoContainerHandle.ptr();
  
     SG::WriteHandle<RpcSectorLogicContainer>    logicHandle(m_sec);
     auto logic = std::make_unique<RpcSectorLogicContainer>();
@@ -281,7 +299,8 @@ StatusCode Muon::RPC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs
             // store the error condition into the StatusCode and continue
         }
     }
-    ATH_CHECK( padHandle.record (std::move (pad)) );
+    // Unsure about this at the moment
+    //ATH_CHECK( rdoContainerHandle.record (std::move (pad)) );
     ATH_CHECK( logicHandle.record (std::move (logic)) );
     //in presence of errors return FAILURE
 //CALLGRIND_STOP_INSTRUMENTATION
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
index c1a2778c582a..820755fecbba 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
@@ -9,6 +9,7 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "MuonCnvToolInterfaces/IMuonRawDataProviderTool.h"
 #include "MuonRDO/RpcPadContainer.h"
+#include "MuonRDO/RpcPad_Cache.h"
 #include "MuonRDO/RpcSectorLogicContainer.h"
 
 class StoreGateSvc;
@@ -54,7 +55,7 @@ private:
     //    ServiceHandle<StoreGateSvc>         m_eventStore;
     ToolHandle<IRpcROD_Decoder>         m_decoder;
 //    std::string                         m_rdoContainerKey;
-    SG::WriteHandleKey<RpcPadContainer>            m_RpcPadC {
+    SG::WriteHandleKey<RpcPadContainer>            m_containerKey {
 	this, "RdoLocation", "RPCPAD", "Name of the RPCPAD produced by RawDataProvider"};
     SG::WriteHandleKey<RpcSectorLogicContainer>    m_sec{
 	this, "RPCSec", "RPC_SECTORLOGIC", "Name of the RPC_SECTORLOGIC produced by RawDataProvider"};
@@ -68,6 +69,10 @@ private:
     const IRPCcablingSvc *m_rpcCabling;
     // Rob Data Provider handle 
     ServiceHandle<IROBDataProviderSvc>          m_robDataProvider;
+
+    /// RPC container cache key
+    SG::UpdateHandleKey<RpcPad_Cache> m_rdoContainerCacheKey ;
+
     
 };
 
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index 80ddcf2e960b..11fd69c71ab9 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -1,10 +1,47 @@
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : [function]
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:Athena            INFO About to setup Rpc Raw data decoding
 Py:ComponentAccumulator   DEBUG Adding component EventSelectorByteStream/EventSelector to the job
@@ -34,13 +71,119 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
 dynamically loading the flag Detector
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : [function]
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : [function]
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : [function]
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : [function]
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : [function]
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -49,12 +192,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -73,6 +219,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -97,25 +244,37 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
@@ -126,12 +285,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -151,6 +313,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -172,17 +335,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -191,12 +375,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -216,8 +403,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -258,6 +447,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -272,10 +467,171 @@ Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersiste
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 dynamically loading the flag Muon
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
@@ -296,12 +652,30 @@ Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 4 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
@@ -317,9 +691,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -331,21 +719,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
@@ -356,12 +765,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -384,16 +796,32 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -402,12 +830,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -426,6 +857,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -450,14 +882,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component RPCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonRPC_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.RPCCablingDbTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -466,12 +922,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -491,6 +950,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -512,14 +972,36 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component LVL1TGC::TGCRecRoiSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TGCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -528,12 +1010,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -553,8 +1038,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -593,6 +1080,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -632,9 +1125,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -646,14 +1153,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingAlg
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AtlasFieldSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MuonCalib::MdtCalibDbCoolStrTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -662,12 +1197,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -714,6 +1252,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -726,6 +1270,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -738,6 +1288,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -750,6 +1306,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -762,6 +1324,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -774,6 +1342,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -786,11 +1360,18 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -799,19 +1380,48 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CSCcablingSvc
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
 Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
 |-Atomic                                  = False
 |-AuditAlgorithms                         = False
 |-AuditBeginRun                           = False
@@ -823,21 +1433,29 @@ Py:Athena            INFO Print Config
 |-AuditRestart                            = False
 |-AuditStart                              = False
 |-AuditStop                               = False
+|-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7fb6097b9e50 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
+|-EvtStore                   @0x7fb6097b9dd0 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7fb607cefb00 = []  (default: [])
+|-ExtraOutputs               @0x7fb607cefc68 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
+|-Members                    @0x7fb607cef9e0 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7fb607cefd40 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
 |-Sequential                              = False
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
+|-Timeline                                = True
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
 | |-AuditBeginRun                           = False
@@ -849,29 +1467,44 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fb6082c0690 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb6082c0610 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cefdd0 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cefea8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cefd88 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fb608438550 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7fb6082c0710 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-Decoder              @0x7fb60874b810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore             @0x7fb608268510 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7fb6082684d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fb6082ab290 = []  (default: [])
+| | |-ExtraOutputs         @0x7fb6082ab170 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel                       = 0
+| | |-RPCSec                            = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                       = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey              = 'StoreGateSvc+'
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -881,6 +1514,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7fb6082685d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7fb608268610 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7fb6082ab200 = []  (default: [])
+| | | |-ExtraOutputs        @0x7fb6082ab1b8 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -899,15 +1536,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fb6082ce650 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb6082ce5d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6128 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf6200 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf6170 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fb6095638c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -916,7 +1561,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7fb6095639b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7fb60820bb10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fb60820bb50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fb608210560 = []  (default: [])
+| | |-ExtraOutputs      @0x7fb6082103b0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -928,6 +1578,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fb60820bc10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fb60820bc50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fb608210200 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fb608210368 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -946,15 +1600,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fb608290890 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb608290810 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6248 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf62d8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf61b8 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fb608438c50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -964,6 +1626,11 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7fb609563c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7fb607dc9c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7fb607dc9c50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fb607dd0560 = []  (default: [])
+| | |-ExtraOutputs         @0x7fb607dd05f0 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -976,6 +1643,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fb607dc9d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fb607dc9d50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fb607dd04d0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fb607dd0488 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -994,15 +1665,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fb6082a9d90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb6082a9cd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6320 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf6368 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf6098 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fb608438e50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1012,7 +1691,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7fb609563e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7fb607d8cad0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7fb607d8cb10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fb607d89c68 = []  (default: [])
+| | |-ExtraOutputs         @0x7fb607d89ef0 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1024,6 +1708,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fb607d8cbd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fb607d8cc10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fb607d89dd0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fb607d89d88 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1042,19 +1730,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fb608434d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7fb607cc6590 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb607cc6510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf60e0 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf6440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf6488 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fb60ae66b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fb607cc6610 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
 | | |-AuditFinalize                                   = False
 | | |-AuditInitialize                                 = False
@@ -1064,11 +1762,16 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
+| | |-DetStore                           @0x7fb607d2e750 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7fb607d2e7d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7fb607d9b638 = []  (default: [])
+| | |-ExtraOutputs                       @0x7fb607d9b7e8 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7fb6080a53d0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1086,6 +1789,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fb607d2e850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fb607d2e890 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fb607d9b908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fb607d9b8c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1102,20 +1809,30 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fb607d3b050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7fb607d20490 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb607d20410 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6290 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf64d0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf6518 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fb60ae66b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7fb607d20510 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
 | | |-AuditFinalize                                        = False
 | | |-AuditInitialize                                      = False
@@ -1125,6 +1842,10 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
+| | |-DetStore                                @0x7fb607d2e610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7fb607d2e950 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7fb607d3e8c0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7fb607d3e758 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1133,7 +1854,9 @@ Py:Athena            INFO Print Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7fb607d3e680 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7fb607d3e098 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1149,19 +1872,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fb60a6e0890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7fb607cba450 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb607cba3d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf65a8 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf6638 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf65f0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fb60ae66b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fb607cba4d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
 | | |-AuditFinalize                        = False
 | | |-AuditInitialize                      = False
@@ -1172,9 +1905,13 @@ Py:Athena            INFO Print Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
+| | |-DetStore                @0x7fb607d2ebd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7fb607d2ec90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7fb607d48ef0 = []  (default: [])
+| | |-ExtraOutputs            @0x7fb607d48d88 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1201,19 +1938,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7fb6084155a0 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7fb607d3ca50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb607d3c950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6710 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf63b0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf6680 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fb60ae66b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fb607d3cad0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1223,7 +1970,13 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7fb60a74ab10 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7fb607d46b30 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
+| | |-DetStore          @0x7fb607d2e790 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fb607d2ef10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fb607d3e2d8 = []  (default: [])
+| | |-ExtraOutputs      @0x7fb607d3eef0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1236,6 +1989,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
+| | | |-DetStore           @0x7fb607d2ef50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7fb607d2ef90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7fb607d3ef80 = []  (default: [])
+| | | |-ExtraOutputs       @0x7fb608210cb0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -1262,6 +2019,11 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7fb607d2ee90 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7fb607d2e8d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fb607d2eed0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fb607d3e050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fb607d3eab8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -1278,30 +2040,449 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fb607c3a290 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fb607c3a210 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fb607cf6758 = []  (default: [])
+| |-ExtraOutputs               @0x7fb607cf67a0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fb607cf67e8 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7fb607cebb90 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
+RpcRawDataProvider ExtraOutputs []
+RpcRawDataProvider EvtStore StoreGateSvc
+RpcRawDataProvider ExtraInputs []
+RpcRawDataProvider RegionSelectionSvc RegSelSvc
+RpcRawDataProvider ProviderTool Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool
+RpcRawDataProvider NeededResources []
+RpcRawDataProvider DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider ExtraOutputs []
+TgcRawDataProvider EvtStore StoreGateSvc
+TgcRawDataProvider ExtraInputs []
+TgcRawDataProvider NeededResources []
+TgcRawDataProvider ProviderTool Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool
+TgcRawDataProvider DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider ExtraOutputs []
+MdtRawDataProvider EvtStore StoreGateSvc
+MdtRawDataProvider ExtraInputs []
+MdtRawDataProvider NeededResources []
+MdtRawDataProvider ProviderTool Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool
+MdtRawDataProvider DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider ExtraOutputs []
+CscRawDataProvider EvtStore StoreGateSvc
+CscRawDataProvider ExtraInputs []
+CscRawDataProvider NeededResources []
+CscRawDataProvider ProviderTool Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool
+CscRawDataProvider DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData ExtraOutputs []
+RpcRdoToRpcPrepData DecodingTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool
+RpcRdoToRpcPrepData EvtStore StoreGateSvc
+RpcRdoToRpcPrepData ExtraInputs []
+RpcRdoToRpcPrepData PrintPrepData False
+RpcRdoToRpcPrepData RegionSelectionSvc RegSelSvc
+RpcRdoToRpcPrepData NeededResources []
+RpcRdoToRpcPrepData DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData ExtraOutputs []
+TgcRdoToTgcPrepData DecodingTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool
+TgcRdoToTgcPrepData EvtStore StoreGateSvc
+TgcRdoToTgcPrepData RegionSelectorSvc RegSelSvc
+TgcRdoToTgcPrepData ExtraInputs []
+TgcRdoToTgcPrepData PrintPrepData False
+TgcRdoToTgcPrepData NeededResources []
+TgcRdoToTgcPrepData DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraOutputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraInputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData ExtraOutputs []
+MdtRdoToMdtPrepData DecodingTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool
+MdtRdoToMdtPrepData EvtStore StoreGateSvc
+MdtRdoToMdtPrepData ExtraInputs []
+MdtRdoToMdtPrepData PrintPrepData False
+MdtRdoToMdtPrepData RegionSelectionSvc RegSelSvc
+MdtRdoToMdtPrepData NeededResources []
+MdtRdoToMdtPrepData DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraOutputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraInputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData ExtraOutputs []
+CscRdoToCscPrepData CscRdoToCscPrepDataTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool
+CscRdoToCscPrepData EvtStore StoreGateSvc
+CscRdoToCscPrepData ExtraInputs []
+CscRdoToCscPrepData PrintPrepData False
+CscRdoToCscPrepData RegionSelectionSvc RegSelSvc
+CscRdoToCscPrepData NeededResources []
+CscRdoToCscPrepData DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+CscThesholdClusterBuilder ExtraOutputs []
+CscThesholdClusterBuilder EvtStore StoreGateSvc
+CscThesholdClusterBuilder ExtraInputs []
+CscThesholdClusterBuilder cluster_builder CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool
+CscThesholdClusterBuilder NeededResources []
+CscThesholdClusterBuilder DetStore StoreGateSvc/DetectorStore
+CondInputLoader ExtraOutputs []
+CondInputLoader Load [('CondAttrListCollection', '/MDT/CABLING/MEZZANINE_SCHEMA'), ('CondAttrListCollection', '/EXT/DCS/MAGNETS/SENSORDATA'), ('CondAttrListCollection', '/MDT/CABLING/MAP_SCHEMA')]
+CondInputLoader EvtStore StoreGateSvc
+CondInputLoader ExtraInputs []
+CondInputLoader NeededResources []
+CondInputLoader DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg ExtraOutputs []
+MuonMDT_CablingAlg EvtStore StoreGateSvc
+MuonMDT_CablingAlg ExtraInputs []
+MuonMDT_CablingAlg NeededResources []
+MuonMDT_CablingAlg DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+MuonMDT_CablingAlg MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.IOVDbMetaDataTool ExtraOutputs []
+ToolSvc.IOVDbMetaDataTool FoldersToBeModified ['/Simulation/Parameters']
+ToolSvc.IOVDbMetaDataTool MinMaxRunNumbers []
+ToolSvc.IOVDbMetaDataTool EvtStore StoreGateSvc
+ToolSvc.IOVDbMetaDataTool AttributesToBeRemoved ['RandomSeedOffset']
+ToolSvc.IOVDbMetaDataTool ExtraInputs []
+ToolSvc.IOVDbMetaDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.ByteStreamMetadataTool ExtraOutputs []
+ToolSvc.ByteStreamMetadataTool EvtStore StoreGateSvc
+ToolSvc.ByteStreamMetadataTool ExtraInputs []
+ToolSvc.ByteStreamMetadataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.Muon::MuonIdHelperTool ExtraOutputs []
+ToolSvc.Muon::MuonIdHelperTool EvtStore StoreGateSvc
+ToolSvc.Muon::MuonIdHelperTool ExtraInputs []
+ToolSvc.Muon::MuonIdHelperTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool ExtraOutputs []
+ToolSvc.RPCCablingDbTool EvtStore StoreGateSvc
+ToolSvc.RPCCablingDbTool ExtraInputs []
+ToolSvc.RPCCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool MapCorrectionFolder /RPC/CABLING/MAP_SCHEMA_CORR
+ToolSvc.RPCCablingDbTool MapConfigurationFolder /RPC/CABLING/MAP_SCHEMA
+ToolSvc.RPC_RawDataProviderTool ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool ExtraOutputs []
+ToolSvc.MDTCablingDbTool EvtStore StoreGateSvc
+ToolSvc.MDTCablingDbTool ExtraInputs []
+ToolSvc.MDTCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+ToolSvc.MDTCablingDbTool MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraOutputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RT_InputFiles ['Muon_RT_default.data']
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TimeSlewingCorrection False
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RtFolder /MDT/RTBLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool MeanCorrectionVsR [-5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524]
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool defaultT0 40
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraInputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool UseMLRt True
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool PropagationSpeedBeta 0.85
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TubeFolder /MDT/T0BLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+ToolSvc.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraOutputs []
+ToolSvc.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraInputs []
+ToolSvc.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraOutputs []
+ToolSvc.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraInputs []
+ToolSvc.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+ToolSvc.CscRdoToCscPrepDataTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscThesholdClusterBuilderTool ExtraOutputs []
+ToolSvc.CscThesholdClusterBuilderTool split_fitter CscSplitClusterFitter/CscSplitClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool strip_fitter CalibCscStripFitter/CalibCscStripFitter
+ToolSvc.CscThesholdClusterBuilderTool cscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscThesholdClusterBuilderTool default_fitter SimpleCscClusterFitter/SimpleCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool precision_fitter QratCscClusterFitter/QratCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool EvtStore StoreGateSvc
+ToolSvc.CscThesholdClusterBuilderTool ExtraInputs []
+ToolSvc.CscThesholdClusterBuilderTool DetStore StoreGateSvc/DetectorStore
+EventSelector SharedMemoryTool 
+EventSelector SkipEventSequence []
+EventSelector CounterTool 
+EventSelector Input []
+EventSelector ByteStreamInputSvc ByteStreamInputSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraOutputs []
+EventSelector.xAODMaker::EventInfoSelectorTool EvtStore StoreGateSvc
+EventSelector.xAODMaker::EventInfoSelectorTool BeamCondSvc BeamCondSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraInputs []
+EventSelector.xAODMaker::EventInfoSelectorTool LuminosityTool LuminosityTool
+EventSelector.xAODMaker::EventInfoSelectorTool DetStore StoreGateSvc/DetectorStore
+ByteStreamInputSvc EventStore StoreGateSvc
+ByteStreamInputSvc FullFileName ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+ByteStreamInputSvc AttributeListKeys []
+ByteStreamInputSvc MetaDataStore StoreGateSvc/InputMetaDataStore
+EventPersistencySvc CnvServices ['ByteStreamCnvSvc', 'AthenaPoolCnvSvc/AthenaPoolCnvSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'AthenaPoolCnvSvc']
+ByteStreamCnvSvc InitCnvs ['EventInfo', 'ROIB::RoIBResult', 'HLT::HLTResult']
+ByteStreamCnvSvc EventStore StoreGateSvc
+ByteStreamCnvSvc ROD2ROBmap []
+ByteStreamCnvSvc ByteStreamOutputSvcList []
+ByteStreamCnvSvc GetDetectorMask True
+ROBDataProviderSvc filterRobWithStatus []
+ROBDataProviderSvc filterSubDetWithStatus []
+ByteStreamAddressProviderSvc TypeNames ['TileCellIDC/TileCellIDC', 'MdtDigitContainer/MDT_DIGITS', 'RpcDigitContainer/RPC_DIGITS', 'TgcDigitContainer/TGC_DIGITS', 'CscDigitContainer/CSC_DIGITS', 'ROIB::RecRoIBResult/RecRoIBResult', 'MuCTPI_RIO/MUCTPI_RIO', 'CTP_RIO/CTP_RIO', 'LArRawChannelContainer/LArRawChannels', 'TileRawChannelContainer/TileRawChannelCnt', 'ROIB::RoIBResult/RoIBResult', 'MuCTPI_RDO/MUCTPI_RDO', 'HLT::HLTResult/HLTResult_L2', 'HLT::HLTResult/HLTResult_EF', 'CTP_RDO/CTP_RDO', 'L1TopoRDOCollection/L1TopoRDOCollection']
+ByteStreamAddressProviderSvc TopoProcModuleID [129, 145]
+ByteStreamAddressProviderSvc JetProcModuleID [172, 173]
+ByteStreamAddressProviderSvc CaloClusterProcModuleID [168, 169, 170, 171]
+MetaDataStore IncidentSvc IncidentSvc
+MetaDataStore ProxyProviderSvc ProxyProviderSvc
+InputMetaDataStore IncidentSvc IncidentSvc
+InputMetaDataStore ProxyProviderSvc ProxyProviderSvc
+MetaDataSvc MetaDataContainer MetaDataHdr
+MetaDataSvc CnvSvc AthenaPoolCnvSvc
+ProxyProviderSvc ProviderNames ['ByteStreamAddressProviderSvc', 'IOVDbSvc', 'MetaDataSvc', 'TagInfoMgr']
+GeoModelSvc SupportedGeometry 22
+GeoModelSvc AtlasVersion ATLAS-R2-2016-01-00-01
+GeoModelSvc.MuonDetectorTool ExtraOutputs []
+GeoModelSvc.MuonDetectorTool TheMuonAlignmentTool 
+GeoModelSvc.MuonDetectorTool EvtStore StoreGateSvc
+GeoModelSvc.MuonDetectorTool UseConditionDb 1
+GeoModelSvc.MuonDetectorTool ExtraInputs []
+GeoModelSvc.MuonDetectorTool UseIlinesFromGM 1
+GeoModelSvc.MuonDetectorTool SelectedStJff []
+GeoModelSvc.MuonDetectorTool DetStore StoreGateSvc/DetectorStore
+GeoModelSvc.MuonDetectorTool SelectedStations []
+GeoModelSvc.MuonDetectorTool SelectedStJzz []
+DetDescrCnvSvc IdDictFromRDB True
+DetDescrCnvSvc IdDictName IdDictParser/ATLAS_IDS.xml
+DetDescrCnvSvc DetectorNodes []
+DetDescrCnvSvc DetectorManagers []
+TagInfoMgr ExtraTagValuePairs ['AtlasRelease', 'Athena-22.0.1']
+RPCcablingServerSvc Atlas True
+RPCcablingServerSvc useMuonRPC_CablingSvc True
+RPCcablingServerSvc forcedUse True
+IOVDbSvc Folders ['/MDT/CABLING/MEZZANINE_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_ETA<db>COOLONL_RPC/CONDBR2</db>', '/MDT/RTBLOB<db>COOLOFL_MDT/CONDBR2</db>', '/MDT/T0BLOB<db>COOLOFL_MDT/CONDBR2</db>', '/CSC/STAT <key>CSC_STAT</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/NOISE <key>CSC_NOISE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/PED <key>CSC_PED</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/RMS <key>CSC_RMS</key> <db>COOLOFL_CSC/CONDBR2</db>', '/GLOBAL/BField/Maps <noover/><db>COOLONL_GLOBAL/CONDBR2</db>', '/CSC/T0PHASE <key>CSC_T0PHASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/TGC/CABLING/MAP_SCHEMA<db>COOLONL_TGC/CONDBR2</db>', '/EXT/DCS/MAGNETS/SENSORDATA<db>COOLOFL_DCS/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA_CORR<db>COOLONL_RPC/CONDBR2</db>', '/MDT/CABLING/MAP_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_PHI<db>COOLONL_RPC/CONDBR2</db>', '/CSC/PSLOPE <key>CSC_PSLOPE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA<db>COOLONL_RPC/CONDBR2</db>', '/CSC/T0BASE <key>CSC_T0BASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/FTHOLD <key>CSC_FTHOLD</key> <db>COOLOFL_CSC/CONDBR2</db>']
+IOVDbSvc CacheAlign 3
+IOVDbSvc dbConnection sqlite://;schema=mycool.db;dbname=CONDBR2
+IOVDbSvc GlobalTag CONDBR2-BLKPA-2018-13
+IOVDbSvc FoldersToMetaData ['/GLOBAL/BField/Maps']
+IOVDbSvc DBInstance CONDBR2
+IOVDbSvc overrideTags []
+PoolSvc FrontierRefreshSchema []
+PoolSvc ReadCatalog ['apcfile:poolcond/PoolFileCatalog.xml', 'prfile:poolcond/PoolCat_oflcond.xml', 'apcfile:poolcond/PoolCat_oflcond.xml', 'prfile:poolcond/PoolCat_comcond.xml', 'apcfile:poolcond/PoolCat_comcond.xml']
+PoolSvc MaxFilesOpen 0
+DBReplicaSvc COOLSQLiteVetoPattern /DBRelease/
+MuonRPC_CablingSvc ConfFilePath MuonRPC_Cabling/
+MuonRPC_CablingSvc TheRpcTriggerDbTool RPCTriggerDbTool
+MuonRPC_CablingSvc ConfFileName LVL1confAtlas.data
+MuonRPC_CablingSvc FeetPadThresolds []
+MuonRPC_CablingSvc TheRpcCablingDbTool RPCCablingDbTool/RPCCablingDbTool
+MuonRPC_CablingSvc RPCTriggerRoadsfromCool True
+MuonRPC_CablingSvc CorrFileName LVL1confAtlas.corr
+MuonRPC_CablingSvc CosmicConfiguration True
+TGCcablingServerSvc Atlas True
+TGCcablingServerSvc useMuonTGC_CablingSvc True
+TGCcablingServerSvc forcedUse True
+AthenaPoolCnvSvc InputPoolAttributes []
+AthenaPoolCnvSvc PoolAttributes []
+AthenaPoolCnvSvc PrintInputAttrPerEvt []
+AthenaPoolCnvSvc InputStreamingTool 
+AthenaPoolCnvSvc OutputPoolFileAllocator []
+AthenaPoolCnvSvc MaxFileSizes []
+MuonMDT_CablingSvc DBTool MDTCablingDbTool/MDTCablingDbTool
+MuonMDT_CablingSvc TagInfoManager TagInfoMgr
+MuonMDT_CablingSvc ForcedUse True
+MuonMDT_CablingSvc UseOldCabling False
+AtlasFieldSvc UseDCS True
+MdtCalibrationDbSvc CreateSlewingFunctions False
+MdtCalibrationDbSvc DBTool MuonCalib::MdtCalibDbAsciiTool
+MdtCalibrationDbSvc CreateBFieldFunctions False
+MdtCalibrationDbSvc CreateWireSagFunctions False
+MdtCalibrationSvc DoTofCorrection True
+MdtCalibrationSvc MagFieldSvc AtlasFieldSvc
+MdtCalibrationSvc DoWireSagCorrection False
+MdtCalibrationSvc TimeWindowSetting 2
+MdtCalibrationSvc DoSlewingCorrection False
+MdtCalibrationSvc DoTemperatureCorrection True
+MuonCalib::CscCoolStrSvc ParSGKeys ['CSC_PED', 'CSC_NOISE', 'CSC_PSLOPE', 'CSC_STAT', 'CSC_RMS', 'CSC_FTHOLD', 'CSC_T0BASE', 'CSC_T0PHASE']
+MuonCalib::CscCoolStrSvc ParDefaults ['2048', '3.5', '0.189', '0', '2.56', '0', '0', '0']
+MuonCalib::CscCoolStrSvc ParDataTypes ['float', 'float', 'float', 'uint32_t', 'float', 'float', 'float', 'float']
+MuonCalib::CscCoolStrSvc ParFolders ['/CSC/PED', '/CSC/NOISE', '/CSC/PSLOPE', '/CSC/STAT', '/CSC/RMS', '/CSC/FTHOLD', '/CSC/T0BASE', '/CSC/T0PHASE']
+MuonCalib::CscCoolStrSvc ParCats ['CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'ASM']
+MuonCalib::CscCoolStrSvc ParNames ['ped', 'noise', 'pslope', 'status', 'rms', 'f001', 't0base', 't0phase']
 
 JOs reading stage finished, launching Athena from pickle file
 
+Wed Feb 27 17:18:53 GMT 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 4 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on ppevm02.ppe.gla.ac.uk on Wed Feb 27 17:19:08 2019
+====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3383 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
 ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
 ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
 ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
@@ -1316,6 +2497,10 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 1 servers found for host ppevm02.ppe.gla.ac.uk [ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
@@ -1324,13 +2509,26 @@ PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
 IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
 IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
 IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
 IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
 IOVDbSvc             INFO Initialised with 8 connections and 19 folders
 IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3291 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4012 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3031 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -1411,6 +2609,10 @@ GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
 GeoModelSvc.Muo...   INFO Properties have been set as follows: 
 GeoModelSvc.Muo...   INFO     LayoutName                     R
 GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
@@ -1525,6 +2727,7 @@ AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary!
 MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
 MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
 MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
 RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
 MuGM:RDBReadAtlas    INFO After getQuery XtomoData
 In DblQ00Xtomo(data)
@@ -1554,6 +2757,7 @@ MuGM:ProcCutouts     INFO  Processing Cutouts DONE
 MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
 MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
 MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
 MuGM:MuonFactory     INFO  TreeTop added to the Manager
 MuGM:MuonFactory     INFO  Muon Layout R.08.01
 MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
@@ -1577,9 +2781,13 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 45912Kb 	 Time = 1.01S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
@@ -1589,12 +2797,17 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
 RpcRawDataProvider   INFO RpcRawDataProvider::initialize
 RpcRawDataProvider   INFO  'DoSeededDecoding':False
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
 ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
 MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
 MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
 MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
 MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
@@ -1609,25 +2822,32 @@ RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
 TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 878 CLIDRegistry entries for module ALL
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
 TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x16e5ec00]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
 MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
 MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
 MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
 MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
 CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
 CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
 CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
 RpcRdoToRpcPrep...   INFO properties are 
 RpcRdoToRpcPrep...   INFO processingData                     0
 RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
@@ -1642,18 +2862,31 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
 MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1af89a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
@@ -1665,10 +2898,12 @@ ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
 EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
 EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
 ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
+ClassIDSvc           INFO  getRegistryEntries: read 1159 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
@@ -1746,6 +2981,7 @@ phi high-pt    mu11  mu15   mu15
 
 
 RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
 RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
 RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
 RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
@@ -1783,13 +3019,19 @@ AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value]
 AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
 AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
 AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
 IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524665, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524665, run #327265 2 events processed so far  <<<===
@@ -1831,10 +3073,40 @@ AthenaEventLoopMgr   INFO   ===>>>  start processing event #186580451, run #3272
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
 CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/25 ((     0.26 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/271 ((     0.59 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216598 ((     0.84 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/300 ((     0.43 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/444470 ((     0.62 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/58804 ((     0.42 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562972 ((     0.94 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8101322 ((     0.77 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/7408 ((     0.56 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/331329 ((     0.67 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/359591 ((     0.50 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422629 ((     0.56 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/363009 ((     0.47 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422831 ((     0.58 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/236289 ((     0.48 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322855 ((     0.53 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3234 ((     0.36 ))s
+IOVDbSvc             INFO  bytes in ((      9.58 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.26 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     2.75 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.15 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.59 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.56 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.26 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -1858,6 +3130,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 11.1  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
-- 
GitLab


From 342deef2163cafe2da462e3f5584de9ad2cf29ba Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Thu, 28 Feb 2019 16:49:42 +0000
Subject: [PATCH 008/163] Adding update for cache container in one of the ROD
 decoders. Need to test with cache on, without cache, seems to run

---
 .../src/RPC_RawDataProviderTool.cxx           |   1 -
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.h     | 140 ++++++++++--------
 .../python/MuonBytestreamDecodeConfig.py      |   1 +
 3 files changed, 76 insertions(+), 66 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
index c7a9f62bd030..66c2d78ab4a6 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
@@ -67,7 +67,6 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
     else
         ATH_MSG_INFO( "Retrieved tool " << m_decoder );
 
-
     //m_hashfunc = new RpcPadIdHash();
 
     // get cabling svc
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
index fa594a3cf276..b1bfc3c249b9 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
@@ -388,6 +388,7 @@ namespace Muon
                                   RpcPadContainer& rdoIdc,
                                   const std::vector<IdentifierHash> &collections, RpcSectorLogicContainer* RPC_SECTORLOGIC) const
   {
+
     try 
     {
       robFrag.check ();
@@ -395,7 +396,7 @@ namespace Muon
     catch (eformat::Issue &ex)
     {
       
-      if(msgLvl(MSG::VERBOSE)) msg() << ex.what () << endmsg;
+      ATH_MSG_VERBOSE(ex.what());
       return StatusCode::FAILURE;  // error in fragment
     }
     
@@ -411,13 +412,11 @@ namespace Muon
     uint32_t rod_sourceId= robFrag.rod_source_id();
     uint16_t subDetector=(sourceId & 0xff0000)>>16;
     
-    
-    if(msgLvl(MSG::VERBOSE)) msg() << "ROD version: "   << MSG::hex << version 
+    ATH_MSG_VERBOSE("ROD version: "   << MSG::hex << version 
       << MSG::dec << "  ROB source ID: " << MSG::hex << sourceId 
       << MSG::dec << "  ROD source ID: " << MSG::hex << rod_sourceId 
       << MSG::dec << "  Subdetector: "   << MSG::hex << subDetector 
-      << MSG::dec << endmsg;
-    
+      << MSG::dec);
     
     
     // chose the right decoding routine
@@ -456,7 +455,7 @@ namespace Muon
     
     
     StatusCode cnv_sc;
-    
+
     /*
     // unpack the 32 bits words into 16 bits 
     // no ROD header and footer 
@@ -505,55 +504,69 @@ namespace Muon
 
     // here optimize decoding of ROB fragment (for data only type==3)
     if (type==3)
+    {
+      std::map<Identifier,RpcPad*> mapOfCollections; 
+      std::vector<IdentifierHash>::const_iterator it = collections.begin();
+      for( ; it!=collections.end(); ++it)
       {
-	std::map<Identifier,RpcPad*> mapOfCollections; 
-	std::vector<IdentifierHash>::const_iterator it = collections.begin();
-	for( ; it!=collections.end(); ++it)
-	  {
-	    RpcPadContainer::const_iterator itColl = rdoIdc.indexFind(*it);
-	    if (itColl == rdoIdc.end())
-	      {
-		if(msgLvl(MSG::VERBOSE) ) msg(MSG::VERBOSE) << " Created new Pad Collection Hash ID = " 
-							    << static_cast<unsigned int>(*it) << endmsg;
-        
-		// create new collection
-		RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
-		mapOfCollections[coll->identify()]=coll;
+
+        // Using RpcPadCache
+        RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( (*it) );
+
+        if(lock.alreadyPresent() ){
+          ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
+        }
+        else{
+          ATH_MSG_VERBOSE(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+
+		      // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
+          RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
+          mapOfCollections[coll->identify()]=coll;
 	      }// endif collection not found in the container 
-	  }//end loop over vector of hash id 
+	    }//end loop over vector of hash id 
 
-  if (mapOfCollections.empty()) {
-    ATH_MSG_VERBOSE("mapOfCollections is empty; fillCollectionsFromRob_v302 will not be called");
-    cnv_sc = StatusCode::SUCCESS;
-    return cnv_sc;
-  }
-  
-	cnv_sc = fillCollectionsFromRob_v302(data,robFrag.rod_ndata(),mapOfCollections,rod_sourceId, RPC_SECTORLOGIC);
-	if (cnv_sc!=StatusCode::SUCCESS)
-	  {
+      if (mapOfCollections.empty()) {
+        ATH_MSG_VERBOSE("mapOfCollections is empty; fillCollectionsFromRob_v302 will not be called");
+        cnv_sc = StatusCode::SUCCESS;
+        return cnv_sc;
+      }
+
+      // RpcPadCollections not decoded and in container are identified and passed explicitly to decoder
+      cnv_sc = fillCollectionsFromRob_v302(data,robFrag.rod_ndata(),mapOfCollections,rod_sourceId, RPC_SECTORLOGIC);
+      if (cnv_sc!=StatusCode::SUCCESS)
+      {
 	    if (cnv_sc==StatusCode::RECOVERABLE) 
 	      {
-		if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Decoding errors found "<<endmsg;
+		      ATH_MSG_DEBUG("Decoding errors found ");
 	      }
-	    else return cnv_sc; // exit if failure 
-	  }
-	for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
-	  {
-	    // add collection into IDC
-	    RpcPadContainer::const_iterator itColl = rdoIdc.indexFind(((*it).second)->identifyHash());
-	    if (itColl == rdoIdc.end())
+	    else 
+        return cnv_sc; // exit if failure 
+	    }
+
+      // All un-decoded collections were decoded successfully, so they are passed back to the IDC
+	    //for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
+      for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
+	    {
+	      // add collection into IDC using RpcPadCache functions
+        
+        RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( ((*it).second)->identifyHash() );
+
+	      if ( !lock.alreadyPresent() )
 	      {
-		if (rdoIdc.addCollection((*it).second, ((*it).second)->identifyHash()).isFailure())
-		  {
-		    msg(MSG::ERROR) << "Failed to add RPC PAD collection to container" 
-				    << endmsg;
-		    //report the error condition
-		  }
-		else ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
-	      }
-	  }
-	return cnv_sc;
-      }//endif (type==3)
+          // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
+          StatusCode status_lock = lock.addOrDelete( std::unique_ptr<RpcPad>( (*it).second ) );
+
+		      if(status_lock != StatusCode::SUCCESS)
+		      {
+		        ATH_MSG_ERROR("Failed to add RPC PAD collection to container" );
+		        //report the error condition
+		      }
+          else 
+            ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
+        }
+      }
+      return cnv_sc;
+    }//endif (type==3)
     
     std::vector<IdentifierHash>::const_iterator it = collections.begin();
     for( ; it!=collections.end(); ++it)
@@ -561,21 +574,20 @@ namespace Muon
       RpcPadContainer::const_iterator itColl = rdoIdc.indexFind(*it);
       if (itColl == rdoIdc.end())
       {
-        if(msgLvl(MSG::VERBOSE) ) msg(MSG::VERBOSE) << " Created new Pad Collection Hash ID = " 
-          << static_cast<unsigned int>(*it) << endmsg;
+        msg(MSG::VERBOSE) << " Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) << endmsg;
         
         // create new collection
         RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
         
-        //convert collection
+        //convert collection - note case3 will never be used due to statement above
         switch(type)
         {
           case 0: cnv_sc = fillCollection_v240(data,robFrag.rod_ndata(),*coll); break;
           case 1: cnv_sc = fillCollection_v300(data,robFrag.rod_ndata(),*coll,subDetector, RPC_SECTORLOGIC); break;
           case 2: cnv_sc = fillCollection_v301(data,robFrag.rod_ndata(),*coll,subDetector, RPC_SECTORLOGIC ); break;
-	  case 3: cnv_sc = fillCollection_v302(data,robFrag.rod_ndata(),*coll,sourceId, RPC_SECTORLOGIC); break;
-	    //case 3: cnv_sc = fillCollection_v302new(data,robFrag.rod_ndata(),*coll,sourceId); break;
-            
+          case 3: cnv_sc = fillCollection_v302(data,robFrag.rod_ndata(),*coll,sourceId, RPC_SECTORLOGIC); break;
+	        //case 3: cnv_sc = fillCollection_v302new(data,robFrag.rod_ndata(),*coll,sourceId); break;
+
           default: fillCollection_v240(data,robFrag.rod_ndata(),*coll); break;
         }
         
@@ -587,17 +599,15 @@ namespace Muon
         // add collection into IDC
         if (rdoIdc.addCollection(coll, *it).isFailure())
         {
-          msg(MSG::ERROR) << "Failed to add RPC PAD collection to container" 
-          << endmsg;
+          msg(MSG::ERROR) << "Failed to add RPC PAD collection to container" << endmsg;
           //report the error condition
         }
-	else  ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(*it)<<" to the RpcPad Container | size = "<<coll->size());
-
+        else
+          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(*it)<<" to the RpcPad Container | size = "<<coll->size());
       }
     }
-    
     return cnv_sc;
-  }
+  } // end fillCollections
   
   
   // ----  Implement the template method: 
@@ -1736,11 +1746,11 @@ namespace Muon
     if (msgLvl(MSG::VERBOSE)) {
       msg(MSG::VERBOSE) << "**********Decoder dumping the words******** " << endmsg;
       if (data_size > 0 ) {
-	msg(MSG::VERBOSE) << "The size of this ROD-read is " << data_size << endmsg;
-	for (unsigned int i=0; i < data_size; i++)
-	  msg(MSG::VERBOSE) << "word " << i << " = " << MSG::hex << data[i] << MSG::dec << endmsg;
-      }
-    }
+       msg(MSG::VERBOSE) << "The size of this ROD-read is " << data_size << endmsg;
+       for (unsigned int i=0; i < data_size; i++)
+         msg(MSG::VERBOSE) << "word " << i << " = " << MSG::hex << data[i] << MSG::dec << endmsg;
+     }
+   }
     //#endif
     
     uint16_t side  = (subDetector == eformat::MUON_RPC_BARREL_A_SIDE) ? 1:0;    
diff --git a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
index 6363d17ae0f6..8c7f10f26b4c 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
@@ -55,6 +55,7 @@ def RpcBytestreamDecodeCfg(flags, forTrigger=False):
     from MuonRPC_CnvTools.MuonRPC_CnvToolsConf import Muon__RPC_RawDataProviderTool
     MuonRpcRawDataProviderTool = Muon__RPC_RawDataProviderTool(name    = "RPC_RawDataProviderTool",
                                                                Decoder = RPCRodDecoder )
+    MuonRpcRawDataProviderTool.OutputLevel = VERBOSE
     acc.addPublicTool( MuonRpcRawDataProviderTool ) # This should be removed, but now defined as PublicTool at MuFastSteering 
     
     # Setup the RAW data provider algorithm
-- 
GitLab


From fba4afd994f6d7c007924fba2645c2dad6118efb Mon Sep 17 00:00:00 2001
From: Tim Martin <Tim.Martin@cern.ch>
Date: Tue, 5 Mar 2019 17:40:11 +0100
Subject: [PATCH 009/163] Pseudomerge TrigEgammaAnalysisTools from 21.0-TrigMC
 to master

---
 .../TrigEgammaAnalysisTools/CMakeLists.txt    |   82 +-
 .../Root/EfficiencyTool.cxx                   |   47 +-
 .../Root/TrigEgammaAnalysisBaseTool.cxx       |   80 +-
 .../Root/TrigEgammaDistTool.cxx               |   99 +-
 .../Root/TrigEgammaEventSelection.cxx         | 1255 +++++++++++++++++
 .../Root/TrigEgammaNavAnalysisTool.cxx        |   35 +-
 .../Root/TrigEgammaNavBaseTool.cxx            |   43 +-
 .../Root/TrigEgammaNavNtuple.cxx              | 1138 ---------------
 .../Root/TrigEgammaNavTPAnalysisTool.cxx      |   31 +-
 .../Root/TrigEgammaNavTPBaseTool.cxx          |  121 +-
 .../Root/TrigEgammaNavTPNtuple.cxx            | 1066 --------------
 .../Root/TrigEgammaPhysValBase.cxx            | 1155 +++++++++++++++
 .../Root/TrigEgammaPlotTool.cxx               |  107 +-
 .../Root/TrigEgammaResolutionTool.cxx         |   30 +-
 .../ITrigEgammaAnalysisBaseTool.h             |    2 +
 .../TrigEgammaAnalysisBaseTool.h              |   67 +-
 .../TrigEgammaDistTool.h                      |    3 +-
 .../TrigEgammaEventSelection.h                |  129 ++
 .../TrigEgammaAnalysisTools/TrigEgammaInfo.h  |    1 +
 .../TrigEgammaNavBaseTool.h                   |    2 +
 .../TrigEgammaNavNtuple.h                     |  221 ---
 .../TrigEgammaNavTPBaseTool.h                 |  244 ++--
 .../TrigEgammaNavTPNtuple.h                   |  220 ---
 .../TrigEgammaPhysValBase.h                   |  320 +++++
 .../TrigEgammaPlotTool.h                      |    5 +-
 .../python/TrigEgammaAnalysisToolsConfig.py   |  226 ++-
 .../python/TrigEgammaProbelist.py             |   35 +
 .../testTrigEgammaAnalysisTools_emulator.py   |  249 ++++
 .../share/testTrigEgammaEventSelectionTool.py |  193 +++
 .../src/TrigEgammaMonTool.cxx                 |   11 +-
 .../TrigEgammaAnalysisTools_entries.cxx       |   34 +-
 31 files changed, 4125 insertions(+), 3126 deletions(-)
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
 delete mode 100755 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavNtuple.cxx
 delete mode 100755 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPNtuple.cxx
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
 delete mode 100755 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h
 delete mode 100755 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
 create mode 100644 Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/CMakeLists.txt b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/CMakeLists.txt
index 8bff1abe2b00..78261fb99f56 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/CMakeLists.txt
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/CMakeLists.txt
@@ -6,37 +6,38 @@
 atlas_subdir( TrigEgammaAnalysisTools )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthToolSupport/AsgTools
-   Event/xAOD/xAODCaloEvent
-   Event/xAOD/xAODEgamma
-   Event/xAOD/xAODEventInfo
-   Event/xAOD/xAODJet
-   Event/xAOD/xAODTracking
-   Event/xAOD/xAODTrigCalo
-   Event/xAOD/xAODTrigEgamma
-   Event/xAOD/xAODTrigRinger
-   Event/xAOD/xAODTrigger
-   Event/xAOD/xAODTruth
-   LumiBlock/LumiBlockComps
-   PhysicsAnalysis/Interfaces/EgammaAnalysisInterfaces
-   Reconstruction/RecoTools/RecoToolInterfaces
-   PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis
-   Trigger/TrigAnalysis/TrigDecisionTool
-   Trigger/TrigAnalysis/TrigEgammaMatchingTool
-   Trigger/TrigAnalysis/TrigEgammaEmulationTool
-   Trigger/TrigConfiguration/TrigConfHLTData
-   Trigger/TrigEvent/TrigSteeringEvent
-   Trigger/TrigMonitoring/TrigHLTMonitoring
-   PhysicsAnalysis/AnalysisCommon/PATCore
-   PRIVATE
-   Control/AthenaBaseComps
-   Control/AthenaMonitoring
-   Control/StoreGate
-   GaudiKernel
-   Trigger/TrigConfiguration/TrigConfxAOD )
-
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthToolSupport/AsgTools
+                          Event/xAOD/xAODCaloEvent
+                          Event/xAOD/xAODEgamma
+                          Event/xAOD/xAODEventInfo
+                          Event/xAOD/xAODJet
+                          Event/xAOD/xAODPrimitives
+                          Event/xAOD/xAODTracking
+                          Event/xAOD/xAODTrigCalo
+                          Event/xAOD/xAODTrigEgamma
+                          Event/xAOD/xAODTrigRinger
+                          Event/xAOD/xAODTrigger
+                          Event/xAOD/xAODTruth
+                          Event/xAOD/xAODMissingET
+                          Event/xAOD/xAODCaloRings
+                          LumiBlock/LumiBlockComps
+                          PhysicsAnalysis/ElectronPhotonID/ElectronPhotonSelectorTools
+                          Reconstruction/RecoTools/RecoToolInterfaces
+                          Reconstruction/egamma/egammaMVACalib
+                          Trigger/TrigAnalysis/TrigDecisionTool
+                          Trigger/TrigAnalysis/TrigEgammaMatchingTool
+                          Trigger/TrigAnalysis/TrigEgammaEmulationTool
+                          Trigger/TrigConfiguration/TrigConfHLTData
+                          Trigger/TrigEvent/TrigSteeringEvent
+                          Trigger/TrigMonitoring/TrigHLTMonitoring
+                          PhysicsAnalysis/AnalysisCommon/PATCore
+                          PRIVATE
+                          Control/AthenaBaseComps
+                          Control/AthenaMonitoring
+                          Control/StoreGate
+                          GaudiKernel
+                          Trigger/TrigConfiguration/TrigConfxAOD )
 # External dependencies:
 find_package( Boost )
 find_package( ROOT COMPONENTS Core Hist Tree )
@@ -48,20 +49,25 @@ atlas_add_library( TrigEgammaAnalysisToolsLib
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS}
    LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools xAODCaloEvent xAODEgamma
-   xAODEventInfo xAODJet xAODTracking xAODTrigCalo xAODTrigEgamma xAODTrigRinger
-   xAODTrigger xAODTruth LumiBlockCompsLib EgammaAnalysisInterfacesLib
+   xAODEventInfo xAODJet xAODTracking xAODTrigCalo xAODTrigEgamma xAODTrigRinger xAODMissingET
+   xAODTrigger xAODCaloRings xAODTruth LumiBlockCompsLib EgammaAnalysisInterfacesLib
    RecoToolInterfaces egammaMVACalibAnalysisLib TrigDecisionToolLib
    TrigEgammaMatchingToolLib TrigEgammaEmulationToolLib TrigConfHLTData
    TrigSteeringEvent TrigHLTMonitoringLib PATCoreLib
    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} TrigConfxAODLib )
 
 atlas_add_component( TrigEgammaAnalysisTools
-   src/*.h src/*.cxx src/components/*.cxx
-   LINK_LIBRARIES AthenaBaseComps GaudiKernel AsgTools TrigHLTMonitoringLib
-   AthenaMonitoringLib TrigDecisionToolLib TrigEgammaMatchingToolLib xAODEgamma
-   TrigEgammaAnalysisToolsLib )
+                     src/*.h
+                     src/*.cxx
+                     Root/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} AsgTools xAODCaloEvent xAODMissingET xAODEgamma xAODEventInfo xAODJet xAODTracking xAODTrigCalo xAODTrigEgamma xAODTrigRinger xAODCaloRings xAODTrigger xAODTruth LumiBlockCompsLib ElectronPhotonSelectorToolsLib egammaMVACalibLib TrigDecisionToolLib TrigEgammaMatchingToolLib TrigEgammaEmulationTool TrigConfHLTData TrigSteeringEvent TrigHLTMonitoringLib AthenaBaseComps AthenaMonitoringLib StoreGateLib SGtests GaudiKernel PATCoreLib )
 
 # Install files from the package:
 atlas_install_python_modules( python/TrigEgamma*.py )
 atlas_install_joboptions( share/test*.py )
-atlas_install_scripts( share/trigEgammaDQ.py share/get_trigEgammaDQ.sh )
+atlas_install_generic( share/trigEgammaDQ.py share/get_trigEgammaDQ.sh 
+                        DESTINATION share
+                        EXECUTABLE )
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx
index 073cef0276a1..f4baf74a26da 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx
@@ -50,26 +50,25 @@ bool EfficiencyTool::analyseIsEMLH(const xAOD::Electron *eg, const std::string p
     const std::string ineff = "Ineff" + pidword;
 
     bool failIsEMLH = true;
-    unsigned int isem = 9999;
     try{
-	ATH_MSG_DEBUG("Running selectionisEM("<<pidword<<")");
-	isem = eg->selectionisEM(pidword);
-
-	failIsEMLH = false;
-	for (int ii = 0; ii < 11; ii++) {
-	    if ((isem >> ii) & 0x1) {
-		failIsEMLH = true;
-		hist1(fail)->Fill(ii + 0.5);
-		hist1(ineff)->Fill(ii + 3.5, 1);
+	    ATH_MSG_DEBUG("Running selectionisEM("<<pidword<<")");
+	    unsigned int isem = eg->selectionisEM(pidword);
+
+	    failIsEMLH = false;
+	    for (int ii = 0; ii < 11; ii++) {
+	        if ((isem >> ii) & 0x1) {
+	    	failIsEMLH = true;
+	    	hist1(fail)->Fill(ii + 0.5);
+	    	hist1(ineff)->Fill(ii + 3.5, 1);
+	        }
 	    }
-	}
     } catch (const ValidationException &e) {
-	ATH_MSG_WARNING("Exception thrown: " << e.msg() );
-	ATH_MSG_WARNING("Is " << pidword << " is a valid one? returning failed....");
-	failIsEMLH = true;
+	    ATH_MSG_WARNING("Exception thrown: " << e.msg() );
+	    ATH_MSG_WARNING("Is " << pidword << " is a valid one? returning failed....");
+	    failIsEMLH = true;
     } catch(...) {
-	ATH_MSG_WARNING("Unknown exception caught in analyseIsEMLH ... Is " << pidword << " is a valid one? returning failed....");
-	failIsEMLH = true;
+	    ATH_MSG_WARNING("Unknown exception caught in analyseIsEMLH ... Is " << pidword << " is a valid one? returning failed....");
+	    failIsEMLH = true;
     }
     return failIsEMLH;
 
@@ -90,18 +89,7 @@ bool EfficiencyTool::analyseIsEM(const xAOD::Electron *eg, const std::string pid
     bool failtrt = false;
     bool failisem = false;
 
-    unsigned int isem = 9999;
-    try{
-	isem = eg->selectionisEM(pidword);
-    } catch (const ValidationException &eg) {
-	ATH_MSG_WARNING("Exception thrown: " << eg.msg() );
-	ATH_MSG_WARNING("Is " << pidword << " is a valid one? returning failed....");
-	return(true);
-    } catch(...) {
-	ATH_MSG_WARNING("Unknown exception caught in analyseIsEMLH ... Is " << pidword << " is a valid one? returning failed....");
-	return(true);
-    }
-
+    unsigned int isem = eg->selectionisEM(pidword);
 
     for (int ii = 0; ii < 29; ii++) {
         if ((isem >> ii) & 0x1) {
@@ -255,8 +243,7 @@ void EfficiencyTool::fillInefficiency(const std::string& pid, const std::string
             hist1(ineff)->Fill(lastbin - 4, 1);
             hist1(ineff)->Fill(sumbin, 1);
         }
-        else {
-            hist1(ineff)->Fill(lastbin - 3, 1);
+        else{
             hist1(ineff)->Fill(sumbin, 1);
         }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
index fcd2a4aee400..7909da2527e7 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
@@ -66,6 +66,7 @@ TrigEgammaAnalysisBaseTool( const std::string& myname )
     declareProperty("TPTrigger",m_tp=false)->declareUpdateHandler(&TrigEgammaAnalysisBaseTool::updateTP,this);
     declareProperty("isEMResultNames",m_isemname,"isEM");
     declareProperty("LHResultNames",m_lhname,"LH");
+    declareProperty("ForceTrigAttachment", m_forceTrigAttachment=false);
 
     m_storeGate = nullptr;
     m_histsvc = nullptr;
@@ -85,6 +86,9 @@ TrigEgammaAnalysisBaseTool( const std::string& myname )
     m_nPVertex=0;
     m_offmu=0.;
     m_onlmu=0.;
+    m_sgContainsRnn=false;
+    m_sgContainsTrigPhoton=false;
+    m_forceTrigEmulation=false;
 }
 
 void TrigEgammaAnalysisBaseTool::updateDetail(Property& /*p*/){
@@ -101,14 +105,14 @@ void TrigEgammaAnalysisBaseTool::updateAltBinning(Property& /*p*/){
 
 void TrigEgammaAnalysisBaseTool::updateTP(Property& /*p*/){
     plot()->setTP(m_tp);
-    for( auto& tool : m_tools) {
+    for( const auto& tool : m_tools) {
         tool->setTP(m_tp);
     }
 }
 
 void TrigEgammaAnalysisBaseTool::updateEmulation(Property& /*p*/){
     plot()->setEmulation(m_doEmulation);
-    for( auto& tool : m_tools) {
+    for( const auto& tool : m_tools) {
         tool->setEmulation(m_doEmulation);
         ATH_MSG_INFO("updateEmulation() property for tool with name: " << tool->name());
         tool->setEmulationTool(m_emulationTool);
@@ -175,7 +179,7 @@ StatusCode TrigEgammaAnalysisBaseTool::initialize() {
 
     // propagate the emulation tool for all tools
     if( m_doEmulation ){
-      for( auto& tool : m_tools) {
+      for( const auto& tool : m_tools) {
         ATH_MSG_INFO("Propagate emulation tool handler to: " << tool->name() );
         tool->setEmulationTool(m_emulationTool);  
       }
@@ -351,8 +355,10 @@ void TrigEgammaAnalysisBaseTool::setTrigInfo(const std::string trigger){
 
     if(isL1) etthr=l1thr; // Should be handled elsewhere 
 
-    TrigInfo info{trigger,type,l1item,l1type,pidname,decorator,isL1,perf,etcut,etthr,l1thr};
+    TrigInfo info{trigger,type,l1item,l1type,pidname,decorator,isL1,perf,etcut,etthr,l1thr,m_forceTrigEmulation};
     m_trigInfo[trigger] = info;
+    
+    m_forceTrigEmulation=false; //hack disable
 }
 
 // return the TrigInfo from trigger name
@@ -557,6 +563,7 @@ bool TrigEgammaAnalysisBaseTool::isPrescaled(const std::string trigger){
 
 asg::AcceptData
 TrigEgammaAnalysisBaseTool::setAccept(const HLT::TriggerElement *te,const TrigInfo info){
+    
     ATH_MSG_DEBUG("setAccept");
     asg::AcceptData acceptData (&m_accept);
     bool passedL1Calo=false;
@@ -571,6 +578,16 @@ TrigEgammaAnalysisBaseTool::setAccept(const HLT::TriggerElement *te,const TrigIn
     if(getFeature<xAOD::TrigRNNOutput>(te)){
         hasRnn=true;
     }
+    
+    ATH_MSG_DEBUG("Rnn container " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer " << getSGContainsTrigPhoton());
+    
+    if(getSGContainsRnn()){
+        if(getFeature<xAOD::TrigRNNOutput>(te)){
+            hasRnn=true;
+        }
+    }
+    
 
     if(!info.trigL1){ // HLT item get full decision
         ATH_MSG_DEBUG("Check for active features: TrigEMCluster,CaloClusterContainer");
@@ -594,7 +611,9 @@ TrigEgammaAnalysisBaseTool::setAccept(const HLT::TriggerElement *te,const TrigIn
         }
         else if(info.trigType == "photon"){
             ATH_MSG_DEBUG("Check for active features: TrigPhoton, PhotonContainer");
-            passedL2=ancestorPassed<xAOD::TrigPhotonContainer>(te);
+            if(getSGContainsTrigPhoton()){
+                passedL2=ancestorPassed<xAOD::TrigPhotonContainer>(te);
+            }
             passedEF = ancestorPassed<xAOD::PhotonContainer>(te);
             passedEFTrk=true;// Assume true for photons
         }
@@ -930,7 +949,7 @@ GETTER(pixeldEdx)
 GETTER(deltaPhiRescaled3) 
 #undef GETTER    
 
-    std::string TrigEgammaAnalysisBaseTool::getProbePid(const std::string pidtype){
+std::string TrigEgammaAnalysisBaseTool::getProbePid(const std::string pidtype){
     static std::map<std::string,std::string> PidMap; //no longer class member but static
     // Note vloose/lhvloose trigger mapped to Loose/LHLoose offline PID
     if(PidMap.empty()){
@@ -992,43 +1011,56 @@ bool TrigEgammaAnalysisBaseTool::getTrigCaloRings( const xAOD::TrigEMCluster *em
   return false;
 }
 
-bool TrigEgammaAnalysisBaseTool::getCaloRings( const xAOD::Electron * /*el*/, std::vector<float> & /*ringsE*/ ){
+bool TrigEgammaAnalysisBaseTool::getCaloRings( const xAOD::Electron * el, std::vector<float> &ringsE ){
 
-  /*
+  
   if(!el) return false;
   ringsE.clear();
-    
-  auto m_ringsELReader = xAOD::getCaloRingsReader();
 
+  auto ringsELReader = xAOD::getCaloRingsReader();
   // First, check if we can retrieve decoration: 
   const xAOD::CaloRingsLinks *caloRingsLinks(nullptr);
   try { 
-    caloRingsLinks = &(m_ringsELReader->operator()(*el)); 
+    ATH_MSG_DEBUG("getCaloRingsReader->operator()(*el)");
+    caloRingsLinks = &(ringsELReader->operator()(*el)); 
   } catch ( const std::exception &e) { 
     ATH_MSG_WARNING("Couldn't retrieve CaloRingsELVec. Reason: " << e.what()); 
     return false;
   } 
 
-  if ( caloRingsLinks->empty() ){ 
-    ATH_MSG_WARNING("Particle does not have CaloRings decoratorion.");
-    return false;
-  }
+  if( caloRingsLinks ){
+    if ( caloRingsLinks->empty() ){ 
+      ATH_MSG_WARNING("Particle does not have CaloRings decoratorion.");
+      return false;
+    }
 
+    const xAOD::CaloRings *clrings=nullptr;
+    try {
+      // For now, we are using only the first cluster 
+      clrings = *(caloRingsLinks->at(0));
+    } catch(const std::exception &e){
+      ATH_MSG_WARNING("Couldn't retrieve CaloRings. Reason: " << e.what()); 
+      return false;
+    }
+    // For now, we are using only the first cluster 
+    if(clrings) {
+      ATH_MSG_DEBUG("exportRingsTo...");
+      clrings->exportRingsTo(ringsE);
+    }else{
+      ATH_MSG_WARNING("There is a problem when try to attack the rings vector using exportRigsTo() method.");
+      return false;
+    }
 
-  // For now, we are using only the first cluster 
-  const xAOD::CaloRings *clrings = *(caloRingsLinks->at(0));
-  // For now, we are using only the first cluster 
-  
-  if(clrings) clrings->exportRingsTo(ringsE);
-  else{
-    ATH_MSG_WARNING("There is a problem when try to attack the rings vector using exportRigsTo() method.");
+  }else{
+    ATH_MSG_WARNING("CaloRingsLinks in a nullptr...");
     return false;
   }
-  */  
+
   return true;
 }
 
 
+
 void TrigEgammaAnalysisBaseTool::calculatePileupPrimaryVertex(){
   // pileup calculation
   m_nGoodVertex = 0.0; m_nPVertex = 0.0;
@@ -1050,8 +1082,6 @@ void TrigEgammaAnalysisBaseTool::calculatePileupPrimaryVertex(){
 }
 
 
-
-
 MonteCarlo::PDGID TrigEgammaAnalysisBaseTool::pdgid(const xAOD::Egamma *eg, const xAOD::TruthParticleContainer* truthContainer,
                                                                             const xAOD::TruthParticle *&mc_match )
 {
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
index 95ec6a52b47e..2572366022b4 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
@@ -144,13 +144,34 @@ StatusCode TrigEgammaDistTool::toolExecute(const std::string basePath,TrigInfo i
                 const auto* obj = getFeature<xAOD::TrigEMCluster>(feat.te());
                 // Only consider passing objects
                 if(!obj) continue;
-                if(!ancestorPassed<xAOD::TrigEMCluster>(feat.te())) continue;
                 cd(dir+"HLT");
-                hist1("rejection")->Fill("L2Calo",1);
+                if(ancestorPassed<xAOD::TrigEMCluster>(feat.te()))
+                  hist1("rejection")->Fill("L2Calo",1);
                 fillL2Calo(dir+"L2Calo",obj); // Fill HLT shower shapes
-                if(boost::contains(info.trigName,"ringer") || info.trigEtcut || info.trigPerf)
-                    fillRinger(dir+"L2Calo",obj); // Fill HLT shower shapes
             }
+
+            /*
+            const auto vec_l2ringer = fc.get<xAOD::TrigRingerRings>("",TrigDefs::alsoDeactivateTEs);
+            for(const auto feat : vec_l2ringer){
+                if(feat.te()==nullptr) continue;
+                const auto* obj = getFeature<xAOD::TrigRingerRings>(feat.te());
+                // Only consider passing objects
+                if(!obj) continue;
+                fillRingerShapes(dir+"L2Calo",obj);// Fill HLT ringer shapes
+            }*/
+
+            const auto vec_l2rnn = fc.get<xAOD::TrigRNNOutput>("",TrigDefs::alsoDeactivateTEs);
+            for(const auto feat : vec_l2rnn){
+                if(feat.te()==nullptr) continue;
+                const auto* obj = getFeature<xAOD::TrigRNNOutput>(feat.te());
+                // Only consider passing objects
+                if(!obj) continue;   
+                //cd(dir+"HLT");
+                //if(ancestorPassed<xAOD::TrigRNNOutput>(feat.te()))
+                //  hist1("rejection")->Fill("L2Calo",1);
+                fillRnnDistribution(dir+"L2Calo",obj);// Fill HLT Rnn distribution output
+            }
+
             const auto vec_clus = fc.get<xAOD::CaloClusterContainer>("TrigEFCaloCalibFex",TrigDefs::alsoDeactivateTEs);
             for(const auto feat : vec_clus){
                 if(feat.te()==nullptr) continue;
@@ -309,32 +330,57 @@ void TrigEgammaDistTool::fillL2Calo(const std::string dir, const xAOD::TrigEMClu
     }
 }
 
-void TrigEgammaDistTool::fillRinger(const std::string dir, const xAOD::TrigEMCluster *emCluster){
+void TrigEgammaDistTool::fillRingerShapes(const std::string dir, const xAOD::TrigRingerRings *ringer){
     cd(dir);
-    if(!emCluster) ATH_MSG_DEBUG("Online pointer fails"); 
+    if(!ringer) ATH_MSG_DEBUG("Online pointer fails");  
     else{
-        bool hasRings = false;
-        std::vector<float> ringsE;
-        hasRings = getTrigCaloRings(emCluster, ringsE );
-        if(hasRings){
-            hist2("ringer_etVsEta")->Fill(emCluster->eta(), emCluster->et()/1.e3);
-            ///Fill rings pdf for each ring
-            if(m_detailedHists){
-                for(unsigned layer =0; layer < 7; ++layer){
-                    unsigned minRing, maxRing;  std::string strLayer;
-                    parseCaloRingsLayers( layer, minRing, maxRing, strLayer );
-                    cd(dir+"/rings_"+strLayer);
-                    for(unsigned r=minRing; r<=maxRing; ++r){
-                        std::stringstream ss;
-                        ss << "ringer_ring#" << r;
-                        hist1(ss.str())->Fill( ringsE.at(r) );
-                    }///loop into rings
-                }///loop for each calo layer
-            }
+      //for(unsigned r=0; r<ringer->rings().size(); ++r){
+      //  hist2("ringer_shapes")->Fill(r, ringer->rings()[r]);
+      // }
+      ATH_MSG_DEBUG("L2 Calo distributions.");
+    }
+}
+
+void TrigEgammaDistTool::fillRnnDistribution(const std::string dir, const xAOD::TrigRNNOutput *rnn){
+    // ringer threshold grid for mc15c, 2016 and 2017       
+    float ringer_thres_et_bins[6]={15.,20.,30.,40.,50.,50000.};
+    float ringer_thres_eta_bins[6]={0.,0.8,1.37,1.54,2.37,2.5};
+
+    if(!rnn)  ATH_MSG_DEBUG("Online pointer fails");
+    else{
+      if(rnn->rnnDecision().empty() || rnn->rnnDecision().size()!=3){
+        ATH_MSG_DEBUG("Invalid RNN Decision. skip object...");
+        return;
+      }
+
+      auto emCluster=rnn->ringer()->emCluster();
+      float eta=std::abs(emCluster->eta());
+      float et=emCluster->et()*1e-3;
+      float output=rnn->rnnDecision()[2];
+      float avgmu=rnn->rnnDecision()[0];
+
+      cd(dir);
+      hist1("discriminant")->Fill(output);
+      hist2("discriminantVsMu")->Fill(output,avgmu);
+      cd(dir+"/discriminant_binned");
+      for (unsigned etBinIdx=0; etBinIdx<6-1; ++etBinIdx){
+        for (unsigned etaBinIdx=0; etaBinIdx<6-1; ++etaBinIdx){
+          if( ( et < ringer_thres_et_bins[etBinIdx]  && ringer_thres_et_bins[etBinIdx+1] >= et)
+           && ( eta < ringer_thres_eta_bins[etaBinIdx]  && ringer_thres_eta_bins[etaBinIdx+1] >= eta)){
+            std::stringstream ss1,ss2;
+            ss1 << "discriminant_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
+            ss2 << "discriminantVsMu_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
+            hist1(ss1.str())->Fill(output);
+            hist2(ss2.str())->Fill(output,avgmu);
+           }
         }
+      }
+      ATH_MSG_DEBUG("L2 Calo distributions.");
     }
 }
 
+
+
 void TrigEgammaDistTool::fillShowerShapes(const std::string dir,const xAOD::Egamma *eg){
     cd(dir);
     ATH_MSG_DEBUG("Fill SS distributions " << dir);
@@ -362,8 +408,11 @@ void TrigEgammaDistTool::fillShowerShapes(const std::string dir,const xAOD::Egam
         hist1("eta")->Fill(eg->eta());
         hist1("phi")->Fill(eg->phi());
         hist1("topoetcone20")->Fill(getIsolation_topoetcone20(eg)/1e3);
-        if (eg->pt() > 0) 
+        hist1("topoetcone40_shift")->Fill((getIsolation_topoetcone40(eg)-2450)/1e3);
+        if (eg->pt() > 0) {
             hist1("topoetcone20_rel")->Fill(getIsolation_topoetcone20(eg)/eg->pt());
+            hist1("topoetcone40_shift_rel")->Fill((getIsolation_topoetcone40(eg)-2450)/eg->pt());
+        }
         
     }
 }
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
new file mode 100644
index 000000000000..fb2df7075283
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
@@ -0,0 +1,1255 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+/**********************************************************************
+ * AsgTool: TrigEgammaEventSelection
+ * Authors:
+ *      Ryan Mackenzie White <ryan.white@cern.ch>
+ *      Denis Damazio <denis.damazio@cern.ch>
+ * Contributors:
+ *      Joao Victor da Fonseca Pinto <joao.victor.da.fonseca.pinto@cern.ch>
+ * Date: Mar 2015
+ * Description:
+ *      Derived class for dumping the probe information into a ttree.
+ *     
+ **********************************************************************/
+
+#include "TrigEgammaAnalysisTools/TrigEgammaEventSelection.h"
+
+using namespace std;
+
+TrigEgammaEventSelection::TrigEgammaEventSelection( const std::string& myname ): 
+  TrigEgammaNavTPBaseTool(myname) , TrigEgammaPhysValBase()
+{
+  m_eventCounter = 0;
+  declareProperty("CutLabels"                        ,      m_cutlabels               );
+  declareProperty("Analysis"                         ,      m_anatype="EventSelection");
+  declareProperty("SelectionZ"                       ,      m_selectionZ=true         );
+  declareProperty("SelectionFakes"                   ,      m_selectionFakes=false    );
+  declareProperty("SelectionMC"                      ,      m_selectionMC=false       );
+  declareProperty("SelectionW"                       ,      m_selectionW=false        );
+  declareProperty("SelectionJpsi"                    ,      m_selectionJpsi=false     );
+  declareProperty("DumpTags"                         ,      m_dumpTags=false          );
+  declareProperty("DetailedDataLevel"                ,      m_detailedDataLevel=0     );
+  declareProperty("ElectronLHVLooseTool"             ,      m_electronLHVLooseTool    );
+
+  
+  declareProperty("HLTElectronLikelihoodSelector"    ,      m_HLTElectronLHSelectors  );
+  declareProperty("EFCaloElectronLikelihoodSelector" , m_EFCaloElectronLHSelectors    );
+  declareProperty("EFCaloElectronIsEMSelector"       , m_EFCaloElectronIsEMSelectors  );
+  declareProperty("HLTElectronIsEMSelector"          , m_HLTElectronIsEMSelectors     );
+
+  m_doCaloRings=false;
+}
+
+StatusCode TrigEgammaEventSelection::childInitialize(){
+
+  if ( (m_electronLHVLooseTool.retrieve()).isFailure() ){
+    ATH_MSG_ERROR( "Could not retrieve VeryLoose LH Selector Tool! Can't work");
+    return StatusCode::FAILURE;
+  }
+
+  if ( (m_EFCaloElectronLHSelectors.retrieve()).isFailure() ){
+    ATH_MSG_ERROR( "Could not retrieve EFCalo LH Selector Tool! Can't work");
+    return StatusCode::FAILURE;
+  }
+ 
+  if ( (m_EFCaloElectronIsEMSelectors.retrieve()).isFailure() ){
+    ATH_MSG_ERROR( "Could not retrieve EFCalo IsEM Selector Tool! Can't work");
+    return StatusCode::FAILURE;
+  }
+  if ( (m_HLTElectronLHSelectors.retrieve()).isFailure() ){
+    ATH_MSG_ERROR( "Could not retrieve HLT LH Selector Tool! Can't work");
+    return StatusCode::FAILURE;
+  }
+  if ( (m_HLTElectronIsEMSelectors.retrieve()).isFailure() ){
+    ATH_MSG_ERROR( "Could not retrieve HLT IsEM Selector Tool! Can't work");
+    return StatusCode::FAILURE;
+  }
+  
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode TrigEgammaEventSelection::childBook(){
+
+  ATH_MSG_DEBUG("Now configuring chains for analysis");
+  //Set the base directory from the plot()
+  m_dir=plot()->getBasePath();
+  std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
+
+  TrigEgammaAnalysisBaseTool::write_trigger_list(chains);
+  
+  if(!getEmulation()){
+    ATH_MSG_ERROR("Emulation tool was not set. This tool use the emulation to retrievea all support objects. Please, enable this!");
+    return StatusCode::FAILURE;
+  }
+
+
+  for(const auto trigName:m_trigInputList){ 
+    if (std::find(chains.begin(), chains.end(), trigName) != chains.end()){ 
+      if(plot()->getTrigInfoMap().count(trigName) != 0)
+        ATH_MSG_WARNING("Trigger already booked, removing from trigger list " << trigName);
+      else{ 
+        m_trigList.push_back(trigName);
+        setTrigInfo(trigName);
+      }
+    }else if(getEmulation() && m_forceTrigAttachment){// 
+      ATH_MSG_DEBUG("Trigger doesn't exist in menu. Attach to emulate.");
+      if(plot()->getTrigInfoMap().count(trigName) == 0){
+        std::string parent;
+        m_trigList.push_back(trigName);
+        setTrigEmulation();
+        setTrigInfo(trigName);
+      }
+    }// emulation 
+  }
+ 
+  // set the correct schema level to save
+  /* 0 is very slim schema
+   * 1 is slim
+   * 2 is full */
+  if(m_detailedDataLevel > 0 ){
+    m_doL2Detailed=true;
+    m_doL2CaloDetailed=true;
+  }
+  if(m_detailedDataLevel > 1){
+    m_doRecoDetailed=true;
+    m_doMCDetailed=true;
+  }
+
+
+  // Book histograms for average efficiencies and counters
+  //const int nTrigger = (int) m_trigList.size();
+  addDirectory(m_dir+"/Expert/Event");
+  std::string histname=m_anatype+"_ProbeCutCounter";
+  addHistogram(new TH1F(histname.c_str(), "Number of Probes; Cut ; Count", 12, 0., 12));
+  histname=m_anatype+"_TagCutCounter";
+  addHistogram(new TH1F(histname.c_str(), "Number of Tags; Cut ; Count", 10, 0., 10));
+  histname=m_anatype+"_Mee";
+  addHistogram(new TH1F(histname.c_str(), "Offline M(ee); m_ee [GeV] ; Count", 50, m_ZeeMassMin, m_ZeeMassMax));
+  histname=m_anatype+"_CutCounter";
+  addHistogram(new TH1I(histname.c_str(), "Event Selection; Cut ; Count", 6, 0., 6));
+  setLabels(hist1(histname),m_cutlabels);
+
+
+  addDirectory(m_dir+"/Egamma");
+
+  // create the TDT metadata for future access
+  TTree *tdtMetadata = new TTree("tdt", "Trigger  metadata navigation");
+  createTDTMetadata( tdtMetadata, m_trigList );
+  addTree(tdtMetadata, m_dir+"/Egamma");
+
+  if(m_selectionZ){
+      if(m_dumpTags){
+        TTree *tag = new TTree( "tags", "tree of Offline Zee tags");
+        bookEventBranches( tag );
+        bookElectronBranches( tag );
+        bookTriggerBranches( tag );
+        bookTDTBranches( tag );
+        bookMonteCarloBranches( tag );
+        addTree(tag, m_dir+"/Egamma");
+      }
+      TTree *probe = new TTree( "probes", "tree of Zee probes");
+      bookEventBranches( probe );
+      bookElectronBranches( probe );
+      bookTriggerBranches( probe );
+      bookTDTBranches( probe );
+      bookMonteCarloBranches( probe );
+
+      addTree(probe, m_dir+"/Egamma");
+  }
+
+  if(m_selectionFakes){
+      TTree *fakes = new TTree( "fakes", "tree of Fakes");
+      bookEventBranches( fakes );
+      bookElectronBranches( fakes );
+      bookTriggerBranches( fakes );
+      bookTDTBranches( fakes );
+      bookMonteCarloBranches( fakes );
+      addTree(fakes, m_dir+"/Egamma");
+  }
+
+
+
+  // Check for Rnn container in SG
+  if(m_storeGate->contains<xAOD::TrigRNNOutputContainer>("HLT_xAOD__TrigRNNOutputContainer_TrigRingerNeuralFex")){
+    ATH_MSG_DEBUG("Rnn container in SG "); 
+    setSGContainsRnn(true);
+  }
+
+
+  if(m_storeGate->contains<xAOD::CaloRingsContainer>("ElectronCaloRings")){
+    ATH_MSG_DEBUG("Offline electron calo rings in SG");
+    m_doCaloRings=true;
+  }
+
+  // This will needed to emulate objects without all features attached
+  //if(emulation())
+  //  emulation()->ExperimentalAndExpertMethods();
+
+  ///Alloc pointers
+  alloc_space();
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigEgammaEventSelection::childExecute(){
+
+  m_eventCounter++;
+
+  cd(m_dir+"/Expert/Event");
+  
+  // Event Wise Selection (independent of the required signatures)
+  if ( !TrigEgammaNavTPBaseTool::EventWiseSelection() ) return StatusCode::SUCCESS;
+
+  // Pass by errors in EventInfo
+  if( !TrigEgammaNavTPBaseTool::passesEventCleaning() ) return StatusCode::SUCCESS;
+
+  // nvtx > 0
+  if( getNPVtx() <= 0 )  return StatusCode::SUCCESS;
+  
+  if(m_selectionZ)  
+    EventSelectionZ();
+
+  if(m_selectionFakes)
+    EventSelectionFakes();
+
+  //if(m_selectionMC)
+  //  EventSelectionMC();
+  
+
+  return StatusCode::SUCCESS;
+}
+
+bool TrigEgammaEventSelection::EventSelectionZ(){
+
+  ATH_MSG_INFO("In EventSelectonZ...");
+  // execute the standard tag and probe method
+  TrigEgammaNavTPBaseTool::executeTandP();
+  cd(m_dir+"/Egamma");
+ 
+  for(auto Z : m_Z){
+    const xAOD::Electron *elTag   = m_offElectrons->at(Z.first);
+    const xAOD::Electron *elProbe = m_offElectrons->at(Z.second); 
+    if(m_dumpTags)
+      fill( tree("tags"  , m_dir+"/Egamma")  , elTag   );
+    fill( tree("probes", m_dir+"/Egamma")  , elProbe );
+
+  }// Loop over pairs
+
+  return true;
+}
+
+bool TrigEgammaEventSelection::EventSelectionFakes(){
+
+  
+  ATH_MSG_INFO("In EventSelectonFakes...");
+  double GeV = 1000.;
+
+  for(const auto& elTag : *m_offElectrons){ 
+
+    // Remove electrons from Z or W if this is Monte Carlo
+    if(m_selectionMC && !isTruthElectronAny( elTag ))  continue; 
+
+    if (!elTag->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON)) continue;
+
+    if(!elTag->trackParticle()) continue;
+
+    // Default is 4 GeV
+    if( !(elTag->e()/cosh(elTag->trackParticle()->eta())  > m_probeMinEt*GeV) ) continue;
+    
+    //fiducial detector acceptance region
+    float absEta = fabs(elTag->caloCluster()->etaBE(2));
+    if (absEta > 2.47) continue;
+     
+    if( !(getWTransverseMass(elTag) < 40000) )  continue;
+
+    bool passesZveto=true;
+
+    // If we can find any pair that falls in the Zmass window we fail the passesZveto cut
+    for(const auto& elProbe : *m_offElectrons){
+
+      if(elTag == elProbe)  continue;
+
+      if(!elProbe->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON)) continue;
+      
+      if(!elProbe->trackParticle()) continue;
+      
+      // Must be higher than 4 GeV
+      if( (getEt(elProbe)) < 4*GeV)  continue;
+
+      if(!TrigEgammaNavTPBaseTool::ApplyElectronPid(elProbe,"LHMedium")) continue;
+
+      //Must be an easy way with IParticle
+      TLorentzVector el1;
+      TLorentzVector el2;
+      el1.SetPtEtaPhiE(elTag->pt(), elTag->trackParticle()->eta(), elTag->trackParticle()->phi(), elTag->e());
+      el2.SetPtEtaPhiE(elProbe->pt(), elProbe->trackParticle()->eta(), elProbe->trackParticle()->phi(), elProbe->e());
+      float tpPairMass = (el1 + el2).M();
+      if( !((tpPairMass > m_ZeeMassMin*1.e3) && (tpPairMass < m_ZeeMassMax*1.e3))){
+          ATH_MSG_DEBUG("tag and probe pair not in Z mass window");
+          continue;
+      }else{
+        ATH_MSG_INFO("tag and probe pain in Z mass window. Regect the electron...");
+        passesZveto=false;
+        break;
+      }
+    }// Loop over probes electrons
+
+    if(!passesZveto)  continue;
+
+    ATH_MSG_INFO("Appling Fire trigger...");
+    if(!ApplyFireTriggers( elTag ))  continue;
+
+    if(TrigEgammaNavTPBaseTool::ApplyElectronPid(elTag,"LHTight")) continue;
+    
+    ATH_MSG_INFO("Fill electron...");
+    fill( tree("fakes"  , m_dir+"/Egamma")  , elTag   );
+
+
+  }// Loop over electrons
+
+  return true;
+}
+
+
+
+bool TrigEgammaEventSelection::fill( TTree *t, const xAOD::Electron *el){
+ 
+
+  linkEventBranches(t); 
+  linkElectronBranches(t); 
+  linkTriggerBranches(t); 
+  linkMonteCarloBranches(t); 
+
+  const HLT::TriggerElement* feat=nullptr;
+
+  //bool doAccept=false;
+  //if(trigItem.empty()){
+  // Use the support match method from the emulation tool
+  if(getEmulation())
+    emulation()->match( el,  feat );
+  else{
+    ATH_MSG_ERROR("Emulation tool was not configurated. Impossible to match! Please, see your python config.");
+    return false;
+  }
+  //}else{
+  //  match()->match(el, trigItem, feat);
+  //  doAccept=true;
+  //}
+
+  if(feat){
+    clear();
+    fillEvent();
+    fillElectron( el );  
+
+    if(!fillMonteCarlo( el ) ){
+      ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
+    }
+ 
+    ///Start trigger analisys...
+    const xAOD::EmTauRoI *emTauRoI = getFeature<xAOD::EmTauRoI>(feat);
+    if(emTauRoI){
+      fillEmTauRoI( emTauRoI ); 
+    }else{ 
+      ATH_MSG_WARNING("Cound not found EmTauRoI in this TriggerElement..");
+    }
+  
+    const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
+    if(emCluster){
+      if(!fillTrigEMCluster( emCluster )){
+        ATH_MSG_WARNING("Cound not attach the trigEMCluster information into the tree.");
+      }
+
+      if(!fillTrigCaloRings( feat )){
+        ATH_MSG_WARNING("Cound not attach the TrigRingerRings information into the tree.");
+      }
+    }///cluster protection
+  
+  
+    const xAOD::TrigElectronContainer *trigElCont = getFeature<xAOD::TrigElectronContainer>(feat);
+    // Level 2 ID+Calo
+    if(trigElCont){
+      for(const auto& trigEl : *trigElCont){
+        if(!fillTrigElectron(trigEl)) {
+          ATH_MSG_WARNING("Cound not attach the trigElectron information into the tree.");
+        }    
+      }// loop over all trigElectrons for this feat
+    }
+     
+    const xAOD::CaloClusterContainer *caloCont = getFeature<xAOD::CaloClusterContainer>(feat);
+    if(caloCont){
+      for(const auto& cl : *caloCont){
+        if(!fillCaloCluster(cl)){
+          ATH_MSG_WARNING("Cound not attach the CaloCluster information into the tree.");
+        }
+      }// loop over calo cluster
+    }
+
+
+    const xAOD::ElectronContainer *elCont = getFeature<xAOD::ElectronContainer>(feat);
+
+    if(elCont){
+      for(const auto& hlt_el : *elCont){
+        if(!fillHLTElectron(hlt_el))
+          ATH_MSG_WARNING("Cound not attach the HLT Electron information into the tree.");
+      }
+    }
+
+
+    fillTDT( el, feat );
+
+
+    ATH_MSG_INFO("recording trigger information into the file.");
+    t->Fill();
+  }//loop over trigger objects
+
+  return true;
+}
+
+
+bool TrigEgammaEventSelection::fillTDT(const xAOD::Electron *el , const HLT::TriggerElement *te){
+
+  ATH_MSG_DEBUG("FillTDT...");
+  for(auto& trigItem : m_trigList){
+
+    const HLT::TriggerElement* feat=nullptr;
+    match()->match(el, trigItem, feat);
+    if(feat){
+      asg::AcceptData acceptData = setAccept(feat, getTrigInfo(trigItem));
+      bool passedL1Calo  = acceptData.getCutResult("L1Calo");
+      bool passedL2Calo  = acceptData.getCutResult("L2Calo");
+      bool passedL2      = acceptData.getCutResult("L2");
+      bool passedEFCalo  = acceptData.getCutResult("EFCalo");
+      bool passedHLT     = acceptData.getCutResult("HLT");
+      m_trig_tdt_L1_calo_accept->push_back( int(passedL1Calo) );
+      m_trig_tdt_L2_calo_accept->push_back( int(passedL2Calo) );
+      m_trig_tdt_L2_el_accept->push_back( int(passedL2) );
+      m_trig_tdt_EF_calo_accept->push_back( int(passedEFCalo) );
+      m_trig_tdt_EF_el_accept->push_back( int(passedHLT) );
+      //m_trig_tdt_emu_decision_mask
+      count("tdt_"+trigItem+"_total");
+      if(passedL1Calo)  count("tdt_"+trigItem+"_L1Calo");
+      if(passedL2Calo)  count("tdt_"+trigItem+"_L2Calo");
+      if(passedL2)      count("tdt_"+trigItem+"_L2"    );
+      if(passedEFCalo)  count("tdt_"+trigItem+"_EFCalo");
+      if(passedHLT)     count("tdt_"+trigItem+"_HLT"   );
+ 
+    }else{
+      m_trig_tdt_L1_calo_accept->push_back( -1 );
+      m_trig_tdt_L2_calo_accept->push_back( -1 );
+      m_trig_tdt_L2_el_accept->push_back( -1 );
+      m_trig_tdt_EF_calo_accept->push_back( -1 );
+      m_trig_tdt_EF_el_accept->push_back( -1 );
+      //ATH_MSG_DEBUG("Trigger bitmask was converted to " << int(GetByteFromBools(mask)));
+      //m_trig_tdt_decision_mask->push_back(GetByteFromBools(mask));
+    }
+
+    if(te && getEmulation()){
+      asg::AcceptData acceptData  = emulation()->executeTool(te, trigItem);
+      bool passedL1Calo  = acceptData.getCutResult("L1Calo");
+      bool passedL2Calo  = acceptData.getCutResult("L2Calo");
+      bool passedL2      = acceptData.getCutResult("L2");
+      bool passedEFCalo  = acceptData.getCutResult("EFCalo");
+      bool passedHLT     = acceptData.getCutResult("HLT");
+      m_trig_tdt_emu_L1_calo_accept->push_back( int(passedL1Calo) );
+      m_trig_tdt_emu_L2_calo_accept->push_back( int(passedL2Calo) );
+      m_trig_tdt_emu_L2_el_accept->push_back(   int(passedL2) );
+      m_trig_tdt_emu_EF_calo_accept->push_back( int(passedEFCalo) );
+      m_trig_tdt_emu_EF_el_accept->push_back(   int(passedHLT) );
+      //m_trig_tdt_emu_decision_mask
+      count("emu_"+trigItem+"_total");
+      if(passedL1Calo)  count("emu_"+trigItem+"_L1Calo");
+      if(passedL2Calo)  count("emu_"+trigItem+"_L2Calo");
+      if(passedL2)      count("emu_"+trigItem+"_L2"    );
+      if(passedEFCalo)  count("emu_"+trigItem+"_EFCalo");
+      if(passedHLT)     count("emu_"+trigItem+"_HLT"   );
+    }else{
+      m_trig_tdt_emu_L1_calo_accept->push_back( -1 );
+      m_trig_tdt_emu_L2_calo_accept->push_back( -1 );
+      m_trig_tdt_emu_L2_el_accept->push_back( -1 );
+      m_trig_tdt_emu_EF_calo_accept->push_back( -1 );
+      m_trig_tdt_emu_EF_el_accept->push_back( -1 );
+      //ATH_MSG_DEBUG("Trigger bitmask was converted to " << int(GetByteFromBools(mask)));
+      //m_trig_tdt_decision_mask->push_back(GetByteFromBools(mask));
+    }
+
+
+  }// Loop over triggers
+
+
+  return true;
+
+}
+
+
+
+bool TrigEgammaEventSelection::fillTrigCaloRings( const HLT::TriggerElement *feat ){
+  
+  ATH_MSG_DEBUG("FillTrigCaloRings...");
+  /* try to get the calo rings energy for this TE!*/
+  const xAOD::TrigRingerRings *ringer = getFeature<xAOD::TrigRingerRings>(feat);
+  if(ringer){// from this TE
+    for(unsigned r=0; r<ringer->size(); ++r){
+      m_trig_L2_calo_rings->push_back(ringer->rings()[r]);
+    }
+  }else{// from others TEs
+    const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
+    if(emCluster){
+      // try to match without any other cluster.
+      TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, *m_trig_L2_calo_rings);
+    }else{
+      return false;
+    }
+  }
+ 
+  if(getSGContainsRnn()){
+    /* try to retrieve the NN output from this TE*/
+    const xAOD::TrigRNNOutput *rnn = getFeature<xAOD::TrigRNNOutput>(feat);
+    if(rnn){
+      for(unsigned o=0; o<rnn->rnnDecision().size(); ++o)
+        m_trig_L2_calo_rnnOutput->push_back(rnn->rnnDecision()[o]);
+    }else{
+      ATH_MSG_WARNING("Cound not attach the TrigRNNOutput information into the tree.");
+    }
+  }
+  return true;
+}
+
+
+
+
+bool TrigEgammaEventSelection::ApplyFireTriggers( const xAOD::Electron *el){
+
+  float GeV = 1000.0;
+  float et = getEt(el);
+
+  std::string trigger="";
+  
+  if(et < 5*GeV){
+    return false;
+  }else if(et >= 5*GeV && et < 10*GeV){
+    trigger = "HLT_e5_etcut";
+  }else if(et >= 10*GeV && et < 15*GeV){
+    trigger = "HLT_e10_etcut_L1EM7";
+  }else if(et >= 15*GeV && et < 20*GeV){
+    trigger = "HLT_e15_etcut_L1EM7";
+  }else if(et >= 20*GeV && et < 25*GeV){
+    trigger = "HLT_e20_etcut_L1EM12";
+  }else if(et >= 25*GeV && et < 30*GeV){
+    trigger = "HLT_e25_etcut_L1EM15";
+  }else if(et >= 30*GeV && et < 40*GeV){
+    trigger = "HLT_e30_etcut_L1EM15";
+  }else if(et >= 40*GeV && et < 50*GeV){
+    trigger = "HLT_e40_etcut_L1EM15";
+  }else if(et >= 50*GeV && et < 60*GeV){
+    trigger = "HLT_e50_etcut_L1EM15";
+  }else if(et >= 50*GeV && et < 60*GeV){
+    trigger = "HLT_e60_etcut";
+  }else if(et >= 60*GeV && et < 70*GeV){
+    trigger = "HLT_e70_etcut";
+  }else if(et >= 70*GeV && et < 80*GeV){
+    trigger = "HLT_e80_etcut";
+  }else if(et >= 80*GeV && et < 100*GeV){
+    trigger = "HLT_e100_etcut";
+  }else if(et >= 100*GeV && et < 120*GeV){
+    trigger = "HLT_e120_etcut";
+  }else{
+    return true;
+  }
+ 
+  const HLT::TriggerElement *te;
+  match()->match(el,trigger,te);
+  bool passedHLT = ancestorPassed<xAOD::ElectronContainer>(te);
+  
+  if(!passedHLT)  return false;
+
+  return true;
+}
+
+
+
+StatusCode TrigEgammaEventSelection::childFinalize(){
+  //release_space();
+  //ATH_MSG_DEBUG( "Number of probes collected is: " <<tree("probes"  , m_dir+"/Egamma")->GetEntries());
+  
+  for(auto& trigItem : m_trigList){
+    ATH_MSG_DEBUG("From TDT tool:");
+    ATH_MSG_DEBUG(trigItem << " total  = " << m_countMap["tdt_"+trigItem+"_total"] );
+    ATH_MSG_DEBUG(trigItem << " L1Calo = " << m_countMap["tdt_"+trigItem+"_L1Calo"]);
+    ATH_MSG_DEBUG(trigItem << " L2Calo = " << m_countMap["tdt_"+trigItem+"_L2Calo"]);
+    ATH_MSG_DEBUG(trigItem << " L2     = " << m_countMap["tdt_"+trigItem+"_L2"]    );
+    ATH_MSG_DEBUG(trigItem << " EFCalo = " << m_countMap["tdt_"+trigItem+"_EFCalo"]);
+    ATH_MSG_DEBUG(trigItem << " HLT    = " << m_countMap["tdt_"+trigItem+"_HLT"]   );
+    ATH_MSG_DEBUG("From emulation tool:");
+    ATH_MSG_DEBUG(trigItem << " total  = " << m_countMap["emu_"+trigItem+"_total"] );
+    ATH_MSG_DEBUG(trigItem << " L1Calo = " << m_countMap["emu_"+trigItem+"_L1Calo"]);
+    ATH_MSG_DEBUG(trigItem << " L2Calo = " << m_countMap["emu_"+trigItem+"_L2Calo"]);
+    ATH_MSG_DEBUG(trigItem << " L2     = " << m_countMap["emu_"+trigItem+"_L2"]    );
+    ATH_MSG_DEBUG(trigItem << " EFCalo = " << m_countMap["emu_"+trigItem+"_EFCalo"]);
+    ATH_MSG_DEBUG(trigItem << " HLT    = " << m_countMap["emu_"+trigItem+"_HLT"]   );
+  }
+  return StatusCode::SUCCESS;
+}
+
+
+bool TrigEgammaEventSelection::fillEmTauRoI( const xAOD::EmTauRoI *emTauRoI ){
+  
+  ATH_MSG_DEBUG("FillEmTauRoI...");
+  m_trig_L1_eta     = emTauRoI->eta();
+  m_trig_L1_phi     = emTauRoI->phi();
+  m_trig_L1_emClus  = emTauRoI->emClus();
+  m_trig_L1_tauClus = emTauRoI->tauClus();
+  m_trig_L1_emIsol  = emTauRoI->emIsol();
+  m_trig_L1_hadIsol = emTauRoI->hadIsol();
+  m_trig_L1_hadCore = emTauRoI->hadCore();
+  //for(unsigned i=0; i < emTauRoI->thrNames().size();++i){
+  //  m_trig_L1_thrNames->push_back(emTauRoI->thrNames().at(i));
+  //}
+  return true;
+} 
+
+bool TrigEgammaEventSelection::fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster ){
+  
+  ATH_MSG_DEBUG("FillTrigEMCluster...");
+  m_trig_L2_calo_et         = emCluster->et();
+  m_trig_L2_calo_eta        = emCluster->eta();
+  m_trig_L2_calo_phi        = emCluster->phi();
+  m_trig_L2_calo_emaxs1     = emCluster->emaxs1();
+  m_trig_L2_calo_e2tsts1    = emCluster->e2tsts1();
+  m_trig_L2_calo_e237       = emCluster->e237();
+  m_trig_L2_calo_e277       = emCluster->e277();
+  m_trig_L2_calo_ehad1      = emCluster->ehad1();
+  m_trig_L2_calo_weta2      = emCluster->weta2();
+  m_trig_L2_calo_wstot      = emCluster->wstot();
+  m_trig_L2_calo_fracs1     = emCluster->fracs1();
+  for(unsigned i=0; i<emCluster->energySample().size(); ++i){
+    m_trig_L2_calo_energySample->push_back( emCluster->energySample().at(i));
+  }
+
+  return true;
+}
+
+
+bool TrigEgammaEventSelection::fillTrigElectron( const xAOD::TrigElectron *trigEl ){
+   ATH_MSG_DEBUG("FillTrigElectron...");
+   //const xAOD::TrackParticle* trkIter = trigEl->trackParticle();
+   //if (trkIter==nullptr) return false; // disconsider candidates without track
+   //int algoId = 0;
+   //if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::FastTrackFinderSeed] ) algoId=9;
+   //if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyA] )           algoId=5;
+   //if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyB] )           algoId=6;
+   //if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyC] )           algoId=7;
+
+   //m_trig_L2_el_trackAlgID  ->push_back(algoId);
+   m_trig_L2_el_caloEta     ->push_back(trigEl->caloEta()); 
+   m_trig_L2_el_trkClusDphi ->push_back(trigEl->trkClusDphi());  
+   m_trig_L2_el_trkClusDeta ->push_back(trigEl->trkClusDeta());  
+   m_trig_L2_el_pt          ->push_back(trigEl->pt());
+   m_trig_L2_el_phi         ->push_back(trigEl->phi());  
+   m_trig_L2_el_eta         ->push_back(trigEl->eta());  
+   m_trig_L2_el_etOverPt    ->push_back(trigEl->etOverPt());          
+   m_trig_L2_el_nTRTHits    ->push_back(trigEl->nTRTHits());        
+   m_trig_L2_el_nTRTHiThresholdHits->push_back(trigEl->nTRTHiThresholdHits());
+   m_trig_L2_el_charge      ->push_back(trigEl->charge());      
+   return true;
+}
+
+
+bool TrigEgammaEventSelection::fillCaloCluster( const xAOD::CaloCluster *cluster){
+
+  ATH_MSG_DEBUG("FillCaloCluster...");
+  m_trig_EF_calo_et->push_back(cluster->et());
+  m_trig_EF_calo_eta->push_back(cluster->eta());
+  m_trig_EF_calo_phi->push_back(cluster->phi());
+  m_trig_EF_calo_etaBE2->push_back(cluster->etaBE(2));
+  m_trig_EF_calo_e->push_back(cluster->e());
+
+  return true;
+}
+
+bool TrigEgammaEventSelection::fillEvent(){
+  ///Event information
+  ATH_MSG_DEBUG("FillEvent...");
+  m_runNumber               = m_eventInfo->runNumber();
+  m_eventNumber             = m_eventInfo->eventNumber();
+  m_lumiBlock               = m_eventInfo->lumiBlock();
+  m_avgmu=getAvgMu();
+  return true;
+}
+
+bool TrigEgammaEventSelection::fillElectron( const xAOD::Electron *el ){
+
+  ATH_MSG_DEBUG("FillElectron...");
+  ///Cluster information
+  uint8_t nblayerhits(0);
+  uint8_t nblayerolhits(0);
+  uint8_t npixhits(0);
+  uint8_t npixolhits(0);
+  uint8_t nscthits(0);
+  uint8_t nsctolhits(0);
+  uint8_t ntrthighthreshits(0);
+  uint8_t ntrthighthresolhits(0);
+  uint8_t ntrthits(0);
+  uint8_t ntrtolhits(0);
+  uint8_t ntrtxenonhits(0);
+  uint8_t npixdeadsensors(0);
+  uint8_t nsctdeadsensors(0);
+  uint8_t expectblayerhit(true);
+  uint8_t expectNextToInnerMostLayer(true);
+  uint8_t nNextToInnerMostLayerHits(0);
+  uint8_t nNextToInnerMostLayerOutliers(0);
+  float val(0);
+  bool hasCalo(false);
+  bool hasTrack(false);
+
+
+  
+  m_el_e                    = el->e();
+  m_el_et                   = el->pt();
+  m_el_eta                  = el->eta();
+  m_el_phi                  = el->phi();
+
+  el->showerShapeValue( m_el_ethad1   , xAOD::EgammaParameters::ShowerShapeType::ethad1   ); 
+  el->showerShapeValue( m_el_ehad1    , xAOD::EgammaParameters::ShowerShapeType::ehad1    );
+  el->showerShapeValue( m_el_f1       , xAOD::EgammaParameters::ShowerShapeType::f1       ); // LH
+  el->showerShapeValue( m_el_f3       , xAOD::EgammaParameters::ShowerShapeType::f3       ); // LH
+  el->showerShapeValue( m_el_f1core   , xAOD::EgammaParameters::ShowerShapeType::f1core   );
+  el->showerShapeValue( m_el_f3core   , xAOD::EgammaParameters::ShowerShapeType::f3core   );
+  el->showerShapeValue( m_el_weta1    , xAOD::EgammaParameters::ShowerShapeType::weta1    ); // LH (new)
+  el->showerShapeValue( m_el_weta2    , xAOD::EgammaParameters::ShowerShapeType::weta2    ); // LH
+  el->showerShapeValue( m_el_wtots1   , xAOD::EgammaParameters::ShowerShapeType::wtots1   );
+  el->showerShapeValue( m_el_fracs1   , xAOD::EgammaParameters::ShowerShapeType::fracs1   );
+  el->showerShapeValue( m_el_Reta     , xAOD::EgammaParameters::ShowerShapeType::Reta     ); // LH
+  el->showerShapeValue( m_el_Rphi     , xAOD::EgammaParameters::ShowerShapeType::Rphi     ); // LH
+  el->showerShapeValue( m_el_Eratio   , xAOD::EgammaParameters::ShowerShapeType::Eratio   ); // LH
+  el->showerShapeValue( m_el_Rhad     , xAOD::EgammaParameters::ShowerShapeType::Rhad     ); // LH
+  el->showerShapeValue( m_el_Rhad1    , xAOD::EgammaParameters::ShowerShapeType::Rhad1    ); // LH
+  el->showerShapeValue( m_el_deltaE   , xAOD::EgammaParameters::ShowerShapeType::DeltaE   ); // LH
+  el->showerShapeValue( m_el_e277     , xAOD::EgammaParameters::ShowerShapeType::e277     ); // LH
+  ///Combined track/Cluter information
+  el->trackCaloMatchValue( m_el_deta2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta2   );
+  el->trackCaloMatchValue( m_el_dphi2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhi2   );
+  el->trackCaloMatchValue( m_el_dphiresc  , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled0 );
+  m_el_deltaPhiRescaled2  =  get_el_deltaPhiRescaled2(el); // LH
+  m_el_deltaEta1          =  get_el_deltaEta1(el); // LH
+ 
+  if(el->caloCluster()){
+    hasCalo=true;
+    m_el_calo_et                 = getCluster_et( el );
+    m_el_calo_eta                = getCluster_eta( el );
+    m_el_calo_phi                = getCluster_phi( el );
+    m_el_calo_etaBE2             = el->caloCluster()->etaBE(2); // LH
+    m_el_calo_e                  = el->caloCluster()->e(); // LH
+  }
+ 
+  ///Track particle information
+  const xAOD::TrackParticle *track = el->trackParticle();
+  if(track){
+    hasTrack=true;
+    track->summaryValue( nblayerhits                  , xAOD::SummaryType::numberOfBLayerHits );
+    track->summaryValue( nblayerolhits                , xAOD::SummaryType::numberOfBLayerOutliers );
+    track->summaryValue( npixhits                     , xAOD::SummaryType::numberOfPixelHits );
+    track->summaryValue( npixolhits                   , xAOD::SummaryType::numberOfPixelOutliers );
+    track->summaryValue( npixdeadsensors              , xAOD::SummaryType::numberOfPixelDeadSensors);
+    track->summaryValue( nscthits                     , xAOD::SummaryType::numberOfSCTHits );
+    track->summaryValue( nsctolhits                   , xAOD::SummaryType::numberOfSCTOutliers );
+    track->summaryValue( nsctdeadsensors              , xAOD::SummaryType::numberOfSCTDeadSensors);
+    track->summaryValue( ntrthits                     , xAOD::SummaryType::numberOfTRTHits);
+    track->summaryValue( ntrtolhits                   , xAOD::SummaryType::numberOfTRTOutliers );
+    track->summaryValue( ntrthighthreshits            , xAOD::SummaryType::numberOfTRTHighThresholdHits );
+    track->summaryValue( ntrthighthresolhits          , xAOD::SummaryType::numberOfTRTHighThresholdOutliers );
+    track->summaryValue( ntrtxenonhits                , xAOD::SummaryType::numberOfTRTXenonHits );
+    track->summaryValue( expectblayerhit              , xAOD::SummaryType::expectBLayerHit );
+    track->summaryValue( expectNextToInnerMostLayer   , xAOD::expectNextToInnermostPixelLayerHit);
+    track->summaryValue( nNextToInnerMostLayerHits    , xAOD::numberOfNextToInnermostPixelLayerHits);
+    track->summaryValue( nNextToInnerMostLayerOutliers, xAOD::numberOfNextToInnermostPixelLayerOutliers);
+    
+    m_el_trk_pt                 =  track->pt();
+    m_el_trk_eta                =  track->eta();
+    m_el_trk_charge             =  track->charge(); // LH 
+    m_el_trk_qOverP             =  track->qOverP(); // LH
+    m_el_trk_sigd0              =  get_el_sigd0(el); // LH
+    m_el_trk_d0                 =  get_el_d0(el); // LH
+    m_el_trk_eProbabilityHT     =  get_el_eProbabilityHT(el); // LH
+    m_el_trk_transformed_eProbabilityHT=get_el_transformed_eProbabilityHT(el); // LH
+    m_el_trk_d0significance     =  get_el_d0significance(el);
+    m_el_trk_deltaPOverP        =  get_el_DeltaPOverP(el); // LH
+
+  }
+
+  ///Extra information about pileup
+  m_el_nGoodVtx             = getNGoodVertex();
+  m_el_nPileupPrimaryVtx    = getNPVtx();
+
+  auto ctx = Gaudi::Hive::currentContext() ;
+  // rerun Likelihood Veryloose selector tool
+  bool accept=(bool)m_electronLHVLooseTool->accept(ctx,el, getAvgMu());
+  m_el_lhVLoose             = accept;
+  m_el_loose                = ApplyElectronPid(el, "Loose");
+  m_el_medium               = ApplyElectronPid(el, "Medium");
+  m_el_tight                = ApplyElectronPid(el, "Tight");
+  m_el_lhLoose              = ApplyElectronPid(el, "LHLoose");
+  m_el_lhMedium             = ApplyElectronPid(el, "LHMedium");
+  m_el_lhTight              = ApplyElectronPid(el, "LHTight"); 
+ 
+
+  // Do not change this order!
+  m_el_trk_summaryValues->push_back( nblayerhits                     ); 
+  m_el_trk_summaryValues->push_back( nblayerolhits                   ); 
+  m_el_trk_summaryValues->push_back( npixhits                        ); 
+  m_el_trk_summaryValues->push_back( npixolhits                      ); 
+  m_el_trk_summaryValues->push_back( npixdeadsensors                 ); 
+  m_el_trk_summaryValues->push_back( nscthits                        ); 
+  m_el_trk_summaryValues->push_back( nsctolhits                      ); 
+  m_el_trk_summaryValues->push_back( nsctdeadsensors                 ); 
+  m_el_trk_summaryValues->push_back( ntrthits                        ); 
+  m_el_trk_summaryValues->push_back( ntrtolhits                      ); 
+  m_el_trk_summaryValues->push_back( ntrthighthreshits               ); 
+  m_el_trk_summaryValues->push_back( ntrthighthresolhits             ); 
+  m_el_trk_summaryValues->push_back( ntrtxenonhits                   ); 
+  m_el_trk_summaryValues->push_back( expectblayerhit                 ); 
+  m_el_trk_summaryValues->push_back( expectNextToInnerMostLayer      ); 
+  m_el_trk_summaryValues->push_back( nNextToInnerMostLayerHits       ); 
+  m_el_trk_summaryValues->push_back( nNextToInnerMostLayerOutliers   );
+
+  //Add isolations values
+  el->isolationValue(val,xAOD::Iso::etcone20);
+  m_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::etcone30);
+  m_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::etcone40);
+  m_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone20);
+  m_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone30);
+  m_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone40);
+  m_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone20);
+  m_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone30);
+  m_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone40);
+  m_el_ptCone->push_back(val);
+
+  m_el_hasCalo=hasCalo;
+  m_el_hasTrack=hasTrack;
+
+
+  if(m_doCaloRings){
+    ATH_MSG_DEBUG("Fill Electron calo rings...");
+    if(!TrigEgammaAnalysisBaseTool::getCaloRings( el , *m_el_ringsE)){
+      ATH_MSG_WARNING("Could not attach the calorRings information.");
+    }
+  }
+
+
+
+  return true;
+}
+
+
+bool TrigEgammaEventSelection::fillHLTElectron( const xAOD::Electron *el ){
+
+  ATH_MSG_DEBUG("FillHLTElectron...");
+  float   calo_e(0);
+  float   calo_et(0);
+  float   calo_eta(0);
+  float   calo_phi(0);
+  float   calo_etaBE2(0);
+  float   eta(0);
+  float   et(0);
+  //float   eta2(0);
+  float   phi(0);
+  float   pt(0);
+  float   trk_eta(0);
+  float   ethad1(0);
+  float   ehad1(0);
+  float   f1(0);
+  float   f3(0);
+  float   f1core(0);
+  float   f3core(0);
+  float   weta1(0);
+  float   weta2(0);
+  float   wtots1(0);
+  float   fracs1(0);
+  float   Reta(0);
+  float   Rphi(0);
+  float   Eratio(0);
+  float   Rhad(0);
+  float   Rhad1(0);
+  float   deta1(0);
+  float   deta2(0);
+  float   dphi2(0);
+  float   dphiresc(0);
+  float   charge(0);
+  float   qOverP(0);
+  float   sigd0(0);
+  float   d0(0);
+  //float   eprobht(0);
+  float   eProbabilityHT(0);
+  float   transformed_eProbabilityHT(0);
+  float   d0significance(0);
+  float   deltaPhiRescaled2(0);
+  float   deltaPOverP(0);
+  float   e(0);
+  float   e277(0);
+  float   deltaE(0);
+  uint8_t nblayerhits(0);
+  uint8_t nblayerolhits(0);
+  uint8_t npixhits(0);
+  uint8_t npixolhits(0);
+  uint8_t nscthits(0);
+  uint8_t nsctolhits(0);
+  uint8_t ntrthighthreshits(0);
+  uint8_t ntrthighthresolhits(0);
+  uint8_t ntrthits(0);
+  uint8_t ntrtolhits(0);
+  uint8_t ntrtxenonhits(0);
+  uint8_t npixdeadsensors(0);
+  uint8_t nsctdeadsensors(0);
+  uint8_t expectblayerhit(true);
+  uint8_t expectNextToInnerMostLayer(true);
+  uint8_t nNextToInnerMostLayerHits(0);
+  uint8_t nNextToInnerMostLayerOutliers(0);
+  float   val(0) ; 
+
+  bool hasCalo(false);
+  bool hasTrack(false);
+
+
+  ATH_MSG_DEBUG("FillElectron...");
+  
+  ///Cluster information
+  e                    = el->e();
+  et                   = el->pt();
+  eta                  = el->eta();
+  phi                  = el->phi();
+
+  el->showerShapeValue( ethad1   , xAOD::EgammaParameters::ShowerShapeType::ethad1   ); 
+  el->showerShapeValue( ehad1    , xAOD::EgammaParameters::ShowerShapeType::ehad1    );
+  el->showerShapeValue( f1       , xAOD::EgammaParameters::ShowerShapeType::f1       ); // LH, isEM
+  el->showerShapeValue( f3       , xAOD::EgammaParameters::ShowerShapeType::f3       ); // LH, isEM
+  el->showerShapeValue( f1core   , xAOD::EgammaParameters::ShowerShapeType::f1core   );
+  el->showerShapeValue( f3core   , xAOD::EgammaParameters::ShowerShapeType::f3core   ); // isEM
+  el->showerShapeValue( weta1    , xAOD::EgammaParameters::ShowerShapeType::weta1    ); // LH, isEM (new)
+  el->showerShapeValue( weta2    , xAOD::EgammaParameters::ShowerShapeType::weta2    ); // LH, isEM
+  el->showerShapeValue( wtots1   , xAOD::EgammaParameters::ShowerShapeType::wtots1   ); // LH, isEM
+  el->showerShapeValue( fracs1   , xAOD::EgammaParameters::ShowerShapeType::fracs1   ); // isEM
+  el->showerShapeValue( Reta     , xAOD::EgammaParameters::ShowerShapeType::Reta     ); // LH, isEM
+  el->showerShapeValue( Rphi     , xAOD::EgammaParameters::ShowerShapeType::Rphi     ); // LH, isEM
+  el->showerShapeValue( Eratio   , xAOD::EgammaParameters::ShowerShapeType::Eratio   ); // LH, isEM
+  el->showerShapeValue( Rhad     , xAOD::EgammaParameters::ShowerShapeType::Rhad     ); // LH, isEM
+  el->showerShapeValue( Rhad1    , xAOD::EgammaParameters::ShowerShapeType::Rhad1    ); // LH, isEM
+  el->showerShapeValue( e277     , xAOD::EgammaParameters::e277                      ); // isEM (new)
+  el->showerShapeValue( deltaE   , xAOD::EgammaParameters::DeltaE                    ); // isEM (new)
+
+  ///Combined track/Cluter information
+  el->trackCaloMatchValue( deta2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta2          );
+  el->trackCaloMatchValue( dphi2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhi2          );
+  el->trackCaloMatchValue( dphiresc  , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled0  );
+  deltaPhiRescaled2  =  get_el_deltaPhiRescaled2(el); // LH
+  deta1              =  get_el_deltaEta1(el); // LH
+ 
+  if(el->caloCluster()){
+    hasCalo=true;
+    calo_et                 = getCluster_et( el );
+    calo_eta                = getCluster_eta( el );
+    calo_phi                = getCluster_phi( el );
+    calo_etaBE2             = el->caloCluster()->etaBE(2); // LH
+    calo_e                  = el->caloCluster()->e(); // LH
+  }
+ 
+
+
+  ///Track particle information
+  const xAOD::TrackParticle *track = el->trackParticle();
+  if(track){
+    hasTrack=true;
+    // track->summaryValue( eprobht                      , xAOD::SummaryType::eProbabilityHT ); // LH
+    track->summaryValue( nblayerhits                  , xAOD::SummaryType::numberOfBLayerHits ); // LH, isEM
+    track->summaryValue( nblayerolhits                , xAOD::SummaryType::numberOfBLayerOutliers ); // LH, isEM
+    track->summaryValue( npixhits                     , xAOD::SummaryType::numberOfPixelHits ); // LH, isEM
+    track->summaryValue( npixolhits                   , xAOD::SummaryType::numberOfPixelOutliers ); // isEM
+    track->summaryValue( npixdeadsensors              , xAOD::SummaryType::numberOfPixelDeadSensors); // LH, isEM
+    track->summaryValue( nscthits                     , xAOD::SummaryType::numberOfSCTHits ); // LH, isEM
+    track->summaryValue( nsctolhits                   , xAOD::SummaryType::numberOfSCTOutliers ); // isEM
+    track->summaryValue( nsctdeadsensors              , xAOD::SummaryType::numberOfSCTDeadSensors); // isEM
+    track->summaryValue( ntrthits                     , xAOD::SummaryType::numberOfTRTHits); // isEM
+    track->summaryValue( ntrtolhits                   , xAOD::SummaryType::numberOfTRTOutliers ); // isEM
+    track->summaryValue( ntrthighthreshits            , xAOD::SummaryType::numberOfTRTHighThresholdHits ); // isEM
+    track->summaryValue( ntrthighthresolhits          , xAOD::SummaryType::numberOfTRTHighThresholdOutliers ); // isEM
+    track->summaryValue( ntrtxenonhits                , xAOD::SummaryType::numberOfTRTXenonHits ); // isEM
+    track->summaryValue( expectblayerhit              , xAOD::SummaryType::expectBLayerHit ); // LH, isEM
+    track->summaryValue( expectNextToInnerMostLayer   , xAOD::expectNextToInnermostPixelLayerHit); // LH, isEM
+    track->summaryValue( nNextToInnerMostLayerHits    , xAOD::numberOfNextToInnermostPixelLayerHits); // LH, isEM
+    track->summaryValue( nNextToInnerMostLayerOutliers, xAOD::numberOfNextToInnermostPixelLayerOutliers); // LH, isEM
+   
+    pt                 =  track->pt();
+    trk_eta            =  track->eta(); // LH
+    charge             =  track->charge(); // LH
+    qOverP             =  track->qOverP();  // LH, isEM
+    sigd0              =  get_el_sigd0(el); // LH
+    d0                 =  get_el_d0(el); // LH, isEM
+    eProbabilityHT     =  get_el_eProbabilityHT(el); // LH, isEM
+    transformed_eProbabilityHT=get_el_transformed_eProbabilityHT(el); // LH
+    d0significance     =  get_el_d0significance(el); 
+    deltaPOverP        =  get_el_DeltaPOverP(el); // LH  
+  }
+
+  auto avgmu=getAvgMu();
+
+  m_trig_EF_el_hasCalo                      ->push_back( hasCalo ); 
+  m_trig_EF_el_hasTrack                     ->push_back( hasTrack );
+
+  auto ctx  = Gaudi::Hive::currentContext();
+  m_trig_EF_calo_tight                      ->push_back((bool)(m_EFCaloElectronIsEMSelectors[0]->accept(ctx,el)));
+  m_trig_EF_calo_medium                     ->push_back((bool)(m_EFCaloElectronIsEMSelectors[1]->accept(ctx,el)));
+  m_trig_EF_calo_loose                      ->push_back((bool)(m_EFCaloElectronIsEMSelectors[2]->accept(ctx,el)));
+  m_trig_EF_calo_lhtight                    ->push_back((bool)(m_EFCaloElectronLHSelectors[0]->accept(ctx,el,avgmu)));
+  m_trig_EF_calo_lhmedium                   ->push_back((bool)(m_EFCaloElectronLHSelectors[1]->accept(ctx,el,avgmu)));
+  m_trig_EF_calo_lhloose                    ->push_back((bool)(m_EFCaloElectronLHSelectors[2]->accept(ctx,el,avgmu)));
+  m_trig_EF_calo_lhvloose                   ->push_back((bool)(m_EFCaloElectronLHSelectors[3]->accept(ctx,el,avgmu)));
+  
+  m_trig_EF_el_tight                        ->push_back((bool)(m_HLTElectronIsEMSelectors[0]->accept(ctx,el)));
+  m_trig_EF_el_medium                       ->push_back((bool)(m_HLTElectronIsEMSelectors[1]->accept(ctx,el)));
+  m_trig_EF_el_loose                        ->push_back((bool)(m_HLTElectronIsEMSelectors[2]->accept(ctx,el)));
+  m_trig_EF_el_lhtight                      ->push_back((bool)(m_HLTElectronLHSelectors[0]->accept(ctx,el,avgmu)));
+  m_trig_EF_el_lhmedium                     ->push_back((bool)(m_HLTElectronLHSelectors[1]->accept(ctx,el,avgmu)));
+  m_trig_EF_el_lhloose                      ->push_back((bool)(m_HLTElectronLHSelectors[2]->accept(ctx,el,avgmu)));
+  m_trig_EF_el_lhvloose                     ->push_back((bool)(m_HLTElectronLHSelectors[3]->accept(ctx,el,avgmu)));
+  
+  m_trig_EF_el_calo_et                      ->push_back( calo_et); 
+  m_trig_EF_el_calo_eta                     ->push_back( calo_eta ); 
+  m_trig_EF_el_calo_phi                     ->push_back( calo_phi ); 
+  m_trig_EF_el_calo_etaBE2                  ->push_back( calo_etaBE2 ); 
+  m_trig_EF_el_calo_e                       ->push_back( calo_e ); 
+  
+  m_trig_EF_el_et                           ->push_back( et );
+  m_trig_EF_el_eta                          ->push_back( eta );
+  m_trig_EF_el_phi                          ->push_back( phi );
+  m_trig_EF_el_e                            ->push_back( e );
+  m_trig_EF_el_e277                         ->push_back( e277 );
+  m_trig_EF_el_deltaE                       ->push_back( deltaE );
+  m_trig_EF_el_ethad1                       ->push_back( ethad1 );
+  m_trig_EF_el_ehad1                        ->push_back( ehad1 );
+  m_trig_EF_el_f1                           ->push_back( f1 );
+  m_trig_EF_el_f3                           ->push_back( f3 );
+  m_trig_EF_el_f1core                       ->push_back( f1core );
+  m_trig_EF_el_f3core                       ->push_back( f3core );
+  m_trig_EF_el_weta1                        ->push_back( weta1 );
+  m_trig_EF_el_weta2                        ->push_back( weta2 );
+  m_trig_EF_el_wtots1                       ->push_back( wtots1 );
+  m_trig_EF_el_fracs1                       ->push_back( fracs1 );
+  m_trig_EF_el_Reta                         ->push_back( Reta );
+  m_trig_EF_el_Rphi                         ->push_back( Rphi );
+  m_trig_EF_el_Eratio                       ->push_back( Eratio );
+  m_trig_EF_el_Rhad                         ->push_back( Rhad );
+  m_trig_EF_el_Rhad1                        ->push_back( Rhad1 );
+  m_trig_EF_el_deta2                        ->push_back( deta2 );
+  m_trig_EF_el_dphi2                        ->push_back( dphi2 );
+  m_trig_EF_el_dphiresc                     ->push_back( dphiresc );
+  m_trig_EF_el_deltaEta1                    ->push_back( deta1 );
+  m_trig_EF_el_deltaPhiRescaled2            ->push_back( deltaPhiRescaled2 );
+  
+  m_trig_EF_el_trk_pt                           ->push_back( pt );
+  m_trig_EF_el_trk_eta                          ->push_back( trk_eta );
+  m_trig_EF_el_trk_charge                       ->push_back( charge );
+  m_trig_EF_el_trk_qOverP                       ->push_back( qOverP );
+  m_trig_EF_el_trk_sigd0                        ->push_back( sigd0 );
+  m_trig_EF_el_trk_d0                           ->push_back( d0 );
+  m_trig_EF_el_trk_eProbabilityHT               ->push_back( eProbabilityHT );
+  m_trig_EF_el_trk_transformed_eProbabilityHT   ->push_back( transformed_eProbabilityHT );
+  m_trig_EF_el_trk_d0significance               ->push_back( d0significance );
+  m_trig_EF_el_trk_deltaPOverP                  ->push_back( deltaPOverP );
+    
+
+  m_trig_EF_el_trk_summaryValues->push_back( nblayerhits                     ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nblayerolhits                   ); 
+  m_trig_EF_el_trk_summaryValues->push_back( npixhits                        ); 
+  m_trig_EF_el_trk_summaryValues->push_back( npixolhits                      ); 
+  m_trig_EF_el_trk_summaryValues->push_back( npixdeadsensors                 ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nscthits                        ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nsctolhits                      ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nsctdeadsensors                 ); 
+  m_trig_EF_el_trk_summaryValues->push_back( ntrthits                        ); 
+  m_trig_EF_el_trk_summaryValues->push_back( ntrtolhits                      ); 
+  m_trig_EF_el_trk_summaryValues->push_back( ntrthighthreshits               ); 
+  m_trig_EF_el_trk_summaryValues->push_back( ntrthighthresolhits             ); 
+  m_trig_EF_el_trk_summaryValues->push_back( ntrtxenonhits                   ); 
+  m_trig_EF_el_trk_summaryValues->push_back( expectblayerhit                 ); 
+  m_trig_EF_el_trk_summaryValues->push_back( expectNextToInnerMostLayer      ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nNextToInnerMostLayerHits       ); 
+  m_trig_EF_el_trk_summaryValues->push_back( nNextToInnerMostLayerOutliers   );
+
+   //Add isolations values
+  el->isolationValue(val,xAOD::Iso::etcone20);
+  m_trig_EF_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::etcone30);
+  m_trig_EF_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::etcone40);
+  m_trig_EF_el_etCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone20);
+  m_trig_EF_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone30);
+  m_trig_EF_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptcone40);
+  m_trig_EF_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone20);
+  m_trig_EF_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone30);
+  m_trig_EF_el_ptCone->push_back(val);
+  el->isolationValue(val,xAOD::Iso::ptvarcone40);
+  m_trig_EF_el_ptCone->push_back(val);
+
+ 
+  
+    
+  /*
+  m_trig_EF_el_nblayerhits                  ->push_back( nblayerhits ); 
+  m_trig_EF_el_nblayerolhits                ->push_back( nblayerolhits ); 
+  m_trig_EF_el_npixhits                     ->push_back( npixhits ); 
+  m_trig_EF_el_npixolhits                   ->push_back( npixolhits ); 
+  m_trig_EF_el_npixdeadsensors              ->push_back( npixdeadsensors ); 
+  m_trig_EF_el_nscthits                     ->push_back( nscthits ); 
+  m_trig_EF_el_nsctolhits                   ->push_back( nsctolhits ); 
+  m_trig_EF_el_nsctdeadsensors              ->push_back( nsctdeadsensors ); 
+  m_trig_EF_el_ntrthits                     ->push_back( ntrthits ); 
+  m_trig_EF_el_ntrtolhits                   ->push_back( ntrtolhits ); 
+  m_trig_EF_el_ntrthightreshits             ->push_back( ntrthighthreshits ); 
+  m_trig_EF_el_ntrthighthresolhits          ->push_back( ntrthighthresolhits ); 
+  m_trig_EF_el_ntrtxenonhits                ->push_back( ntrtxenonhits ); 
+  m_trig_EF_el_expectblayerhit              ->push_back( expectblayerhit ); 
+  m_trig_EF_el_expectNextToInnerMostLayer   ->push_back( expectNextToInnerMostLayer); 
+  m_trig_EF_el_nNextToInnerMostLayerHits    ->push_back( nNextToInnerMostLayerHits ); 
+  m_trig_EF_el_nNextToInnerMostLayerOutliers->push_back( nNextToInnerMostLayerOutliers );
+  */
+
+
+
+
+  return true;
+}
+
+
+
+// if true: is Z or W Or not MC   if false: not electron or not Z||W mother
+bool TrigEgammaEventSelection::isTruthElectronAny(const xAOD::Egamma *eg ){
+  if(m_truthContainer){
+    const xAOD::TruthParticle *mc=nullptr;
+    MonteCarlo::PDGID pdg = pdgid(eg, m_truthContainer,mc);
+    if(mc){
+      bool Z,W,e;
+      Z=W=e=false;
+      if(pdg == MonteCarlo::PDGID::ZMother)  Z = true;
+      if(pdg == MonteCarlo::PDGID::WMother)  W = true;
+      if(mc->isElectron()) e=true;
+      return !(e && (Z||W));
+    }
+  }
+  return true;
+}
+
+
+bool TrigEgammaEventSelection::fillMonteCarlo(const xAOD::Egamma *eg){
+
+  if(m_truthContainer){
+    const xAOD::TruthParticle *mc=nullptr;
+    MonteCarlo::PDGID pdg = pdgid(eg, m_truthContainer,mc);
+    if(mc){
+      m_mc_hasMC        = true;
+      m_mc_pt           = mc->pt();
+      m_mc_eta          = mc->eta();
+      m_mc_phi          = mc->phi();
+      m_mc_isTop        = mc->isTop();
+      m_mc_isQuark      = mc->isQuark();
+      m_mc_isParton     = mc->isParton();
+      m_mc_isMeson      = mc->isMeson();
+      m_mc_isTau        = mc->isTau();
+      m_mc_isMuon       = mc->isMuon();
+      m_mc_isPhoton     = mc->isPhoton();
+      m_mc_isElectron   = mc->isElectron();
+      if(pdg == MonteCarlo::PDGID::ZMother)  m_mc_hasZMother   = true;
+      if(pdg == MonteCarlo::PDGID::WMother)  m_mc_hasWMother   = true;
+      return true;
+    }//has match
+  }//has truth container
+  return false;
+}
+
+
+bool TrigEgammaEventSelection::fillCaloRings( const xAOD::Electron *el ){
+  return TrigEgammaAnalysisBaseTool::getCaloRings(el, *m_el_ringsE );
+}
+
+
+//! ============================================================================================================
+
+  
+double TrigEgammaEventSelection::get_el_sigd0(const xAOD::Electron *el){
+  float vard0 = el->trackParticle()->definingParametersCovMatrix()(0,0); // Cov matrix in vector form
+  if(vard0>0.0)
+    return sqrt(vard0); // variance of d0
+  return 0.0; 
+}
+
+double TrigEgammaEventSelection::get_el_d0(const xAOD::Electron *el){
+ return el->trackParticle()->d0();
+}
+
+
+double TrigEgammaEventSelection::get_el_eProbabilityHT(const xAOD::Electron *el){
+ float TRT_PID = 0;
+ el->trackParticle()->summaryValue(TRT_PID, xAOD::eProbabilityHT);
+ return TRT_PID;
+}
+
+
+double TrigEgammaEventSelection::get_el_transformed_eProbabilityHT(const xAOD::Electron *el){
+ double TRT_PID = get_el_eProbabilityHT(el);
+ double epsilon = 1e-30;
+ if(TRT_PID >= 1.0) TRT_PID = 1.0 - 1.e-15;
+ else if(TRT_PID <= epsilon) TRT_PID = epsilon;
+ double tau = 15.0;
+ TRT_PID = -(1/tau) * log( (1.0/TRT_PID) - 1.0);
+ return TRT_PID;
+}
+
+
+double TrigEgammaEventSelection::get_el_d0significance(const xAOD::Electron *el){
+ double d0 = get_el_d0(el);
+ double sigd0 = get_el_sigd0(el);
+ return (sigd0 != 0) ? fabs(d0/sigd0) : 0;
+}
+
+double TrigEgammaEventSelection::get_el_deltaPhiRescaled2(const xAOD::Electron *el){
+ float deltaPhiRescaled2 = 0;
+ el->trackCaloMatchValue(deltaPhiRescaled2, xAOD::EgammaParameters::deltaPhiRescaled2);
+ return deltaPhiRescaled2;
+}
+
+
+double TrigEgammaEventSelection::get_el_deltaEta1(const xAOD::Electron *el){
+ float deltaEta1 = 0;
+ el->trackCaloMatchValue(deltaEta1, xAOD::EgammaParameters::deltaEta1);
+ return deltaEta1;
+}
+
+
+double TrigEgammaEventSelection::get_el_DeltaPOverP(const xAOD::Electron *el){
+ unsigned int index;
+ if(el->trackParticle()->indexOfParameterAtPosition(index,xAOD::LastMeasurement)){
+   double LMPX = el->trackParticle()->parameterPX(index);
+   double LMPY = el->trackParticle()->parameterPY(index);
+   double LMPZ = el->trackParticle()->parameterPZ(index);
+   double refittedTrack_LMP = sqrt(LMPX*LMPX + LMPY*LMPY + LMPZ*LMPZ);
+   double refittedTrack_LMqOverP = el->trackParticle()->charge() / refittedTrack_LMP;
+   double unrefittedTrack_qOverP = el->trackParticle()->qOverP();
+   return 1 - (unrefittedTrack_qOverP / refittedTrack_LMqOverP);
+ }
+ else
+   return 0.0;
+}
+
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
index 0c030885532a..b071f53faa53 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
@@ -27,13 +27,25 @@ StatusCode TrigEgammaNavAnalysisTool::childBook(){
     m_dir=plot()->getBasePath();
     std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
 
-    for(const auto trigName:m_trigInputList){ 
-        if (std::find(chains.begin(), chains.end(), trigName) != chains.end()) {
+    for(const auto trigName:m_trigInputList){
+        if (std::find(chains.begin(), chains.end(), trigName) != chains.end()){ 
             if(plot()->getTrigInfoMap().count(trigName) != 0)
                 ATH_MSG_WARNING("Trigger already booked, removing from trigger list " << trigName);
-            else 
+            else {
                 m_trigList.push_back(trigName);
+                setTrigInfo(trigName);
+            }
         }
+        // Special code to attach trigger without of the menu
+        else if(getEmulation() && m_forceTrigAttachment){// 
+          ATH_MSG_INFO("Trigger doesn't exist in menu. Attach to emulate.");
+          if(plot()->getTrigInfoMap().count(trigName) == 0){
+            m_trigList.push_back(trigName);
+            setTrigEmulation();
+            setTrigInfo(trigName);
+          }
+        }
+
     }
 
     // Container level kinematic histograms
@@ -57,8 +69,6 @@ StatusCode TrigEgammaNavAnalysisTool::childBook(){
         setLabels(plot()->hist1(m_anatype+"_trigger_counts"),m_trigList);
     }
    
-    for (const auto trigger: m_trigList)
-            setTrigInfo(trigger);
 
     plot()->setEmulation(getEmulation()); 
     if(plot()->book(getTrigInfoMap()).isFailure()) {
@@ -79,6 +89,21 @@ StatusCode TrigEgammaNavAnalysisTool::childExecute(){
         ATH_MSG_DEBUG("Fails EventWise selection");
         return StatusCode::SUCCESS; //return nicely
     }
+    // Check for Rnn container in SG
+    if(m_storeGate->contains<xAOD::TrigRNNOutputContainer>("HLT_xAOD__TrigRNNOutputContainer_TrigRingerNeuralFex")){
+        ATH_MSG_DEBUG("Rnn container in SG "); 
+        setSGContainsRnn(true);
+    }
+    if(m_storeGate->contains<xAOD::TrigPhotonContainer>("HLT_xAOD__TrigPhotonContainer_L2PhotonFex")){
+        ATH_MSG_DEBUG("TrigPhotonContainer in SG ");
+        setSGContainsTrigPhoton(true);
+    }
+    ATH_MSG_DEBUG("Rnn container in SG " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer in SG " << getSGContainsTrigPhoton());
+    for( const auto& tool : m_tools) {
+        tool->setSGContainsRnn(getSGContainsRnn());
+        tool->setSGContainsTrigPhoton(getSGContainsTrigPhoton());
+    }
 
     // Check HLTResult
     if(tdt()->ExperimentalAndExpertMethods()->isHLTTruncated()){
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
index 8ae71d4a1429..9a2c3d3cae20 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
@@ -13,7 +13,6 @@
  * Description:
  *      Inherits from TrigEgammaAnalysisBaseTool.
  **********************************************************************/
-#include "egammaMVACalibAnalysis/IegammaMVATool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h"
 #include "TrigConfxAOD/xAODConfigTool.h"
 #include "PATCore/AcceptData.h"
@@ -138,6 +137,7 @@ bool TrigEgammaNavBaseTool::EventWiseSelection( ){
     //Calculate number of vertex 
     TrigEgammaAnalysisBaseTool::calculatePileupPrimaryVertex();   
 
+
     return true; 
 }
 
@@ -239,15 +239,20 @@ StatusCode TrigEgammaNavBaseTool::executeElectronNavigation( std::string trigIte
 
       xAOD::Electron *el = new xAOD::Electron(*eg);
       el->auxdecor<bool>(decor)=static_cast<bool>(true);
-      
 
-      if (match()->match(el, trigItem, te)){
-         std::pair< const xAOD::Electron*, const HLT::TriggerElement* > pair(el,te);
-         m_objTEList.push_back(pair);
-      }
-      else {
-          std::pair< const xAOD::Electron*, const HLT::TriggerElement* > pair(el,nullptr);
-          m_objTEList.push_back(pair);
+      bool isEmulation = getTrigInfo(trigItem).trigIsEmulation;
+      if(isEmulation && getEmulation()){
+        emulation()->match(el,te);
+        std::pair< const xAOD::Electron*, const HLT::TriggerElement* > pair(el,te);
+        m_objTEList.push_back(pair);
+      }else{
+        if (match()->match(el, trigItem, te)){
+           std::pair< const xAOD::Electron*, const HLT::TriggerElement* > pair(el,te);
+           m_objTEList.push_back(pair);
+        }else {
+            std::pair< const xAOD::Electron*, const HLT::TriggerElement* > pair(el,nullptr);
+            m_objTEList.push_back(pair);
+        }
       }
 
   }
@@ -279,13 +284,19 @@ StatusCode TrigEgammaNavBaseTool::executePhotonNavigation( std::string trigItem,
       }
       xAOD::Photon *ph = new xAOD::Photon(*eg);
       ph->auxdecor<bool>(decor)=static_cast<bool>(true);
-      if ( match()->match(ph, trigItem, te)){
-          std::pair< const xAOD::Photon*, const HLT::TriggerElement* > pair(ph,te);
-          m_objTEList.push_back(pair);
-      }
-      else {
-          std::pair< const xAOD::Photon*, const HLT::TriggerElement* > pair(ph,nullptr);
-          m_objTEList.push_back(pair);
+      bool isEmulation = getTrigInfo(trigItem).trigIsEmulation;
+      if(isEmulation && getEmulation()){
+        emulation()->match(ph,te);
+        std::pair< const xAOD::Photon*, const HLT::TriggerElement* > pair(ph,te);
+        m_objTEList.push_back(pair);
+      }else{
+        if (match()->match(ph, trigItem, te)){
+           std::pair< const xAOD::Photon*, const HLT::TriggerElement* > pair(ph,te);
+           m_objTEList.push_back(pair);
+        }else {
+            std::pair< const xAOD::Photon*, const HLT::TriggerElement* > pair(ph,nullptr);
+            m_objTEList.push_back(pair);
+        }
       }
 
   }
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavNtuple.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavNtuple.cxx
deleted file mode 100755
index a15b46ae1485..000000000000
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavNtuple.cxx
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#include "TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h"
-using namespace std;
-
-TrigEgammaNavNtuple::TrigEgammaNavNtuple( const std::string& myname ): TrigEgammaNavBaseTool(myname) 
-{
-  declareProperty("Analysis",               m_anatype="NavNtuple"             );
-  declareProperty("doOfflineDump",          m_doOfflineDump=false             ); 
-  declareProperty("DoSupportTrigger",       m_doSupport=true                  );
-  declareProperty("ForceMCMatch",           m_forceMCMatch=true               );
-  declareProperty("OfflineMinEtThreshold",  m_minEt=-1                        );
-
-  ///Set base tool configuration
-  m_forcePidSelection=false;
-  
-  m_el_ringsE=nullptr;
-  m_trig_L1_thrNames=nullptr;          
-  m_trig_L2_calo_energySample=nullptr;
-  m_trig_L2_calo_rings=nullptr;
-  m_trig_L2_el_trackAlgID=nullptr;
-  m_trig_L2_el_pt=nullptr;
-  m_trig_L2_el_eta=nullptr;
-  m_trig_L2_el_caloEta=nullptr;
-  m_trig_L2_el_phi=nullptr;
-  m_trig_L2_el_charge=nullptr;
-  m_trig_L2_el_nTRTHits=nullptr;
-  m_trig_L2_el_nTRTHiThresholdHits=nullptr;
-  m_trig_L2_el_etOverPt=nullptr;
-  m_trig_L2_el_trkClusDeta=nullptr;
-  m_trig_L2_el_trkClusDphi=nullptr;
-  m_trig_EF_calo_et=nullptr;
-  m_trig_EF_calo_eta=nullptr;
-
-}
-
-
-StatusCode TrigEgammaNavNtuple::childInitialize(){
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode TrigEgammaNavNtuple::childBook(){
-
-  ATH_MSG_DEBUG("Now configuring chains for analysis");
-  //Set the base directory from the plot()
-  m_dir=plot()->getBasePath();
-  std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
-
-  TrigEgammaAnalysisBaseTool::write_trigger_list(chains);
-  
-  for(const auto trigName:m_trigInputList){ 
-    if (std::find(chains.begin(), chains.end(), trigName) != chains.end()) {
-      if(plot()->getTrigInfoMap().count(trigName) != 0)
-          ATH_MSG_WARNING("Trigger already booked, removing from trigger list " << trigName);
-      else 
-          m_trigList.push_back(trigName);
-    }
-  }
-
-
-  // Container level kinematic histograms
-  ATH_MSG_DEBUG("cd in: " << m_dir <<"/Expert/Event");
-  addDirectory(m_dir+"/Expert/Event");
-  const int nTrigger = (int) m_trigList.size();
-   
-  std::string histname=m_anatype+"_electrons";
-  addHistogram(new TH1F(histname.c_str(), "Offline Electrons; ; N_{electrons}", 6, 1., 6));  
-  std::vector<std::string> el_labels;
-  el_labels.push_back("loose");
-  el_labels.push_back("medium");
-  el_labels.push_back("tight");
-  el_labels.push_back("lhloose");
-  el_labels.push_back("lhmedium");
-  el_labels.push_back("lhtight");
-  setLabels(hist1(histname),el_labels); 
-
-  histname=m_anatype+"_trigger_counts";
-  if(nTrigger>0) {
-    addHistogram(new TH1F(histname.c_str(), "Trigger Counts; Trigger ; Count", nTrigger, 1, nTrigger));
-    setLabels(plot()->hist1(m_anatype+"_trigger_counts"),m_trigList);
-  }
-
-  ///Only offline egamma ntuple
-  if(m_doOfflineDump){
-    ATH_MSG_DEBUG("Now configuting only the egamma analysis");
-    addDirectory(m_dir+"/Expert/Offline");
-    TTree *t_el = new TTree("electron", "tree of egamma and monte carlo information");
-    TTree *t_ph = new TTree("photons", "tree of egamma and monte carlo information");
-    bookEventBranches( t_ph );
-    //bookPhotonBranches( t_ph );
-    bookMonteCarloBranches( t_ph );
-    bookEventBranches( t_el );
-    bookElectronBranches( t_el );
-    bookMonteCarloBranches( t_el );
-    addTree( t_el, m_dir+"/Expert/Offline" );
-    addTree( t_ph, m_dir+"/Expert/Offline" );
-  }else if(m_doSupport){// all support trigger in one
-    addDirectory(m_dir+"/Expert/support");
-    TTree *t = new TTree( "trigger", "support trigger");
-    bookEventBranches( t );
-    bookElectronBranches( t );
-    //bookPhotonBranches( t );
-    bookTriggerBranches( t );
-    bookMonteCarloBranches( t );
-    for(auto& trigItem : m_trigList)
-      setTrigInfo(trigItem);
-    addTree(t, m_dir+"/Expert/support");
-  }else{// each trigger
-    for (int i = 0; i < (int) m_trigList.size(); i++) {      
-        std::string trigItem = m_trigList[i];
-        addDirectory(m_dir+"/Expert/"+trigItem);
-
-        TTree *t = new TTree( "trigger", "tree of trigger, egamma and monte carlo information");
-        bookEventBranches( t );
-        bookElectronBranches( t );
-        //bookPhotonBranches( t );
-        bookTriggerBranches( t );
-        bookMonteCarloBranches( t );
-        ATH_MSG_DEBUG("Already to attach the tree: " << trigItem);
-        setTrigInfo(trigItem);
-        addTree(t, m_dir+"/Expert/"+trigItem);
-    }
-  }
-  
-  // alloc memory to vector branchs
-  alloc_space();
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode TrigEgammaNavNtuple::childExecute(){
-
-  m_eventCounter++;
-
-  m_dir=plot()->getBasePath();
-  
-  cd(m_dir+"/Expert/Event");
-  if( !EventWiseSelection() ) {
-    ATH_MSG_DEBUG("Unable to retrieve offline containers");
-    return StatusCode::FAILURE;
-  }
-
-  cd(m_dir+"/Expert");
-
-
-  /// Egamma ntuple mode
-  if(m_doOfflineDump){
-    cd(m_dir+"/Expert/Offline");
-    if(!executeElectronDump())  return StatusCode::FAILURE;
-    if(!executePhotonDump())    return StatusCode::FAILURE;
-  }else if(m_doSupport){
-    if(!executeTrigSupportDump())  return StatusCode::FAILURE;
-  }else{
-    if(!executeTrigItemDump())  return StatusCode::FAILURE;
-  }
-
-  return StatusCode::SUCCESS;
-}
-
-
-StatusCode TrigEgammaNavNtuple::childFinalize(){
-  //release_space();
-  return StatusCode::SUCCESS;
-}
-
-
-bool TrigEgammaNavNtuple::executeElectronDump(){
-    
-  ATH_MSG_DEBUG("TrigEgammaNavNtuple::executeEgammaDump()");
-  
-  const xAOD::ElectronContainer* offElectrons = 0;
-  if ( (m_storeGate->retrieve(offElectrons,m_offElContKey)).isFailure() ){
-    ATH_MSG_ERROR("Failed to retrieve offline Electrons ");
-    return false;
-  }
-
-  TTree *t = tree( "electron" , m_dir+"/Expert/Offline" );
-  if(!t){
-    ATH_MSG_ERROR("Can no get the ttree pointer into the store.");
-    return false;
-  }
-  
-  linkEventBranches(t); 
-  linkElectronBranches(t);
-  linkMonteCarloBranches(t);
-   
-  for (const auto &eg : *offElectrons){
-    clear();  
-    if(!eg->trackParticle()){
-        ATH_MSG_DEBUG("No track Particle");
-        continue;
-    }
-    if(!eg->caloCluster()){
-        ATH_MSG_DEBUG("No caloCluster");
-        continue;
-    }
-
-    if(m_rmCrack){///default is true
-      if ( (fabs(eg->eta())>1.37 && fabs(eg->eta())<1.52) || fabs(eg->eta())>2.47 )  continue; 
-    }
-
-    if (m_forceProbeIsolation) {///default is false
-      if (!isIsolated(eg, "Loose"))  continue;///default is Loose
-    }
-    
-    if(m_forceMCEnhancedBias){///default is false
-      const xAOD::TruthParticle *mc=nullptr;
-      if( pdgid(eg,m_truthContainer,mc) != MonteCarlo::PDGID::EnhancedBias)  continue;
-    }
-
-    const xAOD::Electron* el =static_cast<const xAOD::Electron*> (el);
-      
-    fillEvent();
-    fillElectron( eg );
-    
-    if(!fillMonteCarlo( eg ) ){
-      ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-    }
-
-    ATH_MSG_DEBUG("Record information into the ttree.");
-    t->Fill();// save information
-  }
-
-  return true;
-}
-
-bool TrigEgammaNavNtuple::executePhotonDump(){
-  return true;
-}
-
-
-bool TrigEgammaNavNtuple::executeTrigItemDump(){
-
-
-  for(unsigned int ilist = 0; ilist != m_trigList.size(); ilist++) {
-
-    std::string trigItem = m_trigList.at(ilist);
-    const TrigInfo info = getTrigInfo(trigItem);
-    if ( executeNavigation(info).isFailure() ){
-      ATH_MSG_DEBUG("executeNavigation failure! continue...");
-      return false;
-    }
-
-    TTree *t = tree( "trigger", m_dir+"/Expert/"+trigItem);
-    linkEventBranches(t); 
-    linkElectronBranches(t);
-    //linkPhotonBranches(t);
-    linkTriggerBranches(t);
-    linkMonteCarloBranches(t);
-    ATH_MSG_DEBUG("ObjTEList size is: " << m_objTEList.size());
-    for(unsigned int i = 0; i != m_objTEList.size(); ++i){
-
-      const xAOD::Electron* el =static_cast<const xAOD::Electron*> (m_objTEList[i].first);
-      //const xAOD::Photon*   ph =static_cast<const xAOD::Photon*>   (m_objTEList[i].first);
-      const HLT::TriggerElement *feat = m_objTEList[i].second;
-      if(feat == nullptr){
-        ATH_MSG_WARNING("TriggerElement is nullptr");
-        continue;
-      } 
-      
-      clear();
-      fillEvent();
-      fillElectron( el );
-      //fillPhoton( ph );
-
-      if(!fillMonteCarlo( el ) ){
-        ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-      }
-        
-      ///Start trigger analisys...
-      const xAOD::EmTauRoI *emTauRoI = getFeature<xAOD::EmTauRoI>(feat);
-      if(emTauRoI){
-        fillEmTauRoI( emTauRoI ); 
-      }else{ 
-        ATH_MSG_WARNING("Cound not found EmTauRoI in this TriggerElement..");
-      }
-
-      const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
-      if(emCluster){
-
-        if(!fillTrigEMCluster( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigEMCluster information into the tree.");
-        }
-        
-        //const xAOD::TrigRNNOutput *rnnOutput=getFeature<xAOD::TrigRNNOutput>(feat);
-        //if(rnnOutput)  m_trig_L2_calo_rnnOutput = rnnOutput->rnnDecision().at(0);
-
-        //if(TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, ringsContainer ,*m_trig_L2_calo_rings)){
-        if(!fillTrigCaloRings( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigCaloRinger information into the tree.");
-        }
-
-      }///cluster protection
-
- 
-      const xAOD::TrigElectronContainer *trigElCont = getFeature<xAOD::TrigElectronContainer>(feat);
-      // Level 2 ID+Calo
-      if(trigElCont){
-        for(const auto& trigEl : *trigElCont){
-          if(!fillTrigElectron(trigEl)) {
-            ATH_MSG_WARNING("Cound not attach the trigElectron information into the tree.");
-          }    
-        }// loop over all trigElectrons for this feat
-      }
-
-      const xAOD::CaloClusterContainer *caloCont = getFeature<xAOD::CaloClusterContainer>(feat);
-      if(caloCont){
-        for(const auto& cl : *caloCont){
-          if(!fillCaloCluster(cl)){
-            ATH_MSG_WARNING("Cound not attach the CaloCluster information into the tree.");
-          }
-        }// loop over calo cluster
-      }
-
-      asg::AcceptData acceptData = setAccept(feat,info);
-      m_trig_L1_accept       = acceptData.getCutResult("L1Calo"); 
-      m_trig_L2_calo_accept  = acceptData.getCutResult("L2Calo"); 
-      m_trig_L2_el_accept    = acceptData.getCutResult("L2"); 
-      m_trig_EF_calo_accept  = acceptData.getCutResult("EFCalo");  
-      m_trig_EF_el_accept    = acceptData.getCutResult("HLT");  
-      
-      ATH_MSG_DEBUG("L1Calo: "  << int(m_trig_L1_accept)); 
-      ATH_MSG_DEBUG("L2Calo: "  << int(m_trig_L2_calo_accept));
-      ATH_MSG_DEBUG("L2    : "  << int(m_trig_L2_el_accept));
-      ATH_MSG_DEBUG("EFCalo: "  << int(m_trig_EF_calo_accept));
-      ATH_MSG_DEBUG("HLT   : "  << int(m_trig_EF_el_accept));          
-
-      ATH_MSG_DEBUG("Record information into the ttree.");
-      t->Fill();// save information
-    }// loop
-  } // End loop over trigger
-  return true;
-}
-
-
-bool TrigEgammaNavNtuple::executeTrigSupportDump(){
-  
-  double GeV=1000.;
-  // Just do this to retrieve all offline electrons, dummy trigItem!
-  const TrigInfo info = getTrigInfo(m_trigList[0]);
-  if ( executeNavigation(info).isFailure() ){
-    ATH_MSG_DEBUG("executeNavigation failure! continue...");
-    return false;
-  }//executeNavigation to collect electron
-
-  std::vector<const HLT::TriggerElement *> vec_feat;
-
-
-  cd(m_dir+"/Expert/support");
-  TTree *t = tree( "trigger", m_dir+"/Expert/support");
-  linkEventBranches(t); 
-  linkElectronBranches(t); 
-  linkTriggerBranches(t); 
-  linkMonteCarloBranches(t); 
-
-  // Loop over all good offline objects
-  for(const auto& eg : m_objTEList){
-
-    // Get the good electron
-    const xAOD::Electron* el =static_cast<const xAOD::Electron*> (eg.first);
-    // Force Et cut 
-    if(m_minEt > 0.0){
-      if( !( getEt(el)  > (m_minEt)*GeV) ) continue;
-    }
-    // Clear the vector
-    vec_feat.clear();
-    // Loop over support triggers
-    for(auto& trigItem : m_trigList){
-      const HLT::TriggerElement *feat;
-      // Trigger match using Matching tool
-      match()->match(el, trigItem, feat);
-      if(feat){// If has a match!
-        for(unsigned i=0; i < vec_feat.size(); ++i){
-          if(getFeature<xAOD::EmTauRoI>(vec_feat[i])->roiWord() == getFeature<xAOD::EmTauRoI>(feat)->roiWord()){
-            if(count_HLT_objects(feat) > count_HLT_objects(vec_feat[i])){
-              vec_feat.erase(vec_feat.begin() + i); // Erase the trigger element lowest than the new feature
-              vec_feat.push_back(feat); // attach the new trigger element
-              break;
-            }
-          }// The same region in L1Calo trigger
-        }
-        if(vec_feat.empty())  vec_feat.push_back(feat);
-      }
-    }// Loop over support trigger
-
-    ATH_MSG_DEBUG("Attach " << vec_feat.size() << " features ");
-    for(auto& feat : vec_feat){
-      
-      clear();
-      fillEvent();
-      fillElectron( el );  
-
-      if(!fillMonteCarlo( el ) ){
-        ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-        if(m_forceMCMatch)  continue;
-      }
- 
-      ///Start trigger analisys...
-      const xAOD::EmTauRoI *emTauRoI = getFeature<xAOD::EmTauRoI>(feat);
-      if(emTauRoI){
-        fillEmTauRoI( emTauRoI ); 
-      }else{ 
-        ATH_MSG_WARNING("Cound not found EmTauRoI in this TriggerElement..");
-      }
-    
-      const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
-      if(emCluster){
-        //ATH_MSG_INFO("AKI: Et = " << emCluster->et()*1e-3); 
-        //if(emCluster->et()*1e-3 < 20){
-        //  continue;
-        //}
-        if(!fillTrigEMCluster( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigEMCluster information into the tree.");
-        }
-    
-        //if(TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, ringsContainer ,*m_trig_L2_calo_rings)){
-        if(!fillTrigCaloRings( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigCaloRinger information into the tree.");
-        }
-      }///cluster protection
-    
-    
-      const xAOD::TrigElectronContainer *trigElCont = getFeature<xAOD::TrigElectronContainer>(feat);
-      // Level 2 ID+Calo
-      if(trigElCont){
-        for(const auto& trigEl : *trigElCont){
-          if(!fillTrigElectron(trigEl)) {
-            ATH_MSG_WARNING("Cound not attach the trigElectron information into the tree.");
-          }    
-        }// loop over all trigElectrons for this feat
-      }
-       
-      const xAOD::CaloClusterContainer *caloCont = getFeature<xAOD::CaloClusterContainer>(feat);
-      if(caloCont){
-        for(const auto& cl : *caloCont){
-          if(!fillCaloCluster(cl)){
-            ATH_MSG_WARNING("Cound not attach the CaloCluster information into the tree.");
-          }
-        }// loop over calo cluster
-      }
-
-      ATH_MSG_DEBUG("record trigger information into the file.");
-      t->Fill();
-    }//loop over trigger objects
-
-  }// Loop over electrons
-  return true;
-}
-
-
-
-
-
-
-
-bool TrigEgammaNavNtuple::fillEmTauRoI( const xAOD::EmTauRoI *emTauRoI ){
-  
-  m_trig_L1_eta     = emTauRoI->eta();
-  m_trig_L1_phi     = emTauRoI->phi();
-  m_trig_L1_emClus  = emTauRoI->emClus();
-  m_trig_L1_tauClus = emTauRoI->tauClus();
-  m_trig_L1_emIsol  = emTauRoI->emIsol();
-  m_trig_L1_hadIsol = emTauRoI->hadIsol();
-  for(unsigned i=0; i < emTauRoI->thrNames().size();++i)  m_trig_L1_thrNames->push_back(emTauRoI->thrNames().at(i));
-  return true;
-} 
-
-bool TrigEgammaNavNtuple::fillCaloCluster( const xAOD::CaloCluster *cluster){
-
-  m_trig_EF_calo_et->push_back(cluster->et());
-  m_trig_EF_calo_eta->push_back(cluster->eta());
-  return true;
-}
-
-bool TrigEgammaNavNtuple::fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster ){
-  
-  m_trig_L2_calo_et         = emCluster->et();
-  m_trig_L2_calo_eta        = emCluster->eta();
-  m_trig_L2_calo_phi        = emCluster->phi();
-  m_trig_L2_calo_e237       = emCluster->e237();
-  m_trig_L2_calo_e277       = emCluster->e277();
-  m_trig_L2_calo_fracs1     = emCluster->fracs1();
-  m_trig_L2_calo_weta2      = emCluster->weta2();
-  m_trig_L2_calo_ehad1      = emCluster->ehad1();
-  m_trig_L2_calo_emaxs1     = emCluster->emaxs1();
-  m_trig_L2_calo_e2tsts1    = emCluster->e2tsts1();
-  m_trig_L2_calo_wstot      = emCluster->wstot();
-  for(unsigned i=0; i<emCluster->energySample().size(); ++i){
-    m_trig_L2_calo_energySample->push_back( emCluster->energySample().at(i));
-  }
-
-  return true;
-}
-
-
-bool TrigEgammaNavNtuple::fillTrigElectron( const xAOD::TrigElectron *trigEl ){
-
-   const xAOD::TrackParticle* trkIter = trigEl->trackParticle();
-   if (trkIter==nullptr) return false; // disconsider candidates without track
-   int algoId = 0;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::FastTrackFinderSeed] ) algoId=9;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyA] )           algoId=5;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyB] )           algoId=6;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyC] )           algoId=7;
-
-   m_trig_L2_el_trackAlgID  ->push_back(algoId);
-   m_trig_L2_el_caloEta     ->push_back(trigEl->caloEta()); 
-   m_trig_L2_el_trkClusDphi ->push_back(trigEl->trkClusDphi());  
-   m_trig_L2_el_trkClusDeta ->push_back(trigEl->trkClusDeta());  
-   m_trig_L2_el_pt          ->push_back(trigEl->pt());
-   m_trig_L2_el_phi         ->push_back(trigEl->phi());  
-   m_trig_L2_el_eta         ->push_back(trigEl->eta());  
-   m_trig_L2_el_etOverPt    ->push_back(trigEl->etOverPt());          
-   m_trig_L2_el_nTRTHits    ->push_back(trigEl->nTRTHits());        
-   m_trig_L2_el_nTRTHiThresholdHits->push_back(trigEl->nTRTHiThresholdHits());
-   m_trig_L2_el_charge      ->push_back(trigEl->charge());      
-   return true;
-}
-
-
-
-bool TrigEgammaNavNtuple::fillEvent(){
-  ///Event information
-  m_runNumber               = m_eventInfo->runNumber();
-  m_eventNumber             = m_eventInfo->eventNumber();
-  m_avgmu=getAvgMu();
-  return true;
-}
-
-bool TrigEgammaNavNtuple::fillElectron( const xAOD::Electron *el ){
-
-  ///Cluster information
-  m_el_et                   = el->pt();
-  m_el_eta                  = el->eta();
-  m_el_phi                  = el->phi();
-  el->showerShapeValue( m_el_ethad1   , xAOD::EgammaParameters::ShowerShapeType::ethad1   ); 
-  el->showerShapeValue( m_el_ehad1    , xAOD::EgammaParameters::ShowerShapeType::ehad1    );
-  el->showerShapeValue( m_el_f1       , xAOD::EgammaParameters::ShowerShapeType::f1       );
-  el->showerShapeValue( m_el_f3       , xAOD::EgammaParameters::ShowerShapeType::f3       );
-  el->showerShapeValue( m_el_f1core   , xAOD::EgammaParameters::ShowerShapeType::f1core   );
-  el->showerShapeValue( m_el_f3core   , xAOD::EgammaParameters::ShowerShapeType::f3core   );
-  el->showerShapeValue( m_el_weta2    , xAOD::EgammaParameters::ShowerShapeType::weta2    );
-  el->showerShapeValue( m_el_wtots1   , xAOD::EgammaParameters::ShowerShapeType::wtots1  );
-  el->showerShapeValue( m_el_fracs1   , xAOD::EgammaParameters::ShowerShapeType::fracs1   );
-  el->showerShapeValue( m_el_Reta     , xAOD::EgammaParameters::ShowerShapeType::Reta     );
-  el->showerShapeValue( m_el_Rphi     , xAOD::EgammaParameters::ShowerShapeType::Rphi     );
-  el->showerShapeValue( m_el_Eratio   , xAOD::EgammaParameters::ShowerShapeType::Eratio   );
-  el->showerShapeValue( m_el_Rhad     , xAOD::EgammaParameters::ShowerShapeType::Rhad     );
-  el->showerShapeValue( m_el_Rhad1    , xAOD::EgammaParameters::ShowerShapeType::Rhad1    );
-
-  ///Combined track/Cluter information
-  el->trackCaloMatchValue( m_el_deta1     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta1   );
-  el->trackCaloMatchValue( m_el_deta2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta2   );
-  el->trackCaloMatchValue( m_el_dphi2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhi2   );
-  el->trackCaloMatchValue( m_el_dphiresc  , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled0 );
-  el->trackCaloMatchValue( m_el_dphiresc2 , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled2 );
-
-
-  ///Track particle information
-  const xAOD::TrackParticle *track = el->trackParticle();
-  if(track){
-    m_el_pt                   = track->pt();
-    m_el_d0                   = fabsf(track->d0());
-    m_el_charge               = el->charge();
-    
-    track->summaryValue( m_el_eprobht            , xAOD::SummaryType::eProbabilityHT );
-    track->summaryValue( m_el_nblayerhits        , xAOD::SummaryType::numberOfInnermostPixelLayerHits );
-    track->summaryValue( m_el_nblayerolhits      , xAOD::SummaryType::numberOfInnermostPixelLayerOutliers );
-    track->summaryValue( m_el_npixhits           , xAOD::SummaryType::numberOfPixelHits );
-    track->summaryValue( m_el_npixolhits         , xAOD::SummaryType::numberOfPixelOutliers );
-    track->summaryValue( m_el_nscthits           , xAOD::SummaryType::numberOfSCTHits );
-    track->summaryValue( m_el_nsctolhits         , xAOD::SummaryType::numberOfSCTOutliers );
-    track->summaryValue( m_el_ntrthightreshits   , xAOD::SummaryType::numberOfTRTHighThresholdHits );
-    track->summaryValue( m_el_ntrthits           , xAOD::SummaryType::numberOfTRTHits);
-    track->summaryValue( m_el_ntrthighthresolhits, xAOD::SummaryType::numberOfTRTHighThresholdOutliers );
-    track->summaryValue( m_el_ntrtolhits         , xAOD::SummaryType::numberOfTRTOutliers );
-    track->summaryValue( m_el_ntrtxenonhits      , xAOD::SummaryType::numberOfTRTXenonHits );
-    //track->summaryValue( m_el_expectblayerhit    , xAOD::SummaryType::expectInnermostPixelLayerHit );
-    track->summaryValue( m_el_npixdeadsensors    , xAOD::SummaryType::numberOfPixelDeadSensors);
-    track->summaryValue( m_el_nsctdeadsensors    , xAOD::SummaryType::numberOfSCTDeadSensors);
-
-    m_el_nsideadsensors       = m_el_npixdeadsensors  + m_el_nsctdeadsensors;
-    m_el_nsihits              = m_el_npixhits         + m_el_nscthits;
-  }
-
-  //m_el_loose              = el->passSelection("Loose");
-  //m_el_medium             = el->passSelection("Medium");
-  //m_el_tight              = el->passSelection("Tight");
-  //m_el_lhLoose            = el->passSelection("LHLoose");
-  //m_el_lhMedium           = el->passSelection("LHMedium");
-  //m_el_lhTight            = el->passSelection("LHTight"); 
-  //m_el_rgLoose            = el->passSelection("RGLoose");
-  //m_el_rgMedium           = el->passSelection("RGMedium");
-  //m_el_rgTight            = el->passSelection("RGTight");
-  //m_el_multiLepton        = el->passSelection("MultiLepton");
-  m_el_loose                = ApplyElectronPid(el, "Loose");
-  m_el_medium               = ApplyElectronPid(el, "Medium");
-  m_el_tight                = ApplyElectronPid(el, "Tight");
-  m_el_lhLoose              = ApplyElectronPid(el, "LHLoose");
-  m_el_lhMedium             = ApplyElectronPid(el, "LHMedium");
-  m_el_lhTight              = ApplyElectronPid(el, "LHTight"); 
-  //m_el_rgLoose            = ApplyElectronPid(el, "RGLoose");
-  //m_el_rgMedium           = ApplyElectronPid(el, "RGMedium");
-  //m_el_rgTight            = ApplyElectronPid(el, "RGTight");
-  
-  m_calo_et                 = getCluster_et( el );
-  m_calo_eta                = getCluster_eta( el );
-  m_calo_phi                = getCluster_phi( el );
-  ///Extra information about pileup
-  m_el_nGoodVtx             = getNGoodVertex();
-  m_el_nPileupPrimaryVtx    = getNPVtx();
-
-
-  if(!fillCaloRings( el )){
-    ATH_MSG_WARNING("Could not attach the calorRings information.");
-  }
-
-  return true;
-}
-
-
-/*bool TrigEgammaNavNtuple::fillPhoton( const xAOD::Photon *ph ){
-  return true;
-}*/
-
-bool TrigEgammaNavNtuple::fillMonteCarlo(const xAOD::Egamma *eg){
-
-  if(m_truthContainer){
-    ATH_MSG_DEBUG("TruthParticle container size is: " << m_truthContainer->size());
-    const xAOD::TruthParticle *mc=nullptr;
-    MonteCarlo::PDGID pdg = pdgid(eg, m_truthContainer,mc);
-    if(mc){
-      m_mc_hasMC        = true;
-      m_mc_pt           = mc->pt();
-      m_mc_eta          = mc->eta();
-      m_mc_phi          = mc->phi();
-      m_mc_isTop        = mc->isTop();
-      m_mc_isQuark      = mc->isQuark();
-      m_mc_isParton     = mc->isParton();
-      m_mc_isMeson      = mc->isMeson();
-      m_mc_isTau        = mc->isTau();
-      m_mc_isMuon       = mc->isMuon();
-      m_mc_isPhoton     = mc->isPhoton();
-      m_mc_isElectron   = mc->isElectron();
-      if(pdg == MonteCarlo::PDGID::ZMother)  m_mc_hasZMother   = true;
-      if(pdg == MonteCarlo::PDGID::WMother)  m_mc_hasWMother   = true;
-      return true;
-    }//has match
-  }//has truth container
-  return false;
-}
-
-
-bool TrigEgammaNavNtuple::fillTrigCaloRings( const xAOD::TrigEMCluster *emCluster ){
-  return TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, *m_trig_L2_calo_rings);
-}
-
-
-bool TrigEgammaNavNtuple::fillCaloRings( const xAOD::Electron *el ){
-  return TrigEgammaAnalysisBaseTool::getCaloRings(el, *m_el_ringsE );
-}
-
-/*
- * book, link, clear, alloc and release method divide in:
- * trigger, Egamma and MonteCarlo data base.
- */
-
-template <class T> 
-void TrigEgammaNavNtuple::InitBranch(TTree* fChain, std::string branch_name, T* param, bool message){
-
-  std::string bname = branch_name;
-  if (fChain->GetAlias(bname.c_str()))
-     bname = std::string(fChain->GetAlias(bname.c_str()));
-
-  if (!fChain->FindBranch(bname.c_str()) && message) {
-    ATH_MSG_WARNING("unknown branch " << bname);
-    return;  
-  }
-  fChain->SetBranchStatus(bname.c_str(), 1.);
-  fChain->SetBranchAddress(bname.c_str(), param);
-}
-
-void TrigEgammaNavNtuple::bookEventBranches(TTree *t){
-  
-  t->Branch("RunNumber",        &m_runNumber);
-  t->Branch("EventNumber",      &m_eventNumber);
-  t->Branch("avgmu",            &m_avgmu);
-}
-
-void TrigEgammaNavNtuple::bookTriggerBranches(TTree *t){
-
-  // Level L1 cluster
-  t->Branch( "trig_L1_eta",             &m_trig_L1_eta);
-  t->Branch( "trig_L1_phi",             &m_trig_L1_phi);
-  t->Branch( "trig_L1_emClus",          &m_trig_L1_emClus);
-  t->Branch( "trig_L1_tauClus",         &m_trig_L1_tauClus);
-  t->Branch( "trig_L1_emIsol",          &m_trig_L1_emIsol);
-  t->Branch( "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
-  t->Branch( "trig_L1_thrNames",        &m_trig_L1_thrNames);
-  t->Branch( "trig_L1_accept",          &m_trig_L1_accept);
-  t->Branch( "trig_L2_calo_et",         &m_trig_L2_calo_et);
-  t->Branch( "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
-  t->Branch( "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
-  t->Branch( "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
-  t->Branch( "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
-  t->Branch( "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
-  t->Branch( "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
-  t->Branch( "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
-  t->Branch( "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
-  t->Branch( "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
-  t->Branch( "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
-  t->Branch( "trig_L2_calo_energySample",&m_trig_L2_calo_energySample ); 
-  t->Branch( "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
-  t->Branch( "trig_L2_calo_rnnOutput",  &m_trig_L2_calo_rnnOutput ); 
-  t->Branch( "trig_L2_calo_accept",     &m_trig_L2_calo_accept);
-  t->Branch( "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
-  t->Branch( "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
-  t->Branch( "trig_L2_el_eta",                 &m_trig_L2_el_eta);
-  t->Branch( "trig_L2_el_phi",                 &m_trig_L2_el_phi );
-  t->Branch( "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
-  t->Branch( "trig_L2_el_charge",              &m_trig_L2_el_charge);
-  t->Branch( "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
-  t->Branch( "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
-  t->Branch( "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
-  t->Branch( "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
-  t->Branch( "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
-  t->Branch( "trig_L2_el_accept",       &m_trig_L2_el_accept );
-  t->Branch( "trig_EF_calo_accept",     &m_trig_EF_calo_accept);
-  t->Branch( "trig_EF_calo_et",         &m_trig_EF_calo_et);
-  t->Branch( "trig_EF_calo_eta",        &m_trig_EF_calo_eta);
-  t->Branch( "trig_EF_el_accept",       &m_trig_EF_el_accept);
-}
-
-void TrigEgammaNavNtuple::bookElectronBranches(TTree *t){
- 
-  t->Branch("el_et",                    &m_el_et);
-  t->Branch("el_pt",                    &m_el_pt);
-  t->Branch("el_eta",                   &m_el_eta);
-  t->Branch("el_phi",                   &m_el_phi);
-  t->Branch("el_ethad1",                &m_el_ethad1);
-  t->Branch("el_ehad1",                 &m_el_ehad1);
-  t->Branch("el_f1",                    &m_el_f1);
-  t->Branch("el_f3",                    &m_el_f3);
-  t->Branch("el_f1core",                &m_el_f1core);
-  t->Branch("el_f3core",                &m_el_f3core);
-  t->Branch("el_weta2",                 &m_el_weta2);
-  t->Branch("el_d0",                    &m_el_d0);
-  t->Branch("el_wtots1",                &m_el_wtots1);
-  t->Branch("el_fracs1",                &m_el_fracs1);
-  t->Branch("el_Reta",                  &m_el_Reta);
-  t->Branch("el_Rphi",                  &m_el_Rphi);
-  t->Branch("el_Eratio",                &m_el_Eratio);
-  t->Branch("el_Rhad",                  &m_el_Rhad);
-  t->Branch("el_Rhad1",                 &m_el_Rhad1);
-  t->Branch("el_deta1",                 &m_el_deta1);
-  t->Branch("el_deta2",                 &m_el_deta2);
-  t->Branch("el_dphi2",                 &m_el_dphi2);
-  t->Branch("el_dphiresc",              &m_el_dphiresc);
-  t->Branch("el_dphiresc2",             &m_el_dphiresc2);
-  t->Branch("el_eprobht",               &m_el_eprobht);
-  t->Branch("el_charge",                &m_el_charge);
-  t->Branch("el_nblayerhits",           &m_el_nblayerhits);
-  t->Branch("el_nblayerolhits",         &m_el_nblayerolhits);
-  t->Branch("el_npixhits",              &m_el_npixhits);
-  t->Branch("el_npixolhits",            &m_el_npixolhits);
-  t->Branch("el_nscthits",              &m_el_nscthits);
-  t->Branch("el_nsctolhits",            &m_el_nsctolhits);
-  t->Branch("el_ntrthightreshits",      &m_el_ntrthightreshits);
-  t->Branch("el_ntrthits",              &m_el_ntrthits);
-  t->Branch("el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
-  t->Branch("el_ntrtolhits",            &m_el_ntrtolhits);
-  t->Branch("el_ntrtxenonhits",         &m_el_ntrtxenonhits);
-  t->Branch("el_expectblayerhit",       &m_el_expectblayerhit); 
-  t->Branch("el_nsihits",               &m_el_nsihits          );
-  t->Branch("el_nsideadsensors",        &m_el_nsideadsensors   );
-  t->Branch("el_npixdeadsensors",       &m_el_npixdeadsensors  );
-  t->Branch("el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
-  t->Branch("el_ringsE",                &m_el_ringsE );
-  t->Branch("el_loose",                 &m_el_loose  );
-  t->Branch("el_medium",                &m_el_medium );
-  t->Branch("el_tight",                 &m_el_tight );
-  t->Branch("el_lhLoose",               &m_el_lhLoose );
-  t->Branch("el_lhMedium",              &m_el_lhMedium ); 
-  t->Branch("el_lhTight",               &m_el_lhTight ); 
-  t->Branch("el_rgLoose",               &m_el_rgLoose );
-  t->Branch("el_rgMedium",              &m_el_rgMedium ); 
-  t->Branch("el_rgTight",               &m_el_rgTight ); 
-  t->Branch("el_multiLepton",           &m_el_multiLepton);
-  t->Branch("el_nGoodVtx",              &m_el_nGoodVtx);
-  t->Branch("el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
-  t->Branch("calo_et",                  &m_calo_et);
-  t->Branch("calo_eta",                 &m_calo_eta);
-  t->Branch("calo_phi",                 &m_calo_phi);
- 
-}
-
-
-/*void TrigEgammaNavNtuple::bookPhotonBranches(TTree *t){
-} */ 
-  
-void TrigEgammaNavNtuple::bookMonteCarloBranches(TTree *t){
-  // Monte Carlo
-  t->Branch("mc_hasMC",       &m_mc_hasMC);
-  t->Branch("mc_pt",          &m_mc_pt);
-  t->Branch("mc_eta",         &m_mc_eta);
-  t->Branch("mc_phi",         &m_mc_phi);
-  t->Branch("mc_isTop",       &m_mc_isTop);
-  t->Branch("mc_isParton",    &m_mc_isParton);
-  t->Branch("mc_isMeson",     &m_mc_isMeson);
-  t->Branch("mc_isTau",       &m_mc_isTau);
-  t->Branch("mc_isMuon",      &m_mc_isMuon);
-  t->Branch("mc_isPhoton",    &m_mc_isPhoton);
-  t->Branch("mc_isElectron",  &m_mc_isElectron);
-  t->Branch("mc_hasZMother",  &m_mc_hasZMother);
-  t->Branch("mc_hasWMother",  &m_mc_hasWMother);
-}
-
-void TrigEgammaNavNtuple::linkEventBranches(TTree *t){
-  
-  InitBranch( t, "RunNumber",        &m_runNumber);
-  InitBranch( t, "EventNumber",      &m_eventNumber);
-  InitBranch( t, "avgmu",            &m_avgmu);
-}
-
-void TrigEgammaNavNtuple::linkElectronBranches( TTree *t ){
-  
-  InitBranch( t, "el_et",                    &m_el_et);
-  InitBranch( t, "el_pt",                    &m_el_pt);
-  InitBranch( t, "el_eta",                   &m_el_eta);
-  InitBranch( t, "el_phi",                   &m_el_phi);
-  InitBranch( t, "el_ethad1",                &m_el_ethad1);
-  InitBranch( t, "el_ehad1",                 &m_el_ehad1);
-  InitBranch( t, "el_f1",                    &m_el_f1);
-  InitBranch( t, "el_f3",                    &m_el_f3);
-  InitBranch( t, "el_f1core",                &m_el_f1core);
-  InitBranch( t, "el_f3core",                &m_el_f3core);
-  InitBranch( t, "el_weta2",                 &m_el_weta2);
-  InitBranch( t, "el_d0",                    &m_el_d0);
-  InitBranch( t, "el_wtots1",                &m_el_wtots1);
-  InitBranch( t, "el_fracs1",                &m_el_fracs1);
-  InitBranch( t, "el_Reta",                  &m_el_Reta);
-  InitBranch( t, "el_Rphi",                  &m_el_Rphi);
-  InitBranch( t, "el_Eratio",                &m_el_Eratio);
-  InitBranch( t, "el_Rhad",                  &m_el_Rhad);
-  InitBranch( t, "el_Rhad1",                 &m_el_Rhad1);
-  InitBranch( t, "el_deta1",                 &m_el_deta1);
-  InitBranch( t, "el_deta2",                 &m_el_deta2);
-  InitBranch( t, "el_dphi2",                 &m_el_dphi2);
-  InitBranch( t, "el_dphiresc",              &m_el_dphiresc);
-  InitBranch( t, "el_dphiresc2",             &m_el_dphiresc2);
-  InitBranch( t, "el_eprobht",               &m_el_eprobht);
-  InitBranch( t, "el_charge",                &m_el_charge);
-  InitBranch( t, "el_nblayerhits",           &m_el_nblayerhits);
-  InitBranch( t, "el_nblayerolhits",         &m_el_nblayerolhits);
-  InitBranch( t, "el_npixhits",              &m_el_npixhits);
-  InitBranch( t, "el_npixolhits",            &m_el_npixolhits);
-  InitBranch( t, "el_nscthits",              &m_el_nscthits);
-  InitBranch( t, "el_nsctolhits",            &m_el_nsctolhits);
-  InitBranch( t, "el_ntrthightreshits",      &m_el_ntrthightreshits);
-  InitBranch( t, "el_ntrthits",              &m_el_ntrthits);
-  InitBranch( t, "el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
-  InitBranch( t, "el_ntrtolhits",            &m_el_ntrtolhits);
-  InitBranch( t, "el_ntrtxenonhits",         &m_el_ntrtxenonhits);
-  InitBranch( t, "el_expectblayerhit",       &m_el_expectblayerhit); 
-  InitBranch( t, "el_nsihits",               &m_el_nsihits          );
-  InitBranch( t, "el_nsideadsensors",        &m_el_nsideadsensors   );
-  InitBranch( t, "el_npixdeadsensors",       &m_el_npixdeadsensors  );
-  InitBranch( t, "el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
-  InitBranch( t, "el_ringsE",                &m_el_ringsE );
-  InitBranch( t, "el_loose",                 &m_el_loose  );
-  InitBranch( t, "el_medium",                &m_el_medium );
-  InitBranch( t, "el_tight",                 &m_el_tight );
-  InitBranch( t, "el_lhLoose",               &m_el_lhLoose );
-  InitBranch( t, "el_lhMedium",              &m_el_lhMedium ); 
-  InitBranch( t, "el_lhTight",               &m_el_lhTight ); 
-  InitBranch( t, "el_rgLoose",               &m_el_rgLoose );
-  InitBranch( t, "el_rgMedium",              &m_el_rgMedium ); 
-  InitBranch( t, "el_rgTight",               &m_el_rgTight ); 
-  InitBranch( t, "el_multiLepton",           &m_el_multiLepton);
-  InitBranch( t, "el_nGoodVtx",              &m_el_nGoodVtx);
-  InitBranch( t, "el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
-  InitBranch( t, "calo_et",                  &m_calo_et);
-  InitBranch( t, "calo_eta",                 &m_calo_eta);
-  InitBranch( t, "calo_phi",                 &m_calo_phi);
-
-}
-
-
-/*void TrigEgammaNavNtuple::linkPhotonBranches( TTree *t ){
-}*/
-
-void TrigEgammaNavNtuple::linkTriggerBranches( TTree *t ){
-
-  InitBranch(t, "trig_L1_eta",             &m_trig_L1_eta);
-  InitBranch(t, "trig_L1_phi",             &m_trig_L1_phi);
-  InitBranch(t, "trig_L1_emClus",          &m_trig_L1_emClus);
-  InitBranch(t, "trig_L1_tauClus",         &m_trig_L1_tauClus);
-  InitBranch(t, "trig_L1_emIsol",          &m_trig_L1_emIsol);
-  InitBranch(t, "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
-  InitBranch(t, "trig_L1_thrNames",        &m_trig_L1_thrNames);
-  InitBranch(t, "trig_L1_accept",          &m_trig_L1_accept);
-  InitBranch(t, "trig_L2_calo_et",         &m_trig_L2_calo_et);
-  InitBranch(t, "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
-  InitBranch(t, "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
-  InitBranch(t, "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
-  InitBranch(t, "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
-  InitBranch(t, "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
-  InitBranch(t, "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
-  InitBranch(t, "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
-  InitBranch(t, "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
-  InitBranch(t, "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
-  InitBranch(t, "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
-  InitBranch(t, "trig_L2_calo_rnnOutput",      &m_trig_L2_calo_rnnOutput ); 
-  InitBranch(t, "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
-  InitBranch(t, "trig_L2_calo_energySample",&m_trig_L2_calo_energySample ); 
-  InitBranch(t, "trig_L2_calo_accept",     &m_trig_L2_calo_accept);
-
-  InitBranch(t, "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
-  InitBranch(t, "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
-  InitBranch(t, "trig_L2_el_eta",                 &m_trig_L2_el_eta);
-  InitBranch(t, "trig_L2_el_phi",                 &m_trig_L2_el_phi );
-  InitBranch(t, "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
-  InitBranch(t, "trig_L2_el_charge",              &m_trig_L2_el_charge);
-  InitBranch(t, "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
-  InitBranch(t, "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
-  InitBranch(t, "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
-  InitBranch(t, "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
-  InitBranch(t, "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
-
-  InitBranch(t, "trig_L2_el_accept",       &m_trig_L2_el_accept );
-  InitBranch(t, "trig_EF_el_accept",       &m_trig_EF_el_accept );
-  InitBranch(t, "trig_EF_calo_accept",     &m_trig_EF_calo_accept );
-  InitBranch(t, "trig_EF_calo_et",         &m_trig_EF_calo_et );
-  InitBranch(t, "trig_EF_calo_eta",        &m_trig_EF_calo_eta );
- 
-}
-
-
-void TrigEgammaNavNtuple::linkMonteCarloBranches(TTree *t){
- 
-  InitBranch(t, "mc_hasMC",       &m_mc_hasMC);
-  InitBranch(t, "mc_pt",          &m_mc_pt);
-  InitBranch(t, "mc_eta",         &m_mc_eta);
-  InitBranch(t, "mc_phi",         &m_mc_phi);
-  InitBranch(t, "mc_isTop",       &m_mc_isTop);
-  InitBranch(t, "mc_isParton",    &m_mc_isParton);
-  InitBranch(t, "mc_isMeson",     &m_mc_isMeson);
-  InitBranch(t, "mc_isTau",       &m_mc_isTau);
-  InitBranch(t, "mc_isMuon",      &m_mc_isMuon);
-  InitBranch(t, "mc_isPhoton",    &m_mc_isPhoton);
-  InitBranch(t, "mc_isElectron",  &m_mc_isElectron);
-  InitBranch(t, "mc_hasZMother",  &m_mc_hasZMother);
-  InitBranch(t, "mc_hasWMother",  &m_mc_hasWMother); 
-}
-
-
-void TrigEgammaNavNtuple::clear(){
-
-  ///EventInfo
-  m_runNumber             = 0;
-  m_eventNumber           = 0;
-  m_avgmu                 = 0;
-  ///Egamma
-  m_el_et                 = -1;
-  m_el_pt                 = -1;
-  m_el_eta                = -1;
-  m_el_phi                = -1;
-  m_el_ethad1             = -1;
-  m_el_ehad1              = -1;
-  m_el_f1                 = -1;
-  m_el_f3                 = -1;
-  m_el_f1core             = -1;
-  m_el_f3core             = -1;
-  m_el_weta2              = -1;
-  m_el_d0                 = -1;
-  m_el_wtots1             = -1;
-  m_el_fracs1             = -1;
-  m_el_Reta               = -1;
-  m_el_Rphi               = -1;
-  m_el_Eratio             = -1;
-  m_el_Rhad               = -1;
-  m_el_Rhad1              = -1;
-  m_el_deta1              = -1;
-  m_el_deta2              = -1;
-  m_el_dphi2              = -1;
-  m_el_dphiresc           = -1;
-  m_el_dphiresc2          = -1;
-  m_el_eprobht            = -1;
-  m_el_charge             =  0;
-  m_el_nblayerhits        =  0;
-  m_el_nblayerolhits      =  0;
-  m_el_npixhits           =  0;
-  m_el_npixolhits         =  0;
-  m_el_nscthits           =  0;
-  m_el_nsctolhits         =  0;
-  m_el_ntrthightreshits   =  0;
-  m_el_ntrthits           =  0;
-  m_el_ntrthighthresolhits=  0;
-  m_el_ntrtolhits         =  0;
-  m_el_ntrtxenonhits      =  0;
-  m_el_expectblayerhit    =  false;
-  m_el_nsihits            =  0;
-  m_el_nsideadsensors     =  0;
-  m_el_npixdeadsensors    =  0;
-  m_el_nsctdeadsensors    =  0;
-  m_el_loose              = false; 
-  m_el_medium             = false; 
-  m_el_tight              = false; 
-  m_el_lhLoose            = false; 
-  m_el_lhMedium           = false; 
-  m_el_lhTight            = false;  
-  m_el_rgLoose            = false; 
-  m_el_rgMedium           = false; 
-  m_el_rgTight            = false;  
-  m_el_multiLepton        = false;
-  m_el_nGoodVtx           = -1;
-  m_el_nPileupPrimaryVtx  = -1;
-  m_calo_et               = -1; 
-  m_calo_eta              = -1; 
-  m_calo_phi              = -1; 
-
-  ///Trigger
-  m_trig_L1_eta           = -1;
-  m_trig_L1_phi           = -1;
-  m_trig_L1_emClus        = -1;
-  m_trig_L1_tauClus       = -1;
-  m_trig_L1_emIsol        = -1;
-  m_trig_L1_hadIsol       = -1;
-  m_trig_L1_accept        = false;
-  m_trig_L2_calo_et       = -1;
-  m_trig_L2_calo_eta      = -1;
-  m_trig_L2_calo_phi      = -1;
-  m_trig_L2_calo_e237     = -1;
-  m_trig_L2_calo_e277     = -1;
-  m_trig_L2_calo_fracs1   = -1;
-  m_trig_L2_calo_weta2    = -1;
-  m_trig_L2_calo_ehad1    = -1;
-  m_trig_L2_calo_emaxs1   = -1;
-  m_trig_L2_calo_e2tsts1  = -1;
-  m_trig_L2_calo_wstot    = -1; 
-  m_trig_L2_calo_rnnOutput    = 999; 
-
-  m_trig_L1_accept        = false;
-  m_trig_L2_calo_accept   = false;
-  m_trig_L2_el_accept     = false; 
-  m_trig_EF_calo_accept   = false;
-  m_trig_EF_el_accept     = false;
-
-  ///Monte Carlo
-  m_mc_hasMC              = false;
-  m_mc_pt                 = -1;
-  m_mc_eta                = -1;
-  m_mc_phi                = -1;
-  m_mc_isTop              = false;
-  m_mc_isParton           = false;
-  m_mc_isMeson            = false;
-  m_mc_isTau              = false;
-  m_mc_isMuon             = false;
-  m_mc_isPhoton           = false;
-  m_mc_isElectron         = false;
-  m_mc_hasZMother         = false;
-  m_mc_hasWMother         = false;
-
-  ///Some vectors
-  m_trig_L1_thrNames               ->clear(); 
-  m_trig_L2_calo_energySample      ->clear();
-  m_trig_L2_calo_rings             ->clear();
-
-  m_trig_L2_el_trackAlgID          ->clear(); 
-  m_trig_L2_el_eta                 ->clear(); 
-  m_trig_L2_el_phi                 ->clear(); 
-  m_trig_L2_el_caloEta             ->clear(); 
-  m_trig_L2_el_trkClusDeta         ->clear(); 
-  m_trig_L2_el_trkClusDphi         ->clear(); 
-  m_trig_L2_el_pt                  ->clear(); 
-  m_trig_L2_el_etOverPt            ->clear();         
-  m_trig_L2_el_nTRTHits            ->clear();       
-  m_trig_L2_el_nTRTHiThresholdHits ->clear();       
-  m_trig_L2_el_charge              ->clear();     
-  m_trig_EF_calo_et                ->clear();     
-}
-
-void TrigEgammaNavNtuple::alloc_space(){
-
-  m_el_ringsE                       = new std::vector<float>();
-  m_trig_L1_thrNames                = new std::vector<std::string>();
-  m_trig_L2_calo_energySample       = new std::vector<float>();
-  m_trig_L2_calo_rings              = new std::vector<float>();
-  m_trig_L2_el_trackAlgID           = new std::vector<int>();
-  m_trig_L2_el_eta                  = new std::vector<float>();   
-  m_trig_L2_el_phi                  = new std::vector<float>();   
-  m_trig_L2_el_caloEta              = new std::vector<float>();   
-  m_trig_L2_el_trkClusDeta          = new std::vector<float>();
-  m_trig_L2_el_trkClusDphi          = new std::vector<float>();
-  m_trig_L2_el_pt                   = new std::vector<float>();   
-  m_trig_L2_el_etOverPt             = new std::vector<float>();           
-  m_trig_L2_el_nTRTHits             = new std::vector<float>();         
-  m_trig_L2_el_nTRTHiThresholdHits  = new std::vector<float>();         
-  m_trig_L2_el_charge               = new std::vector<float>();       
-  m_trig_EF_calo_et                 = new std::vector<float>();       
-  m_trig_EF_calo_eta                = new std::vector<float>();       
-  
-}
-
-void TrigEgammaNavNtuple::release_space(){
-  delete m_el_ringsE              ;
-  delete m_trig_L1_thrNames       ;
-  delete m_trig_L2_calo_energySample;
-  delete m_trig_L2_calo_rings     ;
-  delete m_trig_L2_el_trackAlgID  ;
-  delete m_trig_L2_el_pt          ;  
-  delete m_trig_L2_el_eta         ;   
-  delete m_trig_L2_el_caloEta     ;   
-  delete m_trig_L2_el_phi         ;   
-  delete m_trig_L2_el_charge      ;       
-  delete m_trig_L2_el_nTRTHits    ;         
-  delete m_trig_L2_el_nTRTHiThresholdHits    ;         
-  delete m_trig_L2_el_etOverPt    ;           
-  delete m_trig_L2_el_trkClusDeta ;
-  delete m_trig_L2_el_trkClusDphi ;
-  delete m_trig_EF_calo_et        ;
-  delete m_trig_EF_calo_eta       ;
-}
-
-unsigned TrigEgammaNavNtuple::count_HLT_objects( const HLT::TriggerElement *feat )
-{
-  unsigned nobj=0;
-  if(getFeature<xAOD::ElectronContainer>(feat)    ) nobj++; // HLT
-  if(getFeature<xAOD::CaloClusterContainer>(feat) ) nobj++; // EFCalo
-  if(getFeature<xAOD::TrigElectronContainer>(feat)) nobj++; // L2
-  if(getFeature<xAOD::TrigEMCluster>(feat)        ) nobj++; // L2Calo
-  ATH_MSG_DEBUG("Number of objects counted in this feature: " << nobj);
-  return nobj;
-}
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
index 57a1a2058f76..e18a851a02a7 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
@@ -43,14 +43,27 @@ StatusCode TrigEgammaNavTPAnalysisTool::childBook(){
     //Set the base directory from the plot()
     m_dir=plot()->getBasePath();
     std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
+    //TrigEgammaAnalysisBaseTool::write_trigger_list(chains);
 
     for(const auto trigName:m_trigInputList){ 
         if (std::find(chains.begin(), chains.end(), trigName) != chains.end()){ 
             if(plot()->getTrigInfoMap().count(trigName) != 0)
                 ATH_MSG_WARNING("Trigger already booked, removing from trigger list " << trigName);
-            else 
+            else {
                 m_trigList.push_back(trigName);
+                setTrigInfo(trigName);
+            }
         }
+
+        // specail code to add trigger without the menu
+        else if(getEmulation() && m_forceTrigAttachment){// 
+          ATH_MSG_INFO("Trigger doesn't exist in menu. Attach to emulate.");
+          if(plot()->getTrigInfoMap().count(trigName) == 0){
+            m_trigList.push_back(trigName);
+            setTrigEmulation();
+            setTrigInfo(trigName);
+          }
+        }// emulation 
     }
     // Book histograms for average efficiencies and counters
     const int nTrigger = (int) m_trigList.size();
@@ -104,9 +117,6 @@ StatusCode TrigEgammaNavTPAnalysisTool::childBook(){
         setLabels(hist1(m_anatype+"_EffHLT"),m_trigList);
         setLabels(hist1(m_anatype+"_CutCounter"),m_cutlabels);
     }
-    // Book the histograms per signature
-    for (int i = 0; i < (int) m_trigList.size(); i++)
-        setTrigInfo(m_trigList[i]);
  
     plot()->setEmulation(getEmulation()); 
     if(plot()->book(getTrigInfoMap()).isFailure()){
@@ -136,6 +146,19 @@ StatusCode TrigEgammaNavTPAnalysisTool::childExecute()
         ATH_MSG_DEBUG("Fails EventWise selection");
         return StatusCode::SUCCESS;
     }
+    // Check for Rnn container in SG
+    if(m_storeGate->contains<xAOD::TrigRNNOutputContainer>("HLT_xAOD__TrigRNNOutputContainer_TrigRingerNeuralFex")){
+        setSGContainsRnn(true);
+    }
+    if(m_storeGate->contains<xAOD::TrigPhotonContainer>("HLT_xAOD__TrigPhotonContainer_L2PhotonFex")){
+        setSGContainsTrigPhoton(true);
+    }
+    ATH_MSG_DEBUG("Rnn container in SG " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer in SG " << getSGContainsTrigPhoton());
+    for( const auto& tool : m_tools) {
+        tool->setSGContainsRnn(getSGContainsRnn());
+        tool->setSGContainsTrigPhoton(getSGContainsTrigPhoton());
+    }
     // Event Wise Selection (independent of the required signatures)
     hist1(m_anatype+"_CutCounter")->Fill("EventWise",1);
     // Select TP Pairs
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
index 4dac467c9006..89cbec013150 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
@@ -19,7 +19,6 @@
  *      All derived classes work with list of probes for a given trigger.
  *      As input property, pass a list of triggers to study.
  **********************************************************************/
-#include "egammaMVACalibAnalysis/IegammaMVATool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h"
 #include "TrigConfxAOD/xAODConfigTool.h"
 #include "xAODEventInfo/EventInfo.h"
@@ -47,12 +46,14 @@ TrigEgammaNavTPBaseTool( const std::string& myname )
   declareProperty("ForceProbePid", m_forceProbePid=false); // new
   declareProperty("OppositeCharge",m_oppositeCharge=true);
   declareProperty("OfflineTagMinEt",m_tagMinEt=25);
+  declareProperty("OfflineProbeMinEt",m_probeMinEt=4);
   declareProperty("TagTriggerList", m_tagTrigList);
   declareProperty("TriggerList",m_trigInputList);
   declareProperty("CategoryList",m_categories);
   declareProperty("RemoveCrack", m_rmCrack=true); //new
   declareProperty("OfflineProbeIsolation", m_offProbeIsolation="Loose");
   declareProperty("ForceProbeIsolation", m_forceProbeIsolation=false);
+  declareProperty("ApplyMinimalTrigger", m_applyMinimalTrigger=true);
 
   // Maps should be static
   m_PidToolMap["Tight"]=0;
@@ -64,9 +65,9 @@ TrigEgammaNavTPBaseTool( const std::string& myname )
   m_jets=nullptr;
   m_eventInfo=nullptr;
   m_truthContainer=nullptr;
+  m_METContainer=nullptr;
   m_applyJetNearProbeSelection=true; 
-  m_skipTrigger=false; 
-  
+  m_skipTrigger=false;  
 }
 
 //**********************************************************************
@@ -104,9 +105,11 @@ TrigEgammaNavTPBaseTool::childInitialize() {
 
     return StatusCode::SUCCESS;
 }
+
 StatusCode TrigEgammaNavTPBaseTool::childBook() {
     return StatusCode::SUCCESS;
 }
+
 bool TrigEgammaNavTPBaseTool::EventWiseSelection(){
 
     ATH_MSG_DEBUG("Apply EventWise selection");
@@ -122,7 +125,6 @@ bool TrigEgammaNavTPBaseTool::EventWiseSelection(){
     m_offElectrons = 0;
     m_jets = 0;
     m_truthContainer=0;
-
     
     if ( (m_storeGate->retrieve(m_eventInfo, "EventInfo")).isFailure() ){
         ATH_MSG_WARNING("Failed to retrieve eventInfo ");
@@ -136,6 +138,15 @@ bool TrigEgammaNavTPBaseTool::EventWiseSelection(){
       }
     }// protection
 
+    if(m_storeGate->contains<xAOD::MissingETContainer>("MET_Reference_AntiKt4EMTopo")){
+      if(m_storeGate->retrieve(m_METContainer,"MET_Reference_AntiKt4EMTopo").isFailure()){
+        ATH_MSG_WARNING("Could not retrieve xAOD::MissingETContainer 'MET_Reference_AntiKt4EMTopo'");
+        return false;
+      }
+    }// protection
+
+
+
     if (m_eventInfo->errorState(xAOD::EventInfo::LAr) == xAOD::EventInfo::Error) {
         ATH_MSG_DEBUG("Event not passing LAr");
         return false;
@@ -173,9 +184,11 @@ bool TrigEgammaNavTPBaseTool::EventWiseSelection(){
 
     // missing more selections
     // check Minimal Trigger Requirements
-    if ( !MinimalTriggerRequirement() ) return false;
+    if(m_applyMinimalTrigger)    
+      if ( !MinimalTriggerRequirement() ) return false;
     hist1(m_anatype+"_CutCounter")->Fill("PassTrigger",1);
 
+    
     return true;
 }
 
@@ -193,11 +206,18 @@ bool TrigEgammaNavTPBaseTool::MinimalTriggerRequirement(){
 
 void TrigEgammaNavTPBaseTool::executeTandP(){
     
+    // clear all Z index pairs
+    m_Z.clear();
+    unsigned itag=0;
+
     clearProbeList(); // Clear Probes after each trigger
     ATH_MSG_DEBUG("Execute TandP BaseTool " << m_offElectrons->size());
     for(const auto& elTag : *m_offElectrons){
+        itag++;
         if( ! isTagElectron(elTag) ) continue;
+        unsigned iprobe=0;
         for(const auto& elProbe : *m_offElectrons){  // Dress the probes with updated Pid decision
+            iprobe++;
             hist1(m_anatype+"_ProbeCutCounter")->Fill("Electrons",1);
             if(elProbe==elTag) continue;
             hist1(m_anatype+"_ProbeCutCounter")->Fill("NotTag",1);
@@ -241,27 +261,37 @@ void TrigEgammaNavTPBaseTool::executeTandP(){
                 xAOD::Electron *selProbe = new xAOD::Electron(*elProbe);              
                 DressPid(selProbe);
                 m_probeElectrons.push_back(selProbe);
+                m_Z.push_back( std::pair<unsigned,unsigned>(itag-1,iprobe-1) );
                 hist1(m_anatype+"_Mee")->Fill(tpPairMass/1.e3);
             }
         } // end of for in Probe
     } // end of for in Tags
 }
 
+
 void TrigEgammaNavTPBaseTool::matchObjects(const std::string probeTrigItem){
 
     clearPairList();
+    bool isEmulation = getTrigInfo(probeTrigItem).trigIsEmulation;
+
+
     for(unsigned int i=0;i<m_probeElectrons.size();i++){
         const HLT::TriggerElement *finalFC;
-
-        // Use matching tool and create pair of offline probe and TE
-        if ( match()->match(m_probeElectrons[i], probeTrigItem, finalFC)){
-            std::pair<const xAOD::Electron*,const HLT::TriggerElement*> pairProbe(m_probeElectrons[i],finalFC);
-            m_pairObj.push_back(pairProbe);
-        } // end of check Probe
-        else {
-            std::pair<const xAOD::Electron*,const HLT::TriggerElement*> pairProbe(m_probeElectrons[i],nullptr);
-            m_pairObj.push_back(pairProbe);
-        } // still include the probe
+        if(isEmulation && getEmulation()){  // Collect from  support match
+          emulation()->match( m_probeElectrons[i], finalFC );
+          std::pair<const xAOD::Electron*,const HLT::TriggerElement*> pairProbe(m_probeElectrons[i],finalFC);
+          m_pairObj.push_back(pairProbe);
+        }else{
+          // Use matching tool and create pair of offline probe and TE
+          if ( match()->match(m_probeElectrons[i], probeTrigItem, finalFC)){
+              std::pair<const xAOD::Electron*,const HLT::TriggerElement*> pairProbe(m_probeElectrons[i],finalFC);
+              m_pairObj.push_back(pairProbe);
+          } // end of check Probe
+          else {
+              std::pair<const xAOD::Electron*,const HLT::TriggerElement*> pairProbe(m_probeElectrons[i],nullptr);
+              m_pairObj.push_back(pairProbe);
+          } // still include the probe
+        }
     }
 }
 
@@ -375,13 +405,14 @@ bool TrigEgammaNavTPBaseTool::isTagElectron(const xAOD::Electron *el){
 
 
 void TrigEgammaNavTPBaseTool::DressPid(const xAOD::Electron *eg){
+    auto ctx = Gaudi::Hive::currentContext() ;
     for(int ipid=0;ipid<3;ipid++){
-        bool accept = (bool) m_electronIsEMTool[ipid]->accept(eg);
+        bool accept = (bool) m_electronIsEMTool[ipid]->accept(ctx,eg);
         const std::string pidname="is"+m_isemname[ipid];
         eg->auxdecor<bool>(pidname)=static_cast<bool>(accept);
     }
     for(int ipid=0;ipid<2;ipid++){
-        bool accept = (bool) m_electronLHTool[ipid]->accept(eg);
+        bool accept = (bool) m_electronLHTool[ipid]->accept(ctx,eg);
         const std::string pidname="is"+m_lhname[ipid];
         eg->auxdecor<bool>(pidname)=static_cast<bool>(accept);
     }
@@ -389,34 +420,30 @@ void TrigEgammaNavTPBaseTool::DressPid(const xAOD::Electron *eg){
 }
 
 bool TrigEgammaNavTPBaseTool::ApplyElectronPid(const xAOD::Electron *eg, const std::string pidname){
-    
+    auto ctx = Gaudi::Hive::currentContext() ;
     if (pidname == "Tight"){
-        bool accept = (bool) m_electronIsEMTool[0]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronIsEMTool[0]->accept(ctx,eg);
     }
     else if (pidname == "Medium"){
-        bool accept = (bool) m_electronIsEMTool[1]->accept(eg);
-        return static_cast<bool>(accept);
+        return  (bool) m_electronIsEMTool[1]->accept(ctx,eg);
     }
     else if (pidname == "Loose"){
-        bool accept = (bool) m_electronIsEMTool[2]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronIsEMTool[2]->accept(ctx,eg);
     }
     else if (pidname == "LHTight"){
-        bool accept = (bool) m_electronLHTool[0]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronLHTool[0]->accept(ctx,eg);
     }
     else if (pidname == "LHMedium"){
-        bool accept = (bool) m_electronLHTool[1]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronLHTool[1]->accept(ctx,eg);
     }
     else if (pidname == "LHLoose"){
-        bool accept = (bool) m_electronLHTool[2]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronLHTool[2]->accept(ctx,eg);
+    }
+    else if (pidname == "LHMediumHI"){
+        return (bool) m_electronLHTool[3]->accept(ctx,eg);
     }
     else if (pidname == "LHMediumHI"){
-        bool accept = (bool) m_electronLHTool[3]->accept(eg);
-        return static_cast<bool>(accept);
+        return (bool) m_electronLHTool[3]->accept(ctx,eg);
     }
     else ATH_MSG_DEBUG("No Pid tool, continue without PID");
     return false;
@@ -529,3 +556,33 @@ double TrigEgammaNavTPBaseTool::simple_lxy(int flag,   double d1,  double d2, do
   else
     return (a+b)/c;
 }
+
+
+
+float TrigEgammaNavTPBaseTool::getWTransverseMass( const xAOD::Electron *el ){
+  float transverseMass=0.0;
+  if(m_METContainer){
+    TLorentzVector MET_4vec = TLorentzVector(getMET()->mpx(), getMET()->mpy(), 0, getMET()->met());
+    TLorentzVector electron;
+    electron.SetPtEtaPhiE(el->pt(), 0, el->phi(), el->pt());
+    transverseMass = (MET_4vec + electron).M();
+  }
+  return transverseMass;
+
+}
+
+bool TrigEgammaNavTPBaseTool::passesEventCleaning()
+{
+  ATH_MSG_DEBUG("Appling Event Cleaning...");
+  //if(m_ismc) return true;
+  bool failsLAr  = (m_eventInfo->errorState(xAOD::EventInfo::LAr)  == xAOD::EventInfo::Error );
+  bool failsTile = (m_eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error );
+  bool failsSCT  = (m_eventInfo->errorState(xAOD::EventInfo::SCT)  == xAOD::EventInfo::Error );
+  bool failsTTC  = (m_eventInfo->isEventFlagBitSet(xAOD::EventInfo::Core, 18)); // timing, trigger, control failed => some eventinfo missing
+  bool pass =  !(failsLAr || failsTile || failsSCT || failsTTC);
+  if(!pass)
+    ATH_MSG_DEBUG("Event not clear! ");
+  return pass;
+}
+
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPNtuple.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPNtuple.cxx
deleted file mode 100755
index 680e786f42f3..000000000000
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPNtuple.cxx
+++ /dev/null
@@ -1,1066 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**********************************************************************
- * AsgTool: TrigEgammaNavTPNtuple
- * Authors:
- *      Ryan Mackenzie White <ryan.white@cern.ch>
- *      Denis Damazio <denis.damazio@cern.ch>
- * Contributors:
- *      Joao Victor da Fonseca Pinto <joao.victor.da.fonseca.pinto@cern.ch>
- * Date: Mar 2015
- * Description:
- *      Derived class for dumping the probe information into a ttree.
- *     
- **********************************************************************/
-
-#include "TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h"
-
-using namespace std;
-
-TrigEgammaNavTPNtuple::TrigEgammaNavTPNtuple( const std::string& myname ): TrigEgammaNavTPBaseTool(myname) 
-{
-  m_eventCounter = 0;
-  declareProperty("CutLabels",              m_cutlabels               );
-  declareProperty("Analysis",               m_anatype="NavTPNtuple"   );
-  declareProperty("doOfflineDump",          m_doOfflineDump=false     );
-  declareProperty("DoSupportTrigger",       m_doSupport=true          );
-  declareProperty("OfflineProbeMinEt",      m_probeMinEt=-1           );
-
-  m_el_ringsE=nullptr;
-  m_trig_L1_thrNames=nullptr;          
-  m_trig_L2_calo_energySample=nullptr;
-  m_trig_L2_calo_rings=nullptr;
-  m_trig_L2_el_trackAlgID=nullptr;
-  m_trig_L2_el_pt=nullptr;
-  m_trig_L2_el_eta=nullptr;
-  m_trig_L2_el_caloEta=nullptr;
-  m_trig_L2_el_phi=nullptr;
-  m_trig_L2_el_charge=nullptr;
-  m_trig_L2_el_nTRTHits=nullptr;
-  m_trig_L2_el_nTRTHiThresholdHits=nullptr;
-  m_trig_L2_el_etOverPt=nullptr;
-  m_trig_L2_el_trkClusDeta=nullptr;
-  m_trig_L2_el_trkClusDphi=nullptr;
-  m_trig_EF_calo_et=nullptr;
-  m_trig_EF_calo_eta=nullptr;
-}
-
-StatusCode TrigEgammaNavTPNtuple::childInitialize(){
-  return StatusCode::SUCCESS;
-}
-
-
-StatusCode TrigEgammaNavTPNtuple::childBook(){
-
-  ATH_MSG_DEBUG("Now configuring chains for analysis");
-  //Set the base directory from the plot()
-  m_dir=plot()->getBasePath();
-  std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
-
-  TrigEgammaAnalysisBaseTool::write_trigger_list(chains);
-
-  for(const auto trigName:m_trigInputList){ 
-    if (std::find(chains.begin(), chains.end(), trigName) != chains.end()) {
-      if(plot()->getTrigInfoMap().count(trigName) != 0)
-          ATH_MSG_WARNING("Trigger already booked, removing from trigger list " << trigName);
-      else 
-          m_trigList.push_back(trigName);
-    }
-  }
-
-
-
-  // Book histograms for average efficiencies and counters
-  //const int nTrigger = (int) m_trigList.size();
-  addDirectory(m_dir+"/Expert/Event");
-  std::string histname=m_anatype+"_ProbeCutCounter";
-  addHistogram(new TH1F(histname.c_str(), "Number of Probes; Cut ; Count", 12, 0., 12));
-  histname=m_anatype+"_TagCutCounter";
-  addHistogram(new TH1F(histname.c_str(), "Number of Tags; Cut ; Count", 10, 0., 10));
-  histname=m_anatype+"_Mee";
-  addHistogram(new TH1F(histname.c_str(), "Offline M(ee); m_ee [GeV] ; Count", 50, m_ZeeMassMin, m_ZeeMassMax));
-  histname=m_anatype+"_CutCounter";
-  addHistogram(new TH1I(histname.c_str(), "Event Selection; Cut ; Count", 6, 0., 6));
-  setLabels(hist1(histname),m_cutlabels);
-  
-  if(m_doOfflineDump){
-      addDirectory(m_dir+"/Expert/Offline");
-      TTree *t = new TTree( "probes", "tree of Offline Zee probes");
-      bookEventBranches( t );
-      bookElectronBranches( t );
-      //bookPhotonBranches( t );
-      bookMonteCarloBranches( t );
-      addTree(t, m_dir+"/Expert/Offline");
-  }else if (m_doSupport){ // All trigger in one
-      addDirectory(m_dir+"/Expert/support");
-      TTree *t = new TTree( "probes", "tree of Zee probes");
-      bookEventBranches( t );
-      bookElectronBranches( t );
-      //bookPhotonBranches( t );
-      bookTriggerBranches( t );
-      bookMonteCarloBranches( t );
-      for(auto& trigItem : m_trigList)
-        setTrigInfo(trigItem);
-      addTree(t, m_dir+"/Expert/support");
-  }else{// Each trigger 
-    for (auto& trigItem : m_trigList) {
-      addDirectory(m_dir+"/Expert/"+trigItem);
-      TTree *t = new TTree( "probes", "tree of Zee probes");
-      bookEventBranches( t );
-      bookElectronBranches( t );
-      //bookPhotonBranches( t );
-      bookTriggerBranches( t );
-      bookMonteCarloBranches( t );
-      setTrigInfo(trigItem);
-      addTree(t, m_dir+"/Expert/"+trigItem);
-    }// Loop over triggers
-  }
-
-  ///Alloc pointers
-  alloc_space();
-  return StatusCode::SUCCESS;
-}
-
-StatusCode TrigEgammaNavTPNtuple::childExecute(){
-
-  m_eventCounter++;
-  cd(m_dir+"/Expert/Event");
-  // Event Wise Selection (independent of the required signatures)
-  if ( !TrigEgammaNavTPBaseTool::EventWiseSelection() ) return StatusCode::SUCCESS;
-
-  if(m_doOfflineDump){
-    if(!executeProbesDump())  return StatusCode::FAILURE;
-  }else if (m_doSupport){
-    if(!executeProbesSupportDump())  return StatusCode::FAILURE; 
-  }else{
-    if(!executeProbesItemDump())  return StatusCode::FAILURE;
-  }
-
-  return StatusCode::SUCCESS;
-}
-
-
-
-bool TrigEgammaNavTPNtuple::executeProbesDump(){
-
-  // Select TP Pairs
-  executeTandP();
-
-  TTree *t = tree( "probes", m_dir+"/Expert/Offline");
-  linkEventBranches(t); 
-  linkElectronBranches(t); 
-  linkMonteCarloBranches(t); 
-  for(unsigned int iprobe = 0; iprobe != m_probeElectrons.size(); ++iprobe){
-    const xAOD::Electron *el = static_cast<const xAOD::Electron *> (m_probeElectrons[iprobe]);
-    ATH_MSG_DEBUG("dumping probe electron information...");
-    clear();
-    fillEvent();
-    fillElectron( el );  
-    if(!fillMonteCarlo( el ) ){
-      ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-    }
-    ATH_MSG_DEBUG("record probe information into the file.");
-    t->Fill();
-  }// loop over offline probes
- 
-  return true;
-}
-
-
-bool TrigEgammaNavTPNtuple::executeProbesItemDump(){
-  
-  executeTandP();
-
-  for(unsigned int ilist = 0; ilist != m_trigList.size(); ++ilist) {
-
-    std::string trigItem = m_trigList.at(ilist);
-    const TrigInfo info = getTrigInfo(trigItem); 
-    cd(m_dir+"/Expert/"+trigItem);
-    TTree *t = tree( "probes", m_dir+"/Expert/"+trigItem);
-    linkEventBranches(t); 
-    linkElectronBranches(t); 
-    linkTriggerBranches(t); 
-    linkMonteCarloBranches(t); 
-    //Try to find trigger objects
-    TrigEgammaNavTPBaseTool::matchObjects(trigItem);
-
-    for(unsigned int iprobe = 0; iprobe != m_pairObj.size(); ++iprobe){
-
-      const xAOD::Electron *el = static_cast<const xAOD::Electron *> (m_pairObj[iprobe].first);
-      const HLT::TriggerElement *feat = m_pairObj[iprobe].second;
-      ATH_MSG_DEBUG("dumping probe electron information...");
-
-      clear();
-      fillEvent();
-      fillElectron( el );  
-
-      if(!fillMonteCarlo( el ) ){
-        ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-      }
- 
-      if(feat){ 
-        ///Start trigger analisys...
-        const xAOD::EmTauRoI *emTauRoI = getFeature<xAOD::EmTauRoI>(feat);
-        if(emTauRoI){
-          fillEmTauRoI( emTauRoI ); 
-        }else{ 
-          ATH_MSG_WARNING("Cound not found EmTauRoI in this TriggerElement..");
-        }
-    
-        const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
-        if(emCluster){
-    
-          if(!fillTrigEMCluster( emCluster )){
-            ATH_MSG_WARNING("Cound not attach the trigEMCluster information into the tree.");
-          }
-    
-          //if(TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, ringsContainer ,*m_trig_L2_calo_rings)){
-          if(!fillTrigCaloRings( emCluster )){
-            ATH_MSG_WARNING("Cound not attach the trigCaloRinger information into the tree.");
-          }
-        }///cluster protection
-    
-    
-        const xAOD::TrigElectronContainer *trigElCont = getFeature<xAOD::TrigElectronContainer>(feat);
-        // Level 2 ID+Calo
-        if(trigElCont){
-          for(const auto& trigEl : *trigElCont){
-            if(!fillTrigElectron(trigEl)) {
-              ATH_MSG_WARNING("Cound not attach the trigElectron information into the tree.");
-            }    
-          }// loop over all trigElectrons for this feat
-        }
-         
-        const xAOD::CaloClusterContainer *caloCont = getFeature<xAOD::CaloClusterContainer>(feat);
-        if(caloCont){
-          for(const auto& cl : *caloCont){
-            if(!fillCaloCluster(cl)){
-              ATH_MSG_WARNING("Cound not attach the CaloCluster information into the tree.");
-            }
-          }// loop over calo cluster
-        }
-
-
-        asg::AcceptData acceptData = setAccept(feat,info);
-        m_trig_L1_accept       = acceptData.getCutResult("L1Calo"); 
-        m_trig_L2_calo_accept  = acceptData.getCutResult("L2Calo"); 
-        m_trig_L2_el_accept    = acceptData.getCutResult("L2"); 
-        m_trig_EF_calo_accept  = acceptData.getCutResult("EFCalo");  
-        m_trig_EF_el_accept    = acceptData.getCutResult("HLT");   
-
-        ATH_MSG_DEBUG("L1Calo: "  << int(m_trig_L1_accept)); 
-        ATH_MSG_DEBUG("L2Calo: "  << int(m_trig_L2_calo_accept));
-        ATH_MSG_DEBUG("L2    : "  << int(m_trig_L2_el_accept));
-        ATH_MSG_DEBUG("EFCalo: "  << int(m_trig_EF_calo_accept));
-        ATH_MSG_DEBUG("HLT   : "  << int(m_trig_EF_el_accept));
- 
-      }else{
-        ATH_MSG_DEBUG("No TriggerElement for this probe!");
-      }
-      ATH_MSG_DEBUG("record probe information into the file.");
-      t->Fill();
-    }// loop over probes
-  } // End loop over trigger list
-
-  return true;
-}
-
-
-
-bool TrigEgammaNavTPNtuple::executeProbesSupportDump(){
-  
-  double GeV=1000.;
-  std::vector<const HLT::TriggerElement *> vec_feat;
-
-  // Tag and probe algorithm
-  executeTandP();
-
-  cd(m_dir+"/Expert/support");
-  TTree *t = tree( "probes", m_dir+"/Expert/support");
-  linkEventBranches(t); 
-  linkElectronBranches(t); 
-  linkMonteCarloBranches(t); 
-
-  for(const auto &eg : m_probeElectrons){
-    // Get the good electron
-    const xAOD::Electron* el =static_cast<const xAOD::Electron*> (eg);
-    // Force Et cut 
-    if(m_probeMinEt > 0.0){
-      if( !( getEt(el)  > (m_probeMinEt)*GeV) ) continue;
-    }
-    // Clear the vector
-    vec_feat.clear();
-    // Loop over support triggers: Here, we will collect all good trigger elements to 
-    // dump on the ttree.
-    for(auto& trigItem : m_trigList){
-
-      const HLT::TriggerElement *feat=nullptr;
-      // Trigger match using Matching tool
-      match()->match(el, trigItem, feat);
-
-      if(feat){// If has a match!
-        for(unsigned i=0; i < vec_feat.size(); ++i){
-          if(getFeature<xAOD::EmTauRoI>(vec_feat[i])->roiWord() == getFeature<xAOD::EmTauRoI>(feat)->roiWord()){
-            if(count_HLT_objects(feat) > count_HLT_objects(vec_feat[i])){
-              vec_feat.erase(vec_feat.begin() + i); // Erase the trigger element lowest than the new feature
-              vec_feat.push_back(feat); // attach the new trigger element
-              break;
-            }
-          }// The same region in L1Calo trigger
-        }
-        if(vec_feat.empty())  vec_feat.push_back(feat);
-      }else{
-        ATH_MSG_DEBUG("There is no match for this probe.");
-      }
-    }// Loop over support triggers
-
-    ATH_MSG_DEBUG("Attached " << vec_feat.size() << " features ");
-    for(auto& feat : vec_feat){
-      clear();
-      fillEvent();
-      fillElectron( el );  
-
-      if(!fillMonteCarlo( el ) ){
-        ATH_MSG_WARNING("Cound not found any TruthParticle for this Electron");
-      }
- 
-      ///Start trigger analisys...
-      const xAOD::EmTauRoI *emTauRoI = getFeature<xAOD::EmTauRoI>(feat);
-      if(emTauRoI){
-        fillEmTauRoI( emTauRoI ); 
-      }else{ 
-        ATH_MSG_WARNING("Cound not found EmTauRoI in this TriggerElement..");
-      }
-    
-      const xAOD::TrigEMCluster *emCluster = getFeature<xAOD::TrigEMCluster>(feat);
-      if(emCluster){
-    
-        if(!fillTrigEMCluster( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigEMCluster information into the tree.");
-        }
-    
-        //if(TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, ringsContainer ,*m_trig_L2_calo_rings)){
-        if(!fillTrigCaloRings( emCluster )){
-          ATH_MSG_WARNING("Cound not attach the trigCaloRinger information into the tree.");
-        }
-      }///cluster protection
-    
-    
-      const xAOD::TrigElectronContainer *trigElCont = getFeature<xAOD::TrigElectronContainer>(feat);
-      // Level 2 ID+Calo
-      if(trigElCont){
-        for(const auto& trigEl : *trigElCont){
-          if(!fillTrigElectron(trigEl)) {
-            ATH_MSG_WARNING("Cound not attach the trigElectron information into the tree.");
-          }    
-        }// loop over all trigElectrons for this feat
-      }
-       
-      const xAOD::CaloClusterContainer *caloCont = getFeature<xAOD::CaloClusterContainer>(feat);
-      if(caloCont){
-        for(const auto& cl : *caloCont){
-          if(!fillCaloCluster(cl)){
-            ATH_MSG_WARNING("Cound not attach the CaloCluster information into the tree.");
-          }
-        }// loop over calo cluster
-      }
-
-      ATH_MSG_DEBUG("record trigger information into the file.");
-      t->Fill();
-    }//loop over trigger objects
-
-  }// Loop over probes
-  return true;
-}
-
-
-
-StatusCode TrigEgammaNavTPNtuple::childFinalize(){
-  //release_space();
-  return StatusCode::SUCCESS;
-}
-
-
-
-bool TrigEgammaNavTPNtuple::fillEmTauRoI( const xAOD::EmTauRoI *emTauRoI ){
-  
-  m_trig_L1_eta     = emTauRoI->eta();
-  m_trig_L1_phi     = emTauRoI->phi();
-  m_trig_L1_emClus  = emTauRoI->emClus();
-  m_trig_L1_tauClus = emTauRoI->tauClus();
-  m_trig_L1_emIsol  = emTauRoI->emIsol();
-  m_trig_L1_hadIsol = emTauRoI->hadIsol();
-  for(unsigned i=0; i < emTauRoI->thrNames().size();++i)  m_trig_L1_thrNames->push_back(emTauRoI->thrNames().at(i));
-  return true;
-} 
-
-bool TrigEgammaNavTPNtuple::fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster ){
-  
-  m_trig_L2_calo_et         = emCluster->et();
-  m_trig_L2_calo_eta        = emCluster->eta();
-  m_trig_L2_calo_phi        = emCluster->phi();
-  m_trig_L2_calo_e237       = emCluster->e237();
-  m_trig_L2_calo_e277       = emCluster->e277();
-  m_trig_L2_calo_fracs1     = emCluster->fracs1();
-  m_trig_L2_calo_weta2      = emCluster->weta2();
-  m_trig_L2_calo_ehad1      = emCluster->ehad1();
-  m_trig_L2_calo_emaxs1     = emCluster->emaxs1();
-  m_trig_L2_calo_e2tsts1    = emCluster->e2tsts1();
-  m_trig_L2_calo_wstot      = emCluster->wstot();
-  for(unsigned i=0; i<emCluster->energySample().size(); ++i){
-    m_trig_L2_calo_energySample->push_back( emCluster->energySample().at(i));
-  }
-
-  return true;
-}
-
-
-bool TrigEgammaNavTPNtuple::fillTrigElectron( const xAOD::TrigElectron *trigEl ){
-
-   const xAOD::TrackParticle* trkIter = trigEl->trackParticle();
-   if (trkIter==nullptr) return false; // disconsider candidates without track
-   int algoId = 0;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::FastTrackFinderSeed] ) algoId=9;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyA] )           algoId=5;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyB] )           algoId=6;
-   if ( trkIter->patternRecoInfo()[xAOD::TrackPatternRecoInfo::strategyC] )           algoId=7;
-
-   m_trig_L2_el_trackAlgID  ->push_back(algoId);
-   m_trig_L2_el_caloEta     ->push_back(trigEl->caloEta()); 
-   m_trig_L2_el_trkClusDphi ->push_back(trigEl->trkClusDphi());  
-   m_trig_L2_el_trkClusDeta ->push_back(trigEl->trkClusDeta());  
-   m_trig_L2_el_pt          ->push_back(trigEl->pt());
-   m_trig_L2_el_phi         ->push_back(trigEl->phi());  
-   m_trig_L2_el_eta         ->push_back(trigEl->eta());  
-   m_trig_L2_el_etOverPt    ->push_back(trigEl->etOverPt());          
-   m_trig_L2_el_nTRTHits    ->push_back(trigEl->nTRTHits());        
-   m_trig_L2_el_nTRTHiThresholdHits->push_back(trigEl->nTRTHiThresholdHits());
-   m_trig_L2_el_charge      ->push_back(trigEl->charge());      
-   return true;
-}
-
-
-bool TrigEgammaNavTPNtuple::fillCaloCluster( const xAOD::CaloCluster *cluster){
-
-  m_trig_EF_calo_et->push_back(cluster->et());
-  m_trig_EF_calo_eta->push_back(cluster->eta());
-  return true;
-}
-
-bool TrigEgammaNavTPNtuple::fillEvent(){
-  ///Event information
-  m_runNumber               = m_eventInfo->runNumber();
-  m_eventNumber             = m_eventInfo->eventNumber();
-  m_avgmu=getAvgMu();
-  return true;
-}
-
-bool TrigEgammaNavTPNtuple::fillElectron( const xAOD::Electron *el ){
-
-  ///Cluster information
-  m_el_et                   = el->pt();
-  m_el_eta                  = el->eta();
-  m_el_phi                  = el->phi();
-  el->showerShapeValue( m_el_ethad1   , xAOD::EgammaParameters::ShowerShapeType::ethad1   ); 
-  el->showerShapeValue( m_el_ehad1    , xAOD::EgammaParameters::ShowerShapeType::ehad1    );
-  el->showerShapeValue( m_el_f1       , xAOD::EgammaParameters::ShowerShapeType::f1       );
-  el->showerShapeValue( m_el_f3       , xAOD::EgammaParameters::ShowerShapeType::f3       );
-  el->showerShapeValue( m_el_f1core   , xAOD::EgammaParameters::ShowerShapeType::f1core   );
-  el->showerShapeValue( m_el_f3core   , xAOD::EgammaParameters::ShowerShapeType::f3core   );
-  el->showerShapeValue( m_el_weta2    , xAOD::EgammaParameters::ShowerShapeType::weta2    );
-  el->showerShapeValue( m_el_wtots1   , xAOD::EgammaParameters::ShowerShapeType::wtots1  );
-  el->showerShapeValue( m_el_fracs1   , xAOD::EgammaParameters::ShowerShapeType::fracs1   );
-  el->showerShapeValue( m_el_Reta     , xAOD::EgammaParameters::ShowerShapeType::Reta     );
-  el->showerShapeValue( m_el_Rphi     , xAOD::EgammaParameters::ShowerShapeType::Rphi     );
-  el->showerShapeValue( m_el_Eratio   , xAOD::EgammaParameters::ShowerShapeType::Eratio   );
-  el->showerShapeValue( m_el_Rhad     , xAOD::EgammaParameters::ShowerShapeType::Rhad     );
-  el->showerShapeValue( m_el_Rhad1    , xAOD::EgammaParameters::ShowerShapeType::Rhad1    );
-
-  ///Combined track/Cluter information
-  el->trackCaloMatchValue( m_el_deta1     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta1   );
-  el->trackCaloMatchValue( m_el_deta2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaEta2   );
-  el->trackCaloMatchValue( m_el_dphi2     , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhi2   );
-  el->trackCaloMatchValue( m_el_dphiresc  , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled0 );
-  el->trackCaloMatchValue( m_el_dphiresc2 , xAOD::EgammaParameters::TrackCaloMatchType::deltaPhiRescaled2 );
-
-
-  ///Track particle information
-  const xAOD::TrackParticle *track = el->trackParticle();
-  if(track){
-    m_el_pt                   = track->pt();
-    m_el_d0                   = fabsf(track->d0());
-    m_el_charge               = el->charge();
-    
-    track->summaryValue( m_el_eprobht            , xAOD::SummaryType::eProbabilityHT );
-    track->summaryValue( m_el_nblayerhits        , xAOD::SummaryType::numberOfInnermostPixelLayerHits );
-    track->summaryValue( m_el_nblayerolhits      , xAOD::SummaryType::numberOfInnermostPixelLayerOutliers );
-    track->summaryValue( m_el_npixhits           , xAOD::SummaryType::numberOfPixelHits );
-    track->summaryValue( m_el_npixolhits         , xAOD::SummaryType::numberOfPixelOutliers );
-    track->summaryValue( m_el_nscthits           , xAOD::SummaryType::numberOfSCTHits );
-    track->summaryValue( m_el_nsctolhits         , xAOD::SummaryType::numberOfSCTOutliers );
-    track->summaryValue( m_el_ntrthightreshits   , xAOD::SummaryType::numberOfTRTHighThresholdHits );
-    track->summaryValue( m_el_ntrthits           , xAOD::SummaryType::numberOfTRTHits);
-    track->summaryValue( m_el_ntrthighthresolhits, xAOD::SummaryType::numberOfTRTHighThresholdOutliers );
-    track->summaryValue( m_el_ntrtolhits         , xAOD::SummaryType::numberOfTRTOutliers );
-    track->summaryValue( m_el_ntrtxenonhits      , xAOD::SummaryType::numberOfTRTXenonHits );
-    //track->summaryValue( m_el_expectblayerhit    , xAOD::SummaryType::expectInnermostPixelLayerHit );
-    track->summaryValue( m_el_npixdeadsensors    , xAOD::SummaryType::numberOfPixelDeadSensors);
-    track->summaryValue( m_el_nsctdeadsensors    , xAOD::SummaryType::numberOfSCTDeadSensors);
-
-    m_el_nsideadsensors       = m_el_npixdeadsensors  + m_el_nsctdeadsensors;
-    m_el_nsihits              = m_el_npixhits         + m_el_nscthits;
-  }
-
-  //m_el_loose              = el->passSelection("Loose");
-  //m_el_medium             = el->passSelection("Medium");
-  //m_el_tight              = el->passSelection("Tight");
-  //m_el_lhLoose            = el->passSelection("LHLoose");
-  //m_el_lhMedium           = el->passSelection("LHMedium");
-  //m_el_lhTight            = el->passSelection("LHTight"); 
-  //m_el_rgLoose            = el->passSelection("RGLoose");
-  //m_el_rgMedium           = el->passSelection("RGMedium");
-  //m_el_rgTight            = el->passSelection("RGTight");
-  //m_el_multiLepton        = el->passSelection("MultiLepton");
-  m_el_loose                = ApplyElectronPid(el, "Loose");
-  m_el_medium               = ApplyElectronPid(el, "Medium");
-  m_el_tight                = ApplyElectronPid(el, "Tight");
-  m_el_lhLoose              = ApplyElectronPid(el, "LHLoose");
-  m_el_lhMedium             = ApplyElectronPid(el, "LHMedium");
-  m_el_lhTight              = ApplyElectronPid(el, "LHTight"); 
-  //m_el_rgLoose            = ApplyElectronPid(el, "RGLoose");
-  //m_el_rgMedium           = ApplyElectronPid(el, "RGMedium");
-  //m_el_rgTight            = ApplyElectronPid(el, "RGTight");
-  
-  m_calo_et                 = getCluster_et( el );
-  m_calo_eta                = getCluster_eta( el );
-  m_calo_phi                = getCluster_phi( el );
-  ///Extra information about pileup
-  m_el_nGoodVtx             = getNGoodVertex();
-  m_el_nPileupPrimaryVtx    = getNPVtx();
-
-
-  if(!fillCaloRings( el )){
-    ATH_MSG_WARNING("Could not attach the calorRings information.");
-  }
-
-  return true;
-}
-
-
-/*bool TrigEgammaNavTPNtuple::fillPhoton( const xAOD::Photon *ph ){
-  return true;
-}*/
-
-
-bool TrigEgammaNavTPNtuple::fillMonteCarlo(const xAOD::Egamma *eg){
-
-  if(m_truthContainer){
-    const xAOD::TruthParticle *mc=nullptr;
-    MonteCarlo::PDGID pdg = pdgid(eg, m_truthContainer,mc);
-    if(mc){
-      m_mc_hasMC        = true;
-      m_mc_pt           = mc->pt();
-      m_mc_eta          = mc->eta();
-      m_mc_phi          = mc->phi();
-      m_mc_isTop        = mc->isTop();
-      m_mc_isQuark      = mc->isQuark();
-      m_mc_isParton     = mc->isParton();
-      m_mc_isMeson      = mc->isMeson();
-      m_mc_isTau        = mc->isTau();
-      m_mc_isMuon       = mc->isMuon();
-      m_mc_isPhoton     = mc->isPhoton();
-      m_mc_isElectron   = mc->isElectron();
-      if(pdg == MonteCarlo::PDGID::ZMother)  m_mc_hasZMother   = true;
-      if(pdg == MonteCarlo::PDGID::WMother)  m_mc_hasWMother   = true;
-      return true;
-    }//has match
-  }//has truth container
-  return false;
-}
-
-bool TrigEgammaNavTPNtuple::fillTrigCaloRings( const xAOD::TrigEMCluster *emCluster ){
-  return TrigEgammaAnalysisBaseTool::getTrigCaloRings(emCluster, *m_trig_L2_calo_rings);
-}
-
-
-bool TrigEgammaNavTPNtuple::fillCaloRings( const xAOD::Electron *el ){
-  return TrigEgammaAnalysisBaseTool::getCaloRings(el, *m_el_ringsE );
-}
-
-/*
- * book, link, clear, alloc and release method divide in:
- * trigger, Egamma and MonteCarlo data base.
- */
-
-template <class T> 
-void TrigEgammaNavTPNtuple::InitBranch(TTree* fChain, std::string branch_name, T* param, bool message){
-
-  std::string bname = branch_name;
-  if (fChain->GetAlias(bname.c_str()))
-     bname = std::string(fChain->GetAlias(bname.c_str()));
-
-  if (!fChain->FindBranch(bname.c_str()) && message) {
-    ATH_MSG_WARNING("unknown branch " << bname);
-    return;  
-  }
-  fChain->SetBranchStatus(bname.c_str(), 1.);
-  fChain->SetBranchAddress(bname.c_str(), param);
-}
-
-void TrigEgammaNavTPNtuple::bookEventBranches(TTree *t){
-  
-  t->Branch("RunNumber",        &m_runNumber);
-  t->Branch("EventNumber",      &m_eventNumber);
-  t->Branch("avgmu",            &m_avgmu);
-}
-
-void TrigEgammaNavTPNtuple::bookTriggerBranches(TTree *t){
-
-  // Level L1 cluster
-  t->Branch( "trig_L1_eta",             &m_trig_L1_eta);
-  t->Branch( "trig_L1_phi",             &m_trig_L1_phi);
-  t->Branch( "trig_L1_emClus",          &m_trig_L1_emClus);
-  t->Branch( "trig_L1_tauClus",         &m_trig_L1_tauClus);
-  t->Branch( "trig_L1_emIsol",          &m_trig_L1_emIsol);
-  t->Branch( "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
-  t->Branch( "trig_L1_thrNames",        &m_trig_L1_thrNames);
-  t->Branch( "trig_L1_accept",          &m_trig_L1_accept);
-  t->Branch( "trig_L2_calo_et",         &m_trig_L2_calo_et);
-  t->Branch( "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
-  t->Branch( "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
-  t->Branch( "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
-  t->Branch( "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
-  t->Branch( "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
-  t->Branch( "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
-  t->Branch( "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
-  t->Branch( "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
-  t->Branch( "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
-  t->Branch( "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
-  t->Branch( "trig_L2_calo_energySample",&m_trig_L2_calo_energySample ); 
-  t->Branch( "trig_L2_calo_rnnOutput",  &m_trig_L2_calo_rnnOutput ); 
-  t->Branch( "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
-  t->Branch( "trig_L2_calo_accept",     &m_trig_L2_calo_accept);
-  t->Branch( "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
-  t->Branch( "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
-  t->Branch( "trig_L2_el_eta",                 &m_trig_L2_el_eta);
-  t->Branch( "trig_L2_el_phi",                 &m_trig_L2_el_phi );
-  t->Branch( "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
-  t->Branch( "trig_L2_el_charge",              &m_trig_L2_el_charge);
-  t->Branch( "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
-  t->Branch( "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
-  t->Branch( "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
-  t->Branch( "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
-  t->Branch( "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
-  t->Branch( "trig_L2_el_accept",       &m_trig_L2_el_accept );
-  t->Branch( "trig_EF_calo_accept",     &m_trig_EF_calo_accept);
-  t->Branch( "trig_EF_calo_et",         &m_trig_EF_calo_et);
-  t->Branch( "trig_EF_calo_eta",        &m_trig_EF_calo_eta);
-  t->Branch( "trig_EF_el_accept",       &m_trig_EF_el_accept);
-}
-
-void TrigEgammaNavTPNtuple::bookElectronBranches(TTree *t){
- 
-  t->Branch("el_et",                    &m_el_et);
-  t->Branch("el_pt",                    &m_el_pt);
-  t->Branch("el_eta",                   &m_el_eta);
-  t->Branch("el_phi",                   &m_el_phi);
-  t->Branch("el_ethad1",                &m_el_ethad1);
-  t->Branch("el_ehad1",                 &m_el_ehad1);
-  t->Branch("el_f1",                    &m_el_f1);
-  t->Branch("el_f3",                    &m_el_f3);
-  t->Branch("el_f1core",                &m_el_f1core);
-  t->Branch("el_f3core",                &m_el_f3core);
-  t->Branch("el_weta2",                 &m_el_weta2);
-  t->Branch("el_d0",                    &m_el_d0);
-  t->Branch("el_wtots1",                &m_el_wtots1);
-  t->Branch("el_fracs1",                &m_el_fracs1);
-  t->Branch("el_Reta",                  &m_el_Reta);
-  t->Branch("el_Rphi",                  &m_el_Rphi);
-  t->Branch("el_Eratio",                &m_el_Eratio);
-  t->Branch("el_Rhad",                  &m_el_Rhad);
-  t->Branch("el_Rhad1",                 &m_el_Rhad1);
-  t->Branch("el_deta1",                 &m_el_deta1);
-  t->Branch("el_deta2",                 &m_el_deta2);
-  t->Branch("el_dphi2",                 &m_el_dphi2);
-  t->Branch("el_dphiresc",              &m_el_dphiresc);
-  t->Branch("el_dphiresc2",             &m_el_dphiresc2);
-  t->Branch("el_eprobht",               &m_el_eprobht);
-  t->Branch("el_charge",                &m_el_charge);
-  t->Branch("el_nblayerhits",           &m_el_nblayerhits);
-  t->Branch("el_nblayerolhits",         &m_el_nblayerolhits);
-  t->Branch("el_npixhits",              &m_el_npixhits);
-  t->Branch("el_npixolhits",            &m_el_npixolhits);
-  t->Branch("el_nscthits",              &m_el_nscthits);
-  t->Branch("el_nsctolhits",            &m_el_nsctolhits);
-  t->Branch("el_ntrthightreshits",      &m_el_ntrthightreshits);
-  t->Branch("el_ntrthits",              &m_el_ntrthits);
-  t->Branch("el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
-  t->Branch("el_ntrtolhits",            &m_el_ntrtolhits);
-  t->Branch("el_ntrtxenonhits",         &m_el_ntrtxenonhits);
-  t->Branch("el_expectblayerhit",       &m_el_expectblayerhit); 
-  t->Branch("el_nsihits",               &m_el_nsihits          );
-  t->Branch("el_nsideadsensors",        &m_el_nsideadsensors   );
-  t->Branch("el_npixdeadsensors",       &m_el_npixdeadsensors  );
-  t->Branch("el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
-  t->Branch("el_ringsE",                &m_el_ringsE );
-  t->Branch("el_loose",                 &m_el_loose  );
-  t->Branch("el_medium",                &m_el_medium );
-  t->Branch("el_tight",                 &m_el_tight );
-  t->Branch("el_lhLoose",               &m_el_lhLoose );
-  t->Branch("el_lhMedium",              &m_el_lhMedium ); 
-  t->Branch("el_lhTight",               &m_el_lhTight ); 
-  t->Branch("el_rgLoose",               &m_el_rgLoose );
-  t->Branch("el_rgMedium",              &m_el_rgMedium ); 
-  t->Branch("el_rgTight",               &m_el_rgTight ); 
-  t->Branch("el_multiLepton",           &m_el_multiLepton);
-  t->Branch("el_nGoodVtx",              &m_el_nGoodVtx);
-  t->Branch("el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
-  t->Branch("calo_et",                  &m_calo_et);
-  t->Branch("calo_eta",                 &m_calo_eta);
-  t->Branch("calo_phi",                 &m_calo_phi);
- 
-}
-
-
-/*void TrigEgammaNavTPNtuple::bookPhotonBranches(TTree *t){
-} */ 
-  
-void TrigEgammaNavTPNtuple::bookMonteCarloBranches(TTree *t){
-  // Monte Carlo
-  t->Branch("mc_hasMC",       &m_mc_hasMC);
-  t->Branch("mc_pt",          &m_mc_pt);
-  t->Branch("mc_eta",         &m_mc_eta);
-  t->Branch("mc_phi",         &m_mc_phi);
-  t->Branch("mc_isTop",       &m_mc_isTop);
-  t->Branch("mc_isParton",    &m_mc_isParton);
-  t->Branch("mc_isMeson",     &m_mc_isMeson);
-  t->Branch("mc_isTau",       &m_mc_isTau);
-  t->Branch("mc_isMuon",      &m_mc_isMuon);
-  t->Branch("mc_isPhoton",    &m_mc_isPhoton);
-  t->Branch("mc_isElectron",  &m_mc_isElectron);
-  t->Branch("mc_hasZMother",  &m_mc_hasZMother);
-  t->Branch("mc_hasWMother",  &m_mc_hasWMother);
-}
-
-void TrigEgammaNavTPNtuple::linkEventBranches(TTree *t){
-  
-  InitBranch( t, "RunNumber",        &m_runNumber);
-  InitBranch( t, "EventNumber",      &m_eventNumber);
-  InitBranch( t, "avgmu",            &m_avgmu);
-}
-
-void TrigEgammaNavTPNtuple::linkElectronBranches( TTree *t ){
-  
-  InitBranch( t, "el_et",                    &m_el_et);
-  InitBranch( t, "el_pt",                    &m_el_pt);
-  InitBranch( t, "el_eta",                   &m_el_eta);
-  InitBranch( t, "el_phi",                   &m_el_phi);
-  InitBranch( t, "el_ethad1",                &m_el_ethad1);
-  InitBranch( t, "el_ehad1",                 &m_el_ehad1);
-  InitBranch( t, "el_f1",                    &m_el_f1);
-  InitBranch( t, "el_f3",                    &m_el_f3);
-  InitBranch( t, "el_f1core",                &m_el_f1core);
-  InitBranch( t, "el_f3core",                &m_el_f3core);
-  InitBranch( t, "el_weta2",                 &m_el_weta2);
-  InitBranch( t, "el_d0",                    &m_el_d0);
-  InitBranch( t, "el_wtots1",                &m_el_wtots1);
-  InitBranch( t, "el_fracs1",                &m_el_fracs1);
-  InitBranch( t, "el_Reta",                  &m_el_Reta);
-  InitBranch( t, "el_Rphi",                  &m_el_Rphi);
-  InitBranch( t, "el_Eratio",                &m_el_Eratio);
-  InitBranch( t, "el_Rhad",                  &m_el_Rhad);
-  InitBranch( t, "el_Rhad1",                 &m_el_Rhad1);
-  InitBranch( t, "el_deta1",                 &m_el_deta1);
-  InitBranch( t, "el_deta2",                 &m_el_deta2);
-  InitBranch( t, "el_dphi2",                 &m_el_dphi2);
-  InitBranch( t, "el_dphiresc",              &m_el_dphiresc);
-  InitBranch( t, "el_dphiresc2",             &m_el_dphiresc2);
-  InitBranch( t, "el_eprobht",               &m_el_eprobht);
-  InitBranch( t, "el_charge",                &m_el_charge);
-  InitBranch( t, "el_nblayerhits",           &m_el_nblayerhits);
-  InitBranch( t, "el_nblayerolhits",         &m_el_nblayerolhits);
-  InitBranch( t, "el_npixhits",              &m_el_npixhits);
-  InitBranch( t, "el_npixolhits",            &m_el_npixolhits);
-  InitBranch( t, "el_nscthits",              &m_el_nscthits);
-  InitBranch( t, "el_nsctolhits",            &m_el_nsctolhits);
-  InitBranch( t, "el_ntrthightreshits",      &m_el_ntrthightreshits);
-  InitBranch( t, "el_ntrthits",              &m_el_ntrthits);
-  InitBranch( t, "el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
-  InitBranch( t, "el_ntrtolhits",            &m_el_ntrtolhits);
-  InitBranch( t, "el_ntrtxenonhits",         &m_el_ntrtxenonhits);
-  InitBranch( t, "el_expectblayerhit",       &m_el_expectblayerhit); 
-  InitBranch( t, "el_nsihits",               &m_el_nsihits          );
-  InitBranch( t, "el_nsideadsensors",        &m_el_nsideadsensors   );
-  InitBranch( t, "el_npixdeadsensors",       &m_el_npixdeadsensors  );
-  InitBranch( t, "el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
-  InitBranch( t, "el_ringsE",                &m_el_ringsE );
-  InitBranch( t, "el_loose",                 &m_el_loose  );
-  InitBranch( t, "el_medium",                &m_el_medium );
-  InitBranch( t, "el_tight",                 &m_el_tight );
-  InitBranch( t, "el_lhLoose",               &m_el_lhLoose );
-  InitBranch( t, "el_lhMedium",              &m_el_lhMedium ); 
-  InitBranch( t, "el_lhTight",               &m_el_lhTight ); 
-  InitBranch( t, "el_rgLoose",               &m_el_rgLoose );
-  InitBranch( t, "el_rgMedium",              &m_el_rgMedium ); 
-  InitBranch( t, "el_rgTight",               &m_el_rgTight ); 
-  InitBranch( t, "el_multiLepton",           &m_el_multiLepton);
-  InitBranch( t, "el_nGoodVtx",              &m_el_nGoodVtx);
-  InitBranch( t, "el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
-  InitBranch( t, "calo_et",                  &m_calo_et);
-  InitBranch( t, "calo_eta",                 &m_calo_eta);
-  InitBranch( t, "calo_phi",                 &m_calo_phi);
-
-}
-
-
-/*void TrigEgammaNavTPNtuple::linkPhotonBranches( TTree *t ){
-}*/
-
-void TrigEgammaNavTPNtuple::linkTriggerBranches( TTree *t ){
-
-  InitBranch(t, "trig_L1_eta",             &m_trig_L1_eta);
-  InitBranch(t, "trig_L1_phi",             &m_trig_L1_phi);
-  InitBranch(t, "trig_L1_emClus",          &m_trig_L1_emClus);
-  InitBranch(t, "trig_L1_tauClus",         &m_trig_L1_tauClus);
-  InitBranch(t, "trig_L1_emIsol",          &m_trig_L1_emIsol);
-  InitBranch(t, "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
-  InitBranch(t, "trig_L1_thrNames",        &m_trig_L1_thrNames);
-  InitBranch(t, "trig_L1_accept",          &m_trig_L1_accept);
-  InitBranch(t, "trig_L2_calo_et",         &m_trig_L2_calo_et);
-  InitBranch(t, "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
-  InitBranch(t, "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
-  InitBranch(t, "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
-  InitBranch(t, "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
-  InitBranch(t, "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
-  InitBranch(t, "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
-  InitBranch(t, "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
-  InitBranch(t, "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
-  InitBranch(t, "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
-  InitBranch(t, "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
-  InitBranch(t, "trig_L2_calo_rnnOutput",      &m_trig_L2_calo_rnnOutput ); 
-  InitBranch(t, "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
-  InitBranch(t, "trig_L2_calo_energySample",&m_trig_L2_calo_energySample ); 
-  InitBranch(t, "trig_L2_calo_accept",     &m_trig_L2_calo_accept);
-
-  InitBranch(t, "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
-  InitBranch(t, "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
-  InitBranch(t, "trig_L2_el_eta",                 &m_trig_L2_el_eta);
-  InitBranch(t, "trig_L2_el_phi",                 &m_trig_L2_el_phi );
-  InitBranch(t, "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
-  InitBranch(t, "trig_L2_el_charge",              &m_trig_L2_el_charge);
-  InitBranch(t, "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
-  InitBranch(t, "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
-  InitBranch(t, "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
-  InitBranch(t, "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
-  InitBranch(t, "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
-
-  InitBranch(t, "trig_L2_el_accept",       &m_trig_L2_el_accept );
-  InitBranch(t, "trig_EF_el_accept",       &m_trig_EF_el_accept );
-  InitBranch(t, "trig_EF_calo_accept",     &m_trig_EF_calo_accept );
-  InitBranch(t, "trig_EF_calo_et",         &m_trig_EF_calo_et );
-  InitBranch(t, "trig_EF_calo_eta",        &m_trig_EF_calo_eta );
- 
-}
-
-
-void TrigEgammaNavTPNtuple::linkMonteCarloBranches(TTree *t){
- 
-  InitBranch(t, "mc_hasMC",       &m_mc_hasMC);
-  InitBranch(t, "mc_pt",          &m_mc_pt);
-  InitBranch(t, "mc_eta",         &m_mc_eta);
-  InitBranch(t, "mc_phi",         &m_mc_phi);
-  InitBranch(t, "mc_isTop",       &m_mc_isTop);
-  InitBranch(t, "mc_isParton",    &m_mc_isParton);
-  InitBranch(t, "mc_isMeson",     &m_mc_isMeson);
-  InitBranch(t, "mc_isTau",       &m_mc_isTau);
-  InitBranch(t, "mc_isMuon",      &m_mc_isMuon);
-  InitBranch(t, "mc_isPhoton",    &m_mc_isPhoton);
-  InitBranch(t, "mc_isElectron",  &m_mc_isElectron);
-  InitBranch(t, "mc_hasZMother",  &m_mc_hasZMother);
-  InitBranch(t, "mc_hasWMother",  &m_mc_hasWMother); 
-}
-
-void TrigEgammaNavTPNtuple::clear(){
-
-  ///EventInfo
-  m_runNumber             = 0;
-  m_eventNumber           = 0;
-  m_avgmu                 = 0;
-  ///Egamma
-  m_el_et                 = -1;
-  m_el_pt                 = -1;
-  m_el_eta                = -1;
-  m_el_phi                = -1;
-  m_el_ethad1             = -1;
-  m_el_ehad1              = -1;
-  m_el_f1                 = -1;
-  m_el_f3                 = -1;
-  m_el_f1core             = -1;
-  m_el_f3core             = -1;
-  m_el_weta2              = -1;
-  m_el_d0                 = -1;
-  m_el_wtots1             = -1;
-  m_el_fracs1             = -1;
-  m_el_Reta               = -1;
-  m_el_Rphi               = -1;
-  m_el_Eratio             = -1;
-  m_el_Rhad               = -1;
-  m_el_Rhad1              = -1;
-  m_el_deta1              = -1;
-  m_el_deta2              = -1;
-  m_el_dphi2              = -1;
-  m_el_dphiresc           = -1;
-  m_el_dphiresc2          = -1;
-  m_el_eprobht            = -1;
-  m_el_charge             =  0;
-  m_el_nblayerhits        =  0;
-  m_el_nblayerolhits      =  0;
-  m_el_npixhits           =  0;
-  m_el_npixolhits         =  0;
-  m_el_nscthits           =  0;
-  m_el_nsctolhits         =  0;
-  m_el_ntrthightreshits   =  0;
-  m_el_ntrthits           =  0;
-  m_el_ntrthighthresolhits=  0;
-  m_el_ntrtolhits         =  0;
-  m_el_ntrtxenonhits      =  0;
-  m_el_expectblayerhit    =  false;
-  m_el_nsihits            =  0;
-  m_el_nsideadsensors     =  0;
-  m_el_npixdeadsensors    =  0;
-  m_el_nsctdeadsensors    =  0;
-  m_el_loose              = false; 
-  m_el_medium             = false; 
-  m_el_tight              = false; 
-  m_el_lhLoose            = false; 
-  m_el_lhMedium           = false; 
-  m_el_lhTight            = false;  
-  m_el_rgLoose            = false; 
-  m_el_rgMedium           = false; 
-  m_el_rgTight            = false;  
-  m_el_multiLepton        = false;
-  m_el_nGoodVtx           = -1;
-  m_el_nPileupPrimaryVtx  = -1;
-  m_calo_et               = -1; 
-  m_calo_eta              = -1; 
-  m_calo_phi              = -1; 
-
-  ///Trigger
-  m_trig_L1_eta           = -1;
-  m_trig_L1_phi           = -1;
-  m_trig_L1_emClus        = -1;
-  m_trig_L1_tauClus       = -1;
-  m_trig_L1_emIsol        = -1;
-  m_trig_L1_hadIsol       = -1;
-  m_trig_L1_accept        = false;
-  m_trig_L2_calo_et       = -1;
-  m_trig_L2_calo_eta      = -1;
-  m_trig_L2_calo_phi      = -1;
-  m_trig_L2_calo_e237     = -1;
-  m_trig_L2_calo_e277     = -1;
-  m_trig_L2_calo_fracs1   = -1;
-  m_trig_L2_calo_weta2    = -1;
-  m_trig_L2_calo_ehad1    = -1;
-  m_trig_L2_calo_emaxs1   = -1;
-  m_trig_L2_calo_e2tsts1  = -1;
-  m_trig_L2_calo_wstot    = -1; 
-  m_trig_L2_calo_rnnOutput    = 999; 
-
-  m_trig_L1_accept        = false;
-  m_trig_L2_calo_accept   = false;
-  m_trig_L2_el_accept     = false; 
-  m_trig_EF_calo_accept   = false;
-  m_trig_EF_el_accept     = false;
-
-  ///Monte Carlo
-  m_mc_hasMC              = false;
-  m_mc_pt                 = -1;
-  m_mc_eta                = -1;
-  m_mc_phi                = -1;
-  m_mc_isTop              = false;
-  m_mc_isParton           = false;
-  m_mc_isMeson            = false;
-  m_mc_isTau              = false;
-  m_mc_isMuon             = false;
-  m_mc_isPhoton           = false;
-  m_mc_isElectron         = false;
-  m_mc_hasZMother         = false;
-  m_mc_hasWMother         = false;
-
-  ///Some vectors
-  m_trig_L1_thrNames                ->clear(); 
-  m_trig_L2_calo_energySample       ->clear();
-  m_trig_L2_calo_rings              ->clear();  
-
-  m_trig_L2_el_trackAlgID          ->clear(); 
-  m_trig_L2_el_eta                 ->clear(); 
-  m_trig_L2_el_phi                 ->clear(); 
-  m_trig_L2_el_caloEta             ->clear(); 
-  m_trig_L2_el_trkClusDeta         ->clear(); 
-  m_trig_L2_el_trkClusDphi         ->clear(); 
-  m_trig_L2_el_pt                  ->clear(); 
-  m_trig_L2_el_etOverPt            ->clear();         
-  m_trig_L2_el_nTRTHits            ->clear();       
-  m_trig_L2_el_nTRTHiThresholdHits ->clear();       
-  m_trig_L2_el_charge              ->clear();     
-  m_trig_EF_calo_et                ->clear();  
-  m_trig_EF_calo_eta               ->clear();  
- 
-
-}
-
-void TrigEgammaNavTPNtuple::alloc_space(){
-
-  m_el_ringsE                       = new std::vector<float>();
-  m_trig_L1_thrNames                = new std::vector<std::string>();
-  m_trig_L2_calo_energySample       = new std::vector<float>();
-  m_trig_L2_calo_rings              = new std::vector<float>();
-  m_trig_L2_el_trackAlgID           = new std::vector<int>();
-  m_trig_L2_el_eta                  = new std::vector<float>();   
-  m_trig_L2_el_phi                  = new std::vector<float>();   
-  m_trig_L2_el_caloEta              = new std::vector<float>();   
-  m_trig_L2_el_trkClusDeta          = new std::vector<float>();
-  m_trig_L2_el_trkClusDphi          = new std::vector<float>();
-  m_trig_L2_el_pt                   = new std::vector<float>();   
-  m_trig_L2_el_etOverPt             = new std::vector<float>();           
-  m_trig_L2_el_nTRTHits             = new std::vector<float>();         
-  m_trig_L2_el_nTRTHiThresholdHits  = new std::vector<float>();         
-  m_trig_L2_el_charge               = new std::vector<float>();       
-  m_trig_EF_calo_et                 = new std::vector<float>();       
-  m_trig_EF_calo_eta                = new std::vector<float>();       
-  
-}
-
-
-void TrigEgammaNavTPNtuple::release_space(){
-  delete m_el_ringsE              ;
-  delete m_trig_L1_thrNames       ;
-  delete m_trig_L2_calo_energySample;
-  delete m_trig_L2_calo_rings     ;
-  delete m_trig_L2_el_trackAlgID  ;  
-  delete m_trig_L2_el_pt          ;  
-  delete m_trig_L2_el_eta         ;   
-  delete m_trig_L2_el_caloEta     ;   
-  delete m_trig_L2_el_phi         ;   
-  delete m_trig_L2_el_charge      ;       
-  delete m_trig_L2_el_nTRTHits    ;         
-  delete m_trig_L2_el_nTRTHiThresholdHits ;         
-  delete m_trig_L2_el_etOverPt    ;           
-  delete m_trig_L2_el_trkClusDeta ;
-  delete m_trig_L2_el_trkClusDphi ;
-  delete m_trig_EF_calo_et        ;
-  delete m_trig_EF_calo_eta       ;
-}
-
-unsigned TrigEgammaNavTPNtuple::count_HLT_objects( const HLT::TriggerElement *feat )
-{
-  unsigned nobj=0;
-  if(getFeature<xAOD::ElectronContainer>(feat)    ) nobj++; // HLT
-  if(getFeature<xAOD::CaloClusterContainer>(feat) ) nobj++; // EFCalo
-  if(getFeature<xAOD::TrigElectronContainer>(feat)) nobj++; // L2
-  if(getFeature<xAOD::TrigEMCluster>(feat)        ) nobj++; // L2Calo
-  ATH_MSG_DEBUG("Number of objects counted in this feature: " << nobj);
-  return nobj;
-}
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
new file mode 100644
index 000000000000..3c63338f5693
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
@@ -0,0 +1,1155 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <iostream>
+#include "TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h"
+using namespace std;
+
+TrigEgammaPhysValBase::TrigEgammaPhysValBase(){
+ 
+  m_el_ringsE=nullptr;
+  m_trig_L1_thrNames=nullptr;          
+  m_trig_L2_calo_energySample=nullptr;
+  m_trig_L2_calo_rings=nullptr;
+  m_trig_L2_el_trackAlgID=nullptr;
+  m_trig_L2_el_pt=nullptr;
+  m_trig_L2_el_eta=nullptr;
+  m_trig_L2_el_caloEta=nullptr;
+  m_trig_L2_el_phi=nullptr;
+  m_trig_L2_el_charge=nullptr;
+  m_trig_L2_el_nTRTHits=nullptr;
+  m_trig_L2_el_nTRTHiThresholdHits=nullptr;
+  m_trig_L2_el_etOverPt=nullptr;
+  m_trig_L2_el_trkClusDeta=nullptr;
+  m_trig_L2_el_trkClusDphi=nullptr;
+  m_trig_EF_calo_et=nullptr;
+  m_trig_EF_calo_eta=nullptr;
+  
+  m_doMCDetailed=false;
+  m_doL2Detailed=false;
+  m_doL2CaloDetailed=false;
+  m_doRecoDetailed=false;
+}
+
+/*
+ * book, link, clear, alloc and release method divide in:
+ * trigger, Egamma and MonteCarlo data base.
+ */
+template <class T> 
+void TrigEgammaPhysValBase::InitBranch(TTree* fChain, std::string branch_name, T* param, bool message){
+
+  std::string bname = branch_name;
+  if (fChain->GetAlias(bname.c_str()))
+     bname = std::string(fChain->GetAlias(bname.c_str()));
+
+  if (!fChain->FindBranch(bname.c_str()) && message) {
+    std::cout << "[WARNING] unknown branch " << bname << std::endl;
+    return;  
+  }
+  fChain->SetBranchStatus(bname.c_str(), 1.);
+  fChain->SetBranchAddress(bname.c_str(), param);
+}
+
+void TrigEgammaPhysValBase::bookEventBranches(TTree *t){
+  
+  t->Branch("RunNumber",        &m_runNumber);
+  t->Branch("EventNumber",      &m_eventNumber);
+  t->Branch("LumiBlock",        &m_lumiBlock);
+  t->Branch("avgmu",            &m_avgmu);
+}
+
+void TrigEgammaPhysValBase::bookTriggerBranches(TTree *t){
+
+  // Level L1 cluster
+  //t->Branch( "trig_isPrescaled",        &m_trig_isPrescaled);
+  t->Branch( "trig_L1_eta",             &m_trig_L1_eta);
+  t->Branch( "trig_L1_phi",             &m_trig_L1_phi);
+  t->Branch( "trig_L1_emClus",          &m_trig_L1_emClus);
+  t->Branch( "trig_L1_tauClus",         &m_trig_L1_tauClus);
+  t->Branch( "trig_L1_emIsol",          &m_trig_L1_emIsol);
+  t->Branch( "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
+  t->Branch( "trig_L1_hadCore",         &m_trig_L1_hadCore);
+  t->Branch( "trig_L2_calo_et",         &m_trig_L2_calo_et);
+  t->Branch( "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
+  t->Branch( "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
+  
+  if(m_doL2CaloDetailed){
+    t->Branch( "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
+    t->Branch( "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
+    t->Branch( "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
+    t->Branch( "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
+    t->Branch( "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
+    t->Branch( "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
+    t->Branch( "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
+    t->Branch( "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
+    t->Branch( "trig_L2_calo_energySample",&m_trig_L2_calo_energySample);
+  }
+
+  t->Branch( "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
+  t->Branch( "trig_L2_calo_rnnOutput",  &m_trig_L2_calo_rnnOutput ); 
+ 
+
+  if(m_doL2Detailed){
+    t->Branch( "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
+    t->Branch( "trig_L2_el_eta",                 &m_trig_L2_el_eta);
+    t->Branch( "trig_L2_el_phi",                 &m_trig_L2_el_phi );
+    t->Branch( "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
+    t->Branch( "trig_L2_el_charge",              &m_trig_L2_el_charge);
+    t->Branch( "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
+    t->Branch( "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
+    t->Branch( "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
+    t->Branch( "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
+    t->Branch( "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
+    t->Branch( "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
+  }
+
+  t->Branch( "trig_EF_calo_e",            &m_trig_EF_calo_e       );
+  t->Branch( "trig_EF_calo_et",           &m_trig_EF_calo_et      );
+  t->Branch( "trig_EF_calo_eta",          &m_trig_EF_calo_eta     );
+  t->Branch( "trig_EF_calo_phi",          &m_trig_EF_calo_phi     );
+  t->Branch( "trig_EF_calo_etaBE2",       &m_trig_EF_calo_etaBE2  );
+
+#define BRANCH(_name_) t->Branch( #_name_ , & m_##_name_ );\
+
+  BRANCH( trig_EF_calo_tight                      );
+  BRANCH( trig_EF_calo_medium                     );
+  BRANCH( trig_EF_calo_loose                      );
+  BRANCH( trig_EF_calo_lhtight                    );
+  BRANCH( trig_EF_calo_lhmedium                   );
+  BRANCH( trig_EF_calo_lhloose                    );
+  BRANCH( trig_EF_calo_lhvloose                   );
+ 
+  BRANCH( trig_EF_el_calo_e                       ); 
+  BRANCH( trig_EF_el_calo_et                      ); 
+  BRANCH( trig_EF_el_calo_eta                     ); 
+  BRANCH( trig_EF_el_calo_phi                     ); 
+  BRANCH( trig_EF_el_calo_etaBE2                  ); 
+
+  BRANCH( trig_EF_el_hasCalo                      ); 
+  BRANCH( trig_EF_el_hasTrack                     ); 
+  BRANCH( trig_EF_el_e                            ); 
+  BRANCH( trig_EF_el_et                           ); 
+  BRANCH( trig_EF_el_eta                          ); 
+  BRANCH( trig_EF_el_phi                          ); 
+  BRANCH( trig_EF_el_e277                         ); 
+  BRANCH( trig_EF_el_ethad1                       ); 
+  BRANCH( trig_EF_el_ehad1                        ); 
+  BRANCH( trig_EF_el_f1                           ); 
+  BRANCH( trig_EF_el_f3                           ); 
+  BRANCH( trig_EF_el_f1core                       ); 
+  BRANCH( trig_EF_el_f3core                       ); 
+  BRANCH( trig_EF_el_weta1                        ); 
+  BRANCH( trig_EF_el_weta2                        ); 
+  BRANCH( trig_EF_el_wtots1                       ); 
+  BRANCH( trig_EF_el_fracs1                       ); 
+  BRANCH( trig_EF_el_Reta                         ); 
+  BRANCH( trig_EF_el_Rphi                         ); 
+  BRANCH( trig_EF_el_Eratio                       ); 
+  BRANCH( trig_EF_el_Rhad                         ); 
+  BRANCH( trig_EF_el_Rhad1                        ); 
+  BRANCH( trig_EF_el_deta2                        ); 
+  BRANCH( trig_EF_el_dphi2                        ); 
+  BRANCH( trig_EF_el_dphiresc                     ); 
+  BRANCH( trig_EF_el_deltaPhiRescaled2            ); 
+  BRANCH( trig_EF_el_deltaEta1                    ); 
+  BRANCH( trig_EF_el_deltaE                       ); 
+  BRANCH( trig_EF_el_etCone                       ); 
+  BRANCH( trig_EF_el_ptCone                       ); 
+ 
+  BRANCH( trig_EF_el_trk_pt                           ); 
+  BRANCH( trig_EF_el_trk_eta                         ); 
+  BRANCH( trig_EF_el_trk_charge                       ); 
+  BRANCH( trig_EF_el_trk_qOverP                       ); 
+  BRANCH( trig_EF_el_trk_sigd0                        ); 
+  BRANCH( trig_EF_el_trk_d0                           ); 
+  BRANCH( trig_EF_el_trk_eProbabilityHT               ); 
+  BRANCH( trig_EF_el_trk_transformed_eProbabilityHT   ); 
+  BRANCH( trig_EF_el_trk_d0significance               ); 
+  BRANCH( trig_EF_el_trk_deltaPOverP                  ); 
+  BRANCH( trig_EF_el_trk_summaryValues                ); 
+  
+  BRANCH( trig_EF_el_tight                        );
+  BRANCH( trig_EF_el_medium                       );
+  BRANCH( trig_EF_el_loose                        );
+  BRANCH( trig_EF_el_lhtight                      );
+  BRANCH( trig_EF_el_lhmedium                     );
+  BRANCH( trig_EF_el_lhloose                      );
+  BRANCH( trig_EF_el_lhvloose                     );
+
+  
+/*
+  BRANCH( trig_EF_el_nblayerhits                  );  
+  BRANCH( trig_EF_el_nblayerolhits                ); 
+  BRANCH( trig_EF_el_npixhits                     );  
+  BRANCH( trig_EF_el_npixolhits                   );  
+  BRANCH( trig_EF_el_nscthits                     );  
+  BRANCH( trig_EF_el_nsctolhits                   );  
+  BRANCH( trig_EF_el_ntrthightreshits             );  
+  BRANCH( trig_EF_el_ntrthits                     );  
+  BRANCH( trig_EF_el_ntrthighthresolhits          );   
+  BRANCH( trig_EF_el_ntrtolhits                   );   
+  BRANCH( trig_EF_el_ntrtxenonhits                ); 
+  BRANCH( trig_EF_el_expectblayerhit              ); 
+  BRANCH( trig_EF_el_npixdeadsensors              ); 
+  BRANCH( trig_EF_el_nsctdeadsensors              ); 
+  BRANCH( trig_EF_el_expectNextToInnerMostLayer   ); 
+  BRANCH( trig_EF_el_nNextToInnerMostLayerHits    ); 
+  BRANCH( trig_EF_el_nNextToInnerMostLayerOutliers);  
+  */
+
+#undef BRANCH
+
+
+
+}
+
+
+
+void TrigEgammaPhysValBase::bookElectronBranches(TTree *t){
+  
+  t->Branch("el_calo_e",                &m_el_calo_e);
+  t->Branch("el_calo_et",               &m_el_calo_et);
+  t->Branch("el_calo_eta",              &m_el_calo_eta);
+  t->Branch("el_calo_etaBE2",           &m_el_calo_etaBE2);
+  t->Branch("el_calo_phi",              &m_el_calo_phi);
+ 
+  t->Branch("el_hasCalo",               &m_el_hasCalo   );
+  t->Branch("el_hasTrack",              &m_el_hasTrack  );
+  t->Branch("el_e",                     &m_el_e         );
+  t->Branch("el_et",                    &m_el_et        );
+  t->Branch("el_eta",                   &m_el_eta       );
+  t->Branch("el_phi",                   &m_el_phi       );
+ 
+  if(m_doRecoDetailed){
+    t->Branch("el_ethad1",                &m_el_ethad1);
+    t->Branch("el_ehad1",                 &m_el_ehad1);
+    t->Branch("el_e277",                  &m_el_e277);
+    t->Branch("el_f1",                    &m_el_f1);
+    t->Branch("el_f3",                    &m_el_f3);
+    t->Branch("el_f1core",                &m_el_f1core);
+    t->Branch("el_f3core",                &m_el_f3core);
+    t->Branch("el_weta1",                 &m_el_weta1);
+    t->Branch("el_weta2",                 &m_el_weta2);
+    t->Branch("el_wtots1",                &m_el_wtots1);
+    t->Branch("el_fracs1",                &m_el_fracs1);
+    t->Branch("el_Reta",                  &m_el_Reta);
+    t->Branch("el_Rphi",                  &m_el_Rphi);
+    t->Branch("el_Eratio",                &m_el_Eratio);
+    t->Branch("el_Rhad",                  &m_el_Rhad);
+    t->Branch("el_Rhad1",                 &m_el_Rhad1);
+    t->Branch("el_deta2",                 &m_el_deta2);
+    t->Branch("el_dphi2",                 &m_el_dphi2);
+    t->Branch("el_dphiresc",              &m_el_dphiresc);
+    t->Branch("el_deltaPhiRescaled2"         , &m_el_deltaPhiRescaled2  );
+    t->Branch("el_deltaEta1"                 , &m_el_deltaEta1          );
+    t->Branch("el_deltaE",                &m_el_deltaE    );
+    t->Branch("el_etCone"                 , &m_el_etCone                 );
+    t->Branch("el_ptCone"                 , &m_el_ptCone                 );
+
+ 
+    t->Branch("el_trk_pt",                         &m_el_trk_pt        );
+    t->Branch("el_trk_eta",                        &m_el_trk_eta   );
+    t->Branch("el_trk_charge",                     &m_el_trk_charge);
+    t->Branch("el_trk_qOverP",                     &m_el_trk_qOverP);
+    t->Branch("el_trk_sigd0"                     , &m_el_trk_sigd0              );
+    t->Branch("el_trk_d0"                        , &m_el_trk_d0                 );
+    t->Branch("el_trk_eProbabilityHT"            , &m_el_trk_eProbabilityHT     );
+    t->Branch("el_trk_transformed_eProbabilityHT", &m_el_trk_transformed_eProbabilityHT);
+    t->Branch("el_trk_d0significance"            , &m_el_trk_d0significance     );
+    t->Branch("el_trk_deltaPOverP"               , &m_el_trk_deltaPOverP        );
+    t->Branch("el_trk_summaryValues"             , &m_el_trk_summaryValues        );
+  }
+
+  t->Branch("el_ringsE",                &m_el_ringsE );
+  t->Branch("el_nGoodVtx",              &m_el_nGoodVtx);
+  t->Branch("el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
+
+
+  t->Branch("el_loose",                 &m_el_loose  );
+  t->Branch("el_medium",                &m_el_medium );
+  t->Branch("el_tight",                 &m_el_tight );
+  t->Branch("el_lhvloose",              &m_el_lhVLoose );
+  t->Branch("el_lhloose",               &m_el_lhLoose );
+  t->Branch("el_lhmedium",              &m_el_lhMedium ); 
+  t->Branch("el_lhtight",               &m_el_lhTight ); 
+  t->Branch("el_multiLepton",           &m_el_multiLepton);
+
+
+
+}
+
+
+void TrigEgammaPhysValBase::createTDTMetadata( TTree *t, std::vector<std::string> trigList ){
+
+  std::vector<std::string> *trig_tdt_triggerList;
+  t->Branch("trig_tdt_triggerList", &trig_tdt_triggerList );
+  trig_tdt_triggerList = new std::vector<std::string>();
+  for(auto& trigger : trigList ){
+    trig_tdt_triggerList->push_back(trigger);
+  }
+  t->Fill();
+  delete trig_tdt_triggerList;
+}
+
+
+void TrigEgammaPhysValBase::bookTDTBranches(TTree *t){
+
+  t->Branch("trig_tdt_L1_calo_accept",       &m_trig_tdt_L1_calo_accept);
+  t->Branch("trig_tdt_L2_calo_accept",       &m_trig_tdt_L2_calo_accept);
+  t->Branch("trig_tdt_L2_el_accept",         &m_trig_tdt_L2_el_accept  );
+  t->Branch("trig_tdt_EF_calo_accept",       &m_trig_tdt_EF_calo_accept);
+  t->Branch("trig_tdt_EF_el_accept",         &m_trig_tdt_EF_el_accept  );
+  t->Branch("trig_tdt_emu_L1_calo_accept",   &m_trig_tdt_emu_L1_calo_accept);
+  t->Branch("trig_tdt_emu_L2_calo_accept",   &m_trig_tdt_emu_L2_calo_accept);
+  t->Branch("trig_tdt_emu_L2_el_accept",     &m_trig_tdt_emu_L2_el_accept  );
+  t->Branch("trig_tdt_emu_EF_calo_accept",   &m_trig_tdt_emu_EF_calo_accept);
+  t->Branch("trig_tdt_emu_EF_el_accept",     &m_trig_tdt_emu_EF_el_accept  );
+ 
+}
+
+
+/*void TrigEgammaPhysValBase::bookPhotonBranches(TTree *t){
+} */ 
+  
+void TrigEgammaPhysValBase::bookMonteCarloBranches(TTree *t){
+  // Monte Carlo
+  t->Branch("mc_hasMC",       &m_mc_hasMC);
+  t->Branch("mc_pt",          &m_mc_pt);
+  t->Branch("mc_eta",         &m_mc_eta);
+  t->Branch("mc_phi",         &m_mc_phi);
+  
+  if(m_doMCDetailed){
+    t->Branch("mc_isTop",       &m_mc_isTop);
+    t->Branch("mc_isParton",    &m_mc_isParton);
+    t->Branch("mc_isMeson",     &m_mc_isMeson);
+    t->Branch("mc_isTau",       &m_mc_isTau);
+    t->Branch("mc_isMuon",      &m_mc_isMuon);
+  }
+  
+  t->Branch("mc_isPhoton",    &m_mc_isPhoton);
+  t->Branch("mc_isElectron",  &m_mc_isElectron);
+  t->Branch("mc_hasZMother",  &m_mc_hasZMother);
+  t->Branch("mc_hasWMother",  &m_mc_hasWMother);
+}
+
+
+void TrigEgammaPhysValBase::linkTDTBranches(TTree *t){
+
+  InitBranch( t, "trig_tdt_L1_calo_accept",       &m_trig_tdt_L1_calo_accept);
+  InitBranch( t, "trig_tdt_L2_calo_accept",       &m_trig_tdt_L2_calo_accept);
+  InitBranch( t, "trig_tdt_L2_el_accept",         &m_trig_tdt_L2_el_accept  );
+  InitBranch( t, "trig_tdt_EF_calo_accept",       &m_trig_tdt_EF_calo_accept);
+  InitBranch( t, "trig_tdt_EF_el_accept",         &m_trig_tdt_EF_el_accept  );
+  InitBranch( t, "trig_tdt_emu_L1_calo_accept",   &m_trig_tdt_emu_L1_calo_accept);
+  InitBranch( t, "trig_tdt_emu_L2_calo_accept",   &m_trig_tdt_emu_L2_calo_accept);
+  InitBranch( t, "trig_tdt_emu_L2_el_accept",     &m_trig_tdt_emu_L2_el_accept  );
+  InitBranch( t, "trig_tdt_emu_EF_calo_accept",   &m_trig_tdt_emu_EF_calo_accept);
+  InitBranch( t, "trig_tdt_emu_EF_el_accept",     &m_trig_tdt_emu_EF_el_accept  );
+ 
+}
+
+
+
+void TrigEgammaPhysValBase::linkEventBranches(TTree *t){
+  
+  InitBranch( t, "RunNumber",        &m_runNumber);
+  InitBranch( t, "EventNumber",      &m_eventNumber);
+  InitBranch( t, "LumiBlock",        &m_lumiBlock);
+  InitBranch( t, "avgmu",            &m_avgmu);
+}
+
+void TrigEgammaPhysValBase::linkElectronBranches( TTree *t ){
+  
+  InitBranch( t, "el_calo_e",                &m_el_calo_e);
+  InitBranch( t, "el_calo_et",               &m_el_calo_et);
+  InitBranch( t, "el_calo_eta",              &m_el_calo_eta);
+  InitBranch( t, "el_calo_etaBE2",           &m_el_calo_etaBE2);
+  InitBranch( t, "el_calo_phi",              &m_el_calo_phi);
+  
+  InitBranch( t, "el_hasCalo",               &m_el_hasCalo);
+  InitBranch( t, "el_hasTrack",              &m_el_hasTrack);
+  InitBranch( t, "el_e",                     &m_el_e);
+  InitBranch( t, "el_et",                    &m_el_et);
+  InitBranch( t, "el_eta",                   &m_el_eta);
+  InitBranch( t, "el_phi",                   &m_el_phi);
+
+
+  if(m_doRecoDetailed){
+    InitBranch( t, "el_ethad1",                &m_el_ethad1);
+    InitBranch( t, "el_ehad1",                 &m_el_ehad1);
+    InitBranch( t, "el_f1",                    &m_el_f1);
+    InitBranch( t, "el_f3",                    &m_el_f3);
+    InitBranch( t, "el_f1core",                &m_el_f1core);
+    InitBranch( t, "el_f3core",                &m_el_f3core);
+    InitBranch( t, "el_weta1",                 &m_el_weta2);
+    InitBranch( t, "el_weta2",                 &m_el_weta2);
+    InitBranch( t, "el_wtots1",                &m_el_wtots1);
+    InitBranch( t, "el_fracs1",                &m_el_fracs1);
+    InitBranch( t, "el_Reta",                  &m_el_Reta);
+    InitBranch( t, "el_Rphi",                  &m_el_Rphi);
+    InitBranch( t, "el_Eratio",                &m_el_Eratio);
+    InitBranch( t, "el_Rhad",                  &m_el_Rhad);
+    InitBranch( t, "el_Rhad1",                 &m_el_Rhad1);
+    InitBranch( t, "el_deta2",                 &m_el_deta2);
+    InitBranch( t, "el_dphi2",                 &m_el_dphi2);
+    InitBranch( t, "el_dphiresc",              &m_el_dphiresc);
+    InitBranch( t, "el_deltaPhiRescaled2"         , &m_el_deltaPhiRescaled2         );
+    InitBranch( t, "el_e277"                      , &m_el_e277                      );
+    InitBranch( t, "el_deltaE"                    , &m_el_e277                      );
+    InitBranch( t, "el_deltaEta1"                 , &m_el_deltaEta1                 );
+    InitBranch( t, "el_etCone"                 , &m_el_etCone                 );
+    InitBranch( t, "el_ptCone"                 , &m_el_ptCone                 );
+
+    InitBranch( t, "el_trk_pt",                         &m_el_trk_pt);
+    InitBranch( t, "el_trk_eta"              ,          &m_el_trk_eta);
+    InitBranch( t, "el_trk_charge",                     &m_el_trk_charge);
+    InitBranch( t, "el_trk_qOverP",                     &m_el_trk_qOverP);
+    InitBranch( t, "el_trk_deltaPOverP"               , &m_el_trk_deltaPOverP               );
+    InitBranch( t, "el_trk_sigd0"                     , &m_el_trk_sigd0                     );
+    InitBranch( t, "el_trk_d0"                        , &m_el_trk_d0                        );
+    InitBranch( t, "el_trk_eProbabilityHT"            , &m_el_trk_eProbabilityHT            );
+    InitBranch( t, "el_trk_transformed_eProbabilityHT", &m_el_trk_transformed_eProbabilityHT);
+    InitBranch( t, "el_trk_d0significance"            , &m_el_trk_d0significance            );
+    InitBranch( t, "el_trk_summaryValues"             , &m_el_trk_summaryValues         );
+ 
+
+  
+  }
+  
+  InitBranch( t, "el_nGoodVtx",              &m_el_nGoodVtx);
+  InitBranch( t, "el_ringsE",                &m_el_ringsE );
+  InitBranch( t, "el_nPileupPrimaryVtx",     &m_el_nPileupPrimaryVtx);
+
+  InitBranch( t, "el_loose",                 &m_el_loose  );
+  InitBranch( t, "el_medium",                &m_el_medium );
+  InitBranch( t, "el_tight",                 &m_el_tight );
+  InitBranch( t, "el_lhvloose",              &m_el_lhVLoose );
+  InitBranch( t, "el_lhloose",               &m_el_lhLoose );
+  InitBranch( t, "el_lhmedium",              &m_el_lhMedium ); 
+  InitBranch( t, "el_lhtight",               &m_el_lhTight ); 
+  InitBranch( t, "el_multiLepton",           &m_el_multiLepton);
+   /*
+    InitBranch( t, "el_nblayerhits",           &m_el_nblayerhits);
+    InitBranch( t, "el_nblayerolhits",         &m_el_nblayerolhits);
+    InitBranch( t, "el_npixhits",              &m_el_npixhits);
+    InitBranch( t, "el_npixolhits",            &m_el_npixolhits);
+    InitBranch( t, "el_npixdeadsensors",       &m_el_npixdeadsensors  );
+    InitBranch( t, "el_nscthits",              &m_el_nscthits);
+    InitBranch( t, "el_nsctolhits",            &m_el_nsctolhits);
+    InitBranch( t, "el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
+    InitBranch( t, "el_ntrthits",              &m_el_ntrthits);
+    InitBranch( t, "el_ntrtolhits",            &m_el_ntrtolhits);
+    InitBranch( t, "el_ntrthighthreshits",     &m_el_ntrthighthreshits);
+    InitBranch( t, "el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
+    InitBranch( t, "el_ntrtxenonhits",         &m_el_ntrtxenonhits);
+    InitBranch( t, "el_expectblayerhit",       &m_el_expectblayerhit); 
+  */
+
+
+
+
+}
+
+
+/*void TrigEgammaPhysValBase::linkPhotonBranches( TTree *t ){
+}*/
+
+void TrigEgammaPhysValBase::linkTriggerBranches( TTree *t ){
+
+  //InitBranch(t, "trig_isPrescaled",        &m_trig_isPrescaled);
+  InitBranch(t, "trig_L1_eta",             &m_trig_L1_eta);
+  InitBranch(t, "trig_L1_phi",             &m_trig_L1_phi);
+  InitBranch(t, "trig_L1_emClus",          &m_trig_L1_emClus);
+  InitBranch(t, "trig_L1_tauClus",         &m_trig_L1_tauClus);
+  InitBranch(t, "trig_L1_emIsol",          &m_trig_L1_emIsol);
+  InitBranch(t, "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
+  InitBranch(t, "trig_L1_hadCore",         &m_trig_L1_hadCore);
+  //InitBranch(t, "trig_L1_thrNames",        &m_trig_L1_thrNames);
+  InitBranch(t, "trig_L2_calo_et",         &m_trig_L2_calo_et);
+  InitBranch(t, "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
+  InitBranch(t, "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
+  
+  if(m_doL2CaloDetailed){
+    InitBranch(t, "trig_L2_calo_e237",       &m_trig_L2_calo_e237 );
+    InitBranch(t, "trig_L2_calo_e277",       &m_trig_L2_calo_e277 );
+    InitBranch(t, "trig_L2_calo_fracs1",     &m_trig_L2_calo_fracs1);
+    InitBranch(t, "trig_L2_calo_weta2",      &m_trig_L2_calo_weta2);
+    InitBranch(t, "trig_L2_calo_ehad1",      &m_trig_L2_calo_ehad1);
+    InitBranch(t, "trig_L2_calo_emaxs1",     &m_trig_L2_calo_emaxs1);
+    InitBranch(t, "trig_L2_calo_e2tsts1",    &m_trig_L2_calo_e2tsts1);
+    InitBranch(t, "trig_L2_calo_wstot",      &m_trig_L2_calo_wstot);
+    InitBranch(t, "trig_L2_calo_energySample",      &m_trig_L2_calo_energySample);
+  }
+  
+  InitBranch(t, "trig_L2_calo_rings",      &m_trig_L2_calo_rings ); 
+  InitBranch(t, "trig_L2_calo_rnnOutput",  &m_trig_L2_calo_rnnOutput);
+  
+  if(m_doL2Detailed){
+    InitBranch(t, "trig_L2_el_trackAlgID" ,         &m_trig_L2_el_trackAlgID );
+    InitBranch(t, "trig_L2_el_pt" ,                 &m_trig_L2_el_pt );
+    InitBranch(t, "trig_L2_el_eta",                 &m_trig_L2_el_eta);
+    InitBranch(t, "trig_L2_el_phi",                 &m_trig_L2_el_phi );
+    InitBranch(t, "trig_L2_el_caloEta",             &m_trig_L2_el_caloEta );
+    InitBranch(t, "trig_L2_el_charge",              &m_trig_L2_el_charge);
+    InitBranch(t, "trig_L2_el_nTRTHits",            &m_trig_L2_el_nTRTHits);
+    InitBranch(t, "trig_L2_el_nTRTHiThresholdHits", &m_trig_L2_el_nTRTHiThresholdHits);
+    InitBranch(t, "trig_L2_el_etOverPt" ,           &m_trig_L2_el_etOverPt );
+    InitBranch(t, "trig_L2_el_trkClusDeta" ,        &m_trig_L2_el_trkClusDeta );
+    InitBranch(t, "trig_L2_el_trkClusDphi" ,        &m_trig_L2_el_trkClusDphi );
+
+  }
+  
+
+
+#define INIT(_name_) TrigEgammaPhysValBase::InitBranch(t, #_name_, & m_##_name_);\
+  
+  INIT( trig_EF_calo_et                         ); 
+  INIT( trig_EF_calo_eta                        ); 
+  INIT( trig_EF_calo_phi                        ); 
+  INIT( trig_EF_calo_etaBE2                     ); 
+  INIT( trig_EF_calo_e                          ); 
+  
+  INIT( trig_EF_el_calo_e                       ); 
+  INIT( trig_EF_el_calo_et                      ); 
+  INIT( trig_EF_el_calo_eta                     ); 
+  INIT( trig_EF_el_calo_phi                     ); 
+  INIT( trig_EF_el_calo_etaBE2                  ); 
+  
+  INIT( trig_EF_el_hasCalo                      ); 
+  INIT( trig_EF_el_hasTrack                     ); 
+  INIT( trig_EF_el_et                           ); 
+  INIT( trig_EF_el_eta                          ); 
+  INIT( trig_EF_el_phi                          ); 
+  INIT( trig_EF_el_e                            ); 
+  INIT( trig_EF_el_ethad1                       ); 
+  INIT( trig_EF_el_ehad1                        ); 
+  INIT( trig_EF_el_f1                           ); 
+  INIT( trig_EF_el_f3                           ); 
+  INIT( trig_EF_el_f1core                       ); 
+  INIT( trig_EF_el_f3core                       ); 
+  INIT( trig_EF_el_weta1                        ); 
+  INIT( trig_EF_el_weta2                        ); 
+  INIT( trig_EF_el_wtots1                       ); 
+  INIT( trig_EF_el_fracs1                       ); 
+  INIT( trig_EF_el_Reta                         ); 
+  INIT( trig_EF_el_Rphi                         ); 
+  INIT( trig_EF_el_Eratio                       ); 
+  INIT( trig_EF_el_Rhad                         ); 
+  INIT( trig_EF_el_Rhad1                        ); 
+  INIT( trig_EF_el_deta2                        ); 
+  INIT( trig_EF_el_dphi2                        ); 
+  INIT( trig_EF_el_e277                         ); 
+  INIT( trig_EF_el_deltaE                       ); 
+  INIT( trig_EF_el_dphiresc                     ); 
+  INIT( trig_EF_el_deltaPhiRescaled2            ); 
+  INIT( trig_EF_el_deltaEta1                    ); 
+  INIT( trig_EF_el_etCone                       ); 
+  INIT( trig_EF_el_ptCone                       ); 
+
+  INIT( trig_EF_el_trk_pt                           ); 
+  INIT( trig_EF_el_trk_eta                          ); 
+  INIT( trig_EF_el_trk_charge                       ); 
+  INIT( trig_EF_el_trk_qOverP                       ); 
+  INIT( trig_EF_el_trk_sigd0                        ); 
+  INIT( trig_EF_el_trk_d0                           ); 
+  INIT( trig_EF_el_trk_eProbabilityHT               ); 
+  INIT( trig_EF_el_trk_transformed_eProbabilityHT   ); 
+  INIT( trig_EF_el_trk_d0significance               ); 
+  INIT( trig_EF_el_trk_deltaPOverP                  ); 
+  INIT( trig_EF_el_trk_summaryValues                ); 
+  
+  INIT( trig_EF_calo_tight                      );
+  INIT( trig_EF_calo_medium                     );
+  INIT( trig_EF_calo_loose                      );
+  INIT( trig_EF_calo_lhtight                    );
+  INIT( trig_EF_calo_lhmedium                   );
+  INIT( trig_EF_calo_lhloose                    );
+  INIT( trig_EF_calo_lhvloose                   );
+  INIT( trig_EF_el_tight                        );
+  INIT( trig_EF_el_medium                       );
+  INIT( trig_EF_el_loose                        );
+  INIT( trig_EF_el_lhtight                      );
+  INIT( trig_EF_el_lhmedium                     );
+  INIT( trig_EF_el_lhloose                      );
+  INIT( trig_EF_el_lhvloose                     );
+
+  /*
+  INIT( trig_EF_el_nblayerhits                  );  
+  INIT( trig_EF_el_nblayerolhits                ); 
+  INIT( trig_EF_el_npixhits                     );  
+  INIT( trig_EF_el_npixolhits                   );  
+  INIT( trig_EF_el_nscthits                     );  
+  INIT( trig_EF_el_nsctolhits                   );  
+  INIT( trig_EF_el_ntrthightreshits             );  
+  INIT( trig_EF_el_ntrthits                     );  
+  INIT( trig_EF_el_ntrthighthresolhits          );   
+  INIT( trig_EF_el_ntrtolhits                   );   
+  INIT( trig_EF_el_ntrtxenonhits                ); 
+  INIT( trig_EF_el_expectblayerhit              ); 
+  INIT( trig_EF_el_npixdeadsensors              ); 
+  INIT( trig_EF_el_nsctdeadsensors              ); 
+  INIT( trig_EF_el_expectNextToInnerMostLayer   ); 
+  INIT( trig_EF_el_nNextToInnerMostLayerHits    ); 
+  INIT( trig_EF_el_nNextToInnerMostLayerOutliers);  
+  */
+
+
+
+
+#undef INIT
+
+
+}  
+
+
+
+void TrigEgammaPhysValBase::linkMonteCarloBranches(TTree *t){
+ 
+  InitBranch(t, "mc_hasMC",       &m_mc_hasMC);
+  InitBranch(t, "mc_pt",          &m_mc_pt);
+  InitBranch(t, "mc_eta",         &m_mc_eta);
+  InitBranch(t, "mc_phi",         &m_mc_phi);
+  
+  if(m_doMCDetailed){
+    InitBranch(t, "mc_isTop",       &m_mc_isTop);
+    InitBranch(t, "mc_isParton",    &m_mc_isParton);
+    InitBranch(t, "mc_isMeson",     &m_mc_isMeson);
+    InitBranch(t, "mc_isTau",       &m_mc_isTau);
+    InitBranch(t, "mc_isMuon",      &m_mc_isMuon);
+  }
+
+  InitBranch(t, "mc_isPhoton",    &m_mc_isPhoton);
+  InitBranch(t, "mc_isElectron",  &m_mc_isElectron);
+  InitBranch(t, "mc_hasZMother",  &m_mc_hasZMother);
+  InitBranch(t, "mc_hasWMother",  &m_mc_hasWMother); 
+}
+
+
+void TrigEgammaPhysValBase::clear(){
+
+  ///EventInfo
+  m_runNumber             = 0;
+  m_eventNumber           = 0;
+  m_lumiBlock             = 0;
+  m_avgmu                 = 0;
+  
+  ///Egamma
+  m_el_hasCalo            = false;
+  m_el_hasTrack           = false;
+  
+  
+  m_el_calo_e             =  0; 
+  m_el_calo_et            =  0; 
+  m_el_calo_eta           =  0; 
+  m_el_calo_phi           =  0; 
+  m_el_calo_etaBE2        =  0;  
+ 
+  m_el_e                  =  0;
+  m_el_et                 =  0;
+  m_el_eta                =  0;
+  m_el_phi                =  0;
+  m_el_ethad1             =  0;
+  m_el_ehad1              =  0;
+  m_el_f1                 =  0;
+  m_el_f3                 =  0;
+  m_el_f1core             =  0;
+  m_el_f3core             =  0;
+  m_el_weta1              =  0;
+  m_el_weta2              =  0;
+  m_el_wtots1             =  0;
+  m_el_fracs1             =  0;
+  m_el_e277               =  0;
+  m_el_Reta               =  0;
+  m_el_Rphi               =  0;
+  m_el_Eratio             =  0;
+  m_el_Rhad               =  0;
+  m_el_Rhad1              =  0;
+  m_el_deta2              =  0;
+  m_el_dphi2              =  0;
+  m_el_dphiresc           =  0;
+  m_el_deltaPhiRescaled2  =  0;
+  m_el_deltaEta1          =  0;
+  m_el_deltaE             =  0;
+  m_el_etCone             ->clear();
+  m_el_ptCone             ->clear();
+
+  m_el_trk_pt                 =  0;
+  m_el_trk_eta                =  0;
+  m_el_trk_charge             =  0;
+  m_el_trk_sigd0              =  0;
+  m_el_trk_d0                 =  0;
+  m_el_trk_eProbabilityHT     =  0;
+  m_el_trk_transformed_eProbabilityHT=0;
+  m_el_trk_d0significance     =  0;
+  m_el_trk_deltaPOverP        =  0;
+  m_el_trk_qOverP             =  0;
+  m_el_trk_summaryValues      ->clear();
+
+
+  
+  m_el_medium             = false; 
+  m_el_tight              = false; 
+  m_el_lhVLoose           = false; 
+  m_el_lhLoose            = false; 
+  m_el_lhMedium           = false; 
+  m_el_lhTight            = false;  
+  m_el_rgLoose            = false; 
+  m_el_rgMedium           = false; 
+  m_el_rgTight            = false;  
+  m_el_multiLepton        = false;
+  
+  m_el_nGoodVtx           = -1;
+  m_el_nPileupPrimaryVtx  = -1;
+  m_el_ringsE             ->clear(); 
+ 
+  // Trigger L1
+  m_trig_L1_eta           = 0;
+  m_trig_L1_phi           = 0;
+  m_trig_L1_emClus        = 0;
+  m_trig_L1_tauClus       = 0;
+  m_trig_L1_emIsol        = 0;
+  m_trig_L1_hadIsol       = 0;
+  m_trig_L1_hadCore       = 0;
+ 
+  // Trigger L2 Calo
+  m_trig_L2_calo_et       = 0;
+  m_trig_L2_calo_eta      = 0;
+  m_trig_L2_calo_phi      = 0;
+  m_trig_L2_calo_e237     = 0;
+  m_trig_L2_calo_e277     = 0;
+  m_trig_L2_calo_fracs1   = 0;
+  m_trig_L2_calo_weta2    = 0;
+  m_trig_L2_calo_ehad1    = 0;
+  m_trig_L2_calo_emaxs1   = 0;
+  m_trig_L2_calo_e2tsts1  = 0;
+  m_trig_L2_calo_wstot    = 0; 
+  
+  
+  m_trig_L2_calo_energySample                ->clear();
+  m_trig_L2_calo_rings                       ->clear();
+  m_trig_L2_calo_rnnOutput                   ->clear();
+  
+  
+  // L2 Electron
+  m_trig_L2_el_pt                            ->clear(); 
+  m_trig_L2_el_eta                           ->clear(); 
+  m_trig_L2_el_phi                           ->clear(); 
+  m_trig_L2_el_charge                        ->clear();     
+  m_trig_L2_el_caloEta                       ->clear(); 
+  m_trig_L2_el_trkClusDeta                   ->clear(); 
+  m_trig_L2_el_trkClusDphi                   ->clear(); 
+  m_trig_L2_el_etOverPt                      ->clear();         
+  m_trig_L2_el_nTRTHits                      ->clear();       
+  m_trig_L2_el_nTRTHiThresholdHits           ->clear();       
+  m_trig_L2_el_trackAlgID                    ->clear(); 
+ 
+  m_trig_EF_el_hasCalo                       ->clear();
+  m_trig_EF_el_hasTrack                      ->clear();
+  
+  // EF Calo
+  m_trig_EF_calo_e                           ->clear();     
+  m_trig_EF_calo_et                          ->clear();     
+  m_trig_EF_calo_eta                         ->clear();     
+  m_trig_EF_calo_phi                         ->clear();     
+  m_trig_EF_calo_etaBE2                      ->clear();     
+  
+  m_trig_EF_calo_tight                       ->clear();
+  m_trig_EF_calo_medium                      ->clear();
+  m_trig_EF_calo_loose                       ->clear();
+  m_trig_EF_calo_lhtight                     ->clear();
+  m_trig_EF_calo_lhmedium                    ->clear();
+  m_trig_EF_calo_lhloose                     ->clear();
+  m_trig_EF_calo_lhvloose                    ->clear();
+ 
+  // HLT electron
+  m_trig_EF_el_calo_e                        ->clear(); 
+  m_trig_EF_el_calo_et                       ->clear(); 
+  m_trig_EF_el_calo_eta                      ->clear(); 
+  m_trig_EF_el_calo_phi                      ->clear(); 
+  m_trig_EF_el_calo_etaBE2                   ->clear(); 
+
+  m_trig_EF_el_e                             ->clear(); 
+  m_trig_EF_el_et                            ->clear(); 
+  m_trig_EF_el_eta                           ->clear(); 
+  m_trig_EF_el_phi                           ->clear(); 
+  m_trig_EF_el_deltaE                        ->clear(); 
+  m_trig_EF_el_ethad1                        ->clear(); 
+  m_trig_EF_el_ehad1                         ->clear(); 
+  m_trig_EF_el_f1                            ->clear(); 
+  m_trig_EF_el_f3                            ->clear(); 
+  m_trig_EF_el_f1core                        ->clear(); 
+  m_trig_EF_el_f3core                        ->clear(); 
+  m_trig_EF_el_weta1                         ->clear(); 
+  m_trig_EF_el_weta2                         ->clear(); 
+  m_trig_EF_el_wtots1                        ->clear(); 
+  m_trig_EF_el_fracs1                        ->clear(); 
+  m_trig_EF_el_Reta                          ->clear(); 
+  m_trig_EF_el_Rphi                          ->clear(); 
+  m_trig_EF_el_Eratio                        ->clear(); 
+  m_trig_EF_el_Rhad                          ->clear(); 
+  m_trig_EF_el_Rhad1                         ->clear(); 
+  m_trig_EF_el_e277                          ->clear(); 
+  m_trig_EF_el_deta2                         ->clear(); 
+  m_trig_EF_el_dphi2                         ->clear(); 
+  m_trig_EF_el_dphiresc                      ->clear(); 
+  m_trig_EF_el_deltaPhiRescaled2             ->clear(); 
+  m_trig_EF_el_deltaEta1                     ->clear(); 
+  m_trig_EF_el_etCone                        ->clear();
+  m_trig_EF_el_ptCone                        ->clear();
+  
+  m_trig_EF_el_trk_pt                        ->clear(); 
+  m_trig_EF_el_trk_eta                       ->clear(); 
+  m_trig_EF_el_trk_charge                    ->clear(); 
+  m_trig_EF_el_trk_qOverP                    ->clear(); 
+  m_trig_EF_el_trk_sigd0                     ->clear(); 
+  m_trig_EF_el_trk_d0                        ->clear(); 
+  m_trig_EF_el_trk_eProbabilityHT            ->clear(); 
+  m_trig_EF_el_trk_transformed_eProbabilityHT->clear(); 
+  m_trig_EF_el_trk_d0significance            ->clear(); 
+  m_trig_EF_el_trk_deltaPOverP               ->clear(); 
+  m_trig_EF_el_trk_summaryValues             ->clear();
+
+
+  m_trig_EF_el_tight                         ->clear();
+  m_trig_EF_el_medium                        ->clear();
+  m_trig_EF_el_loose                         ->clear();
+  m_trig_EF_el_lhtight                       ->clear();
+  m_trig_EF_el_lhmedium                      ->clear();
+  m_trig_EF_el_lhloose                       ->clear();
+  m_trig_EF_el_lhvloose                      ->clear();
+  
+  m_trig_tdt_L1_calo_accept                  ->clear();
+  m_trig_tdt_L2_calo_accept                  ->clear();
+  m_trig_tdt_L2_el_accept                    ->clear();
+  m_trig_tdt_EF_calo_accept                  ->clear();
+  m_trig_tdt_EF_el_accept                    ->clear();
+  m_trig_tdt_emu_L1_calo_accept              ->clear();
+  m_trig_tdt_emu_L2_calo_accept              ->clear();
+  m_trig_tdt_emu_L2_el_accept                ->clear();
+  m_trig_tdt_emu_EF_calo_accept              ->clear();
+  m_trig_tdt_emu_EF_el_accept                ->clear();
+  
+  ///Monte Carlo
+  m_mc_hasMC              = false;
+  m_mc_pt                 = -1;
+  m_mc_eta                = -1;
+  m_mc_phi                = -1;
+  m_mc_isTop              = false;
+  m_mc_isParton           = false;
+  m_mc_isMeson            = false;
+  m_mc_isTau              = false;
+  m_mc_isMuon             = false;
+  m_mc_isPhoton           = false;
+  m_mc_isElectron         = false;
+  m_mc_hasZMother         = false;
+  m_mc_hasWMother         = false;
+
+  /*
+  m_el_nblayerhits        =  0;
+  m_el_nblayerolhits      =  0;
+  m_el_npixhits           =  0;
+  m_el_npixolhits         =  0;
+  m_el_nscthits           =  0;
+  m_el_nsctolhits         =  0;
+  m_el_ntrthightreshits   =  0;
+  m_el_ntrthits           =  0;
+  m_el_ntrthighthresolhits=  0;
+  m_el_ntrtolhits         =  0;
+  m_el_ntrtxenonhits      =  0;
+  m_el_expectblayerhit    =  0;
+  m_el_nsihits            =  0;
+  m_el_nsideadsensors     =  0;
+  m_el_npixdeadsensors    =  0;
+  m_el_nsctdeadsensors    =  0;
+  */
+
+
+  /*  
+  m_trig_EF_el_nblayerhits                   ->clear();  
+  m_trig_EF_el_nblayerolhits                 ->clear(); 
+  m_trig_EF_el_npixhits                      ->clear();  
+  m_trig_EF_el_npixolhits                    ->clear();  
+  m_trig_EF_el_nscthits                      ->clear();  
+  m_trig_EF_el_nsctolhits                    ->clear();  
+  m_trig_EF_el_ntrthightreshits              ->clear();  
+  m_trig_EF_el_ntrthits                      ->clear();  
+  m_trig_EF_el_ntrthighthresolhits           ->clear();   
+  m_trig_EF_el_ntrtolhits                    ->clear();   
+  m_trig_EF_el_ntrtxenonhits                 ->clear(); 
+  m_trig_EF_el_expectblayerhit               ->clear(); 
+  m_trig_EF_el_npixdeadsensors               ->clear(); 
+  m_trig_EF_el_nsctdeadsensors               ->clear(); 
+  m_trig_EF_el_expectNextToInnerMostLayer    ->clear(); 
+  m_trig_EF_el_nNextToInnerMostLayerHits     ->clear(); 
+  m_trig_EF_el_nNextToInnerMostLayerOutliers ->clear(); 
+  */
+
+
+}
+
+void TrigEgammaPhysValBase::alloc_space(){
+  
+  m_el_ringsE                                 = new std::vector<float>();
+  m_el_trk_summaryValues                      = new std::vector<uint8_t>();     
+  m_el_etCone                                 = new std::vector<float>();     
+  m_el_ptCone                                 = new std::vector<float>();     
+
+
+  m_trig_L2_calo_energySample                 = new std::vector<float>();
+  m_trig_L2_calo_rings                        = new std::vector<float>();
+  m_trig_L2_calo_rnnOutput                    = new std::vector<float>();
+ 
+  m_trig_L2_el_trackAlgID                     = new std::vector<int>();
+  m_trig_L2_el_eta                            = new std::vector<float>();   
+  m_trig_L2_el_phi                            = new std::vector<float>();   
+  m_trig_L2_el_caloEta                        = new std::vector<float>();   
+  m_trig_L2_el_trkClusDeta                    = new std::vector<float>();
+  m_trig_L2_el_trkClusDphi                    = new std::vector<float>();
+  m_trig_L2_el_pt                             = new std::vector<float>();   
+  m_trig_L2_el_etOverPt                       = new std::vector<float>();           
+  m_trig_L2_el_nTRTHits                       = new std::vector<float>();         
+  m_trig_L2_el_nTRTHiThresholdHits            = new std::vector<float>();         
+  m_trig_L2_el_charge                         = new std::vector<float>();       
+  
+  m_trig_EF_calo_et                           = new std::vector<float>();     
+  m_trig_EF_calo_eta                          = new std::vector<float>();     
+  m_trig_EF_calo_phi                          = new std::vector<float>();     
+  m_trig_EF_calo_etaBE2                       = new std::vector<float>();     
+  m_trig_EF_calo_e                            = new std::vector<float>();     
+  
+  m_trig_EF_el_calo_et                        = new std::vector<float>();     
+  m_trig_EF_el_calo_eta                       = new std::vector<float>();     
+  m_trig_EF_el_calo_phi                       = new std::vector<float>();     
+  m_trig_EF_el_calo_etaBE2                    = new std::vector<float>();     
+  m_trig_EF_el_calo_e                         = new std::vector<float>();     
+  
+  m_trig_EF_el_hasCalo                        = new std::vector<bool>();
+  m_trig_EF_el_hasTrack                       = new std::vector<bool>();
+ 
+  m_trig_EF_el_et                             = new std::vector<float>();     
+  m_trig_EF_el_eta                            = new std::vector<float>();     
+  m_trig_EF_el_phi                            = new std::vector<float>();     
+  m_trig_EF_el_e                              = new std::vector<float>();     
+  m_trig_EF_el_deltaE                         = new std::vector<float>();     
+  m_trig_EF_el_ethad1                         = new std::vector<float>();     
+  m_trig_EF_el_ehad1                          = new std::vector<float>();     
+  m_trig_EF_el_f1                             = new std::vector<float>();     
+  m_trig_EF_el_f3                             = new std::vector<float>();     
+  m_trig_EF_el_f1core                         = new std::vector<float>();     
+  m_trig_EF_el_f3core                         = new std::vector<float>();     
+  m_trig_EF_el_weta1                          = new std::vector<float>();     
+  m_trig_EF_el_weta2                          = new std::vector<float>();     
+  m_trig_EF_el_wtots1                         = new std::vector<float>();     
+  m_trig_EF_el_fracs1                         = new std::vector<float>();     
+  m_trig_EF_el_e277                           = new std::vector<float>();     
+  m_trig_EF_el_Reta                           = new std::vector<float>();     
+  m_trig_EF_el_Rphi                           = new std::vector<float>();     
+  m_trig_EF_el_Eratio                         = new std::vector<float>();     
+  m_trig_EF_el_Rhad                           = new std::vector<float>();     
+  m_trig_EF_el_Rhad1                          = new std::vector<float>();     
+  m_trig_EF_el_deta2                          = new std::vector<float>();     
+  m_trig_EF_el_dphi2                          = new std::vector<float>();     
+  m_trig_EF_el_dphiresc                       = new std::vector<float>();     
+  m_trig_EF_el_deltaPhiRescaled2              = new std::vector<float>();   
+  m_trig_EF_el_deltaEta1                      = new std::vector<float>();     
+  m_trig_EF_el_etCone                         = new std::vector<float>();     
+  m_trig_EF_el_ptCone                         = new std::vector<float>();     
+
+  m_trig_EF_el_trk_pt                         = new std::vector<float>();     
+  m_trig_EF_el_trk_eta                        = new std::vector<float>();     
+  m_trig_EF_el_trk_charge                     = new std::vector<float>();     
+  m_trig_EF_el_trk_qOverP                     = new std::vector<float>();     
+  m_trig_EF_el_trk_sigd0                      = new std::vector<float>();     
+  m_trig_EF_el_trk_d0                         = new std::vector<float>();     
+  m_trig_EF_el_trk_eProbabilityHT             = new std::vector<float>();   
+  m_trig_EF_el_trk_transformed_eProbabilityHT = new std::vector<float>();   
+  m_trig_EF_el_trk_d0significance             = new std::vector<float>();     
+  m_trig_EF_el_trk_deltaPOverP                = new std::vector<float>();     
+  m_trig_EF_el_trk_summaryValues              = new std::vector<uint8_t>();     
+  
+  m_trig_EF_calo_tight                        = new std::vector<bool>();
+  m_trig_EF_calo_medium                       = new std::vector<bool>();
+  m_trig_EF_calo_loose                        = new std::vector<bool>();
+  m_trig_EF_calo_lhtight                      = new std::vector<bool>();
+  m_trig_EF_calo_lhmedium                     = new std::vector<bool>();
+  m_trig_EF_calo_lhloose                      = new std::vector<bool>();
+  m_trig_EF_calo_lhvloose                     = new std::vector<bool>();
+  
+  m_trig_EF_el_tight                          = new std::vector<bool>();
+  m_trig_EF_el_medium                         = new std::vector<bool>();
+  m_trig_EF_el_loose                          = new std::vector<bool>();
+  m_trig_EF_el_lhtight                        = new std::vector<bool>();
+  m_trig_EF_el_lhmedium                       = new std::vector<bool>();
+  m_trig_EF_el_lhloose                        = new std::vector<bool>();
+  m_trig_EF_el_lhvloose                       = new std::vector<bool>();
+  
+  m_trig_tdt_L1_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_L2_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_L2_el_accept                     = new std::vector<int>();
+  m_trig_tdt_EF_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_EF_el_accept                     = new std::vector<int>();
+
+  m_trig_tdt_emu_L1_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_emu_L2_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_emu_L2_el_accept                     = new std::vector<int>();
+  m_trig_tdt_emu_EF_calo_accept                   = new std::vector<int>();
+  m_trig_tdt_emu_EF_el_accept                     = new std::vector<int>();
+
+
+
+  /*
+  m_trig_EF_el_nblayerhits                    = new std::vector<uint8_t>();     
+  m_trig_EF_el_nblayerolhits                  = new std::vector<uint8_t>();   
+  m_trig_EF_el_npixhits                       = new std::vector<uint8_t>();     
+  m_trig_EF_el_npixolhits                     = new std::vector<uint8_t>();     
+  m_trig_EF_el_nscthits                       = new std::vector<uint8_t>();     
+  m_trig_EF_el_nsctolhits                     = new std::vector<uint8_t>();     
+  m_trig_EF_el_ntrthightreshits               = new std::vector<uint8_t>();     
+  m_trig_EF_el_ntrthits                       = new std::vector<uint8_t>();     
+  m_trig_EF_el_ntrthighthresolhits            = new std::vector<uint8_t>();      
+  m_trig_EF_el_ntrtolhits                     = new std::vector<uint8_t>();      
+  m_trig_EF_el_ntrtxenonhits                  = new std::vector<uint8_t>(); 
+  m_trig_EF_el_expectblayerhit                = new std::vector<uint8_t>();
+  m_trig_EF_el_npixdeadsensors                = new std::vector<uint8_t>(); 
+  m_trig_EF_el_nsctdeadsensors                = new std::vector<uint8_t>(); 
+  m_trig_EF_el_expectNextToInnerMostLayer     = new std::vector<uint8_t>(); 
+  m_trig_EF_el_nNextToInnerMostLayerHits      = new std::vector<uint8_t>(); 
+  m_trig_EF_el_nNextToInnerMostLayerOutliers  = new std::vector<uint8_t>();
+  */
+
+ 
+}
+
+void TrigEgammaPhysValBase::release_space(){
+  
+  delete m_el_ringsE            ;
+  delete m_el_trk_summaryValues ;     
+  delete m_el_etCone            ;     
+  delete m_el_ptCone            ;     
+
+
+  
+  //delete m_trig_L1_thrNames       ;
+  delete m_trig_L2_calo_energySample;
+  delete m_trig_L2_calo_rings     ;
+  delete m_trig_L2_calo_rnnOutput ;
+  delete m_trig_L2_el_trackAlgID  ;
+  delete m_trig_L2_el_pt          ;  
+  delete m_trig_L2_el_eta         ;   
+  delete m_trig_L2_el_caloEta     ;   
+  delete m_trig_L2_el_phi         ;   
+  delete m_trig_L2_el_charge      ;       
+  delete m_trig_L2_el_nTRTHits    ;         
+  delete m_trig_L2_el_nTRTHiThresholdHits    ;         
+  delete m_trig_L2_el_etOverPt    ;           
+  delete m_trig_L2_el_trkClusDeta ;
+  delete m_trig_L2_el_trkClusDphi ;
+  
+  delete m_trig_EF_calo_et                        ;     
+  delete m_trig_EF_calo_eta                       ;     
+  delete m_trig_EF_calo_phi                       ;     
+  delete m_trig_EF_calo_etaBE2                    ;     
+  delete m_trig_EF_calo_e                         ;     
+  
+  delete m_trig_EF_el_calo_et                        ;     
+  delete m_trig_EF_el_calo_eta                       ;     
+  delete m_trig_EF_el_calo_phi                       ;     
+  delete m_trig_EF_el_calo_etaBE2                    ;     
+  delete m_trig_EF_el_calo_e                         ;     
+ 
+  delete m_trig_EF_el_et                             ;     
+  delete m_trig_EF_el_eta                            ;     
+  delete m_trig_EF_el_phi                            ;     
+  delete m_trig_EF_el_e                              ;     
+  delete m_trig_EF_el_deltaE                         ;     
+  delete m_trig_EF_el_ethad1                         ;     
+  delete m_trig_EF_el_ehad1                          ;     
+  delete m_trig_EF_el_f1                             ;     
+  delete m_trig_EF_el_f3                             ;     
+  delete m_trig_EF_el_f1core                         ;     
+  delete m_trig_EF_el_f3core                         ;     
+  delete m_trig_EF_el_weta1                          ;     
+  delete m_trig_EF_el_weta2                          ;     
+  delete m_trig_EF_el_wtots1                         ;     
+  delete m_trig_EF_el_fracs1                         ;     
+  delete m_trig_EF_el_e277                           ;     
+  delete m_trig_EF_el_Reta                           ;     
+  delete m_trig_EF_el_Rphi                           ;     
+  delete m_trig_EF_el_Eratio                         ;     
+  delete m_trig_EF_el_Rhad                           ;     
+  delete m_trig_EF_el_Rhad1                          ;     
+  delete m_trig_EF_el_deta2                          ;     
+  delete m_trig_EF_el_dphi2                          ;     
+  delete m_trig_EF_el_dphiresc                       ;     
+  delete m_trig_EF_el_deltaPhiRescaled2              ;   
+  delete m_trig_EF_el_deltaEta1                      ;     
+  delete m_trig_EF_el_etCone                         ;     
+  delete m_trig_EF_el_ptCone                         ;     
+
+  delete m_trig_EF_el_trk_pt                         ;     
+  delete m_trig_EF_el_trk_eta                        ;     
+  delete m_trig_EF_el_trk_charge                     ;     
+  delete m_trig_EF_el_trk_qOverP                     ;     
+  delete m_trig_EF_el_trk_sigd0                      ;     
+  delete m_trig_EF_el_trk_d0                         ;     
+  delete m_trig_EF_el_trk_eProbabilityHT             ;   
+  delete m_trig_EF_el_trk_transformed_eProbabilityHT ;   
+  delete m_trig_EF_el_trk_d0significance             ;     
+  delete m_trig_EF_el_trk_deltaPOverP                ;     
+  delete m_trig_EF_el_trk_summaryValues              ;     
+  
+  /*
+  delete m_trig_EF_el_nblayerhits                    ;     
+  delete m_trig_EF_el_nblayerolhits                  ;   
+  delete m_trig_EF_el_npixhits                       ;     
+  delete m_trig_EF_el_npixolhits                     ;     
+  delete m_trig_EF_el_nscthits                       ;     
+  delete m_trig_EF_el_nsctolhits                     ;     
+  delete m_trig_EF_el_ntrthightreshits               ;     
+  delete m_trig_EF_el_ntrthits                       ;     
+  delete m_trig_EF_el_ntrthighthresolhits            ;      
+  delete m_trig_EF_el_ntrtolhits                     ;      
+  delete m_trig_EF_el_ntrtxenonhits                  ; 
+  delete m_trig_EF_el_expectblayerhit                ;
+  delete m_trig_EF_el_npixdeadsensors                ; 
+  delete m_trig_EF_el_nsctdeadsensors                ; 
+  delete m_trig_EF_el_expectNextToInnerMostLayer     ; 
+  delete m_trig_EF_el_nNextToInnerMostLayerHits      ; 
+  delete m_trig_EF_el_nNextToInnerMostLayerOutliers  ;
+  */
+  delete m_trig_EF_calo_tight                        ;
+  delete m_trig_EF_calo_medium                       ;
+  delete m_trig_EF_calo_loose                        ;
+  delete m_trig_EF_calo_lhtight                      ;
+  delete m_trig_EF_calo_lhmedium                     ;
+  delete m_trig_EF_calo_lhloose                      ;
+  delete m_trig_EF_calo_lhvloose                     ;
+  delete m_trig_EF_el_tight                          ;
+  delete m_trig_EF_el_medium                         ;
+  delete m_trig_EF_el_loose                          ;
+  delete m_trig_EF_el_lhtight                        ;
+  delete m_trig_EF_el_lhmedium                       ;
+  delete m_trig_EF_el_lhloose                        ;
+  delete m_trig_EF_el_lhvloose                       ;
+  
+  delete m_trig_tdt_L1_calo_accept                   ;
+  delete m_trig_tdt_L2_calo_accept                   ;
+  delete m_trig_tdt_L2_el_accept                     ;
+  delete m_trig_tdt_EF_calo_accept                   ;
+  delete m_trig_tdt_EF_el_accept                     ;
+  delete m_trig_tdt_emu_L1_calo_accept                   ;
+  delete m_trig_tdt_emu_L2_calo_accept                   ;
+  delete m_trig_tdt_emu_L2_el_accept                     ;
+  delete m_trig_tdt_emu_EF_calo_accept                   ;
+  delete m_trig_tdt_emu_EF_el_accept                     ;
+
+
+
+  delete m_trig_EF_el_hasCalo                        ;
+  delete m_trig_EF_el_hasTrack                       ;
+ 
+
+}
+
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
index 1b1436394b59..776849479e81 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
@@ -135,6 +135,8 @@ void TrigEgammaPlotTool::setBinning(){
     m_defaultEtabins.clear();
     m_coarseEtbins.clear();
     m_coarseEtabins.clear();
+    m_ringerEtbins.clear();
+    m_ringerEtabins.clear();
 
     // Binning as defined in TP framework
     double coarse_eta_bins[9] ={-2.47,-1.52,-1.37,-0.60,0.00,0.60,1.37,1.52,2.47};
@@ -161,23 +163,10 @@ void TrigEgammaPlotTool::setBinning(){
         20,20.5,21,21.5,22,22.5,23,23.5,24,24.5,
         25,25.5};
 
-    /* Ringer bins pdfs for each layer */
-    m_minBin_ringer.assign
-      ({-500 ,-500 ,-1000,-1500,-1500,-1000,-1000,-1000,-500 ,-500 ,-500 ,-500 ,-500 ,-500 ,-500 ,-800,
-          -800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800,
-          -800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800,
-          -800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800,
-          -800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-800 ,-500 ,-500 ,-500 ,-500 ,-1000,-1000,-1000,-500,
-          -500 ,-500 ,-500 ,-500 ,-500 ,-500 ,-500 ,-500 ,-600 ,-1000,-1500,-2000,-400 ,-1000,-1500,-1500,
-          -1000,-2000,-2000,-2000});
-    m_maxBin_ringer.assign
-      ({9000 , 7000, 2000, 2000, 2000, 2000, 2000, 2000, 20000, 20000, 6000, 4000, 3000, 2000, 2000, 800,
-          800  , 800 , 800 , 800 , 800 , 800 , 800 , 800 , 800  , 800  , 800 , 800 , 800 , 800 , 800 , 800,
-          800  , 800 , 800 , 800 , 800 , 800 , 800 , 800 , 800  , 800  , 800 , 800 , 800 , 800 , 800 , 800,
-          800  , 800 , 800 , 800 , 800 , 800 , 800 , 800 , 800  , 800  , 800 , 800 , 800 , 800 , 800 , 800,
-          800  , 800 , 800 , 800 , 800 , 800 , 800 , 800 , 40000, 40000, 6000, 4000, 2000, 2000, 2000, 2000,
-          500  , 500 , 500 , 500 , 500 , 500  ,500  , 500 , 3000 , 3000 , 3000 ,3000, 2000, 2000, 2000, 2000,
-          8000, 5000 ,4000 ,3000});
+    //float ringer_eta_bins[10]={0.00, 0.60, 0.80, 1.15, 1.37, 1.54, 1.81, 2.01, 2.37, 2.47};
+    //float ringer_et_bins[9]  ={4.00,7.00,10.0,15.0,20.0,30.0,40.0,50.0,50000.};
+    float ringer_thres_et_bins[6]={15.,20.,30.,40.,50.,50000.};
+    float ringer_thres_eta_bins[6]={0.,0.8,1.37,1.54,2.37,2.5};
 
     if(m_doJpsiee){
         m_nEtbins=51;
@@ -204,6 +193,8 @@ void TrigEgammaPlotTool::setBinning(){
     m_defaultEtabins.insert(m_defaultEtabins.end(), &default_eta_bins[0], &default_eta_bins[m_ndefaultEtabins+1]);
     m_coarseEtbins.insert(m_coarseEtbins.end(), &coarse_et_bins[0], &coarse_et_bins[m_ncoarseEtbins+1]);
     m_coarseEtabins.insert(m_coarseEtabins.end(), &coarse_eta_bins[0], &coarse_eta_bins[m_ncoarseEtabins+1]);
+    m_ringerEtbins.insert(m_ringerEtbins.end(), &ringer_thres_et_bins[0], &ringer_thres_et_bins[6]);
+    m_ringerEtabins.insert(m_ringerEtabins.end(), &ringer_thres_eta_bins[0], &ringer_thres_eta_bins[6]);
 }
 
 StatusCode TrigEgammaPlotTool::book(std::map<std::string,TrigInfo> trigInfo){
@@ -624,8 +615,8 @@ void TrigEgammaPlotTool::bookAbsResolutionHistos(const std::string directory){
     cd(directory);    
     addHistogram(new TH1F("res_pt", "HLT p_{T} resolution; (p_{T}(on)-p_{T}(off)) ; Count", 200, -1.5, 1.5));
     addHistogram(new TH1F("res_et", "HLT E_{T} resolution; (E_{T}(on)-E_{T}(off)) ; Count", 200, -0.5, 0.5));
-    addHistogram(new TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off)) ; Count", 40, -0.2, 0.2));
-    addHistogram(new TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off)) ; Count", 40, -0.2, 0.2));
+    addHistogram(new TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off)) ; Count", 40, -0.001, 0.001));
+    addHistogram(new TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off)) ; Count", 40, -0.001, 0.001));
 
     addHistogram(new TH2F("res_etVsEta", "HLT E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off)); Count",
                 50, -2.47, 2.47,
@@ -699,8 +690,8 @@ void TrigEgammaPlotTool::bookAbsResolutionHistos(const std::string directory){
 void TrigEgammaPlotTool::bookResolutionHistos(const std::string directory){
     cd(directory);
     addHistogram(new TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1));
-    addHistogram(new TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off))/#eta(off) ; Count", 40, -0.2, 0.2));
-    addHistogram(new TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off))/#phi(off) ; Count", 40, -0.2, 0.2));
+    addHistogram(new TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off))/#eta(off) ; Count", 40, -0.001, 0.001));
+    addHistogram(new TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off))/#phi(off) ; Count", 40, -0.001, 0.001));
     addHistogram(new TH2F("res_etVsEta", "E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count",
                 25, -2.5, 2.5,
                 50, -0.1, 0.1));
@@ -834,12 +825,18 @@ void TrigEgammaPlotTool::bookPhotonIsoResolutionHistos(const std::string directo
     addHistogram(new TH2F("res_topoetcone20_relVsMu", "HLT topoetcone20/pt resolution as function of avg #mu; #mu; (on-off)/off; Count",
                 50, 0, 100,
                 100, -0.1, 0.1));
-    addHistogram(new TH2F("res_topoetcone20_onVsOff", "online topoetcone20 vs offline topoetcone20; offline [MeV]; online [MeV]; Count",
-                100, 0.0, 10000.0,
-                100, 0.0, 10000.0));
+    addHistogram(new TH2F("res_topoetcone20_onVsOff", "online topoetcone20 vs offline topoetcone20; offline [GeV]; online [GeV]; Count",
+                100, -10.0, 10.0,
+                100, -10.0, 10.0));
     addHistogram(new TH2F("res_topoetcone20_rel_onVsOff", "online topoetcone20/pt vs offline topoetcone20/pt; offline; online; Count",
-                100, 0.0, 0.2,
-                100, 0.0, 0.2));
+                100, -0.5, 0.5,
+                100, -0.5, 0.5));
+    addHistogram(new TH2F("res_topoetcone40_shift_onVsOff", "online topoetcone40-2.45 GeV vs offline topoetcone40-2.45 GeV; offline [GeV]; online [GeV]; Count",
+                100, -10.0, 10.0,
+                100, -10.0, 10.0));
+    addHistogram(new TH2F("res_topoetcone40_shift_rel_onVsOff", "online (topoetcone40-2.45 GeV)/pt vs offline (topoetcone40-2.45 GeV)/pt; offline; online; Count",
+                100, -0.5, 0.5,
+                100, -0.5, 0.5));
 }
 
 void TrigEgammaPlotTool::bookExpertResolutionHistos(const std::string directory){
@@ -1033,8 +1030,10 @@ void TrigEgammaPlotTool::bookEgammaDistributionHistos(const std::string director
     addHistogram(new TH1F("Rhad", "Rhad; Rhad ; Count", 35, -0.3, 0.3));
     addHistogram(new TH1F("Rhad1", "Rhad1; Rhad1 ; Count", 30, -0.3, 0.3));
     addHistogram(new TH1F("eratio","eratio; eratio; Count",20, 0, 2));
-    addHistogram(new TH1F("topoetcone20", "topoetcone20; topoetcone20; Count", 50, 0.0, 5.0));
-    addHistogram(new TH1F("topoetcone20_rel", "topoetcone20/pt; topoetcone20/pt; Count", 50, 0.0, 1.0));
+    addHistogram(new TH1F("topoetcone20", "topoetcone20; topoetcone20 [GeV] ; Count", 100, -10.0, 10.0));
+    addHistogram(new TH1F("topoetcone20_rel", "topoetcone20/pt; topoetcone20/pt ; Count", 100, -0.5, 0.5));
+    addHistogram(new TH1F("topoetcone40_shift", "topoetcone40-2.45 GeV; topoetcone40-2.45 GeV [GeV] ; Count", 100, -10.0, 10.0));
+    addHistogram(new TH1F("topoetcone40_shift_rel", "(topoetcone40-2.45 GeV)/pt; (topoetcone40-2.45 GeV)/pt ; Count", 100, -0.5, 0.5));
 }
 
 void TrigEgammaPlotTool::bookElectronDistributionHistos(const std::string directory){
@@ -1185,6 +1184,32 @@ void TrigEgammaPlotTool::bookL1Histos(TrigInfo trigInfo){
 
 }
 
+void TrigEgammaPlotTool::bookRnnDistributionHistos(const std::string dir)
+{
+    cd(dir);
+    //addHistogram(new TH2F("RingerShapes","RingerShapes;E_{t};#rings;Count",21000,-1000,20000,100,0,100));
+    addHistogram(new TH1F("discriminant","discriminant(integrated);discriminant(ringer);Count",95,-12,7));
+    addHistogram(new TH2F("discriminantVsMu","discriminantVsMu(integrated);discriminant(ringer);avgmu;Count",95,-12,7,16,0,70));
+    addDirectory(dir+"/discriminant_binned");
+    for(unsigned etBinIdx=0; etBinIdx<m_ringerEtbins.size()-1; ++etBinIdx){
+      for(unsigned etaBinIdx=0; etaBinIdx<m_ringerEtabins.size()-1; ++etaBinIdx){
+        std::stringstream ss1,ss2,ss3,ss4;
+        ss1 << "discriminant_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
+        ss2       << m_ringerEtabins[etaBinIdx]<<"<=|#eta|<"<< m_ringerEtabins[etaBinIdx+1] <<
+          " and " << m_ringerEtbins[etBinIdx]<< "<=E_{t}<"<< m_ringerEtbins[etBinIdx+1] <<
+          ";discriminant(ringer);Count";
+        
+        addHistogram(new TH1F(ss1.str().c_str(),ss2.str().c_str(),95,-12.,7.));
+        ss3 << "discriminantVsMu_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
+        ss4       << m_ringerEtabins[etaBinIdx]<<"<=|#eta|<"<< m_ringerEtabins[etaBinIdx+1] <<
+          " and " << m_ringerEtbins[etBinIdx]<< "<=E_{t}<"<< m_ringerEtbins[etBinIdx+1] <<
+          ";discriminant(ringer);Avgmu;Count";
+        addHistogram(new TH2F(ss3.str().c_str(),ss4.str().c_str(),95,-12.,7.,16,0.,70.));
+      }
+    }
+
+}
+
 void TrigEgammaPlotTool::bookExpertHistos(TrigInfo trigInfo){
     
     const std::string basePath=m_baseDir+"/Expert/"+trigInfo.trigName;
@@ -1337,29 +1362,7 @@ void TrigEgammaPlotTool::bookExpertHistos(TrigInfo trigInfo){
     dirname=basePath + "/Distributions/L2Calo";
     dirnames.push_back(dirname);
     addDirectory(dirname);
-
-    // Store ringer in trigInfo
-    if(boost::contains(trigInfo.trigName,"ringer") || trigInfo.trigEtcut || trigInfo.trigPerf){ 
-        addHistogram(new TH1F("ringer_nnOutput", "Discriminator distribution; nnOutput ; Count", 100, -1, 1));
-        addHistogram(new TH2F("ringer_etVsEta", "ringer count as function of #eta and E_{t}; #eta; E_{t} [GeV]; Count",
-                     m_ndefaultEtabins,m_defaultEtabins.data(), m_ndefaultEtbins, m_defaultEtbins.data() ));
-        if(m_detailedHists){
-            unsigned rCount=0; 
-            for(unsigned layer =0; layer < 7; ++layer){
-                unsigned minRing, maxRing;  std::string strLayer;
-                parseCaloRingsLayers( layer, minRing, maxRing, strLayer );
-                addDirectory(dirname+"/rings_"+strLayer);
-                for(unsigned r=minRing; r<=maxRing; ++r){
-                    std::stringstream ss_title, ss;
-                    ss_title << "ringer_ring#" << r;  ss << "L2Calo ringer ("<< strLayer <<"); ring#" << r << " E [MeV]; Count";
-                    addHistogram(new TH1F(ss_title.str().c_str(), ss.str().c_str(), 100, m_minBin_ringer[rCount], m_maxBin_ringer[rCount]));
-                    rCount++;
-                }
-            }///Loop for each calo layers    
-        }
-    }
-
-
+    bookRnnDistributionHistos(dirname);
 
     //Book the kinematic plots for each trigger level
     for(const auto dir:dirnames) 
@@ -1376,7 +1379,7 @@ void TrigEgammaPlotTool::bookExpertHistos(TrigInfo trigInfo){
     }
     if(trigInfo.trigType=="photon"){
         bookPhotonResolutionHistos(dirname);
-        if(boost::contains(trigInfo.trigName,"iloose"))
+        if(boost::contains(trigInfo.trigName,"icaloloose") ||boost::contains(trigInfo.trigName,"icalovloose") || boost::contains(trigInfo.trigName,"icalotight"))
             bookPhotonIsoResolutionHistos(dirname);
     }
     
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
index c2d851d919f7..66e0a7441e5d 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
@@ -47,6 +47,7 @@ StatusCode TrigEgammaResolutionTool::toolExecute(const std::string basePath,Trig
     const std::string dir = basePath+"/"+info.trigName;
     bool filliso=false;
     if(boost::contains(info.trigName,"iloose") || boost::contains(info.trigName,"ivarloose")) filliso=true;
+    if(boost::contains(info.trigName,"icaloloose") || boost::contains(info.trigName,"icalovloose") || boost::contains(info.trigName,"icalotight")) filliso=true;
     ATH_MSG_DEBUG("Executing resolution for " << dir);
     for(const auto pairObj : pairObjs){
         const xAOD::Egamma* eg =pairObj.first;
@@ -142,14 +143,17 @@ void TrigEgammaResolutionTool::resolutionElectron(const std::string basePath,std
 
 void TrigEgammaResolutionTool::resolutionL2Photon(const std::string dir,std::pair< const xAOD::Egamma*,const HLT::TriggerElement*> pairObj){
     cd(dir);
+    ATH_MSG_DEBUG("L2 Photon Resolution");
     float dRmax = 100;
     const xAOD::TrigPhoton *phL2 = nullptr;
-    if(pairObj.second){
-        if(ancestorPassed<xAOD::TrigPhotonContainer>(pairObj.second))
-            phL2=closestObject<xAOD::TrigPhoton,xAOD::TrigPhotonContainer>(pairObj,dRmax);
-        if(phL2){    
-            if(dRmax < 0.05){
-                //Do something here
+    if(getSGContainsTrigPhoton()){
+        if(pairObj.second){
+            if(ancestorPassed<xAOD::TrigPhotonContainer>(pairObj.second))
+                phL2=closestObject<xAOD::TrigPhoton,xAOD::TrigPhotonContainer>(pairObj,dRmax);
+            if(phL2){    
+                if(dRmax < 0.05){
+                    //Do something here
+                }
             }
         }
     }
@@ -498,8 +502,6 @@ void TrigEgammaResolutionTool::fillIsolationResolution(const std::string dir,con
         float etoff=off->pt();
         if (val_off > 0.) {
             hist1("res_topoetcone20")->Fill((getIsolation_topoetcone20(onl)-val_off)/val_off);
-            hist2("res_topoetcone20_onVsOff")->Fill(getIsolation_topoetcone20(off),
-                    getIsolation_topoetcone20(onl));
             if (etonl > 0. && etoff > 0.) {
                 const float reliso_onl=getIsolation_topoetcone20(onl)/etonl;
                 const float reliso_off=getIsolation_topoetcone20(off)/etoff;
@@ -512,10 +514,18 @@ void TrigEgammaResolutionTool::fillIsolationResolution(const std::string dir,con
                         (reliso_onl-reliso_off)/reliso_off);
                 hist2("res_topoetcone20VsMu")->Fill(getAvgMu(),
                         (reliso_onl-reliso_off)/reliso_off);
-                hist2("res_topoetcone20_rel_onVsOff")->Fill(getIsolation_topoetcone20(off)/etoff,
-                        getIsolation_topoetcone20(onl)/etonl);
             }
         }
+        hist2("res_topoetcone20_onVsOff")->Fill(getIsolation_topoetcone20(off)/1e3,
+                    getIsolation_topoetcone20(onl)/1e3);
+        hist2("res_topoetcone40_shift_onVsOff")->Fill((getIsolation_topoetcone40(off)-2450)/1e3,
+                    (getIsolation_topoetcone40(onl)-2450)/1e3);
+        if (etonl > 0. && etoff > 0.) {
+            hist2("res_topoetcone20_rel_onVsOff")->Fill(getIsolation_topoetcone20(off)/etoff,
+                        getIsolation_topoetcone20(onl)/etonl);
+            hist2("res_topoetcone40_shift_rel_onVsOff")->Fill((getIsolation_topoetcone40(off)-2450)/etoff,
+                        (getIsolation_topoetcone40(onl)-2450)/etonl);
+        }
     }
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
index 366d3441c265..2b201ce53549 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
@@ -42,6 +42,8 @@ public:
   virtual void setEmulationTool(ToolHandle<Trig::ITrigEgammaEmulationTool>)=0;
   virtual void setAvgMu(const float, const float)=0;
   virtual void setPVertex(const float, const float)=0;
+  virtual void setSGContainsRnn(bool)=0;
+  virtual void setSGContainsTrigPhoton(bool)=0; 
   
   virtual StatusCode childInitialize(){return StatusCode::SUCCESS;};
   virtual StatusCode childBook(){return StatusCode::SUCCESS;};
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
index 5a67bcefb1e4..2057c3376397 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
@@ -27,20 +27,16 @@
 #include "xAODEgamma/ElectronAuxContainer.h"
 #include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRingerRingsContainer.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTrigger/TrigPassBits.h"
 #include "xAODEgamma/PhotonAuxContainer.h"
-
-/*
- Ringer offline to be include for future
-/////////////////////////////////////////////////////////
-#include "xAODCaloRings/RingSet.h"                     //
-#include "xAODCaloRings/RingSetContainer.h"            //
-#include "xAODCaloRings/CaloRings.h"                   //
-#include "xAODCaloRings/CaloRingsContainer.h"          //
-#include "xAODCaloRings/tools/getCaloRingsDecorator.h" //
-/////////////////////////////////////////////////////////
-*/
+#include "xAODCaloRings/RingSet.h"                     
+#include "xAODCaloRings/RingSetContainer.h"            
+#include "xAODCaloRings/CaloRings.h"                   
+#include "xAODCaloRings/CaloRingsContainer.h"          
+#include "xAODCaloRings/tools/getCaloRingsDecorator.h" 
 
 class TrigEgammaAnalysisBaseTool
 : public asg::AsgTool,
@@ -50,12 +46,12 @@ ASG_TOOL_CLASS(TrigEgammaAnalysisBaseTool, ITrigEgammaAnalysisBaseTool)
 public:
 
   TrigEgammaAnalysisBaseTool( const std::string& myname);
-  virtual ~TrigEgammaAnalysisBaseTool() {};
+  ~TrigEgammaAnalysisBaseTool() {};
 
-  virtual StatusCode initialize() override;
-  virtual StatusCode book() override;
-  virtual StatusCode execute() override;
-  virtual StatusCode finalize() override;
+  StatusCode initialize() ;
+  StatusCode book() ;
+  StatusCode execute() ;
+  StatusCode finalize() ;
   template<class T, class B> std::unique_ptr<xAOD::TrigPassBits> createBits(const T* CONT, const B* BITS);
   template<class T> std::unique_ptr<xAOD::TrigPassBits> getBits(const HLT::TriggerElement* te,const T* CONT);
   template<class T> const T* getFeature(const HLT::TriggerElement* te,const std::string key="");
@@ -63,15 +59,18 @@ public:
   template <class T1, class T2> const T1* closestObject(const std::pair<const xAOD::Egamma *, const HLT::TriggerElement *>, 
                                                         float &, bool usePassbits=true,const std::string key="");
   // Interface class methods needed to pass information to additional tools or to set common tools
-  virtual void setParent(IHLTMonTool *parent) override { m_parent = parent;};
-  virtual void setPlotTool(ToolHandle<ITrigEgammaPlotTool> tool) override {m_plot=tool;}
-  virtual void setDetail(bool detail) override {m_detailedHists=detail;}
-  virtual void setTP(bool tp) override {m_tp=tp;}
-  virtual void setEmulation(bool doEmu) override {m_doEmulation=doEmu;}
-  virtual void setEmulationTool(ToolHandle<Trig::ITrigEgammaEmulationTool> tool) override {m_emulationTool=tool;}
-  virtual void setPVertex(const float onvertex, const float ngoodvertex) override {m_nPVertex = onvertex; m_nGoodVertex = ngoodvertex;}
-  virtual void setAvgMu(const float onlmu, const float offmu) override {m_onlmu=onlmu; m_offmu=offmu;} //For tools called by tools
-
+  void setParent(IHLTMonTool *parent)  { m_parent = parent;};
+  void setPlotTool(ToolHandle<ITrigEgammaPlotTool> tool)  {m_plot=tool;}
+  void setDetail(bool detail)  {m_detailedHists=detail;}
+  void setTP(bool tp)  {m_tp=tp;}
+  void setEmulation(bool doEmu)  {m_doEmulation=doEmu;}
+  void setEmulationTool(ToolHandle<Trig::ITrigEgammaEmulationTool> tool)  {m_emulationTool=tool;}
+  void setPVertex(const float onvertex, const float ngoodvertex)  {m_nPVertex = onvertex; m_nGoodVertex = ngoodvertex;}
+  void setAvgMu(const float onlmu, const float offmu)  {m_onlmu=onlmu; m_offmu=offmu;} //For tools called by tools
+  
+  void setSGContainsRnn(bool contains)  {m_sgContainsRnn=contains;}
+  void setSGContainsTrigPhoton(bool contains)  {m_sgContainsTrigPhoton=contains;}
+  
   // Set current MonGroup
   void cd(const std::string &dir);
   // Accessor members
@@ -112,7 +111,10 @@ private:
   float m_offmu;
   float m_nGoodVertex; 
   float m_nPVertex;
- 
+  
+  /*! Hook to check for RNN features in SG */
+  bool m_sgContainsRnn;
+  bool m_sgContainsTrigPhoton;
   // Properties  
   ToolHandle<Trig::TrigDecisionTool> m_trigdec;
   ToolHandle<Trig::ITrigEgammaMatchingTool> m_matchTool;
@@ -137,6 +139,8 @@ protected:
   void bookAnalysisHistos(const std::string);
 
   void setTrigInfo(const std::string);
+  void setTrigEmulation(){m_forceTrigEmulation=true;};
+  
   TrigInfo getTrigInfo(const std::string);
   std::map<std::string,TrigInfo> getTrigInfoMap() { return m_trigInfo; }
  
@@ -169,7 +173,11 @@ protected:
   float getNPVtx(){return m_nPVertex;}
   float getNGoodVertex(){return m_nGoodVertex;}
  
-  /* trig rings and offline rings helper method for feature extraction from xaod */
+  /* Protection for Holders not in AOD */
+  bool getSGContainsRnn() { return m_sgContainsRnn;}
+  bool getSGContainsTrigPhoton() { return m_sgContainsTrigPhoton;}
+
+  /* trig rings and offline rings helper method for feature extraction from xaod */ 
   bool getCaloRings( const xAOD::Electron *, std::vector<float> & );
   bool getTrigCaloRings( const xAOD::TrigEMCluster *, std::vector<float> & );
   void parseCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, std::string &caloLayerName);
@@ -213,6 +221,11 @@ protected:
   bool m_tp;
   /*! Emulation Analysis */
   bool m_doEmulation;
+  /*! force emulation trigger */
+  bool m_forceTrigEmulation;
+  /* force trigger attachment into the list */
+  bool m_forceTrigAttachment;
+
   // Infra-structure members
   std::string m_file;
   /*! String for offline container key */
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
index 56a0eeb5119e..71379e7fec15 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
@@ -32,7 +32,8 @@ private:
   void fillEFCalo(const std::string,const xAOD::CaloCluster *);
   void fillL2Electron(const std::string,const xAOD::TrigElectron *);
   void fillL2Calo(const std::string,const xAOD::TrigEMCluster *);
-  void fillRinger(const std::string,const xAOD::TrigEMCluster *);
+  void fillRingerShapes(const std::string,const xAOD::TrigRingerRings *);
+  void fillRnnDistribution(const std::string,const xAOD::TrigRNNOutput *);
   void fillL1Calo(const std::string,const xAOD::EmTauRoI *);
    /*! Include more detailed histograms */
   bool m_detailedHists;
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
new file mode 100644
index 000000000000..294e43189f96
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
@@ -0,0 +1,129 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+#ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
+#define TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
+
+#include "TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h"
+#include "TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h"
+#include "xAODTracking/TrackParticle.h"
+#include "xAODTracking/Vertex.h"
+#include "xAODEventInfo/EventInfo.h"
+#include "xAODEgamma/EgammaEnums.h"
+#include "xAODTracking/TrackingPrimitives.h"
+#include <map>
+
+class TrigEgammaEventSelection : public TrigEgammaNavTPBaseTool, public TrigEgammaPhysValBase,
+                          virtual public ITrigEgammaAnalysisBaseTool
+{
+  ASG_TOOL_CLASS(TrigEgammaEventSelection, ITrigEgammaAnalysisBaseTool)
+
+  public:
+  
+    TrigEgammaEventSelection( const std::string& myname );
+    ~TrigEgammaEventSelection() {}; 
+    StatusCode childInitialize();
+    StatusCode childBook();
+    StatusCode childExecute();
+    StatusCode childFinalize();
+ 
+  private:
+    
+    /* Dump trigger and offline probe object */
+    bool EventSelectionZ();
+    bool EventSelectionFakes();
+
+    bool ApplyFireTriggers( const xAOD::Electron *el);
+    bool isTruthElectronAny(const xAOD::Egamma *eg );
+    
+    bool fill(TTree *t, const xAOD::Electron *el );
+
+    /* parse between objects and local variables connected to the 
+     * ttree pointer */
+    bool fillEvent        ( );
+    bool fillMonteCarlo   ( const xAOD::Egamma        *eg         );
+    bool fillElectron     ( const xAOD::Electron      *el         );
+    bool fillCaloRings    ( const xAOD::Electron      *el         );
+    bool fillEmTauRoI     ( const xAOD::EmTauRoI      *emTauRoI   );
+    bool fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster  );
+    bool fillTrigElectron ( const xAOD::TrigElectron  *trigEl     );
+    bool fillCaloCluster  ( const xAOD::CaloCluster   *cluster    );
+    bool fillAccept       ( const HLT::TriggerElement *           );
+    bool fillTrigCaloRings( const HLT::TriggerElement *feat       );
+    bool fillHLTElectron  ( const xAOD::Electron      *el         );
+    bool fillTDT          ( const xAOD::Electron      *el      , const HLT::TriggerElement *te   );
+
+    // Helper methods
+    double get_el_sigd0(const xAOD::Electron *el);
+    double get_el_d0(const xAOD::Electron *el);
+    double get_el_eProbabilityHT(const xAOD::Electron *el);
+    double get_el_transformed_eProbabilityHT(const xAOD::Electron *el);
+    double get_el_d0significance(const xAOD::Electron *el);
+    double get_el_deltaPhiRescaled2(const xAOD::Electron *el);
+    double get_el_deltaEta1(const xAOD::Electron *el);
+    double get_el_DeltaPOverP(const xAOD::Electron *el);
+
+
+  private:
+    
+    std::map<std::string, unsigned >m_countMap;
+
+    void count( std::string key ){
+      if(m_countMap.find(key) == m_countMap.end()){
+        m_countMap[key]= 1;
+      }else{
+        m_countMap[key]++;
+      }
+    }
+
+
+
+    // [*,*,HLT,EFCalo,L2,L2Calo,L1Calo,isGoodMatch]
+    //uint8_t GetByteFromBools(const bool eightBools[8])
+    int GetByteFromBools(const bool eightBools[8])
+    {
+      int ret = 0;
+      //uint8_t ret = 0;
+      for (int i=0; i<8; i++) if (eightBools[i] == true) ret |= (1<<i);
+      return ret;
+    }
+
+    //ToolHandleArray<ITrigEgammaEmulationTool>   m_emulationTools;
+
+    ToolHandleArray<IAsgElectronIsEMSelector>   m_EFCaloElectronIsEMSelectors;
+    ToolHandleArray<IAsgElectronIsEMSelector>   m_HLTElectronIsEMSelectors;
+    ToolHandleArray<IAsgElectronLikelihoodTool> m_EFCaloElectronLHSelectors;
+    ToolHandleArray<IAsgElectronLikelihoodTool> m_HLTElectronLHSelectors;
+    ToolHandle<IAsgElectronLikelihoodTool>      m_electronLHVLooseTool;
+
+    std::vector<std::string> m_supportingTrigList;
+    int  m_detailedDataLevel; 
+    bool m_selectionZ;
+    bool m_selectionW;
+    bool m_selectionMC;
+    bool m_selectionJpsi;
+    bool m_selectionFakes;
+    bool m_doCaloRings;
+    bool m_dumpTags;
+
+#define GETTER(_name_)  void get_##_name_(const xAOD::Electron*, float);
+  GETTER(trig_EF_calo_isLHTightCaloOnly_rel21_20170217 )
+  GETTER(trig_EF_calo_isLHMediumCaloOnly_rel21_20170217)
+  GETTER(trig_EF_calo_isLHLooseCaloOnly_rel21_20170217 )
+  GETTER(trig_EF_calo_isLHVLooseCaloOnly_rel21_20170217)
+  GETTER(trig_EF_el_isLHTight_rel21_20170217 )
+  GETTER(trig_EF_el_isLHMedium_rel21_20170217)
+  GETTER(trig_EF_el_isLHLoose_rel21_20170217 )
+  GETTER(trig_EF_el_isLHVLoose_rel21_20170217)
+  GETTER(trig_EF_el_isLHTightNoD0_rel21_20170217 )
+  GETTER(trig_EF_el_isLHMediumNoD0_rel21_20170217)
+  GETTER(trig_EF_el_isLHLooseNoD0_rel21_20170217 )
+  GETTER(trig_EF_el_isLHVLooseNoD0_rel21_20170217)
+#undef GETTER
+
+  
+};
+
+
+
+#endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaInfo.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaInfo.h
index b977da3bd5ac..8f6e1f62c7a2 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaInfo.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaInfo.h
@@ -16,6 +16,7 @@ typedef struct _triginfo
     bool trigEtcut; // Et cut only chain
     float trigThrHLT; // HLT Et threshold
     float trigThrL1; // L1 Et threshold
+    bool trigIsEmulation;
 } TrigInfo;
 
 // Enums
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
index 850ed18d98bd..9952cbcdc6ed 100755
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
@@ -26,6 +26,8 @@
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/TrackParticleAuxContainer.h"
 #include "xAODTrigCalo/TrigEMCluster.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODCaloEvent/CaloClusterContainer.h"
 #include "xAODCaloEvent/CaloClusterAuxContainer.h"
 #include "xAODJet/JetContainer.h"
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h
deleted file mode 100755
index 4383d5db040e..000000000000
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVNTUPLE_H
-#define TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVNTUPLE_H
-
-#include "TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h"
-#include "xAODTruth/TruthParticle.h"
-#include "xAODTruth/TruthParticleContainer.h"
-#include "xAODEventInfo/EventInfo.h"
-#include "xAODEgamma/EgammaEnums.h"
-#include "xAODTracking/TrackingPrimitives.h"
-
-class TrigEgammaNavNtuple : public TrigEgammaNavBaseTool,
-                          virtual public ITrigEgammaAnalysisBaseTool
-{
-  ASG_TOOL_CLASS(TrigEgammaNavNtuple, ITrigEgammaAnalysisBaseTool)
-
-  public:
-  
-    TrigEgammaNavNtuple( const std::string& myname );
-    ~TrigEgammaNavNtuple() {};
-    StatusCode childInitialize ();
-    StatusCode childBook();
-    StatusCode childExecute();
-    StatusCode childFinalize();
- 
-  private: 
-
-    /* Dump offline photons */
-    bool executePhotonDump();
-    /* Dump offline electrons */
-    bool executeElectronDump();
-    /* Dump Trigger, electron and photons matched with the trigger object */
-    bool executeTrigItemDump();
-    /* Dump using trigger supports */
-    bool executeTrigSupportDump();
-
-
-    /* helper function */ 
-    template <class T> void InitBranch(TTree* fChain, std::string branch_name, T* param, bool message = true);
-   
-    unsigned count_HLT_objects(const HLT::TriggerElement *);
-
-    /* Create branches */
-    void bookEventBranches( TTree *t );
-    void bookElectronBranches( TTree *t );
-    //void bookPhotonBranches( TTree *t );
-    void bookTriggerBranches( TTree *t );
-    void bookMonteCarloBranches( TTree *t );
-    
-    /* uses InitBranch to connect the local variable and ttree pointer */
-    void linkEventBranches( TTree *t);
-    void linkElectronBranches( TTree *t);
-    //void linkPhotonBranches( TTree *t);
-    void linkTriggerBranches( TTree *t);
-    void linkMonteCarloBranches( TTree *t);    
-    
-    /* parse between objects and local variables connected to the 
-     * ttree pointer */
-    bool fillEvent        ( );
-    bool fillMonteCarlo   ( const xAOD::Egamma        *eg );
-    bool fillElectron     ( const xAOD::Electron      *el );
-    //bool fillPhoton       ( const xAOD::Photon        *ph );
-    
-    bool fillCaloRings    ( const xAOD::Electron      *el         );
-    bool fillTrigCaloRings( const xAOD::TrigEMCluster *emCluster  );
-    bool fillEmTauRoI     ( const xAOD::EmTauRoI      *emTauRoI   );
-    bool fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster  );
-    bool fillTrigElectron ( const xAOD::TrigElectron  *trigEl     );
-    bool fillCaloCluster  ( const xAOD::CaloCluster   *cluster    );
-
-    /* Space memory manager */
-    void alloc_space();
-    void release_space();
-    void clear();
-
-
-
-  private:
-
-    /* Offline variables only */
-    bool  m_doOfflineDump;
-    bool  m_doSupport;
-    bool  m_forceMCMatch;
-    float m_minEt; // default is -1 
-    
-    /* Branch variables */
-    uint32_t            m_runNumber{};
-    unsigned long long  m_eventNumber{};
-    unsigned int        m_eventCounter{};   
-    float               m_avgmu{};    
-    
-    /* Egamma */
-    float               m_el_et{};
-    float               m_el_pt{};
-    float               m_el_eta{};
-    float               m_el_phi{};
-    float               m_el_ethad1{};
-    float               m_el_ehad1{};
-    float               m_el_f1{};
-    float               m_el_f3{};
-    float               m_el_d0{};
-    float               m_el_f1core{};
-    float               m_el_f3core{};
-    float               m_el_weta2{};
-    float               m_el_wtots1{};
-    float               m_el_fracs1{};
-    float               m_el_Reta{};
-    float               m_el_Rphi{};
-    float               m_el_Eratio{};
-    float               m_el_Rhad{};
-    float               m_el_Rhad1{};
-    float               m_el_deta1{};
-    float               m_el_deta2{};
-    float               m_el_dphi2{};
-    float               m_el_dphiresc{};
-    float               m_el_dphiresc2{};
-    float               m_el_eprobht{};
-    float               m_el_charge{};
-    uint8_t             m_el_nblayerhits{};
-    uint8_t             m_el_nblayerolhits{};
-    uint8_t             m_el_npixhits{};
-    uint8_t             m_el_npixolhits{};
-    uint8_t             m_el_nscthits{};
-    uint8_t             m_el_nsctolhits{};
-    uint8_t             m_el_ntrthightreshits{};
-    uint8_t             m_el_ntrthits{};
-    uint8_t             m_el_ntrthighthresolhits{};
-    uint8_t             m_el_ntrtolhits{};
-    uint8_t             m_el_ntrtxenonhits{};
-    bool                m_el_expectblayerhit{};
-    uint8_t             m_el_nsihits{}         ;
-    uint8_t             m_el_nsideadsensors{}  ;
-    uint8_t             m_el_npixdeadsensors{} ;
-    uint8_t             m_el_nsctdeadsensors{} ;
-    bool                m_el_loose{};
-    bool                m_el_medium{};
-    bool                m_el_tight{};
-    bool                m_el_lhLoose{};
-    bool                m_el_lhMedium{};
-    bool                m_el_lhTight{}; 
-    bool                m_el_rgLoose{};
-    bool                m_el_rgMedium{};
-    bool                m_el_rgTight{};
-    bool                m_el_multiLepton{};
-    std::vector<float> *m_el_ringsE;
-    int                 m_el_nGoodVtx{};
-    int                 m_el_nPileupPrimaryVtx{};
-    ///Egamma Calo
-    float               m_calo_et{};
-    float               m_calo_eta{};
-    float               m_calo_phi{};
-
-    // Level 1     
-    float               m_trig_L1_eta{};
-    float               m_trig_L1_phi{};
-    float               m_trig_L1_emClus{};
-    float               m_trig_L1_tauClus{};
-    float               m_trig_L1_emIsol{};
-    float               m_trig_L1_hadIsol{};
-    std::vector<std::string> *m_trig_L1_thrNames;          
-    bool                m_trig_L1_accept{};
-    // Level 2 Calo
-    float               m_trig_L2_calo_et{};         
-    float               m_trig_L2_calo_eta{};        
-    float               m_trig_L2_calo_phi{};        
-    float               m_trig_L2_calo_e237{};       
-    float               m_trig_L2_calo_e277{};      
-    float               m_trig_L2_calo_fracs1{};     
-    float               m_trig_L2_calo_weta2{};      
-    float               m_trig_L2_calo_ehad1{};      
-    float               m_trig_L2_calo_emaxs1{};     
-    float               m_trig_L2_calo_e2tsts1{};    
-    float               m_trig_L2_calo_wstot{};      
-    float               m_trig_L2_calo_rnnOutput{};      
-    std::vector<float> *m_trig_L2_calo_energySample;
-    std::vector<float> *m_trig_L2_calo_rings;
-    bool                m_trig_L2_calo_accept{};     
-    // level 2 id
-    std::vector<int>   *m_trig_L2_el_trackAlgID;          
-    std::vector<float> *m_trig_L2_el_pt;          
-    std::vector<float> *m_trig_L2_el_caloEta;         
-    std::vector<float> *m_trig_L2_el_eta;         
-    std::vector<float> *m_trig_L2_el_phi;         
-    std::vector<float> *m_trig_L2_el_charge;      
-    std::vector<float> *m_trig_L2_el_nTRTHits;        
-    std::vector<float> *m_trig_L2_el_nTRTHiThresholdHits;        
-    std::vector<float> *m_trig_L2_el_etOverPt;          
-    std::vector<float> *m_trig_L2_el_trkClusDeta; 
-    std::vector<float> *m_trig_L2_el_trkClusDphi;
-    bool                m_trig_L2_el_accept{};
-    // Level EF
-    bool                m_trig_EF_calo_accept{};
-    std::vector<float> *m_trig_EF_calo_et;
-    std::vector<float> *m_trig_EF_calo_eta;
-    bool                m_trig_EF_el_accept{};
-
-
-    // Monte Carlo
-    bool                m_mc_hasMC{}     ;
-    float               m_mc_pt{}        ;
-    float               m_mc_eta{}       ;
-    float               m_mc_phi{}       ;
-    bool                m_mc_isTop{}     ;
-    bool                m_mc_isParton{}  ;
-    bool                m_mc_isMeson{}   ;
-    bool                m_mc_isQuark{}   ;
-    bool                m_mc_isTau{}     ;
-    bool                m_mc_isMuon{}    ;
-    bool                m_mc_isPhoton{}  ;
-    bool                m_mc_isElectron{};
-    bool                m_mc_hasZMother{};
-    bool                m_mc_hasWMother{};
-
-};
-
-
-#endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
index 317521db5d47..aa6a54f060ec 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
@@ -1,7 +1,6 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef TrigEgammaNavTPBaseTool_H
 #define TrigEgammaNavTPBaseTool_H
 
@@ -25,9 +24,12 @@
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/TrackParticleAuxContainer.h"
 #include "xAODTrigCalo/TrigEMCluster.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODCaloEvent/CaloClusterContainer.h"
 #include "xAODCaloEvent/CaloClusterAuxContainer.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODMissingET/MissingETContainer.h"
 #include "xAODTrigger/EmTauRoIContainer.h"
 #include "EgammaAnalysisInterfaces/IAsgElectronIsEMSelector.h"
 #include "EgammaAnalysisInterfaces/IAsgPhotonIsEMSelector.h"
@@ -37,125 +39,139 @@ namespace Trig{
             class FeatureContainer;
 }
 
-class TrigEgammaNavTPBaseTool
-: public TrigEgammaAnalysisBaseTool,
+class TrigEgammaNavTPBaseTool: public TrigEgammaAnalysisBaseTool,
     virtual public ITrigEgammaAnalysisBaseTool {
         ASG_TOOL_CLASS(TrigEgammaNavTPBaseTool, ITrigEgammaAnalysisBaseTool)
 
-public:
-
-  TrigEgammaNavTPBaseTool( const std::string& myname );
-  ~TrigEgammaNavTPBaseTool() {};
-
-  StatusCode childInitialize();
-  StatusCode childBook();
-  StatusCode childExecute();
-  StatusCode childFinalize();
-protected:
-  /*! things like LAr-error, Tile-error, etc, should come here */
-  bool EventWiseSelection(); 
-  /*! at least one chain should pass. e28_tight_iloose? */
-  bool MinimalTriggerRequirement ();
-  /*! Tag and Probe method called by derived classes */
-  void executeTandP(); 
-  /*! Match probes called by derived classes */
-  void matchObjects(const std::string trigItem); 
-  /*! Tag Electron selection */
-  bool isTagElectron(const xAOD::Electron *el);
-  /*! Rerun offline selection */
-  bool ApplyElectronPid(const xAOD::Electron *eg,const std::string);
-  /*! Rerun offline selection */
-  void DressPid(const xAOD::Electron *eg);
-  /*! Probe selection */
-  bool isGoodProbeElectron(const xAOD::Electron *el);//,const std::string,const float,const std::string); 
-  /*! Event-wise trigger selection */
-  bool passedTrigger(const HLT::TriggerElement* obj); 
-  /*! Clears list of probes after each trigger item per event */
-  void clearProbeList(); 
-  /*! Clears list of matched probes after each trigger item per event */
-  void clearPairList();
-  /* Clears decorations offline objects */
-  void clearDecorations();
-  /*! Return pseudo-lifetime of Jpsi */
-  float GetPseudoLifetime(const xAOD::Electron*,const xAOD::Electron*);
-  /*! Calculate the displacement of the Jpsi vertex w.r.t. the primary vertex in the transverse plane */
-  double simple_lxy(int ,double, double, double , double , double , double , double, double );
-  /*! vector of electron probes */
-  std::vector<const xAOD::Electron*> m_probeElectrons;
-  /*! vector of photon probes */
-  std::vector<const xAOD::Photon*> m_probePhotons;
-  /*! vector of offline electron probe and matched TE */
-  std::vector<std::pair<const xAOD::Egamma*,const HLT::TriggerElement*> > m_pairObj;
-  /* vector of offline photon probe and matched TE */
-  //std::vector<std::pair<const xAOD::Photon*,const HLT::TriggerElement*> > m_probePhotons; 
-  /*! List of triggers from menu */
-  std::vector<std::string> m_trigInputList;
- /*! List of trigger categories for MaM */
-  std::vector<std::string> m_categories; 
-  /*! List of triggers to study */
-  std::vector<std::string> m_trigList; 
-  /*! Zee lower mass cut */
-  float m_ZeeMassMin;
-  /*! Zee upper mass cut */
-  float m_ZeeMassMax;
-  /*! Remove crack region for Probe default True */
-  bool m_rmCrack;
-  /*! Directory name for each algorithm */
-  std::string m_dir;
-  /*! Directory name for each algorithm */
-  std::string m_anatype;
+  public:
   
-  const xAOD::EventInfo* m_eventInfo;
-  const xAOD::TruthParticleContainer* m_truthContainer;
-
-
-private:
-  // ToolHandles
-  //
-  //Offline ++ selectors
-  // In python order will matter. Should always be tight, medium, loose
-  // Order no longer important since using a map
-  ///*! Offline isEM Selectors */
-  ToolHandleArray<IAsgElectronIsEMSelector> m_electronIsEMTool;
-  /*! Offline LH Selectors */
-  ToolHandleArray<IAsgElectronLikelihoodTool> m_electronLHTool;
+    TrigEgammaNavTPBaseTool( const std::string& myname );
+    ~TrigEgammaNavTPBaseTool() {};
+  
+    StatusCode childInitialize();
+    StatusCode childBook();
+    StatusCode childExecute();
+    StatusCode childFinalize();
+  
+  protected:
+    
+    /*! things like LAr-error, Tile-error, etc, should come here */
+    bool EventWiseSelection(); 
+    /*! pass without detector errors */
+    bool passesEventCleaning();
+    /*! at least one chain should pass. e28_tight_iloose? */
+    bool MinimalTriggerRequirement ();
+    /*! Tag and Probe method called by derived classes */
+    void executeTandP(); 
+    /*! Match probes called by derived classes */
+    void matchObjects(const std::string trigItem); 
+    /*! Tag Electron selection */
+    bool isTagElectron(const xAOD::Electron *el);
+    /*! Rerun offline selection */
+    bool ApplyElectronPid(const xAOD::Electron *eg,const std::string);
+    /*! Rerun offline selection */
+    void DressPid(const xAOD::Electron *eg);
+    /*! Probe selection */
+    bool isGoodProbeElectron(const xAOD::Electron *el);//,const std::string,const float,const std::string); 
+    /*! Event-wise trigger selection */
+    bool passedTrigger(const HLT::TriggerElement* obj); 
+    /*! Clears list of probes after each trigger item per event */
+    void clearProbeList(); 
+    /*! Clears list of matched probes after each trigger item per event */
+    void clearPairList();
+    /* Clears decorations offline objects */
+    void clearDecorations();
+    /*! Return pseudo-lifetime of Jpsi */
+    float GetPseudoLifetime(const xAOD::Electron*,const xAOD::Electron*);
+    /*! Calculate the displacement of the Jpsi vertex w.r.t. the primary vertex in the transverse plane */
+    double simple_lxy(int ,double, double, double , double , double , double , double, double );
+    /*! get the W mass */
+    float getWTransverseMass( const xAOD::Electron *el );
+    /*! Return MissingEt obj */
+    const xAOD::MissingET* getMET(){
+      return (*m_METContainer)["FinalClus"];
+    }
 
-  std::map< std::string, unsigned int > m_PidToolMap; /*! Pass a string to pick up correct selector */
-  //std::map< std::string, std::string > m_PidMap; /*! Map trigger pid to selector pid */ 
-  //
-  /*! Event Wise offline ElectronContainer Access and end iterator */
-  const xAOD::ElectronContainer* m_offElectrons;
-  /*! Jet container for probe selection */
-  const xAOD::JetContainer* m_jets;
-  /* TP selection properties */
+    /*! The pair index for each electron */
+    std::vector<std::pair<unsigned,unsigned>> m_Z;
+    /*! vector of electron probes */
+    std::vector<const xAOD::Electron*> m_probeElectrons;
+    /*! vector of photon probes */
+    std::vector<const xAOD::Photon*> m_probePhotons;
+    /*! vector of offline electron probe and matched TE */
+    std::vector<std::pair<const xAOD::Egamma*,const HLT::TriggerElement*> > m_pairObj;
+    /* vector of offline photon probe and matched TE */
+    //std::vector<std::pair<const xAOD::Photon*,const HLT::TriggerElement*> > m_probePhotons; 
+    /*! List of triggers from menu */
+    std::vector<std::string> m_trigInputList;
+   /*! List of trigger categories for MaM */
+    std::vector<std::string> m_categories; 
+    /*! List of triggers to study */
+    std::vector<std::string> m_trigList; 
+    /*! Zee lower mass cut */
+    float m_ZeeMassMin;
+    /*! Zee upper mass cut */
+    float m_ZeeMassMax;
+    /*! Remove crack region for Probe default True */
+    bool m_rmCrack;
+    /*! Enable the requirement of triggers */
+    bool m_applyMinimalTrigger;
+    /*! Directory name for each algorithm */
+    std::string m_dir;
+    /*! Directory name for each algorithm */
+    std::string m_anatype;
+    /*! Select opposite or same-sign pairs -- for background studies */
+    bool m_oppositeCharge;
+     /*! Minimum tag Et */
+    float m_tagMinEt;
+    /*! Minimum probe Et */
+    float m_probeMinEt;
+ 
+    // Containers 
+    /*! Event Wise offline ElectronContainer Access and end iterator */
+    const xAOD::ElectronContainer* m_offElectrons;
+    /*! Jet container for probe selection */
+    const xAOD::JetContainer* m_jets;
+    /*! Missing Et container */
+    const xAOD::MissingETContainer* m_METContainer;
+    /*! EventInfo Container */
+    const xAOD::EventInfo* m_eventInfo;
+    /* Truth Container */
+    const xAOD::TruthParticleContainer* m_truthContainer;
  
-  /*! Not needed */
-  // unsigned int m_isEMoffTag;
-  /*! Define the PID for tag electron */
-  std::string m_offTagTightness;
-  /*! define the Pid of Probe from the trigger name */ 
-  std::string m_offProbeTightness;
-  /*! define the Pid of Probe from the user */ 
-  std::string m_defaultProbeTightness;
-  /*! force user defined probe for pid triggers */
-  bool m_forceProbePid;
-  /*! Select opposite or same-sign pairs -- for background studies */
-  bool m_oppositeCharge;
-  /*! Minimum tag Et */
-  float m_tagMinEt;
-  /*! Minimum probe Et */
-  float m_probeMinEt;
-  /*! Trigger for tag and event wise selection */
-  std::vector<std::string> m_tagTrigList;
-  /*! Apply nearby jet selection */
-  bool m_applyJetNearProbeSelection; 
-  /*! force probe isolation */
-  bool m_forceProbeIsolation;
-  /*! Define isolation working point for Probe electron */
-  std::string m_offProbeIsolation;
-  /*! skip trigger for offline Tag and Probe analysis */
-  bool m_skipTrigger;
+  private:
 
+    // In python order will matter. Should always be tight, medium, loose
+    // Order no longer important since using a map
+    ///*! Offline isEM Selectors */
+    ToolHandleArray<IAsgElectronIsEMSelector> m_electronIsEMTool;
+    /*! Offline LH Selectors */
+    ToolHandleArray<IAsgElectronLikelihoodTool> m_electronLHTool;
+  
+    std::map< std::string, unsigned int > m_PidToolMap; /*! Pass a string to pick up correct selector */
+    //std::map< std::string, std::string > m_PidMap; /*! Map trigger pid to selector pid */ 
+ 
+    /* TP selection properties */
+    /*! Not needed */
+    // unsigned int m_isEMoffTag;
+    /*! Define the PID for tag electron */
+    std::string m_offTagTightness;
+    /*! define the Pid of Probe from the trigger name */ 
+    std::string m_offProbeTightness;
+    /*! define the Pid of Probe from the user */ 
+    std::string m_defaultProbeTightness;
+    /*! force user defined probe for pid triggers */
+    bool m_forceProbePid;
+    /*! Trigger for tag and event wise selection */
+    std::vector<std::string> m_tagTrigList;
+    /*! Apply nearby jet selection */
+    bool m_applyJetNearProbeSelection; 
+    /*! force probe isolation */
+    bool m_forceProbeIsolation;
+    /*! Define isolation working point for Probe electron */
+    std::string m_offProbeIsolation;
+    /*! skip trigger for offline Tag and Probe analysis */
+    bool m_skipTrigger;
 };
 
 #endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h
deleted file mode 100755
index cfe8b5a74cec..000000000000
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
-#define TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
-
-#include "TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h"
-#include "xAODTracking/TrackParticle.h"
-#include "xAODTracking/Vertex.h"
-#include "xAODEventInfo/EventInfo.h"
-#include "xAODEgamma/EgammaEnums.h"
-#include "xAODTracking/TrackingPrimitives.h"
-
-class TrigEgammaNavTPNtuple : public TrigEgammaNavTPBaseTool,
-                          virtual public ITrigEgammaAnalysisBaseTool
-{
-  ASG_TOOL_CLASS(TrigEgammaNavTPNtuple, ITrigEgammaAnalysisBaseTool)
-
-  public:
-  
-    TrigEgammaNavTPNtuple( const std::string& myname );
-    ~TrigEgammaNavTPNtuple() {}; 
-    StatusCode childInitialize();
-    StatusCode childBook();
-    StatusCode childExecute();
-    StatusCode childFinalize();
- 
-  private:
-    
-    /* Dump trigger and offline probe object */
-    bool executeProbesDump();
-    bool executeProbesSupportDump();
-    bool executeProbesItemDump();
-
-
-    /* helper function */ 
-    template <class T> void InitBranch(TTree* fChain, std::string branch_name, T* param, bool message = true);
-
-    unsigned count_HLT_objects(const HLT::TriggerElement *);
-    
-    /* Create branches */
-    void bookEventBranches( TTree *t );
-    void bookElectronBranches( TTree *t );
-    //void bookPhotonBranches( TTree *t );
-    void bookTriggerBranches( TTree *t );
-    void bookMonteCarloBranches( TTree *t );
-
-    /* uses InitBranch to connect the local variable and ttree pointer */
-    void linkEventBranches( TTree *t);
-    void linkElectronBranches( TTree *t);
-    void linkPhotonBranches( TTree *t);
-    void linkTriggerBranches( TTree *t);
-    void linkMonteCarloBranches( TTree *t);    
-
-    /* parse between objects and local variables connected to the 
-     * ttree pointer */
-    bool fillEvent        ( );
-    bool fillMonteCarlo   ( const xAOD::Egamma        *eg );
-    bool fillElectron     ( const xAOD::Electron      *el );
-    //bool fillPhoton       ( const xAOD::Photon        *ph );
-
-    bool fillCaloRings    ( const xAOD::Electron      *el         );
-    bool fillTrigCaloRings( const xAOD::TrigEMCluster *emCluster  );
-    bool fillEmTauRoI     ( const xAOD::EmTauRoI      *emTauRoI   );
-    bool fillTrigEMCluster( const xAOD::TrigEMCluster *emCluster  );
-    bool fillTrigElectron ( const xAOD::TrigElectron  *trigEl     );
-    bool fillCaloCluster  ( const xAOD::CaloCluster   *cluster    );
-
-
-    /* Space memory manager */
-    void alloc_space();
-    void release_space();
-    void clear();
-
-
-  private:
-
-    
-    /* Offline variables only */
-    bool  m_doOfflineDump;
-    /* Support triggers dump */
-    bool  m_doSupport;
-    float m_probeMinEt;
-
-     /* Branch variables */
-    uint32_t            m_runNumber{};
-    unsigned long long  m_eventNumber{};
-    unsigned int        m_eventCounter{};    
-    float               m_avgmu{};    
-     /* Egamma */
-    float               m_el_et{};
-    float               m_el_pt{};
-    float               m_el_eta{};
-    float               m_el_phi{};
-    float               m_el_ethad1{};
-    float               m_el_ehad1{};
-    float               m_el_f1{};
-    float               m_el_f3{};
-    float               m_el_d0{};
-    float               m_el_f1core{};
-    float               m_el_f3core{};
-    float               m_el_weta2{};
-    float               m_el_wtots1{};
-    float               m_el_fracs1{};
-    float               m_el_Reta{};
-    float               m_el_Rphi{};
-    float               m_el_Eratio{};
-    float               m_el_Rhad{};
-    float               m_el_Rhad1{};
-    float               m_el_deta1{};
-    float               m_el_deta2{};
-    float               m_el_dphi2{};
-    float               m_el_dphiresc{};
-    float               m_el_dphiresc2{};
-    float               m_el_eprobht{};
-    float               m_el_charge{};
-    uint8_t             m_el_nblayerhits{};
-    uint8_t             m_el_nblayerolhits{};
-    uint8_t             m_el_npixhits{};
-    uint8_t             m_el_npixolhits{};
-    uint8_t             m_el_nscthits{};
-    uint8_t             m_el_nsctolhits{};
-    uint8_t             m_el_ntrthightreshits{};
-    uint8_t             m_el_ntrthits{};
-    uint8_t             m_el_ntrthighthresolhits{};
-    uint8_t             m_el_ntrtolhits{};
-    uint8_t             m_el_ntrtxenonhits{};
-    bool                m_el_expectblayerhit{};
-    uint8_t             m_el_nsihits{}         ;
-    uint8_t             m_el_nsideadsensors{}  ;
-    uint8_t             m_el_npixdeadsensors{} ;
-    uint8_t             m_el_nsctdeadsensors{} ;
-    bool                m_el_loose{};
-    bool                m_el_medium{};
-    bool                m_el_tight{};
-    bool                m_el_lhLoose{};
-    bool                m_el_lhMedium{};
-    bool                m_el_lhTight{};     
-    bool                m_el_rgLoose{};
-    bool                m_el_rgMedium{};
-    bool                m_el_rgTight{};
-    bool                m_el_multiLepton{};
-    std::vector<float> *m_el_ringsE;
-    int                 m_el_nGoodVtx{};
-    int                 m_el_nPileupPrimaryVtx{};
-    ///Egamma Calo
-    float               m_calo_et{};
-    float               m_calo_eta{};
-    float               m_calo_phi{};
-    
-    // Level 1     
-    float               m_trig_L1_eta{};
-    float               m_trig_L1_phi{};
-    float               m_trig_L1_emClus{};
-    float               m_trig_L1_tauClus{};
-    float               m_trig_L1_emIsol{};
-    float               m_trig_L1_hadIsol{};
-    std::vector<std::string> *m_trig_L1_thrNames;          
-    bool                m_trig_L1_accept{};
-    // Level 2 Calo
-    float               m_trig_L2_calo_et{};         
-    float               m_trig_L2_calo_eta{};        
-    float               m_trig_L2_calo_phi{};        
-    float               m_trig_L2_calo_e237{};       
-    float               m_trig_L2_calo_e277{};      
-    float               m_trig_L2_calo_fracs1{};     
-    float               m_trig_L2_calo_weta2{};      
-    float               m_trig_L2_calo_ehad1{};      
-    float               m_trig_L2_calo_emaxs1{};     
-    float               m_trig_L2_calo_e2tsts1{};    
-    float               m_trig_L2_calo_wstot{};      
-    float               m_trig_L2_calo_rnnOutput{};      
-    std::vector<float> *m_trig_L2_calo_energySample;
-    std::vector<float> *m_trig_L2_calo_rings;
-    bool                m_trig_L2_calo_accept{};     
-    // level 2 id
-    std::vector<int>   *m_trig_L2_el_trackAlgID;          
-    std::vector<float> *m_trig_L2_el_pt;          
-    std::vector<float> *m_trig_L2_el_caloEta;         
-    std::vector<float> *m_trig_L2_el_eta;         
-    std::vector<float> *m_trig_L2_el_phi;         
-    std::vector<float> *m_trig_L2_el_charge;      
-    std::vector<float> *m_trig_L2_el_nTRTHits;        
-    std::vector<float> *m_trig_L2_el_nTRTHiThresholdHits;        
-    std::vector<float> *m_trig_L2_el_etOverPt;          
-    std::vector<float> *m_trig_L2_el_trkClusDeta; 
-    std::vector<float> *m_trig_L2_el_trkClusDphi;
-
-
-    bool                m_trig_L2_el_accept{};
-    // Level EF
-    bool                m_trig_EF_calo_accept{};
-    std::vector<float> *m_trig_EF_calo_et;
-    std::vector<float> *m_trig_EF_calo_eta;
-    bool                m_trig_EF_el_accept{};
-
-
-    // Monte Carlo
-    bool                m_mc_hasMC{}     ;
-    float               m_mc_pt{}        ;
-    float               m_mc_eta{}       ;
-    float               m_mc_phi{}       ;
-    bool                m_mc_isTop{}     ;
-    bool                m_mc_isQuark{}   ;
-    bool                m_mc_isParton{}  ;
-    bool                m_mc_isMeson{}   ;
-    bool                m_mc_isTau{}     ;
-    bool                m_mc_isMuon{}    ;
-    bool                m_mc_isPhoton{}  ;
-    bool                m_mc_isElectron{};
-    bool                m_mc_hasZMother{};
-    bool                m_mc_hasWMother{};
-
-  
-};
-
-
-
-#endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
new file mode 100644
index 000000000000..53f925f4fe32
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
@@ -0,0 +1,320 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMAPHYSVALBASE_H
+#define TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMAPHYSVALBASE_H
+
+#include "xAODEventInfo/EventInfo.h"
+#include "xAODTruth/TruthParticle.h"
+#include "xAODTruth/TruthParticleContainer.h"
+#include "xAODEventInfo/EventInfo.h"
+#include "xAODEgamma/EgammaEnums.h"
+#include "xAODTracking/TrackingPrimitives.h"
+#include "TrigDecisionTool/TrigDecisionTool.h"
+#include "TTree.h"
+
+class TrigEgammaPhysValBase
+{
+  public:
+    TrigEgammaPhysValBase();
+    ~TrigEgammaPhysValBase() {};
+ 
+  protected: 
+    /* helper function */ 
+    template <class T> void InitBranch(TTree* fChain, std::string branch_name, T* param, bool message = true);
+   
+    /* Create branches */
+    void bookEventBranches( TTree *t );
+    void bookElectronBranches( TTree *t );
+    void bookTriggerBranches( TTree *t );
+    void bookMonteCarloBranches( TTree *t );
+    void bookTDTBranches( TTree *t );
+    
+    /* uses InitBranch to connect the local variable and ttree pointer */
+    void linkEventBranches( TTree *t);
+    void linkElectronBranches( TTree *t);
+    void linkTriggerBranches( TTree *t);
+    void linkSelectorBranches( TTree *t);
+    void linkMonteCarloBranches( TTree *t);    
+    void linkTDTBranches( TTree *t);    
+    
+    /* Space memory manager */
+    void alloc_space();
+    void release_space();
+    void clear();
+    void createTDTMetadata( TTree *t, std::vector<std::string> trigList );
+    
+    bool                m_doMCDetailed;
+    bool                m_doL2Detailed;
+    bool                m_doL2CaloDetailed;
+    bool                m_doRecoDetailed;
+
+    /* Branch variables */
+    uint32_t            m_runNumber{};
+    unsigned long long  m_eventNumber{};
+    unsigned int        m_eventCounter{};   
+    float               m_avgmu{};    
+    float               m_lumiBlock{};    
+    
+    /* Egamma */
+     
+    bool                m_el_hasCalo   ;
+    bool                m_el_hasTrack  ;
+    float               m_el_e;
+    float               m_el_et;
+    float               m_el_eta;
+    float               m_el_phi;
+    float               m_el_ethad1;
+    float               m_el_ehad1;
+    float               m_el_f1;
+    float               m_el_f3;
+    float               m_el_f1core;
+    float               m_el_f3core;
+    float               m_el_weta1;
+    float               m_el_weta2;
+    float               m_el_wtots1;
+    float               m_el_fracs1;
+    float               m_el_Reta;
+    float               m_el_Rphi;
+    float               m_el_Eratio;
+    float               m_el_Rhad;
+    float               m_el_Rhad1;
+    float               m_el_deta1;
+    float               m_el_deta2;
+    float               m_el_dphi2;
+    float               m_el_dphiresc;
+    float               m_el_deltaPhiRescaled2;
+    float               m_el_deltaEta1;
+    float               m_el_deltaE;
+    float               m_el_e277;
+    std::vector<float> *m_el_etCone;
+    std::vector<float> *m_el_ptCone;
+   
+    
+
+    float               m_el_trk_pt;
+    float               m_el_trk_eta; 
+    float               m_el_trk_charge; 
+    float               m_el_trk_sigd0;
+    float               m_el_trk_d0;
+    float               m_el_trk_eProbabilityHT;
+    float               m_el_trk_transformed_eProbabilityHT;
+    float               m_el_trk_d0significance;
+    float               m_el_trk_deltaPOverP;
+    float               m_el_trk_qOverP;
+    std::vector<uint8_t> *m_el_trk_summaryValues;
+
+    bool                m_el_loose{};
+    bool                m_el_medium{};
+    bool                m_el_tight{};
+    bool                m_el_lhVLoose{};
+    bool                m_el_lhLoose{};
+    bool                m_el_lhMedium{};
+    bool                m_el_lhTight{}; 
+    bool                m_el_rgLoose{};
+    bool                m_el_rgMedium{};
+    bool                m_el_rgTight{};
+    bool                m_el_multiLepton{};
+    std::vector<float> *m_el_ringsE;
+    int                 m_el_nGoodVtx{};
+    int                 m_el_nPileupPrimaryVtx{};
+    ///Egamma Calo
+    float               m_el_calo_et{};
+    float               m_el_calo_eta{};
+    float               m_el_calo_phi{};
+    float               m_el_calo_etaBE2{};
+    float               m_el_calo_e{};
+    // Level 1     
+    float               m_trig_L1_eta{};
+    float               m_trig_L1_phi{};
+    float               m_trig_L1_emClus{};
+    float               m_trig_L1_tauClus{};
+    float               m_trig_L1_emIsol{};
+    float               m_trig_L1_hadIsol{};
+    float               m_trig_L1_hadCore{};
+    std::vector<std::string> *m_trig_L1_thrNames;          
+
+    // Level 2 Calo
+    float               m_trig_L2_calo_et{};         
+    float               m_trig_L2_calo_eta{};        
+    float               m_trig_L2_calo_phi{};        
+    float               m_trig_L2_calo_e237{};       
+    float               m_trig_L2_calo_e277{};      
+    float               m_trig_L2_calo_fracs1{};     
+    float               m_trig_L2_calo_weta2{};      
+    float               m_trig_L2_calo_ehad1{};      
+    float               m_trig_L2_calo_emaxs1{};     
+    float               m_trig_L2_calo_e2tsts1{};    
+    float               m_trig_L2_calo_wstot{};      
+    float               m_trig_L2_calo_nnOutput{};      
+    std::vector<float> *m_trig_L2_calo_energySample;
+    std::vector<float> *m_trig_L2_calo_rings;
+    std::vector<float> *m_trig_L2_calo_rnnOutput;
+    // level 2 id
+    std::vector<int>   *m_trig_L2_el_trackAlgID;          
+    std::vector<float> *m_trig_L2_el_pt;          
+    std::vector<float> *m_trig_L2_el_caloEta;         
+    std::vector<float> *m_trig_L2_el_eta;         
+    std::vector<float> *m_trig_L2_el_phi;         
+    std::vector<float> *m_trig_L2_el_charge;      
+    std::vector<float> *m_trig_L2_el_nTRTHits;        
+    std::vector<float> *m_trig_L2_el_nTRTHiThresholdHits;        
+    std::vector<float> *m_trig_L2_el_etOverPt;          
+    std::vector<float> *m_trig_L2_el_trkClusDeta; 
+    std::vector<float> *m_trig_L2_el_trkClusDphi;
+   
+    // EFCalo and HLT steps
+    
+    std::vector<float>               *m_trig_EF_calo_e;
+    std::vector<float>               *m_trig_EF_calo_et;
+    std::vector<float>               *m_trig_EF_calo_eta;
+    std::vector<float>               *m_trig_EF_calo_phi;
+    std::vector<float>               *m_trig_EF_calo_etaBE2;
+    
+    std::vector<float>               *m_trig_EF_el_calo_e;
+    std::vector<float>               *m_trig_EF_el_calo_et;
+    std::vector<float>               *m_trig_EF_el_calo_eta;
+    std::vector<float>               *m_trig_EF_el_calo_phi;
+    std::vector<float>               *m_trig_EF_el_calo_etaBE2;
+    
+    std::vector<float>               *m_trig_EF_el_e;
+    std::vector<float>               *m_trig_EF_el_et;
+    std::vector<float>               *m_trig_EF_el_eta;
+    std::vector<float>               *m_trig_EF_el_phi;
+    std::vector<float>               *m_trig_EF_el_ethad1;
+    std::vector<float>               *m_trig_EF_el_ehad1;
+    std::vector<float>               *m_trig_EF_el_f1;
+    std::vector<float>               *m_trig_EF_el_f3;
+    std::vector<float>               *m_trig_EF_el_f1core;
+    std::vector<float>               *m_trig_EF_el_f3core;
+    std::vector<float>               *m_trig_EF_el_weta1;
+    std::vector<float>               *m_trig_EF_el_weta2;
+    std::vector<float>               *m_trig_EF_el_wtots1;
+    std::vector<float>               *m_trig_EF_el_fracs1;
+    std::vector<float>               *m_trig_EF_el_Reta;
+    std::vector<float>               *m_trig_EF_el_Rphi;
+    std::vector<float>               *m_trig_EF_el_Eratio;
+    std::vector<float>               *m_trig_EF_el_Rhad;
+    std::vector<float>               *m_trig_EF_el_Rhad1;
+    std::vector<float>               *m_trig_EF_el_deta2;
+    std::vector<float>               *m_trig_EF_el_dphi2;
+    std::vector<float>               *m_trig_EF_el_dphiresc;
+    std::vector<float>               *m_trig_EF_el_e277;
+    std::vector<float>               *m_trig_EF_el_deltaPhiRescaled2;
+    std::vector<float>               *m_trig_EF_el_deltaEta1;
+    std::vector<float>               *m_trig_EF_el_deltaE;
+    std::vector<float>               *m_trig_EF_el_etCone;
+    std::vector<float>               *m_trig_EF_el_ptCone;
+    
+   
+    std::vector<float>               *m_trig_EF_el_trk_pt;
+    std::vector<float>               *m_trig_EF_el_trk_eta; 
+    std::vector<float>               *m_trig_EF_el_trk_charge; 
+    std::vector<float>               *m_trig_EF_el_trk_sigd0;
+    std::vector<float>               *m_trig_EF_el_trk_d0;
+    std::vector<float>               *m_trig_EF_el_trk_eProbabilityHT;
+    std::vector<float>               *m_trig_EF_el_trk_transformed_eProbabilityHT;
+    std::vector<float>               *m_trig_EF_el_trk_d0significance;
+    std::vector<float>               *m_trig_EF_el_trk_deltaPOverP;
+    std::vector<float>               *m_trig_EF_el_trk_qOverP;
+    std::vector<uint8_t>              *m_trig_EF_el_trk_summaryValues;
+
+   
+    std::vector<bool>                *m_trig_EF_el_hasCalo   ;
+    std::vector<bool>                *m_trig_EF_el_hasTrack  ;
+ 
+
+    
+    std::vector<bool>                *m_trig_EF_el_loose;
+    std::vector<bool>                *m_trig_EF_el_medium;
+    std::vector<bool>                *m_trig_EF_el_tight;
+    std::vector<bool>                *m_trig_EF_el_lhvloose;
+    std::vector<bool>                *m_trig_EF_el_lhloose;
+    std::vector<bool>                *m_trig_EF_el_lhmedium;
+    std::vector<bool>                *m_trig_EF_el_lhtight; 
+    std::vector<bool>                *m_trig_EF_calo_loose;
+    std::vector<bool>                *m_trig_EF_calo_medium;
+    std::vector<bool>                *m_trig_EF_calo_tight;
+    std::vector<bool>                *m_trig_EF_calo_lhvloose;
+    std::vector<bool>                *m_trig_EF_calo_lhloose;
+    std::vector<bool>                *m_trig_EF_calo_lhmedium;
+    std::vector<bool>                *m_trig_EF_calo_lhtight; 
+ 
+    std::vector<int>                  *m_trig_tdt_L1_calo_accept;
+    std::vector<int>                  *m_trig_tdt_L2_calo_accept;
+    std::vector<int>                  *m_trig_tdt_L2_el_accept  ;
+    std::vector<int>                  *m_trig_tdt_EF_calo_accept;
+    std::vector<int>                  *m_trig_tdt_EF_el_accept  ;
+    std::vector<int>                  *m_trig_tdt_emu_L1_calo_accept;
+    std::vector<int>                  *m_trig_tdt_emu_L2_calo_accept;
+    std::vector<int>                  *m_trig_tdt_emu_L2_el_accept  ;
+    std::vector<int>                  *m_trig_tdt_emu_EF_calo_accept;
+    std::vector<int>                  *m_trig_tdt_emu_EF_el_accept  ;
+
+
+
+    // Monte Carlo
+    bool                m_mc_hasMC{}     ;
+    float               m_mc_pt{}        ;
+    float               m_mc_eta{}       ;
+    float               m_mc_phi{}       ;
+    bool                m_mc_isTop{}     ;
+    bool                m_mc_isParton{}  ;
+    bool                m_mc_isMeson{}   ;
+    bool                m_mc_isQuark{}   ;
+    bool                m_mc_isTau{}     ;
+    bool                m_mc_isMuon{}    ;
+    bool                m_mc_isPhoton{}  ;
+    bool                m_mc_isElectron{};
+    bool                m_mc_hasZMother{};
+    bool                m_mc_hasWMother{};
+
+    /* 
+     
+    uint8_t             m_el_nblayerhits;
+    uint8_t             m_el_nblayerolhits;
+    uint8_t             m_el_npixhits;
+    uint8_t             m_el_npixolhits;
+    uint8_t             m_el_nscthits;
+    uint8_t             m_el_nsctolhits;
+    uint8_t             m_el_ntrthightreshits;
+    uint8_t             m_el_ntrthits;
+    uint8_t             m_el_ntrthighthresolhits;
+    uint8_t             m_el_ntrtolhits;
+    uint8_t             m_el_ntrtxenonhits;
+    uint8_t             m_el_expectblayerhit;
+    uint8_t             m_el_nsihits         ;
+    uint8_t             m_el_nsideadsensors  ;
+    uint8_t             m_el_npixdeadsensors ;
+    uint8_t             m_el_nsctdeadsensors ;
+    uint8_t             m_el_expectNextToInnerMostLayer;
+    uint8_t             m_el_nNextToInnerMostLayerHits;
+    uint8_t             m_el_nNextToInnerMostLayerOutliers;
+    
+    std::vector<float>               *m_trig_EF_el_charge;
+    std::vector<uint8_t>             *m_trig_EF_el_nblayerhits;
+    std::vector<uint8_t>             *m_trig_EF_el_nblayerolhits;
+    std::vector<uint8_t>             *m_trig_EF_el_npixhits;
+    std::vector<uint8_t>             *m_trig_EF_el_npixolhits;
+    std::vector<uint8_t>             *m_trig_EF_el_nscthits;
+    std::vector<uint8_t>             *m_trig_EF_el_nsctolhits;
+    std::vector<uint8_t>             *m_trig_EF_el_ntrthightreshits;
+    std::vector<uint8_t>             *m_trig_EF_el_ntrthits;
+    std::vector<uint8_t>             *m_trig_EF_el_ntrthighthresolhits;
+    std::vector<uint8_t>             *m_trig_EF_el_ntrtolhits;
+    std::vector<uint8_t>             *m_trig_EF_el_ntrtxenonhits;
+    std::vector<uint8_t>             *m_trig_EF_el_expectblayerhit;
+    std::vector<uint8_t>             *m_trig_EF_el_transformed_expectblayerhit;
+    std::vector<uint8_t>             *m_trig_EF_el_nsihits         ;
+    std::vector<uint8_t>             *m_trig_EF_el_nsideadsensors  ;
+    std::vector<uint8_t>             *m_trig_EF_el_npixdeadsensors ;
+    std::vector<uint8_t>             *m_trig_EF_el_nsctdeadsensors ;
+    std::vector<uint8_t>             *m_trig_EF_el_expectNextToInnerMostLayer;
+    std::vector<uint8_t>             *m_trig_EF_el_nNextToInnerMostLayerHits;
+    std::vector<uint8_t>             *m_trig_EF_el_nNextToInnerMostLayerOutliers;
+    */
+};
+
+
+#endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
index c1cd6fa59b9b..7d141d4e1575 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
@@ -73,8 +73,8 @@ class TrigEgammaPlotTool
           int m_ncoarseEtabins; //2D
           std::vector<float>  m_etbins;
           std::vector<float>  m_etabins;
-          std::vector<float>  m_minBin_ringer;
-          std::vector<float>  m_maxBin_ringer;
+          std::vector<float>  m_ringerEtbins;
+          std::vector<float>  m_ringerEtabins;
           std::vector<double> m_defaultEtbins;
           std::vector<double> m_defaultEtabins;
           std::vector<double> m_coarseEtbins;
@@ -131,6 +131,7 @@ class TrigEgammaPlotTool
           void bookExpertResolutionHistos(const std::string dir);
           void bookExpertL2CaloResolutionHistos(const std::string dir);
           void bookAbsResolutionHistos(const std::string dir);
+          void bookRnnDistributionHistos(const std::string dir);
           void parseCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, std::string &caloLayerName);
   };
 #endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py
index 2159a9dd7815..6b5d24fa7d7f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py
@@ -1,10 +1,11 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 
 from TrigEgammaAnalysisTools import TrigEgammaAnalysisToolsConf
 from AthenaCommon import CfgMgr
 from AthenaCommon.AppMgr import ToolSvc
 
-from egammaRec.Factories import ToolFactory,FcnWrapper,AlgFactory, getPropertyValue 
+from egammaRec.Factories import PublicToolFactory,FcnWrapper,AlgFactory, getPropertyValue 
 
 import PyUtils.RootUtils as ru
 ROOT = ru.import_root()
@@ -29,22 +30,29 @@ MediumElectronSelector            = CfgMgr.AsgElectronIsEMSelector("T0HLTMediumE
 TightElectronSelector             = CfgMgr.AsgElectronIsEMSelector("T0HLTTightElectronSelector")
 LooseLHSelector                   = CfgMgr.AsgElectronLikelihoodTool("T0HLTLooseLHSelector")
 MediumLHSelector                  = CfgMgr.AsgElectronLikelihoodTool("T0HLTMediumLHSelector")
-MediumLHHISelector                  = CfgMgr.AsgElectronLikelihoodTool("T0HLTMediumLHHISelector")
 TightLHSelector                   = CfgMgr.AsgElectronLikelihoodTool("T0HLTTightLHSelector")
+VeryLooseLHSelector               = CfgMgr.AsgElectronLikelihoodTool("T0HLTVeryLooseLHSelector")
+
+# see the configuration calib paths below
 LooseElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf"
 MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf"
 TightElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf"
+# 2018 (vtest)
 LooseLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodLooseOfflineConfig2017_CutBL_Smooth.conf"
 MediumLHSelector.ConfigFile       = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodMediumOfflineConfig2017_Smooth.conf"
-MediumLHHISelector.ConfigFile       = "ElectronPhotonSelectorTools/offline/mc15_20160907_HI/ElectronLikelihoodMediumOfflineConfig2016_HI.conf"
 TightLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodTightOfflineConfig2017_Smooth.conf"
+VeryLooseLHSelector.ConfigFile    = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodVeryLooseOfflineConfig2017_Smooth.conf"
+
+
+
+
 ToolSvc+=LooseElectronSelector
 ToolSvc+=MediumElectronSelector
 ToolSvc+=TightElectronSelector
 ToolSvc+=LooseLHSelector
 ToolSvc+=MediumLHSelector
-ToolSvc+=MediumLHHISelector
 ToolSvc+=TightLHSelector
+ToolSvc+=VeryLooseLHSelector
 
 
 #from LumiBlockComps.LuminosityToolDefault import LuminosityToolOnline
@@ -69,81 +77,43 @@ EgammaMatchTool = Trig__TrigEgammaMatchingTool()
 ToolSvc += EgammaMatchTool
 
 # Plot Tool sets the base path for histograms of all tools
-TrigEgammaPlotTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaPlotTool, name="TrigEgammaPlotTool",
+TrigEgammaPlotTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaPlotTool, name="TrigEgammaPlotTool",
         DirectoryPath="/HLT/Egamma",
         MaM=monitoring_mam,
         Efficiency=["eff_et","eff_eta","eff_mu"],
         Distribution=["et","eta"],
         Resolution=["res_et","res_eta"],
         OutputLevel=0)
-EfficiencyTool = ToolFactory(TrigEgammaAnalysisToolsConf.EfficiencyTool, 
+
+EfficiencyTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.EfficiencyTool, 
         name="EfficiencyTool",
         PlotTool=TrigEgammaPlotTool,
         isEMResultNames=["Tight","Medium","Loose"],
         LHResultNames=["LHTight","LHMedium","LHLoose"],
         OutputLevel=0)
-ResolutionTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaResolutionTool, 
+
+ResolutionTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaResolutionTool, 
         name="ResolutionTool",
         PlotTool=TrigEgammaPlotTool,
         OutputLevel=0)
-DistTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaDistTool, 
+
+DistTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaDistTool, 
         name="DistTool",
         PlotTool=TrigEgammaPlotTool,
         OutputLevel=0)
 
 # import emulator egamma trigger tool
-from TrigEgammaEmulationTool.TrigEgammaEmulationToolConfig import TrigEgammaEmulationTool
+#from TrigEgammaEmulationTool.TrigEgammaEmulationToolConfig import TrigEgammaEmulationTool
 # Copy the default config w/ list
 # Allows factories below to instantiate emulator once Factories are instantiated
-EmulationTool = TrigEgammaEmulationTool.copy( name = "TrigEgammaEmulationTool",
-                                         TriggerList = monitoringTP_electron)
-
-TrigEgammaNavTPNtuple = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavTPNtuple, name ="TrigEgammaNavTPNtuple",
-        Analysis='ZeeTPNtuple',
-        ElectronKey = 'Electrons',
-        MatchTool = EgammaMatchTool,
-        PlotTool=TrigEgammaPlotTool,
-        EmulationTool=EmulationTool,
-        Tools=[],
-        isEMResultNames=["Tight","Medium","Loose"],
-        LHResultNames=["LHTight","LHMedium","LHLoose"],
-        ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
-        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
-        ZeeLowerMass=80,
-        ZeeUpperMass=100,
-        doOfflineDump=False,
-        doEmulation=False,
-        OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose 
-        OfflineProbeSelector='Loose', 
-        ForceProbePid=False, 
-        OppositeCharge=True,
-        OfflineTagMinEt=25,
-        CutLabels=["Events","LAr","RetrieveElectrons","TwoElectrons","PassTrigger","EventWise","Success"],
-        TagTriggerList=["e24_tight_iloose"],
-        TriggerList=monitoringTP_electron
+#EmulationTool = TrigEgammaEmulationTool.copy( name = "TrigEgammaEmulationTool",
+#                                         TriggerList = monitoringTP_electron)
 
-        )
+################################################################################################
+# Build factory
 
-TrigEgammaNavNtuple = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavNtuple, name ="TrigEgammaNavNtuple",
-        Analysis='Ntuple',
-        ElectronKey = 'Electrons',
-        MatchTool = EgammaMatchTool,
-        PlotTool=TrigEgammaPlotTool,
-        EmulationTool=EmulationTool,
-        Tools=[],
-        ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
-        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
-        TriggerList=monitoringTP_electron,
-        doOfflineDump=False,
-        doEmulation=False,
-        ForcePidSelection=True,
-        ForceProbeIsolation=False,
-        ForceEtThreshold=True,
-        ForceMCEnhancedBias=False,
-        RemoveCrack=True,
-        )
 
-TrigEgammaNavTPAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavTPAnalysisTool, name = "TrigEgammaNavTPAnalysisTool",
+TrigEgammaNavTPAnalysisTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavTPAnalysisTool, name = "TrigEgammaNavTPAnalysisTool",
         Analysis='Zee',
         ElectronKey = 'Electrons',
         MatchTool = EgammaMatchTool,
@@ -162,6 +132,7 @@ TrigEgammaNavTPAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgamma
         OppositeCharge=True,
         doJpsiee=False,
         doEmulation=False,
+        ForceTrigAttachment=False,
         TPTrigger=False,
         OfflineTagMinEt=25,
         RemoveCrack=True,
@@ -173,7 +144,7 @@ TrigEgammaNavTPAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgamma
         TagLabels=["Electrons","HasTrack","HasCluster","GoodPid","Et","Eta","IsGoodOQ","PassTrigger","MatchTrigger"],
         )
 
-TrigEgammaNavTPJpsieeAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavTPAnalysisTool,
+TrigEgammaNavTPJpsieeAnalysisTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavTPAnalysisTool,
         name = "TrigEgammaNavTPJpsieeAnalysisTool",
         Analysis='Jpsiee',
         ElectronKey = 'Electrons',
@@ -184,7 +155,7 @@ TrigEgammaNavTPJpsieeAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.Trig
         isEMResultNames=["Tight","Medium","Loose"],
         LHResultNames=["LHTight","LHMedium","LHLoose"],
         ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
-        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector, MediumLHHISelector], 
+        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
         ZeeLowerMass=2,
         ZeeUpperMass=5,
         OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose 
@@ -193,6 +164,7 @@ TrigEgammaNavTPJpsieeAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.Trig
         OppositeCharge=True,
         doJpsiee=True,
         doEmulation=False,
+        ForceTrigAttachment=False,
         TPTrigger=False,
         OfflineTagMinEt=5,
         RemoveCrack=True,
@@ -204,7 +176,7 @@ TrigEgammaNavTPJpsieeAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.Trig
         TagLabels=["Electrons","HasTrack","HasCluster","GoodPid","Et","Eta","PassTrigger","MatchTrigger"],
         )
 
-TrigEgammaNavAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavAnalysisTool, name ="TrigEgammaNavAnalysisTool",
+TrigEgammaNavAnalysisTool = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavAnalysisTool, name ="TrigEgammaNavAnalysisTool",
         Analysis='Analysis',
         ElectronKey = 'Electrons',
         MatchTool = EgammaMatchTool,
@@ -212,42 +184,140 @@ TrigEgammaNavAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNa
         #EmulationTool=EmulationTool,
         Tools=[EfficiencyTool,ResolutionTool,DistTool],
         ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
-        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,MediumLHHISelector], 
+        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
+        ElectronLHVLooseTool=VeryLooseLHSelector,
         IsEMLabels=IneffLabels,
         TriggerList=monitoring_electron + monitoring_photon,
         ForcePidSelection=True,
         ForceProbeIsolation=False,
         ForceEtThreshold=True,
+        ForceTrigAttachment=False,
         RemoveCrack=True,
         doEmulation=False,
         )
 
-TrigEgammaNavEnhancedBiasAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNavAnalysisTool, name ="TrigEgammaNavEnhancedBiasAnalysisTool",
-        Analysis='EnhancedBias',
-        ElectronKey = 'Electrons',
-        MatchTool = EgammaMatchTool,
-        EmulationTool=EmulationTool,
-        PlotTool=TrigEgammaPlotTool,
-        Tools=[EfficiencyTool,ResolutionTool,DistTool],
-        ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
-        ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
-        IsEMLabels=IneffLabels,
-        TriggerList=monitoring_electron + monitoring_photon,
-        ForcePidSelection=False,
-        ForceProbeIsolation=False,
-        ForceEtThreshold=False,
-        ForceMCEnhancedBias=False,
-        RemoveCrack=False,
-        doEmulation=False,
-        )
+#############################################################################################
+# Functions
 
 # Function to return triggerlist tools
 def getAllTools():
     return [TrigEgammaNavZeeTPCounts(),TrigEgammaNavZeeTPEff(),TrigEgammaNavZeeTPIneff(),TrigEgammaNavZeeTPRes(),]
 
+
+def setRunFlag( runFlag ):
+  if runFlag == '2018':
+    # cut based
+    LooseElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf"
+    MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf"
+    TightElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf"
+
+    # 2018 (vtest)
+    LooseLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodLooseOfflineConfig2017_CutBL_Smooth.conf"
+    MediumLHSelector.ConfigFile       = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodMediumOfflineConfig2017_Smooth.conf"
+    TightLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodTightOfflineConfig2017_Smooth.conf"
+    VeryLooseLHSelector.ConfigFile    = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodVeryLooseOfflineConfig2017_Smooth.conf"
+  elif runFlag == '2017':
+    # cut based
+    LooseElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf"
+    MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf"
+    TightElectronSelector.ConfigFile  = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf"
+
+    # 2017 (v11)
+    LooseLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodLooseOfflineConfig2016_CutBL_Smooth.conf"
+    MediumLHSelector.ConfigFile       = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodMediumOfflineConfig2016_Smooth.conf"
+    TightLHSelector.ConfigFile        = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodTightOfflineConfig2016_Smooth.conf"
+    VeryLooseLHSelector.ConfigFile    = "ElectronPhotonSelectorTools/offline/mc15_20160512/ElectronLikelihoodVeryLooseOfflineConfig2016_Smooth.conf"
+  else:
+    print 'Wrong run flag configuration'
+
+
+
 # The main algorithm
 # Add triggerlist tools to ToolHandleArray 
 TrigEgammaAnalysisAlg = AlgFactory(TrigEgammaAnalysisToolsConf.TrigEgammaAnalysisAlg, 
         name='TrigEgammaAnalysisAlg',
         Tools = FcnWrapper(getAllTools),
         )
+
+
+
+# This function will be used to collect events from Zee,JF17 and PhysicsMain samples.
+# Use this if you really know. (for experts)
+def getEventSelectionTool(runFlag):
+
+  from TrigEgammaEmulationTool.TrigEgammaEmulationPidToolsConfig import getEgammaIsEMSelectorCaloOnly, \
+                                                                        getElectronIsEMSelector,\
+                                                                        getEgammaLikelihoodSelectorCaloOnly, \
+                                                                        getElectronLikelihoodSelector2015,\
+                                                                        getElectronLikelihoodSelectorNoD0
+  from AthenaCommon import CfgMgr
+  from AthenaCommon.AppMgr import ToolSvc
+  # create all selector list. Here, the order is matter. Please check the 
+  
+  setRunFlag(runFlag)
+  if runFlag == '2017':
+
+    # trigger configuration
+    EFCaloIsEMSelectorList       = getEgammaIsEMSelectorCaloOnly( "ElectronPhotonSelectorTools/trigger/rel21_20170217")
+    HLTIsEMSelectorList          = getElectronIsEMSelector( "ElectronPhotonSelectorTools/trigger/rel21_20170217")
+    EFCaloLikelihoodSelectorList = getEgammaLikelihoodSelectorCaloOnly( "ElectronPhotonSelectorTools/trigger/rel21_20170217")
+    HLTLikelihoodSelectorList    = getElectronLikelihoodSelectorNoD0( "ElectronPhotonSelectorTools/trigger/rel21_20170217")
+
+  elif runFlag == '2018':
+    # trigger configuration
+    EFCaloIsEMSelectorList       = getEgammaIsEMSelectorCaloOnly( "ElectronPhotonSelectorTools/trigger/rel21_20180312")
+    HLTIsEMSelectorList          = getElectronIsEMSelector( "ElectronPhotonSelectorTools/trigger/rel21_20180312")
+    EFCaloLikelihoodSelectorList = getEgammaLikelihoodSelectorCaloOnly( "ElectronPhotonSelectorTools/trigger/rel21_20180312")
+    HLTLikelihoodSelectorList    = getElectronLikelihoodSelectorNoD0( "ElectronPhotonSelectorTools/trigger/rel21_20180312")
+
+  else:
+    print 'Wrong run flag configuration'
+ 
+  # create the event selection tool
+  TrigEgammaEventSelection = PublicToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaEventSelection, name ="TrigEgammaEventSelection",
+          Analysis='EventsSelection',
+          ElectronKey = 'Electrons',
+          MatchTool = EgammaMatchTool,
+          PlotTool=TrigEgammaPlotTool,
+          EmulationTool=EmulationTool, # The emulation must be on in this tool.
+          doEmulation=True,
+          Tools=[],
+          isEMResultNames=["Tight","Medium","Loose"],
+          LHResultNames=["LHTight","LHMedium","LHLoose"],
+          ElectronLHVLooseTool=VeryLooseLHSelector,
+          ZeeLowerMass=80,
+          ZeeUpperMass=100,
+          OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose 
+          OfflineProbeSelector='Loose', 
+          ForceProbePid=False, 
+          OppositeCharge=True,
+          RemoveCrack=False,
+          OfflineTagMinEt=25,
+          OfflineProbeMinEt=4,
+          CutLabels=["Events","LAr","RetrieveElectrons","TwoElectrons","PassTrigger","EventWise","Success"],
+          TagTriggerList=["e24_tight_iloose"],
+          TriggerList=monitoringTP_electron,
+          ApplyMinimalTrigger = False,
+          SelectionZ=True,
+          SelectionW=False,
+          SelectionJpsi=False,
+          SelectionFakes=False,
+          SelectionMC=False,
+          ForceTrigAttachment=True,
+          DetailedDataLevel=0, # 0 = VerySlim, 1 = Slim and 2 = Full
+          # Asg selectors to decorate my final skimmed ntuple.
+          EFCaloElectronLikelihoodSelector=EFCaloLikelihoodSelectorList,
+          EFCaloElectronIsEMSelector=EFCaloIsEMSelectorList,
+          HLTElectronLikelihoodSelector=HLTLikelihoodSelectorList,
+          HLTElectronIsEMSelector=HLTIsEMSelectorList,
+          ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector],
+          ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], 
+ 
+          )
+  
+  
+  # Return the template
+  return TrigEgammaEventSelection
+
+
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaProbelist.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaProbelist.py
index 7a86304b75c8..cad747178a9a 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaProbelist.py
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaProbelist.py
@@ -484,6 +484,7 @@ defaultJpsi=[
   "HLT_e5_lhvloose",
 ]
 
+
 # Lowest single electron triggers for TP analysis
 monitoringTP_electron_extra =[
   'HLT_e24_lhmedium_L1EM18VH',
@@ -514,3 +515,37 @@ monitoringTP_electron_extra =[
 ]
 
 
+
+### Make supproting trigger list for the emulation e/g tool
+supportingTriggerList = probeListLowMidPtSupportingTriggers+probeListHighPtSupportingTriggers
+# Update the supporting list with very loose chains. This will be used in data collisin matches
+for trig in probeListLowMidPtPhysicsTriggers+probeListHighPtPhysicsTriggers:
+  if 'vloose' in trig:  supportingTriggerList.append(trig)
+
+supportingTriggerList.extend( [
+  'HLT_e24_lhvloose_nod0_L1EM20VH',
+  'HLT_e26_lhvloose_nod0_L1EM20VH',
+  'HLT_e28_lhvloose_nod0_L1EM20VH',
+  'HLT_e140_lhvloose_nod0',
+  'HLT_e10_lhvloose_nod0_L1EM7',
+  'HLT_e10_lhvloose_nod0_L1EM7',
+  'HLT_e15_lhvloose_nod0_L1EM7',
+  'HLT_e20_lhvloose_nod0_L1EM12',
+  'HLT_e25_lhvloose_nod0_L1EM15',
+  'HLT_e30_lhvloose_nod0_L1EM15',
+  'HLT_e40_lhvloose_nod0_L1EM15',
+  'HLT_e50_lhvloose_nod0_L1EM15',
+  'HLT_e70_lhvloose_nod0',
+  'HLT_e80_lhvloose_nod0',
+  'HLT_e100_lhvloose_nod0',
+  'HLT_e120_lhvloose_nod0',
+  'HLT_e5_lhvloose_nod0',
+  'HLT_e12_lhvloose_nod0_L1EM10VH',
+  'HLT_e17_lhvloose_nod0',
+  'HLT_e20_lhvloose_nod0',
+  'HLT_e40_lhvloose_nod0',
+  'HLT_e60_lhvloose_nod0',
+] )
+
+
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
new file mode 100644
index 000000000000..740c69cdd444
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
@@ -0,0 +1,249 @@
+
+####################################################################################################
+# Job options for standalone and Tier0 running of AnalysisTools 
+# Authors: 
+# Ryan Mackenzie White <ryan.white@cern.ch>
+# Joao Victor Pinto    <jodafons@cern.ch>
+# 
+# Tool and algorithm configuration done using egamma Factories
+#
+# To run
+# athena -l DEBUG -c "DIR='/afs/cern.ch/work/j/jolopezl/datasets/\
+#                     valid1.147406.PowhegPythia8_AZNLO_Zee.recon.AOD.e3099_s2578_r6220_tid05203475_00'" 
+#                 -c "NOV=50" test_ZeeElectronLowPtSupportingTrigAnalysis.py
+# where NOV is the number of events to run
+####################################################################################################
+
+
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from RecExConfig.RecFlags import rec
+from RecExConfig.RecAlgsFlags import recAlgs
+from AthenaCommon.AppMgr import ToolSvc
+import os
+
+# Define triggers for tagging 
+tagList = ['HLT_e24_lhtight_nod0_ivarloose',
+           'HLT_e26_lhtight_nod0_ivarloose',
+           'HLT_e28_lhtight_nod0_ivarloose']
+
+triggerList_commissioning_v1 = [
+          
+         # standard monitoring chains
+         #'HLT_e17_lhvloose_nod0_L1EM15VHI',
+         'HLT_e17_lhvloose_nod0',
+         'HLT_e26_lhloose_nod0',
+         'HLT_e26_lhmedium_nod0',
+         #'HLT_e26_lhtight_nod0',
+         #'HLT_e26_lhtight_nod0_ivarloose',
+         'HLT_e28_lhtight_nod0_ivarloose',
+         'HLT_e60_lhmedium_nod0_L1EM24VHI',
+         'HLT_e140_lhloose_nod0_L1EM24VHI',
+         # ringer chains for the commissioning...
+         #'HLT_e17_lhvloose_nod0_ringer_L1EM15VHI',
+         'HLT_e17_lhvloose_nod0_ringer',
+         'HLT_e26_lhloose_nod0_ringer',
+         'HLT_e26_lhmedium_nod0_ringer',
+         #'HLT_e26_lhtight_nod0_ringer',
+         #'HLT_e26_lhtight_nod0_ringer_ivarloose',
+         'HLT_e28_lhtight_nod0_ringer_ivarloose',
+         'HLT_e60_lhmedium_nod0_ringer_L1EM24VHI',
+         'HLT_e140_lhloose_nod0_ringer_L1EM24VHI',
+    ]
+
+
+triggerList_monitoring_v1 = [
+         # standard monitoring chains
+         'HLT_e17_lhvloose_nod0_L1EM15VHI',
+         'HLT_e26_lhtight_nod0_ivarloose',
+         'HLT_e28_lhtight_nod0_icaloloose',
+         'HLT_e60_lhmedium_nod0_L1EM24VHI',
+         'HLT_e140_lhloose_nod0_L1EM24VHI',
+         # no ringer chains for pos-commissioning...
+         'HLT_e17_lhvloose_nod0_noringer_L1EM15VHI',
+         'HLT_e26_lhtight_nod0_noringer_ivarloose',
+         'HLT_e28_lhtight_nod0_noringer_ivarloose',
+         'HLT_e60_lhmedium_nod0_noringer_L1EM24VHI',
+         'HLT_e140_lhloose_nod0_noringer_L1EM24VHI',
+
+      ]
+
+
+triggerList = triggerList_monitoring_v1
+
+doGRL=False
+doEmulation=True
+DetailedHistograms=False
+####################################################################################################
+dirtouse = str()
+finallist=[]
+grllist=[]
+
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags as acf
+from glob import glob
+
+if ('FILE' in dir()):
+    acf.FilesInput=[FILE]
+elif ('DIR' in dir()):
+    inputFiles = glob(DIR+'*')
+    acf.FilesInput=inputFiles
+if 'NOV' in dir():
+    nov=NOV
+else :
+    nov=500
+if 'GRL' in dir():
+  grllist.append(GRL)
+else:
+  #grllist.append('/afs/cern.ch/work/j/jodafons/public/data/data15_13TeV.periodAllYear_DetStatus-v79-repro20-02_DQDefects-00-02-02_PHYS_StandardGRL_All_Good_25ns.xml')
+  #grllist.append('data15_13TeV.periodAllYear_DetStatus-v79-repro20-02_DQDefects-00-02-02_PHYS_StandardGRL_All_Good_25ns.xml')
+  #grllist.append('/afs/cern.ch/work/j/jodafons/public/data/data16_13TeV.periodAllYear_DetStatus-v81-pro20-10_DQDefects-00-02-02_PHYS_StandardGRL_All_Good_25ns.xml')
+  #grllist.append('data16_13TeV.periodAllYear_DetStatus-v81-pro20-10_DQDefects-00-02-02_PHYS_StandardGRL_All_Good_25ns.xml')
+  grllist.append('data17_13TeV.periodAllYear_DetStatus-v92-pro21-05_Unknown_PHYS_StandardGRL_All_Good_25ns_Triggerno17e33prim.xml')
+
+####################################################################################################
+
+acf.EvtMax=nov
+rec.readAOD=True
+# switch off detectors
+rec.doForwardDet=False
+rec.doInDet=False
+rec.doCalo=False
+rec.doMuon=False
+rec.doEgamma=False
+rec.doTrigger=True
+recAlgs.doTrigger=False # disable trigger (maybe necessary if detectors switched off)
+rec.doMuon=False
+rec.doMuonCombined=False
+rec.doWriteAOD=True
+rec.doWriteESD=False
+rec.doDPD=False
+rec.doTruth=False
+# autoconfiguration might trigger undesired feature
+rec.doESD.set_Value_and_Lock(False)      # uncomment if do not run ESD making algorithms
+rec.doWriteESD.set_Value_and_Lock(False) # uncomment if do not write ESD
+rec.doAOD.set_Value_and_Lock(True)       # uncomment if do not run AOD making algorithms
+rec.doWriteAOD.set_Value_and_Lock(False) # uncomment if do not write AOD
+rec.doWriteTAG.set_Value_and_Lock(False) # uncomment if do not write TAG
+
+# main jobOption
+include ("RecExCommon/RecExCommon_topOptions.py")
+MessageSvc.debugLimit = 20000000
+MessageSvc.infoLimit  = 20000000
+
+# Add Trigger Decision Tool 
+from TrigDecisionTool.TrigDecisionToolConf import Trig__TrigDecisionTool
+tdt = Trig__TrigDecisionTool( "TrigDecisionTool" )
+tdt.TrigDecisionKey='xTrigDecision'
+tdt.Navigation.ReadonlyHolders=True
+ToolSvc+=tdt
+
+try:
+  include ("AthenaMonitoring/DataQualityInit_jobOptions.py")
+except Exception:
+  treatException("Could not load AthenaMonitoring/DataQualityInit_jobOptions.py")
+
+
+
+
+# Call top sequence
+from AthenaCommon.AlgSequence import AlgSequence, AthSequencer
+topSequence = AlgSequence()
+
+
+##################################### GRL Tools ##########################################
+# Good Run List (GRL)
+if doGRL:
+  from RecExConfig.InputFilePeeker import inputFileSummary
+  try:
+    if inputFileSummary['evt_type'][0] == "IS_DATA":
+      from GoodRunsLists.GoodRunsListsConf import *
+      ToolSvc += GoodRunsListSelectorTool()
+      GoodRunsListSelectorTool.GoodRunsListVec = grllist 
+      from GoodRunsListsUser.GoodRunsListsUserConf import *
+      seq = AthSequencer("AthFilterSeq")
+      seq += GRLTriggerSelectorAlg('GRLTriggerAlg1')
+      #seq.GRLTriggerAlg1.GoodRunsListArray = ['PHYS_StandardGRL_All_Good_25ns']  
+      seq.GRLTriggerAlg1.GoodRunsListArray = [grllist[0].replace('.xml','')]  
+  except:
+    print "GRL not available!"
+  
+##################################### Mon Tools ##########################################
+
+from AthenaMonitoring.AthenaMonitoringConf import AthenaMonManager
+topSequence += AthenaMonManager( "HLTMonManager")
+HLTMonManager = topSequence.HLTMonManager
+################ Mon Tools #################
+#Global HLTMonTool
+from TrigHLTMonitoring.TrigHLTMonitoringConf import HLTMonTool
+HLTMon = HLTMonTool(name  = 'HLTMon', histoPathBase = "HLT");
+ToolSvc += HLTMon;
+HLTMonManager.AthenaMonTools += [ "HLTMonTool/HLTMon" ];
+
+####################################################################################################
+#Define the base path for all histograms
+
+
+
+basePath = '/HLT/Egamma'
+#Configure the TrigEgammaPlotTool
+from TrigEgammaAnalysisTools.TrigEgammaAnalysisToolsConfig import TrigEgammaNavTPAnalysisTool, TrigEgammaPlotTool, EfficiencyTool, DistTool, ResolutionTool
+from TrigEgammaAnalysisTools.TrigEgammaProbelist           import monitoring_mam, monitoring_electron, monitoring_photon 
+from TrigEgammaAnalysisTools.TrigEgammaProbelist           import probeListLowMidPtSupportingTriggers, probeListHighPtSupportingTriggers
+
+PlotTool = TrigEgammaPlotTool.copy( name="TrigEgammaPlotTool",
+                                    DirectoryPath=basePath,
+                                    MaM=monitoring_mam,
+                                    Efficiency=[],
+                                    Distribution=[],
+                                    Resolution=[])
+
+EffTool = EfficiencyTool.copy(name="EfficiencyTool",
+                              PlotTool=PlotTool,
+                              isEMResultNames=["Tight","Medium","Loose"],
+                              LHResultNames=["LHTight","LHMedium","LHLoose"],
+                              OutputLevel=0)
+
+
+
+####################################################################################################
+from TrigEgammaEmulationTool.TrigEgammaEmulationToolConfig import TrigEgammaEmulationTool
+from TrigEgammaEmulationTool.TrigEgammaEmulationEFConfig   import EgammaEFElectronDefaultEmulator,EgammaEFElectronNoD0Emulator
+from TriggerJobOpts.TriggerFlags import TriggerFlags
+
+# Force this emulation selector path
+TriggerFlags.EgammaSlice.pidVersion.set_Value_and_Lock("ElectronPhotonSelectorTools/trigger/rel21_20170217/")
+TriggerFlags.EgammaSlice.ringerVersion.set_Value_and_Lock("RingerSelectorTools/TrigL2_20170505_v6")
+
+EmulationElectronTool = TrigEgammaEmulationTool.copy( name="TrigEgammaEmulationTool",
+                                                      TriggerList = triggerList,
+                                                      DoL2ElectronFex=True,
+                                                      DoEFCaloPid=False,
+                                                      DoRinger=True,
+                                                      OutputLevel=0)
+
+####################################################################################################
+
+AnalysisTool = TrigEgammaNavTPAnalysisTool( name = "TrigEgammaNavTPAnalysisTool",
+                                            Analysis='Zee',
+                                            PlotTool=PlotTool,
+                                            Tools=[EffTool],
+                                            OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose
+                                            OfflineProbeSelector='Loose', 
+                                            DefaultProbePid='LHMedium',
+                                            doEmulation=doEmulation,
+                                            DetailedHistograms=DetailedHistograms,
+                                            EmulationTool=EmulationElectronTool,
+                                            TPTrigger=False,
+                                            RemoveCrack=False,
+                                            TagTriggerList=tagList,
+                                            TriggerList=triggerList,
+                                            OutputLevel=0)
+
+####################################################################################################
+Tools=['TrigEgammaNavTPAnalysisTool/TrigEgammaNavTPAnalysisTool']
+from TrigEgammaAnalysisTools.TrigEgammaAnalysisToolsConf import TrigEgammaMonTool
+TrigEgammaMonTool = TrigEgammaMonTool( name = "HLTEgammaMon", histoPathBase=basePath, Tools=Tools)
+ToolSvc += TrigEgammaMonTool
+HLTMonManager.AthenaMonTools += [ "TrigEgammaMonTool/HLTEgammaMon" ]
+HLTMonManager.FileKey = "GLOBAL"
+ToolSvc.TrigDecisionTool.Navigation.OutputLevel = WARNING
+####################################################################################################
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py
new file mode 100644
index 000000000000..bc80bef8197f
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py
@@ -0,0 +1,193 @@
+# Job options for standalone and Tier0 running of AnalysisTools 
+# Authors: 
+# Ryan Mackenzie White <ryan.white@cern.ch>
+# 
+# Tool and algorithm configuration done using egamma Factories
+# Default configurations found in TrigEgammaAnalysisToolsConfig
+#
+# To run
+# athena -l DEBUG -c "DIR='/afs/cern.ch/work/j/jolopezl/datasets/valid1.147406.PowhegPythia8_AZNLO_Zee.recon.AOD.e3099_s2578_r6220_tid05203475_00'" 
+#                 -c "NOV=50" test_ZeeElectronLowPtSupportingTrigAnalysis.py
+# where NOV is the number of events to run
+
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from RecExConfig.RecFlags import rec
+from RecExConfig.RecAlgsFlags import recAlgs
+from AthenaCommon.AppMgr import ToolSvc
+import os
+
+doZ=True
+doFakes=True
+
+# Define triggers for tagging 
+triggerTags     = ['HLT_e24_lhtight_nod0_ivarloose',
+                   'HLT_e26_lhtight_nod0_ivarloose',
+                   'HLT_e28_lhtight_nod0_ivarloose']
+
+triggerList = [
+         # standard monitoring chains
+         'HLT_e26_lhtight_nod0_ivarloose',
+         'HLT_e28_lhtight_nod0_ivarloose',
+         'HLT_e60_lhmedium_nod0_L1EM24VHI',
+         # no ringer chains for pos-commissioning...
+         'HLT_e26_lhtight_nod0_noringer_ivarloose_L1EM22VHI',
+         'HLT_e28_lhtight_nod0_noringer_ivarloose', # get real TDT
+         'HLT_e28_lhtight_nod0_noringer_ivarloose_L1EM24VHI',
+         'HLT_e60_lhmedium_nod0_noringer_L1EM24VHI',
+      ]
+
+
+
+#print 'Set some variables for job'
+dirtouse = str()
+finallist=[]
+
+if 'FILE' in dir() :
+     finallist.append(FILE)
+
+if 'DIR' in dir() :
+     dirtouse=DIR      
+     print 'DIR = ',dirtouse
+     while( dirtouse.endswith('/') ) :
+          dirtouse= dirtouse.rstrip('/')
+     listfiles=os.listdir(dirtouse)
+     for ll in listfiles:
+          finallist.append(dirtouse+'/'+ll)
+
+if 'NOV' in dir():
+    nov=NOV
+else :
+    nov=-1
+
+
+print  finallist 
+athenaCommonFlags.FilesInput=finallist
+athenaCommonFlags.EvtMax=nov
+rec.readAOD=True
+# switch off detectors
+rec.doForwardDet=False
+rec.doInDet=False
+rec.doCalo=False
+rec.doMuon=False
+rec.doEgamma=False
+rec.doTrigger = True; recAlgs.doTrigger=False # disable trigger (maybe necessary if detectors switched off)
+rec.doMuon=False
+rec.doAOD=False
+rec.doMuonCombined=False
+rec.doWriteAOD=False
+rec.doWriteESD=False
+rec.doDPD=False
+rec.doTruth=False
+
+# autoconfiguration might trigger undesired feature
+rec.doESD.set_Value_and_Lock(False) # uncomment if do not run ESD making algorithms
+rec.doWriteESD.set_Value_and_Lock(False) # uncomment if do not write ESD
+rec.doAOD.set_Value_and_Lock(True) # uncomment if do not run AOD making algorithms
+rec.doWriteAOD.set_Value_and_Lock(False) # uncomment if do not write AOD
+rec.doWriteTAG.set_Value_and_Lock(False) # uncomment if do not write TAG
+
+# main jobOption
+include ("RecExCommon/RecExCommon_topOptions.py")
+MessageSvc.debugLimit = 20000000
+MessageSvc.infoLimit  = 20000000
+# TDT
+from TrigDecisionTool.TrigDecisionToolConf import Trig__TrigDecisionTool
+tdt = Trig__TrigDecisionTool( "TrigDecisionTool" )
+tdt.TrigDecisionKey='xTrigDecision'
+tdt.Navigation.ReadonlyHolders=True
+ToolSvc+=tdt
+
+try:
+  include ("AthenaMonitoring/DataQualityInit_jobOptions.py")
+except Exception:
+  treatException("Could not load AthenaMonitoring/DataQualityInit_jobOptions.py")
+
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+from AthenaMonitoring.AthenaMonitoringConf import AthenaMonManager
+topSequence += AthenaMonManager( "HLTMonManager")
+HLTMonManager = topSequence.HLTMonManager
+
+################ Mon Tools #################
+#Global HLTMonTool
+
+from TrigHLTMonitoring.TrigHLTMonitoringConf import HLTMonTool
+HLTMon = HLTMonTool(name  = 'HLTMon', histoPathBase = "HLT");
+
+ToolSvc += HLTMon;
+HLTMonManager.AthenaMonTools += [ "HLTMonTool/HLTMon" ];
+    
+from TrigEgammaAnalysisTools.TrigEgammaAnalysisToolsConfig import TrigEgammaPlotTool, getEventSelectionTool
+#Define the base path for all histograms
+basePath = '/HLT/Physval'
+
+#Configure the TrigEgammaPlotTool
+PlotTool = TrigEgammaPlotTool.copy( name="TrigEgammaPlotTool",
+                                    DirectoryPath=basePath,
+                                    #MaM=monitoring_mam,
+                                    Efficiency=[],
+                                    Distribution=[],
+                                    Resolution=[])
+
+TrigEgammaEventSelection = getEventSelectionTool()
+
+####################################################################################################
+
+from TrigEgammaEmulationTool.TrigEgammaEmulationToolConfig import TrigEgammaEmulationTool
+from TrigEgammaEmulationTool.TrigEgammaEmulationEFConfig   import EgammaEFElectronDefaultEmulator,EgammaEFElectronNoD0Emulator
+from TriggerJobOpts.TriggerFlags import TriggerFlags
+
+# Force this emulation selector path
+TriggerFlags.EgammaSlice.pidVersion.set_Value_and_Lock("ElectronPhotonSelectorTools/trigger/rel21_20170217/")
+TriggerFlags.EgammaSlice.ringerVersion.set_Value_and_Lock("RingerSelectorTools/TrigL2_20170505_v6")
+
+EmulationElectronTool = TrigEgammaEmulationTool.copy( name="TrigEgammaEmulationTool",
+                                                      TriggerList = triggerList,
+                                                      DoL2ElectronFex=True,
+                                                      DoEFCaloPid=False,
+                                                      DoRinger=True,
+                                                      OutputLevel=0)
+
+####################################################################################################
+
+
+Tool = TrigEgammaEventSelection( name='EventSelection',
+                              Analysis='Probes',
+                              PlotTool=PlotTool,
+                              EmulationTool=EmulationElectronTool,
+                              File="",
+                              OutputLevel=0,
+                              DetailedHistograms=False,
+                              isEMResultNames=["Tight","Medium","Loose"],
+                              LHResultNames=["LHTight","LHMedium","LHLoose"],
+                              ZeeLowerMass=80,
+                              ZeeUpperMass=100,
+                              OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose
+                              OfflineProbeSelector='Loose', 
+                              ForceProbePid=False, 
+                              OppositeCharge=True,
+                              OfflineTagMinEt=25,
+                              TagTriggerList=triggerTags,
+                              SelectionZ=doZ,
+                              SelectionFakes=doFakes,
+                              ApplyMinimalTrigger=False,
+                              DetailedDataLevel=2,
+                              DumpTags=False,
+                              TriggerList=triggerList)
+
+Tools=['TrigEgammaEventSelection/EventSelection']
+
+from TrigEgammaAnalysisTools.TrigEgammaAnalysisToolsConf import TrigEgammaMonTool
+TrigEgammaMonTool = TrigEgammaMonTool( name = "HLTEgammaMon", 
+                                       histoPathBase=basePath,
+                                       Tools=Tools)
+
+ToolSvc += TrigEgammaMonTool
+
+#TrigEgammaMonToolConfig.TrigEgammaMonTool()
+HLTMonManager.AthenaMonTools += [ "TrigEgammaMonTool/HLTEgammaMon" ]
+HLTMonManager.FileKey = "GLOBAL"
+
+
+    
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/TrigEgammaMonTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/TrigEgammaMonTool.cxx
index dd7bd078d5ca..84c3551dfeba 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/TrigEgammaMonTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/TrigEgammaMonTool.cxx
@@ -27,20 +27,23 @@ TrigEgammaMonTool( const std::string & type, const std::string & name, const IIn
 }
 
 TrigEgammaMonTool::~TrigEgammaMonTool(){}
-StatusCode TrigEgammaMonTool::init(){
-   
+
+
+StatusCode TrigEgammaMonTool::init(){   
   return StatusCode::SUCCESS; 
 }
 
 StatusCode TrigEgammaMonTool::book(){
     ATH_MSG_INFO("Initializing " << name() << "...");
-    ATH_MSG_INFO("Retrieving tools...");
+    ATH_MSG_INFO("Retrieving tools..." << m_asgToolNames.size());
 
     for(const auto toolname : m_asgToolNames){
+        ATH_MSG_INFO("Add "<<toolname<<"..." );
         m_asgtools.push_back(ToolHandle<ITrigEgammaAnalysisBaseTool>(toolname));
     }
     for ( ToolHandleArray<ITrigEgammaAnalysisBaseTool>::const_iterator itoo=m_asgtools.begin();
             itoo!=m_asgtools.end(); ++itoo ) {
+        ATH_MSG_INFO("Initializing..." );
         ToolHandle<ITrigEgammaAnalysisBaseTool> htool = *itoo;
         htool->setParent(this);
         StatusCode sc = htool->initialize();
@@ -56,8 +59,6 @@ StatusCode TrigEgammaMonTool::book(){
     }
     
     ATH_MSG_INFO("Tool retrieval completed.");
-
-
     return StatusCode::SUCCESS;
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
index 77b8a9677f6e..9ca518c5150f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
@@ -1,3 +1,6 @@
+
+
+
 #include "TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h"
 #include "../TrigEgammaMonTool.h"
 #include "../TrigEgammaPhysValMonTool.h"
@@ -5,28 +8,25 @@
 #include "TrigEgammaAnalysisTools/TrigEgammaNavAnalysisTool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaNavTPAnalysisTool.h"
-#include "TrigEgammaAnalysisTools/TrigEgammaNavNtuple.h"
-#include "TrigEgammaAnalysisTools/TrigEgammaNavTPNtuple.h"
 #include "TrigEgammaAnalysisTools/EfficiencyTool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaResolutionTool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaDistTool.h"
 #include "TrigEgammaAnalysisTools/TrigEgammaPlotTool.h"
+#include "TrigEgammaAnalysisTools/TrigEgammaEventSelection.h"
 #include "../TrigEgammaAnalysisAlg.h"
 #include "../TrigEgammaTDToolTest.h"
 
-DECLARE_COMPONENT( TrigEgammaAnalysisBaseTool )
-DECLARE_COMPONENT( TrigEgammaMonTool )
-DECLARE_COMPONENT( TrigEgammaPhysValMonTool )
-DECLARE_COMPONENT( TrigEgammaNavTPBaseTool )
-DECLARE_COMPONENT( TrigEgammaNavTPNtuple )
-DECLARE_COMPONENT( TrigEgammaNavAnalysisTool )
-DECLARE_COMPONENT( TrigEgammaNavTPAnalysisTool )
-DECLARE_COMPONENT( TrigEgammaNavNtuple )
-DECLARE_COMPONENT( EfficiencyTool ) 
-DECLARE_COMPONENT( TrigEgammaResolutionTool ) 
-DECLARE_COMPONENT( TrigEgammaDistTool ) 
-DECLARE_COMPONENT( TrigEgammaPlotTool ) 
-DECLARE_COMPONENT( TrigEgammaAnalysisAlg )
-DECLARE_COMPONENT( TrigEgammaTDToolTest )
-    
+DECLARE_COMPONENT(TrigEgammaAnalysisBaseTool)
+DECLARE_COMPONENT(TrigEgammaMonTool)
+DECLARE_COMPONENT(TrigEgammaPhysValMonTool)
+DECLARE_COMPONENT(TrigEgammaNavTPBaseTool)
+DECLARE_COMPONENT(TrigEgammaNavAnalysisTool)
+DECLARE_COMPONENT(TrigEgammaNavTPAnalysisTool)
+DECLARE_COMPONENT(EfficiencyTool) 
+DECLARE_COMPONENT(TrigEgammaResolutionTool) 
+DECLARE_COMPONENT(TrigEgammaDistTool) 
+DECLARE_COMPONENT(TrigEgammaPlotTool) 
+DECLARE_COMPONENT(TrigEgammaEventSelection) 
+DECLARE_COMPONENT(TrigEgammaAnalysisAlg)
+DECLARE_COMPONENT(TrigEgammaTDToolTest)
 
-- 
GitLab


From 9c97736249a3498d1e9071d63f7eadeeac23301b Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Wed, 6 Mar 2019 18:50:35 +0100
Subject: [PATCH 010/163] fix the memory leak as point by the review in
 tpbase.cxx

---
 .../Root/TrigEgammaNavBaseTool.cxx                  | 11 +++++++----
 .../Root/TrigEgammaNavTPBaseTool.cxx                | 13 +++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
index 9a2c3d3cae20..73cf6e0b6b5b 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
@@ -218,10 +218,10 @@ StatusCode TrigEgammaNavBaseTool::executeElectronNavigation( std::string trigIte
 
       if(m_forcePidSelection){///default is true
         if(!ApplyElectronPid(eg,pidname)){
-	    ATH_MSG_DEBUG("Fails ElectronID "<< pidname);
-	    continue;
-	}
-	ATH_MSG_DEBUG("Passes ElectronID "<< pidname);
+	        ATH_MSG_DEBUG("Fails ElectronID "<< pidname);
+	        continue;
+	      }
+	      ATH_MSG_DEBUG("Passes ElectronID "<< pidname);
       }
 
       if (m_forceProbeIsolation) {///default is false
@@ -306,6 +306,9 @@ StatusCode TrigEgammaNavBaseTool::executePhotonNavigation( std::string trigItem,
 }
 
 void TrigEgammaNavBaseTool::clearList(){
+    for( auto paitIt : m_objTEList )
+      delete paitIt.first;
+
     m_objTEList.clear();
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
index 89cbec013150..b9a15b8223d9 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
@@ -82,7 +82,10 @@ StatusCode TrigEgammaNavTPBaseTool::childExecute() {
 StatusCode TrigEgammaNavTPBaseTool::childFinalize() {
 
    ATH_MSG_VERBOSE( "child Finalize tool " << name() );
+   // delete electron pointers alloc in the tap execute method and
+   // clear the list of pairs
    clearProbeList();
+   // clear the list of pairs
    clearPairList();
    //m_offElectrons->clearDecorations();
 
@@ -296,11 +299,21 @@ void TrigEgammaNavTPBaseTool::matchObjects(const std::string probeTrigItem){
 }
 
 void TrigEgammaNavTPBaseTool::clearProbeList(){
+
+    ATH_MSG_DEBUG("Clear all Probes...");
+    // this vector hold the Electron pointer and need to
+    // be deleted since we alloc such memory for than
+    for (auto it : m_probeElectrons) 
+      delete it;
     m_probeElectrons.clear();
+    
     m_probePhotons.clear();
 }
 
 void TrigEgammaNavTPBaseTool::clearPairList(){
+
+    ATH_MSG_DEBUG("Clear all Pairs...");
+    // this only hold < Electron * , TriggerElement * >
     m_pairObj.clear();
 }
 
-- 
GitLab


From 933c34dcd526c15c27b594b7a1a6c07c3f486123 Mon Sep 17 00:00:00 2001
From: Tim Martin <tim.martin@cern.ch>
Date: Fri, 8 Mar 2019 13:48:05 +0000
Subject: [PATCH 011/163] Revert "Merge branch 'revert-2bed096f' into 'master'"

This reverts merge request !21752
---
 .../TrigHLTJetHypoUtils/DijetMTCondition.h    |  61 +++
 .../TrigHLTJetHypoUtils/conditionsFactory2.h  |   8 +
 .../TrigHLTJetHypo/python/ChainLabelParser.py | 390 +++++++++++++++++
 .../TrigHLTJetHypo/python/ToolSetter.py       | 134 ++++++
 .../python/TrigJetHypoToolConfig.py           | 102 ++---
 .../python/chainDict2jetLabel.py              | 106 +++++
 .../TrigHLTJetHypo/python/chainDictDumper.py  |  22 +
 .../TrigHLTJetHypo/python/constants.py        |   6 +
 .../TrigHLTJetHypo/python/node.py             |  69 +++
 .../TrigHLTJetHypo/python/test_cases.py       |  70 ++++
 .../TrigHLTJetHypo/python/treeVisitors.py     | 392 ++++++++++++++++++
 .../TrigHLTJetHypoUtils/DijetMTCondition.cxx  | 101 +++++
 .../conditionsFactory2.cxx                    |  25 ++
 .../TrigHLTJetHypo/src/TrigJetAndToolMT.cxx   |  62 +++
 .../TrigHLTJetHypo/src/TrigJetAndToolMT.h     |  68 +++
 .../src/TrigJetHypoToolConfig_dijet.cxx       |  94 +++++
 .../src/TrigJetHypoToolConfig_dijet.h         |  76 ++++
 .../src/TrigJetHypoToolConfig_simple.cxx      |  92 ++++
 .../src/TrigJetHypoToolConfig_simple.h        |  71 ++++
 .../TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx  |  10 +-
 .../TrigHLTJetHypo/src/TrigJetHypoToolMT.h    |   5 +-
 .../TrigHLTJetHypo/src/TrigJetNotToolMT.cxx   |  63 +++
 .../TrigHLTJetHypo/src/TrigJetNotToolMT.h     |  66 +++
 .../TrigHLTJetHypo/src/TrigJetOrToolMT.cxx    |  60 +++
 .../TrigHLTJetHypo/src/TrigJetOrToolMT.h      |  68 +++
 .../src/components/TrigHLTJetHypo_entries.cxx |  12 +-
 .../TrigUpgradeTest/python/jetDefs.py         |   2 -
 .../TrigUpgradeTest/share/fullMenu.py         |   2 +-
 .../TrigUpgradeTest/share/fullMenu.ref        |  23 +-
 .../TrigUpgradeTest/share/jet.menu.py         |   2 +-
 .../TrigUpgradeTest/share/jetMenu.ref         |  23 +-
 .../TrigUpgradeTest/share/simpleJetJob.py     |  16 +-
 .../HLTMenuConfig/Menu/SignatureDicts.py      |   6 +-
 33 files changed, 2209 insertions(+), 98 deletions(-)
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h

diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
new file mode 100644
index 000000000000..84aef0dc56ad
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGHLTJETHYPO_DIJETMTCONDITION_H
+#define TRIGHLTJETHYPO_DIJETMTCONDITION_H
+
+/********************************************************************
+ *
+ * NAME:     DijetMTCondition.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ * Cuts on paris of jets makling up a dijet
+ *
+ * AUTHOR:   P. Sherwood
+ * CREATED:  February 21, 2019
+ *           
+ *********************************************************************/
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJet.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICondition.h"
+
+
+class DijetMTCondition: public ICondition{
+ public:
+  DijetMTCondition(
+                   double massMin,
+                   double massMax,
+                   double detaMin,
+                   double detaMax,
+                   double dphiMin,
+                   double dphiMax
+                 );
+
+  ~DijetMTCondition() override {}
+
+  bool isSatisfied(const HypoJetVector&) const override;
+  
+  double orderingParameter() const noexcept override;
+  
+  std::string toString() const noexcept override;
+
+ private:
+
+  bool passJetCuts(pHypoJet, pHypoJet) const;
+  bool passDijetCuts(pHypoJet, pHypoJet) const;
+
+  // cuts on sum of jets
+  double m_massMin;
+  double m_massMax;
+
+  // cuts on the two jets
+  double m_detaMin;
+  double m_detaMax;
+  
+  double m_dphiMin;
+  double m_dphiMax;
+
+};
+
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h
index 92078f82269f..034926817227 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h
@@ -44,6 +44,14 @@ Conditions conditionsFactoryDijet(const std::vector<double>& etThresholds1,
                                   const std::vector<double>& dphiMins,
                                   const std::vector<double>& dphiMaxs);
 
+Conditions conditionsFactoryDijetMT(const std::vector<double>& massMins,
+                                    const std::vector<double>& massMaxs,
+                                    const std::vector<double>& detaMins,
+                                    const std::vector<double>& detaMaxs,
+                                    const std::vector<double>& dphiMins,
+                                    const std::vector<double>& dphiMaxs);
+
+
 
 // for conditionsFactory2
 Conditions conditionsFactoryDijetEtaMass(const std::vector<double>& etasMin,
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
new file mode 100644
index 000000000000..46230e0139dc
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
@@ -0,0 +1,390 @@
+from node import Node
+from constants import (lchars,
+                       digits,
+                       delims)
+
+
+
+def get_char(s):
+    """character generator"""
+
+    while s:
+        c = s[0]
+        s = s[1:]
+        yield c
+
+def _check_parens(s, pars):
+    pl = pars[0]
+    pr = pars[1]
+    np = 0
+    for c in s:
+        if c == pl: np += 1
+        if c == pr: np -= 1
+        if np < 0:
+            raise RuntimeError('Paren mismatch for parens %s, %s' % (pars, s))
+
+def check_parens(s):
+    _check_parens(s, '()')
+    _check_parens(s, '[]')
+    
+            
+
+def preprocess(s):
+    llines  = s.split('\n')
+
+    lines  = [l.split('#')[0].strip() for l in llines]
+    s = ''.join(lines)
+    ss = ''
+    reject = ' \n'
+    for c in s:
+        # keep white space whn within square brackets, reject otherwise
+        if c not in reject:
+            ss += c
+    s = ss      
+
+    check_parens(s)
+    print s
+    from constants import alphabet
+    for c in s:
+        if not c in alphabet:
+            raise RuntimeError('bad character %s in string %s' % (c, s))
+    print 'end of preprocess: ', s
+    return s
+
+
+class ChainLabelParser(object):
+    def __init__(self, label, debug=False):
+        self.label = label
+        self.state = 'start'
+        pp = preprocess(label)
+        print 'preprocessd string', pp, 'length', len(pp)
+        self.gc = get_char(pp)
+        self.state_history = []
+        self.states = {
+            'start': self.start,
+            'scenario': self.scen,
+            'start_params_0': self.start_params_0,
+            'start_params_1': self.start_params_1,
+            'params': self.params,
+            'end_params_0': self.end_params_0,
+            'end_params': self.end_params,
+            'end_scenario': self.end_scenario,
+            'error': self.error,
+        }
+        self.debug = debug
+
+    def paramAppend(self, c):
+        self.parameters += c
+        if self.debug:
+            print 'parameters', self.parameters
+
+    def scenAppend(self, c):
+        self.scenario += c
+        if self.debug:
+            print 'scenario', self.scenario
+            
+    def start(self):
+        "initialise"
+
+        self.state = 'scenario'
+        self.scenario = ''
+        self.parameters = ''
+        self.tree = [Node('dummy')]
+        self.msg = ''
+        
+
+    def scen(self):
+        """accumulate scenario name string into self.scenario"""
+        
+        c = self.gc.next()
+    
+        if c in lchars: 
+            self.scenAppend(c)
+            return
+    
+        if c == '(':
+            self.state = 'start_params_0'
+
+            return
+    
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+
+    def start_params_0(self):
+        """accumulate parameter string into self.parameter"""
+
+        self.tree.append(Node(self.scenario))
+        self.scenario = ''
+
+        c = self.gc.next()
+    
+        if c == '[':
+            self.state = 'start_params_1'
+            return
+
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+
+    def start_params_1(self):
+        """accumulate parameter string into self.parameter"""
+        
+        c = self.gc.next()
+    
+        if c == '(':
+            self.paramAppend(c)
+            self.state = 'params'
+            return
+
+        if c == ']':
+            self.state = 'end_params'
+            return
+
+
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+
+    def params(self):
+        """accumulate parameter string into self.parameter"""
+        
+        c = self.gc.next()
+    
+        if c in lchars or c in digits or c ==',':
+            self.paramAppend(c)
+            return
+
+        if c == ')':
+            self.paramAppend(c)
+            self.state = 'end_params_0'
+            return
+
+
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+    
+
+    def end_params_0(self):
+        """Check whether there are more prameters to accumulate"""
+
+        c = self.gc.next()
+
+        # more parameters
+        if c == '(':
+            self.paramAppend(c)
+            self.state = 'params'
+            return
+
+        # end of paramter lists
+        if c == ']':
+            self.tree[-1].parameters = self.parameters.strip()
+            self.parameters = ''
+            self.state = 'end_params'
+            return
+
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+    
+
+    def end_params(self):
+        """after accumulating params, drop white space, then add node to tree
+        or process next scenario"""
+        
+        c = self.gc.next()
+        
+        if c == ')':
+            self.state = 'end_scenario'
+            return
+        
+        if c in lchars:
+            self.scenAppend(c)
+            self.state = 'scenario'
+            return
+        
+        self.msg = 'state %s, bad character %s in string %s' % (self.state,
+                                                                c,
+                                                                self.label)
+        self.state = 'error'
+        
+    def end_scenario(self):
+        """Add current node to its parent"""
+        
+        n = self.tree.pop()
+        self.tree[-1].add_child(n)
+
+        while True:
+            c = self.gc.next()
+            if c == ')':
+                n = self.tree.pop()
+                self.tree[-1].add_child(n)
+            else:
+
+                # more input means a new scenario is starting
+                self.scenario = c
+                self.parameters = ''
+                self.msg = ''
+                self.state = 'scenario'
+        
+                return    
+
+        
+    def error(self):
+        """From error state, dump error report and raise exception"""
+        
+        print '---error state report ---'
+        print ' state', self.state
+        print ' scenario', self.scenario
+        print ' parameters', self.parameters
+        print ' msg', self.msg
+        print 'state history', self.state_history
+        print ' tree dump:'
+        print self.tree[0].dump()
+        print '--end error state report---'
+        raise RuntimeError('error state')
+    
+    def get_state(self):
+        self.state_history.append(self.state)
+        return self.states[self.state]
+    
+
+    
+    def parse(self):
+        "parse a chain label"
+        
+        error = False
+        terminated = False
+
+        self.start()  # re-initialise
+        
+        try:   # parsing ends with an exception
+            while True:   # continue until exception
+
+                # print 'current state', self.state
+                # print 'current scenario', self.scenario
+                # print 'current parameters', self.parameters
+                
+                # self.states[self.state]()  # process the current state
+                self.get_state()()
+                
+        except StopIteration:  # generator has reached the end of the string
+            print 'parse terminated'
+            terminated = True
+        except AssertionError, e:
+            print 'assertion err'
+            print e
+            error = True
+        except RuntimeError, e:
+            print e
+            error = True
+            
+    
+        if not terminated:
+            s = ''
+            try:
+                while True:
+                    s += self.gc.next()
+            except StopIteration:
+                if s:
+                    print 'error: remaining characters:', s
+     
+        if len(self.tree) != 1:
+            error = True
+            print 'error, stack size', len(self.tree), 'expected 2'
+            print self.state_history
+            
+        if len(self.tree[0].children) != 1:
+            error = True
+            print 'error, top node has %d cdildren, expected 1' % (
+                len(self.tree[0].children))
+
+        final_state = 'end_scenario'
+        if self.state != final_state:
+            error = True
+            print 'error: final state is %s, expected %s' % (self.state,
+                                                             final_state)
+        # print 'tree dump:'
+        # print self.tree[0].dump()
+        print 'parse',
+        if not error:
+            print 'succeeded'
+        else:
+            print 'state: %s scenario: %s parameters: %s stack len %d' % (
+                self.state, self.scenario, self.parameters, len(self.tree))
+            print 'failed'
+
+        # Kludge: mark the tops of the trees. The visitor which
+        # creates Tool instances with give the Tool for this node
+        # the name of the chain
+    
+        for c in self.tree[0].children:
+            c.tree_top = True
+
+        # for now (02/01/2019), no reco. First tree is only tree is hypo
+        return self.tree[0].children[0]
+
+def _test(s):
+    from ChainLabelParser import ChainLabelParser
+    parser = ChainLabelParser(s, debug=True)
+    tree = parser.parse()
+    print tree.dump()
+
+
+def test(index):
+    from test_cases import test_strings
+    c = sys.argv[1]
+    index = -1
+    try:
+        index = int(c)
+    except:
+        print 'expected int in [1,%d] ]on comand line, got %s' % (
+            len(test_strins), c)
+        sys.exit()
+
+    print 'index', index
+    print '========== Test %d ==============' % index
+    s = test_strings[index]
+    print s
+    _test(s)
+
+
+def usage(options):
+    print 'usage: ChainLabelPaers -[%s]' % options
+
+  
+if __name__ == '__main__':
+
+    import getopt, sys
+    from test_cases import test_strings
+    ncases = len(test_strings)
+    try:
+        options = "1234567"
+        opts, args = getopt.getopt(sys.argv[1:], options, [])
+    except getopt.GetoptError as err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        usage(options)
+        sys.exit(2)
+
+    assert len(args) == 1
+    o = args[0]
+    try:
+        index = int(o)
+    except:
+        print 'Supply an test case integer index  on the command line '
+        sys.exit(0)
+    
+    if index < 0 or index >= ncases:
+        print 'no such test case ind %d, expect val in [0, %d]'  %(index,
+                                                                   ncases-1)
+        sys.exit(0)
+
+    test(int(o))
+    
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
new file mode 100644
index 000000000000..87c1114df9cf
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
@@ -0,0 +1,134 @@
+from TrigHLTJetHypo.TrigHLTJetHypoConf import (TrigJetHypoToolConfig_simple,
+                                               TrigJetHypoToolConfig_dijet,
+                                               TrigJetNotToolMT,
+                                               TrigJetAndToolMT,
+                                               TrigJetOrToolMT,
+                                               TrigJetHypoToolMT)
+
+
+class ToolSetter(object):
+    """Visitor to set instantiated AlgTools to a jet hypo tree"""
+    
+    def __init__(self, name, dump_jets=True):
+
+        self.chain_name = name
+        self.dump_jets = dump_jets
+        
+        self.tool_factories = {
+            'simple': [TrigJetHypoToolConfig_simple, 0],
+            'not': [TrigJetNotToolMT, 0],
+            'and': [TrigJetAndToolMT, 0],
+            'or': [TrigJetOrToolMT, 0],
+            'dijet': [TrigJetHypoToolConfig_dijet, 0],
+            }
+
+        self.mod_router = {
+            'not': self.mod_logical_unary,
+            'and': self.mod_logical_binary,
+            'or': self.mod_logical_binary,
+            # 'not': self.mod_logical_unary,
+        }
+
+    def mod_logical_binary(self, node):
+        """Set the HypoConfigTool instance the 'and' and 'or' scenarios
+        these take two predicates"""
+        
+        scen = node.scenario
+        klass = self.tool_factories[scen][0]
+        sn = self.tool_factories[scen][1]
+        name = '%s_%d' % (scen, sn)
+        self.tool_factories[scen][1] += 1
+
+        # kludgy. The name of the tool seen by the trigger must be
+        # the trigger name, so have to figure  out if this is the top
+        # level node (actually first daughter, as the start node is the top)
+        # note that the name can only be set once so have to know
+        # if we are the top of the tree while traversing it. kludgy...
+        # also - will break when using a forest...
+
+        print 'Toolsetter, node.tree_top', node.tree_top
+        if node.tree_top:
+            tool = klass(name=self.chain_name)
+        else:
+            tool = klass(name=name)
+
+        print 'ToolSetter, setting lhs ', node.children[0].tool
+        tool.lhs = node.children[0].tool
+        tool.rhs = node.children[1].tool
+        node.tool = tool
+
+
+    def mod_logical_unary(self, node):
+        """Set the HypoConfigTool instance for the 'not' scenario
+        this takes a single predicate"""
+        
+        scen = node.scenario
+        klass = self.tool_factories[scen][0]
+        sn = self.tool_factories[scen][1]
+        name = '%s_%d' % (scen, sn)
+        self.tool_factories[scen][1] += 1
+
+        # kludgy. The name of the tool seen by the trigger must be
+        # the trigger name, so have to figure  out if this is the top
+        # level node (actually first daughter, as the start node is the top)
+        # note that the name can only be set once so have to know
+        # if we are the top of the tree while traversing it. kludgy...
+        # also - will break when using a forest...
+
+        print 'Toolsetter, node.tree_top', node.tree_top
+        if node.tree_top:
+            tool = klass(name=self.chain_name)
+        else:
+            tool = klass(name=name)
+
+        print 'ToolSetter, setting lhs ', node.children[0].tool
+        tool.hypoTool = node.children[0].tool
+        node.tool = tool
+                               
+
+                               
+    def mod_simple(self, node):
+        """Set the HypoConfigTool instance in a hypo tree node"""
+
+        scen = node.scenario
+        klass = self.tool_factories[scen][0]
+        sn = self.tool_factories[scen][1]
+        name = '%s_%d' % (scen, sn)
+        
+        self.tool_factories[scen][1] += 1
+
+        config_tool = klass(name=name+'_config')
+        [setattr(config_tool, k, v) for k, v in node.conf_attrs.items()]
+        
+        # kludgy. The name of the tool seen by the trigger must be
+        # the trigger name, so have to figure  out if this is the top
+        # level node (actually first daughter, as the start node is the top)
+        # note that the name can only be set once so have to know
+        # if we are the top of the tree while traversing it. kludgy...
+        # also - will break when using a forest...
+        print 'Toolsetter, node.tree_top', node.tree_top
+        if node.tree_top:
+            tool = TrigJetHypoToolMT(name=self.chain_name)
+        else:
+            tool = TrigJetHypoToolMT(name=name)
+            
+        tool.HypoConfigurer = config_tool
+        tool.dumpJets  = self.dump_jets
+        node.tool = tool
+                               
+    def mod(self, node):
+        """Set the HypoConfigTool instance according to the scenario.
+        Note: node.accept must perform depth first navigation to ensure
+        child tools are set."""
+        
+        self.mod_router.get(node.scenario, self.mod_simple)(node)
+
+    def report(self):
+        wid = max(len(k) for k in self.tool_factories.keys())
+        rep = '\n%s: ' % self.__class__.__name__
+
+        rep += '\n'.join(
+            ['%s: %d' % (k.ljust(wid), v[1])
+             for k, v in self.tool_factories.items()])
+
+        return rep
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
index 538ed52e796f..908fcb0454ad 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
@@ -1,67 +1,73 @@
-from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoToolMT, TrigJetHypoToolConfig_EtaEt
-import re
+from TrigHLTJetHypo.TrigHLTJetHypoConf import (TrigJetHypoToolMT,
+                                               TrigJetHypoToolConfig_EtaEt)
 
-re_EtEta0 = re.compile(
-    r'^HLT_j(?P<thresh>\d+)(_(?P<etalo>\d{3})eta(?P<etahi>\d{3}))?$')
-# re_EtEta1 = re.compile(r'^HLT_j\d+(_\d{1-3}eta\d{3})?_L1')
-# re_EtEta2 = re.compile(r'^HLT_j\d+(_\d{3}eta\d{3})?_(jes|nojcalib|lcw)*$')
+from  TrigHLTJetHypo.ToolSetter import ToolSetter
+from  TrigHLTJetHypo.treeVisitors import TreeParameterExpander
+from  TrigHLTJetHypo.chainDict2jetLabel import (make_simple_label,
+                                                make_vbenf_label)
+from  TrigHLTJetHypo.ChainLabelParser import ChainLabelParser
 
+from GaudiKernel.Constants import (VERBOSE,
+                                   DEBUG,
+                                   INFO,
+                                   WARNING,
+                                   ERROR,
+                                   FATAL,)
 
-def decodeEtEta(match, chain):
-    """Create a hypo tool for the Et - Eta scenario"""
-    default = {'etalo': '0', 'etahi': '320'}
-    conf_dict = match.groupdict()
-    for k, v in default.items():
-        if k not in conf_dict: conf_dict[k] = v
-        if conf_dict[k] is None: conf_dict[k] = v
 
-    conf_tool = TrigJetHypoToolConfig_EtaEt(name=chain+"config")
-    conf_tool.EtThresholds = [float(conf_dict['thresh'])]
-    conf_tool.eta_mins = [float(conf_dict['etalo'])]
-    conf_tool.eta_maxs = [float(conf_dict['etahi'])]
-    conf_tool.asymmetricEtas = [0]
-    conf_tool.OutputLevel = 0
-    return conf_tool
+def  trigJetHypoToolFromDict(chain_dict):
+    """Produce  a jet trigger hypo tool from a chainDict"""
 
+    print 'trigJetHypoToolFromDict starts'
+    chain_label = ''    
+    if 'vbenf' in chain_dict['chainParts'][0]['hypoScenario']:
+        assert len(chain_dict['chainParts']) == 1
+        chain_label = make_vbenf_label(chain_dict)
+    else:
+        chain_label = make_simple_label(chain_dict)
+    parser = ChainLabelParser(chain_label)
+    tree = parser.parse()
 
-def  trigJetHypoToolFromDict(chainDict):
-    return trigJetHypoToolFromName( chainDict['chainName'], chainDict['chainName'])
+    #expand strings of cuts to a cut dictionary
+    visitor = TreeParameterExpander()
+    tree.accept(visitor)
+    visitor.report()
 
-def  trigJetHypoToolFromName(name, jetconfig):
-    """Configure a jet hypo tool from chain name.
+    # create - possibly nested - tools
 
-    Delegate to functions according to the hypo scenartio."""
-    scenario_dict = {re_EtEta0: decodeEtEta}
+    # chain name in run 2 dicts were missing the 'HLT_' prefix
+    # but it seems it is necessary to run the hypos in AthenaMT ?...?
+    
+    chain_name = chain_dict['chainName']
+    if not chain_name.startswith('HLT_'):
+        chain_name = 'HLT_' + chain_name
 
-    chain = jetconfig
-    for k, v in scenario_dict.items():
-        match = k.match(chain)
-        if match:
-            hypo_tool = TrigJetHypoToolMT(chain)
-            hypo_tool.HypoConfigurer = v(match, chain)
-            return hypo_tool
+    print 'trigJetHypoToolFromDict chain_name', chain_name
+    visitor = ToolSetter(chain_name)
+    tree.accept(visitor)
+    visitor.report()
 
-    msg = 'trigJetHypoToolFromName(%s) - decode error' % chain
-    raise NotImplementedError(msg)
+    print 'Dumping jet config for', chain_name
+    print tree.dump()
+    tool = tree.tool
+    tool.OutputLevel = DEBUG
+    return tool
 
 
 import unittest
 class TestStringMethods(unittest.TestCase):
     def testValidConfigs(self):
-        # EtaEt hypos
-        # from MC_pp_v7 import  TriggerFlags.JetSlice.signatures
-        # exception or any other issue will make the ctest for this package fail
-        chains = ('HLT_j85', 'HLT_j35_320eta490')
-        wid = max(len(c) for c in chains)
-        for c in chains:
-            tool = trigJetHypoToolFromName(c, c)
-            self.assertIsNotNone( tool ) 
-            print '%s' % c.rjust(wid), tool
-
-    def testInvalidConfig(self):
-        with self.assertRaises(NotImplementedError):
-            tool = trigJetHypoToolFromName('HLT_nonsense', 'HLT_nonsense')
+        from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
 
+        chainNameDecoder = DictFromChainName.DictFromChainName()
+        # chain_names = ('HLT_j85', 'HLT_j35_0eta320')
+        chain_names = ('HLT_j0hs_vbenf',)
+        wid = max(len(c) for c in chain_names)
+        for chain_name in chain_names:
+            chain_dict = chainNameDecoder.getChainDict(chain_name)
+            tool = trigJetHypoToolFromDict(chain_dict)
+            self.assertIsNotNone(tool) 
+            print '%s' % chain_name.rjust(wid), tool
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
new file mode 100644
index 000000000000..89047bbe9e7f
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
@@ -0,0 +1,106 @@
+import re
+
+# substrings that cannot occur in any chainPartName for simple chains.
+reject_substr = (
+    'gsc',
+    'ion',
+    'dphi',
+    'deta',
+    'invm',
+    '0i1',
+    '1i2',
+    'dphi',
+    'ht\d',)
+
+reject_substr_res = re.compile(r'%s' % '|'.join(reject_substr))
+
+
+def select_simple_chains(cd):
+    """Select chains for which to make an simple chain label.
+
+    Chains selected by reuiring that the signature os 'Jet'. Chains are
+    vetoed if specific substrings occur in any of the chainPartNames"""
+
+
+    # print cd
+    # assert False
+    chain_parts = [c for c in cd['chainParts'] if c['signature'] == 'Jet']
+    chain_name = cd['chainName']
+                       
+    for cp in chain_parts:
+        if  reject_substr_res.search(cp['chainPartName']):
+            return []
+
+    return chain_parts
+
+
+def make_simple_label(chain_dict):
+    """Marshal information deom the selected chainParts to create a
+    'simple' label.
+    """
+    
+    cps = select_simple_chains(chain_dict)
+    if not cps:
+        raise NotImplementedError(
+            'chain fails substring selection: not "simple": %s' % (
+                chain_dict['chainName']))
+    
+    label = 'simple(['
+    for cp in cps:
+        smcstr =  str(cp['smc'])
+        if smcstr == 'nosmc':
+            smcstr = ''
+        for i in range(int(cp['multiplicity'])):
+            # condition_str = '(%set,%s,%s)' % (str(cp['threshold']),
+            #                                  str(cp['etaRange']),
+            #                                  smcstr,)
+            condition_str = '(%set,%s' % (str(cp['threshold']),
+                                              str(cp['etaRange']),)
+            if smcstr:
+                condition_str += ',%s)'
+            else:
+                condition_str += ')'
+            label += condition_str
+    label += '])'
+    return label
+
+
+def select_vbenf_chains(cd):
+    """Select chains for which to make a vbenf chain label.
+    Chains selected by reuiring that the signature os 'Jet'. Chains are
+    vetoed if specific substrings occur in any of the chainPartNames"""
+
+
+    # print cd
+    # assert False
+    chain_parts = [c for c in cd['chainParts'] if c['signature'] == 'Jet']
+    return any(['vbenf' in cp['chainPartName'] for cp in chain_parts])
+
+def make_vbenf_label(chain_dict):
+    """Marshal information from the selected chainParts to create a
+    vbenf label.
+    """
+
+    # toy label for developement: run simple and dijet independently.
+    # simple makes Et cuts on two jets. Independently (sharing possible)
+    # of jets choosean by simple,  the dijet
+    # scenario requires a dijet of mass > 900, and opening angle in phi > 2.6
+               
+    return 'and([] simple([(50et)(70et)])dijet([(900mass, 26dphi)]))'
+
+if __name__ == '__main__':
+    """Read chainDicts from files, cread simple label if possible"""
+    from chainDictSource import chainDictSource
+
+    for cd in chainDictSource():
+        f = cd['chainName']
+        print '\n---------'
+        print f
+        try:
+            label = make_simple_label(cd)
+        except Exception, e:
+            print e
+            continue
+        
+        print 'chain label', label
+        print '-----------\n'
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
new file mode 100644
index 000000000000..608d8b49228b
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
@@ -0,0 +1,22 @@
+from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
+from TriggerMenuMT.HLTMenuConfig.Menu.SignatureDicts import JetChainParts
+import sys
+
+from pprint import PrettyPrinter
+
+pp = PrettyPrinter(indent=4)
+pp.pprint(JetChainParts)
+
+decodeChainName = DictFromChainName.DictFromChainName()
+
+def do_it():
+    print '\n------------------\n'
+    chain_dict = decodeChainName.getChainDict(chain_name)
+    pp.pprint(chain_dict)
+
+if __name__ == '__main__':
+    chain_name = sys.argv[1]
+    do_it()
+    # chain_names = ('HLT_j85', 'j85', 'HLT_j55_0eta320_2j20_0eta320',)
+    # for chain_name in chain_names:
+    #      do_it()
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
new file mode 100644
index 000000000000..33afe422d318
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
@@ -0,0 +1,6 @@
+lchars = 'abcdefghijklmnopqrstuvwxyz'
+digits = '0123456789'
+delims = '()[],'
+logicals = ('and', 'or', 'not')
+alphabet = lchars + digits + delims
+
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
new file mode 100644
index 000000000000..7ce56d947df5
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
@@ -0,0 +1,69 @@
+from constants import logicals
+    
+class Node(object):
+    
+    def __init__(self, scenario):
+        self.scenario = scenario
+        self.parameters = ''
+        self.children = []
+        self.conf_attrs = {}
+        self.tool = None
+
+        # self.tree_top kludge carensure top level tools get chain name
+        # as Tool name
+        self.tree_top = False
+
+    def add_child(self, c):
+        self.children.append(c)
+        
+    def accept(self, modifier):
+        "call self before children"
+
+        modifier.mod(self)
+        for c in self.children:
+            c.accept(modifier)
+
+    def accept_cf(self, modifier):
+        "call children before self"
+        
+        for c in self.children:
+            c.accept_cf(modifier)
+        modifier.mod(self)
+
+    def makeTool(self):
+        if self.scenario not in logicals:
+            self.tool = DummyTool(self.toolName)
+            
+    def buildTree(self, treeVisitor):
+        if self.children:
+            if self.scenario in logicals:
+                treeVisitor.add(self.scenario + '(')
+            else: 
+                treeVisitor.add(self.tool.name() + '(')
+                
+            for c in self.children:
+                c.buildTree(treeVisitor)
+            treeVisitor.add(') ')
+
+        else:
+            treeVisitor.add(self.tool.name() + ' ')
+            
+
+    
+        return s
+        
+    def dump(self, n_in=0):
+        indent = ' '*n_in
+        s = '\n'
+        s =  indent + 'Node. scenario: %s \n' % self.scenario
+        s +=  indent + 'is tree top? %s \n' % self.tree_top
+        s += indent + 'parameters: %s\n' % str(self.parameters)
+        s += indent + 'conf_attrs: %s\n' % str(self.conf_attrs)
+        s += indent + 'AlgTool: %s\n' % str(self.tool)
+        # s += indent + 'AlgTool dict: %s\n' % str(self.tool.__dict__)
+        s += indent + 'No of children: %d\n\n' % len(self.children)
+        for c in self.children:
+            s += c.dump(n_in+5)
+
+        return s
+        
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
new file mode 100644
index 000000000000..549dc54109a0
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
@@ -0,0 +1,70 @@
+test_strings = [
+    'ijet([(10et, 0eta320)])',
+     'ijet([(10et, 0eta320)(20et, 0eta320)])',
+    # 'or([] ijet([10et]) and([] ijet([20et]) ijet([30et])))',
+    'or([] ijet([(10et)]) ijet([(20et)(40et)]))',
+    'and([] ijet([(10et)]) ijet([(20et)]))',
+    'not([] ijet([(10et)]) )',
+    'not([] and([] ijet([(40et, 0eta320)]) ijet([(100et, 0eta320)])))',
+    'or([] not([] ijet([(40et, 0eta320)])) not([] ijet([(100et, 0eta320)])))',
+    'or([] and([] ijet([(40et, 0eta320)]) ijet([(40et, 0eta320)])) not([] ijet([(100et, 0eta320)])))',
+
+
+
+"""
+partition     
+(
+  [(4,2)]   # partition 6 input jets to 4, 2 
+  splitter  # send the 4s to first 2 children, 2 to third.
+    assert len(o) == 1
+  (
+    [(1,1)(2)]
+    sum # mass cut on sum of input jets (ord.=4)
+    (
+      [(800m900)]
+    )
+    partition        #  partition 4 jets into non-overlapping
+                     #  sets ord 2, 2
+    (
+      [(2,2)]
+      pair           # sum inputs, apply deta cut to the 2 sums
+      (
+        [(40deta)]
+        sum          # child gets two lists, applys mass cuts
+        ( 
+          [(75m85)(80m90)]
+          partition  # passes on 2 sum to regroup to single jets
+          (
+            [() (1)]
+            ijet     # apply aoverlapping mod, et cuts
+            (
+              [(30width50, 30et) (35width45, 40et)]
+            )
+          )
+        )
+      )
+    )
+  )
+               
+  ijet([(p320etap500, 100et) (n500etan320)]),
+)""",
+
+
+#     """cascade(
+#    [800m900]             # conditions for cascade (only one here)
+#      dijet(              # first daughter scenario
+#        [ 80m90]          # condition(s) for first daughter scenario
+#         ijet([10et])     # grandaughter scenario 1 for first daugh scen.
+#         ijet([20et])     # grandaughter scenario 2 for first daugh scen.
+#           )              # end of first dijet scenario 
+#      dijet(              # second daughter scenario
+#        [85m95]
+#          ijet([30et]) 
+#          ijet([40et])
+#            )             # end of second dijet scenario
+#    )                     # end of cascade scenario
+#    """
+
+    'and([] ijet([(50et)(70et)]) dijet([(900mass, 26dphi)]))',
+    'and([]simple([(50et)(70et)])dijet([(900m,26dphi)]))',
+]
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
new file mode 100644
index 000000000000..5dcc580ce236
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
@@ -0,0 +1,392 @@
+from constants import lchars
+
+import re
+import math
+
+from ToolSetter import ToolSetter
+class Checker(object):
+    def __init__(self):
+        self.known = {
+            'simple': ('Et'),
+            'cascade': ('m')
+        }
+
+        self.msgs = []
+        self.nchecked = 0
+
+    def mod(self, node):
+        self.nchecked += 1
+        if node.scenario not in self.known:
+            self.msgs.append('unknown scenario %s' % node.scenario)
+    
+    def report(self):
+        s = ['Checker: %d nodes checked' % self.nchecked]
+        s.extend(self.msgs)
+        return '\n'.join(s)
+
+
+class TreeBuilder(object):
+    def __init__(self):
+        self.tree = '('
+        
+    def add(self, s):
+        self.tree += s
+
+    def report(self):
+        return self.tree
+
+
+class TreeToBooleanExpression(object):
+    """visit a hypo tree. If boolean scenarios are present, build a
+    boolean expression string."""
+    
+    def __init__(self):
+        self.stack = []
+
+    def mod(self, node):
+        if node.scenario == 'not':
+            self.stack.append(' ! ')
+            return
+
+        if node.scenario == 'and':
+            self.stack.append(' x ')
+            return
+
+        if node.scenario == 'or':
+            self.stack.append(' + ')
+            return
+
+        self.stack.append(' %s ' %node.tool.name())
+
+    def report(self):
+        s = '%s: ' % self.__class__.__name__
+        while self.stack: s += self.stack.pop()
+        return s.strip()
+
+
+class TreeParameterExpander_simple(object):
+    """Convert parameter string into duction holding low, high window
+    cut vals. Specialistaion for the 'simple' scenario
+
+    parameter strings look like '40et, 0eta320, nosmc'
+    """
+    
+    window_re = re.compile(
+        r'^(?P<lo>\d*)(?P<attr>[%s]+)(?P<hi>\d*)' % lchars)
+
+    defaults = {'etalo': 0.0,
+                'etahi': 3.2,
+    }
+
+    scale_factors = {'eta': 0.01,
+                     'et': 1000.,
+                     'smc': 1000.,
+    }
+
+    def __init__(self):
+        self.msgs = []
+
+    def mod(self, node):
+
+        def get_conditions(params):
+            """Split conditions string into list of condition strings
+            Condition string looks like
+            '(10et,0eta320)(20et,0eta320)(40et,0eta320)'
+            returned is ['10et,0eta320', '20et,0eta320', '40et,0eta320']
+            """
+
+            alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789,'
+            pat = re.compile(r'(^\([%s]+\))'% alphabet )
+            s = params
+            m = True
+            conditions = []
+            while m:
+                m = pat.match(s)
+                if m is not None:
+                    conditions.append(m.group(0))
+                    s = s[len(conditions[-1]):]
+            assert params == ''.join(conditions)
+            conditions = [c[1:-1] for c in conditions]  # strip parens
+            return conditions
+
+
+        conditions = get_conditions(node.parameters)
+
+        
+        node.conf_attrs['EtThresholds'] = []
+        node.conf_attrs['eta_mins'] = []
+        node.conf_attrs['eta_maxs'] = []
+        node.conf_attrs['asymmetricEtas'] = []
+
+        for c in conditions:
+            toks = c.split(',')
+            toks = [t.strip() for t in toks]
+
+
+            for t in toks:
+                m = self.window_re.match(t)
+                if m is None:
+                    self.msgs.append('match failed for parameter %s' % t)
+                    return
+                group_dict = m.groupdict()
+                attr = group_dict['attr']
+                lo = group_dict['lo']
+                hi = group_dict['hi']
+                if lo == '':
+                    lo = self.defaults.get(attr+'lo', '')
+                if hi == '':
+                    hi = self.defaults.get(attr+'hi', '')
+
+                sf = self.scale_factors[attr]
+                if lo:
+                    if attr == 'eta':
+                        node.conf_attrs['eta_mins'].append(sf * float(lo))
+                    elif attr == 'et':
+                        node.conf_attrs['EtThresholds'].append(sf * float(lo))
+                if hi:
+                    if attr == 'eta':
+                        node.conf_attrs['eta_maxs'].append(sf * float(hi))
+                
+        #01/01/2019 PS  KLUDGE !! FIX ME!!!  asymmetric eta hardwired to 0.
+
+        [node.conf_attrs['asymmetricEtas'].append(0) for i in range(
+                len(conditions))]
+        self.msgs = ['All OK']
+
+        
+    def report(self):
+        return '%s: ' % self.__class__.__name__ + '\n'.join(self.msgs) 
+
+    
+
+
+class TreeParameterExpander_dijet(object):
+    """Convert parameter string into duction holding low, high window
+    cut vals. Specialistaion for the dijet scenario
+
+    parameter strings look like '40m,100deta200, 50dphi300'
+    """
+    
+    window_re = re.compile(
+        r'^(?P<lo>\d*)(?P<attr>[%s]+)(?P<hi>\d*)' % lchars)
+
+    defaults = {'mass_mins': 0.0,
+                'mass_maxs': 100000.,
+                'deta_mins': 0.,
+                'deta_maxs': 20.,
+                'dphi_mins': 0.,
+                'dphi_maxs': math.pi,
+    }
+
+    scale_factors = {'deta': 0.01,
+                     'mass': 1000.,
+                     'dphi': 0.01,
+    }
+
+    def __init__(self):
+        self.msgs = []
+
+    def mod(self, node):
+
+        def get_conditions(params):
+            """Split conditions string into list of condition strings
+            Condition string looks like
+            '(75m85,100dEta200, 50dphi200)(80m90, 110dEta210)'
+            returned is ['10et,0eta320', '20et,0eta320', '40et,0eta320']
+            """
+
+            alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789,'
+            pat = re.compile(r'(^\([%s]+\))'% alphabet )
+            s = params
+            m = True
+            conditions = []
+            while m:
+                m = pat.match(s)
+                if m is not None:
+                    conditions.append(m.group(0))
+                    s = s[len(conditions[-1]):]
+            assert params == ''.join(conditions)
+            conditions = [c[1:-1] for c in conditions]  # strip parens
+            return conditions
+
+        ok = True # status flag
+        conditions = get_conditions(node.parameters)
+
+        bare_attrs = ['mass', 'deta', 'dphi']
+        all_attrs = []
+        for attr in bare_attrs:
+            all_attrs.extend([attr+'_mins', attr+'_maxs'])
+
+        for attr in all_attrs:
+            node.conf_attrs[attr] = []
+
+        for c in conditions:
+            toks = c.split(',')
+            toks = [t.strip() for t in toks]
+
+
+            processed_attrs = []
+            for t in toks:
+                m = self.window_re.match(t)
+                if m is None:
+                    self.msgs.append('match failed for parameter %s' % t)
+                    return
+                group_dict = m.groupdict()
+                attr = group_dict['attr']
+                lo = group_dict['lo']
+                hi = group_dict['hi']
+                if lo == '':
+                    lo = self.defaults.get(attr+'_min', '')
+                if hi == '':
+                    hi = self.defaults.get(attr+'_max', '')
+
+                sf = self.scale_factors[attr]
+                if lo:
+                    if attr == 'mass':
+                        node.conf_attrs['mass_mins'].append(sf * float(lo))
+                    elif attr == 'deta':
+                        node.conf_attrs['deta_mins'].append(sf * float(lo))
+                    elif attr == 'dphi':
+                        node.conf_attrs['dphi_mins'].append(sf * float(lo))
+
+                    processed_attrs.append(attr+'_mins')
+                if hi:
+                    if attr == 'mass':
+                        node.conf_attrs['mass_maxs'].append(sf * float(lo))
+                    elif attr == 'deta':
+                        node.conf_attrs['deta_maxs'].append(sf * float(lo))
+                    elif attr == 'dphi':
+                        node.conf_attrs['dphi_maxs'].append(sf * float(lo))
+
+                    processed_attrs.append(attr+'_maxs')
+
+
+
+            for a in all_attrs:
+                if a not in processed_attrs:
+                    node.conf_attrs[a].append(self.defaults[a])
+
+            for a in processed_attrs:
+                if a not in all_attrs:
+                    self.msgs.append('Unknown attribute: %s' % a)
+                    ok = False
+
+        if ok:
+            self.msgs = ['All OK']
+        else:
+            self.msgs.append('Error')
+
+        
+    def report(self):
+        return '%s: ' % self.__class__.__name__ + '\n'.join(self.msgs) 
+
+    
+class TreeParameterExpander_null(object):
+    """Does nothing except check the parameter string is empty"""
+
+    def __init__(self):
+        self.msgs = ['Do nothing paramter expander']
+
+    def mod(self, node):
+        assert node.parameters == ''
+        
+    def report(self):
+        return '%s: ' % self.__class__.__name__ + '\n'.join(self.msgs) 
+    
+
+
+class TreeParameterExpander(object):
+    """Class to exapnder node.paramters string. Delegates to
+    specialised exanders."""
+    
+    router = {
+        'simple': TreeParameterExpander_simple,
+        'dijet': TreeParameterExpander_dijet,
+        'not': TreeParameterExpander_null,
+        'and': TreeParameterExpander_null,
+        'or': TreeParameterExpander_null,
+    }
+
+    def __init__(self):
+        self.expander = None
+
+    def mod(self, node):
+        self.expander = self.router[node.scenario]()
+        self.expander.mod(node)
+        print self.expander.report()
+    def report(self):
+        return self.expander.report()
+        
+
+
+class TreeToCascade(object):
+    def __init__(self):
+        self.stack = []
+
+    def mod(self, node):
+        
+        self.stack.append(
+            '(%s < (%s))' %(node.tool.name(), 
+                            ' '.join([c.tool.name  for c in node.children])))
+
+    def report(self):
+        s = ''
+        while self.stack:
+            s += self.stack.pop()
+        return s.strip()
+
+
+def _test(s):
+
+    from ChainLabelParser import ChainLabelParser
+    parser = ChainLabelParser(s)
+    tree = parser.parse()
+    print tree.dump()
+    # exapnd the window cuts (strings) obtained from the chain label
+    # to attributes and floating point numbers, set defaults
+    # for unspecified vallues
+    visitor = TreeParameterExpander()
+    tree.accept(visitor)
+    print visitor.report()
+    print tree.dump()
+
+
+    # set the node attribute node.tool to be the hypo  Al\gTool.
+    print 'sending in the ToolSetter visitor'
+    ts_visitor = ToolSetter(s)
+    tree.accept_cf(ts_visitor)
+    print ts_visitor.report()
+
+
+    print tree.dump()
+
+
+def test(index):
+    from test_cases import test_strings
+    import sys
+    c = sys.argv[1]
+    index = -1
+    try:
+        index = int(c)
+    except:
+        print 'expected int in [1,%d] ]on comand line, got %s' % (
+            len(test_strings), c)
+        sys.exit()
+
+    print 'index', index
+    print '========== Test %d ==============' % index
+    s = test_strings[index]
+    print s
+    _test(s)
+
+
+if __name__ == '__main__':
+    import sys
+    c = sys.argv[1]
+    ic = -1
+    try:
+        ic = int(c)
+    except:
+        print 'expected int on command line, got ',c
+        sys.exit()
+    test(ic)
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
new file mode 100644
index 000000000000..8e1c5d29314c
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
@@ -0,0 +1,101 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h"
+#include <sstream>
+#include <stdexcept>
+#include <TLorentzVector.h>
+#include <limits>
+// #include <iostream>
+DijetMTCondition::DijetMTCondition(double massMin,
+                                   double massMax,
+                                   double detaMin,
+                                   double detaMax,
+                                   double dphiMin,
+                                   double dphiMax
+                                   ){
+  m_massMin = massMin;
+  m_massMax = massMax;
+  m_detaMin = detaMin;
+  m_detaMax = detaMax;
+  m_dphiMin = dphiMin;
+  m_dphiMax = dphiMax;
+}
+
+
+bool DijetMTCondition::isSatisfied(const HypoJetVector& ips) const{
+  if(ips.size() != 2){
+    std::stringstream ss;
+    ss << "DijetMT::isSatisfied must see exactly 2 particles, but received "
+       << ips.size()
+       << '\n';
+    
+    throw std::runtime_error(ss.str());
+  }
+
+  auto j0 = ips[0];
+  auto j1 = ips[1];
+
+  auto rj0 = 0.001 * (j0 -> p4());
+  auto rj1 = 0.001 * (j1 -> p4());
+
+  auto mass = (rj0 + rj1).M();
+  if (m_massMin > mass or mass >= m_massMax){return false;}
+
+  
+  auto eta0 =  j0->eta();
+  auto eta1 =  j1->eta();
+  auto adeta = std::abs(eta0 -eta1);
+  if (m_detaMin > adeta or adeta >= m_detaMax){return false;}
+
+
+  auto dphi = std::abs(rj0.DeltaPhi(rj1));
+  if (m_dphiMin > dphi or dphi >= m_dphiMax){return false;}
+
+  return true;
+
+  /*
+  auto result =  test(et0, et1, absEta0, absEta1, dEta, mass);
+  std::cout << "DijetMTCondition : " << std::boolalpha << result << '\n'
+            << std::setprecision(3) << std::scientific 
+            << "jet 0 et " << m_etThreshold0 << " " << et0 << '\n'
+            << "jet 1 et " << m_etThreshold1 << " " << et1 << '\n'
+            << "jet 0 eta " << m_etaMin0 << " " << eta0 << " " << m_etaMax0 << '\n'
+            << "jet 1 eta " << m_etaMin1 << " " << eta1 << " " << m_etaMax1 << '\n'
+            << "dEta " << m_dEtaMin << " " << dEta << " " << m_dEtaMax << '\n'
+            << "mass " << m_massMin << " " << mass << " " <<m_massMax << '\n';
+
+  return result;
+  */
+
+}
+
+std::string DijetMTCondition::toString() const noexcept {
+  std::stringstream ss;
+  ss << "DijetMTCondition: "
+
+     << " mass min: " 
+     << m_massMin
+     << " mass max: " 
+     << m_massMax
+
+     << " dEta min: " 
+     << m_detaMin
+     << " dEta max: " 
+     << m_detaMax
+
+     << " dPhi min: " 
+     << m_dphiMin
+     << " dPhi max: " 
+     << m_dphiMax
+
+     <<'\n';
+
+  return ss.str();
+}
+
+
+double DijetMTCondition::orderingParameter() const noexcept {
+  return m_massMin;
+}
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/conditionsFactory2.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/conditionsFactory2.cxx
index 20299f147eed..ce9babaa9a7a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/conditionsFactory2.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/conditionsFactory2.cxx
@@ -19,6 +19,7 @@
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDEtaMassCondition.h"
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDPhiCondition.h"
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetCondition.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h"
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/HTCondition.h"
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/TLACondition.h"
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h"
@@ -104,6 +105,30 @@ Conditions conditionsFactoryDijet(const std::vector<double>& etThresholds1,
   return conditions;
 }
 
+
+Conditions conditionsFactoryDijetMT(const std::vector<double>& massMins,
+                                    const std::vector<double>& massMaxs,
+                                    const std::vector<double>& detaMins,
+                                    const std::vector<double>& detaMaxs,
+                                    const std::vector<double>& dphiMins,
+                                    const std::vector<double>& dphiMaxs){  
+  Conditions conditions;
+  
+  for(std::size_t i = 0; i < massMins.size(); ++i){
+    std::shared_ptr<ICondition>
+      pCondition(new DijetMTCondition(massMins[i],
+                                      massMaxs[i],
+                                      detaMins[i],
+                                      detaMaxs[i],
+                                      dphiMins[i],
+                                      dphiMaxs[i]));
+    
+    conditions.push_back(ConditionBridge(pCondition));
+  }
+  return conditions;
+}
+
+
 Conditions conditionsFactoryDijetEtaMass(const std::vector<double>& etaMins,
                                          const std::vector<double>& etaMaxs,
                                          const std::vector<double>& etMins,
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.cxx
new file mode 100644
index 000000000000..4b169a56a5f0
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.cxx
@@ -0,0 +1,62 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TrigJetAndToolMT.cxx
+// PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+//
+//
+// ********************************************************************
+
+#include "TrigJetAndToolMT.h"
+
+#include "GaudiKernel/StatusCode.h"
+
+#include "DecisionHandling/HLTIdentifier.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+
+using TrigCompositeUtils::DecisionID;
+using TrigCompositeUtils::Decision;
+using TrigCompositeUtils::DecisionContainer;
+
+TrigJetAndToolMT::TrigJetAndToolMT(const std::string& type,
+                                 const std::string& name,
+                                 const IInterface* parent) :
+  base_class(type, name, parent),
+  m_decisionId(HLT::Identifier::fromToolName(name)) {
+}
+
+
+TrigJetAndToolMT::~TrigJetAndToolMT(){
+}
+
+StatusCode TrigJetAndToolMT::initialize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetAndToolMT::finalize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetAndToolMT::decide(const xAOD::JetContainer* jets,
+                                           bool& pass) const {
+
+  m_lhs->decide(jets, pass);
+  if (pass){
+    ATH_MSG_DEBUG("LHS passed");
+    m_rhs->decide(jets, pass);
+    ATH_MSG_DEBUG("RHS " <<std::boolalpha << pass);
+  } else {
+    ATH_MSG_DEBUG("LHS failed");
+  }    
+
+
+  return StatusCode::SUCCESS;
+}
+
+
+const HLT::Identifier& TrigJetAndToolMT::getId() const{
+  return m_decisionId;
+} 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
new file mode 100644
index 000000000000..f2140fc2a757
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
@@ -0,0 +1,68 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGJETANDTOOLMT_H
+#define TRIGJETANDTOOLMT_H
+/********************************************************************
+ *
+ * NAME:     TrigJetAndToolMT.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ *
+ *********************************************************************/
+
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICleaner.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+
+#include "ITrigJetHypoToolMT.h"
+#include "ITrigJetHypoToolConfig.h"
+
+class TrigJetAndToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
+
+ public:
+  
+  TrigJetAndToolMT(const std::string& type,
+                    const std::string& name,
+                    const IInterface* parent);
+  virtual ~TrigJetAndToolMT();
+  virtual StatusCode initialize() override;
+  virtual StatusCode finalize() override;
+
+  // ITrigJetHypoToolMT interface
+  virtual StatusCode
+    decide(const xAOD::JetContainer*, bool& pass) const override;
+  virtual const HLT::Identifier& getId() const override; 
+ private:
+
+  // Identifier is used to keep track of which tool made which decision.
+  // The information is stored in the event store.
+  HLT::Identifier m_decisionId;  
+  
+  ToolHandle<ITrigJetHypoToolMT> m_lhs {
+    this, "lhs", {}, "LHS boolean binary expression"}; 
+  ToolHandle<ITrigJetHypoToolMT> m_rhs {
+    this, "rhs", {}, "RHS boolean binary expression"}; 
+
+ 
+ // Monitored variables...
+ /*
+  declareMonitoredVariable("NJet", m_njet);
+  declareMonitoredVariable("Et", m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+*/
+
+
+};
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
new file mode 100644
index 000000000000..c079a5328ca9
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
@@ -0,0 +1,94 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/*
+  Instatniation of JetHypo components for  the DiMass scenario
+ */
+#include "TrigJetHypoToolConfig_dijet.h"
+
+#include "GaudiKernel/StatusCode.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/xAODJetAsIJetFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/groupsMatcherFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/TrigHLTJetHypoHelper2.h"
+
+#include "DecisionHandling/TrigCompositeUtils.h"
+
+using TrigCompositeUtils::DecisionID;
+using TrigCompositeUtils::Decision;
+using TrigCompositeUtils::DecisionContainer;
+
+TrigJetHypoToolConfig_dijet::TrigJetHypoToolConfig_dijet(const std::string& type,
+                                                 const std::string& name,
+                                                 const IInterface* parent) :
+  base_class(type, name, parent){
+
+}
+
+
+TrigJetHypoToolConfig_dijet::~TrigJetHypoToolConfig_dijet(){
+}
+
+StatusCode TrigJetHypoToolConfig_dijet::initialize() {
+  CHECK(checkVals());
+  return StatusCode::SUCCESS;
+}
+
+
+
+
+Conditions TrigJetHypoToolConfig_dijet::getConditions() const {
+  auto conditions = conditionsFactoryDijetMT(m_massMins,
+                                             m_massMaxs,
+                                             m_dEtaMins,
+                                             m_dEtaMaxs,
+                                             m_dPhiMins,
+                                             m_dPhiMaxs);
+ 
+  std::sort(conditions.begin(), conditions.end(), ConditionsSorter());
+  
+  return conditions;
+}
+
+ 
+std::unique_ptr<IJetGrouper> TrigJetHypoToolConfig_dijet::getJetGrouper() const {
+  return std::make_unique<CombinationsGrouper>(2);
+}
+
+StatusCode TrigJetHypoToolConfig_dijet::checkVals() const {
+  // check cionsistent sizes
+
+  auto sz = m_massMins.size();
+  if (sz != m_massMaxs.size() or
+      sz != m_dEtaMins.size() or
+      sz != m_dEtaMaxs.size() or
+      sz != m_dPhiMins.size() or
+      sz != m_dPhiMaxs.size()){
+    ATH_MSG_ERROR(name()
+                  << ": mismatch between number of thresholds "
+                  << "and min, max fro mass, dEta, dPhi "
+                  << m_massMins.size() << " "
+                  << m_massMaxs.size() << " "
+                  << m_dEtaMins.size() << " "
+                  << m_dEtaMaxs.size() << " "
+                  << m_dPhiMins.size() << " "
+                  << m_dPhiMaxs.size() << " ");
+    
+    return StatusCode::FAILURE;
+  }
+  return StatusCode::SUCCESS;
+}
+
+std::vector<std::shared_ptr<ICleaner>> 
+TrigJetHypoToolConfig_dijet::getCleaners() const {
+  std::vector<std::shared_ptr<ICleaner>> v;
+  return v;
+}
+
+
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
new file mode 100644
index 000000000000..0f47ee6b7ca5
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
@@ -0,0 +1,76 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGJETHYPOTOOLConfig_DIJET_H
+#define TRIGJETHYPOTOOLConfig_DIJET_H
+/********************************************************************
+ *
+ * NAME:     TrigJetHypoToolConfig_dijetTool.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ *
+ *********************************************************************/
+
+
+#include "ITrigJetHypoToolConfig.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICleaner.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+
+class TrigJetHypoToolConfig_dijet:
+public extends<AthAlgTool, ITrigJetHypoToolConfig> {
+
+ public:
+  
+  TrigJetHypoToolConfig_dijet(const std::string& type,
+                          const std::string& name,
+                          const IInterface* parent);
+  virtual ~TrigJetHypoToolConfig_dijet();
+
+  virtual StatusCode initialize() override;
+  virtual std::vector<std::shared_ptr<ICleaner>> getCleaners() const override;
+  virtual std::unique_ptr<IJetGrouper> getJetGrouper() const override;
+  virtual Conditions getConditions() const override;
+
+ private:
+
+  Gaudi::Property<std::vector<double>>
+    m_massMins{this, "mass_mins", {}, "min mass for each dijet"};
+
+  Gaudi::Property<std::vector<double>>
+    m_massMaxs{this, "mass_maxs", {}, "max mass for each dijet"};
+
+  Gaudi::Property<std::vector<double>>
+    m_dEtaMins{this, "deta_mins", {}, "min dEta for jets in each dijet"};
+
+  Gaudi::Property<std::vector<double>>
+    m_dEtaMaxs{this, "deta_maxs", {}, "max dEta for jets in each dijet"};
+
+  Gaudi::Property<std::vector<double>>
+    m_dPhiMins{this, "dphi_mins", {}, "min dPhi for jets in each dijet"};
+
+  Gaudi::Property<std::vector<double>>
+    m_dPhiMaxs{this, "dphi_maxs", {}, "max dPhi for jets in each dijet"};
+
+  virtual StatusCode checkVals()  const override;
+ 
+ // Monitored variables...
+ /*
+  declareMonitoredVariable("NJet", m_njet);
+  declareMonitoredVariable("Et", m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+*/
+
+
+};
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
new file mode 100644
index 000000000000..9eaa545f00f7
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
@@ -0,0 +1,92 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TrigJetHypoToolMT_simple.cxx
+// PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+//
+//
+// ********************************************************************
+
+#include "TrigJetHypoToolConfig_simple.h"
+
+#include "GaudiKernel/StatusCode.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/conditionsFactory2.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/SingleJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/xAODJetAsIJetFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/groupsMatcherFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/TrigHLTJetHypoHelper2.h"
+
+#include "DecisionHandling/TrigCompositeUtils.h"
+
+using TrigCompositeUtils::DecisionID;
+using TrigCompositeUtils::Decision;
+using TrigCompositeUtils::DecisionContainer;
+
+TrigJetHypoToolConfig_simple::TrigJetHypoToolConfig_simple(const std::string& type,
+                                                 const std::string& name,
+                                                 const IInterface* parent) :
+  base_class(type, name, parent){
+
+}
+
+
+TrigJetHypoToolConfig_simple::~TrigJetHypoToolConfig_simple(){
+}
+
+StatusCode TrigJetHypoToolConfig_simple::initialize() {
+  CHECK(checkVals());
+  return StatusCode::SUCCESS;
+}
+
+
+
+
+Conditions TrigJetHypoToolConfig_simple::getConditions() const {
+  auto conditions = conditionsFactoryEtaEt(m_etaMins,
+                                           m_etaMaxs,
+                                           m_EtThresholds,
+                                           m_asymmetricEtas);
+  std::sort(conditions.begin(), conditions.end(), ConditionsSorter());
+  
+  return conditions;
+}
+
+ 
+std::unique_ptr<IJetGrouper>
+TrigJetHypoToolConfig_simple::getJetGrouper() const {
+  return std::make_unique<SingleJetGrouper>();
+}
+
+StatusCode TrigJetHypoToolConfig_simple::checkVals() const {
+  if (m_EtThresholds.size() != m_etaMins.size() or
+      m_EtThresholds.size() != m_etaMaxs.size() or
+      m_asymmetricEtas.size() != m_etaMaxs.size()){
+    
+    ATH_MSG_ERROR(name()
+                  << ": mismatch between number of thresholds "
+                  << "and eta min, max boundaries or asymmetric eta flags: "
+                  << m_EtThresholds.size() << " "
+                  << m_etaMins.size() << " "
+                  << m_etaMaxs.size() << " "
+                  << m_asymmetricEtas.size() << " "
+                  );
+    
+    return StatusCode::FAILURE;
+  }
+  return StatusCode::SUCCESS;
+}
+
+std::vector<std::shared_ptr<ICleaner>> 
+TrigJetHypoToolConfig_simple::getCleaners() const {
+  std::vector<std::shared_ptr<ICleaner>> v;
+  return v;
+}
+
+
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
new file mode 100644
index 000000000000..6f8b04e489d0
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
@@ -0,0 +1,71 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGJETHYPOTOOLConfig_SIMPLE_H
+#define TRIGJETHYPOTOOLConfig_SIMPLE_H
+/********************************************************************
+ *
+ * NAME:     TrigJetHypoToolConfig_simple.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ *
+ *********************************************************************/
+
+
+#include "ITrigJetHypoToolConfig.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICleaner.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+
+class TrigJetHypoToolConfig_simple:
+public extends<AthAlgTool, ITrigJetHypoToolConfig> {
+
+ public:
+  
+  TrigJetHypoToolConfig_simple(const std::string& type,
+                          const std::string& name,
+                          const IInterface* parent);
+  virtual ~TrigJetHypoToolConfig_simple();
+
+  virtual StatusCode initialize() override;
+  virtual std::vector<std::shared_ptr<ICleaner>> getCleaners() const override;
+  virtual std::unique_ptr<IJetGrouper> getJetGrouper() const override;
+  virtual Conditions getConditions() const override;
+
+ private:
+  
+  Gaudi::Property<std::vector<double>>
+    m_EtThresholds{this, "EtThresholds", {}, "Etthresholds by eta region"};
+  
+  Gaudi::Property<std::vector<double>>
+    m_etaMins{this, "eta_mins", {}, "Eta min for eta regions"};
+  
+  Gaudi::Property<std::vector<double>>
+    m_etaMaxs{this, "eta_maxs", {}, "Eta max for eta regions"};
+
+  Gaudi::Property<std::vector<int>>
+    m_asymmetricEtas{this, "asymmetricEtas", {}, "Apply asym. eta cuts"};
+
+
+  virtual StatusCode checkVals()  const override;
+ 
+ // Monitored variables...
+ /*
+  declareMonitoredVariable("NJet", m_njet);
+  declareMonitoredVariable("Et", m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+*/
+
+
+};
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
index 4faa51b87fba..90fcef396941 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
@@ -71,7 +71,7 @@ StatusCode TrigJetHypoToolMT::decide(const xAOD::JetContainer* jets,
                                       std::move(matcher));
 
   /* apply cleaning and hypothesis alg */
-  ATH_MSG_DEBUG("hypo helper start... " << m_chainName
+  ATH_MSG_DEBUG("hypo helper start... "
                 << " no of jets ... " 
                 << jets->size() 
                 << "...");
@@ -88,7 +88,7 @@ StatusCode TrigJetHypoToolMT::decide(const xAOD::JetContainer* jets,
 
   // accumulateTime(steady_clock::now() - t);
   
-  ATH_MSG_DEBUG("hypo testing done chain  " << m_chainName
+  ATH_MSG_DEBUG("hypo testing done chain  "
                 << " no of input jets " << jets->size()
                 << " pass " << pass );
   
@@ -144,12 +144,12 @@ void TrigJetHypoToolMT::writeDebug(bool pass,
                                        const HypoJetVector& passedJets,
                                        const HypoJetVector& failedJets
                                        ) const{
-  ATH_MSG_INFO("Writing debug start" << m_chainName << "...");
+  ATH_MSG_INFO("Writing debug start...");
   
   if(pass){
-    ATH_MSG_DEBUG(m_chainName<< " event passed");
+    ATH_MSG_DEBUG(" event passed");
   } else {
-    ATH_MSG_DEBUG(m_chainName<< " event failed");
+    ATH_MSG_DEBUG(" event failed");
   }
 
   for (auto j :  passedJets) {
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
index 0b9fac33e1ee..0e3744f582bd 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
@@ -53,7 +53,7 @@ class TrigJetHypoToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
   // Paraphanalia needed for the Jet Hypo Helper class:
   Conditions m_conditions;
 
-  bool m_dumpJets{false};
+  Gaudi::Property<bool> m_dumpJets{this, "dumpJets", {}, "verbose jet dump flag"};
   
   void setCleaners();
  
@@ -152,9 +152,6 @@ class TrigJetHypoToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
  Gaudi::Property<float>
    m_avLarQFLlpThreshold{this, "AverageLArQFLlpThreshold", 0.8*65535, ""};
 
- Gaudi::Property<std::string>
-   m_chainName{this, "chain_name", {}, "chain name (dbg)"};
-  
  Gaudi::Property<bool>
    m_acceptAll{this, "AcceptAll", false, "flag to turn of hypo"};
  
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.cxx
new file mode 100644
index 000000000000..2ec75ba2f8c8
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.cxx
@@ -0,0 +1,63 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TrigJetNotToolMT.cxx
+// PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+//
+//
+// ********************************************************************
+
+#include "TrigJetNotToolMT.h"
+
+#include "GaudiKernel/StatusCode.h"
+
+#include "DecisionHandling/HLTIdentifier.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+
+using TrigCompositeUtils::DecisionID;
+using TrigCompositeUtils::Decision;
+using TrigCompositeUtils::DecisionContainer;
+
+TrigJetNotToolMT::TrigJetNotToolMT(const std::string& type,
+                                 const std::string& name,
+                                 const IInterface* parent) :
+  base_class(type, name, parent),
+  m_decisionId(HLT::Identifier::fromToolName(name)) {
+}
+
+
+TrigJetNotToolMT::~TrigJetNotToolMT(){
+}
+
+StatusCode TrigJetNotToolMT::initialize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetNotToolMT::finalize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetNotToolMT::decide(const xAOD::JetContainer* jets,
+                                           bool& pass) const {
+
+  m_hypoTool->decide(jets, pass);
+
+  if(pass){
+    ATH_MSG_DEBUG("hypoTool passed");
+  } else {
+    ATH_MSG_DEBUG("hypoTool failed");
+  }
+
+  pass = !pass;
+
+  return StatusCode::SUCCESS;
+}
+
+
+const HLT::Identifier& TrigJetNotToolMT::getId() const{
+  return m_decisionId;
+} 
+ 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
new file mode 100644
index 000000000000..05504bb51842
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
@@ -0,0 +1,66 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collabnotation
+*/
+
+#ifndef TRIGJETNOTTOOLMT_H
+#define TRIGJETNOTTOOLMT_H
+/********************************************************************
+ *
+ * NAME:     TrigJetNotToolMT.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ *
+ *********************************************************************/
+
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICleaner.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+
+#include "ITrigJetHypoToolMT.h"
+#include "ITrigJetHypoToolConfig.h"
+
+class TrigJetNotToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
+
+ public:
+  
+  TrigJetNotToolMT(const std::string& type,
+                    const std::string& name,
+                    const IInterface* parent);
+  virtual ~TrigJetNotToolMT();
+  virtual StatusCode initialize() override;
+  virtual StatusCode finalize() override;
+
+  // ITrigJetHypoToolMT interface
+  virtual StatusCode
+    decide(const xAOD::JetContainer*, bool& pass) const override;
+  virtual const HLT::Identifier& getId() const override; 
+ private:
+
+  // Identifier is used to keep track of which tool made which decision.
+  // The information is stored in the event store.
+  HLT::Identifier m_decisionId;  
+  
+  ToolHandle<ITrigJetHypoToolMT> m_hypoTool {
+    this, "hypoTool", {}, "predicate to be inverted"};
+
+ 
+ // Monitored variables...
+ /*
+  declareMonitoredVariable("NJet", m_njet);
+  declareMonitoredVariable("Et", m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+*/
+
+
+};
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.cxx
new file mode 100644
index 000000000000..80846e55aeab
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.cxx
@@ -0,0 +1,60 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TrigJetOrToolMT.cxx
+// PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+//
+//
+// ********************************************************************
+
+#include "TrigJetOrToolMT.h"
+
+#include "GaudiKernel/StatusCode.h"
+
+#include "DecisionHandling/HLTIdentifier.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+
+using TrigCompositeUtils::DecisionID;
+using TrigCompositeUtils::Decision;
+using TrigCompositeUtils::DecisionContainer;
+
+TrigJetOrToolMT::TrigJetOrToolMT(const std::string& type,
+                                 const std::string& name,
+                                 const IInterface* parent) :
+  base_class(type, name, parent),
+  m_decisionId(HLT::Identifier::fromToolName(name)) {
+}
+
+
+TrigJetOrToolMT::~TrigJetOrToolMT(){
+}
+
+StatusCode TrigJetOrToolMT::initialize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetOrToolMT::finalize(){
+  return StatusCode::SUCCESS;
+}
+
+StatusCode TrigJetOrToolMT::decide(const xAOD::JetContainer* jets,
+                                           bool& pass) const {
+
+  m_lhs->decide(jets, pass);
+  if (not pass){
+    m_rhs->decide(jets, pass);
+    ATH_MSG_DEBUG("LHS failed " << " RHS " <<std::boolalpha << pass);
+  } else {
+    ATH_MSG_DEBUG("LHS passed");
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+
+const HLT::Identifier& TrigJetOrToolMT::getId() const{
+  return m_decisionId;
+} 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h
new file mode 100644
index 000000000000..3af3941dc696
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h
@@ -0,0 +1,68 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGJETORTOOLMT_H
+#define TRIGJETORTOOLMT_H
+/********************************************************************
+ *
+ * NAME:     TrigJetOrToolMT.h
+ * PACKAGE:  Trigger/TrigHypothesis/TrigHLTJetHypo
+ *
+ *
+ *********************************************************************/
+
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ICleaner.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/IJetGrouper.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h"
+#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h"
+
+#include "ITrigJetHypoToolMT.h"
+#include "ITrigJetHypoToolConfig.h"
+
+class TrigJetOrToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
+
+ public:
+  
+  TrigJetOrToolMT(const std::string& type,
+                    const std::string& name,
+                    const IInterface* parent);
+  virtual ~TrigJetOrToolMT();
+  virtual StatusCode initialize() override;
+  virtual StatusCode finalize() override;
+
+  // ITrigJetOrToolMT interface
+  virtual StatusCode
+    decide(const xAOD::JetContainer*, bool& pass) const override;
+  virtual const HLT::Identifier& getId() const override; 
+ private:
+
+  // Identifier is used to keep track of which tool made which decision.
+  // The information is stored in the event store.
+  HLT::Identifier m_decisionId;  
+  
+  ToolHandle<ITrigJetHypoToolMT> m_lhs {
+    this, "lhs", {}, "LHS boolean binary expression"}; 
+  ToolHandle<ITrigJetHypoToolMT> m_rhs {
+    this, "rhs", {}, "RHS boolean binary expression"}; 
+
+ 
+ // Monitored variables...
+ /*
+  declareMonitoredVariable("NJet", m_njet);
+  declareMonitoredVariable("Et", m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+*/
+
+
+};
+#endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
index 6b4ad114a9a9..014d7bb1b888 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
@@ -10,6 +10,11 @@
 #include "TrigHLTJetHypo/TrigHLTJetHypo_SMC.h"
 #include "../TrigJetHypoAlgMT.h"
 #include "../TrigJetHypoToolConfig_EtaEt.h"
+#include "../TrigJetHypoToolConfig_simple.h"
+#include "../TrigJetHypoToolConfig_dijet.h"
+#include "../TrigJetNotToolMT.h"
+#include "../TrigJetAndToolMT.h"
+#include "../TrigJetOrToolMT.h"
 #include "../TrigJetHypoToolMT.h"
 
 DECLARE_COMPONENT( TrigHLTJetHypo2 )
@@ -19,7 +24,12 @@ DECLARE_COMPONENT( TrigEFDPhiMetJetAllTE )
 DECLARE_COMPONENT( TrigHLTJetHypo_Dijet )
 DECLARE_COMPONENT( TrigHLTJetHypo_DijetMassDEta )
 DECLARE_COMPONENT( TrigHLTJetHypo_DijetMassDEtaDPhi )
-DECLARE_COMPONENT( TrigHLTJetHypo_EtaEt )
+DECLARE_COMPONENT( TrigJetHypoToolConfig_EtaEt )
+DECLARE_COMPONENT( TrigJetHypoToolConfig_simple )
+DECLARE_COMPONENT( TrigJetHypoToolConfig_dijet )
+DECLARE_COMPONENT( TrigJetNotToolMT)
+DECLARE_COMPONENT( TrigJetAndToolMT)
+DECLARE_COMPONENT( TrigJetOrToolMT)
 DECLARE_COMPONENT( TrigHLTJetHypo_SMC )
 DECLARE_COMPONENT( TrigHLTJetHypo_HT )
 DECLARE_COMPONENT( TrigHLTJetHypo_TLA )
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
index 9393ed844a81..934c2ca704f1 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
@@ -7,8 +7,6 @@ from AthenaCommon.AppMgr import ServiceMgr as svcMgr
 from AthenaCommon.Constants import VERBOSE,DEBUG,INFO
 from AthenaCommon.CFElements import parOR, seqAND, seqOR, stepSeq
 
-
-
 ## def jetFSInputMaker( ):
 ##   """ Creates the jet inputMaker for FS"""
 ##   RoIs = jetCollections.L1RoIs
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
index 9e36ab4f49b3..00344d62048d 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
@@ -119,7 +119,7 @@ if (doJet):
     
     jetChains  = [
         Chain(name='HLT_j85',  Seed="L1_J20",  ChainSteps=[jetstep1]  ),
-        Chain(name='HLT_j100', Seed="L1_J20",  ChainSteps=[jetstep1]  )
+        Chain(name='HLT_j45', Seed="L1_J20",  ChainSteps=[jetstep1] )  
         ]
     testChains += jetChains
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
index f235b86abb82..c3ef3fd3315e 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
@@ -1,23 +1,20 @@
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_xe30_L1XE10 ID#347649004
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_j85 ID#3478728990
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_xe30_L1XE10 ID#347649004
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j85 ID#3478728990
+TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     1   0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     1   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     1   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -33,12 +30,10 @@ TriggerSummaryStep2                     2   0     DEBUG  +++ HLT_e7_etcut ID#243
 TriggerSummaryStep2                     2   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_xe30_L1XE10 ID#347649004
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j85 ID#3478728990
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -100,12 +95,11 @@ TriggerSummaryStep2                     8   0     DEBUG  +++ HLT_e7_etcut ID#243
 TriggerSummaryStep2                     8   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     9   0     DEBUG  +++ HLT_xe30_L1XE10 ID#347649004
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j85 ID#3478728990
+TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     10  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     10  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     10  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -129,12 +123,10 @@ TriggerSummaryStep2                     12  0     DEBUG  +++ HLT_g5_etcut ID#140
 TriggerSummaryStep2                     12  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep2                     12  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_j85 ID#3478728990
 TriggerSummaryStep2                     13  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     13  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     13  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -173,12 +165,11 @@ TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e3_etcut ID#271
 TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_xe30_L1XE10 ID#347649004
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j100 ID#625306965
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j85 ID#3478728990
+TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -199,10 +190,10 @@ TrigSignatureMoniMT                                INFO HLT_e7_etcut
 TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        205       
 TrigSignatureMoniMT                                INFO HLT_g5_etcut                  20        20        17        17        17        
 TrigSignatureMoniMT                                INFO HLT_g5_etcut decisions                            50        50        
-TrigSignatureMoniMT                                INFO HLT_j100                      20        20        6         0         6         
-TrigSignatureMoniMT                                INFO HLT_j100 decisions                                6         0         
-TrigSignatureMoniMT                                INFO HLT_j85                       20        20        6         0         6         
-TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 6         0         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        3         0         3         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 3         0         
+TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         0         
 TrigSignatureMoniMT                                INFO HLT_mu6                       20        20        3         0         3         
 TrigSignatureMoniMT                                INFO HLT_mu6 decisions                                 3         0         
 TrigSignatureMoniMT                                INFO HLT_mu6Comb                   20        20        3         2         2         
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/jet.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/jet.menu.py
index 936f01378a6d..668f87183b70 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/jet.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/jet.menu.py
@@ -16,7 +16,7 @@ step1=ChainStep("Step1_jet", [jetSeq1])
 
 testChains  = [
     Chain(name='HLT_j85',  Seed="L1_J20",  ChainSteps=[step1]  ),
-    Chain(name='HLT_j100', Seed="L1_J20",  ChainSteps=[step1]  )
+    Chain(name='HLT_j45', Seed="L1_J20",  ChainSteps=[step1]  )
     ]
     
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
index ce932a38433d..f9072a28f116 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
@@ -1,16 +1,7 @@
-TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_j85 ID#3478728990
-TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j85 ID#3478728990
-TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j85 ID#3478728990
-TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j85 ID#3478728990
-TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     13  0     DEBUG  +++ HLT_j85 ID#3478728990
-TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j100 ID#625306965
-TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j85 ID#3478728990
-TrigSignatureMoniMT                                INFO HLT_j100                      20        20        6         6         
-TrigSignatureMoniMT                                INFO HLT_j100 decisions                                6         
-TrigSignatureMoniMT                                INFO HLT_j85                       20        20        6         6         
-TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 6         
+TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j45 ID#3664574289
+TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j45 ID#3664574289
+TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j45 ID#3664574289
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        3         3         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 3         
+TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         
+TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py b/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
index e5fb55effd12..b47021633789 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
@@ -27,7 +27,10 @@ if TriggerFlags.doCalo:
 
 
     # menu items
-     CTPToChainMapping = {"HLT_j85":       "L1_J20"  , "HLT_j100" : "L1_J20" }
+     CTPToChainMapping = {
+       "HLT_j85":       "L1_J20"  ,
+       "HLT_j45" : "L1_J20"
+     }
      testChains =[x for x, y in CTPToChainMapping.items()]
      topSequence.L1DecoderTest.ChainToCTPMapping = CTPToChainMapping
      print testChains
@@ -67,13 +70,20 @@ if TriggerFlags.doCalo:
      (recoSequence, sequenceOut) = jetRecoSequence(inputRoIs)
 
      from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoAlgMT
-     from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromName
+     from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromDict
      hypo = TrigJetHypoAlgMT("jethypo")
      hypo.OutputLevel = DEBUG
      hypo.Jets = sequenceOut
      hypo.HypoInputDecisions = hypoDecisions
      hypo.HypoOutputDecisions = "jetDecisions"
-     hypo.HypoTools = [ trigJetHypoToolFromName( c, c ) for c in testChains ] 
+     
+     def make_dict(chain_name):
+       from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
+       chainNameDecoder = DictFromChainName.DictFromChainName()
+       return chainNameDecoder.getChainDict(chain_name)
+       
+     hypo.HypoTools = [trigJetHypoToolFromDict(make_dict(c))
+                       for c in testChains] 
      print hypo
      for tool in hypo.HypoTools:
          print tool
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
index 1637d01b074e..249691380e52 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
@@ -126,7 +126,9 @@ JetChainParts = {
     'bTracking'    : [],
     'bConfig'      : ['split',],
     'bMatching'    : ['antimatchdr05mu'],
-    'trkopt'       : []
+    'trkopt'       : [],
+    'hypoScenario' : ['simple', 'vbenf'],
+    'smc'          : ['30smcINF', '35smcINF', '40smcINF', '50smcINF', '60smcINF', 'nosmc'],
 }
 
 # ---- Jet Dictinary of default Values ----
@@ -153,6 +155,8 @@ JetChainParts_Default = {
     'bMatching'    : [],
     'dataScouting' : '',
     'trkopt'       : 'notrk',
+    'hypoScenario' : 'simple',
+    'smc'          : 'nosmc',
     }
 
 #==========================================================
-- 
GitLab


From c73b607dae2d15f2d9085b21f6ecd5ba59f545dc Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Fri, 8 Mar 2019 16:43:37 +0000
Subject: [PATCH 012/163] WIP for debugging RPC changes

---
 .../MuonByteStream/src/MuonCacheCreator.cxx   |   1 +
 .../src/RPC_RawDataProviderTool.cxx           | 133 ++++++------
 .../src/RPC_RawDataProviderTool.h             |   2 +
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.cxx   |   2 +-
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.h     | 204 +++++++++++-------
 .../src/RpcROD_Decoder_v302.C                 |  60 ++++--
 6 files changed, 242 insertions(+), 160 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
index ba1cd2df8a6b..9bf38bb166c3 100644
--- a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
@@ -63,6 +63,7 @@ StatusCode MuonCacheCreator::execute (const EventContext& ctx) const {
   // Create the CSC cache container
   ATH_CHECK(createContainer(m_CscCacheKey,    m_cscIdHelper->module_hash_max(), ctx));
   // Create the RPC cache container
+  // Max should match 600 (hardcoded in RPC_RawDataProviderTool)
   ATH_CHECK(createContainer(m_RpcCacheKey,    m_rpcIdHelper->module_hash_max(), ctx));
   // Create the TGC cache container
   ATH_CHECK(createContainer(m_TgcCacheKey,    m_tgcIdHelper->module_hash_max(), ctx));
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
index 66c2d78ab4a6..96f98cbef9e2 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
@@ -33,11 +33,13 @@ Muon::RPC_RawDataProviderTool::RPC_RawDataProviderTool(
     AthAlgTool(t, n, p),
     m_decoder("Muon::RpcROD_Decoder/RpcROD_Decoder", this),
     m_AllowCreation(false),
-    m_robDataProvider ("ROBDataProviderSvc",n)
+    m_robDataProvider ("ROBDataProviderSvc",n),
+    m_WriteOutRpcSectorLogic(true)
 {
     declareInterface<IMuonRawDataProviderTool>(this);
     declareProperty("Decoder",     m_decoder);
-    declareProperty ("RpcContainerCacheKey", m_rdoContainerCacheKey, "Optional external cache for the RPC container");
+    declareProperty("RpcContainerCacheKey", m_rdoContainerCacheKey, "Optional external cache for the RPC container");
+    declareProperty("WriteOutRpcSectorLogic", m_WriteOutRpcSectorLogic, "Turn on/off RpcSectorLogic writing");
 }
 
 
@@ -59,6 +61,13 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
 
     ATH_CHECK( m_rdoContainerCacheKey.initialize( !m_rdoContainerCacheKey.key().empty() ) );
 
+    // We should only turn off the sector logic when running with cached data a la trigger mode
+    if(!m_rdoContainerCacheKey.key().empty() && m_WriteOutRpcSectorLogic){
+      ATH_MSG_FATAL("Cannot write out RpcSectorLogic while running with cached RpcPad containers" 
+        " as the RpcSectorLogic is not cached at the same time and the written containers will desync." 
+        " Please turn off RpcSectorLogic writing when running with cached bytestream container");
+    }
+
     if (m_decoder.retrieve().isFailure())
     {
         ATH_MSG_FATAL( "Failed to retrieve tool " << m_decoder );
@@ -154,11 +163,6 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize()
         }
     } 
     else has_bytestream = true;
-    //{
-    //    msg(MSG::FATAL) << "Cannot get the job configuration" << endmsg;
-  //return StatusCode::FAILURE;
-    //}
-    
     
     // register the container only when the imput from ByteStream is set up     
     m_activeStore->setStore( &*evtStore() ); 
@@ -232,78 +236,85 @@ StatusCode Muon::RPC_RawDataProviderTool::convert(const std::vector<IdentifierHa
 }
 // the old one 
 StatusCode Muon::RPC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs,
-                                  const std::vector<IdentifierHash>& collections)
+  const std::vector<IdentifierHash>& collections)
 {
  //CALLGRIND_START_INSTRUMENTATION
     // retrieve the container through the MuonRdoContainerManager becasue
     // if the MuonByteStream CNV has to be used, the container must have been
     // registered there!
-    m_activeStore->setStore( &*evtStore() );
-      
-    if(m_AllowCreation == false)
-    {
-        ATH_MSG_WARNING( "Container create disabled due to byte stream");
-        
+  m_activeStore->setStore( &*evtStore() );
+
+  if(m_AllowCreation == false)
+  {
+    ATH_MSG_WARNING( "Container create disabled due to byte stream");
+
         return StatusCode::SUCCESS; // Maybe it should be false to stop the job
                                     // because the convert method should not
                                     // have been called .... but this depends
                                     // on the user experience
-    }
+  }
 
-    SG::WriteHandle<RpcPadContainer> rdoContainerHandle(m_containerKey);
-    if (rdoContainerHandle.isPresent())
-      return StatusCode::SUCCESS;
+  SG::WriteHandle<RpcPadContainer> rdoContainerHandle(m_containerKey);
+  if (rdoContainerHandle.isPresent())
+    return StatusCode::SUCCESS;
 
 
-    // Split the methods to have one where we use the cache and one where we just setup the container
-    const bool externalCacheRDO = !m_rdoContainerCacheKey.key().empty();
-    if(!externalCacheRDO){
-      ATH_CHECK( rdoContainerHandle.record(std::make_unique<RpcPadContainer> (padMaxIndex) ) );
-      ATH_MSG_DEBUG( "Created RpcPadContainer" );
-    }
-    else{
-      SG::UpdateHandle<RpcPad_Cache> update(m_rdoContainerCacheKey);
-      ATH_CHECK(update.isValid());
-      ATH_CHECK(rdoContainerHandle.record (std::make_unique<RpcPadContainer>( update.ptr() )));
-      ATH_MSG_DEBUG("Created container using cache for " << m_rdoContainerCacheKey.key());
-    }
+  // Split the methods to have one where we use the cache and one where we just setup the container
+  const bool externalCacheRDO = !m_rdoContainerCacheKey.key().empty();
+  if(!externalCacheRDO){
+    ATH_CHECK( rdoContainerHandle.record(std::make_unique<RpcPadContainer> (padMaxIndex) ) );
+    ATH_MSG_DEBUG( "Created RpcPadContainer" );
+  }
+  else{
+    SG::UpdateHandle<RpcPad_Cache> update(m_rdoContainerCacheKey);
+    ATH_CHECK(update.isValid());
+    ATH_CHECK(rdoContainerHandle.record (std::make_unique<RpcPadContainer>( update.ptr() )));
+    ATH_MSG_DEBUG("Created container using cache for " << m_rdoContainerCacheKey.key());
+  }
+
+  RpcPadContainer* pad = rdoContainerHandle.ptr();
+
+  SG::WriteHandle<RpcSectorLogicContainer> logicHandle(m_sec);
+  auto logic = std::make_unique<RpcSectorLogicContainer>();
   
-    RpcPadContainer* pad = rdoContainerHandle.ptr();
- 
-    SG::WriteHandle<RpcSectorLogicContainer>    logicHandle(m_sec);
-    auto logic = std::make_unique<RpcSectorLogicContainer>();
-    
-    for (ROBFragmentList::const_iterator itFrag = vecRobs.begin(); itFrag != vecRobs.end(); itFrag++)
+  // Reset to a nullptr (logic.get() will pass this through to decoder)
+  if(!m_WriteOutRpcSectorLogic) logic.reset();
+
+  for (ROBFragmentList::const_iterator itFrag = vecRobs.begin(); itFrag != vecRobs.end(); itFrag++)
+  {
+    //convert only if data payload is delivered
+    if ( (**itFrag).rod_ndata()!=0 )
     {
-        //convert only if data payload is delivered
-        if ( (**itFrag).rod_ndata()!=0 )
-        {
-            std::vector<IdentifierHash> coll =
-                                      to_be_converted(**itFrag,collections);
-      
-            if (m_decoder->fillCollections(**itFrag, *pad, coll, logic.get()).isFailure())
-                {
-                    // store the error conditions into the StatusCode and continue
-                }
-        }
-        else
-        {
-	  if(msgLvl(MSG::DEBUG))
-            {
-                uint32_t sourceId= (**itFrag).source_id();
-                msg(MSG::DEBUG) << " ROB " << MSG::hex << sourceId
+      std::vector<IdentifierHash> coll = to_be_converted(**itFrag,collections);
+
+      if (m_decoder->fillCollections(**itFrag, *pad, coll, logic.get()).isFailure())
+      {
+        // store the error conditions into the StatusCode and continue
+      }
+    }
+    else
+    {
+     if(msgLvl(MSG::DEBUG))
+     {
+        uint32_t sourceId= (**itFrag).source_id();
+        msg(MSG::DEBUG) << " ROB " << MSG::hex << sourceId
         << " is delivered with an empty payload" << MSG::dec 
         << endmsg;
-            }
-            // store the error condition into the StatusCode and continue
-        }
+      }
+      // store the error condition into the StatusCode and continue
     }
-    // Unsure about this at the moment
-    //ATH_CHECK( rdoContainerHandle.record (std::move (pad)) );
+  }
+  // Unsure about this at the moment
+  //ATH_CHECK( rdoContainerHandle.record (std::move (pad)) );
+  ATH_MSG_DEBUG("After processing, number of collections in container : " << pad-> numberOfCollections() );
+  if(m_WriteOutRpcSectorLogic){
+    ATH_MSG_DEBUG("Writing out RpcSectorLogicContainer");
     ATH_CHECK( logicHandle.record (std::move (logic)) );
-    //in presence of errors return FAILURE
-//CALLGRIND_STOP_INSTRUMENTATION
-    return StatusCode::SUCCESS;
+  }
+
+  //in presence of errors return FAILURE
+  //CALLGRIND_STOP_INSTRUMENTATION
+  return StatusCode::SUCCESS;
 }
 
 
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
index 820755fecbba..5c0bcf140550 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.h
@@ -72,6 +72,8 @@ private:
 
     /// RPC container cache key
     SG::UpdateHandleKey<RpcPad_Cache> m_rdoContainerCacheKey ;
+    /// Turn on/off RpcSectorConfig writing
+    bool m_WriteOutRpcSectorLogic;
 
     
 };
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
index 892c4619d5d9..ba82e4d2bc14 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
@@ -38,7 +38,7 @@ Muon::RpcROD_Decoder::RpcROD_Decoder ( const std::string& type, const std::strin
 														      m_decodeSL(false),
 														      //m_byteStreamErrSvc("RPC_ByteStreamErrorSvc",name),
 														      m_cabling(0),
-														      m_pRpcIdHelper(0) //,m_bench("RpcROD_Decoder")
+														      m_pRpcIdHelper(0) //,m_bench("RpcROD_Decoder"),
 {
     declareInterface< IRpcROD_Decoder  >( this );
     declareProperty("SpecialROBNumber",m_specialROBNumber=-1);
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
index b1bfc3c249b9..66dd7f1bdcb8 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
@@ -400,6 +400,9 @@ namespace Muon
       return StatusCode::FAILURE;  // error in fragment
     }
     
+    if(RPC_SECTORLOGIC == nullptr){
+      ATH_MSG_DEBUG("RPC_SECTORLOGIC is null, so we will skip decoding the sector logic information");
+    }
     
     // get the pointer to the data
     BS data;
@@ -517,7 +520,7 @@ namespace Muon
           ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
         }
         else{
-          ATH_MSG_VERBOSE(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+          ATH_MSG_DEBUG(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
 
 		      // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
           RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
@@ -547,22 +550,20 @@ namespace Muon
 	    //for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
       for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
 	    {
-	      // add collection into IDC using RpcPadCache functions
-        
+	      // Get the write handle again, but note that lock.alreadyPresent() will be true BUT we have already checked 
+        // for this hash that it was not present before processing, and we still need to attach to the container
         RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( ((*it).second)->identifyHash() );
+        
+        // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
+        StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>((*it).second)));
 
-	      if ( !lock.alreadyPresent() )
-	      {
-          // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
-          StatusCode status_lock = lock.addOrDelete( std::unique_ptr<RpcPad>( (*it).second ) );
-
-		      if(status_lock != StatusCode::SUCCESS)
-		      {
-		        ATH_MSG_ERROR("Failed to add RPC PAD collection to container" );
-		        //report the error condition
-		      }
-          else 
-            ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
+		    if(status_lock != StatusCode::SUCCESS)
+		    {
+		      ATH_MSG_ERROR("Failed to add RPC PAD collection to container" );
+		      //report the error condition
+		    }
+        else{
+          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
         }
       }
       return cnv_sc;
@@ -571,12 +572,16 @@ namespace Muon
     std::vector<IdentifierHash>::const_iterator it = collections.begin();
     for( ; it!=collections.end(); ++it)
     {
-      RpcPadContainer::const_iterator itColl = rdoIdc.indexFind(*it);
-      if (itColl == rdoIdc.end())
-      {
-        msg(MSG::VERBOSE) << " Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) << endmsg;
-        
-        // create new collection
+      // IDC_WriteHandle
+      RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( (*it) );
+
+      if(lock.alreadyPresent() ){
+        ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
+      }
+      else{
+        ATH_MSG_VERBOSE(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+
+        // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
         RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
         
         //convert collection - note case3 will never be used due to statement above
@@ -596,14 +601,18 @@ namespace Muon
           ATH_MSG_VERBOSE("Error into the RPC fillCollections decoding");
         }
         
+        // Here need to implement writing for all the other fill methods
+        // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
+        StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>( coll ) ) );
+
         // add collection into IDC
-        if (rdoIdc.addCollection(coll, *it).isFailure())
+        if(status_lock != StatusCode::SUCCESS)
         {
-          msg(MSG::ERROR) << "Failed to add RPC PAD collection to container" << endmsg;
+          ATH_MSG_ERROR("Failed to add RPC PAD collection to container");
           //report the error condition
         }
         else
-          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(*it)<<" to the RpcPad Container | size = "<<coll->size());
+          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(*it)<<" to the RpcPad Container | size = " << coll->size());
       }
     }
     return cnv_sc;
@@ -619,6 +628,10 @@ namespace Muon
   RpcROD_Decoder::fillCollection_v302(BS data, const uint32_t data_size,
                                       RpcPad& v, const uint32_t& sourceId, RpcSectorLogicContainer* sectorLogicContainer ) const 
   {
+    bool skipSectorLogicDecoding = (sectorLogicContainer == nullptr);
+    if(skipSectorLogicDecoding)
+      ATH_MSG_DEBUG("Skip SectorLogic decoding, so SLROC.decodeFragment is not being processed");
+
 
     /* for (unsigned int i = 0; i<1000; ++i) { */
     /*   //std::cout<<" aaa "<<std::endl; */
@@ -758,14 +771,16 @@ namespace Muon
       isPadPreFooter=false;
       isPadFooter   =false;
       isSLHeader    =false;
-      isSLSubHeader    =false;
+      isSLSubHeader =false;
       isSLFooter    =false;
       uint32_t currentWord = p[i];
       
       
       RXROS.decodeFragment(currentWord,recField);
       PDROS.decodeFragment(currentWord,recField);
-      SLROS.decodeFragment(currentWord,recField);
+      if(!skipSectorLogicDecoding){
+        SLROS.decodeFragment(currentWord,recField);
+      }
       
       if (RXROS.isHeader()) {
         isRXHeader=true;
@@ -792,6 +807,14 @@ namespace Muon
       } else if (SLROS.isSubHeader() && isSLFragment) {
         isSLSubHeader=true;
       }
+
+      // The SLROS functions still return values (based on default values)
+      if(skipSectorLogicDecoding){
+        isSLHeader    = false;
+        isSLSubHeader = false;
+        isSLFragment  = false;
+        isSLFooter    = false;
+      }
       
       
       if (msgLvl(MSG::VERBOSE) ) {
@@ -1209,7 +1232,7 @@ namespace Muon
                 uint16_t channel = matrixROS.channel();
                 firedChan = new RpcFiredChannel(bcid,time,ijk,channel);
                 
-		ATH_MSG_VERBOSE (
+		            ATH_MSG_VERBOSE (
                 "Adding a fired channel, bcid=" << bcid << " time=" 
                 << " ijk=" << ijk << " channel=" << channel);
                 
@@ -1258,7 +1281,10 @@ namespace Muon
   RpcROD_Decoder::fillCollection_v301(BS data, const uint32_t data_size,
                                       RpcPad& v, const uint16_t& subDetector, RpcSectorLogicContainer* sectorLogicContainer ) const
   {
-    
+    bool skipSectorLogicDecoding = (sectorLogicContainer == nullptr);
+    if(skipSectorLogicDecoding)
+      ATH_MSG_DEBUG("Skip SectorLogic decoding, so SLROC.decodeFragment is not being processed");
+
     // unpack the 32 bits words into 16 bits 
     // no ROD header and footer 
     std::vector<uint16_t> p = get16bits_v301(data,data_size,0,0);
@@ -1291,8 +1317,7 @@ namespace Muon
     bool foundPad=false;
     
     
-    if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "The offline ID request for conversion is " 
-    << m_pRpcIdHelper->show_to_string(thisPadOfflineId) << endmsg;
+    ATH_MSG_VERBOSE( "The offline ID request for conversion is " << m_pRpcIdHelper->show_to_string(thisPadOfflineId) );
     
     
     bool isSLHeader    =false;
@@ -1344,7 +1369,9 @@ namespace Muon
       
       RXROS.decodeFragment(currentWord,recField);
       PDROS.decodeFragment(currentWord,recField);
-      SLROS.decodeFragment(currentWord,recField);
+      if(!skipSectorLogicDecoding){
+        SLROS.decodeFragment(currentWord,recField);
+      }
       
       if (RXROS.isHeader() && !isSLFragment) isRXHeader=true;
       else if (RXROS.isFooter() && !isSLFragment) isRXFooter=true;
@@ -1354,26 +1381,33 @@ namespace Muon
       else if (PDROS.isFooter() && !isSLFragment) isPadFooter=true;
       else if (SLROS.isHeader()) isSLHeader=true;
       else if (SLROS.isFooter()) isSLFooter=true;
+
+      // The SLROS functions still return values (based on default values)
+      if(skipSectorLogicDecoding){
+        isSLHeader    = false;
+        isSLFragment  = false;
+        isSLFooter    = false;
+      }
       
       //#ifndef NVERBOSE
       if (msgLvl(MSG::VERBOSE))
-	{
-	  msg(MSG::VERBOSE) <<" RX Header: "<<isRXHeader
-			    <<" RX Footer: "<<isRXFooter
-			    <<endmsg;
-	  msg(MSG::VERBOSE) <<" Pad Header: "<<isPadHeader
-			    <<" Pad SubHeader: "<<isPadSubHeader
-			    <<" Pad PreFooter: "<<isPadPreFooter
-			    <<" Pad Footer: "<<isPadFooter
-			    <<endmsg;
-	  msg(MSG::VERBOSE) <<" isPADFragment: "<<isPADFragment
-			    <<endmsg;
-	  msg(MSG::VERBOSE) <<" SL Header: "<<isSLHeader
-			    <<" SL Footer: "<<isSLFooter
-			    <<endmsg;
-	  msg(MSG::VERBOSE) <<" isSLFragment: "<<isSLFragment
-			    <<endmsg;
-	}
+      {
+       msg(MSG::VERBOSE) <<" RX Header: "<<isRXHeader
+       <<" RX Footer: "<<isRXFooter
+       <<endmsg;
+       msg(MSG::VERBOSE) <<" Pad Header: "<<isPadHeader
+       <<" Pad SubHeader: "<<isPadSubHeader
+       <<" Pad PreFooter: "<<isPadPreFooter
+       <<" Pad Footer: "<<isPadFooter
+       <<endmsg;
+       msg(MSG::VERBOSE) <<" isPADFragment: "<<isPADFragment
+       <<endmsg;
+       msg(MSG::VERBOSE) <<" SL Header: "<<isSLHeader
+       <<" SL Footer: "<<isSLFooter
+       <<endmsg;
+       msg(MSG::VERBOSE) <<" isSLFragment: "<<isSLFragment
+       <<endmsg;
+     }
       //#endif   
       
       if(isRXHeader) { 
@@ -1398,39 +1432,39 @@ namespace Muon
         
         // Check the Sector Logic Fragment      
         if(foundSL && msgLvl(MSG::VERBOSE)) 
-	  {
+        {
           //#ifndef NVERBOSE
           msg(MSG::VERBOSE) <<"SectorLogicReadOut checkFragment: "
           << myRPC.SLFragment()->checkFragment()<<endmsg;
           msg(MSG::VERBOSE) << myRPC.SLFragment()<<endmsg;
           //#endif
-          }
+        }
         
         if(isSLHeader) SLBodyWords=0;
         
         // Decode the sector logic footer
         else if(isSLFooter ) {
-          
+
           //#ifndef NVERBOSE
           if (SLindex>1) {
             msg(MSG::ERROR) << "More than 2 SL fragments in sector " << sector << endmsg;
           }
           //#endif
           
-	  if (msgLvl(MSG::VERBOSE))
-	    {
-	      //#ifndef NVERBOSE
-	      msg(MSG::VERBOSE) <<" Number of data words in SectorLogicReadOut= "
-				<<SLBodyWords<<endmsg;   
-	      msg(MSG::VERBOSE) <<" TEST SL: "<<foundSL<<endmsg;
-	      //#endif  
-          
-	      //#ifndef NVERBOSE
-	      // Print out a raw dump of the SL fragment 
-	      for(unsigned short j=0; j<SLBodyWords; j++) {
-		msg(MSG::VERBOSE) <<" SL data word "<<j<<" : "<<std::hex<<SLBuff[j]<<MSG::dec<<endmsg;
-	      }
-	  }
+          if (msgLvl(MSG::VERBOSE))
+          {
+	          //#ifndef NVERBOSE
+            msg(MSG::VERBOSE) <<" Number of data words in SectorLogicReadOut= "
+            <<SLBodyWords<<endmsg;   
+            msg(MSG::VERBOSE) <<" TEST SL: "<<foundSL<<endmsg;
+	          //#endif  
+
+	          //#ifndef NVERBOSE
+	          // Print out a raw dump of the SL fragment 
+            for(unsigned short j=0; j<SLBodyWords; j++) {
+              msg(MSG::VERBOSE) <<" SL data word "<<j<<" : "<<std::hex<<SLBuff[j]<<MSG::dec<<endmsg;
+            }
+          }
           //#endif
           
           // Found the sector logic footer, the sector logic fragment 
@@ -1465,12 +1499,12 @@ namespace Muon
                 uint16_t ptid  = sectorLogic->ptid(ilink,igate);
                 //#ifndef NVERBOSE
                 ATH_MSG_VERBOSE ("SL: pt for link=" << ilink 
-				 << " gate=" << igate << "  is: " << ptid);
+				        << " gate=" << igate << "  is: " << ptid);
                 //#endif
                 if (ptid != 0) {  
                   //#ifndef NVERBOSE
                   ATH_MSG_VERBOSE ("SL: found an hit for link=" << ilink
-				   << " gate=" << igate);
+				          << " gate=" << igate);
                   //#endif
                   uint16_t cmadd = sectorLogic->cmadd(ilink,igate);
                   
@@ -1495,9 +1529,9 @@ namespace Muon
               
             }
             
-	    if (msgLvl(MSG::VERBOSE)){
-            msg(MSG::VERBOSE) << "Size of sector 55: " << sl2->size() << endmsg;
-            msg(MSG::VERBOSE) << "Size of sector 56: " << sl1->size() << endmsg;
+	          if (msgLvl(MSG::VERBOSE)){
+              msg(MSG::VERBOSE) << "Size of sector 55: " << sl2->size() << endmsg;
+              msg(MSG::VERBOSE) << "Size of sector 56: " << sl1->size() << endmsg;
             }
             // flag the two sectors as decoded
             //bool setSector1 = sectorLogicContainer->setSector(56,0);
@@ -1643,12 +1677,12 @@ namespace Muon
         isPadFooter ? isPADFragment=false : isPADFragment=true; 
         
         //#ifndef NVERBOSE
-	if (msgLvl(MSG::VERBOSE)) {
-        msg(MSG::VERBOSE) <<" current word "<<std::hex<<currentWord<<MSG::dec<<endmsg;
-        
-        msg(MSG::VERBOSE) <<" ==isPADFragment= "<<isPADFragment<<endmsg;
-        msg(MSG::VERBOSE) <<" calling pushword: "<<std::hex<<currentWord<<MSG::dec<<endmsg;
-	}
+        if (msgLvl(MSG::VERBOSE)) {
+          msg(MSG::VERBOSE) <<" current word "<<std::hex<<currentWord<<MSG::dec<<endmsg;
+
+          msg(MSG::VERBOSE) <<" ==isPADFragment= "<<isPADFragment<<endmsg;
+          msg(MSG::VERBOSE) <<" calling pushword: "<<std::hex<<currentWord<<MSG::dec<<endmsg;
+        }
         //#endif
         
         int foundCM = 0;
@@ -1697,7 +1731,7 @@ namespace Muon
                 firedChan = new RpcFiredChannel(bcid,time,ijk,channel);
                 //#ifndef NVERBOSE
                 ATH_MSG_VERBOSE ("Adding a fired channel, bcid=" << bcid << " time=" 
-				 << " ijk=" << ijk << " channel=" << channel);
+				        << " ijk=" << ijk << " channel=" << channel);
                 //#endif
                 
                 // add the fired channel to the matrix
@@ -1709,8 +1743,8 @@ namespace Muon
                 firedChan = new RpcFiredChannel(bcid,time,ijk,threshold,overlap);
                 //#ifndef NVERBOSE
                 ATH_MSG_VERBOSE ("Adding a fired channel, bcid=" << bcid << " time=" 
-				 << " ijk=" << ijk << " overlap=" << overlap 
-				 << " threshold=" << threshold);
+				        << " ijk=" << ijk << " overlap=" << overlap 
+				        << " threshold=" << threshold);
                 //#endif
                 
                 // add the fired channel to the matrix
@@ -1741,7 +1775,10 @@ namespace Muon
   RpcROD_Decoder::fillCollection_v300(BS data, const uint32_t data_size,
                                       RpcPad& v, const uint16_t& subDetector, RpcSectorLogicContainer* sectorLogicContainer ) const 
   {
-    
+    bool skipSectorLogicDecoding = (sectorLogicContainer == nullptr);
+    if(skipSectorLogicDecoding)
+      ATH_MSG_DEBUG("Skip SectorLogic decoding, so SLROC.decodeFragment is not being processed");
+
     //#ifndef NVERBOSE
     if (msgLvl(MSG::VERBOSE)) {
       msg(MSG::VERBOSE) << "**********Decoder dumping the words******** " << endmsg;
@@ -1829,6 +1866,13 @@ namespace Muon
       else if (SLROS.isHeader()) isSLHeader=true;
       else if (SLROS.isFooter()) isSLFooter=true;
       
+      // The SLROS functions still return values (based on default values)
+      if(skipSectorLogicDecoding){
+        isSLHeader    = false;
+        isSLFragment  = false;
+        isSLFooter    = false;
+      }
+
       //#ifndef NVERBOSE
       if (msgLvl(MSG::VERBOSE)) {
       msg(MSG::VERBOSE) <<" RX Header: "<<isRXHeader
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder_v302.C b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder_v302.C
index ab999037e721..255acd06daa0 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder_v302.C
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder_v302.C
@@ -23,6 +23,10 @@ StatusCode Muon::RpcROD_Decoder::fillCollectionsFromRob_v302(BS data, const uint
     RpcSectorLogicContainer* sectorLogicContainer ) const 
 {
 
+  bool skipSectorLogicDecoding = (sectorLogicContainer == nullptr);
+  if(skipSectorLogicDecoding)
+    ATH_MSG_DEBUG("Skip SectorLogic decoding, so SLROC.decodeFragment is not being processed");
+
   /* for (unsigned int i = 0; i<1000; ++i) { */
   /*   //std::cout<<" aaa "<<std::endl; */
   /*   msg(MSG::VERBOSE) << "try to increase cpu time "<<log(pow(((double)i+1.)/999.,3))<<endmsg; */
@@ -229,7 +233,9 @@ StatusCode Muon::RpcROD_Decoder::fillCollectionsFromRob_v302(BS data, const uint
       
       RXROS.decodeFragment(currentWord,recFieldROS);
       PDROS.decodeFragment(currentWord,recFieldPAD);
-      SLROS.decodeFragment(currentWord,recFieldSL);
+      if(!skipSectorLogicDecoding){
+        SLROS.decodeFragment(currentWord,recFieldSL);
+      }
       
       if (RXROS.isHeader()) {
         isRXHeader=true;
@@ -256,7 +262,26 @@ StatusCode Muon::RpcROD_Decoder::fillCollectionsFromRob_v302(BS data, const uint
       } else if (SLROS.isSubHeader() && isSLFragment) {
         isSLSubHeader=true;
       }
+
+      // The SLROS functions still return values (based on default values)
+      if(skipSectorLogicDecoding){
+        isSLHeader    = false;
+        isSLSubHeader = false;
+        isSLFragment  = false;
+        isSLFooter    = false;
+      }
       
+      ATH_MSG_VERBOSE("\n isRXHeader " << isRXHeader <<
+                      "\n isRXFooter " << isRXFooter <<
+                      "\n isPadHeader " << isPadHeader <<
+                      "\n isPadSubHeader " << isPadSubHeader <<
+                      "\n isPADFragment " << isPADFragment <<
+                      "\n isPadPreFooter " << isPadPreFooter <<
+                      "\n isPadFooter " << isPadFooter <<
+                      "\n isSLHeader " << isSLHeader <<
+                      "\n isSLSubHeader " << isSLSubHeader <<
+                      "\n isSLFragment " << isSLFragment <<
+                      "\n isSLFooter " << isSLFooter );
       
 
       
@@ -297,27 +322,26 @@ StatusCode Muon::RpcROD_Decoder::fillCollectionsFromRob_v302(BS data, const uint
       
       //we must start with an RX Header:  
       if (i==0 && (!isRXHeader)) 
-	{
-	  ATH_MSG_WARNING("Bad data from RPC ROD 0x" << MSG::hex << rodId << MSG::dec
-      << ". RX header not found at ROB fragment begin. Skipping this ROB fragment.");
-    return StatusCode::SUCCESS; //continue decoding data from other ROBs
-	  //bsErrCheck_errorInRXHeader = true;
-	}
+      {
+        ATH_MSG_WARNING("Bad data from RPC ROD 0x" << MSG::hex << rodId << MSG::dec
+        << ". RX header not found at ROB fragment begin. Skipping this ROB fragment.");
+        return StatusCode::SUCCESS; //continue decoding data from other ROBs
+	      //bsErrCheck_errorInRXHeader = true;
+      }
 
 
       if(isRXHeader) { 
-	//bsErrCheck_errorInRXHeader = false;
-	//bsErrCheck_InRX = true;
-	// bsErrCheck_InSL = false;
-	// bsErrCheck_InPD = false;
-	// bsErrCheck_InCM = false;
+	      //bsErrCheck_errorInRXHeader = false;
+	      //bsErrCheck_InRX = true;
+	      // bsErrCheck_InSL = false;
+	      // bsErrCheck_InPD = false;
+	      // bsErrCheck_InCM = false;
 
  
-        if (msgLvl(MSG::VERBOSE) )
-	  {
-	    msg(MSG::VERBOSE)  << " this is a RX Header " << endmsg;
-	    msg(MSG::VERBOSE) <<" Sector ID="    <<RXROS.RXid()<<endmsg;
-	  }
+        if (msgLvl(MSG::VERBOSE) ){
+	        msg(MSG::VERBOSE)  << " this is a RX Header " << endmsg;
+	        msg(MSG::VERBOSE)  << " Sector ID="    <<RXROS.RXid()<<endmsg;
+	      }
         
         // get the sector id according to the new format
         // not yet implemented in the readout classes
@@ -327,7 +351,7 @@ StatusCode Muon::RpcROD_Decoder::fillCollectionsFromRob_v302(BS data, const uint
         uint16_t rxid = RXROS.RXid();      // range (presumably) 0-1
         sectorForCabling = 2*rodId+rxid;   // range 0-31
         sector = side*32+sectorForCabling; // range 0-63    //side = 1 for side A or 0 for side C // side 1 corresponds to subDetID=65 (side 0 for subDetID=66)
-	if (msgLvl(MSG::VERBOSE) ) msg(MSG::VERBOSE)  << "RXid, sectorForCabling, sector = "<<rxid<<" "<<sectorForCabling<<" "<<sector<<std::endl;
+	      if (msgLvl(MSG::VERBOSE) ) msg(MSG::VERBOSE)  << "RXid, sectorForCabling, sector = "<<rxid<<" "<<sectorForCabling<<" "<<sector<<std::endl;
         
         //fix for M3 
         if ((rodId==3 || rodId==1) && (m_specialROBNumber > 0) ) {
-- 
GitLab


From 1f517a6c86edb05de7f2861a9af416db5d4289c8 Mon Sep 17 00:00:00 2001
From: sherwood <peter.sherwood@cern.ch>
Date: Fri, 8 Mar 2019 18:55:26 +0100
Subject: [PATCH 013/163] Mended
 TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx.

---
 .../TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
index 014d7bb1b888..09251a1c4e1e 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
@@ -24,7 +24,7 @@ DECLARE_COMPONENT( TrigEFDPhiMetJetAllTE )
 DECLARE_COMPONENT( TrigHLTJetHypo_Dijet )
 DECLARE_COMPONENT( TrigHLTJetHypo_DijetMassDEta )
 DECLARE_COMPONENT( TrigHLTJetHypo_DijetMassDEtaDPhi )
-DECLARE_COMPONENT( TrigJetHypoToolConfig_EtaEt )
+DECLARE_COMPONENT( TrigHLTJetHypo_EtaEt )
 DECLARE_COMPONENT( TrigJetHypoToolConfig_simple )
 DECLARE_COMPONENT( TrigJetHypoToolConfig_dijet )
 DECLARE_COMPONENT( TrigJetNotToolMT)
-- 
GitLab


From 65b9a145bdef7ebd10493227f0bca12b38ef1086 Mon Sep 17 00:00:00 2001
From: Bertrand Martin <martindl@cern.ch>
Date: Fri, 8 Mar 2019 19:52:00 +0100
Subject: [PATCH 014/163] Update packages:TrigTauRec tau  from upstream/21.3 to
 upstream/master via pseudo-merge

---
 .../TrigTauRec/TrigTauRec/TrigTauRecMerged.h  |   37 +-
 .../python/TrigTauAlgorithmsHolder.py         |  191 ++-
 .../TrigTauRec/python/TrigTauRecConfig.py     |  193 ++-
 .../TrigTauRec/python/TrigTauRecConfigMT.py   |  205 +++-
 .../TrigTauRec/python/TrigTauRecMonitoring.py |   36 +-
 .../TrigTauRec/src/TrigTauRecMerged.cxx       |  369 +++---
 .../TrigTauRec/src/TrigTauRecMergedMT.cxx     | 1034 ++++++++---------
 .../TriggerMenu/python/tau/TauDef.py          |  303 ++---
 .../TriggerMenu/python/tau/TauDefIdTest.py    |    2 -
 .../TriggerMenu/python/tau/TauHypoProvider.py |  142 ++-
 .../TriggerMenu/python/tau/TauSliceFlags.py   |    7 +-
 11 files changed, 1491 insertions(+), 1028 deletions(-)

diff --git a/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h b/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h
index 5b95de334dcc..856ed1415cbc 100755
--- a/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h
+++ b/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h
@@ -22,6 +22,7 @@
 #include "TrigTimeAlgs/TrigTimerSvc.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "tauRecTools/ITauToolBase.h"
+//#include "tauRecTools/TauJetRNNEvaluator.h"
 
 #include "LumiBlockComps/ILuminosityTool.h" 
 #include "BeamSpotConditionsData/BeamSpotData.h"
@@ -205,14 +206,36 @@ class TrigTauRecMerged: public HLT::FexAlgo {
   std::vector<unsigned char> m_calo_errors;
   /** track errors */
   std::vector<unsigned char> m_track_errors;
-  /** author */
-  std::vector<unsigned char> m_author;
 
-  /** deltaZ0 core Trks*/
-  std::vector<float> m_deltaZ0coreTrks;
-
-  /** deltaZ0 wide Trks*/
-  std::vector<float> m_deltaZ0wideTrks;
+  //  RNN ID monitoring
+  // retrieved from tool handle, if tool exists
+  // needs migration of RNN tools to master
+  //TauJetRNNEvaluator* m_rnn_evaluator;
+
+  float m_RNN_scalar_ptRatioEflowApprox; 
+  float m_RNN_scalar_mEflowApprox; 
+  float m_RNN_scalar_pt_jetseed_log;
+
+  int m_RNN_Nclusters;
+  std::vector<double> m_RNN_cluster_et_log;
+  std::vector<double> m_RNN_cluster_dEta;
+  std::vector<double> m_RNN_cluster_dPhi;
+  std::vector<double> m_RNN_cluster_CENTER_LAMBDA;
+  std::vector<double> m_RNN_cluster_SECOND_LAMBDA;
+  std::vector<double> m_RNN_cluster_SECOND_R;
+
+  int m_RNN_Ntracks;
+  std::vector<double> m_RNN_track_pt_log;
+  std::vector<double> m_RNN_track_dEta;
+  std::vector<double> m_RNN_track_dPhi;
+  std::vector<double> m_RNN_track_d0_abs_log;
+  std::vector<double> m_RNN_track_z0sinThetaTJVA_abs_log;
+  std::vector<double> m_RNN_track_nInnermostPixelHits;
+  std::vector<double> m_RNN_track_nPixelHits;
+  std::vector<double> m_RNN_track_nSCTHits;
+
+  float m_RNNJetScore;
+  float m_RNNJetScoreSigTrans;
 
 };
 #endif
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py
index d9f76cf6859e..491fc8c3c849 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py
@@ -124,7 +124,6 @@ def getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='', ca
     
     from tauRecTools.tauRecToolsConf import TauCalibrateLC
     TauCalibrateLC = TauCalibrateLC(name = _name,
-                                    #calibrationFile = "EnergyCalibrationLC2012_retuned.root",
                                     calibrationFile = calibFileName,
                                     doEnergyCorrection = correctEnergy,
                                     doAxisCorrection = correctAxis)
@@ -134,14 +133,46 @@ def getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='', ca
     cached_instances[_name] = TauCalibrateLC                
     return TauCalibrateLC
 
+########################################################################
+# MvaTESVariableDecorator
+def getMvaTESVariableDecorator():
+
+    _name = sPrefix + 'MvaTESVariableDecorator'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import MvaTESVariableDecorator
+    MvaTESVariableDecorator = MvaTESVariableDecorator(name = _name)
+
+    ToolSvc += MvaTESVariableDecorator
+    cached_instances[_name] = MvaTESVariableDecorator
+    return MvaTESVariableDecorator
+
+########################################################################
+# MvaTESEvaluator
+def getMvaTESEvaluator():
+
+    _name = sPrefix + 'MvaTESEvaluator'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import MvaTESEvaluator
+    MvaTESEvaluator = MvaTESEvaluator(name = _name,
+                                      WeightFileName = 'OnlineMvaTES_BRT_v1.weights.root')
+
+    ToolSvc += MvaTESEvaluator
+    cached_instances[_name] = MvaTESEvaluator
+    return MvaTESEvaluator
+
 ########################################################################
 # Tau cell variables calculation
-def getCellVariables(cellConeSize=0.2, prefix=''):
-    #if prefix is not given, take global one 
-    if not prefix: 
-        prefix=sPrefix 
+def getCellVariables(cellConeSize=0.2):
  
-    _name = prefix + 'CellVariables'
+    _name = sPrefix + 'CellVariables'
     
     if _name in cached_instances:
         return cached_instances[_name]
@@ -676,10 +707,11 @@ def getTrackToVertexTool():
 ########################################################################
 # Tau-Track Association
 def getTauTrackFinder(applyZ0cut=False, maxDeltaZ0=2, noSelector = False, prefix=''):
-    #if prefix is not given, take global one
-    if not prefix:
-        prefix=sPrefix
-    _name = sPrefix + 'TauTrackFinder'
+
+    #if prefix is not given, take global one 
+    if not prefix: 
+        prefix=sPrefix 
+    _name = prefix + 'TauTrackFinder'
     
     if _name in cached_instances:
         return cached_instances[_name] 
@@ -720,7 +752,144 @@ def getTauGenericPi0Cone():
     cached_instances[_name] = TauGenericPi0Cone
     return TauGenericPi0Cone
 
-#end
+########################################################################
+# TauTrackClassifier
+def getTauTrackClassifier():
+
+    _name = sPrefix + 'TauTrackClassifier'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+    
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import tauRecTools__TauTrackClassifier as TauTrackClassifier
+    from tauRecTools.tauRecToolsConf import tauRecTools__TrackMVABDT as TrackMVABDT
+
+    import PyUtils.RootUtils as ru
+    ROOT = ru.import_root()
+    import cppyy
+    cppyy.loadDictionary('xAODTau_cDict')
+
+    input_file_name = 'EFtracks_BDT_classifier_v0.root'
+    calibrationFolder = 'TrigTauRec/00-11-02/'
+    BDTcut = 0.45
+    deltaZ0 = 1.0
+
+    # =========================================================================
+    EFtrackBDT = TrackMVABDT(
+        name = _name + "_MVABDT",
+        InputWeightsPath = input_file_name,
+        Threshold        = BDTcut,
+        DeltaZ0          = deltaZ0,
+        ExpectedFlag     = ROOT.xAOD.TauJetParameters.unclassified, 
+        inTrigger        = True,
+        calibFolder      = calibrationFolder        
+    )
+
+    ToolSvc += EFtrackBDT
+
+    classifier = TauTrackClassifier(
+        name=_name, 
+        Classifiers=[EFtrackBDT]
+    )
+
+    cached_instances[_name] = classifier
+    return classifier
+
+########################################################################
+# TauIDVarCalculator
+def getTauIDVarCalculator():
+
+    _name = sPrefix + 'TauIDVarCalculator'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+    
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import TauIDVarCalculator            
+    TauIDVarCalculator = TauIDVarCalculator(name=_name)
+    
+    ToolSvc += TauIDVarCalculator                                 
+    cached_instances[_name] = TauIDVarCalculator
+    return TauIDVarCalculator
+
+########################################################################
+# TauJetRNNEvaluator
+def getTauJetRNNEvaluator(NetworkFile0P="", NetworkFile1P="", NetworkFile3P="", OutputVarname="RNNJetScore", 
+                          MaxTracks=10, MaxClusters=6, MaxClusterDR=1.0, 
+                          InputLayerScalar="scalar", InputLayerTracks="tracks", InputLayerClusters="clusters", 
+                          OutputLayer="rnnid_output", OutputNode="sig_prob"):
+
+    _name = sPrefix + 'TauJetRNNEvaluator'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import TauJetRNNEvaluator
+    TauJetRNNEvaluator = TauJetRNNEvaluator(name=_name,
+                                      NetworkFile0P=NetworkFile0P,
+                                      NetworkFile1P=NetworkFile1P,
+                                      NetworkFile3P=NetworkFile3P,
+                                      OutputVarname=OutputVarname,
+                                      MaxTracks=MaxTracks,
+                                      MaxClusters=MaxClusters,
+                                      MaxClusterDR=MaxClusterDR,
+                                      InputLayerScalar=InputLayerScalar,
+                                      InputLayerTracks=InputLayerTracks,
+                                      InputLayerClusters=InputLayerClusters,
+                                      OutputLayer=OutputLayer,
+                                      OutputNode=OutputNode)
+
+    ToolSvc += TauJetRNNEvaluator
+    cached_instances[_name] = TauJetRNNEvaluator
+    return TauJetRNNEvaluator
+
+########################################################################
+# TauWPDecoratorJetRNN
+def getTauWPDecoratorJetRNN():
+
+    _name = sPrefix + 'TauWPDecoratorJetRNN'
+
+    if _name in cached_instances:
+        return cached_instances[_name]
+
+    import PyUtils.RootUtils as ru
+    ROOT = ru.import_root()
+    import cppyy
+    cppyy.loadDictionary('xAODTau_cDict')
+
+    from AthenaCommon.AppMgr import ToolSvc
+    from tauRecTools.tauRecToolsConf import TauWPDecorator
+    TauWPDecorator = TauWPDecorator( name=_name,
+                                     flatteningFile0Prong = "rnnid_flat_0p_v4.root",
+                                     flatteningFile1Prong = "rnnid_flat_1p_v4.root",
+                                     flatteningFile3Prong = "rnnid_flat_mp_v4.root",
+                                     CutEnumVals =
+                                     [ ROOT.xAOD.TauJetParameters.JetRNNSigVeryLoose, ROOT.xAOD.TauJetParameters.JetRNNSigLoose,
+                                       ROOT.xAOD.TauJetParameters.JetRNNSigMedium, ROOT.xAOD.TauJetParameters.JetRNNSigTight ],
+                                     SigEff0P = [0.98, 0.90, 0.65, 0.50],
+                                     SigEff1P = [0.992, 0.99, 0.965, 0.94],
+                                     SigEff3P = [0.99, 0.98, 0.865, 0.80],
+                                     ScoreName = "RNNJetScore",
+                                     NewScoreName = "RNNJetScoreSigTrans",
+                                     DefineWPs = True,
+                                 )
+
+    ToolSvc += TauWPDecorator
+    cached_instances[_name] = TauWPDecorator
+    return TauWPDecorator
+
+# target efficiencies used for 2017 BDT:
+# SigEff1P = [0.995, 0.99, 0.97, 0.90],
+# SigEff3P = [0.995, 0.94, 0.88, 0.78],
+
+
+
+# end
+
+
+
 
 """ obsolete methods
 
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py
index b448439d97e4..0b6c7b4fa94a 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
 
 """ TrigTauRec """
@@ -56,7 +56,7 @@ class TrigTauRecMerged_Tau (TrigTauRecMerged) :
 	    
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 	    
 	    
@@ -91,17 +91,17 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) :
             import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
             tools = []
 
-            taualgs.setPrefix("TrigTau_")
+            taualgs.setPrefix("TrigTau2012_")
 
             #what should run in trigger???
             #same as tauRec (but without Pi0 cluster finder)
             tools.append(taualgs.getJetSeedBuilder())
             tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
             tools.append(taualgs.getTauAxis())
-            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTau2012_"))
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2))
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
 
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTau2012_"))  #cellConeSize 0.2!!
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))  #cellConeSize 0.2!!
 
             #tools.append(taualgs.getElectronVetoVars())  #needed?
             tools.append(taualgs.getTauVertexVariables())
@@ -111,7 +111,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) :
             
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -126,6 +126,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) :
 
 
 class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) :
+
         __slots__ = [ '_mytools']
         def __init__(self, name = "TrigTauRecMerged_TauPreselection"):
             super( TrigTauRecMerged_TauPreselection , self ).__init__( name )
@@ -158,15 +159,12 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) :
             tools.append(taualgs.getTauAxis())
             # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here
             # Insert bypass later?
-            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845)
-            if TriggerFlags.run2Config == '2016':
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPreselection_", noSelector=False))
-            else:
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPreselection_", noSelector=False))
+            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845)
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, noSelector=False))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPreselection_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Variables combining tracking and calorimeter information
             tools.append(taualgs.getTauCommonCalcVars())
@@ -178,7 +176,7 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) :
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -190,8 +188,8 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) :
             ## add beam type flag
             from AthenaCommon.BeamFlags import jobproperties
             self.BeamType = jobproperties.Beam.beamType()
-            
-            
+
+
 class TrigTauRecMerged_TauFTK (TrigTauRecMerged) :
         __slots__ = [ '_mytools']
         def __init__(self, name = "TrigTauRecMerged_TauFTK"):
@@ -226,11 +224,11 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMerged) :
             tools.append(taualgs.getTauAxis())
             # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here
             # Insert bypass later?
-            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauFTK_", noSelector = False))
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, noSelector = False))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauFTK_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Variables combining tracking and calorimeter information
             tools.append(taualgs.getTauCommonCalcVars())
@@ -242,7 +240,7 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMerged) :
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -287,11 +285,59 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMerged) :
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauCaloOnly_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
+                pass
+
+            self.Tools = tools
+
+            ## add beam type flag
+            from AthenaCommon.BeamFlags import jobproperties
+            self.BeamType = jobproperties.Beam.beamType()
+
+class TrigTauRecMerged_TauCaloOnlyMVA (TrigTauRecMerged) :
+        __slots__ = [ '_mytools']
+        def __init__(self, name = "TrigTauRecMerged_TauCaloOnlyMVA"):
+            super( TrigTauRecMerged_TauCaloOnlyMVA , self ).__init__( name )
+            self._mytools = []
+
+            # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+            from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring
+            validation = TrigTauRecValidationMonitoring()
+            online     = TrigTauRecOnlineMonitoring()
+
+            from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+            time = TrigTimeHistToolConfig("Time")
+            self.AthenaMonTools = [ time, validation, online ]
+
+            import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
+            tools = []
+
+            taualgs.setPrefix("TrigTauCaloOnlyMVA_")
+
+            # Collection name - not stored
+            self.OutputCollection = "TrigTauRecCaloOnly"
+
+            # Only include tools needed for calo pre-selection
+
+            # Set seedcalo energy scale (Full RoI)
+            tools.append(taualgs.getJetSeedBuilder())
+            # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)
+            tools.append(taualgs.getTauAxis())
+            # Calibrate to TES
+            tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True))
+            # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
+            # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
+            tools.append(taualgs.getMvaTESVariableDecorator())
+            tools.append(taualgs.getMvaTESEvaluator())
+
+            for tool in tools:
+                tool.inTrigger = True
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -332,15 +378,12 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) :
             tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
             # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)       
             tools.append(taualgs.getTauAxis())
-            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845)
-            if TriggerFlags.run2Config == '2016':
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPrecision_"))
-            else:
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPrecision_"))
+            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845)
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPrecision_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Lifetime variables
             tools.append(taualgs.getTauVertexVariables())
@@ -353,7 +396,7 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) :
             
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -361,5 +404,101 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) :
             ## add beam type flag
             from AthenaCommon.BeamFlags import jobproperties
             self.BeamType = jobproperties.Beam.beamType()
+
+
+
+class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
+        __slots__ = [ '_mytools']
+
+        def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doMVATES=False, doTrackBDT=False, doRNN=False):
+        
+            super( TrigTauRecMerged_TauPrecisionMVA , self ).__init__( name )
+
+            self._mytools = []
+
+            # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+            from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring 
+            validation = TrigTauRecValidationMonitoring()        
+            online     = TrigTauRecOnlineMonitoring()
+            
+            from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+            time = TrigTimeHistToolConfig("Time")
+            self.AthenaMonTools = [ time, validation, online ]
+
+            import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
+            tools = []
+
+            # using same prefix as in TauPrecision sequence should be safe if tools with different configurations have different names
+            # e.g. TauTrackFinder in 2016 using dz0=2mm instead of 1mm in 2017
+            taualgs.setPrefix("TrigTau_")
+
+            # Collection name
+            self.OutputCollection = "TrigTauRecMerged"
+
+            # Include full set of tools
+
+            # Set seedcalo energy scale (Full RoI)
+            tools.append(taualgs.getJetSeedBuilder())
+            # Associate RoI vertex or Beamspot to tau - don't use TJVA
+            tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
+            # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)       
+            tools.append(taualgs.getTauAxis())
+            
+            # for now, use 'doMVATES=False' to detect tracktwoEF, instead of introducing new flag
+            if not doMVATES:
+                # Count tracks with deltaZ0 cut of 1mm for tracktwoEF           
+                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1))
+            else:
+                # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used)
+                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_'))            
+
+            if doTrackBDT:                
+                # BDT track classification
+                tools.append(taualgs.getTauTrackClassifier())
+
+            # Calibrate to calo TES
+            tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
+
+            if doMVATES:
+                # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
+                tools.append(taualgs.getMvaTESVariableDecorator())
+                tools.append(taualgs.getMvaTESEvaluator())
+
+            # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
+            # tools.append(taualgs.getElectronVetoVars())
+            # Lifetime variables
+            tools.append(taualgs.getTauVertexVariables())
+            # Variables combining tracking and calorimeter information
+            tools.append(taualgs.getTauCommonCalcVars())
+            # Cluster-based sub-structure, with dRMax also
+            tools.append(taualgs.getTauSubstructure())
+            # tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=False, correctAxis=True, postfix='_onlyAxis'))
+            tools.append(taualgs.getPileUpCorrection())
+
+            if doRNN:
+                # RNN tau ID
+                tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="rnnid_config_0p_v3.json",
+                                                           NetworkFile1P="rnnid_config_1p_v3.json",
+                                                           NetworkFile3P="rnnid_config_mp_v3.json",
+                                                           MaxTracks=10, 
+                                                           MaxClusters=6,
+                                                           MaxClusterDR=1.0))
+                # flattened RNN score and WP
+                tools.append(taualgs.getTauWPDecoratorJetRNN())
+
+
+            for tool in tools:
+                tool.inTrigger = True
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
+                pass
+
+            self.Tools = tools
+
+            ## add beam type flag
+            from AthenaCommon.BeamFlags import jobproperties
+            self.BeamType = jobproperties.Beam.beamType()
+
+
             
 #end
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
index fa826a5d1821..ea725c603d1b 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
 
 """ TrigTauRec """
@@ -56,7 +56,7 @@ class TrigTauRecMerged_Tau (TrigTauRecMergedMT) :
 	    
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 	    
 	    
@@ -91,17 +91,17 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMergedMT) :
             import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
             tools = []
 
-            taualgs.setPrefix("TrigTau_")
+            taualgs.setPrefix("TrigTau2012_")
 
             #what should run in trigger???
             #same as tauRec (but without Pi0 cluster finder)
             tools.append(taualgs.getJetSeedBuilder())
             tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
             tools.append(taualgs.getTauAxis())
-            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTau2012_"))
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2))
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
 
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTau2012_"))  #cellConeSize 0.2!!
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))  #cellConeSize 0.2!!
 
             #tools.append(taualgs.getElectronVetoVars())  #needed?
             tools.append(taualgs.getTauVertexVariables())
@@ -111,7 +111,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMergedMT) :
             
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -158,15 +158,12 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) :
             tools.append(taualgs.getTauAxis())
             # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here
             # Insert bypass later?
-            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845)
-            if TriggerFlags.run2Config == '2016':
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPreselection_", noSelector=False))
-            else:
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPreselection_", noSelector=False))
+            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845)
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, noSelector=False))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPreselection_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Variables combining tracking and calorimeter information
             tools.append(taualgs.getTauCommonCalcVars())
@@ -178,7 +175,7 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) :
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -190,8 +187,8 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) :
             ## add beam type flag
             from AthenaCommon.BeamFlags import jobproperties
             self.BeamType = jobproperties.Beam.beamType()
-            
-            
+
+
 class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) :
         __slots__ = [ '_mytools']
         def __init__(self, name = "TrigTauRecMerged_TauFTK"):
@@ -226,11 +223,11 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) :
             tools.append(taualgs.getTauAxis())
             # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here
             # Insert bypass later?
-            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauFTK_", noSelector = False))
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, noSelector = False))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauFTK_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Variables combining tracking and calorimeter information
             tools.append(taualgs.getTauCommonCalcVars())
@@ -242,7 +239,7 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) :
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -262,12 +259,13 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMergedMT) :
             self._mytools = []
             
             # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
-            from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring 
-            validation = TrigTauRecValidationMonitoring()        
-            online     = TrigTauRecOnlineMonitoring()
-                
-            from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
-            time = TrigTimeHistToolConfig("Time")
+            # not used for now?
+            #from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring 
+            #validation = TrigTauRecValidationMonitoring()        
+            #online     = TrigTauRecOnlineMonitoring()
+            
+            #from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+            #time = TrigTimeHistToolConfig("Time")
             #self.AthenaMonTools = [ time, validation, online ]
 
             import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
@@ -287,11 +285,59 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMergedMT) :
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauCaloOnly_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
+
+            for tool in tools:
+                tool.inTrigger = True
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
+                pass
+
+            self.Tools = tools
+
+            ## add beam type flag
+            from AthenaCommon.BeamFlags import jobproperties
+            self.BeamType = jobproperties.Beam.beamType()
+
+class TrigTauRecMerged_TauCaloOnlyMVA (TrigTauRecMergedMT) :
+        __slots__ = [ '_mytools']
+        def __init__(self, name = "TrigTauRecMerged_TauCaloOnlyMVA"):
+            super( TrigTauRecMerged_TauCaloOnlyMVA , self ).__init__( name )
+            self._mytools = []
+
+            # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+            from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring
+            validation = TrigTauRecValidationMonitoring()
+            online     = TrigTauRecOnlineMonitoring()
+
+            from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+            time = TrigTimeHistToolConfig("Time")
+            self.AthenaMonTools = [ time, validation, online ]
+
+            import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
+            tools = []
+
+            taualgs.setPrefix("TrigTauCaloOnlyMVA_")
+
+            # Collection name - not stored
+            self.OutputCollection = "TrigTauRecCaloOnly"
+
+            # Only include tools needed for calo pre-selection
+
+            # Set seedcalo energy scale (Full RoI)
+            tools.append(taualgs.getJetSeedBuilder())
+            # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)
+            tools.append(taualgs.getTauAxis())
+            # Calibrate to TES
+            tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True))
+            # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
+            # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
+            tools.append(taualgs.getMvaTESVariableDecorator())
+            tools.append(taualgs.getMvaTESEvaluator())
 
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -332,15 +378,12 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) :
             tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
             # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)       
             tools.append(taualgs.getTauAxis())
-            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845)
-            if TriggerFlags.run2Config == '2016':
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPrecision_"))
-            else:
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPrecision_"))
+            # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845)
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1))
             # Calibrate to TES
             tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
-            tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPrecision_"))
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
             # tools.append(taualgs.getElectronVetoVars())
             # Lifetime variables
             tools.append(taualgs.getTauVertexVariables())
@@ -353,7 +396,7 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) :
             
             for tool in tools:
                 tool.inTrigger = True
-                tool.calibFolder = 'TrigTauRec/00-11-01/'
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
                 pass
 
             self.Tools = tools
@@ -361,5 +404,101 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) :
             ## add beam type flag
             from AthenaCommon.BeamFlags import jobproperties
             self.BeamType = jobproperties.Beam.beamType()
+
+
+
+class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMergedMT) :
+        __slots__ = [ '_mytools']
+
+        def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doMVATES=False, doTrackBDT=False, doRNN=False):
+        
+            super( TrigTauRecMerged_TauPrecisionMVA , self ).__init__( name )
+
+            self._mytools = []
+
+            # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+            from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring 
+            validation = TrigTauRecValidationMonitoring()        
+            online     = TrigTauRecOnlineMonitoring()
+            
+            from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+            time = TrigTimeHistToolConfig("Time")
+            self.AthenaMonTools = [ time, validation, online ]
+
+            import TrigTauRec.TrigTauAlgorithmsHolder as taualgs
+            tools = []
+
+            # using same prefix as in TauPrecision sequence should be safe if tools with different configurations have different names
+            # e.g. TauTrackFinder in 2016 using dz0=2mm instead of 1mm in 2017
+            taualgs.setPrefix("TrigTau_")
+
+            # Collection name
+            self.OutputCollection = "TrigTauRecMerged"
+
+            # Include full set of tools
+
+            # Set seedcalo energy scale (Full RoI)
+            tools.append(taualgs.getJetSeedBuilder())
+            # Associate RoI vertex or Beamspot to tau - don't use TJVA
+            tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default
+            # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger)       
+            tools.append(taualgs.getTauAxis())
+            
+            # for now, use 'doMVATES=False' to detect tracktwoEF, instead of introducing new flag
+            if not doMVATES:
+                # Count tracks with deltaZ0 cut of 1mm for tracktwoEF           
+                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1))
+            else:
+                # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used)
+                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_'))            
+
+            if doTrackBDT:                
+                # BDT track classification
+                tools.append(taualgs.getTauTrackClassifier())
+
+            # Calibrate to calo TES
+            tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy'))
+
+            if doMVATES:
+                # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
+                tools.append(taualgs.getMvaTESVariableDecorator())
+                tools.append(taualgs.getMvaTESEvaluator())
+
+            # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
+            tools.append(taualgs.getCellVariables(cellConeSize=0.2))
+            # tools.append(taualgs.getElectronVetoVars())
+            # Lifetime variables
+            tools.append(taualgs.getTauVertexVariables())
+            # Variables combining tracking and calorimeter information
+            tools.append(taualgs.getTauCommonCalcVars())
+            # Cluster-based sub-structure, with dRMax also
+            tools.append(taualgs.getTauSubstructure())
+            # tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=False, correctAxis=True, postfix='_onlyAxis'))
+            tools.append(taualgs.getPileUpCorrection())
+
+            if doRNN:
+                # RNN tau ID
+                tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="rnnid_config_0p_v3.json",
+                                                           NetworkFile1P="rnnid_config_1p_v3.json",
+                                                           NetworkFile3P="rnnid_config_mp_v3.json",
+                                                           MaxTracks=10, 
+                                                           MaxClusters=6,
+                                                           MaxClusterDR=1.0))
+                # flattened RNN score and WP
+                tools.append(taualgs.getTauWPDecoratorJetRNN())
+
+
+            for tool in tools:
+                tool.inTrigger = True
+                tool.calibFolder = 'TrigTauRec/00-11-02/'
+                pass
+
+            self.Tools = tools
+
+            ## add beam type flag
+            from AthenaCommon.BeamFlags import jobproperties
+            self.BeamType = jobproperties.Beam.beamType()
+
+
             
 #end
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
index e23ecb7b552e..051a99cd3568 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
@@ -7,8 +7,6 @@ errorcalolabels = 'NoROIDescr:NoCellCont:EmptyCellCont:NoClustCont:NoClustKey:Em
 
 errortracklabels = 'NoTrkCont:NoVtxCont'
 
-authorlabels = 'AutauRec:Autau13p:AuBoth:AutauRecOnly:Autau13pOnly'
-                    
 class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig):
     def __init__ (self, name="TrigTauRecOnlineMonitoring"):
         super(TrigTauRecOnlineMonitoring, self).__init__(name)
@@ -61,8 +59,8 @@ class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig):
         self.Histograms += [ defineHistogram('EF_innerTrkAvgDist', type='TH1F', title=" EF inner track average distance; innerTrkAvgDist; nRoIs", xbins=40, xmin=-0.05, xmax=0.5) ]
         self.Histograms += [ defineHistogram('EF_SumPtTrkFrac', type='TH1F', title=" EF Sum Pt Track Fraction; SumPtTrkFrac; nRoIs", xbins=40, xmin=-0.5, xmax=1.1) ]
  
-        self.Histograms += [ defineHistogram('EF_ActualInteractions', type='TH1F', title=" Number of actual interaction per bunch crossing;ActualInteractions;nevents", xbins=50, xmin=0.0, xmax=50.) ]
-        self.Histograms += [ defineHistogram('EF_AvgInteractions', type='TH1F', title=" Number of average interaction per bunch crossing;AvgInteractions;nevents", xbins=50, xmin=0.0, xmax=50.) ]
+        self.Histograms += [ defineHistogram('EF_ActualInteractions', type='TH1F', title=" Number of actual interaction per bunch crossing;ActualInteractions;nevents", xbins=80, xmin=0.0, xmax=80.) ]
+        self.Histograms += [ defineHistogram('EF_AvgInteractions', type='TH1F', title=" Number of average interaction per bunch crossing;AvgInteractions;nevents", xbins=80, xmin=0.0, xmax=80.) ]
 
         self.Histograms += [ defineHistogram('EF_beamspot_x', type='TH1F', title=" Beamspot position;Beamspot x;nevents", xbins=50, xmin=-10.0, xmax=10.) ]
         self.Histograms += [ defineHistogram('EF_beamspot_y', type='TH1F', title=" Beamspot position;Beamspot y;nevents", xbins=50, xmin=-10.0, xmax=10.) ]
@@ -71,11 +69,33 @@ class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig):
 
         self.Histograms += [ defineHistogram('EF_calo_errors', type='TH1F', title=" EF Calo Errors ;  ; nRoIs", xbins=10, xmin=-0.5, xmax=9.5 , labels=errorcalolabels) ]
         self.Histograms += [ defineHistogram('EF_track_errors', type='TH1F', title=" EF Track Errors ;  ; nRoIs", xbins=2, xmin=-0.5, xmax=2.5 , labels=errortracklabels) ]
-        self.Histograms += [ defineHistogram('EF_author', type='TH1F', title=" EF author ;  ; nRoIs", xbins=5, xmin=0.5, xmax=5.5 , labels=authorlabels) ]
-        self.Histograms += [ defineHistogram('EF_deltaZ0coreTrks', type='TH1F', title=" EF delta Z0 coreTrks wrt leadTrk ; #Delta Z0 [mm]; nRoIs x nTracks", xbins=160, xmin=-20, xmax=20) ]
-        self.Histograms += [ defineHistogram('EF_deltaZ0wideTrks', type='TH1F', title=" EF delta Z0 wideTrks wrt leadTrk ; #Delta Z0 [mm]; nRoIs x nTracks", xbins=160, xmin=-20, xmax=20) ]  
 
-        
+        # RNN ID
+        # scalar inputs
+        self.Histograms += [ defineHistogram('EF_RNN_scalar_ptRatioEflowApprox', type='TH1F', title=" EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_scalar_mEflowApprox', type='TH1F', title=" EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_scalar_pt_jetseed_log', type='TH1F', title=" EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.) ]
+        # cluster inputs
+        self.Histograms += [ defineHistogram('EF_RNN_Nclusters', type='TH1F', title=" EF RNN Nclusters; Number of clusters", xbins=10, xmin=0., xmax=10.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_cluster_et_log', type='TH1F', title=" EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_cluster_dEta', type='TH1F', title=" EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5) ]
+        self.Histograms += [ defineHistogram('EF_RNN_cluster_dPhi', type='TH1F', title=" EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5) ]
+        # track inputs
+        self.Histograms += [ defineHistogram('EF_RNN_Ntracks', type='TH1F', title=" EF RNN Ntracks; Number of tracks", xbins=12, xmin=0., xmax=12.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_pt_log', type='TH1F', title=" EF RNN track pt_log; Log10(track p_{T})", xbins=50, xmin=2.7, xmax=7.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_dEta', type='TH1F', title=" EF RNN track dEta; #Delta#eta(track tau)", xbins=50, xmin=-0.5, xmax=0.5) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_dPhi', type='TH1F', title=" EF RNN track dPhi; #Delta#phi(track xtau)", xbins=50, xmin=-0.5, xmax=0.5) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_d0_abs_log', type='TH1F', title=" EF RNN track d0_abs_log; Log10(Abs(track.d0()) + 1e-6)", xbins=50, xmin=-6.1, xmax=2.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_z0sinThetaTJVA_abs_log', type='TH1F', title=" EF RNN track z0sinThetaTJVA_abs_log; Log10(Abs(track.z0sinThetaTJVA(tau)) + 1e-6)", xbins=50, xmin=-6.1, xmax=4.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_nInnermostPixelHits', type='TH1F', title=" EF RNN track nInnermostPixelHits; nInnermostPixelHits", xbins=4, xmin=0., xmax=4.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_nPixelHits', type='TH1F', title=" EF RNN track nPixelHits; nPixelHits", xbins=11, xmin=0., xmax=11.) ]
+        self.Histograms += [ defineHistogram('EF_RNN_track_nSCTHits', type='TH1F', title=" EF RNN track nSCTHits; nSCTHits", xbins=20, xmin=0., xmax=20.) ]
+        # output
+        self.Histograms += [ defineHistogram('EF_RNNJetScore', type='TH1F', title=" EF RNNJetScore; RNNJetScore", xbins=50, xmin=0., xmax=1.) ]
+        self.Histograms += [ defineHistogram('EF_RNNJetScoreSigTrans', type='TH1F', title=" EF RNNJetScoreSigTrans; RNNJetScoreSigTrans", xbins=50, xmin=0., xmax=1.) ]
+
+
+
 ########## add validation specific histograms 
 class TrigTauRecValidationMonitoring(TrigTauRecOnlineMonitoring):
     def __init__ (self, name="TrigTauRecValidationMonitoring"):
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
index 3a1dc594e19d..0be526b23a84 100755
--- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
+++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /********************************************************************
@@ -44,12 +44,13 @@
 
 #include "LumiBlockComps/ILumiBlockMuTool.h"
 
-#include "TrigTauRec/TrigTauRecMerged.h"
+// needs migration to master of RNN tools in tauRecTools
+//#include "tauRecTools/TauJetRNN.h"
 
+#include "TrigTauRec/TrigTauRecMerged.h"
 
 using namespace std;
 
-
 // Invokes base class constructor.
 TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLocator):
 		  HLT::FexAlgo(name, pSvcLocator),
@@ -60,7 +61,8 @@ TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLoca
 		  m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
 		  m_maxeta( 2.5 ),
 		  m_minpt( 10000 ),
-		  m_trkcone( 0.2 )
+		  m_trkcone( 0.2 ) //,
+		  //m_rnn_evaluator(0)
 {
   
   // The following properties can be specified at run-time
@@ -193,14 +195,34 @@ TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLoca
   /** Errors */
   declareMonitoredStdContainer("EF_track_errors",m_track_errors);
   
-  /** Author */
-  declareMonitoredStdContainer("EF_author",m_author);
-  
-  /** deltaZ0 core Trks*/
-  declareMonitoredStdContainer("EF_deltaZ0coreTrks",m_deltaZ0coreTrks);
-  
-  /** deltaZ0 wide Trks*/
-  declareMonitoredStdContainer("EF_deltaZ0wideTrks",m_deltaZ0wideTrks);
+  // RNN inputs
+  // scalar
+  declareMonitoredVariable("EF_RNN_scalar_ptRatioEflowApprox", m_RNN_scalar_ptRatioEflowApprox);
+  declareMonitoredVariable("EF_RNN_scalar_mEflowApprox", m_RNN_scalar_mEflowApprox);
+  declareMonitoredVariable("EF_RNN_scalar_pt_jetseed_log", m_RNN_scalar_pt_jetseed_log);
+
+  // clusters
+  declareMonitoredVariable("EF_RNN_Nclusters", m_RNN_Nclusters);
+  declareMonitoredStdContainer("EF_RNN_cluster_et_log", m_RNN_cluster_et_log);
+  declareMonitoredStdContainer("EF_RNN_cluster_dEta", m_RNN_cluster_dEta);
+  declareMonitoredStdContainer("EF_RNN_cluster_dPhi", m_RNN_cluster_dPhi);
+  declareMonitoredStdContainer("EF_RNN_cluster_CENTER_LAMBDA", m_RNN_cluster_CENTER_LAMBDA);
+  declareMonitoredStdContainer("EF_RNN_cluster_SECOND_LAMBDA", m_RNN_cluster_SECOND_LAMBDA);
+  declareMonitoredStdContainer("EF_RNN_cluster_SECOND_R", m_RNN_cluster_SECOND_R);
+
+  // tracks
+  declareMonitoredVariable("EF_RNN_Ntracks", m_RNN_Ntracks);
+  declareMonitoredStdContainer("EF_RNN_track_pt_log", m_RNN_track_pt_log);
+  declareMonitoredStdContainer("EF_RNN_track_dEta", m_RNN_track_dEta);
+  declareMonitoredStdContainer("EF_RNN_track_dPhi", m_RNN_track_dPhi);
+  declareMonitoredStdContainer("EF_RNN_track_d0_abs_log", m_RNN_track_d0_abs_log);
+  declareMonitoredStdContainer("EF_RNN_track_z0sinThetaTJVA_abs_log", m_RNN_track_z0sinThetaTJVA_abs_log);
+  declareMonitoredStdContainer("EF_RNN_track_nInnermostPixelHits", m_RNN_track_nInnermostPixelHits);
+  declareMonitoredStdContainer("EF_RNN_track_nPixelHits", m_RNN_track_nPixelHits);
+  declareMonitoredStdContainer("EF_RNN_track_nSCTHits", m_RNN_track_nSCTHits);
+  // output
+  declareMonitoredVariable("EF_RNNJetScore", m_RNNJetScore);
+  declareMonitoredVariable("EF_RNNJetScoreSigTrans", m_RNNJetScoreSigTrans);
 
 }
 
@@ -210,7 +232,7 @@ TrigTauRecMerged::~TrigTauRecMerged()
 
 HLT::ErrorCode TrigTauRecMerged::hltInitialize()
 {
-	msg() << MSG::INFO << "TrigTauRecMerged::initialize()" << endmsg;
+	ATH_MSG_INFO( "TrigTauRecMerged::initialize()" );
 
 	m_tauEventData.setInTrigger(true);
 	////////////////////
@@ -218,7 +240,7 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize()
 	////////////////////
 	// check tool names
 	if ( m_tools.begin() == m_tools.end() ) {
-		msg() << MSG::ERROR << " no tools given for this algorithm." << endmsg;
+	        ATH_MSG_ERROR( "No tools given for this algorithm." );
 		return HLT::BAD_JOB_SETUP;
 	}
 
@@ -226,43 +248,52 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize()
 	//-------------------------------------------------------------------------
 	ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin();
 	ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end();
-	msg() << MSG::INFO << "List of tools in execution sequence:" << endmsg;
-	msg() << MSG::INFO << "------------------------------------" << endmsg;
+	ATH_MSG_INFO( "List of tools in execution sequence:" );
+	ATH_MSG_INFO( "------------------------------------" );
 
 	for(; p_itT != p_itTE; ++p_itT ) {
 		StatusCode p_sc = p_itT->retrieve();
 		if( p_sc.isFailure() ) {
-			msg() << MSG::WARNING << "Cannot find tool named <";
-			msg() << *p_itT << ">" << endmsg;
+		        ATH_MSG_WARNING( "Cannot find tool named <" << *p_itT << ">" );
 			return HLT::BAD_JOB_SETUP;
 		}
 		else {
-			msg() << MSG::INFO << "REGTEST ";
-			msg() <<" add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() << endmsg;
+		        ATH_MSG_INFO( "REGTEST " );
+			ATH_MSG_INFO( "Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() );
 			if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ;
 			(*p_itT)->setTauEventData(&m_tauEventData);
+
+			/*
+			// monitoring of RNN input variables
+			ToolHandle<ITauToolBase> handle = *p_itT;
+			TauJetRNNEvaluator* RNN_evaluator = dynamic_cast<TauJetRNNEvaluator*>(&(*handle));
+			if(RNN_evaluator) {
+			  ATH_MSG_INFO( "Retrieved TauJetRNNEvaluator for RNN inputs monitoring" );
+			  m_rnn_evaluator = RNN_evaluator;
+			}
+			*/
 		}
 	}
 
-	msg() << MSG::INFO << " " << endmsg;
-	msg() << MSG::INFO << "------------------------------------" << endmsg;
+	ATH_MSG_INFO( " " );
+	ATH_MSG_INFO( "------------------------------------" );
+
 
 	ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin();
 	ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end();
 
-	msg() << MSG::INFO << "List of end tools in execution sequence:" << endmsg;
-	msg() << MSG::INFO << "------------------------------------" << endmsg;
+	ATH_MSG_INFO( "List of end tools in execution sequence:" );
+	ATH_MSG_INFO( "------------------------------------" );
 
 	for(; p_itTe != p_itTEe; ++p_itTe ) {
 		StatusCode p_sc = p_itTe->retrieve();
 		if( p_sc.isFailure() ) {
-			msg() << MSG::WARNING << "Cannot find tool named <";
-			msg() << *p_itTe << ">" << endmsg;
+		        ATH_MSG_WARNING( "Cannot find tool named <" << *p_itTe << ">" );
 			return HLT::BAD_JOB_SETUP;
 		}
 		else {
-			msg() << MSG::INFO << "REGTEST ";
-			msg() <<" add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name() << endmsg;
+	  	        ATH_MSG_INFO( "REGTEST " );
+			ATH_MSG_INFO( "Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name() );
 			if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ;
 			( *p_itTe )->setTauEventData(&m_tauEventData);
 		}
@@ -277,20 +308,20 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize()
 	// }                                                                            
 
 	if (m_lumiBlockMuTool.retrieve().isFailure()) {                                     
-	  msg() << MSG::WARNING << "Unable to retrieve LumiBlockMuTool" << endmsg;     
+	  ATH_MSG_WARNING( "Unable to retrieve LumiBlockMuTool" );
 	} else {                                                                     
-	  msg() << MSG::DEBUG << "Successfully retrieved LumiBlockMuTool" << endmsg; 
+	  ATH_MSG_DEBUG( "Successfully retrieved LumiBlockMuTool" ); 
 	}                                                                            
 
 	// Retrieve beam conditions
 	if(m_beamSpotKey.initialize().isFailure()) {
-	  msg() << MSG::WARNING << "Unable to retrieve Beamspot key" << endmsg;
+	  ATH_MSG_WARNING( "Unable to retrieve Beamspot key" );
         } else {
-          msg() << MSG::DEBUG << "Successfully retrieved Beamspot key" << endmsg;
+          ATH_MSG_DEBUG( "Successfully retrieved Beamspot key" );
 	}
 	
-	msg() << MSG::INFO << " " << endmsg;
-	msg() << MSG::INFO << "------------------------------------" << endmsg;
+	ATH_MSG_INFO( " " );
+	ATH_MSG_INFO( "------------------------------------" );
 	
 	return HLT::OK;
 }
@@ -298,7 +329,6 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize()
 /////////////////////////////////////////////////////////////////
 HLT::ErrorCode TrigTauRecMerged::hltFinalize()
 {
-	//msg() << MSG::DEBUG << "Finalizing TrigTauRecMerged" << endmsg;
 	return HLT::OK;
 }
 
@@ -344,7 +374,6 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	m_innerTrkAvgDist=-999;
 	m_SumPtTrkFrac=-999;
 
-	m_author.clear();
 	m_calo_errors.clear();
 	m_track_errors.clear();
 	m_EtEm =-10.;
@@ -356,19 +385,30 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	m_EtaEF = -99;
 	m_PhiEF = -99;
 
+	// RNN variables monitoring
+	m_RNN_scalar_ptRatioEflowApprox = 0.; m_RNN_scalar_mEflowApprox = 0.; m_RNN_scalar_pt_jetseed_log = 0.;
+	m_RNN_Nclusters = -1;
+	m_RNN_cluster_et_log.clear(); m_RNN_cluster_dEta.clear(); m_RNN_cluster_dPhi.clear();
+	m_RNN_cluster_CENTER_LAMBDA.clear(); m_RNN_cluster_SECOND_LAMBDA.clear(); m_RNN_cluster_SECOND_R.clear();
+	m_RNN_Ntracks = -1;
+	m_RNN_track_pt_log.clear(); m_RNN_track_dEta.clear(); m_RNN_track_dPhi.clear();
+	m_RNN_track_d0_abs_log.clear(); m_RNN_track_z0sinThetaTJVA_abs_log.clear();
+	m_RNN_track_nInnermostPixelHits.clear(); m_RNN_track_nPixelHits.clear(); m_RNN_track_nSCTHits.clear();
+	m_RNNJetScore = -999; m_RNNJetScoreSigTrans = -999.;
+
 	// Retrieve store.
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Executing TrigTauRecMerged" << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Executing TrigTauRecMerged" );
 
 	// Get RoiDescriptor
 	const TrigRoiDescriptor* roiDescriptor = 0;
 	HLT::ErrorCode hltStatus = getFeature(inputTE, roiDescriptor);
 
-	if ( hltStatus==HLT::OK && roiDescriptor!= NULL ) {
+	if ( hltStatus==HLT::OK && roiDescriptor!= nullptr ) {
 		if( msgLvl() <= MSG::DEBUG )
-			msg() << MSG::DEBUG << "REGTEST: RoI " << *roiDescriptor<< endmsg;
+		    ATH_MSG_DEBUG( "REGTEST: RoI " << *roiDescriptor );
 	}
 	else {
-		msg() <<  MSG::ERROR << "Failed to find RoiDescriptor " << endmsg;
+	        ATH_MSG_ERROR( "Failed to find RoiDescriptor " );
 		m_calo_errors.push_back(NoROIDescr);
 		return hltStatus;
 	}
@@ -379,40 +419,30 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	hltStatus = getFeatures(inputTE, vectorCaloCellContainer);
 
 	if(hltStatus!=HLT::OK ) {
-		msg() << MSG::ERROR << " No CaloCellContainers retrieved for the trigger element" << endmsg;
+	        ATH_MSG_ERROR( " No CaloCellContainers retrieved for the trigger element" );
 		m_calo_errors.push_back(NoCellCont);
 		return hltStatus;
 	}
 
 	if (vectorCaloCellContainer.size() < 1) {
-		msg() << MSG::ERROR
-				<< "Size of vector CaloCell container is not 1. Is"
-				<< vectorCaloCellContainer.size()
-				<< endmsg;
+	        ATH_MSG_ERROR( "Size of vector CaloCell container is not 1. Is " << vectorCaloCellContainer.size() );
 		m_calo_errors.push_back(NoCellCont);
 		return HLT::ERROR;
 	}
 
 	const CaloCellContainer* RoICaloCellContainer = vectorCaloCellContainer.back();
 
-	if(RoICaloCellContainer != NULL) {
+	if(RoICaloCellContainer != nullptr) {
 		m_nCells = RoICaloCellContainer->size();
-
-		msg() << MSG::DEBUG
-				<< "REGTEST: Size of vector CaloCell container is "
-				<< RoICaloCellContainer->size()
-				<< endmsg;
+		ATH_MSG_DEBUG("REGTEST: Size of vector CaloCell container is " << RoICaloCellContainer->size() );
 		if(RoICaloCellContainer->size()==0) {
-			msg() << MSG::INFO
-					<< "Cannot proceed, size of vector CaloCell container is "
-					<< RoICaloCellContainer->size()
-					<< endmsg;
+		        ATH_MSG_INFO( "Cannot proceed, size of vector CaloCell container is " << RoICaloCellContainer->size() );
 			m_calo_errors.push_back(EmptyCellCont);
 			return HLT::OK;
 		}
 	}
 	else {
-		msg() << MSG::ERROR << "no CaloCell container found "<< endmsg;
+	        ATH_MSG_ERROR( "No CaloCell container found" );
 		m_calo_errors.push_back(NoCellCont);
 		return HLT::ERROR;
 	}
@@ -422,21 +452,19 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	hltStatus = getFeatures(inputTE, vectorCaloClusterContainer);
   
 	if(hltStatus!=HLT::OK ) {
-	  msg() << MSG::ERROR << " No CaloClusterContainers retrieved for the trigger element" << endmsg;
+	  ATH_MSG_ERROR( "No CaloClusterContainers retrieved for the trigger element" );
 	  m_calo_errors.push_back(NoClustCont);
 	  return hltStatus;
 	}
 
 	if (vectorCaloClusterContainer.size() < 1) {
-	  msg() << MSG::ERROR
-		<< "  CaloCluster container is empty"
-		<< endmsg;
+	  ATH_MSG_ERROR( "CaloCluster container is empty" );
 	  m_calo_errors.push_back(NoClustCont);
 	  return HLT::ERROR;
 	}
   
 	if( msgLvl() <= MSG::DEBUG )
-	  msg() << MSG::DEBUG << " CaloCluster container size is " << vectorCaloClusterContainer.size() << endmsg;
+	  ATH_MSG_DEBUG( "CaloCluster container size is " << vectorCaloClusterContainer.size() );
   
 	// Grab the last cluster collection attached
 	const xAOD::CaloClusterContainer* RoICaloClusterContainer = vectorCaloClusterContainer.back();
@@ -445,13 +473,13 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	hltStatus = getStoreGateKey( RoICaloClusterContainer, collKey );
 
 	if(hltStatus!=HLT::OK ) {
-		msg() << MSG::ERROR << "Cluster has no key " << endmsg;
+	        ATH_MSG_ERROR( "Cluster has no key" );
 		m_calo_errors.push_back(NoClustKey);
 		return HLT::ERROR;
 	}
 
 	if( msgLvl() <= MSG::DEBUG )
-		msg() << MSG::DEBUG << " cluster key for back cluster is " << collKey << endmsg;
+	  ATH_MSG_DEBUG( "Cluster key for back cluster is " << collKey );
 
 	
 	// Not necessary anymore
@@ -491,45 +519,45 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	vector<const xAOD::TrackParticleContainer*> vectorTrackContainer;
 	hltStatus = getFeatures(inputTE,vectorTrackContainer);
 
-	const xAOD::TrackParticleContainer*  RoITrackContainer=NULL;
+	const xAOD::TrackParticleContainer* RoITrackContainer = nullptr;
 
 	if (hltStatus!=HLT::OK) {
-		msg() << MSG::INFO << "REGTEST: No Track container found." << endmsg;
+	        ATH_MSG_INFO( "REGTEST: No Track container found." );
 		m_track_errors.push_back(NoTrkCont);
 	}
 	else {
 		if (vectorTrackContainer.size()<1) {
-			msg() << MSG::DEBUG << "Size of vector Track container is not 1. Is " << vectorTrackContainer.size() << endmsg;
+		        ATH_MSG_DEBUG( "Size of vector Track container is not 1. Is " << vectorTrackContainer.size() );
 			m_track_errors.push_back(NoTrkCont);
 		}
 
 		if(vectorTrackContainer.size()>0) {
 			RoITrackContainer = vectorTrackContainer.back();
 			if( msgLvl() <= MSG::DEBUG )
-				msg() << MSG::DEBUG << "REGTEST: Size of vector Track container is " << RoITrackContainer->size() << endmsg;
+			  ATH_MSG_DEBUG( "REGTEST: Size of vector Track container is " << RoITrackContainer->size() );
 		}
-		if(RoITrackContainer != NULL) m_nTracks = RoITrackContainer->size();
+		if(RoITrackContainer != nullptr) m_nTracks = RoITrackContainer->size();
 	}
 
 	// get Vertex Container
 	vector<const xAOD::VertexContainer*> vectorVxContainer;
 	hltStatus = getFeatures(inputTE,vectorVxContainer);
-	const xAOD::VertexContainer* RoIVxContainer = NULL;
+	const xAOD::VertexContainer* RoIVxContainer = nullptr;
 
 	if(hltStatus!=HLT::OK) {
-		msg() << MSG::INFO << "No VxContainers retrieved for the trigger element" << endmsg;
+	        ATH_MSG_INFO( "No VxContainers retrieved for the trigger element" );
 		m_track_errors.push_back(NoVtxCont);
 	}
 	else {
 		if (vectorVxContainer.size() < 1) {
-			msg() << MSG::DEBUG << "Size of vector Vertex  container is not 1. Is " << vectorVxContainer.size() << endmsg;
+		        ATH_MSG_DEBUG( "Size of vector Vertex  container is not 1. Is " << vectorVxContainer.size() );
 			m_track_errors.push_back(NoVtxCont);
 		}
 
 		if(vectorVxContainer.size() >0) {
 			RoIVxContainer = vectorVxContainer.back();
 			if( msgLvl() <= MSG::DEBUG )
-				msg() << MSG::DEBUG << "REGTEST: Size of vector Vertex  container " << RoIVxContainer->size() << endmsg;
+			  ATH_MSG_DEBUG( "REGTEST: Size of vector Vertex  container " << RoIVxContainer->size() );
 		}
 	}
 
@@ -553,8 +581,8 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	  avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing();
           m_ActualInteractions = mu;
           m_AvgInteractions = avg_mu;
-	  msg() << MSG::DEBUG << "REGTEST: Retrieved Mu Value : " << mu << endmsg;
-	  msg() << MSG::DEBUG << "REGTEST: Average Mu Value   : " << avg_mu << endmsg;
+	  ATH_MSG_DEBUG( "REGTEST: Retrieved Mu Value : " << mu );
+	  ATH_MSG_DEBUG( "REGTEST: Average Mu Value   : " << avg_mu );
 	}
 	
 
@@ -622,12 +650,12 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	xAOD::CaloClusterContainer::const_iterator clusterIt;
 	for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) {
 	  if( msgLvl() <= MSG::DEBUG )
-	    msg()<< MSG::DEBUG <<" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )" << endmsg;
+	    ATH_MSG_DEBUG( "Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )" );
     
 	  if((*clusterIt)->e() < 0)
 	    {
 	      if( msgLvl() <= MSG::DEBUG )
-		msg()<< MSG::DEBUG <<" Negative energy cluster is rejected" << endmsg;
+		ATH_MSG_DEBUG( "Negative energy cluster is rejected" );
 	      continue;
 	    }
     
@@ -639,17 +667,17 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	
 	aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); 
 
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG :: DEBUG << "jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Jet formed "<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() );
 	
 	hltStatus=attachFeature(outputTE, theJetCollection, "TrigTauJet");
 	
 	if (hltStatus!=HLT::OK ) {
-	  msg() << MSG::ERROR << "Unable to record JetCollection  in TDS" << endmsg;
+	  ATH_MSG_ERROR( "Unable to record JetCollection  in TDS" );
 	  m_calo_errors.push_back(NoJetAttach);
 	  return hltStatus;
 	}
 	else {
-	  if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << " JetCollection is recorded with key " << "HLT_" << "_" << "TrigTauJet" << endmsg;
+	  if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "JetCollection is recorded with key " << "HLT_" << "_" << "TrigTauJet" );
 	}
 
 
@@ -700,11 +728,11 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 		processStatus = (*firstTool)->eventInitialize();
 
 		if( processStatus != StatusCode :: SUCCESS ) {
-			msg() << MSG :: ERROR << "tool "<<(*firstTool)->name()<< "failed in eventInitialize" << endmsg;
+		        ATH_MSG_ERROR( "Tool "<<(*firstTool)->name()<< "failed in eventInitialize" );
 			return HLT :: TOOL_FAILURE;
 		}
 	}
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG ::DEBUG << " initialize all good " << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "initialize all good" );
 
 	//-------------------------------------------------------------------------
 	// using Jet collection
@@ -719,18 +747,17 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	m_tauEventData.seedContainer = theJetCollection;
 
 	// This sets one track and link. Need to have at least 1 track linked to retrieve track container
+	// can't we instead implement in the EDM a function to retrieve the track container of a tau?
 	setEmptyTauTrack(p_tau, pTrackContainer);
 
 	if(p_seed->e()<=0) {
-		msg() << MSG::DEBUG << " Roi: changing eta due to energy " << p_seed->e() << endmsg;
+                ATH_MSG_DEBUG( "Roi: changing eta due to energy " << p_seed->e() );
 		p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
 		
-		msg() << MSG::DEBUG << "Roi: " << roiDescriptor->roiId()
-        		  << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
-        		  << endmsg;
+		ATH_MSG_DEBUG( "Roi: " << roiDescriptor->roiId() << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() );
 	}
 
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG ::DEBUG <<" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() );
 
 	m_tauEventData.setObject("JetCollection", theJetCollection );
 
@@ -741,13 +768,13 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	firstTool = m_tools.begin();
 	lastTool  = m_tools.end();
 	processStatus    = StatusCode::SUCCESS;
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Starting tool loop with seed jet" << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Starting tool loop with seed jet" );
 	std::vector<TrigTimer* >::iterator itimer =  m_mytimers.begin();
 	while ( ! processStatus.isFailure() && firstTool != lastTool ) {
 	        // loop stops only when Failure indicated by one of the tools
 	        if( msgLvl() <= MSG::DEBUG ) {
-			msg() << MSG::DEBUG << "Starting Tool: " << endmsg;
-			msg() << MSG::DEBUG <<  (*firstTool)->name() << endmsg;
+		        ATH_MSG_DEBUG( "Starting Tool:");
+			ATH_MSG_DEBUG( (*firstTool)->name() );
 		}
 		// time in the various tools
 		++toolnum;
@@ -762,14 +789,14 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 		if ( !processStatus.isFailure() ) {
 			if( msgLvl() <= MSG::DEBUG ) {
-				msg() << MSG::DEBUG << "REGTEST: "<< (*firstTool)->name() << " executed successfully " << endmsg;
-				msg() << MSG::DEBUG << "REGTEST: Roi: " << roiDescriptor->roiId()
-            						<< " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
-            						<< " Tau pT : "<< p_tau->pt()<< endmsg;
+			  ATH_MSG_DEBUG( "REGTEST: "<< (*firstTool)->name() << " executed successfully ");
+			  ATH_MSG_DEBUG( "REGTEST: Roi: " << roiDescriptor->roiId()
+					 << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
+					 << " Tau pT : "<< p_tau->pt() );
 			}
 		}
 		else {
-			if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG <<"REGTEST: "<< (*firstTool)->name() << " execution failed " << endmsg;
+		  if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "REGTEST: "<< (*firstTool)->name() << " execution failed" );
 		}
 		++firstTool;
 		++itimer;
@@ -778,7 +805,7 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 	//check status
 	if ( !processStatus.isSuccess() )  {   // some problem
-		if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "the tau object has NOT been registered in the tau container" << endmsg;
+	        if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "The tau object has NOT been registered in the tau container" );
 		// ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin();
 		// for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData );
 		// (*tool)->cleanup( &m_tauEventData );
@@ -789,34 +816,33 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 		pContainer->pop_back();
 
-		if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "clean up done after jet seed" << endmsg;
+		if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Clean up done after jet seed" );
 	}
 	else if( processStatus.isSuccess()) {
 
 	  float fJetEnergy = (*p_tau->jetLink())->e();
-	  msg() << MSG::DEBUG << " Roi: jet e "<< fJetEnergy <<endmsg;
+	  ATH_MSG_DEBUG( "Roi: jet e "<< fJetEnergy );
 	  
 	  if( fJetEnergy < 0.00001 ) {
-	    msg() << MSG::DEBUG << " Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)"<<endmsg;
-	    msg() << MSG::DEBUG << " Roi: this is probably not needed anymore, method PxPyPzE has been corrected"<<endmsg;
+	    ATH_MSG_DEBUG( "Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)" );
+	    ATH_MSG_DEBUG( "Roi: this is probably not needed anymore, method PxPyPzE has been corrected" );
 	    
 	    //p_tau->setEta(roiDescriptor->eta0());
 	    //p_tau->setPhi(roiDescriptor->phi0());
 	    // Direct accessors not available anymore
 	    p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
 	    
-	    msg() << MSG::DEBUG << " Roi: " << roiDescriptor->roiId()
-		  << " Tau eta: " << p_tau->eta()
-		  << " Tau phi: " << p_tau->phi()
-		  << " Tau pT : "<< p_tau->pt()<< endmsg;
+	    ATH_MSG_DEBUG( " Roi: " << roiDescriptor->roiId()
+			   << " Tau eta: " << p_tau->eta()
+			   << " Tau phi: " << p_tau->phi()
+			   << " Tau pT : "<< p_tau->pt() );
 	  }
 	  
 	  // loop over end tools
 	  ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin();
 	  ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end();
 	  for (; p_itET != p_itETE; ++p_itET ) {
-	    msg() << MSG::VERBOSE << "Invoking endTool ";
-	    msg() << ( *p_itET )->name() << endmsg;
+	    ATH_MSG_VERBOSE( "Invoking endTool " << ( *p_itET )->name() );
 	    
 	    processStatus = ( *p_itET )->execute( *p_tau);
 	    if( processStatus.isFailure() ) break;
@@ -868,26 +894,53 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	  if(m_dPhi<-M_PI) m_dPhi += 2.0*M_PI;
 	  if(m_dPhi>M_PI)  m_dPhi -= 2.0*M_PI;
 	  
-	  // author variable removed. There are no different tau reco algs anymor
 	  
-	  // write out delta Z0
+	  // uncomment when RNN tools migrated to master
 	  /*
-	   * FF, March 2014: deactivated.
-	   * If the output of these variables is still needed, drop me a line.
-	   * We can either print them here as done before or put them into tauEDM to have them available globally
-	   if (m_useTauPVTool) {
-	   m_tauPVTool->getDeltaZ0Values(m_deltaZ0coreTrks, m_deltaZ0wideTrks);
-	   
-	   msg() << MSG::DEBUG << "REGTEST: deltaZ0 for core trk ";
-	   for ( unsigned int i=0; i<m_deltaZ0coreTrks.size(); ++i) msg() << MSG::DEBUG << i << ": " << m_deltaZ0coreTrks[i] << ", ";
-	   msg() << MSG::DEBUG << endmsg;
-	   
-	   msg() << MSG::DEBUG << "REGTEST: deltaZ0 for wide trk ";
-	   for ( unsigned int i=0; i<m_deltaZ0wideTrks.size(); ++i) msg() << MSG::DEBUG << i << ": " << m_deltaZ0wideTrks[i] << ", ";
-	   msg() << MSG::DEBUG << endmsg;
-	   }
-	  */
+	  // RNN monitoring
+	  if(m_rnn_evaluator) {
 
+	    TauJetRNN* rnn = 0;
+	    if(m_numTrack==0) rnn = m_rnn_evaluator->get_rnn_0p();
+	    else if(m_numTrack==1) rnn = m_rnn_evaluator->get_rnn_1p();
+	    else rnn = m_rnn_evaluator->get_rnn_3p();
+	    
+	    const std::map<std::string, std::map<std::string, double> >* rnn_scalar = rnn->getScalarInputs();
+	    const std::map<std::string, std::map<std::string, std::vector<double>> >* rnn_vector = rnn->getVectorInputs();
+
+	    m_RNN_scalar_ptRatioEflowApprox = rnn_scalar->at("scalar").at("ptRatioEflowApprox");
+	    m_RNN_scalar_mEflowApprox = rnn_scalar->at("scalar").at("mEflowApprox");
+	    // this is obviously a scalar, but is stored in tracks and clusters
+	    if(rnn_vector->at("tracks").at("pt_log").size()>0) m_RNN_scalar_pt_jetseed_log = rnn_vector->at("tracks").at("pt_jetseed_log")[0];
+	    else if(rnn_vector->at("clusters").at("et_log").size()>0) m_RNN_scalar_pt_jetseed_log = rnn_vector->at("clusters").at("pt_jetseed_log")[0];
+
+	    m_RNN_Nclusters = rnn_vector->at("clusters").at("et_log").size();
+	    m_RNN_cluster_et_log = rnn_vector->at("clusters").at("et_log");
+	    m_RNN_cluster_dEta = rnn_vector->at("clusters").at("dEta");
+	    m_RNN_cluster_dPhi = rnn_vector->at("clusters").at("dPhi");	    
+	    m_RNN_cluster_CENTER_LAMBDA = rnn_vector->at("clusters").at("CENTER_LAMBDA");
+	    m_RNN_cluster_SECOND_LAMBDA = rnn_vector->at("clusters").at("SECOND_LAMBDA"); 
+	    m_RNN_cluster_SECOND_R = rnn_vector->at("clusters").at("SECOND_R");
+
+	    m_RNN_Ntracks = rnn_vector->at("tracks").at("pt_log").size();
+	    m_RNN_track_pt_log = rnn_vector->at("tracks").at("pt_log");
+	    m_RNN_track_dEta = rnn_vector->at("tracks").at("dEta");
+	    m_RNN_track_dPhi = rnn_vector->at("tracks").at("dPhi");
+	    m_RNN_track_d0_abs_log = rnn_vector->at("tracks").at("d0_abs_log");
+	    m_RNN_track_z0sinThetaTJVA_abs_log = rnn_vector->at("tracks").at("z0sinThetaTJVA_abs_log");
+	    m_RNN_track_nInnermostPixelHits = rnn_vector->at("tracks").at("nIBLHitsAndExp");
+	    m_RNN_track_nPixelHits = rnn_vector->at("tracks").at("nPixelHitsPlusDeadSensors");
+	    m_RNN_track_nSCTHits = rnn_vector->at("tracks").at("nSCTHitsPlusDeadSensors");
+
+	    if( !p_tau->hasDiscriminant(xAOD::TauJetParameters::RNNJetScore) || !p_tau->isAvailable<float>("RNNJetScore") )
+	      ATH_MSG_WARNING( "RNNJetScore not available. Should not happen when TauJetRNNEvaluator is run!" );
+	    else m_RNNJetScore = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScore);
+	    if( !p_tau->hasDiscriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans) || !p_tau->isAvailable<float>("RNNJetScoreSigTrans") )
+	      ATH_MSG_WARNING( "RNNJetScoreSigTrans not available. Make sure TauWPDecorator is run!" );
+	    else m_RNNJetScoreSigTrans = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans);
+	  }
+	  */  
+	
 	  //
 	  // copy CaloOnly four vector, if present
 	  //
@@ -897,11 +950,11 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 	  if( tmpCaloOnlyStatus != HLT::OK){ 
 
-	    msg() << MSG::DEBUG << "Can't get container TrigTauRecCaloOnly to copy four-vector" << endmsg;
+	    ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector" );
 
 	  } else {
 
-	    msg() << MSG::DEBUG << "Got container TrigTauRecCaloOnly size :" << tempCaloOnlyContVec.size() << endmsg;
+	    ATH_MSG_DEBUG( "Got container TrigTauRecCaloOnly size :" << tempCaloOnlyContVec.size() );
 	     
 	    if ( tempCaloOnlyContVec.size() != 0 ) {
 
@@ -912,7 +965,7 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 	      for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyContVec.back()->begin(); tauIt != tempCaloOnlyContVec.back()->end(); tauIt++){ 
 
-	   	msg() << MSG::DEBUG << "pT(tau) = " << (*tauIt)->pt() << " pT(caloOnly) = " << (*tauIt)->ptTrigCaloOnly() << endmsg;
+	   	ATH_MSG_DEBUG( "pT(tau) = " << (*tauIt)->pt() << " pT(caloOnly) = " << (*tauIt)->ptTrigCaloOnly() );
 	  	
 	   	p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, (*tauIt)->ptTrigCaloOnly(), (*tauIt)->etaTrigCaloOnly(), (*tauIt)->phiTrigCaloOnly(), (*tauIt)->mTrigCaloOnly());
 
@@ -932,10 +985,10 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 
 
 
-	  msg() << MSG::DEBUG << "REGTEST: Roi: " << roiDescriptor->roiId()
-		<< " Tau being saved eta: " << m_EtaEF << " Tau phi: " << m_PhiEF
-		<< " wrt L1 dEta "<< m_dEta<<" dPhi "<<m_dPhi
-		<< " Tau Et (GeV): "<< m_EtFinal << endmsg;
+	  ATH_MSG_DEBUG( "REGTEST: Roi: " << roiDescriptor->roiId()
+			 << " Tau being saved eta: " << m_EtaEF << " Tau phi: " << m_PhiEF
+			 << " wrt L1 dEta "<< m_dEta<<" dPhi "<<m_dPhi
+			 << " Tau Et (GeV): "<< m_EtFinal );
 	  
 	  ++m_Ncand;
 	}
@@ -945,18 +998,18 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	  pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end());
 	  pContainer->pop_back();
 	  
-	  if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "deleted tau done after jet seed" << endmsg;
+	  if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Deleted tau done after jet seed" );
 	}
 	
 	// call eventFinalize on the booked tau tools
 	for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) {
 	  processStatus = (*firstTool)->eventFinalize();
 	  if( processStatus != StatusCode :: SUCCESS ) {
-	    msg() << MSG :: INFO << "tool "<<(*firstTool)->name()<< "failed in eventFinalize" << endmsg;
+	    ATH_MSG_INFO( "Tool "<<(*firstTool)->name()<< "failed in eventFinalize" );
 	    return HLT :: TOOL_FAILURE;
 	  }
 	}
-	msg() << MSG :: DEBUG << "tools succeed in eventFinalize" << endmsg;
+	ATH_MSG_DEBUG( "Tools succeed in eventFinalize" );
 	
 	
 	//-------------------------------------------------------------------------
@@ -966,15 +1019,61 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	hltStatus=attachFeature(outputTE, pContainer, m_outputName);
 	hltStatus=attachFeature(outputTE, pTrackContainer, m_outputName+"Tracks");
 	if (hltStatus!=HLT::OK )  {
-		msg() << MSG::ERROR << "Unable to record tau Container in TDS" << endmsg;
+	        ATH_MSG_ERROR( "Unable to record tau Container in TDS" );
 		m_calo_errors.push_back(NoHLTtauAttach);
 		return hltStatus;
 	}
 	else {
-		if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Recorded a tau container: " << "HLT_" << "TrigTauRecMerged" << endmsg;
+	  if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Recorded a tau container: " << "HLT_" << "TrigTauRecMerged" );
 	}
 
-	if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "the tau object has been registered in the tau container" << endmsg;
+	if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "The tau object has been registered in the tau container" );
+
+
+	// workaround to "fix" broken element links in data
+
+	// skip bad taus which have been discarded
+	if(pContainer->size()==0)
+	  return HLT::OK;
+
+	static SG::AuxElement::Accessor< xAOD::TauJet::JetLink_t > jetAcc( "jetLink" );
+	jetAcc( *p_tau ).toPersistent();
+
+	static SG::AuxElement::Accessor< xAOD::TauJet::VertexLink_t > vertexAcc( "vertexLink" );
+	vertexAcc( *p_tau ).toPersistent();
+
+	xAOD::TauJet::TauTrackLinks_t new_tauTrackLinks;
+	static SG::AuxElement::Accessor< xAOD::TauJet::TauTrackLinks_t > tauTrackAcc( "tauTrackLinks" );
+	static SG::AuxElement::Accessor< xAOD::TauTrack::TrackParticleLinks_t > trackAcc( "trackLinks" );
+
+	for( ElementLink< xAOD::TauTrackContainer > tautrack_link : tauTrackAcc( *p_tau ) ) {
+
+	  xAOD::TauTrack::TrackParticleLinks_t new_trackLinks;
+
+	  for( ElementLink< xAOD::TrackParticleContainer > track_link : trackAcc( *(*tautrack_link) ) ) {
+	    track_link.toPersistent();
+
+	    ElementLink< xAOD::TrackParticleContainer > newTrackLink;
+	    newTrackLink.toPersistent();
+	    newTrackLink.resetWithKeyAndIndex( track_link.persKey(), track_link.persIndex() );
+	    new_trackLinks.push_back(newTrackLink);	    
+	  }
+
+	  pTrackContainer->at(tautrack_link.index())->clearTrackLinks();
+	  pTrackContainer->at(tautrack_link.index())->setTrackLinks(new_trackLinks);
+
+	  tautrack_link.toPersistent();
+
+	  ElementLink< xAOD::TauTrackContainer > newTauTrackLink;
+	  newTauTrackLink.toPersistent();
+	  newTauTrackLink.resetWithKeyAndIndex( tautrack_link.persKey(), tautrack_link.persIndex() );
+	  new_tauTrackLinks.push_back(newTauTrackLink);
+	}
+
+	p_tau->clearTauTrackLinks();
+	p_tau->setAllTauTrackLinks(new_tauTrackLinks);
+
+	// no action needs to be taken for tau -> clusters links
 	
 	// set status of TE to always true for FE algorithms
 	return HLT::OK;
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx
index 8a1cdf2d38a1..03ff7d3cf5cb 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx
+++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /********************************************************************
@@ -10,13 +10,10 @@
  * AUTHOR:   E.Carquin
  * MODIFIED: Nov 23 2018
  *   
- *           Run a subset of the offline tauRec/tau1p3p routines in the EF 
+ *           Run a subset of the offline tauRec routines at the HLT
  *********************************************************************/
 
-//#include "GaudiKernel/IToolSvc.h"
-//#include "GaudiKernel/ListItem.h"
-//#include "GaudiKernel/StatusCode.h"
-//#include "GaudiKernel/Property.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 #include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
 #include "TrigSteeringEvent/TrigRoiDescriptor.h"
@@ -53,10 +50,10 @@ using namespace std;
 // Invokes base class constructor.
 TrigTauRecMergedMT::TrigTauRecMergedMT(const std::string& name,ISvcLocator* pSvcLocator)
   :AthAlgorithm(name, pSvcLocator),
-		  m_tools(this),
-		  m_endtools(this),
-		  m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
-		  m_beamSpotSvc("BeamCondSvc", name)
+   m_tools(this),
+   m_endtools(this),
+   m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
+   m_beamSpotSvc("BeamCondSvc", name)
 {
   declareProperty("Tools", m_tools, "List of ITauToolBase tools" );
   declareProperty("EndTools", m_endtools, "List of End ITauToolBase tools" );
@@ -69,574 +66,569 @@ TrigTauRecMergedMT::~TrigTauRecMergedMT()
 
 StatusCode TrigTauRecMergedMT::initialize()
 {
-   ATH_MSG_DEBUG("TrigTauRecMergedMT::initialize()");
-
-   m_tauEventData.setInTrigger(true);
-   if ( m_tools.begin() == m_tools.end() ) {
-      ATH_MSG_DEBUG(" no tools given for this algorithm.");
+  ATH_MSG_DEBUG("TrigTauRecMergedMT::initialize()");
+
+  m_tauEventData.setInTrigger(true);
+  if ( m_tools.begin() == m_tools.end() ) {
+    ATH_MSG_DEBUG(" no tools given for this algorithm.");
+    return StatusCode::FAILURE;
+  }
+
+  ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin();
+  ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end();
+  ATH_MSG_DEBUG("List of tools in execution sequence:");
+
+  for(; p_itT != p_itTE; ++p_itT ) {
+    StatusCode p_sc = p_itT->retrieve();
+    if( p_sc.isFailure() ) {
+      ATH_MSG_DEBUG("Cannot find tool named <" << *p_itT << ">");
       return StatusCode::FAILURE;
-   }
-
-   ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin();
-   ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end();
-   ATH_MSG_DEBUG("List of tools in execution sequence:");
-
-   for(; p_itT != p_itTE; ++p_itT ) {
-      StatusCode p_sc = p_itT->retrieve();
-      if( p_sc.isFailure() ) {
-         ATH_MSG_DEBUG("Cannot find tool named <" << *p_itT << ">");
-         return StatusCode::FAILURE;
-      }
-      else {
-         ATH_MSG_DEBUG("Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name());
-         //if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ;
-         (*p_itT)->setTauEventData(&m_tauEventData);
-      }
-   }
-
-   ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin();
-   ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end();
-
-   for(; p_itTe != p_itTEe; ++p_itTe ) {
-      StatusCode p_sc = p_itTe->retrieve();
-      if( p_sc.isFailure() ) {
-         ATH_MSG_DEBUG("Cannot find tool named <" << *p_itTe << ">");
-         return StatusCode::FAILURE;
-      }
-      else {
-         ATH_MSG_DEBUG(" Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name());
-         //if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ;
-         ( *p_itTe )->setTauEventData(&m_tauEventData);
-      }
-   }
-
-   if (m_lumiBlockMuTool.retrieve().isFailure()) {
-     ATH_MSG_WARNING("Unable to retrieve LumiBlockMuTool");
-   } else {
-     ATH_MSG_DEBUG("Successfully retrieved LumiBlockMuTool");
-   }
-
-   // Retrieve beam conditions
-   if(m_beamSpotSvc.retrieve().isFailure()) {
-     ATH_MSG_WARNING("Unable to retrieve Beamspot service");
-        } else {
-          ATH_MSG_WARNING("Successfully retrieved Beamspot service");
-   }
-
-   if ( not m_monTool.name().empty() ) {
-     ATH_CHECK( m_monTool.retrieve() );
-   }
-
-   ATH_MSG_DEBUG( "Initialising HandleKeys" );
-   CHECK( m_roIInputKey.initialize()        );
-   CHECK( m_L1RoIKey.initialize()           );
-   CHECK( m_clustersKey.initialize()        );
-   CHECK( m_tracksKey.initialize()          );
-   CHECK( m_vertexKey.initialize()          );
-   CHECK( m_trigTauJetKey.initialize()      );
-   CHECK( m_trigtauSeedOutKey.initialize()  );
-   CHECK( m_trigtauRecOutKey.initialize()   );
-   CHECK( m_trigtauTrkOutKey.initialize()   );
-
-   return StatusCode::SUCCESS;
+    }
+    else {
+      ATH_MSG_DEBUG("Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name());
+      //if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ;
+      (*p_itT)->setTauEventData(&m_tauEventData);
+    }
+  }
+
+  ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin();
+  ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end();
+
+  for(; p_itTe != p_itTEe; ++p_itTe ) {
+    StatusCode p_sc = p_itTe->retrieve();
+    if( p_sc.isFailure() ) {
+      ATH_MSG_DEBUG("Cannot find tool named <" << *p_itTe << ">");
+      return StatusCode::FAILURE;
+    }
+    else {
+      ATH_MSG_DEBUG(" Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name());
+      //if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ;
+      ( *p_itTe )->setTauEventData(&m_tauEventData);
+    }
+  }
+
+  if (m_lumiBlockMuTool.retrieve().isFailure()) {
+    ATH_MSG_WARNING("Unable to retrieve LumiBlockMuTool");
+  } 
+  else {
+    ATH_MSG_DEBUG("Successfully retrieved LumiBlockMuTool");
+  }
+
+  // Retrieve beam conditions
+  if(m_beamSpotSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING("Unable to retrieve Beamspot service");
+  } 
+  else {
+    ATH_MSG_WARNING("Successfully retrieved Beamspot service");
+  }
+
+  if ( not m_monTool.name().empty() ) {
+    ATH_CHECK( m_monTool.retrieve() );
+  }
+
+  ATH_MSG_DEBUG( "Initialising HandleKeys" );
+  CHECK( m_roIInputKey.initialize()        );
+  CHECK( m_L1RoIKey.initialize()           );
+  CHECK( m_clustersKey.initialize()        );
+  CHECK( m_tracksKey.initialize()          );
+  CHECK( m_vertexKey.initialize()          );
+  CHECK( m_trigTauJetKey.initialize()      );
+  CHECK( m_trigtauSeedOutKey.initialize()  );
+  CHECK( m_trigtauRecOutKey.initialize()   );
+  CHECK( m_trigtauTrkOutKey.initialize()   );
+
+  return StatusCode::SUCCESS;
 }
 
 StatusCode TrigTauRecMergedMT::finalize()
 {
-   return StatusCode::SUCCESS;
+  return StatusCode::SUCCESS;
 }
 
 StatusCode TrigTauRecMergedMT::execute()
 {
 
-   ATH_MSG_DEBUG("Execution");
-
-   auto ctx = getContext();
-
-   // variables to initialize and keep values for monitoring variables
-   std::vector<unsigned char> calo_errors(0);
-   std::vector<unsigned char> track_errors(0);
-   std::vector<unsigned char> author(0);
-   std::vector<float> deltaZ0coreTrks(0);
-   std::vector<float> deltaZ0wideTrks(0);
-
-   auto nCells             = Monitored::Scalar<int>("nRoI_EFTauCells",    0);
-   auto nTracks            = Monitored::Scalar<int>("nRoI_EFTauTracks", -10);
-   auto dEta               = Monitored::Scalar<float>("dEtaEFTau_RoI",    -10.);
-   auto dPhi               = Monitored::Scalar<float>("dPhiEFTau_RoI",    -10.);
-   auto emRadius           = Monitored::Scalar<float>("EF_EMRadius", -0.099);
-   auto hadRadius          = Monitored::Scalar<float>("EF_EMRadius", -0.099);
-   auto EtFinal            = Monitored::Scalar<float>("EF_EtFinal", 0.);
-   auto Et                 = Monitored::Scalar<float>("EF_Et", 0.);
-   auto EtHad              = Monitored::Scalar<float>("EF_EtHad",-10.);
-   auto EtEm               = Monitored::Scalar<float>("EF_EtEm",-10.);
-   auto EMFrac             = Monitored::Scalar<float>("EF_EMFrac",-10.);
-   auto IsoFrac            = Monitored::Scalar<float>("EF_IsoFrac",-1.);
-   auto centFrac           = Monitored::Scalar<float>("EF_centFrac",-10.);
-   auto nWideTrk           = Monitored::Scalar<int>("EF_nWideTrk",0);
-   auto ipSigLeadTrk       = Monitored::Scalar<float>("EF_ipSigLeadTrk",-1000.);
-   auto trFlightPathSig    = Monitored::Scalar<float>("EF_trFlightPathSig",-10.);
-   auto massTrkSys         = Monitored::Scalar<float>("EF_massTrkSys",-10.);
-   auto dRmax              = Monitored::Scalar<float>("EF_dRmax",-10.);
-   auto numTrack           = Monitored::Scalar<int>("EF_NTrk", -10);
-   auto trkAvgDist         = Monitored::Scalar<float>("EF_TrkAvgDist",-1.0);
-   auto etovPtLead         = Monitored::Scalar<float>("EF_EtovPtLead",-10.);
-   auto PSSFraction        = Monitored::Scalar<float>("EF_PSSFraction",-999.9);
-   auto EMPOverTrkSysP     = Monitored::Scalar<float>("EF_EMPOverTrkSysP",-999.9);
-   auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("EF_ChPiEMEOverCaloEME",-999.9);
-   auto SumPtTrkFrac       = Monitored::Scalar<float>("EF_SumPtTrkFrac",-999.9);
-   auto innerTrkAvgDist    = Monitored::Scalar<float>("EF_innerTrkAvgDist",-1.0);
-   auto Ncand              = Monitored::Scalar<int>("EF_nCand",0);
-   auto ActualInteractions = Monitored::Scalar<float>("EF_ActualInteractions",-999.9);
-   auto AvgInteractions    = Monitored::Scalar<float>("EF_AvgInteractions",-999.9);
-   auto beamspot_x         = Monitored::Scalar<float>("EF_beamspot_x",-999.9);
-   auto beamspot_y         = Monitored::Scalar<float>("EF_beamspot_y",-999.9);
-   auto beamspot_z         = Monitored::Scalar<float>("EF_beamspot_z",-999.9);
-   auto EtaL1                 = Monitored::Scalar<float>("EtaL1",-99.9);
-   auto PhiL1                 = Monitored::Scalar<float>("PhiL1",-99.9);
-   auto EtaEF                 = Monitored::Scalar<float>("EtaEF",-99.9);
-   auto PhiEF                 = Monitored::Scalar<float>("PhiEF",-99.9);
-
-   auto EF_calo_errors        = Monitored::Collection("calo_errors",calo_errors);
-   auto EF_track_errors       = Monitored::Collection("track_errors",track_errors);
-   auto EF_author             = Monitored::Collection("author",author);
-   auto EF_deltaZ0coreTrks    = Monitored::Collection("deltaZ0coreTrks",deltaZ0coreTrks);
-   auto EF_deltaZ0wideTrks    = Monitored::Collection("deltaZ0wideTrks",deltaZ0wideTrks);
-
-   auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius,
-   EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys,
-   dRmax, numTrack, trkAvgDist, etovPtLead, PSSFraction, EMPOverTrkSysP, ChPiEMEOverCaloEME, SumPtTrkFrac,
-   innerTrkAvgDist, Ncand, ActualInteractions, AvgInteractions, beamspot_x, beamspot_y, beamspot_z, EtaL1,
-   PhiL1, EtaEF, PhiEF );
-
-	// Retrieve store.
-	ATH_MSG_DEBUG("Executing TrigTauRecMergedMT");
-
-	// Get RoiDescriptor
-   SG::ReadHandle< TrigRoiDescriptorCollection > roisHandle = SG::makeHandle( m_roIInputKey, ctx );
-   if(roisHandle->size()==0){
-     ATH_MSG_DEBUG("RoIHandle size = Zero");
-     return StatusCode::SUCCESS;
-   }
-   const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
-
-	if ( roiDescriptor!= NULL ) {
-		ATH_MSG_DEBUG("REGTEST: RoI " << *roiDescriptor);
-	}
-	else {
-		ATH_MSG_DEBUG("Failed to find RoiDescriptor ");
-		calo_errors.push_back(NoROIDescr);
-		return StatusCode::SUCCESS;
-	}
-
-	// Retrieve Calocluster container
-   SG::ReadHandle< xAOD::CaloClusterContainer > CCContainerHandle = SG::makeHandle( m_clustersKey,ctx );
-   CHECK( CCContainerHandle.isValid() );
-
-   const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get();
-   ATH_MSG_DEBUG( "Found " << RoICaloClusterContainer->size() << " caloClusters, updating the corresponding RoI ... " );
-
-   if(RoICaloClusterContainer != NULL) {
-     ATH_MSG_DEBUG( "REGTEST: Size of vector CaloCluster container is " << RoICaloClusterContainer->size());
-     if(RoICaloClusterContainer->size()==0) {
-       ATH_MSG_DEBUG( "Cannot proceed, size of vector CaloCluster container is " << RoICaloClusterContainer->size());
-       return StatusCode::SUCCESS;
-     }
-   }else {
-     ATH_MSG_DEBUG( "no CaloCluster container found " );
-     return StatusCode::SUCCESS;
-   }
-
-	// get TrackContainer
-   SG::ReadHandle< xAOD::TrackParticleContainer > TPContainerHandle = SG::makeHandle( m_tracksKey,ctx );
-
-   const xAOD::TrackParticleContainer *RoITrackParticleContainer = NULL;
-
-	if ( !TPContainerHandle.isValid() ) {
-		ATH_MSG_INFO("REGTEST: No Track container found.");
-		track_errors.push_back(NoTrkCont);
-	}
-	else {
-      RoITrackParticleContainer=TPContainerHandle.get();
-		ATH_MSG_DEBUG("REGTEST: Size of vector Track container is " << RoITrackParticleContainer->size());
-		if(RoITrackParticleContainer != NULL) nTracks = RoITrackParticleContainer->size();
-	}
-
-	// get Vertex Container
-   SG::ReadHandle< xAOD::VertexContainer > VertexContainerHandle = SG::makeHandle( m_vertexKey,ctx );
-
-	const xAOD::VertexContainer* RoIVxContainer = NULL;
-
-	if( !VertexContainerHandle.isValid() ) {
-		ATH_MSG_INFO(" No VxContainers retrieved for the trigger element");
-		track_errors.push_back(NoVtxCont);
-	}
-	else {
-			RoIVxContainer = VertexContainerHandle.get();
-			ATH_MSG_DEBUG("REGTEST: Size of vector Vertex  container " << RoIVxContainer->size());
-	}
-
-	double mu = 0.0;
-   double avg_mu = 0.0;
-	if(m_lumiBlockMuTool){
-	  mu     = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID)
-	  avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing();
-     ActualInteractions = mu;
-     AvgInteractions    = avg_mu;
-	  ATH_MSG_DEBUG("REGTEST: Retrieved Mu Value : " << mu);
-	  ATH_MSG_DEBUG("REGTEST: Average Mu Value   : " << avg_mu);
-	}
+  ATH_MSG_DEBUG("Execution");
+
+  auto ctx = getContext();
+
+  // variables to initialize and keep values for monitoring variables
+  std::vector<unsigned char> calo_errors(0);
+  std::vector<unsigned char> track_errors(0);
+
+  auto nCells             = Monitored::Scalar<int>("nRoI_EFTauCells",    0);
+  auto nTracks            = Monitored::Scalar<int>("nRoI_EFTauTracks", -10);
+  auto dEta               = Monitored::Scalar<float>("dEtaEFTau_RoI",    -10.);
+  auto dPhi               = Monitored::Scalar<float>("dPhiEFTau_RoI",    -10.);
+  auto emRadius           = Monitored::Scalar<float>("EF_EMRadius", -0.099);
+  auto hadRadius          = Monitored::Scalar<float>("EF_EMRadius", -0.099);
+  auto EtFinal            = Monitored::Scalar<float>("EF_EtFinal", 0.);
+  auto Et                 = Monitored::Scalar<float>("EF_Et", 0.);
+  auto EtHad              = Monitored::Scalar<float>("EF_EtHad",-10.);
+  auto EtEm               = Monitored::Scalar<float>("EF_EtEm",-10.);
+  auto EMFrac             = Monitored::Scalar<float>("EF_EMFrac",-10.);
+  auto IsoFrac            = Monitored::Scalar<float>("EF_IsoFrac",-1.);
+  auto centFrac           = Monitored::Scalar<float>("EF_centFrac",-10.);
+  auto nWideTrk           = Monitored::Scalar<int>("EF_nWideTrk",0);
+  auto ipSigLeadTrk       = Monitored::Scalar<float>("EF_ipSigLeadTrk",-1000.);
+  auto trFlightPathSig    = Monitored::Scalar<float>("EF_trFlightPathSig",-10.);
+  auto massTrkSys         = Monitored::Scalar<float>("EF_massTrkSys",-10.);
+  auto dRmax              = Monitored::Scalar<float>("EF_dRmax",-10.);
+  auto numTrack           = Monitored::Scalar<int>("EF_NTrk", -10);
+  auto trkAvgDist         = Monitored::Scalar<float>("EF_TrkAvgDist",-1.0);
+  auto etovPtLead         = Monitored::Scalar<float>("EF_EtovPtLead",-10.);
+  auto PSSFraction        = Monitored::Scalar<float>("EF_PSSFraction",-999.9);
+  auto EMPOverTrkSysP     = Monitored::Scalar<float>("EF_EMPOverTrkSysP",-999.9);
+  auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("EF_ChPiEMEOverCaloEME",-999.9);
+  auto SumPtTrkFrac       = Monitored::Scalar<float>("EF_SumPtTrkFrac",-999.9);
+  auto innerTrkAvgDist    = Monitored::Scalar<float>("EF_innerTrkAvgDist",-1.0);
+  auto Ncand              = Monitored::Scalar<int>("EF_nCand",0);
+  auto ActualInteractions = Monitored::Scalar<float>("EF_ActualInteractions",-999.9);
+  auto AvgInteractions    = Monitored::Scalar<float>("EF_AvgInteractions",-999.9);
+  auto beamspot_x         = Monitored::Scalar<float>("EF_beamspot_x",-999.9);
+  auto beamspot_y         = Monitored::Scalar<float>("EF_beamspot_y",-999.9);
+  auto beamspot_z         = Monitored::Scalar<float>("EF_beamspot_z",-999.9);
+  auto EtaL1                 = Monitored::Scalar<float>("EtaL1",-99.9);
+  auto PhiL1                 = Monitored::Scalar<float>("PhiL1",-99.9);
+  auto EtaEF                 = Monitored::Scalar<float>("EtaEF",-99.9);
+  auto PhiEF                 = Monitored::Scalar<float>("PhiEF",-99.9);
+
+  auto EF_calo_errors        = Monitored::Collection("calo_errors",calo_errors);
+  auto EF_track_errors       = Monitored::Collection("track_errors",track_errors);
+
+  auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius,
+				     EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys,
+				     dRmax, numTrack, trkAvgDist, etovPtLead, PSSFraction, EMPOverTrkSysP, ChPiEMEOverCaloEME, SumPtTrkFrac,
+				     innerTrkAvgDist, Ncand, ActualInteractions, AvgInteractions, beamspot_x, beamspot_y, beamspot_z, EtaL1,
+				     PhiL1, EtaEF, PhiEF );
+
+  // Retrieve store.
+  ATH_MSG_DEBUG("Executing TrigTauRecMergedMT");
+
+  // Get RoiDescriptor
+  SG::ReadHandle< TrigRoiDescriptorCollection > roisHandle = SG::makeHandle( m_roIInputKey, ctx );
+  if(roisHandle->size() == 0){
+    ATH_MSG_DEBUG("RoIHandle size = Zero");
+    return StatusCode::SUCCESS;
+  }
+  const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
+
+  if ( roiDescriptor != nullptr ) {
+    ATH_MSG_DEBUG("REGTEST: RoI " << *roiDescriptor);
+  }
+  else {
+    ATH_MSG_DEBUG("Failed to find RoiDescriptor ");
+    calo_errors.push_back(NoROIDescr);
+    return StatusCode::SUCCESS;
+  }
+
+  // Retrieve Calocluster container
+  SG::ReadHandle< xAOD::CaloClusterContainer > CCContainerHandle = SG::makeHandle( m_clustersKey,ctx );
+  CHECK( CCContainerHandle.isValid() );
+
+  const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get();
+  ATH_MSG_DEBUG( "Found " << RoICaloClusterContainer->size() << " caloClusters, updating the corresponding RoI ... " );
+
+  if(RoICaloClusterContainer != nullptr) {
+    ATH_MSG_DEBUG( "REGTEST: Size of vector CaloCluster container is " << RoICaloClusterContainer->size());
+    if(RoICaloClusterContainer->size() == 0) {
+      ATH_MSG_DEBUG( "Cannot proceed, size of vector CaloCluster container is " << RoICaloClusterContainer->size());
+      return StatusCode::SUCCESS;
+    }
+  }
+  else {
+    ATH_MSG_DEBUG( "no CaloCluster container found " );
+    return StatusCode::SUCCESS;
+  }
+
+  // get TrackContainer
+  SG::ReadHandle< xAOD::TrackParticleContainer > TPContainerHandle = SG::makeHandle( m_tracksKey,ctx );
+
+  const xAOD::TrackParticleContainer *RoITrackParticleContainer = nullptr;
+
+  if ( !TPContainerHandle.isValid() ) {
+    ATH_MSG_INFO("REGTEST: No Track container found.");
+    track_errors.push_back(NoTrkCont);
+  }
+  else {
+    RoITrackParticleContainer = TPContainerHandle.get();
+    ATH_MSG_DEBUG("REGTEST: Size of vector Track container is " << RoITrackParticleContainer->size());
+    if(RoITrackParticleContainer != nullptr) nTracks = RoITrackParticleContainer->size();
+  }
+
+  // get Vertex Container
+  SG::ReadHandle< xAOD::VertexContainer > VertexContainerHandle = SG::makeHandle( m_vertexKey,ctx );
+
+  const xAOD::VertexContainer* RoIVxContainer = nullptr;
+
+  if( !VertexContainerHandle.isValid() ) {
+    ATH_MSG_INFO(" No VxContainers retrieved for the trigger element");
+    track_errors.push_back(NoVtxCont);
+  }
+  else {
+    RoIVxContainer = VertexContainerHandle.get();
+    ATH_MSG_DEBUG("REGTEST: Size of vector Vertex  container " << RoIVxContainer->size());
+  }
+
+  double mu = 0.0;
+  double avg_mu = 0.0;
+  if(m_lumiBlockMuTool){
+    mu     = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID)
+    avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing();
+    ActualInteractions = mu;
+    AvgInteractions    = avg_mu;
+    ATH_MSG_DEBUG("REGTEST: Retrieved Mu Value : " << mu);
+    ATH_MSG_DEBUG("REGTEST: Average Mu Value   : " << avg_mu);
+  }
 	
 
-	//-------------------------------------------------------------------------
-	// Get beamspot
-	//-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  // Get beamspot
+  //-------------------------------------------------------------------------
 
-	// Copy the first vertex from a const object
-	xAOD::Vertex theBeamspot;
-	theBeamspot.makePrivateStore();
-	const xAOD::Vertex* ptrBeamspot = 0;
+  // Copy the first vertex from a const object
+  xAOD::Vertex theBeamspot;
+  theBeamspot.makePrivateStore();
+  const xAOD::Vertex* ptrBeamspot = nullptr;
 
-	if(m_beamSpotSvc){
+  if(m_beamSpotSvc){
 	
-	  // Alter the position of the vertex
-	  theBeamspot.setPosition(m_beamSpotSvc->beamPos());
+    // Alter the position of the vertex
+    theBeamspot.setPosition(m_beamSpotSvc->beamPos());
 	
-	  beamspot_x=theBeamspot.x();
-	  beamspot_y=theBeamspot.y();
-	  beamspot_z=theBeamspot.z();
-
-	  // Create a AmgSymMatrix to alter the vertex covariance mat.
-	  AmgSymMatrix(3) cov = m_beamSpotSvc->beamVtx().covariancePosition();
-	  theBeamspot.setCovariancePosition(cov);
+    beamspot_x=theBeamspot.x();
+    beamspot_y=theBeamspot.y();
+    beamspot_z=theBeamspot.z();
 
-	  ptrBeamspot = &theBeamspot;
+    // Create a AmgSymMatrix to alter the vertex covariance mat.
+    AmgSymMatrix(3) cov = m_beamSpotSvc->beamVtx().covariancePosition();
+    theBeamspot.setCovariancePosition(cov);
 
-	}
+    ptrBeamspot = &theBeamspot;
+  }
 
 
-	//-------------------------------------------------------------------------
-	// Creating jet container used as "tau seed" for tau reconstruction
-	//-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  // Creating jet container used as "tau seed" for tau reconstruction
+  //-------------------------------------------------------------------------
 
-	// Ensure that we are using a TrigAuxContainer
-	xAOD::JetContainer* theJetCollection = new xAOD::JetContainer();
-	xAOD::JetTrigAuxContainer theJetContainer;
-	theJetCollection->setStore(&theJetContainer);
+  // Ensure that we are using a TrigAuxContainer
+  xAOD::JetContainer* theJetCollection = new xAOD::JetContainer();
+  xAOD::JetTrigAuxContainer theJetContainer;
+  theJetCollection->setStore(&theJetContainer);
 	
-	xAOD::Jet* aJet = new xAOD::Jet();
+  xAOD::Jet* aJet = new xAOD::Jet();
 
-	theJetCollection->push_back(aJet);
+  theJetCollection->push_back(aJet);
 	
-	// Build the jet, also keep track of the kinematics by hand
-	// We are using calibrated clusters, we need to keep track of this
-	aJet->setConstituentsSignalState(xAOD::JetConstitScale::CalibratedJetConstituent);
+  // Build the jet, also keep track of the kinematics by hand
+  // We are using calibrated clusters, we need to keep track of this
+  aJet->setConstituentsSignalState(xAOD::JetConstitScale::CalibratedJetConstituent);
 	
-	// Make a minimal effort to speed things up ;)
-	// Eventually, want to use FastJet here?
-	TLorentzVector myCluster;
-  	TLorentzVector TauBarycenter(0., 0., 0., 0.);
+  // Make a minimal effort to speed things up ;)
+  // Eventually, want to use FastJet here?
+  TLorentzVector myCluster;
+  TLorentzVector TauBarycenter(0., 0., 0., 0.);
   
-	xAOD::CaloClusterContainer::const_iterator clusterIt;
-	for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) {
-	  ATH_MSG_DEBUG(" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )");
+  xAOD::CaloClusterContainer::const_iterator clusterIt;
+  for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) {
+    ATH_MSG_DEBUG(" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )");
     
-	  if((*clusterIt)->e() < 0)
-	    {
-	      ATH_MSG_DEBUG(" Negative energy cluster is rejected");
-	      continue;
-	    }
+    if((*clusterIt)->e() < 0)
+      {
+	ATH_MSG_DEBUG(" Negative energy cluster is rejected");
+	continue;
+      }
     
-	  myCluster.SetPtEtaPhiE((*clusterIt)->pt(), (*clusterIt)->eta(), (*clusterIt)->phi(), (*clusterIt)->e());
-	  aJet->addConstituent(*clusterIt);
+    myCluster.SetPtEtaPhiE((*clusterIt)->pt(), (*clusterIt)->eta(), (*clusterIt)->phi(), (*clusterIt)->e());
+    aJet->addConstituent(*clusterIt);
 
-	  TauBarycenter += myCluster;
-	}
+    TauBarycenter += myCluster;
+  }
 	
-	aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); 
-
-	ATH_MSG_DEBUG("jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() );
-
-   // Prepare Outputs
-   std::unique_ptr< xAOD::JetContainer > tauSeedContainer( new xAOD::JetContainer() );
-
-   // Save Outputs
-   SG::WriteHandle< xAOD::JetContainer > outTauSeedHandle = SG::makeHandle( m_trigtauSeedOutKey,ctx );
-   CHECK( outTauSeedHandle.record( std::move( tauSeedContainer ) ) );
-
-	StatusCode processStatus    = StatusCode::SUCCESS;
-
-   // Save Outputs
-   SG::WriteHandle<xAOD::TauJetContainer> outTauJetHandle( m_trigtauRecOutKey );
-   SG::WriteHandle<xAOD::TauTrackContainer> outTauTrackHandle( m_trigtauTrkOutKey );
-
-	//-------------------------------------------------------------------------
-	// setup TauCandidate data
-	//-------------------------------------------------------------------------
-	m_tauEventData.clear();
-	xAOD::TauJetContainer *pContainer = new xAOD::TauJetContainer();
-	xAOD::TauJetAuxContainer *pAuxContainer = new xAOD::TauJetAuxContainer();
-
-	xAOD::TauTrackContainer *pTrackContainer = new xAOD::TauTrackContainer();
-	xAOD::TauTrackAuxContainer *pTrackAuxContainer = new xAOD::TauTrackAuxContainer();
-
-	pContainer->setStore(pAuxContainer);
-	pTrackContainer->setStore(pTrackAuxContainer);
-
-	m_tauEventData.setObject("TauTrackContainer", pTrackContainer);
-	m_tauEventData.xAODTauContainer = pContainer;
-	m_tauEventData.tauAuxContainer = pAuxContainer;
-
-	// Set the Objects that we can attach right now
-	m_tauEventData.setObject("TrackContainer", RoITrackParticleContainer);
-	m_tauEventData.setObject("VxPrimaryCandidate", RoIVxContainer);
-	if(m_lumiBlockMuTool) m_tauEventData.setObject("AvgInteractions", avg_mu);
-	if(m_beamSpotSvc) m_tauEventData.setObject("Beamspot", ptrBeamspot);
-	if(m_beamType == ("cosmics")) m_tauEventData.setObject("IsCosmics?", true );
-
-
-	//-------------------------------------------------------------------------
-	// eventInitialize tauRec colls
-	//-------------------------------------------------------------------------
-	ToolHandleArray<ITauToolBase> ::iterator firstTool = m_tools.begin();
-	ToolHandleArray<ITauToolBase> ::iterator lastTool  = m_tools.end();
-	for ( ; firstTool != lastTool; firstTool++ ) {
-		processStatus = (*firstTool)->eventInitialize();
-
-		if( processStatus != StatusCode :: SUCCESS ) {
-			ATH_MSG_ERROR("tool "<<(*firstTool)->name()<< "failed in eventInitialize");
-			return StatusCode::FAILURE;
-		}
-	}
-	ATH_MSG_DEBUG(" initialize all good ");
-
-	//-------------------------------------------------------------------------
-	// using Jet collection
-	// setup tau candidate structure
-	//-------------------------------------------------------------------------
-	xAOD::Jet* p_seed =    (*theJetCollection->begin());  //there is only one jet stored
-
-	xAOD::TauJet* p_tau = new xAOD::TauJet();
-	pContainer->push_back(p_tau);
-	p_tau->setROIWord(roiDescriptor->roiWord());
-	p_tau->setJet(theJetCollection, p_seed);
-	m_tauEventData.seedContainer = theJetCollection;
-
-	// This sets one track and link. Need to have at least 1 track linked to retrieve track container
-	setEmptyTauTrack(p_tau, pTrackContainer);
-
-	if(p_seed->e()<=0) {
-		msg() << MSG::DEBUG << " Roi: changing eta due to energy " << p_seed->e() << endmsg;
-		p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
+  aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); 
+
+  ATH_MSG_DEBUG("jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() );
+
+  // Prepare Outputs
+  std::unique_ptr< xAOD::JetContainer > tauSeedContainer( new xAOD::JetContainer() );
+
+  // Save Outputs
+  SG::WriteHandle< xAOD::JetContainer > outTauSeedHandle = SG::makeHandle( m_trigtauSeedOutKey,ctx );
+  CHECK( outTauSeedHandle.record( std::move( tauSeedContainer ) ) );
+
+  StatusCode processStatus    = StatusCode::SUCCESS;
+
+  // Save Outputs
+  SG::WriteHandle<xAOD::TauJetContainer> outTauJetHandle( m_trigtauRecOutKey );
+  SG::WriteHandle<xAOD::TauTrackContainer> outTauTrackHandle( m_trigtauTrkOutKey );
+
+  //-------------------------------------------------------------------------
+  // setup TauCandidate data
+  //-------------------------------------------------------------------------
+  m_tauEventData.clear();
+  xAOD::TauJetContainer *pContainer = new xAOD::TauJetContainer();
+  xAOD::TauJetAuxContainer *pAuxContainer = new xAOD::TauJetAuxContainer();
+
+  xAOD::TauTrackContainer *pTrackContainer = new xAOD::TauTrackContainer();
+  xAOD::TauTrackAuxContainer *pTrackAuxContainer = new xAOD::TauTrackAuxContainer();
+
+  pContainer->setStore(pAuxContainer);
+  pTrackContainer->setStore(pTrackAuxContainer);
+
+  m_tauEventData.setObject("TauTrackContainer", pTrackContainer);
+  m_tauEventData.xAODTauContainer = pContainer;
+  m_tauEventData.tauAuxContainer = pAuxContainer;
+
+  // Set the Objects that we can attach right now
+  m_tauEventData.setObject("TrackContainer", RoITrackParticleContainer);
+  m_tauEventData.setObject("VxPrimaryCandidate", RoIVxContainer);
+  if(m_lumiBlockMuTool) m_tauEventData.setObject("AvgInteractions", avg_mu);
+  if(m_beamSpotSvc) m_tauEventData.setObject("Beamspot", ptrBeamspot);
+  if(m_beamType == ("cosmics")) m_tauEventData.setObject("IsCosmics?", true );
+
+
+  //-------------------------------------------------------------------------
+  // eventInitialize tauRec colls
+  //-------------------------------------------------------------------------
+  ToolHandleArray<ITauToolBase> ::iterator firstTool = m_tools.begin();
+  ToolHandleArray<ITauToolBase> ::iterator lastTool  = m_tools.end();
+  for ( ; firstTool != lastTool; firstTool++ ) {
+    processStatus = (*firstTool)->eventInitialize();
+
+    if( processStatus != StatusCode :: SUCCESS ) {
+      ATH_MSG_ERROR("tool "<<(*firstTool)->name()<< "failed in eventInitialize");
+      return StatusCode::FAILURE;
+    }
+  }
+  ATH_MSG_DEBUG(" initialize all good ");
+
+  //-------------------------------------------------------------------------
+  // using Jet collection
+  // setup tau candidate structure
+  //-------------------------------------------------------------------------
+  xAOD::Jet* p_seed = (*theJetCollection->begin());  //there is only one jet stored
+
+  xAOD::TauJet* p_tau = new xAOD::TauJet();
+  pContainer->push_back(p_tau);
+  p_tau->setROIWord(roiDescriptor->roiWord());
+  p_tau->setJet(theJetCollection, p_seed);
+  m_tauEventData.seedContainer = theJetCollection;
+
+  // This sets one track and link. Need to have at least 1 track linked to retrieve track container
+  // Can't we instead implement in the EDM a function to retrieve the track container of a tau?
+  setEmptyTauTrack(p_tau, pTrackContainer);
+
+  if(p_seed->e()<=0) {
+    ATH_MSG_DEBUG( "Roi: changing eta due to energy " << p_seed->e() );
+    p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
 		
-		msg() << MSG::DEBUG << "Roi: " << roiDescriptor->roiId()
-        		  << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
-        		  << endmsg;
-	}
-
-	ATH_MSG_DEBUG(" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() );
-
-	m_tauEventData.setObject("JetCollection", theJetCollection );
-
-	//-------------------------------------------------------------------------
-	// loop over booked tau tools
-	//-------------------------------------------------------------------------
-	int toolnum = 0;
-	firstTool = m_tools.begin();
-	lastTool  = m_tools.end();
-	processStatus    = StatusCode::SUCCESS;
-	ATH_MSG_DEBUG("Starting tool loop with seed jet");
-	//std::vector<TrigTimer* >::iterator itimer =  m_mytimers.begin();
-	while ( ! processStatus.isFailure() && firstTool != lastTool ) {
-	   // loop stops only when Failure indicated by one of the tools
-	   ATH_MSG_DEBUG("Starting Tool: " <<  (*firstTool)->name() );
-		// time in the various tools
-		++toolnum;
-		//if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->start();
-
-		processStatus = (*firstTool)->execute( *p_tau );
-		if ( !processStatus.isFailure() ) {
-			ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " executed successfully ");
-	      ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId()
-            						<< " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
-            						<< " Tau pT : "<< p_tau->pt());
-		}
-		else {
-			ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " execution failed ");
-		}
-		++firstTool;
-		//++itimer;
-		//if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop();
-	}
-
-	//check status
-	if ( !processStatus.isSuccess() )  {   // some problem
-		ATH_MSG_DEBUG("the tau object has NOT been registered in the tau container");
-		// ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin();
-		// for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData );
-		// (*tool)->cleanup( &m_tauEventData );
-
-		xAOD::TauJet* bad_tau = pContainer->back();
-		ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << "Tracks associated with tau: ");
-		pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end());
-
-		pContainer->pop_back();
-
-		ATH_MSG_DEBUG("clean up done after jet seed");
-	}
-	else if( processStatus.isSuccess()) {
-
-	  float fJetEnergy = (*p_tau->jetLink())->e();
-	  ATH_MSG_DEBUG(" Roi: jet e "<< fJetEnergy);
+    ATH_MSG_DEBUG( "Roi: " << roiDescriptor->roiId() << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() );
+  }
+
+  ATH_MSG_DEBUG(" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() );
+
+  m_tauEventData.setObject("JetCollection", theJetCollection );
+
+  //-------------------------------------------------------------------------
+  // loop over booked tau tools
+  //-------------------------------------------------------------------------
+  int toolnum = 0;
+  firstTool = m_tools.begin();
+  lastTool  = m_tools.end();
+  processStatus    = StatusCode::SUCCESS;
+  ATH_MSG_DEBUG("Starting tool loop with seed jet");
+  //std::vector<TrigTimer* >::iterator itimer =  m_mytimers.begin();
+  while ( ! processStatus.isFailure() && firstTool != lastTool ) {
+    // loop stops only when Failure indicated by one of the tools
+    ATH_MSG_DEBUG("Starting Tool: " <<  (*firstTool)->name() );
+    // time in the various tools
+    ++toolnum;
+    //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->start();
+
+    processStatus = (*firstTool)->execute( *p_tau );
+    if ( !processStatus.isFailure() ) {
+      ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " executed successfully ");
+      ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId()
+		    << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi()
+		    << " Tau pT : "<< p_tau->pt());
+    }
+    else {
+      ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " execution failed ");
+    }
+    ++firstTool;
+    //++itimer;
+    //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop();
+  }
+
+  //check status
+  if ( !processStatus.isSuccess() )  {   // some problem
+    ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container");
+    // ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin();
+    // for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData );
+    // (*tool)->cleanup( &m_tauEventData );
+
+    xAOD::TauJet* bad_tau = pContainer->back();
+    ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau");
+    pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end());
+
+    pContainer->pop_back();
+
+    ATH_MSG_DEBUG("Clean up done after jet seed");
+  }
+  else {
+
+    float fJetEnergy = (*p_tau->jetLink())->e();
+    ATH_MSG_DEBUG("Roi: jet e "<< fJetEnergy);
 	  
-	  if( fJetEnergy < 0.00001 ) {
-	    ATH_MSG_DEBUG(" Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)");
-	    ATH_MSG_DEBUG(" Roi: this is probably not needed anymore, method PxPyPzE has been corrected");
+    if( fJetEnergy < 0.00001 ) {
+      ATH_MSG_DEBUG("Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)");
+      ATH_MSG_DEBUG("Roi: this is probably not needed anymore, method PxPyPzE has been corrected");
 	    
-	    //p_tau->setEta(roiDescriptor->eta0());
-	    //p_tau->setPhi(roiDescriptor->phi0());
-	    // Direct accessors not available anymore
-	    p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
+      p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
 	    
-	    ATH_MSG_DEBUG(" Roi: " << roiDescriptor->roiId()
-		  << " Tau eta: " << p_tau->eta()
-		  << " Tau phi: " << p_tau->phi()
-		  << " Tau pT : "<< p_tau->pt());
-	  }
+      ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId()
+		    << " Tau eta: " << p_tau->eta()
+		    << " Tau phi: " << p_tau->phi()
+		    << " Tau pT : "<< p_tau->pt());
+    }
 	  
-	  // loop over end tools
-	  ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin();
-	  ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end();
-	  for (; p_itET != p_itETE; ++p_itET ) {
-	    ATH_MSG_VERBOSE("Invoking endTool " << ( *p_itET )->name() );
+    // loop over end tools
+    ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin();
+    ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end();
+    for (; p_itET != p_itETE; ++p_itET ) {
+      ATH_MSG_VERBOSE("Invoking endTool " << ( *p_itET )->name() );
 	    
-	    processStatus = ( *p_itET )->execute( *p_tau);
-	    if( processStatus.isFailure() ) break;
-	  }
-	  // Get L1 RoiDescriptor
-     SG::ReadHandle< TrigRoiDescriptorCollection > L1roisHandle = SG::makeHandle( m_L1RoIKey, ctx );
-     const TrigRoiDescriptor *roiL1Descriptor = L1roisHandle->at(0);
-
-	  EtaL1         =  roiL1Descriptor->eta();
-	  PhiL1         =  roiL1Descriptor->phi();
-
-	  // get tau detail variables for Monitoring
-	  numTrack      = p_tau->nTracks();
-	  nWideTrk = p_tau->nTracksIsolation();
-	  p_tau->detail(xAOD::TauJetParameters::trkAvgDist, trkAvgDist);
-	  p_tau->detail(xAOD::TauJetParameters::etOverPtLeadTrk, etovPtLead);
-	  p_tau->detail(xAOD::TauJetParameters::EMRadius, emRadius);
-	  p_tau->detail(xAOD::TauJetParameters::hadRadius, hadRadius);
-	  p_tau->detail(xAOD::TauJetParameters::isolFrac, IsoFrac);
-	  p_tau->detail(xAOD::TauJetParameters::centFrac, centFrac);
-	  p_tau->detail(xAOD::TauJetParameters::ipSigLeadTrk, ipSigLeadTrk);
-	  p_tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig);
-	  p_tau->detail(xAOD::TauJetParameters::dRmax, dRmax);
-	  p_tau->detail(xAOD::TauJetParameters::massTrkSys, massTrkSys);
+      processStatus = ( *p_itET )->execute( *p_tau);
+      if( processStatus.isFailure() ) break;
+    }
+
+    // Get L1 RoiDescriptor
+    SG::ReadHandle< TrigRoiDescriptorCollection > L1roisHandle = SG::makeHandle( m_L1RoIKey, ctx );
+
+    if ( L1roisHandle.isValid() && (L1roisHandle->size() != 0) ) {
+      const TrigRoiDescriptor *roiL1Descriptor = L1roisHandle->at(0);      
+      EtaL1 = roiL1Descriptor->eta();
+      PhiL1 = roiL1Descriptor->phi();
+    }
+    else {
+      ATH_MSG_WARNING("Failed to retrieve L1 RoI descriptor!");
+    }
+
+    // get tau detail variables for Monitoring
+    numTrack      = p_tau->nTracks();
+    nWideTrk = p_tau->nTracksIsolation();
+    p_tau->detail(xAOD::TauJetParameters::trkAvgDist, trkAvgDist);
+    p_tau->detail(xAOD::TauJetParameters::etOverPtLeadTrk, etovPtLead);
+    p_tau->detail(xAOD::TauJetParameters::EMRadius, emRadius);
+    p_tau->detail(xAOD::TauJetParameters::hadRadius, hadRadius);
+    p_tau->detail(xAOD::TauJetParameters::isolFrac, IsoFrac);
+    p_tau->detail(xAOD::TauJetParameters::centFrac, centFrac);
+    p_tau->detail(xAOD::TauJetParameters::ipSigLeadTrk, ipSigLeadTrk);
+    p_tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig);
+    p_tau->detail(xAOD::TauJetParameters::dRmax, dRmax);
+    p_tau->detail(xAOD::TauJetParameters::massTrkSys, massTrkSys);
 	  
-	  p_tau->detail(xAOD::TauJetParameters::PSSFraction, PSSFraction);
-	  p_tau->detail(xAOD::TauJetParameters::EMPOverTrkSysP, EMPOverTrkSysP);
-	  p_tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME);
-	  p_tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist);	 
-     p_tau->detail(xAOD::TauJetParameters::SumPtTrkFrac, SumPtTrkFrac);
-
-	  massTrkSys /= 1000.; // make GeV
-	  p_tau->detail(xAOD::TauJetParameters::etEMAtEMScale, EtEm);
-	  EtEm /= 1000.;  // make GeV
-	  p_tau->detail(xAOD::TauJetParameters::etHadAtEMScale, EtHad);
-	  EtHad /= 1000.; // make GeV
-	  Et            = EtEm + EtHad;
-	  EtFinal       = p_tau->pt()/1000.;
-	  
-	  EtaEF = p_tau->eta();
-	  PhiEF = p_tau->phi();
+    p_tau->detail(xAOD::TauJetParameters::PSSFraction, PSSFraction);
+    p_tau->detail(xAOD::TauJetParameters::EMPOverTrkSysP, EMPOverTrkSysP);
+    p_tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME);
+    p_tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist);	 
+    p_tau->detail(xAOD::TauJetParameters::SumPtTrkFrac, SumPtTrkFrac);
+
+    massTrkSys /= Gaudi::Units::GeV;
+    p_tau->detail(xAOD::TauJetParameters::etEMAtEMScale, EtEm);
+    EtEm /= Gaudi::Units::GeV;
+    p_tau->detail(xAOD::TauJetParameters::etHadAtEMScale, EtHad);
+    EtHad /= Gaudi::Units::GeV;
+    Et            = EtEm + EtHad;
+    EtFinal       = p_tau->pt()/Gaudi::Units::GeV;
+    
+    EtaEF = p_tau->eta();
+    PhiEF = p_tau->phi();
 	  
-	  if( Et !=0) EMFrac =  EtEm/ Et ;
+    if( Et !=0) EMFrac =  EtEm/ Et ;
 	  
-	  dEta =  EtaEF - roiDescriptor->eta();
-	  dPhi =  PhiEF - roiDescriptor->phi();
-	  if(dPhi<-M_PI) dPhi += 2.0*M_PI;
-	  if(dPhi>M_PI)  dPhi -= 2.0*M_PI;
+    dEta =  EtaEF - roiDescriptor->eta();
+    dPhi =  PhiEF - roiDescriptor->phi();
+    if(dPhi<-M_PI) dPhi += 2.0*M_PI;
+    if(dPhi>M_PI)  dPhi -= 2.0*M_PI;
 
-	  std::vector<const xAOD::TauJetContainer*> tempCaloOnlyContVec;
+    std::vector<const xAOD::TauJetContainer*> tempCaloOnlyContVec;
 
-     // get TauJetContainer
-     SG::ReadHandle< xAOD::TauJetContainer > TJContainerHandle = SG::makeHandle( m_trigTauJetKey,ctx );
-     const xAOD::TauJetContainer *tempCaloOnlyCont=TJContainerHandle.get();
-     tempCaloOnlyContVec.push_back(tempCaloOnlyCont);
+    // get TauJetContainer
+    SG::ReadHandle< xAOD::TauJetContainer > TJContainerHandle = SG::makeHandle( m_trigTauJetKey,ctx );
+    const xAOD::TauJetContainer *tempCaloOnlyCont=TJContainerHandle.get();
+    tempCaloOnlyContVec.push_back(tempCaloOnlyCont);
 
-	  /*if( !tempCaloOnlyContVec.isValid()){
+    /*if( !tempCaloOnlyContVec.isValid()){
 
-	    ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector");
+      ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector");
 
-	  } else {*/
-	    if (tempCaloOnlyCont) {
+      } else {*/
+    if (tempCaloOnlyCont) {
 
-	      // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back();
-	      // for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyTauCont->begin(); tauIt != tempCaloOnlyTauCont->end(); tauIt++){ 
+      // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back();
+      // for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyTauCont->begin(); tauIt != tempCaloOnlyTauCont->end(); tauIt++){ 
 
-	      // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back();
+      // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back();
 
-	      for(auto tauIt: *tempCaloOnlyCont){
-           ATH_MSG_DEBUG("On the loop");
-	   	  ATH_MSG_DEBUG("pT(tau) = " << tauIt->pt() << " pT(caloOnly) = " << tauIt->ptTrigCaloOnly() );
+      for(auto tauIt: *tempCaloOnlyCont){
+	ATH_MSG_DEBUG("On the loop");
+	ATH_MSG_DEBUG("pT(tau) = " << tauIt->pt() << " pT(caloOnly) = " << tauIt->ptTrigCaloOnly() );
 	  	
-	   	  p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, tauIt->ptTrigCaloOnly(), tauIt->etaTrigCaloOnly(), tauIt->phiTrigCaloOnly(), tauIt->mTrigCaloOnly());
-
-	      }
+	p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, tauIt->ptTrigCaloOnly(), tauIt->etaTrigCaloOnly(), tauIt->phiTrigCaloOnly(), tauIt->mTrigCaloOnly());
+      }
 	      
-	    //}
+      //}
 	    
-	  }else{
-               ATH_MSG_WARNING( "TauJetContainer not found :");
-     }
-
-	  ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId()
-		<< " Tau being saved eta: " << EtaEF << " Tau phi: " << PhiEF
-		<< " wrt L1 dEta "<< dEta<<" dPhi "<<dPhi
-		<< " Tau Et (GeV): "<< EtFinal);
-	  
-	  ++Ncand;
-	}
-	else {
-	  xAOD::TauJet* bad_tau = pContainer->back();
-	  ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << "Tracks associated with tau: ");
-	  pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end());
-	  pContainer->pop_back();
+    }
+    else{
+      ATH_MSG_WARNING( "TauJetContainer not found :");
+    }
+    
+    ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId()
+		  << " Tau being saved eta: " << EtaEF << " Tau phi: " << PhiEF
+		  << " wrt L1 dEta "<< dEta<<" dPhi "<<dPhi
+		  << " Tau Et (GeV): "<< EtFinal);
 	  
-	  ATH_MSG_DEBUG("deleted tau done after jet seed");
-	}
+    ++Ncand;
+  }
+
 	
-	// call eventFinalize on the booked tau tools
-	for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) {
-	  processStatus = (*firstTool)->eventFinalize();
-	  if( processStatus != StatusCode :: SUCCESS ) {
-	    ATH_MSG_DEBUG("tool "<<(*firstTool)->name()<< "failed in eventFinalize");
-	    return StatusCode::FAILURE;
-	  }
-	}
-	ATH_MSG_DEBUG("tools succeed in eventFinalize");
+  // call eventFinalize on the booked tau tools
+  for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) {
+    processStatus = (*firstTool)->eventFinalize();
+    if( processStatus != StatusCode :: SUCCESS ) {
+      ATH_MSG_DEBUG("tool "<<(*firstTool)->name()<< "failed in eventFinalize");
+      return StatusCode::FAILURE;
+    }
+  }
+  ATH_MSG_DEBUG("Tools succeed in eventFinalize");
 	
 	
-	//-------------------------------------------------------------------------
-	// all done, register the tau Container in TDS.
-	//-------------------------------------------------------------------------
-
-   ATH_MSG_DEBUG("Output TauJetContainer size:"<< pContainer->size());
-   ATH_MSG_DEBUG("Output TauTrackJetContainer size:"<< pTrackContainer->size());
-
-   CHECK( outTauJetHandle.record(std::unique_ptr<xAOD::TauJetContainer>{pContainer}, std::unique_ptr<xAOD::TauJetAuxContainer>{pAuxContainer}) );
-   CHECK( outTauTrackHandle.record(std::unique_ptr<xAOD::TauTrackContainer>{pTrackContainer}, std::unique_ptr<xAOD::TauTrackAuxContainer>{pTrackAuxContainer}) );
-
-   ATH_MSG_DEBUG("Recorded a tau container: HLT_TrigTauRecMergedMT");
-	ATH_MSG_DEBUG("the tau object has been registered in the tau container");
-
-	// set status of TE to always true for FE algorithms
-	return StatusCode::SUCCESS;
+  //-------------------------------------------------------------------------
+  // all done, register the tau Container in TDS.
+  //-------------------------------------------------------------------------
+  
+  ATH_MSG_DEBUG("Output TauJetContainer size:"<< pContainer->size());
+  ATH_MSG_DEBUG("Output TauTrackJetContainer size:"<< pTrackContainer->size());
+  
+  CHECK( outTauJetHandle.record(std::unique_ptr<xAOD::TauJetContainer>{pContainer}, std::unique_ptr<xAOD::TauJetAuxContainer>{pAuxContainer}) );
+  CHECK( outTauTrackHandle.record(std::unique_ptr<xAOD::TauTrackContainer>{pTrackContainer}, std::unique_ptr<xAOD::TauTrackAuxContainer>{pTrackAuxContainer}) );
+  
+  ATH_MSG_DEBUG("Recorded a tau container: HLT_TrigTauRecMergedMT");
+  ATH_MSG_DEBUG("the tau object has been registered in the tau container");
+  
+  
+  // the validity of element links in data will need to be checked in R22! (see TrigTauRecMerged.cxx)
+  
+  
+  // set status of TE to always true for FE algorithms
+  return StatusCode::SUCCESS;
 }
 
 void TrigTauRecMergedMT::setEmptyTauTrack(xAOD::TauJet* &pTau,
-                                       xAOD::TauTrackContainer* &tauTrackContainer)
+					  xAOD::TauTrackContainer* &tauTrackContainer)
 {
   // Make a new tau track, add to container
   xAOD::TauTrack* pTrack = new xAOD::TauTrack();
diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py
index c4a37f2a27f2..ed6f36146ee7 100644
--- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
 """ Tau slice signatures """
 
@@ -10,23 +10,19 @@ from AthenaCommon.Logging import logging
 logging.getLogger().info("Importing %s",__name__)
 log = logging.getLogger(__name__)
 
-from InDetTrigParticleCreation.InDetTrigParticleCreationConf import InDet__TrigVertexxAODCnv 
-from InDetTrigRecExample.EFInDetConfig import TrigEFIDInsideOut_Tau
 from TrigCaloRec.TrigCaloRecConfig import TrigCaloCellMaker_tau, TrigCaloClusterMaker_topo
 from TrigFTK_RecAlgs.TrigFTK_RecAlgs_Config import TrigFTK_VxPrimary_EF
 from TrigInDetConf.TrigInDetFTKSequence import TrigInDetFTKSequence
 from TrigInDetConf.TrigInDetSequence import TrigInDetSequence
-from TrigT2CaloTau.TrigT2CaloTauConfig import T2CaloTau_Tau_Med
-from TrigT2IDTau.T2IDTauConfig import T2IDTau_Tau_1GeV_dZ02_dR0103
-from TrigT2Tau.T2TauFinalConfig import T2TauFinal_Tau_dR03_1GeV_dZ02
-from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter, TrigTauDiscriGetter2015
+from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter2015
 from TrigTauHypo.TrigTauHypoBase import HLTTrackTauHypo_rejectNoTracks
 from TrigTauHypo.TrigTauHypoConf import HLTTauCaloRoiUpdater, HLTTauTrackRoiUpdater
-from TrigTauRec.TrigTauRecConfig import (TrigTauRecMerged_Tau2012,
-                                         TrigTauRecMerged_TauCaloOnly,
+from TrigTauRec.TrigTauRecConfig import (TrigTauRecMerged_TauCaloOnly,
+                                         TrigTauRecMerged_TauCaloOnlyMVA,
                                          TrigTauRecMerged_TauFTK,
                                          TrigTauRecMerged_TauPrecision,
-                                         TrigTauRecMerged_TauPreselection)
+                                         TrigTauRecMerged_TauPreselection,
+                                         TrigTauRecMerged_TauPrecisionMVA)
 from TrigTauRec.TrigTauRecCosmicsConfig import TrigTauRecCosmics_Tau2012
 from TriggerMenu.menu.HltConfig import L2EFChainDef, mergeRemovingOverlap
 
@@ -88,12 +84,11 @@ class L2EFChain_tau(L2EFChainDef):
         selection    = self.chainPart['selection']
         preselection = self.chainPart['preselection']
 
-        if 'r1' in selection or 'r1' in preselection:
-            # Run-I set-up
-            self.setup_tauChainRunOne()
-        else:
-            # Run-II set-up
-            self.setup_tauChain()
+        # Run-I setup no longer supported
+        assert('r1' not in selection and 'r1' not in preselection), "Run-1 chains no longer supported! " + self.chainName
+
+        # Run-II setup
+        self.setup_tauChain()
        
         L2EFChainDef.__init__(self, self.chainName, self.L2Name, self.chainCounter, chainDict['L1item'], self.EFName, self.chainCounter, self.L2InputTE)
 
@@ -142,6 +137,16 @@ class L2EFChain_tau(L2EFChainDef):
         self.EFsequenceList += [[[ self.currentItem ],
                                  [caloRec],
                                  self.continueChain('L2', 'calorec')]]
+
+    #create the TrigTauRec Calorimeter only sequence    
+    def addTrigTauRecCaloOnlyMVASequence(self,threshold,selection,preselection):  # MVA TES (ATR-17687)
+
+        # Run TrigTauRec, calorimeter only (to get proper calibration, and cell-based vars)
+        caloRec = TrigTauRecMerged_TauCaloOnlyMVA()
+
+        self.EFsequenceList += [[[ self.currentItem ],
+                                 [caloRec],
+                                 self.continueChain('L2', 'calorec')]]
         
     #create the Calorimeter hypo (selection) sequence    
     def addCaloHypoSequence(self,threshold,selection,preselection):    
@@ -162,7 +167,7 @@ class L2EFChain_tau(L2EFChainDef):
         elif preselection == 'FTKRefit':
             [trkfast, trkprec[:]] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=["refit","PT"]).getSequence()
         elif preselection == 'FTKNoPrec':
-            [trkfast] = TrigInDetFTKSequence("Tau","tau","").getSequence()
+            [trkfast] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=[""]).getSequence()
             [trkprec[:]] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=["refit"]).getSequence()
         else:
             [trkfast, trkprec[:]] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence()
@@ -191,28 +196,17 @@ class L2EFChain_tau(L2EFChainDef):
         theTrigFTK_VxPrimary_EF = TrigFTK_VxPrimary_EF("TauFTKVertex", "Tau")
         theTrigFTK_VxPrimary_EF.useRawTracks = False
         theTrigFTK_VxPrimary_EF.useRefittedTracks = False
-
-        # to allow compatibility between release 20.11 and 21
-#        from TrigInDetConf.TrigInDetSequence import vertexXAODCnvNeeded 
-#        if vertexXAODCnvNeeded():
-#           theTrigFTK_VxPrimary_EF.vxContainerName = 'PrimVxFTK'
-#           theTrigFTK_VxPrimary_EF.getVertexContainer = False
-#           theInDet__TrigVertexxAODCnv = InDet__TrigVertexxAODCnv(name="FTKTauVtxConversion")
-#           theInDet__TrigVertexxAODCnv.InputVxContainerKey = 'PrimVxFTK'
-#           theInDet__TrigVertexxAODCnv.OutputVxContainerKey = 'PrimVertexFTK'
-#           vertexAlgorithms = [theTrigFTK_VxPrimary_EF, theInDet__TrigVertexxAODCnv]
-#           self.EFsequenceList += [[[ self.currentItem ],vertexAlgorithms,self.continueChain('L2', 'vertex')]]          
-#        else:
         theTrigFTK_VxPrimary_EF.vertexContainerName= 'PrimVertexFTK'
         theTrigFTK_VxPrimary_EF.getVertexContainer = True
         vertexAlgorithms = [theTrigFTK_VxPrimary_EF]
+
         self.EFsequenceList += [[[ self.currentItem ], vertexAlgorithms, self.continueChain('L2', 'vertex')]]
         
     #create the TrigTauRec preselection sequence       
     def addTrigTauRecTauPreselectionSequence(self,threshold,selection,preselection,idperf):              
         # Run TrigTauRec to store pre-selected taus
         recPreselection = TrigTauRecMerged_TauPreselection()
-
+            
         self.EFsequenceList += [[[ self.currentItem ],
                                  [recPreselection],
                                  self.continueChain('L2', 'storepre')]]
@@ -238,11 +232,10 @@ class L2EFChain_tau(L2EFChainDef):
         # Here we load our new tau-specific RoI Updater
         tauRoiUpdater = HLTTauTrackRoiUpdater()
         # This will add up to a tolerance of 5 mm due to the extra 3mm tolerance from the FTF
-        # tauRoiUpdater.z0HalfWidth = 2.0 # Temporarily widened to 10 mm
         tauRoiUpdater.z0HalfWidth = 7.0
 
         #ftracks = trkcore+[tauRoiUpdater]+trkiso
-        if not idperf:
+        if not idperf and preselection != 'tracktwoMVA':
             ftracks = trkcore + [tauRoiUpdater, tauRejectEmpty] + trkiso
         else :
             ftracks = trkcore+[tauRoiUpdater]+trkiso
@@ -291,8 +284,6 @@ class L2EFChain_tau(L2EFChainDef):
     def setup_tauChain(self):
 
         threshold   = self.chainPart['threshold']
-        calibration = self.chainPart['calib']
-        recoAlg     = self.chainPart['recoAlg'] 
         selection   = self.chainPart['selection']
         preselection= self.chainPart['preselection']
         idperf      = "idperf" in self.chainPart['trkInfo']
@@ -301,23 +292,37 @@ class L2EFChain_tau(L2EFChainDef):
         # Cleaner if-statements
         # Strategies which need calorimeter pre-selection
         needsCaloPre  = ['calo', 'ptonly', 'mvonly', 'caloonly',
-                         'track', 'trackonly', 'tracktwo',
+                         'track', 'trackonly', 'tracktwo', 'tracktwoEF',
                          'trackcalo', 'tracktwocalo','tracktwo2015']
+        needsCaloMVAPre = ['tracktwoEFmvaTES','tracktwoMVA']
         # Strategies which need fast-track finding
         needsTrackTwoPre = ['tracktwo', 'tracktwoonly', 'tracktwocalo','tracktwo2015']
+        needsTrackTwoNoPre = ['tracktwoEF','tracktwoEFmvaTES','tracktwoMVA']
         needsTrackPre    = ['track', 'trackonly', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec']
         # Strategies which need Run-II final hypo
-        needsRun2Hypo = ['calo', 'ptonly', 'mvonly', 'caloonly',
-                         'trackonly', 'track', 'tracktwo', 'tracktwocalo', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec', 'tracktwo2015']
-        fastTrackingUsed = needsTrackPre + needsTrackTwoPre
+        needsRun2Hypo = ['calo', 'ptonly', 'mvonly', 'caloonly', 'trackonly', 'track', 'tracktwo', 'tracktwoEF', 'tracktwoEFmvaTES', 'tracktwoMVA', 'tracktwocalo', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec', 'tracktwo2015']
+        fastTrackingUsed = needsTrackPre + needsTrackTwoPre + needsTrackTwoNoPre
+
+
+        # 2018 preselection
+        preselection2018 = needsCaloMVAPre + needsTrackTwoNoPre
+        # MVA TES for preselection and precision steps
+        MVATES = preselection in needsCaloMVAPre
+        # track counting based on EF tracks + BDT classification for core tracks
+        #TrackBDT = preselection in ['tracktwoMVA']
+        # can't afford to use track BDT unfortunately, rates too high (especially when including 0p)
+        TrackBDT = False
+        # evaluate RNN for triggers using RNN ID, and 2018 support triggers (even those using BDT ID, to avoid too many different precision sequences)
+        RNN = selection in ['verylooseRNN', 'looseRNN', 'mediumRNN', 'tightRNN'] or preselection in preselection2018
+        # chains using 2018 features
+        needsAlgo2018 = (preselection in preselection2018) or MVATES or TrackBDT or RNN 
+        # give unique name to precision sequence
+        use = {True:'', False:'no'}
+        MVAprefix = '{0}MVATES_{1}TrackBDT_{2}RNN'.format(use[MVATES], use[TrackBDT], use[RNN])
+
         
         #Set the default values
         [trkcore, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence()
-
-        # Temporary hack to handle naming scheme
-        if 'r1' in selection:
-            preselection = 'r1'
-            selection = selection.replace('r1', '')
     
         # Overrule the final EF selection
         if idperf:
@@ -337,15 +342,22 @@ class L2EFChain_tau(L2EFChainDef):
                 self.addCaloSequence(threshold, selection, preselection)
                 self.addTrigTauRecCaloOnlySequence(threshold,selection,preselection)
                 self.addCaloHypoSequence(threshold,selection,preselection)
+            elif preselection in needsCaloMVAPre:
+                self.addCaloSequence(threshold, selection, preselection)
+                self.addTrigTauRecCaloOnlyMVASequence(threshold,selection,preselection)
+                self.addCaloHypoSequence(threshold,selection,preselection)
             # Two step fast-tracking
             if preselection in needsTrackTwoPre:
                 self.addTwoStepTrackingSequence(threshold,selection,preselection,idperf, trkprec)
-                if preselection != 'tracktwo':
-                    self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf)
+                if preselection == 'tracktwo':
                     self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf)
+                    self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf)
                 else:
-                    self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf)
                     self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf)
+                    self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf)
+            # Two-step tracking but no tau reco, no selection
+            if preselection in needsTrackTwoNoPre:
+                self.addTwoStepTrackingSequence(threshold,selection,preselection,idperf, trkprec)
             # One step fast-tracking
             if preselection in needsTrackPre:
                 self.addTrackingSequence(threshold,selection,preselection,idperf,trkprec)
@@ -362,9 +374,12 @@ class L2EFChain_tau(L2EFChainDef):
 
             # Change track selection if we're running on cosmics...
             if selection == 'cosmic':
-                recmerged_2012    = TrigTauRecCosmics_Tau2012()
+                recmerged    = TrigTauRecCosmics_Tau2012()
             else:
-                recmerged_2012    = TrigTauRecMerged_TauPrecision()
+                if needsAlgo2018:
+                    recmerged    = TrigTauRecMerged_TauPrecisionMVA(name='TrigTauMVA_{}'.format(MVAprefix), doMVATES=MVATES, doTrackBDT=TrackBDT, doRNN=RNN)
+                else:
+                    recmerged    = TrigTauRecMerged_TauPrecision()
 
             efidinsideout = trkprec
 
@@ -379,180 +394,38 @@ class L2EFChain_tau(L2EFChainDef):
                                      self.continueChain('EF', 'tr')]]
 
             # TrigTauRec and Hypo (no BDT)
-            if selection == 'kaonpi1' or selection == 'kaonpi2' or selection == 'dipion1' or selection=='dipion1loose' or selection == 'dipion2' or selection == 'dikaon' or selection == 'dikaontight' or selection == 'dikaonmass' or selection == 'dikaonmasstight' or selection == 'singlepion' or selection == 'singlepiontight':
+            if selection == 'kaonpi1' or selection == 'kaonpi2' or selection == 'dipion1' or selection=='dipion1loose' or selection == 'dipion2' or selection == 'dipion3' or selection == 'dikaon' or selection == 'dikaontight' or selection == 'dikaonmass' or selection == 'dikaonmasstight' or selection == 'singlepion' or selection == 'singlepiontight':
                 self.EFsequenceList += [[[ self.currentItem ],
-                                         [recmerged_2012, theEFHypo],
+                                         [recmerged, theEFHypo],
                                          self.continueChain('EF', 'effinal')]]                
-            else:
-            # TrigTauRec, BDT and Hypo
-                efmv              = TrigTauDiscriGetter2015()
-                self.EFsequenceList += [[[ self.currentItem ],
-                                         [recmerged_2012, efmv, theEFHypo],
-                                         self.continueChain('EF', 'effinal')]]
-
-    def setup_tauChainRunOne(self):
-        
-        threshold   = self.chainPart['threshold']
-        calibration = self.chainPart['calib']
-        recoAlg     = self.chainPart['recoAlg']
-        selection   = self.chainPart['selection']
-        preselection= self.chainPart['preselection']
-        idperf      = "idperf" in self.chainPart['trkInfo']
-
-        # Handle Run-II naming scheme
-        if 'r1' in selection:
-            preselection = 'r1'
-            selection = selection.replace('r1', '')
-
-        # Overrule the final EF selection
-        if idperf:
-            selection = 'perf'    
-
-        if preselection == 'r1':
-            # Try new hypo extraction method
-            theL2CaloHypo   = self.hypoProvider.GetHypo('L2', threshold, selection, 'calo', 'r1')
-            theL2IDHypo     = self.hypoProvider.GetHypo('L2', threshold, selection, 'id', 'r1')
-            theL2FinalHypo  = self.hypoProvider.GetHypo('L2', threshold, selection, '', 'r1')
-            # Get the necessary fexes
-
-            from TrigL2SiTrackFinder.TrigL2SiTrackFinder_Config import (TrigL2SiTrackFinder_TauA,
-                                                                        TrigL2SiTrackFinder_TauB,
-                                                                        TrigL2SiTrackFinder_TauC)
-            t2calo_2012 = T2CaloTau_Tau_Med()
-            l2sitrkfinder_tauB = TrigL2SiTrackFinder_TauB()
-            t2id_2012 = T2IDTau_Tau_1GeV_dZ02_dR0103()
-            t2final_2012 = T2TauFinal_Tau_dR03_1GeV_dZ02()
-
-            if idperf:
-                l2sitrkfinder_tauA = TrigL2SiTrackFinder_TauA()
-                l2sitrkfinder_tauC = TrigL2SiTrackFinder_TauC()
-
-            # L2 configuration
-            self.L2sequenceList += [[[ self.currentItem ],
-                                     [t2calo_2012, theL2CaloHypo],
-                                     self.continueChain('L2', 'calo')]]
-
-            if idperf:
-                self.L2sequenceList += [[[ self.currentItem ],
-                                         [l2sitrkfinder_tauA, l2sitrkfinder_tauB, l2sitrkfinder_tauC, t2id_2012, theL2IDHypo],
-                                         self.continueChain('L2', 'id')]]
-            else:
-                self.L2sequenceList += [[[ self.currentItem ],
-                                         [l2sitrkfinder_tauB, t2id_2012, theL2IDHypo],
-                                         self.continueChain('L2', 'id')]]
-
-            self.L2sequenceList += [[[ self.currentItem ],
-                                     [t2final_2012, theL2FinalHypo],
-                                     self.continueChain('L2', 'l2final')]]
-
-        if preselection == 'r1':
-
-            theEFHypo       = self.hypoProvider.GetHypo('EF', threshold, selection, '', 'r1')
-
-            # Get the necessary fexes
-
-            cellmaker         = TrigCaloCellMaker_tau()
-            clustermaker_topo = TrigCaloClusterMaker_topo()
-            efidinsideout     = TrigEFIDInsideOut_Tau().getSequence()
-            recmerged_2012    = TrigTauRecMerged_Tau2012()
-            efmv              = TrigTauDiscriGetter()
-
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     [cellmaker, clustermaker_topo],
-                                     self.continueChain('EF', 'clf0')]]
-
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     efidinsideout,
-                                     self.continueChain('EF', 'tr')]]
-
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     [recmerged_2012, efmv, theEFHypo],
-                                     self.continueChain('EF', 'effinal')]]
-            
-
-    # Prototype for TwoStep configuration
-    def setup_tauChainTwoStep(self):
-
-        threshold   = self.chainPart['threshold']
-        calibration = self.chainPart['calib']
-        recoAlg     = self.chainPart['recoAlg'] 
-        selection   = self.chainPart['selection']
-        preselection= self.chainPart['preselection']
-        idperf      = "idperf" in self.chainPart['trkInfo']
-        
-        # Overrule the final EF selection
-        if idperf:
-            selection = 'perf'
-
-        if preselection == 'calo' or preselection == 'ptonly' or preselection == 'mvonly' or preselection == 'caloonly' or preselection == 'track' or preselection == 'trackonly':
-            # Test 2015 approach
-            log.info("Calo-based pre-selection configuration is not quite ready yet!")
-            log.info("Very preliminary version!!")
-
 
-            cellmaker         = TrigCaloCellMaker_tau()
-            clustermaker_topo = TrigCaloClusterMaker_topo()
-
-            # Run topoclustering
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     [cellmaker, clustermaker_topo],
-                                     self.continueChain('EF', 'clf0')]]
+            elif needsAlgo2018:
                 
+                # don't evaluate BDT for RNN chains
+                EFsequence = []
+                if selection not in ['verylooseRNN', 'looseRNN', 'mediumRNN', 'tightRNN']:
+                    EFsequence.append( TrigTauDiscriGetter2015() )
 
-        if preselection == 'track' or preselection == 'trackonly' or (preselection != 'r1' and idperf):
-    
-            # Get the necessary fexes
-            [trkfast, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence()
-            
-            # Run fast-tracking
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     trkfast,
-                                     self.continueChain('EF', 'trfast')]]
-            
-        # Here we're running the TrigTauRec based on all the stuff that ran before.  Uh-oh, this is dangerous...
-        # For now, assume fast-tracking is always run
-        
-        recPreselection = TrigTauRecMerged_TauPreselection()
-
-        self.EFsequenceList += [[[ self.currentItem ],
-                                 recPreselection,
-                                 self.continueChain('EF', 'prefinal')]]
-
-
-        # Insert generic hypothesis
-        
-        
-        
-        if preselection == 'calo' or preselection == 'ptonly' or preselection == 'mvonly' or preselection == 'caloonly' or preselection == 'trackonly' or preselection == 'track':
-            # Only run tracking and tau-rec : no need for topoclustering
-            if preselection == 'caloonly' or preselection == 'trackonly' or selection == 'cosmic':
-                theEFHypo       = self.hypoProvider.GetHypo('EF', threshold, 'perf', '', 'r1')
-            else: 
-                theEFHypo       = self.hypoProvider.GetHypo('EF', threshold, selection, '', 'r1')
-
-            # Get the necessary fexes
-            [trkfast, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence()
+                EFsequence.append( theEFHypo )
 
+                self.EFsequenceList += [[[ self.currentItem ],
+                                         [recmerged],
+                                         self.continueChain('EF', 'taurecef')]]
 
-            # Change track selection if we're running on cosmics...
-            if selection == 'cosmic':
-                recmerged_2012    = TrigTauRecCosmics_Tau2012()
-            else:
-                recmerged_2012    = TrigTauRecMerged_TauPrecision()
+                if not idperf:
+                    theHLTTrackPre   = self.hypoProvider.GetHypo('L2', threshold, selection, 'id', preselection)
+                    self.EFsequenceList += [[[ self.currentItem ],
+                                         [theHLTTrackPre],
+                                         self.continueChain('EF', 'trackpre')]]
 
-            # Only run the fast-tracking if it wasn't run at pre-selection
-            if preselection != 'track' and preselection != 'trackonly' and not idperf:
-                efidinsideout     = trkfast+trkprec
+                self.EFsequenceList += [[[ self.currentItem ],
+                                         EFsequence,
+                                         self.continueChain('EF', 'effinal')]]
+     
             else:
-                efidinsideout     = trkprec
-            
-            efmv              = TrigTauDiscriGetter2015()
-
-
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     efidinsideout,
-                                     self.continueChain('EF', 'tr')]]
+            # TrigTauRec, BDT and Hypo
+                efmv              = TrigTauDiscriGetter2015()
+                self.EFsequenceList += [[[ self.currentItem ],
+                                         [recmerged, efmv, theEFHypo],
+                                         self.continueChain('EF', 'effinal')]]
 
-            self.EFsequenceList += [[[ self.currentItem ],
-                                     [recmerged_2012, efmv, theEFHypo],
-                                     self.continueChain('EF', 'effinal')]]
diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py
index a7254eecdb42..4f035879bb73 100644
--- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py
@@ -121,8 +121,6 @@ class L2EFChain_tau(L2EFChainDef):
     def setup_tauChain(self):
 
         threshold   = self.chainPart['threshold']
-        calibration = self.chainPart['calib']
-        recoAlg     = self.chainPart['recoAlg'] 
         selection   = self.chainPart['selection']
         preselection= self.chainPart['preselection']
         idperf      = "idperf" in self.chainPart['trkInfo']
diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
index fbaed18a3ad9..4c5cdb184798 100644
--- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
@@ -38,7 +38,6 @@ class TauHypoProvider:
                         theThresh = self.thresholdsL2Calo[(criteria, int(threshold))]
                         currentHypo = T2CaloTauHypo(currentHypoKey, theVars, theThresh)
                     
-
                 if part == 'id':
                     if criteria== 'perf':
                         from TrigTauHypo.TrigTauHypoBase import T2IDTauHypo_tauNoCut
@@ -68,44 +67,45 @@ class TauHypoProvider:
                         from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_tauNoCut
                         currentHypo = EFTauMVHypo_tauNoCut(currentHypoKey.replace(threshold, ''))
 
-                    elif criteria=='dikaon' or criteria=='dikaontight' or criteria=='dikaonmass' or criteria=='dikaonmasstight' or criteria=='kaonpi1' or criteria=='kaonpi2' or criteria=='dipion1' or criteria=='dipion1loose' or criteria=='dipion2':
+                    elif criteria=='dikaon' or criteria=='dikaontight' or criteria=='dikaonmass' or criteria=='dikaonmasstight' or criteria=='kaonpi1' or criteria=='kaonpi2' or criteria=='dipion1' or criteria=='dipion1loose' or criteria=='dipion2' or criteria=='dipion3':
                         from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo
                         theVars = ['massTrkSysMin', 'massTrkSysMax', 'massTrkSysKaonMin', 'massTrkSysKaonMax', 'massTrkSysKaonPiMin', 'massTrkSysKaonPiMax', 'targetMassTrkSysKaonPi', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax']
                         theThresh = self.thresholdsEF_dikaon[(criteria, int(threshold))]
                         currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh)
 
-#                    elif criteria=='dikaonmass' or criteria=='dikaonmasstight':
-#                        from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo
-#                        theVars = ['massTrkSysKaonMin', 'massTrkSysKaonMax', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax','nWideTrackMax']
-#                        theThresh = self.thresholdsEF_dikaonmass[(criteria, int(threshold))]
-#                        currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh)
-
                     elif criteria=='singlepion' or criteria=='singlepiontight':
                         from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo
                         theVars = ['leadTrkPtMin','EtCalibMin','nTrackMax','nWideTrackMax','dRmaxMax','etOverPtLeadTrkMin','etOverPtLeadTrkMax']
                         theThresh = self.thresholdsEF_singlepion[(criteria, int(threshold))]
                         currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh)
 
-                    elif criteria=='medium1HighptL' or criteria=='medium1HighptM' or criteria=='medium1HighptH':
-                        from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_highpt
-                        theVars = ['NTrackMax', 'EtCalibMin', 'Level','HighptTrkThr','HighptIDThr','HighptJetThr']
-                        theThresh = self.thresholdsEF[(criteria, int(threshold))]
-                        theThresh.extend(self.thresholdsHighpt[(criteria)])
-                        currentHypo = EFTauMVHypo_highpt(currentHypoKey, theVars, theThresh)
-
                     elif criteria=='medium0':
                         from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo
                         theVars = ['NTrackMin','NTrackMax', 'EtCalibMin', 'Level','ApplyIDon0p']
                         theThresh = self.thresholdsEF_FTK[(criteria, int(threshold))]
                         currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
 
+                    elif criteria=='medium1NoPt':
+                        from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo
+                        theVars = ['NTrackMax', 'EtCalibMin', 'Level']
+                        theThresh = self.thresholdsEF[('medium1', 0)] # do not apply pt cut at EF
+                        currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
+
+                    elif criteria=='verylooseRNN' or criteria=='looseRNN' or criteria=='mediumRNN' or criteria=='tightRNN':
+                        from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo
+                        theVars = ['NTrackMax', 'EtCalibMin', 'Level']
+                        theThresh = self.thresholdsEF[(criteria, int(threshold))]
+                        theVars.extend(['Method','NTrackMin','HighptIDThr'])
+                        theThresh.extend([3,0,280000.])
+                        currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
+
                     else:
                         from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo
                         theVars = ['NTrackMax', 'EtCalibMin', 'Level']
                         theThresh = self.thresholdsEF[(criteria, int(threshold))]
                         currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
 
-        if strategy == 'calo' or strategy =='ptonly' or strategy == 'mvonly' or strategy == 'caloonly' or strategy == 'track' or strategy == 'trackonly' or strategy == 'tracktwo' or strategy == 'trackcalo' or strategy == 'tracktwocalo' or strategy == 'tracktwo2015' or strategy == 'FTK' or strategy == 'FTKRefit' or strategy == 'FTKNoPrec':
+        if strategy == 'calo' or strategy =='ptonly' or strategy == 'mvonly' or strategy == 'caloonly' or strategy == 'track' or strategy == 'trackonly' or strategy == 'tracktwo' or strategy == 'tracktwoEF' or strategy == 'tracktwoEFmvaTES' or strategy == 'tracktwoMVA' or strategy == 'trackcalo' or strategy == 'tracktwocalo' or strategy == 'tracktwo2015' or strategy == 'FTK' or strategy == 'FTKRefit' or strategy == 'FTKNoPrec':
 
             # Simple implementation of 2015 pre-selection
             currentHypoKey = 'l2'+part+'_tau'+threshold+'_'+criteria+'_'+strategy
@@ -143,7 +143,6 @@ class TauHypoProvider:
             if part == 'id':
                 from TrigTauHypo.TrigTauHypoBase import HLTTrackTauHypo
                 from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo
-                from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_highpt
                 # Important Note: the pT cut here is an unused dummy
                 if criteria == 'cosmic':
                     theVars = ['LowerPtCut', 'TracksInCoreCut', 'TracksInIsoCut', 'DeltaZ0Cut']
@@ -155,19 +154,18 @@ class TauHypoProvider:
                     theThresh = [0,3,1,0.*self.GeV,-1111,0]
                     currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
                 else:
-                    if strategy != 'tracktwo' and strategy != 'FTK' and strategy != 'FTKRefit' and strategy != 'FTKNoPrec':
+                    if strategy != 'tracktwo' and strategy != 'tracktwoEF' and strategy != 'tracktwoEFmvaTES' and strategy != 'tracktwoMVA' and strategy != 'FTK' and strategy != 'FTKRefit' and strategy != 'FTKNoPrec':
                         theVars = ['LowerPtCut','LowerTrackPtCut']
                         theThresh = [int(threshold)*self.GeV,1.*self.GeV]
                         currentHypo = HLTTrackTauHypo(currentHypoKey, theVars, theThresh)
+                    elif strategy == 'tracktwoMVA':
+                        theVars = ['NTrackMin','NTrackMax','NWideTrackMax','EtCalibMin', 'Level','Method']
+                        theThresh = [0,3,1,0.*self.GeV,-1111,0]
+                        currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
                     else:
                         theVars = ['NTrackMin','NTrackMax','NWideTrackMax','EtCalibMin', 'Level','Method']
                         theThresh = [1,3,1,0.*self.GeV,-1111,0]
-                        if criteria=='medium1HighptL' or criteria=='medium1HighptM' or criteria=='medium1HighptH':
-                            theVars.extend(['HighptTrkThr','HighptIDThr','HighptJetThr'])
-                            theThresh.extend(self.thresholdsHighpt[(criteria)])
-                            currentHypo = EFTauMVHypo_highpt(currentHypoKey, theVars, theThresh)
-                        else:
-                            currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
+                        currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh)
 
         assert currentHypo, 'unable to find hypothesis algorithm: '+currentHypoKey
             
@@ -258,6 +256,7 @@ class TauHypoProvider:
         ('medium1', 29): [3,  29.0*GeV, 2],
         ('medium1', 35): [3,  35.0*GeV, 2],
         ('medium1', 38): [3,  38.0*GeV, 2],
+        ('medium1', 40): [3,  40.0*GeV, 2],
         ('medium1', 50): [3,  50.0*GeV, 2],
         ('medium1', 60): [3,  60.0*GeV, 2],
         ('medium1', 80): [3,  80.0*GeV, 2],
@@ -277,40 +276,58 @@ class TauHypoProvider:
         ('tight1', 125): [3, 125.0*GeV, 3], 
         ('tight1', 160): [3, 160.0*GeV, 3],
         ('tight1', 200): [3, 200.0*GeV, 3],
-        ('medium1HighptL', 20): [3,  20.0*GeV, 2],
-        ('medium1HighptL', 25): [3,  25.0*GeV, 2],
-        ('medium1HighptL', 29): [3,  29.0*GeV, 2],
-        ('medium1HighptL', 35): [3,  35.0*GeV, 2],
-        ('medium1HighptL', 38): [3,  38.0*GeV, 2],
-        ('medium1HighptL', 50): [3,  50.0*GeV, 2],
-        ('medium1HighptL', 60): [3,  60.0*GeV, 2],
-        ('medium1HighptL', 80): [3,  80.0*GeV, 2],
-        ('medium1HighptL', 115): [3, 115.0*GeV, 2],
-        ('medium1HighptL', 125): [3, 125.0*GeV, 2],
-        ('medium1HighptL', 160): [3, 160.0*GeV, 2],
-        ('medium1HighptM', 20): [3,  20.0*GeV, 2],
-        ('medium1HighptM', 25): [3,  25.0*GeV, 2],
-        ('medium1HighptM', 29): [3,  29.0*GeV, 2],
-        ('medium1HighptM', 35): [3,  35.0*GeV, 2],
-        ('medium1HighptM', 38): [3,  38.0*GeV, 2],
-        ('medium1HighptM', 50): [3,  50.0*GeV, 2],
-        ('medium1HighptM', 60): [3,  60.0*GeV, 2],
-        ('medium1HighptM', 80): [3,  80.0*GeV, 2],
-        ('medium1HighptM', 115): [3, 115.0*GeV, 2],
-        ('medium1HighptM', 125): [3, 125.0*GeV, 2],
-        ('medium1HighptM', 160): [3, 160.0*GeV, 2],
-        ('medium1HighptH', 20): [3,  20.0*GeV, 2],
-        ('medium1HighptH', 25): [3,  25.0*GeV, 2],
-        ('medium1HighptH', 29): [3,  29.0*GeV, 2],
-        ('medium1HighptH', 35): [3,  35.0*GeV, 2],
-        ('medium1HighptH', 38): [3,  38.0*GeV, 2],
-        ('medium1HighptH', 50): [3,  50.0*GeV, 2],
-        ('medium1HighptH', 60): [3,  60.0*GeV, 2],
-        ('medium1HighptH', 80): [3,  80.0*GeV, 2],
-        ('medium1HighptH', 115): [3, 115.0*GeV, 2],
-        ('medium1HighptH', 125): [3, 125.0*GeV, 2],
-        ('medium1HighptH', 160): [3, 160.0*GeV, 2], 
-        ('medium1HighptH', 200): [3, 200.0*GeV, 2]
+        ('verylooseRNN', 20): [3,  20.0*GeV, 0],
+        ('verylooseRNN', 25): [3,  25.0*GeV, 0],
+        ('verylooseRNN', 29): [3,  29.0*GeV, 0],
+        ('verylooseRNN', 35): [3,  35.0*GeV, 0],
+        ('verylooseRNN', 38): [3,  38.0*GeV, 0],
+        ('verylooseRNN', 50): [3,  50.0*GeV, 0],
+        ('verylooseRNN', 60): [3,  60.0*GeV, 0],
+        ('verylooseRNN', 80): [3,  80.0*GeV, 0],
+        ('verylooseRNN', 115): [3, 115.0*GeV, 0],
+        ('verylooseRNN', 125): [3, 125.0*GeV, 0], 
+        ('verylooseRNN', 160): [3, 160.0*GeV, 0],
+        ('verylooseRNN', 200): [3, 200.0*GeV, 0],
+        ('looseRNN', 20): [3,  20.0*GeV, 1],
+        ('looseRNN', 25): [3,  25.0*GeV, 1],
+        ('looseRNN', 29): [3,  29.0*GeV, 1],
+        ('looseRNN', 35): [3,  35.0*GeV, 1],
+        ('looseRNN', 38): [3,  38.0*GeV, 1],
+        ('looseRNN', 50): [3,  50.0*GeV, 1],
+        ('looseRNN', 60): [3,  60.0*GeV, 1],
+        ('looseRNN', 80): [3,  80.0*GeV, 1],
+        ('looseRNN', 115): [3, 115.0*GeV, 1],
+        ('looseRNN', 125): [3, 125.0*GeV, 1], 
+        ('looseRNN', 160): [3, 160.0*GeV, 1],
+        ('looseRNN', 200): [3, 200.0*GeV, 1],
+        ('mediumRNN', 0): [3,  0.0*GeV, 2], 
+        ('mediumRNN', 12): [3,  12.0*GeV, 2],
+        ('mediumRNN', 20): [3,  20.0*GeV, 2],
+        ('mediumRNN', 25): [3,  25.0*GeV, 2],
+        ('mediumRNN', 29): [3,  29.0*GeV, 2],
+        ('mediumRNN', 35): [3,  35.0*GeV, 2],
+        ('mediumRNN', 38): [3,  38.0*GeV, 2],
+        ('mediumRNN', 40): [3,  40.0*GeV, 2],
+        ('mediumRNN', 50): [3,  50.0*GeV, 2],
+        ('mediumRNN', 60): [3,  60.0*GeV, 2],
+        ('mediumRNN', 80): [3,  80.0*GeV, 2],
+        ('mediumRNN', 115): [3, 115.0*GeV, 2],
+        ('mediumRNN', 125): [3, 125.0*GeV, 2], 
+        ('mediumRNN', 160): [3, 160.0*GeV, 2], 
+        ('mediumRNN', 200): [3, 200.0*GeV, 2],
+        ('tightRNN', 20): [3,  20.0*GeV, 3],
+        ('tightRNN', 25): [3,  25.0*GeV, 3],
+        ('tightRNN', 29): [3,  29.0*GeV, 3],
+        ('tightRNN', 35): [3,  35.0*GeV, 3],
+        ('tightRNN', 38): [3,  38.0*GeV, 3],
+        ('tightRNN', 40): [3,  40.0*GeV, 3],
+        ('tightRNN', 50): [3,  50.0*GeV, 3],
+        ('tightRNN', 60): [3,  60.0*GeV, 3],
+        ('tightRNN', 80): [3,  80.0*GeV, 3],
+        ('tightRNN', 115): [3, 115.0*GeV, 3],
+        ('tightRNN', 125): [3, 125.0*GeV, 3], 
+        ('tightRNN', 160): [3, 160.0*GeV, 3],
+        ('tightRNN', 200): [3, 200.0*GeV, 3]
         }
 
     thresholdsEF_FTK = {
@@ -329,12 +346,8 @@ class TauHypoProvider:
         ('medium0', 160): [0,3, 160.0*GeV, 2, False],
         ('medium0', 200): [0,3, 200.0*GeV, 2, False],
         }
-    thresholdsHighpt = {
-        ('medium1HighptL'):[250.0*GeV,330.0*GeV,410.0*GeV], 
-        ('medium1HighptM'):[200.0*GeV,330.0*GeV,410.0*GeV],
-        ('medium1HighptH'):[160.0*GeV,330.0*GeV,410.0*GeV]   
-        }
 
+# 'massTrkSysMin', 'massTrkSysMax', 'massTrkSysKaonMin', 'massTrkSysKaonMax', 'massTrkSysKaonPiMin', 'massTrkSysKaonPiMax', 'targetMassTrkSysKaonPi', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax'
     thresholdsEF_dikaon = {
         ('dikaon', 25):          [0.2*GeV, 0.45*GeV,    0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   15.0*GeV, 25.0*GeV, 1.5],
         ('dikaon', 35):          [0.2*GeV, 0.45*GeV,    0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 35.0*GeV, 1.5], 
@@ -353,7 +366,8 @@ class TauHypoProvider:
         ('dipion1loose', 25):    [0.475*GeV, 1.075*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 25.0*GeV, 1.5],
         ('dipion1loose', 35):    [0.475*GeV, 1.075*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 35.0*GeV, 1.5],
         ('dipion2', 25):         [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   15.0*GeV, 25.0*GeV, 1.0],
-        ('dipion2', 35):         [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 35.0*GeV, 1.0]
+        ('dipion2', 35):         [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 35.0*GeV, 1.0],
+        ('dipion3', 25):         [0.279*GeV, 0.648*GeV, 0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 25.0*GeV, 2.2], #ATR-16600
         }
 
 
diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py
index 32e809dfc4b0..164db119f1bf 100755
--- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py
@@ -2,11 +2,8 @@
 
 """ Tau slice specific flags  """
 
-
- 
-from AthenaCommon.Logging import logging
-from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer, jobproperties
-from TriggerMenu.menu.CommonSliceHelper import CommonSliceHelper, AllowedList
+from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
+from TriggerMenu.menu.CommonSliceHelper import CommonSliceHelper
 
 __author__  = ''
 __version__="$Revision: 1.34 $"
-- 
GitLab


From 3df0f1a2d2d3de03657a69adeda07fbcdf718854 Mon Sep 17 00:00:00 2001
From: Charles Burton <cdb97@cornell.edu>
Date: Fri, 8 Mar 2019 23:00:10 -0600
Subject: [PATCH 015/163] Support TEfficiency in AthenaMonitoring

---
 .../AthenaMonitoring/HistogramFiller.h        |  26 +++-
 .../python/ExampleMonitorAlgorithm.py         |  14 ++-
 .../src/ExampleMonitorAlgorithm.cxx           |  17 ++-
 Control/AthenaMonitoring/src/HistogramDef.cxx |   2 +-
 .../AthenaMonitoring/src/HistogramFiller.cxx  | 115 ++++++++++++++----
 5 files changed, 135 insertions(+), 39 deletions(-)

diff --git a/Control/AthenaMonitoring/AthenaMonitoring/HistogramFiller.h b/Control/AthenaMonitoring/AthenaMonitoring/HistogramFiller.h
index 39d043ac7dc8..e198594175bf 100644
--- a/Control/AthenaMonitoring/AthenaMonitoring/HistogramFiller.h
+++ b/Control/AthenaMonitoring/AthenaMonitoring/HistogramFiller.h
@@ -14,6 +14,7 @@
 #include "TH2.h"
 #include "TProfile.h"
 #include "TProfile2D.h"
+#include "TEfficiency.h"
 
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ITHistSvc.h"
@@ -29,8 +30,13 @@ namespace Monitored {
   public:
     HistogramFiller(TH1* hist, const HistogramDef& histDef) 
       : m_hist(hist), m_mutex(std::make_shared<std::mutex>()), m_histDef(new HistogramDef(histDef)) {}
+    HistogramFiller(TEfficiency* eff, const HistogramDef& histDef) 
+      : m_eff(eff), m_mutex(std::make_shared<std::mutex>()), m_histDef(new HistogramDef(histDef)) {}
     HistogramFiller(const HistogramFiller& hf) 
-      : m_hist(hf.m_hist), m_mutex(hf.m_mutex), m_histDef(hf.m_histDef) {}
+      : m_hist(hf.m_hist)
+      , m_eff(hf.m_eff)
+      , m_mutex(hf.m_mutex)
+      , m_histDef(hf.m_histDef) {}
     HistogramFiller(HistogramFiller&&) = default;
   
     virtual ~HistogramFiller() {}
@@ -49,6 +55,7 @@ namespace Monitored {
     virtual TH1* histogram() = 0;
   
     TH1* m_hist;
+    TEfficiency* m_eff;
     std::shared_ptr<std::mutex> m_mutex;
     std::shared_ptr<HistogramDef> m_histDef;
     std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> m_monVariables;
@@ -81,7 +88,9 @@ namespace Monitored {
     TH1* create2D(const HistogramDef& def);
     template<class H> 
     TH1* create2DProfile(const HistogramDef& def);
+    TEfficiency* createEfficiency(const HistogramDef& def);
     
+    std::string getFullName(const HistogramDef& def);
     static void setOpts(TH1* hist, const std::string& opt);
     static void setLabels(TH1* hist, const std::vector<std::string>& labels);
     
@@ -167,6 +176,19 @@ namespace Monitored {
   protected:
     virtual TProfile2D* histogram() override { return static_cast<TProfile2D*>(m_hist); }
   };
+
+  /**
+   * @brief filler for TEfficiency histograms
+   */
+  class HistogramFillerEfficiency : public HistogramFiller {
+  public:
+    HistogramFillerEfficiency(TEfficiency* eff, const HistogramDef& histDef)
+      : HistogramFiller(eff, histDef) {};
+    virtual unsigned fill() override;
+    virtual HistogramFillerEfficiency* clone() override { return new HistogramFillerEfficiency(*this); };
+  protected:
+    virtual TH1* histogram() { return m_hist; } // Keep the compiler happy
+  };
 }
- 
+
 #endif /* HistogramFiller */
diff --git a/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py b/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
index 0c50180230ce..d7412fc29dff 100644
--- a/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
+++ b/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
@@ -46,6 +46,7 @@ def ExampleMonitoringConfig(inputFlags):
     ### STEP 3 ###
     # Edit properties of a algorithm
     exampleMonAlg.TriggerChain = ''
+    # exampleMonAlg.RandomHist = True
 
     ### STEP 4 ###
     # Add some tools. N.B. Do not use your own trigger decion tool. Use the
@@ -77,17 +78,18 @@ def ExampleMonitoringConfig(inputFlags):
 
     ### STEP 5 ###
     # Configure histograms
-    myGroup.defineHistogram('lumiPerBCID;lumiPerBCID', title='Luminosity;L/BCID;Events',
+    myGroup.defineHistogram('lumiPerBCID',title='Luminosity;L/BCID;Events',
                             path='ToRuleThemAll',xbins=10,xmin=0.0,xmax=10.0)
-    myGroup.defineHistogram('lb;lb', title='Luminosity Block;lb;Events',
+    myGroup.defineHistogram('lb', title='Luminosity Block;lb;Events',
                             path='ToFindThem',xbins=1000,xmin=-0.5,xmax=999.5)
-    myGroup.defineHistogram('random;random', title='LB;x;Events',
+    myGroup.defineHistogram('random', title='LB;x;Events',
                             path='ToBringThemAll',xbins=30,xmin=0,xmax=1)
+    myGroup.defineHistogram('pT_passed,pT',type='TEfficiency',title='Test TEfficiency;x;Eff',
+                            path='AndInTheDarkness',xbins=100,xmin=0.0,xmax=50.0)
 
-
-    anotherGroup.defineHistogram('lbWithFilter;lbWithFilter',title='Lumi;lb;Events',
+    anotherGroup.defineHistogram('lbWithFilter',title='Lumi;lb;Events',
                                  path='top',xbins=1000,xmin=-0.5,xmax=999.5)
-    anotherGroup.defineHistogram('run;run',title='Run Number;run;Events',
+    anotherGroup.defineHistogram('run',title='Run Number;run;Events',
                                  path='top',xbins=1000000,xmin=-0.5,xmax=999999.5)
 
     ### STEP 6 ###
diff --git a/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx b/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
index ed0bfd7abca7..1c712557e09e 100644
--- a/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
+++ b/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
@@ -26,17 +26,28 @@ StatusCode ExampleMonitorAlgorithm::fillHistograms( const EventContext& ctx ) co
     auto lb = Monitored::Scalar<int>("lb",0);
     auto run = Monitored::Scalar<int>("run",0);
     auto random = Monitored::Scalar<float>("random",0.0);
+
+    // Two variables (value and passed) needed for TEfficiency
+    auto pT = Monitored::Scalar<float>("pT",0.0);
+    auto pT_passed = Monitored::Scalar<float>("pT_passed",false);
+
     // Set the values of the monitored variables for the event
     lumiPerBCID = lbAverageInteractionsPerCrossing();
     lb = GetEventInfo(ctx)->lumiBlock();
     run = GetEventInfo(ctx)->runNumber();
+    
+    TRandom3 r(ctx.eventID().event_number());
+    // Example of using flags
     if (m_doRandom) {
-      TRandom r(ctx.eventID().event_number());
-      random = r.Rndm();
+        random = r.Rndm();
     }
 
+    // Fake efficiency calculator
+    pT = r.Landau(15);
+    pT_passed = pT>r.Poisson(15);
+
     // Fill. First argument is the tool name, all others are the variables to be saved.
-    fill("ExampleMonitor",lumiPerBCID,lb,random);
+    fill("ExampleMonitor",lumiPerBCID,lb,random,pT,pT_passed);
 
     // Alternative fill method. Get the group yourself, and pass it to the fill function.
     auto tool = getGroup("ExampleMonitor");
diff --git a/Control/AthenaMonitoring/src/HistogramDef.cxx b/Control/AthenaMonitoring/src/HistogramDef.cxx
index 12403f3219e9..d9fbd06f91f7 100644
--- a/Control/AthenaMonitoring/src/HistogramDef.cxx
+++ b/Control/AthenaMonitoring/src/HistogramDef.cxx
@@ -52,7 +52,7 @@ const HistogramDef HistogramDef::parse(const std::string& jobOpts) {
   itr = histProperty.erase(itr);
 
 
-  if (histPar.type.find("TH2") == 0 || histPar.type == "TProfile") {
+  if (histPar.type.find("TH2") == 0 || histPar.type == "TProfile" || histPar.type == "TEfficiency") {
     histPar.name.push_back(*itr);
     itr = histProperty.erase(itr);
   }
diff --git a/Control/AthenaMonitoring/src/HistogramFiller.cxx b/Control/AthenaMonitoring/src/HistogramFiller.cxx
index bb0f3057c5c2..9dfd91bbc773 100644
--- a/Control/AthenaMonitoring/src/HistogramFiller.cxx
+++ b/Control/AthenaMonitoring/src/HistogramFiller.cxx
@@ -21,6 +21,7 @@ HistogramFiller* HistogramFillerFactory::create(const HistogramDef& def) {
   TProfile* histoProfile(0);
   TH2* histo2D(0);
   TProfile2D* histo2DProfile(0);
+  TEfficiency* histoEfficiency(0);
 
   if (def.type == "TH1F") {
     histo1D = histo = create1D<TH1F>(def);
@@ -43,16 +44,21 @@ HistogramFiller* HistogramFillerFactory::create(const HistogramDef& def) {
   } else if (def.type == "TProfile2D") {
     histo = create2DProfile<TProfile2D>(def);
     histo2DProfile = dynamic_cast<TProfile2D*>(histo);
+  } else if (def.type == "TEfficiency") {
+    histoEfficiency = createEfficiency(def);
   }
   
-  if (histo == 0) {
+  if (histo == 0 && histoEfficiency == 0) {
     throw HistogramFillerCreateException("Can not create yet histogram of type: >" + def.type + "<\n" +
-                                         "Try one of: TH1[F,D,I], TH2[F,D,I], TProfile, TProfile2D");
+                                         "Try one of: TH1[F,D,I], TH2[F,D,I], TProfile, TProfile2D, " +
+                                         "TEfficiency.");
+  } else if (histo!=0) {
+    // magic shift to make histograms readable even if no post-procesing is done
+    histo->GetYaxis()->SetTitleOffset( 1.25 );
+
+    setLabels(histo, def.labels);
+    setOpts(histo, def.opt);
   }
-  histo->GetYaxis()->SetTitleOffset( 1.25 );// magic shift to make histograms readable even if no post-procesing is done
-
-  setLabels(histo, def.labels);
-  setOpts(histo, def.opt);
 
   HistogramFiller* result(0);
 
@@ -72,11 +78,43 @@ HistogramFiller* HistogramFillerFactory::create(const HistogramDef& def) {
       result = new HistogramFiller2DProfile(histo2DProfile, def);
   } else if ( histo2D ) {
       result = new HistogramFiller2D(histo2D, def);
+  } else if ( histoEfficiency ) {
+    result = new HistogramFillerEfficiency(histoEfficiency,def);
   }
   
   return result;
 }
 
+/**
+  * Invent path name
+  *
+  * If def path contains any of: EXPERT, SHIFT, DEBUG, RUNSTAT, EXPRES this is online 
+  * convention this becomes the first element of the path followed by the group name.
+  * Else if the def.path is DEFAULT then only the group name is used if the path yet 
+  * different is concatenated with the group name.
+ */
+std::string HistogramFillerFactory::getFullName(const HistogramDef& def) {
+  const static std::set<std::string> online( { "EXPERT", "SHIFT", "DEBUG", "RUNSTAT", "EXPRES" } );
+  
+  std::string path;
+  if( online.count( def.path) != 0 ) {
+    path =  "/" + def.path + "/" + m_groupName;
+  } else if ( def.path == "DEFAULT" ) {
+    path = "/" + m_groupName;
+  } else {
+    path = "/" + m_groupName + "/"+def.path; 
+  }
+  
+  // remove duplicate
+  std::string fullName = path + "/" + def.alias;
+  fullName.erase( std::unique( fullName.begin(), fullName.end(), 
+    [](const char a, const char b) { 
+      return a == b and a == '/';
+    } ), fullName.end() );
+
+  return fullName;
+}
+
 /**
  * Create and register histogram
  * 
@@ -87,27 +125,9 @@ HistogramFiller* HistogramFillerFactory::create(const HistogramDef& def) {
  */
 template<class H, class HBASE, typename... Types> 
 HBASE* HistogramFillerFactory::create(const HistogramDef& def, Types&&... hargs) {    
-  // invent path name
-  // if def path contains any of: EXPERT, SHIFT, DEBUG, RUNSTAT, EXPRES this is online convention
-  // this becomes the first element of the path followed by the group name
-  // else if the def.path is DEFAULT then only the group name is used
-  // if the path yet different is concatenated with the group name
-  //
-  const static std::set<std::string> online( { "EXPERT", "SHIFT", "DEBUG", "RUNSTAT", "EXPRES" } );
-  std::string path;
-  if( online.count( def.path) != 0 )
-      path =  "/" + def.path + "/" + m_groupName;
-  else if ( def.path == "DEFAULT" )
-    path = "/" + m_groupName;
-  else
-    path = "/" + m_groupName + "/"+def.path; 
-  // remove duplicate //
-  std::string fullName = path + "/" + def.alias;
-  fullName.erase( std::unique( fullName.begin(), fullName.end(), 
-			       [](const char a, const char b){ 
-				 return a == b and a == '/'; 
-			       } ), fullName.end() );
-   
+  
+  std::string fullName = getFullName(def);
+
   // Check if histogram exists already
   HBASE* histo = nullptr;
   if ( m_histSvc->exists( fullName ) ) {
@@ -149,6 +169,30 @@ TH1* HistogramFillerFactory::create2DProfile(const HistogramDef& def) {
                             def.ybins, def.ymin, def.ymax, def.zmin, def.zmax);
 }
 
+TEfficiency* HistogramFillerFactory::createEfficiency(const HistogramDef& def) {    
+  
+  std::string fullName = getFullName(def);
+
+  // Check if efficiency exists already
+  TEfficiency* e = nullptr;
+  if ( m_histSvc->exists(fullName) ) {
+    TGraph* g = reinterpret_cast<TGraph*>(e);
+    if ( !m_histSvc->getGraph(fullName,g) ) {
+      throw HistogramFillerCreateException("Histogram >"+ fullName + "< seems to exist but can not be obtained from THistSvc");
+    }
+    return e;
+  }
+
+  // Otherwise, create the efficiency and register it
+  e = new TEfficiency(def.alias.c_str(),def.title.c_str(),def.xbins,def.xmin,def.xmax);
+  TGraph* g = reinterpret_cast<TGraph*>(e);
+  if ( !m_histSvc->regGraph(fullName,g) ) {
+    delete e;
+    throw HistogramFillerCreateException("Histogram >"+ fullName + "< can not be registered in THistSvc");
+  }
+  return e;
+}
+
 void HistogramFillerFactory::setOpts(TH1* hist, const std::string& opt) {
   // try to apply an option
   if ( opt.find("kCanRebin") != std::string::npos ) {
@@ -351,3 +395,20 @@ unsigned HistogramFiller2D::fill() {
   
   return i;
 }
+
+unsigned HistogramFillerEfficiency::fill() {
+  if (m_monVariables.size() != 2) {
+    return 0;
+  }
+
+  unsigned i(0);
+  auto valuesVector1 = m_monVariables[0].get().getVectorRepresentation();
+  auto valuesVector2 = m_monVariables[1].get().getVectorRepresentation();
+  std::lock_guard<std::mutex> lock(*(this->m_mutex));
+
+  for (i = 0; i < valuesVector1.size(); ++i) {
+    m_eff->Fill(valuesVector1[i],valuesVector2[i]);
+  }
+  
+  return i;
+}
-- 
GitLab


From c5dfdfce6b729403713fbd3de6e4cbef93ada607 Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Sun, 10 Mar 2019 02:06:28 +0100
Subject: [PATCH 016/163] update the ringer hypo code to the MT version and
 update the egamma emulator code.

---
 .../Root/TrigEgammaEFCaloSelectorTool.cxx     |  24 +-
 .../Root/TrigEgammaEFElectronSelectorTool.cxx |  28 +-
 .../Root/TrigEgammaEFPhotonSelectorTool.cxx   |  16 +-
 .../Root/TrigEgammaEmulationTool.cxx          | 170 ++++++--
 .../Root/TrigEgammaIsolationSelectorTool.cxx  |  43 +-
 .../Root/TrigEgammaL1SelectorTool.cxx         |  25 +-
 .../TrigEgammaL2CaloRingerSelectorTool.cxx    | 161 +------
 .../Root/TrigEgammaSelectorBaseTool.cxx       |   4 +-
 .../ITrigEgammaEmulationTool.h                |   5 +-
 .../ITrigEgammaSelectorBaseTool.h             |   5 +-
 .../TrigEgammaEFCaloSelectorTool.h            |   7 +-
 .../TrigEgammaEFElectronSelectorTool.h        |   4 +-
 .../TrigEgammaEFPhotonSelectorTool.h          |   4 +-
 .../TrigEgammaEmulationTool.h                 |  52 ++-
 .../TrigEgammaEmulationTool/TrigEgammaInfo.h  |   6 +-
 .../TrigEgammaIsolationSelectorTool.h         |   5 +-
 .../TrigEgammaL1SelectorTool.h                |   5 +-
 .../TrigEgammaL2CaloRingerSelectorTool.h      |  17 +-
 .../TrigEgammaSelectorBaseTool.h              |  39 +-
 .../python/TrigEgammaEmulationEFConfig.py     |   6 +-
 .../TrigEgammaEmulationIsolationConfig.py     |   3 +-
 .../python/TrigEgammaEmulationL2Config.py     |  99 +++--
 .../TrigEgammaEmulationPidToolsConfig.py      |   2 +-
 .../python/TrigEgammaEmulationToolConfig.py   |  23 +-
 .../TrigEgammaEmulationTool_entries.cxx       |   3 +
 .../TrigMultiVarHypo/CMakeLists.txt           |  33 +-
 .../TrigMultiVarHypo/TrigL2CaloRingerFex.h    |  25 +-
 .../TrigMultiVarHypo/TrigL2CaloRingerHypo.h   |  18 +-
 .../preproc/TrigRingerPreprocessor.h          |  78 ----
 .../tools/MultiLayerPerceptron.h              |  68 ---
 .../tools/RingerSelectorTool.h                | 117 +++++
 .../tools/TrigL2CaloRingerReader.h            |  66 ---
 .../TrigMultiVarHypo/tools/TrigRingerHelper.h | 125 ------
 .../tools/common/RingerHelper.h               |  36 ++
 .../tools/common/RingerReader.h               | 103 +++++
 .../tools/procedures/IModel.h                 |  59 +++
 .../tools/procedures/INormalization.h         |  50 +++
 .../tools/procedures/IThresholds.h            |  57 +++
 .../tools/procedures/MultiLayerPerceptron.h   |  49 +++
 .../TrigMultiVarHypo/tools/procedures/Norm1.h |  28 ++
 .../tools/procedures/Thresholds.h             |  43 ++
 .../python/TrigL2CaloRingerConstants.py       |  20 -
 .../python/TrigL2CaloRingerCutDefs.py         | 110 -----
 .../python/TrigL2CaloRingerFexMTInit.py       |  58 ---
 .../python/TrigL2CaloRingerHypoConfig.py      | 194 +++------
 .../python/TrigL2CaloRingerHypoMonitoring.py  |  26 +-
 .../python/TrigL2CaloRingerHypoTool.py        | 143 ++++++
 .../python/TrigRingerPreprocessorDefs.py      |  57 ---
 .../TrigMultiVarHypo/python/__init__.py       |   2 +-
 .../share/convert2version1.py                 |   2 +-
 .../TrigMultiVarHypo/share/switch_tuning.py   |   2 +-
 .../src/TrigL2CaloRingerFex.cxx               | 152 ++-----
 .../src/TrigL2CaloRingerFexMT.cxx             | 253 -----------
 .../src/TrigL2CaloRingerFexMT.h               | 106 -----
 .../src/TrigL2CaloRingerHypo.cxx              |  64 +--
 .../src/TrigL2CaloRingerHypoAlgMT.cxx         | 105 +++--
 .../src/TrigL2CaloRingerHypoAlgMT.h           |  25 +-
 .../src/TrigL2CaloRingerHypoToolMT.cxx        | 144 +++---
 .../src/TrigL2CaloRingerHypoToolMT.h          |  91 ++--
 .../components/TrigMultiVarHypo_entries.cxx   |  10 +-
 .../src/preproc/TrigRingerPreprocessor.cxx    | 213 ---------
 .../src/tools/MultiLayerPerceptron.cxx        | 267 ------------
 .../src/tools/RingerSelectorTool.cxx          | 412 ++++++++++++++++++
 .../src/tools/TrigL2CaloRingerReader.cxx      | 216 ---------
 .../RingerHelper.cxx}                         |   6 +-
 .../src/tools/common/RingerReader.cxx         | 318 ++++++++++++++
 .../tools/procedures/MultiLayerPerceptron.cxx | 266 +++++++++++
 .../src/tools/procedures/Norm1.cxx            |  36 ++
 68 files changed, 2475 insertions(+), 2534 deletions(-)
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/MultiLayerPerceptron.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/RingerSelectorTool.h
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigRingerHelper.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerHelper.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerReader.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IModel.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/INormalization.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IThresholds.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Norm1.h
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Thresholds.h
 delete mode 100755 Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerConstants.py
 delete mode 100755 Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerCutDefs.py
 delete mode 100755 Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerFexMTInit.py
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoTool.py
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigRingerPreprocessorDefs.py
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.cxx
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.h
 mode change 100644 => 100755 Trigger/TrigHypothesis/TrigMultiVarHypo/src/components/TrigMultiVarHypo_entries.cxx
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/preproc/TrigRingerPreprocessor.cxx
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/MultiLayerPerceptron.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/RingerSelectorTool.cxx
 delete mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigL2CaloRingerReader.cxx
 rename Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/{TrigRingerHelper.cxx => common/RingerHelper.cxx} (81%)
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerReader.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/MultiLayerPerceptron.cxx
 create mode 100644 Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/Norm1.cxx

diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
index 1a2f2b2479b9..fb2b2a9af71f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 /**********************************************************************
  * AsgTool: TrigEgammaEFCaloSelectorTool
@@ -12,11 +12,11 @@
  *
  **********************************************************************/
 #include "TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h"
-#include "PATCore/AcceptData.h"
 #include <boost/foreach.hpp>
 #include <boost/tokenizer.hpp>
 #include "boost/algorithm/string.hpp"
 #include <boost/dynamic_bitset.hpp>
+#include "PATCore/AcceptData.h"
 
 using namespace std;
 using namespace Trig;
@@ -108,35 +108,35 @@ bool TrigEgammaEFCaloSelectorTool::ApplyCaloPid(const xAOD::Egamma *eg, const st
   bool passSel=false;
   //float lhValue=0.0;
   //eg->passSelection(passSel,pidname);
-  
+  // If Alg becomes Reentrant this needs to change
   const EventContext ctx = Gaudi::Hive::currentContext();
 
   if (pidname == "Tight") {
-    passTool = (bool) m_electronCaloIsEMTool[0]->accept(ctx, eg);
+    passTool = (bool)m_electronCaloIsEMTool[0]->accept(ctx,eg);
   }
   else if (pidname == "Medium") {
-    passTool = (bool) m_electronCaloIsEMTool[1]->accept(ctx, eg);
+    passTool = (bool)m_electronCaloIsEMTool[1]->accept(ctx,eg);
   }
   else if (pidname == "Loose") {
-    passTool = (bool) m_electronCaloIsEMTool[2]->accept(ctx, eg);
+    passTool = (bool)m_electronCaloIsEMTool[2]->accept(ctx,eg);
   }
   else if (pidname == "VLoose") {
-    passTool = (bool) m_electronCaloIsEMTool[3]->accept(ctx, eg);
+    passTool = (bool)m_electronCaloIsEMTool[3]->accept(ctx,eg);
   }
   else if (pidname == "LHTight") {
-    passTool = (bool) m_electronCaloLHTool[0]->accept(ctx, eg, avg_mu);
+    passTool = (bool)m_electronCaloLHTool[0]->accept(ctx,eg,avg_mu);
     //lhValue = m_electronCaloLHTool[0]->getTResult().getResult(0);
   }
   else if (pidname == "LHMedium") {
-    passTool = (bool) m_electronCaloLHTool[1]->accept(ctx, eg, avg_mu);
+    passTool = (bool)m_electronCaloLHTool[1]->accept(ctx,eg,avg_mu);
     //lhValue = m_electronCaloLHTool[1]->getTResult().getResult(0);
   }
   else if (pidname == "LHLoose") {
-    passTool = (bool) m_electronCaloLHTool[2]->accept(ctx, eg, avg_mu);
+    passTool = (bool)m_electronCaloLHTool[2]->accept(ctx,eg,avg_mu);
     //lhValue = m_electronCaloLHTool[2]->getTResult().getResult(0);
   }
   else if (pidname == "LHVLoose") {
-    passTool = (bool) m_electronCaloLHTool[3]->accept(ctx, eg, avg_mu);
+    passTool = (bool)m_electronCaloLHTool[3]->accept(ctx,eg,avg_mu);
     //lhValue = m_electronCaloLHTool[3]->getTResult().getResult(0);
   }
   else {
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFElectronSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFElectronSelectorTool.cxx
index c522043d9060..ca556b59a216 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFElectronSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFElectronSelectorTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 /**********************************************************************
@@ -13,12 +13,11 @@
  *
  **********************************************************************/
 #include "TrigEgammaEmulationTool/TrigEgammaEFElectronSelectorTool.h"
-#include "PATCore/AcceptData.h"
 #include <boost/foreach.hpp>
 #include <boost/tokenizer.hpp>
 #include "boost/algorithm/string.hpp"
 #include <boost/dynamic_bitset.hpp>
-
+#include "PATCore/AcceptData.h"
 using namespace std;
 using namespace Trig;
 //**********************************************************************
@@ -85,11 +84,13 @@ bool TrigEgammaEFElectronSelectorTool::emulation(const xAOD::IParticleContainer
   boost::dynamic_bitset<> bitAccept(elContainer->size());
   unsigned bit = 0;
   float etthr  = info.thrHLT;
-  // auto avgmu = getAverageMu();
   auto avgmu = getOnlAverageMu();
 
   for(const auto& el : *elContainer){
     bit++;
+    ATH_MSG_INFO("Size = " << el->trackParticle()->numberOfParameters());
+    //auto maxParameters = el->trackParticle()->numberOfParameters();
+
     //emulate electron cuts
     if (info.idperf  || info.etcut || info.perf ) {
       //ATH_MSG_DEBUG("Apply Et cut " << etthr << " cluster Et " << el->caloCluster()->et());
@@ -130,28 +131,28 @@ bool TrigEgammaEFElectronSelectorTool::ApplyElectronPid(const xAOD::Electron *eg
   const EventContext ctx = Gaudi::Hive::currentContext();
 
   if (pidname == "Tight") {
-    passTool = (bool) m_electronOnlIsEMTool[0]->accept(ctx, eg);
+    passTool = (bool)m_electronOnlIsEMTool[0]->accept(ctx,eg);
   }
   else if (pidname == "Medium") {
-    passTool = (bool) m_electronOnlIsEMTool[1]->accept(ctx, eg);
+    passTool = (bool)m_electronOnlIsEMTool[1]->accept(ctx,eg);
   }
   else if (pidname == "Loose") {
-    passTool = (bool) m_electronOnlIsEMTool[2]->accept(ctx, eg);
+    passTool = (bool)m_electronOnlIsEMTool[2]->accept(ctx,eg);
   }
   else if (pidname == "VLoose") {
-    passTool = (bool) m_electronOnlIsEMTool[3]->accept(ctx, eg);
+    passTool = (bool)m_electronOnlIsEMTool[3]->accept(ctx,eg);
   }
   else if (pidname == "LHTight") {
-    passTool = (bool) m_electronOnlLHTool[0]->accept(ctx, eg,avgmu);
+    passTool = (bool)m_electronOnlLHTool[0]->accept(ctx,eg,avgmu);
   }// Tight
   else if (pidname == "LHMedium") {
-    passTool = (bool) m_electronOnlLHTool[1]->accept(ctx, eg,avgmu);
+    passTool = (bool)m_electronOnlLHTool[1]->accept(ctx,eg,avgmu);
   }// Medium
   else if (pidname == "LHLoose") {
-    passTool = (bool) m_electronOnlLHTool[2]->accept(ctx, eg,avgmu);
+    passTool = (bool)m_electronOnlLHTool[2]->accept(ctx,eg,avgmu);
   }// Loose
   else if (pidname == "LHVLoose") {
-    passTool = (bool) m_electronOnlLHTool[3]->accept(ctx, eg,avgmu);
+    passTool = (bool)m_electronOnlLHTool[3]->accept(ctx,eg,avgmu);
   }// VeryLoose
   else {
     ATH_MSG_DEBUG("No Pid tool, continue without PID");
@@ -189,7 +190,6 @@ bool TrigEgammaEFElectronSelectorTool::ApplyIsolation(const xAOD::Electron *el,
     ATH_MSG_DEBUG("No Isolation tool, continue without ISO");
     return true;
   }
-  
 
   if (!status)
     ATH_MSG_WARNING("Problem to emulate the isolation selector.");
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFPhotonSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFPhotonSelectorTool.cxx
index 842250076386..bab501ff6743 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFPhotonSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFPhotonSelectorTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 /**********************************************************************
  * AsgTool: TrigEgammaEFPhotonSelectorTool
@@ -12,11 +12,10 @@
  *
  **********************************************************************/
 #include "TrigEgammaEmulationTool/TrigEgammaEFPhotonSelectorTool.h"
-#include "PATCore/AcceptData.h"
 #include <boost/foreach.hpp>
 #include <boost/tokenizer.hpp>
 #include "boost/algorithm/string.hpp"
-
+#include "PATCore/AcceptData.h"
 using namespace std;
 using namespace Trig;
 //**********************************************************************
@@ -82,14 +81,17 @@ bool TrigEgammaEFPhotonSelectorTool::ApplyPhotonPid(const xAOD::Photon *eg, cons
   bool passTool=false;
   bool passSel=false;
   eg->passSelection(passSel,pidname);
+  //If Alg becomes Reentrant this needs to change
+  const EventContext ctx = Gaudi::Hive::currentContext();
+  
   if (pidname == "Tight") {
-    passTool = (bool) m_photonOnlIsEMTool[0]->accept(eg);
+    passTool = (bool)m_photonOnlIsEMTool[0]->accept(ctx,eg);
   }
   else if (pidname == "Medium") {
-    passTool = (bool) m_photonOnlIsEMTool[1]->accept(eg);
+    passTool = (bool)m_photonOnlIsEMTool[1]->accept(ctx,eg);
   }
   else if (pidname == "Loose") {
-    passTool = (bool) m_photonOnlIsEMTool[2]->accept(eg);
+    passTool = (bool)m_photonOnlIsEMTool[2]->accept(ctx,eg);
   }
   else {
     ATH_MSG_DEBUG("No Pid tool, continue without PID");
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEmulationTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEmulationTool.cxx
index ada6347b3556..421d8e0cee07 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEmulationTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEmulationTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 /**********************************************************************
@@ -57,9 +57,11 @@ TrigEgammaEmulationTool( const std::string& myname )
     declareProperty("EFCaloSelectorTool"      , m_efCaloSelector          );
     declareProperty("EFElectronSelectorTools" , m_efElectronSelector      );
     declareProperty("EFPhotonSelectorTools"   , m_efPhotonSelector        );
+
     // for expert: use this flags to switch and custo your menu
     declareProperty("DoL2ElectronFex"         , m_doL2ElectronFex=false   );
     declareProperty("DoRinger"                , m_doRinger=false          );
+    declareProperty("DoRingerBelow15GeV"      , m_doRingerBelow15GeV=false);
     declareProperty("DoEFCaloPid"             , m_doEFCaloPid=false       );
 
 
@@ -75,7 +77,7 @@ TrigEgammaEmulationTool( const std::string& myname )
     m_emTauRois      =nullptr;
     m_storeGate      =nullptr;
     m_l1Cont         =nullptr;
-    
+
     // just for compile
     HLT::TriggerElement* t = nullptr;
     const xAOD::TrigElectronContainer* a = getFeature<xAOD::TrigElectronContainer>(t);
@@ -96,8 +98,8 @@ StatusCode TrigEgammaEmulationTool::initialize() {
     if ( (m_trigdec.retrieve()).isFailure() ){
       ATH_MSG_ERROR("Could not retrieve Trigger Decision Tool! Can't work");
       return StatusCode::FAILURE;
-    }    
-    
+    }
+
     ATH_MSG_INFO("Initialising Selectors tool...");
     //Enable expert methods
     m_trigdec->ExperimentalAndExpertMethods()->enable();
@@ -111,7 +113,7 @@ StatusCode TrigEgammaEmulationTool::initialize() {
         return sc;
       }
     }
-    
+
     ATH_MSG_INFO("Initialising L2 Selectors tool...");
     if(m_l2Selector){
       m_l2Selector->setParents(m_trigdec, m_storeGate);
@@ -121,7 +123,7 @@ StatusCode TrigEgammaEmulationTool::initialize() {
         return sc;
       }
     }
-    
+
     ATH_MSG_INFO("Initialising EFCalo Selectors tool...");
     if(m_efCaloSelector){
       m_efCaloSelector->setParents(m_trigdec, m_storeGate);
@@ -151,16 +153,18 @@ StatusCode TrigEgammaEmulationTool::initialize() {
         return sc;
       }
     }
-   
+
     ATH_MSG_INFO("Initialising accept...");
-    //add cuts into AcceptInfo
+    //add cuts into TAccept
     m_accept.addCut("L1Calo"  , "Trigger L1Calo step"     );
     m_accept.addCut("L2Calo"  , "Trigger L2Calo step"     );
     m_accept.addCut("L2"      , "Trigger L2Electron step" );
     m_accept.addCut("EFCalo"  , "Trigger EFCalo step"     );
     m_accept.addCut("EFTrack" , "Trigger EFTrack step"    );
     m_accept.addCut("HLT"     , "Trigger HLT decision"    );
-     
+    m_accept.addCut("L1_matched"  , "L1 Trigger object Matched"                                   );
+    m_accept.addCut("TE_full"     , "The Trigger Element has all objects needed by the emulation"  );
+ 
     ATH_MSG_INFO("Initialising trigMap...");
     auto trigList = m_trigList;
 
@@ -173,8 +177,16 @@ StatusCode TrigEgammaEmulationTool::initialize() {
     }//Loop over trigger list
 
     ATH_MSG_INFO("Initialising supporting trigger...");
-    std::vector<std::string> chains  = m_trigdec->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
+
     std::vector<std::string> supportingTrigList;
+    auto chains = m_trigdec->getListOfTriggers("HLT_e.*");
+
+
+    ATH_MSG_INFO("Supporting trigger before cleaner...");
+    for(const auto trigName:m_supportingTrigList){
+      ATH_MSG_INFO("    Suppot: " << trigName);
+    }
+
     // All support triggers must be inside of the xaod
     for(const auto trigName:m_supportingTrigList){
       if (std::find(chains.begin(), chains.end(), trigName) != chains.end()){
@@ -183,11 +195,23 @@ StatusCode TrigEgammaEmulationTool::initialize() {
           supportingTrigList.push_back(trigName);
           setTrigInfo(trigName);
         }
+        // To avoid that loose some chain in support trigger list
+        else{
+          supportingTrigList.push_back(trigName);
+        }
       }
-    } 
+    }
+
     // Overwrite all support list
     m_supportingTrigList.clear();
     m_supportingTrigList.insert(m_supportingTrigList.end(), supportingTrigList.begin(), supportingTrigList.end());
+
+    ATH_MSG_INFO("Supporting trigger after cleaner...");
+    for(const auto trigName:m_supportingTrigList){
+      ATH_MSG_INFO("    Suppot: " << trigName);
+    }
+
+
     return sc;
 }
 //!==========================================================================
@@ -205,7 +229,7 @@ StatusCode TrigEgammaEmulationTool::finalize() {
         return sc;
       }
     }
-    
+
     if(m_l2Selector){
       sc = m_l2Selector->finalize();
       if(sc.isFailure()){
@@ -213,7 +237,7 @@ StatusCode TrigEgammaEmulationTool::finalize() {
         return sc;
       }
     }
-    
+
     if(m_efCaloSelector){
       sc = m_efCaloSelector->finalize();
       if(sc.isFailure()){
@@ -297,32 +321,42 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
   if(m_trigInfo.count(trigger) != 0){
 
     Trig::Info info     = getTrigInfo(trigger);
-    bool passedL1Calo = false;  
-    bool passedL2Calo = false; 
+    bool passedL1Calo = false;
+    bool passedL2Calo = false;
     bool passedL2     = false;
-    bool passedEFCalo = false; 
-    bool passedEFTrack= false; 
+    bool passedEFCalo = false;
+    bool passedEFTrack= false;
     bool passedHLT    = false;
 
     // Trigger Element holder
     const HLT::TriggerElement *te=nullptr;
     bool isGoodToGo=false;
+
+    // Here, if the te_external does not have the Electron object means that this te is not completed.
+    // We need to match objects with this RoI to complete the chain.
     if(!getFeature<xAOD::ElectronContainer>(te_external)){
+
       const auto* l1 = getFeature<xAOD::EmTauRoI>(te_external);
-      if(!l1){
+      if(!l1){// Its not possible to match because this TE does not have EmTauRoI, abort
         ATH_MSG_WARNING("Can not retrieve the support element because the current TE does not has xAOD::EmTauRoI object!");
         return acceptData;
       }
+
+      // There is L1 object in this RoI
+      acceptData.setCutResult("L1_matched", true);
+
       // This object is not fully completed, try to found other.
       for (const auto &fctrigger : m_supportingTrigList){
+        ATH_MSG_DEBUG("Searching for EL objects in "<< fctrigger);
         // Retrieve all trigger elements for this fctrigger
         auto fc = m_trigdec->features(fctrigger, TrigDefs::alsoDeactivateTEs);
         // Only TEs with all objects
         auto vec = fc.get<xAOD::ElectronContainer>();
         // Try to match by roiword
-
+        ATH_MSG_DEBUG("VEC SIZE IS "<< vec.size());
         for(const auto &feat : vec){
           if(l1->roiWord() == getFeature<xAOD::EmTauRoI>(feat.te())->roiWord()){
+            ATH_MSG_DEBUG("Searching for EL objects in "<< fctrigger << ": FOUND");
             te = feat.te();
             isGoodToGo=true;
             break;
@@ -330,9 +364,10 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
         }// Loop over Trigger elements
         if(isGoodToGo)
           break;
-      }// Loop over support trigger 
+      }// Loop over support trigger
     }else{
       // The current TE has all objects needed by the emulation
+      acceptData.setCutResult("L1_matched", true);
       isGoodToGo=true;
       te=te_external;
       setTEMatched(te);
@@ -345,7 +380,7 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
         setTEMatched(te);
       }else{
         ATH_MSG_WARNING("This Trigger Element does not have all features needed by the emulation tool. The external match is " <<
-                     " not possible! Maybe the support trigger list not attend all requirements."); 
+                     " not possible! Maybe the support trigger list not attend all requirements.");
         setTEMatched(nullptr);
         return acceptData;
       }
@@ -355,6 +390,9 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
 
     ATH_MSG_DEBUG("getFeatures from TE...");
 
+    // The TE has RoI and now have all objects needed by the emulatio.
+    acceptData.setCutResult("TE_full", true);
+
     const auto* l1            = getFeature<xAOD::EmTauRoI>(te);
     const auto* emCluster     = getFeature<xAOD::TrigEMCluster>(te);
     const auto* trigElCont    = getFeature<xAOD::TrigElectronContainer>(te);
@@ -363,12 +401,13 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
     //const auto* phCont        = getFeature<xAOD::PhotonContainer>(te);
 
     if(elCont){
-      for(auto& tool : m_efElectronSelector) 
+      for(auto& tool : m_efElectronSelector)
         tool->setTe(te); //Must be passed to config track isolation
     }
 
-    //Level 1
+    // Level 1
     m_l1Selector->emulation( l1, passedL1Calo , info);
+    // passedL1Calo = ancestorPassed<xAOD::EmTauRoI>(te_external);
     acceptData.setCutResult("L1Calo", passedL1Calo);
 
     if( (passedL1Calo ) && !info.isL1 ){
@@ -399,7 +438,7 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
         if (passedL2){
           m_efCaloSelector->emulation( elCont, passedEFCalo, info);
           acceptData.setCutResult("EFCalo", passedEFCalo);
-          
+
           if(passedEFCalo){
             passedEFTrack=true;
             acceptData.setCutResult("EFTrack"    , passedEFTrack);
@@ -412,7 +451,7 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
                 acceptData.setCutResult("HLT"    , passedHLT);
               }
             }//EFTrack
-          }//EFCalo 
+          }//EFCalo
         }//L2
       }//L2Calo
     }//L1Calo
@@ -427,14 +466,14 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const HLT::TriggerElement *
 asg::AcceptData TrigEgammaEmulationTool::executeTool(const std::string &trigger) {
   clearDecorations();
   asg::AcceptData acceptData (&m_accept);
-  
+
   if( m_trigInfo.count(trigger) != 0){
     Trig::Info info     = getTrigInfo(trigger);
-    bool passedL1Calo = false;  
-    bool passedL2Calo = false; 
+    bool passedL1Calo = false;
+    bool passedL2Calo = false;
     bool passedL2     = false;
-    bool passedEFCalo = false; 
-    bool passedEFTrack= false; 
+    bool passedEFCalo = false;
+    bool passedEFTrack= false;
     bool passedHLT    = false;
 
     boost::dynamic_bitset<> bitL1Accept(m_emTauRois->size());
@@ -458,10 +497,10 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const std::string &trigger)
         bitL2CaloAccept.set(bit, pass);
         bit++;
       }
-  
+
       if(bitL2CaloAccept.count()>0)  passedL2Calo=true;
       acceptData.setCutResult("L2Calo", passedL2Calo);
-      
+
       if(passedL2Calo) {
         if(info.perf){//bypass L2 Electron/Photon Level
           passedL2=true;
@@ -486,12 +525,12 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const std::string &trigger)
 
           m_efCaloSelector->emulation(m_onlElectrons, passedEFCalo, info);
           acceptData.setCutResult("EFCalo", passedEFCalo);
-          
+
           if(passedEFCalo){
             //TODO: running the EF track step
             passedEFTrack=true;
             acceptData.setCutResult("EFTrack", passedEFTrack);
-            
+
             if(passedEFTrack){
               if(!emulationHLT(m_onlElectrons, passedHLT, info)){
                 acceptData.clear();
@@ -501,7 +540,7 @@ asg::AcceptData TrigEgammaEmulationTool::executeTool(const std::string &trigger)
               }
             }//EFTrack
 
-          }//EFCalo 
+          }//EFCalo
         }//L2
       }//L2Calo
     }//L1Calo
@@ -544,7 +583,7 @@ bool TrigEgammaEmulationTool::isPassed(const std::string &trigger, const std::st
     ATH_MSG_DEBUG("isPassed()::L2     = " << acceptData.getCutResult("L2"));
     ATH_MSG_DEBUG("isPassed()::EFCalo = " << acceptData.getCutResult("EFCalo"));
     ATH_MSG_DEBUG("isPassed()::EFTrack= " << acceptData.getCutResult("EFTrack"));
-    ATH_MSG_DEBUG("isPassed()::HLT    = " << acceptData.getCutResult("HLT")); 
+    ATH_MSG_DEBUG("isPassed()::HLT    = " << acceptData.getCutResult("HLT"));
   }
   bool pass=false;
   if(bitAccept.count()>0)  pass=true;
@@ -565,7 +604,7 @@ void TrigEgammaEmulationTool::clearDecorations(){
 
 //!==========================================================================
 bool TrigEgammaEmulationTool::emulationHLT(const xAOD::IParticleContainer *container, bool &pass, const Trig::Info &info){
- 
+
   if(info.type == "electron"){
     for( auto& tool : m_efElectronSelector){
       if( tool->emulation(container, pass, info) )
@@ -583,6 +622,23 @@ bool TrigEgammaEmulationTool::emulationHLT(const xAOD::IParticleContainer *conta
   return true;
 }
 
+bool TrigEgammaEmulationTool::emulationL2Calo(const xAOD::TrigEMCluster *emCluster, std::string pidname)
+{
+  bool pass=false;
+  Trig::Info info;
+  info.ringer=false;
+  info.etcut=false;
+  info.perf = false;
+  info.hltcalo=false;
+  info.idperf=false;
+  info.thrL2Calo=0.0;
+  info.thrHLT=emCluster->et()*1e-3;
+  info.pidname=pidname;
+  m_l2Selector->emulation(emCluster, pass, info);
+  return pass;
+}
+  
+ 
 //!==========================================================================
 void TrigEgammaEmulationTool::setTrigInfo(const std::string trigger){
   ATH_MSG_DEBUG("setTrigInfo::trigger = "<< trigger);
@@ -603,19 +659,23 @@ void TrigEgammaEmulationTool::setTrigInfo(const std::string trigger){
   parseTriggerName(trigger,"Loose",isL1,type,etthr,l1thr,l1type,l1item,pidname,etcut,perf); // Determines probe PID from trigger
 
 
-  std::string decorator="is"+pidname; 
+  std::string decorator="is"+pidname;
   // isolation types
-  if (boost::contains(trigger,"iloose") || boost::contains(trigger, "ivarloose") || 
-      boost::contains(trigger,"ivarmedium") || boost::contains(trigger, "ivartight") || 
+  if (boost::contains(trigger,"iloose") || boost::contains(trigger, "ivarloose") ||
+      boost::contains(trigger,"ivarmedium") || boost::contains(trigger, "ivartight") ||
       boost::contains(trigger,"icaloloose") || boost::contains(trigger, "icalomedium") ||
       boost::contains(trigger,"icalotight") ) isolation = true;
   if (boost::contains(trigger,"idperf") ) idperf    = true;
   if (boost::contains(trigger,"HLTCalo")) hltcalo   = true;
-  
+
   // Apply L2Calo ringer?
-  if (boost::contains(trigger,"noringer") ) 
+  if (boost::contains(trigger,"noringer") )
     ringer = false;
-  else if ( boost::contains(trigger,"ringer") || m_doRinger) 
+  else if ( boost::contains(trigger,"ringer") )
+    ringer = true;
+  else if ( etthr >= 15.0 && m_doRinger )
+    ringer = true;
+  else if ( etthr < 15.0 && m_doRinger && m_doRingerBelow15GeV )
     ringer = true;
   else
     ringer  =false;
@@ -634,7 +694,7 @@ void TrigEgammaEmulationTool::setTrigInfo(const std::string trigger){
   if(isL1) etthr=l1thr; // Should be handled elsewhere
   std::string strEtthr = boost::lexical_cast<std::string>(etthr);
   Trig::Info info{trigger,type,strEtthr,l1item,l1type,pidname,decorator,lhinfo,isolation,isL1,perf,
-    idperf,hltcalo,ringer,etcut,m_doL2ElectronFex,m_doEFCaloPid,etthr,l1thr};
+    idperf,hltcalo,ringer,etcut,m_doL2ElectronFex,m_doEFCaloPid,etthr,l1thr,etthr};
   m_trigInfo.insert(std::pair<std::string,Trig::Info>(trigger, info));
   ATH_MSG_DEBUG("Inserting trigger: " << trigger << ", completed.");
 }
@@ -703,7 +763,7 @@ void TrigEgammaEmulationTool::parseTriggerName(const std::string trigger, std::s
 
       //Get the L1 information
       if(!boost::contains(strs.back(),"L1"))  strs.push_back(l1item);
-      
+
 
       if(boost::contains(strs.back(),"L1")){
         std::string l1info = strs.back();
@@ -731,7 +791,7 @@ std::string TrigEgammaEmulationTool::getL1Item(std::string trigger){
     std::string L1_seed = "";
     if(trig_conf != nullptr){
         ATH_MSG_DEBUG("TrigConf available");
-        L1_seed = trig_conf->lower_chain_name(); //L1 trigger seed             
+        L1_seed = trig_conf->lower_chain_name(); //L1 trigger seed
         boost::replace_all( L1_seed, "_", "" );
     }else{
       ATH_MSG_WARNING("There is no L1 Seed for this trigger "<< trigger);
@@ -767,17 +827,26 @@ void TrigEgammaEmulationTool::match(const xAOD::Egamma *el,  const  HLT::Trigger
   unsigned nobj1,nobj2;
   nobj1=nobj2=0;
 
+
   for(auto& trigItem : m_supportingTrigList){
     // Trigger match using Matching tool
     m_matchTool->match(el, trigItem, feat);
     if(feat){// If has a match!
+
+      ATH_MSG_DEBUG("AKI, match with " << trigItem );
+
       if(te_external){
         nobj2=0;
         if(getFeature<xAOD::ElectronContainer>(feat)    ) nobj2++; // HLT
+        ATH_MSG_DEBUG("Electron " << nobj2);
         if(getFeature<xAOD::CaloClusterContainer>(feat) ) nobj2++; // EFCalo
+        ATH_MSG_DEBUG("Calo " << nobj2);
         if(getFeature<xAOD::TrigElectronContainer>(feat)) nobj2++; // L2
+        ATH_MSG_DEBUG("TrigElectron " << nobj2);
         if(getFeature<xAOD::TrigEMCluster>(feat)        ) nobj2++; // L2Calo
+        ATH_MSG_DEBUG("Cluster " << nobj2);
         if(getFeature<xAOD::EmTauRoI>(feat)             ) nobj2++; // L2Calo
+        ATH_MSG_DEBUG("L1 " << nobj2);
         if(nobj2>nobj1){
           te_external=feat;
           nobj1=nobj2;
@@ -785,15 +854,20 @@ void TrigEgammaEmulationTool::match(const xAOD::Egamma *el,  const  HLT::Trigger
         //ATH_MSG_INFO("ET  = " << getFeature<xAOD::TrigEMCluster>(te_external)->et());
       }else{
         if(getFeature<xAOD::ElectronContainer>(feat)    ) nobj1++; // HLT
+        ATH_MSG_DEBUG("Electron " << nobj1);
         if(getFeature<xAOD::CaloClusterContainer>(feat) ) nobj1++; // EFCalo
+        ATH_MSG_DEBUG("Calo " << nobj1);
         if(getFeature<xAOD::TrigElectronContainer>(feat)) nobj1++; // L2
+        ATH_MSG_DEBUG("TrigElectron " << nobj1);
         if(getFeature<xAOD::TrigEMCluster>(feat)        ) nobj1++; // L2Calo
+        ATH_MSG_DEBUG("Cluster " << nobj1);
         if(getFeature<xAOD::EmTauRoI>(feat)             ) nobj1++; // L2Calo
+        ATH_MSG_DEBUG("L1 " << nobj1);
         te_external=feat;
       }
 
     }
-    ATH_MSG_DEBUG("Electron with ET = " << el->pt()*1e-3 << " GeV match with " << trigItem 
+    ATH_MSG_DEBUG("Electron with ET = " << el->pt()*1e-3 << " GeV match with " << trigItem
                   << " is good? " << (te_external?"yes":"no") << " and has " << nobj1 << " features.");
 
     // All objects is needed
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
index eb83a570723f..f86173461940 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 /**********************************************************************
@@ -105,10 +105,10 @@ StatusCode TrigEgammaIsolationSelectorTool::initialize() {
   if (!m_trackIsolationTool.empty()){       
       ATH_MSG_DEBUG("Retrieve TrackIsolationTool");
       if(m_trackIsolationTool.retrieve().isFailure()){
-	  ATH_MSG_ERROR("Unable to retrieve " << m_trackIsolationTool);
-	  return StatusCode::FAILURE;
+    ATH_MSG_ERROR("Unable to retrieve " << m_trackIsolationTool);
+    return StatusCode::FAILURE;
       } else {      
-	  ATH_MSG_DEBUG("Retrieved Tool "<<m_trackIsolationTool);
+    ATH_MSG_DEBUG("Retrieved Tool "<<m_trackIsolationTool);
       }         
   }
 
@@ -149,7 +149,7 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
   //}
 
   // Declare vectors of isolation variables for different cone sizes
-  std::vector<float>  EtCone, PtCone_xAOD, PtCone, recalc_PtCone, recalc_PtVarCone, PtCone_recalculated; //, PtCone_recalculated_fixed;
+  std::vector<float>  EtCone, PtCone_xAOD, PtCone, _m_PtCone, _m_PtVarCone, PtCone_recalculated; //, PtCone_recalculated_fixed;
   float val=-99;
   el->isolationValue(val,xAOD::Iso::etcone20);
   //ATH_MSG_DEBUG("el->isolationValue(val,xAOD::Iso::etcone20) = " << val);
@@ -205,8 +205,8 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
   //const ElementLink< TrackParticleContainer* > link  =  el->trackParticleLink( /*0 this is the index of trackparticle*/ );
   //then I think it is 
   // std::str ld = link.dataID();
-  std::string trk_container =  el->trackParticleLink().dataID();
-  ATH_MSG_DEBUG("TRacks linked to " <<  trk_container << " container"); 
+  std::string m_trk_container =  el->trackParticleLink().dataID();
+  ATH_MSG_DEBUG("TRacks linked to " <<  m_trk_container << " container"); 
   ////that @brief Return the SG key that we reference, as a string.
   //
   const std::set<const xAOD::TrackParticle*> tracksToExclude = xAOD::EgammaHelpers::getTrackParticles(el, false);
@@ -216,37 +216,37 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
 
   const xAOD::TrackParticleContainer *TrackParticleContainer=0;
 
-  if ( (m_storeGate->retrieve(TrackParticleContainer,trk_container)).isFailure() ){
+  if ( (m_storeGate->retrieve(TrackParticleContainer,m_trk_container)).isFailure() ){
       ATH_MSG_ERROR("Failed to retrieve EF ID trackParticles ");
       return false;
   } else {
-      ATH_MSG_DEBUG("Retrieved EF ID trackParticles "  << trk_container << " of size " << TrackParticleContainer->size());
+      ATH_MSG_DEBUG("Retrieved EF ID trackParticles "  << m_trk_container << " of size " << TrackParticleContainer->size());
   }
 
   std::vector<const xAOD::TrackParticleContainer*> vectorTrackParticleContainer;
   vectorTrackParticleContainer.push_back(TrackParticleContainer);
 
   xAOD::TrackIsolation result;
-  recalc_PtCone.clear();
-  recalc_PtVarCone.clear();
+  _m_PtCone.clear();
+  _m_PtVarCone.clear();
   if(m_trackIsolationTool->trackIsolation(result, *el, isoTypes, corrlist, leadTrkVtx, &tracksToExclude, TrackParticleContainer)){
       for(unsigned int i=0; i<isoTypes.size(); i++){
-	  recalc_PtCone.push_back(result.ptcones[i]);
-	  recalc_PtVarCone.push_back(result.ptvarcones_10GeVDivPt[i]);
+    _m_PtCone.push_back(result.ptcones[i]);
+    _m_PtVarCone.push_back(result.ptvarcones_10GeVDivPt[i]);
       }
   } else {
       ATH_MSG_ERROR("Hey!!!! Something wrong! Couldn't run TrackIsolationTool " << m_trackIsolationTool);
   }
 
 
-  // So recalc_PtCone has the result of ptcone40,30,20 and recalc_PtVarCone result of ptvarcone40,30,20 (requested in this order by the tool). So lets build PtCone_recalculated to have (as PtCone) results of ptcone20 30 40 and ptvarcone20 30 40
+  // So _m_PtCone has the result of ptcone40,30,20 and _m_PtVarCone result of ptvarcone40,30,20 (requested in this order by the tool). So lets build PtCone_recalculated to have (as PtCone) results of ptcone20 30 40 and ptvarcone20 30 40
 
-  PtCone_recalculated.push_back( recalc_PtCone[2]    );
-  PtCone_recalculated.push_back( recalc_PtCone[1]    );
-  PtCone_recalculated.push_back( recalc_PtCone[0]    );
-  PtCone_recalculated.push_back( recalc_PtVarCone[2] );
-  PtCone_recalculated.push_back( recalc_PtVarCone[1] );
-  PtCone_recalculated.push_back( recalc_PtVarCone[0] );
+  PtCone_recalculated.push_back( _m_PtCone[2]    );
+  PtCone_recalculated.push_back( _m_PtCone[1]    );
+  PtCone_recalculated.push_back( _m_PtCone[0]    );
+  PtCone_recalculated.push_back( _m_PtVarCone[2] );
+  PtCone_recalculated.push_back( _m_PtVarCone[1] );
+  PtCone_recalculated.push_back( _m_PtVarCone[0] );
 
   if (m_useTrackIsolationTool){
       // If we decide to use rRackIsolation Tool then instead of stored ptCone we will use this recalculated
@@ -411,4 +411,3 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
   return true;
 }
 
-
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL1SelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL1SelectorTool.cxx
index a360862f2f80..277d26062fca 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL1SelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL1SelectorTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 /**********************************************************************
  * AsgTool: TrigEgammaL1SelectorTool
@@ -26,15 +26,14 @@ TrigEgammaL1SelectorTool( const std::string& myname )
     : TrigEgammaSelectorBaseTool(myname)
 {
   // L1 configuration parameters
-  declareProperty( "WPNames"      ,  m_wpNames         ); // must be: ["T","M","L"] (Tight,Medium and Loose)
-  declareProperty( "HadCoreCutMin",  m_hadCoreCutMin   ); // must be a list with for values: (default,tight,medium and loose)
-  declareProperty( "HadCoreCutOff",  m_hadCoreCutOff   );
-  declareProperty( "HadCoreSlope" ,  m_hadCoreSlope    );
-  declareProperty( "EmIsolCutMin" ,  m_emIsolCutMin    );
-  declareProperty( "EmIsolCutOff" ,  m_emIsolCutOff    );
-  declareProperty( "EmIsolSlope"  ,  m_emIsolCutSlope  );
-  declareProperty( "IsolCutMax"   ,  m_isolMaxCut = 50 );
-
+  declareProperty( "WPNames"      ,  m_wpNames            ); // must be: ["T","M","L"] (Tight,Medium and Loose)
+  declareProperty( "HadCoreCutMin",  m_hadCoreCutMin      ); // must be a list with for values: (default,tight,medium and loose)
+  declareProperty( "HadCoreCutOff",  m_hadCoreCutOff      );
+  declareProperty( "HadCoreSlope" ,  m_hadCoreSlope       );
+  declareProperty( "EmIsolCutMin" ,  m_emIsolCutMin       );
+  declareProperty( "EmIsolCutOff" ,  m_emIsolCutOff       );
+  declareProperty( "EmIsolSlope"  ,  m_emIsolCutSlope     );
+  declareProperty( "IsolCutMax"   ,  m_isolMaxCut = 50    );
 }
 //**********************************************************************
 StatusCode TrigEgammaL1SelectorTool::initialize() {
@@ -61,6 +60,8 @@ bool TrigEgammaL1SelectorTool::emulation( const xAOD::EmTauRoI* l1, bool &pass,
     return false;
   }
 
+
+
   //Retrieve L1 informations
   std::string l1type = info.L1Type;
   std::string L1Item = info.L1Item;
@@ -70,6 +71,8 @@ bool TrigEgammaL1SelectorTool::emulation( const xAOD::EmTauRoI* l1, bool &pass,
   ATH_MSG_DEBUG("L1 type        = " << l1type);
   ATH_MSG_DEBUG("L1 Item        = " << L1Item);
   
+
+ 
   unsigned c=0;
   if(boost::contains(l1type,m_wpNames[0]))  c=1; // Tight
   if(boost::contains(l1type,m_wpNames[1]))  c=2; // Medium
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL2CaloRingerSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL2CaloRingerSelectorTool.cxx
index e4fb9df3e559..e6ec98c95d39 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL2CaloRingerSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaL2CaloRingerSelectorTool.cxx
@@ -26,11 +26,8 @@ using namespace Trig;
 TrigEgammaL2CaloRingerSelectorTool::
 TrigEgammaL2CaloRingerSelectorTool( const std::string& myname )
     : TrigEgammaSelectorBaseTool(myname),
-      m_reader("TrigCaloRingerReader")
+      m_selectorTool()
 {
-  declareProperty("NormalisationRings", m_normRings                           );
-  declareProperty("SectionRings"      , m_sectionRings                        );
-  declareProperty("NRings"            , m_nRings                              );
   declareProperty("CalibPathConstants", m_calibPath_constants=""              );
   declareProperty("CalibPathThresholds", m_calibPath_thresholds=""            );
 
@@ -47,76 +44,19 @@ StatusCode TrigEgammaL2CaloRingerSelectorTool::initialize() {
     ATH_MSG_WARNING("TrigEgammaSelectorBaseTool::initialize() failed");
     return StatusCode::FAILURE;
   }
+  m_selectorTool.setConstantsCalibPath( m_calibPath_constants ); 
+  m_selectorTool.setThresholdsCalibPath( m_calibPath_thresholds ); 
 
-  if(!m_calibPath_thresholds.empty()){
-    if(!m_reader.retrieve(m_calibPath_thresholds, m_cutDefs)){
-      ATH_MSG_ERROR("Can not retrieve the information from " << m_calibPath_thresholds);
-      return StatusCode::FAILURE;
-    }
-    // retrieve metadata
-    m_useNoActivationFunctionInTheLastLayer = m_reader.useNoActivationFunctionInTheLastLayer();
-    m_doPileupCorrection = m_reader.doPileupCorrection();
-    m_lumiCut  = m_reader.lumiCut();
-  }
-
-  // Retrieve the NeuralNetwork list
-  if(!m_calibPath_constants.empty()){
-    if(!m_reader.retrieve(m_calibPath_constants, m_discriminators)){
-      ATH_MSG_ERROR("Can not retrieve all information from " << m_calibPath_constants);
-      return StatusCode::FAILURE;
-    }
-    m_useLumiVar = m_reader.useLumiVar();
-    m_useEtaVar  = m_reader.useEtaVar();
-  }
-
-  if(m_nRings.size() != m_normRings.size()){
-    ATH_MSG_ERROR("Preproc nRings list dont match with the number of discriminators found");
+  if(!m_selectorTool.initialize())
     return StatusCode::FAILURE;
-  }
-
-  if(m_sectionRings.size() != m_normRings.size()){
-    ATH_MSG_ERROR("Preproc section rings list dont match with the number of discriminators found");
-    return StatusCode::FAILURE;
-  }
-
-  ///TODO: This is default for now, apply this into the conf file for future
-  ///Initialize all discriminators
-  for(unsigned i=0; i<m_discriminators.size(); ++i)
-  {
-    TrigRingerPreprocessor *preproc;
-    try{
-      preproc = new TrigRingerPreprocessor(m_nRings,m_normRings,m_sectionRings);
-    }catch(const std::bad_alloc& xa){
-      ATH_MSG_ERROR( "Bad alloc for TrigRingerPrepoc." );
-      return StatusCode::FAILURE;
-    }
-    ///Hold the pointer configuration
-    m_preproc.push_back(preproc);
-  }///Loop over discriminators
   
-
-  ATH_MSG_INFO("Using the Luminosity tool? " <<  (m_useLumiTool ? "Yes":"No") );
-  ATH_MSG_INFO("Using lumiVar?             " <<  (m_useLumiVar ? "Yes":"No") );
-  ATH_MSG_INFO("Using etaVar?              " <<  (m_useEtaVar ? "Yes":"No") );
-  ATH_MSG_INFO("Using the activation function in the last layer? " <<  (m_useNoActivationFunctionInTheLastLayer ? "No":"Yes") );
-  ATH_MSG_INFO("Using the Correction?                            " <<  (m_doPileupCorrection ? "Yes":"No") );
-  ATH_MSG_INFO("Using lumi threshold equal: "  <<  m_lumiCut);
-  ATH_MSG_INFO("TrigL2CaloRingerHypo initialization completed successfully." );
+ 
   return StatusCode::SUCCESS;
 }
 
 //!==========================================================================
 StatusCode TrigEgammaL2CaloRingerSelectorTool::finalize() {
   
-  //release memory
-  for(unsigned i=0; i<m_discriminators.size();++i){
-    if(m_preproc.at(i))         delete m_preproc.at(i);
-    if(m_discriminators.at(i))  delete m_discriminators.at(i);
-  }//Loop over all discriminators and prepoc objects
-
-  for(unsigned i=0; i < m_cutDefs.size();++i){
-    if(m_cutDefs.at(i))         delete m_cutDefs.at(i);
-  }//Loop over all cutDefs objects
 
   ATH_MSG_DEBUG("TrigL2CaloRingerHypo finalization completed successfully.");
   return StatusCode::SUCCESS;
@@ -147,9 +87,6 @@ bool TrigEgammaL2CaloRingerSelectorTool::emulation(const xAOD::TrigEMCluster* em
 
 
   ///It's ready to select the correct eta/et bin
-  MultiLayerPerceptron    *discr  = nullptr;
-  TrigRingerPreprocessor  *preproc = nullptr;
-
   float eta = std::fabs(emCluster->eta());
   if(eta>2.50) eta=2.50;///fix for events out of the ranger
   float et  = emCluster->et()*1e-3; ///in GeV
@@ -159,86 +96,20 @@ bool TrigEgammaL2CaloRingerSelectorTool::emulation(const xAOD::TrigEMCluster* em
     ATH_MSG_DEBUG("Event reproved by Et threshold. Et = " << et << ", EtCut = "<< m_etCut);
     return true;
   }
+  auto avgmu = getOnlAverageMu();
+  
+  const std::vector<float> rings = ringer->rings();
+  std::vector<float> refRings(rings.size());
+  refRings.assign(rings.begin(), rings.end());
+  
+
+  m_output = m_selectorTool.calculate( refRings, et, eta, avgmu );
+  pass = m_selectorTool.accept(m_output, et,eta,avgmu);
+  
+  emCluster->auxdecor<float>("TrigEgammaL2CaloRingerSelectorTool_rnnOutput")=m_output;
 
-  if(m_discriminators.size() > 0){
-    unsigned discr_index=0;
-    for(unsigned i=0; i<m_discriminators.size(); ++i){
-      discr_index++;
-      if(et > m_discriminators[i]->etmin() && et <= m_discriminators[i]->etmax()){
-        if(eta > m_discriminators[i]->etamin() && eta <= m_discriminators[i]->etamax()){
-          discr   = m_discriminators[i];
-          preproc = m_preproc[i];
-          break;
-        }///eta conditions
-      }///Et conditions
-    }///Loop over discriminators
-
-    ///get shape
-    const std::vector<float> rings = ringer->rings();
-    ATH_MSG_DEBUG( "ringer->rings().size() is: " <<rings.size());
-    std::vector<float> refRings(rings.size());
-    refRings.assign(rings.begin(), rings.end());
-    ATH_MSG_DEBUG("Et = " << et << " GeV, |eta| = " << eta);
-    
-    if(preproc)     preproc->ppExecute(refRings);
-    ///Apply the discriminator
-    if(discr){
-
-      float avgmu = getOnlAverageMu();
-      float threshold=0.0;
-      
-      // Add extra variables in this order! Do not change this!!!
-      if(m_useEtaVar){
-        if(preproc){
-          refRings.push_back(preproc->normalize_eta(emCluster->eta(), discr->etamin(), discr->etamax()));
-        }
-      }
-
-      if(m_useLumiVar){
-        if(preproc){
-          refRings.push_back(preproc->normalize_mu(avgmu, m_lumiCut));
-        }
-      }
-
-      m_output = discr->propagate(refRings);
-      if(m_useNoActivationFunctionInTheLastLayer){
-        // overwrite the output value to before the tansig function
-        m_output = discr->getOutputBeforeTheActivationFunction();
-      }
-
-      //Apply cut
-      for(unsigned i=0; i < m_cutDefs.size(); ++i){
-        if((et  > m_cutDefs[i]->etmin()) && (et  <= m_cutDefs[i]->etmax())){
-          if((eta > m_cutDefs[i]->etamin()) && (eta <= m_cutDefs[i]->etamax())){
-            
-            if(m_doPileupCorrection){
-              // Limited Pileup
-              if(avgmu>m_lumiCut)
-                avgmu=m_lumiCut;
-              ATH_MSG_DEBUG("Apply avgmu == " << avgmu);
-              threshold = m_cutDefs[i]->threshold(avgmu);
-              ATH_MSG_DEBUG("With correction, thr = "<<threshold);
-            }else{
-              threshold = m_cutDefs[i]->threshold();
-              ATH_MSG_DEBUG("Without correction, thr = "<<threshold);
-            }
-          }
-        }
-      }// Loop over cutDefs
-      
-      emCluster->auxdecor<float>("TrigEgammaL2CaloRingerSelectorTool_rnnOutput")=m_output;
-
-      if(m_output < threshold){
-        ATH_MSG_DEBUG("Event reproved by discriminator.");
-        return true;
-      }
-    }
-  }else{
-    ATH_MSG_DEBUG("There is no discriminator into this Fex.");
-  }//
 
   ATH_MSG_DEBUG("Et = " << et << " GeV, |eta| = " << eta << " and rnnoutput = " << m_output );
-  pass=true;
   return true;
 }
 //!===========================================================================
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaSelectorBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaSelectorBaseTool.cxx
index ad99a4a35afd..44204e010ce5 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaSelectorBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaSelectorBaseTool.cxx
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #include "TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h"
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaEmulationTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaEmulationTool.h
index 33c6287e062b..e38aab429f6a 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaEmulationTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaEmulationTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef ITrigEgammaEmulationTool_H_
@@ -52,6 +52,7 @@ namespace Trig{
             virtual void ExperimentalAndExpertMethods()=0;
             virtual void match( const xAOD::Egamma *, const HLT::TriggerElement *&)=0;
             virtual const HLT::TriggerElement* getTEMatched()=0;
+            virtual bool emulationL2Calo(const xAOD::TrigEMCluster *,  std::string)=0;
         private:
     };
 }
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h
index 295ede74a2fc..b0eef13fb15e 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef ITrigEgammaSelectorBaseTool_H_
@@ -35,7 +35,6 @@
 #include "boost/any.hpp"
 
 
-
 namespace Trig{
     class ITrigEgammaSelectorBaseTool : public virtual asg::IAsgTool {
         ASG_TOOL_INTERFACE( Trig::ITrigEgammaSelectorBaseTool )
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
index 75cb56f730c6..1a7de4802d59 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaEFCaloSelectorTool_H
@@ -10,7 +10,10 @@
 #include "TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h"
 #include "AsgTools/AsgTool.h"
 #include "EgammaAnalysisInterfaces/IAsgElectronIsEMSelector.h"
+//#include "ElectronPhotonSelectorTools/IAsgPhotonIsEMSelector.h"
 #include "EgammaAnalysisInterfaces/IAsgElectronLikelihoodTool.h"
+//#include "egammaInterfaces/IEMFourMomBuilder.h"
+//#include "egammaInterfaces/IEMShowerBuilder.h"
 #include <vector>
 
 namespace Trig{
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFElectronSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFElectronSelectorTool.h
index b7fada3b823b..1e8726c342f8 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFElectronSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFElectronSelectorTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaEFElectronSelectorTool_H
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFPhotonSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFPhotonSelectorTool.h
index 3490d2ae5e7c..1a5fe620ee25 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFPhotonSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFPhotonSelectorTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaEFPhotonSelectorTool_H
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
index 5b7432c13378..d0946b0e49cf 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaEmulationTool_H
@@ -9,8 +9,6 @@
 #include "TrigEgammaEmulationTool/ITrigEgammaEmulationTool.h"
 #include "TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h"
 #include "AsgTools/AsgTool.h"
-#include "PATCore/AcceptInfo.h"
-#include "PATCore/AcceptData.h"
 #include "AthContainers/AuxElement.h"
 #include "TrigDecisionTool/TrigDecisionTool.h"
 #include "TrigEgammaMatchingTool/ITrigEgammaMatchingTool.h"
@@ -40,28 +38,30 @@ class TrigEgammaEmulationTool
 
     //****************************************************************************** 
     TrigEgammaEmulationTool(const std::string& myname);
-    virtual ~TrigEgammaEmulationTool() {};
+    ~TrigEgammaEmulationTool() {};
 
-    virtual StatusCode initialize() override;
-    virtual StatusCode execute() override;
-    virtual StatusCode finalize() override;
+    StatusCode initialize() override;
+    StatusCode execute() override;
+    StatusCode finalize() override;
 
     //execute all emulators
-    virtual asg::AcceptData executeTool( const std::string &) override;
-    virtual asg::AcceptData executeTool( const HLT::TriggerElement *, const std::string &) override;
-    virtual const asg::AcceptInfo& getAccept() const override {return m_accept;}
-    
-    virtual bool EventWiseContainer() override;
-    virtual bool isPassed(const std::string&) override;
-    virtual bool isPassed(const std::string&, const std::string&) override;
+    asg::AcceptData executeTool( const std::string &) override;
+    asg::AcceptData executeTool( const HLT::TriggerElement *, const std::string &) override;
+    const asg::AcceptInfo& getAccept() const override{return m_accept;};
+
+    bool EventWiseContainer() override;
+    bool isPassed(const std::string&) override;
+    bool isPassed(const std::string&, const std::string&) override;
 
-    
     /* Experimental methods */
-    virtual void ExperimentalAndExpertMethods() override {m_experimentalAndExpertMethods=true;};
+    void ExperimentalAndExpertMethods() override {m_experimentalAndExpertMethods=true;};
     
-    virtual void match( const xAOD::Egamma *, const HLT::TriggerElement *&) override;
-    virtual const HLT::TriggerElement* getTEMatched() override {return m_teMatched;};
+    void match( const xAOD::Egamma *, const HLT::TriggerElement *&) override;
 
+    const HLT::TriggerElement* getTEMatched() override {return m_teMatched;};
+
+    // expert usage
+    bool emulationL2Calo(const xAOD::TrigEMCluster *emCluster,  std::string pidname) override;
 
   private:
 
@@ -71,6 +71,7 @@ class TrigEgammaEmulationTool
 
     /* Retrieve features from trigger element */ 
     template<class T> const T* getFeature(const HLT::TriggerElement* te, const std::string key="");
+    template<class T> bool ancestorPassed(const HLT::TriggerElement* te,const std::string key="");
     /* Set trigInfo into the map*/
     void setTrigInfo(const std::string );
     /*! get trigInfo obj */
@@ -88,12 +89,12 @@ class TrigEgammaEmulationTool
     bool                                          m_doL2ElectronFex;
     bool                                          m_doEFCaloPid;       
     bool                                          m_doRinger;
+    bool                                          m_doRingerBelow15GeV;
     bool                                          m_experimentalAndExpertMethods;
     std::string                                   m_offElContKey; 
     std::vector<std::string>                      m_trigList;
     std::vector<std::string>                      m_supportingTrigList;
     std::map<std::string, Trig::Info>             m_trigInfo;
-
     asg::AcceptInfo                               m_accept;
     StoreGateSvc                                 *m_storeGate;
     ToolHandle<Trig::TrigDecisionTool>            m_trigdec;
@@ -127,6 +128,17 @@ class TrigEgammaEmulationTool
           return NULL;
       return ( (m_trigdec->ancestor<T>(te)).cptr() );
   }
+
+  template<class T>
+  bool
+  TrigEgammaEmulationTool::ancestorPassed(const HLT::TriggerElement* te,const std::string key){
+      if ( te == NULL ) return false;
+      if ( (m_trigdec->ancestor<T>(te,key)).te() == NULL )
+          return false;
+      return ( (m_trigdec->ancestor<T>(te)).te()->getActiveState());
+  }
+
+
 //************************************************************************************************
 
 }//namespace
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaInfo.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaInfo.h
index 3a739a405715..05e1e7e632e0 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaInfo.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaInfo.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 #ifndef TrigEgammaEmulationTool_TrigEgammaInfo_H
 #define TrigEgammaEmulationTool_TrigEgammaInfo_H
@@ -29,7 +29,7 @@ namespace Trig{
     bool applyEFCaloPid;
     float thrHLT; // HLT Et threshold
     float thrL1; // L1 Et threshold
-  
+    float thrL2Calo; 
   };
 }
 #endif
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaIsolationSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaIsolationSelectorTool.h
index 073668a02efe..b30b78504e49 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaIsolationSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaIsolationSelectorTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaIsolationSelectorTool_H
@@ -61,3 +61,4 @@ class TrigEgammaIsolationSelectorTool:
 }//namespace
 
 #endif
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL1SelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL1SelectorTool.h
index 394b5a179c10..40b77b2c806b 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL1SelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL1SelectorTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaL1SelectorTool_H
@@ -45,7 +45,6 @@ class TrigEgammaL1SelectorTool:
     std::vector<float>        m_emIsolCutOff;
     std::vector<float>        m_emIsolCutSlope;
     std::vector<std::string>  m_wpNames;
-
 };
 
 }//namespace
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL2CaloRingerSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL2CaloRingerSelectorTool.h
index 5422c5201f8a..78c87a545fd7 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL2CaloRingerSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaL2CaloRingerSelectorTool.h
@@ -8,10 +8,7 @@
 
 #include "TrigEgammaEmulationTool/ITrigEgammaSelectorBaseTool.h"
 #include "TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h"
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-#include "TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
+#include "TrigMultiVarHypo/tools/RingerSelectorTool.h"
 #include "AsgTools/AsgTool.h"
 #include <vector>
 
@@ -33,14 +30,8 @@ class TrigEgammaL2CaloRingerSelectorTool:
     bool emulation( const xAOD::TrigEMCluster*, bool &, const Trig::Info &);
 
   private:
-    ///Thresholds Holder
-    std::vector<TrigCaloRingsHelper::CutDefsHelper*>  m_cutDefs; 
-    ///Discriminator holder
-    std::vector<MultiLayerPerceptron*>   m_discriminators;
-    ///Pre-processing holder
-    std::vector<TrigRingerPreprocessor*> m_preproc; 
 
-    TrigL2CaloRingerReader m_reader;
+    Ringer::RingerSelectorTool        m_selectorTool;
     
     /* Helper method to retrieve the bins from an index */
     //void index_to_et_eta_bins(unsigned, unsigned &, unsigned &);
@@ -55,10 +46,6 @@ class TrigEgammaL2CaloRingerSelectorTool:
     bool        m_useNoActivationFunctionInTheLastLayer;
     bool        m_useLumiTool;
 
-    //Prepoc configuration
-    std::vector<unsigned int>            m_nRings;
-    std::vector<unsigned int>            m_normRings;
-    std::vector<unsigned int>            m_sectionRings;
 
     //Discriminator configuration
     std::string m_calibPath_constants, m_calibPath_thresholds;
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h
index c7fa707f925d..d6c743d035bd 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h
@@ -1,6 +1,6 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
+ *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   */
 
 
 #ifndef TrigEgammaSelectorBaseTool_H_
@@ -22,17 +22,6 @@
 //#include "xAODCaloRings/tools/getCaloRingsDecorator.h"          //
 
 
-
-//define RINGER_OFFLINE_PACKAGES
-#ifdef RINGER_OFFLINE_PACKAGES
-//////////////////////// Ringer Offline //////////////////////////
-#include "xAODCaloRings/RingSetContainer.h"                     //
-#include "xAODCaloRings/CaloRingsContainer.h"                   //
-#include "xAODCaloRings/tools/getCaloRingsDecorator.h"          //
-//////////////////////////////////////////////////////////////////
-#endif
-
-
 namespace Trig{
   class TrigEgammaSelectorBaseTool:
     public asg::AsgTool,
@@ -43,25 +32,25 @@ namespace Trig{
 
       //using ITrigEgammaSelectorBaseTool::emulation;
       TrigEgammaSelectorBaseTool(const std::string& myname);
-      virtual ~TrigEgammaSelectorBaseTool(){;}
+      ~TrigEgammaSelectorBaseTool(){;}
 
-      virtual StatusCode initialize() override;
-      virtual StatusCode finalize() override;
+      StatusCode initialize();
+      StatusCode finalize();
 
       //FIXME: static_cast for IParticleContainer to EmTau and emCluster
       //doent work. Because this I add these extra methods. Need to check
       //how generate this for these levels.
-      virtual bool emulation(const xAOD::EmTauRoI               *, bool&, const Trig::Info &) override {return true;}
-      virtual bool emulation(const xAOD::TrigEMCluster          *, bool&, const Trig::Info &) override {return true;}
-      virtual bool emulation(const xAOD::IParticle              *, bool&, const Trig::Info &) override {return true;}
-      virtual bool emulation(const xAOD::IParticleContainer     *, bool&, const Trig::Info &) override {return true;}
+      bool emulation(const xAOD::EmTauRoI               *, bool&, const Trig::Info &){return true;};
+      bool emulation(const xAOD::TrigEMCluster          *, bool&, const Trig::Info &){return true;};
+      bool emulation(const xAOD::IParticle              *, bool&, const Trig::Info &){return true;};
+      bool emulation(const xAOD::IParticleContainer     *, bool&, const Trig::Info &){return true;};
       
       //parser TDT tool as a pointer
-      virtual void setParents(ToolHandle<Trig::TrigDecisionTool> &t, StoreGateSvc *s) override
-      { m_trigdec=&(*t); m_storeGate=s;}
-      virtual void setParents(Trig::TrigDecisionTool *t, StoreGateSvc *s) override
-      { m_trigdec=t; m_storeGate=s;}
-      virtual void setTe(const HLT::TriggerElement *te) override {m_te=te;}
+      void setParents(ToolHandle<Trig::TrigDecisionTool> &t, StoreGateSvc *s)
+      { m_trigdec=&(*t); m_storeGate=s;};
+      void setParents(Trig::TrigDecisionTool *t, StoreGateSvc *s)
+      { m_trigdec=t; m_storeGate=s;};
+      void setTe(const HLT::TriggerElement *te){m_te=te;}; 
 
     protected:
       /* dress decision */
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationEFConfig.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationEFConfig.py
index b639b090cee4..32bad9c316e8 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationEFConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationEFConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon                                                 import CfgMgr
 from AthenaCommon.AppMgr                                          import ToolSvc
@@ -17,7 +17,11 @@ ElectronPidTools()
 PhotonPidTools()
 #***********************************************************************
 
+OutputLevel=0
 
+# Track isolation -- remember to add TrackIsolation as a property of the class
+#from IsolationTool.IsolationToolConf import xAOD__CaloIsolationTool,xAOD__TrackIsolationTool
+#TrackIsolationTool = ToolFactory(xAOD__TrackIsolationTool, name = 'TrigEgammaTrackIsolationTool')
 #TrkIsoCfg = CfgMgr.xAOD__TrackIsolationTool('TrigEgammaTrackIsolationTool')
 #TrkIsoCfg.TrackSelectionTool.maxZ0SinTheta = 3.
 #TrkIsoCfg.TrackSelectionTool.minPt = 1000.
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
index e99c6a8ad1de..652d2222337e 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
@@ -1,5 +1,3 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-
 def createIsoToolElectronSelector():
 
   from AthenaCommon.AppMgr import ToolSvc
@@ -58,3 +56,4 @@ def createIsoToolElectronSelector():
     RelPtConeCut = isolation_dict[wp] if trkiso else [-1,-1,-1,-1,-1,-1],
 
   return IsoToolSelectors
+
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationL2Config.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationL2Config.py
index 906067a63294..75e49f2fd786 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationL2Config.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationL2Config.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 
 from egammaRec.Factories  import ToolFactory,FcnWrapper,AlgFactory, getPropertyValue
@@ -11,49 +11,68 @@ from TrigEgammaEmulationTool.TrigEgammaEmulationToolConfig import OutputLevel
 from TrigEgammaHypo.TrigL2CaloHypoCutDefs                import L2CaloCutMaps
 # define eta bins
 EtaBins    = [0.00, 0.60, 0.80, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47]
-theCutMaps = L2CaloCutMaps(22)
-# create L2Calo tool    
-EgammaL2CaloLooseEmulator = ToolFactory(Trig__TrigEgammaL2CaloSelectorTool, 
-                                        OutputLevel    = OutputLevel,
-                                        name           = "TrigEgammaL2CaloLooseEmulator", 
-                                        HADETthr       = theCutMaps.MapsHADETthr["loose"],
-                                        CARCOREthr     = theCutMaps.MapsCARCOREthr["loose"],
-                                        CAERATIOthr    = theCutMaps.MapsCAERATIOthr["loose"],
-                                        EtaBins        = EtaBins ,
-                                        dETACLUSTERthr = 0.1,
-                                        dPHICLUSTERthr = 0.1,
-                                        ET2thr         = 90.0*GeV,
-                                        F1thr          = 0.005)
 
-#********************************************************************************
-# VeryLoose
-EgammaL2CaloVeryLooseEmulator = EgammaL2CaloLooseEmulator.copy(
-                                name        = "TrigEgammaL2CaloVeryLooseEmulator",
-                                OutputLevel       = OutputLevel,
-                                HADETthr    = theCutMaps.MapsHADETthr['vloose'],
-                                CARCOREthr  = theCutMaps.MapsCARCOREthr['vloose'],
-                                CAERATIOthr = theCutMaps.MapsCAERATIOthr['vloose'])
-
-#********************************************************************************
-# Medium
-EgammaL2CaloMediumEmulator = EgammaL2CaloLooseEmulator.copy(
-                             name        = "TrigEgammaL2CaloMediumEmulator",
-                             OutputLevel = OutputLevel,
-                             HADETthr    = theCutMaps.MapsHADETthr['medium'],
-                             CARCOREthr  = theCutMaps.MapsCARCOREthr['medium'],
-                             CAERATIOthr = theCutMaps.MapsCAERATIOthr['medium'])
+# Do not change this order.
+#etBins      = [0,22,999]
+etBins      = [0.0,15.0,28.] # Same from rDev Selector
+
+EgammaL2CaloSelectors = []
+
+for idx, et  in enumerate(etBins):
+
+  theCutMaps = L2CaloCutMaps(et)
+  # create L2Calo tool    
+  EgammaL2CaloLooseEmulator = ToolFactory(Trig__TrigEgammaL2CaloSelectorTool, 
+                                          OutputLevel    = OutputLevel,
+                                          name           = "TrigEgammaL2CaloLooseEmulator_etBin_"+str(idx), 
+                                          HADETthr       = theCutMaps.MapsHADETthr["loose"],
+                                          CARCOREthr     = theCutMaps.MapsCARCOREthr["loose"],
+                                          CAERATIOthr    = theCutMaps.MapsCAERATIOthr["loose"],
+                                          EtaBins        = EtaBins ,
+                                          dETACLUSTERthr = 0.1,
+                                          dPHICLUSTERthr = 0.1,
+                                          ET2thr         = 90.0*GeV,
+                                          F1thr          = 0.005)
+  
+
+  #********************************************************************************
+  # VeryLoose
+  EgammaL2CaloVeryLooseEmulator = EgammaL2CaloLooseEmulator.copy(
+                                  name        = "TrigEgammaL2CaloVeryLooseEmulator_etBin_"+str(idx),
+                                  OutputLevel       = OutputLevel,
+                                  HADETthr    = theCutMaps.MapsHADETthr['vloose'],
+                                  CARCOREthr  = theCutMaps.MapsCARCOREthr['vloose'],
+                                  CAERATIOthr = theCutMaps.MapsCAERATIOthr['vloose'])
+  
+
+  #********************************************************************************
+  # Medium
+  EgammaL2CaloMediumEmulator = EgammaL2CaloLooseEmulator.copy(
+                               name        = "TrigEgammaL2CaloMediumEmulator_etBin_"+str(idx),
+                               OutputLevel = OutputLevel,
+                               HADETthr    = theCutMaps.MapsHADETthr['medium'],
+                               CARCOREthr  = theCutMaps.MapsCARCOREthr['medium'],
+                               CAERATIOthr = theCutMaps.MapsCAERATIOthr['medium'])
+  
+
+  #********************************************************************************
+  # Tight
+  EgammaL2CaloTightEmulator = EgammaL2CaloLooseEmulator.copy(
+                              name        = "TrigEgammaL2CaloTightEmulator_etBin_"+str(idx),
+                              OutputLevel = OutputLevel,
+                              HADETthr    = theCutMaps.MapsHADETthr['tight'],
+                              CARCOREthr  = theCutMaps.MapsCARCOREthr['tight'],
+                              CAERATIOthr = theCutMaps.MapsCAERATIOthr['tight'])
+
+
+  # Do not change this order.
+  EgammaL2CaloSelectors.append( EgammaL2CaloTightEmulator )
+  EgammaL2CaloSelectors.append( EgammaL2CaloMediumEmulator )
+  EgammaL2CaloSelectors.append( EgammaL2CaloLooseEmulator )
+  EgammaL2CaloSelectors.append( EgammaL2CaloVeryLooseEmulator )
 
 #********************************************************************************
-# Tight
-EgammaL2CaloTightEmulator = EgammaL2CaloLooseEmulator.copy(
-                            name        = "TrigEgammaL2CaloTightEmulator",
-                            OutputLevel = OutputLevel,
-                            HADETthr    = theCutMaps.MapsHADETthr['tight'],
-                            CARCOREthr  = theCutMaps.MapsCARCOREthr['tight'],
-                            CAERATIOthr = theCutMaps.MapsCAERATIOthr['tight'])
 
-
-#********************************************************************************
 # L2 Electron configurations
 EgammaL2ElectronEmulator  = ToolFactory(Trig__TrigEgammaL2ElectronSelectorTool,
                                         name                     = "TrigEgammaL2ElectronEmulator",
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationPidToolsConfig.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationPidToolsConfig.py
index 91b2f77e62ed..2f8a02f37784 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationPidToolsConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationPidToolsConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 #
 # TrigEgammaPidTools
 # Add all pid selectors to ToolSvc
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationToolConfig.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationToolConfig.py
index 5dd18d40e96d..3c963ab8750f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationToolConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationToolConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 #********************************************************************************
 #
@@ -9,7 +9,7 @@
 #
 #********************************************************************************
 
-OutputLevel = 3
+OutputLevel = 0
 
 from AthenaCommon.Logging import logging
 logger = logging.getLogger("TrigEgammaEmulationToolConfig")
@@ -31,8 +31,8 @@ from ElectronPhotonSelectorTools.ElectronIsEMSelectorMapping      import Electro
 #ToolSvc += EgammaMatchTool
   
 #*****************************************************************************
-from egammaMVACalib.egammaMVACalibConf import egammaMVACalibTool
-mvatool = egammaMVACalibTool("mvatool",folder="egammaMVACalib/v1")
+from egammaMVACalib.egammaMVACalibConf import egammaMVATool
+mvatool = egammaMVATool("mvatool",folder="egammaMVACalib/v1")
 ToolSvc += mvatool
 
 #*****************************************************************************
@@ -72,8 +72,7 @@ EgammaL1Emulator = ToolFactory( Trig__TrigEgammaL1SelectorTool,
 #*****************************************************************************
 # L2 staff (all Asgs will be imported from the current relase)
 from TrigEgammaEmulationTool.TrigEgammaEmulationToolConf import Trig__TrigEgammaL2SelectorTool
-from TrigEgammaEmulationTool.TrigEgammaEmulationL2Config import EgammaL2CaloVeryLooseEmulator, EgammaL2CaloLooseEmulator,\
-    EgammaL2CaloMediumEmulator, EgammaL2CaloTightEmulator, EgammaL2ElectronEmulator
+from TrigEgammaEmulationTool.TrigEgammaEmulationL2Config import EgammaL2CaloSelectors, EgammaL2ElectronEmulator
 from TrigEgammaEmulationTool.TrigEgammaEmulationL2Config import EgammaL2RingerVeryLooseEmulator, EgammaL2RingerLooseEmulator,\
     EgammaL2RingerMediumEmulator, EgammaL2RingerTightEmulator
 
@@ -81,10 +80,7 @@ from TrigEgammaEmulationTool.TrigEgammaEmulationL2Config import EgammaL2RingerVe
 EgammaL2Emulator = ToolFactory(Trig__TrigEgammaL2SelectorTool,
                                name                   = "TrigEgammaL2EmulatorTool",
                                OutputLevel            = OutputLevel,
-                               CaloCutIDSelectors     = [ EgammaL2CaloTightEmulator ,
-                                                          EgammaL2CaloMediumEmulator,
-                                                          EgammaL2CaloLooseEmulator,
-                                                          EgammaL2CaloVeryLooseEmulator],
+                               CaloCutIDSelectors     =  EgammaL2CaloSelectors ,
                                CaloRingerSelectors    = [ EgammaL2RingerTightEmulator ,
                                                           EgammaL2RingerMediumEmulator,
                                                           EgammaL2RingerLooseEmulator,
@@ -96,8 +92,8 @@ from TrigEgammaEmulationTool.TrigEgammaEmulationEFConfig import EgammaEFCaloDefa
     EgammaEFPhotonEmulator, EgammaEFElectronNoD0Emulator
 
 
-from TrigEgammaAnalysisTools.TrigEgammaProbelist import supportingTriggerList
-
+from TrigEgammaAnalysisTools.TrigEgammaProbelist import supportingTriggerList, monitoringTP_electron
+supportingTriggerList+=monitoringTP_electron
 
 # Emulator tool
 # (all Asgs will be imported from the current relase)
@@ -117,9 +113,10 @@ TrigEgammaEmulationTool  = ToolFactory( Trig__TrigEgammaEmulationTool,
                                                                     #EgammaEFElectronNoDphiResEmulator,
                                                                     #EgammaEFElectronSmoothEmulator,
                                                                   ],
-                                        EFPhotonSelectorTools   = [ EgammaEFPhotonEmulator],
+                                        EFPhotonSelectorTools   = [ EgammaEFPhotonEmulator ],
                                         DoL2ElectronFex         = True,  # V7 menu
                                         DoRinger                = True, # V7 menu
+                                        DoRingerBelow15GeV      = False, 
                                         DoEFCaloPid             = False, # V7 menu
                                         )
                                           
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/src/components/TrigEgammaEmulationTool_entries.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/src/components/TrigEgammaEmulationTool_entries.cxx
index 34ac185a9d3a..5347d9bd071e 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/src/components/TrigEgammaEmulationTool_entries.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/src/components/TrigEgammaEmulationTool_entries.cxx
@@ -1,3 +1,5 @@
+
+
 #include "TrigEgammaEmulationTool/TrigEgammaEmulationTool.h"
 #include "TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h"
 #include "TrigEgammaEmulationTool/TrigEgammaL1SelectorTool.h"
@@ -22,6 +24,7 @@ DECLARE_COMPONENT( Trig::TrigEgammaL2CaloRingerSelectorTool )
 DECLARE_COMPONENT( Trig::TrigEgammaEFCaloSelectorTool )   
 DECLARE_COMPONENT( Trig::TrigEgammaEFElectronSelectorTool )   
 DECLARE_COMPONENT( Trig::TrigEgammaEFPhotonSelectorTool )   
+DECLARE_COMPONENT( Trig::TrigEgammaIsolationSelectorTool )   
 DECLARE_COMPONENT( Trig::TrigEgammaEmulationToolTest ) 
 DECLARE_COMPONENT( Trig::TrigEgammaEmulationToolAlg ) 
 DECLARE_COMPONENT( Trig::TrigEgammaIsolationSelectorTool ) 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigMultiVarHypo/CMakeLists.txt
index 70931bd15fd0..2139e2f935da 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/CMakeLists.txt
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 ################################################################################
 # Package: TrigMultiVarHypo
@@ -20,26 +20,33 @@ atlas_depends_on_subdirs( PUBLIC
                           Trigger/TrigSteer/DecisionHandling
                           LumiBlock/LumiBlockComps
                           Tools/PathResolver
-                          GaudiKernel
-                          Control/AthViews )
+                          PRIVATE
+                          GaudiKernel 
+                          Control/AthViews
+                          Control/AthContainers
+                          Control/AthenaMonitoring
+                          )
 
 # Component(s) in the package:
 atlas_add_library( TrigMultiVarHypoLib
                    src/*.cxx
                    src/tools/*.cxx
-                   src/preproc/*.cxx
+                   src/tools/procedures/*.cxx
+                   src/tools/common/*.cxx
                    PUBLIC_HEADERS TrigMultiVarHypo
-                   LINK_LIBRARIES AsgTools xAODTrigCalo xAODTrigRinger TrigCaloEvent
-                   TrigSteeringEvent TrigInterfacesLib TrigTimeAlgsLib
-                   LumiBlockCompsLib PathResolver DecisionHandlingLib
+                   LINK_LIBRARIES AsgTools xAODTrigCalo xAODTrigRinger TrigCaloEvent 
+                   TrigSteeringEvent TrigInterfacesLib TrigTimeAlgsLib 
+                   DecisionHandlingLib LumiBlockCompsLib PathResolver 
+                   AthenaMonitoringLib
                    PRIVATE_LINK_LIBRARIES GaudiKernel AthViews )
 
-atlas_add_component( TrigMultiVarHypo
-                     src/components/*.cxx
-                     LINK_LIBRARIES AsgTools xAODTrigCalo xAODTrigRinger TrigCaloEvent
-                     TrigSteeringEvent TrigInterfacesLib TrigTimeAlgsLib
-                     GaudiKernel TrigMultiVarHypoLib PathResolver
-                     LumiBlockCompsLib DecisionHandlingLib)
+
+atlas_add_component(  TrigMultiVarHypo
+                      src/components/*.cxx
+                      LINK_LIBRARIES AsgTools xAODTrigCalo xAODTrigRinger TrigCaloEvent 
+                      TrigSteeringEvent TrigInterfacesLib TrigTimeAlgsLib GaudiKernel 
+                      TrigMultiVarHypoLib DecisionHandlingLib LumiBlockCompsLib 
+                      PathResolver AthenaMonitoringLib) 
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerFex.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerFex.h
index a9c834cde862..a337252438c4 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerFex.h
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerFex.h
@@ -19,10 +19,13 @@
 
 /// Luminosity tool
 #include "LumiBlockComps/ILumiBlockMuTool.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-#include "TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h"
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
 
+// ringer libs
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+#include "TrigMultiVarHypo/tools/procedures/INormalization.h"
+#include "TrigMultiVarHypo/tools/common/RingerReader.h"
+
+#include<memory>
 
 class TrigL2CaloRingerFex: public HLT::FexAlgo {
  
@@ -40,7 +43,8 @@ class TrigL2CaloRingerFex: public HLT::FexAlgo {
     ///Time monitoring
     TrigTimer* m_storeTimer;
     TrigTimer* m_normTimer;
-    TrigTimer* m_decisionTimer;
+    TrigTimer* m_totalTimer;
+    TrigTimer* m_propagateTimer;
 
   private:
 
@@ -58,20 +62,15 @@ class TrigL2CaloRingerFex: public HLT::FexAlgo {
     float       m_lumiCut;
     float       m_output;
     bool        m_useLumiTool;
-    bool        m_useEtaVar;
-    bool        m_useLumiVar;
     
     //LumiTool
     ToolHandle<ILumiBlockMuTool>  m_lumiBlockMuTool;
-    ///Prepoc configuration
-    std::vector<unsigned int>  m_nRings;
-    std::vector<unsigned int>  m_normRings;
-    std::vector<unsigned int>  m_sectionRings;
     
     ///Discriminator holder 
-    std::vector<MultiLayerPerceptron*>       m_discriminators;
-    std::vector<TrigRingerPreprocessor*>     m_preproc; 
-    TrigL2CaloRingerReader                   m_reader;
+    std::vector<std::shared_ptr<Ringer::IModel>>          m_discriminators;
+    std::vector<std::shared_ptr<Ringer::INormalization>>  m_preproc; 
+    
+    Ringer::RingerReader m_reader;
 
 };
 //!===============================================================================================
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerHypo.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerHypo.h
index 6ffc6039e219..b35e7907ae46 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerHypo.h
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/TrigL2CaloRingerHypo.h
@@ -4,18 +4,19 @@
 #ifndef TRIGL2CALORINGERHYPO_H
 #define TRIGL2CALORINGERHYPO_H
 
-///std include(s)
+// std include(s)
 #include <string>
 #include <vector>
 
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-#include "TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h"
+// ringer libs
+#include "TrigMultiVarHypo/tools/common/RingerReader.h"
+#include "TrigMultiVarHypo/tools/procedures/IThresholds.h"
 
-///Base from trigger
+// Base from trigger
 #include "TrigInterfaces/HypoAlgo.h"
 #include "TrigTimeAlgs/TrigTimer.h"
 
-///xAOD include(s)
+// xAOD include(s)
 #include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRNNOutput.h"
 #include "xAODTrigCalo/TrigEMCluster.h"
@@ -34,7 +35,7 @@ class TrigL2CaloRingerHypo: public HLT::HypoAlgo {
 
   private:
     bool      m_acceptAll;
-    bool      m_useNoActivationFunctionInTheLastLayer;
+    bool      m_removeOutputTansigTF;
     bool      m_doPileupCorrection; 
     double    m_emEtCut;
     int       m_lumiCut;
@@ -46,13 +47,14 @@ class TrigL2CaloRingerHypo: public HLT::HypoAlgo {
     std::string m_feature;
     std::string m_key;
 
+    TrigTimer* m_totalTimer;
 
-    TrigL2CaloRingerReader m_reader;
+    Ringer::RingerReader m_reader;
  
     /* Helper functions for feature extraction */
     const xAOD::TrigRNNOutput* get_rnnOutput(const HLT::TriggerElement* te);
 
-    std::vector<TrigCaloRingsHelper::CutDefsHelper*>  m_cutDefs; 
+    std::vector<std::shared_ptr<Ringer::IThresholds>>  m_cutDefs; 
 };
 //!===============================================================================================
 /// get the cluster inside of container
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h
deleted file mode 100644
index 58f46e06e062..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#ifndef PREPROC_TRIGRINGERPREPROC_H
-#define PREPROC_TRIGRINGERPREPROC_H
-
-///std librarys
-#include <vector>
-///Local includes
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-
-
-
-class TrigRingerPreprocessor{
-  
-  private:
-
-    // RingSet properties:
-    std::vector<unsigned int> m_nRings;
-    std::vector<unsigned int> m_normRings;
-    std::vector<unsigned int> m_sectionRings;
-    double                    m_energyThreshold;///Defines the energy threshlod for divisions, in MeV's
-    /// RingSet object
-    std::vector<TrigCaloRingsHelper::RingSet*>     m_ringsSet;
-    unsigned int              m_maxRingsAccumulated;
-  
-  public:
-
-    TrigRingerPreprocessor(std::vector<unsigned int> &nRings, 
-                           std::vector<unsigned int> &normRings,
-                           std::vector<unsigned int> &sectionRings);
-  
-    ~TrigRingerPreprocessor();
-
-    bool ppExecute( Pattern &rings );
-
-    void setEnergyThreshold( double e ){ m_energyThreshold = e;};
-    
-    double getEnergyThreshold(){ return m_energyThreshold;};
-
-    float normalize_eta( float, float etamin, float etamax );
-
-    float normalize_mu( float, float mumax );
-
-    /*
-     * Calculates and applies the sequential normalisation vector that results
-     * from the following arithmetic:
-     *
-     * @f[
-     * N0 = E
-     * N1 = E - E0
-     * N2 = E - E0 - E1 = N1 - E1
-     * N3 = E - E0 - E1 - E2 = N2 - E2
-     * ...
-     * NX = N(X-1) - E(X-1)
-     * @f]
-     *
-     * Where Ni are the normalisation factors, E is the total layer energy and Ei
-     * are the energy values for each ring. 
-     *
-     * @param rings The calculated ring values one wishes to normalise
-     * @param stop_energy The threshold to judge when to stop this normalisation
-     * strategy and start using the total layer energy instead, in MeV.
-     */
-    void sequential (Pattern& rings, const Feature& stop_energy = 100.0);
-
-    /**
-     * Apply normalization based on the ring set configuration
-     *
-     * @param rset The ring set configuration to use for creating the rings
-     */
-    void normalize_rings(std::vector<TrigCaloRingsHelper::RingSet*>&  rset);
-
-};
-#endif /* TrigRingerPreproc */
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/MultiLayerPerceptron.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/MultiLayerPerceptron.h
deleted file mode 100644
index 667aed440494..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/MultiLayerPerceptron.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-/*
- * Neural Network Implementation v3.0
- * Developed by: Dhiana Deva Cavalcanti Rocha
- * Contact: dhiana.deva@gmail.com
- * Laboratorio de Processamento de Sinais
- * Universidade Federal do Rio de Janeiro
- *
- * Adapt by Joao victor da Fonseca Pinto:
- * jodafons@cern.ch
- */
-
-#ifndef TOOLS_MULTILAYERPERCEPTRON_H
-#define TOOLS_MULTILAYERPERCEPTRON_H
-
-#define BAD_WEIGHT_SIZE   101
-#define BAD_BIAS_SIZE     102
-
-#include <vector>
-
-typedef double REAL;
-
-class MultiLayerPerceptron {
-
-  private:
-
-    std::vector<unsigned int> m_nodes; 
-    REAL                   ***m_weights;
-    REAL                    **m_bias;
-    REAL                    **m_layerOutputs;
-    REAL                    **m_neuronOutputs; // Use this to hold the neuron sum values before to apply the tansig function
-    std::vector<REAL>         m_threshold;
-    REAL                      m_etmin;
-    REAL                      m_etmax;
-    REAL                      m_etamin;
-    REAL                      m_etamax;
-    REAL                      m_mumin;
-    REAL                      m_mumax;
-
-
-  public:
-
-    MultiLayerPerceptron(std::vector<unsigned int> &, 
-                         std::vector<REAL> &, std::vector<REAL> &, 
-                         REAL etmin,  REAL etmax, 
-                         REAL etamin,  REAL etamax, REAL mumin, REAL mumax);
-
-    ~MultiLayerPerceptron();
-
-    float propagate(std::vector<float> &input);
-
-    float getOutput();
-    
-    float getOutputBeforeTheActivationFunction();
-
-    REAL etamin(){ return m_etamin;};
-    REAL etamax(){ return m_etamax;};
-    REAL etmin(){  return m_etmin;};
-    REAL etmax(){  return m_etmax;};
-    REAL mumin(){  return m_mumin;};
-    REAL mumax(){  return m_mumax;};
-
-};
-#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/RingerSelectorTool.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/RingerSelectorTool.h
new file mode 100644
index 000000000000..0a187c9eaad3
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/RingerSelectorTool.h
@@ -0,0 +1,117 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+#ifndef TRIGMULTIVARHYPO_RINGERSELECTORTOOL_H 
+#define TRIGMULTIVARHYPO_RINGERSELECTORTOOL_H 
+
+
+#include "GaudiKernel/StatusCode.h"
+
+// interfaces
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+#include "TrigMultiVarHypo/tools/procedures/IThresholds.h"
+#include "TrigMultiVarHypo/tools/procedures/INormalization.h"
+
+// file header lib
+#include "TrigMultiVarHypo/tools/common/RingerReader.h"
+
+// models lib
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+#include "TrigMultiVarHypo/tools/procedures/Norm1.h"
+
+#include "AthenaMonitoring/MonitoredTimer.h"
+#include "AsgTools/AsgMessaging.h"
+#include <memory>
+#include <string>
+
+
+namespace Ringer{
+
+  class RingerSelectorTool: public asg::AsgMessaging
+  {
+  
+    public:
+      /// Standard constructor
+      RingerSelectorTool();
+  
+      /// Standard destructor
+      ~RingerSelectorTool();
+  
+      StatusCode initialize();
+  
+      StatusCode finalize();
+  
+      bool accept( double discriminant, double et, double eta, double mu) const;
+  
+      double  calculate( double et, double eta, double mu,
+                         double deltaeta1, double deltaPoverP, double deltaPhiReescaled,
+                         double d0significance, double d0pvunbiased, double eProbabilityHT) const;
+  
+      double  calculate( std::vector<float>& rings, double et, double eta, double mu) const; 
+      
+      double  calculate( std::vector<float>& rings, double et, double eta, double mu, 
+                         Monitored::Timer &propagate_time,
+                         Monitored::Timer &preproc_time) const;
+  
+      double  calculate( std::vector<float>& rings, double et, double eta, double mu,
+                         double deltaeta1, double deltaPoverP, double deltaPhiReescaled,
+                         double d0significance, double d0pvunbiased, double eProbabilityHT) const;
+  
+      double  calculate( std::vector<float>& rings, double et, double eta, double mu,
+                         double eratio, double reta, double rphi, double rhad, double weta2,
+                         double f1, double f3) const;
+  
+      double  calculate( std::vector<float>& rings, double et, double eta, double mu,
+                         double eratio, double reta, double rphi, double rhad, double weta2,
+                         double f1, double f3, double deltaeta1, double deltaPoverP,
+                         double deltaPhiReescaled, double d0significance, double d0pvunbiased,
+                         double eProbabilityHT) const;
+  
+  
+      std::string getWP( void ) const {return m_wp;};
+      bool useCaloRings() const {return m_useCaloRings;};
+      bool useTrack() const {return m_useTrack;};
+      bool useShowerShape() const {return m_useShowerShape;};
+      bool useTileCal() const {return m_useTileCal;};
+      void setConstantsCalibPath(std::string s){m_constantsCalibPath=s;};
+      void setThresholdsCalibPath(std::string s){m_thresholdsCalibPath=s;};
+     
+      
+
+  
+
+    private:
+  
+      bool retrieve(double et, double eta, double mu, std::shared_ptr<Ringer::IModel> &discr, 
+                                                      std::shared_ptr<Ringer::INormalization> &preproc ) const;
+      
+      std::vector<std::shared_ptr<Ringer::INormalization>>  m_preprocs;
+      std::vector<std::shared_ptr<Ringer::IModel>>          m_discriminators;
+      std::vector<std::shared_ptr<Ringer::IThresholds>>     m_cutDefs;
+  
+      Ringer::RingerReader m_reader;
+      
+  
+      double      m_etCut;
+      double      m_lumiCut;
+  
+      bool m_useTrack;
+      bool m_useCaloRings;
+      bool m_useShowerShape;
+      bool m_removeOutputTansigTF;
+      bool m_doPileupCorrection;
+      bool m_useTileCal;
+
+      //Discriminator configuration
+      std::string m_constantsCalibPath, m_thresholdsCalibPath;
+      std::string m_wp; // working point
+
+
+
+  
+  };// end class
+
+}
+
+
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h
deleted file mode 100644
index 71ff2a8f5163..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-#ifndef TOOLS_TRIGL2CALORINGERREADER_H
-#define TOOLS_TRIGL2CALORINGERREADER_H
-
-//#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-
-#include "AsgTools/AsgMessaging.h"
-#include "PathResolver/PathResolver.h"
-#include <vector>
-#include <string>
-#include "TTree.h"
-#include "TFile.h"
-
-class TrigL2CaloRingerReader : public asg::AsgMessaging {
-
-  public:
-    /* constructor */
-    TrigL2CaloRingerReader(const std::string& name);
-    /* destructor */
-    ~TrigL2CaloRingerReader();
-    /* use this methods to retrieve the tools from the archieve */
-    bool retrieve(std::string &, std::vector<MultiLayerPerceptron*>               &);
-    bool retrieve(std::string &, std::vector<TrigCaloRingsHelper::CutDefsHelper*> &);
-    /* return the current class name */
-    std::string name(){return m_name;};
-    /* return luminosity flag */
-    bool  useLumiVar(){return m_useLumiVar;};
-    /* return eta var flag */
-    bool  useEtaVar(){return m_useEtaVar;};
-    /* if true, we will no use the activation function in the last layer */
-    bool  useNoActivationFunctionInTheLastLayer(){return m_useNoActivationFunctionInTheLastLayer;};
-    /* if true, apply the pileup correction */
-    bool  doPileupCorrection(){return m_doPileupCorrection;};
-    /* return the threshold lumi */
-    int lumiCut(){return m_lumiCut;};
-
-  private:
-    // Use this to retrieve all branch values
-    template <class T>
-    void InitBranch(TTree* fChain, std::string branch_name, T* param);
-
-    std::string m_name;
-    
-    int m_version;
-    
-    // archieve variables holder
-    int  m_lumiCut;
-    bool m_useEtaVar;
-    bool m_useLumiVar;
-    bool m_useNoActivationFunctionInTheLastLayer;
-    bool m_doPileupCorrection;
-
-    std::vector<unsigned int>   *m_nodes;
-    std::vector<double>         *m_weights;
-    std::vector<double>         *m_bias;
-    std::vector<double>         *m_thresholds;
-    std::vector<double>         *m_etaBins;
-    std::vector<double>         *m_etBins;
-    std::vector<double>         *m_muBins;
-  
-};//End of classi
-#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigRingerHelper.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigRingerHelper.h
deleted file mode 100644
index cc262d6bbb95..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/TrigRingerHelper.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef PREPROC_TRIGRINGERHELPER_H
-#define PREPROC_TRIGRINGERHELPER_H
-
-#include <vector>
-#include <string>
-
-typedef float Feature;
-typedef std::vector<Feature> Pattern;
-
-namespace TrigCaloRingsHelper{
-  
-  enum CaloRingsLayer{
-    PS   = 0,
-    EM1  = 1,
-    EM2  = 2,
-    EM3  = 3,
-    HAD1 = 4,
-    HAD2 = 5,
-    HAD3 = 6
-  };
-  /*
-   * rings map into std::vector
-   * 0:7   PS; 8:71  EM1;  72:79 EM2;  80:87 EM3
-   * 88:91 HAD1; 92:95 HAD2; 96:99 HAD3
-   */
-  void parseTrigCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, 
-                                 std::string &caloLayerName);
-  
-  class RingSet {
-    
-    public: //interface
-  
-      enum Normalisation {
-        EVENT       = 0, ///< normalises the ring energies with the total event energy
-        SECTION     = 1, ///< normalises the ring energies with the section energy
-        SET         = 2, ///< normalises the ring energies with the set energy
-        SEQUENTIAL  = 3, ///< normalises the ring energies with a special scheme
-        NONE        = 4 ///< no normalisation is applied
-      };
-  
-      enum Section {
-        EM          = 0, ///< electromagnetic section of the ATLAS calorimetry
-        HADRONIC    = 1 ///< hadronic section of the ATLAS calorimetry
-      };
-      
-      RingSet (unsigned int max, const Normalisation &norm, const Section &section) 
-      : m_max(max),
-        m_norm(norm),
-        m_section(section),
-        m_val(max)
-      {;}
-   
-      ~RingSet()
-      {;}
-      
-      inline unsigned int    max(void) const { return m_max; }
-      inline Normalisation  normalisation(void) const { return m_norm; }
-      inline Section        section(void) const { return m_section; }
-      
-      ///Returns the (current) ring values.
-      inline Pattern& pattern (void) { return m_val; }
-      
-      ///Resets all current values
-      inline void reset (void) { m_val.clear(); }
-  
-      ///Appends ring to ringset
-      inline void add ( double ring) { m_val.push_back(ring); }
-  
-    private: //representation
-      
-      unsigned int  m_max;
-      Normalisation m_norm;     ///< the normalisation scheme for this ring set
-      Section       m_section;  ///< the section this ring set belongs to
-      Pattern       m_val;      ///< my current values
-  };
-  
-  
-  ///Helper class
-  class CutDefsHelper{
-    public:
-      CutDefsHelper(std::vector<double> th, double etamin, double etamax,
-                    double etmin, double etmax, double mumin, double mumax)
-      {
-        m_threshold=th; 
-        m_etamin=etamin;
-        m_etamax=etamax;
-        m_etmin=etmin;
-        m_etmax=etmax;
-        m_mumin=mumin;
-        m_mumax=mumax;
-      }
-  
-      ~CutDefsHelper()
-      {;}
-      
-      double threshold(){return m_threshold[2];};
-      double threshold(float avgmu){return (avgmu*m_threshold[0] + m_threshold[1]);};
-      double etamin(){return m_etamin;};
-      double etamax(){return m_etamax;};
-      double etmin(){return m_etmin;};
-      double etmax(){return m_etmax;};
-      double mumin(){return m_mumin;};
-      double mumax(){return m_mumax;};
- 
-    private:
-      double m_etamin;
-      double m_etamax;
-      double m_etmin;
-      double m_etmax;
-      double m_mumin;
-      double m_mumax;
- 
-      // Define as [a, b, b0] where a and b came from y = ax+b and b0 is the cut without any correction
-      std::vector<double> m_threshold;
-  
- 
-  };///end of configuration
-  
-
-} // namespace TrigCaloRingsHelper
-#endif /* TrigCaloRingerHelper */
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerHelper.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerHelper.h
new file mode 100644
index 000000000000..3ce29f3b5a03
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerHelper.h
@@ -0,0 +1,36 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGMULTIVARHYPO_RINGERHELPER_H
+#define TRIGMULTIVARHYPO_RINGERHELPER_H
+
+#include <vector>
+#include <string>
+
+
+namespace Ringer{
+  
+  enum CaloRingsLayer{
+    PS   = 0,
+    EM1  = 1,
+    EM2  = 2,
+    EM3  = 3,
+    HAD1 = 4,
+    HAD2 = 5,
+    HAD3 = 6
+  };
+  /*
+   * rings map into std::vector
+   * 0:7   PS; 8:71  EM1;  72:79 EM2;  80:87 EM3
+   * 88:91 HAD1; 92:95 HAD2; 96:99 HAD3
+   */
+  void parseTrigCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, 
+                                 std::string &caloLayerName);
+  
+
+ 
+  
+
+} // namespace TrigCaloRingsHelper
+#endif /* TrigCaloRingerHelper */
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerReader.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerReader.h
new file mode 100644
index 000000000000..a8aacc1500a7
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/common/RingerReader.h
@@ -0,0 +1,103 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGMULTIVARHYPO_RINGERREADER_H
+#define TRIGMULTIVARHYPO_RINGERREADER_H
+
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+#include "TrigMultiVarHypo/tools/procedures/IThresholds.h"
+#include "TrigMultiVarHypo/tools/procedures/INormalization.h"
+#include "TrigMultiVarHypo/tools/procedures/Thresholds.h"
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+
+#include "PathResolver/PathResolver.h"
+#include <vector>
+#include <string>
+#include "TTree.h"
+#include "TFile.h"
+#include <TROOT.h>
+#include <memory>
+
+
+#include "AsgTools/AsgMessaging.h"
+
+namespace Ringer{
+
+  
+  class RingerReader: public asg::AsgMessaging{
+  
+    public:
+      /* constructor */
+      RingerReader( std::string );
+      /* destructor */
+      ~RingerReader();
+      
+      /* use this methods to retrieve the tools from the archieve */
+      bool retrieve(std::string &, std::vector<std::shared_ptr<Ringer::IModel>>      &);
+      bool retrieve(std::string &, std::vector<std::shared_ptr<Ringer::IThresholds>> &);
+      
+
+
+      int   lumiCut()               const {return m_lumiCut;};
+      bool  doPileupCorrection()    const {return m_doPileupCorrection;};
+      bool  removeOutputTansigTF()  const {return m_removeOutputTansigTF;};
+      bool  useTrack()              const {return m_useTrack;};
+      bool  useCaloRings()          const {return m_useCaloRings;};
+      bool  useShowerShape()        const {return m_useShowerShape;};
+      bool  useTileCal()            const {return m_useTileCal;};
+      
+      std::string name()            const {return m_name;};
+ 
+      
+ 
+
+  
+    private:
+      // Use this to retrieve all branch values
+      template <class T>
+      void InitBranch(TTree* fChain, std::string branch_name, T* param);
+     
+      
+      std::string m_name;
+      int m_version;
+      
+      // archieve variables holder
+      int  m_lumiCut;
+      bool m_useCaloRings;
+      bool m_useTrack;
+      bool m_useShowerShape;
+      bool m_useTileCal;
+      bool m_removeOutputTansigTF;
+      bool m_doPileupCorrection;
+  
+      // Dense Model
+      std::vector<unsigned int>   *m_nodes;
+      std::vector<double>         *m_weights;
+      std::vector<double>         *m_bias;
+      std::vector<double>         *m_thresholds;
+      std::vector<std::string>    *m_tfnames;
+  
+      // Convolutional Model
+      std::vector<bool>           *m_useConvLayer;
+      std::vector<unsigned int>   *m_conv_nodes;
+      std::vector<unsigned int>   *m_conv_kernel_i;
+      std::vector<unsigned int>   *m_conv_kernel_j;
+      std::vector<double>         *m_conv_kernel;
+      std::vector<double>         *m_conv_bias;
+      std::vector<unsigned int>   *m_conv_input_i;
+      std::vector<unsigned int>   *m_conv_input_j;
+      std::vector<std::string>    *m_conv_tfnames;
+      std::vector<unsigned int>   *m_conv_frame;
+  
+      // Common parans
+      std::vector<double>         *m_etaBins;
+      std::vector<double>         *m_etBins;
+      std::vector<double>         *m_muBins;
+   
+
+
+  };//End of classi
+
+}
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IModel.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IModel.h
new file mode 100644
index 000000000000..84bcbe4e9261
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IModel.h
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#ifndef TRIGMULTIVARHYPO_IMODEL_H
+#define TRIGMULTIVARHYPO_IMODEL_H
+
+#include <vector>
+
+
+#define BAD_WEIGHT_SIZE   101
+#define BAD_BIAS_SIZE     102
+
+
+namespace Ringer{
+
+  struct RnnOutInfo{
+    float output;
+    float outputBeforeTheActivationFunction;
+  };
+  
+
+
+  class IModel{
+  
+    private:
+  
+      double m_etmin;
+      double m_etmax;
+      double m_etamin;
+      double m_etamax;
+      double m_mumin;
+      double m_mumax;
+    
+    public:
+      
+      
+      // Constructor
+      IModel( double etmin, double etmax, double etamin, double etamax, double mumin, double mumax):
+        m_etmin(etmin),m_etmax(etmax),m_etamin(etamin),m_etamax(etamax),m_mumin(mumin),m_mumax(mumax)
+      {;};
+      
+      // Destructor
+      virtual ~IModel()
+      {;};
+    
+      virtual RnnOutInfo propagate( std::vector<float> & ) const=0;
+      double etamin() const{ return m_etamin;};
+      double etamax() const{ return m_etamax;};
+      double etmin()  const{  return m_etmin;};
+      double etmax()  const{  return m_etmax;};
+      double mumin()  const{  return m_mumin;};
+      double mumax()  const{  return m_mumax;};
+   
+  };
+
+}
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/INormalization.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/INormalization.h
new file mode 100644
index 000000000000..9b821b9f1ba1
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/INormalization.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGMULTIVARHYPO_INORMALIZATION_H
+#define TRIGMULTIVARHYPO_INORMALIZATION_H
+
+#include <vector>
+
+
+
+namespace Ringer{
+
+
+  class INormalization{
+  
+    private:
+  
+      double m_etmin;
+      double m_etmax;
+      double m_etamin;
+      double m_etamax;
+      double m_mumin;
+      double m_mumax;
+    
+    public:
+      
+      
+      // Constructor
+      INormalization( double etmin, double etmax, double etamin, double etamax, double mumin, double mumax):
+        m_etmin(etmin),m_etmax(etmax),m_etamin(etamin),m_etamax(etamax),m_mumin(mumin),m_mumax(mumax)
+      {;};
+     
+      // Destructor
+      virtual ~INormalization()
+      {;};
+
+      virtual void execute( std::vector<float> & ) const=0;
+  
+      double etamin() const{ return m_etamin;};
+      double etamax() const{ return m_etamax;};
+      double etmin()  const{  return m_etmin;};
+      double etmax()  const{  return m_etmax;};
+      double mumin()  const{  return m_mumin;};
+      double mumax()  const{  return m_mumax;};
+   
+  };
+
+}
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IThresholds.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IThresholds.h
new file mode 100644
index 000000000000..7eabbdbdda55
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/IThresholds.h
@@ -0,0 +1,57 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGMULTIVARHYPO_ITHRESHOLDS_H
+#define TRIGMULTIVARHYPO_ITHRESHOLDS_H
+
+#include <vector>
+#include <string>
+
+
+namespace Ringer{
+  
+  class IThresholds{
+
+    protected:
+      double m_etamin;
+      double m_etamax;
+      double m_etmin;
+      double m_etmax;
+      double m_mumin;
+      double m_mumax;
+      std::vector<double> m_values;
+  
+    public:
+
+      IThresholds(std::vector<double> th, 
+                  double etamin,
+                  double etamax,
+                  double etmin, 
+                  double etmax, 
+                  double mumin, 
+                  double mumax):
+        m_etamin(etamin),m_etamax(etamax),m_etmin(etmin),m_etmax(etmax),m_mumin(mumin),m_mumax(mumax),m_values(th)
+      {;}
+  
+      virtual ~IThresholds()
+      {;}
+      
+      virtual double threshold() const=0;
+      virtual double threshold(double) const=0;
+      
+      double etamin() const {return m_etamin;};
+      double etamax() const {return m_etamax;};
+      double etmin()  const {return m_etmin; };
+      double etmax()  const {return m_etmax; };
+      double mumin()  const {return m_mumin; };
+      double mumax()  const {return m_mumax; };
+
+      std::vector<double> values() const {return m_values;};
+  
+  
+  };
+
+}
+
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h
new file mode 100644
index 000000000000..2e51dfe7bd6a
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h
@@ -0,0 +1,49 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+
+#ifndef TRIGMULTIVARHYPO_MULTILAYERPERCEPTRON_H
+#define TRIGMULTIVARHYPO_MULTILAYERPERCEPTRON_H
+
+#include <string>
+#include <vector>
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+
+
+namespace Ringer{
+
+  class MultiLayerPerceptron: public IModel {
+  
+    private:
+  
+  
+      std::vector<unsigned int>   m_nodes; 
+      double                   ***m_weights;
+      double                    **m_bias;
+      std::vector<std::string>    m_tfnames;
+  
+      //inline double activation( double, std::string & );
+      inline void   release(double**, double**) const;
+    
+    public:
+  
+      MultiLayerPerceptron( std::vector<unsigned int>  &, 
+                            std::vector<double>        &, 
+                            std::vector<double>        &,
+                            std::vector<std::string>   &,
+                            double etmin,  
+                            double etmax, 
+                            double etamin,  
+                            double etamax,
+                            double mumin,   
+                            double mumax);
+  
+      ~MultiLayerPerceptron();
+  
+      Ringer::RnnOutInfo propagate(std::vector<float> &input) const;
+  };
+
+}
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Norm1.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Norm1.h
new file mode 100644
index 000000000000..67f9db466425
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Norm1.h
@@ -0,0 +1,28 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#ifndef TRIGMULTIVARHYPO_NORM1_H     
+#define TRIGMULTIVARHYPO_NORM1_H
+
+#include <vector>
+#include "TrigMultiVarHypo/tools/procedures/INormalization.h"
+
+namespace Ringer{
+
+  class Norm1 : public INormalization{
+    
+    public:
+      Norm1(double etmin, double etmax, double etamin, double etamax, double mumin, double mumax, bool usetilecal);
+      ~Norm1(){;};
+      void execute( std::vector<float> &rings ) const;
+  
+    private:
+      bool m_useTileCal;
+  };
+
+}
+
+#endif /* TrigRingerPreproc */
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Thresholds.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Thresholds.h
new file mode 100644
index 000000000000..f82b47f4598c
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/TrigMultiVarHypo/tools/procedures/Thresholds.h
@@ -0,0 +1,43 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGMULTIVARHYPO_THRESHOLDS_H
+#define TRIGMULTIVARHYPO_THRESHOLDS_H
+
+#include "TrigMultiVarHypo/tools/procedures/IThresholds.h"
+#include <vector>
+#include <string>
+
+
+
+namespace Ringer{
+
+  class Thresholds : public IThresholds{
+
+    public:
+
+      Thresholds(std::vector<double> th, 
+                 double etamin,
+                 double etamax,
+                 double etmin, 
+                 double etmax, 
+                 double mumin, 
+                 double mumax):
+                 IThresholds(th,etamin,etamax,etmin,etmax,mumin,mumax)
+      {;}
+  
+
+      ~Thresholds(){;}
+      
+      double threshold()             const {return beta0();};
+      double threshold(double avgmu) const {return (avgmu*alpha() + beta());};
+      double alpha()                 const {return m_values[0];};
+      double beta()                  const {return m_values[1];};
+      double beta0()                 const {return m_values[2];}; 
+  
+  };///end of configuration
+
+}
+
+#endif
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerConstants.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerConstants.py
deleted file mode 100755
index 370295abf8b5..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerConstants.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-
-# Universidade Federal do Rio de Janeiro
-# Authors: 
-#         Joao Victor da Fonseca Pinto, jodafons@cern.ch
-#         Werner Freund, wsfreund@cern.ch
-#         Ryan White, rwhite@cern.ch
-#         Denis Damazio, damazio@cern.ch
-#
-# MC16 Tuning presented here: 
-#     https://indico.cern.ch/event/576269/contributions/2332041/attachments/1352705/2042960/20161011_egammaMeeting.pdf
-# This tuning using MC15c to training 20 neural networks.
-# Relax parameters: Tight = -0.45, Medium = -0.3, Loose = -0.1 and VeryLoose = -0.3
-def SignaturesMap():
-  signatures=dict()
-  signatures["ElectronHighEnergyTightConf"]={'et3_eta2': {'discriminator': {'threshold': 0.52499841451644902, 'nodes': [100, 5, 1], 'bias': [-0.03404608368873596, -0.0632418766617775, -0.0069054546765983105, 0.020593134686350822, -0.2521449327468872, 0.016750043258070946], 'weights': [0.4703431725502014, -0.09695211797952652, -1.7062618732452393, -1.7950844764709473, -1.5752053260803223, -1.5195577144622803, -1.0668883323669434, -0.9694873690605164, 0.15751956403255463, 1.960694432258606, 2.0984318256378174, 1.9061888456344604, 1.0200971364974976, 0.32337525486946106, 0.3146933317184448, 0.35614654421806335, -3.87273907661438, 0.04691654443740845, 0.1703878790140152, -1.8183751106262207, -4.0419816970825195, -2.691319465637207, -0.9311197400093079, -1.5393428802490234, -1.9127061367034912, -2.0619184970855713, -2.2820775508880615, -1.875126600265503, -1.9300029277801514, -1.940091609954834, -1.477725863456726, -1.3720479011535645, -1.8444932699203491, -1.6420280933380127, -1.7008205652236938, -1.9253499507904053, -4.584053993225098, -2.1500840187072754, -1.296797275543213, -1.845773458480835, -1.719006061553955, -3.953913927078247, -2.0874006748199463, -1.457442045211792, -0.9740849137306213, -2.08292818069458, -1.9235605001449585, -1.1207565069198608, -2.043537139892578, -1.8446439504623413, -1.597627878189087, -1.8782378435134888, -2.8899118900299072, -2.1076903343200684, -1.8747576475143433, -1.961047649383545, -1.0844285488128662, -1.6172173023223877, -1.1107652187347412, -1.0789729356765747, 1.1585743427276611, -0.3794723451137543, -0.6536436676979065, -1.573157787322998, -1.1959367990493774, -1.1892831325531006, -1.0667911767959595, -2.1755447387695312, -1.845846176147461, -6.773364543914795, -1.6112593412399292, -1.5740151405334473, 0.769822359085083, 0.4261709153652191, -2.261221170425415, -1.9437546730041504, -1.8926950693130493, -1.7906838655471802, -1.8505183458328247, -1.8123387098312378, 0.3296405076980591, -1.1944637298583984, -2.2528421878814697, -1.993539810180664, -1.5635275840759277, -0.6428982019424438, -1.654792070388794, -1.634527564048767, 1.1783809661865234, -1.511512041091919, -1.2514039278030396, -1.1372365951538086, -3.225945472717285, -3.4711992740631104, -0.255437970161438, -1.661489486694336, 0.04046904295682907, 0.11920715868473053, -0.9848525524139404, -1.9816033840179443, 0.39178165793418884, -0.222597137093544, -1.4305715560913086, -1.5519620180130005, -1.2010095119476318, -1.3291617631912231, -0.9976070523262024, -0.7786450386047363, 0.0013313444796949625, 3.769132614135742, 1.9853181838989258, 1.8109837770462036, 0.8675318360328674, 0.43654513359069824, 0.2612902820110321, 0.3261204659938812, -3.6511151790618896, -0.10662383586168289, 0.14573165774345398, -1.8760493993759155, -6.953881740570068, -3.3156826496124268, -0.8301648497581482, -0.9680281281471252, -1.645704746246338, -4.893914699554443, -2.782379627227783, -1.8480205535888672, -1.8941502571105957, -2.4906749725341797, -0.15624096989631653, -1.651524305343628, -1.68096125125885, -1.3215241432189941, -1.8222824335098267, -1.9439116716384888, -4.718743801116943, -4.76596736907959, -0.08982709050178528, -0.6884569525718689, -1.802567481994629, -4.605197429656982, -2.41015362739563, -1.4588706493377686, -0.7951393723487854, -1.9884803295135498, -2.247915267944336, -1.0868651866912842, -2.1585001945495605, -2.204909563064575, -1.4571914672851562, -1.7820578813552856, -2.8570802211761475, -2.1592586040496826, -2.078396797180176, -4.92418098449707, -1.1851047277450562, -1.3947882652282715, -0.7543351650238037, -0.9022685885429382, 4.902259349822998, -0.22408047318458557, 0.7281573414802551, -1.4075641632080078, -0.715082585811615, -0.9525408744812012, -1.1099210977554321, -2.0706253051757812, -1.281381607055664, -13.391276359558105, -1.6157174110412598, -1.3400325775146484, 0.4457109570503235, 0.4530270993709564, -2.8723087310791016, -1.8866392374038696, -1.9237309694290161, -1.9212015867233276, -1.7973734140396118, -1.8382846117019653, -0.00027607381343841553, -3.3417277336120605, -2.477571964263916, -2.0472254753112793, -1.4952001571655273, -0.4540436863899231, -1.615282654762268, -0.8411869406700134, 1.0563337802886963, -1.2980713844299316, -0.7343506217002869, -0.7194597721099854, -1.9239697456359863, -3.9020168781280518, 2.364347457885742, -1.1776623725891113, 0.01981297880411148, 0.07497745007276535, -0.8942105770111084, -4.8766350746154785, 0.475401371717453, -0.09648885577917099, -1.5122263431549072, -1.6838487386703491, -1.1105148792266846, -1.3744908571243286, -0.9601327776908875, -0.8057340979576111, 0.021039912477135658, 3.751394271850586, 2.0616366863250732, 1.7273722887039185, 0.8787944912910461, 0.46091437339782715, 0.24818670749664307, 0.43636125326156616, -4.1876091957092285, 0.07805332541465759, 0.19747062027454376, -1.6799999475479126, -6.877641201019287, -3.3294928073883057, -0.8415812849998474, -1.139517903327942, -1.6007468700408936, -4.9306817054748535, -2.7383718490600586, -1.8440966606140137, -1.8537633419036865, -2.523174285888672, -0.12742355465888977, -1.5189168453216553, -1.5959528684616089, -1.3657605648040771, -1.8129609823226929, -1.7598079442977905, -4.570714950561523, -4.956765651702881, -0.17040660977363586, -0.5293206572532654, -1.773510217666626, -4.618059158325195, -2.5722224712371826, -1.6561448574066162, -0.7750309705734253, -2.1722538471221924, -2.259584665298462, -0.9980576038360596, -2.1489956378936768, -2.380957841873169, -1.409928798675537, -1.7049132585525513, -3.038337469100952, -3.5699002742767334, -1.9351481199264526, -4.8228864669799805, -1.1860252618789673, -1.4451255798339844, -0.6577172875404358, -0.8714030981063843, 4.828023433685303, -0.09004434943199158, 0.6540361046791077, -1.6343858242034912, -0.11864355206489563, -1.0188268423080444, -0.9150443077087402, -2.0789918899536133, -1.3079864978790283, -13.514573097229004, -1.7025418281555176, -1.3289794921875, 0.26978325843811035, 0.4417278468608856, -2.8209352493286133, -1.7564946413040161, -1.8812094926834106, -1.8900986909866333, -1.816015601158142, -1.794859528541565, 0.09237288683652878, -3.304506301879883, -2.5945963859558105, -1.8982394933700562, -1.6683275699615479, -0.4192184507846832, -1.602596640586853, -1.0238356590270996, 1.0494225025177002, -1.4263620376586914, -0.877532958984375, -0.8092076182365417, -1.909623622894287, -3.8817265033721924, -0.2928352952003479, -1.319711685180664, -0.024696294218301773, -0.046715836971998215, -1.0360255241394043, -4.939148902893066, -0.35044461488723755, 0.1329326182603836, 1.5021412372589111, 1.6484538316726685, 1.3356163501739502, 1.3763805627822876, 0.9870052337646484, 0.754561185836792, -0.2256736159324646, -3.6136341094970703, -2.1328065395355225, -1.8531798124313354, -0.8785865902900696, -0.3169863224029541, -0.3868444561958313, -0.24436858296394348, 4.012304782867432, 0.02375192381441593, -0.24277639389038086, 1.8004950284957886, 6.935372829437256, 3.426699161529541, 0.8592419624328613, 1.032814383506775, 1.7134208679199219, 4.780606746673584, 2.86541748046875, 1.7310099601745605, 1.9240026473999023, 2.5437889099121094, 0.27860119938850403, 1.4710638523101807, 1.6389554738998413, 1.2638041973114014, 1.743768572807312, 1.7848631143569946, 4.71369743347168, 4.928501605987549, 0.15834453701972961, 0.7107180953025818, 1.8689508438110352, 4.777875900268555, 2.3847639560699463, 1.508744478225708, 0.835726797580719, 2.089186429977417, 2.0611276626586914, 1.1264986991882324, 1.9246842861175537, 2.274366617202759, 1.415815830230713, 1.7813833951950073, 3.043009042739868, 3.579392671585083, 2.3239729404449463, 4.92617654800415, 1.0594977140426636, 1.541938066482544, 0.8909697532653809, 1.058164119720459, -4.953646183013916, 0.2314254343509674, -0.5010726451873779, 1.565821886062622, -0.08498072624206543, 1.0906447172164917, 1.1145848035812378, 2.2613987922668457, 1.3353822231292725, 13.459002494812012, 1.8276127576828003, 1.2087664604187012, -0.40858638286590576, -0.5224865078926086, 2.7963709831237793, 1.9214364290237427, 1.9604321718215942, 1.9101260900497437, 1.8663493394851685, 1.8928200006484985, 0.06411264836788177, 3.117678165435791, 2.5259783267974854, 2.0453412532806396, 1.50504732131958, 0.3203665614128113, 1.6099389791488647, 0.9770769476890564, -1.0374064445495605, 1.4239075183868408, 0.7744860053062439, 0.6815458536148071, 1.8055014610290527, 3.9175875186920166, 0.33965864777565, 1.2550137042999268, -0.11277629435062408, 0.05003013089299202, 0.9106857776641846, 4.843127250671387, 0.1744583249092102, -0.37111008167266846, -0.35408395528793335, -0.41920167207717896, -0.36892133951187134, -0.2612716853618622, -0.14953355491161346, -0.1300797462463379, -0.09386436641216278, 0.761993944644928, 0.4514209032058716, 0.2590124309062958, 0.22955216467380524, 0.08110851049423218, 0.01636931672692299, 0.1712530255317688, -0.9473946690559387, -0.07730364799499512, -0.16367153823375702, -0.32336774468421936, -0.5637524724006653, -0.6568450331687927, -0.28498411178588867, -0.15401208400726318, -0.32957980036735535, -1.0395737886428833, -0.49654823541641235, -0.4513591229915619, -0.3642613887786865, -0.5568627715110779, -0.0648648738861084, -0.2386358231306076, -0.2566433846950531, -0.16444730758666992, -0.46484479308128357, -0.5066210627555847, -1.0130572319030762, -0.9108573198318481, 0.012854591012001038, -0.18211284279823303, -0.4209402799606323, -1.1025869846343994, -0.542112410068512, -0.45608821511268616, -0.11394987255334854, -0.41872701048851013, -0.36886587738990784, -0.13483592867851257, -0.4383373558521271, -0.5084582567214966, -0.28491610288619995, -0.2893811762332916, -0.7073707580566406, -0.43783071637153625, -0.39699429273605347, -0.9675461649894714, -0.1085149496793747, -0.32067587971687317, -0.06519453227519989, -0.1662413477897644, 1.094576358795166, -0.08060134202241898, 0.12996505200862885, -0.28078484535217285, -0.2166997492313385, -0.20002377033233643, -0.13120070099830627, -0.42927756905555725, -0.28649941086769104, -2.780503273010254, -0.2695549428462982, -0.1906566619873047, 0.30543598532676697, 0.164018914103508, -0.5054414868354797, -0.3729121685028076, -0.33963578939437866, -0.3565989136695862, -0.4127393364906311, -0.4575944244861603, -0.09176865220069885, -4.205863952636719, -0.6541123986244202, -0.4885105490684509, -0.30788320302963257, -0.04713185131549835, -0.2438165545463562, -0.17967073619365692, 0.15327642858028412, -0.26989424228668213, -0.22979912161827087, -0.28838005661964417, -0.48686540126800537, -0.7482866048812866, 0.019190819934010506, -0.29602205753326416, -0.026977213099598885, 0.04035473242402077, -0.08245032280683517, -0.9105329513549805, -2.2175211906433105, 6.651045322418213, 2.1264047622680664, -1.8714848756790161, 0.7427754402160645]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (1.37, 1.54)}}, 'et0_eta0': {'discriminator': {'threshold': -0.29000082314014436, 'nodes': [100, 5, 1], 'bias': [-0.2670447528362274, -0.05183012783527374, -0.04433061555027962, -0.01940568909049034, 0.12205582112073898, -0.06483051925897598], 'weights': [3.3673596382141113, 0.9538314938545227, 0.12469179928302765, 0.14793643355369568, 0.12292370945215225, 0.14244332909584045, 0.05363531783223152, 0.2727659046649933, 0.20127421617507935, 5.471673488616943, -2.2917232513427734, -56.35588836669922, -7.483811855316162, 238.3892364501953, 23.928579330444336, -0.6855018138885498, -0.6985949873924255, -0.7719336152076721, -0.9904337525367737, -0.7493525147438049, -0.5686030387878418, -0.3108186721801758, -0.3364672362804413, -0.5717927813529968, -0.4712197780609131, -0.5751597285270691, 0.02359110116958618, -0.14523304998874664, -0.4195497930049896, -0.2937079966068268, -0.3265480399131775, -0.11184488981962204, -0.05166345834732056, -0.36686262488365173, -0.035324838012456894, -0.07183662056922913, 0.023579295724630356, -0.2239261269569397, 1.9652268886566162, 0.3540093004703522, 0.10157498717308044, -0.0472295768558979, -0.10854905098676682, -6.528909206390381, 0.4770190119743347, -5.920959949493408, -0.02509407512843609, 0.22881318628787994, 0.006710990332067013, 0.0423034206032753, 0.14291903376579285, 0.0028798754792660475, -0.06435569375753403, -0.09297280013561249, -0.01750238984823227, 0.16881519556045532, 0.013577342964708805, 0.3107413947582245, 0.5289624929428101, 0.05295141041278839, 0.002214140724390745, 0.7793008685112, 0.18886373937129974, 0.1399174928665161, 0.6809924244880676, 0.42242231965065, 0.23942527174949646, 0.17712023854255676, 0.19137126207351685, 0.30833229422569275, 0.5223438739776611, 0.2528019845485687, 0.03141295164823532, -0.2613995373249054, 0.002613998018205166, -0.12414177507162094, -0.1906363070011139, 0.15977433323860168, -0.010347102768719196, 0.1317352056503296, -2.0228161811828613, -0.733443558216095, -0.5982164740562439, 0.9739988446235657, -0.08812043070793152, -0.0462716706097126, 0.14372354745864868, 0.2767515778541565, -0.5808297991752625, 1.0944346189498901, 0.5372741222381592, 0.26997098326683044, 33.65594482421875, -0.10441919416189194, 0.10954698920249939, 0.39139625430107117, -0.5889819264411926, -0.13627903163433075, 0.031897131353616714, 0.402034729719162, -2.0622398853302, -0.47971126437187195, 0.05248516798019409, 0.5396581888198853, 0.11854470521211624, -0.03221516311168671, -0.17516742646694183, 0.07521197944879532, -1.1585129499435425, -2.037691116333008, 0.15316523611545563, 2.930943250656128, 4.300116062164307, 6.325833797454834, 3.688586711883545, 3.7707881927490234, 1.9932185411453247, 2.1685900688171387, 2.4550859928131104, 2.3979403972625732, 1.65420663356781, 1.431644082069397, 1.121984601020813, 1.3598629236221313, 1.3334085941314697, 1.4652296304702759, 0.41984719038009644, 0.6867101788520813, 0.9859870672225952, 0.8796342611312866, 1.1492809057235718, 0.9294144511222839, 0.6806155443191528, 0.9390397667884827, 0.6808654069900513, 0.2863014042377472, 0.49021103978157043, 0.6875697374343872, 0.43727371096611023, 0.6431524753570557, 0.4541271924972534, 0.3779536783695221, 0.32298752665519714, 0.1940022110939026, -0.3520684540271759, 0.4393394887447357, 0.23620043694972992, 0.15122626721858978, 0.36370429396629333, 0.2137497365474701, 0.032892245799303055, 0.43780162930488586, 0.358362078666687, 0.3809700608253479, 0.25069960951805115, 0.18334415555000305, 0.11974256485700607, -0.1486794501543045, -0.789038360118866, 0.17166413366794586, 0.04614442586898804, -0.13616326451301575, 0.15864013135433197, 0.13319332897663116, -0.9418767690658569, -0.4598008692264557, 0.17115722596645355, 0.04908979684114456, -0.3070511221885681, -0.46989622712135315, -0.2992255389690399, 0.0446004793047905, -0.3222765326499939, 0.027071138843894005, 0.5913528203964233, 0.5946903824806213, 0.8207100629806519, 0.5013989806175232, 0.24765194952487946, 0.07745945453643799, 4.8783698081970215, 1.909494161605835, 1.50694739818573, 0.8237159252166748, 0.681323766708374, 0.6196965575218201, 0.6132150292396545, -0.29694995284080505, 1.573716402053833, 1.286145567893982, 0.42683544754981995, -0.18397630751132965, 1.587890386581421, 0.8797012567520142, 0.24249505996704102, -0.3894813060760498, 1.8243526220321655, 0.7878984808921814, 0.34737083315849304, -0.28171148896217346, 2.1819846630096436, 0.6837678551673889, -0.11844699829816818, 0.11501149833202362, 0.10053221136331558, 0.10499868541955948, 0.09244313091039658, 0.0955471470952034, 1.1564537286758423, 1.933864712715149, 0.10591151565313339, -1.899510145187378, -4.402230739593506, -6.009922027587891, -3.5053625106811523, -3.7243921756744385, -2.1733078956604004, -2.4498023986816406, -2.705738067626953, -2.582272529602051, -1.610629916191101, -1.3316141366958618, -1.1391551494598389, -1.4406028985977173, -1.411054253578186, -1.4956468343734741, -0.6153815984725952, -0.7629891633987427, -1.0301345586776733, -0.7873314023017883, -1.2381641864776611, -1.1041938066482544, -0.6400653123855591, -0.8345872759819031, -0.5066656470298767, -0.6872684955596924, -0.5841124653816223, -0.8501527309417725, -0.2372208535671234, -0.4529244303703308, -0.46652692556381226, -0.4378315806388855, -0.5341199040412903, -0.32230648398399353, 0.5129676461219788, -0.21320122480392456, -0.059549931436777115, 0.08367621153593063, -0.27304521203041077, -0.01009787991642952, -0.23602382838726044, -0.341096967458725, -0.3086916208267212, -0.3472224175930023, -0.3764722943305969, -0.22513264417648315, -0.10309196263551712, 0.0815345048904419, 0.6847986578941345, -0.2124079018831253, -0.007125559262931347, 0.2023378312587738, -0.12009096145629883, -0.30767735838890076, 1.0986933708190918, 0.41850510239601135, -0.09262259304523468, -0.19774480164051056, 0.3572198152542114, 0.5051928758621216, 0.33715784549713135, -0.02062220871448517, 0.31153354048728943, 0.053906094282865524, -0.4416230022907257, -0.6985936760902405, -0.7678687572479248, -0.4290647804737091, -0.3711625337600708, -0.15430736541748047, -4.864480495452881, -1.9816323518753052, -1.3885812759399414, -1.0061266422271729, -0.4656505584716797, -0.6132838129997253, -0.5853897333145142, 0.27578455209732056, -1.6483615636825562, -1.1072192192077637, -0.23469579219818115, 0.13465337455272675, -1.596671462059021, -0.9030832052230835, -0.21226856112480164, 0.28404566645622253, -1.6349564790725708, -0.6653254628181458, -0.3474262058734894, 0.2672330141067505, -2.147552490234375, -0.6583167314529419, 0.01303065288811922, 0.5524669885635376, 0.06811608374118805, -0.07579807192087173, -0.17176733911037445, -0.10420197993516922, -1.009429931640625, -1.8512049913406372, -0.08785201609134674, 1.987621784210205, 4.3664469718933105, 6.418051719665527, 3.560272216796875, 3.686209201812744, 2.0355031490325928, 2.2862768173217773, 2.5611984729766846, 2.3746848106384277, 1.81546151638031, 1.4301809072494507, 1.157996654510498, 1.3695895671844482, 1.5349611043930054, 1.4142025709152222, 0.4753105938434601, 0.7501814961433411, 0.943249523639679, 0.871303379535675, 1.143628716468811, 1.036559820175171, 0.5004879832267761, 0.8888629674911499, 0.5656195282936096, 0.5616952180862427, 0.6064168810844421, 0.8109273910522461, 0.24027834832668304, 0.4154175817966461, 0.5288015007972717, 0.4328177571296692, 0.33573034405708313, 0.3299432098865509, -0.4288945496082306, 0.31871163845062256, 0.05238587036728859, 0.11161775141954422, 0.3658129870891571, 0.13098779320716858, 0.20487791299819946, 0.31112128496170044, 0.27915164828300476, 0.353778213262558, 0.3688020706176758, 0.07108382135629654, 0.27720776200294495, -0.21031315624713898, -0.6032363772392273, 0.0506373792886734, 0.21133626997470856, -0.19123466312885284, 0.13970975577831268, 0.12329836189746857, -1.0521756410598755, -0.35878661274909973, 0.16087280213832855, 0.05987543240189552, -0.31787461042404175, -0.4419977366924286, -0.2635335624217987, 0.10338404029607773, -0.2344905287027359, -0.15982739627361298, 0.55088210105896, 0.6106911301612854, 0.7485193610191345, 0.5122960805892944, 0.45970186591148376, 0.2425527274608612, 4.819601535797119, 2.057878017425537, 1.310017704963684, 0.9128594994544983, 0.5672999620437622, 0.7760669589042664, 0.5864931344985962, -0.24902451038360596, 1.663435697555542, 1.207999348640442, 0.3486822843551636, -0.16429470479488373, 1.6904305219650269, 1.0178347826004028, 0.24724605679512024, -0.39276033639907837, 1.8282784223556519, 0.7873908877372742, 0.34983429312705994, -0.28356850147247314, -2.0456159114837646, -0.6278152465820312, 0.23125514388084412, 0.024553675204515457, 0.1432483047246933, -0.18588314950466156, -0.15102198719978333, 0.03273387253284454, -1.2207673788070679, -2.109090566635132, -0.24524728953838348, 1.9536356925964355, 4.376587867736816, 6.384340286254883, 3.6282994747161865, 3.685394763946533, 2.0502471923828125, 2.4934184551239014, 2.5604565143585205, 3.4589407444000244, 1.7075806856155396, 1.4917783737182617, 1.1893131732940674, 1.3703690767288208, 1.5095096826553345, 1.4892301559448242, 2.300849199295044, 0.6193945407867432, 1.090956211090088, 0.7602118253707886, 1.2824450731277466, 1.0779026746749878, 0.6622447371482849, 0.9970871806144714, 0.6264367699623108, 0.6854411959648132, 0.6597336530685425, 0.9048330783843994, 0.37142258882522583, 0.4627552628517151, 0.4762515425682068, 0.4325876533985138, 0.5053542852401733, 0.30256161093711853, -0.47468701004981995, 0.2963486909866333, 0.2587302625179291, 0.09204568713903427, 0.10675150901079178, 0.23103202879428864, 0.14975279569625854, 0.2691170573234558, 0.4239700436592102, 0.25140300393104553, 0.23678719997406006, 0.13798175752162933, 0.2639019191265106, 0.09032312035560608, -0.6554651856422424, 0.15702813863754272, 0.1864757388830185, -0.12346725910902023, 0.044918108731508255, 0.24728088080883026, -1.1188005208969116, -0.38047513365745544, 0.036939334124326706, 0.24591459333896637, -0.2568366229534149, -0.43444153666496277, -0.2768213152885437, 0.12258082628250122, -0.23953522741794586, -0.1821790635585785, 0.5271991491317749, 0.8022661209106445, 1.0044928789138794, 0.4672382175922394, 0.41317373514175415, 0.10818641632795334, 4.848023891448975, 1.9197083711624146, 1.2731341123580933, 0.8431903719902039, 0.5690756440162659, 0.8230016827583313, 0.5954012274742126, -0.27462753653526306, 1.6079009771347046, 1.28499174118042, 0.4452112317085266, -0.2728967070579529, 1.7170624732971191, 1.031516432762146, 0.27498331665992737, -0.19250011444091797, 1.8049074411392212, 0.6921998858451843, 0.4936983585357666, -0.2593942880630493, 0.26210880279541016, -1.2625597715377808, 1.5303987264633179, -1.5684280395507812, -1.0793853998184204]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (0, 0.8)}}, 'et0_eta1': {'discriminator': {'threshold': -0.3000008136034012, 'nodes': [100, 5, 1], 'bias': [0.07912710309028625, -0.16592642664909363, 0.055430684238672256, -0.014784482307732105, -0.11522287130355835, -0.12357601523399353], 'weights': [1.2840709686279297, 1.0852738618850708, -1.369315505027771, -1.0972867012023926, -1.0591846704483032, -0.5868259072303772, -0.5033472180366516, 0.45805636048316956, 3.0219221115112305, 6.521931171417236, 0.7696393132209778, -1.1207029819488525, -9.013591766357422, -8.786622047424316, -16.484954833984375, -8.003006935119629, -11.550616264343262, -7.426932334899902, -14.481563568115234, -9.667226791381836, -6.513081073760986, -14.283663749694824, -7.581745624542236, -3.855841875076294, -6.146892547607422, -4.966252326965332, -3.899606227874756, -8.743027687072754, -9.825140953063965, -4.15073299407959, -3.7676351070404053, -8.134994506835938, -1.7930970191955566, -2.957526445388794, -7.309337139129639, -2.869568347930908, -1.2411209344863892, -0.4964625835418701, -0.6609916090965271, -8.12388801574707, 0.07207289338111877, -0.7860850691795349, -0.11284670233726501, -1.487958312034607, -0.020855560898780823, -0.8731772303581238, -0.8096827268600464, 0.0732320249080658, -0.3150261640548706, 0.02905810996890068, -0.995207667350769, -1.0919345617294312, -0.15127159655094147, -1.3341938257217407, -0.8651060461997986, -0.3385183811187744, -1.0255811214447021, -1.0689022541046143, -1.055164098739624, -1.282610297203064, -1.202532172203064, -1.0187021493911743, -0.0031027160584926605, 0.4577540159225464, 1.0728589296340942, -1.665403127670288, 0.27040785551071167, 1.377341628074646, -1.037282943725586, -1.1434032917022705, -1.0827538967132568, -0.23808342218399048, 0.2897590100765228, 0.23347310721874237, -1.439068078994751, -2.127610206604004, -2.681788444519043, -1.8412806987762451, -0.6987819075584412, -0.674576461315155, -18.550996780395508, -35.748653411865234, -5.584532737731934, -4.5014142990112305, -1.9423075914382935, -1.8683924674987793, -2.301374912261963, -2.0529160499572754, -3.8626766204833984, -1.3899667263031006, -0.4271785020828247, 0.06509584188461304, -5.1670026779174805, -7.045017242431641, -0.6467087864875793, -0.08863567560911179, 0.6757574081420898, -4.818759441375732, -1.6520500183105469, -0.1650698035955429, -1.3969467878341675, -1.0588984489440918, 1.201957106590271, 1.0305925607681274, 0.5654529929161072, 0.7016580104827881, 0.5683532357215881, -0.4255702793598175, -0.6322590708732605, -6.661533355712891, -0.8094892501831055, 1.136033058166504, 8.776829719543457, 8.133058547973633, 15.86755084991455, 11.914630889892578, 11.58179759979248, 7.319742679595947, 7.704929828643799, 4.131524562835693, 6.025197505950928, 8.556721687316895, 6.642760276794434, 4.042305946350098, 8.797414779663086, 4.97426700592041, 3.0041821002960205, 4.278590679168701, 3.5625953674316406, 4.250214099884033, 3.4392945766448975, 3.757570505142212, 1.6601496934890747, 2.351585865020752, 6.8001484870910645, 2.0337579250335693, 0.347318559885025, 0.35584232211112976, 0.5493640899658203, 3.4181058406829834, -1.800899624824524, 0.8725427985191345, -0.6859787106513977, 0.375021368265152, -0.017898498103022575, -0.76921546459198, 1.0174942016601562, -0.204852893948555, -0.18405576050281525, -0.04502330720424652, 1.0492870807647705, 1.1943683624267578, 0.16519154608249664, 1.198194146156311, 0.9113389253616333, 0.2884261906147003, 0.8527284860610962, 0.9921883940696716, 1.1452449560165405, 1.091947317123413, 1.2275621891021729, 1.0474659204483032, -0.02204449288547039, -0.3030826449394226, -1.834603190422058, 2.953547477722168, -0.25386515259742737, -3.2523655891418457, 0.9597296714782715, 1.0528501272201538, 1.0732698440551758, 0.29469817876815796, -0.2843596339225769, 0.08665354549884796, 1.3373972177505493, 2.6264841556549072, 2.9760782718658447, 1.5219119787216187, 0.28468286991119385, 0.65105801820755, 29.478986740112305, 19.256484985351562, 3.654445171356201, 3.2975962162017822, 1.9612878561019897, 1.9934256076812744, 2.1262357234954834, 2.747645616531372, 2.1848957538604736, 0.9484288692474365, 0.42111948132514954, 0.011531686410307884, 1.7289865016937256, 4.474213600158691, 0.5794274806976318, 0.14325931668281555, -0.6980209946632385, 1.689314842224121, 1.680753231048584, 0.43043363094329834, 1.4198896884918213, 1.1724351644515991, -1.2676851749420166, -1.0225167274475098, -1.1697516441345215, -0.652888298034668, -0.4285288155078888, 0.46871963143348694, 6.038356304168701, 7.608031272888184, 0.7189407348632812, -0.7749762535095215, -8.64765739440918, -8.643425941467285, -16.62508201599121, -7.422845363616943, -7.396313190460205, -7.358218669891357, -20.10141372680664, -9.51939582824707, -6.677906036376953, -8.46608829498291, -6.1652679443359375, -4.059062480926514, -4.127655982971191, -4.611688613891602, -4.166707992553711, -8.83194637298584, -5.011529445648193, -4.232881546020508, -3.480527639389038, -8.003325462341309, -1.9020739793777466, -5.648332118988037, -7.834463119506836, -3.0236034393310547, -1.3015278577804565, -0.5348185300827026, -0.575002133846283, -8.022153854370117, 0.053185638040304184, -1.0732767581939697, -1.2053927183151245, -14.197378158569336, 0.12662771344184875, -0.7601639628410339, -0.9760968089103699, 0.1690288484096527, -0.44749560952186584, -0.09660908579826355, -0.8458526134490967, -1.0971641540527344, -0.15835420787334442, -1.3222320079803467, -0.7642360329627991, -0.14284765720367432, -1.093598484992981, -1.0231292247772217, -1.1242387294769287, -1.3498948812484741, -1.354475498199463, -0.9810306429862976, 0.04331092908978462, 0.1815822720527649, 1.2831919193267822, -2.0378880500793457, 0.20876015722751617, 1.4835833311080933, -0.8552014231681824, -1.1035544872283936, -1.0856980085372925, -0.313055157661438, 0.472921222448349, 0.016651004552841187, -1.32878577709198, -1.4505106210708618, -2.7862777709960938, -1.927201271057129, -1.9413669109344482, -0.671669065952301, -19.203067779541016, -43.51567459106445, -5.260374546051025, -3.8644309043884277, -1.9614670276641846, -2.033909559249878, -2.29429030418396, -1.7797765731811523, -5.82073974609375, -3.339376926422119, -0.2603709101676941, -0.09782269597053528, -7.246058464050293, -7.146083831787109, -0.7044716477394104, -0.05370618402957916, -0.5264856219291687, -9.590896606445312, -1.8590527772903442, -0.3807181715965271, -3.4317924976348877, -2.387251138687134, -1.1785171031951904, 0.16945688426494598, 0.023112919181585312, 0.125418558716774, -0.058877550065517426, -0.1212882325053215, -0.5480054020881653, -1.3482944965362549, -0.5728951096534729, 4.2049431800842285, 4.665281772613525, 7.559491157531738, -1.0751097202301025, 4.99504280090332, 3.9325902462005615, 5.595550060272217, 5.287074089050293, 0.6213304996490479, 1.1315468549728394, 0.9817242622375488, 0.4577907621860504, -3.5285890102386475, 0.7720510959625244, -0.01893536001443863, 0.10369762778282166, 0.7110373973846436, 0.6112645268440247, 0.5180173516273499, 0.6054081916809082, 0.5625311136245728, 0.1062650978565216, 0.3081289827823639, 0.3381759226322174, 0.030843429267406464, -1.1930210590362549, -0.6945692300796509, 0.14775222539901733, 0.17419017851352692, -1.1252453327178955, -0.16901077330112457, -0.7228468060493469, -0.6231184005737305, -0.2387773096561432, 0.02976912632584572, 0.2557046711444855, -0.11299484223127365, -1.6002718210220337, 0.08276022225618362, 0.10218506306409836, 0.35337337851524353, -0.09017346054315567, 0.3069175183773041, 0.125926673412323, 0.1369849443435669, -0.06943865865468979, 0.30263787508010864, 0.1388980746269226, 0.3707877993583679, 0.18670988082885742, 0.29261356592178345, 0.009834211319684982, -0.10565973073244095, -0.3551506996154785, 0.23803870379924774, -0.1629188060760498, -0.8372681736946106, 0.26768946647644043, 0.1463763266801834, 0.19380158185958862, -0.025454001501202583, -0.16451886296272278, 0.10199533402919769, -0.19431482255458832, 0.2841373085975647, -1.5142260789871216, -0.15219049155712128, 0.0282551571726799, -0.29358410835266113, -15.149063110351562, -51.47811508178711, -2.3692684173583984, -2.042296886444092, 0.25086161494255066, 0.07330512255430222, 0.3385659158229828, 0.4951131045818329, -1.3850706815719604, -0.48017585277557373, 0.2557167112827301, -0.26179957389831543, -4.3300371170043945, -6.841148376464844, -0.3751208782196045, -0.09754855930805206, -0.39967072010040283, -4.620398044586182, 0.3564530909061432, 0.20330394804477692, -1.2459572553634644, -56.96366882324219, -0.7495980262756348, 0.011348708532750607, 0.11209464818239212, 9.955830574035645, -0.06092618405818939, -13.085612297058105, -0.2878324091434479, -0.2512703537940979, -0.49577951431274414, 1.1158549785614014, 7.858916759490967, 7.4706292152404785, 1.018741250038147, -7.3854756355285645, -2.5500779151916504, 0.9552017450332642, 0.4499334692955017, -0.04558247700333595, 0.29995816946029663, 0.3665873110294342, 0.10671399533748627, -1.1987484693527222, -0.5400920510292053, -0.6814135909080505, 0.13564755022525787, 0.1608869880437851, -104.66850280761719, -169.39642333984375, 0.07884839177131653, -102.97691345214844, 0.02893991209566593, 0.05247867479920387, 0.07826483249664307, 0.022828275337815285, -0.11322685331106186, -0.13274729251861572, 0.01461065374314785, 0.1906159669160843, -0.2515842914581299, 0.07994776964187622, -0.07447956502437592, -0.002124455524608493, -0.06016562134027481, 0.022761227563023567, 0.1023334488272667, 0.03907359391450882, -0.32530465722084045, -0.023200180381536484, 0.17184220254421234, -0.8465481400489807, -0.026417547836899757, 0.05951248109340668, 0.0580524280667305, 0.16763614118099213, -0.5651357173919678, 0.18924766778945923, -0.04362701624631882, 56.32249069213867, 0.03974832594394684, 0.09963121265172958, -0.0235025342553854, 0.0804140567779541, 60.060550689697266, 0.12103980034589767, 0.1095990240573883, 0.0033664556685835123, -41.487667083740234, 0.022729652002453804, 0.1605251133441925, -27.0974178314209, 0.06675954163074493, 0.3092840015888214, 3.8759312629699707, -0.061421528458595276, -0.3207261264324188, 0.06679592281579971, 0.15752357244491577, -0.27046674489974976, 0.6729123592376709, 15.326720237731934, -0.3765791356563568, -0.45191535353660583, 0.03407667577266693, 0.11166712641716003, 0.04790399968624115, 7.216158866882324, -6.869367599487305, -0.8730899691581726, 0.1303199678659439, 0.4529549777507782, -7.460299015045166, -4.544906139373779, -0.011660169810056686, -0.3016832172870636, -3.282896041870117, -3.0215036869049072, 0.21493300795555115, -0.25750163197517395, 1.067456841468811, -0.8189592361450195, 0.5232970118522644, -1.397671103477478, -0.22574138641357422]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (0.8, 1.37)}}, 'et1_eta1': {'discriminator': {'threshold': 0.21499871015548705, 'nodes': [100, 5, 1], 'bias': [0.07878746837377548, 0.08677341043949127, -0.09062515199184418, 0.10544684529304504, -0.1438593566417694, -0.21356718242168427], 'weights': [1.5659047365188599, 0.9648809432983398, -0.7304093241691589, -0.8659931421279907, -0.5332820415496826, -0.6363723874092102, -0.6183121204376221, 0.5051336884498596, 1.8755152225494385, 4.341065883636475, 1.1710530519485474, -6.505293846130371, -17.135475158691406, -13.428292274475098, -6.281867980957031, -5.9451751708984375, -7.6033735275268555, -4.792149066925049, -10.520689964294434, -6.9343976974487305, -6.146981239318848, -5.211281776428223, -4.789704322814941, -5.944562911987305, -4.862949371337891, -3.8030171394348145, -2.786053419113159, -2.33024001121521, -2.247626543045044, -4.0970234870910645, -4.164268493652344, -2.3015685081481934, -1.5032230615615845, -2.2909789085388184, -1.96016263961792, -1.5655924081802368, -1.4894702434539795, -1.505671739578247, -2.519827365875244, -1.4610744714736938, -1.9143593311309814, -2.332859992980957, -0.9403269290924072, -0.46448612213134766, -0.41769787669181824, -1.0052388906478882, -1.2059849500656128, -0.8606165051460266, -0.9873995184898376, -1.755239725112915, -0.9632722735404968, -1.0134726762771606, -0.6971625685691833, 0.7132185697555542, -0.92207270860672, 0.5220871567726135, -1.1433005332946777, -0.9014135599136353, -1.107071042060852, 0.7974112629890442, -1.0199843645095825, -0.7142215967178345, -0.13026972115039825, 0.556758463382721, -0.4890362024307251, -0.26106613874435425, -0.5221725702285767, 1.1105656623840332, 0.45916321873664856, 0.863219141960144, 1.188941478729248, 1.289387822151184, 0.41741055250167847, 0.2294377237558365, -0.863728404045105, -1.2451235055923462, -1.4489322900772095, -1.1300575733184814, -0.676684558391571, 0.04219311475753784, -11.073896408081055, -5.958713054656982, -3.7205474376678467, -2.2830512523651123, -2.058666706085205, -1.5542536973953247, -1.684546709060669, -1.4801374673843384, -1.6644035577774048, -1.1295888423919678, -0.1065991148352623, -0.06916838884353638, -2.6380465030670166, -2.2330574989318848, -0.6323823928833008, -0.09574839472770691, -3.526456117630005, -1.6932258605957031, -0.7307733297348022, -0.07618052512407303, 1.6140717267990112, 0.9083461761474609, -0.7463324069976807, -0.8311288952827454, -0.6001104712486267, -0.7199063301086426, -0.5407007932662964, 0.4181956350803375, 1.8925896883010864, 4.2272419929504395, 1.1489477157592773, -6.5041584968566895, -17.399843215942383, -13.281804084777832, -6.325334548950195, -6.1422038078308105, -7.677373886108398, -4.601325511932373, -10.71367073059082, -6.997285842895508, -5.289201736450195, -5.228020668029785, -4.903777599334717, -5.832911491394043, -4.8241472244262695, -3.728384017944336, -2.610104560852051, -2.2858636379241943, -2.1417181491851807, -4.03259801864624, -4.108504295349121, -2.1530563831329346, -1.5008083581924438, -2.2566938400268555, -2.0193371772766113, -1.3875036239624023, -1.532289981842041, -1.4816795587539673, -2.671248197555542, -1.4923733472824097, -1.7616122961044312, -2.263819456100464, -1.3079100847244263, -0.4640495777130127, -0.444748193025589, -0.8307403326034546, -1.1547013521194458, -0.9561236500740051, -0.8646517992019653, -1.9384024143218994, -0.8790929913520813, -0.8918765783309937, -0.6544865369796753, 0.6777697801589966, -0.9317110180854797, 0.36096832156181335, -1.1082967519760132, -0.9093438982963562, -0.9813116788864136, 0.9327680468559265, -0.9579432010650635, -0.5382611751556396, -0.08897580206394196, 0.6081376671791077, -0.5213435888290405, -0.2733864188194275, -0.5167144536972046, 1.2780096530914307, 0.6490981578826904, 0.9599391222000122, 1.0825730562210083, 3.2302823066711426, 0.3404315114021301, 0.340251088142395, -0.7044371366500854, -1.343554139137268, -1.4054852724075317, -1.162047028541565, -0.6280338168144226, -0.03413762152194977, -11.0466947555542, -6.0684685707092285, -3.680893659591675, -2.2185206413269043, -1.9613081216812134, -1.766802430152893, -1.538538932800293, -1.5903377532958984, -1.6422985792160034, -1.1004009246826172, -0.3240223526954651, 0.019039610400795937, -2.675464630126953, -2.0370731353759766, -0.715338945388794, 0.07707063108682632, -3.4667811393737793, -1.5985088348388672, -0.6330763101577759, -0.2528696060180664, -1.8960459232330322, -1.0027258396148682, 0.5067305564880371, 0.9527478218078613, 0.5965510010719299, 0.6773747801780701, 0.6360541582107544, -0.37760090827941895, -1.856453776359558, -4.162657737731934, -1.2584235668182373, 4.1336212158203125, 17.259607315063477, 13.476606369018555, 4.914238929748535, 6.1066155433654785, 4.895866394042969, 4.815507888793945, 6.058750152587891, 6.964010715484619, 5.503296852111816, 5.141127586364746, 4.798845291137695, 5.95290994644165, 4.833743572235107, 3.675502061843872, 2.635925531387329, 2.3094918727874756, 2.1458842754364014, 4.1145734786987305, 4.103004455566406, 2.2598516941070557, 1.585964322090149, 2.247837543487549, 2.005201578140259, 1.464837670326233, 1.4872993230819702, 1.401034951210022, 2.5492796897888184, 1.5010583400726318, 1.9074424505233765, 2.2760417461395264, 0.9120607972145081, 0.3335728943347931, 0.4092237949371338, 0.8501002788543701, 0.988400399684906, 0.9440240263938904, 0.8589757680892944, 1.9261723756790161, 0.8281877636909485, 0.8581674695014954, 0.5785379409790039, -0.6083903908729553, 0.7873806953430176, -0.4215870499610901, 1.148308277130127, 1.0334372520446777, 0.8644837141036987, -0.8941318392753601, 0.9214351773262024, 0.7328749895095825, 0.23996219038963318, -0.5538854598999023, 0.4644482731819153, 0.16767346858978271, 0.4057011008262634, -1.1372860670089722, -0.4897937476634979, -0.9502201676368713, -1.1757266521453857, -2.9842140674591064, -0.31299638748168945, -0.22618018090724945, 0.6952820420265198, 1.340942144393921, 1.2970201969146729, 0.9921518564224243, 0.6076508164405823, -0.07443709671497345, 10.887611389160156, 6.003010272979736, 3.7811877727508545, 2.2261946201324463, 1.977461814880371, 1.7278523445129395, 1.7282135486602783, 1.4463237524032593, 1.7224303483963013, 1.0049279928207397, 0.18181076645851135, 0.030149556696414948, 2.480088710784912, 2.040257692337036, 0.5761620998382568, -0.03482672944664955, 3.369814157485962, 1.586854100227356, 0.8215991854667664, 0.1370849609375, -1.9574146270751953, -1.4521090984344482, 0.5122400522232056, 1.244722604751587, 0.46037474274635315, 0.6663198471069336, -0.4412102699279785, -0.40150901675224304, -2.0123469829559326, -4.304135322570801, -1.124223232269287, 1.647291660308838, 0.6924226880073547, 2.7552714347839355, 4.283718109130859, 5.832663536071777, 4.807033061981201, 4.5992112159729, 5.247172832489014, 7.131104946136475, 8.728988647460938, 5.158673286437988, 4.692447662353516, 2.9892163276672363, 4.940555572509766, 3.655928611755371, 2.8859896659851074, 2.2362890243530273, 2.1317646503448486, 4.200026988983154, 4.107665061950684, 2.2438814640045166, 1.4463459253311157, 2.302215099334717, 1.9755080938339233, 1.4332865476608276, 1.5041675567626953, 1.2268800735473633, 2.7608890533447266, 1.5800702571868896, 1.8395700454711914, 2.3027749061584473, 0.9759875535964966, 0.28785842657089233, 0.4544990360736847, 0.9149465560913086, 1.1415576934814453, 0.7402114868164062, 0.9559215307235718, 4.758305072784424, 1.0376139879226685, 0.820446252822876, 0.7723636627197266, 0.11163204908370972, 0.9046827554702759, -0.36732906103134155, 0.9617301821708679, 0.9629319310188293, 0.8458541035652161, -0.8507170081138611, 0.3376142680644989, 0.6558126211166382, 0.265159547328949, -0.6776720881462097, 0.6683129072189331, 0.5833651423454285, 0.494357705116272, -1.1640784740447998, -0.4030939042568207, -0.8857857584953308, -1.1221160888671875, -1.3282568454742432, -0.42802050709724426, -0.38321736454963684, 0.8942076563835144, 1.3892022371292114, 1.4553353786468506, 1.089930534362793, 0.6936759352684021, 0.21910341084003448, 9.287567138671875, 6.0840277671813965, 3.7529306411743164, 2.204075336456299, 2.13480806350708, 1.546316385269165, 1.7612775564193726, 1.529960036277771, 1.7187312841415405, 1.0184004306793213, 0.343377947807312, -0.47148779034614563, 2.7142953872680664, 2.209083318710327, 0.70292729139328, 0.10405966639518738, 3.4039182662963867, 1.7822790145874023, 0.6875117421150208, 0.23780299723148346, -32.8738899230957, -37.81534194946289, -12.075221061706543, -11.468256950378418, 0.1232815831899643, 0.1510644257068634, 0.1675015687942505, -0.1855236440896988, -0.2837938964366913, -0.9961743354797363, -0.08889590948820114, 129.31890869140625, 36.529449462890625, -51.88301467895508, -0.763431191444397, 14.546732902526855, 0.9965766668319702, 0.9104911088943481, 1.0545297861099243, 1.5091228485107422, 1.1056817770004272, 1.0016740560531616, 0.9258796572685242, 0.6225981712341309, 0.44181889295578003, 0.5954463481903076, 0.43079787492752075, 0.5151424407958984, 0.5330643057823181, 0.8831751346588135, 0.5037179589271545, 0.4067386984825134, 0.28257647156715393, 0.37684744596481323, 0.4513453245162964, 0.3809264004230499, 0.2865481674671173, 0.20386245846748352, 0.4507436156272888, 0.21807721257209778, 0.29659008979797363, 0.24266064167022705, 0.20065656304359436, 0.08314323425292969, 0.17437247931957245, 0.2457980513572693, 0.32229387760162354, 0.12069272994995117, 0.30228695273399353, 0.39774054288864136, 0.29997503757476807, -0.38129720091819763, 0.22167706489562988, -4.299506664276123, 0.15059468150138855, 0.01656518317759037, 0.32797038555145264, 0.22446657717227936, 0.23864319920539856, 16.24289321899414, 0.11468687653541565, 0.05124553665518761, -0.009889920242130756, -0.0911027267575264, 0.058842312544584274, 0.1794758290052414, 51.05099868774414, -0.15405355393886566, -0.14565473794937134, 65.0590591430664, -0.10797565430402756, -0.3192015290260315, 0.034379709511995316, 0.10224781185388565, 0.31473875045776367, 0.21954958140850067, 0.21234479546546936, 0.26896044611930847, -2.2880539894104004, -0.40903541445732117, 2.2169198989868164, -10.6796293258667, 0.8226518630981445, 0.36855462193489075, 0.3180898427963257, 0.2192901372909546, 0.23922139406204224, 0.434328556060791, 0.22227689623832703, 0.29848235845565796, 0.09666231274604797, -0.0003206164692528546, 0.6237031817436218, 0.3524901866912842, 0.08637594431638718, -0.07169216871261597, 0.588862419128418, 0.26130980253219604, -0.273329496383667, -0.024277890101075172, 0.9060134887695312, 0.4790574610233307, -1.419803261756897, -2.179589033126831, -0.4510728120803833]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0.8, 1.37)}}, 'et1_eta0': {'discriminator': {'threshold': 0.28999863862991332, 'nodes': [100, 5, 1], 'bias': [-0.14838357269763947, 0.25144878029823303, -0.11652927845716476, 0.13229498267173767, -0.07578805834054947, 0.13491149246692657], 'weights': [95.19129943847656, 11.741856575012207, 16.02507781982422, 0.10011348128318787, -0.02626211754977703, -0.26236891746520996, 0.1921187937259674, 0.4249992370605469, 0.7690505385398865, 7.012474060058594, 0.19285306334495544, -52.06716537475586, -3.558515787124634, -1.7555186748504639, -2.833900213241577, 0.13553743064403534, -1.0423412322998047, -1.1745504140853882, -1.8256951570510864, -0.9797239899635315, -10.708517074584961, -1.3077757358551025, -0.8748009204864502, -0.7803052663803101, -1.2832530736923218, -1.6770447492599487, -1.9737194776535034, -0.8626661896705627, -0.8816892504692078, -0.7034444212913513, -0.6762866973876953, -0.635657012462616, -0.6396099925041199, -0.3468100130558014, -0.5341374278068542, -0.11195473372936249, -0.40212300419807434, -0.2480846792459488, -0.325020432472229, -3.855881452560425, 0.07648580521345139, 2.0059103965759277, 0.38595050573349, -0.28606802225112915, -0.1911175400018692, 0.0496709980070591, -0.20416133105754852, -0.13591425120830536, -0.21782056987285614, -0.14982694387435913, -0.3458673357963562, 2.685936212539673, 0.0830884650349617, -0.2343558520078659, -0.02893759496510029, -0.23814614117145538, -0.15646962821483612, -0.36947208642959595, -0.644164502620697, -0.2825821340084076, 2.2481906414031982, -0.44918546080589294, -0.40254706144332886, -0.24485482275485992, -0.3470233678817749, -0.6762277483940125, -0.3632008135318756, -0.2105434387922287, -0.2939314544200897, -0.46783432364463806, 0.10626179724931717, -0.16687007248401642, -0.4400171637535095, -0.8531773686408997, -0.17114804685115814, -0.43476438522338867, 8.49741268157959, -0.1664600819349289, 9.129036903381348, -0.08669326454401016, -3.7099428176879883, -1.9276771545410156, -1.057891607284546, -0.5976185202598572, -0.26905229687690735, -0.1107390746474266, -0.38286274671554565, -0.5918667912483215, 11.096704483032227, 1.0739575624465942, -0.24779626727104187, -2.242649555206299, 5.053264141082764, -0.8903695940971375, 0.8266764879226685, -1.0125495195388794, -1.3823695182800293, -27.63068962097168, -2.53593111038208, -8.042662620544434, -2.737989902496338, -1.0389459133148193, 0.4913625419139862, 0.10595270246267319, 0.13811925053596497, -0.19078178703784943, -0.21392704546451569, -0.6970409154891968, -2.3928592205047607, -2.9218931198120117, 2.389368772506714, 1.0842325687408447, 8.03018856048584, 4.644124984741211, 6.77893590927124, 5.495616912841797, 4.594947338104248, 3.778296709060669, 4.166909694671631, 3.835531711578369, 3.7985637187957764, 2.952554225921631, 2.3199124336242676, 3.3626532554626465, 3.175717830657959, 2.214024305343628, 2.5483808517456055, 2.8874990940093994, 1.8591904640197754, 1.4633781909942627, 2.016352415084839, 1.6907203197479248, 1.1530073881149292, 1.0271637439727783, 1.25846266746521, 0.5229665637016296, 1.8052173852920532, 0.6280537247657776, 1.2053626775741577, 1.6536502838134766, 1.254310965538025, 0.31223177909851074, 1.107873558998108, 0.6442340016365051, 0.6684360504150391, 0.021251684054732323, 0.701140820980072, 0.699420154094696, 0.7883498072624207, 0.674681544303894, 0.9158751964569092, -0.0821174755692482, 0.285078227519989, 0.40715131163597107, 0.3526609241962433, 0.5237181782722473, 0.4306817352771759, -0.8004676699638367, 1.0787967443466187, -0.9037007093429565, 0.10453902184963226, 0.5124558210372925, -0.8510817289352417, 0.5017541646957397, -0.6077107787132263, 2.1264536380767822, -0.9079309701919556, 0.3165406882762909, -0.9242562055587769, 2.0951483249664307, -0.3876737058162689, -0.18814775347709656, -0.579097330570221, -0.4602149426937103, 0.5520136952400208, 1.4085649251937866, 1.6525052785873413, 0.8659822344779968, 0.7131392955780029, 0.17101585865020752, 9.001567840576172, 3.801792860031128, 2.7835278511047363, 1.6930255889892578, 1.703271746635437, 0.7098519206047058, 1.3761498928070068, 1.8842169046401978, 3.7300264835357666, 2.490417242050171, 1.1095693111419678, -0.08724035322666168, 3.7904562950134277, 2.062978982925415, 0.7154816389083862, -0.371543288230896, 4.978955268859863, 2.01200532913208, 0.10207057744264603, -0.2757415771484375, 2.7562854290008545, 1.1481013298034668, 2.4806113243103027, -0.13878732919692993, -0.13191728293895721, 0.29225191473960876, 0.09628856927156448, 0.47339704632759094, 2.2541606426239014, 2.7372288703918457, -2.2985401153564453, -1.172971487045288, -8.135680198669434, -4.71184778213501, -6.749009132385254, -5.21626615524292, -4.5369486808776855, -3.824171304702759, -4.156552314758301, -3.7673161029815674, -3.903435230255127, -2.910134792327881, -2.4492738246917725, -3.3961477279663086, -3.1751935482025146, -2.3678030967712402, -2.574861526489258, -2.817983865737915, -2.059072494506836, -1.6089917421340942, -1.9422978162765503, -1.6940301656723022, -1.7977452278137207, -1.5840034484863281, -1.2880768775939941, -1.0989676713943481, -1.7105618715286255, -0.5255144238471985, -1.1470330953598022, -2.075187921524048, -1.1716173887252808, -0.411764919757843, -1.7554481029510498, -0.672191321849823, -0.8301509022712708, -0.0434354729950428, -0.7817392945289612, -0.8091703057289124, -0.8585111498832703, -0.7360691428184509, -0.9522177577018738, 0.13340355455875397, -0.3006344735622406, -0.5779744982719421, -0.6740109920501709, -0.5372864603996277, -0.5184283256530762, -0.7861366868019104, -0.9753947257995605, 0.6817193627357483, -0.2591269016265869, -0.8696759939193726, 0.6915005445480347, -0.5585052371025085, 0.5093518495559692, -2.310509204864502, 0.850063681602478, -0.32538288831710815, 0.9049855470657349, -1.4595438241958618, 0.497938334941864, 0.026875782757997513, 0.47351351380348206, 0.3532848060131073, -0.5181555151939392, -1.4200944900512695, -1.74879789352417, -0.9060390591621399, -0.5860204696655273, -0.31095582246780396, -9.100980758666992, -3.7149252891540527, -3.2036616802215576, -1.8167163133621216, -1.7820651531219482, -1.1369755268096924, -1.2624938488006592, -1.7861624956130981, -3.9490883350372314, -2.5219972133636475, 0.013021562248468399, 0.09003457427024841, -3.8627545833587646, -2.1616156101226807, -0.7725381851196289, 0.1400979608297348, -4.973443508148193, -1.877490520477295, -0.38001173734664917, 0.22719255089759827, -2.6791460514068604, -1.0740805864334106, 0.6742224097251892, 0.2183074653148651, 0.24098700284957886, -0.2630571126937866, -0.14663521945476532, -0.6423366069793701, -2.112431764602661, -4.136777877807617, 2.4870362281799316, 1.4848414659500122, 8.121408462524414, 4.807705402374268, 6.898557662963867, 5.348454475402832, 4.5023345947265625, 3.8281822204589844, 4.318142890930176, 3.7068848609924316, 3.9023501873016357, 3.069344997406006, 2.3145384788513184, 2.688652753829956, 3.284595012664795, 2.31209659576416, 2.4553372859954834, 2.807197093963623, 1.8894648551940918, 1.5708591938018799, 2.62680983543396, 1.7795666456222534, 1.8132777214050293, 1.741929531097412, 1.3996309041976929, 0.6534087061882019, 1.8329761028289795, 0.5905709266662598, 1.1026984453201294, 1.4855315685272217, 1.2832627296447754, 0.33725202083587646, 2.0967719554901123, 0.7504424452781677, 0.8471408486366272, 0.022409165278077126, 0.7526841759681702, 0.7959187626838684, 0.8463996052742004, 0.632745087146759, 0.8736437559127808, -0.14266042411327362, 0.34806883335113525, 0.6010323166847229, 0.5680012702941895, 0.4543585777282715, 0.4858270287513733, -0.8253456950187683, 1.1311039924621582, -0.8435128927230835, 0.2741364538669586, 0.909307599067688, -0.9468972682952881, 0.584182858467102, -0.5513917207717896, 1.9260207414627075, -0.9443435072898865, 0.46451103687286377, -0.9175392389297485, 1.5605148077011108, -0.27525851130485535, -0.16740450263023376, -0.45197272300720215, -0.3012372553348541, 0.6997389793395996, 1.4629709720611572, 1.7846672534942627, 0.8147075772285461, 0.6206318736076355, 0.09512259066104889, 8.920882225036621, 3.9832763671875, 2.9573493003845215, 1.4843014478683472, 1.7643756866455078, 1.1718899011611938, 1.2684293985366821, 1.5955935716629028, 3.8892362117767334, 2.9177746772766113, 1.0332192182540894, -0.059792354702949524, 3.819514274597168, 2.138584613800049, 0.7816184163093567, -0.27615463733673096, 3.9615116119384766, 2.031785488128662, 0.10081794857978821, -0.10329484939575195, 2.569387435913086, 1.3086349964141846, 0.45039135217666626, -0.13960394263267517, -0.22413140535354614, -0.08052155375480652, 0.09547892957925797, -0.1618652641773224, 0.48517608642578125, 1.152969479560852, -1.8770301342010498, -5.145897388458252, -6.518013000488281, -4.695010662078857, 0.7889900803565979, -0.9573135375976562, -0.5719367861747742, -0.6067541837692261, -0.874249279499054, -0.5320576429367065, -0.6982170939445496, -0.662816047668457, -0.587698221206665, -0.463765412569046, -0.648121178150177, -0.8131048679351807, -0.5987052321434021, -1.097834825515747, -0.39535051584243774, -0.4116835594177246, -0.33606502413749695, -0.5002649426460266, -0.43801525235176086, -0.3365999162197113, -0.3694484531879425, -0.13577018678188324, -0.42855143547058105, -0.23667606711387634, -0.17177703976631165, -0.7949079275131226, -0.18176163733005524, 0.8906658887863159, -0.25346076488494873, -0.22299210727214813, -0.01927288807928562, 0.02859361842274666, -0.08741401880979538, -0.20356565713882446, -0.2601315975189209, -0.20806293189525604, -0.13253656029701233, -0.09619174152612686, -0.036301594227552414, -0.13379035890102386, -0.11062785983085632, -0.238739475607872, -0.26680827140808105, -0.1274007260799408, -0.20274396240711212, 0.5608354806900024, 0.272896945476532, -0.23260410130023956, -0.17474469542503357, -0.27110347151756287, 0.06125000864267349, -0.3960183560848236, 0.14882424473762512, -0.08174638450145721, -0.19581131637096405, -0.2543712854385376, -0.015106226317584515, -0.11259234696626663, 0.2796128988265991, 0.30497807264328003, -0.46281594038009644, -0.3996846079826355, -0.2621391713619232, -0.2377009093761444, -0.0989050567150116, -0.03724947199225426, -1.7369047403335571, -1.0734820365905762, -0.4958740174770355, -0.062190599739551544, -0.2812640368938446, -0.19974268972873688, -0.28775131702423096, -0.26564815640449524, 0.3730814754962921, -0.16685444116592407, 0.07420745491981506, 0.3034503161907196, 1.0472584962844849, -0.38392573595046997, 0.39567098021507263, 0.21045194566249847, -0.6231736540794373, -0.3825681507587433, -0.00195758743211627, 0.38315948843955994, 0.3620164096355438, -1.560401201248169, 0.8041791319847107, -1.574544906616211, 1.7111692428588867]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0, 0.8)}}, 'et3_eta1': {'discriminator': {'threshold': 0.40499852895736693, 'nodes': [100, 5, 1], 'bias': [0.08400861918926239, 0.2620103359222412, 0.24071946740150452, 0.19827689230442047, -0.21444356441497803, -0.16269882023334503], 'weights': [1.3870303630828857, 1.545779824256897, -0.1211574450135231, -0.1604125052690506, 0.003455043537542224, 0.0373167023062706, -0.0008176243281923234, -0.1041955053806305, 1.9358210563659668, 1.1951357126235962, 0.10143648833036423, -25.354907989501953, -0.6181513071060181, -0.6878902912139893, -0.28270137310028076, -0.26728931069374084, 0.09674908220767975, -0.04723811149597168, -0.10195126384496689, -0.09748301655054092, -0.08096246421337128, -0.11469700187444687, -0.18720217049121857, -0.15647678077220917, -0.10083829611539841, -0.09872053563594818, -0.08260013908147812, -0.19229328632354736, -0.17390254139900208, -0.013552741147577763, -0.04412402585148811, -0.020637324079871178, -0.06556025892496109, 0.010761035606265068, 0.007332846987992525, -0.09549709409475327, 0.0055735427886247635, -0.04326797276735306, -0.026291750371456146, -0.012747513130307198, -0.11395005136728287, -0.08593226224184036, -0.18707366287708282, -0.17402325570583344, 0.03683244064450264, -0.08664781600236893, -0.048864684998989105, -0.043266694992780685, -0.13139894604682922, -0.1760513335466385, -0.0735984519124031, 0.033980291336774826, -0.05367200821638107, 0.04039214923977852, -0.13830821216106415, -0.17115141451358795, -0.16189970076084137, 0.006275412626564503, -0.15192170441150665, -0.13326263427734375, -0.0323016531765461, 0.03400120884180069, 0.048464350402355194, -0.10741231590509415, -0.0037862390745431185, 0.018620189279317856, -0.022172946482896805, -0.019969813525676727, 0.03648371994495392, -0.06694190204143524, -0.07595319300889969, 0.03042070008814335, -0.09400361031293869, -0.08751234412193298, 0.23960021138191223, 0.010954230092465878, -0.011702854186296463, -0.09963168203830719, -0.00548516632989049, -0.16506044566631317, -0.04024888202548027, 1.709905982017517, -0.009197653271257877, -0.20769701898097992, 0.00027013005455955863, -0.15704846382141113, -0.18527181446552277, 0.028678344562649727, 0.027525002136826515, -0.1432519257068634, -0.13393062353134155, -0.02212144061923027, -0.22258269786834717, -0.1720305234193802, 0.03878394514322281, 0.007031652610749006, -0.20320329070091248, -0.05397924408316612, -0.09084600955247879, -0.030423659831285477, 1.8000046014785767, 1.5978862047195435, -1.9218839406967163, -1.8942296504974365, -0.8629290461540222, -0.5792128443717957, -0.05435245856642723, 0.03689047321677208, 2.4350266456604004, 3.194561004638672, 0.44461438059806824, -9.256474494934082, -0.9887266159057617, -4.604175090789795, -9.85036563873291, -9.955562591552734, -4.12244176864624, -9.302202224731445, -7.7895073890686035, -7.782469749450684, -7.924829483032227, -6.798374652862549, -6.597860813140869, -4.442999839782715, -4.796265602111816, -5.3657636642456055, -6.788576126098633, -3.9174540042877197, -2.8785464763641357, -3.409435272216797, -3.828425645828247, -3.0410830974578857, -4.328237056732178, -4.840612888336182, -3.2818822860717773, -2.694267749786377, -2.799024820327759, -2.5303401947021484, -2.8014657497406006, -2.3828911781311035, -2.671236276626587, -2.8098084926605225, -2.375687599182129, -1.5008713006973267, -0.8590118288993835, 1.332993507385254, 2.859013319015503, -2.7545406818389893, -1.90874183177948, -1.5139425992965698, -0.9410613775253296, -1.0205518007278442, -1.034328579902649, 7.021887302398682, -0.550938069820404, -1.2195676565170288, -1.3496793508529663, -1.1987366676330566, -0.7768914103507996, -0.7735779285430908, -1.1650207042694092, 2.5105559825897217, -0.5942962765693665, -0.061837270855903625, -1.202467679977417, -1.9875118732452393, -2.077728271484375, 0.023267388343811035, 0.5732965469360352, -0.47423866391181946, -0.9673288464546204, -1.1379636526107788, 0.3638814091682434, 0.3653498888015747, -1.3761401176452637, -3.0876646041870117, -2.8285109996795654, -2.564142942428589, -1.7563674449920654, -0.7710369229316711, -8.261331558227539, -9.57934856414795, -7.496679306030273, -4.245700836181641, -3.300792932510376, -2.7256243228912354, -3.2882378101348877, -2.9284284114837646, -3.1938936710357666, -1.7253892421722412, -0.5164909958839417, 0.20818915963172913, -5.838634490966797, -4.411934852600098, -2.0533292293548584, -1.2924243211746216, -5.335330486297607, -4.256328582763672, -2.877652883529663, -0.3888950049877167, 1.6076847314834595, 1.5545684099197388, -1.8873270750045776, -1.8025767803192139, -0.8662094473838806, -1.142563819885254, -0.0529746375977993, -0.13299113512039185, 2.3590879440307617, 3.2289724349975586, 0.5835632681846619, -9.185218811035156, -0.9604030847549438, -4.507839679718018, -10.056012153625488, -9.956707000732422, -4.040421485900879, -9.494743347167969, -7.678216457366943, -7.771495819091797, -7.840197563171387, -6.653186321258545, -6.669130802154541, -4.495187759399414, -4.7033796310424805, -5.266236305236816, -6.804109573364258, -4.041956424713135, -3.045346736907959, -3.474898338317871, -4.017399787902832, -3.159050703048706, -4.450016021728516, -4.641916751861572, -3.3199379444122314, -2.578796148300171, -2.8245441913604736, -2.554020404815674, -2.6153576374053955, -2.471339225769043, -2.6475069522857666, -2.725276231765747, -2.379896640777588, -1.4618204832077026, -0.9186662435531616, 1.3636624813079834, 2.909921646118164, -2.7451729774475098, -1.3279407024383545, -1.3647207021713257, -0.928147554397583, -1.0977929830551147, -0.9804644584655762, 6.970958232879639, -0.439843088388443, -1.059820532798767, -1.3140761852264404, -1.0901777744293213, -0.9821703433990479, -0.6636222004890442, -1.134922981262207, 2.334444522857666, -0.6153058409690857, -0.1405148059129715, -1.3018606901168823, -2.033582925796509, -2.0539443492889404, -0.08865343034267426, 0.7440711259841919, -0.2513491213321686, -0.9271875023841858, -0.9564580917358398, 0.4307788610458374, 0.38828444480895996, -1.396104097366333, -3.0934195518493652, -2.78790545463562, -2.5201985836029053, -1.7397568225860596, -0.6647769808769226, -8.308713912963867, -9.542397499084473, -7.708185195922852, -4.226221084594727, -3.327768087387085, -2.585510730743408, -3.122009038925171, -2.928595781326294, -3.1857454776763916, -1.7513740062713623, -0.3979124128818512, 0.2594325840473175, -5.800276756286621, -4.5548930168151855, -2.093766927719116, -1.3664616346359253, -5.283833980560303, -4.259984493255615, -2.8230862617492676, -0.4071483314037323, 1.699032187461853, 2.4416637420654297, -1.8492661714553833, -1.9438350200653076, -0.9471112489700317, 0.3965320587158203, 0.4386395514011383, -0.17594856023788452, 2.4020628929138184, 3.2416229248046875, 0.48300525546073914, -8.711160659790039, -0.028571004047989845, -0.9841560125350952, -10.014693260192871, -10.013465881347656, -4.2019124031066895, -9.446413040161133, -7.7291083335876465, -7.722021579742432, -7.922181129455566, -6.6611857414245605, -6.584670543670654, -4.470090866088867, -4.754766464233398, -3.2413151264190674, -6.723607063293457, -3.8558523654937744, -2.9753382205963135, -3.41188907623291, -3.83762264251709, -3.247236490249634, -4.454031944274902, -4.693950176239014, -3.2998342514038086, -2.669220447540283, -2.5948688983917236, -2.634884834289551, -2.752702236175537, -2.44820237159729, -2.719721555709839, -2.7137038707733154, -1.983793020248413, -0.9862497448921204, -0.9923154711723328, 1.2447136640548706, 9.625431060791016, -2.73079252243042, -1.4025661945343018, -1.4989519119262695, -0.8381300568580627, -1.004886269569397, -0.8731553554534912, 6.873755931854248, -0.5713590979576111, -1.253420352935791, -1.3982919454574585, -0.7301944494247437, -0.9856669902801514, -0.6818344593048096, -1.122927188873291, 2.863640546798706, -0.4517926275730133, -0.13653726875782013, -0.7909726500511169, -1.7048566341400146, -1.890999674797058, -0.012608615681529045, 9.152520179748535, -0.4751805365085602, -1.0773954391479492, -0.9502674341201782, 0.4680348336696625, 0.09042961150407791, -1.4125020503997803, -3.125809907913208, -2.7144336700439453, -2.627927780151367, -1.6304054260253906, -0.661928117275238, -7.867833614349365, -9.178266525268555, -7.608427047729492, -4.360863208770752, -3.37911319732666, -2.6212716102600098, -3.2007334232330322, -2.8146395683288574, -3.2725203037261963, -1.8375976085662842, -0.5516853332519531, 0.18065145611763, -5.989046096801758, -4.561517238616943, -2.1645686626434326, -0.069617360830307, -5.382036209106445, -4.417229652404785, -2.8349673748016357, -0.8898947238922119, -1.6094502210617065, -2.661825180053711, 1.7281036376953125, 1.8384814262390137, 0.7556837797164917, -0.3615821897983551, -0.062011729925870895, 0.06735330075025558, -2.481142520904541, -3.130866527557373, -0.5814651846885681, 8.928794860839844, 0.9175635576248169, 4.564447402954102, 9.970992088317871, 10.053274154663086, 4.205488204956055, 9.293432235717773, 7.655348300933838, 7.757172584533691, 7.794203758239746, 6.767029285430908, 6.596225261688232, 4.353512763977051, 4.562531471252441, 5.278942108154297, 6.729154586791992, 3.8607726097106934, 3.0463004112243652, 3.556260824203491, 3.828110933303833, 3.1530776023864746, 4.38740348815918, 4.552087306976318, 3.3550286293029785, 2.6658520698547363, 2.7426342964172363, 2.469050407409668, 2.631613254547119, 2.5260581970214844, 2.6577532291412354, 2.748791456222534, 2.0346450805664062, 1.4344130754470825, 1.0039559602737427, -1.2467317581176758, -1.9087446928024292, 2.736844539642334, 1.5022457838058472, 1.411020278930664, 0.9106569290161133, 0.9674198627471924, 0.8818994760513306, -7.0665154457092285, 0.4264790117740631, 1.0790997743606567, 1.2363909482955933, 1.2605414390563965, 0.8254251480102539, 0.845571756362915, 1.127962589263916, -2.4217958450317383, 0.5122345685958862, 0.06578044593334198, 1.3833636045455933, 1.980806589126587, 2.071420669555664, 0.08308499306440353, -0.6231350898742676, 0.27991509437561035, 0.9711769223213196, 1.0928012132644653, -0.37353163957595825, -0.39586418867111206, 1.2463382482528687, 2.9772725105285645, 2.9024198055267334, 2.6931049823760986, 1.8739650249481201, 0.694912850856781, 8.26921272277832, 9.65395450592041, 7.613109588623047, 4.346840858459473, 3.348928689956665, 2.7357542514801025, 3.2670624256134033, 2.881432056427002, 3.2476694583892822, 1.734588384628296, 0.523329496383667, -0.20963075757026672, 5.959713459014893, 4.338916778564453, 2.07399582862854, 1.3437578678131104, 5.273766994476318, 4.252528667449951, 2.7896552085876465, 0.25933343172073364, 1.6186773777008057, 2.1224305629730225, 1.5090688467025757, 0.6439090967178345, -1.478746771812439]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0.8, 1.37)}}, 'et0_eta3': {'discriminator': {'threshold': -0.080001008510589611, 'nodes': [100, 5, 1], 'bias': [-0.06872621923685074, 0.03307996317744255, -0.23921453952789307, -0.06494033336639404, -0.18441444635391235, 0.31420576572418213], 'weights': [1.1976479291915894, 1.1918416023254395, -0.1382010132074356, -0.6023399829864502, -0.7240791320800781, -0.6505488157272339, -0.6093899607658386, -0.34861627221107483, 1.8854871988296509, 2.6244194507598877, 2.654365301132202, -0.14100617170333862, -0.5267295241355896, -0.28703752160072327, -7.191267967224121, -4.465005397796631, -3.7317757606506348, -8.905920028686523, -4.735798358917236, -7.743622779846191, -3.4018361568450928, -0.05608991160988808, -6.728381633758545, -8.23458194732666, -3.9403929710388184, -3.006030321121216, -2.711745500564575, -3.346447467803955, -2.326688051223755, -2.109919548034668, -0.5147548913955688, -1.968123197555542, -3.480151891708374, -6.054640769958496, -1.142769694328308, -1.98679780960083, 0.1615237295627594, 0.3403989374637604, 0.2695309817790985, -1.0647729635238647, 0.0740254819393158, 1.0841532945632935, -2.926279306411743, -1.5454617738723755, -0.5176843404769897, 0.11136742681264877, -6.313849449157715, 1.3565044403076172, -0.2605409324169159, -0.990673840045929, -0.3235543668270111, -1.599892020225525, 0.3980337381362915, 0.9674480557441711, 0.5569025278091431, -1.3428746461868286, -0.2748319208621979, -0.9134907722473145, 0.4903411567211151, -0.6930826902389526, 0.2818569540977478, -0.5017110109329224, 1.5692251920700073, -1.2303651571273804, 0.6028472185134888, -0.2740112841129303, 0.6013957262039185, -0.6984028220176697, 1.0342010259628296, -0.5773690938949585, 1.8782917261123657, 1.2547498941421509, 0.509377121925354, 0.47140994668006897, -1.8850581645965576, -2.933959484100342, -2.1245598793029785, -1.9417221546173096, -1.2160096168518066, -0.347282737493515, -15.758408546447754, -10.45015811920166, -4.259603500366211, -0.8548963069915771, -2.0923585891723633, -2.778348445892334, 0.9994131922721863, -1.1098016500473022, -0.5933070182800293, -1.4944028854370117, -0.4275020956993103, -0.1313917636871338, -5.532641887664795, -2.516216993331909, -0.07028330117464066, -0.04767567291855812, -0.4112379252910614, -0.07741036266088486, 0.13981930911540985, -2.760042428970337, -1.0493351221084595, -1.1243500709533691, 0.09304428100585938, 0.5045327544212341, 0.9096773266792297, 0.8408878445625305, 0.5277706980705261, 0.37105610966682434, -1.742631435394287, -2.5432610511779785, -2.5564956665039062, 0.22631721198558807, 0.32676345109939575, 0.10996110737323761, 7.247534275054932, 4.458943843841553, 3.710369110107422, 8.79906177520752, 4.917060852050781, 7.606398582458496, 3.7535743713378906, -0.07122580707073212, 4.889994144439697, 4.466143608093262, 4.046082973480225, 2.8723483085632324, 2.6209402084350586, 3.3939313888549805, 2.310600519180298, 2.2353200912475586, 0.5538920760154724, 2.1038951873779297, 3.440603494644165, 6.052570343017578, 1.1919294595718384, 2.1146488189697266, -0.22042077779769897, -0.36891189217567444, -0.2156139463186264, 1.1432558298110962, -0.14311255514621735, -1.227011799812317, 3.0968141555786133, 1.6369976997375488, 0.444904088973999, -0.1313966065645218, 6.40336799621582, -1.095916986465454, 0.39591464400291443, 1.0142964124679565, 0.34312161803245544, 1.5967074632644653, -0.49618256092071533, -0.9082210063934326, -0.6603153944015503, 1.3480644226074219, 0.4634259045124054, 0.9664291143417358, -0.4353172481060028, 0.6172215938568115, -0.35067519545555115, 0.3126639425754547, -1.5804325342178345, 1.1032880544662476, -0.5260769724845886, 0.14027687907218933, -0.6014657020568848, 0.48444801568984985, -0.9492918848991394, 0.6320152878761292, -2.009819984436035, -1.370741367340088, -0.5803539752960205, -0.4363330006599426, 1.8976479768753052, 3.0311591625213623, 2.1435470581054688, 2.006779432296753, 0.9773839712142944, 0.25403234362602234, 15.85167121887207, 10.469559669494629, 4.446294784545898, 0.9400776624679565, 1.938518762588501, 2.1135571002960205, -1.0013408660888672, 1.1384257078170776, 0.6940092444419861, 1.5435560941696167, 0.41838473081588745, 0.16723643243312836, 5.6759467124938965, 2.291001796722412, -0.024860527366399765, 0.035911526530981064, 0.29944905638694763, 0.23417073488235474, 0.019712600857019424, 2.7292098999023438, 2.481264591217041, 2.2801291942596436, 0.03779413551092148, -0.15724125504493713, -0.3424062430858612, -0.07547106593847275, -0.19199736416339874, -0.13443736732006073, 2.9475345611572266, 4.062973976135254, 2.8576979637145996, -6.101906776428223, -4.60906982421875, -3.58305287361145, -13.704071998596191, -8.596972465515137, -1.4450905323028564, 0.3064310550689697, 5.7766618728637695, -2.8282039165496826, 10.69840145111084, 4.800511837005615, -1.0980195999145508, -0.7566824555397034, -1.2969902753829956, 13.995598793029785, 5.0080156326293945, -1.2548549175262451, 6.736884593963623, -0.7117260694503784, 0.3949907422065735, 1.6167668104171753, 2.5928537845611572, -0.7386620044708252, 3.2658324241638184, -0.6925867199897766, 2.491560935974121, -0.6414268612861633, 0.7591795325279236, -0.2912251949310303, 0.34800097346305847, 0.6302226185798645, 0.1096944659948349, -0.7213243842124939, -0.1988636702299118, 0.08903734385967255, -0.7325190305709839, -0.09340585023164749, -0.25363677740097046, -0.6349132061004639, -0.01584606058895588, -0.7670139670372009, -0.4896441102027893, -0.5210203528404236, 0.2845474183559418, -0.7244967222213745, -0.5089740753173828, -0.5387217998504639, 0.028853239491581917, -0.4429834187030792, 0.07197647541761398, -0.4443061649799347, 0.8580699563026428, -0.6266505718231201, 0.46683478355407715, 0.15394212305545807, 0.4302699863910675, -0.058980174362659454, 0.4415808618068695, -0.23434093594551086, 1.8533775806427002, 0.4833405315876007, 0.9036070108413696, -0.021586187183856964, -0.6983773112297058, 3.4084079265594482, -1.4845311641693115, 0.4992196559906006, 1.0107059478759766, -0.39281514286994934, 2.7710535526275635, 13.816033363342285, -1.2146410942077637, 0.7918723225593567, -0.9272428750991821, -0.8534931540489197, 0.8947334289550781, 0.23085364699363708, 0.054398681968450546, 0.6441670656204224, 0.05373748391866684, 0.13250936567783356, 16.56742286682129, 9.95398235321045, 0.104967400431633, 0.9624089002609253, -0.24892404675483704, 0.17906038463115692, 0.29125577211380005, -0.6022586226463318, 1.0461007356643677, 1.2559155225753784, -0.2712388336658478, -0.7925508618354797, -0.7904696464538574, -0.773720920085907, -0.6248278617858887, -0.33554568886756897, 1.926790714263916, 2.6211698055267334, 2.6149191856384277, -0.2234211564064026, -0.4709564745426178, -0.3294180631637573, -7.170814514160156, -4.5053019523620605, -3.768587350845337, -8.872048377990723, -4.84211540222168, -7.6050190925598145, -3.7526473999023438, -0.1937699317932129, -6.744506359100342, -8.201873779296875, -3.965329170227051, -2.9055325984954834, -2.9496583938598633, -3.3750367164611816, -2.481515884399414, -2.2055130004882812, -0.5830821394920349, -2.023529291152954, -3.169849157333374, -6.016546249389648, -1.138245701789856, -2.0847153663635254, 0.05548820644617081, 0.3221282958984375, 0.2844690680503845, -1.108593225479126, 0.05557818338274956, 1.0521198511123657, -3.0607361793518066, -1.759029746055603, -0.5845960378646851, -0.009794293902814388, -6.410668849945068, 1.5034576654434204, -0.34046921133995056, -1.107670545578003, -0.2885671555995941, -1.5469094514846802, 0.48042571544647217, 1.0087361335754395, 0.5187746286392212, -1.278538465499878, -0.39988186955451965, -0.8841748237609863, 0.518634557723999, -0.7211765050888062, 0.2082178145647049, -0.2982442080974579, 1.4779547452926636, -1.077598214149475, 0.5938440561294556, -0.11019671708345413, 0.6488816142082214, -0.5492929220199585, 1.1870932579040527, -0.765427827835083, 1.9755843877792358, 1.381844401359558, 0.539974570274353, 0.4430347979068756, -1.7137421369552612, -2.9629628658294678, -2.2744812965393066, -2.0315017700195312, -1.3616678714752197, -0.33355197310447693, -15.714582443237305, -10.561205863952637, -4.430583477020264, -1.5568273067474365, -1.9205622673034668, -2.749734878540039, 0.9319148659706116, -1.3123542070388794, -0.7859432101249695, -1.5262622833251953, -0.4076409339904785, -0.14709152281284332, -5.614198684692383, -4.337588310241699, -0.18380026519298553, -0.14298123121261597, -0.31882938742637634, -0.13607220351696014, 0.06291235238313675, -2.765294313430786, 1.0509060621261597, 1.1357561349868774, -0.23168998956680298, -0.7986505031585693, -0.911983072757721, -0.6026881337165833, -0.3487003445625305, -0.2430620640516281, 3.532968759536743, 2.7017366886138916, 3.2690911293029785, -0.049583256244659424, -5.7912702560424805, -0.15426784753799438, -7.08832311630249, -4.573992729187012, -3.6989920139312744, -8.832311630249023, -3.2778313159942627, -7.796597957611084, -3.9504647254943848, -0.061321038752794266, -4.086387634277344, -4.368222236633301, -8.766107559204102, -2.0128304958343506, -2.9654664993286133, -3.388563632965088, -2.374119281768799, -2.233457565307617, -3.259967803955078, -1.9256590604782104, -3.1171300411224365, -2.5134668350219727, -1.2914636135101318, -2.106252431869507, 0.15445803105831146, 0.3821030557155609, 0.10667312890291214, -1.3149912357330322, 0.5084645748138428, 1.0869834423065186, -3.0970544815063477, -1.7119749784469604, -0.08680596202611923, 0.06258155405521393, -6.444218635559082, 0.3502236008644104, -0.21242330968379974, -1.0951319932937622, -0.2546929717063904, -1.606440544128418, 0.6145179271697998, 1.2103277444839478, 0.632448673248291, -1.3314791917800903, -0.0811661034822464, -1.034975528717041, 0.45937249064445496, -0.6499652862548828, 0.35213348269462585, -0.09756776690483093, 1.6599781513214111, -0.6064563989639282, 0.6383776068687439, -0.09063489735126495, 0.5485105514526367, -0.6656373739242554, 1.0177799463272095, -0.7947140336036682, 1.8756357431411743, 1.259620189666748, 0.5371514558792114, 0.5279979705810547, -1.2278653383255005, -3.1675608158111572, -2.074094772338867, -2.1427104473114014, -1.2348092794418335, -0.25406548380851746, -15.822690963745117, -10.370782852172852, -7.007852554321289, -1.590886116027832, -2.1699070930480957, -2.151991605758667, 1.3791866302490234, -1.2901591062545776, -0.7935076951980591, -2.3366434574127197, -0.09357325732707977, -0.04536448419094086, -5.623207092285156, -4.124639987945557, -0.20916515588760376, -0.07281368225812912, -0.2750243842601776, -0.27089807391166687, 0.14563024044036865, -2.7404072284698486, 0.4495205879211426, -0.24960488080978394, 0.8472018837928772, 0.7588435411453247, 1.0934642553329468]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (1.54, 2.5)}}, 'et3_eta3': {'discriminator': {'threshold': 0.3399985909461975, 'nodes': [100, 5, 1], 'bias': [-0.012690101750195026, -0.019296301528811455, 0.2097368985414505, 0.06169872730970383, -0.08923499286174774, -0.13771609961986542], 'weights': [-1.0130535364151, -1.8695361614227295, 0.7134630084037781, 1.8104948997497559, -0.7769774198532104, 1.1319326162338257, -0.34492456912994385, 0.2091120481491089, -1.3856807947158813, -1.4976760149002075, -0.45986637473106384, 2.477525234222412, 0.44421905279159546, 0.39680153131484985, 2.725558042526245, 5.971437931060791, 1.461711049079895, 4.885514259338379, 4.06856107711792, 3.039273977279663, 1.7291306257247925, 1.2302244901657104, 0.8806228637695312, 2.2270586490631104, 5.4806976318359375, 3.9692296981811523, 1.9382259845733643, 1.9462071657180786, 1.371470332145691, 2.7120168209075928, -1.0630080699920654, 2.0336625576019287, -0.011746625415980816, 2.02740478515625, 1.28681218624115, 1.6846039295196533, 1.4978781938552856, 1.9039198160171509, 1.0996514558792114, 2.8797121047973633, -0.14438579976558685, 2.8182151317596436, 0.6362091898918152, 1.2808767557144165, 0.30955183506011963, 1.104913592338562, 0.5786794424057007, -1.0642706155776978, -0.5983864068984985, 1.5646374225616455, 0.2665879428386688, -0.12011317908763885, 0.24322356283664703, 0.8991612792015076, 0.3495424687862396, 0.642586886882782, -1.724165678024292, 0.8794919848442078, -0.05641467496752739, 0.6110295653343201, 0.24256294965744019, -0.5348894596099854, 0.3241155743598938, 0.39218923449516296, 0.25385260581970215, 0.8626371622085571, 0.21854034066200256, 0.4821946620941162, -2.757903575897217, -2.4015214443206787, 0.41514235734939575, 0.6938744187355042, -0.5162703990936279, -0.38473138213157654, 1.259438157081604, 1.9376729726791382, 1.9331270456314087, 1.6959307193756104, 1.0981101989746094, 0.393974244594574, 2.5199520587921143, 4.543359756469727, 6.702901363372803, 1.917405128479004, 1.785683512687683, 1.8674720525741577, 0.7402540445327759, 1.2851225137710571, 0.5095517039299011, 1.432073712348938, 0.2314925193786621, 0.26483821868896484, 4.011752128601074, 1.488372564315796, 0.2861795723438263, 0.7558533549308777, -0.42731773853302, 0.08657048642635345, -0.11479514837265015, 0.5595415830612183, 0.9943864941596985, 1.861403465270996, -0.488151878118515, -1.819808006286621, 0.8041013479232788, -0.9673154354095459, 0.3596230745315552, -0.34904325008392334, 1.5636812448501587, 1.3463267087936401, 0.3882506489753723, -2.5864310264587402, -0.37640848755836487, -0.08460839837789536, -2.8409440517425537, -2.2391180992126465, -1.646734356880188, -4.8574018478393555, -3.9293041229248047, -3.0070812702178955, -1.7790387868881226, -1.367472767829895, -0.8723230361938477, -2.208461046218872, -5.511495590209961, -3.8584446907043457, -2.0234076976776123, -1.972678542137146, -1.4766250848770142, -2.6760246753692627, 1.1823527812957764, -2.1563398838043213, -0.19935442507266998, -1.9214961528778076, -1.1798454523086548, -1.6296238899230957, -1.4663089513778687, -1.783396601676941, -1.1834534406661987, -2.90910005569458, 0.35251420736312866, -2.9747719764709473, -0.5355457067489624, -1.2439055442810059, 0.21942633390426636, -1.12078058719635, -0.5544575452804565, 1.09528648853302, 0.37167519330978394, -1.6401143074035645, -0.2022491693496704, 0.0824509784579277, -0.21699126064777374, -0.8275657296180725, -0.1296526938676834, -0.6483139395713806, 1.667501449584961, -0.7002888321876526, 0.02536276914179325, -0.771704375743866, -0.309673011302948, 0.6220327019691467, -0.3685165047645569, -0.43144354224205017, -0.2997533082962036, -0.755573034286499, -0.2039588987827301, -0.49767041206359863, 2.9409961700439453, 2.571258306503296, -0.22105011343955994, -0.541606605052948, 0.5305947065353394, 0.44053080677986145, -1.3091496229171753, -1.9451225996017456, -1.8920503854751587, -1.72027587890625, -1.3297384977340698, -0.34065186977386475, -2.380805253982544, -4.455440521240234, -6.688385486602783, -1.9913265705108643, -1.6251119375228882, -1.8720210790634155, -0.8184264898300171, -1.1800707578659058, -0.3793899714946747, -1.3023432493209839, -0.28825998306274414, -0.20292825996875763, -4.033830165863037, -1.5883941650390625, -0.5024857521057129, -0.8226898312568665, 0.38987159729003906, -0.04933639243245125, 0.27144038677215576, -0.6528551578521729, 1535.697998046875, -7.566563129425049, -0.3362034559249878, 6.127004623413086, -134.8846893310547, -6.747729778289795, -0.31549271941185, 0.07968517392873764, -0.7109286785125732, -2.9991564750671387, -0.30329811573028564, 0.8413170576095581, 0.4325571656227112, 0.5640086531639099, 5.954688549041748, -83.07160949707031, 1.0855607986450195, 1.268211007118225, 1.658875584602356, -12.775851249694824, -22.435882568359375, -37.19643783569336, -13.573686599731445, 0.7745075821876526, 9.296792984008789, 1.3591676950454712, 0.6424844861030579, -1.655385971069336, -0.7611486911773682, 1.0870839357376099, -40.96883773803711, 0.7365546822547913, 0.4251643419265747, 0.6069502234458923, 0.3278835415840149, -8.132231712341309, 0.35062435269355774, 0.7988054156303406, 0.17850881814956665, 1.1966577768325806, -33.727779388427734, 1.230722427368164, 0.12097921967506409, 0.40310707688331604, -0.8750306963920593, 0.25021082162857056, -0.7543154358863831, -0.6889739036560059, -0.6603612899780273, 0.550871729850769, -0.06920773535966873, -0.15402205288410187, -0.140425443649292, 0.37455567717552185, 0.034115295857191086, 0.2779487073421478, -0.9593930244445801, 0.06621801853179932, -0.15528415143489838, 0.1394530087709427, -0.023600447922945023, -0.49678799510002136, -0.031357940286397934, -0.10219594091176987, 0.003180968575179577, 0.16807036101818085, 0.08215972781181335, 0.020174076780676842, -1.4432637691497803, -1.3084853887557983, 0.08324480056762695, 0.09515362977981567, -0.2500286400318146, -0.8727518916130066, 0.3113517165184021, 0.5977798700332642, 0.7640846967697144, 0.35935232043266296, -0.02200903370976448, -7.775704383850098, -54.3456916809082, 1.1809536218643188, -26.941221237182617, -46.51435852050781, 0.5088420510292053, 0.6364379525184631, -6.804378032684326, 0.33359062671661377, 81.87478637695312, 13.988085746765137, 0.05279451981186867, 0.08597724139690399, 1.7450703382492065, 0.6333150863647461, -0.21519257128238678, 22.23067855834961, -0.361352801322937, 0.019824333488941193, -0.19054675102233887, 7.7622904777526855, -0.9553853869438171, -1.9790019989013672, 0.5479722619056702, 1.915626049041748, -0.6678287982940674, 1.0792224407196045, -0.3149227499961853, 0.21716639399528503, -1.57701575756073, -1.4115947484970093, -0.7912191152572632, 2.488992691040039, 0.5176383852958679, 0.01846897043287754, 2.7182116508483887, 2.052654981613159, 1.5176335573196411, 4.779162406921387, 4.020149230957031, 3.04656720161438, 1.6076387166976929, 1.3088711500167847, 0.722421407699585, 2.3629753589630127, 5.461034774780273, 3.9888439178466797, 1.9581758975982666, 1.9494673013687134, 1.4768699407577515, 2.715693473815918, -1.1274176836013794, 2.202514171600342, 0.1283680945634842, 2.0431790351867676, 1.3149093389511108, 1.687981367111206, 1.4551576375961304, 1.9562345743179321, 1.1168626546859741, 2.8915462493896484, -0.2518756091594696, 2.875753164291382, 0.6652914881706238, 1.2410328388214111, -0.13984006643295288, 1.1208654642105103, 0.6098634600639343, -0.9000683426856995, -0.44290071725845337, 1.5416271686553955, 0.19222044944763184, -0.08033270388841629, 0.3046439588069916, 0.9124664664268494, 0.27935412526130676, 0.678560197353363, -1.6970304250717163, 0.5400169491767883, -0.011399169452488422, 0.7493487000465393, 0.1959983855485916, -0.5600623488426208, 0.3854066729545593, 0.23985278606414795, 0.23866842687129974, 0.662785530090332, 0.3154675364494324, 0.6701787114143372, -2.8678765296936035, -2.5332682132720947, 0.36906805634498596, 0.722297728061676, -0.5846952199935913, -0.4075091779232025, 1.2422224283218384, 1.725866675376892, 1.932085394859314, 1.7156829833984375, 1.3126379251480103, 0.3025326132774353, -0.862578809261322, 4.421380996704102, 6.645453929901123, 1.975903868675232, 1.6827961206436157, 1.986254334449768, 0.8401743173599243, 1.2442317008972168, 0.3258878290653229, 1.331126093864441, 0.29475200176239014, 0.2804960012435913, 4.131514072418213, 1.6180126667022705, 0.3953876793384552, 0.6145429015159607, -0.45996928215026855, 0.04682048037648201, -0.06234857439994812, 0.6628056764602661, 2.127974271774292, 1.985389232635498, -0.38232356309890747, -1.8470115661621094, 0.6693946123123169, -0.9231640696525574, 0.3261265754699707, -0.26342663168907166, 1.5610474348068237, 2.36187744140625, 0.8890228271484375, -2.466416120529175, 0.0437474399805069, -0.14612063765525818, -2.8271305561065674, -2.0611588954925537, -1.614615559577942, -4.63505220413208, -3.9273998737335205, -3.0702903270721436, -1.7724934816360474, -1.3545821905136108, -0.8219886422157288, -2.3168623447418213, -5.385948181152344, -3.9424924850463867, -1.921940565109253, -1.8809678554534912, -1.5144342184066772, -2.715623378753662, 1.1057642698287964, -2.192107915878296, -0.11941102147102356, -1.9921188354492188, -1.2446421384811401, -1.5735543966293335, -1.497243046760559, -1.8772114515304565, -1.111895203590393, -2.9471487998962402, 0.1457953006029129, -3.022235870361328, -0.4490777552127838, -1.1532342433929443, 0.1689779907464981, -1.2627816200256348, -0.19056522846221924, 1.0272307395935059, 0.41163158416748047, -1.6163190603256226, -0.3166213631629944, 0.12512139976024628, -0.17593805491924286, -0.9084994792938232, -0.18266268074512482, -0.7239826917648315, 1.7450309991836548, -0.65630704164505, 0.036941517144441605, -0.7366587519645691, -0.30975276231765747, 0.5614961981773376, -0.3711090087890625, -0.3471120297908783, -0.1886523813009262, -0.5806968808174133, -0.41220366954803467, -0.6597930788993835, 2.779768705368042, 2.4390182495117188, -0.41673988103866577, -0.6784767508506775, 0.5946556329727173, 0.3268611431121826, -1.3597277402877808, -1.7449132204055786, -1.9054521322250366, -1.7488070726394653, -1.1858036518096924, -0.3096122145652771, 1.0038888454437256, -4.458991527557373, -6.601884841918945, -1.9536596536636353, -1.7140873670578003, -1.835755467414856, -0.8624218702316284, -1.225271224975586, -0.7705239057540894, -1.330305576324463, -0.2822434604167938, -0.36786168813705444, -4.126810073852539, -1.5721787214279175, -0.34080711007118225, -0.8090224862098694, 0.3387714624404907, -0.09142432361841202, 0.12747538089752197, -0.6229060888290405, -1.822013258934021, 2.5561587810516357, -0.4319113790988922, -2.575791597366333, 1.3640925884246826]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (1.54, 2.5)}}, 'et0_eta2': {'discriminator': {'threshold': 0.18499873876571654, 'nodes': [100, 5, 1], 'bias': [0.0740942507982254, -0.06007218360900879, -0.1473710834980011, 0.05597534030675888, 0.16750994324684143, 0.13012652099132538], 'weights': [-1.0517817735671997, 0.16802196204662323, 1.4663076400756836, 0.5150785446166992, 0.05381222441792488, -2.4991824626922607, 0.3861342966556549, 0.40877765417099, 0.3886667490005493, -4.764517307281494, -3.8488268852233887, -3.8950982093811035, 0.17801228165626526, 1.6459916830062866, -1.1683205366134644, -1.0275481939315796, 5.77476692199707, -0.7624878287315369, -0.6606208682060242, 0.10978063941001892, 0.3314365744590759, 0.07557008415460587, 0.15490660071372986, 0.1983821988105774, 5.682046890258789, 1.5119644403457642, -0.24050761759281158, 3.012197494506836, 1.6698909997940063, 1.3211976289749146, 1.192269206047058, -0.8016904592514038, -0.07198423892259598, 1.3374708890914917, 1.7376724481582642, 1.429010272026062, 2.991372585296631, -1.08458411693573, 1.5429770946502686, -0.1538407951593399, 0.7634674310684204, 1.589094638824463, 1.8881877660751343, 1.3931552171707153, 1.4151959419250488, 1.2364542484283447, 0.8870375156402588, 0.7702187895774841, 0.6562994122505188, -0.9327248334884644, 0.3231920897960663, -1.8087104558944702, -0.23685550689697266, -0.5095539093017578, 0.6654106378555298, 2.7219882011413574, 2.6291749477386475, 1.3117403984069824, 1.3167848587036133, -0.2446056604385376, 0.7839341759681702, 1.005422830581665, 1.1950101852416992, 0.5214614868164062, 0.6100043058395386, -0.14294259250164032, -0.1940220445394516, -0.09250375628471375, 0.268110454082489, 0.16667549312114716, 0.6472163796424866, 0.353894978761673, 0.11717498302459717, -0.26599404215812683, 2.2951481342315674, 1.4448944330215454, 1.3319092988967896, 0.7411403656005859, 0.2963654696941376, 0.5021078586578369, -0.4632536768913269, 0.12948644161224365, -0.2519250512123108, 0.8176892995834351, 0.011637754738330841, -0.8079516291618347, 0.6551357507705688, 0.9359511733055115, -1.1770851612091064, 0.6528220176696777, 0.36740297079086304, -0.0789426937699318, 1.2961506843566895, -0.13571062684059143, 1.1442545652389526, 0.8163948059082031, -0.10180128365755081, 0.05880006030201912, -0.5211548805236816, -0.025255680084228516, 0.7313673496246338, -0.023635799065232277, -1.4468293190002441, -0.5934876203536987, 0.028543543070554733, 2.471452474594116, -0.4158157408237457, -0.206592857837677, -0.42895710468292236, 4.87015962600708, 3.961115837097168, 3.9524145126342773, -0.16786685585975647, -1.7249547243118286, 1.3116413354873657, 1.0748337507247925, -5.628201007843018, 0.7234885096549988, 0.528411328792572, -0.08875851333141327, -0.48572736978530884, -0.04377308487892151, -0.19493216276168823, -0.22066588699817657, -5.675931453704834, -1.656412959098816, 0.08158548176288605, -3.0232291221618652, -1.5874756574630737, -1.3444639444351196, -1.088882327079773, 0.8675150871276855, -0.05585324019193649, -1.4837809801101685, -1.7422865629196167, -1.2255347967147827, -3.157442092895508, 1.0423179864883423, -1.4748142957687378, 0.5054079294204712, -0.9231109619140625, -1.5690603256225586, -1.796244502067566, -1.5765613317489624, -1.4661540985107422, -1.2501475811004639, -0.7742009162902832, -0.6825814843177795, -0.7123939990997314, 0.9213225841522217, -0.4634900689125061, 1.6017268896102905, 3.362010955810547, 0.4920344352722168, -0.6457204222679138, -2.7114193439483643, -2.783172607421875, -1.4685192108154297, -1.3092772960662842, 0.42198076844215393, -0.9464324116706848, -1.0311115980148315, -1.2007677555084229, -0.562839925289154, -0.6815787553787231, 0.12460021674633026, 0.10716179013252258, 0.10381709039211273, -0.2235778272151947, -0.10480333864688873, -0.6012762188911438, -0.5561167001724243, -0.027298057451844215, 0.41184794902801514, -2.2188587188720703, -1.4139460325241089, -1.448706030845642, -0.800971269607544, -0.169809490442276, -0.6715972423553467, 0.38404980301856995, -0.15119865536689758, 0.12440945953130722, -0.635511577129364, -0.042899079620838165, 0.9490835666656494, -0.711346447467804, -0.8722526431083679, 1.1789851188659668, -0.709495484828949, -0.3752867579460144, 0.16730168461799622, -1.2621474266052246, 0.13003967702388763, -1.1052442789077759, -0.8459954261779785, 0.0857585072517395, -0.1146206185221672, 0.4948970675468445, -0.051395487040281296, 1.0251373052597046, 0.016275638714432716, -1.4731965065002441, -0.6171716451644897, 0.07966549694538116, 0.8737134337425232, -0.4731327295303345, -0.21301203966140747, -0.49674496054649353, 4.876373767852783, 3.839005470275879, 3.970517635345459, -0.31511154770851135, -1.6029869318008423, 1.2853161096572876, 1.1723881959915161, -5.832032203674316, 0.6789003610610962, 0.5669936537742615, -0.22379152476787567, -2.703939914703369, -0.26078152656555176, -0.03886079415678978, -0.05921908840537071, -5.719845771789551, -1.4597879648208618, 0.1876167505979538, -2.9879355430603027, -1.5303400754928589, -1.2714322805404663, -1.1109195947647095, 0.17933915555477142, 0.06089244410395622, -1.5081650018692017, -2.1941347122192383, -1.3107925653457642, -3.0754287242889404, 1.0042310953140259, -1.5626887083053589, -0.0424615740776062, -0.9771183133125305, -1.5259199142456055, -1.7639156579971313, -1.5246882438659668, -1.5541713237762451, -1.2403414249420166, -0.8519608974456787, -0.7213048338890076, -0.4986189901828766, 0.8783422708511353, -0.4468894898891449, 1.8087834119796753, 0.24241626262664795, 0.5605027675628662, -0.5243880152702332, -2.758394479751587, -2.7712044715881348, -1.4942808151245117, -1.331079363822937, -0.43571221828460693, -0.8953598737716675, -0.9362175464630127, -1.0887501239776611, -0.64814692735672, -0.46633851528167725, 0.2558480501174927, 0.18972228467464447, 0.14794549345970154, -0.23139016330242157, -0.10631468892097473, -0.54292231798172, -0.28567084670066833, 0.010528460144996643, 0.26116883754730225, -2.3366875648498535, -1.4603341817855835, -1.3482171297073364, -0.8471848964691162, -0.25872334837913513, -0.6058900356292725, 0.40240827202796936, -0.15694114565849304, 0.14404788613319397, -0.6278192400932312, 0.016024403274059296, 0.8369290232658386, -0.7468264698982239, -0.8051637411117554, 1.294194221496582, -0.5073345899581909, -0.48841679096221924, 0.08045808225870132, -1.326612949371338, 0.12512488663196564, -1.024269700050354, -0.9496513605117798, -0.04103377088904381, 0.052717145532369614, 0.6898003220558167, -0.08502696454524994, -0.20346179604530334, -0.03822952136397362, 0.40131279826164246, 0.1455945521593094, -0.07592715322971344, -0.633560299873352, 0.035675495862960815, 0.12471090257167816, 0.1971966028213501, -0.9159044027328491, -0.7121442556381226, -0.7494999170303345, -0.3949147164821625, -0.017569195479154587, -0.2903302013874054, -0.2198190987110138, 1.2864097356796265, -0.6672621369361877, -0.5154792070388794, 0.02528120018541813, 0.029193036258220673, 0.05742155760526657, -0.07700039446353912, -0.11946730315685272, 1.0597705841064453, 0.3729591965675354, -0.315964937210083, 0.2608327567577362, 0.386926531791687, 0.31351959705352783, 0.22049051523208618, -0.26232215762138367, -0.08213891834020615, 0.25315216183662415, 0.46439608931541443, 0.3727787137031555, 0.47078341245651245, -0.3124822974205017, 0.29903683066368103, -0.5561538338661194, 0.28215062618255615, 0.32795819640159607, 0.45523399114608765, 0.23146629333496094, 0.27856290340423584, 0.15756061673164368, 0.1869899183511734, 0.051989633589982986, 0.11555256694555283, -1.0412371158599854, -0.1433800905942917, -0.27964872121810913, -0.7687907814979553, -0.1628597527742386, -0.10891093313694, 0.4335108697414398, 0.2663184404373169, 0.18936417996883392, 0.24984174966812134, -0.002863943576812744, 0.05787845700979233, 0.17259660363197327, 0.3342285752296448, 0.16786420345306396, 0.16896598041057587, -0.7396526336669922, -0.4266115725040436, -0.3917669653892517, 0.1585039347410202, -0.15686000883579254, 0.06313836574554443, 0.2203729748725891, 0.14582298696041107, -0.3306969404220581, 1.9998338222503662, 0.18168263137340546, 0.24534966051578522, 0.27740049362182617, 0.04354019835591316, 0.228676438331604, -0.5850859880447388, -0.11512702703475952, 0.017273183912038803, 0.1502695381641388, 0.07620467245578766, -4.7901482582092285, 0.0630778893828392, 0.2729451358318329, -0.1265430897474289, 0.15690813958644867, 0.10327841341495514, 0.09922023117542267, 0.2520003020763397, -0.03963897004723549, 0.2640717923641205, 0.1446908712387085, -0.029449956491589546, -0.06772083044052124, -0.21415816247463226, 0.11655840277671814, -0.943658709526062, 0.02269618585705757, 1.3181378841400146, 0.6930207014083862, -0.08716018497943878, -0.9004027247428894, 0.4529569447040558, 0.2732076644897461, 0.5646275281906128, -4.850162506103516, -3.9099855422973633, -4.004771709442139, 0.11823239177465439, 1.615481972694397, -1.2820082902908325, -1.017562747001648, 5.716000556945801, -0.5544209480285645, -0.5670633912086487, 0.1728491187095642, 2.6101267337799072, 0.17946380376815796, 0.0825703889131546, 0.05516641214489937, 5.656416416168213, 1.5453623533248901, -0.13238242268562317, 2.9986424446105957, 1.5294057130813599, 1.4885174036026, 1.3557413816452026, -0.823494553565979, -0.05741948261857033, 1.3422154188156128, 2.3505282402038574, 1.31316077709198, 3.138502597808838, -1.1237257719039917, 1.5431022644042969, -0.08229468017816544, 0.8902245759963989, 1.5175034999847412, 1.860618233680725, 1.4966278076171875, 1.5646395683288574, 1.3467416763305664, 0.7230137586593628, 0.6093513369560242, 0.720161497592926, -0.7516468167304993, 0.5397064685821533, -1.6844969987869263, -0.20342838764190674, -0.6796891093254089, 0.6512815356254578, 1.8926186561584473, 2.7439825534820557, 0.8015068769454956, 1.3173447847366333, -0.31828993558883667, 0.783147394657135, 0.9115920662879944, 1.1475279331207275, 0.5457974076271057, 0.5314759612083435, -0.2963891327381134, -0.03399105370044708, -0.013344421982765198, 0.3270668685436249, 0.07528689503669739, 0.5463772416114807, 0.2880639135837555, 0.20573976635932922, -0.41672393679618835, 2.3174102306365967, 1.4313582181930542, 1.2926722764968872, 0.9546725153923035, 0.3735062777996063, 0.5191226005554199, -0.4239376485347748, 0.10882848501205444, -0.10013893991708755, 0.6388878226280212, 0.07238941639661789, -0.9218392968177795, 0.7462332844734192, 0.8599657416343689, -1.196976661682129, 0.48661670088768005, 0.26573923230171204, -0.08906308561563492, 1.2876594066619873, -0.033311765640974045, 1.1690279245376587, 0.9809199571609497, 0.09869571030139923, -0.007940351963043213, -0.5290152430534363, -0.01734699308872223, -0.811394989490509, 0.4709327220916748, 0.8561391830444336, -0.9403699040412903, -0.6039953827857971]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (1.37, 1.54)}}, 'et4_eta1': {'discriminator': {'threshold': 0.44499849081039428, 'nodes': [100, 5, 1], 'bias': [-0.04944121092557907, 0.04430503398180008, -0.17589996755123138, -0.04322429746389389, -0.033914901316165924, -0.3649325668811798], 'weights': [-1.0533475875854492, -4.960731506347656, -0.11462786793708801, -0.08051441609859467, 0.327058345079422, 0.9261538982391357, 0.9139630794525146, -1.5477986335754395, -2.7880916595458984, -3.127249002456665, 8.849225997924805, 0.9189647436141968, 2.5857772827148438, 5.538350582122803, 3.593130350112915, 5.4971089363098145, 5.557611465454102, 5.419483184814453, 6.3237457275390625, 7.038089275360107, 6.987907886505127, 6.842195987701416, 6.503592491149902, 6.325817584991455, 6.310937404632568, 6.3516926765441895, 6.195782661437988, 12.231324195861816, 6.420176982879639, 6.28207540512085, 4.799248695373535, 3.6904053688049316, 3.125208616256714, 2.9491443634033203, 2.520265817642212, 1.551713466644287, -0.14539076387882233, 2.5132787227630615, 2.754492998123169, 2.6617257595062256, -1.3799049854278564, 2.0000052452087402, 2.373865842819214, -0.48153719305992126, -7.9264020919799805, 5.072999954223633, -3.5379605293273926, -0.8016290664672852, 1.5370779037475586, -1.1268091201782227, -5.815518856048584, -0.6431751251220703, 6.390225887298584, 0.6136425733566284, 0.7596197724342346, 0.8415015339851379, 0.820252001285553, -1.7454701662063599, 0.9705983996391296, 1.0002537965774536, 0.6966873407363892, 0.3825032114982605, 0.9537915587425232, 12.97507095336914, 1.2517129182815552, 1.4221700429916382, 1.2482069730758667, 2.5883913040161133, 1.5484122037887573, 3.5056564807891846, -3.9746973514556885, 6.019525051116943, -0.4408854842185974, -0.40181291103363037, 1.1502372026443481, 3.0455968379974365, 4.79755163192749, 2.417346239089966, 0.9206371307373047, -0.08390868455171585, 3.050239324569702, 6.684665203094482, 6.6558051109313965, 5.875985622406006, 5.231296539306641, 1.4017248153686523, 2.5045998096466064, 4.597629070281982, 2.7267191410064697, 2.204145908355713, -0.257466197013855, 0.2739356756210327, 11.07122802734375, 4.34131383895874, 2.6431703567504883, 1.7330855131149292, 1.3199973106384277, 4.005731582641602, 0.48041751980781555, 1.6581690311431885, -0.8882415294647217, -0.2837415933609009, -0.1148887574672699, -0.12893220782279968, 0.010817923583090305, 0.027232317253947258, 0.08438871800899506, -0.43880653381347656, -0.8631213903427124, -0.5920184850692749, 2.2215394973754883, 0.1444978415966034, 0.6214796304702759, 1.1106393337249756, 3.1795196533203125, 1.3473886251449585, 5.22688102722168, 5.079331874847412, 1.1166990995407104, 1.4405477046966553, 1.4643628597259521, 1.3061424493789673, 1.2960573434829712, 1.2337698936462402, 1.1048407554626465, 1.1752914190292358, 1.1453886032104492, 2.510662794113159, 1.256697416305542, 1.3206971883773804, 0.8113711476325989, 0.439316064119339, 0.5039782524108887, 0.5507089495658875, 0.3218839466571808, 0.26522988080978394, -0.06579999625682831, 0.40335318446159363, 0.4419555366039276, 0.4951551854610443, -0.30802643299102783, 0.3927514851093292, 0.39081552624702454, -1.9454296827316284, -1.7610629796981812, 0.9781860709190369, -0.33280229568481445, -0.34309712052345276, 0.20731191337108612, -0.20004616677761078, -1.2053170204162598, -0.30718016624450684, 1.2052510976791382, -0.009037010371685028, 0.1409582495689392, 0.0468304418027401, 0.13052237033843994, -0.3239031732082367, 0.010680961422622204, 0.010477098636329174, 0.1628199815750122, -1.3150930404663086, 0.2301451861858368, 0.2888815402984619, 0.2545737028121948, 0.31536102294921875, 0.08720514178276062, 0.4105963408946991, 0.18502122163772583, 0.6155917048454285, -0.7690315842628479, 1.04706609249115, -0.34599512815475464, -0.39205202460289, 0.9817249178886414, 0.8604590892791748, 0.673933207988739, 0.4357556104660034, 0.09062683582305908, -0.010316171683371067, 1.0658905506134033, 1.2388548851013184, 1.3948793411254883, 1.183418869972229, 1.0338551998138428, 0.25307247042655945, 0.3510879576206207, 0.820881724357605, 0.5232108235359192, 0.2504698932170868, -0.14596788585186005, -0.9058675765991211, 2.17889666557312, 0.7428072690963745, 0.46675950288772583, 0.16106386482715607, 0.10857223719358444, 0.7520046234130859, -1.4653366804122925, 0.2758690416812897, 4.312921047210693, 1.1824429035186768, -0.09142965078353882, -1.8700180053710938, -0.26498135924339294, 1.2881745100021362, -1.0926264524459839, 1.1183371543884277, 4.033883571624756, 3.1037802696228027, -0.25055763125419617, -4.450815677642822, -2.6000101566314697, -5.531732559204102, -13.59540843963623, -5.578421115875244, -5.564455986022949, -5.565529823303223, -6.2331929206848145, -7.012181758880615, -6.9557294845581055, -6.835890769958496, -6.470211029052734, -6.1226067543029785, -6.211691379547119, -6.362425804138184, -6.327195644378662, -12.241724014282227, -6.542065143585205, -6.264378070831299, -4.969686508178711, 4.533326625823975, -6.366821765899658, -6.328834533691406, -3.595522403717041, -1.0085445642471313, 0.14215277135372162, -2.419379234313965, -2.666376829147339, -2.5424044132232666, 1.3114145994186401, -2.1734628677368164, -2.2009105682373047, 1.8521612882614136, -0.31155356764793396, -1.1938470602035522, 1.5211749076843262, 0.8266581296920776, -2.045912027359009, 1.192134976387024, 5.870670795440674, 0.6605153679847717, -6.553929805755615, -0.5716003179550171, 2.539950132369995, -0.6127597093582153, -0.7832842469215393, 1.8389278650283813, -0.8064548969268799, 1.8784267902374268, 2.566817045211792, 4.7225470542907715, 1.210046410560608, -1.1247453689575195, -1.3806527853012085, -0.119940847158432, -1.436501383781433, -6.662543296813965, -1.4934906959533691, -3.3701982498168945, 0.8845202326774597, -1.7395645380020142, 1.2993745803833008, 0.2521582245826721, -1.20425283908844, -2.669802665710449, -3.7791428565979004, -2.2830471992492676, -0.8884074091911316, -0.11100753396749496, -3.0859479904174805, -6.561391353607178, -6.598057746887207, -5.686880111694336, -5.302574634552002, 1.0235528945922852, -4.100517272949219, -4.595377445220947, -2.8082916736602783, -1.8729438781738281, -1.4939301013946533, -0.24779225885868073, -10.932708740234375, -4.199324131011963, -3.10957407951355, -1.9400962591171265, -1.2673074007034302, -4.026810169219971, -0.6247025728225708, -1.5338613986968994, 1.1100951433181763, 1.1665518283843994, 0.12421714514493942, 0.11102984845638275, -0.33227279782295227, -1.1237115859985352, -0.9166012406349182, 1.7339065074920654, 3.916808605194092, 3.1300225257873535, -2.1336519718170166, -0.8837668299674988, -2.623211145401001, -5.4205451011657715, -3.561551809310913, -5.4753499031066895, -5.540642738342285, -5.460385799407959, -6.376492500305176, -6.922759532928467, -6.925884246826172, -6.637295246124268, -6.540719985961914, -6.246999263763428, -6.362174034118652, -6.152751445770264, -6.105291843414307, -12.212980270385742, -6.607662200927734, -6.197385311126709, -4.879158973693848, -2.284531831741333, -3.0351200103759766, -2.9112417697906494, -2.406902551651001, -1.4472754001617432, 0.2170599102973938, -2.420147657394409, -2.6974053382873535, -2.5806961059570312, -0.6764609217643738, -2.005291223526001, -2.2450711727142334, 1.9639124870300293, 7.808681011199951, -5.587013244628906, 1.6307839155197144, 0.7189077734947205, -1.6309432983398438, 1.1541657447814941, 5.830270767211914, 0.5934906005859375, -6.3893818855285645, -0.40460774302482605, -0.7126460671424866, -0.6581454277038574, -0.6585305333137512, 1.8650702238082886, -1.0026404857635498, -1.0289264917373657, -0.7238054275512695, 5.628936290740967, -1.113128900527954, -3.9180262088775635, -1.3258835077285767, -1.2367022037506104, -0.9189690947532654, -2.6087000370025635, -1.5012307167053223, -3.514204502105713, 3.8040013313293457, -5.876565456390381, 0.444823682308197, 0.377777099609375, -1.180335283279419, -1.1370363235473633, -3.942268133163452, -2.4030489921569824, -0.9437010288238525, -0.10503961890935898, -3.2399961948394775, -6.6350016593933105, -6.663013935089111, -5.680294990539551, -5.203977584838867, -1.593369483947754, -2.5124847888946533, -4.625247478485107, -2.780906915664673, -1.8100066184997559, 0.2190827876329422, 0.4663642346858978, -10.991830825805664, -4.305461406707764, -2.679348945617676, -1.7457140684127808, -1.332257866859436, -3.85837721824646, -0.49550768733024597, -1.6103028059005737, -0.8992785215377808, -1.1767441034317017, -0.11871474236249924, -0.07303480803966522, 0.1519879549741745, 1.1246464252471924, 0.9333445429801941, -1.6379239559173584, -4.007765293121338, -3.041372537612915, 2.2097861766815186, 0.835145890712738, 2.722548246383667, 5.448756694793701, 3.6146490573883057, 5.605247974395752, 5.417119026184082, 5.421097278594971, 6.324037551879883, 6.927212238311768, 6.9888200759887695, 6.815331935882568, 6.630133628845215, 6.332214832305908, 6.136437892913818, 6.333812713623047, 6.15930700302124, 12.285018920898438, 6.558304786682129, 6.389136791229248, 4.83615779876709, 2.199603319168091, 2.9702954292297363, 2.9945969581604004, 2.362839698791504, 1.4485538005828857, -0.12990351021289825, 2.389958143234253, 2.7917966842651367, 2.574023485183716, 0.7320513129234314, 1.929429292678833, 2.192650079727173, -1.8061151504516602, -7.859200954437256, 5.590559005737305, -3.5589044094085693, -0.6465646624565125, 1.5923240184783936, -1.1624454259872437, -5.9998626708984375, -0.5720399022102356, 6.556267261505127, 0.5708186626434326, 0.822184145450592, 0.8456826210021973, 0.7594335675239563, -1.9479042291641235, 1.0158330202102661, 0.8340901732444763, 0.8298597931861877, 0.23620949685573578, 1.0797489881515503, 3.7128658294677734, 1.3794223070144653, 1.405644416809082, 1.3387466669082642, 2.746525287628174, 1.3935980796813965, 3.4047136306762695, -3.9192328453063965, 5.827391147613525, -0.3837888240814209, -0.2990424633026123, 1.2860881090164185, 1.150420904159546, 3.7557263374328613, 2.303722620010376, 0.78304123878479, -0.1005493775010109, 3.1295223236083984, 6.551143646240234, 6.725265026092529, 5.739577770233154, 5.283452987670898, 1.5187712907791138, 2.5129172801971436, 4.559238433837891, 2.8698642253875732, 1.8264973163604736, -0.23354597389698029, 0.32074859738349915, 10.978507995605469, 4.260485649108887, 2.6691994667053223, 1.783060908317566, 1.209847092628479, 3.893599033355713, 0.673551082611084, 1.6266344785690308, -1.943715214729309, -2.344973564147949, 1.1479488611221313, 2.110046148300171, -1.8749566078186035]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0.8, 1.37)}}, 'et4_eta3': {'discriminator': {'threshold': 0.38999854326248168, 'nodes': [100, 5, 1], 'bias': [-0.048734571784734726, 0.12641683220863342, -0.10319222509860992, -0.11600282788276672, 0.15744265913963318, -0.5986704230308533], 'weights': [1.489107608795166, 1.724515438079834, -0.2765308618545532, -1.6453315019607544, -0.21027891337871552, -0.20602554082870483, 0.5383106470108032, -0.8038612008094788, 1.7179598808288574, 1.4568285942077637, 0.8245131373405457, -0.5622129440307617, -0.6026278138160706, 0.39992600679397583, -2.7379024028778076, -4.853421211242676, -1.2196292877197266, -3.644157648086548, -4.464820384979248, -7.975650310516357, -5.083973407745361, 0.38998836278915405, -3.331301689147949, -8.42818546295166, -3.026576042175293, -2.88356876373291, -2.214590549468994, -7.139639854431152, -3.199021339416504, -2.4674696922302246, 0.24747680127620697, -3.017328977584839, -2.142301082611084, -5.159522533416748, -2.2962796688079834, -4.501381874084473, -1.645451545715332, -1.3673712015151978, -1.8717037439346313, -3.5510478019714355, -0.7411429286003113, -2.4653854370117188, -0.9555882811546326, -2.6397929191589355, 1.060547947883606, -2.5249483585357666, -1.437869668006897, -2.229560375213623, 3.980008840560913, -2.3240387439727783, 1.3334760665893555, -1.5189234018325806, 2.3470098972320557, 0.9187018275260925, 2.4415249824523926, 3.757972240447998, 3.246690034866333, -1.3531960248947144, 1.9973145723342896, -2.346579074859619, -0.18471047282218933, -0.818747878074646, 3.9583687782287598, 0.030996698886156082, 4.460407733917236, -0.7802447080612183, -0.016633836552500725, -2.2098493576049805, -2.7068231105804443, -0.935962438583374, 1.554163932800293, -1.6539173126220703, 0.6438606381416321, 0.5441612005233765, -1.3060957193374634, -1.4065288305282593, -1.4749877452850342, -1.0665733814239502, -1.7078192234039307, -1.0966951847076416, -0.37618157267570496, -3.0378973484039307, -4.626641273498535, -3.6512129306793213, -2.7534379959106445, -1.8836853504180908, -2.201690435409546, -1.0649908781051636, -0.3226732313632965, -2.448376178741455, -0.6887656450271606, -0.43390387296676636, -6.017397880554199, -2.6499719619750977, -0.49148544669151306, -1.7078983783721924, -0.5322701930999756, -0.11754774302244186, 0.10815437883138657, -1.056339979171753, -1.6629281044006348, -1.5980372428894043, 0.11593876034021378, 1.5261839628219604, 0.2071867138147354, 0.1955910623073578, -0.6961594820022583, 0.8233086466789246, -1.7356479167938232, -1.4943840503692627, -0.8582726716995239, 0.6608161926269531, 0.6234508752822876, -0.4115613102912903, 2.6869311332702637, 4.751109600067139, 1.206948161125183, 3.6823651790618896, 2.9429678916931152, 6.475310325622559, 5.1590399742126465, -0.4134208559989929, 3.188952922821045, 8.408431053161621, 3.0563151836395264, 5.409724235534668, 2.31276535987854, 7.252096176147461, 3.0659987926483154, 2.3733129501342773, -0.3197944462299347, 2.9546256065368652, 2.013441562652588, 5.170455455780029, 2.3582658767700195, 4.627410888671875, 1.642845630645752, -0.42225381731987, 1.566131830215454, 3.544184446334839, 0.8546712398529053, 2.5705087184906006, 1.0504372119903564, 2.5333847999572754, -1.2105087041854858, 2.571927309036255, 1.5176814794540405, 2.063802480697632, -3.8979246616363525, 2.20339298248291, -1.2640695571899414, 1.4322503805160522, -2.2504422664642334, -0.9932040572166443, -2.30411434173584, -3.872314453125, -3.149369716644287, 1.3449445962905884, -2.0023064613342285, 2.314568042755127, -0.7109601497650146, 0.7445508241653442, -4.056469917297363, -0.007392288185656071, -4.279834270477295, 0.7472338676452637, 0.16936682164669037, 2.3908958435058594, 1.4853827953338623, 0.8461674451828003, -1.623788595199585, 1.8801069259643555, -0.9429315328598022, -0.5220457911491394, 1.1812620162963867, 1.41241455078125, 1.3002620935440063, 1.0183937549591064, 1.7927227020263672, 1.0071781873703003, 0.4512437582015991, 2.919395685195923, 14.041594505310059, 3.8291432857513428, 2.8332457542419434, 1.7189116477966309, 2.021446943283081, 0.9982815980911255, 0.5194767713546753, 2.231724739074707, 0.5866437554359436, 0.5114965438842773, 6.004909515380859, 2.6935973167419434, 0.6125931143760681, 1.6291757822036743, 0.539778470993042, 0.14756469428539276, -0.005939469672739506, 0.9380841255187988, 0.7313734889030457, 0.6238921880722046, -0.05606410652399063, -3.4576642513275146, -0.7394446730613708, -0.5056309103965759, 1.1708277463912964, -0.07838332653045654, 1.4636929035186768, 0.3365824818611145, 0.7694878578186035, -10.08647632598877, -0.11698932200670242, -0.010649384930729866, -1.4873687028884888, -0.8243563175201416, -38.86589050292969, -3.5834689140319824, -10.238457679748535, -40.11923599243164, -2.096503257751465, -2.5557754039764404, -1.2065658569335938, -3.7377657890319824, -1.3167790174484253, -1.1332790851593018, -0.8548119068145752, -3.3813157081604004, -1.3726880550384521, -0.8461487889289856, 1.0748355388641357, -1.3134803771972656, -0.7024919390678406, -2.119335889816284, -0.989439070224762, -1.8101933002471924, -0.9571784138679504, 0.49077108502388, -0.7323948740959167, -1.5321048498153687, 15.670473098754883, -0.8998259902000427, 2.567972183227539, -1.013662576675415, 7.016937255859375, -0.8518349528312683, -0.08405768871307373, -0.8864167332649231, 1.9270480871200562, -0.5945520997047424, 1.146668791770935, -0.6261212825775146, 1.051482915878296, 6.600464344024658, 1.2396928071975708, 1.6438459157943726, 0.14079098403453827, 3.602713108062744, 1.0004342794418335, -1.3551424741744995, 0.6277632117271423, -0.036265917122364044, 0.2190929800271988, 0.012133530341088772, 2.0729174613952637, 0.06852515786886215, 0.008781003765761852, -0.8805752992630005, -3.921480417251587, -0.09866628795862198, 0.09090970456600189, -0.6310464143753052, 0.35451918840408325, 0.3166377544403076, -0.6870806217193604, -3.3407504558563232, -3.329881191253662, -2.710155963897705, 4.222609996795654, -0.19457216560840607, 0.14979341626167297, -0.9626338481903076, -1.571986436843872, -1.5206676721572876, -1.0208123922348022, -0.3517363369464874, -0.5923582315444946, -0.24676944315433502, 0.054774485528469086, -0.9463720321655273, -0.2548476755619049, -0.3125629723072052, -2.0656211376190186, -1.0765247344970703, -0.025250207632780075, -0.14637288451194763, -0.20536333322525024, 0.19710904359817505, 0.14765994250774384, -0.2625049352645874, 1.5341681241989136, 1.7524620294570923, -0.10970014333724976, -1.5440655946731567, -0.3015003800392151, -0.2794300317764282, 0.5884311199188232, -0.8277735710144043, 1.6549763679504395, 1.4094862937927246, 2.1838538646698, -0.7344938516616821, -0.514830470085144, 0.35000818967819214, -2.7248005867004395, -4.628044605255127, -1.014535665512085, -3.6895315647125244, -2.8926315307617188, -6.404745578765869, -5.048038959503174, -0.6299965977668762, -3.3444137573242188, -8.45513916015625, -3.1140575408935547, -2.953204870223999, -2.3598601818084717, -6.4780473709106445, -3.1285459995269775, -2.258157730102539, 0.2953149080276489, -2.898334503173828, -2.005582809448242, -5.118051052093506, -2.3204307556152344, -4.4843549728393555, -1.6756892204284668, -1.3451989889144897, -1.8508540391921997, -3.6583309173583984, -0.7622156739234924, -2.5833017826080322, -0.9906833171844482, -2.577165365219116, 1.1367939710617065, -2.550694227218628, -1.4421054124832153, -2.1926791667938232, 3.912644624710083, -2.3250620365142822, 1.4524301290512085, -1.5569703578948975, 2.2569525241851807, 1.0268765687942505, 2.355769157409668, 3.8217110633850098, 3.2897284030914307, -1.3397530317306519, 1.8762733936309814, -2.23738694190979, 0.873782753944397, -0.6474822759628296, 0.16729366779327393, -0.09846816211938858, 4.426638126373291, -0.16099195182323456, -0.13280081748962402, -2.2775659561157227, -1.632291555404663, -0.6697500348091125, 1.623593807220459, -1.6896445751190186, 0.8589785099029541, 0.23151010274887085, -1.2829310894012451, -1.2888672351837158, -1.4663902521133423, -1.0433361530303955, -1.8323240280151367, -0.9110105037689209, -0.35080310702323914, -3.0115251541137695, -4.326592922210693, -3.72282338142395, -2.8973615169525146, -1.6929476261138916, -2.212578773498535, -0.9214056730270386, -0.48895588517189026, -2.3020389080047607, -0.6801794767379761, -0.37743180990219116, -5.978786468505859, -2.6536450386047363, -0.5682191252708435, -1.7038291692733765, -0.5761532783508301, -0.06598766148090363, 0.045243971049785614, -0.8737918138504028, -1.6567168235778809, -1.6992138624191284, 0.11865392327308655, 1.5675640106201172, 0.34421461820602417, 0.2133748084306717, -0.6436053514480591, 0.7672744393348694, -1.5915262699127197, -1.4994463920593262, -0.8917014598846436, 0.548654317855835, 0.5257238149642944, -0.5165659785270691, 2.6777701377868652, 4.766880989074707, 1.0924832820892334, 3.570284605026245, 4.55461311340332, 7.964165687561035, 5.054891586303711, 0.6123438477516174, 3.2275891304016113, 8.300087928771973, 3.0806758403778076, 2.8538706302642822, 2.4023661613464355, 7.0856475830078125, 3.0447909832000732, 2.401578426361084, -0.30921295285224915, 2.937774658203125, 1.9423860311508179, 5.117636203765869, 2.3809406757354736, 4.480501174926758, 1.8529014587402344, -0.3488796055316925, 2.0322256088256836, 3.6463782787323, 0.9211287498474121, 2.5814568996429443, 1.0386147499084473, 2.50089168548584, -1.0598489046096802, 2.549089193344116, 1.4544233083724976, 2.1018590927124023, -3.7877278327941895, 2.188398599624634, -1.4739162921905518, 1.4401271343231201, -2.162353754043579, -0.9193229079246521, -2.406433582305908, -3.761199474334717, -3.2782623767852783, 1.3340801000595093, -1.812551498413086, 1.7757724523544312, 0.3416861891746521, 0.699795126914978, -3.9801878929138184, -0.06104814261198044, -4.3792619705200195, 0.18610496819019318, -0.03304402530193329, 2.256460189819336, 2.7502853870391846, 0.6877647638320923, -1.6541996002197266, 1.8761110305786133, -0.8456857204437256, -0.459907591342926, 1.1474002599716187, 1.4152284860610962, 1.482133150100708, 1.1663758754730225, -0.5718396306037903, 1.0541284084320068, 0.5823667645454407, 3.0226240158081055, 4.504027843475342, 3.8000710010528564, 2.7362895011901855, 1.6714212894439697, 2.312886953353882, 1.0175235271453857, 0.45927074551582336, 2.260281801223755, 0.6990354061126709, 0.48493561148643494, 5.986856460571289, 2.6371665000915527, 0.514274537563324, 1.5165174007415771, 0.5823063850402832, 0.0919175073504448, -0.010943679139018059, 0.90785813331604, 4.302499294281006, -2.4323830604553223, 0.6809970140457153, 0.6679200530052185, -0.9922124147415161]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (1.54, 2.5)}}, 'et3_eta0': {'discriminator': {'threshold': 0.40999852418899535, 'nodes': [100, 5, 1], 'bias': [-0.0677146464586258, 0.01704608090221882, -0.3257580101490021, 0.33917805552482605, 0.34711459279060364, -0.3129195272922516], 'weights': [-55.02075958251953, -11.980169296264648, -8.812077522277832, 0.057916201651096344, -0.45083141326904297, -0.7015589475631714, -0.23670551180839539, -1.2097795009613037, -2.539445400238037, -2.6720333099365234, 1.1308411359786987, 0.39122942090034485, 6.559852123260498, 2.8712520599365234, 2.9141130447387695, 2.9044928550720215, 2.243557929992676, 3.6076762676239014, 3.6763367652893066, 3.462643623352051, 3.8531761169433594, 4.0217742919921875, 2.884087324142456, 3.310631036758423, 3.005481004714966, 2.478203058242798, 2.9754574298858643, 2.5338714122772217, 2.6201016902923584, 2.6889524459838867, 2.264381170272827, 1.0531092882156372, 2.303163766860962, 1.9610322713851929, 1.8308334350585938, 1.5624895095825195, 1.4677995443344116, 1.5363810062408447, 1.3023184537887573, 1.5705058574676514, 18.088268280029297, 2.747138738632202, -0.5428839921951294, -0.3703663647174835, -0.3785107731819153, 2.779938220977783, 1.4333616495132446, 1.568895936012268, 0.428409606218338, 1.2578153610229492, 1.317581295967102, -1.5397913455963135, 0.5036625862121582, -2.423191547393799, 0.6797366738319397, 1.2985190153121948, 0.6452349424362183, -0.7516332268714905, 3.133150100708008, 3.204082727432251, 0.47348833084106445, -0.3011056184768677, -0.39402440190315247, -0.8659201860427856, -1.802432894706726, -1.8288511037826538, 0.5907695889472961, -0.6233327984809875, 0.22252286970615387, 0.815199613571167, -1.9177621603012085, -1.6068177223205566, -0.49719715118408203, -0.28497713804244995, 1.3481165170669556, 1.220120906829834, 2.4768738746643066, 1.220518946647644, 1.2663979530334473, 0.3111969828605652, 1.609475016593933, 1.8878488540649414, 3.8263957500457764, 2.5961267948150635, 0.9094277620315552, 2.31742262840271, 1.451043963432312, 4.934955596923828, 4.559588432312012, 3.2284741401672363, 1.3086919784545898, -0.38509032130241394, -3.622605800628662, 3.0023610591888428, 1.4413317441940308, -0.1998918354511261, 3.6725356578826904, 2.5428428649902344, -0.8858456015586853, -0.6001783013343811, 57.897064208984375, 12.017651557922363, 7.696766376495361, 0.03296565264463425, 0.6304057240486145, 0.6800051927566528, 0.15519164502620697, 1.19718337059021, 2.437086343765259, 4.496309757232666, -1.3664907217025757, -0.4344746768474579, -6.53448486328125, -2.892951488494873, -2.8867318630218506, -2.9650864601135254, -2.3744089603424072, -3.7998151779174805, -3.6700632572174072, -3.2800090312957764, -3.8432140350341797, -3.9181973934173584, -3.1030828952789307, -3.168778657913208, -3.078685998916626, -2.58035945892334, -2.8544163703918457, -2.682767629623413, -2.6830108165740967, -2.5776331424713135, -2.1327083110809326, -0.900214433670044, -2.173473834991455, -2.0470988750457764, -1.8375910520553589, -1.5037643909454346, -1.552957534790039, -1.3741053342819214, -1.2668365240097046, -1.5077086687088013, -18.038610458374023, -1.601119875907898, 0.5604377388954163, 0.13186807930469513, 0.3623488247394562, -2.7222962379455566, -1.4819079637527466, -1.4771692752838135, -0.4879170060157776, -1.292600393295288, -1.2937439680099487, 1.5008662939071655, -0.6854048371315002, 2.478614091873169, -0.8579885363578796, -1.3029316663742065, -0.5043449401855469, 0.9267913103103638, -3.1233668327331543, -1.25843346118927, -0.4559805393218994, 0.2791209816932678, 0.7067294716835022, 1.0025086402893066, 1.9448896646499634, 1.8024455308914185, -0.6460127234458923, 0.6700329184532166, -0.3372054994106293, -0.8243141174316406, 1.7772880792617798, 1.729379415512085, 0.481143593788147, 0.18227368593215942, -1.215772271156311, -1.2753404378890991, -2.540102005004883, -1.1450990438461304, -1.2187203168869019, -0.3705129623413086, -1.55818772315979, -1.8268511295318604, -3.676107406616211, -2.4574849605560303, -1.045733094215393, -2.2315969467163086, -1.5858746767044067, -4.938912868499756, -4.310708045959473, -3.0374510288238525, -1.2027181386947632, 0.24889717996120453, 3.4594502449035645, -2.9479782581329346, -1.4303020238876343, 0.031895071268081665, -3.6551425457000732, -2.3365187644958496, 0.7751843929290771, 0.513533890247345, 2.818881034851074, 1.7155451774597168, -0.7982422113418579, 0.2636367976665497, 0.9222109317779541, 0.7520069479942322, 0.6573650240898132, 1.2842695713043213, 2.503244638442993, 2.3954808712005615, -1.1094049215316772, -2.8555734157562256, -1.4840770959854126, -3.0204551219940186, -2.8042595386505127, -2.7689924240112305, -3.1320712566375732, -3.7152786254882812, -3.52154803276062, -3.5151376724243164, -3.8585214614868164, -4.058757305145264, -2.9470889568328857, -3.183985710144043, -3.0328783988952637, -2.617356538772583, -2.590102195739746, -2.6782138347625732, -2.683642625808716, -2.5790631771087646, 1.2367427349090576, -0.8425788879394531, -2.023442268371582, -1.594313621520996, -1.558278203010559, -1.415696620941162, -1.5444902181625366, -1.4593127965927124, -1.3179001808166504, -1.2771642208099365, -2.5638015270233154, -1.325626015663147, 1.7976620197296143, 0.249821275472641, 0.41884806752204895, -2.6822097301483154, -1.4065210819244385, -1.0397224426269531, -0.5948566198348999, -1.3588923215866089, -1.401363492012024, 1.3737119436264038, -0.4631251096725464, 2.5272862911224365, -1.5698579549789429, -1.4154775142669678, -0.46269166469573975, 2.992039918899536, -2.9625604152679443, -2.3306517601013184, -0.4629423916339874, 0.6999631524085999, 0.6064558029174805, 0.8948763608932495, 1.8590259552001953, 2.355193853378296, -0.3445756733417511, 0.5104489922523499, 0.03441718965768814, -0.6162105202674866, 1.779867172241211, 1.8767695426940918, 0.9110656380653381, 0.5424016714096069, -0.6345865726470947, -1.8272885084152222, -2.2392795085906982, -0.7266373634338379, -1.2709898948669434, -0.246825709939003, -1.6157077550888062, -1.547071099281311, -3.6486704349517822, -2.412764072418213, -1.0306228399276733, -2.143760919570923, -1.458570122718811, -5.052695274353027, -4.211669445037842, -3.145329713821411, -0.7986577153205872, 0.3417644798755646, -3.6237759590148926, -3.022977113723755, -1.4649693965911865, -0.035447005182504654, -3.619277000427246, -2.3928732872009277, 1.1435751914978027, 0.9424856305122375, -2.73766827583313, -1.704036831855774, 0.3971812427043915, -0.21477511525154114, -0.8080562353134155, -0.8217794299125671, -0.47060322761535645, -1.203309178352356, -2.568970203399658, -2.5404233932495117, 6.292684078216553, 2.947788953781128, 1.4641928672790527, 3.1286380290985107, 2.837716579437256, 2.857640504837036, 2.967209577560425, 3.803098201751709, 3.7022595405578613, 3.3665242195129395, 4.005894184112549, 4.081570625305176, 2.954195737838745, 3.050560235977173, 3.077486991882324, 2.4677562713623047, 2.420515775680542, 2.5797646045684814, 2.707798480987549, 2.4894731044769287, -1.093558669090271, 0.9331942200660706, 1.9610410928726196, 1.5238404273986816, 1.7181380987167358, 1.4524877071380615, 1.3850703239440918, -1.5304865837097168, 1.4504464864730835, 1.3073198795318604, 2.4940080642700195, 1.4651581048965454, -1.6607904434204102, -0.32477012276649475, -0.42646878957748413, 2.5879030227661133, 1.4349029064178467, 0.7061697244644165, 0.6092514991760254, 1.3131141662597656, 0.6447135806083679, -1.5033351182937622, 0.32984453439712524, -2.586721181869507, 1.5963002443313599, 1.3415871858596802, 0.50895756483078, -2.879276990890503, 3.035945415496826, 2.3233251571655273, 0.5005916953086853, -0.4830448627471924, -0.6859027743339539, -0.9342104196548462, -2.2226526737213135, -2.2951338291168213, 0.35681870579719543, -0.522974967956543, -0.14108940958976746, 0.48208749294281006, -1.7474632263183594, -1.7982937097549438, -0.8968064785003662, -0.38790363073349, 0.6533034443855286, 1.8519915342330933, 2.0535101890563965, 0.7590082287788391, 1.3900814056396484, 0.3306892216205597, 1.6168193817138672, 1.5958890914916992, 3.6224141120910645, 2.536128044128418, 1.0388962030410767, 2.1587774753570557, 1.4933043718338013, 4.852158546447754, 4.084129810333252, 3.012596607208252, 0.6639731526374817, -0.33184030652046204, 3.061025619506836, 3.0687358379364014, 1.3361337184906006, 0.006485926453024149, 3.7103233337402344, 2.5270721912384033, -1.2000093460083008, -1.0881695747375488, -2.8638813495635986, -1.7297691106796265, 0.3566191494464874, -0.11082221567630768, -0.8280302882194519, -0.7154039740562439, -0.42737245559692383, -1.134792447090149, -2.432609796524048, -2.4447786808013916, 6.2556562423706055, 2.7751049995422363, 1.6699426174163818, 3.1209113597869873, 2.956786632537842, 2.8774077892303467, 3.1412899494171143, 3.878533124923706, 3.669942617416382, 3.3664700984954834, 4.059711933135986, 4.137976169586182, 3.0100901126861572, 3.249464750289917, 2.9256374835968018, 2.4683899879455566, 2.479074239730835, 2.7487406730651855, 2.7077996730804443, 2.6429502964019775, -1.2666351795196533, 1.0618983507156372, 1.833869457244873, 1.5651453733444214, 1.6958791017532349, 1.5602469444274902, 1.5479367971420288, -1.4943513870239258, 1.3717821836471558, 1.3516325950622559, 2.64095139503479, 1.364629864692688, -1.8042676448822021, -0.22699344158172607, -0.27980726957321167, 2.5786023139953613, 1.2975306510925293, 0.7719959020614624, 0.660222053527832, 1.3979945182800293, 0.6953219771385193, -1.3833836317062378, 0.4862965941429138, -2.465054988861084, 1.6602401733398438, 1.3310189247131348, 0.6160938143730164, -2.771939516067505, 2.939441680908203, 2.4456262588500977, 0.5064876079559326, -0.49765634536743164, -0.6898133158683777, -0.8005670309066772, -2.1807708740234375, -2.306140184402466, 0.343305379152298, -0.5731406807899475, -0.10079710185527802, 0.4287020266056061, -2.080275774002075, -1.8659745454788208, -0.8194320201873779, -0.5372909307479858, 0.6682360172271729, 1.8211109638214111, 2.14973783493042, 0.8914849162101746, 1.40985906124115, 0.22297127544879913, 1.5792601108551025, 1.6765486001968384, 3.649811267852783, 2.4001193046569824, 0.9910076856613159, 2.2349510192871094, 1.6016310453414917, 4.926762104034424, 4.282641887664795, 3.039583206176758, 0.8457143902778625, -0.3821832537651062, 3.088564395904541, 2.991649866104126, 1.4345979690551758, -0.17900963127613068, 3.637394905090332, 2.3571064472198486, -1.1807541847229004, -1.1359692811965942, -0.627993643283844, 0.3810631334781647, 1.6050859689712524, -1.7380315065383911, -2.641709566116333]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0, 0.8)}}, 'et4_eta0': {'discriminator': {'threshold': 0.44999848604202269, 'nodes': [100, 5, 1], 'bias': [-0.10006356239318848, 0.1718388795852661, 0.1917187124490738, 0.12616270780563354, 0.2410246878862381, -0.14420321583747864], 'weights': [1.3129212856292725, 1.9736900329589844, -0.05472411587834358, -0.012819326482713223, 0.6576101183891296, -0.18957450985908508, 0.2618473768234253, 0.8116065859794617, 1.5089197158813477, 1.6602896451950073, -2.324342966079712, -2.6335017681121826, -3.753807544708252, -3.131269931793213, -3.1132469177246094, -3.0287232398986816, -3.71518874168396, -3.115664482116699, -1.7347663640975952, -3.263540029525757, -3.8394622802734375, -3.6420950889587402, -3.2358949184417725, -4.110813140869141, -2.3162546157836914, -2.3050897121429443, -2.138559341430664, -1.8476779460906982, -2.891035556793213, -1.6965510845184326, -1.8116403818130493, -1.7551342248916626, -3.103017568588257, -1.8355472087860107, -1.1184914112091064, 0.20531444251537323, -0.8951571583747864, -1.864946722984314, -1.0165525674819946, -1.0111479759216309, -0.6755116581916809, -1.2885771989822388, -1.6300872564315796, -1.4723033905029297, -1.5038915872573853, -1.082114577293396, -1.7087018489837646, -2.156355381011963, -0.33264705538749695, 1.0099273920059204, 4.122315883636475, -0.7196881175041199, -0.08137873560190201, -0.7342121005058289, -0.1646161526441574, -1.172550916671753, -0.4540753960609436, -0.5100690126419067, 0.29078614711761475, 0.3207652270793915, -0.41364768147468567, 0.6090594530105591, 0.7108191251754761, -0.9547742009162903, 0.17599211633205414, -0.1000346764922142, 1.3198931217193604, -0.39284616708755493, 0.5073610544204712, -0.23496878147125244, -0.4607142508029938, 2.786182165145874, 0.5491321086883545, 0.43314892053604126, -0.9519550800323486, -1.8739690780639648, -1.863187551498413, -1.6626156568527222, -0.4910593330860138, -0.2357858121395111, -0.8017576336860657, -3.384251594543457, -4.843245983123779, -3.461277723312378, -1.8609352111816406, -1.5307388305664062, -0.9863808751106262, -0.48077061772346497, -2.9560184478759766, -3.449439764022827, -0.9360039234161377, -0.05590256303548813, -3.1869900226593018, -2.9260408878326416, -1.2129029035568237, -0.17934133112430573, -3.176992177963257, -2.972210645675659, -0.20930150151252747, 0.3028154671192169, -1.1506836414337158, -1.2522287368774414, -0.05205778032541275, -0.15614837408065796, -0.5083153247833252, 0.20868319272994995, -0.3071171045303345, -0.7897494435310364, -1.6538289785385132, -0.9413822293281555, -0.8270339965820312, 2.773322582244873, 3.700944185256958, 3.0007646083831787, 3.786634922027588, 3.1493468284606934, 3.906508684158325, 2.977834939956665, 3.101003885269165, 3.054391860961914, 3.711411237716675, 3.765735626220703, 3.1184146404266357, 4.00459098815918, 2.410898447036743, 2.38869571685791, 2.058542251586914, 2.011187791824341, 2.767580509185791, 1.6639628410339355, 1.7150696516036987, 1.6797326803207397, 2.8663787841796875, 1.8851468563079834, 1.125571608543396, -0.0986524224281311, 0.9621352553367615, 1.82829749584198, 0.8707053661346436, 0.9323490858078003, 0.814997136592865, 1.2820088863372803, 1.720960021018982, 1.5272647142410278, 1.598755955696106, 0.963066041469574, 1.6235756874084473, 2.122020959854126, 0.3347413241863251, -0.9579721689224243, -4.046114921569824, 0.7782506346702576, -0.0035737596917897463, 0.6455525755882263, 0.19317804276943207, 1.1521235704421997, 0.4930703341960907, 0.4550166130065918, -0.37901899218559265, -0.3270445466041565, 0.3274492025375366, -0.539054274559021, -0.5395851731300354, 0.7178611755371094, -0.05988440290093422, 0.01733865961432457, -1.281239628791809, 0.31611427664756775, -0.3575558364391327, 0.38146933913230896, 0.5645953416824341, 0.12982402741909027, -0.6677186489105225, -0.49713197350502014, 0.7682026624679565, 1.85271155834198, 1.6783770322799683, 1.6524136066436768, 0.49185889959335327, 0.3126184046268463, 0.8408320546150208, 3.202183485031128, 5.248801231384277, 3.417248487472534, 1.6360862255096436, 1.5080029964447021, 0.9480173587799072, 0.5543376207351685, 4.750268936157227, 3.3250675201416016, 0.7527222037315369, -0.10813198983669281, 3.389779567718506, 2.9021639823913574, 1.2450960874557495, 0.23857314884662628, 3.071561574935913, 3.0360007286071777, 0.19459818303585052, -0.2696147859096527, -3.9927499294281006, -1.939612627029419, -0.4994182586669922, 0.028192076832056046, -0.6179304122924805, 0.25054115056991577, -0.3669547438621521, -0.8525370955467224, -2.438474655151367, -1.521085500717163, 2.2427875995635986, 2.5307037830352783, 3.7332987785339355, 2.959458351135254, 1.3376234769821167, 3.193125009536743, 3.7558045387268066, 3.129946708679199, 1.8431442975997925, 3.163658857345581, 3.683605194091797, 3.7931203842163086, 1.9662631750106812, 4.037752151489258, 2.372846841812134, 2.2352535724639893, 2.064286470413208, 1.8608046770095825, 2.984282970428467, 1.7023789882659912, 1.595791220664978, 1.8516281843185425, 3.015812635421753, 1.723741054534912, 1.242802619934082, -0.12586787343025208, 1.0458545684814453, 1.867552638053894, 1.0384708642959595, 0.9822914004325867, 0.8339194655418396, 1.2455378770828247, 1.5150314569473267, 1.3689765930175781, 1.5302659273147583, 0.9511551260948181, 1.7531790733337402, 2.206747531890869, 0.2325689047574997, -1.0982974767684937, -4.15520715713501, 0.5602730512619019, -0.09719135612249374, 0.7061708569526672, 0.06024713069200516, 0.4242868721485138, 0.37279364466667175, 0.5726522207260132, -0.1750050038099289, -0.32539764046669006, 0.2408335953950882, -0.6925297975540161, -0.6065151691436768, 0.8218656182289124, -0.16971458494663239, 0.08742441982030869, -1.3567569255828857, 0.5332053899765015, -0.5007674098014832, 0.46124863624572754, 0.5888156890869141, -1.0300825834274292, -0.6071169972419739, -0.43670082092285156, 0.7580206394195557, 1.8257606029510498, 1.7451869249343872, 1.7521692514419556, 0.5098414421081543, 0.2590177655220032, 0.8195390105247498, 0.9641978144645691, 4.837606906890869, 3.2868900299072266, 1.818782091140747, 1.434892177581787, 0.9448391795158386, 0.5985550284385681, 2.9061574935913086, 3.282453775405884, 0.8079367876052856, -0.15017493069171906, 3.1777594089508057, 2.918867349624634, 1.1166198253631592, 0.15977276861667633, 3.140610456466675, 3.0788114070892334, 0.5319637656211853, -0.09137807041406631, -3.8286354541778564, -1.8639181852340698, -0.3282071352005005, 0.03373199328780174, -0.5669344663619995, 0.1712816059589386, -0.3243235945701599, -0.7091904282569885, -1.5042436122894287, -1.5100328922271729, 2.3604214191436768, 2.6083874702453613, 3.782924175262451, 2.9372596740722656, 1.348618507385254, 3.170527458190918, 3.721116065979004, 2.9574031829833984, 1.8501274585723877, 3.079943895339966, 3.801483631134033, 3.753190040588379, 1.9131923913955688, 4.159276008605957, 2.2047579288482666, 2.3334434032440186, 2.010338068008423, 1.9682223796844482, 2.9828591346740723, 1.5857744216918945, 1.5884212255477905, 1.7733629941940308, 3.097590684890747, 1.8600695133209229, 1.1620550155639648, -0.11578207463026047, 0.9058087468147278, 1.8416117429733276, 0.9550999999046326, 0.7730740308761597, 0.8068558573722839, 1.2676256895065308, 1.6203006505966187, 1.3793630599975586, 1.5423306226730347, 1.079593539237976, 1.753143310546875, 2.1962993144989014, 0.42526790499687195, -1.1035255193710327, -4.01256799697876, 0.4669577181339264, 0.0944533720612526, 0.5589342713356018, 0.018742764368653297, 1.3275293111801147, 0.5605528354644775, 0.48937758803367615, -0.2686607241630554, -0.37586772441864014, 0.2777574956417084, -0.5567525625228882, -0.7432703971862793, 0.8178793787956238, -0.09472329169511795, 0.1067245826125145, -1.3628329038619995, 0.4803270399570465, -0.5195837616920471, 0.38397789001464844, 0.5635223388671875, -1.0637869834899902, -0.42549702525138855, -0.5935278534889221, 0.9692766666412354, 1.7826426029205322, 1.7046242952346802, 1.7288154363632202, 0.4440993368625641, 0.1743515431880951, 0.7787818312644958, 1.8653441667556763, 4.836453914642334, 3.446953773498535, 1.7484431266784668, 1.631474494934082, 1.1314585208892822, 0.4791748821735382, 2.7826619148254395, 3.36324143409729, 0.8748834133148193, 5.427852374850772e-05, 3.1575212478637695, 3.085869550704956, 1.0245845317840576, 0.22670163214206696, 3.0901100635528564, 2.9943532943725586, 0.09074182063341141, -0.14851932227611542, -3.8536388874053955, -1.9751213788986206, -0.3170393705368042, -0.15329600870609283, -0.7010417580604553, 0.14065495133399963, -0.30106979608535767, -0.8721114993095398, -2.3661348819732666, -1.574155330657959, 2.1652674674987793, 2.594222068786621, 3.715742588043213, 3.151733875274658, 3.2799744606018066, 3.0608577728271484, 3.883697032928467, 2.992830753326416, 1.6733113527297974, 3.0903360843658447, 3.8979997634887695, 3.671541690826416, 1.9134854078292847, 4.185734272003174, 2.2828707695007324, 2.4042184352874756, 1.9913012981414795, 1.959373950958252, 3.063638687133789, 1.744260549545288, 1.6557472944259644, 1.8335329294204712, 2.9002888202667236, 1.6939785480499268, 1.2797813415527344, -0.20260648429393768, 0.9536758065223694, 1.7380074262619019, 0.949938952922821, 0.9702340960502625, 0.88371342420578, 1.3118950128555298, 1.5587106943130493, 1.393432855606079, 1.5564903020858765, 0.9284602999687195, 1.6531496047973633, 2.128455877304077, 0.30516692996025085, -0.9542091488838196, -0.3036510944366455, 0.4477669298648834, -0.08246328681707382, 0.501778244972229, 0.03040405549108982, 0.7563915252685547, 0.5697754621505737, 0.47760865092277527, -0.37631285190582275, -0.28147146105766296, 0.17988988757133484, -0.6014727354049683, -0.5843101739883423, 0.7672945857048035, -0.06094977259635925, 0.1388266533613205, -1.2556575536727905, 0.3173829913139343, -0.3465014696121216, 0.2414076328277588, 0.5933444499969482, -1.0584315061569214, -0.5281916856765747, -0.6209016442298889, 0.984308123588562, 1.6985013484954834, 1.7707003355026245, 1.6482473611831665, 0.5366992950439453, 0.36491066217422485, 0.8519235253334045, 0.8394411206245422, 4.763238430023193, 3.338785171508789, 1.7220418453216553, 1.565526008605957, 0.9244861006736755, 0.4663880169391632, 2.709338903427124, 3.2932019233703613, 0.7119160294532776, -0.17552845180034637, 3.287346124649048, 3.077460765838623, 1.0444767475128174, 0.1457153707742691, 3.118197202682495, 3.115549325942993, 0.534492552280426, -0.19193445146083832, 3.1368231773376465, 1.769403338432312, -4.284468173980713, -1.2055637836456299, -1.4457236528396606]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0, 0.8)}}, 'et1_eta3': {'discriminator': {'threshold': 0.21999870538711547, 'nodes': [100, 15, 1], 'bias': [-0.13548153638839722, -0.01683751679956913, -0.15725652873516083, 0.020923443138599396, -0.22614873945713043, -0.07646181434392929, -0.0734737291932106, 0.03853830322623253, -0.0010249352781102061, 0.020581664517521858, -0.12911821901798248, 0.08714920282363892, -0.06384588778018951, -0.03104345127940178, 0.18710413575172424, 0.03918536379933357], 'weights': [0.27311113476753235, -3.3759491443634033, -34.237274169921875, 0.328409880399704, -1.6261165142059326, 0.12471484392881393, 0.22774195671081543, -0.08361603319644928, -3.9591116905212402, -2.887002468109131, -1.541354775428772, 12.612893104553223, 29.523591995239258, 14.900782585144043, 10.443582534790039, -2.4962613582611084, 14.925068855285645, 0.03808491304516792, -3.5481462478637695, -8.93346881866455, -1.7305678129196167, -127.41497802734375, -65.80328369140625, -118.23959350585938, -295.6422119140625, -112.67206573486328, 1.144241452217102, -129.81878662109375, 22.81308937072754, -1.1874958276748657, 0.1742313802242279, 0.31636714935302734, 0.17071932554244995, 0.17372311651706696, 0.17733557522296906, 0.11163213849067688, 0.2852659821510315, -27.671287536621094, 0.45829784870147705, 0.18090751767158508, 0.5364158153533936, -15.83011245727539, 0.3233906328678131, 0.1439550220966339, 45.5847282409668, 0.09570784121751785, 1.4064524173736572, 0.0847150906920433, 0.05467672646045685, -70.02899932861328, 0.31328120827674866, 0.06496551632881165, 0.17603614926338196, 0.1412815898656845, 0.29800865054130554, 0.10240066051483154, 0.3294409513473511, -42.32052230834961, 0.2729935050010681, 0.018774917349219322, -0.13918672502040863, 1.7130153179168701, 0.19946470856666565, 0.09577897936105728, -0.017680292949080467, 0.25769948959350586, 1.0012086629867554, 0.11215098202228546, 0.09600920230150223, 0.40539315342903137, -0.20910269021987915, 0.2664446532726288, -0.30915671586990356, -0.42805078625679016, -0.9886420369148254, -8.625041961669922, 0.07689287513494492, -19.628448486328125, 0.28120774030685425, -2.2956244945526123, -40.68057632446289, -1.3853145837783813, -7.991135597229004, 0.1776903122663498, 0.31694063544273376, 0.10814964026212692, 0.17714503407478333, 0.0908486470580101, 0.08341775834560394, -0.7722832560539246, 0.15229634940624237, -1.2476352453231812, 35.65205383300781, 12.39472770690918, 0.014613754115998745, 0.07040692120790482, 0.22843848168849945, -0.06899148225784302, 0.00725973816588521, 0.05561147257685661, -0.4600379467010498, -0.6870471239089966, 0.408429890871048, 0.2508889138698578, 0.42010918259620667, -0.04579785466194153, 0.3904893398284912, 0.177372545003891, -0.7680620551109314, -0.892344057559967, -0.9540162086486816, 0.8645449280738831, 1.7521226406097412, 0.11230751127004623, 1.8163622617721558, 0.8675570487976074, 1.1688916683197021, 1.4678305387496948, 1.3472119569778442, 2.3290131092071533, 1.6482445001602173, 1.476757287979126, 0.6951602697372437, 1.7490801811218262, 4.456609725952148, 1.4942911863327026, 0.44262081384658813, 1.493670105934143, 0.910380482673645, 0.9890121817588806, 0.6399824023246765, 1.084384560585022, 0.68205726146698, 1.1336181163787842, 0.5933999419212341, 0.6526542901992798, 0.06795722246170044, 0.2801143527030945, 0.5119915008544922, 0.4993996322154999, 0.43809401988983154, 0.6876974701881409, 0.7441638708114624, 0.953073263168335, -0.47077476978302, 0.7663732171058655, 0.1420237272977829, 0.5246594548225403, -0.01110218558460474, 0.6920081973075867, 0.02887999825179577, 0.8462351560592651, -0.013490594923496246, 0.6587589383125305, 0.6666980385780334, 0.7191452383995056, 0.08141835033893585, 0.5353701114654541, 0.7466838359832764, -0.3038295805454254, -0.3849813640117645, 0.6442101001739502, 0.20662878453731537, -0.13836604356765747, -0.4729679822921753, 1.0059210062026978, 0.7994219660758972, 0.4501248896121979, -0.4794921576976776, -0.4212397634983063, -0.4803358316421509, -0.09829515963792801, -0.08503026515245438, 0.015857914462685585, 0.4961414039134979, 0.8615308403968811, 0.8257706165313721, 0.9702783226966858, 0.42256346344947815, 0.2524668872356415, 2.6660189628601074, 2.423447847366333, 1.9388025999069214, 0.844959020614624, 0.862026035785675, 0.7074673175811768, 0.30425840616226196, 0.24387919902801514, 0.16472911834716797, 0.7374336123466492, 0.15187427401542664, 0.1066104918718338, 1.6170693635940552, 0.7130842208862305, 0.2786671221256256, 0.4103098511695862, 0.30292952060699463, -0.01162293553352356, 0.018419107422232628, 1.6280436515808105, 260.2229919433594, 40.98914337158203, -9.259502410888672, 0.0716453343629837, 30.521841049194336, 0.053640056401491165, -2.0894179344177246, -0.12951870262622833, 0.21377700567245483, 0.138141468167305, -14.587696075439453, -44.362998962402344, 0.8160845041275024, -24.441612243652344, -20.646194458007812, -0.8131147623062134, 0.022992365062236786, -1.4554532766342163, -18.1925048828125, -83.29716491699219, -15.137067794799805, -82.07763671875, -0.15907622873783112, -0.28447389602661133, -34.728179931640625, 0.21393011510372162, -30.264799118041992, 0.019381016492843628, -0.038311224430799484, 0.1416430026292801, -5.1106109619140625, 0.13753269612789154, 13.506304740905762, 0.04869315028190613, -0.8316936492919922, -0.3174999952316284, -10.717031478881836, -0.11511392891407013, -82.73733520507812, -0.03938367962837219, 0.19481924176216125, 0.042442355304956436, -0.5166676640510559, -0.8231828808784485, 0.13947834074497223, 0.06059665605425835, 0.24069757759571075, 0.15347082912921906, 0.08259840309619904, 0.07090720534324646, 0.18815860152244568, 0.09103582799434662, 0.031159624457359314, 0.23961825668811798, -4.05682373046875, 0.28540360927581787, 0.18856042623519897, 0.2756196856498718, 0.767066478729248, 0.2137691229581833, 0.3667939305305481, 0.3547183871269226, 0.5839437246322632, 0.20705580711364746, 0.5050367712974548, 0.3099561333656311, 1.0168322324752808, 21.976741790771484, 0.13946032524108887, 0.2326180636882782, -62.532962799072266, 0.15546873211860657, -1.069101333618164, -0.47236382961273193, 4.534162998199463, 9.276572227478027, -0.03356550261378288, 7.737133502960205, -0.646903395652771, 0.11770778894424438, -19.07710075378418, -4.1830549240112305, 6.380957126617432, 0.03252365067601204, 0.12861032783985138, 0.34352266788482666, -0.09262091666460037, 0.22853399813175201, 73.98128509521484, 13.444624900817871, 0.09797342121601105, 6.109785556793213, -25.42735481262207, 0.30582383275032043, 0.7534922957420349, -25.422847747802734, 0.44558507204055786, 0.10153661668300629, 6.7417893409729, -81.96536254882812, -0.4475506842136383, -0.7685667276382446, 0.42536941170692444, 0.018292490392923355, 0.49354490637779236, 0.03125429525971413, 0.2981216609477997, 0.16212353110313416, -0.5965925455093384, -1.0961010456085205, -0.8986480832099915, 0.8294762969017029, 1.7315998077392578, 0.05017974227666855, 0.9368739128112793, 0.9250475168228149, 1.3568384647369385, 1.41081702709198, 1.4092081785202026, 2.3188436031341553, 1.5868051052093506, 1.5713979005813599, 0.8672316670417786, 1.7744754552841187, 4.4507341384887695, 1.5550717115402222, 0.46468648314476013, 1.4008857011795044, 0.8533420562744141, 1.0730996131896973, 0.6826199889183044, 1.1055177450180054, 0.6800651550292969, 1.188631534576416, 0.7294071316719055, 0.7286663055419922, -0.041002046316862106, 0.31920814514160156, 0.33175235986709595, 0.5573563575744629, 0.2779914438724518, 0.813319742679596, 0.7715116143226624, 1.0134650468826294, -0.4107332229614258, 0.6400874257087708, -0.13267318904399872, 0.7420524954795837, -0.1898316740989685, 0.626278281211853, -0.004900864791125059, 0.8470655679702759, -0.22561566531658173, 0.5965075492858887, 0.6883066296577454, 0.7371395230293274, 0.0753268375992775, 0.58357834815979, 0.6673306226730347, -0.12595801055431366, -0.248131662607193, 0.6029223799705505, -0.06962700188159943, 0.0010590306483209133, -0.6980670690536499, 1.104503870010376, 0.7738651037216187, 0.3541146218776703, -0.5828201174736023, -0.3860311210155487, -0.5130126476287842, -0.12079442292451859, -0.16519854962825775, 0.006086415145546198, 0.5295384526252747, 0.8368332982063293, 0.9307098388671875, 0.883460283279419, 0.3742440938949585, 0.17408856749534607, 2.756160259246826, 2.5823588371276855, 1.85627019405365, 0.9639574885368347, 0.717703640460968, 0.6514616012573242, 0.4047655165195465, 0.33446961641311646, 0.18162378668785095, 0.5493860244750977, 0.17933794856071472, -0.009808511473238468, 1.6288830041885376, 0.6881378293037415, 0.06067885458469391, 0.4358510375022888, 0.38695546984672546, -0.014165611937642097, -0.05582132190465927, 1.613330602645874, -0.004286932293325663, -4.7066121101379395, -0.12000785768032074, 0.242215096950531, -15.010812759399414, 0.027960803359746933, 0.37214863300323486, 0.1014244481921196, -8.68445110321045, -3.99629545211792, -0.4290243089199066, 16.896896362304688, 31.628252029418945, 12.017682075500488, 17.945066452026367, 0.356751024723053, -21.800493240356445, 7.176410675048828, -2.8248772621154785, 0.5219097137451172, 0.8123272061347961, 1.7116408348083496, 7.593018054962158, 0.4899737238883972, -16.07001495361328, 2.604401111602783, 0.39833924174308777, 0.36492183804512024, 0.14455756545066833, 0.31431129574775696, 10.885016441345215, 0.19592495262622833, -0.12833021581172943, 0.27526408433914185, 8.488813400268555, 0.08350221067667007, 9.375109672546387, 0.14156050980091095, 2.2691996097564697, 0.1520390808582306, 0.12032973021268845, 0.04873843118548393, 0.18690000474452972, 0.21026185154914856, 0.23697248101234436, 0.25504329800605774, 0.41612088680267334, 0.2565062642097473, 9.369866371154785, 0.13409647345542908, 43.341434478759766, 0.3932494819164276, 0.0896831825375557, 0.18505431711673737, 0.7346369624137878, 0.03387029096484184, 0.19374465942382812, 0.0705668032169342, 0.3003753125667572, 0.04298543557524681, 0.028996208682656288, -21.588180541992188, 0.11444854736328125, 0.13216161727905273, 4.773996829986572, 0.2832426130771637, 1.239473819732666, 0.2596017122268677, 12.176838874816895, 0.30314216017723083, -0.16596490144729614, 0.15720663964748383, -0.3566511273384094, 0.29557859897613525, -0.8388762474060059, -8.197958946228027, 0.10206726938486099, 0.12351687997579575, 0.19624237716197968, -1.6721720695495605, -27.545869827270508, -33.93985366821289, -15.668135643005371, -0.061052244156599045, 0.14876647293567657, 0.21657399833202362, 1.6471359729766846, 0.0860208198428154, -3.840632200241089, -7.525681972503662, 0.21275527775287628, 0.003266764571890235, -74.7641830444336, -21.594890594482422, 0.026560189202427864, -3.802018404006958, -15.33237075805664, -0.04104163497686386, 0.1169440820813179, -83.81757354736328, -0.5532897710800171, -0.8165198564529419, 0.34723711013793945, 0.27336299419403076, 0.47944629192352295, -0.07525037229061127, 0.2102240025997162, 0.17436525225639343, -0.6565780639648438, -1.0357780456542969, -0.44414329528808594, 0.7365843653678894, 1.6262153387069702, 0.03683947026729584, 1.7672659158706665, 3.134526252746582, 1.296297311782837, 1.5506997108459473, 1.3813825845718384, 2.2278246879577637, 1.6421846151351929, 1.4956694841384888, 0.7642945647239685, 1.7988592386245728, 4.489080429077148, 1.6430108547210693, 0.5391472578048706, 1.313070297241211, 0.9294195175170898, 1.0620927810668945, 0.6183980703353882, 1.0131871700286865, 0.8591032028198242, 1.0539237260818481, 0.7781015634536743, 0.6556150913238525, -0.04422974959015846, 0.2875678539276123, 0.707500696182251, 0.5017414093017578, 0.441723495721817, 0.8089386820793152, 0.6186651587486267, 0.9224994778633118, -0.4255253076553345, 0.8238158226013184, 0.08539765328168869, 0.7022716403007507, -0.1042095348238945, 0.6725255250930786, -0.12811416387557983, 0.7501046657562256, -0.0164378359913826, 0.4521348178386688, 0.6233397126197815, 0.7517130970954895, 0.2569166421890259, 0.5855529308319092, 0.6016921401023865, -0.10625948011875153, -0.26472845673561096, 0.7111026048660278, 0.33000805974006653, 0.499904602766037, -0.4827410578727722, 1.0805922746658325, 0.8632523417472839, 0.32516244053840637, -0.40037772059440613, -0.3574633300304413, -0.6059770584106445, -0.15426747500896454, -0.13341660797595978, -0.0032433196902275085, 0.6430386304855347, 0.8613996505737305, 0.8671399354934692, 0.8271334767341614, 0.3666239082813263, 0.20373180508613586, 2.736769199371338, 2.4440689086914062, 2.2921786308288574, 0.9166236519813538, 0.6728659868240356, 0.7497067451477051, 0.4107432961463928, 0.23322728276252747, 0.2601834833621979, 0.6962424516677856, 0.33579221367836, 0.08892210572957993, 1.6454521417617798, 0.7869789004325867, 0.09144618362188339, 0.42588698863983154, 0.45452365279197693, 0.09841546416282654, 0.1424616128206253, 1.0783820152282715, -0.7544552087783813, -0.7049180865287781, 0.41296079754829407, 0.55269455909729, 0.9070733189582825, 0.08183086663484573, 0.3689192533493042, 0.18148919939994812, -0.8073729872703552, -1.0684634447097778, -0.47660985589027405, 0.7094019651412964, 0.49947571754455566, 0.03986681252717972, 1.7131321430206299, 3.3250179290771484, 1.196668028831482, 1.4955694675445557, 1.250733733177185, 2.3139359951019287, 1.5271682739257812, 1.5264679193496704, 0.7613242864608765, 1.7532535791397095, 4.44857931137085, 1.5567858219146729, 0.4529055655002594, 1.428321361541748, 0.8504418134689331, 1.1516315937042236, 0.4522314667701721, 1.2195693254470825, 0.823298454284668, 1.1904023885726929, 0.5974008440971375, 0.6955486536026001, 0.07535363733768463, 0.5025022029876709, 0.5175940990447998, 0.48822325468063354, 0.3870915472507477, 0.8235669732093811, 0.5947208404541016, 0.7944426536560059, -0.6435062885284424, 0.7523051500320435, 0.1543126106262207, 0.7438613176345825, -0.23742346465587616, 0.6042104959487915, -0.008056694641709328, 0.7388272285461426, -0.047206368297338486, 0.5764167308807373, 0.8084863424301147, 0.6737048029899597, 0.05795464664697647, 0.6910982131958008, 0.6323676705360413, -0.1472538411617279, -0.3065909147262573, 0.5821704864501953, 0.2584359645843506, 0.41564640402793884, -0.4817456007003784, 1.0652761459350586, 0.8255042433738708, 0.45221972465515137, -0.4376998841762543, -0.3481597602367401, -0.4858693778514862, -0.009239261969923973, -0.10277857631444931, -0.14427503943443298, 0.6663879156112671, 0.8964037299156189, 0.8917728662490845, 0.9129073619842529, 0.436646431684494, 0.3320651650428772, 2.7604668140411377, 2.6407289505004883, 2.173305034637451, 0.9030668139457703, 0.7806549668312073, 0.6201235055923462, 0.3125680387020111, 0.35518062114715576, 0.1873771846294403, 0.6393232941627502, 0.17978760600090027, 0.21121342480182648, 2.346524477005005, 0.7971459031105042, 0.12291496247053146, 0.48052775859832764, 0.4420459270477295, 0.09912591427564621, 0.08721273392438889, 1.0219604969024658, -1.5588719844818115, -0.8675257563591003, 0.43477699160575867, 0.17809949815273285, 0.39835870265960693, -0.07163010537624359, 0.3103600740432739, 0.1386711746454239, 0.012463404797017574, -0.9493471384048462, -0.8898952603340149, 4.420409202575684, 1.76506507396698, 0.007498225662857294, 0.7084828019142151, 0.7218790650367737, 1.2075223922729492, 2.518134355545044, 1.185468316078186, 2.416799783706665, 3.962573766708374, 1.5983606576919556, 0.5702595114707947, 2.5679867267608643, 4.308701515197754, 1.4534597396850586, 0.2023158073425293, 1.5285755395889282, 2.3904953002929688, 0.9831451177597046, 0.5509435534477234, 1.1178311109542847, 0.7470869421958923, 1.4570659399032593, 0.6495356559753418, 0.7716516256332397, 5.241714000701904, 0.4222685396671295, 0.3064238429069519, 0.5635898113250732, 0.3062441945075989, 0.7924647331237793, 0.769102156162262, 0.8049970269203186, -0.47052067518234253, 0.6423972845077515, 0.03492344915866852, 0.5288445353507996, -0.05428708717226982, 0.8105145692825317, 0.06847403198480606, 0.8278687596321106, 0.05261142551898956, 0.4925355911254883, 0.8063614368438721, 0.5461177825927734, 0.11853044480085373, 0.5793411731719971, 0.600203812122345, -0.24961908161640167, -0.5832216143608093, 0.6533504724502563, 0.05589477717876434, -0.01924298331141472, -0.519298255443573, 0.9155225157737732, 0.7516279816627502, 0.3422444760799408, -0.5943817496299744, -0.4218832552433014, -0.5159735679626465, 0.34190821647644043, 0.018661558628082275, -0.0035139613319188356, 0.5830861330032349, 0.990135908126831, 1.601207971572876, 0.846612274646759, 0.5302431583404541, 0.2794918417930603, 2.652611494064331, 2.4696712493896484, 1.9371932744979858, 0.8131229877471924, 0.863625705242157, 0.6439306735992432, 0.23416277766227722, 0.2500298321247101, 0.37679553031921387, 0.6365455389022827, 0.22417716681957245, 0.07263913750648499, 1.771836757659912, 0.6203403472900391, 0.13748224079608917, 0.5088329315185547, 0.3803195357322693, 0.0439189150929451, 0.0008213225519284606, 4.312965393066406, 0.47734394669532776, 0.898761510848999, -0.2667087912559509, -0.0973474457859993, -0.5189624428749084, -0.0027940624859184027, -0.22998450696468353, 0.006554126739501953, 0.6445546746253967, 0.9255807995796204, 0.8313505053520203, -0.7014707922935486, -1.6359919309616089, -0.09600502252578735, -1.7021762132644653, -1.07358980178833, -1.1469436883926392, -1.3964389562606812, -1.2294076681137085, -2.353041887283325, -1.6063669919967651, -1.5430361032485962, -1.5466598272323608, -1.730797290802002, -4.369347095489502, -1.6390761137008667, -1.048595666885376, -1.4899080991744995, -2.3193399906158447, -1.0470846891403198, -0.6717123985290527, -1.0923277139663696, -0.7636577486991882, -1.024825096130371, -0.6830265522003174, -0.8583815097808838, -0.006527409888803959, -0.44446861743927, -0.2985711097717285, -0.5627002716064453, -0.3339860737323761, -0.8321446776390076, -0.6431950330734253, -0.9680547714233398, 0.574874997138977, -0.785204291343689, -0.12786348164081573, -0.6352939009666443, 0.06486734747886658, -0.7952043414115906, 0.07168187946081161, -0.6917932033538818, 0.0032862673979252577, -0.44765427708625793, -0.729211688041687, -0.5623509287834167, -0.2503095865249634, -0.5446416139602661, -0.5873317122459412, 0.17994065582752228, 0.3188384473323822, -0.7518025636672974, -0.3372591435909271, 0.2258499711751938, 0.47296226024627686, -0.9909543991088867, -0.9164610505104065, -0.38671085238456726, 0.5653322339057922, 0.2823928892612457, 0.714866042137146, 0.002476212102919817, 0.03695942088961601, 0.08442013710737228, -0.5575993657112122, -0.8062451481819153, -0.7455276250839233, -0.7823361754417419, -0.4767151474952698, -0.35367774963378906, -2.582487106323242, -2.6122488975524902, -1.886770248413086, -0.9308995604515076, -0.8385047316551208, -0.7167344093322754, -0.46863192319869995, -0.39046525955200195, -0.1844811737537384, -0.7411055564880371, -0.18712273240089417, -0.19130800664424896, -1.7296782732009888, -0.6437389850616455, -0.27467143535614014, -0.5217215418815613, -0.45382773876190186, -0.10261315852403641, -0.0684165507555008, -1.6919090747833252, -0.5155209898948669, -0.806369423866272, 0.34330156445503235, 0.3117218613624573, 0.42117294669151306, 0.17210544645786285, 0.35956382751464844, 0.18745771050453186, -0.5982280373573303, -0.8673656582832336, -0.7998253703117371, 0.6799397468566895, 1.7396693229675293, 0.01018490269780159, 1.6810013055801392, 1.0715056657791138, 1.1658540964126587, 1.482855200767517, 1.381729245185852, 2.2737245559692383, 1.488803744316101, 1.5996567010879517, 1.504366159439087, 1.8581136465072632, 4.268971920013428, 1.5788429975509644, 0.43393415212631226, 1.3380517959594727, 0.8981566429138184, 0.9955989122390747, 0.5538982152938843, 1.0904697179794312, 0.8144991397857666, 1.2277960777282715, 0.6513231992721558, 0.7951213121414185, -0.04602808132767677, 0.2981453239917755, 0.419134259223938, 0.5462741851806641, 0.23252877593040466, 0.7400702834129333, 0.6167660355567932, 0.9804249405860901, -0.5190922021865845, 0.7475981116294861, 0.1279441863298416, 0.72017502784729, -0.00586538715288043, 0.7034057974815369, -0.07630114257335663, 0.6230475902557373, -0.04864570125937462, 0.6449492573738098, 0.7979609966278076, 0.6658101677894592, 0.14317752420902252, 0.6638975143432617, 0.7831434011459351, -0.18051059544086456, -0.2411264032125473, 0.5855880379676819, 0.3468589782714844, -0.10748782753944397, -0.4463851749897003, 0.9568179845809937, 0.7273586392402649, 0.3716861307621002, -0.5015804171562195, -0.3407506048679352, -0.5029046535491943, -0.030073730275034904, -0.19758975505828857, -0.14465086162090302, 0.5322308540344238, 0.9455856680870056, 0.8921026587486267, 0.7468627691268921, 0.4567381739616394, 0.3669756054878235, 2.6993584632873535, 2.5978264808654785, 2.2640504837036133, 0.7590308785438538, 0.8010215163230896, 0.6861289143562317, 0.40964117646217346, 0.2118472009897232, 0.2549050748348236, 0.6341936588287354, 0.25215160846710205, 0.09524977952241898, 1.700262188911438, 0.706306517124176, 0.30715879797935486, 0.5290684103965759, 0.49244269728660583, -0.06418915838003159, 0.04975152760744095, 1.5500500202178955, -1.5834076404571533, -0.6954337954521179, 0.4650103747844696, 0.6577455401420593, 0.7889395356178284, 0.2049560397863388, 0.24486322700977325, -0.009022560901939869, -0.8666000962257385, -2.045853614807129, -0.3314337134361267, 0.8435583114624023, 0.4882270395755768, 0.15437184274196625, 1.7063837051391602, 3.206918716430664, 0.9475841522216797, 1.4774812459945679, 1.4013478755950928, 2.3738999366760254, 1.4100584983825684, 1.4283572435379028, 0.5761522054672241, 1.80962336063385, 4.321674346923828, 1.503580927848816, 0.11723089963197708, 1.3861414194107056, 0.9546619653701782, 1.11725652217865, 0.4995439648628235, 1.0666526556015015, 0.8333861231803894, 0.9895994067192078, 0.806423544883728, 0.8427911400794983, 0.04865162447094917, 0.3299253582954407, 0.3943425118923187, 0.6798813343048096, 0.4510830342769623, 0.8055926561355591, 0.6687991619110107, 0.8349362015724182, -0.5585463643074036, 0.8295691013336182, 0.1171579658985138, 0.6989243626594543, -0.19033868610858917, 0.6959813833236694, -0.01686459593474865, 0.6791707277297974, -0.04172997549176216, 0.8151465058326721, 0.8120613098144531, 0.5411016345024109, 0.08975402265787125, 0.518225371837616, 0.7131763100624084, -0.2667398452758789, -0.47982117533683777, 0.7223711609840393, 0.22968675196170807, 0.5080359578132629, -0.24779611825942993, 1.000519037246704, 0.8114537000656128, -0.11329104751348495, -0.41926029324531555, -0.40734976530075073, -0.5976492166519165, -0.18224789202213287, -0.19198033213615417, -0.1957840472459793, 1.4571523666381836, 0.9041946530342102, 0.9303934574127197, 1.0009019374847412, 0.3874715566635132, 0.14946575462818146, 2.6844358444213867, 2.594773292541504, 2.9927315711975098, 0.8210042715072632, 0.8316763043403625, 0.6037126183509827, 0.35337916016578674, 0.434031218290329, 0.10066181421279907, 0.8302664756774902, 0.13174991309642792, -0.03273296356201172, 2.895599365234375, 1.068758249282837, 0.14242731034755707, 0.7807971835136414, 0.3119576573371887, 0.11482574790716171, 0.0237018670886755, 4.427016735076904, -0.21071253716945648, -0.8135926723480225, 0.07525352388620377, 0.13170583546161652, 0.13392695784568787, -0.12049801647663116, 0.2329808473587036, 0.08609888702630997, -0.733835756778717, -0.7725173830986023, -0.7070527672767639, 0.9170985221862793, 1.566633939743042, 1.1905206441879272, 0.25901028513908386, 0.2332691103219986, 0.18001867830753326, 0.35527628660202026, 0.3007403612136841, 0.7856625318527222, 0.858182430267334, 0.48666107654571533, 0.18681484460830688, 0.5598626136779785, 1.880743384361267, 0.5172922611236572, 0.07522614300251007, 0.26447904109954834, 0.3308875858783722, 0.24684658646583557, 0.15553691983222961, 0.27314358949661255, 0.2199666053056717, 0.35521450638771057, 0.17764829099178314, 0.32060080766677856, 0.16585780680179596, 0.07454758137464523, 0.4575614929199219, 0.20994345843791962, 0.09051110595464706, 0.15978366136550903, 0.1526365578174591, 0.2779275178909302, -0.05156323313713074, 0.262028306722641, 0.22761356830596924, 0.3378054201602936, 0.16382645070552826, 0.20788058638572693, 0.0802481472492218, 0.20867034792900085, 0.0066891745664179325, 0.2572157680988312, 0.24560415744781494, 0.23787380754947662, 0.15692050755023956, 0.30082717537879944, 0.25108829140663147, -0.06754092127084732, -0.07401895523071289, 0.31813082098960876, 0.10019975900650024, 0.18728357553482056, 0.01887519098818302, 0.3369506597518921, 0.21679000556468964, 0.0318223275244236, 0.24033045768737793, 0.03164844959974289, -0.038366131484508514, 0.17063111066818237, 0.05540268495678902, 0.06684154272079468, 0.19353178143501282, 0.21182721853256226, 0.25729668140411377, 0.29491865634918213, 0.08781300485134125, 0.08205510675907135, 0.5169978141784668, 0.6391630172729492, 0.9494807720184326, 0.21649667620658875, 0.21951161324977875, 0.13263729214668274, 0.23807696998119354, 0.2754165232181549, -0.06839940696954727, 0.12042684853076935, 0.014029202982783318, -0.07188686728477478, 0.4520670175552368, 0.2932055592536926, 0.17542415857315063, 0.2527690827846527, 0.06127519533038139, -0.022234877571463585, -0.05630284547805786, 0.5495284199714661, -0.7811673879623413, -0.7133728861808777, 0.325501948595047, 0.5077052116394043, 0.8142783641815186, 0.20586371421813965, 0.23996958136558533, 0.16510328650474548, -0.6711987257003784, -0.9623690247535706, -0.4198915660381317, 0.7259751558303833, 0.30565518140792847, -0.0015063342871144414, 1.7810285091400146, 3.1886672973632812, 1.2207406759262085, 1.529780626296997, 1.247734546661377, 2.2516720294952393, 1.572585105895996, 1.468340277671814, 0.896185040473938, 1.6687573194503784, 4.2895989418029785, 1.5172935724258423, 0.45110300183296204, 1.326554536819458, 0.7773633003234863, 0.9641960859298706, 0.6486456990242004, 1.1244882345199585, 0.8756487369537354, 1.0511130094528198, 0.7055808901786804, 0.6503958702087402, 0.06480731070041656, 0.48645368218421936, 0.7077053189277649, 0.6091352701187134, 0.4724169671535492, 0.8187442421913147, 0.7369297742843628, 0.934201717376709, -0.44145146012306213, 0.7141538858413696, 0.16243413090705872, 0.7112907767295837, -0.24607394635677338, 0.6046221256256104, -0.10760464519262314, 0.7803038358688354, -0.10037544369697571, 0.6164449453353882, 0.770185112953186, 0.709969699382782, 0.05377931892871857, 0.6557050943374634, 0.8151196837425232, -0.21981477737426758, -0.28117895126342773, 0.7130841612815857, 0.3390423357486725, 0.4887005388736725, -0.49483630061149597, 1.0058166980743408, 0.8581113219261169, 0.43329522013664246, -0.51792973279953, -0.3770964443683624, -0.6321234703063965, 0.0005693019484169781, -0.14124834537506104, -0.15304464101791382, 0.5677072405815125, 0.8117382526397705, 0.849564790725708, 0.8176353573799133, 0.5676758885383606, 0.28594401478767395, 2.6703193187713623, 2.4239425659179688, 2.1639206409454346, 0.755211353302002, 0.8521448969841003, 0.8206840753555298, 0.44922077655792236, 0.427205353975296, 0.347832053899765, 0.7104714512825012, 0.17453518509864807, 0.14883162081241608, 2.288850784301758, 0.6242515444755554, 0.12886682152748108, 0.42596322298049927, 0.45793795585632324, 0.14197134971618652, 0.009008275344967842, 0.9529098868370056, 0.6105706095695496, 0.8994865417480469, -0.2882499396800995, 0.0026537529192864895, -0.5568832159042358, 0.07504217326641083, -0.284760057926178, -0.033087119460105896, 0.757278561592102, 0.8757665753364563, 0.8105220198631287, -0.6944780945777893, -1.7204450368881226, -0.18176758289337158, -1.7297269105911255, -0.9945343136787415, -1.1272376775741577, -1.4987133741378784, -1.383665919303894, -2.27018404006958, -1.4616681337356567, -1.4117454290390015, -1.0605192184448242, -1.8895319700241089, -4.472772121429443, -1.5155271291732788, -0.4828284978866577, -1.5075507164001465, -0.7342935800552368, -0.9939765334129333, -0.5512580275535583, -1.0616636276245117, -0.7082603573799133, -1.15836763381958, -0.6550585031509399, -0.8128366470336914, -0.060651060193777084, -0.471890926361084, -0.5251023173332214, -0.5056780576705933, -0.40958496928215027, -0.8470943570137024, -0.6003419756889343, -0.8957931399345398, 0.48357486724853516, -0.7695818543434143, 0.1736222207546234, -0.7057920694351196, 0.21066366136074066, -0.7980027198791504, 0.08247004449367523, -0.6937388181686401, 0.20614998042583466, -0.4705154001712799, -0.657437264919281, -0.5454309582710266, -0.14805318415164948, -0.5605241060256958, -0.5896328687667847, 0.1796286404132843, 0.35764482617378235, -0.632087230682373, -0.07106995582580566, 0.08762283623218536, 0.6918275356292725, -0.9348177909851074, -0.7766962051391602, -0.45545628666877747, 0.5924744009971619, 0.4280684292316437, 0.702368974685669, 0.006207578349858522, 0.16611775755882263, 0.11652491986751556, -0.5337023138999939, -1.001293420791626, -0.9304237365722656, -0.8409886956214905, -0.5098109245300293, -0.16034263372421265, -2.645500659942627, -2.6329870223999023, -1.9278244972229004, -0.8661825060844421, -0.6496831774711609, -0.6844520568847656, -0.3846784830093384, -0.3318297863006592, -0.16965413093566895, -0.6580185294151306, -0.13038940727710724, -0.1360854208469391, -1.7591766119003296, -0.7724975347518921, -0.12524476647377014, -0.3341684341430664, -0.30901074409484863, -0.045865777879953384, 0.04960915446281433, -1.51837158203125, 0.6167348623275757, 0.908183217048645, -0.26645487546920776, -0.6154975891113281, -0.8339879512786865, -0.3118394613265991, -0.25443458557128906, -0.12542937695980072, 0.6716971397399902, 0.9846269488334656, 0.24460136890411377, -0.8001673221588135, -0.48054420948028564, -0.07605305314064026, -1.7801909446716309, -3.2340381145477295, -1.2085442543029785, -1.4202587604522705, -1.3088916540145874, -2.2815284729003906, -1.480787992477417, -1.3882213830947876, -1.354114055633545, -1.7049531936645508, -4.347880840301514, -1.5492618083953857, -0.09061096608638763, -1.5195504426956177, -0.884406328201294, -1.0363097190856934, -0.6562923192977905, -1.1936662197113037, -0.7976014018058777, -1.1915693283081055, -0.6323226690292358, -0.8368862271308899, -0.09856187552213669, -0.42488792538642883, -0.6060835719108582, -0.6438119411468506, -0.38996773958206177, -0.7583129405975342, -0.5945144891738892, -1.0253342390060425, 0.42649489641189575, -0.8225446939468384, -0.04797378182411194, -0.7268449664115906, 0.24587993323802948, -0.8029035925865173, 0.0598384365439415, -0.685704231262207, 0.23384113609790802, -0.7581852674484253, -0.7104252576828003, -0.6334607601165771, -0.08708751201629639, -0.638883113861084, -0.6799800992012024, 0.08077347278594971, 0.43152016401290894, -0.5869405269622803, -0.28378742933273315, -0.5119267702102661, 0.44015106558799744, -0.8890959024429321, -0.8228159546852112, 0.24728941917419434, 0.4445188343524933, 0.5092743039131165, 0.5089160203933716, 0.009787028655409813, 0.08222697675228119, 0.17141316831111908, -1.5617766380310059, -0.8879087567329407, -0.9387885332107544, -0.7866247892379761, -0.40774354338645935, -0.35046839714050293, -2.5858256816864014, -2.5634875297546387, -2.9169323444366455, -0.789149820804596, -0.7400845885276794, -0.7203811407089233, -0.4053010940551758, -0.3471130132675171, -0.26618143916130066, -0.7336236238479614, -0.23484459519386292, -0.16824816167354584, -2.5584895610809326, -0.9378114938735962, -0.173076793551445, -0.7307318449020386, -0.35818803310394287, -0.14998823404312134, -0.0995444506406784, -0.9278904795646667, -0.3869398236274719, -0.7789960503578186, -0.5578797459602356, -0.5961406230926514, -0.5441072583198547, -0.6550984978675842, -0.6509705781936646, -0.7267401218414307, 0.9178454279899597, -1.5306267738342285, -1.1753522157669067, -1.7548272609710693, -0.49652668833732605, 1.5947051048278809, 1.0934933423995972]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (1.54, 2.5)}}, 'et4_eta2': {'discriminator': {'threshold': 0.5199984192848206, 'nodes': [100, 5, 1], 'bias': [0.11384682357311249, 0.07971647381782532, 0.00465692114084959, 0.14804889261722565, 0.07417404651641846, -0.15167193114757538], 'weights': [0.6251861453056335, -0.25750094652175903, -1.4020317792892456, -1.9289140701293945, -1.4157609939575195, 0.7055711150169373, 2.6523208618164062, -2.1011979579925537, 0.24038240313529968, 3.469379425048828, 2.972240447998047, 2.8049957752227783, 0.20326152443885803, 0.15728873014450073, 0.06024700775742531, 0.3360233008861542, -3.758897066116333, 0.13258475065231323, -0.0711980015039444, -1.3375860452651978, -2.8546996116638184, -2.1204047203063965, -0.0684124231338501, -1.1662191152572632, -3.9746084213256836, -1.0908246040344238, -1.5160080194473267, -2.889890670776367, -14.977043151855469, -2.253124952316284, -0.5126926302909851, -2.403907060623169, -1.6736992597579956, -0.4774019420146942, -1.9160369634628296, -2.1402039527893066, -5.9225053787231445, -5.899019718170166, -2.9991397857666016, -1.7249592542648315, -2.759883403778076, -3.162008285522461, -2.819316864013672, -2.0431363582611084, -1.1833516359329224, -0.9951058626174927, -2.0029408931732178, -1.358102560043335, -1.2570563554763794, -2.632812023162842, -0.09633296728134155, -1.6623297929763794, -2.981348752975464, -1.144919514656067, -1.7122328281402588, -1.0567208528518677, -0.340715616941452, -0.0395011305809021, 4.134775161743164, -1.4652589559555054, -0.9998790621757507, -0.7249534130096436, -1.9020615816116333, -1.8155207633972168, -3.1696438789367676, -1.7908531427383423, -3.229954481124878, -1.1272858381271362, -1.7559943199157715, -1.478967308998108, -1.6906861066818237, -1.5628578662872314, -0.10204700380563736, 0.19444040954113007, -3.63988995552063, -2.79940128326416, -2.708991765975952, -2.542445421218872, -2.79022479057312, -0.935571014881134, -0.002755355555564165, -0.4136531949043274, -2.970228672027588, -2.9139859676361084, -0.38378262519836426, -0.0933181643486023, -2.0412769317626953, -2.5171377658843994, 0.28245818614959717, -1.205154299736023, -1.112125277519226, -1.1050453186035156, -6.2303595542907715, -4.387772560119629, -2.4998362064361572, -1.7652161121368408, -0.03794768080115318, 0.11009768396615982, -0.5096169710159302, -0.8096550107002258, 0.5915060639381409, -0.31160369515419006, -1.4410845041275024, -1.9716180562973022, -1.4967429637908936, 1.1953855752944946, 2.7177886962890625, -2.1049180030822754, 0.00336395762860775, 3.55454158782959, 2.871202230453491, 2.7526512145996094, 0.19635173678398132, 0.03252992033958435, -0.003478707978501916, 0.16407446563243866, -3.764557123184204, 0.021522747352719307, -0.11380399018526077, -1.2975307703018188, -2.8535287380218506, -2.1596531867980957, -0.16350385546684265, -1.370679497718811, -4.070925235748291, -1.0803465843200684, -1.4905263185501099, -1.8689175844192505, -14.856679916381836, -2.042728900909424, -0.44669172167778015, -2.5588366985321045, -1.7590190172195435, -0.44044268131256104, -1.8720570802688599, -2.316516876220703, -5.842219352722168, -6.031185150146484, -2.9375598430633545, -1.6400786638259888, -2.5652737617492676, -3.211477756500244, -3.0283939838409424, -2.0970494747161865, -1.1159669160842896, -1.026295781135559, -1.9871904850006104, -1.2863669395446777, -1.1576951742172241, -2.669677972793579, 0.02546912431716919, -1.5517867803573608, -3.047452449798584, -1.128219723701477, -1.5645371675491333, -0.9775280356407166, -0.3035266101360321, -0.10793682187795639, 4.014409065246582, -1.540910005569458, -1.099531650543213, -0.76930832862854, -1.8994382619857788, -1.7588801383972168, -3.1870510578155518, -1.7342389822006226, -3.5911006927490234, -1.306019902229309, -1.5899324417114258, -1.5370594263076782, -1.7945507764816284, -1.4437994956970215, 0.03200437128543854, 0.1231115534901619, -3.8163578510284424, -2.8395779132843018, -2.801499128341675, -2.7131733894348145, -2.74865460395813, -0.9187059998512268, 0.03126358240842819, -0.2602922320365906, -2.8528318405151367, -2.9360594749450684, -0.20371052622795105, -0.06983864307403564, -1.9941691160202026, -2.541489839553833, 0.5262741446495056, -1.2684019804000854, -1.2105265855789185, -1.2496538162231445, -6.347973346710205, -4.473539352416992, -2.59781551361084, -1.6586239337921143, -0.07711153477430344, -0.10755360871553421, -0.34014564752578735, -0.9243701100349426, -0.41914936900138855, 0.28987643122673035, 1.356941819190979, 1.801226019859314, 1.6319600343704224, -1.184754729270935, -2.6590523719787598, 1.9787702560424805, -0.147994726896286, -3.571326732635498, -2.9122657775878906, -2.95862078666687, -0.01838676631450653, -0.031033098697662354, 0.0009070431115105748, -0.23096223175525665, 3.6497247219085693, -0.09984730184078217, -0.06267618387937546, 1.335605263710022, 1.4932795763015747, 2.082561492919922, 0.029438436031341553, 1.165748953819275, 4.107476234436035, 1.1520142555236816, 1.4163860082626343, 1.9165958166122437, 14.928508758544922, 2.095465660095215, -1.8835598230361938, 2.5578415393829346, 1.8803852796554565, 0.55727618932724, 1.9458516836166382, 2.327918767929077, 5.9761271476745605, 2.116595983505249, 3.0638883113861084, 1.6357983350753784, 2.6810195446014404, 3.0515615940093994, 2.8117008209228516, 2.1455790996551514, 0.9639905691146851, 0.8134739995002747, 1.9752752780914307, 1.2647392749786377, 1.1117299795150757, 2.611677885055542, -0.0025792717933654785, 1.671108603477478, 2.890641689300537, 1.0106009244918823, 1.3091106414794922, 1.1024497747421265, 0.2640187442302704, 0.18692582845687866, -4.086989402770996, 1.3441048860549927, 0.9860759973526001, 0.8977031707763672, 1.9307650327682495, 1.7732338905334473, 3.187098264694214, 1.8458033800125122, 3.4542462825775146, 1.1947933435440063, 1.6121084690093994, 1.6891437768936157, 1.6726008653640747, 1.5584595203399658, -0.9686614871025085, -0.21657349169254303, 3.7343661785125732, 2.67976975440979, 2.740396738052368, 2.612823486328125, 2.8123998641967773, 1.0568197965621948, -0.03107505291700363, 0.2964842915534973, 2.865086317062378, 2.8443613052368164, 0.1727270781993866, -0.0035155415534973145, 2.020949363708496, 2.316814422607422, -0.5141962766647339, 1.2290443181991577, 1.1659139394760132, 1.1418333053588867, 14.972591400146484, 4.466696262359619, 2.497905731201172, 1.7477083206176758, -0.06334817409515381, 0.033399637788534164, 0.32444649934768677, 0.7828245162963867, 0.5186731219291687, -0.4153514802455902, -1.2743417024612427, -1.7805110216140747, -1.4916870594024658, 0.6390983462333679, 2.610316753387451, -2.179161787033081, 0.12987308204174042, 3.4104957580566406, 2.7692294120788574, 2.7714321613311768, 0.11519055813550949, 0.0358150452375412, 0.016958579421043396, 0.25681251287460327, -3.5997579097747803, 0.05228642374277115, -0.010508648119866848, -1.3458880186080933, -2.8736653327941895, -2.1644716262817383, -0.19539210200309753, -1.2642103433609009, -4.032081127166748, -0.9764151573181152, -1.407490611076355, -2.8966383934020996, -14.771591186523438, -2.234963893890381, -0.30873292684555054, -2.551069498062134, -1.798890471458435, -0.39185231924057007, -1.9292949438095093, -2.3558194637298584, -5.888930320739746, -5.939783573150635, -3.046618938446045, -2.318540573120117, -2.613430976867676, -3.166398525238037, -2.9298148155212402, -2.2308549880981445, -1.0631154775619507, -0.9027920961380005, -2.023770570755005, -1.3248271942138672, -1.259539246559143, -2.607450246810913, -0.056861281394958496, -1.6692801713943481, -2.98555588722229, -0.986327052116394, -1.571074366569519, -1.1328989267349243, -0.3138138949871063, -0.035925328731536865, 4.066348075866699, -1.4790066480636597, -0.9636436700820923, -0.8355212211608887, -1.8168715238571167, -1.9189748764038086, -3.209160804748535, -1.7044228315353394, -3.3029239177703857, -1.1187292337417603, -1.7248260974884033, -1.584917664527893, -1.7880603075027466, -1.3707389831542969, 0.033712632954120636, 0.23266825079917908, -3.8815901279449463, -2.7895054817199707, -2.8245503902435303, -2.5588746070861816, -2.7325551509857178, -1.0391143560409546, -0.008321125991642475, -0.3310103416442871, -2.8346221446990967, -2.9092605113983154, -0.38864755630493164, -0.06265318393707275, -1.8666296005249023, -2.33286190032959, 0.30220067501068115, -1.3450342416763306, -1.07483971118927, -1.2951676845550537, -6.234707355499268, -4.511396884918213, -2.5473127365112305, -1.8235788345336914, -0.0896400660276413, 0.004149979911744595, -0.31332308053970337, -0.8156808018684387, 0.2771662175655365, -0.28466126322746277, -0.20923909544944763, -0.3346168100833893, -0.3393081724643707, 0.1554879993200302, 0.6477275490760803, -0.5276710987091064, 0.14617805182933807, 0.6768221855163574, 0.5229899287223816, 0.5495777130126953, -0.16318246722221375, 0.03908932954072952, -0.044825054705142975, 0.08439066261053085, -0.7099238634109497, 0.17296727001667023, 0.14014579355716705, -0.3523086905479431, -0.504760205745697, -0.3444230556488037, 0.09295668452978134, -0.34142163395881653, -0.9474895596504211, -0.10424963384866714, -0.3451277017593384, -0.566091001033783, -2.973419666290283, -0.3708055317401886, -0.06908171623945236, -0.6337583661079407, -0.4447052776813507, -0.13014893233776093, -0.3230210244655609, -0.44186750054359436, -1.2416123151779175, -1.1950196027755737, -0.5668541193008423, -0.3936935067176819, -0.4376339912414551, -0.5428186058998108, -0.5488232970237732, -0.32608091831207275, -0.14937427639961243, -0.28508633375167847, -0.41678473353385925, -0.26756778359413147, -0.35104164481163025, -0.5719276666641235, 0.01534741185605526, -0.25155511498451233, -0.6990581154823303, -0.1951550394296646, -0.4632768929004669, -0.2816784083843231, -0.056665461510419846, -0.0514071062207222, 0.9201054573059082, -0.31505677103996277, -0.3039117157459259, -0.19591976702213287, -0.3981074392795563, -0.4253137707710266, -0.5865145325660706, -0.45107176899909973, -0.6190328598022461, -0.3312896192073822, -0.27753961086273193, -0.305428683757782, -0.33897289633750916, -0.2503662109375, 0.17906412482261658, 0.13978268206119537, -0.7322458624839783, -0.6223763823509216, -0.5979492664337158, -0.6093989014625549, -0.5092815160751343, -0.22469232976436615, -0.006311587058007717, -0.018393786624073982, -0.6541185975074768, -0.5530127882957458, 0.06178972125053406, -0.07105831801891327, -0.29003018140792847, -0.5140512585639954, 0.2868286371231079, -0.20026011765003204, -0.13964718580245972, -0.17647787928581238, -1.3856056928634644, -0.9703487753868103, -0.615807831287384, -0.2486661672592163, -0.008055219426751137, 0.11634911596775055, -0.18856817483901978, -0.22616185247898102, 1.2099193334579468, 1.2411690950393677, -3.630277156829834, 1.3775845766067505, 0.7710458636283875]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (1.37, 1.54)}}, 'et2_eta1': {'discriminator': {'threshold': 0.3399985909461975, 'nodes': [100, 5, 1], 'bias': [0.01651812717318535, -0.13926127552986145, -0.040732357650995255, -0.009756160899996758, -0.29181867837905884, -0.4230961203575134], 'weights': [1.875033974647522, 2.0099172592163086, -0.5074464082717896, -2.495497465133667, -1.0318567752838135, -0.7896673679351807, -0.2378595620393753, 0.5792592167854309, 2.938339948654175, 8.890474319458008, -0.532684326171875, -18.24800682067871, -18.9058780670166, -14.747689247131348, -7.902640342712402, -7.967686653137207, -6.793240547180176, -7.97316312789917, -9.228382110595703, -9.145288467407227, -9.112112045288086, -10.092705726623535, -7.893771171569824, -4.651278495788574, -6.06505012512207, -6.173068523406982, -6.152647972106934, -5.818607330322266, -5.289919853210449, -5.819891452789307, -4.619137763977051, -4.689252853393555, -4.811014652252197, -4.7560272216796875, -2.8098294734954834, -4.896507740020752, -4.993577480316162, -3.830761671066284, -4.694208145141602, -3.8559305667877197, -3.3577558994293213, -2.611325979232788, -4.220177173614502, -2.7146458625793457, -1.4415576457977295, -0.45799875259399414, -0.7690829038619995, -2.3446853160858154, -0.7103240489959717, -1.2909417152404785, -1.6097453832626343, -1.7639966011047363, -1.841646432876587, -1.6420782804489136, -1.927522897720337, -2.005403518676758, -2.0604324340820312, 3.914365530014038, -0.19394399225711823, 0.1269225925207138, -0.20041842758655548, 0.08027685433626175, -1.241581916809082, 0.06853470206260681, -0.09779223799705505, -2.2489190101623535, -1.3971054553985596, -5.576432228088379, 0.5969211459159851, -0.3907736539840698, -1.1042678356170654, 0.18262019753456116, 0.5975922346115112, 0.6410396099090576, -1.4719958305358887, -2.119999885559082, -2.290353775024414, -3.3577818870544434, -0.9585183262825012, 0.26148417592048645, -6.424568176269531, -11.081985473632812, -7.275393009185791, -3.5975587368011475, -3.9083404541015625, -3.923099994659424, -3.650902032852173, -4.444343566894531, -3.868506908416748, -1.9987303018569946, -0.4727465510368347, 0.3047374188899994, -5.564382076263428, -5.015488624572754, -2.1893959045410156, 0.19184020161628723, -4.05333137512207, -3.4744656085968018, -2.894695281982422, -0.7358078360557556, -2.138406276702881, -2.1084015369415283, 2.217794895172119, 2.211237907409668, 2.003390073776245, 0.6395075917243958, 3.2420156002044678, -0.5694631934165955, -6.568490505218506, -1.949573040008545, 0.0870925784111023, 0.10387485474348068, 2.600078821182251, -0.5635790824890137, 7.718987464904785, 7.940392017364502, 6.6331071853637695, 7.73748779296875, 9.142827033996582, 9.24535083770752, 9.17730712890625, 17.04285430908203, 8.021662712097168, 6.606634616851807, 6.263670444488525, 6.101632118225098, 6.188879013061523, 5.973971843719482, 5.535314559936523, 5.92577600479126, 4.529201507568359, 4.721100330352783, 4.92861270904541, 4.721924781799316, 2.6550912857055664, 4.823751449584961, 4.089519500732422, 3.688180446624756, 4.67854118347168, 3.862563133239746, 3.344815492630005, 2.5502986907958984, 4.892500400543213, 2.546252965927124, 1.0911672115325928, 0.5148735642433167, 0.661919891834259, 2.4120805263519287, 0.6641308069229126, 1.1648428440093994, 1.5213446617126465, 1.7666157484054565, 1.9570605754852295, 1.680923342704773, 1.7595739364624023, 1.936344861984253, 2.027358055114746, -1.1101638078689575, 0.050265029072761536, -2.9353713989257812, 0.17144542932510376, -0.07678882777690887, 1.1279786825180054, 0.026984181255102158, 0.2516421675682068, 2.2205400466918945, 1.4446486234664917, 5.618035793304443, -0.36655744910240173, 0.3977486491203308, 1.1562607288360596, -0.20263980329036713, -0.6418544054031372, -0.6007882356643677, 1.5365338325500488, 2.2242352962493896, 2.3907716274261475, 3.0281808376312256, 0.8847504258155823, -0.07347764819860458, 6.601446151733398, 11.989531517028809, 7.993586540222168, 4.378693103790283, 4.753905773162842, 4.062860488891602, 3.789716958999634, 4.379395484924316, 3.883258819580078, 1.9905461072921753, 0.6629481315612793, -0.17608526349067688, 5.91093111038208, 4.856051445007324, 2.4011356830596924, 0.621196448802948, 5.4287824630737305, 3.6132724285125732, 2.8917300701141357, 0.7561365962028503, -7.66136360168457, -1.9566045999526978, 0.3413742184638977, -0.3169025480747223, 0.5612906217575073, 0.4738326668739319, 0.1280367225408554, -0.12908461689949036, -1.1089599132537842, -1.9495981931686401, 2.013185501098633, 0.695721447467804, 0.6664884090423584, -0.14383120834827423, -9.105535507202148, 8.88395881652832, 8.194418907165527, 8.118362426757812, 8.983386039733887, 15.847192764282227, 9.080297470092773, 8.025168418884277, 7.77787446975708, 4.049498081207275, 1.3205116987228394, 1.168777346611023, 1.2252341508865356, 1.249016523361206, 1.1255091428756714, 1.1996506452560425, 0.873487114906311, 0.9698370695114136, 0.9200482964515686, 1.0909960269927979, 0.5028417706489563, 1.0498082637786865, 0.8409689664840698, 0.7649657726287842, 0.9360293745994568, 0.6182217001914978, 0.4167337119579315, 0.5612971186637878, 0.6037231087684631, 0.43913084268569946, 0.2243342399597168, -0.01672550104558468, 0.2234622836112976, 0.46163004636764526, 0.03487828001379967, 0.466035932302475, 0.2541402280330658, 0.27434128522872925, 0.4476529657840729, 0.33774513006210327, 0.2865992784500122, 0.41252678632736206, 0.0024880252312868834, -0.1497209519147873, -0.05175769329071045, 0.02815801091492176, -0.02226218208670616, -0.0940958634018898, 0.17749682068824768, -0.02062593586742878, -0.0573367178440094, 0.38121798634529114, 0.2868680953979492, 1.1785837411880493, -0.014893853105604649, 0.13186797499656677, 0.13619869947433472, 0.03653286397457123, -0.21514317393302917, -0.08329702168703079, 1.2553131580352783, 2.1381380558013916, 2.320967435836792, -0.41384172439575195, 0.11922239512205124, 0.45126280188560486, 6.225594997406006, 2.408634662628174, 1.5509283542633057, 0.9759238362312317, 1.0082924365997314, 0.9345251321792603, 0.5880155563354492, 0.7158787846565247, 0.7399909496307373, 0.40702295303344727, -1.1001580953598022, 0.35878878831863403, 1.2574044466018677, 0.4741046726703644, 0.2246377170085907, 0.732416570186615, 1.0169740915298462, 0.19388526678085327, 0.4463232159614563, 1.0903161764144897, 1.9588959217071533, 2.0055527687072754, -0.5232058167457581, -1.4236847162246704, -1.114205002784729, -0.668312668800354, -0.34685468673706055, 0.9589683413505554, 3.631110429763794, 8.939948081970215, -0.6087762117385864, -18.4229793548584, -19.081100463867188, -14.776923179626465, -7.913535118103027, -8.15082836151123, -6.779226779937744, -7.945987224578857, -9.141851425170898, -9.244330406188965, -9.020554542541504, -10.115320205688477, -8.003589630126953, -4.196896553039551, -6.096635341644287, -6.21701717376709, -6.039369583129883, -5.785327434539795, -5.356564044952393, -5.819376468658447, -4.627766132354736, -4.676516056060791, -4.818751811981201, -4.782943248748779, -2.7727344036102295, -4.7456440925598145, -4.903599739074707, -3.6520440578460693, -4.829325199127197, -3.8416976928710938, -3.3797433376312256, -2.57191801071167, -4.130296230316162, -2.635913610458374, -1.4358590841293335, -0.3851478695869446, -0.6225800514221191, -2.3373053073883057, -0.6042454242706299, -1.3116786479949951, -1.6941758394241333, -1.8377108573913574, -1.8894476890563965, -1.8108415603637695, -1.9193819761276245, -2.0803050994873047, -0.1968514323234558, 1.080369234085083, -0.25416451692581177, 0.09270862489938736, 0.37445470690727234, 0.022953210398554802, -1.2585912942886353, 0.388694167137146, -0.09433546662330627, -2.2391977310180664, -1.6332571506500244, -5.5706467628479, 0.5404409766197205, -0.5114344358444214, -1.079782485961914, 0.10880546271800995, 0.7669867873191833, 0.5048133134841919, -1.471364140510559, -2.1953790187835693, -2.358229637145996, -3.336958885192871, -1.0056511163711548, -1.7114458084106445, -6.5532612800598145, -8.860387802124023, -7.310863018035889, -3.5234227180480957, -3.9534409046173096, -3.954491138458252, -3.653003454208374, -4.453188896179199, -3.7787857055664062, -2.045616388320923, -0.5202841758728027, 0.2658776342868805, -5.66404914855957, -4.829433441162109, -2.0338897705078125, -0.6546768546104431, -4.102285385131836, -3.3845913410186768, -2.822138547897339, -0.8365621566772461, -17.016807556152344, -24.641345977783203, -5.130126476287842, -2.6904189586639404, 0.39799928665161133, 0.47398641705513, -1.0647181272506714, -0.24866724014282227, -0.34161901473999023, -0.7105128169059753, 39.95035934448242, 2.831878900527954, 7.3188252449035645, 6.504739284515381, 0.9948558807373047, 0.9732303619384766, 0.7425878047943115, 0.710248589515686, 4.312987804412842, 3.9676079750061035, 4.369531154632568, 3.851053476333618, 3.876281261444092, 1.9084614515304565, 0.41528618335723877, 0.5398150682449341, 0.47171592712402344, 0.3831786811351776, 0.45285871624946594, 0.29007259011268616, 0.2538950443267822, -8.46192455291748, 0.3442690670490265, 0.2527095675468445, -1.525955080986023, 0.3919203281402588, 0.43289631605148315, -29.407472610473633, -34.61700439453125, 0.28793323040008545, 0.2892102003097534, 0.027027809992432594, -0.018104124814271927, 0.20092955231666565, 0.013346636667847633, -5.996646404266357, 0.04622534662485123, 0.061857908964157104, -0.10581143200397491, 0.023072782903909683, 0.1636875867843628, -0.05943959206342697, 0.1661878079175949, 0.019204935058951378, 0.1275356560945511, -5.327498435974121, -8.087818145751953, -0.23204822838306427, -0.09201974421739578, -0.28036248683929443, -0.15590937435626984, -0.02909776009619236, 0.21613207459449768, -16.89828872680664, -0.2723367512226105, 0.016883550211787224, 0.03379444405436516, 0.4741160273551941, -1.589136004447937, -0.06749897450208664, 0.007448224350810051, -0.17390163242816925, -0.4933198392391205, 0.307824045419693, 0.15898436307907104, 1.2082656621932983, 1.1240794658660889, 0.08820491284132004, 0.09730509668588638, -1.6231003999710083, 5.8778181076049805, 1.2579982280731201, 0.5310705900192261, 0.34640851616859436, 0.22184106707572937, 0.15819622576236725, 0.3268556594848633, 0.24989232420921326, 0.20530015230178833, 0.041499461978673935, -0.359250009059906, 0.03036625310778618, 0.38248410820961, 0.2977536618709564, 0.07914634048938751, 0.048560768365859985, 0.42851319909095764, 0.3707250952720642, 0.08794607222080231, 0.2513819634914398, 1.2807483673095703, -1.2921901941299438, -0.5568666458129883, 1.1083723306655884, -0.4744262099266052]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0.8, 1.37)}}, 'et2_eta2': {'discriminator': {'threshold': 0.49499844312667846, 'nodes': [100, 14, 1], 'bias': [0.1707249879837036, 0.10174738615751266, -0.20840246975421906, -0.13732850551605225, -0.09614444524049759, -0.019201381132006645, -0.05365116894245148, 0.09345933794975281, 0.08465275913476944, -0.06451258808374405, -0.02800479345023632, 0.019362030550837517, 0.11334354430437088, -0.00887064728885889, -0.13140974938869476], 'weights': [-0.06606043875217438, -0.8367270827293396, 0.115146704018116, 0.060741081833839417, -0.12235406041145325, -0.12245986610651016, -0.5687753558158875, 0.07358133047819138, 0.049203649163246155, -0.2521652281284332, -0.33001652359962463, -0.15812957286834717, -0.03010108321905136, 0.15555064380168915, -0.03557691350579262, -0.07275908440351486, 0.20077049732208252, 0.0018325630808249116, -0.07096224278211594, 0.9507601857185364, 0.09167873114347458, 0.22424428164958954, 0.04948459565639496, 0.6701226830482483, 0.11170085519552231, 0.2555394768714905, 0.2628246247768402, 0.2324056476354599, 0.8863117098808289, 0.1258459985256195, 0.10018187016248703, 0.044367656111717224, -0.4146184027194977, 0.2901155948638916, 0.09137792140245438, 0.04646814242005348, 0.6117924451828003, 0.17880254983901978, -0.5643086433410645, 0.20871685445308685, 0.18893471360206604, -0.21214157342910767, -0.37722790241241455, 0.39325931668281555, -0.15624672174453735, 0.24026773869991302, 0.22241196036338806, 0.17107123136520386, 0.14922232925891876, 0.2174467295408249, 0.10440286248922348, 0.19777287542819977, 0.1190444678068161, 0.12006296217441559, 0.20567160844802856, 0.2485208511352539, -0.04509178549051285, -0.6319347023963928, 0.07937153428792953, 0.0029797209426760674, 0.008058306761085987, 0.20494073629379272, -0.5568835735321045, -0.042290471494197845, -0.19626261293888092, -0.3394336402416229, -0.4649706184864044, -0.0005577346892096102, 0.08033037930727005, 0.20553575456142426, -0.657164454460144, 0.2305898517370224, -1.3261137008666992, -0.0024184423964470625, 4.489981651306152, 0.007991298101842403, 0.30681970715522766, 0.09137896448373795, 0.23328344523906708, 0.0060869562439620495, 0.13291841745376587, 2.194983720779419, 0.47018519043922424, 0.19108444452285767, 0.24352893233299255, 0.25093379616737366, 0.120008684694767, 0.08596907556056976, -0.15536849200725555, 0.15211153030395508, -0.012470908463001251, -0.05239341780543327, 0.46831536293029785, 0.23476940393447876, 0.08228341490030289, 0.08897280693054199, -0.06520887464284897, -0.013113612309098244, 0.16094890236854553, 0.05680893734097481, -0.15846510231494904, 0.023007133975625038, 0.4805394411087036, 0.7386955618858337, -0.05893643945455551, -0.07832388579845428, -0.489437997341156, 0.47066015005111694, 0.1497558206319809, -1.8187565803527832, -1.6817665100097656, -1.1312881708145142, -0.32791370153427124, 0.2686810791492462, -0.008977537043392658, -0.36380159854888916, 1.0248287916183472, -0.3592522144317627, 0.7478768825531006, 0.20873740315437317, 0.9317304491996765, 1.0154422521591187, 0.5308752059936523, 0.11958597600460052, 0.4139981269836426, 0.6401083469390869, 0.23358310759067535, 1.049261450767517, 4.3114800453186035, -0.11783634126186371, 0.8505382537841797, 0.5602614283561707, 0.35944584012031555, 0.9598845839500427, 0.7539865374565125, 0.617914617061615, 2.306867837905884, 0.6926198601722717, -2.9448094367980957, 0.6613332033157349, 0.6128464341163635, -0.8588602542877197, -1.8161532878875732, 2.143770933151245, -0.34903040528297424, 0.5341959595680237, 0.5151445865631104, 0.5737042427062988, 0.44619157910346985, 0.5914949178695679, 0.6390184760093689, 0.6983092427253723, 0.5768938660621643, 0.5351735949516296, 0.4607420563697815, 0.606026828289032, -0.2518922686576843, -3.109715223312378, 0.24683162569999695, 0.40903013944625854, 0.6581448316574097, 0.736084520816803, -2.4797914028167725, 0.28890854120254517, -1.101582646369934, -1.7910212278366089, -1.8346189260482788, -0.02027696929872036, 0.6025895476341248, 0.7256069779396057, -0.003613272914662957, 0.5578451156616211, -0.09166557341814041, -0.2378983199596405, 1.2032734155654907, 0.40869900584220886, 1.38259756565094, 0.8871416449546814, 0.7678374648094177, 0.4686409533023834, -0.033244144171476364, 0.3854514956474304, 1.9655872583389282, 0.9753177762031555, 0.9666259288787842, 0.865003764629364, 0.8214084506034851, 0.631327211856842, -0.42855533957481384, 0.11512231081724167, 0.07901459187269211, -0.09313514083623886, 2.1921839714050293, 0.8013532757759094, 0.5820163488388062, 0.7382540702819824, 0.03615826368331909, 0.09214795380830765, 0.34498289227485657, -0.04927142336964607, 0.19020627439022064, 0.008593279868364334, -0.7456904649734497, -0.7370827198028564, 0.048972953110933304, 0.009786338545382023, 0.4844837188720703, -0.30438879132270813, 0.10197588056325912, 1.8126013278961182, 1.8784635066986084, 1.1388660669326782, 0.23827698826789856, -0.34036093950271606, 0.20426660776138306, 0.18955275416374207, -1.008536696434021, 0.19251389801502228, -1.9256455898284912, -0.22562791407108307, -0.81178879737854, -0.8803373575210571, -0.7104411721229553, -0.25053662061691284, -0.589969277381897, -0.6647329330444336, -0.14198221266269684, -1.145090937614441, -4.348331928253174, -0.4134097993373871, -0.7745955586433411, -0.5676944851875305, -0.3689371645450592, -0.7786082625389099, -0.7569590210914612, -0.6402170062065125, -2.444904088973999, -0.44976791739463806, 2.8380000591278076, -0.8476167917251587, -0.6269283890724182, 0.6979691982269287, 1.88822603225708, -1.996711015701294, 0.3672381341457367, -0.5176037549972534, -0.5451810359954834, -0.5420520901679993, -0.5934973955154419, -0.5964339375495911, -0.621378481388092, -0.4748944640159607, -0.6849404573440552, -0.44632139801979065, -0.6190561056137085, -0.6392660140991211, 0.3132791817188263, 3.045849561691284, -0.37874794006347656, -0.38165152072906494, -0.5151529908180237, -0.7892104983329773, 2.50258469581604, -0.4062046408653259, 1.22688889503479, 1.8079942464828491, 1.9457989931106567, 0.010394269600510597, -0.5935432314872742, -0.7183888554573059, 0.058225493878126144, -0.5600332021713257, 0.18877120316028595, 0.11380460113286972, -1.3091801404953003, -0.8055684566497803, -1.4872583150863647, -0.7723063826560974, -0.8688029050827026, -0.46983107924461365, -0.10763821005821228, -0.47162461280822754, -1.9941385984420776, -0.9734681844711304, -0.9610986709594727, -0.8010903000831604, -0.6020194292068481, -0.5672622323036194, 0.4257555305957794, -0.27838170528411865, 0.01527438871562481, -0.01565510593354702, -2.1571640968322754, -0.9350494742393494, -0.5590060949325562, -0.829379677772522, 0.0978970006108284, 0.044757384806871414, -0.44883647561073303, 0.19522066414356232, 0.32063028216362, 0.06757009029388428, -0.5263333916664124, -0.5997104644775391, 0.23974613845348358, 0.12665528059005737, 0.3190617263317108, -0.2815082371234894, -0.09226834028959274, 1.7589316368103027, 1.7040865421295166, 1.109808325767517, 0.31404614448547363, -0.2686191499233246, 0.1794172078371048, 0.40101712942123413, -0.9511715769767761, 0.33520907163619995, -0.7663508057594299, -0.0857110470533371, -0.9366382956504822, -0.8773107528686523, -0.6620772480964661, -0.16531887650489807, -0.5222448110580444, -0.6641812920570374, -0.24093161523342133, -1.1190019845962524, -4.3045501708984375, -0.10023340582847595, -0.8655656576156616, -0.6361765265464783, -0.47832223773002625, -0.7756959795951843, -0.6823001503944397, -0.5645976662635803, -2.3193576335906982, -0.5462998747825623, 2.9422686100006104, -0.8613454103469849, -0.5349677205085754, 0.8700229525566101, 1.8396708965301514, -2.071143388748169, 0.36887139081954956, -0.5852486491203308, -0.6503114104270935, -0.7252158522605896, -0.5126715898513794, -0.5001258850097656, -0.6588872075080872, -0.5246867537498474, -0.5924035310745239, -0.44123491644859314, -0.5778620839118958, -0.721166729927063, 0.31314197182655334, 3.2302563190460205, -0.440328449010849, -0.3322342038154602, -0.5106637477874756, -0.6995989084243774, 2.489288568496704, -0.2689201235771179, 1.077247142791748, 1.8635884523391724, 1.9165407419204712, -0.007932139560580254, -0.6287121176719666, -0.6376098394393921, 0.02040170505642891, -0.4974731504917145, 0.19944177567958832, 0.2695881426334381, -1.315283179283142, -0.5260916352272034, -1.3933442831039429, -0.8893085718154907, -0.7917318344116211, -0.30085721611976624, -0.12256361544132233, -0.43783098459243774, -1.8691908121109009, -0.9016252756118774, -0.9164499044418335, -0.87711101770401, -0.6178460717201233, -0.7649113535881042, 0.5283727645874023, -0.35002005100250244, -0.12718641757965088, 0.09723836183547974, -2.145632743835449, -0.8486443758010864, -0.551122784614563, -0.7246545553207397, -0.002265618648380041, 0.029283616691827774, -0.3682063817977905, 0.0656578466296196, 0.36016353964805603, -0.0007007680833339691, -0.6836897134780884, -0.6444767117500305, 0.16020667552947998, -0.015924349427223206, 0.36518192291259766, -0.4724082350730896, 0.07465436309576035, 1.7346022129058838, 1.7319612503051758, 1.0755726099014282, 0.3566262722015381, -0.40479740500450134, 0.1838752180337906, 0.1851578652858734, -0.8637793660163879, 0.38351744413375854, -0.6452786922454834, -0.07175610214471817, -1.0273109674453735, -0.8811048865318298, -0.6363034844398499, -0.1745043396949768, -0.515251874923706, -0.772562563419342, -0.34472760558128357, -1.1246644258499146, -4.334987163543701, -0.09588155895471573, -0.805990993976593, -0.6273394823074341, -0.3068254292011261, -0.874455451965332, -0.7172515392303467, -0.7080560922622681, -2.3252809047698975, -0.5361090302467346, 2.8433258533477783, -0.6993681788444519, -0.5500839352607727, 0.7979773283004761, 1.731996774673462, -1.9894617795944214, 0.3960632085800171, -0.6874868869781494, -0.5490732192993164, -0.6096540689468384, -0.5656237602233887, -0.5132312178611755, -0.5283927917480469, -0.6692894101142883, -0.6083277463912964, -0.5203819870948792, -0.560654878616333, -0.7291178703308105, 0.1246354728937149, 3.2071101665496826, -0.454919695854187, -0.3157617747783661, -0.5304358005523682, -0.6555932760238647, 2.515575885772705, -0.35261106491088867, 1.0234708786010742, 1.853946566581726, 1.9248071908950806, 0.1677820235490799, -0.6271855235099792, -0.7273083329200745, 0.12267974019050598, -0.5100845098495483, 0.0386752225458622, 0.26321420073509216, -1.245235800743103, -0.42425069212913513, -1.5009785890579224, -0.9534385204315186, -0.8097448348999023, -0.48836183547973633, -0.061183150857686996, -0.560765266418457, -1.9399421215057373, -0.9947825074195862, -0.8831158876419067, -0.8652569651603699, -0.719931960105896, -0.6846681237220764, 0.5161029696464539, -0.23132792115211487, -0.02949303202331066, 0.0643598660826683, -2.2183046340942383, -0.9600793719291687, -0.6648999452590942, -0.8520799875259399, 0.1120728924870491, -0.07524948567152023, -0.32089558243751526, 0.18250079452991486, -0.29079487919807434, -0.07297219336032867, 0.5702992677688599, 0.6717420816421509, -0.17416059970855713, -0.07274244725704193, -0.42527180910110474, 0.3661322295665741, 0.08494842797517776, -1.7563726902008057, -1.8056137561798096, -0.932685911655426, -0.34595435857772827, 0.3874710202217102, -0.15931148827075958, -0.3592854142189026, 0.9126657843589783, -0.2059498280286789, 0.6499573588371277, 0.25811678171157837, 0.8527059555053711, 1.006898045539856, 0.7086886763572693, 0.12712575495243073, 0.4048194885253906, 0.5554826259613037, 1.0318541526794434, 0.9682132601737976, 4.507060527801514, 0.0813729539513588, 0.8449249267578125, 0.6335337162017822, 0.4526536762714386, 0.7994703650474548, 0.7515231966972351, 0.6182287335395813, 2.3965904712677, 0.5085525512695312, -2.8044607639312744, 0.6953141093254089, 0.7357233762741089, -0.8332928419113159, -1.8281304836273193, 1.9508066177368164, -0.39061909914016724, 0.6164454221725464, 0.5712622404098511, 0.5961549282073975, 0.43718281388282776, 0.5406273603439331, 0.4760308563709259, 0.601210355758667, 0.52655029296875, 0.5405638813972473, 0.6801670789718628, 0.5374364852905273, -0.08619681000709534, -3.260143756866455, 0.3417535722255707, 0.5257258415222168, 0.6978602409362793, 0.5808326005935669, -2.5340828895568848, 0.4318539798259735, -1.172688364982605, -1.8387123346328735, -1.9359201192855835, -0.010723121464252472, 0.6153915524482727, 0.7555891871452332, -0.20464158058166504, 0.44896411895751953, -0.045181505382061005, -0.2063431590795517, 1.1459882259368896, 0.5995404124259949, 1.48733651638031, 0.8769084811210632, 0.7463125586509705, 0.3198077976703644, 0.24702170491218567, 0.4455000162124634, 1.9642187356948853, 2.784557342529297, 0.7878943681716919, 0.7740758657455444, 0.6323056817054749, 0.6273369789123535, -0.4253511130809784, 0.26550713181495667, -0.052820831537246704, -0.0411500558257103, 2.4064958095550537, 0.8597870469093323, 0.5323863625526428, 0.6622788906097412, 0.037835054099559784, -0.06784868985414505, 0.5231173038482666, -0.27935290336608887, 0.1702578216791153, -0.0879364088177681, -0.4510855972766876, -0.7305835485458374, 0.14052385091781616, 0.13172666728496552, 0.35174769163131714, -0.47032755613327026, -0.09911150485277176, 1.7761969566345215, 1.898987054824829, 1.0423544645309448, 0.15041637420654297, -0.18931657075881958, 0.17707087099552155, 0.3138219118118286, -1.047913908958435, 0.15693987905979156, -0.845788300037384, -0.11595940589904785, -0.9816012382507324, -0.9386141896247864, -0.6105013489723206, -0.11443363130092621, -0.4670078754425049, -0.6465014219284058, -1.1085788011550903, -0.9356372952461243, -4.396286487579346, -0.01927894353866577, -0.6921009421348572, -0.6369092464447021, -0.31054243445396423, -0.7693153023719788, -0.5718578100204468, -0.7383718490600586, -2.3138387203216553, -0.6455010771751404, 2.822006940841675, -0.868607759475708, -0.610965371131897, 0.7023298740386963, 1.770892858505249, -2.0151991844177246, 0.27454274892807007, -0.6623110771179199, -0.6875004768371582, -0.6642158627510071, -0.5256713628768921, -0.6108142137527466, -0.6438130736351013, -0.5768171548843384, -0.522066056728363, -0.36864665150642395, -0.6493601202964783, -0.6015281081199646, 0.16107843816280365, 3.2206101417541504, -0.3796566128730774, -0.33368271589279175, -0.6816871166229248, -0.7077940106391907, 2.480868101119995, -0.26622551679611206, 1.069494366645813, 1.7232807874679565, 1.7395228147506714, -0.01610647700726986, -0.6258893609046936, -0.6925578117370605, 0.010905720293521881, -0.5765857696533203, 0.2191324383020401, 0.19725224375724792, -1.0961204767227173, -0.6066678166389465, -1.3004108667373657, -0.9496663808822632, -0.8151091933250427, -0.46325525641441345, -0.1480841040611267, -0.4401959776878357, -1.8412818908691406, -1.0023319721221924, -0.8521648645401001, -0.8622179627418518, -0.5929754376411438, -0.6103581786155701, 0.5395578145980835, -0.2704674303531647, 0.019960513338446617, -0.07035263627767563, -2.0682854652404785, -0.9522494673728943, -0.7201429605484009, -0.649121880531311, -0.0038468684069812298, -0.07442273944616318, -0.5431778430938721, 0.06096126139163971, -0.29913827776908875, -0.22480252385139465, 0.09798271954059601, 0.19686107337474823, -0.10142997652292252, -0.01850486360490322, -0.056461725383996964, 0.04583180323243141, -0.014286689460277557, -0.2753530740737915, -0.25825822353363037, -0.182356059551239, -0.1693047285079956, 0.35080114006996155, -0.12958882749080658, -0.11810768395662308, 0.13752485811710358, -0.08831862360239029, 0.9072059392929077, 0.05624870955944061, 0.195160910487175, 0.30208247900009155, 0.09255675971508026, 0.044305942952632904, 0.22604481875896454, 0.09186547249555588, -0.03759370371699333, 0.12795966863632202, 0.865724503993988, -0.0796608254313469, 0.25136440992355347, 0.11571536958217621, 0.07202447950839996, 0.11920921504497528, 0.0466068759560585, 0.19320273399353027, 0.5513982772827148, 0.18247893452644348, -0.6959736347198486, 0.19032639265060425, 0.1625700145959854, -0.2796567380428314, -0.4264359176158905, 0.3779034912586212, -0.10993436723947525, 0.08465975522994995, 0.0441151037812233, 0.16275198757648468, 0.02497279644012451, 0.2354019433259964, 0.05402551591396332, 0.18359331786632538, 0.22359558939933777, 0.11925652623176575, 0.07583490759134293, 0.2166750133037567, 0.07254905253648758, -0.6614377498626709, -0.047521889209747314, 0.03054985962808132, 0.16570903360843658, 0.23583261668682098, -0.46240824460983276, -0.013800681568682194, -0.32688790559768677, -0.2729969024658203, -0.28373590111732483, 0.07514017820358276, 0.15985046327114105, 0.2615641951560974, -0.02122042514383793, 0.03300300985574722, -0.030884999781847, -0.009869243018329144, 1.0417768955230713, 0.0588308647274971, 0.19089223444461823, 0.23361755907535553, 0.28113341331481934, 0.03868701681494713, 0.19222161173820496, 0.2460033893585205, 0.2862215042114258, 0.2148064523935318, 0.2555864453315735, 0.14327861368656158, 0.12096571922302246, 0.20990554988384247, -0.24028895795345306, 0.03277208283543587, -0.1116698831319809, 0.010837419889867306, 0.38927748799324036, 0.24378836154937744, 0.18102321028709412, 0.14603978395462036, 0.030626164749264717, 0.0230767410248518, 0.04298524186015129, -0.10658033192157745, -0.19822491705417633, 0.017320921644568443, 0.5835795402526855, 0.7346124649047852, -0.01011297944933176, 0.0779673159122467, -0.35347360372543335, 0.41597625613212585, 0.10790515691041946, -1.9020323753356934, -1.8129451274871826, -1.1516002416610718, -0.33691829442977905, 0.4159109890460968, -0.017693812027573586, -0.2744523286819458, 0.93325275182724, -0.236153244972229, 0.7452064752578735, 0.25735118985176086, 0.9640774726867676, 0.8334521651268005, 0.5171111822128296, 0.17464125156402588, 0.5816508531570435, 0.6847097873687744, 0.992009162902832, 1.0032310485839844, 4.498451232910156, -0.04158192127943039, 0.8977311849594116, 0.7140900492668152, 0.4246344268321991, 0.8618710041046143, 0.6554875373840332, 0.7373062372207642, 2.3705198764801025, 0.4818362891674042, -2.8747222423553467, 0.6885142922401428, 0.5670339465141296, -0.6717050075531006, -1.8146638870239258, 2.030334234237671, -0.26289185881614685, 0.5323486924171448, 0.739303708076477, 0.563902735710144, 0.5620641708374023, 0.5647371411323547, 0.6821945309638977, 0.598387598991394, 0.6163954138755798, 0.3165642321109772, 0.7284366488456726, 0.5649319887161255, -0.17787878215312958, -3.255401611328125, 0.4079532027244568, 0.4217488169670105, 0.5833332538604736, 0.6961525678634644, -2.5614712238311768, 0.28466498851776123, -1.2341487407684326, -1.722955346107483, -1.7248502969741821, -0.09456807374954224, 0.7081184983253479, 0.6572163105010986, -0.05610523745417595, 0.6121820211410522, -0.2205866277217865, -0.2835213840007782, 1.1495531797409058, 0.3707353174686432, 1.3297477960586548, 0.8093340396881104, 0.7244362831115723, 0.28341665863990784, 0.20724299550056458, 0.3906059265136719, 1.9285820722579956, 0.9102513790130615, 0.7475860118865967, 0.7830262184143066, 0.7098676562309265, 0.7345274090766907, -0.4079727232456207, 0.1700875610113144, -0.05329349637031555, 0.10088243335485458, 2.2018327713012695, 0.8356118202209473, 0.5235437750816345, 0.8635833263397217, -0.10976390540599823, -0.10480258613824844, 0.40139588713645935, -0.09504438191652298, 0.20081157982349396, 0.022383054718375206, -0.5264620184898376, -0.7780746221542358, 0.01499555166810751, 0.06694962829351425, 0.38671499490737915, -0.41949936747550964, 0.062368832528591156, 1.776449203491211, 1.8990669250488281, 1.1483021974563599, 0.3557695746421814, -0.3786681294441223, 0.004178141243755817, 0.2850566506385803, -0.9128211736679077, 0.33649688959121704, -0.8529667854309082, -0.08126382529735565, -0.8022549748420715, -1.0481257438659668, -0.5515504479408264, -0.20266515016555786, -0.5846991539001465, -0.6260547041893005, -0.24197988212108612, -1.089626669883728, -4.49760627746582, -0.06574679166078568, -0.7407722473144531, -0.7130200266838074, -0.2517540752887726, -0.8882997035980225, -0.7002393007278442, -0.5619049668312073, -2.492542028427124, -0.49571049213409424, 2.8060951232910156, -0.6426241993904114, -0.7041294574737549, 0.6915614604949951, 1.8596177101135254, -2.146216869354248, 0.3176295757293701, -0.5032723546028137, -0.6040768027305603, -0.7389822602272034, -0.43028202652931213, -0.5396321415901184, -0.6690815091133118, -0.5451828837394714, -0.5654584169387817, -0.3402523100376129, -0.700999915599823, -0.5194050669670105, 0.21520762145519257, 3.171365737915039, -0.44645997881889343, -0.3859562277793884, -0.5341928005218506, -0.5800620317459106, 2.595991611480713, -0.3031494617462158, 1.0833052396774292, 1.7150837182998657, 1.8841289281845093, 0.06221012771129608, -0.7275026440620422, -0.5689263939857483, 0.07199674099683762, -0.5281565189361572, 0.08878869563341141, 0.10386119037866592, -1.1837722063064575, -0.4507181644439697, -1.477969765663147, -0.9488312005996704, -0.7292497158050537, -0.3022158443927765, -0.081123948097229, -0.38466811180114746, -1.8919235467910767, -0.9737066030502319, -0.762954592704773, -0.7212927341461182, -0.7254342436790466, -0.7102254033088684, 0.388031929731369, -0.2265177071094513, -0.127097487449646, -0.06932099908590317, -2.13981556892395, -0.7409772276878357, -0.512828528881073, -0.7119044065475464, -0.04397844150662422, 0.03429115191102028, -0.5225852727890015, 0.16242296993732452, 0.2575269639492035, 0.07200753688812256, -0.4803715944290161, -0.6726734042167664, 0.12117724120616913, 0.021430684253573418, 0.49125218391418457, -0.33259275555610657, -0.0640081837773323, 1.857168197631836, 1.7706904411315918, 0.9879328608512878, 0.21545445919036865, -0.19425088167190552, 0.010440086014568806, 0.1935741901397705, -1.0045486688613892, 0.2712439298629761, -0.7702683806419373, -0.08033265173435211, -0.9034497141838074, -0.9321777820587158, -0.6487780809402466, -0.1797831505537033, -0.5308007001876831, -0.7778226733207703, -1.0102791786193848, -1.141680121421814, -4.491288661956787, -0.049505144357681274, -0.7399912476539612, -0.643155574798584, -0.43086275458335876, -0.8482596278190613, -0.7699534893035889, -0.6280007362365723, -2.5048470497131348, -0.4540512263774872, 2.8200747966766357, -0.7744748592376709, -0.5885825157165527, 0.8221393823623657, 1.8123719692230225, -2.177816152572632, 0.32903507351875305, -0.5374247431755066, -0.7203271389007568, -0.7675209641456604, -0.5365190505981445, -0.5663529634475708, -0.7035203576087952, -0.5076393485069275, -0.7212063074111938, -0.46486249566078186, -0.6474089622497559, -0.6144232749938965, 0.1835792511701584, 3.0708260536193848, -0.3485568165779114, -0.40443551540374756, -0.6116595268249512, -0.7263526320457458, 2.40240216255188, -0.3147500455379486, 1.222029447555542, 1.696759819984436, 1.7996011972427368, 0.1954583376646042, -0.7109985947608948, -0.6326432228088379, 0.06656544655561447, -0.3892747461795807, 0.14881843328475952, 0.04435308277606964, -1.321463704109192, -0.5656430125236511, -1.3266555070877075, -0.9577986001968384, -0.865882158279419, -0.5280560255050659, -0.10998094081878662, -0.5489081144332886, -1.8093022108078003, -0.9133367538452148, -0.807054877281189, -0.830051839351654, -0.7669137120246887, -0.7927852272987366, 0.4237079918384552, -0.1632678508758545, 0.016838181763887405, 0.133863165974617, -2.2296829223632812, -0.7837997674942017, -0.5662199258804321, -0.6562159061431885, -0.11195629090070724, -0.11045905202627182, -0.3404770791530609, 0.11778045445680618, 0.19456304609775543, -0.08189252763986588, -0.6308972835540771, -0.791385293006897, 0.09273719042539597, 0.0036272697616368532, 0.5182820558547974, -0.37931039929389954, 0.025979122146964073, 1.6895132064819336, 1.6942105293273926, 1.156462550163269, 0.3703320622444153, -0.21862953901290894, 0.13437162339687347, 0.24404951930046082, -1.0609395503997803, 0.3134382963180542, -0.6866099238395691, -0.08308583498001099, -0.9590905904769897, -0.89156174659729, -0.5632089376449585, -0.28201451897621155, -0.5454007387161255, -0.5649509429931641, -1.1785639524459839, -1.0518543720245361, -4.340404033660889, -0.014029682613909245, -0.8648631572723389, -0.5603560209274292, -0.3028838336467743, -0.8772537708282471, -0.8007323741912842, -0.7871732711791992, -2.305241107940674, -0.4620078504085541, 2.8605880737304688, -0.7312850952148438, -0.758791446685791, 0.780769944190979, 1.7776882648468018, -1.9467439651489258, 0.26868966221809387, -0.6945803165435791, -0.6851882934570312, -0.6378538012504578, -0.40507644414901733, -0.6939588785171509, -0.5712036490440369, -0.6783473491668701, -0.5617929100990295, -0.4198080599308014, -0.6738392114639282, -0.7160131931304932, 0.19510199129581451, 3.1225147247314453, -0.36572355031967163, -0.4884119927883148, -0.5298979878425598, -0.6219878792762756, 2.4063267707824707, -0.3514130711555481, 1.0509965419769287, 1.6644905805587769, 1.85016930103302, -0.02237199805676937, -0.7458216547966003, -0.7879654765129089, 0.13832825422286987, -0.5997087955474854, 0.19853012263774872, 0.0868348553776741, -1.2954236268997192, -0.570874035358429, -1.4467319250106812, -0.902022123336792, -0.7468485832214355, -0.5112848281860352, -0.1872190535068512, -0.5439612865447998, -1.9685388803482056, -2.9982452392578125, -0.7624760866165161, -0.769315242767334, -0.786322295665741, -0.7312611937522888, 0.5307304859161377, -0.20524565875530243, -0.011036472395062447, 0.07624375075101852, -2.3901426792144775, -0.8131526112556458, -0.6550995111465454, -0.7648617625236511, 0.07282546907663345, 0.09763270616531372, -0.4205498993396759, 0.26233625411987305, -0.37611302733421326, -0.08324261009693146, 0.6071580648422241, 0.6471080780029297, -0.21982400119304657, 0.05470181256532669, -0.39522844552993774, 0.36093834042549133, 0.03826794773340225, -1.7457695007324219, -1.7008426189422607, -0.9608684778213501, -0.4164491891860962, 0.4119073450565338, -0.06853660196065903, -0.2800791263580322, 0.8721845149993896, -0.16048695147037506, 0.7411051988601685, 0.24324552714824677, 0.916198194026947, 0.8727718591690063, 0.5156030654907227, 0.10147415101528168, 0.5175137519836426, 0.6858924031257629, 0.3416300117969513, 1.016345500946045, 4.301539897918701, 0.09222541004419327, 0.770401656627655, 0.5787761807441711, 0.454497367143631, 0.7615010738372803, 0.6721530556678772, 0.5608392357826233, 2.486370325088501, 0.4601303040981293, -2.866741180419922, 0.7381085157394409, 0.6982096433639526, -0.7911074161529541, -1.8138234615325928, 2.131837844848633, -0.38291674852371216, 0.721832275390625, 0.5956947803497314, 0.6320390701293945, 0.5877281427383423, 0.6565127372741699, 0.4869954586029053, 0.5795533657073975, 0.5080023407936096, 0.3591185510158539, 0.633054256439209, 0.6318902373313904, -0.1372980922460556, -3.138641834259033, 0.2485397756099701, 0.5049035549163818, 0.5944145917892456, 0.6488954424858093, -2.6102490425109863, 0.3289903700351715, -1.1422898769378662, -1.7584465742111206, -1.8603731393814087, -0.1263447403907776, 0.6475401520729065, 0.7691603302955627, -0.04166875034570694, 0.4432939887046814, -0.22522474825382233, -0.26486334204673767, 1.0855494737625122, 0.48611900210380554, 1.2984036207199097, 0.8412072062492371, 0.8948315382003784, 0.5172223448753357, -0.0054000187665224075, 0.605288565158844, 1.9040675163269043, 0.9255096912384033, 0.7655420303344727, 0.6665104031562805, 0.7887030243873596, 0.7897029519081116, -0.41110989451408386, 0.3289906680583954, 0.08841802924871445, -0.132473886013031, 2.073997735977173, 0.9251646399497986, 0.575813353061676, 0.8242260217666626, -0.05232124403119087, 0.05143008381128311, 0.3336430490016937, -0.10156107693910599, 0.38737282156944275, 0.089800626039505, -0.5030906796455383, -0.8163917064666748, 0.026236554607748985, -0.03604865446686745, 0.31367209553718567, -0.3890906274318695, -0.10957267135381699, 1.6989452838897705, 1.8146543502807617, 0.9518905282020569, 0.2548595666885376, -0.21066339313983917, 0.061901625245809555, 0.30497509241104126, -0.9035953283309937, 0.21303154528141022, -0.8366042375564575, -0.15224449336528778, -1.0235093832015991, -1.0237081050872803, -0.5104204416275024, -0.09374441206455231, -0.5089720487594604, -0.6223663687705994, -1.177372932434082, -1.0981420278549194, -4.324347972869873, 0.09347625076770782, -0.7191993594169617, -0.5926507711410522, -0.264563649892807, -0.8446622490882874, -0.6168825626373291, -0.5744748711585999, -2.3124473094940186, -0.48288026452064514, 2.822627305984497, -0.6331642866134644, -0.5293529033660889, 0.8631312847137451, 1.6713590621948242, -2.0736570358276367, 0.3591391146183014, -0.6325008273124695, -0.5102968215942383, -0.6211955547332764, -0.4435254633426666, -0.6689399480819702, -0.6333258748054504, -0.5403361916542053, -0.6690417528152466, -0.5028167963027954, -0.5884392261505127, -0.5459544658660889, 0.29578161239624023, 3.2089860439300537, -0.48283153772354126, -0.3715743124485016, -0.5767995119094849, -0.5935538411140442, 2.4912924766540527, -0.3598725199699402, 1.112144112586975, 1.6924365758895874, 1.813529133796692, 0.031690891832113266, -0.7386263012886047, -0.6216872930526733, 0.04963300749659538, -0.6039538383483887, 0.20572999119758606, 0.1326891928911209, -1.1857028007507324, -0.4725421667098999, -1.338919997215271, -0.8582887053489685, -0.8824808597564697, -0.41585978865623474, -0.11858848482370377, -0.5008370280265808, -2.0019214153289795, -2.7959845066070557, -0.8022576570510864, -0.7174177765846252, -0.6548818349838257, -0.6702412962913513, 0.42822059988975525, -0.19103501737117767, -0.07403820008039474, -0.07304581254720688, -2.3473761081695557, -0.7913103103637695, -0.5719696283340454, -0.6610695719718933, -0.11826533079147339, -0.09675638377666473, -0.5035718679428101, 0.07831930369138718, -0.32215631008148193, -2.055145025253296, 0.23507830500602722, 3.2227416038513184, 2.51741099357605, -0.2583579123020172, 1.2599904537200928, -0.21254514157772064, -0.5419886112213135, 0.9281531572341919, 1.5625057220458984, 0.2760341465473175, -1.4887807369232178, 0.2906089425086975]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (1.37, 1.54)}}, 'et2_eta3': {'discriminator': {'threshold': 0.32499860525131224, 'nodes': [100, 5, 1], 'bias': [0.00788446981459856, -0.0552411712706089, -0.04461474344134331, 0.028316013514995575, -0.03182104974985123, -0.10394201427698135], 'weights': [0.8866645693778992, 2.556509256362915, 1.2605292797088623, -0.7053293585777283, -0.5666756629943848, -1.1770684719085693, -0.14521314203739166, -0.47434401512145996, 1.3796004056930542, 3.112575054168701, 1.2103172540664673, -1.5549136400222778, -3.153865337371826, 0.10194616764783859, -4.306671619415283, -4.400684356689453, -3.415825366973877, -5.797379970550537, -4.162384510040283, -4.917461395263672, -2.887441396713257, -3.600128412246704, -2.3367486000061035, -3.3575918674468994, -11.457368850708008, -3.3863959312438965, -0.9010925889015198, -0.8031396865844727, -0.8098471164703369, -2.9547371864318848, -1.7250993251800537, -3.0472469329833984, -1.5851689577102661, -1.8912644386291504, -2.7962486743927, -0.48974359035491943, -0.3226456344127655, -1.8864710330963135, -1.194448471069336, -1.169174313545227, -0.7021977305412292, -1.9675836563110352, -3.0658020973205566, -1.9403047561645508, -0.5956904888153076, -1.4021230936050415, -0.9376400709152222, -3.788919687271118, 1.4170138835906982, -0.08359036594629288, -0.5999832153320312, 1.758783221244812, -0.8053829669952393, 0.7376378178596497, -2.768646240234375, -0.3445039987564087, 0.05063493549823761, -2.8349437713623047, -0.5258631706237793, -0.3931165337562561, -0.2657352089881897, -1.0838490724563599, -0.2015194296836853, -0.3336443305015564, -0.23711436986923218, 0.29125750064849854, -0.7750683426856995, -0.11601141095161438, 2.4019272327423096, -2.0096275806427, -0.9388010501861572, -3.814708948135376, 0.6594949960708618, 0.4011780321598053, -2.027766466140747, -2.077592372894287, -2.1469509601593018, -1.7370887994766235, -1.1557564735412598, -0.8719875812530518, -0.2641344666481018, -4.4357523918151855, -6.516595840454102, -3.170814275741577, -1.7167738676071167, -1.5650434494018555, -1.9787112474441528, -0.14804628491401672, -0.21691787242889404, -1.089533805847168, -0.3562376797199249, 0.3281002938747406, -4.176568031311035, -1.744714379310608, -0.1050671711564064, -2.076401472091675, -0.802380383014679, -0.03973992541432381, 0.28620898723602295, -12.925882339477539, 1.9419426918029785, 2.602848529815674, 1.2153435945510864, -0.6900002956390381, -0.5655251145362854, -0.952894926071167, 0.022272460162639618, -0.4958982467651367, 3.1198890209198, 3.025790214538574, 1.1861860752105713, -6.007218360900879, -3.1722805500030518, -0.2640519440174103, -4.331332206726074, -1.5999140739440918, -1.0840733051300049, -5.8222222328186035, -4.18679666519165, -4.853883743286133, -2.191801071166992, -3.1507978439331055, -2.288870096206665, -3.1576733589172363, -5.327248573303223, -3.352508306503296, -0.8761668801307678, -0.7575724124908447, -0.9277490973472595, -2.8850743770599365, -1.7238850593566895, -3.2047336101531982, -1.5239962339401245, -1.922297716140747, -2.9028563499450684, -0.43713223934173584, -0.39689573645591736, -2.063551425933838, -1.1043701171875, -1.0973916053771973, -0.7553235292434692, -0.34111839532852173, -3.1869847774505615, -1.9442647695541382, -0.5365073680877686, 1.1823997497558594, -1.2664458751678467, -2.7871766090393066, 1.4006975889205933, -0.12241924554109573, -0.7445502877235413, 0.02595626749098301, -0.8430140018463135, -0.6031336784362793, -2.808506488800049, 0.9689239859580994, 0.09706023335456848, -2.8670475482940674, -0.5151947140693665, 0.6677565574645996, -0.35322022438049316, -1.0831847190856934, -0.15348589420318604, -0.3028882145881653, -0.27966588735580444, 0.242187961935997, -0.6819342374801636, 1.2050498723983765, 2.4093573093414307, -2.0193686485290527, -0.874685525894165, -3.843883991241455, 0.5974795818328857, 0.29570522904396057, -1.3750430345535278, -2.129608154296875, -2.071500062942505, -1.7880357503890991, -0.9439229369163513, -0.9380764961242676, 1.075730562210083, -5.608274459838867, -6.570926189422607, -3.06646728515625, -1.8419228792190552, -1.6471420526504517, -1.7074791193008423, -0.21474198997020721, -0.15032127499580383, -1.3652732372283936, -0.48098471760749817, 0.1757192760705948, -4.199511528015137, -1.6398017406463623, -0.30331021547317505, -2.008441925048828, -0.6796550154685974, -0.02432888373732567, 0.25832536816596985, -13.047375679016113, 2.3015670776367188, 2.652259588241577, -0.04276109114289284, -1.6898763179779053, -0.5282547473907471, -1.1373041868209839, -0.16041436791419983, -0.7841352820396423, 3.0586726665496826, 3.285292863845825, 1.0829966068267822, -5.959018707275391, -3.2016642093658447, -0.25804877281188965, -4.159054756164551, -1.7311261892318726, -1.02461576461792, -5.719105243682861, -4.177931308746338, -4.913457870483398, -2.2203776836395264, -3.33137845993042, -2.2118284702301025, -3.2683162689208984, -5.3131103515625, -3.458804130554199, -0.8601236343383789, -0.9852460026741028, -0.794578492641449, -2.736215114593506, -1.7377876043319702, -3.0413286685943604, -1.5192049741744995, -2.0579564571380615, -2.9968316555023193, -0.40051767230033875, -0.4610377848148346, -2.084721803665161, -1.3372961282730103, -1.2142082452774048, -0.40443119406700134, -0.4215956926345825, -3.0003607273101807, -2.0365712642669678, -0.6028772592544556, 1.2844709157943726, -1.2248389720916748, -2.9994821548461914, 1.350193977355957, -0.06382647901773453, -0.7288849949836731, 0.16878457367420197, -0.90683513879776, -0.5223371386528015, -2.730466604232788, -0.31337636709213257, -0.8087965250015259, -2.7802727222442627, -0.4862459599971771, 0.7656293511390686, -0.3730849623680115, -1.0599578619003296, -0.14788918197155, -0.3234267830848694, -0.13641361892223358, 0.39424484968185425, -0.6739417314529419, 0.7168844938278198, 2.547192335128784, -1.9886322021484375, -0.915225625038147, -3.7405431270599365, 0.5558382868766785, 0.31367701292037964, -1.4577981233596802, -2.2457375526428223, -2.0853188037872314, -1.725975751876831, -1.016640305519104, -0.7467007637023926, 0.9459208250045776, -4.523372650146484, -6.458606243133545, -3.009582996368408, -1.8142799139022827, -1.4648798704147339, -1.2455072402954102, 0.16857734322547913, -0.31852027773857117, -1.2851754426956177, -0.4370708763599396, 0.17729100584983826, -4.101103782653809, -1.7085094451904297, -0.3303433954715729, -2.0256736278533936, -0.9063255190849304, -0.05150369554758072, 0.32025256752967834, -12.878612518310547, 8.361672401428223, 6.350287914276123, -0.19913531839847565, 1.5666073560714722, -0.7337610125541687, -1.0386338233947754, -0.00976614374667406, -0.6988812685012817, 1.131079912185669, 1.5748971700668335, 0.8122682571411133, -21.16731071472168, -11.693875312805176, -0.09097612649202347, -4.067779541015625, -4.6730451583862305, -3.5514535903930664, -5.725566864013672, -4.2891340255737305, -4.80296516418457, -2.525132894515991, -5.988006591796875, -2.218318462371826, -3.2977683544158936, -11.515636444091797, -3.4829905033111572, -0.8902175426483154, -0.9074594378471375, -5.001034259796143, -3.233494758605957, -1.6442557573318481, -3.4007623195648193, -1.5793441534042358, -2.005068063735962, -2.0826714038848877, -1.2316325902938843, -0.23147350549697876, -2.4398794174194336, -1.248934268951416, -1.172889232635498, -0.5631307363510132, 0.2539132237434387, -1.9099215269088745, -1.8873746395111084, -0.5123938322067261, -1.5539332628250122, -0.6213929057121277, -3.8233139514923096, 0.4135018289089203, -0.46119144558906555, -0.2959749102592468, -0.5910411477088928, -9.713387489318848, 0.6432381868362427, -2.776925802230835, 14.407981872558594, 0.10814400017261505, -2.965383768081665, -0.49891337752342224, -0.7406617403030396, -0.14934559166431427, -0.982591986656189, -0.2709519565105438, -0.41164958477020264, -0.25321534276008606, -1.4062607288360596, -0.6443464756011963, -0.3202524185180664, 2.5272762775421143, -2.1843132972717285, 0.06493590027093887, -3.794705629348755, 0.6113260388374329, 0.6873775124549866, -4.210161209106445, -2.237816333770752, -2.09950590133667, -1.8381483554840088, -0.844685435295105, -0.8206974267959595, 3.839216709136963, -4.1806864738464355, -6.32426118850708, -3.149077892303467, -1.7862660884857178, -1.6609349250793457, -1.84271240234375, -0.1596592366695404, 0.06947872787714005, 0.6660725474357605, -0.5717366933822632, 0.30210867524147034, -4.775027275085449, -1.7132046222686768, -0.1530657559633255, -2.0644919872283936, 1.193641185760498, -0.09290184080600739, 0.4423705041408539, -22.962764739990234, 361.2158203125, 53.927001953125, 1.1349157094955444, -23.825899124145508, -11.452814102172852, -52.039695739746094, 0.19839875400066376, -30.636899948120117, 4.653786659240723, 4.191861152648926, -2.7073757648468018, -63.682273864746094, -47.79704666137695, -15.64342975616455, -133.45928955078125, -45.834197998046875, -4.262157917022705, -21.25887680053711, -20.2669677734375, -98.93568420410156, 0.08636799454689026, -19.482770919799805, -38.57852554321289, 3.319154739379883, 18.212064743041992, 3.307018995285034, -86.56903839111328, -1.7849090099334717, -0.49602311849594116, 2.808689832687378, 0.7876392006874084, -6.89988374710083, 1.4884074926376343, -68.577392578125, 1.9276267290115356, -54.111846923828125, -42.21574783325195, 1.9889826774597168, 0.6460270881652832, -16.113811492919922, -25.492910385131836, -3.291553258895874, 1.687590479850769, 53.678897857666016, -9.812946319580078, 28.589740753173828, -27.197240829467773, 48.462615966796875, -1.9507153034210205, -42.17255401611328, 0.018531514331698418, -3.102607250213623, -34.584964752197266, -0.6322385668754578, 2.4058563709259033, 58.15827178955078, -0.16933637857437134, 3.1508588790893555, 0.7075089812278748, 0.7235881686210632, -6.518099784851074, 1.0705773830413818, -0.7424505352973938, -2.3129723072052, -61.94121170043945, 2.5413455963134766, 0.7139628529548645, -11.017036437988281, -2.411630868911743, 2.198167085647583, -0.15526176989078522, 3.858042001724243, -0.04248121753334999, -2.9395751953125, 6.370877265930176, 2.2874696254730225, 2.1906070709228516, -0.2640475928783417, -1.9064992666244507, 0.6887487173080444, 0.7354648113250732, 4.258697032928467, 6.53880500793457, 2.7215805053710938, 1.8767728805541992, 1.5336604118347168, 1.995628833770752, -0.35732460021972656, 100.3153305053711, 34.34101867675781, 0.7588233351707458, -6.39007043838501, 4.54166316986084, 1.7927271127700806, -1.3286956548690796, 4.079582691192627, -7.721810817718506, 9.561965942382812, 0.2421628087759018, 11.420624732971191, 1.8032723665237427, 1.3724095821380615, 2.0775630474090576, 0.5677655935287476, -0.7045931816101074]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (1.54, 2.5)}}, 'et2_eta0': {'discriminator': {'threshold': 0.37499855756759642, 'nodes': [100, 5, 1], 'bias': [-0.12483435124158859, -0.10226479172706604, 0.048882145434617996, 0.038836244493722916, -0.01681659184396267, -0.5366148352622986], 'weights': [-2.793397903442383, -2.0708250999450684, -0.12229000777006149, 0.8238522410392761, -0.3435535132884979, -0.256517618894577, -0.7208641767501831, -0.3458976149559021, -2.815298080444336, -2.6088621616363525, 9.818424224853516, 6.140866756439209, 5.1284027099609375, 4.434843063354492, 3.377664566040039, 3.5065627098083496, 4.381206512451172, 4.839986801147461, 4.87090539932251, 4.245048999786377, 3.8784537315368652, 1.2294416427612305, 3.250715970993042, 3.597304105758667, 2.49294114112854, 2.365709066390991, 2.4510326385498047, 2.2781221866607666, 2.178699254989624, 2.5074031352996826, 2.4789459705352783, 2.2593629360198975, 1.8417326211929321, 2.192194938659668, 1.156245231628418, 1.6384360790252686, 1.3636661767959595, 1.8540456295013428, 1.6184887886047363, 1.2148140668869019, 4.523613929748535, 1.379786491394043, 0.8362826108932495, 1.0319654941558838, 0.4607721269130707, 1.8506715297698975, 0.5708651542663574, 0.8524535894393921, 0.6334859728813171, 1.703233242034912, 0.7955631613731384, 0.5439462065696716, 1.0977370738983154, 0.8602331876754761, 0.7803763747215271, 0.3837242126464844, 0.3050194978713989, -0.693212628364563, -0.026346081867814064, -0.10011033713817596, 0.27786558866500854, -2.296379566192627, 0.8622558116912842, 0.9686951041221619, 2.5341148376464844, 0.591350257396698, -0.5353699326515198, 0.24722714722156525, -0.09872029721736908, 0.101466104388237, 0.20784813165664673, 0.7859892845153809, -0.34786561131477356, -0.3296988606452942, 0.9464410543441772, 1.69089937210083, 1.810727834701538, 1.1499561071395874, 0.7949889898300171, 0.4261282682418823, 1.4265332221984863, 3.416452407836914, 3.928701639175415, 2.8075332641601562, 2.246126890182495, 2.06162428855896, 1.5765190124511719, 2.2075164318084717, 4.171732425689697, 2.984755277633667, 1.2704678773880005, -0.08430518209934235, 4.1573028564453125, 2.586057662963867, 0.9398143291473389, -0.08532904833555222, 5.309053897857666, 2.886584997177124, -0.04642226919531822, 0.3016264736652374, -2.867333173751831, -2.1695499420166016, -0.03658750280737877, 0.9950780868530273, -0.28693675994873047, -0.4561077356338501, -0.8755659461021423, -0.2419799417257309, -2.572260856628418, -2.5080058574676514, 1.1113929748535156, 6.15207576751709, 5.238799095153809, 4.4171671867370605, 3.5503005981445312, 3.353978395462036, 4.037023544311523, 4.748635768890381, 4.7074456214904785, 3.9648070335388184, 3.9109761714935303, 1.194137454032898, 3.2328951358795166, 3.6757659912109375, 2.463534355163574, 2.2345802783966064, 2.3462588787078857, 2.1334471702575684, 2.289325714111328, 2.2671759128570557, 2.349083662033081, 2.2873375415802, 1.7560956478118896, 2.1562016010284424, 1.189494013786316, 1.7418874502182007, 1.2189451456069946, 1.7114077806472778, 1.5721211433410645, 1.2133005857467651, 2.3140811920166016, 1.3934723138809204, 0.8478716611862183, 0.858556866645813, 0.4489583671092987, 1.4045780897140503, 0.5139455795288086, 0.9397397637367249, 0.7417899370193481, 1.7360533475875854, 0.7101461291313171, 0.43147456645965576, 1.1987477540969849, 0.6520602703094482, 0.7820590138435364, 0.4597562253475189, 0.2058124840259552, -0.787979781627655, -0.10290277004241943, -0.08104969561100006, 0.19602854549884796, -2.2484934329986572, 0.6557759642601013, 0.5840897560119629, 2.5371146202087402, 0.9443176984786987, -0.354851633310318, 0.11332384496927261, 0.09240604937076569, -0.017222372815012932, -0.04544787108898163, 0.6892842054367065, -0.6388503313064575, -0.264209121465683, 0.9446303248405457, 1.8191293478012085, 1.8631620407104492, 1.3452131748199463, 0.7568941712379456, 0.3343203365802765, 2.2058260440826416, 3.6997323036193848, 3.7718918323516846, 2.6268272399902344, 2.2566885948181152, 2.1196448802948, 1.2812962532043457, 1.7839045524597168, 4.143006801605225, 3.06341290473938, 1.2008962631225586, 0.040645208209753036, 3.5784356594085693, 2.5634822845458984, 0.8994272351264954, -0.23019644618034363, 5.359469890594482, 3.019563913345337, 0.17618286609649658, 0.2883881628513336, 2.899857521057129, 2.116607666015625, 0.1694803237915039, -0.5699676275253296, 0.25827163457870483, 0.3286980986595154, 0.7058380246162415, 0.36074674129486084, 2.721364974975586, 2.8344156742095947, -4.058346271514893, -6.07627010345459, -5.073841094970703, -4.5377516746521, -3.428837776184082, -3.4128808975219727, -4.339926719665527, -4.788172721862793, -4.874410629272461, -4.249608516693115, -3.8050436973571777, -1.4409184455871582, -3.361682891845703, -3.702193021774292, -2.5246670246124268, -2.3703951835632324, -2.346682548522949, -2.3345654010772705, -2.3508732318878174, -2.265964984893799, -2.493600606918335, -2.067065477371216, -1.812131404876709, -2.163743495941162, -1.2848223447799683, -1.6534150838851929, -1.3361858129501343, -1.744596242904663, -1.614638090133667, -1.0458617210388184, -2.3976354598999023, -1.3682587146759033, -0.8607611060142517, -1.0060675144195557, -0.5463474988937378, -1.5456016063690186, -0.47304219007492065, -0.8900745511054993, -0.657384991645813, -1.6128746271133423, -0.8337711691856384, -0.49045294523239136, -1.2162104845046997, -0.654731810092926, -0.8609652519226074, -0.5365229845046997, -0.3158026337623596, 0.7128595113754272, 0.07463615387678146, -0.0866665244102478, -0.27436989545822144, 2.3399839401245117, -0.8527559041976929, -0.9321187734603882, -2.471670389175415, -0.992064356803894, 0.5545194149017334, -0.18364526331424713, 0.07635891437530518, -0.07546298205852509, -0.23272883892059326, -0.8539066314697266, 0.38907569646835327, 0.34044012427330017, -1.0106858015060425, -1.740762710571289, -1.678263545036316, -1.3743884563446045, -0.8785580396652222, -0.3136010766029358, -2.0672335624694824, -3.6953282356262207, -3.76662015914917, -2.7978014945983887, -2.2587356567382812, -1.9841508865356445, -1.3074575662612915, -1.8920390605926514, -4.0868353843688965, -3.0864996910095215, -1.2271597385406494, -0.06890691816806793, -3.4301679134368896, -2.5371673107147217, -1.0599160194396973, 0.07654707878828049, -5.384040832519531, -2.9845688343048096, 0.028007717803120613, -0.39498600363731384, 2.894604444503784, 2.007709264755249, 0.25683602690696716, -0.21122033894062042, 0.39200714230537415, 0.377647340297699, 0.7413645386695862, 0.3037513494491577, 2.7625021934509277, 2.8480918407440186, -3.9391050338745117, -6.1844611167907715, -5.138907432556152, -4.472313404083252, -3.341977834701538, -3.4090447425842285, -4.185109615325928, -4.835573673248291, -4.921023368835449, -4.378082752227783, -3.946549892425537, -1.4151043891906738, -3.3548827171325684, -3.9185268878936768, -2.4399335384368896, -2.343597173690796, -2.3997440338134766, -2.2009403705596924, -2.376821756362915, -2.374126672744751, -2.4936389923095703, -2.0932562351226807, -1.8051066398620605, -2.3353333473205566, -1.270889163017273, -1.7716227769851685, -1.1999213695526123, -1.6901016235351562, -1.5309314727783203, -1.1273698806762695, -2.3344998359680176, -1.4242279529571533, -0.7915508151054382, -1.0130161046981812, -0.21237780153751373, -1.3941518068313599, -0.47113651037216187, -0.9896991848945618, -0.8126494288444519, -1.652553677558899, -0.8029531836509705, -0.5246216654777527, -0.9711614847183228, -0.6120882034301758, -0.8542482852935791, -0.4656551480293274, -0.30433517694473267, 0.6715402007102966, 0.02021043561398983, -0.0961250364780426, -0.19976705312728882, 2.2925503253936768, -0.6294881105422974, -0.645936131477356, -2.4337940216064453, -1.0137776136398315, 0.518383264541626, -0.26841872930526733, 0.11415611952543259, -0.033375706523656845, -0.1401006132364273, -0.7579989433288574, 0.37016838788986206, 0.24336440861225128, -0.9167090058326721, -1.7502012252807617, -1.8832005262374878, -1.2835309505462646, -0.7286996245384216, -0.4148959517478943, -2.0210800170898438, -3.773575782775879, -2.572765588760376, -2.7644879817962646, -2.299356460571289, -2.104538917541504, -1.1992779970169067, -1.9161784648895264, -3.989630937576294, -3.028036117553711, -1.2557291984558105, 0.09787507355213165, -3.415801763534546, -2.601398468017578, -1.0754554271697998, 0.14755693078041077, -5.211055755615234, -2.7777810096740723, -0.004522908478975296, -0.18922926485538483, 89.03077697753906, 2.3583521842956543, 0.22802753746509552, -0.4225406050682068, 0.3274199068546295, -0.46226534247398376, 0.7620492577552795, 0.275595486164093, 1.1721338033676147, 4.720905780792236, -0.3402784764766693, -8.5315523147583, -5.094398021697998, -4.414702415466309, -3.350191593170166, -3.4861297607421875, -4.263932228088379, -4.15658712387085, -4.889211654663086, -4.410982131958008, -3.746927499771118, -1.2398223876953125, -3.3772714138031006, -2.5240836143493652, -2.525944232940674, -2.314347267150879, -2.3537135124206543, -2.34065318107605, -2.1246447563171387, -2.381328582763672, -2.1760499477386475, -2.0389981269836426, -1.7698246240615845, -2.2524526119232178, -1.0231820344924927, -1.6013200283050537, -1.1646803617477417, -1.6595957279205322, -1.6458975076675415, -1.4603694677352905, -23.424835205078125, -1.5524637699127197, -0.48657140135765076, -1.0107505321502686, -0.24458591639995575, -1.4714767932891846, -0.5501672625541687, -0.8516602516174316, -0.6569918394088745, -1.711924433708191, -0.9581290483474731, -0.4091308116912842, -1.1068185567855835, -0.7904523611068726, -0.8864606022834778, -0.08041489869356155, -0.19343386590480804, 0.6008324027061462, 0.18428513407707214, 0.009013629518449306, -0.1985223889350891, 2.3083319664001465, -0.731610119342804, -0.2947554588317871, -2.3407135009765625, -0.5611312389373779, 0.5728114247322083, -0.12982980906963348, 0.38089731335639954, -0.1917320042848587, 0.23497192561626434, -0.9523701071739197, -0.5421914458274841, 0.27556195855140686, -1.0049506425857544, -1.7986860275268555, -1.7369427680969238, -1.1883553266525269, -0.8711710572242737, -0.39014410972595215, -1.3751457929611206, -3.514843225479126, -2.4473252296447754, -2.8868446350097656, -2.227773666381836, -2.0074734687805176, -1.220835566520691, -2.020509719848633, -4.13227653503418, -3.0723884105682373, -1.2278621196746826, -0.04893263801932335, -3.550140619277954, -2.702178716659546, -0.5072920322418213, 0.07932291179895401, -5.395234107971191, -2.9332804679870605, -10.063755989074707, -0.9217438697814941, -0.970908522605896, -1.2322032451629639, 1.2674349546432495, 1.7228236198425293, 0.4633990228176117]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0, 0.8)}}, 'et1_eta2': {'discriminator': {'threshold': 0.40499852895736693, 'nodes': [100, 5, 1], 'bias': [0.031178778037428856, -0.005701406858861446, 0.06699232012033463, -0.09580881148576736, 0.06976906210184097, -0.3832928538322449], 'weights': [-0.40617069602012634, 0.05059850588440895, 0.7499252557754517, 1.7611161470413208, 0.23170766234397888, -1.2198233604431152, 0.16876749694347382, -1.72450590133667, 0.4692983031272888, -4.854949951171875, -7.062108993530273, -2.755744218826294, 1.1222169399261475, 0.11763948202133179, -0.4704238176345825, -0.8519705533981323, 5.247742176055908, -0.3749392032623291, -0.38789743185043335, 0.7320082187652588, 5.949556827545166, 3.3279502391815186, 0.6024587154388428, -0.039334774017333984, 0.2483900785446167, 0.6808249354362488, 7.891293525695801, 4.757511615753174, 5.602342128753662, 2.357527256011963, 2.0638976097106934, 0.636166512966156, -1.0997508764266968, 1.996119737625122, 2.1897733211517334, 1.8743704557418823, 3.117839813232422, 1.882676124572754, 1.143105387687683, -1.7836204767227173, 1.8928104639053345, 1.6177157163619995, -5.095090866088867, 1.873120903968811, 1.0769466161727905, 0.19071130454540253, 1.863064169883728, 1.8593698740005493, 1.6756086349487305, 1.9361631870269775, 0.6674870252609253, 1.7194768190383911, -3.507887840270996, 0.13539540767669678, 1.7885146141052246, 2.014915943145752, -0.24403142929077148, 1.2357548475265503, -6.062086582183838, 0.692834734916687, -3.851337432861328, 0.5615318417549133, 0.8464506268501282, -9.340394973754883, -3.418257236480713, -1.5114721059799194, -3.7737162113189697, 1.9229724407196045, 1.2763211727142334, 1.6491320133209229, 1.822506070137024, 1.30263090133667, -0.2916940450668335, -0.2541484534740448, 5.1021270751953125, 0.9038171172142029, 2.0575029850006104, 2.1997158527374268, 1.3800668716430664, 0.022755717858672142, -0.18469934165477753, 0.1612725555896759, 3.159061908721924, 1.8917431831359863, 2.060302734375, 1.653403401374817, 1.4466991424560547, 1.6136881113052368, -1.116693139076233, 0.7213726043701172, 0.39923396706581116, -0.17739258706569672, 8.318849563598633, 1.0747276544570923, -0.12139942497015, 1.8680284023284912, 0.03930806741118431, 0.007090954575687647, 0.5568574666976929, 1.4138871431350708, -0.5221264958381653, 0.07864288240671158, 0.8875758647918701, 1.7647874355316162, 0.12986072897911072, -1.1525318622589111, 0.7669426798820496, -1.7278828620910645, 1.1270194053649902, -4.611599445343018, -6.873719692230225, -2.7103631496429443, 1.0788089036941528, 0.26390406489372253, -0.3970734477043152, -0.24662776291370392, 5.283209323883057, -0.4962141811847687, -0.3492560386657715, 3.580881357192993, 6.061509609222412, 3.2536110877990723, 0.6525206565856934, 0.03408323600888252, 0.20668579638004303, 0.8124776482582092, 7.943572998046875, 1.9401533603668213, 5.636268138885498, 2.3818295001983643, 1.8514511585235596, 0.5609391927719116, -1.0832350254058838, 2.1581053733825684, 2.114447593688965, 2.0574190616607666, 3.1099600791931152, 1.7302532196044922, 1.0794622898101807, -1.5705474615097046, 1.761475920677185, 1.5851939916610718, -4.662375450134277, 1.9355350732803345, 0.9535320997238159, 0.08234860748052597, 1.8737255334854126, 1.7760297060012817, 1.621549367904663, 1.9808591604232788, 0.7491893172264099, 1.5175353288650513, -3.54213809967041, 0.26255255937576294, 1.897148609161377, 2.1748507022857666, -0.22237850725650787, 1.1595104932785034, -6.2182745933532715, 1.1302920579910278, -3.8986756801605225, 0.41321614384651184, 1.057801604270935, -9.344603538513184, -3.711775064468384, -1.6040369272232056, -3.8320343494415283, 1.9287633895874023, 1.2905747890472412, 1.8224948644638062, 2.647129535675049, 1.4227070808410645, -0.43910646438598633, -0.4198903441429138, 5.047460556030273, 0.8692330718040466, 3.626905918121338, 2.1514782905578613, 1.2575359344482422, 0.1689063310623169, -0.18400628864765167, 0.3576008975505829, 3.340428352355957, 2.0828359127044678, 2.1466312408447266, 1.7111241817474365, 1.5730745792388916, 1.7262765169143677, -1.13548743724823, 0.9122538566589355, 0.3348509967327118, -0.24802319705486298, 8.366022109985352, 0.9931071400642395, 0.040810056030750275, 1.9288711547851562, 0.10228022187948227, 0.11558893322944641, 0.6280979514122009, 1.4865061044692993, 0.5954208374023438, 0.024291472509503365, -0.9524036645889282, -1.7906547784805298, -0.06166830658912659, 0.847691535949707, -0.11259515583515167, -0.6423404812812805, -1.1712872982025146, 4.613446235656738, 6.780219554901123, 2.716954231262207, -1.2891643047332764, -0.258861780166626, 0.3887266516685486, 0.40966740250587463, -5.262836456298828, 0.35567229986190796, 0.38748103380203247, -3.5495169162750244, -5.864482402801514, -3.3234176635742188, -0.4793376624584198, -0.6022841334342957, -0.2556999623775482, -0.7792379260063171, -8.043661117553711, -2.107996702194214, -5.692515850067139, -2.237635612487793, -1.8771570920944214, -0.698318362236023, 1.0879309177398682, -2.006584882736206, -2.0324463844299316, -1.9851945638656616, -2.618317127227783, -1.893907904624939, -0.981057345867157, 1.5212393999099731, -1.922104001045227, -1.5093594789505005, 4.769593715667725, -2.06408953666687, -0.9250784516334534, -0.13341204822063446, -1.6680256128311157, -1.6747766733169556, -1.570725440979004, -1.979363203048706, 1.1579514741897583, -1.5347920656204224, 3.4744927883148193, 0.46436595916748047, -1.9164373874664307, -2.0490810871124268, 0.2818984389305115, -1.2782217264175415, 6.193326473236084, -1.1276849508285522, 3.9064526557922363, -0.48137369751930237, -0.9492633938789368, 10.150104522705078, 3.482677459716797, 1.5422648191452026, 3.6920034885406494, -2.2099697589874268, -1.2735788822174072, -1.8647860288619995, -2.6665146350860596, -1.3239099979400635, 0.3149753212928772, 0.3675116002559662, -5.076552391052246, -0.7541475296020508, -3.6901917457580566, -2.217299461364746, -1.2836296558380127, 0.01051655039191246, 0.30887287855148315, -1.2350393533706665, -3.178927421569824, -1.9682862758636475, -2.0522491931915283, -1.5633717775344849, -1.5799410343170166, -1.5730394124984741, 1.158988356590271, -0.7181025147438049, -0.42143598198890686, 0.2971124053001404, -8.24048137664795, -0.9713696241378784, 0.03768090158700943, -1.9632744789123535, 0.10011440515518188, 0.06530074030160904, -0.632578432559967, -1.5095447301864624, -0.6202589869499207, 0.055398184806108475, 0.8856496810913086, 1.9541689157485962, 0.10527031868696213, -0.8016684651374817, 0.162770077586174, 0.6263285279273987, 1.1864070892333984, -4.627506256103516, -6.863159656524658, -2.6275277137756348, 1.1898293495178223, 0.2936306297779083, -0.45190536975860596, -0.3680380880832672, 5.278356075286865, -0.5131756663322449, -0.3179140090942383, 3.51579213142395, 5.865565776824951, 3.1924924850463867, 0.5801934003829956, 0.6347711682319641, 0.21062399446964264, 0.8465264439582825, 8.034653663635254, 1.9977561235427856, 5.756322383880615, 2.452772378921509, 1.9034985303878784, 0.486421138048172, -1.0439702272415161, 2.2170379161834717, 1.9762922525405884, 2.0805277824401855, 2.623927593231201, 1.8956996202468872, 1.0526084899902344, -1.492738127708435, 1.9020651578903198, 1.4901982545852661, -4.902531147003174, 1.936944603919983, 0.8798261880874634, 0.18816129863262177, 1.8333758115768433, 1.7059041261672974, 1.718836784362793, 1.9634146690368652, -1.1527780294418335, 1.6917577981948853, -3.3705008029937744, -0.6092022657394409, 1.8550374507904053, 2.100226402282715, -0.10858079046010971, 1.2000430822372437, -6.001556873321533, 1.1139436960220337, -4.020358562469482, 0.44861915707588196, 0.9744906425476074, -9.193859100341797, -3.555845022201538, -1.5654202699661255, -3.666616678237915, 2.3932785987854004, 1.2444441318511963, 1.7108584642410278, 2.5939762592315674, 1.2669651508331299, -0.23719820380210876, -0.288639098405838, 5.143328666687012, 0.8475322127342224, 3.5729475021362305, 2.1985599994659424, 1.4159128665924072, 0.012579534202814102, -0.3513320982456207, 1.1216301918029785, 3.108123540878296, 2.0375897884368896, 2.0448694229125977, 1.6820334196090698, 1.449524164199829, 1.4881113767623901, -1.1107341051101685, 0.7716842293739319, 0.33053794503211975, -0.3705365061759949, 8.26908016204834, 0.8979277610778809, -0.1810518056154251, 1.9264767169952393, 0.054153893142938614, 0.06758151948451996, 0.5282236337661743, 1.4046988487243652, 0.4678749144077301, 0.015833666548132896, -0.8261371850967407, -1.7698715925216675, -0.22459372878074646, 0.7016385197639465, -0.10252054035663605, -0.5075404644012451, -1.1515045166015625, 4.717494010925293, 6.9447855949401855, 2.5476489067077637, -1.16715669631958, -0.14301659166812897, 0.3680901825428009, 0.256634920835495, -5.2634406089782715, 0.3471165895462036, 0.25105351209640503, -3.6982624530792236, -5.870053768157959, -3.3316798210144043, -0.4750809371471405, -0.45219749212265015, -0.23547150194644928, -0.78541100025177, -7.949777603149414, -1.8862528800964355, -5.806520938873291, -2.23911452293396, -2.073884963989258, -0.6894677877426147, 1.0706872940063477, -2.0697386264801025, -1.995505690574646, -1.9149621725082397, -2.5771231651306152, -1.8541995286941528, -1.0264265537261963, 1.5749093294143677, -1.7710412740707397, -1.6405638456344604, 4.904359340667725, -2.0414209365844727, -0.9331305623054504, -0.26968395709991455, -1.791082501411438, -1.6907402276992798, -1.7082462310791016, -1.9873732328414917, 1.2436439990997314, -1.6851905584335327, 3.4644546508789062, 0.5470081567764282, -1.9240694046020508, -2.031583547592163, 0.10837056487798691, -1.1846634149551392, 6.182166576385498, -1.165220856666565, 3.991225004196167, -0.4388599693775177, -0.9706416130065918, 9.19190502166748, 3.4547300338745117, 1.5505200624465942, 3.8297646045684814, -2.1353302001953125, -1.218308448791504, -1.7797008752822876, -2.5995984077453613, -1.367978572845459, 0.27616310119628906, 0.3187924325466156, -5.090645790100098, -0.8083189129829407, -3.6247811317443848, -2.1036736965179443, -1.3610713481903076, -0.054286811500787735, 0.16263972222805023, -1.2340954542160034, -3.1437277793884277, -1.874155879020691, -2.219064235687256, -1.5284968614578247, -1.4756200313568115, -1.6633855104446411, 1.2801142930984497, -0.875342845916748, -0.29891642928123474, 0.25260913372039795, -8.362515449523926, -1.1206303834915161, 0.06070593744516373, -1.862853765487671, -0.033583734184503555, -0.02431468665599823, -0.5189112424850464, -1.3375707864761353, -0.7346506714820862, -0.6322120428085327, 0.8534530401229858, -0.9359687566757202, 1.1447808742523193]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (1.37, 1.54)}}}
-  signatures["ElectronHighEnergyMediumConf"]={'et3_eta2': {'discriminator': {'threshold': 0.66999841928482051, 'nodes': [100, 5, 1], 'bias': [-0.048671018332242966, -0.15978042781352997, -0.11082698404788971, -0.16210871934890747, -0.17141708731651306, 0.19882182776927948], 'weights': [-0.3632931113243103, -0.01923835650086403, 1.1369900703430176, 0.6106459498405457, 1.1179195642471313, 0.8601119518280029, 0.15297159552574158, -1.2484897375106812, 0.04611027240753174, -1.791911244392395, -1.8554701805114746, -1.3258225917816162, -0.2647069990634918, -0.08365557342767715, 0.11529789865016937, -0.09376391023397446, 2.986898183822632, 0.04890431836247444, 0.14163194596767426, 1.3693817853927612, 2.7048888206481934, 1.698973536491394, -1.705853819847107, 1.041193962097168, 0.25598371028900146, 7.544079780578613, 2.643533945083618, 1.6536102294921875, 5.720820903778076, 1.3112801313400269, 0.4527432322502136, 1.1032109260559082, 0.40891873836517334, 0.6918326616287231, 1.7678627967834473, 1.2772915363311768, 3.531491756439209, 7.55782413482666, -1.8549127578735352, 0.25631117820739746, 1.107606053352356, 3.053387403488159, 1.3774820566177368, 1.091949462890625, -1.6798309087753296, 1.0967626571655273, 1.4026769399642944, -9.189362525939941, 0.7396649122238159, 2.7333266735076904, 0.7341042757034302, 1.249634027481079, 1.3394824266433716, 1.0249660015106201, 0.9889784455299377, 2.6513044834136963, 0.47440028190612793, 0.6699808239936829, -7.892445087432861, -0.20485791563987732, -3.0982911586761475, 0.60731041431427, -0.36252856254577637, 0.8766266107559204, 0.6254453659057617, 0.8613975644111633, -1.8762989044189453, 2.843782663345337, 1.9625056982040405, 9.164314270019531, 1.3218309879302979, 0.8237579464912415, -0.48010700941085815, -0.5016670823097229, 2.4927468299865723, 1.4995578527450562, 1.4353219270706177, 1.452754020690918, 1.2446411848068237, 1.4280821084976196, -0.2531065046787262, 0.4549713432788849, 1.59420907497406, 1.7902405261993408, 1.1301854848861694, 0.9125373959541321, 1.1771483421325684, 1.200839877128601, -0.8419439196586609, 0.8306178450584412, 0.6647038459777832, 0.048682115972042084, 0.8149041533470154, 2.753098726272583, -2.0759215354919434, 0.9654955267906189, -0.01617790013551712, -0.09517361968755722, 1.0762320756912231, -0.00576699199154973, 0.7799210548400879, -0.1299242228269577, -1.183490514755249, -0.5373464822769165, -1.0393232107162476, -0.5487764477729797, 0.013535041362047195, 1.2695026397705078, 0.010570468381047249, 3.1929681301116943, 1.6318724155426025, 1.809260368347168, 0.2041422426700592, 0.014497988857328892, 0.1008622869849205, 0.12331648170948029, -3.006898880004883, 0.006142372731119394, -0.10549131780862808, -0.5938358306884766, -2.7045400142669678, -0.7485429644584656, 1.7333658933639526, -1.156059980392456, -0.168192058801651, -7.555694103240967, -2.571162223815918, -1.6956462860107422, -5.67071008682251, -1.3260585069656372, -0.42301642894744873, -1.1530144214630127, -0.5906983017921448, -0.47045034170150757, -1.7386970520019531, -1.1423187255859375, -3.392827272415161, -7.625503063201904, -0.13216927647590637, -0.299122154712677, -1.0236870050430298, -1.4116584062576294, -1.517985224723816, -1.062925100326538, -0.5166425704956055, -1.2592618465423584, -1.3381396532058716, 1.5529818534851074, -0.6767204999923706, -2.6625189781188965, -0.8845092058181763, -1.424497127532959, -1.2011646032333374, -1.1535289287567139, -1.0405513048171997, -2.663351058959961, -0.6089074611663818, -0.6435121893882751, 7.84403133392334, 0.11479156464338303, 3.115651845932007, -0.36264458298683167, 0.4608149230480194, -0.7632660865783691, -0.42274901270866394, -0.9721015095710754, 1.8468523025512695, -2.7405776977539062, -1.9027326107025146, -9.037775039672852, -1.2557668685913086, -0.9182220101356506, 0.30087828636169434, 0.4215577244758606, -2.552516460418701, -1.33924400806427, -1.4397741556167603, -1.4536564350128174, -1.2354272603988647, -1.3639198541641235, 0.31734171509742737, -0.6018325686454773, -1.4667538404464722, -1.8258435726165771, -1.1674538850784302, -1.0748112201690674, -0.9866417050361633, -1.134459376335144, 0.7004688382148743, -0.9266799092292786, -0.6827194690704346, 0.05578913539648056, -0.9296520948410034, -2.9109840393066406, 2.0142033100128174, -1.1157033443450928, -0.014255393296480179, -0.0016610812162980437, -0.8850783705711365, -0.20304937660694122, 0.3480747640132904, -0.04769037291407585, -1.1761839389801025, -0.5469955205917358, -1.1071943044662476, -0.7038381695747375, 0.17196261882781982, 1.3797177076339722, -0.05204556882381439, 3.123474597930908, 1.79933500289917, 1.7915098667144775, 0.08041452616453171, -0.034891948103904724, -0.03786701709032059, -0.06639504432678223, -3.0744247436523438, -0.11333347856998444, -0.0804920494556427, -0.77297443151474, -2.6863858699798584, -0.7284291982650757, 1.696494460105896, -1.1224133968353271, -0.14744749665260315, -7.652820587158203, -2.5320777893066406, -1.823235273361206, -5.778429985046387, -1.3135641813278198, -0.5306881666183472, -1.1715729236602783, -0.5008342266082764, -0.5659509897232056, -1.771768569946289, -1.3576762676239014, -3.4060394763946533, -7.495283126831055, -0.24217566847801208, -0.37981462478637695, -1.2003105878829956, -1.3493379354476929, -1.3790780305862427, -1.1259262561798096, -0.49884796142578125, -1.2639484405517578, -1.3535021543502808, 1.2641304731369019, -0.7960184812545776, -2.6480181217193604, -0.8808931112289429, -1.2882907390594482, -1.1612993478775024, -1.181920051574707, -1.1080485582351685, -2.607605457305908, -0.49707499146461487, -0.6767892241477966, 8.009539604187012, 0.1237686350941658, 3.332219362258911, -0.3096736967563629, 0.4560976028442383, -0.6941847801208496, -0.4604146182537079, -1.0147546529769897, 1.9379265308380127, -2.7963199615478516, -1.8103015422821045, -9.05184268951416, -1.1548514366149902, -1.0072784423828125, 0.344266414642334, 0.4240301847457886, -2.467223882675171, -1.5154114961624146, -1.4371238946914673, -1.3788623809814453, -1.2288399934768677, -1.4854320287704468, 0.16928674280643463, -0.5867647528648376, -1.4471951723098755, -1.9388976097106934, -1.1759127378463745, -0.8853994011878967, -1.0390863418579102, -1.268436074256897, 0.8614676594734192, -0.8184821009635925, -0.5703690648078918, -0.038250721991062164, -0.7636191248893738, -2.8082151412963867, 1.9861506223678589, -0.9922001361846924, 0.05072460696101189, 0.06622473150491714, -1.0546678304672241, -0.05050240457057953, 0.7958235740661621, 0.014700939878821373, -1.0782191753387451, -0.6174961924552917, -1.1872469186782837, -0.5487807393074036, 0.10296972095966339, 1.364011287689209, -0.11685320734977722, 3.1712324619293213, 1.6476316452026367, 1.7377903461456299, 0.15083622932434082, -0.05724570155143738, -0.09545081853866577, -0.04088487848639488, -2.9213497638702393, -0.06669792532920837, 0.09497135877609253, -0.7412750124931335, -2.537299633026123, -0.6484242081642151, 1.8854727745056152, -1.103590726852417, -0.3239821195602417, -7.570978164672852, -2.684921979904175, -1.7028319835662842, -5.630488872528076, -1.3201934099197388, -0.5880939364433289, -1.0932011604309082, -0.4365180730819702, -0.53394615650177, -1.7553434371948242, -1.3648583889007568, -3.4526374340057373, -7.556405067443848, -0.03140399605035782, -0.25756001472473145, -1.2051204442977905, -1.2988239526748657, -1.5442034006118774, -1.068868637084961, -0.7043478488922119, -1.2529971599578857, -1.2794886827468872, 1.4453657865524292, -0.746985912322998, -2.6322014331817627, -0.6765123605728149, -1.3238325119018555, -1.299523949623108, -1.022221326828003, -1.1162136793136597, -2.6887047290802, -0.48919427394866943, -0.6041378378868103, 7.815181732177734, 0.045929841697216034, 3.164581060409546, -0.32777538895606995, 0.44807639718055725, -0.7889524698257446, -0.45506545901298523, -0.9977965950965881, 1.8274224996566772, -2.829014778137207, -1.8630194664001465, -8.960129737854004, -1.2989521026611328, -0.8311460614204407, 0.4950481057167053, 0.34846460819244385, -2.467694044113159, -1.5615752935409546, -1.510292649269104, -1.3138728141784668, -1.1023229360580444, -1.5010136365890503, 0.2586469352245331, -0.48952725529670715, -1.5068730115890503, -1.7541017532348633, -1.1526366472244263, -0.9617965221405029, -1.1690497398376465, -1.2287248373031616, 0.8491680026054382, -0.9091412425041199, -0.6170509457588196, -0.2096344530582428, -0.8809341192245483, -2.8543641567230225, 1.9536592960357666, -1.0956120491027832, 0.012979736551642418, -0.08532464504241943, -0.9571139216423035, -0.13241112232208252, 0.7505656480789185, -0.12238308787345886, -1.215778112411499, -0.744321882724762, -1.0964082479476929, -0.7366512417793274, 0.14085832238197327, 1.2977362871170044, 0.051823511719703674, 3.188023090362549, 1.658905029296875, 1.7734878063201904, 0.10579323023557663, 0.13964533805847168, -0.03720500320196152, 0.07405760884284973, -2.8514065742492676, 0.02813662588596344, -0.02393478713929653, -0.7721337676048279, -2.7159698009490967, -0.7076488733291626, 1.7448610067367554, -1.0958189964294434, -0.1937636435031891, -7.587071418762207, -2.7165181636810303, -1.7180616855621338, -5.784889221191406, -1.4275482892990112, -0.4315950274467468, -1.061868667602539, -0.4499662518501282, -0.5091215372085571, -1.6198458671569824, -1.2933523654937744, -3.384692668914795, -7.614009380340576, -0.02028832584619522, -0.25192928314208984, -1.2518190145492554, -1.5074256658554077, -1.50875985622406, -1.1547255516052246, -0.7219434380531311, -1.1534230709075928, -1.2445183992385864, 1.2667229175567627, -0.7835680246353149, -2.7220218181610107, -0.8801294565200806, -1.3080940246582031, -1.2175785303115845, -1.1354594230651855, -1.0985878705978394, -2.707531213760376, -0.3875346779823303, -0.6122236847877502, 8.012117385864258, -0.01269548013806343, 3.2801311016082764, -0.20533286035060883, 0.4266683757305145, -0.6927353143692017, -0.5387892723083496, -0.8895917534828186, 2.001030206680298, -2.8506782054901123, -1.8065345287322998, -9.006397247314453, -1.3208692073822021, -0.8154750466346741, 0.471169650554657, 0.3678755760192871, -2.543764591217041, -1.3720585107803345, -1.6222983598709106, -1.3490889072418213, -1.0855642557144165, -1.418610692024231, 0.3646010458469391, -0.44539517164230347, -1.402847170829773, -1.7971928119659424, -1.2276273965835571, -1.0711355209350586, -0.999976634979248, -1.207940697669983, 0.7376274466514587, -0.774124801158905, -0.6490070819854736, 0.02274652197957039, -0.854465901851654, -2.9136130809783936, 2.0538861751556396, -0.9218764305114746, 0.06782027333974838, -0.04248097911477089, -1.036033034324646, -0.026970257982611656, -0.1598840206861496, 2.7159435749053955, 3.600578784942627, 2.63897442817688, 2.504344940185547]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (1.37, 1.54)}}, 'et0_eta0': {'discriminator': {'threshold': -0.86000041961669926, 'nodes': [100, 6, 1], 'bias': [-0.01136678084731102, -0.1782160997390747, 0.054464004933834076, 0.04060710594058037, 0.07186396420001984, -0.1458592414855957, 0.30292394757270813], 'weights': [9.01987075805664, -0.03518577292561531, -0.46884268522262573, 0.15588437020778656, 0.31432536244392395, 1.1719588041305542, 0.621452808380127, -0.12481377273797989, 2.6661553382873535, 3.120647430419922, 20.042564392089844, 4.001049518585205, -0.4691924750804901, -4.405073642730713, -12.167277336120605, -4.039999961853027, -2.834879159927368, -4.690690040588379, -6.594064235687256, -3.0145294666290283, -4.962020397186279, -2.6768598556518555, -0.4535619616508484, -2.684878349304199, -2.111410140991211, -1.890016794204712, -2.464111328125, -2.4439945220947266, -2.3755640983581543, -2.397362470626831, -3.345147132873535, -1.345889687538147, -0.9984797239303589, -0.29491767287254333, -1.250179648399353, -21.641355514526367, -1.229132056236267, -1.5000431537628174, -1.8025377988815308, -1.0384272336959839, -16.716285705566406, -0.8255010843276978, -1.0276564359664917, -0.537658154964447, 0.2807220220565796, 0.57619309425354, -0.5989243388175964, -0.6295759081840515, -0.745419442653656, -0.8610708117485046, 0.3153530955314636, 21.523473739624023, 1.5775901079177856, -0.7692492008209229, -0.6981480121612549, -0.42572879791259766, -0.384321928024292, 0.09645713865756989, -0.46849438548088074, -0.6688112020492554, -0.37966063618659973, 1.7942391633987427, -0.5020682215690613, 0.17839659750461578, 0.7165035605430603, 0.3030983507633209, 0.39278408885002136, -0.41801556944847107, -0.7241864204406738, 0.4044226408004761, -0.18019112944602966, -3.6531472206115723, 1.939813256263733, 7.395075798034668, -0.4404732584953308, -1.0175961256027222, -1.206782579421997, -6.643551826477051, -3.6062512397766113, -4.67418098449707, -1.7125831842422485, -0.06102985143661499, -2.4709413051605225, -1.6413654088974, -1.4180688858032227, -1.5595781803131104, -1.1826645135879517, -0.5493459701538086, -2.8270368576049805, -1.0286604166030884, -5.24298620223999, -2.8239104747772217, -0.7543736696243286, -1.9295884370803833, -2.497220277786255, 0.4698377847671509, -2.427469491958618, -1.1779704093933105, -1.1535083055496216, 0.4579063355922699, 3.681973457336426, 0.8046421408653259, -0.49003419280052185, -0.20977216958999634, -0.10569418221712112, 0.5196964144706726, -0.038742005825042725, -0.019086414948105812, 3.136380910873413, 4.6013383865356445, 0.24897688627243042, -3.8071939945220947, -9.356066703796387, -5.3722004890441895, -9.773921012878418, -7.942467212677002, -9.558570861816406, -8.850022315979004, -7.337759494781494, -7.268890380859375, -3.1062941551208496, -3.7530319690704346, -2.819653272628784, -3.0603721141815186, -10.741296768188477, -2.474848747253418, -2.4643959999084473, -2.3311655521392822, -2.493574857711792, -3.0792882442474365, -5.52104377746582, -2.0570449829101562, -1.7622098922729492, -3.4724388122558594, -0.6378179788589478, -1.331749439239502, -1.3443167209625244, -1.5802240371704102, -1.4302741289138794, -0.6937366724014282, -1.29665207862854, -0.5291470885276794, -1.0695449113845825, -0.8558090329170227, -0.0695672556757927, -1.08797287940979, -0.4912714660167694, -0.7099616527557373, -0.6885566115379333, -0.7720600366592407, 0.19422847032546997, -2.0356953144073486, -1.2078481912612915, -0.7959491014480591, -0.733663022518158, -0.1765640825033188, -0.5480073094367981, 0.1288779377937317, 1.3124580383300781, -0.5015966892242432, -0.22093239426612854, 0.49837827682495117, -0.21850049495697021, -0.1739213913679123, 1.0254299640655518, 0.1101001426577568, 0.4242246150970459, -0.3589154779911041, -0.339095801115036, 1.0370818376541138, -0.0009136381559073925, -0.06344874203205109, 0.3598265051841736, -0.15946713089942932, -0.7707175016403198, -2.1223952770233154, -1.8511649370193481, -1.8694562911987305, -1.2677456140518188, -0.7573164701461792, -16.54351806640625, -6.4279866218566895, -3.00040864944458, -1.7074041366577148, -1.2595458030700684, -1.4322413206100464, -1.1505391597747803, -0.33996301889419556, -7.54207706451416, -3.8208913803100586, -1.3557288646697998, 0.39237499237060547, -6.8621625900268555, -4.759374141693115, -0.7991504669189453, 0.5344062447547913, -2.4636857509613037, -0.8247212171554565, -0.8689799904823303, 0.40556246042251587, -2.2983672618865967, -0.40858766436576843, -0.1691615879535675, -0.05508086457848549, -0.18790024518966675, -0.23666058480739594, -0.16220496594905853, -0.15269269049167633, -0.23917309939861298, -2.0612709522247314, -0.3885083794593811, -0.25118622183799744, 2.0046181678771973, 6.578591346740723, -2.2192814350128174, -0.31168967485427856, -2.1611480712890625, -1.8496649265289307, -1.2020740509033203, -1.6346501111984253, -0.21165145933628082, -0.1735413521528244, -0.28899896144866943, -0.029980747029185295, 0.0648520290851593, 0.10884208977222443, -0.17157121002674103, -1.1487562656402588, -0.8360415101051331, -0.04847188666462898, 0.9123522043228149, -0.633462131023407, -0.26276636123657227, -0.07286661118268967, -0.22363461554050446, -0.4531567394733429, -1.063921332359314, -0.07878665626049042, -0.023129576817154884, -0.14414668083190918, 0.05295134708285332, -0.40469470620155334, -0.3811474144458771, 0.015043376013636589, -1.1566005945205688, -0.05888320878148079, -0.12097274512052536, -0.01265923772007227, -0.10554582625627518, -0.12560421228408813, -0.38562315702438354, -0.11268538981676102, -0.001007283921353519, 0.07936564832925797, -0.06253787130117416, -0.13419751822948456, -0.07085855305194855, -0.0798681303858757, -0.15192435681819916, -0.06100115925073624, -0.017935331910848618, -0.8524407148361206, -0.028408104553818703, -0.005268263630568981, -0.1929444819688797, -0.019991155713796616, -0.22417044639587402, -0.009491882286965847, -0.21192045509815216, -0.10742053389549255, 0.024758635088801384, -0.0636126771569252, -0.35273227095603943, -0.2769015431404114, 0.8114498853683472, -0.7977434992790222, -0.18997128307819366, -1.1608176231384277, -0.360253244638443, -0.4729072153568268, 3.8734652996063232, -5.678352355957031, -0.2599145174026489, -0.5669599175453186, -0.23816123604774475, -0.010319755412638187, -0.08687549829483032, -0.05709803104400635, -2.598600387573242, -3.256776809692383, -0.4089433252811432, -0.028902392834424973, -5.788078308105469, -2.420192003250122, -0.19718678295612335, -0.35650065541267395, 0.050737980753183365, -1.4753522872924805, -0.060320205986499786, -0.16610264778137207, -4.135383605957031, -0.1069088950753212, 0.362106591463089, 0.17960122227668762, 0.14129745960235596, -0.48702356219291687, 0.1761319786310196, 0.05973678082227707, -3.193812131881714, -2.102048635482788, -0.27130937576293945, 6.771458148956299, 8.337845802307129, 4.801966667175293, 9.312788963317871, 7.583322525024414, 6.088551998138428, 6.638938903808594, 10.206466674804688, 6.823215961456299, 3.1751976013183594, 2.9218509197235107, 3.3843002319335938, 2.9952006340026855, 3.364917755126953, 2.5241050720214844, 2.353303909301758, 2.5631401538848877, 2.436708450317383, 2.7848753929138184, 3.227890968322754, 1.6638038158416748, 1.670957326889038, 3.5906875133514404, 0.7348370552062988, 1.4496045112609863, 1.2641363143920898, 1.5086523294448853, 1.499687910079956, 1.119602084159851, 1.1404856443405151, 1.035091519355774, 1.160691738128662, 0.9853762984275818, 0.023800093680620193, 0.909044623374939, 0.6199456453323364, 0.6726546287536621, 0.824012279510498, 0.9742962718009949, -0.3959726095199585, 1.8761155605316162, 1.0572471618652344, 0.8336468935012817, 0.7681624889373779, 0.3390689194202423, 0.54653000831604, -0.22937266528606415, -1.015300989151001, 0.5612056851387024, 0.19758827984333038, -1.6588265895843506, 0.3724830448627472, 0.15912692248821259, -0.8954120874404907, -0.15293125808238983, -0.619022011756897, 0.6916226148605347, 0.5226624608039856, -1.0737968683242798, -0.0770862028002739, -0.13126160204410553, -0.5001769065856934, -0.045417748391628265, 0.5876344442367554, 2.2558538913726807, 2.401465892791748, 1.823835015296936, 1.0194467306137085, 0.6076213121414185, 3.994291067123413, 6.166980743408203, 3.8464877605438232, 1.332905650138855, 1.229944109916687, 1.4130218029022217, 1.0766500234603882, 0.41440293192863464, 3.074331760406494, 5.47773551940918, 0.7946798801422119, -0.2935554087162018, 12.233807563781738, 3.601130247116089, 0.7054237723350525, -0.47403693199157715, 2.435894012451172, 0.7125208377838135, 1.0286706686019897, -0.28793734312057495, -3.9683053493499756, -0.14426389336585999, 0.4341489374637604, 0.1832311898469925, 0.20478136837482452, -0.3127519190311432, 0.0590548999607563, -0.00019025674555450678, -3.245378255844116, -2.1758551597595215, -0.456599622964859, 6.952091217041016, 8.26875114440918, 4.635740280151367, 9.365004539489746, 7.7002458572387695, 6.121082782745361, 7.563103199005127, 10.276198387145996, 6.908629417419434, 3.0921669006347656, 2.9263715744018555, 3.385561466217041, 2.936856269836426, 3.1792619228363037, 2.511370897293091, 2.35496187210083, 2.3895580768585205, 2.4292025566101074, 2.909292221069336, 3.2825124263763428, 1.4810638427734375, 1.6027350425720215, 3.62443470954895, 0.7888603210449219, 1.4236286878585815, 1.2817354202270508, 1.4375942945480347, 1.6879193782806396, 1.0937803983688354, 1.2003239393234253, 1.0144010782241821, 1.0534071922302246, 0.9542540907859802, 0.07949057221412659, 0.806453287601471, 0.46324774622917175, 0.5182538032531738, 0.8175613880157471, 0.8954757452011108, -0.22423702478408813, 1.7782195806503296, 1.2254350185394287, 0.7767571210861206, 0.7505975961685181, 0.31346067786216736, 0.48678913712501526, -0.23716974258422852, -0.9710901379585266, 0.48548635840415955, 0.19500727951526642, -1.652909278869629, 0.3563382625579834, 0.0732271820306778, -0.863884687423706, -0.10678214579820633, -0.4851662814617157, 0.7486752271652222, 0.4894939363002777, -1.0258220434188843, -0.05377648025751114, -0.09645101428031921, -0.48305970430374146, -0.12129934132099152, 0.5895178318023682, 2.109104871749878, 2.2148983478546143, 1.6714695692062378, 0.9397296905517578, 0.6571053862571716, 4.008462905883789, 8.20163631439209, 4.04057502746582, 1.668599009513855, 1.2664713859558105, 1.3478388786315918, 1.2298848628997803, 0.3989931046962738, 3.008673667907715, 5.428922176361084, 0.9467208981513977, -0.36967578530311584, 14.033687591552734, 3.659334182739258, 0.7833492755889893, -0.474465936422348, 2.366950511932373, 0.9190989136695862, 1.070186972618103, -0.3821124732494354, 3.0633015632629395, 0.8150948882102966, -0.41906359791755676, -0.20512688159942627, -0.5525700449943542, 0.36142969131469727, 0.03444362059235573, -0.12303842604160309, 2.5672919750213623, 5.61810302734375, -0.05225738510489464, -3.5295486450195312, -9.482361793518066, -5.27308464050293, -10.127195358276367, -8.47729778289795, -9.685062408447266, -8.817888259887695, -7.538350582122803, -10.319197654724121, -3.1412336826324463, -3.7200396060943604, -2.7665517330169678, -2.7302675247192383, -5.089662551879883, -2.6372063159942627, -2.277743101119995, -2.2320876121520996, -2.3880703449249268, -3.054008960723877, -6.318255424499512, -1.9425923824310303, -1.7222853899002075, -3.4248640537261963, -0.7689271569252014, -1.4545224905014038, -1.285597324371338, -1.3321398496627808, -1.5888707637786865, -1.2224270105361938, -3.181523323059082, -0.8500968813896179, -1.0883302688598633, -0.8908826112747192, 0.05608029291033745, -1.0544918775558472, -0.6303791999816895, -0.5882346630096436, -0.8089964389801025, -0.87647545337677, 0.2349333018064499, -2.088914394378662, -1.0309410095214844, -0.9465101361274719, -0.7140549421310425, -0.36977818608283997, -0.5340608954429626, 0.3402877151966095, 1.2501572370529175, -0.6743406653404236, -0.22704602777957916, 1.7960454225540161, -0.026403190568089485, -0.1975802779197693, 0.9950613379478455, 0.1580113172531128, 0.587617039680481, -0.3259707987308502, -0.3312339186668396, 0.980118989944458, 0.06564810872077942, 0.058355655521154404, 0.8956661224365234, -0.10214731842279434, -0.694542407989502, -2.2803661823272705, -1.758186936378479, -2.7518928050994873, -1.3518487215042114, -0.61531662940979, -15.511337280273438, -8.048812866210938, -3.084141492843628, -1.6935824155807495, -1.217545509338379, -1.4837414026260376, -1.0506166219711304, -0.36436375975608826, -8.56169605255127, -5.784923076629639, -0.8517770171165466, 0.25702813267707825, -5.408534526824951, -4.901888370513916, -0.86708003282547, 0.47227075695991516, -2.4072721004486084, -0.7340108156204224, -0.8928924202919006, 0.4653438925743103, -0.37404778599739075, 0.8757453560829163, -1.8297946453094482, -0.6319535970687866, -0.358705073595047, 0.7328855991363525]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (0, 0.8)}}, 'et0_eta1': {'discriminator': {'threshold': -0.75000052452087407, 'nodes': [100, 5, 1], 'bias': [0.13810545206069946, -0.18201099336147308, 0.021036244928836823, -0.009202640503644943, 0.07187016308307648, 0.46104055643081665], 'weights': [-1.8925094604492188, -1.2238150835037231, 0.6562626361846924, 0.9511800408363342, 0.36389872431755066, 0.6864233613014221, 0.18824709951877594, -0.2274571657180786, -1.6624797582626343, -5.2217116355896, -1.4616903066635132, -0.5122133493423462, 5.8331427574157715, 1.8483517169952393, 20.57921028137207, 7.102513790130615, 7.527975082397461, 5.936316013336182, 14.643430709838867, 6.8599138259887695, 9.316164016723633, 7.187514781951904, 4.620754241943359, 3.413209915161133, 6.658180236816406, 4.85620641708374, 4.100029945373535, 5.566649436950684, 3.731907844543457, 3.060131072998047, 4.659031867980957, 5.583804607391357, 2.7307114601135254, 2.994131088256836, 8.642337799072266, 2.289883613586426, 0.6494693160057068, 2.0231640338897705, 1.0012233257293701, 1.081325888633728, -0.5261492133140564, 0.3800708055496216, 0.34528055787086487, 6.915417194366455, -1.0193991661071777, -0.14056496322155, -0.09725432842969894, -0.173580139875412, -2.483555555343628, 0.9920685291290283, -0.26640722155570984, 0.3975827693939209, -0.25772494077682495, 1.210814356803894, 0.9771003723144531, -0.8578104376792908, 0.3760906159877777, 0.8532245755195618, 0.27929580211639404, 1.2646905183792114, 0.3316922187805176, 0.9337028861045837, 0.1462925225496292, -0.3613526225090027, 0.5072650909423828, 1.0561286211013794, 0.22868841886520386, 0.1604975163936615, 0.17903226613998413, 0.7918182015419006, -0.3503126800060272, 0.45072266459465027, -0.20369163155555725, -0.2662750482559204, 0.49260711669921875, 2.1276614665985107, 4.565790176391602, 2.230461359024048, 1.02570378780365, 0.07946263998746872, 11.287789344787598, 11.458906173706055, 7.035044193267822, 3.392335891723633, 1.8007370233535767, 1.7647638320922852, 2.2105367183685303, 2.268641948699951, 2.29552960395813, 1.3446894884109497, 0.20554538071155548, -0.26203346252441406, 4.533621788024902, 5.401577949523926, 0.4493290185928345, -0.024416958913207054, -2.289726734161377, 1.5831325054168701, 1.9929925203323364, 0.2930375337600708, 1.952457308769226, 1.2462477684020996, -1.0876314640045166, -0.9175639152526855, -0.32505589723587036, -0.7088087797164917, -0.1336529403924942, 0.3321419060230255, 2.536004066467285, 5.79353141784668, 1.459064245223999, 0.33216339349746704, -14.200791358947754, -1.8836852312088013, -7.968325138092041, -6.980250358581543, -5.158376216888428, -5.871337413787842, -9.588560104370117, -6.664106369018555, -5.1132612228393555, -7.1706647872924805, -4.576247215270996, -2.6326558589935303, -4.7970709800720215, -3.771188259124756, -3.8895199298858643, -5.623331546783447, -3.0061848163604736, -2.9450266361236572, -4.479562282562256, -5.576552391052246, -2.870198965072632, -3.0367915630340576, -3.4783716201782227, -2.390235185623169, -0.5095173120498657, -1.5458441972732544, -1.0594172477722168, -3.532752752304077, 0.49488940834999084, -0.3730463981628418, -0.4775383770465851, -1.6226712465286255, 1.2465732097625732, 0.1816977709531784, 0.052189912647008896, 0.2135578989982605, 2.517794609069824, -0.9796221256256104, 0.19435077905654907, -0.3447989225387573, 0.26036354899406433, -1.0289835929870605, -0.6525987386703491, 0.8082085847854614, -0.24394521117210388, -0.29113930463790894, -0.3918320834636688, -1.1734482049942017, -0.38091614842414856, -0.8932517766952515, -0.3040578365325928, 0.42996177077293396, -0.5035845041275024, -0.901124119758606, -0.24702927470207214, -0.03485172614455223, -0.039679765701293945, -0.8138376474380493, 0.787928581237793, -0.34799909591674805, 0.2127179205417633, 0.08500823378562927, -0.49812158942222595, -2.0146515369415283, -2.5852603912353516, -2.0965754985809326, -0.6987488269805908, -0.157260924577713, -11.415349960327148, -8.285144805908203, -6.790378093719482, -4.310431957244873, -1.3116488456726074, -1.6353237628936768, -1.6259948015213013, -3.199120283126831, -5.152630805969238, -2.2409863471984863, -0.2359311282634735, 0.18523359298706055, -9.14281177520752, -4.135699272155762, -0.3192756175994873, -0.08470670878887177, 0.24450591206550598, -5.539525985717773, -1.854263424873352, -0.1801915019750595, -1.8780862092971802, -1.2834389209747314, 0.7041327953338623, 1.0591145753860474, 0.4457995593547821, 0.5730429887771606, 2.018894672393799, -0.039033442735672, -2.2105350494384766, -5.289902210235596, -1.3138792514801025, -0.5064011216163635, 8.338859558105469, 6.455643653869629, 20.42310905456543, 7.121894359588623, 6.050099849700928, 7.905551433563232, 14.820043563842773, 7.19402551651001, 9.163422584533691, 7.031611442565918, 4.7066168785095215, 3.2067506313323975, 6.8134307861328125, 4.760343551635742, 4.175156593322754, 5.316094398498535, 2.9997072219848633, 2.9315690994262695, 5.05702018737793, 5.6292829513549805, 2.824653387069702, 3.010867118835449, 9.389309883117676, 2.191251516342163, 0.5466648936271667, 2.022000312805176, 1.1206458806991577, 2.507119655609131, -0.04510550945997238, 0.32944920659065247, 0.4817630648612976, 1.4827300310134888, -1.1729286909103394, -0.14405271410942078, -0.1474020630121231, -0.11235252767801285, -2.3419976234436035, 1.054763674736023, -0.2517300546169281, 0.45212826132774353, -0.3218640983104706, 1.0747690200805664, 1.0433205366134644, -0.9130086302757263, 0.40176406502723694, 0.9110763669013977, 0.2630470395088196, 1.3611962795257568, 0.5164622068405151, 0.7935552000999451, 0.2779427170753479, -0.3644547760486603, 0.37541812658309937, 0.8469223380088806, 0.11413981765508652, 0.4625149071216583, 0.19138678908348083, 0.9879692196846008, -0.8283549547195435, 0.3583611845970154, -1.2395589351654053, -0.20304115116596222, 1.4783496856689453, 2.1369123458862305, 3.2162489891052246, 2.189713716506958, 1.1040245294570923, 0.06041760370135307, 17.903512954711914, 11.216879844665527, 5.829072952270508, 2.9720444679260254, 1.7591387033462524, 1.8255236148834229, 2.283552408218384, 3.0886728763580322, 3.9979867935180664, 5.058059215545654, 0.2873322069644928, -0.2054530382156372, 2.1999025344848633, 4.702675819396973, 0.6885371208190918, 0.03910418227314949, -2.3075804710388184, 1.5203689336776733, 1.6801518201828003, 0.2807612717151642, -19.431434631347656, -0.7079209685325623, 2.009190797805786, 6.4891791343688965, 7.062210559844971, 0.6609626412391663, -1.3742560148239136, -0.17222720384597778, -27.03448486328125, -61.39654541015625, -5.1306376457214355, -6.9397125244140625, 8.774383544921875, -1.95246422290802, 60.87514877319336, 20.223072052001953, 9.3819580078125, 38.12455368041992, 18.46353530883789, 7.2530412673950195, -2.2757513523101807, -29.10565185546875, 19.837278366088867, 13.1071195602417, 5.815578937530518, 0.5362417697906494, 7.16448974609375, 53.5877799987793, 3.04994535446167, 0.8775137066841125, 3.0282115936279297, 18.61113739013672, 13.23752498626709, 5.090209007263184, 67.30415344238281, 33.3084831237793, 6.271228313446045, 3.4189741611480713, 1.6367242336273193, 38.8242301940918, 0.3753618001937866, 0.8644266128540039, 1.065105676651001, 1.6667332649230957, -0.2638069689273834, 58.8161735534668, 4.232236385345459, 75.44316101074219, -3.066237211227417, 0.5389311909675598, -0.266434907913208, 0.47315940260887146, 0.9555960893630981, 1.1678986549377441, 0.7565997242927551, -0.7215517163276672, 0.18236379325389862, 0.5382163524627686, 0.31355616450309753, 1.0017755031585693, 1.3976796865463257, 1.2884217500686646, 0.2909504175186157, -0.22075514495372772, 0.546885073184967, 0.880285918712616, 0.242771178483963, 0.36143794655799866, 0.13656610250473022, 1.0381686687469482, -0.6763685345649719, 0.30215805768966675, -12.381731033325195, -8.0579195022583, 6.540484428405762, 2.4167001247406006, 4.042524337768555, 15.822314262390137, 2.4656457901000977, 10.052105903625488, 8.63068675994873, 36.50438690185547, 3.510387420654297, 5.914213180541992, 14.6420316696167, 43.4828987121582, 2.3191707134246826, 0.3620098829269409, 6.536006450653076, 1.9789578914642334, 0.37560588121414185, -3.4471843242645264, 1.8010627031326294, 2.6052134037017822, 20.492565155029297, -0.0290924571454525, 0.09737208485603333, 8.648964881896973, 1.8274562358856201, 0.14330635964870453, -0.9631259441375732, -1.3539581298828125, -0.07848529517650604, -0.04655064269900322, -0.16150283813476562, -0.20293954014778137, -0.19901928305625916, -0.2585231065750122, -0.6610293388366699, -2.7294886112213135, -0.8143680691719055, -0.2913510501384735, 2.6277952194213867, 12.974698066711426, -2.7927517890930176, 2.4714112281799316, 1.9590502977371216, 1.6951347589492798, -0.5213738679885864, -3.7651565074920654, -1.9073591232299805, -0.2620479166507721, -0.5145399570465088, -0.7107497453689575, 0.07638556510210037, -0.22756987810134888, -0.10972726345062256, 0.2400413453578949, 0.2121530920267105, -0.0002191988460253924, -0.8328074216842651, -0.07249060273170471, -0.9831439256668091, -0.0514051727950573, -0.25581061840057373, 0.07119639962911606, -0.6884536147117615, -0.09830063581466675, -0.024550490081310272, -0.16045953333377838, -0.43433311581611633, -0.24456320703029633, -0.41793352365493774, -0.3608315587043762, -0.36864084005355835, -0.4849030673503876, -0.1755562126636505, -0.40205124020576477, -0.299599826335907, -0.16571997106075287, -0.3376643657684326, -0.20545193552970886, -0.26081135869026184, -0.015347293578088284, -0.13775987923145294, -0.5051273703575134, -0.09726136177778244, -0.06344534456729889, -0.20437148213386536, 0.03775722160935402, -0.007660008035600185, 0.0008244303753599524, -0.23009449243545532, -0.25706928968429565, -0.18932904303073883, -0.15042315423488617, -0.03665834292769432, -0.12307917326688766, -0.14365243911743164, -0.0026790336705744267, -0.20218591392040253, -0.1664867103099823, -0.2635151743888855, -0.23800744116306305, 0.4642724096775055, -0.8392537832260132, -2.3402488231658936, -1.4726476669311523, -0.2590694725513458, -0.32754141092300415, -0.541354238986969, -0.5725244879722595, -5.093498229980469, -1.117193579673767, -0.7368503212928772, -0.34520789980888367, 0.061895254999399185, -0.038676101714372635, -2.568580389022827, -2.366105556488037, 0.035846397280693054, -0.07814716547727585, -6.107456207275391, -4.432236671447754, -0.25411027669906616, -0.9613468647003174, -0.6015036106109619, -1.5356148481369019, 0.030305882915854454, -0.3353346884250641, -1.0183240175247192, 1.2881017923355103, -0.5610806941986084, 0.3517586290836334, -1.7679719924926758]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (0.8, 1.37)}}, 'et1_eta1': {'discriminator': {'threshold': 0.019999039173126232, 'nodes': [100, 6, 1], 'bias': [0.10486491769552231, -0.12511692941188812, -0.15801553428173065, 0.19460082054138184, 0.19272653758525848, -0.19290275871753693, 0.21625825762748718], 'weights': [-24.875232696533203, -35.52052307128906, -1.6133642196655273, -0.008624027483165264, -0.05626048892736435, -0.3086847960948944, -0.020699650049209595, -0.36371681094169617, -0.7491006851196289, 9.88141918182373, 3.7016844749450684, 47.948612213134766, 29.423078536987305, 3.0021779537200928, 2.617471218109131, 1.5538839101791382, 1.6353963613510132, 1.3132680654525757, 8.18600845336914, 3.481529474258423, 2.213709831237793, 2.721906900405884, 1.4094911813735962, 1.842166781425476, 2.055157423019409, 1.02581787109375, -32.34109115600586, 0.5193427205085754, 1.0854448080062866, 0.7986941337585449, 0.7937002778053284, -39.9202995300293, 0.6154786944389343, 1.2842981815338135, 0.8223607540130615, 0.35938817262649536, 0.27384892106056213, 0.3549516201019287, 1.0272786617279053, 0.556393027305603, 0.9667421579360962, -27.509204864501953, 0.6893214583396912, -0.22417894005775452, 0.18357644975185394, -0.03378888964653015, 0.2211812287569046, 0.0843660831451416, 0.870056688785553, 0.9310393929481506, -41.212486267089844, -7.586906909942627, 0.02240859530866146, -0.34544894099235535, -0.013609317131340504, 0.05311030149459839, 0.39030352234840393, -2.412696123123169, 0.323057621717453, -0.0783422514796257, 0.420240581035614, 0.30666735768318176, -0.010727977380156517, -0.2036086767911911, -0.939023494720459, -14.801352500915527, 0.0008461455581709743, -0.320068895816803, 0.18558304011821747, -0.7366596460342407, -0.5172358155250549, -1.1228679418563843, -0.8335043787956238, -0.0874503031373024, 0.17609955370426178, 1.084976315498352, 0.3574119806289673, 0.28965112566947937, 0.5148221850395203, -4.263965129852295, 7.01619291305542, 2.117969512939453, 1.4213595390319824, 0.7547821998596191, 0.8998038172721863, 0.4079223573207855, 0.6221122145652771, 0.6246194839477539, 0.6907567977905273, 0.34567877650260925, 0.04977800324559212, -1.0399022102355957, 1.166904330253601, 0.7002080082893372, 0.20356878638267517, -0.2037377655506134, 0.9589799046516418, -0.1373915672302246, 0.1627029925584793, 0.13170559704303741, 2.0245139598846436, 0.8271703720092773, -0.22186963260173798, -0.5199185609817505, -0.5545067191123962, -0.7945814728736877, -0.09759623557329178, 0.5519661903381348, 2.107658863067627, 5.196192264556885, 0.636294960975647, -5.638603210449219, -3.7636923789978027, -7.1080121994018555, -5.876524925231934, -4.993096351623535, -7.033196926116943, -4.254160404205322, -3.846722364425659, -9.72186279296875, -6.007926940917969, -5.542205333709717, -3.613792657852173, -4.872674465179443, -4.930007457733154, -3.872875690460205, -3.002730369567871, -1.7604550123214722, -2.6564693450927734, -4.5585126876831055, -3.900041341781616, -1.9911246299743652, -2.1886584758758545, -2.9386982917785645, -2.142312526702881, -1.4066506624221802, -0.9322798848152161, -1.4100180864334106, -2.4112284183502197, -1.2949612140655518, -2.606065511703491, -2.0816357135772705, -1.8875538110733032, 0.3693794310092926, -0.11105670034885406, -0.11997859179973602, -0.9382053017616272, 0.05954858288168907, -1.991539716720581, -2.060246467590332, -0.9869577288627625, -1.0988168716430664, -0.13669247925281525, -0.1764475703239441, 0.3320315182209015, -0.4457632899284363, -0.972248911857605, -2.120349884033203, -0.877682626247406, -0.0973014310002327, -0.44584837555885315, -0.8447644114494324, 0.1244892030954361, 0.3315380811691284, -0.1593199521303177, -1.2802783250808716, -0.8253623247146606, 0.5115103125572205, -0.33466649055480957, 1.0827850103378296, 0.6420692801475525, 2.7061526775360107, 0.385178804397583, 0.24092887341976166, -0.592490553855896, -2.7468035221099854, -1.1873877048492432, -1.0082688331604004, 0.2514231204986572, -0.18529607355594635, -10.175785064697266, -6.061328411102295, -3.4879937171936035, -2.02803897857666, -2.090017080307007, -1.4665274620056152, -1.8255035877227783, -1.5488629341125488, -1.5534313917160034, -0.9540573358535767, -0.01422670017927885, 0.1602276712656021, -3.031005859375, -2.1862339973449707, -0.614523708820343, 0.27786076068878174, -2.9442219734191895, -1.6134992837905884, -0.8152170777320862, -0.36227500438690186, 2.0914957523345947, 0.8605437874794006, -0.21348552405834198, -0.42250150442123413, -0.4221906065940857, -0.7759079337120056, -0.09413494169712067, 0.7776044607162476, 2.0629820823669434, 5.058802127838135, 0.6398661732673645, -5.7220234870910645, -3.8140790462493896, -7.059181213378906, -6.043213844299316, -4.332267761230469, -7.06245756149292, -4.410898208618164, -3.8616888523101807, -8.815730094909668, -6.082442283630371, -5.471698760986328, -3.761535882949829, -4.784187316894531, -5.023107528686523, -4.105536460876465, -3.0269956588745117, -1.7105648517608643, -2.7417643070220947, -4.617550373077393, -4.103362083435059, -2.0788066387176514, -2.2058041095733643, -2.8836936950683594, -2.062774181365967, -1.3000037670135498, -1.1085129976272583, -1.3346741199493408, -2.3267407417297363, -1.2659637928009033, -2.6595935821533203, -1.9944506883621216, -1.933461308479309, 0.2566291391849518, -0.22493742406368256, -0.10066007077693939, -0.9923979640007019, 0.16629832983016968, -2.091920852661133, -2.1379387378692627, -1.9406322240829468, -1.2982583045959473, -0.1721581220626831, -0.1789523810148239, 0.22955913841724396, -0.3632001280784607, -0.95749831199646, -1.9993577003479004, -0.7545385360717773, 0.05745566636323929, -1.3660675287246704, -0.6751365065574646, 0.28486204147338867, 0.33897238969802856, -0.18478795886039734, -1.2895563840866089, -1.054251790046692, 0.5599813461303711, -0.5184959769248962, 1.0679672956466675, 0.41148513555526733, 2.236036777496338, 0.4061366319656372, 0.272536963224411, -0.7011982202529907, -0.6965756416320801, -1.3738293647766113, -0.9214045405387878, -1.2908315658569336, 0.002735928865149617, -10.121125221252441, -6.16944694519043, -3.2490994930267334, -2.747593879699707, -2.122638463973999, -1.343381404876709, -1.9829074144363403, -1.558193564414978, -1.554426908493042, -0.9791358113288879, -0.1586589217185974, 0.22117124497890472, -3.136153221130371, -2.1134538650512695, -0.5171348452568054, 0.13903111219406128, -3.1306419372558594, -1.8257617950439453, -0.6556441187858582, -0.48264211416244507, -0.4650673270225525, -2.025869369506836, -0.08367107063531876, 0.06120254099369049, 0.1299218237400055, 0.304646372795105, 0.024342473596334457, -0.47125324606895447, -0.655540943145752, -2.0782227516174316, -0.9083961248397827, 3.9407615661621094, 16.185447692871094, 2.990055799484253, 2.026270627975464, 1.4965132474899292, 2.0964038372039795, 1.7466181516647339, 14.329285621643066, 3.412203788757324, 2.1346399784088135, 2.927086353302002, 1.5311397314071655, 2.0526013374328613, 2.0255112648010254, 1.7447408437728882, 1.3085241317749023, 0.6297897100448608, 1.064219355583191, 0.968110978603363, 1.0392800569534302, 0.6658504605293274, 0.634518563747406, 0.7891107201576233, 0.9030886292457581, 0.5654179453849792, 0.22177866101264954, 0.46843838691711426, 0.8789970874786377, 0.29611310362815857, 1.1163743734359741, 0.8881351351737976, 0.7998219728469849, -0.3377310633659363, 0.03779512643814087, -0.003236232791095972, 0.2820183336734772, -0.1648709625005722, 0.15052199363708496, 1.0259461402893066, 0.41772717237472534, 0.19212758541107178, 0.01985853537917137, 0.08016595244407654, 0.10540862381458282, 0.18772593140602112, 0.445149302482605, 0.9478403329849243, 0.14493513107299805, -0.04540832340717316, 0.07517718523740768, 0.26397761702537537, -0.12919968366622925, -0.09367705136537552, -0.06310030817985535, 0.5289011001586914, 0.07312864065170288, -0.18277166783809662, 0.13392755389213562, -0.5700629353523254, -0.6822415590286255, -1.121700406074524, -0.819206714630127, -0.6899083852767944, 0.06360030174255371, 1.2203261852264404, 0.5286192297935486, 0.4246649742126465, 0.608282208442688, 0.169428288936615, 5.529989719390869, 0.22635023295879364, 1.2797627449035645, 0.641566276550293, 0.7311424016952515, 0.6146060228347778, 0.6039493083953857, 0.7468789219856262, 0.5795114040374756, 0.14851737022399902, 0.003916430752724409, -0.8177333474159241, 1.1558339595794678, 0.8150486350059509, 0.28721505403518677, -0.08295724540948868, 0.8663042783737183, -0.12019255012273788, 0.21481435000896454, -0.006899334955960512, -1.9006359577178955, -0.930885374546051, 0.2417631298303604, 0.4728584885597229, 0.35391226410865784, 0.5776044726371765, 0.05797308683395386, -0.6158409118652344, -2.571823835372925, -5.077270984649658, -0.6109508275985718, 5.852639675140381, 3.8164560794830322, 7.093533039093018, 5.847262859344482, 4.422942638397217, 7.051522731781006, 4.403559684753418, 3.741119146347046, 8.884323120117188, 6.005716800689697, 5.438824653625488, 3.7669293880462646, 4.6668925285339355, 4.958282470703125, 4.039247512817383, 3.050180673599243, 1.744162917137146, 2.618724822998047, 4.599602699279785, 3.1491522789001465, 1.8947088718414307, 2.128077507019043, 2.850562572479248, 2.1813929080963135, 1.4062283039093018, 0.968116819858551, 1.4218378067016602, 2.3448917865753174, 1.3854869604110718, 2.4763386249542236, 1.6235952377319336, 1.926133632659912, -0.18555384874343872, 0.3139816224575043, 0.1395268440246582, 0.9016680121421814, -0.47601744532585144, 0.47541648149490356, 2.1785831451416016, 0.6198124289512634, 1.2655575275421143, 0.15374556183815002, -0.022515274584293365, -0.2487664520740509, 0.3061142563819885, 1.0221470594406128, 1.9954326152801514, 0.7287238836288452, 0.11155026406049728, 0.31069719791412354, 0.8503714799880981, -0.2865869104862213, -0.21749991178512573, 0.07167358696460724, 1.154962182044983, 0.6785088777542114, -0.5581897497177124, 0.46549561619758606, -1.0355132818222046, -0.6002509593963623, -2.211726665496826, -0.38301149010658264, -0.15297500789165497, 0.7663475871086121, 0.5997673273086548, 1.2928448915481567, 0.9078907370567322, -0.08547566086053848, -0.061220988631248474, 7.299069404602051, 5.294886589050293, 3.4102556705474854, 1.757995843887329, 2.118530035018921, 1.4748600721359253, 1.9860522747039795, 1.3780364990234375, 1.6924394369125366, 0.9677131175994873, 0.159409761428833, -0.10508045554161072, 3.048171281814575, 2.0720133781433105, 0.5233007073402405, -0.08477571606636047, 3.0193474292755127, 1.8385801315307617, 0.7011741995811462, 0.32417529821395874, 2.037968635559082, 0.7316104769706726, -0.07307479530572891, -0.37979012727737427, -0.5682746767997742, -0.5587223172187805, -0.1056552603840828, 0.6538429260253906, 2.6420161724090576, 4.95098352432251, 0.6947001814842224, -5.681090354919434, -3.669278621673584, -7.030954837799072, -6.037749290466309, -5.058415412902832, -7.002641677856445, -4.334777355194092, -3.892927646636963, -8.844118118286133, -6.0192766189575195, -5.647950649261475, -3.7604215145111084, -4.970141410827637, -4.995177745819092, -4.099310874938965, -3.0438473224639893, -1.7268157005310059, -2.638028144836426, -4.484391212463379, -2.984726905822754, -2.0249733924865723, -2.1979408264160156, -2.7437589168548584, -1.9702707529067993, -1.4418545961380005, -1.0907553434371948, -1.4923373460769653, -2.3664932250976562, -1.4237343072891235, -2.596942186355591, -1.5654140710830688, -1.8069599866867065, 0.22664067149162292, -0.1594325304031372, 0.24011728167533875, -0.8582908511161804, 0.4311347007751465, -0.41843128204345703, -4.925808429718018, -0.6386445164680481, -1.207939624786377, -0.20867477357387543, 0.025181923061609268, 0.37170419096946716, -0.33662962913513184, -1.0937501192092896, -2.111860990524292, -0.7560731172561646, 0.04591921344399452, -0.2978529632091522, -0.6991146206855774, 0.29959744215011597, 0.1464262157678604, -0.06530778855085373, -1.1791579723358154, -0.7995136380195618, 0.6936266422271729, -0.32824814319610596, 1.1511420011520386, 0.39860597252845764, 2.251163959503174, 0.30454736948013306, 0.13520225882530212, -0.719683051109314, -0.7680479884147644, -1.3224217891693115, -1.043531894683838, 0.120638407766819, -0.16004304587841034, -12.51164722442627, -6.186787128448486, -3.325183153152466, -1.8037481307983398, -2.099346876144409, -1.5151959657669067, -1.814008116722107, -1.4446308612823486, -1.6001267433166504, -0.8087900280952454, -0.012988340109586716, 0.19559377431869507, -2.9863476753234863, -2.2022581100463867, -0.5182163119316101, 0.17054039239883423, -2.9254534244537354, -1.7060649394989014, -0.7282992005348206, -0.32495301961898804, -0.31928423047065735, 0.8333481550216675, 1.3106924295425415, -0.9618647694587708, -1.4151382446289062, 0.9778494238853455]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0.8, 1.37)}}, 'et1_eta0': {'discriminator': {'threshold': 0.089998972415924083, 'nodes': [100, 5, 1], 'bias': [0.13026855885982513, -0.26550668478012085, 0.10098384320735931, 0.2817646265029907, -0.24148190021514893, 0.28516680002212524], 'weights': [6.899774074554443, 16.352725982666016, 0.5933220386505127, 2.4192605018615723, 0.11743052303791046, 4.809587001800537, -0.343030720949173, -0.24318425357341766, 0.03658125922083855, -3.1363468170166016, -0.11848730593919754, -133.99517822265625, 5.193421363830566, 5.081463813781738, 34.88224792480469, 2.887279987335205, 4.678894996643066, 2.649254560470581, 5.661073684692383, 12.021714210510254, 2.9697964191436768, 2.6748416423797607, 1.496754765510559, 2.3502867221832275, 2.18495512008667, 2.2296648025512695, 4.823065280914307, 1.9415361881256104, 1.8471628427505493, 1.553573727607727, 1.784615159034729, 1.7211287021636963, 0.866039514541626, 0.6766988635063171, 1.4916530847549438, 1.1342616081237793, 0.9869433045387268, -2.0301432609558105, 0.6865469813346863, 1.4280389547348022, 0.7327931523323059, 0.2371402084827423, 1.8007099628448486, 1.1863741874694824, -0.014120065607130527, -0.2791396677494049, 0.7089519500732422, 0.4246557950973511, 1.2188538312911987, 0.5817012786865234, 0.499347060918808, 0.15267817676067352, 0.14925161004066467, -23.053922653198242, -7.309223175048828, 0.5530054569244385, 0.7288325428962708, -0.48038211464881897, 0.6218819618225098, -0.20887674391269684, -0.8501588106155396, 1.2204691171646118, -0.4112662374973297, 1.3383499383926392, -7.248931884765625, 0.6939977407455444, -0.5631090998649597, 0.2956172227859497, -0.09469417482614517, 0.9803329110145569, -0.6680454611778259, -0.5637686252593994, -0.40396279096603394, -0.23399324715137482, 0.7935812473297119, 5.329383373260498, 1.2227143049240112, 0.8110776543617249, 1.0557469129562378, -0.09967409074306488, 7.470627307891846, 2.7973663806915283, 12.985594749450684, 10.80945110321045, 5.312950134277344, 1.4698386192321777, 1.2358468770980835, 1.7002789974212646, 2.332430124282837, 1.9757977724075317, 1.008349061012268, -0.3452204167842865, 2.5461506843566895, 1.5805330276489258, -2.5452659130096436, -0.2858031392097473, 4.327240467071533, 1.6949045658111572, -0.5474514365196228, -1.0070194005966187, 3.1365036964416504, 1.4264229536056519, 0.46255072951316833, -0.06407009065151215, -0.08005370944738388, 0.21678487956523895, 0.3651900887489319, 0.5949395298957825, 2.2012155055999756, 2.7517831325531006, -4.617430210113525, -7.510282516479492, -6.630491733551025, -4.501444339752197, -5.261494159698486, -3.223292350769043, -4.61243200302124, -2.772080659866333, -2.796226978302002, -3.223543405532837, -3.2556803226470947, -2.647357702255249, -2.1666717529296875, -2.266063690185547, -2.1483471393585205, -2.18593692779541, -1.7709323167800903, -1.8062844276428223, -1.743281364440918, -1.4827731847763062, -1.8574687242507935, -1.648593783378601, -0.9516342878341675, -0.7328382134437561, -1.3366445302963257, -0.9306458830833435, -0.9237238764762878, -0.926608681678772, -0.7026310563087463, -1.3953449726104736, -0.8315156102180481, 0.021193236112594604, -1.6468673944473267, -0.3374200165271759, 0.08506361395120621, 0.29782259464263916, -0.7337348461151123, -0.44007250666618347, -1.2420686483383179, -0.6445106863975525, -0.31814923882484436, -0.5961984395980835, -0.16995586454868317, -1.443328619003296, -0.191337451338768, -0.580639660358429, -0.25931718945503235, 0.3832920491695404, -0.5014948844909668, 0.15482033789157867, 0.794733464717865, -1.4419859647750854, 0.5691285133361816, -1.1889307498931885, -0.4611969292163849, -0.6314657330513, 0.6613544821739197, -0.21968477964401245, 0.07686891406774521, -1.1416877508163452, 0.5154832601547241, 0.459480345249176, 0.5681905746459961, 0.4546891748905182, -0.5072559118270874, -1.0298582315444946, -1.1796760559082031, -0.716462254524231, -0.13588790595531464, 0.055263034999370575, -8.00947093963623, -2.617304563522339, -2.155120611190796, -0.8165661096572876, -1.546573519706726, -0.6795950531959534, -1.1418935060501099, -1.5697532892227173, -2.318981885910034, -2.0122148990631104, -0.2781384587287903, 0.1994207799434662, -2.535902738571167, -1.5865310430526733, -0.20114310085773468, 0.29925528168678284, -4.517794132232666, -1.6401015520095825, -0.16101348400115967, 0.34219953417778015, -4.2039713859558105, -2.2228593826293945, -0.36036258935928345, 0.006430026143789291, 0.00564979761838913, -0.2846749424934387, -0.1690729856491089, -0.713566780090332, -2.1880154609680176, -2.8614342212677, 1.3553072214126587, -0.09500797837972641, 6.485579967498779, 4.338515758514404, 4.054488182067871, 2.1393210887908936, 4.3361616134643555, 2.6636030673980713, 2.965369462966919, 3.042334794998169, 3.0481913089752197, 2.8283920288085938, 2.3292248249053955, 2.269939661026001, 2.2794978618621826, 2.1206231117248535, 1.8981077671051025, 1.9247421026229858, 1.8147590160369873, 1.5951828956604004, 1.841043472290039, 1.699897050857544, 1.0185341835021973, 0.8176997900009155, 1.804958701133728, 0.9224161505699158, 0.9395413994789124, 0.9981505870819092, 0.5674375891685486, 1.4063092470169067, 0.8281000852584839, 0.13445372879505157, 1.7218259572982788, 1.3947255611419678, 0.12177100032567978, -0.2041916400194168, 0.669011116027832, 0.5964751243591309, 1.2814091444015503, 0.5093510746955872, 0.11234066635370255, 0.6185265779495239, 0.21782174706459045, 1.4358878135681152, 0.2166738212108612, 0.7268922924995422, 0.7358065843582153, -0.2957155704498291, 0.5267340540885925, 0.018530720844864845, -0.8329143524169922, 1.4509282112121582, -0.4544578790664673, 1.213326096534729, 0.5540860295295715, 0.6212376952171326, -0.6449874639511108, 0.33839884400367737, -0.015398956835269928, 1.0235668420791626, -0.635717511177063, -0.4007470905780792, -0.5329344272613525, -0.037641871720552444, 0.5998761057853699, 0.9821504950523376, 1.2193130254745483, 0.5014228224754333, 1.4592225551605225, 0.0007539120269939303, 7.4821882247924805, 2.9073970317840576, 2.234830617904663, 1.2812618017196655, 1.4794807434082031, 1.4617334604263306, 1.226047158241272, 1.664346694946289, 2.2560362815856934, 1.880759835243225, 1.8559043407440186, 0.30874988436698914, 2.4118285179138184, 1.7293230295181274, 0.37950506806373596, -0.32922399044036865, 4.410937309265137, 2.077910900115967, -0.5310007929801941, -0.8569069504737854, -3.2046031951904297, -1.878570556640625, -0.4966791272163391, -0.041915521025657654, 0.0010237264214083552, -0.35946255922317505, -0.16862881183624268, -0.6730135679244995, -2.2084267139434814, -2.830782175064087, 1.444815993309021, 7.311896800994873, 6.746527671813965, 4.426757335662842, 5.439311981201172, 3.1424455642700195, 4.659900188446045, 2.7016937732696533, 2.9734232425689697, 3.1668307781219482, 3.2199769020080566, 2.7241642475128174, 2.252969264984131, 2.3151626586914062, 2.0955772399902344, 2.339506149291992, 1.7223293781280518, 1.7967665195465088, 1.7298623323440552, 1.7324773073196411, 1.7900738716125488, 1.5840544700622559, 0.933102011680603, 0.8880665898323059, 1.4224761724472046, 1.1536072492599487, 0.9202759265899658, 0.9527393579483032, 0.5907071232795715, 1.382846713066101, 0.7373377680778503, 0.11727926880121231, 1.6933280229568481, 0.37634551525115967, -0.05939439311623573, -0.32975059747695923, 0.6748769879341125, 0.5615000128746033, 1.1567221879959106, 0.506033182144165, 0.08262698352336884, 0.458146333694458, 0.12529253959655762, 1.3546130657196045, 0.35908567905426025, 0.7352120280265808, 0.30408918857574463, -0.2514974772930145, 0.6668548583984375, -0.22145557403564453, -1.1797659397125244, 1.2833958864212036, -0.6023738980293274, 1.2626928091049194, 0.44070497155189514, 0.7011858224868774, -0.6213901042938232, 0.2127763330936432, 0.0018709421856328845, 0.7595801949501038, -0.5178589820861816, -0.4579158425331116, -0.5081691741943359, -0.4273574948310852, 0.530954122543335, 1.1548372507095337, 1.1909937858581543, 0.6980268955230713, -0.21412287652492523, -0.14805613458156586, 8.138078689575195, 2.6744754314422607, 2.1828529834747314, 0.854567289352417, 0.9787827730178833, 0.8920714855194092, 1.081211805343628, 1.5808980464935303, 3.3566043376922607, 1.8604305982589722, 0.3846227824687958, -0.25873804092407227, 2.4828872680664062, 1.646903157234192, 0.1991197019815445, -0.35633036494255066, 4.391186714172363, 1.694061517715454, -0.010804381221532822, -0.13379591703414917, 3.142569065093994, 1.885544776916504, 0.42330726981163025, -0.02307279221713543, 0.03883444890379906, 0.22803469002246857, 0.15954458713531494, 0.6746170520782471, 2.1230428218841553, 2.7047719955444336, -1.42130708694458, -7.3318586349487305, -6.713561534881592, -4.5120673179626465, -5.326016426086426, -3.2210566997528076, -4.770684242248535, -2.7039825916290283, -2.9834811687469482, -3.2463696002960205, -3.198507308959961, -2.676010847091675, -2.2476842403411865, -2.3895657062530518, -2.085507392883301, -2.3317718505859375, -1.8416802883148193, -1.9407689571380615, -1.777759313583374, -1.641348123550415, -1.8573496341705322, -1.6751770973205566, -0.8691015243530273, -0.7737262845039368, -1.3237534761428833, -1.0309513807296753, -0.956010103225708, -0.8817286491394043, -0.7214582562446594, -1.485176920890808, -0.8006212115287781, 0.03045649640262127, -1.7968178987503052, -0.15167224407196045, 0.10287018120288849, 0.32076430320739746, -0.7837929129600525, -0.6078547835350037, -1.1492019891738892, -0.6437928676605225, -0.2273150086402893, -0.4479551315307617, -0.19615353643894196, -1.475245475769043, -0.16832801699638367, -0.7806887030601501, -0.43588489294052124, 0.3417947590351105, -0.5984894633293152, 0.18171395361423492, 1.3271015882492065, -1.3004610538482666, 0.567756712436676, -1.3063372373580933, -0.595904529094696, -0.6181480288505554, 0.6816067695617676, -0.3874245882034302, -0.10277097672224045, -0.8113201856613159, 0.4958667755126953, 0.5487250089645386, 0.5853757262229919, 0.28303003311157227, -0.47044941782951355, -1.012993574142456, -1.0892679691314697, -0.7276430130004883, -0.0545482262969017, 0.0023131719790399075, -8.050432205200195, -2.7260515689849854, -2.2996180057525635, -0.8566168546676636, -0.8960089683532715, -0.7992809414863586, -1.1440401077270508, -1.6487165689468384, -2.2422666549682617, -1.8732126951217651, -0.3583516776561737, 0.31507444381713867, -2.49290132522583, -1.6364563703536987, -0.20403233170509338, 0.4427047073841095, -4.316447734832764, -1.6208338737487793, -0.05867146700620651, 0.1259959191083908, -0.49012619256973267, 1.3664380311965942, -0.9122105836868286, -1.5342460870742798, 1.4196211099624634]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0, 0.8)}}, 'et3_eta1': {'discriminator': {'threshold': 0.37499870061874391, 'nodes': [100, 5, 1], 'bias': [0.08650511503219604, -0.055272262543439865, 0.10310862213373184, 0.016909923404455185, -0.12306475639343262, -0.13866235315799713], 'weights': [-1.8073946237564087, -1.5411490201950073, 0.5207444429397583, 0.9707058668136597, 0.25348761677742004, 0.04366215318441391, -0.24979205429553986, -0.27689307928085327, -2.309197187423706, -3.3570711612701416, 1.4562300443649292, 7.651455879211426, 0.36543744802474976, 2.8513708114624023, 2.6874794960021973, 6.057408809661865, 6.057231426239014, 5.669864177703857, 4.801469326019287, 12.592092514038086, 4.3951287269592285, 3.525283098220825, 3.761875629425049, 2.5921874046325684, 2.918700933456421, 2.418201208114624, 3.809760093688965, 2.845146417617798, 1.6797908544540405, 2.6805214881896973, 2.7352213859558105, 2.2525758743286133, 2.9871532917022705, 2.7930495738983154, 2.393132448196411, 0.47632381319999695, 1.7430351972579956, 1.497951865196228, 2.175682544708252, 1.54957914352417, 2.5405402183532715, 1.7708392143249512, 0.7371238470077515, 0.6540555357933044, 0.7026950120925903, 0.46482789516448975, -0.3877534866333008, 1.530444860458374, 1.3411180973052979, 0.5750821828842163, 0.39422816038131714, -0.08476825058460236, 0.8233877420425415, -3.1044533252716064, 0.5614856481552124, 0.21811482310295105, 0.895219624042511, 0.2259756177663803, 0.8229779005050659, -0.4962327480316162, 0.42732468247413635, -0.17410647869110107, 0.41408899426460266, 0.30640730261802673, 0.708544135093689, 0.9880279302597046, 0.616394579410553, -0.7441698908805847, -2.3464620113372803, -0.3689490556716919, -1.6319341659545898, 0.1698792278766632, -0.44919198751449585, -0.4705634117126465, 0.9533016681671143, 1.566569447517395, 2.190119743347168, 1.4812970161437988, 1.2188771963119507, 0.043788351118564606, 2.7045044898986816, 6.087611198425293, 3.965449333190918, 2.5000901222229004, 3.1309781074523926, 2.265713691711426, 3.033586263656616, 2.9956352710723877, 2.1402223110198975, 1.0625516176223755, 0.13269169628620148, -0.4519107937812805, 4.085275173187256, 2.943455219268799, 1.3587406873703003, 0.6337225437164307, 4.183228015899658, 3.148148536682129, 2.5254170894622803, 0.5404440760612488, 1.4453608989715576, 1.6564768552780151, -0.4487656354904175, -0.9476009607315063, -0.09270484745502472, 0.045866623520851135, 0.2483207732439041, 0.1396970897912979, 2.2485430240631104, 3.079014778137207, -1.2493622303009033, -7.264638423919678, -1.4254909753799438, -2.8907840251922607, -2.5356640815734863, -6.107833385467529, -6.015527725219727, -5.6949782371521, -4.718616485595703, -12.774330139160156, -4.4238810539245605, -3.4205734729766846, -3.7510557174682617, -2.7808003425598145, -2.836054563522339, -2.5392425060272217, -3.7995500564575195, -2.768383502960205, -1.7824243307113647, -2.5556480884552, -2.804090738296509, -2.346342086791992, -2.9805829524993896, -2.7800140380859375, -2.4737284183502197, -0.5426251888275146, -1.8741132020950317, -1.5899451971054077, -2.1455368995666504, -1.5076541900634766, -2.534780979156494, -1.767467975616455, -0.6016656160354614, -0.7123382091522217, -0.7486628293991089, -0.754169225692749, 0.28897523880004883, -1.5247836112976074, -1.3225271701812744, -0.5810943841934204, -0.3371606469154358, 0.3082497715950012, -0.958335816860199, 3.1822664737701416, -0.7602589726448059, -0.2604738175868988, -0.7048048973083496, -0.4244652986526489, -0.7984673976898193, 0.3503713309764862, -0.26729831099510193, 0.13962948322296143, -0.4200628101825714, -0.373464971780777, -0.7399169206619263, -1.0845354795455933, -0.7398272156715393, 0.8153616786003113, 2.39160418510437, 0.5093047022819519, 1.5113933086395264, -0.033965103328228, 0.3592761754989624, 0.49540650844573975, -0.9408409595489502, -1.692526936531067, -2.3452839851379395, -1.5775525569915771, -1.105531096458435, -0.17043983936309814, -2.573122978210449, -6.150838375091553, -4.102262020111084, -2.51358962059021, -3.126319408416748, -2.367657423019409, -3.0993878841400146, -3.0342042446136475, -2.2070131301879883, -1.0939661264419556, -0.35196807980537415, 0.3115089237689972, -4.141249656677246, -2.8903026580810547, -1.332562804222107, -0.48742029070854187, -4.5644211769104, -3.011760711669922, -2.541569471359253, -0.5386564135551453, -1.9346240758895874, -1.5834821462631226, 0.4096720814704895, 1.0849721431732178, 0.17380240559577942, 0.027415642514824867, -0.030130337923765182, -0.15520454943180084, -2.299142360687256, -3.3818070888519287, 1.3688827753067017, 7.676735877990723, 1.605080246925354, 3.000534772872925, 2.678732395172119, 5.935696125030518, 6.06373405456543, 5.805450439453125, 4.718634128570557, 12.794767379760742, 4.594069957733154, 3.5172908306121826, 3.708810329437256, 2.7571866512298584, 2.722099781036377, 2.40950608253479, 3.974444627761841, 2.799480438232422, 1.6455305814743042, 2.7383944988250732, 2.6431944370269775, 2.323991298675537, 2.9935028553009033, 2.82285475730896, 2.345909595489502, 0.3938029110431671, 1.7474058866500854, 1.4374860525131226, 2.2240378856658936, 1.5731925964355469, 2.464531660079956, 1.7226593494415283, 0.5531126260757446, 0.5788571238517761, 0.5707744359970093, 0.8479485511779785, -0.35176020860671997, 1.6379313468933105, 1.2839455604553223, 0.7611449956893921, 0.47148340940475464, -0.17590422928333282, 0.9922735095024109, -3.0894510746002197, 0.6261608004570007, 0.4233037829399109, 0.9107146859169006, 0.22243081033229828, 0.7495966553688049, -0.5241858959197998, 0.2487483024597168, -0.10661022365093231, 0.4667392075061798, 0.3670872747898102, 0.5729408860206604, 1.0026434659957886, 0.585365355014801, -0.8662146925926208, -2.383124828338623, -0.34243500232696533, -1.4974608421325684, 0.04802016168832779, -0.48004579544067383, -0.5292894244194031, 0.989148736000061, 1.6366991996765137, 2.1623520851135254, 1.5623252391815186, 1.163589358329773, 0.1917525827884674, 2.7386865615844727, 6.100390911102295, 4.013089179992676, 2.4702577590942383, 2.9258551597595215, 2.3872175216674805, 2.9061832427978516, 3.0389115810394287, 2.267369270324707, 0.9224342107772827, 0.13882692158222198, -0.27043575048446655, 4.245561122894287, 3.0114283561706543, 1.367991328239441, 0.42549777030944824, 4.6043925285339355, 3.1355578899383545, 2.4280529022216797, 0.5863694548606873, 1.4754598140716553, 1.5698059797286987, -0.4823726713657379, -0.9748214483261108, -0.2041388303041458, 0.08785350620746613, 0.199985533952713, 0.17536546289920807, 2.2290570735931396, 3.3302524089813232, -1.426261067390442, -7.453845500946045, -1.5029581785202026, -2.8574960231781006, -2.51312518119812, -6.05672025680542, -6.044571399688721, -5.634576797485352, -4.779540061950684, -12.704353332519531, -4.59316873550415, -3.5367848873138428, -3.756740093231201, -2.6343228816986084, -2.704092025756836, -2.5194485187530518, -3.8116281032562256, -2.658090353012085, -1.6250009536743164, -2.5274710655212402, -2.6961114406585693, -2.4041428565979004, -3.039490222930908, -4.3730998039245605, -2.557791233062744, -0.40343430638313293, -1.7577539682388306, -1.4783707857131958, -2.2146480083465576, -1.6547660827636719, -2.558105707168579, -1.7695081233978271, -0.510453999042511, -0.5691689848899841, -0.7173045873641968, -0.6408175230026245, 0.23928460478782654, -1.5225844383239746, -1.1491734981536865, -0.6912940740585327, -0.26458418369293213, 0.3127172291278839, -0.940774142742157, 3.005188465118408, -0.6097161173820496, -0.35493654012680054, -0.8616894483566284, -0.28624242544174194, -0.7830718755722046, 0.3505081832408905, -0.34502825140953064, 0.2634536921977997, -0.4759857952594757, -0.2661202847957611, -0.541718065738678, -0.9805392026901245, -0.7372620701789856, 0.8859495520591736, 2.363197088241577, 0.4431571066379547, 1.67885422706604, -0.16037490963935852, 0.5349763035774231, 0.3455374836921692, -1.0929559469223022, -1.7298650741577148, -2.2176284790039062, -1.5353748798370361, -1.5175400972366333, -0.5990257859230042, -2.6407501697540283, -6.11340856552124, -4.0411529541015625, -2.5640499591827393, -3.0219898223876953, -2.3999757766723633, -3.000324010848999, -2.844813823699951, -2.1008665561676025, -0.9790552854537964, -0.23401658236980438, 0.3395158052444458, -4.146481513977051, -2.998228073120117, -1.1968015432357788, -0.5384282469749451, -4.567948818206787, -3.1174044609069824, -2.522387981414795, -0.570985734462738, 1.9201645851135254, 1.625332236289978, -0.4284254312515259, -0.9992616772651672, -0.15117469429969788, 0.019743775948882103, 0.09398511052131653, 0.2782013416290283, 2.1579794883728027, 3.469564199447632, -1.3766605854034424, -7.3433756828308105, -0.28918886184692383, -2.934257745742798, -2.506077766418457, -5.9221601486206055, -5.87907075881958, -5.6570539474487305, -4.644432067871094, -12.650253295898438, -4.3996124267578125, -3.56400203704834, -3.7642898559570312, -2.7329769134521484, -2.7007155418395996, -2.4277775287628174, -4.000192642211914, -2.8354525566101074, -1.6353849172592163, -2.692246437072754, -2.6824562549591064, -2.333967685699463, -2.899958372116089, -2.886532783508301, -2.5179288387298584, -0.5252694487571716, -1.7582615613937378, -1.5399903059005737, -2.2383580207824707, -1.4774408340454102, -1.805370569229126, -1.7390944957733154, -0.674606204032898, -0.7607637047767639, -0.7686880826950073, -0.4594736695289612, 0.4311450123786926, -1.4034266471862793, -1.3378093242645264, -0.6132334470748901, -0.34021979570388794, 0.28610631823539734, -0.8854137659072876, 2.952155113220215, -0.7034514546394348, 0.01109424326568842, -0.8532021045684814, -0.31980711221694946, -0.6572751402854919, 0.34408852458000183, -0.2943135201931, 0.15395930409431458, -0.4090576469898224, -0.3246546685695648, -0.5836114883422852, -0.8692274689674377, -0.6687362790107727, 0.8390278220176697, 2.4083733558654785, 0.49250155687332153, 1.5603394508361816, -0.037518538534641266, 0.36591941118240356, 0.47634559869766235, -0.912810206413269, -1.700984001159668, -2.164130687713623, -1.4122774600982666, -1.2411245107650757, -0.2530621886253357, -2.6884801387786865, -6.040997505187988, -4.175899982452393, -2.5609495639801025, -3.0327723026275635, -2.379563093185425, -2.868626356124878, -2.8405611515045166, -2.1093356609344482, -1.0403660535812378, -0.11491069942712784, 0.3772459030151367, -4.0683913230896, -2.9354939460754395, -1.2130905389785767, -0.506747841835022, -4.071317195892334, -3.0696909427642822, -2.5421555042266846, -0.3517703413963318, -1.0184422731399536, 1.6149846315383911, -1.1489373445510864, 2.899430274963379, 0.9671260714530945]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0.8, 1.37)}}, 'et0_eta3': {'discriminator': {'threshold': -0.31500081177800893, 'nodes': [100, 7, 1], 'bias': [-0.2698359191417694, -0.021040206775069237, -0.10066322982311249, -0.008700813166797161, -0.0809217244386673, -0.09307112544775009, 0.002951504662632942, -0.055201806128025055], 'weights': [0.20225106179714203, -0.9006369709968567, 0.03466144949197769, -0.2889445722103119, 0.07475759088993073, -0.13977815210819244, 0.04881351813673973, 0.02957393415272236, -0.24632103741168976, -0.4430311918258667, -3.228940725326538, 0.20872461795806885, 1.6354045867919922, -6.902615547180176, 1.333670735359192, 0.8173291087150574, 0.44339412450790405, 0.9221566319465637, 0.30203866958618164, 0.8357586860656738, -374.33819580078125, -100.91007232666016, 0.40322041511535645, -105.98914337158203, 35.8812255859375, -291.89166259765625, 0.17422837018966675, -76.4021987915039, -491.6601257324219, -0.16425257921218872, -0.13429200649261475, 0.20934633910655975, 0.01121070422232151, 0.22853007912635803, 0.014218064956367016, 0.10473887622356415, -0.03651595488190651, 0.07260922342538834, -0.34782665967941284, -0.009246349334716797, -0.039252765476703644, -0.07105270773172379, -0.06934697180986404, 0.10464552789926529, 0.1353124976158142, -0.13408182561397552, 0.031428251415491104, -0.00043547828681766987, -0.12158826738595963, 0.16264048218727112, -0.0336020365357399, 56.602081298828125, -0.14486771821975708, 25.081844329833984, -0.14430655539035797, -0.028534093871712685, 0.12397117167711258, 0.4500467777252197, -0.18105795979499817, 0.0884188562631607, -0.08558822423219681, -0.01410595327615738, -0.2034880816936493, -0.00359709863550961, -0.023490779101848602, -0.13555382192134857, -0.19149203598499298, -0.0329434908926487, -0.03576066344976425, 0.1175893172621727, -2.5838210582733154, -0.3766530454158783, 0.0775269940495491, -0.18933957815170288, 0.0820411816239357, 0.03480014577507973, 0.2163989096879959, 0.0517808236181736, -0.10070717334747314, 12.077496528625488, 4.14965295791626, -0.1262219250202179, 86.37357330322266, -4.0285162925720215, 0.25238341093063354, 0.173043355345726, -0.4014592170715332, 0.2288466840982437, -0.07247157394886017, 0.4948960244655609, -0.04976343736052513, -0.3145294189453125, 0.2821393609046936, 6.633347034454346, -0.10303610563278198, -0.18202932178974152, -0.31121909618377686, -0.16638228297233582, -0.3183334171772003, 51.533748626708984, -1.0530906915664673, -0.9841030836105347, 0.29775214195251465, 0.5295977592468262, 0.8868358135223389, 0.3516679108142853, 0.21565701067447662, 0.0794435515999794, -2.2470850944519043, -1.9531877040863037, -2.1994662284851074, 0.20457442104816437, 2.939715623855591, 0.3507762849330902, 7.303609848022461, 4.734809875488281, 1.9167451858520508, 5.447176933288574, 1.738074541091919, 4.827472686767578, 1.8147984743118286, 1.2954773902893066, 2.951904773712158, 2.7711808681488037, 5.329275608062744, 1.5482845306396484, 1.5833131074905396, 2.7048208713531494, 1.9742443561553955, 1.1318703889846802, 1.0929538011550903, 1.749925136566162, 0.7001661062240601, 2.305717945098877, 0.05212286114692688, 1.4895020723342896, 0.3556216359138489, 0.9450576901435852, -0.6107288002967834, 0.649321973323822, -0.023156901821494102, -0.1220313087105751, 0.6576177477836609, 0.4568925201892853, 0.5959261655807495, -0.33617663383483887, 2.443324327468872, 0.10611805319786072, 0.24280813336372375, 0.5849461555480957, -0.1503051519393921, 0.7810186743736267, -0.027534402906894684, 0.4089702367782593, 0.014316439628601074, 0.3819413185119629, 0.446049302816391, 0.7746580243110657, -0.421926349401474, 0.5414602160453796, -0.21584512293338776, 0.01064643356949091, -0.4630609154701233, 0.42981064319610596, -0.28911176323890686, 0.13013294339179993, -0.663794755935669, 0.5548304915428162, -0.03197551518678665, 0.6406247019767761, -3.3596580028533936, -1.2676362991333008, -0.6108476519584656, -0.19657936692237854, 1.2165848016738892, 1.669739842414856, 1.698229193687439, 1.3538898229599, 0.702858030796051, 0.3418480157852173, 6.1677141189575195, 4.947031497955322, 2.064474105834961, 1.4611104726791382, 1.4244046211242676, 1.2800779342651367, 0.5524511933326721, 1.1216765642166138, 0.5202028751373291, 0.9660008549690247, 0.0637206956744194, 0.18642033636569977, 2.2422211170196533, 0.9906512498855591, 0.08027803152799606, -0.4177014231681824, -0.23565077781677246, 0.1196693554520607, 0.06809215992689133, 4.783222198486328, 1.1031341552734375, 0.9078258872032166, -0.22757139801979065, -0.47363269329071045, -0.6869458556175232, -0.3318561613559723, -0.33094659447669983, -0.29374340176582336, 2.0499820709228516, 2.239422559738159, 2.078904390335083, -0.21715745329856873, -1.245003581047058, -0.4031929075717926, -6.946435451507568, -4.712887287139893, -1.9018898010253906, -5.241952896118164, -1.8523764610290527, -4.795210361480713, -1.8940085172653198, -1.2504463195800781, -7.217137813568115, -2.7899413108825684, -5.231794357299805, -1.6275787353515625, -1.6051292419433594, -3.8509366512298584, -3.8491742610931396, -1.1744351387023926, -0.8577916026115417, -1.7116165161132812, -0.36539626121520996, -4.793726921081543, -0.08205004781484604, -1.5022155046463013, -0.5438974499702454, -0.7923613786697388, 0.5673443078994751, -0.7924880385398865, 0.11560714989900589, 0.02123773843050003, -0.8034487366676331, -0.5616395473480225, -0.5233768224716187, -0.2722334861755371, -2.5108327865600586, -0.5720518231391907, -0.4061076045036316, -0.7818689346313477, 0.019294343888759613, -0.7768457531929016, 0.13501304388046265, -0.47803908586502075, -0.029811006039381027, -0.42356646060943604, -0.34774869680404663, -0.7984080910682678, 0.3588971793651581, -0.6726347804069519, -0.5343213081359863, -0.4000171422958374, 0.357125461101532, -0.46829697489738464, 0.39098119735717773, -0.2298913598060608, 0.8594713807106018, -0.7110618352890015, -0.061636701226234436, -0.6693058609962463, 1.1489728689193726, 0.3318289518356323, 0.7837057113647461, 0.1749361902475357, -1.3185076713562012, -1.516122579574585, -1.7037216424942017, -1.2789870500564575, -0.4620683789253235, -0.26407337188720703, -6.04487419128418, -4.833531856536865, -1.9617811441421509, -1.4752931594848633, -1.3945602178573608, -1.2135614156723022, -0.3616400957107544, -0.9785630106925964, -0.7223881483078003, -1.228663444519043, -0.06690476834774017, -0.1908154934644699, -2.6066627502441406, -0.9647290706634521, -0.10820335149765015, 0.2571292519569397, -0.1646440029144287, 0.03318246826529503, -0.053327761590480804, -4.849867343902588, -0.9206339120864868, -0.9598978757858276, 0.002367813605815172, 0.6184605360031128, 0.7723608613014221, 0.20745083689689636, 0.23745183646678925, 0.20646026730537415, -2.1763594150543213, -2.0287892818450928, -2.282665967941284, 0.19380436837673187, 1.2973726987838745, 0.42046311497688293, 6.772983551025391, 4.822548866271973, 1.8652130365371704, 5.3888702392578125, 1.7751623392105103, 4.914341926574707, 1.8140294551849365, 1.39537513256073, 1.8427232503890991, 2.7229926586151123, 2.17301607131958, 1.5756100416183472, 1.5816236734390259, 2.6944282054901123, 1.9131555557250977, 1.321346402168274, 0.9164560437202454, 1.57354736328125, 0.4657553434371948, 2.363318920135498, 0.21329212188720703, 1.4519634246826172, 0.5176462531089783, 0.8253650665283203, -0.7699162364006042, 0.6339988708496094, -0.10295349359512329, -0.1282825767993927, 0.6225374937057495, 0.3867333233356476, 0.6584811210632324, 0.10895311087369919, 2.4481003284454346, 0.1392822414636612, 0.39405396580696106, 0.6399299502372742, -0.027020787820219994, 0.6829317808151245, -0.1337304562330246, 0.3378160893917084, 0.11674128472805023, 0.3012418746948242, 0.38937267661094666, 0.8625653386116028, -0.46745651960372925, 0.6723899245262146, -0.18008916079998016, 0.0021010921336710453, -0.2173125147819519, 0.5533600449562073, -0.25419265031814575, 0.34476810693740845, -0.8264703750610352, 0.5261073708534241, -0.023064417764544487, 0.5674001574516296, -3.2025935649871826, -1.2528597116470337, -0.4238010048866272, -0.0675603374838829, 1.3090697526931763, 1.6422717571258545, 1.7788664102554321, 1.2009772062301636, 0.5008041262626648, 0.3263235092163086, 6.060380458831787, 4.866382122039795, 1.925684928894043, 1.4962143898010254, 1.5213629007339478, 1.2689807415008545, 0.49399247765541077, 0.9131807684898376, 0.6098441481590271, 1.0815221071243286, 0.2259044200181961, 0.06316171586513519, 2.099392890930176, 1.1164296865463257, 0.06768371164798737, -0.2768418788909912, 0.19758757948875427, 0.1930726021528244, -0.09152580052614212, 4.797698497772217, 1.0277148485183716, -2.22694993019104, -0.04415075108408928, -0.12518760561943054, 0.16564080119132996, -0.05261689051985741, -0.03446321561932564, 0.08158248662948608, -0.5113720893859863, -0.3788033127784729, -0.5971873998641968, 0.13953155279159546, 4.506430625915527, 0.2659728229045868, 1.3502607345581055, 0.9779933094978333, 0.351772278547287, 0.9250448942184448, 0.41677066683769226, 0.9519994854927063, 0.2502197027206421, -9.120316505432129, 0.3444167375564575, 0.3123454451560974, 0.40910106897354126, 0.0916995108127594, 0.2373439073562622, 0.43546077609062195, -14.573567390441895, 0.15171678364276886, -0.055674199014902115, 0.3707161545753479, -0.05302024260163307, 0.358106404542923, -0.07901870459318161, 0.2045583873987198, 0.0697036162018776, 0.10527680069208145, -0.2687459886074066, 0.15632261335849762, -0.11626090854406357, -0.14377674460411072, 0.05710787698626518, 0.19631843268871307, 0.18389847874641418, -0.08253363519906998, 0.10760928690433502, -0.2127053141593933, 0.07326456159353256, 0.040400728583335876, -0.06481891125440598, 0.23098519444465637, 0.05147608742117882, 0.1465410590171814, 0.0579967275261879, 0.10700484365224838, 0.14924295246601105, 0.037807874381542206, -0.12092505395412445, 0.21576111018657684, -0.09722263365983963, 0.0056007616221904755, -0.03826138749718666, 0.06926880776882172, 0.01470389124006033, 0.09834640473127365, -0.11117671430110931, 0.04086750000715256, 0.06830863654613495, 0.18669994175434113, -1.8611273765563965, -0.19118912518024445, -0.00022084862575866282, -0.43339014053344727, 0.2761912941932678, 0.18247313797473907, -0.3071092367172241, -0.030098382383584976, 0.15324388444423676, 0.07706119120121002, 1.089043378829956, -0.3839241862297058, 0.4835626780986786, -4.151394367218018, 0.14189095795154572, 0.32883313298225403, 0.05562252178788185, 0.3006491959095001, 0.15693596005439758, 0.10109970718622208, 0.07931047677993774, -0.059077147394418716, 0.3848729133605957, 0.1263601928949356, -0.020419638603925705, -0.11904185265302658, -0.20301781594753265, -0.07345139235258102, -0.012471398338675499, 0.9680086970329285, -0.9358425736427307, -0.8182768821716309, 0.32609692215919495, 0.2679734230041504, 0.9349111914634705, 0.23690611124038696, 0.19807754456996918, 0.25633737444877625, -2.16581392288208, -2.012897253036499, -2.118820905685425, 0.3466905951499939, 2.1918342113494873, 0.469011127948761, 7.494755744934082, 4.930378437042236, 1.8796205520629883, 5.377964496612549, 1.7996736764907837, 4.8660888671875, 1.8072516918182373, 1.36774480342865, 2.0416035652160645, 2.8872687816619873, 2.3359196186065674, 1.5760948657989502, 1.7236955165863037, 1.9696800708770752, 1.7144217491149902, 1.3210614919662476, 0.9248697757720947, 1.7599890232086182, 0.8116555213928223, 2.4698283672332764, 0.2059156745672226, 1.3981654644012451, 0.41586068272590637, 0.8404405117034912, -0.7753180861473083, 0.6789394617080688, 0.022743070498108864, 0.010476325638592243, 0.6788951754570007, 0.37160664796829224, 0.6302220821380615, -0.3735024034976959, 2.5426855087280273, 0.11551742255687714, 0.3873821198940277, 0.7570158839225769, -0.11191364377737045, 0.6684703826904297, -0.034952033311128616, 0.4980826675891876, 0.033552736043930054, 0.451158732175827, 0.3124142587184906, 0.6837500333786011, -0.5132716298103333, 0.6350975632667542, -0.3610364496707916, 0.0016025649383664131, -0.3483062982559204, 0.6467903256416321, -0.3843829035758972, 0.15782345831394196, -0.8129379153251648, 0.5089651346206665, 0.14174644649028778, 0.6021339893341064, -3.525460720062256, -1.2975656986236572, -0.470624715089798, -0.08992313593626022, 1.3491078615188599, 1.552371621131897, 1.755676031112671, 1.3366750478744507, 0.6237494349479675, 0.29452434182167053, 6.071795463562012, 4.917517185211182, 2.1172122955322266, 1.364637851715088, 1.4950215816497803, 1.3792357444763184, 0.5199951529502869, 1.0476226806640625, 0.5393630862236023, 1.0928481817245483, 0.08544348925352097, 0.04950239509344101, 2.109650135040283, 1.1252402067184448, -0.09029020369052887, -0.39486026763916016, -0.3239646255970001, 0.07521496713161469, 0.03412073478102684, 4.873011589050293, -0.8586660623550415, -1.0525412559509277, 0.07509074360132217, 0.4819488525390625, 0.7972657084465027, 0.13409405946731567, 0.10143954306840897, 0.31604617834091187, -2.063786745071411, -2.093536138534546, -2.2159135341644287, 0.26373958587646484, 1.229822039604187, 0.3812316358089447, 6.935065746307373, 4.815906524658203, 1.8225938081741333, 5.333498954772949, 1.7477914094924927, 4.78044319152832, 1.9142042398452759, 1.3428295850753784, 1.9110363721847534, 2.8914854526519775, 2.352703809738159, 1.6458407640457153, 1.5780705213546753, 2.5145366191864014, 1.8319544792175293, 1.3093864917755127, 0.9795845150947571, 1.798264503479004, 0.35299715399742126, 2.2552196979522705, 0.05755537748336792, 1.3722851276397705, 0.3443555533885956, 0.8321239948272705, -0.7481610178947449, 0.8172251582145691, -0.16909922659397125, -0.0316196084022522, 0.6316993236541748, 0.5031779408454895, 0.4719659686088562, -0.40451106429100037, 2.313936471939087, 0.1540975123643875, 0.31803032755851746, 0.722418487071991, 0.09785754233598709, 0.6992901563644409, -0.11194178462028503, 0.2870538532733917, 0.0576513297855854, 0.25876832008361816, 0.4169984757900238, 0.8080670833587646, -0.4458756148815155, 0.6269686818122864, -0.2547069787979126, 0.09498245269060135, -0.28197652101516724, 0.6099480390548706, -0.2612399458885193, 0.1162339448928833, -0.8577127456665039, 0.5897204279899597, -0.0008873241604305804, 0.5660701394081116, -3.1996941566467285, -1.2886680364608765, -0.5724131464958191, -0.04713967815041542, 1.3978859186172485, 1.5510962009429932, 1.7785773277282715, 1.147539496421814, 0.6683967709541321, 0.2418586015701294, 6.097591400146484, 4.914902210235596, 2.101524829864502, 1.5633659362792969, 1.52678644657135, 1.1417715549468994, 0.5268220901489258, 0.9385673403739929, 0.6720860600471497, 0.8914452791213989, 0.21402402222156525, 0.04264415055513382, 2.2466981410980225, 1.0317379236221313, 0.11190563440322876, -0.38053470849990845, 0.12831388413906097, -0.03789529576897621, 0.11234768480062485, 4.994553565979004, -0.1770661175251007, -0.5325038433074951, 0.8114240169525146, -0.9086681604385376, -0.36800312995910645, -0.8545414805412292, -1.0581774711608887]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (1.54, 2.5)}}, 'et3_eta3': {'discriminator': {'threshold': 0.35999871492385865, 'nodes': [100, 5, 1], 'bias': [0.5159038305282593, -0.013890129514038563, -0.14351433515548706, -0.06087241694331169, -0.035346969962120056, -0.11732066422700882], 'weights': [-8.92424201965332, -14.35389518737793, -3.5922393798828125, 0.5395880341529846, -0.2549460828304291, 0.19084329903125763, -0.2808282673358917, -0.3631875514984131, -0.7719464302062988, -0.5012274980545044, 0.4520082473754883, 14.744214057922363, 1.4734541177749634, 0.09389933943748474, 1.219815969467163, 0.8421317338943481, 0.36871182918548584, 2.3683958053588867, 0.8821505308151245, 2.182751178741455, 0.773385763168335, 0.5395814180374146, 0.52494877576828, 0.9898393750190735, 0.6274219751358032, 0.8716437816619873, 0.4428722560405731, 1.572168231010437, 0.5276930332183838, 0.521804928779602, 0.4996563494205475, 1.8987674713134766, 0.5535033941268921, 0.5482311844825745, 46.47129821777344, 0.6383989453315735, 0.46053922176361084, 0.49767550826072693, 0.5004040598869324, 0.6187031269073486, 0.40190207958221436, 1.501409649848938, 0.47336840629577637, -65.14677429199219, 48.5474739074707, 0.5614616274833679, 0.4142259359359741, 0.5373347401618958, -1.566516637802124, 0.5767366290092468, 0.11587122827768326, -88.1963882446289, 0.21070167422294617, 0.3519592583179474, -0.1482011377811432, 0.18854816257953644, -0.58920818567276, 0.4348776936531067, -0.16200405359268188, 0.4969814121723175, -0.19106420874595642, 0.24878983199596405, -0.07973922044038773, -0.4645341634750366, -0.2678266167640686, 0.2965974807739258, 73.08518981933594, -0.25330105423927307, -2.0161304473876953, -0.5542007684707642, 0.09175889194011688, 0.4748390316963196, 4.518786430358887, -0.4171540141105652, 0.5947842001914978, 1.0116089582443237, 6.692963123321533, 4.287669658660889, 0.5925718545913696, 0.19356606900691986, 0.8634646534919739, 189.3330078125, 3.5947797298431396, 0.9175381064414978, 0.8372741341590881, 21.873180389404297, 62.2232666015625, 54.95687484741211, -9.891582489013672, -6.173172473907471, -0.7017567157745361, -12.107324600219727, -2.0871500968933105, 0.5723487138748169, 0.05632268637418747, 0.5136232376098633, 1.210272192955017, 0.08626605570316315, -0.27492398023605347, -1.8608883619308472, -1.069946527481079, -0.6936960220336914, 0.7365202307701111, 1.546463966369629, -0.4239451289176941, 0.8776395916938782, -0.5269442200660706, -0.041200943291187286, -1.6542311906814575, -1.5785257816314697, -0.5987526774406433, 1.5775848627090454, 0.4962875545024872, 0.31063947081565857, 3.2284812927246094, 2.8709609508514404, 1.9071259498596191, 5.294119834899902, 2.4774889945983887, 3.8454742431640625, 1.8301663398742676, 1.4755433797836304, 1.4741829633712769, 1.5041122436523438, 5.954089641571045, 3.0636110305786133, 1.4296730756759644, 1.675854206085205, 1.4774678945541382, 3.569460868835449, 0.1801801323890686, 3.2323882579803467, 1.336500644683838, 2.6678333282470703, 1.4733026027679443, 1.3343086242675781, 1.4705220460891724, 1.984933614730835, 1.0672568082809448, 3.389904499053955, -0.23274369537830353, 2.797027587890625, 0.9999473094940186, 1.198522686958313, 0.704962968826294, 1.4565412998199463, 1.1679123640060425, -0.5551745891571045, -1.7960987091064453, 2.2441368103027344, 0.40111762285232544, -0.49642348289489746, 0.7734733819961548, 1.341956377029419, 0.06617511063814163, 0.6418896317481995, -0.4321531355381012, 1.1610125303268433, -0.03851023688912392, 1.2840443849563599, -0.21741485595703125, 0.36016517877578735, 0.4743955433368683, -0.7105668783187866, -0.09740454703569412, 0.7039214372634888, -0.27873697876930237, -0.39580559730529785, -0.8952370285987854, -0.9746796488761902, 0.462026447057724, 1.1764204502105713, -0.619096040725708, -0.30376991629600525, 1.3786150217056274, 1.437181830406189, 1.7358534336090088, 1.3875480890274048, 1.0958871841430664, 0.35188084840774536, 0.8891122341156006, 3.9632816314697266, 6.857825756072998, 1.146546721458435, 2.0841546058654785, 2.112961769104004, 0.3354015648365021, 1.4218417406082153, 0.6604508757591248, 1.4536211490631104, 0.3090585172176361, 0.200468510389328, 3.744932174682617, 1.5200996398925781, 0.46393081545829773, 1.4258904457092285, -1.3119555711746216, 0.2614569664001465, -0.33304330706596375, -4.066699028015137, -973.1559448242188, 3.3467745780944824, -1.0383483171463013, -1.4209433794021606, 49.040775299072266, -1.0063509941101074, -14.254961967468262, 0.011091030202805996, 3.3505191802978516, 12.669255256652832, 1.293007731437683, -1.4403539896011353, -0.35303956270217896, 13.725162506103516, -3.2876007556915283, -2.262681245803833, -1.8829076290130615, 179.36973571777344, -2.442866563796997, 30.570972442626953, -1.9086859226226807, 0.5755576491355896, -1.3558117151260376, -1.5759135484695435, -2.749817132949829, -3.0641396045684814, -1.3838152885437012, -1.4915021657943726, -1.3418519496917725, -3.343719720840454, 1.986281156539917, -3.031704902648926, -1.1426877975463867, -2.207475185394287, -1.4450491666793823, -1.2727844715118408, -1.4799542427062988, -1.4137312173843384, -0.5670992136001587, -3.2650339603424072, 7.378058433532715, -2.9638445377349854, -1.081111192703247, -1.4430744647979736, -0.12499462813138962, -1.3237614631652832, -1.2641364336013794, 25.407005310058594, 4.2790398597717285, -2.311258554458618, -0.5953714847564697, 0.41318225860595703, -0.7834321856498718, -1.1685887575149536, 0.010291636921465397, -0.6072435975074768, 0.9716203212738037, -1.2918939590454102, 0.2121473252773285, -1.2694240808486938, 0.3396367132663727, -0.41624337434768677, -83.09402465820312, 0.7709457278251648, -37.80040740966797, -0.7723330855369568, 0.23276476562023163, 0.30428317189216614, 1.0283234119415283, 1.0044687986373901, -0.6878232955932617, -1.282426118850708, 0.9166584014892578, 0.30262649059295654, -1.3853543996810913, -1.4059345722198486, -1.9089149236679077, -1.4865010976791382, -1.0912668704986572, -0.3329261541366577, 5.820478439331055, -1.8723522424697876, 226.25360107421875, -1.0601497888565063, -2.2278172969818115, -1.8809983730316162, 18.64459991455078, -1.324453353881836, -185.19593811035156, -1.604863166809082, -0.3450887203216553, -0.23873785138130188, -4.564448833465576, 8.61242961883545, -0.44296693801879883, -2.0209810733795166, 1.2588388919830322, 18.957509994506836, 0.22489280998706818, 2.67502760887146, -0.2524420917034149, -1.750198245048523, -0.0713535025715828, 0.38324564695358276, -0.1691664308309555, 0.20342226326465607, -0.17250482738018036, -0.0994173139333725, -0.4241909980773926, -0.6622026562690735, -0.2032008022069931, 7.643695831298828, 0.36516329646110535, 0.022505857050418854, 1.0914068222045898, 0.6613244414329529, 0.5960760116577148, 1.1830830574035645, 0.9505797624588013, -0.2137775868177414, 0.3852855861186981, 0.20131807029247284, 0.37725454568862915, 0.2860073149204254, 1.1712936162948608, 0.7631077766418457, 0.36484646797180176, 0.9126747250556946, 0.2872623801231384, 0.6495153903961182, -0.9618628025054932, 0.7487784028053284, 0.23168718814849854, 0.7674897313117981, 0.385774165391922, 0.5935032367706299, 0.2931688129901886, 0.4898456633090973, -0.4582892954349518, 0.7778542637825012, -1.5934091806411743, 0.6740440726280212, -0.1486721932888031, 0.30820193886756897, 0.021947376430034637, 0.3179631233215332, 0.31545159220695496, -1.4557726383209229, -0.49720868468284607, 0.5027399063110352, 0.10336340218782425, 0.011729179881513119, 0.23809954524040222, 0.22493137419223785, -0.03418179601430893, 0.05231905356049538, -0.09845005720853806, 0.14920184016227722, 0.13844291865825653, 0.294969379901886, -0.11790864169597626, 0.0743807926774025, 0.11044170707464218, 0.019919605925679207, -0.13124306499958038, 0.11282692849636078, 0.018924791365861893, -0.06314593553543091, -0.28759080171585083, -0.31913653016090393, 0.08792795985937119, 0.2088247835636139, 0.5437398552894592, -0.7424893975257874, 0.22678695619106293, 0.4331795573234558, 0.6034470796585083, 0.38848546147346497, 0.30855226516723633, 0.09634286165237427, -6.851980686187744, 2.4281129837036133, 0.5386146306991577, -0.0704117864370346, 0.4102773368358612, 0.5053914785385132, -0.66060471534729, 0.3391190767288208, 0.26782163977622986, 0.2698085308074951, -0.07950277626514435, 0.15187831223011017, 0.37309354543685913, 0.33137819170951843, 0.16375945508480072, 0.28786933422088623, -0.3265060782432556, 0.09181403368711472, -0.15623581409454346, -0.8607839941978455, 1.155824065208435, 0.7093499898910522, -0.8884782791137695, -1.3143787384033203, 0.16392965614795685, -1.4178332090377808, 0.29729264974594116, 0.15227840840816498, 1.5919283628463745, 1.741304874420166, 0.5151142477989197, -1.4512939453125, -0.5040929913520813, -0.2583470046520233, -3.2900969982147217, -2.8938028812408447, -1.691943883895874, -5.340921401977539, -2.6091971397399902, -3.921100616455078, -1.714521050453186, -1.2627499103546143, -1.4050501585006714, -3.1522951126098633, -5.809540271759033, -3.2042012214660645, -1.4069846868515015, -1.6261558532714844, -1.6122939586639404, -3.523986577987671, -0.2875919044017792, -3.206855535507202, -1.2767186164855957, -2.688906192779541, -1.4667103290557861, -2.3743109703063965, -1.4705839157104492, -1.9569519758224487, -1.1054956912994385, -3.44683575630188, 0.1697864979505539, -3.02618145942688, -1.019812822341919, -1.266537070274353, -0.8594977855682373, -1.4542962312698364, -1.2575082778930664, -0.39963796734809875, 1.6845989227294922, -2.2143306732177734, -0.5011420845985413, 0.5701939463615417, -0.7805647850036621, -1.3741850852966309, -0.1352086067199707, -0.7554540038108826, 0.9084997177124023, -1.1479547023773193, 0.2256636768579483, -1.2273677587509155, 0.274618536233902, -0.27907174825668335, -0.3908369541168213, 0.5765394568443298, 0.15607663989067078, -0.8647779226303101, 0.2562597095966339, 0.45738667249679565, 1.0133880376815796, 0.9238247275352478, -0.4612041413784027, -1.3823575973510742, 0.7870680689811707, 0.41245537996292114, -1.3887417316436768, -1.3906465768814087, -1.9199610948562622, -1.4885333776474, -1.3261096477508545, -0.32818204164505005, -0.9589434862136841, -4.042566776275635, -7.011380672454834, -1.224815011024475, -1.9445774555206299, -2.026455879211426, -0.274452805519104, -1.2027039527893066, -0.811894953250885, -1.4582953453063965, -0.2804015874862671, -0.12942883372306824, -3.720458984375, -1.6627962589263916, -0.4425341784954071, -1.2907965183258057, 1.2594455480575562, -0.26118844747543335, 0.2786886394023895, 3.8813130855560303, -0.7261561751365662, -3.593240976333618, 0.3302586078643799, -1.7936766147613525, 4.231797218322754]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (1.54, 2.5)}}, 'et0_eta2': {'discriminator': {'threshold': 0.1499989151954651, 'nodes': [100, 7, 1], 'bias': [0.02897539548575878, -0.060969915241003036, 0.06634701788425446, 0.0544699989259243, -0.09812245517969131, -0.05099761113524437, 0.07674534618854523, 0.15951259434223175], 'weights': [-0.31444844603538513, -0.007974973879754543, 0.9767981171607971, 0.35912060737609863, 0.35773709416389465, -0.5487702488899231, 0.09982731938362122, 0.12788008153438568, 1.032709002494812, -1.904083013534546, -2.248551607131958, -1.6217820644378662, -0.23122698068618774, 0.29727718234062195, -0.7643448710441589, -0.6755456328392029, 2.9860918521881104, -0.6813769340515137, -0.7880873084068298, 0.0075999656692147255, 0.6813167333602905, -0.06051838770508766, 0.052355457097291946, 0.08054331690073013, 2.4868640899658203, 0.5442368984222412, 0.2716333568096161, 1.094430685043335, 2.226045608520508, 0.7167837023735046, 1.3470226526260376, -0.8734205961227417, -2.338249683380127, 0.5108520984649658, 0.9323012232780457, 0.8195506930351257, 1.7410813570022583, 0.2120186984539032, 0.9207930564880371, -1.0934228897094727, 0.3437107503414154, 0.5938838124275208, 0.6561219692230225, 1.4730861186981201, 0.8714040517807007, 0.8451336026191711, 0.66062331199646, 0.505739152431488, 1.5044615268707275, -1.7701197862625122, -0.028650322929024696, 0.5727477669715881, -3.205003023147583, 0.7880567312240601, 0.7176578044891357, 1.824846625328064, 1.4142401218414307, 0.8913534879684448, -1.9818415641784668, -2.3631978034973145, -0.07163838297128677, 0.33649447560310364, 0.4653497338294983, 0.31566813588142395, 0.37186628580093384, 0.4869270622730255, 0.04481872171163559, -6.84542989730835, -0.46517127752304077, -0.7622383236885071, 0.5973423719406128, 0.010064831003546715, -0.05368892475962639, -0.07345297932624817, 1.43589448928833, 0.4998248219490051, 0.8684946894645691, 0.5807375907897949, 0.3104188144207001, 0.10302061587572098, -0.2189861536026001, -0.372873455286026, 0.3355155885219574, 0.6526758074760437, -1.0521202087402344, -4.109001159667969, -0.13541299104690552, -0.18932859599590302, -0.6796913146972656, 0.5462668538093567, -0.1074884757399559, -0.18989868462085724, 0.814207911491394, -0.1715472787618637, 0.6011205315589905, 0.6105196475982666, 0.06973204761743546, -0.09578269720077515, -0.31661465764045715, 0.617203950881958, -0.19265924394130707, 0.12053674459457397, 0.974147617816925, 0.1614314615726471, 0.4581965506076813, -0.7592872977256775, 0.19167475402355194, 0.21580862998962402, 1.0244218111038208, -1.6844286918640137, -2.3509373664855957, -1.646841049194336, 0.5595585703849792, 0.3063804805278778, -0.7776933312416077, -0.7148526310920715, 3.0630366802215576, -0.749292254447937, -0.6619084477424622, 0.17203514277935028, 0.8771023750305176, -0.08928745239973068, 0.11115219444036484, 0.23463912308216095, 2.544220447540283, 0.5153621435165405, 0.3094092607498169, 1.1637088060379028, 2.124666690826416, 0.7888297438621521, 1.2978804111480713, -0.8465616703033447, -2.3852148056030273, 0.71919184923172, 1.0152634382247925, 0.8795061707496643, 1.7327245473861694, 0.38038262724876404, 0.6871808767318726, -1.1165032386779785, 0.48346737027168274, 0.5054036378860474, 0.6144312620162964, 1.4871852397918701, 0.7855807542800903, 0.7836456894874573, 0.6418640613555908, 0.5033224821090698, 1.3686096668243408, -1.9102201461791992, -0.1144571378827095, 0.3851611912250519, -3.126352548599243, 0.754887580871582, 0.6907877922058105, 1.7133334875106812, 1.358647346496582, 0.8958308696746826, -2.0305330753326416, -2.272655963897705, -0.24263274669647217, 0.24511389434337616, 0.33523690700531006, 0.34523364901542664, 0.22868919372558594, 0.43332818150520325, 0.127890944480896, -6.749431133270264, -0.5979211926460266, -0.6652582883834839, 0.42274075746536255, 0.023517845198512077, -0.01829851046204567, -0.04222530871629715, 1.469895362854004, 0.6764675974845886, 0.8317858576774597, 0.5895307064056396, 0.23711629211902618, 0.17798003554344177, -0.343845009803772, -0.5381394624710083, 0.13865022361278534, 0.6000189185142517, -1.0030326843261719, -4.007426738739014, -0.052062954753637314, -0.18938522040843964, -0.5671910047531128, 0.5872241258621216, 0.1895119547843933, -0.0008728714310564101, 0.7574934959411621, 0.029902983456850052, 0.9452706575393677, 0.6581463813781738, -0.02993658557534218, -0.03519058600068092, -0.4205071032047272, 0.6323032379150391, 0.36742377281188965, -0.14554525911808014, -0.8780345320701599, -0.369386225938797, -0.4107704162597656, 0.6359339356422424, -0.20659451186656952, -0.043877117335796356, -1.018278956413269, 1.6628787517547607, 2.247135639190674, 1.6568918228149414, -0.5677234530448914, -0.3028664290904999, 0.7126548886299133, 0.791175901889801, -3.059911012649536, 0.7927080392837524, 0.7249336838722229, 0.02634100802242756, -0.7237766981124878, -0.06197630614042282, -0.039514582604169846, -0.06623738259077072, -2.4259910583496094, -0.5086884498596191, -0.3519606590270996, -1.175911545753479, -1.1035706996917725, -0.7128134369850159, -1.351284384727478, 0.9043750762939453, 2.439188003540039, -0.6810190081596375, -0.921366274356842, -1.0221166610717773, -1.8235079050064087, -0.30437231063842773, -0.9019280672073364, 1.2759015560150146, -0.42603960633277893, -0.5799115300178528, -0.6890209913253784, -1.440889835357666, -0.8595443964004517, -0.9262452721595764, -0.5162779092788696, -0.5711930990219116, -1.4707610607147217, 1.8547927141189575, 0.0009237970225512981, -0.5780258774757385, 3.1636998653411865, -0.7997531890869141, -0.714714765548706, -1.802286982536316, -1.393869400024414, -0.7182701826095581, 2.1734135150909424, 2.36154842376709, 0.2521708607673645, -0.3996798098087311, -0.8413771986961365, -0.2846900522708893, -0.3506854176521301, -0.4397309720516205, 0.03405170887708664, 6.780691623687744, 0.6704962849617004, 0.8564925193786621, -0.47612154483795166, -0.4390150010585785, -0.08857692033052444, -0.08871271461248398, -1.5346685647964478, -0.6337047219276428, -0.8612844347953796, -0.5316849946975708, -0.25925248861312866, -0.06559115648269653, 0.34923067688941956, 0.39949578046798706, 0.06106622889637947, -0.5602529644966125, 1.0635648965835571, 4.144095420837402, -0.005170879885554314, 0.2176627665758133, 0.6373814344406128, -0.48048222064971924, -0.07527250796556473, 0.07763375341892242, -0.8213342428207397, -0.01599724404513836, -0.6789261102676392, -0.5999417304992676, 0.040403690189123154, 0.0933663621544838, 0.5129363536834717, -0.552228569984436, 0.25342461466789246, 0.064550019800663, -0.7719321250915527, -0.254232257604599, -0.37257328629493713, 0.5826165080070496, -0.2827109396457672, -0.07808215171098709, -1.1532353162765503, 1.7887396812438965, 2.3549227714538574, 1.544877290725708, -0.5747133493423462, -0.44456446170806885, 0.6890226006507874, 0.7301904559135437, -3.0897836685180664, 0.6887918710708618, 0.6325669884681702, -0.1914738267660141, -0.9138544797897339, -0.04270365461707115, -0.09455379098653793, -0.20914599299430847, -2.5104267597198486, -0.48681962490081787, -0.16458961367607117, -1.1317005157470703, -1.0096282958984375, -0.8340103030204773, -1.417182445526123, 0.8875043392181396, 2.2778992652893066, -0.8808652758598328, -1.0732719898223877, -0.8950208425521851, -1.8264819383621216, -0.28220537304878235, -0.812218427658081, 1.1411540508270264, -0.4348108470439911, -0.6162168383598328, -0.6855888366699219, -1.459834337234497, -0.7873580455780029, -0.9496245980262756, -0.8507062196731567, -0.9182076454162598, -1.3478670120239258, 1.9358686208724976, 0.12279247492551804, -0.3950200378894806, 3.013859510421753, -0.7361040115356445, -0.6690075397491455, -1.7863739728927612, -1.305168628692627, -0.7409262657165527, 1.9833468198776245, 2.294002056121826, 0.10513488203287125, -0.4054502546787262, -0.5201694369316101, -0.34282538294792175, -0.3061125874519348, -0.42904797196388245, -0.14717519283294678, 6.825473308563232, 0.4531589150428772, 0.7681583762168884, -0.5692703723907471, -0.11347512900829315, 0.016534041613340378, 0.07176008820533752, -1.5263510942459106, -0.6861600279808044, -0.9743805527687073, -0.6032975912094116, -0.26303204894065857, -0.05260995402932167, 0.36187732219696045, 0.5144113898277283, 0.006863786838948727, -0.4472571313381195, 0.9919403791427612, 4.13241720199585, 0.12055417895317078, 0.23792202770709991, 0.5998636484146118, -0.5416392087936401, -0.12574274837970734, 0.1432696133852005, -0.6380724906921387, 0.09612179547548294, -0.6746088266372681, -0.6222988367080688, -0.08698374032974243, -0.08036011457443237, 0.5385463237762451, -0.646765947341919, 0.18152303993701935, 0.007718496955931187, -0.9017154574394226, -0.15950575470924377, -0.43577849864959717, 0.6454395651817322, -0.30594679713249207, -0.07777499407529831, -0.2768642008304596, 1.8883517980575562, 2.3471567630767822, 1.7210108041763306, 0.2697894871234894, -0.4556847810745239, 0.7949007153511047, 0.6492237448692322, -2.9696013927459717, 0.8122413158416748, 0.7689918279647827, -0.09277377277612686, -0.8445194959640503, -0.14155295491218567, -0.10827150195837021, 0.021438149735331535, -2.5556159019470215, -0.5210983753204346, -0.3694680631160736, -1.0982404947280884, -2.1612095832824707, -0.8739190697669983, -1.3987609148025513, 0.8075590133666992, 2.424760341644287, -0.4959585964679718, -1.3643627166748047, -0.8088565468788147, -1.8851650953292847, -0.29065799713134766, -0.8622208833694458, 1.141046166419983, -0.4537082016468048, -0.4950883984565735, -0.7654668688774109, -1.2891098260879517, -0.7138290405273438, -0.6684709191322327, -0.5007423162460327, -0.5878694653511047, -1.456843376159668, 1.9087945222854614, 0.1175469160079956, -0.4605148732662201, 3.1904404163360596, -0.757300853729248, -0.7752445936203003, -1.885115623474121, -1.3575143814086914, -0.7935184240341187, 2.148690700531006, 2.2285685539245605, 0.27148741483688354, -0.21915796399116516, -0.4096425175666809, 0.2009628415107727, -0.2413228303194046, -0.5621650815010071, -0.006187445018440485, 6.8341193199157715, 0.5674905180931091, 0.8719193339347839, -0.56325364112854, -0.015516220591962337, -0.04328717663884163, 0.0011602623853832483, -1.5135656595230103, -0.695424497127533, -0.7663698196411133, -0.5022937655448914, -0.3319525420665741, -0.20945343375205994, 0.1814481019973755, 0.4380049407482147, -0.29913362860679626, -0.44858255982398987, 1.1502363681793213, 3.727433204650879, 0.005669411271810532, -0.43110281229019165, 0.5008920431137085, -0.30187368392944336, 0.12769964337348938, 0.2131757289171219, -0.6690605878829956, -0.009350295178592205, -0.5499063730239868, -0.5896272659301758, -0.06904992461204529, -0.07056774199008942, 0.32389965653419495, -0.1490631401538849, -0.34620583057403564, 0.021604102104902267, 0.8964369297027588, 0.33745077252388, 0.24696482717990875, -0.6392362713813782, 0.23555251955986023, 0.20643915235996246, 0.9265234470367432, -1.5724503993988037, -2.2478573322296143, -1.6098995208740234, 0.7351807355880737, 0.44913777709007263, -0.7584468722343445, -0.7800948023796082, 3.1549291610717773, -0.6995084285736084, -0.7747853398323059, 0.1850854456424713, 0.684406042098999, -0.023160457611083984, 0.0527169294655323, 0.05131242424249649, 2.599490165710449, 0.5896647572517395, 0.2364015430212021, 1.0115768909454346, 1.0914065837860107, 0.7217136025428772, 1.275020718574524, -0.8868167400360107, -2.315732002258301, 0.8515210747718811, 1.1454874277114868, 0.9732614755630493, 1.7522085905075073, 0.31894785165786743, 0.7771338224411011, -1.200458288192749, 0.44616082310676575, 0.462900847196579, 0.8029491901397705, 1.3899693489074707, 0.6503082513809204, 0.9858700633049011, 0.7423867583274841, 0.8579938411712646, 1.3850865364074707, -1.944483757019043, 0.05228741094470024, 0.4444732964038849, -3.100029230117798, 0.6276625394821167, 0.8047358989715576, 1.800484299659729, 1.311264991760254, 0.9312310218811035, -2.101048469543457, -2.217818021774292, -0.2688087522983551, 0.3872702419757843, 0.7641764879226685, 0.3830004632472992, 0.2702789902687073, 0.34814348816871643, 0.023908797651529312, -6.693897724151611, -0.509006917476654, -0.6848273277282715, 0.3998594284057617, 0.3821243941783905, -0.0748259648680687, 0.11787129193544388, 1.4353647232055664, 0.4791247546672821, 0.9585753083229065, 0.6225333213806152, 0.23746784031391144, 0.08571476489305496, -0.33956611156463623, -0.37658610939979553, 0.06400368362665176, 0.6250810027122498, -1.2042359113693237, -4.167503356933594, -0.17030271887779236, -0.2024393230676651, -0.686327338218689, 0.6158691048622131, -0.004272652789950371, -0.15172500908374786, 0.7058130502700806, -0.1492621749639511, 0.8377251029014587, 0.6425130367279053, -0.0587550513446331, -0.011186622083187103, -0.3750644028186798, 0.45686501264572144, 0.39105644822120667, -0.025475554168224335, -0.9448084235191345, -0.17672255635261536, -0.3310766816139221, 0.6198084950447083, -0.12551653385162354, -0.17280590534210205, -1.0382109880447388, 1.7992517948150635, 2.3504867553710938, 1.5589361190795898, -0.6244323253631592, -0.545194149017334, 0.6514461636543274, 0.8150684237480164, -3.042853355407715, 0.7147244215011597, 0.6197592616081238, -0.20456333458423615, -0.7576584815979004, -0.07558997720479965, -0.03151063248515129, -0.042013317346572876, -2.555046558380127, -0.5121866464614868, -0.35546499490737915, -1.031944751739502, -1.0589368343353271, -0.906965434551239, -1.4501054286956787, 0.7234553098678589, 2.3673014640808105, -0.834284245967865, -1.1588187217712402, -1.0165021419525146, -1.7437015771865845, -0.21355247497558594, -0.7760430574417114, 1.0865788459777832, -0.35465338826179504, -0.5834845900535583, -0.7270978689193726, -1.4284029006958008, -0.7141002416610718, -0.7763300538063049, -1.0142265558242798, -1.0503994226455688, -1.4010200500488281, 1.785997748374939, -0.023478718474507332, -0.5443571209907532, 3.083482027053833, -0.5669548511505127, -0.9035919904708862, -1.7623683214187622, -1.4137661457061768, -0.9140440225601196, 2.1081018447875977, 2.3884761333465576, 0.11144188791513443, -0.3146120011806488, -0.7461819648742676, -0.2481086552143097, -0.16968579590320587, -0.3327823579311371, 0.0784405842423439, 6.792299747467041, 0.6190653443336487, 0.7775694727897644, -0.4046388268470764, -0.4212479293346405, 0.050741661339998245, -0.05749735236167908, -1.502224087715149, -0.5707641243934631, -0.9293507933616638, -0.46286097168922424, -0.280815452337265, -0.061725880950689316, 0.3514498472213745, 0.35134655237197876, -0.150596484541893, -0.6404426693916321, 0.9990173578262329, 3.992751359939575, 0.20375502109527588, 0.13540880382061005, 0.5394612550735474, -0.5991140007972717, -0.13278932869434357, 0.08818145096302032, -0.8440395593643188, 0.01949687860906124, -1.0070663690567017, -0.43945908546447754, -0.0663471668958664, -0.06650318205356598, 0.4358328878879547, -0.46121084690093994, -1.9063987731933594, -0.6755901575088501, 0.7471257448196411, 0.683555543422699, 0.8501876592636108, -0.7736931443214417, 0.8787028193473816]}, 'datecode': '2016-10-18 17:02', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (0, 20), 'etaBin': (1.37, 1.54)}}, 'et4_eta1': {'discriminator': {'threshold': 0.43499864339828492, 'nodes': [100, 5, 1], 'bias': [-0.006794690620154142, -0.1554284542798996, -0.3984045386314392, 0.030208555981516838, -0.10840713977813721, -0.14096811413764954], 'weights': [-1.7999227046966553, -1.027034878730774, 1.5167815685272217, 1.3038241863250732, 1.0221314430236816, 1.30545973777771, -0.8648515939712524, -1.0125584602355957, -1.7937843799591064, -2.820099353790283, 0.2814648151397705, 0.5318836569786072, 0.5089548826217651, 5.107941150665283, 4.707424163818359, 10.953789710998535, 9.580018997192383, 6.9715094566345215, 7.283199787139893, 7.441274642944336, 7.319461345672607, 7.384079933166504, 10.955340385437012, 6.394368648529053, 4.812088966369629, 4.612451076507568, 4.57286262512207, 8.837888717651367, 6.0176286697387695, 4.635505199432373, 4.066656589508057, 2.8422253131866455, 4.092710971832275, 4.315120697021484, 3.0796291828155518, 2.271243095397949, 0.3258189260959625, 2.9608850479125977, 4.199531078338623, 2.9192416667938232, 2.390683889389038, 2.393772602081299, 3.086351156234741, -4.281545639038086, -0.27714815735816956, 2.386082410812378, -1.8600664138793945, 0.5252542495727539, 0.7647185921669006, -1.2609208822250366, -2.265915632247925, -4.432082653045654, 2.5929415225982666, 1.3052434921264648, 0.9118005037307739, -0.11201512068510056, 3.186361074447632, 1.0065803527832031, 0.7002419829368591, -2.3315236568450928, -1.2701539993286133, -4.695784091949463, 0.8107354640960693, 4.077216148376465, -1.2741401195526123, -1.6601881980895996, -0.9998442530632019, 2.0348238945007324, -1.7414342164993286, 0.7748311161994934, 0.10149277001619339, 1.1885353326797485, -1.001505732536316, -0.2078997641801834, 1.7877411842346191, 3.9085121154785156, 4.058349609375, 3.022414207458496, 1.167700171470642, 0.8763085603713989, 5.2606072425842285, 6.248317718505859, 7.434049129486084, 6.32707405090332, 5.177743911743164, 1.253045678138733, 3.2860896587371826, 4.109064102172852, 3.6760289669036865, 2.5070691108703613, 0.16121390461921692, -0.3287222683429718, 9.529077529907227, 5.444869041442871, 2.950199842453003, 1.7038172483444214, 3.7537684440612793, 4.954484939575195, 1.5676814317703247, 0.43348121643066406, 1.9155974388122559, -0.27084213495254517, -1.8248854875564575, -1.8497902154922485, -0.48866498470306396, -1.2326923608779907, -0.7088906764984131, -0.3377949297428131, 2.383814573287964, 2.227478265762329, 4.464389801025391, 0.2766726315021515, 0.09003609418869019, -1.466630220413208, -1.7234777212142944, -5.583449840545654, -4.656095027923584, -6.059502601623535, -5.832686424255371, -5.874022483825684, -5.76144552230835, -5.927149772644043, -4.147836208343506, -6.162843704223633, -4.859310150146484, -4.424472808837891, -4.334743022918701, -5.037566184997559, -5.423601150512695, -3.8823442459106445, -4.021630764007568, -3.7493598461151123, -3.977189302444458, -4.179591178894043, -3.0509562492370605, -3.055844783782959, -2.249603271484375, -3.1172916889190674, -4.28181266784668, -3.141746997833252, -2.578383207321167, -2.4541687965393066, -3.008423328399658, 3.0007166862487793, -0.8047334551811218, 1.444414734840393, 1.9381978511810303, -0.5315545201301575, -0.8709000945091248, -1.3247100114822388, -1.6892642974853516, 4.959435939788818, 0.4229227602481842, -1.4444005489349365, -0.9399492740631104, 0.13651129603385925, -1.2663679122924805, -1.0414769649505615, -0.3001660108566284, 2.391136407852173, 1.2387099266052246, 5.031053066253662, -0.813446044921875, 2.007856607437134, 1.3512825965881348, 1.6835397481918335, 1.424838662147522, -0.5842573046684265, 1.823012113571167, -0.5202951431274414, -0.9089785814285278, -1.0309703350067139, 1.2853267192840576, 0.1413520872592926, -2.0295960903167725, -4.015827178955078, -4.124287128448486, -3.0098304748535156, -1.6257693767547607, -0.790565550327301, -8.66431713104248, -6.247581481933594, -5.837586879730225, -4.8163886070251465, -4.966397285461426, -3.8456342220306396, -3.212890625, -4.001729488372803, -3.8169500827789307, -3.0062172412872314, -0.01592959091067314, 0.331468790769577, -8.44169807434082, -5.0702314376831055, -3.0035383701324463, -1.620993733406067, -4.026189804077148, -4.6726484298706055, -2.8539879322052, -1.3541570901870728, 1.5974605083465576, 1.9344853162765503, -0.5923197865486145, -0.5208407640457153, 1.3568525314331055, 1.4686882495880127, 0.46828562021255493, 0.6234206557273865, 1.6291574239730835, 3.773839235305786, -2.2849690914154053, -0.0173037126660347, -0.6913514137268066, -2.2018117904663086, -2.005866527557373, -1.1781272888183594, -1.0746055841445923, -2.960521936416626, -3.020195960998535, -3.291041612625122, -3.1039140224456787, -3.1437220573425293, -3.365147590637207, -2.7703027725219727, -2.0528550148010254, -1.8534427881240845, -1.9343363046646118, -3.7497124671936035, -2.482781171798706, -1.8200953006744385, -1.5440616607666016, -1.1102930307388306, -1.817267894744873, -1.8834421634674072, -1.1623601913452148, -0.9870098233222961, -0.010297157801687717, -1.1041889190673828, -1.671156883239746, -1.2849154472351074, -0.8064302206039429, -0.991357147693634, -1.1975551843643188, -0.10585328191518784, 0.3697037100791931, -0.556940495967865, -0.15853485465049744, -0.034072861075401306, -0.42182764410972595, 0.7920054197311401, 1.2212443351745605, 2.1734256744384766, -1.0674257278442383, 0.40708163380622864, 1.3429632186889648, 0.32503095269203186, -2.000063896179199, -0.30996984243392944, -0.09442844241857529, 1.2394380569458008, 0.6918144822120667, 2.3371236324310303, 2.3947508335113525, -1.6665288209915161, 1.0100497007369995, 1.0625598430633545, 0.7157778739929199, -0.7973801493644714, 1.003158450126648, -0.2244928777217865, -0.23057889938354492, -0.25567328929901123, 0.26687583327293396, 0.5571849942207336, -0.8021562099456787, -0.9193214178085327, -1.7109324932098389, -1.3166331052780151, -0.056996699422597885, -0.3299941420555115, -2.3191375732421875, -2.720602035522461, -3.1226112842559814, -2.6633172035217285, -2.2291204929351807, -0.5240607857704163, -1.3279191255569458, -1.5835566520690918, -1.4658986330032349, -1.0713777542114258, -0.3082595467567444, 0.4604063332080841, -4.250147342681885, -2.1554455757141113, -1.1069138050079346, -0.11036043614149094, -1.5041146278381348, -1.9783992767333984, -0.34503164887428284, -0.10214173793792725, -1.938421607017517, -1.0800155401229858, 1.4481016397476196, 1.524210810661316, 1.0090358257293701, 1.4126237630844116, 0.8840153813362122, -0.8710037469863892, -3.8382015228271484, -2.941593647003174, 0.26305797696113586, 0.5373278856277466, 0.6271727681159973, 5.087252140045166, 4.527551174163818, 11.104263305664062, 9.684577941894531, 6.9155778884887695, 7.264986515045166, 7.306527137756348, 7.2929253578186035, 7.236979007720947, 10.854584693908691, 6.553384780883789, 4.738665580749512, 4.4313812255859375, 4.579624652862549, 8.656661987304688, 5.997731685638428, 4.638885974884033, 4.00109338760376, 2.936990976333618, 4.047165393829346, 4.184921741485596, 2.9954614639282227, 2.2098889350891113, 0.3068324625492096, 2.9505794048309326, 4.352214813232422, 3.034167528152466, 2.4667346477508545, 2.46748948097229, 2.969614267349243, -4.291418075561523, -0.24009820818901062, 2.3423354625701904, -1.9760377407073975, 0.44410112500190735, 0.6611433625221252, -1.142242670059204, -2.1912992000579834, -4.314085006713867, 2.5685765743255615, 1.4943268299102783, 0.9407423734664917, -0.21247321367263794, 3.203758478164673, 1.0463519096374512, 0.6714291572570801, -2.343329429626465, -1.222947359085083, -4.786113262176514, 0.8974404335021973, 4.074822425842285, -1.2417911291122437, -1.661712884902954, -1.067645788192749, 2.0441198348999023, -1.7505759000778198, 0.7762546539306641, 0.2216433435678482, 1.0408440828323364, -0.9313820004463196, -0.19841738045215607, 1.8793439865112305, 4.019741535186768, 4.018013954162598, 2.993985414505005, 1.201834797859192, 0.9852899312973022, 5.097991466522217, 6.315361022949219, 7.412949562072754, 6.136035919189453, 5.180999755859375, 1.2649462223052979, 3.2474563121795654, 4.1203389167785645, 3.7236316204071045, 2.692964792251587, 0.16463275253772736, -0.23796097934246063, 9.620084762573242, 5.165962219238281, 3.042635679244995, 1.5743240118026733, 3.593649387359619, 4.726230621337891, 1.7003471851348877, 0.518455982208252, -0.4016145169734955, -1.1008011102676392, 0.317803293466568, 0.28608277440071106, 0.32597100734710693, 0.45084553956985474, -0.07374785095453262, -0.12140609323978424, -0.7596582174301147, -0.6700848340988159, 0.9180830121040344, 0.17629995942115784, 0.3709384500980377, 1.237718105316162, 1.0335623025894165, 1.8659745454788208, 1.5641096830368042, 1.5010194778442383, 1.4791438579559326, 1.5595364570617676, 1.4915823936462402, 1.641279935836792, 1.5178728103637695, 1.3930697441101074, 0.9667136073112488, 1.000006914138794, 1.079171895980835, 1.8384828567504883, 1.255077838897705, 0.9240754246711731, 0.940382182598114, 0.5644510388374329, 0.9919483065605164, 1.055948257446289, 0.6073247194290161, 0.6412028670310974, 0.2344931662082672, 0.7457457780838013, 0.9121500849723816, 0.7754244804382324, 0.4824374318122864, 0.6844104528427124, 0.7171680927276611, -0.7123866081237793, 0.08371774107217789, 0.6915780305862427, -0.22039438784122467, 0.09132708609104156, 0.1909630447626114, -0.06418135017156601, -0.3973239064216614, 0.16872800886631012, 0.7118033170700073, 0.38794857263565063, 0.33103108406066895, -0.05470170080661774, 0.5033832788467407, 0.3071689009666443, 0.18335385620594025, -0.4761725962162018, -0.1390201449394226, -0.7718136310577393, 0.20810943841934204, 0.8809258937835693, -0.11245188117027283, -0.3263871371746063, -0.22725363075733185, 0.5411223769187927, -0.15130744874477386, 0.2490055114030838, 0.082724928855896, 0.3128555417060852, -0.373563677072525, -0.08090195804834366, 0.45042020082473755, 0.7943832874298096, 1.0029401779174805, 0.6371498107910156, 0.26931270956993103, 0.1977020800113678, 1.0659189224243164, 1.3883217573165894, 1.6231980323791504, 1.4670684337615967, 1.0528758764266968, 0.31061288714408875, 0.8662287592887878, 0.8216555118560791, 0.9152927398681641, 0.5646606683731079, 0.07351450622081757, -0.04422774538397789, 1.976365089416504, 1.1628947257995605, 0.7537108659744263, 0.3191155791282654, 0.9357360005378723, 1.1520085334777832, -0.09915212541818619, 0.28015679121017456, -1.47908353805542, -5.043899059295654, 1.3066630363464355, -8.05117416381836, -1.4243520498275757]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0.8, 1.37)}}, 'et4_eta3': {'discriminator': {'threshold': 0.42499865293502809, 'nodes': [100, 5, 1], 'bias': [0.10244271904230118, -0.026634719222784042, -0.027671828866004944, -0.11646553128957748, -0.0258479006588459, -0.23860521614551544], 'weights': [2.1136536598205566, 2.4761157035827637, -1.3354885578155518, -2.1343538761138916, -1.1735503673553467, -0.47224685549736023, 1.0595214366912842, -1.2222939729690552, 2.3140790462493896, 1.6813380718231201, 0.6189742684364319, -3.9977757930755615, -0.8143018484115601, -0.1061888113617897, -4.447263717651367, -5.6257452964782715, -2.7986018657684326, -6.704593658447266, -5.6314496994018555, -8.470595359802246, -3.464118480682373, -2.936347246170044, -2.4384608268737793, -8.164268493652344, -7.307194232940674, 0.27701619267463684, -2.2832694053649902, -7.54141092300415, -3.060548782348633, -4.162448883056641, -0.8520064949989319, -4.523809432983398, -2.304520845413208, -6.090267658233643, -2.2615864276885986, -4.290173053741455, -2.205183982849121, -2.169804573059082, -2.0118966102600098, -3.0833938121795654, 0.018090147525072098, -3.1861417293548584, 0.1231064423918724, -3.103140354156494, -0.29170987010002136, -1.815237045288086, -0.7281785011291504, -2.0659029483795166, 3.505709171295166, -2.0389456748962402, 0.6046255826950073, -1.3204889297485352, 1.9987943172454834, 3.2374703884124756, 1.3518534898757935, -1.6912293434143066, 4.667560577392578, -0.3907375633716583, 1.0986171960830688, -6.122414588928223, -0.08550530672073364, -1.7563936710357666, 1.0574041604995728, -1.828696608543396, 4.339155673980713, -1.344999074935913, -0.3004172742366791, -2.09759783744812, -0.899025559425354, -2.705749034881592, -1.429856538772583, -2.304187297821045, 0.5561367273330688, 0.4578809142112732, -2.1317460536956787, -2.1856703758239746, -2.2690391540527344, -2.1190686225891113, -1.5095014572143555, -0.742570698261261, -1.509751558303833, -2.2176427841186523, -13.434452056884766, -5.1173095703125, -2.595923900604248, -1.789684772491455, -1.9907029867172241, -2.071993350982666, -0.687940239906311, -2.993159770965576, -0.9220067262649536, -1.0641709566116333, -8.194657325744629, -3.4413692951202393, -0.4580751359462738, -1.7424548864364624, -1.2552765607833862, 0.010018037632107735, -0.4191332459449768, -1.4578543901443481, -2.115049362182617, -2.398184061050415, 1.4441759586334229, 2.0071306228637695, 1.2278002500534058, 0.42092978954315186, -0.6694797873497009, 1.3636431694030762, -2.4132156372070312, -1.0785812139511108, -0.654043972492218, 4.0377326011657715, 0.7583564519882202, 0.10480508208274841, 5.242630958557129, 5.689621925354004, 2.6909446716308594, 6.801192760467529, 5.60910177230835, 8.38937759399414, 8.718599319458008, 2.0788073539733887, 2.23823881149292, 8.17409610748291, 7.450192451477051, 3.954339027404785, 2.0829038619995117, 7.580160140991211, 3.045069932937622, 4.2243332862854, 1.0374382734298706, 4.511968612670898, 2.166616678237915, 5.162961959838867, 2.372391939163208, 4.462983131408691, 2.1679937839508057, 2.0365359783172607, 2.0696470737457275, 3.3711631298065186, 0.05041453242301941, 3.205158233642578, 0.8907615542411804, 3.0509016513824463, 0.35105249285697937, 1.9714038372039795, 0.8271780610084534, 2.0119431018829346, -2.7213120460510254, 2.012510061264038, -0.59637051820755, 1.2845218181610107, -1.8807774782180786, -3.1734073162078857, -1.3776136636734009, 1.7171220779418945, -4.140094757080078, 0.43026307225227356, -1.132845163345337, 6.066633224487305, 0.17703993618488312, 1.8853768110275269, -1.108108639717102, 2.038774013519287, -4.435719013214111, 1.3822416067123413, 0.42699965834617615, 2.2038395404815674, 0.8026497960090637, 3.318131446838379, 1.2378698587417603, 2.1552581787109375, -1.622920274734497, -0.06758100539445877, 2.2439637184143066, 2.1693456172943115, 2.299821615219116, 2.2396175861358643, 1.6990301609039307, 0.8935832381248474, 2.048569917678833, 2.1562492847442627, 9.985710144042969, 5.1122918128967285, 4.914822578430176, 1.878947377204895, 2.068976640701294, 2.03466534614563, -3.1008622646331787, 2.884702205657959, 0.8316497206687927, 1.0190722942352295, 7.438014507293701, 3.340212345123291, 0.36704349517822266, 1.803732991218567, 0.9005705118179321, 0.026195265352725983, 0.9331294298171997, 1.4886400699615479, -2.242891311645508, -2.551076650619507, 1.4809571504592896, 2.238367795944214, 1.4156361818313599, 0.4944586157798767, -0.9664744138717651, 1.3584625720977783, -2.4787468910217285, -2.2724645137786865, -0.5287601351737976, 4.111442565917969, 0.6733664274215698, -0.03702039271593094, 4.495578289031982, 5.7202863693237305, 2.8017024993896484, 6.816144943237305, 5.799431324005127, 8.432250022888184, 3.287015199661255, 2.8676507472991943, 2.196160316467285, 8.338970184326172, 7.510587692260742, -0.20106478035449982, 2.0992941856384277, 7.659865856170654, 3.217709541320801, 4.208213806152344, 1.0480554103851318, 4.542307376861572, 2.265922784805298, 6.185456275939941, 2.393498420715332, 4.5030412673950195, 2.059751272201538, 2.1484198570251465, 2.1146152019500732, 3.019162178039551, -0.11174126714468002, 3.1327524185180664, -0.08307851850986481, 3.114877700805664, 0.341488778591156, 1.9128708839416504, 0.5881271362304688, 2.128124475479126, -3.35807728767395, 2.0762782096862793, -0.5713495016098022, 1.3524963855743408, -2.0395641326904297, -3.2001678943634033, -1.3914719820022583, 1.5958410501480103, -4.563697338104248, 0.4134733974933624, -1.06615149974823, 6.13709831237793, 0.06818988174200058, 1.8502658605575562, -1.3920928239822388, 1.8773846626281738, -4.271185874938965, 1.2731740474700928, 0.3156578242778778, 2.02909255027771, 0.8152152895927429, 5.316812992095947, 1.2877037525177002, 2.1201581954956055, -0.4915796220302582, -0.6078155040740967, 2.202939748764038, 2.053640127182007, 2.2646613121032715, 2.059619426727295, 1.4302775859832764, 0.9473094344139099, 1.4782090187072754, 2.1622867584228516, 9.86046314239502, 5.054417133331299, 2.245720863342285, 1.9868146181106567, 2.0787513256073, 2.1578099727630615, 0.6623260974884033, 2.8673501014709473, 0.7761743068695068, 1.106217384338379, 8.041617393493652, 3.436439275741577, 0.30246272683143616, 1.6667946577072144, 1.0801926851272583, -0.15979406237602234, 0.8684966564178467, 1.4452787637710571, -142.03860473632812, 1.9209511280059814, -1.4678245782852173, -2.176791191101074, -1.36861252784729, -0.5441265106201172, 0.7711635828018188, 9.741856575012207, 2.471639633178711, 4.0471720695495605, 0.6153625845909119, -2.9475879669189453, -0.5559614896774292, 5.189255714416504, -5.787713050842285, 3.5091118812561035, -2.64949893951416, 60.66307067871094, -5.6393351554870605, 59.194366455078125, -8.789266586303711, -0.28474676609039307, -2.2303760051727295, -8.293728828430176, -7.3675312995910645, -3.7747671604156494, 7.462562084197998, -7.0675859451293945, -3.0233042240142822, 4.3458333015441895, -1.0345925092697144, -2.9636011123657227, -2.2457046508789062, -5.228454113006592, -2.309159278869629, -3.00010085105896, -2.1044833660125732, -0.8779270648956299, -1.9660024642944336, -3.2438900470733643, -0.07719025760889053, -3.0831034183502197, 5.522830009460449, -3.0399866104125977, -0.26664799451828003, -1.8533949851989746, -0.9435549974441528, -2.143346071243286, 2.924920082092285, -2.0373075008392334, 0.3517892062664032, -1.4308514595031738, 1.8721117973327637, 3.143479824066162, 1.3025211095809937, -1.8728183507919312, 4.106044292449951, -0.3792337477207184, 0.9321981072425842, -6.085890293121338, -0.23069553077220917, -1.915037751197815, 1.0746597051620483, -1.9125007390975952, 4.342075347900391, -1.3776702880859375, -0.5140342116355896, -2.228787660598755, -0.8907374739646912, -2.615466833114624, -1.2966004610061646, -2.0413265228271484, 1.7899733781814575, 0.5288868546485901, -2.090083360671997, -2.2000763416290283, -2.1760451793670654, -2.088895082473755, -1.6077251434326172, -0.8657386302947998, 18.871570587158203, -1.9380265474319458, -13.092113494873047, -4.997984409332275, -4.738004207611084, -1.958965539932251, -2.112590789794922, -2.1513755321502686, -88.76246643066406, -17.29631233215332, -1.2429815530776978, -0.9369333386421204, -7.299914836883545, -3.3198277950286865, -0.4131157696247101, -1.92756187915802, -0.8283920288085938, 0.10012806951999664, -1.0590925216674805, -1.5049571990966797, -2.0256004333496094, -2.5168638229370117, 1.301788568496704, 2.200427532196045, 1.1756267547607422, 0.514249324798584, -1.042991042137146, 1.333069920539856, -2.4084813594818115, -2.1737043857574463, -0.6555187702178955, 3.9782373905181885, 0.6623839139938354, -0.035289861261844635, 4.552762985229492, 5.56650972366333, 2.6981701850891113, 6.703571319580078, 5.752769947052002, 8.487652778625488, 3.302428722381592, 2.899444341659546, 2.264791965484619, 8.146153450012207, 7.5582122802734375, -0.26566651463508606, 2.252723217010498, 7.596414089202881, 3.1182103157043457, 4.093232154846191, 0.8007409572601318, 4.4159111976623535, 2.208712577819824, 6.049647808074951, 2.221940279006958, 4.450047016143799, 2.204908847808838, 2.144577980041504, 2.0289366245269775, 2.9903759956359863, -0.024109508842229843, 3.1645309925079346, -0.23779073357582092, 3.198810338973999, 0.3822338283061981, 1.8081729412078857, 0.5110057592391968, 2.058108329772949, -3.3312489986419678, 2.1967084407806396, -0.5932506322860718, 1.4020277261734009, -2.131554126739502, -3.1461503505706787, -1.2905434370040894, 1.544182300567627, -4.567009449005127, 0.4236147701740265, -0.9370492100715637, 6.027017593383789, 0.20755675435066223, 1.9110465049743652, -1.384356141090393, 1.9522731304168701, -4.4787397384643555, 1.3535667657852173, 0.3302721083164215, 2.2109057903289795, 0.8844916820526123, 5.253039836883545, 1.4480197429656982, 2.2843456268310547, -0.5308747887611389, -0.5522910952568054, 2.206855058670044, 2.0478646755218506, 2.1654529571533203, 2.2306225299835205, 1.3617877960205078, 0.8822181820869446, 1.525431513786316, 2.0791828632354736, 13.402020454406738, 5.2538652420043945, 2.544570207595825, 1.820676326751709, 1.9823253154754639, 2.125417947769165, 0.7496980428695679, 2.892738103866577, 0.8779227137565613, 1.0895835161209106, 8.246766090393066, 3.4497177600860596, 0.3534480631351471, 1.908599615097046, 1.0185743570327759, -0.08690472692251205, 0.44496309757232666, 1.4602241516113281, 1.7230116128921509, -0.08106107264757156, -2.1638827323913574, 0.417394757270813, -2.439040184020996]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (1.54, 2.5)}}, 'et3_eta0': {'discriminator': {'threshold': 0.42499865293502809, 'nodes': [100, 5, 1], 'bias': [-0.1838398277759552, 0.008611112833023071, 0.18154369294643402, 0.023585721850395203, -0.035233061760663986, 0.19036158919334412], 'weights': [4.017240047454834, 1.901187777519226, -0.294178307056427, -0.08676494657993317, 0.6386704444885254, 0.26069581508636475, 0.4465356171131134, 0.6096044778823853, 1.518546462059021, 2.2324438095092773, -2.307410478591919, -5.6883015632629395, -2.416430950164795, -0.5659266114234924, -1.99880051612854, -1.188903570175171, -4.143251419067383, -4.194454669952393, -3.770979404449463, -3.602367639541626, -4.060153961181641, -3.8789095878601074, -2.8690292835235596, -1.0932801961898804, -3.167452335357666, -1.913938045501709, -2.9928972721099854, -2.8793139457702637, -2.1918280124664307, -2.0739057064056396, -0.3669455945491791, -0.953891932964325, -1.7267831563949585, -1.0764167308807373, -2.0238027572631836, -1.078501582145691, -1.0553325414657593, -0.8950349688529968, -1.080519199371338, -1.1914687156677246, -1.0000526905059814, -1.2180471420288086, -0.5844687819480896, 0.8340210914611816, -0.04327065870165825, -2.5265517234802246, -1.110429286956787, -1.8567613363265991, -0.8584017753601074, -0.9068220257759094, -1.8937453031539917, 2.2211856842041016, 0.5059202909469604, 0.5171898603439331, -0.48264437913894653, -0.4789438247680664, -0.014382182620465755, 0.6536459922790527, -1.3602056503295898, -2.2299585342407227, -0.7366456389427185, 0.6679100394248962, 0.3166215717792511, 0.261661559343338, 1.1499239206314087, 2.046154499053955, -0.18762975931167603, 0.3376421332359314, -0.16516658663749695, -1.997430443763733, 0.0856507271528244, 0.13066110014915466, 0.5849431157112122, 0.2665240168571472, -0.8466548919677734, -1.3664209842681885, -1.8862532377243042, -1.1348214149475098, -1.0910627841949463, -0.4562837779521942, -1.5834029912948608, -1.6089749336242676, -3.3822426795959473, -3.456171751022339, -0.7796923518180847, -1.6461519002914429, -1.1340405941009521, -3.9541521072387695, -3.7404253482818604, -2.9091439247131348, -0.9762431979179382, -0.2890397906303406, -3.1414473056793213, -2.7521419525146484, -1.2586270570755005, 0.12843632698059082, -3.800344705581665, -2.299518585205078, 0.45417091250419617, 0.31377050280570984, 3.8944687843322754, 1.999672293663025, -0.07867418229579926, 0.15685665607452393, 0.2627567946910858, 0.1827951967716217, 0.14163373410701752, 0.2930928170681, 0.38362523913383484, 0.48111438751220703, -2.7268178462982178, -1.248624563217163, -0.7392311692237854, -0.5173453092575073, -0.40430089831352234, -0.22306902706623077, -0.9117127060890198, -0.8576411008834839, 0.34807175397872925, -0.6444129943847656, -0.8651413917541504, -0.6868612170219421, -0.477109432220459, -0.1258327066898346, -0.6597129106521606, -0.39250457286834717, -0.5497321486473083, -0.4838884770870209, -0.2474060356616974, -0.25912752747535706, -0.12114058434963226, -0.14721599221229553, -0.3660867512226105, -0.31196725368499756, -0.3536289930343628, -0.31311020255088806, -0.04534778743982315, -0.05778997391462326, -0.18178151547908783, -0.22856144607067108, -0.0798610970377922, -0.11474566906690598, -0.07250209897756577, -0.09596741199493408, 0.15977729856967926, -0.41160133481025696, -0.08453217893838882, -0.43885675072669983, -0.1770142763853073, -0.13345424830913544, -1.17366623878479, 0.5165542364120483, 0.29159772396087646, 0.11940954625606537, 0.07757951319217682, -0.22602234780788422, 0.06414084881544113, 0.15127034485340118, -0.1787368208169937, -0.44541624188423157, -0.16916730999946594, 0.310271680355072, 0.1992655247449875, 0.18474328517913818, 0.239637553691864, 0.39673730731010437, -0.03368983790278435, 0.05020802840590477, 0.1382662057876587, -0.3465578854084015, 0.036332324147224426, 0.15974746644496918, -0.040685202926397324, 0.030806664377450943, -0.1778826117515564, -0.29523417353630066, -0.27746203541755676, -0.13261963427066803, -0.22235094010829926, 0.0376976877450943, -0.3301202058792114, -0.6011791229248047, -0.7274138331413269, -0.7476048469543457, 0.12260767817497253, -0.17147031426429749, -0.2323864996433258, -0.7875206470489502, -0.7389765977859497, -0.6192401647567749, -0.13957960903644562, 0.1485101282596588, -0.6610538363456726, -0.5390209555625916, -0.2591564953327179, 0.03768515959382057, -0.7620188593864441, -0.4495212137699127, 0.09886474162340164, 0.3735031485557556, -4.349002361297607, -2.0140697956085205, 0.16961106657981873, 0.08638744801282883, -0.6418488621711731, -0.28390932083129883, -0.47101926803588867, -0.45441934466362, -3.9473867416381836, -2.0091233253479004, 4.491796970367432, 1.2081955671310425, 2.368443012237549, 0.5533127188682556, 1.78851318359375, 1.1381349563598633, 4.211236000061035, 4.256258964538574, 0.12619255483150482, 3.5174572467803955, 4.324417591094971, 3.884711265563965, 2.904780626296997, 0.7691080570220947, 3.184690475463867, 1.8505256175994873, 2.955599308013916, 2.937620162963867, 2.0355820655822754, 2.0547971725463867, 0.3605779707431793, 1.0816826820373535, 2.2948079109191895, 0.9985011219978333, 1.8475412130355835, 1.2247549295425415, 0.9468311667442322, 0.9726732969284058, 1.1364326477050781, 1.114496111869812, 1.055133581161499, 1.3230808973312378, 0.7693186402320862, -0.8299221396446228, 0.6903948783874512, 2.4977214336395264, 0.9487977027893066, 1.9027584791183472, 0.6572574973106384, 0.858169674873352, 2.1037802696228027, -2.4640583992004395, -0.5442397594451904, -0.5171831250190735, 0.3147822320461273, 0.9029700756072998, 0.0022602735552936792, -0.6214304566383362, 1.61095130443573, 2.2958576679229736, 0.7556024193763733, -0.6404473781585693, -0.3824630081653595, -0.3357415497303009, -1.2038938999176025, -2.009843587875366, 0.01393294520676136, -0.2452181726694107, 0.275690495967865, 2.1256227493286133, -0.07153146713972092, -0.1839424967765808, -0.47109949588775635, -0.23984293639659882, 0.7661051750183105, 1.450323224067688, 1.8122284412384033, 1.1394996643066406, 0.9768154621124268, 0.42858341336250305, 1.5428367853164673, 1.4586726427078247, 3.4258949756622314, 3.623342514038086, 0.8755447268486023, 1.712335228919983, 1.2801339626312256, 3.791755437850952, 3.5961012840270996, 2.8464343547821045, 1.1375927925109863, 0.40969330072402954, 3.1027917861938477, 2.6016037464141846, 1.3017994165420532, -0.22592635452747345, 3.932161331176758, 2.407233715057373, -0.3704981803894043, -0.30729368329048157, -0.8126057982444763, -1.7537109851837158, 0.30374670028686523, 0.19663259387016296, -0.5386314392089844, -0.32924944162368774, -0.48730379343032837, -0.5664172768592834, -1.548148274421692, -2.123664140701294, 4.870322227478027, 5.7860798835754395, 2.563075065612793, 2.6473259925842285, 2.016915798187256, 1.8301936388015747, 4.2211689949035645, 4.211395263671875, 2.56552791595459, 3.5541064739227295, 4.274668216705322, 3.9277493953704834, 2.8484106063842773, 1.1379717588424683, 3.108508586883545, 2.2655067443847656, 2.977306842803955, 2.9741694927215576, 2.1739916801452637, 1.906596064567566, 0.35444876551628113, 0.9516789317131042, 2.5770010948181152, 1.4899743795394897, 1.8481638431549072, 1.793818712234497, 1.1021093130111694, 0.9619314074516296, 0.9530016183853149, 1.0947790145874023, 1.1771873235702515, 1.2307186126708984, 0.9442250728607178, 0.6861011981964111, 0.1399785727262497, 2.7392351627349854, 1.091855525970459, 2.032843589782715, 0.8597733974456787, 0.7738080024719238, 2.0230090618133545, -2.256220579147339, -0.5889072418212891, -0.6591842174530029, 0.49085745215415955, 0.46377161145210266, -0.1410970240831375, -0.6811745762825012, 1.3132991790771484, 2.24558162689209, 0.7927380800247192, -0.7260120511054993, -0.28994667530059814, -0.22539548575878143, -1.2081248760223389, -1.9118139743804932, 0.05269121378660202, -0.21335916221141815, 0.11547877639532089, 1.98639714717865, -0.05950472131371498, -0.25412142276763916, -0.5847505927085876, -0.28743937611579895, 0.9534026980400085, 1.464464545249939, 1.8349294662475586, 1.3880878686904907, 1.1145753860473633, 0.4048563241958618, 1.634761095046997, 3.7688748836517334, 3.2943553924560547, 3.6754708290100098, 0.2433096021413803, 1.8173960447311401, 1.2114099264144897, 3.7607195377349854, 3.633229970932007, 2.940901041030884, 1.0611448287963867, -0.342640221118927, 3.116647481918335, 2.6127943992614746, 1.2437936067581177, -0.2212551236152649, 3.7938764095306396, 2.4011752605438232, -0.3933797776699066, -0.3684278726577759, 4.31880521774292, 1.863499402999878, -0.3975198566913605, -0.14641639590263367, 0.4882443845272064, 0.32593637704849243, 0.3952708840370178, 0.6339016556739807, 1.4983628988265991, 2.1759893894195557, -2.308568239212036, -5.713767051696777, -2.4012136459350586, -2.6025681495666504, -1.9277783632278442, -1.8282326459884644, -4.310369968414307, -4.324922561645508, -2.9907093048095703, -3.4338347911834717, -4.100180149078369, -3.754282236099243, -2.867154598236084, -0.9154580235481262, -3.1323704719543457, -1.7036194801330566, -3.062544822692871, -3.1084768772125244, -2.2277398109436035, -1.9954543113708496, -0.5607776045799255, -0.9103416204452515, -2.107111930847168, -1.5452295541763306, -2.0014686584472656, -1.1881822347640991, -1.153134822845459, -0.9623962640762329, -1.1597923040390015, -1.1880605220794678, -1.1179391145706177, -1.053280234336853, -0.5804172158241272, -0.7098435759544373, -0.16262097656726837, -2.5311379432678223, -1.1061019897460938, -1.9011772871017456, -0.6762722134590149, -0.9475154876708984, -2.0158958435058594, 2.3693811893463135, 0.583751916885376, 0.640284538269043, -0.40000060200691223, -0.6094009280204773, 0.032956309616565704, 0.6787713170051575, -1.6891632080078125, -2.212841749191284, -0.8768395185470581, 0.6011942028999329, 0.3715870678424835, 0.16223382949829102, 1.272762417793274, 2.0850090980529785, -0.15334901213645935, 0.2346344143152237, -0.187576025724411, -2.04852032661438, -0.02004624530673027, 0.23316223919391632, 0.4556224048137665, 0.1716165989637375, -0.834074079990387, -1.3717609643936157, -1.9067388772964478, -1.4470441341400146, -1.1350499391555786, -0.5380133986473083, -1.6193746328353882, -3.7912509441375732, -3.3218679428100586, -3.6576874256134033, -0.2755720019340515, -1.7465039491653442, -1.2226431369781494, -3.9437644481658936, -3.8099539279937744, -2.8706257343292236, -0.9666258692741394, 0.3260868787765503, -3.1636927127838135, -2.6814651489257812, -1.330487608909607, 0.2314634919166565, -3.9341835975646973, -2.3431928157806396, 0.43969932198524475, 0.4008959233760834, 0.8735739588737488, 1.2821769714355469, -2.0506646633148193, -3.0394513607025146, 1.1730223894119263]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0, 0.8)}}, 'et4_eta0': {'discriminator': {'threshold': 0.52499855756759639, 'nodes': [100, 5, 1], 'bias': [0.02931458316743374, 0.07241812348365784, 0.10845600068569183, -0.09593469649553299, 0.04119148850440979, -0.3013235330581665], 'weights': [3.311089277267456, 2.7776033878326416, 0.18066610395908356, -1.2056864500045776, 1.604825735092163, 0.1865503191947937, 0.7730957865715027, 1.747846007347107, 3.180569648742676, 2.4392879009246826, -7.406797885894775, -2.3232455253601074, -6.833629608154297, -4.189258098602295, -6.104232311248779, -4.2750678062438965, -4.6247406005859375, -4.564622402191162, -4.813847064971924, -4.716826915740967, -5.312751293182373, -4.926319599151611, -4.884196758270264, -4.253235340118408, -4.336501121520996, -4.283618450164795, -5.591576099395752, -3.973464250564575, -9.319202423095703, -2.6603894233703613, -2.5613250732421875, -2.791975259780884, -6.357999801635742, -2.618309736251831, -2.1876912117004395, 3.915004253387451, -2.100966453552246, -2.618317127227783, -2.224304676055908, -1.1870745420455933, -2.20979905128479, -4.178243160247803, -2.71406626701355, -1.8115068674087524, -2.5513877868652344, -1.8894237279891968, -2.615633249282837, -2.727216958999634, -1.1780061721801758, 0.07806529104709625, 3.8563833236694336, -2.8403522968292236, 0.8701767325401306, -1.7194280624389648, -0.3875453770160675, -0.725654125213623, 0.1618911176919937, -2.067396879196167, 0.39956074953079224, -0.7730082869529724, -1.419706106185913, 0.44543057680130005, 1.257712721824646, -6.031074523925781, -0.2799831032752991, 0.6427088379859924, 1.126145601272583, -0.7146590948104858, 0.8776209950447083, -0.32623428106307983, 0.12489358335733414, 2.9221351146698, 0.6449100375175476, 0.4950735569000244, -1.5518912076950073, -3.279216766357422, -3.409505605697632, -2.5731496810913086, -1.338877558708191, -0.5686798095703125, -1.3578202724456787, -3.1066606044769287, -4.292603492736816, -4.043866157531738, -2.9960029125213623, -2.6689112186431885, -2.242722988128662, -1.8914425373077393, -5.118795394897461, -5.386273384094238, -1.6174904108047485, 0.12710949778556824, -4.624730587005615, -4.748095512390137, -2.024381637573242, -0.6438331007957458, -4.923405647277832, -3.7156264781951904, -0.7889842391014099, -0.24809014797210693, 4.9321746826171875, 2.719294548034668, 0.19921042025089264, -1.2299144268035889, 1.469421625137329, 0.27549803256988525, 0.6137067675590515, 1.9288514852523804, 3.162429094314575, 2.4241833686828613, -0.8821160793304443, -2.3855929374694824, -6.967386245727539, -3.6300206184387207, -5.987842559814453, -4.110408306121826, -4.806114196777344, -4.7161760330200195, -4.951784133911133, -4.617422103881836, -5.417108058929443, -4.941716194152832, -4.7647833824157715, -4.198006629943848, -4.221622467041016, -4.302094459533691, -5.669243335723877, -3.8399856090545654, -9.276651382446289, -2.588374137878418, -2.539703607559204, -2.676750421524048, -6.347228050231934, -2.7981884479522705, -2.3425776958465576, 3.793294668197632, -1.9462947845458984, -2.6869421005249023, -2.4106597900390625, -1.296339988708496, -2.0479044914245605, -4.174556255340576, -2.628129243850708, -2.0328147411346436, -2.6600518226623535, -1.9346470832824707, -2.426886558532715, -2.7716281414031982, -1.129162311553955, 0.13035979866981506, 3.499286413192749, -2.8930704593658447, 0.9111056327819824, -1.7877509593963623, -0.8029499053955078, -0.8154670000076294, 0.3207301199436188, -1.9210891723632812, 0.19757568836212158, -0.8172492384910583, -1.42578125, 0.2621346712112427, 0.9545161724090576, -6.406562328338623, -0.3975285589694977, 0.1815395951271057, 1.251863956451416, -0.674562931060791, 0.9707087874412537, -0.1411944031715393, -0.3243597149848938, 2.9314894676208496, 0.5880640745162964, 0.33994588255882263, -1.5169585943222046, -2.1622161865234375, -3.440775156021118, -2.5962939262390137, -1.306143879890442, -0.7967426180839539, -1.3246411085128784, -2.8446576595306396, -4.327754020690918, -4.215429782867432, -2.973690986633301, -2.707385778427124, -2.2584590911865234, -1.9559191465377808, -5.235342979431152, -5.3583760261535645, -1.4794776439666748, 0.0015658815391361713, -4.534499168395996, -4.82176399230957, -2.145214557647705, -0.6682068109512329, -4.796506404876709, -3.9563913345336914, -0.7762383818626404, -0.27372828125953674, 3.329188823699951, 2.699091672897339, 0.11544368416070938, -1.2733908891677856, 1.4800441265106201, 0.23912782967090607, 0.5339061617851257, 1.920528531074524, 3.16400408744812, 2.362506151199341, -7.369227409362793, -2.2801008224487305, -1.3484300374984741, -4.199735164642334, -6.1024885177612305, -4.2332444190979, -4.72761869430542, -4.6649370193481445, -4.950018405914307, -4.506102561950684, -5.2230048179626465, -4.822266101837158, -4.813889026641846, -4.29213809967041, -4.22196626663208, -4.380243301391602, -5.636888027191162, -3.8353168964385986, -9.337599754333496, -2.83490252494812, -2.5923819541931152, -2.799675703048706, -6.360905647277832, -2.7219579219818115, -2.255695104598999, 3.794724941253662, -1.9019191265106201, -2.6753854751586914, -2.422062397003174, -1.2958368062973022, -2.093534231185913, -4.1591315269470215, -2.7466561794281006, -1.9268056154251099, -2.5501599311828613, -1.9369505643844604, -2.4530510902404785, -2.8365652561187744, -1.0778427124023438, -0.0015444951131939888, 3.965160369873047, -2.9005653858184814, 1.0006400346755981, -1.790466070175171, -0.494064599275589, -0.7307782173156738, 0.24435079097747803, -1.9903603792190552, 0.2824591100215912, -0.701539933681488, -1.4626835584640503, 0.2898719906806946, 1.3288838863372803, -5.852675437927246, -0.28906452655792236, 0.6384750008583069, 1.1768627166748047, -0.7747824192047119, 0.8089156746864319, -0.2231132984161377, 0.24653974175453186, 2.9771029949188232, 0.5170877575874329, 0.33400091528892517, -1.6196229457855225, -3.4132800102233887, -3.3679802417755127, -2.728422164916992, -1.3321665525436401, -0.6771137714385986, -1.4866822957992554, -3.241295099258423, -4.46865701675415, -4.034861087799072, -2.951563835144043, -2.7013659477233887, -2.246248245239258, -1.7571269273757935, -5.0455474853515625, -5.256772041320801, -1.41910982131958, 0.12413366883993149, -4.658188819885254, -4.72866678237915, -2.0990781784057617, -0.6789646744728088, -4.915613651275635, -3.7322022914886475, -0.6341574788093567, -0.3005492091178894, -3.221585988998413, -2.7717816829681396, -0.016538845375180244, 1.2063384056091309, -1.51893949508667, -0.13385194540023804, -0.5516979098320007, -1.7744876146316528, -3.196636199951172, -2.4836816787719727, 7.317968368530273, 2.2688426971435547, 1.4693195819854736, 4.20490026473999, 6.045870304107666, 4.062985420227051, 4.715046405792236, 4.630736351013184, 4.8218770027160645, 4.606121063232422, 5.317939281463623, 4.854350566864014, 4.82401704788208, 4.2461700439453125, 4.220977306365967, 4.20060920715332, 5.639387607574463, 3.8129074573516846, 9.24327564239502, 2.6324856281280518, 2.6565353870391846, 2.5638163089752197, 6.334938049316406, 2.6358776092529297, 2.201953649520874, -3.851201057434082, 1.9294993877410889, 2.612241744995117, 2.2624528408050537, 1.2817121744155884, 2.158353090286255, 4.197438716888428, 2.712886095046997, 1.8633755445480347, 2.5852441787719727, 1.8549500703811646, 2.454957962036133, 2.609938383102417, 1.210780382156372, -0.133077010512352, -3.842630386352539, 2.879298210144043, -0.854038655757904, 1.6739861965179443, 0.4184418022632599, 0.6272525787353516, -0.2910340428352356, 1.9043742418289185, -0.4167815148830414, 0.8093799948692322, 1.4446698427200317, -0.3684280514717102, -1.2077643871307373, 6.057832717895508, 0.3735669255256653, -0.5794821381568909, -1.2773224115371704, 0.6377288103103638, -0.8214533925056458, 0.21222138404846191, -0.1485794484615326, -2.9164366722106934, -0.5532369017601013, -0.2782001197338104, 1.6084742546081543, 3.2182531356811523, 3.3501698970794678, 2.7107932567596436, 1.1596511602401733, 0.7838540077209473, 1.342819094657898, 3.182922601699829, 4.304990768432617, 4.045987129211426, 3.025850296020508, 2.7112162113189697, 2.1454615592956543, 1.7928255796432495, 5.239800453186035, 5.270802021026611, 1.5542607307434082, -0.5743051171302795, 4.585275173187256, 4.7357988357543945, 1.9821984767913818, 0.6989428400993347, 4.97335147857666, 3.764003038406372, 0.7662184834480286, 0.35413622856140137, -3.4379727840423584, -2.8555643558502197, -0.3663407564163208, -2.408470630645752, -1.5430840253829956, -0.25652015209198, -0.7511703372001648, -1.8620102405548096, -3.0778346061706543, -2.589646100997925, 7.514346122741699, 2.2859439849853516, 6.818809509277344, 4.352261066436768, 5.9318766593933105, 4.255453109741211, 4.759824275970459, 4.558107852935791, 4.970895767211914, 4.701549053192139, 5.4484686851501465, 4.889317989349365, 4.80600118637085, 4.209726333618164, 4.373593330383301, 4.147166728973389, 5.483404636383057, 4.042483806610107, 9.351543426513672, 2.766465187072754, 2.6710317134857178, 2.704195976257324, 6.392306327819824, 2.766118288040161, 2.2967467308044434, -3.825340509414673, 1.929464340209961, 2.756084680557251, 2.4494926929473877, 1.3677963018417358, 2.203979730606079, 4.26149320602417, 2.6080007553100586, 1.5381990671157837, 2.548158645629883, 1.8604775667190552, 2.5752758979797363, 2.6095759868621826, 1.1493122577667236, -0.21643872559070587, -3.739816665649414, 7.5353312492370605, -1.0523262023925781, 1.7510257959365845, 0.45105794072151184, 0.8300859928131104, -0.2599686086177826, 2.0507545471191406, -0.23286698758602142, 0.700499951839447, 1.4811276197433472, -0.41851431131362915, -1.1686880588531494, 5.877883434295654, 0.20521989464759827, -0.6939062476158142, -1.182706594467163, 0.71788489818573, -0.7842925190925598, 0.2453644722700119, -0.19043582677841187, -2.841397523880005, -0.7045305967330933, -0.41718268394470215, 1.6119834184646606, 2.2414355278015137, 3.465207815170288, 2.5861291885375977, 1.2271615266799927, 0.5889217853546143, 1.1283658742904663, 3.104675531387329, 4.419867038726807, 4.235025405883789, 3.0294127464294434, 2.6096696853637695, 2.289092779159546, 1.8230525255203247, 5.271679878234863, 5.349844932556152, 1.482431173324585, -0.5044125318527222, 4.621979713439941, 4.696404933929443, 2.0854992866516113, 0.8158512115478516, 4.82727575302124, 3.7134132385253906, 0.7147044539451599, 0.23747116327285767, 1.417057752609253, 1.7022205591201782, 0.6667920351028442, -0.9233080148696899, -1.287419080734253]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0, 0.8)}}, 'et1_eta3': {'discriminator': {'threshold': 0.11499894857406617, 'nodes': [100, 18, 1], 'bias': [-0.2002144455909729, -0.15363548696041107, -0.16188405454158783, -0.017389720305800438, 0.14820167422294617, -0.17858947813510895, -0.18675900995731354, -0.032089632004499435, -0.11576628684997559, -0.03401807323098183, -0.2495034635066986, -0.1558571606874466, -0.19357968866825104, 0.16586734354496002, -0.0014014645712450147, 0.20652197301387787, -0.17826637625694275, 0.1897476762533188, -0.054813455790281296], 'weights': [-0.38340234756469727, -0.6566517353057861, 0.16483989357948303, 0.4977419674396515, 0.7625945806503296, 0.19190865755081177, 0.24609415233135223, -0.7307010889053345, -0.8119046092033386, -1.2132209539413452, -0.5309129953384399, 1.3090801239013672, 0.796664297580719, -0.5182087421417236, 1.868080973625183, 4.295961380004883, 1.4176360368728638, 2.454637289047241, 1.4464610815048218, 2.5349671840667725, 0.9971038699150085, 1.1965296268463135, 1.496915578842163, 2.121141195297241, 3.29137921333313, 1.6098891496658325, 0.6513527035713196, 2.1739296913146973, 1.0169310569763184, 1.544034481048584, 1.0793766975402832, 1.3991395235061646, 1.6352118253707886, 1.3835066556930542, 1.1499985456466675, 1.0610237121582031, 0.05404287204146385, 0.41538554430007935, 0.43702971935272217, 0.9927192330360413, 0.07816965878009796, 0.7781451940536499, 0.7118356823921204, 1.3025516271591187, -0.030876843258738518, 1.1513395309448242, 0.2942968010902405, 0.5993052124977112, 0.20513437688350677, 0.8833693861961365, 0.46746826171875, 0.9571513533592224, -0.07157488912343979, 0.72287917137146, 0.7263399958610535, 0.580528199672699, 0.023384803906083107, 0.5015721321105957, 0.39651399850845337, 0.2557906210422516, 0.22474272549152374, 0.2975868880748749, 0.16423001885414124, -0.01598936691880226, 0.005907304584980011, 0.8213630318641663, 0.8370744585990906, 0.27068042755126953, -0.2674257159233093, -0.17367443442344666, -0.5805248022079468, 0.528968095779419, -0.1989305019378662, -0.050370559096336365, 1.2127388715744019, 1.4218155145645142, 1.395790696144104, 1.055174469947815, 0.6698682308197021, 0.24106000363826752, 1.5604139566421509, 3.1179018020629883, 3.4605464935302734, 1.3086051940917969, 0.8781377673149109, 1.0295149087905884, 0.09012075513601303, 0.6932299137115479, 0.5225092172622681, 0.9932043552398682, 0.4548197388648987, 0.05864733085036278, 2.38737154006958, 0.9247806072235107, 0.34414803981781006, 0.6246473789215088, 0.42670920491218567, 0.168732151389122, 0.053754258900880814, 0.9493657946586609, -0.38360196352005005, -0.732202410697937, 0.14758580923080444, 0.6051104068756104, 0.9232946634292603, 0.13980458676815033, 0.3051658570766449, -0.7344979047775269, -0.8900668621063232, -1.3221021890640259, -0.5035775303840637, 1.4208064079284668, 0.5290546417236328, -0.3478271961212158, 1.86189866065979, 4.408084869384766, 1.440454125404358, 2.52168345451355, 1.3675932884216309, 2.5375986099243164, 0.9146979451179504, 1.2156656980514526, 1.4084172248840332, 2.261629104614258, 3.1239607334136963, 1.4413634538650513, 0.6121513247489929, 2.219493865966797, 0.9521713852882385, 1.544762134552002, 1.1904094219207764, 1.3446217775344849, 1.5499415397644043, 1.2284002304077148, 1.1380829811096191, 1.1469122171401978, 0.09570536762475967, 0.2978670299053192, 0.2701861262321472, 0.9458319544792175, 0.09166756272315979, 0.6282024383544922, 0.78712397813797, 1.5633015632629395, -0.2592944800853729, 1.1304155588150024, 0.3707042336463928, 0.6425605416297913, 0.0022983881644904613, 0.8704652786254883, 0.26444754004478455, 0.9208696484565735, 0.0032466643024235964, 0.6803261041641235, 1.4584405422210693, 0.678684651851654, 0.06113111972808838, 0.566028356552124, 0.22947300970554352, 0.2392222285270691, 0.040982428938150406, 0.2520126700401306, 0.41603735089302063, -0.036166854202747345, 0.05413128808140755, 0.7926779389381409, 0.6538285613059998, 0.3500996232032776, -0.1737414300441742, -0.2748863995075226, -0.537535548210144, 0.3872361183166504, -0.20122425258159637, -0.1810685247182846, 1.2737761735916138, 1.4399892091751099, 1.493069052696228, 0.9437366127967834, 0.7208545207977295, 0.45295724272727966, 1.4465068578720093, 3.214751720428467, 3.3187026977539062, 1.2009320259094238, 0.9428243637084961, 0.9918748140335083, 0.07014276832342148, 0.5587629675865173, 0.5597621202468872, 1.059611201286316, 0.28132373094558716, 0.16102787852287292, 2.393214225769043, 0.9395459890365601, 0.17745913565158844, 0.4298109710216522, 0.6617841720581055, 0.06763876974582672, 0.18725647032260895, 1.0290868282318115, 16.190824508666992, 0.14594896137714386, 3.4627883434295654, 12.799717903137207, 10.684195518493652, 0.011130272410809994, -0.03397102653980255, -0.10816044360399246, 0.29309478402137756, 9.081469535827637, -24.892780303955078, 36.682525634765625, 18.784238815307617, -7.007519721984863, -45.00828552246094, -1.1602109670639038, -1.117960810661316, -0.9883555769920349, -5.681673526763916, -0.7563220262527466, -13.34096622467041, -4.8449811935424805, -25.132312774658203, -0.9788350462913513, -4.000855922698975, -0.5069876909255981, -34.51609420776367, -0.885381281375885, -55.87479782104492, -0.7409151792526245, -66.15792846679688, -0.03725424036383629, -12.921009063720703, -0.06828707456588745, -5.4699015617370605, -0.1061086356639862, -3.6921463012695312, 0.1655205339193344, -49.182125091552734, 0.07158195972442627, -0.047861140221357346, 0.025056902319192886, -2.427628755569458, -0.7640111446380615, -44.33208465576172, -0.25958630442619324, -0.24857257306575775, -0.8375716209411621, 2.713972568511963, -0.2896157205104828, -0.052662696689367294, -0.49748677015304565, 1.2169281244277954, -0.2682081460952759, -11.288450241088867, -0.5798513889312744, 0.8085481524467468, -0.3330405354499817, 0.3179360032081604, -0.07634507119655609, 0.5994629859924316, -5.807570457458496, -0.06363659352064133, 0.040838535875082016, 0.7583083510398865, -0.3190859854221344, -0.4253675043582916, 0.13786259293556213, 0.2775750458240509, 0.1861962527036667, 0.3385373055934906, -0.1951509416103363, -12.781550407409668, -5.904649257659912, 0.10519639402627945, -0.21757985651493073, -0.9494050741195679, -0.8350086212158203, -2.6825902462005615, -0.18710128962993622, -88.77208709716797, -31.349262237548828, -11.474648475646973, -0.14730286598205566, -0.04797506704926491, 0.06218511611223221, 0.5091103315353394, 0.2308323085308075, 2.4978582859039307, 11.415743827819824, 2.4144582748413086, 6.942951202392578, 0.379177063703537, -0.011793139390647411, -0.17475751042366028, -8.05445384979248, 13.726672172546387, 0.03526470810174942, 0.29011136293411255, -159.08544921875, -0.40671804547309875, -0.6286713480949402, 0.384751558303833, 0.5788285136222839, 0.7045100331306458, 0.1426837295293808, 0.20395319163799286, -0.37832745909690857, -0.6461001038551331, -1.1783652305603027, -0.9888992309570312, 1.276848554611206, 0.8529349565505981, -0.6925095915794373, 1.732786774635315, 0.23605792224407196, 1.4397642612457275, 2.4341626167297363, 1.3182228803634644, 2.5807056427001953, 1.0016379356384277, 1.2908918857574463, 1.5176434516906738, 2.2151107788085938, 3.0804433822631836, 1.5445953607559204, 0.6013043522834778, 2.2249069213867188, 0.9683724641799927, 1.6630834341049194, 1.0555741786956787, 1.3077234029769897, 1.520164966583252, 1.2600111961364746, 1.1378265619277954, 1.1504502296447754, -0.05448688939213753, 0.372103214263916, 0.1684374064207077, 0.7655290961265564, 0.05944743752479553, 0.5050622820854187, 0.320505827665329, 1.3154972791671753, -0.09305723756551743, 0.8982280492782593, 0.4867056608200073, 0.5647482872009277, 0.13418610394001007, 0.690271258354187, 0.32567334175109863, 0.9298478960990906, -0.1417071521282196, 0.8311952352523804, 0.3170643448829651, 0.9006834626197815, 0.06480348855257034, 0.5515538454055786, 0.3003140985965729, 0.28782549500465393, -0.09280697256326675, 0.4358987510204315, 0.16473950445652008, 0.043837565928697586, -0.21252182126045227, 0.712474524974823, 0.4932105243206024, -0.057035114616155624, -0.1705840826034546, -0.2665582299232483, -0.6421555876731873, 0.35017016530036926, -0.14387036859989166, -0.11060134321451187, 1.2530596256256104, 1.1331610679626465, 1.3611210584640503, 1.0740065574645996, 0.7411977648735046, 0.2834552824497223, 2.934769868850708, 3.048475503921509, 2.401529550552368, 0.9926343560218811, 0.9144255518913269, 0.8618057370185852, 0.006950654089450836, 0.782966136932373, 0.6391353607177734, 0.9835235476493835, 0.2968132197856903, 0.12545588612556458, 1.9531956911087036, 1.153342366218567, 0.21261000633239746, 0.5586487054824829, 0.5515046119689941, 0.182867169380188, 0.15227104723453522, 0.9117034077644348, 0.5825621485710144, 0.8241159915924072, -0.2447684109210968, -0.5811120271682739, -0.8582577705383301, -0.26519033312797546, -0.14317388832569122, 0.6782941818237305, 0.7970190644264221, 1.3394062519073486, 0.31428781151771545, -1.270024299621582, -0.5277531147003174, 0.4809548556804657, -1.859432578086853, -0.8835269212722778, -1.51180899143219, -2.4005470275878906, -0.9432553052902222, -2.47320818901062, -1.0926566123962402, -1.327350378036499, -1.450195074081421, -2.316866874694824, -3.2048487663269043, -1.574819564819336, -0.539912760257721, -2.19111704826355, -1.0004551410675049, -1.706177830696106, -1.026258945465088, -1.2357838153839111, -1.4902604818344116, -1.3973653316497803, -1.056719183921814, -1.2585408687591553, -0.03911249712109566, -0.475729376077652, -0.012611662968993187, -0.9795836210250854, -0.2500004470348358, -0.7511481046676636, -0.7014085650444031, -1.4828335046768188, 0.03260655701160431, -0.7722057700157166, -0.30374693870544434, -0.6167660355567932, -0.04362953081727028, -0.7577283382415771, -0.25374636054039, -0.7800593972206116, 0.3389913737773895, -0.7093072533607483, -0.46981412172317505, -0.8780418038368225, 0.012762768194079399, -0.3979136645793915, -0.3172326683998108, -0.29384326934814453, -0.04235990345478058, -0.4121563136577606, -0.3217425048351288, 0.09652094542980194, -0.14689096808433533, -0.799673855304718, -0.6893338561058044, -0.3845553398132324, 0.2253190577030182, 0.28787529468536377, 0.467214435338974, -0.4973415434360504, 0.09886517375707626, 0.19428466260433197, -1.2496248483657837, -1.3548314571380615, -1.402904987335205, -0.9054427146911621, -0.6342453956604004, -0.4016222059726715, -1.531589388847351, -3.1153032779693604, -2.5563337802886963, -1.2360167503356934, -0.8736165165901184, -0.9458446502685547, 0.057179395109415054, -0.6529570817947388, -0.5880138874053955, -1.0133585929870605, -0.3900461196899414, -0.18856698274612427, -2.2752933502197266, -0.9560835361480713, -0.3810197114944458, -0.4067794680595398, -0.4488714039325714, -0.08817335963249207, -0.19656842947006226, -1.0010647773742676, -0.5717464089393616, -0.5949568152427673, 0.088893823325634, 0.6765756607055664, 0.863964319229126, 0.23964524269104004, 0.2005004733800888, -0.7381905913352966, -0.7229442596435547, -1.15565025806427, -0.5008231997489929, 1.2769683599472046, 0.5431281328201294, -0.41909027099609375, 1.6773723363876343, 1.0654959678649902, 1.363873839378357, 2.577305555343628, 0.9604941606521606, 2.573745012283325, 0.9130794405937195, 1.2603247165679932, 1.3415553569793701, 2.334581136703491, 3.236938238143921, 1.6211953163146973, -0.24978631734848022, 2.0826923847198486, 1.2304937839508057, 1.4990036487579346, 1.0293259620666504, 1.2390410900115967, 1.5301235914230347, 1.2602015733718872, 1.1598795652389526, 1.06606924533844, 0.11481449753046036, 0.39755114912986755, 0.42581531405448914, 0.8909477591514587, 0.11762230843305588, 0.7883768677711487, 0.84607994556427, 1.6059443950653076, -0.17164760828018188, 1.0262399911880493, 0.37056684494018555, 0.6412549614906311, 0.19475476443767548, 0.8455633521080017, 0.30318698287010193, 0.9896240830421448, -0.2364022135734558, 0.6539768576622009, 0.7167876958847046, 0.811370313167572, -0.025442959740757942, 0.5032809972763062, 0.28555721044540405, 0.23520271480083466, 0.1785678118467331, 0.39861637353897095, 0.23411190509796143, -0.15846410393714905, 0.23420950770378113, 0.6505598425865173, 0.6729646325111389, 0.30918487906455994, -0.2147253453731537, -0.0805697813630104, -0.6349985003471375, 0.3706757128238678, -0.08689811080694199, -0.2093910574913025, 1.250820517539978, 1.2184782028198242, 1.3621662855148315, 0.9696751832962036, 0.6886918544769287, 0.20584699511528015, 1.4458370208740234, 2.9813807010650635, 3.18683123588562, 1.2199821472167969, 0.9232864379882812, 1.0173033475875854, -0.018200814723968506, 0.680754542350769, 0.5266239643096924, 1.0290035009384155, 0.41298139095306396, 0.26716676354408264, 2.2691152095794678, 0.961639404296875, 0.15959353744983673, 0.48409610986709595, 0.5433118939399719, 0.08852286636829376, -0.03947044909000397, 0.8682109713554382, -0.5318871140480042, -0.5030391812324524, 0.26828622817993164, 0.5441595315933228, 0.781224250793457, 0.34886404871940613, 0.20735856890678406, -0.7190834283828735, -0.7733364105224609, -1.212363839149475, -0.36193424463272095, 1.4043164253234863, 0.6287188529968262, -0.5259811878204346, 1.636110544204712, 4.26112699508667, 1.3977693319320679, 2.5335309505462646, 1.4603873491287231, 2.5290608406066895, 0.8937587141990662, 1.2686960697174072, 1.5291714668273926, 2.2742104530334473, 3.237992525100708, 1.4308949708938599, 0.48742997646331787, 2.193636655807495, 1.0421017408370972, 1.5803086757659912, 1.001723289489746, 1.3306912183761597, 1.5946170091629028, 1.398392915725708, 1.3004380464553833, 1.0494269132614136, 0.12198827415704727, 0.353340208530426, 0.4266543686389923, 0.8502677083015442, 0.2578189969062805, 0.6877743005752563, 0.6749987006187439, 1.589471459388733, -0.14116521179676056, 1.040137529373169, 0.4916624426841736, 0.4794861972332001, 0.16243241727352142, 0.842799186706543, 0.3313240110874176, 0.8214824795722961, -0.029637884348630905, 0.6293928027153015, 0.7284616231918335, 0.8371362090110779, -0.00013269793998915702, 0.5887269973754883, 0.40477144718170166, 0.3123055696487427, 0.09919605404138565, 0.47714272141456604, 0.162660151720047, -0.17179422080516815, 0.21068352460861206, 0.7757437825202942, 0.6592679619789124, 0.29444342851638794, -0.36484673619270325, -0.11290670931339264, -0.45024874806404114, 0.3623316287994385, -0.21816875040531158, -0.1526898890733719, 1.2754018306732178, 1.5355931520462036, 1.3780335187911987, 1.0633491277694702, 0.659041166305542, 0.19096770882606506, 1.5383731126785278, 2.9813828468322754, 3.264423131942749, 1.3181312084197998, 0.8970950841903687, 0.8458815813064575, 0.08818908780813217, 0.6782749891281128, 0.6739600896835327, 1.0144459009170532, 0.24742408096790314, 0.09595700353384018, 2.33469295501709, 0.9648230075836182, 0.2152952253818512, 0.5277570486068726, 0.6701862812042236, 0.11104635894298553, -0.008986016735434532, 0.8464317321777344, -0.6005939245223999, -0.6416574716567993, 0.12787888944149017, 0.519671618938446, 0.7248276472091675, 0.1684955507516861, 0.1987256109714508, -0.6830629110336304, -0.7839223742485046, -1.2371307611465454, -1.0717519521713257, 1.3692030906677246, 0.8768095374107361, -0.7876304984092712, 1.8158602714538574, 0.3931213319301605, 1.6375144720077515, 2.4715702533721924, 1.4682286977767944, 2.608262300491333, 0.9067097306251526, 1.3750423192977905, 1.4358627796173096, 2.289135217666626, 3.1341562271118164, 1.6185520887374878, 0.6295635104179382, 2.1696391105651855, 0.8269528150558472, 1.6992709636688232, 1.1447465419769287, 1.2837194204330444, 1.4437756538391113, 1.4014016389846802, 1.0449012517929077, 1.080278992652893, 0.12303435057401657, 0.28362587094306946, 0.20950162410736084, 0.8210135102272034, 0.15366126596927643, 0.5670651197433472, 0.5195554494857788, 1.2097681760787964, -0.19844530522823334, 0.8745250701904297, 0.27611637115478516, 0.43773818016052246, 0.2186424285173416, 0.8760428428649902, 0.44570720195770264, 0.8030654191970825, -0.11897523701190948, 0.6506876945495605, 0.3172664940357208, 0.7301618456840515, -0.029334556311368942, 0.5703171491622925, 0.3218229413032532, 0.299481064081192, -0.02812369167804718, 0.2993195354938507, 0.14269781112670898, 0.02241954393684864, -0.19790072739124298, 0.6071950793266296, 0.6461795568466187, 0.12490330636501312, -0.3740408718585968, -0.0602165050804615, -0.6527913212776184, 0.48814189434051514, -0.21445220708847046, -0.225005641579628, 1.2756084203720093, 1.232437252998352, 1.469746708869934, 0.9021191596984863, 0.6458925604820251, 0.4081171452999115, 2.306035280227661, 3.0826146602630615, 2.3463315963745117, 1.0770496129989624, 1.018068790435791, 0.910336971282959, 0.1130421981215477, 0.7826652526855469, 0.4694555997848511, 0.8650839924812317, 0.31786322593688965, 0.2550208270549774, 1.9873223304748535, 1.1453852653503418, 0.33051592111587524, 0.5544898509979248, 0.4452156126499176, 0.2124941647052765, 0.08292680233716965, 0.8491610288619995, -56.80121994018555, -14.151447296142578, -0.18774959444999695, -0.3542330265045166, -0.8086683750152588, -0.05761038511991501, -0.10484757274389267, 0.6895679235458374, 0.7692949175834656, 0.5070134401321411, 1.7576361894607544, 2.4032235145568848, -0.7318966388702393, 1.0726171731948853, 2.981738805770874, -1.114487886428833, -0.40596339106559753, 0.5606130361557007, -5.207275867462158, 12.476569175720215, 0.23585659265518188, 1.904693365097046, -0.5518673658370972, 4.947570323944092, -3.837280035018921, -0.06059196591377258, 2.871915578842163, -0.8866435289382935, -0.07605594396591187, -2.927834987640381, 0.03593759983778, -0.3128579556941986, -0.6111246943473816, -0.07666689902544022, 0.0628674179315567, 1.0550893545150757, 0.7064999938011169, 0.09661006927490234, 8.114603042602539, 0.11041894555091858, -0.21399341523647308, 0.3894084393978119, -0.18029938638210297, -1.3529058694839478, 0.0051324074156582355, -0.18760287761688232, -0.11429450660943985, -1.7869954109191895, -0.08458162844181061, -0.2530703544616699, -0.18161948025226593, -0.39874812960624695, 3.6301748752593994, -0.1379910558462143, -0.17066669464111328, -0.5774021744728088, 0.1965624839067459, -0.24337352812290192, -0.15194885432720184, -0.34497329592704773, -0.17847950756549835, -1.2566121816635132, -0.30973729491233826, 0.004842949565500021, -0.24191004037857056, -0.313288152217865, -0.432453453540802, -0.18742893636226654, -0.17586643993854523, -0.1488223522901535, -0.12833110988140106, -0.39797917008399963, -0.19953987002372742, -0.09475917369127274, -0.17185315489768982, -0.48886269330978394, -0.487642377614975, 0.04784593731164932, 1.3774009943008423, -0.09344834089279175, 0.7785547971725464, -0.2757335901260376, -0.8404405117034912, 0.03939834237098694, -0.12825831770896912, -0.13465513288974762, 0.44766923785209656, 0.16001445055007935, -22.276966094970703, -1.7702490091323853, -0.0713605135679245, -0.6156205534934998, -1.4816166162490845, 0.0003315433277748525, -0.25746849179267883, 14.080020904541016, 0.024155687540769577, -0.036030080169439316, 0.07861766219139099, -0.563843846321106, 0.8405486941337585, 0.7216206789016724, -0.10024264454841614, -0.6815454363822937, -0.8117128014564514, -0.12413720041513443, -0.28767168521881104, 0.7507040500640869, 0.79880291223526, 1.3988380432128906, 1.0554957389831543, -1.1341222524642944, -0.8427881598472595, 0.6588563919067383, -1.814319372177124, -0.27744153141975403, -1.5099965333938599, -2.63364577293396, -1.3798142671585083, -2.4620635509490967, -0.8090096712112427, -1.377532958984375, -1.6074717044830322, -2.1487228870391846, -3.217214822769165, -1.539404034614563, -0.5151381492614746, -2.0406301021575928, -1.0206210613250732, -1.5512062311172485, -1.066892147064209, -1.3595800399780273, -1.422608494758606, -1.3157989978790283, -1.0305311679840088, -1.1775572299957275, 0.025436030700802803, -0.3435658812522888, -0.2715975344181061, -0.9117682576179504, -0.14039325714111328, -0.5204090476036072, -0.40074023604393005, -1.1244744062423706, 1.3476958274841309, -0.7980905771255493, -0.34210821986198425, -0.4770492911338806, 0.028293397277593613, -0.8690755367279053, -0.42223358154296875, -0.836659848690033, 0.13816438615322113, -0.7555708885192871, -1.4806468486785889, -0.7790289521217346, 0.02098878100514412, -0.5725722312927246, -0.2562553286552429, -0.32207733392715454, 0.18862926959991455, -0.40144485235214233, 0.011012431234121323, 0.14454549551010132, 0.19271962344646454, -0.6912900805473328, -0.5944287776947021, 0.0032009859569370747, 0.21535104513168335, 0.08399953693151474, 0.4371108114719391, -0.38139209151268005, 0.2078593671321869, 0.08682353049516678, -1.0982259511947632, -1.118467092514038, -1.5462558269500732, -1.0345520973205566, -0.6848118901252747, -0.3011939823627472, -2.814122438430786, -3.083674192428589, -1.9439293146133423, -0.8705432415008545, -0.8261646628379822, -0.8885801434516907, -0.06915400922298431, -0.6567742228507996, -0.18422433733940125, -0.9046079516410828, -0.4383082091808319, -0.07741483300924301, -1.873676061630249, -1.9145755767822266, -0.23813050985336304, -0.811942458152771, -0.5244396328926086, -0.04697516933083534, -0.182030588388443, -0.8345677256584167, -0.25572437047958374, 0.31898754835128784, 0.1516154706478119, 0.3784807324409485, -1.4377514123916626, -0.017763782292604446, 0.006646250374615192, -0.5897576808929443, -0.7104454040527344, -1.2158955335617065, -3.0753180980682373, -0.4261987805366516, 12.003192901611328, -0.18148554861545563, 1.6016343832015991, 0.5072712898254395, -2.991880178451538, 0.36880654096603394, -0.04196963086724281, 0.4132213890552521, 3.644460678100586, 19.40183448791504, 0.4083648920059204, -0.04513901099562645, 0.9595772624015808, 0.18046723306179047, -0.018884524703025818, 0.14654026925563812, -0.7082056999206543, 0.0008586105541326106, 0.0435924306511879, -0.0766819640994072, -0.20758089423179626, 0.023481043055653572, -0.022992320358753204, -0.044576358050107956, 21.73570442199707, -0.21417291462421417, -0.31068986654281616, -0.19017793238162994, -0.15974323451519012, -0.17240677773952484, -0.08980873972177505, -0.02164374105632305, -0.5421410799026489, 0.014050119556486607, -0.057595156133174896, -0.22192420065402985, 19.47360610961914, -0.14409269392490387, -0.22697722911834717, -0.03573762625455856, -0.6156139373779297, -0.045350100845098495, -0.16688668727874756, -0.017508462071418762, -0.18324628472328186, -0.19444894790649414, -0.3148132264614105, -0.10279625654220581, -0.13189741969108582, -0.08806000649929047, 32.851585388183594, -0.6846795678138733, -0.26579776406288147, -0.020532725378870964, 0.10784540325403214, -0.6826676726341248, -1.1180943250656128, -0.9135575890541077, -1.2716460227966309, -0.051427051424980164, -1.2954837083816528, -0.10623038560152054, -2.2831122875213623, -0.035184647887945175, -4.364250183105469, -0.08836710453033447, -0.05583625286817551, -0.09623824805021286, -18.05628776550293, 0.495023250579834, 0.17405302822589874, -0.15393826365470886, 0.007149766199290752, -0.12751337885856628, -0.21903882920742035, -0.11690343171358109, -6.029508113861084, -6.286768913269043, -0.4862957000732422, -0.00841100700199604, -106.7051773071289, -33.096866607666016, -0.22958901524543762, 5.009400844573975, -4.870616912841797, -0.008741048164665699, -2.145540952682495, -0.1291254460811615, -0.3456064462661743, -0.7874621152877808, 0.11811321973800659, 0.4961678981781006, 0.8507356643676758, 0.31109189987182617, 0.12615905702114105, -0.6484752297401428, -0.8193530440330505, -1.363515019416809, -0.39939379692077637, 1.3482391834259033, 0.614769458770752, -0.3825177848339081, 1.6779334545135498, 4.372943878173828, 1.3199337720870972, 2.55778431892395, 1.3940620422363281, 2.6366376876831055, 1.0289734601974487, 1.3398358821868896, 1.367051124572754, 1.8663303852081299, 3.1488635540008545, 1.6122926473617554, -0.3451955318450928, 1.987937092781067, 1.045506477355957, 1.6692523956298828, 1.076711893081665, 1.2719875574111938, 1.6290814876556396, 1.3335528373718262, 1.2035526037216187, 1.1436285972595215, 0.009594276547431946, 0.4236528277397156, 0.34305500984191895, 0.9403334259986877, 0.186759352684021, 0.8152167201042175, 0.6991836428642273, 1.4957852363586426, -0.1164313554763794, 1.1160130500793457, 0.25823724269866943, 0.6747837662696838, 0.014120438136160374, 0.7943393588066101, 0.3858359158039093, 0.7986517548561096, 0.04141387715935707, 0.7701690196990967, 0.6347532868385315, 1.1564903259277344, 0.07364115118980408, 0.5817779898643494, 0.38106223940849304, 0.39930233359336853, 0.17137157917022705, 0.2800277769565582, 0.2551738917827606, -0.07492279261350632, 0.19717678427696228, 0.7071451544761658, 0.8601028323173523, 0.15870635211467743, -0.3728155791759491, -0.2440648376941681, -0.4857249855995178, 0.5315850973129272, -0.23176896572113037, -0.1742181032896042, 1.1022788286209106, 1.5621484518051147, 1.4421554803848267, 0.9081036448478699, 0.6271923184394836, 0.4233575463294983, 1.5830520391464233, 2.993881940841675, 3.41560435295105, 1.1273272037506104, 1.0601725578308105, 0.8935339450836182, 0.07937508821487427, 0.6667394638061523, 0.46727555990219116, 0.9720954298973083, 0.31306570768356323, 0.20880906283855438, 2.3436191082000732, 1.0587700605392456, 0.17657996714115143, 0.513343870639801, 0.44703051447868347, 0.024708904325962067, 0.08929786831140518, 0.8636502623558044, -0.5039831399917603, -0.8149739503860474, 0.15549060702323914, 0.5605978965759277, 0.7394363880157471, 0.034288641065359116, 0.3114113509654999, -0.8136886954307556, -0.78770512342453, -1.215367317199707, -0.3042708933353424, 1.3430238962173462, 0.8105869889259338, -0.3245096504688263, 1.7687708139419556, 4.349796295166016, 1.459321141242981, 2.405777931213379, 1.4983571767807007, 2.518437147140503, 0.9134923219680786, 1.24137544631958, 1.3457478284835815, 1.816027045249939, 3.235405445098877, 1.5223313570022583, -0.4010748267173767, 2.1362228393554688, 1.0145297050476074, 1.6047039031982422, 1.2129600048065186, 1.3380721807479858, 1.5210533142089844, 1.2514965534210205, 1.148212194442749, 1.1937311887741089, 0.02084837108850479, 0.482487291097641, 0.48379984498023987, 0.9798768758773804, 0.14606598019599915, 0.7855446338653564, 0.8021541237831116, 1.381439208984375, -0.08614232391119003, 1.0535002946853638, 0.4298691153526306, 0.5024979114532471, 0.055451128631830215, 0.8144237399101257, 0.42879316210746765, 0.9803608059883118, -0.09275074303150177, 0.7896514534950256, 0.7642918825149536, 0.759797990322113, 0.005569723434746265, 0.39364930987358093, 0.28167033195495605, 0.297913134098053, 0.1805001199245453, 0.3194378614425659, 0.4017198383808136, -0.15788398683071136, 0.1521838754415512, 0.8012791275978088, 0.8249431252479553, 0.3808400630950928, -0.21746566891670227, -0.1361147165298462, -0.4802781939506531, 0.39037975668907166, -0.1510380655527115, -0.11622194200754166, 1.1559572219848633, 1.2339847087860107, 1.4884576797485352, 1.131054401397705, 0.6433441042900085, 0.18698187172412872, 1.5702699422836304, 3.0558269023895264, 2.6246159076690674, 1.273658275604248, 0.8848209977149963, 1.03648042678833, -0.0012658569030463696, 0.680117130279541, 0.6840394735336304, 1.0479388236999512, 0.2274094671010971, 0.17887642979621887, 2.2029988765716553, 0.9377766847610474, 0.31960272789001465, 0.5836368799209595, 0.6761590242385864, 0.13493165373802185, 0.12582474946975708, 0.992216169834137, 0.47456759214401245, 0.6922589540481567, -0.1855705976486206, -0.6971334218978882, -0.887053370475769, -0.21104511618614197, -0.13083705306053162, 0.6962928771972656, 0.7555514574050903, 1.3254557847976685, 0.5020895600318909, -1.2432564496994019, -0.5599234104156494, 0.451595664024353, -1.6830817461013794, -0.9948074221611023, -1.536298394203186, -2.5452537536621094, -1.4227041006088257, -2.4566104412078857, -0.916395902633667, -1.3843921422958374, -1.54200279712677, -2.229848623275757, -3.1529195308685303, -1.3960180282592773, -0.5726909041404724, -2.195634365081787, -0.89063560962677, -1.669413685798645, -1.1913962364196777, -1.4361872673034668, -1.5772064924240112, -1.261489987373352, -1.1307697296142578, -1.1318963766098022, -0.0918487161397934, -0.2859872579574585, -0.0038845925591886044, -0.8310121893882751, -0.09143610298633575, -0.6529207229614258, -0.8132506608963013, -1.2922431230545044, 0.09331739693880081, -0.9592680931091309, -0.2886314392089844, -0.556973934173584, -0.13302180171012878, -0.8495572805404663, -0.41999366879463196, -0.8087546229362488, 0.198253333568573, -0.7250763773918152, -0.419642835855484, -0.7244623303413391, -0.06659039855003357, -0.3718365430831909, -0.4105495810508728, -0.215079665184021, -0.22190220654010773, -0.42824459075927734, -0.45153114199638367, 0.07241658866405487, -0.01894005388021469, -0.7611389756202698, -0.8470483422279358, -0.31710442900657654, 0.20214024186134338, 0.05845746025443077, 0.6913867592811584, -0.3538076877593994, 0.2046125829219818, 0.05244406685233116, -1.2302556037902832, -1.4253175258636475, -1.4894293546676636, -1.1133145093917847, -0.6371009349822998, -0.26700738072395325, -1.589145302772522, -3.0421440601348877, -2.5315396785736084, -1.1917030811309814, -1.0585963726043701, -0.8579204082489014, 0.012722031213343143, -0.6749125719070435, -0.48217421770095825, -0.908758282661438, -0.3413941264152527, -0.27042534947395325, -2.178652048110962, -1.0290472507476807, -0.2445281744003296, -0.42455798387527466, -0.47516241669654846, -0.08350427448749542, -0.1550547033548355, -0.808168351650238, -0.5934821367263794, -0.6217980980873108, 0.21059148013591766, 0.5637927651405334, 0.7217454314231873, 0.11845924705266953, 0.2433079332113266, -0.40325722098350525, -0.6194440722465515, -1.277657151222229, -0.9599111080169678, 1.0990023612976074, 0.9493449926376343, -0.7359316945075989, 1.8650768995285034, 0.3666505217552185, 1.5127782821655273, 2.500866413116455, 1.046462059020996, 2.5280137062072754, 1.0011956691741943, 1.298850417137146, 1.4209318161010742, 1.907609462738037, 3.1470844745635986, 1.4042335748672485, 0.5238806009292603, 2.051941156387329, 1.0599504709243774, 1.5536439418792725, 1.200449824333191, 1.3390061855316162, 1.4206416606903076, 1.3061033487319946, 1.1451112031936646, 1.085272192955017, -0.0269584059715271, 0.4277454614639282, 0.352082222700119, 0.8048105835914612, 0.2562040686607361, 0.63601154088974, 0.2687901556491852, 1.3364198207855225, -1.5643867254257202, 0.7271315455436707, 0.3902602195739746, 0.5086250305175781, 0.019958999007940292, 0.7116518616676331, 0.26307493448257446, 0.8241589665412903, -0.1213846281170845, 0.6629634499549866, 0.469207227230072, 0.7397229671478271, 0.002996389754116535, 0.378352552652359, 0.21426089107990265, 0.3714514970779419, -0.12755392491817474, 0.24016432464122772, -0.04230710119009018, -0.08580906689167023, -0.1108865737915039, 0.5956770777702332, 0.5284342169761658, 0.06305302679538727, -0.2407395839691162, -0.06492673605680466, -0.4916420578956604, 0.48577985167503357, -0.05260702967643738, -0.017427964136004448, 1.1616544723510742, 1.3033207654953003, 1.527848720550537, 0.8932463526725769, 0.6445272564888, 0.34491854906082153, 2.7684473991394043, 3.137208938598633, 1.8608629703521729, 0.8548393249511719, 1.038639783859253, 0.969724178314209, -0.04320814833045006, 0.6414285898208618, 0.23999328911304474, 0.7778677344322205, 0.21761074662208557, 0.2329217940568924, 1.8669438362121582, 0.9623836874961853, 0.2308725118637085, 0.565108597278595, 0.4916509985923767, 0.2452893853187561, 0.03085728920996189, 1.0297038555145264, 1.161635398864746, 9.901204109191895, -0.037529539316892624, -0.034997567534446716, -0.25338688492774963, -0.13454227149486542, -0.11158210039138794, -18.728437423706055, 9.621607780456543, 3.5917532444000244, 1.9448347091674805, -20.65024757385254, -42.4472770690918, -19.592294692993164, -20.647571563720703, -4.62833833694458, 28.306325912475586, -0.8437386751174927, -2.100412130355835, -1.5205261707305908, -0.5225315093994141, -0.4469055235385895, -0.7152748107910156, -0.9462557435035706, 63.9045295715332, -0.2729223370552063, -14.389724731445312, 84.22908020019531, 8.377567291259766, 30.610279083251953, -0.31653136014938354, -0.3664127290248871, 24.170867919921875, -0.1791929006576538, -0.28324368596076965, -0.3008226454257965, -0.2024661749601364, 17.34783172607422, -0.1773824244737625, 10.670148849487305, -15.724040031433105, 10.213678359985352, -0.523842453956604, 9.429829597473145, -0.12077674269676208, -0.27457189559936523, -5.163954734802246, 1.272387981414795, -0.011837265454232693, -0.31433790922164917, -18.261398315429688, -0.08460602909326553, -0.13487930595874786, -0.13316690921783447, -1.7036172151565552, -0.09511967748403549, -0.11062435805797577, -0.30078181624412537, -0.23387794196605682, -0.2043824940919876, -0.008378877304494381, -0.16227345168590546, -0.05657045170664787, -0.004089131485670805, 2.3013627529144287, -0.11511880159378052, -0.3900409936904907, -0.03357267752289772, 0.09713973104953766, -0.06123226508498192, 23.043460845947266, -0.15792202949523926, 0.5550811290740967, -0.5657082796096802, 4.1439738273620605, 16.765918731689453, 7.856770038604736, 3.7772812843322754, -0.3124656081199646, -0.24940313398838043, 26.295475006103516, 9.135519981384277, 24.17909812927246, 1.034959077835083, -0.32065704464912415, -0.25986477732658386, -0.11530362069606781, -0.11686141043901443, 2.478963613510132, -0.3795199990272522, -0.20295530557632446, -0.8074599504470825, -8.034762382507324, -0.20650243759155273, -0.02028665877878666, -0.1514805406332016, 4.266226768493652, 0.04247583448886871, 0.06836718320846558, -0.20406463742256165, -0.5735689997673035, -0.6491272449493408, 0.21906250715255737, 0.494365930557251, 0.8071540594100952, 0.0334816537797451, 0.22439631819725037, -0.6350592970848083, -0.8927509188652039, -1.1994280815124512, -0.3454638719558716, 1.360395073890686, 0.6474078893661499, -0.34175536036491394, 1.647518515586853, 4.405701160430908, 1.4605927467346191, 2.532263994216919, 1.3597887754440308, 2.638451099395752, 0.93550044298172, 1.1695266962051392, 1.385097861289978, 2.195150852203369, 3.080515146255493, 1.5983755588531494, -0.24432700872421265, 2.2464468479156494, 0.9010893106460571, 1.572930097579956, 1.0414245128631592, 1.3396254777908325, 1.42471444606781, 1.398648738861084, 1.0746119022369385, 1.1420326232910156, 0.1576615273952484, 0.3397315740585327, 0.366732656955719, 0.7686574459075928, 0.25425392389297485, 0.6464563012123108, 0.8529269099235535, 1.6066452264785767, -0.2350366711616516, 1.218779444694519, 0.41390281915664673, 0.6849692463874817, 0.1032264307141304, 0.9038705825805664, 0.40969911217689514, 0.8061321377754211, -0.007514185272157192, 0.8002212047576904, 0.636906087398529, 0.6225029826164246, 0.10163066536188126, 0.43249842524528503, 0.20222121477127075, 0.23062479496002197, 0.17807506024837494, 0.32355037331581116, 0.3264802396297455, -0.026255814358592033, 0.05942526087164879, 0.6613010764122009, 0.6608654856681824, 0.18090984225273132, -0.2652311623096466, -0.173283651471138, -0.6474335789680481, 0.46031659841537476, -0.08340457081794739, -0.22317831218242645, 1.1539905071258545, 1.3967328071594238, 1.5373455286026, 1.103622555732727, 0.6668803691864014, 0.29313352704048157, 1.6417579650878906, 3.069558620452881, 3.0869791507720947, 1.1489677429199219, 0.9195663332939148, 0.8410302996635437, -0.03998010605573654, 0.5659787654876709, 0.5179091691970825, 0.9202679991722107, 0.28998124599456787, 0.2542988955974579, 2.3246243000030518, 0.9346193075180054, 0.2826792895793915, 0.6018133163452148, 0.5234222412109375, 0.17786912620067596, 0.1881076842546463, 1.0357930660247803, 0.37237221002578735, 0.7068068981170654, -0.10552673041820526, -0.6631776094436646, -0.7714059352874756, -0.10107984393835068, -0.2909369170665741, 0.7923951148986816, 0.7781870365142822, 1.2708126306533813, 0.4253212511539459, -1.284758448600769, -0.6904871463775635, 0.47444450855255127, -1.8804067373275757, -4.379486560821533, -1.2785688638687134, -2.604724884033203, -1.4224328994750977, -2.605142593383789, -0.9149799942970276, -1.2751669883728027, -1.5686715841293335, -2.2349438667297363, -3.1050732135772705, -1.394572377204895, 0.426139235496521, -2.104841947555542, -1.0131640434265137, -1.5292565822601318, -1.092477560043335, -1.4689770936965942, -1.5540196895599365, -1.3346068859100342, -1.1286195516586304, -1.258900761604309, -0.17095187306404114, -0.4415469765663147, -0.31653445959091187, -0.8867587447166443, -0.049468234181404114, -0.7606491446495056, -0.8480420708656311, -1.43607759475708, 0.26081132888793945, -1.20256769657135, -0.46141284704208374, -0.48690858483314514, -0.14974823594093323, -0.7698106169700623, -0.42254629731178284, -0.8224038481712341, 0.10380443930625916, -0.7524206638336182, -0.7027066946029663, -0.8763280510902405, -0.09425270557403564, -0.5666542053222656, -0.3628547787666321, -0.3854634463787079, -0.27234748005867004, -0.27971360087394714, -0.4404471218585968, 0.033304363489151, -0.19578883051872253, -0.745542585849762, -0.760949432849884, -0.32081153988838196, 0.31439197063446045, 0.11365415155887604, 0.633655846118927, -0.45060428977012634, 0.15381814539432526, 0.17077188193798065, -1.2179279327392578, -1.493625521659851, -1.530032753944397, -0.9708558320999146, -0.6265876293182373, -0.3226151764392853, -1.619158148765564, -3.032395124435425, -3.4046685695648193, -1.3324408531188965, -1.078819751739502, -0.9526862502098083, 0.10458800941705704, -0.7081135511398315, -0.5134581327438354, -1.0260261297225952, -0.3427356481552124, -0.09988962858915329, -2.395115613937378, -1.0176409482955933, -0.3654569983482361, -0.5655829310417175, -0.4464222490787506, -0.11648882180452347, -0.04751931503415108, -0.9193633198738098, -0.4093737006187439, -0.6794418096542358, 0.538090705871582, -1.5771551132202148, 0.4940848648548126, -0.475830614566803, -0.10659348964691162, -0.8613696098327637, 0.815110445022583, 0.8824114203453064, -0.43883809447288513, -0.5048105120658875, -0.4345971345901489, 1.0691962242126465, -0.8596880435943604, 1.1182911396026611, -0.28860053420066833, 0.41895654797554016]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (1.54, 2.5)}}, 'et4_eta2': {'discriminator': {'threshold': 0.62999845743179317, 'nodes': [100, 7, 1], 'bias': [0.2617207169532776, -0.09929532557725906, -0.005016771145164967, 0.01386977918446064, 0.03250758349895477, -0.06407539546489716, 0.10685599595308304, -0.12187347561120987], 'weights': [-1.199082374572754, 0.04656407609581947, 0.20531979203224182, 0.7296028733253479, 0.4635359048843384, 0.3549058437347412, -0.03367256373167038, 0.7378533482551575, 0.006520850118249655, -1.7109954357147217, -1.3579293489456177, -0.9316742420196533, -0.19753077626228333, 0.17953670024871826, 0.09031382203102112, -0.27410244941711426, 1.21454918384552, 0.2556364834308624, 0.4339869022369385, 0.2299942672252655, 1.1637403964996338, 2.030143976211548, 0.08354060351848602, 0.34558212757110596, 0.8569033741950989, 0.26701757311820984, 0.5901845097541809, 0.6635958552360535, 3.5414912700653076, 2.1423134803771973, 0.2294524610042572, 0.4037497043609619, 0.25770220160484314, 0.35666924715042114, 0.2899927794933319, 0.6750504374504089, 3.4330482482910156, 1.0259796380996704, 1.0824795961380005, 0.6384493112564087, 0.9241836071014404, 1.5686055421829224, 0.7037254571914673, 0.2379872351884842, -0.1277540773153305, 0.08216521888971329, 1.2299778461456299, 0.09574083983898163, 0.1815401166677475, 0.27585047483444214, 0.3812668025493622, -0.28592103719711304, 0.9964554905891418, 0.5828621983528137, 0.3051263689994812, -0.6516976356506348, 0.6308650374412537, -0.6287418603897095, 0.06487537920475006, 0.3375721573829651, 0.24116498231887817, 0.399440735578537, 1.3256276845932007, 0.6574133634567261, 1.446028470993042, 0.7139179706573486, 0.7446342706680298, 0.5182504057884216, 0.6090033650398254, 0.625433623790741, 0.5985376834869385, 0.3289506435394287, -0.05630738288164139, 0.20690375566482544, 1.9794971942901611, 1.1038316488265991, 1.3075302839279175, 0.609601616859436, 0.868517279624939, 0.415502667427063, 0.3067322373390198, 0.03904613479971886, 2.0282180309295654, 1.053371787071228, 0.30868881940841675, -0.8434215784072876, 0.5384722948074341, 0.998020589351654, -0.7636846899986267, 0.4631771743297577, 0.31237831711769104, 0.17431049048900604, 3.3461546897888184, 2.1982741355895996, 1.238305687904358, 0.4995076656341553, 0.03218848630785942, 0.09530129283666611, 0.5305764079093933, 0.576552152633667, -0.6420695781707764, 0.2542959153652191, 1.3605433702468872, 2.0910770893096924, 1.3802176713943481, 0.9903801679611206, 0.2790902256965637, 1.715165615081787, -0.05241371691226959, -3.921043872833252, -3.2381484508514404, -1.8061994314193726, -0.18538765609264374, -0.05606934800744057, -0.09095992892980576, -0.09465332329273224, 3.1976921558380127, -0.02497786656022072, 0.16798436641693115, 0.915084719657898, 3.0084352493286133, 4.830656051635742, 0.5200414657592773, 0.9390490055084229, 2.4810855388641357, 0.9523731470108032, 7.853673458099365, 1.6567965745925903, 7.956750392913818, 4.892110347747803, 0.8726530075073242, 1.4740444421768188, 1.1834298372268677, 2.8549044132232666, 4.226935863494873, 1.7545195817947388, 7.859976291656494, 2.4172916412353516, 2.588454008102417, 1.7589004039764404, 2.1907854080200195, 3.561525821685791, 1.6452295780181885, 2.2264137268066406, 0.6648275852203369, 0.6756118535995483, 2.843770742416382, 0.8039820194244385, 0.7652207016944885, 2.053952932357788, 0.8849445581436157, -0.5286306142807007, 2.112271785736084, 1.7383499145507812, 0.9225568771362305, -1.380336046218872, 1.4952472448349, -0.8224055767059326, -1.1865663528442383, 0.8611737489700317, 0.5567664504051208, 1.416256308555603, 3.0695550441741943, 1.712885856628418, 3.2570877075195312, 1.5307596921920776, 2.3422300815582275, 1.6887884140014648, 1.5337268114089966, 1.4789378643035889, 1.6421314477920532, 0.9208935499191284, -0.5786811709403992, -0.0652947872877121, 4.386538028717041, 2.9333114624023438, 2.982999801635742, 1.5842301845550537, 2.4453229904174805, 1.2320727109909058, -0.10164570808410645, 0.740286648273468, 4.954085826873779, 2.6121160984039307, 1.0759104490280151, -1.2665412425994873, 1.6063791513442993, 2.5454864501953125, -0.3626367151737213, 1.0510146617889404, 1.6065025329589844, 0.9974485635757446, 8.004694938659668, 5.0456743240356445, 2.813222885131836, 1.3321949243545532, -0.005931098014116287, 0.10253987461328506, 1.3715828657150269, 1.5512897968292236, -0.5580244064331055, 0.39332470297813416, 1.4604781866073608, 2.015458106994629, 1.5754472017288208, 0.9694701433181763, 0.12348112463951111, 1.8239972591400146, -0.15916378796100616, -3.8626937866210938, -3.0769317150115967, -2.1775729656219482, -0.256427526473999, -0.2031354010105133, -0.1670435220003128, -0.06627321988344193, 3.07605242729187, -0.18094182014465332, -0.06480242311954498, 0.7439988255500793, 3.0167593955993652, 4.875162124633789, 0.41554611921310425, 0.8810564279556274, 2.3811585903167725, 0.8411372303962708, 2.316687822341919, 1.5723975896835327, 7.848791122436523, 4.988923072814941, 0.8879119753837585, 1.6937354803085327, 1.1807661056518555, 1.7647042274475098, 4.127403259277344, 1.7034803628921509, 7.954260349273682, 2.405754804611206, 2.6305832862854004, 1.7620971202850342, 1.9939932823181152, 3.5212669372558594, 1.4896392822265625, 2.2021868228912354, 0.7211077213287354, 0.45960116386413574, 2.8806607723236084, 0.9822272658348083, 0.7168512940406799, 1.997719407081604, 1.0181657075881958, -0.584338903427124, 2.08488130569458, 1.5234706401824951, 0.8245189189910889, -1.2640483379364014, 1.412737250328064, -1.014040231704712, 0.25493770837783813, 0.9143096208572388, 0.4462814927101135, 1.4634040594100952, 3.0987770557403564, 1.8433420658111572, 3.419429302215576, 1.7040537595748901, 2.0836362838745117, 1.7018086910247803, 1.4518789052963257, 1.6004843711853027, 1.4147433042526245, 0.885858416557312, -0.48173049092292786, -0.5499522686004639, 4.570881366729736, 2.842937469482422, 2.871220827102661, 1.5618584156036377, 2.2895889282226562, 1.315529465675354, 0.06335403025150299, 0.5574368238449097, 4.997497081756592, 2.7653884887695312, 1.0977863073349, -1.3368310928344727, 1.6323343515396118, 2.469188928604126, -0.475273996591568, 1.1088588237762451, 1.5990040302276611, 0.884307324886322, 7.866081714630127, 5.083061218261719, 2.8148746490478516, 1.3715864419937134, -0.03885543718934059, -0.04433303326368332, 0.4738650918006897, 1.6801223754882812, 0.5659589171409607, -0.3973660171031952, -1.340793490409851, -2.0771889686584473, -1.3621615171432495, -1.0556734800338745, -0.23205049335956573, -1.8323252201080322, 0.12092233449220657, 3.75590181350708, 3.249427080154419, 2.0822601318359375, 0.3148649334907532, 0.11203834414482117, -0.013941667042672634, 0.0773695781826973, -2.978292226791382, 0.021314475685358047, 0.05332275480031967, -0.6841344237327576, -2.9114952087402344, -4.9379048347473145, -0.3879004120826721, -1.0109463930130005, -2.377368211746216, -0.9028151631355286, -2.2357802391052246, -1.4990040063858032, -7.909063816070557, -4.934169292449951, -0.8280583620071411, -1.4909025430679321, -1.134150743484497, -2.802126169204712, -4.241472244262695, -1.698750376701355, -7.860925197601318, -2.3732221126556396, -2.6382784843444824, -1.702906608581543, -2.072350025177002, -3.611637592315674, -1.5298588275909424, -2.2180089950561523, -0.6474041938781738, -0.6767086982727051, -2.8410837650299072, -0.8066666126251221, -0.7584149241447449, -1.885524868965149, -1.0379120111465454, 0.39286839962005615, -2.290600299835205, -1.7707421779632568, -0.8907083868980408, 1.3172907829284668, -1.4665154218673706, 1.0246610641479492, -0.3834729790687561, -1.0242635011672974, -0.6360778212547302, -1.5279887914657593, -3.2610692977905273, -1.7313520908355713, -3.304475784301758, -1.7252439260482788, -2.2220873832702637, -1.7486913204193115, -1.4446333646774292, -1.491459608078003, -1.6576067209243774, -0.952872633934021, 0.5044817328453064, 0.522040605545044, -4.3985466957092285, -2.750579595565796, -2.8610687255859375, -1.6051177978515625, -2.276841640472412, -1.3428438901901245, 0.009678386151790619, -0.7363388538360596, -4.961111068725586, -2.642904043197632, -1.092788577079773, 1.3029303550720215, -1.7117785215377808, -2.522066831588745, 0.45609137415885925, -1.0616670846939087, -1.7577388286590576, -0.8381150960922241, -7.887571811676025, -5.148916721343994, -2.911863327026367, -1.2740260362625122, -0.05228741466999054, 0.0640641450881958, -0.678358256816864, -1.5088486671447754, -0.7585100531578064, 0.24690280854701996, 1.491066336631775, 2.1176671981811523, 1.3803449869155884, 1.0477854013442993, 0.2841241955757141, 1.8174431324005127, -0.1158878430724144, -3.7308034896850586, -3.196366548538208, -2.0819554328918457, -0.26281511783599854, -0.19266608357429504, 0.01754525676369667, -0.10219784080982208, 3.0718727111816406, -0.06902283430099487, -0.133313849568367, 0.5706177353858948, 2.9574437141418457, 4.9897236824035645, 0.5128845572471619, 0.9910563230514526, 2.330735445022583, 0.8670439124107361, 2.3793842792510986, 1.4715439081192017, 7.923746585845947, 4.995925426483154, 0.9347348809242249, 1.568109393119812, 1.0414421558380127, 1.8422110080718994, 4.104082107543945, 1.62822687625885, 7.85090970993042, 2.2839040756225586, 2.5488712787628174, 1.7019267082214355, 2.0041286945343018, 3.5792922973632812, 1.5251822471618652, 2.205839157104492, 0.7895069122314453, 0.5379122495651245, 2.8484840393066406, 0.7872741222381592, 0.7096336483955383, 1.8969358205795288, 0.9090040922164917, -0.3916996717453003, 2.098754644393921, 1.770819902420044, 0.8679854273796082, -1.3006939888000488, 1.4268206357955933, -0.9077816009521484, 0.37661105394363403, 1.0032528638839722, 0.5596379637718201, 1.3727277517318726, 3.062189817428589, 1.8172791004180908, 3.4061639308929443, 1.6440497636795044, 2.24149227142334, 1.8443653583526611, 1.5291966199874878, 1.6765329837799072, 1.4972254037857056, 0.97321617603302, -0.6068288683891296, -0.4320228397846222, 4.402719020843506, 2.7863337993621826, 2.9500136375427246, 1.6206917762756348, 2.2972049713134766, 1.387008786201477, 0.021307941526174545, 0.6317957043647766, 5.002443313598633, 2.7371201515197754, 0.9843219518661499, -1.2883226871490479, 1.5675159692764282, 2.628980875015259, -0.579679548740387, 1.1656181812286377, 1.588566541671753, 0.8931626677513123, 7.832260608673096, 5.035940647125244, 2.797762393951416, 1.3244043588638306, 0.11319255083799362, 0.09631530940532684, 0.5693351626396179, 1.650315523147583, -0.5736979842185974, 0.29907727241516113, 1.3671034574508667, 1.9833605289459229, 1.502862811088562, 1.3528274297714233, 0.3030700087547302, 1.795560598373413, -0.03257882595062256, -3.780787467956543, -3.216874361038208, -1.9621294736862183, -0.13271425664424896, -0.15094463527202606, -0.030625861138105392, -0.16971103847026825, 3.0409996509552, -0.12825803458690643, 0.04007377102971077, 0.7174224257469177, 2.968981981277466, 4.984785079956055, 0.32645779848098755, 0.8364684581756592, 2.485739231109619, 0.9804881811141968, 8.059494972229004, 1.6594182252883911, 7.890863418579102, 4.903045654296875, 0.9115142822265625, 2.224780559539795, 1.2443386316299438, 2.905517816543579, 4.1217041015625, 1.7049399614334106, 7.890573501586914, 2.33084774017334, 2.1968533992767334, 1.7856111526489258, 2.0114638805389404, 3.613615036010742, 1.5108184814453125, 2.332899332046509, 0.8047070503234863, 0.6067267656326294, 2.870006799697876, 0.7819770574569702, 0.8261892199516296, 1.9574702978134155, 0.8984113931655884, -0.5123070478439331, 2.1647262573242188, 1.563424825668335, 0.84149169921875, -1.3284196853637695, 1.5815709829330444, -0.9307830333709717, -1.3651620149612427, 0.8764187097549438, 0.6924583315849304, 1.5096555948257446, 3.087284564971924, 1.904294490814209, 3.3959085941314697, 1.6763912439346313, 2.1565194129943848, 1.8633981943130493, 1.5981062650680542, 1.646390438079834, 2.2126824855804443, 0.8007594347000122, -0.5922732949256897, -0.34366941452026367, 4.606023788452148, 2.826465129852295, 2.975831985473633, 1.596818208694458, 2.3216636180877686, 1.2806814908981323, 0.04759327322244644, 0.6352857947349548, 4.785883903503418, 2.5806756019592285, 1.406389832496643, -1.2826743125915527, 1.6320470571517944, 2.5798261165618896, -0.49233919382095337, 1.131220817565918, 1.6612789630889893, 0.7703039646148682, 7.94516658782959, 5.1233720779418945, 3.010620594024658, 1.1783536672592163, -0.01573571376502514, -0.024500656872987747, 0.6910185217857361, 1.6006724834442139, 0.73480224609375, -0.32068580389022827, -1.3771878480911255, -1.9521775245666504, -1.4876173734664917, -1.12008798122406, -0.25979989767074585, -1.6781861782073975, 0.06118091195821762, 3.953031539916992, 3.1361849308013916, 1.9844274520874023, 0.29850277304649353, 0.06268055737018585, 0.04694410413503647, 0.1091935783624649, -3.0240843296051025, 0.19513481855392456, -0.07628891617059708, -0.8516464829444885, -2.9313080310821533, -4.892584323883057, -0.3320695757865906, -0.9883604049682617, -2.3850913047790527, -0.7895957827568054, -7.873676300048828, -1.4846075773239136, -7.826855659484863, -4.971644401550293, -1.0073684453964233, -2.2506613731384277, -1.0835527181625366, -4.091296195983887, -4.484903812408447, -1.779901146888733, -7.877384662628174, -2.282275438308716, -2.141773223876953, -1.7564873695373535, -2.041640281677246, -3.6518912315368652, -1.7103898525238037, -2.209954261779785, -0.7307230234146118, -0.5389871597290039, -3.0585718154907227, -0.9420704245567322, -0.7042399048805237, -1.9312578439712524, -0.941736102104187, 0.4209376573562622, -2.2973058223724365, -1.625028371810913, -0.8337602615356445, 1.309154987335205, -1.4649492502212524, 0.873340368270874, 1.2697153091430664, -0.9467819929122925, -0.567506730556488, -1.449963927268982, -3.1961958408355713, -1.8695497512817383, -3.442155361175537, -1.5416744947433472, -2.278475046157837, -1.645463228225708, -1.427484154701233, -1.6315269470214844, -2.216616630554199, -0.9113065004348755, 0.5815272927284241, 0.045872725546360016, -4.606292724609375, -2.7505600452423096, -2.847938060760498, -1.7729849815368652, -2.4185187816619873, -1.281830906867981, 0.05344507470726967, -0.5244730114936829, -4.86573600769043, -2.5995500087738037, -1.3698476552963257, 1.1978867053985596, -1.682853102684021, -2.67765474319458, 0.36277589201927185, -1.0264809131622314, -1.5784780979156494, -0.7622487545013428, -8.03172779083252, -5.162149429321289, -2.980487823486328, -1.2984944581985474, 0.12434207648038864, 0.039750874042510986, -1.3124161958694458, -1.572436809539795, -0.18876421451568604, -1.0405422449111938, -1.1355165243148804, 1.2341020107269287, -1.3890950679779053, -0.7059615850448608, 0.9352350831031799]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (1.37, 1.54)}}, 'et2_eta1': {'discriminator': {'threshold': 0.27499879598617555, 'nodes': [100, 5, 1], 'bias': [-0.029061544686555862, 0.07115764915943146, 0.019344959408044815, -0.1757797747850418, 0.06782937049865723, -0.12644730508327484], 'weights': [1.756556749343872, 1.2913234233856201, -0.6442728638648987, -1.5849488973617554, -0.9681591987609863, -0.34703120589256287, -0.480928897857666, 0.4635566473007202, 2.7999629974365234, 3.682180166244507, -0.25811320543289185, -7.650780200958252, -7.506412982940674, -2.8826897144317627, -4.782769203186035, -4.413056373596191, -5.161284923553467, -5.507318019866943, -6.594288349151611, -8.124002456665039, -5.251914024353027, -5.55857515335083, -4.189398765563965, -3.764343500137329, -3.9656152725219727, -3.849748373031616, -3.895353317260742, -3.9420130252838135, -2.9963934421539307, -3.193568468093872, -2.3932883739471436, -2.0835120677948, -3.698894739151001, -3.1520891189575195, -1.6031136512756348, -2.793837308883667, -2.235158920288086, -2.0529158115386963, -1.532468318939209, -1.538753867149353, -1.6580761671066284, -1.62722909450531, -2.9714083671569824, -2.1453359127044678, -1.2659714221954346, -1.2260502576828003, -1.1973389387130737, -1.5025995969772339, -0.7388455867767334, -1.0183221101760864, -1.0035122632980347, -0.6884371042251587, -0.45175278186798096, -0.980915367603302, -1.9811737537384033, -1.226658821105957, -0.8294365406036377, 1.6171855926513672, -0.8794742226600647, 0.7183095216751099, -0.0653151199221611, 0.7566898465156555, -1.123794436454773, 0.6581045985221863, -0.892948567867279, -2.1357944011688232, -0.9593702554702759, -4.708323001861572, 2.789361000061035, 1.1390219926834106, -0.673845648765564, -0.5312865376472473, 0.44715917110443115, 0.2671221196651459, -0.8546791076660156, -1.6015502214431763, -1.6695938110351562, -1.5275843143463135, -0.7200620770454407, -0.3451833724975586, -6.460891246795654, -5.874619483947754, -4.774132251739502, -1.8811436891555786, -2.728989362716675, -2.566389322280884, -2.4971728324890137, -2.8685085773468018, -2.284651279449463, -1.2398645877838135, -0.21698573231697083, 0.20892733335494995, -3.9181132316589355, -2.788163900375366, -1.217857003211975, -0.10672779381275177, -2.2597343921661377, -2.228713274002075, -1.4868111610412598, -0.750899612903595, -1.8251063823699951, -1.1889960765838623, 0.6020057201385498, 1.9034740924835205, 0.8605738878250122, 0.3944154679775238, 0.4633791446685791, -0.41065654158592224, -2.585116147994995, -3.7739741802215576, 0.3409169614315033, 7.6753387451171875, 7.5409321784973145, 2.9287683963775635, 4.767678260803223, 4.38762092590332, 5.017165184020996, 5.328006267547607, 6.601678371429443, 7.975613594055176, 5.219958782196045, 5.472799301147461, 4.325254440307617, 3.6673357486724854, 3.8112282752990723, 3.7330210208892822, 3.943687915802002, 3.9255552291870117, 3.2157070636749268, 3.1839513778686523, 2.017850637435913, 1.9788899421691895, 3.794508218765259, 3.23036527633667, 1.584195613861084, 2.7783520221710205, 2.1057605743408203, 2.019235610961914, 1.5729364156723022, 1.368862271308899, 1.529820203781128, 1.495448350906372, 3.081106662750244, 2.3066558837890625, 1.1767699718475342, 1.0655978918075562, 1.0781625509262085, 1.524297833442688, 0.6541399359703064, 1.1615946292877197, 0.8798704743385315, 0.7337639331817627, 0.2541859447956085, 0.9900811314582825, 1.7675137519836426, 1.129771113395691, 0.9769338965415955, -1.7794710397720337, 0.7691759467124939, -0.6065599322319031, 0.1482195258140564, -0.7464447617530823, 0.8744992613792419, -0.7343985438346863, 0.726407527923584, 2.1249442100524902, 1.1226450204849243, 4.6674275398254395, -2.837620258331299, -1.1903719902038574, 0.7181248068809509, 0.3578006327152252, -0.6332944631576538, -0.36820188164711, 0.8394779562950134, 1.5812684297561646, 1.663122296333313, 1.39568030834198, 0.7244759202003479, 0.2570498585700989, 6.5370402336120605, 6.010458469390869, 4.821362018585205, 1.9636433124542236, 2.878424644470215, 2.4029808044433594, 2.4697906970977783, 2.9089889526367188, 2.214284896850586, 1.0990670919418335, 0.11416373401880264, -0.19945867359638214, 3.790609359741211, 2.692485809326172, 1.4060908555984497, 0.06774158775806427, 2.1553001403808594, 2.3251683712005615, 1.6620001792907715, 0.8532625436782837, -1.7099360227584839, -1.2301627397537231, 0.5021715760231018, 1.8247313499450684, 0.945939302444458, 0.4771892726421356, 0.4903935492038727, -0.09884621948003769, -2.664012908935547, -5.259884357452393, 0.17000038921833038, 7.530425548553467, 7.669373035430908, 3.3012807369232178, 5.463374614715576, 4.286874771118164, 4.752519130706787, 5.408957481384277, 6.580020427703857, 8.038166999816895, 5.39423942565918, 5.578622817993164, 4.286208629608154, 3.6949238777160645, 3.929547071456909, 3.9175729751586914, 3.845604181289673, 3.8423171043395996, 3.210578680038452, 3.119899272918701, 2.041748285293579, 2.093860387802124, 3.69392991065979, 3.1492950916290283, 1.6160717010498047, 2.758650541305542, 10.607393264770508, 2.0824766159057617, 1.5606777667999268, 1.5439600944519043, 1.5530520677566528, 1.5601545572280884, 2.937656879425049, 5.104233264923096, 1.126531958580017, 1.0010255575180054, 1.0651741027832031, 1.4039077758789062, 0.6661118865013123, 1.0402370691299438, 0.8780915141105652, 0.6724119186401367, 0.3289961516857147, 0.9449458718299866, 1.8488469123840332, 1.0976601839065552, 0.8687697649002075, -1.6527490615844727, 0.9001840949058533, -0.715388298034668, 0.20300573110580444, -0.8392341732978821, 0.8850993514060974, -0.5326457619667053, 0.8001212477684021, 2.162041425704956, 1.0569554567337036, 4.742851734161377, -2.983938694000244, -1.0209124088287354, 0.7210585474967957, 0.48225831985473633, -0.6464027166366577, -0.26115816831588745, 0.8636200428009033, 1.447980523109436, 1.7011079788208008, 1.4112581014633179, 0.5829867124557495, 0.3114790916442871, 6.44392728805542, 5.825753688812256, 4.810171604156494, 2.026542901992798, 2.933964729309082, 2.6101925373077393, 2.485071897506714, 2.860532760620117, 2.2968432903289795, 0.997700035572052, 0.3955303728580475, -0.30924278497695923, 3.8440232276916504, 2.788963794708252, 1.2485867738723755, 0.19045573472976685, 2.2942357063293457, 2.351768732070923, 1.6125611066818237, 0.8414639234542847, 20.88359260559082, 31.831382751464844, 9.05165958404541, 9.187932014465332, 6.873650550842285, -0.43468737602233887, -0.3632810413837433, -1.234576940536499, 2.125072479248047, 3.703941583633423, -49.585018157958984, -16.155927658081055, -7.2475433349609375, -3.656810760498047, 14.766789436340332, -4.583640098571777, 4.278796672821045, -5.192634582519531, -6.532622337341309, -6.883738994598389, -5.28041410446167, -5.3762593269348145, -3.8572585582733154, -3.653829336166382, -3.800105094909668, -3.688180685043335, -3.904364824295044, -3.8323862552642822, -2.3485937118530273, -2.9538862705230713, -0.3947434723377228, 30.834009170532227, -1.900402307510376, -3.1014208793640137, -1.5573399066925049, -1.6298186779022217, -1.747907042503357, 12.356527328491211, 2.288511276245117, -1.461673378944397, -1.594153881072998, -1.4787530899047852, -1.508923053741455, -1.3912208080291748, 0.6374366283416748, 27.280359268188477, -1.0602654218673706, -1.3706649541854858, -0.6846879124641418, -0.8656125664710999, -0.938352644443512, -0.8656972050666809, -0.33948320150375366, -0.644707441329956, -0.814270555973053, -0.9944366812705994, 0.20980395376682281, 2.78497314453125, -0.773296058177948, 0.6998165845870972, -0.0296720452606678, 0.8005335927009583, -0.7668218612670898, 0.9622485041618347, 35.79130172729492, -2.155447244644165, -1.1117959022521973, 7.3101372718811035, 3.9213907718658447, 1.115527868270874, -0.5450289845466614, -25.06943702697754, 0.6501583456993103, 0.35701680183410645, -0.4462127089500427, -1.407095193862915, -1.5555520057678223, -1.4034217596054077, -0.45231354236602783, 7.305209636688232, -6.618852138519287, -6.079617500305176, -4.787984371185303, -2.0228593349456787, -2.7799034118652344, -2.4050915241241455, -2.4526658058166504, -2.8808984756469727, -2.223472833633423, -1.108133316040039, 0.03166186064481735, 0.39704400300979614, -4.002893447875977, -2.654981851577759, 1.6041043996810913, -0.05317008122801781, -2.1770665645599365, -2.170841693878174, -1.4249660968780518, -1.2949405908584595, -1.652388095855713, -1.2862921953201294, 0.5910248160362244, 1.614255666732788, 0.8507240414619446, 0.3029228746891022, 0.48638105392456055, -0.3356124460697174, -2.662548303604126, -3.5910162925720215, 0.15870735049247742, 7.67800760269165, 7.494472503662109, 3.038341999053955, 4.732555866241455, 7.630685329437256, 5.172760486602783, 5.504209995269775, 6.750641345977783, 13.654948234558105, 5.356211185455322, 5.479427814483643, 4.28655481338501, 3.6980645656585693, 3.7917423248291016, 3.72448992729187, 3.823179006576538, 3.719677448272705, 3.019810914993286, 3.159137010574341, 2.079592704772949, 1.9767004251480103, 3.693387269973755, 3.260141372680664, 1.5015668869018555, 2.646851062774658, 2.065035343170166, 2.190626382827759, 1.538841962814331, 1.4817231893539429, 1.653130054473877, 1.5101487636566162, 2.965825080871582, 2.1524746417999268, 1.0672770738601685, 1.146170973777771, 1.0201960802078247, 1.3391920328140259, 0.6798902750015259, 1.2278106212615967, 0.9752679467201233, 0.6647459268569946, 0.3480157256126404, 0.8157556653022766, 1.9601343870162964, 1.1831120252609253, 0.7730870842933655, -1.6866580247879028, 0.8476627469062805, -0.7752824425697327, 0.1955171823501587, -0.837225615978241, 0.934605598449707, -0.557204008102417, 0.6863991618156433, 2.0814309120178223, 1.1473475694656372, 4.990849494934082, -2.940760374069214, -1.1787337064743042, 0.7082749009132385, 0.39898577332496643, -0.6279712915420532, -0.2622414827346802, 0.7054809927940369, 1.4561007022857666, 1.6185647249221802, 1.4347294569015503, 0.6452640891075134, 0.2592335343360901, 6.344031810760498, 6.005645751953125, 4.733521938323975, 1.9107235670089722, 2.928924560546875, 2.528780460357666, 2.4911437034606934, 2.9880502223968506, 2.201901912689209, 1.1779874563217163, 0.03767179325222969, -0.18527637422084808, 4.009767532348633, 2.662926197052002, 1.3664542436599731, 0.01587219350039959, 2.3132402896881104, 2.3312273025512695, 1.48741614818573, 0.8870764970779419, 3.3081960678100586, -0.9535677433013916, -1.0102258920669556, 0.5050024390220642, -0.5222199559211731]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0.8, 1.37)}}, 'et2_eta2': {'discriminator': {'threshold': 0.61999846696853633, 'nodes': [100, 5, 1], 'bias': [-0.10109030455350876, 0.025601012632250786, 0.009790373966097832, 0.030248437076807022, 0.14768828451633453, 0.0820046067237854], 'weights': [0.013845269568264484, 0.2743213474750519, 0.310118168592453, 0.17151398956775665, 0.17529729008674622, 0.1429874747991562, -0.2319413721561432, 0.12828949093818665, 0.3726005554199219, -0.5962492823600769, -0.5033279061317444, -0.30347728729248047, -0.052831731736660004, 0.12314455211162567, -0.06908852607011795, -0.1663386970758438, 0.5550441741943359, 0.11560817062854767, 0.011102594435214996, 0.3527297079563141, 0.5607606768608093, 0.21273720264434814, 0.23302459716796875, 0.2298903465270996, 0.550605833530426, 0.11658553779125214, 0.33134984970092773, 1.8676954507827759, 1.6868354082107544, 0.3319355249404907, 0.11926001310348511, 0.1792215257883072, 0.2957342863082886, 0.3581884503364563, 0.285575807094574, 0.20025599002838135, 0.46586036682128906, 0.269322007894516, -0.08669886738061905, 0.16297020018100739, 0.010665277019143105, 0.1682368665933609, -0.9233469367027283, 0.22292549908161163, -1.558304786682129, 0.08138477057218552, 0.2755179703235626, 0.34901514649391174, 0.027236755937337875, 0.24263934791088104, 0.2086063027381897, 0.2664881944656372, 0.14927932620048523, 0.08504477888345718, 0.08050014078617096, 0.35674628615379333, 0.040955062955617905, -2.062716245651245, 0.18611185252666473, 0.06885792315006256, 0.08689526468515396, 0.2101241648197174, -0.25217247009277344, 0.06563106179237366, -0.4633270502090454, 0.06968774646520615, -0.4337001442909241, -0.4462567865848541, 0.09202249348163605, 0.22709032893180847, -0.03383948653936386, -0.004440879449248314, -0.017752880230545998, 0.1602475345134735, 0.6226475834846497, 0.22604982554912567, 0.5755512714385986, 0.3946768045425415, 0.3556194007396698, 0.21822257339954376, 0.5022941827774048, 2.110691785812378, 0.727285623550415, 0.4008437693119049, 0.2247782200574875, 0.38945329189300537, 0.34790703654289246, 0.21607756614685059, -0.04521612077951431, 0.0832543820142746, 0.19141966104507446, -0.1400870680809021, 1.0426220893859863, 0.39003899693489075, 0.15603157877922058, 0.3798508644104004, -0.07521170377731323, 0.03613670915365219, 0.20907475054264069, 0.039255063980817795, -0.2530997097492218, 0.17865312099456787, 1.079930305480957, 1.0963369607925415, 0.8849352598190308, 0.5647655129432678, -0.6269519329071045, 0.2035767138004303, 0.10712769627571106, -3.554274559020996, -1.9820129871368408, -1.7706360816955566, -0.6144486665725708, -0.14882032573223114, -0.2552137076854706, -0.22436465322971344, 2.337153434753418, -0.0882270336151123, -0.0938316211104393, 0.8095298409461975, 2.6678357124328613, 1.2588188648223877, 1.1514779329299927, 1.05138099193573, 2.257552146911621, 1.0554909706115723, 1.1473232507705688, 2.4757561683654785, 7.700045585632324, 0.9344580769538879, 1.091758370399475, 0.8402213454246521, 0.9260064363479614, 1.1000162363052368, 1.146885871887207, 1.2140612602233887, 2.278388738632202, 0.8352994918823242, -0.12984758615493774, 1.0570532083511353, -0.3579023778438568, 0.89804607629776, -4.026790618896484, 1.0377442836761475, -5.790028095245361, 0.7602058053016663, 1.1032581329345703, 1.192682147026062, 0.6202642917633057, 0.8277536630630493, 0.948631763458252, 1.1038786172866821, 1.067513346672058, -0.3113504946231842, 0.6047057509422302, 0.9997115135192871, 0.38723868131637573, -9.51147747039795, 0.869415283203125, 0.5203471779823303, 0.9342073202133179, 0.7725358605384827, -1.535783052444458, 0.7961961627006531, -2.4063820838928223, 0.49834880232810974, -2.1108152866363525, -1.5864633321762085, 0.6005389094352722, 0.901448130607605, -0.04919896274805069, 0.43780717253685, -0.19765424728393555, -0.10341626405715942, 2.704650402069092, 1.2416335344314575, 2.505913257598877, 2.0846962928771973, 1.8345003128051758, 0.7891427874565125, 0.41226136684417725, 2.2611896991729736, 3.529381513595581, 1.847952961921692, 1.3003193140029907, 1.6336201429367065, 0.8838067650794983, 0.7201108932495117, -0.7386602163314819, 0.9171581864356995, 0.24124182760715485, -0.20846377313137054, 4.589450836181641, 1.6712210178375244, 1.2195923328399658, 1.931431531906128, 0.036044977605342865, -0.10623301565647125, 0.951185405254364, 0.2761964201927185, -0.17828337848186493, 0.27954038977622986, 1.181740641593933, 1.0753962993621826, 0.8633856773376465, 0.7889276146888733, -0.6758575439453125, 0.25576305389404297, 0.16141879558563232, -3.599872350692749, -2.1027839183807373, -1.8067808151245117, -0.6349226236343384, -0.1279321163892746, -0.2109157145023346, -0.23781795799732208, 2.5200068950653076, -0.21017250418663025, -0.19917631149291992, 0.9052157998085022, 2.63562273979187, 1.2347347736358643, 1.0677075386047363, 1.00037682056427, 2.143268585205078, 1.024927020072937, 1.2102587223052979, 2.469799518585205, 7.675027847290039, 1.0475271940231323, 0.9451121091842651, 0.889057457447052, 0.8876240253448486, 1.0542176961898804, 1.1757442951202393, 1.1550921201705933, 2.204414129257202, 1.067590355873108, -0.13759320974349976, 1.0383327007293701, -0.17024622857570648, 1.0218671560287476, -4.082618713378906, 0.9525879621505737, -5.8976569175720215, 0.7496383786201477, 1.0036855936050415, 1.0155681371688843, 0.7400895357131958, 0.6237994432449341, 0.8681668043136597, 0.9359938502311707, 1.0918132066726685, -0.4765489399433136, 0.638154923915863, 1.1620664596557617, 0.44381457567214966, -9.667152404785156, 0.773475170135498, 0.5509428381919861, 0.8925642967224121, 0.7828179597854614, -1.4553883075714111, 0.7152078747749329, -2.441465377807617, 0.35526368021965027, -1.9984344244003296, -1.6945586204528809, 0.6887819170951843, 0.7537453174591064, -0.17697755992412567, 0.4613681733608246, -0.22249934077262878, -0.034685008227825165, 2.8953933715820312, 1.1101220846176147, 2.565039873123169, 1.9235283136367798, 1.7782132625579834, 0.7157565951347351, 0.2994776964187622, 2.2202746868133545, 3.5404484272003174, 2.0118072032928467, 1.2497440576553345, 1.679099202156067, 0.9576777815818787, 0.7251487970352173, -0.8498184680938721, 0.8960520625114441, 0.29201602935791016, -0.10892680287361145, 4.5771331787109375, 1.5358741283416748, 1.2391037940979004, 1.8849940299987793, 0.009951070882380009, 0.024696487933397293, 1.0489907264709473, 0.3393084406852722, 0.06756250560283661, -0.22210612893104553, -0.9965993762016296, -1.0186727046966553, -1.0063633918762207, -0.8177002668380737, 0.6240396499633789, -0.2130294144153595, -0.03061019256711006, 3.383131504058838, 2.08024263381958, 1.6923630237579346, 0.7350565195083618, 0.046046722680330276, 0.13638022541999817, 0.28787070512771606, -2.4150118827819824, 0.14912953972816467, 0.18064701557159424, -0.9254627823829651, -2.741456985473633, -1.1958385705947876, -1.0552903413772583, -1.1609145402908325, -2.1722030639648438, -0.9735843539237976, -1.0769546031951904, -2.5768070220947266, -7.478160381317139, -1.0177704095840454, -0.9195078611373901, -1.0508978366851807, -0.805747389793396, -1.0914592742919922, -1.0328738689422607, -1.210878849029541, -2.2048799991607666, -0.9712240695953369, 0.11922603845596313, -0.9028347730636597, 0.2978588044643402, -0.8147884011268616, 4.098543643951416, -0.9728285074234009, 7.198566436767578, -0.8029349446296692, -1.2218605279922485, -1.0386810302734375, -0.6064420938491821, -0.6125165224075317, -0.9062126278877258, -0.9134947657585144, -1.0363198518753052, -0.5605500340461731, -0.7708793878555298, -2.256897211074829, -0.41810065507888794, 9.662418365478516, -0.8539235591888428, -0.5763483643531799, -0.8622281551361084, -0.8318180441856384, 1.516129732131958, -0.8509820103645325, 2.3600082397460938, -0.3996390998363495, 2.0548605918884277, -0.00507489126175642, -0.6421050429344177, -0.9636732339859009, 0.23071114718914032, -0.5350654125213623, 0.21433566510677338, 0.1096574068069458, -2.7413439750671387, -1.2357655763626099, -2.5380499362945557, -1.9929677248001099, -1.6789827346801758, -0.8031062483787537, -0.3523203432559967, -2.4070770740509033, -3.599984884262085, -2.00384259223938, -1.2195020914077759, -1.6233731508255005, -0.9231544137001038, -0.9171799421310425, 0.6528230905532837, -0.9366628527641296, -0.2614656686782837, 0.19025464355945587, -4.672588348388672, -1.6925694942474365, -1.045562982559204, -1.8139197826385498, 0.03696505352854729, -0.022716591134667397, -0.8065388798713684, -0.24040116369724274, 0.2556486129760742, -0.09404973685741425, -1.103546380996704, -0.9865561127662659, -0.962024986743927, -0.7802593111991882, 0.48725801706314087, -0.2560781240463257, -0.17328469455242157, 3.373044490814209, 2.164020538330078, 1.7409937381744385, 0.5686818957328796, 0.031084321439266205, 0.21913090348243713, 0.21243412792682648, -2.410529136657715, 0.02821100875735283, 0.08264661580324173, -0.8203510642051697, -2.4261274337768555, -1.362908959388733, -1.060241460800171, -0.9698448777198792, -2.104672431945801, -1.1469992399215698, -1.1001077890396118, -9.16241455078125, -7.64695405960083, -1.1476924419403076, -0.9792933464050293, -1.0301406383514404, -0.8090778589248657, -1.256726861000061, -1.2071492671966553, -2.486253499984741, -2.3341715335845947, -1.0551313161849976, 0.11718505620956421, -0.9335927963256836, 0.2215939611196518, -0.929307222366333, 4.1149516105651855, -0.9382969737052917, 5.833007335662842, -0.7024279236793518, -1.021557331085205, -1.2172623872756958, -0.6352887749671936, -0.7514218091964722, -0.7384740114212036, -1.3904412984848022, -1.5016494989395142, -0.7806954383850098, -0.6780198216438293, -2.252669095993042, -0.428727924823761, 9.49091625213623, -0.8288125991821289, -0.5145612359046936, -0.9224437475204468, -0.8650126457214355, 1.5972092151641846, -0.913063108921051, 2.4032840728759766, -0.26568564772605896, 2.033787250518799, 0.15011750161647797, -0.8332669138908386, -0.745579719543457, 0.11393758654594421, -0.5612844228744507, 0.023119593039155006, 0.010756488889455795, -2.734496593475342, -1.1276297569274902, -2.534862518310547, -2.0270254611968994, -1.7508928775787354, -0.8203508257865906, -0.28407493233680725, -9.806964874267578, -3.4756968021392822, -1.9988998174667358, -1.2020944356918335, -1.6474331617355347, -1.5474064350128174, -0.908934473991394, 0.6984694004058838, -0.655846357345581, -0.26376044750213623, 0.16190822422504425, -4.671891212463379, -1.7697848081588745, -1.12514328956604, -1.771411657333374, 0.08082259446382523, 0.11783760786056519, -0.8500464558601379, -0.14649765193462372, -1.7272425889968872, -2.73661470413208, -3.4732577800750732, 0.7215352058410645, 0.8621499538421631]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (1.37, 1.54)}}, 'et2_eta3': {'discriminator': {'threshold': 0.32499874830245973, 'nodes': [100, 5, 1], 'bias': [0.021079380065202713, 0.08442211896181107, -0.11139082163572311, 0.0007079020724631846, 0.05026240274310112, 0.2636169195175171], 'weights': [115.01241302490234, 42.94895553588867, 2.567657470703125, -23.618711471557617, 0.3513403832912445, -30.06334686279297, 0.13925796747207642, 0.7864643335342407, -2.3290374279022217, -9.502877235412598, -3.580317974090576, 5.760210037231445, 2.3665096759796143, -3.470517635345459, -83.71723175048828, 4.339878082275391, 70.6534423828125, 5.893828392028809, -8.474519729614258, -9.403303146362305, 1.5621743202209473, 15.476668357849121, -6.421986103057861, 1.765583872795105, 6.5437726974487305, -26.356807708740234, -17.89145278930664, 1.2509477138519287, 0.8129051923751831, 3.8760077953338623, 2.3494021892547607, -2.557936191558838, 2.3607680797576904, -46.303829193115234, -10.613133430480957, -6.5056352615356445, 1.526335597038269, 14.906636238098145, 2.1999030113220215, -19.766427993774414, 0.06349214911460876, -13.480081558227539, -0.5147789716720581, -0.3164357542991638, 1.928426742553711, 1.4178005456924438, -8.319304466247559, 28.070369720458984, -2.14863920211792, -0.6671326160430908, -10.336699485778809, 1.0044090747833252, -29.91691017150879, 4.0703654289245605, 1.9270503520965576, -4.03021764755249, 0.44835802912712097, 4.354485511779785, -0.05387434735894203, -13.275885581970215, 0.3991834819316864, -3.31421160697937, -0.3342691957950592, -14.609319686889648, -28.50311279296875, -1.1891582012176514, 2.004866361618042, -0.1418459713459015, -4.437169551849365, 3.9644668102264404, 0.6536940336227417, 10.534915924072266, -0.5242905616760254, -1.0283880233764648, 1.8980313539505005, 2.3233587741851807, 2.7156434059143066, 0.3631680905818939, 0.9115080833435059, -4.258874416351318, -12.490303039550781, 5.131297588348389, 1.4211421012878418, -12.279603004455566, 1.80827796459198, 1.8810527324676514, 1.6881822347640991, -35.38578796386719, 50.878963470458984, 17.235525131225586, 0.9896836876869202, -1.0818644762039185, -4.542476654052734, -1.4971346855163574, 0.15198594331741333, -15.579697608947754, 1.082066535949707, -0.6022031903266907, 2.742074728012085, 432.5343017578125, -2.4046730995178223, -4.054540634155273, -0.3345430791378021, 1.8782836198806763, 0.6635843515396118, 0.46270644664764404, 0.3762456774711609, 0.588930070400238, -1.5792242288589478, -2.701042652130127, -0.9422552585601807, 1.6233853101730347, 1.5889554023742676, 0.08426722139120102, 2.915616273880005, 0.8040958642959595, 1.3760857582092285, 5.797585964202881, 2.9871768951416016, 3.2662434577941895, 3.810821294784546, 4.717774391174316, 4.847388744354248, 3.813713312149048, 11.084071159362793, 4.598029136657715, 2.2005183696746826, 1.0692198276519775, 3.222649335861206, 3.8591089248657227, 2.513326406478882, 3.7206838130950928, 2.4376578330993652, 2.5217013359069824, 5.22318172454834, 2.0839593410491943, 1.6313296556472778, 4.407665729522705, 2.2395167350769043, 2.465404987335205, 0.05863027274608612, 1.863450288772583, 2.30320143699646, 2.8061468601226807, 2.1014904975891113, 1.550355315208435, 1.268784761428833, 2.3019509315490723, -0.9904949069023132, 0.4788903295993805, 1.1533197164535522, 0.9741131663322449, 0.8714801073074341, 1.129149317741394, 1.8406143188476562, 2.3730833530426025, 0.4926026463508606, 2.4584741592407227, -0.08243851363658905, 0.8996639847755432, 0.40754395723342896, 4.372114658355713, -0.31631138920783997, -1.7400392293930054, -0.46883895993232727, 2.0979011058807373, 1.2511507272720337, -0.12380146980285645, -4.6359171867370605, 3.596827507019043, 0.7161647081375122, 3.3739213943481445, -0.4523775279521942, -0.48092547059059143, 2.6023378372192383, 2.700756549835205, 2.780585765838623, 2.3950860500335693, 1.2173625230789185, 1.8506463766098022, 2.427272081375122, 8.001241683959961, 8.119108200073242, 2.7606539726257324, 2.653822422027588, 2.1011712551116943, 2.2490336894989014, 3.638641595840454, 0.6341323852539062, 2.421041965484619, 0.9795575737953186, -0.7216323614120483, 6.437246799468994, 2.5924415588378906, 0.22533871233463287, 1.1461886167526245, 0.8496565222740173, 0.43248608708381653, -0.14927130937576294, 19.89673614501953, 2.9339468479156494, 4.613544940948486, 0.7371185421943665, -1.9341503381729126, -0.6393091678619385, -0.46071740984916687, -0.6781154274940491, -0.4572194218635559, 1.7274147272109985, 2.797091007232666, 1.0358251333236694, -0.7862182855606079, -0.4693666398525238, -0.14982397854328156, -2.7958474159240723, -3.6837379932403564, -1.7527856826782227, -5.968070983886719, -3.1116509437561035, -2.890064239501953, -3.192734479904175, -4.8754963874816895, -2.842022180557251, -3.9419987201690674, -11.073169708251953, -4.346763610839844, -2.2878010272979736, -1.0610346794128418, -3.168459177017212, -3.8329131603240967, -2.6271157264709473, -3.7385663986206055, -2.410245656967163, -2.5832595825195312, -2.7983710765838623, -2.2324941158294678, -1.4780268669128418, -3.8479208946228027, -2.030487537384033, -2.2927138805389404, 0.027142073959112167, -1.930434226989746, -2.109790563583374, -2.787881851196289, -2.0737273693084717, -1.4716532230377197, -1.432565450668335, -2.195216655731201, 0.9082101583480835, -0.49968573451042175, -0.7531368732452393, -1.078606367111206, -0.8780576586723328, -1.12929368019104, -1.8113393783569336, -2.1697838306427, -0.3509630262851715, -2.5010759830474854, 0.06509595364332199, -0.9514897465705872, -0.0512656606733799, -2.8561782836914062, 0.878503680229187, -1.2026686668395996, 0.2730969488620758, -1.5559449195861816, -1.150030493736267, 0.09091801941394806, 4.577388763427734, -3.5361721515655518, -0.7303844094276428, -3.5749614238739014, 0.4578297436237335, 0.8594622611999512, -2.7798662185668945, -2.6554794311523438, -2.8049275875091553, -2.506946325302124, -1.2736141681671143, -1.7042546272277832, -2.8421518802642822, -7.4616265296936035, -8.108945846557617, -4.377047538757324, -2.5591001510620117, -2.0399527549743652, -4.373971939086914, -3.358013153076172, -1.0179824829101562, -2.585057020187378, -0.8176607489585876, 0.9079455137252808, -6.585074424743652, -2.807870864868164, -0.25218847393989563, -1.2549949884414673, -0.8725645542144775, -0.09838278591632843, 0.2362930178642273, -19.98362159729004, 2.0387790203094482, 1.3027656078338623, -0.4540368616580963, -1.1967713832855225, -1.3499963283538818, -4.099092960357666, -0.4082486629486084, -0.3322586119174957, 7.5542402267456055, 5.710226535797119, -0.3379306197166443, -23.053298950195312, -16.225215911865234, 1.1719319820404053, -17.06928825378418, -3.708646774291992, 10.64037036895752, -8.712221145629883, -13.982789039611816, -2.7481861114501953, 0.7753178477287292, -7.936609745025635, -2.169773817062378, -3.247138738632202, 6.233680725097656, -4.7232584953308105, 2.779235363006592, -2.681654691696167, -0.2045527845621109, -4.382552623748779, -3.555079698562622, -3.875593662261963, -0.6958762407302856, -0.63019198179245, -3.723541021347046, 0.058886412531137466, -0.8534103631973267, -2.110583543777466, -1.3677217960357666, 0.054051633924245834, -0.6802531480789185, -1.131946325302124, -0.8535158634185791, -1.0312925577163696, -0.8417698740959167, -0.44020581245422363, 0.3287504315376282, -0.917592465877533, 0.3144913613796234, -0.8756914138793945, -0.036071404814720154, 0.8575083017349243, -8.771231651306152, 1.2499338388442993, -1.2436883449554443, -0.08529619872570038, -0.5046313405036926, -2.8130717277526855, -0.5089612603187561, -0.3762369155883789, -6.77292537689209, -1.197763204574585, -0.5411012172698975, 5.407064437866211, -0.07192108780145645, 7.616754055023193, -1.7108583450317383, 3.5139853954315186, -0.2127103954553604, -2.572028636932373, -0.7069661021232605, -1.262388825416565, 0.9898355007171631, -0.051796745508909225, -0.7122933864593506, -0.6600987315177917, -1.5175871849060059, -1.1813327074050903, -0.3426356613636017, -0.489092618227005, 8.300046920776367, -2.775688409805298, -7.6169819831848145, -2.37893009185791, -1.7154933214187622, -1.0463685989379883, -0.6126124262809753, 0.008684714324772358, 1.5078939199447632, 2.6901357173919678, 0.5272760987281799, -1.0708180665969849, -1.6926586627960205, -1.2914046049118042, -1.0477041006088257, -0.6110436916351318, -0.8042972683906555, -0.7249646186828613, -0.11176440864801407, -8.65184497833252, -2.6839330196380615, -4.035173416137695, -0.39642587304115295, 1.9340206384658813, 0.6639010310173035, 0.51161789894104, 0.5562962293624878, 0.6001103520393372, -1.4932231903076172, -2.636807918548584, -0.9902734756469727, 0.9984682202339172, 1.111194133758545, 0.06704273819923401, 2.7396740913391113, 3.649498701095581, 2.0994036197662354, 5.991048336029053, 3.0657453536987305, 5.515302658081055, 3.9288947582244873, 4.730417251586914, 2.8918492794036865, 3.8142693042755127, 11.114066123962402, 4.269949913024902, 2.2307748794555664, 1.2116316556930542, 3.168015480041504, 3.9591948986053467, 2.4655468463897705, 3.594942092895508, 2.343388557434082, 2.4231455326080322, 2.65401291847229, 2.0189731121063232, 1.6308107376098633, 3.8255233764648438, 2.215118408203125, 2.3084115982055664, 0.01821434497833252, 1.903847336769104, 2.2039103507995605, 2.607603073120117, 2.1239845752716064, 1.512854814529419, 1.2872682809829712, 2.2080740928649902, -0.8491103053092957, 0.5878936648368835, 1.0318490266799927, 1.0073944330215454, 0.7745478749275208, 0.9544230699539185, 1.8896965980529785, 2.319242000579834, 0.35556527972221375, 2.550459861755371, -0.00563912745565176, 0.9463590979576111, -0.035583265125751495, 4.412873268127441, -0.7868633270263672, 1.2892767190933228, -0.2909969687461853, 1.4916921854019165, 1.269150972366333, -0.19655336439609528, -4.657676696777344, 3.5757579803466797, 0.7211792469024658, 3.546260356903076, -0.45072194933891296, -0.583769679069519, 2.811086893081665, 2.7057290077209473, 2.863959550857544, 2.386772632598877, 1.3432966470718384, 1.678554892539978, 3.0095274448394775, 7.341079235076904, 8.186492919921875, 4.186151504516602, 2.5037055015563965, 1.9556443691253662, 2.21278715133667, 2.9992709159851074, 0.987898588180542, 2.287041664123535, 0.9858039021492004, -0.5060150623321533, 6.522360324859619, 2.7444276809692383, 0.18857921659946442, 1.170567512512207, 1.0746809244155884, 0.4019630551338196, -0.18592390418052673, 19.86507797241211, -0.7996860146522522, -0.8971362113952637, 1.7831422090530396, 1.376376986503601, -0.9318203926086426]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (1.54, 2.5)}}, 'et2_eta0': {'discriminator': {'threshold': 0.31999875307083131, 'nodes': [100, 5, 1], 'bias': [-0.1145973950624466, -0.05412110313773155, 0.09014075994491577, -0.060647644102573395, 0.20350374281406403, 0.1337592452764511], 'weights': [3.4661269187927246, 1.3500856161117554, -0.0556333065032959, -0.3569779098033905, 0.4135678708553314, 0.41795459389686584, -0.4174874722957611, 0.3244650661945343, 1.9885859489440918, 2.8075780868530273, -0.7958009243011475, -4.583902359008789, -8.67313289642334, -6.214581489562988, -2.3095853328704834, -5.751229286193848, -2.198564052581787, -3.3803329467773438, -5.199295997619629, -2.4351818561553955, -2.485520362854004, -2.410604476928711, -2.345674753189087, -2.537550926208496, -2.2204580307006836, -1.3173775672912598, -1.9971883296966553, -1.4453233480453491, -1.6724505424499512, -1.6131279468536377, -1.9890766143798828, -1.6009278297424316, -1.413903832435608, -2.079495906829834, -1.7254515886306763, -0.7677139043807983, -1.0373281240463257, -1.272466778755188, -1.5066214799880981, -0.9812381267547607, -1.5210427045822144, -1.0360053777694702, -0.9566309452056885, -1.0135706663131714, -0.2355639785528183, -0.5898135304450989, -0.8778921365737915, -1.1788119077682495, -0.5249338150024414, -0.7230725288391113, 0.11529037356376648, 0.5990443229675293, -1.0125130414962769, -0.5040639638900757, -0.6518067121505737, 0.05305566266179085, -0.0034301066771149635, 0.42206090688705444, 0.3916533291339874, 0.1432589441537857, 0.7103737592697144, 1.5257158279418945, -1.1888790130615234, -0.5304505228996277, -2.3267130851745605, -0.7257466912269592, 1.3764760494232178, 0.09693709015846252, -0.43147093057632446, 0.22741621732711792, -0.5677496790885925, -0.5272998809814453, 0.412883460521698, 0.32479605078697205, -0.7293165922164917, -1.2639217376708984, -1.348122239112854, -0.9404879212379456, -0.5513057708740234, -0.30192387104034424, -1.7723290920257568, -3.5103180408477783, -2.039353132247925, -2.3044636249542236, -1.9126121997833252, -1.709487795829773, -0.6883493065834045, -1.1739675998687744, -3.518812656402588, -2.4658355712890625, -0.973460853099823, 0.004903082270175219, -3.041006326675415, -2.1986403465270996, -0.6585326194763184, 0.3128136694431305, -4.191408157348633, -1.888517141342163, -0.07096751034259796, -0.1799200028181076, -274.7655944824219, -43.93977355957031, -0.31424620747566223, 0.037367723882198334, -0.21977196633815765, -0.8316360116004944, -0.3169817328453064, -0.11244185268878937, -0.5436539649963379, -5.075516223907471, 24.164505004882812, 2.6848723888397217, 6.6518402099609375, -22.516265869140625, 3.8308470249176025, 16.530607223510742, 7.538712024688721, 1.0792908668518066, 2.5052595138549805, 0.4939861595630646, 0.7397604584693909, 0.607239305973053, 0.547098696231842, 0.5501576662063599, 0.5273366570472717, 0.12655936181545258, 0.4669652283191681, 0.379781574010849, 0.36313122510910034, 0.2824549078941345, 0.302779883146286, 0.2844259738922119, 0.3032187819480896, 0.3134819567203522, 0.1935473084449768, 1.2020982503890991, 0.16954252123832703, 0.35271763801574707, 0.4091174006462097, 0.26845628023147583, 103.68645477294922, 0.13802462816238403, 0.1590566188097, 0.12879283726215363, 0.010509362444281578, 0.21270455420017242, -0.7591646909713745, 0.24821963906288147, 0.03088539093732834, 0.16785435378551483, 0.11421521753072739, -0.046707287430763245, 0.28282439708709717, 0.14659562706947327, 0.08657138049602509, -0.02520943433046341, 0.03341761231422424, 0.010446188971400261, -0.16878962516784668, 0.3932514786720276, -0.16624024510383606, -0.529011070728302, 0.277802973985672, 0.14760076999664307, 0.1814027577638626, 0.09646748751401901, -0.9664314389228821, -0.06649115681648254, 0.07938634604215622, -0.14664292335510254, 0.1502922624349594, 0.01714238151907921, 5.909456253051758, -0.1143762618303299, -0.3064577877521515, 0.280812531709671, 0.3925819993019104, -0.12955120205879211, -12.52425479888916, -0.05088113620877266, 0.3544582724571228, 0.759502112865448, 0.4988522529602051, 16.051626205444336, 0.4128522276878357, 0.1501341462135315, 0.15268515050411224, 0.20424585044384003, 0.6215866208076477, -7.800693035125732, 0.20118387043476105, -0.021234877407550812, 0.17071661353111267, -13.458681106567383, 0.05582299828529358, -0.08541436493396759, 0.7859625816345215, 0.36186090111732483, 24.232921600341797, -0.01858949102461338, -3.139693021774292, -1.4449257850646973, 0.11654689908027649, 0.3728778660297394, -0.48765575885772705, -0.3361949026584625, 0.3706994950771332, -0.2993294894695282, -1.8400994539260864, -2.1229188442230225, 1.2088897228240967, 4.7233076095581055, 8.248957633972168, 6.395541667938232, 2.3897228240966797, 5.956242084503174, 2.235562562942505, 3.5572855472564697, 5.117026329040527, 2.434941291809082, 2.460944175720215, 2.4680731296539307, 2.4019899368286133, 2.536468505859375, 2.045292377471924, 1.257469892501831, 2.0955810546875, 1.493794560432434, 1.6864268779754639, 1.692544937133789, 1.902928113937378, 1.5552563667297363, 1.3968826532363892, 2.0522022247314453, 1.6758896112442017, 0.913215160369873, 1.0938458442687988, 1.1959072351455688, 1.4406706094741821, 1.1837518215179443, 1.645910382270813, 1.134926438331604, 1.0559449195861816, 1.0369287729263306, 0.2728612422943115, 0.5262996554374695, 0.8212931752204895, 1.0100024938583374, 0.39508965611457825, 1.0989691019058228, -0.04175104945898056, -0.5138407349586487, 1.1715914011001587, 0.39132463932037354, 0.49334391951560974, -0.06707893311977386, -0.16715681552886963, -0.4800739288330078, -0.6670650243759155, -0.03576413169503212, -0.6910268664360046, -1.5774166584014893, 1.2271993160247803, 0.5348380208015442, 2.2497799396514893, 0.7342997193336487, -1.46317720413208, -0.11940494179725647, -0.30391666293144226, -0.13747809827327728, 0.507476270198822, 0.5882951617240906, -0.4666023850440979, -0.29006993770599365, 0.8116322159767151, 1.2454462051391602, 1.5528160333633423, 0.9679802060127258, 0.3660881817340851, 0.143290713429451, 1.8387651443481445, 3.4006881713867188, 2.2084741592407227, 2.3503472805023193, 1.9328300952911377, 1.7222366333007812, 0.4774474799633026, 1.2661560773849487, 3.4714863300323486, 2.2895569801330566, 0.9087651968002319, -0.034932106733322144, 3.0556228160858154, 2.1732492446899414, 0.630840539932251, -0.37718766927719116, 4.177546977996826, 2.0167076587677, -0.017935506999492645, 0.0986054316163063, 3.5574827194213867, 1.451647162437439, -0.09144826978445053, -0.4547705352306366, 0.4507312476634979, 0.4944400489330292, -0.48623916506767273, 0.13314621150493622, 2.045506238937378, 2.8213329315185547, -0.8786575198173523, -4.641798496246338, -8.662209510803223, -6.207137107849121, -2.2785449028015137, -4.745168209075928, -2.365581512451172, -3.4740469455718994, -4.993616580963135, -2.585416316986084, -2.597362518310547, -2.4302406311035156, -2.2772655487060547, -2.45805025100708, -2.2206428050994873, -1.4150340557098389, -1.988546371459961, -1.457390546798706, -1.636422872543335, -1.5249335765838623, -1.9789929389953613, -1.71364164352417, -1.4642473459243774, -2.1055896282196045, -1.695865511894226, -0.7813180685043335, -0.9865161180496216, -1.3120564222335815, -1.4714500904083252, -1.1135910749435425, -1.5473064184188843, -1.0832594633102417, -0.9067853093147278, -1.028486967086792, -0.2757495641708374, -0.5085345506668091, -0.8818341493606567, -1.145955204963684, -0.5369932055473328, -1.0617187023162842, -0.002517560264095664, 0.47469520568847656, -1.0709162950515747, -0.5530292391777039, -0.6962258815765381, 0.23456771671772003, 0.09004489332437515, 0.6263918280601501, 0.6288085579872131, 0.5215635895729065, 0.7628006339073181, 2.194525718688965, -1.1729481220245361, -0.5279311537742615, -2.172847032546997, -0.9203200936317444, 1.365815281867981, 0.06153104826807976, 0.24390235543251038, 0.2514963150024414, -0.4954139292240143, -0.5472025871276855, 0.39014238119125366, 0.1993001252412796, -0.7645597457885742, -1.3272745609283447, -1.3851884603500366, -0.9792442321777344, -0.3416995108127594, -0.11094941198825836, -1.8498470783233643, -3.418088912963867, -2.212824583053589, -2.4399538040161133, -1.869774580001831, -1.6872807741165161, -0.6417148113250732, -1.2777502536773682, -3.5323994159698486, -2.4896035194396973, -0.9477433562278748, 0.04333853721618652, -2.885671854019165, -2.1565632820129395, -0.8576779961585999, 0.38191887736320496, -4.103809356689453, -2.113654375076294, -0.03770170360803604, -0.32647275924682617, -3.2173664569854736, -1.3979148864746094, 0.04642748832702637, 0.32729101181030273, -0.5889932513237, -0.37988999485969543, -2.112027168273926, -0.4085172116756439, -2.2341020107269287, -2.4571335315704346, 6.137634754180908, 4.525824069976807, 2.0595593452453613, 4.521827220916748, -3.0937137603759766, 2.504520893096924, 2.25490665435791, 3.4088268280029297, 5.432875633239746, 2.5163848400115967, 2.4960949420928955, 2.2455997467041016, 2.3769195079803467, 2.6098148822784424, 2.0510783195495605, 1.2801543474197388, 1.973474144935608, 1.4448826313018799, 1.6874314546585083, 1.5239527225494385, 1.9966497421264648, 1.4814739227294922, 1.517063021659851, 2.078674554824829, 0.7656508088111877, 0.7906789183616638, 1.073715329170227, 1.2385356426239014, 1.4749987125396729, 1.1023108959197998, 1.5462993383407593, 0.9874445796012878, 1.0187957286834717, 0.8696563839912415, 0.23125912249088287, 0.5673548579216003, -0.143781840801239, 0.9861699938774109, 0.524522066116333, 1.1770586967468262, 0.017966890707612038, -0.5852797031402588, 1.1182926893234253, 0.4288347661495209, 0.4860314130783081, -0.11746633052825928, -0.10952814668416977, -0.6002830266952515, -0.45730552077293396, 1.383709192276001, -0.47283563017845154, 0.18728488683700562, 1.2120819091796875, 0.3662359118461609, 2.2678027153015137, 0.838821291923523, 0.2928161323070526, 0.5012331008911133, 0.5098177790641785, 0.37218108773231506, 0.4275001883506775, 0.6379490494728088, -0.6494240760803223, -0.40261393785476685, 0.6969048380851746, 1.4216718673706055, 1.478459358215332, 0.8530159592628479, 0.5206731557846069, 0.20757175981998444, 1.8980046510696411, 3.372199535369873, 2.1750621795654297, 2.359828233718872, 1.94000244140625, 1.7141116857528687, 0.6785669922828674, 1.328121304512024, 3.345731258392334, 2.391211986541748, 0.7904902100563049, 0.03435143828392029, 2.9099299907684326, 2.0068655014038086, 0.773309588432312, -0.26310107111930847, 4.142958641052246, 2.006596088409424, 0.09990581125020981, 0.211178719997406, 1.0721156597137451, -0.2609236538410187, -1.2464908361434937, 1.224605917930603, -2.9271979331970215]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0, 0.8)}}, 'et1_eta2': {'discriminator': {'threshold': 0.49999858140945436, 'nodes': [100, 5, 1], 'bias': [0.1660536676645279, -0.09260424226522446, 0.18541112542152405, -0.01521122083067894, -0.035576365888118744, -0.4945518970489502], 'weights': [-0.9389358758926392, -0.12105660140514374, 0.3670014441013336, 0.8390507698059082, 0.2314704954624176, -1.0423684120178223, 0.03034968487918377, 0.04645406827330589, 0.8171259164810181, -3.6258726119995117, -6.1305108070373535, -2.587165594100952, 3.774099111557007, 3.143880844116211, -0.80121248960495, -1.014901876449585, 3.756338596343994, -0.8993691205978394, -0.929709792137146, 0.46394240856170654, 1.9805229902267456, 0.720779299736023, 0.0041855452582240105, 0.08182483166456223, 2.1305928230285645, 1.3367650508880615, 9.117352485656738, 1.0708565711975098, 2.701639175415039, 0.5453954339027405, 0.5901762247085571, 0.27951815724372864, 0.23340432345867157, 0.3213069438934326, 1.1228090524673462, 1.733852744102478, 2.6954891681671143, 1.004016637802124, 0.8855718374252319, 0.34413546323776245, 1.2824195623397827, -3.899681329727173, 0.8291013836860657, 1.5699998140335083, -2.5046660900115967, 0.12688623368740082, 0.15166909992694855, 0.6564676761627197, 0.8464936017990112, 0.8760786056518555, -2.290839672088623, -0.3234841823577881, -2.8910558223724365, 0.6317764520645142, 1.0405882596969604, 0.8988353610038757, 0.6049715280532837, 0.9102033376693726, -4.668795108795166, 0.5174882411956787, -0.02492581121623516, 0.885158896446228, 0.9668274521827698, -15.823362350463867, 0.6638754606246948, -0.7332473397254944, 0.008322533220052719, 0.7136099338531494, 0.816786527633667, 0.7634891867637634, 2.1394340991973877, 1.9863669872283936, -0.49270015954971313, -0.5512511730194092, 3.020101547241211, 1.3349847793579102, 1.6237982511520386, 1.6902445554733276, 0.6394003033638, 0.5237955451011658, -0.6771195530891418, 0.716903030872345, 3.136241912841797, 1.8372712135314941, 1.843441128730774, 1.534429669380188, 1.5864427089691162, 0.7326285243034363, -0.9221916794776917, 0.04844559356570244, 0.3145847022533417, -0.5440637469291687, 4.12753963470459, 0.44132885336875916, 0.48569878935813904, 2.061765670776367, -0.06607150286436081, 0.01221557892858982, -0.0037229200825095177, 1.8724874258041382, 0.9452347159385681, 0.2318301647901535, -0.29512715339660645, -1.0175572633743286, -0.2936770021915436, 0.8586761951446533, -0.7136247158050537, -0.1394774168729782, -2.479201555252075, 3.633429527282715, 6.148832321166992, 1.1909912824630737, -3.679518222808838, -3.108302116394043, 0.9548355937004089, 0.9398448467254639, -3.7135815620422363, 0.7958019971847534, 0.8493679165840149, -0.5630879998207092, -1.8297094106674194, -0.6841930150985718, 0.11052222549915314, -0.044198133051395416, -2.0813539028167725, -1.491302251815796, -9.028913497924805, -1.1347301006317139, -2.5743601322174072, -0.5954425930976868, -0.45665180683135986, -0.4001908600330353, -0.17055273056030273, -0.35277920961380005, -1.1677411794662476, -1.7353333234786987, -2.8152577877044678, -0.8717381358146667, -0.7229496240615845, -0.3141927123069763, -1.140475869178772, 4.074158668518066, -0.6966882944107056, -1.5700340270996094, 2.4781692028045654, -0.06478343904018402, -0.22886759042739868, -0.6380794048309326, -0.8984648585319519, -0.7970829010009766, 2.442439079284668, 0.14679725468158722, 2.7700870037078857, -0.602025032043457, -0.9070513248443604, -0.7340141534805298, -0.7318882942199707, -0.9676535129547119, 4.53318452835083, -0.5149952173233032, -0.037572383880615234, -0.8892942667007446, -0.8307599425315857, 15.82580852508545, -0.697955846786499, 0.8265050053596497, -0.07606390863656998, -0.6309058666229248, -0.8986612558364868, -0.8548528552055359, -2.0288636684417725, -1.8575608730316162, 0.5736150741577148, 0.5576900243759155, -3.1278727054595947, -1.281878113746643, -1.5657764673233032, -1.877355933189392, -0.6072109341621399, -0.5198767781257629, 0.8055593371391296, -0.7239843606948853, -3.033485174179077, -1.830606460571289, -1.827890396118164, -1.5346916913986206, -1.4141550064086914, -0.841860830783844, 0.9094813466072083, -0.24852539598941803, -0.18477287888526917, 0.4709726572036743, -4.095010280609131, -0.41199788451194763, -0.558438777923584, -2.061180591583252, -0.04788471758365631, -0.083959199488163, 0.08485851436853409, -1.7609026432037354, -0.9927989840507507, -0.22755783796310425, 0.46136975288391113, 0.9827638864517212, 0.17937327921390533, -0.98271644115448, 0.10947437584400177, 0.07717394828796387, 0.9598147869110107, -3.6012673377990723, -6.334378242492676, -2.6594512462615967, -0.028662439435720444, 2.94340443611145, -0.8999265432357788, -0.8038007616996765, 3.7211480140686035, -0.8452624678611755, -0.9760757088661194, 0.3748461604118347, 1.9088479280471802, 0.7320083379745483, -0.02602810598909855, -0.0919680967926979, 2.0431947708129883, 1.3340981006622314, 1.9357608556747437, 1.0278220176696777, 2.4949445724487305, 0.4569856822490692, 0.6744378209114075, 0.26485639810562134, 0.2843888998031616, 0.4894283413887024, 1.005969762802124, 1.744221806526184, 2.677565336227417, 0.9777714610099792, 0.6807442903518677, 0.22208715975284576, 1.2692440748214722, -4.062464714050293, 0.647163987159729, 1.5809606313705444, -2.6220176219940186, 0.09213666617870331, 0.12779907882213593, 0.7498270273208618, 0.8543643951416016, 0.8173231482505798, -2.2751007080078125, -0.14138440787792206, -2.9500601291656494, 0.6055625677108765, 0.8029912710189819, 0.763913631439209, 0.5875661373138428, 0.8201058506965637, -4.600836753845215, 0.5392951369285583, 0.04246700182557106, 0.791408360004425, 0.7280694246292114, -15.716469764709473, 0.7267699241638184, -0.8429386019706726, 0.1141120195388794, 0.7700673937797546, 0.9267532825469971, 0.9103420376777649, 2.0862314701080322, 1.8372583389282227, -0.49715137481689453, -0.48570993542671204, 3.127847194671631, 1.205225944519043, 1.5884701013565063, 1.785603404045105, 0.6516576409339905, 0.5662755966186523, -0.6290300488471985, 0.6927171349525452, 3.056330442428589, 1.8378329277038574, 1.8045244216918945, 1.4628254175186157, 1.440600872039795, 0.9222137928009033, -0.8379809856414795, 0.2164636254310608, 0.28007563948631287, -0.4039464294910431, 3.9559061527252197, 0.41408202052116394, 0.48681291937828064, 2.198930025100708, 0.0427837073802948, -0.1267825812101364, -0.05599617213010788, 1.8454029560089111, 0.10072196274995804, 0.10001213848590851, 0.4225679934024811, 0.0899830088019371, -0.1253460943698883, -0.03832727670669556, -0.17258554697036743, 0.006134936586022377, 0.32795268297195435, -0.7147434949874878, -0.620525598526001, -0.23115095496177673, 0.10592801123857498, 0.3367525339126587, 0.06643199920654297, -0.05069795250892639, 0.32077908515930176, 0.05674194544553757, -0.07806650549173355, 0.08556340634822845, 1.0341018438339233, 0.21585318446159363, 0.10634714365005493, 0.15396660566329956, -0.016072625294327736, 0.058031000196933746, 0.2250940501689911, 0.3886975049972534, 0.20159882307052612, 0.5644832253456116, 0.4009593725204468, 0.38825786113739014, 0.37293195724487305, 0.46160775423049927, 0.0035634059458971024, 0.19673305749893188, 0.26240038871765137, -0.0046761841513216496, 0.04724537581205368, -0.016887251287698746, 0.16653037071228027, -0.5198298096656799, -0.21016016602516174, 0.20032982528209686, -0.2695275843143463, 0.3078876733779907, 0.30879247188568115, -0.05383213236927986, 0.020571794360876083, 0.04397197067737579, -0.24369126558303833, -0.008213493041694164, -0.309078574180603, -0.050603266805410385, 0.058075759559869766, 0.13050958514213562, 0.012967342510819435, -0.08035038411617279, -0.5366634130477905, -0.09735381603240967, -0.1770934760570526, -0.00046371834469027817, 0.08886172622442245, -1.475724697113037, -0.05327661335468292, -0.2230299413204193, -0.004776026587933302, -0.11217094212770462, 0.03254155069589615, -0.018858490511775017, 0.15643702447414398, 0.11969630420207977, 0.02387889102101326, 0.0028783457819372416, 0.11574484407901764, 0.4532398283481598, -0.003159577725455165, 0.15786686539649963, -0.02515074796974659, 0.013235733844339848, -0.025334911420941353, 0.04080158472061157, 0.2121448814868927, 0.22319470345973969, 0.08190509676933289, -0.028443608433008194, 0.19693505764007568, -0.11646437644958496, -0.08839280903339386, 0.039865754544734955, 0.2905471920967102, -0.013601908460259438, 0.3913911283016205, 0.09763815253973007, -0.12082190066576004, 0.02926851622760296, -0.08773969113826752, 0.07752358913421631, -0.13861992955207825, 0.16569967567920685, 1.018976092338562, 0.17579935491085052, -0.768304169178009, -1.623246431350708, -0.41187748312950134, 0.9542348384857178, -0.7742154598236084, -0.15698102116584778, -2.501763343811035, 3.817136287689209, 6.318728923797607, 1.2960803508758545, -2.1982290744781494, -2.928455114364624, 0.9834352135658264, 0.9135052561759949, -3.731199026107788, 1.0144058465957642, 0.983396589756012, -0.5150192379951477, -1.9586814641952515, -0.7450520396232605, -0.11673448234796524, -0.08666057884693146, -2.2077689170837402, -1.4799094200134277, -9.086014747619629, -0.9597002863883972, -2.656831979751587, -1.5887489318847656, -0.6430127024650574, -0.16870272159576416, -0.24260948598384857, -0.9525085091590881, -2.3742737770080566, -1.511581301689148, -2.654101610183716, -0.9373082518577576, -0.7570028305053711, -0.4148290753364563, -1.2122752666473389, 3.969895362854004, -0.6916170716285706, -1.5590852499008179, 2.558318853378296, -0.032666489481925964, -0.24639882147312164, -0.8173388838768005, -0.887973964214325, -0.9202091097831726, 2.3127846717834473, 0.26853957772254944, 2.8263278007507324, -0.7187230587005615, -0.8652063608169556, -0.8027243614196777, -0.5969690680503845, -0.9454819560050964, 4.637962818145752, -0.4610093832015991, -0.03146678954362869, -0.7306612133979797, -0.7855085134506226, 15.76138687133789, -0.7113703489303589, 0.8667826056480408, -0.1569540649652481, -0.7233748435974121, -0.925499439239502, -1.0189083814620972, -1.9827128648757935, -1.9997518062591553, 0.35889387130737305, 0.6073473691940308, -3.0189013481140137, -1.1832222938537598, -1.7242122888565063, -1.632594347000122, -0.6928914189338684, -0.47047221660614014, 0.34094446897506714, -3.1602671146392822, -3.059695243835449, -1.8070142269134521, -1.679485559463501, -1.4816218614578247, -1.457718849182129, -0.7987672686576843, 0.986251711845398, -0.1888679713010788, -0.3279169499874115, 0.5554001331329346, -4.116928577423096, -0.5113602876663208, -0.5399754047393799, -2.094965934753418, -0.1085875853896141, 0.09383213520050049, -0.04293570667505264, -1.846899151802063, -1.6996872425079346, 0.9876492619514465, -1.3035354614257812, -0.6136343479156494, 1.4506049156188965]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (1.37, 1.54)}}}
-  signatures["ElectronHighEnergyLooseConf"]={'et3_eta2': {'discriminator': {'threshold': -0.18500081300735474, 'nodes': [100, 5, 1], 'bias': [0.22496367990970612, 0.25423291325569153, -0.05725016072392464, 0.181239515542984, -0.24186886847019196, 0.3626905381679535], 'weights': [-0.9931346774101257, -0.01817704737186432, 1.603345274925232, 2.27188777923584, 1.5405961275100708, 1.6163924932479858, 0.8246887922286987, 0.5504136681556702, 0.06960619986057281, -5.246971607208252, -3.9190731048583984, -3.2434945106506348, -1.000954508781433, -0.3501393496990204, -0.2251189798116684, -0.6503921151161194, 5.110980033874512, 0.0947774201631546, 1.863757848739624, 1.2465909719467163, 6.427053451538086, 1.2249650955200195, -2.6062870025634766, 0.4220779240131378, -6.492243766784668, 5.788940906524658, 3.7186813354492188, 2.976773738861084, 11.082649230957031, 5.110097885131836, 0.3884647488594055, 0.5201953053474426, 0.5327610969543457, -2.650282621383667, 4.559503078460693, 4.513420581817627, 5.402627468109131, 13.056455612182617, -5.28449821472168, -2.4395270347595215, 3.176534414291382, 4.322094917297363, 4.349691867828369, 1.364220380783081, 1.8171908855438232, 5.179615020751953, 4.483983993530273, -5.08467960357666, 0.9289032220840454, 9.989507675170898, -11.552595138549805, 5.4164509773254395, 8.87568473815918, 2.331158399581909, 1.1835646629333496, 15.407537460327148, 1.7306100130081177, 1.4408981800079346, -4.631602764129639, -6.673683166503906, -7.13716983795166, 1.2764804363250732, -0.05238982290029526, 1.273556113243103, -6.24355936050415, 2.8994133472442627, -12.11474895477295, 1.6977628469467163, 4.599469184875488, 4.801764011383057, 42.280296325683594, -15.758618354797363, -0.5512469410896301, -0.4191519618034363, 3.0216667652130127, 1.0487087965011597, 4.302881717681885, 4.2061591148376465, 2.764920473098755, 2.869471788406372, -0.158920019865036, 0.2263748198747635, 1.2715317010879517, 3.878507137298584, 2.707009792327881, -0.1432947963476181, 2.222496271133423, 4.375704765319824, -0.7392042279243469, 0.5509490370750427, 1.4576245546340942, 0.48080286383628845, 3.5064849853515625, 4.732835292816162, -2.6513285636901855, 0.6614122986793518, -0.07711731642484665, -0.10382016003131866, -1.4842954874038696, 14.11323070526123, -0.819365918636322, -0.11185577511787415, 1.4462207555770874, 2.273878812789917, 1.5189666748046875, 1.553519606590271, 0.816792368888855, 0.6013060212135315, 0.06894798576831818, -5.2789201736450195, -3.9496655464172363, -3.3238162994384766, -1.108394980430603, -0.3307814598083496, -0.0825585424900055, -0.5530317425727844, 4.420546531677246, 0.1301359087228775, 1.8137028217315674, 1.3027275800704956, 6.463320732116699, 1.1488800048828125, -2.749488353729248, 0.3422110378742218, -6.329661846160889, 5.8210248947143555, 3.548218250274658, 3.137077808380127, 11.140628814697266, 5.098723411560059, 0.48586753010749817, 2.300755023956299, 0.6675386428833008, -2.7125847339630127, 4.555992126464844, 4.43115758895874, 5.517282962799072, 13.047628402709961, -5.076038360595703, -2.3229494094848633, 3.37558913230896, 4.260136127471924, 4.388528347015381, 1.4584147930145264, 1.3935585021972656, 5.358431816101074, 4.435708045959473, -5.0095977783203125, 0.9032479524612427, 9.893756866455078, -11.661206245422363, 5.424482822418213, 8.943679809570312, 2.3191757202148438, 1.1143097877502441, 15.398283004760742, 1.7532914876937866, 1.4410107135772705, -4.720383644104004, -6.595602035522461, -7.145852088928223, 1.2825226783752441, 0.020189011469483376, 1.1598213911056519, -6.297238826751709, 2.9659016132354736, -12.070916175842285, 1.7613192796707153, 4.654551029205322, 4.814225673675537, 42.22060012817383, -15.744312286376953, -0.5319676399230957, -0.3671867549419403, 2.89033579826355, 1.1901012659072876, 4.218427658081055, 4.251856327056885, 2.7415645122528076, 2.7619426250457764, -0.19702652096748352, 0.3342374563217163, 1.174614667892456, 3.668564796447754, 2.8054699897766113, -0.06963631510734558, 2.243130922317505, 4.494266510009766, -0.6628531813621521, 0.4802199900150299, 1.4144364595413208, 0.5458922982215881, 3.4443817138671875, 4.759645938873291, -2.7025539875030518, 0.7854596376419067, 0.0187618900090456, -0.11379291117191315, -1.5365225076675415, 14.266770362854004, 0.46328744292259216, 0.3947559893131256, 0.36305755376815796, -0.04611923545598984, -0.10887285321950912, 0.06751923263072968, -0.04021124169230461, 0.12789545953273773, 0.059422027319669724, 0.42600908875465393, 0.30839094519615173, 0.3086649179458618, 0.5524296760559082, 0.1343601644039154, 0.27397215366363525, 0.29742759466171265, -0.30750522017478943, 0.17883753776550293, -0.6239702105522156, -2.471686601638794, -0.5069426894187927, -2.1701853275299072, 5.2444376945495605, -1.4523099660873413, 0.7326187491416931, -12.473556518554688, -7.699365139007568, 0.27639761567115784, -0.898872435092926, -0.4886949062347412, 0.9635306000709534, -0.08056899905204773, -0.1960873305797577, 1.9147430658340454, -0.24132871627807617, -0.39335373044013977, -0.3724568486213684, -0.8072543144226074, 3.106010675430298, 2.067241907119751, -0.14096124470233917, -0.299396812915802, -0.3965566158294678, -0.12824569642543793, -0.1244005635380745, -0.4982789158821106, -0.2107764184474945, 0.5728129148483276, 0.08725889027118683, -0.7414993643760681, 1.1669864654541016, -0.4326733648777008, -0.806244969367981, -0.20734551548957825, -0.11661368608474731, -6.179890155792236, -0.033673886209726334, -0.05434248596429825, 0.6087918281555176, 0.6669779419898987, 0.714033305644989, -0.05715496093034744, 0.04490915685892105, -0.07697772234678268, 0.01333220861852169, -0.2759895622730255, 1.336474061012268, -0.07291409373283386, -0.4237052798271179, -0.3236718475818634, -3.794415235519409, 1.7916991710662842, 0.24863730370998383, 0.3658004105091095, -3.1611881256103516, -2.0312304496765137, -0.21318680047988892, -0.2111954391002655, -0.19907595217227936, -0.07694064825773239, 0.18091297149658203, -0.3823789954185486, -0.43759241700172424, -0.3232068717479706, -0.2646971046924591, 0.06439076364040375, -0.15192753076553345, -0.22245445847511292, 0.5009520649909973, -1.923946499824524, -0.11646644026041031, 0.0981743335723877, -0.24813973903656006, -0.3879634439945221, 0.4310603737831116, 0.5028122663497925, -0.02763182483613491, -0.07557548582553864, 0.1635049432516098, -1.2735366821289062, -0.7950127124786377, -0.08708997070789337, 1.5768083333969116, 2.335355758666992, 1.3976126909255981, 1.5716580152511597, 0.9118295311927795, 0.5737374424934387, 0.05917077139019966, -5.204732894897461, -3.846733570098877, -3.1808714866638184, -0.9655765295028687, -0.09816698729991913, -0.24888695776462555, -0.27712324261665344, 5.076735496520996, 0.29157620668411255, 1.88616943359375, 1.2569302320480347, 6.25429630279541, 1.0428550243377686, -2.6543445587158203, 0.4390083849430084, -6.289444446563721, 5.705146312713623, 3.693236827850342, 2.962388515472412, 11.072286605834961, 5.079848289489746, 1.6516005992889404, 2.2581167221069336, 0.6720775961875916, -2.666745901107788, 4.573479652404785, 4.510982513427734, 5.579908847808838, 12.91909408569336, -5.264841079711914, -2.271451711654663, 3.3198907375335693, 4.41532039642334, 4.3419108390808105, 1.3044755458831787, 1.6199474334716797, 5.386545181274414, 4.403131484985352, -5.077688217163086, 1.0941535234451294, 9.932294845581055, -11.534035682678223, 5.407714366912842, 8.874841690063477, 2.3946802616119385, 1.1929874420166016, 15.371015548706055, 1.6173173189163208, 1.423647403717041, -4.681282043457031, -6.558859825134277, -7.183442115783691, 1.2368748188018799, 0.012941846624016762, 1.1281214952468872, -6.298399448394775, 2.9774928092956543, -12.263850212097168, 1.581725001335144, 4.778667449951172, 4.673547744750977, 42.09385681152344, -15.674543380737305, -0.4315670132637024, -0.37489619851112366, 3.047224760055542, 1.0537246465682983, 4.315587997436523, 4.167531967163086, 2.778156280517578, 2.808948516845703, -0.03417599946260452, 1.1044646501541138, 5.242288589477539, 3.7639293670654297, 2.708077907562256, 1.556064248085022, 2.070166826248169, 4.262251377105713, -0.8150630593299866, 0.5874195098876953, 1.460222840309143, 0.5971516966819763, 3.5045785903930664, 4.799536228179932, -2.68164324760437, 0.6034370064735413, 0.06889212131500244, -0.044757187366485596, -1.6570795774459839, 14.199957847595215, 0.824752151966095, 0.17998909950256348, -1.395802617073059, -2.3812897205352783, -1.3393431901931763, -1.6171101331710815, -0.8048666715621948, -0.5729721188545227, -0.09688341617584229, 5.192379474639893, 3.9456334114074707, 3.1389269828796387, 0.9345805644989014, 0.3942444920539856, 0.18496719002723694, 0.4945777356624603, -5.0109968185424805, -0.14160796999931335, -1.8641877174377441, -1.2552272081375122, -6.402767181396484, -1.1240326166152954, 2.68575382232666, -0.42572709918022156, 6.44467306137085, -5.8094282150268555, -3.6414718627929688, -3.175381660461426, -11.110631942749023, -5.0160369873046875, -1.6501483917236328, -2.2639331817626953, -0.5181571245193481, 2.6067066192626953, -4.6280198097229, -4.338582992553711, -5.4429030418396, -12.86388111114502, 5.195508003234863, 2.3679556846618652, -3.279820680618286, -4.388542175292969, -4.284562110900879, -1.2926123142242432, -1.8372116088867188, -5.395905494689941, -4.572208404541016, 4.923374176025391, -0.9507557153701782, -9.836893081665039, 11.623922348022461, -5.409999370574951, -8.86340618133545, -2.421633243560791, -1.1847803592681885, -15.446847915649414, -1.6003040075302124, -1.6061725616455078, 4.634953022003174, 6.534738540649414, 7.307224273681641, -1.2789621353149414, -0.04566904157400131, -1.0929158926010132, 6.193482875823975, -3.0619707107543945, 12.228958129882812, -1.54684579372406, -4.810722351074219, -4.780562400817871, -42.20497131347656, 15.685347557067871, 0.5100194811820984, 0.5636279582977295, -3.0273468494415283, -1.1059386730194092, -4.133427619934082, -4.296045780181885, -2.742187023162842, -2.72588849067688, -0.01962086744606495, -0.37358298897743225, -5.164302825927734, -3.803501605987549, -2.7034244537353516, 0.0468272864818573, -2.1827831268310547, -4.483081817626953, 0.7187308073043823, -0.5038670897483826, -1.4626773595809937, -0.5724906325340271, -3.465902805328369, -4.831928730010986, 2.4990127086639404, -0.6668882966041565, 0.05673468858003616, 0.06973163038492203, 1.625718116760254, -14.103596687316895, -2.1895155906677246, -1.2306833267211914, 2.9472439289093018, -2.2828173637390137, 3.7954890727996826]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (40, 50), 'etaBin': (1.37, 1.54)}}, 'et0_eta0': {'discriminator': {'threshold': -0.13000080958008767, 'nodes': [100, 5, 1], 'bias': [0.0027719091158360243, -0.030745789408683777, -0.019994130358099937, -0.03405983746051788, 0.05469532310962677, 0.053494904190301895], 'weights': [3.0104122161865234, 0.33716049790382385, -0.6918603777885437, -0.36650729179382324, -0.6899896264076233, 0.4430517256259918, -0.6841123104095459, -0.033467914909124374, 1.730831265449524, 3.1084628105163574, -0.47636309266090393, -3.5764594078063965, -6.254197120666504, -10.624968528747559, -11.068583488464355, -25.362735748291016, -6.449751377105713, -7.022157669067383, -4.590561866760254, -7.303133010864258, -1.6697059869766235, -5.107601642608643, -1.6860201358795166, -4.665144920349121, -2.327211856842041, -3.789498805999756, -1.8446691036224365, -2.1149957180023193, -2.4795403480529785, -2.0756676197052, -4.072450160980225, -1.607600450515747, -4.25227165222168, -2.8429853916168213, -1.540915846824646, -1.1948466300964355, -1.3314839601516724, -1.2600440979003906, -1.1157169342041016, -0.8921983242034912, -1.147460699081421, -1.304847240447998, -1.436676263809204, -0.18538561463356018, 0.6405125856399536, -2.860827922821045, 0.2269716113805771, -1.1676502227783203, -0.4828597903251648, -0.26171448826789856, 0.2950541079044342, -0.34384864568710327, -1.4255995750427246, -1.0086662769317627, -0.8365383148193359, -0.37980136275291443, -0.23097233474254608, -0.026851283386349678, 0.7985484004020691, -0.7422285079956055, 0.30208659172058105, 1.9833194017410278, -0.24380549788475037, -0.44539281725883484, 0.7395967245101929, -0.3832899034023285, 0.25805309414863586, -0.5461606383323669, 0.0523955300450325, 0.38556036353111267, 1.3945204019546509, 1.4798781871795654, 0.39619994163513184, 0.07445497810840607, -0.9953435659408569, -1.9788360595703125, -1.6968204975128174, -1.3965789079666138, -1.0862582921981812, -0.8369073271751404, -10.748941421508789, -5.583034515380859, -2.855900764465332, -1.3770126104354858, -2.4373059272766113, -1.3597148656845093, -0.886629581451416, -0.12372172623872757, -2.620683431625366, -2.572859764099121, -1.0929572582244873, 0.21334059536457062, -2.155773878097534, -2.496173620223999, -1.5309242010116577, 0.6554529070854187, -1.4070754051208496, -0.5922932624816895, -0.5046824812889099, 0.3669447600841522, -0.7217203974723816, -0.9673169255256653, 0.06229373812675476, 0.3094996511936188, 0.5783401131629944, -0.38237664103507996, 0.5983491539955139, -0.1485704481601715, -2.008176565170288, -3.4177675247192383, 2.0519659519195557, 3.4366772174835205, 6.185133457183838, 8.25444221496582, 6.4256720542907715, 6.5173163414001465, -0.7637931108474731, 1.562807321548462, 4.360255718231201, 4.418243408203125, 1.7192559242248535, 1.6434358358383179, 1.6664299964904785, 2.4063775539398193, 2.2053911685943604, 2.2568867206573486, 1.711796522140503, 2.139913558959961, 2.4252068996429443, 1.8033676147460938, 1.7279512882232666, 1.5197616815567017, 1.582788109779358, 1.6811914443969727, 1.3529754877090454, 0.7527691125869751, 0.41302475333213806, 1.3256173133850098, 0.9507708549499512, 0.9108638763427734, 1.1912190914154053, 1.1901438236236572, 1.8660979270935059, 0.3677856922149658, -0.5320388674736023, 2.153707504272461, -0.19673658907413483, 1.1783156394958496, 0.42888006567955017, 0.29169729351997375, -0.42466095089912415, 0.09009473025798798, 1.3948500156402588, 0.6720010638237, 0.8526855111122131, 0.087816022336483, 0.3434672951698303, 0.16433802247047424, -0.7643856406211853, 0.7186273336410522, -0.3571009635925293, -1.8309638500213623, 0.42539486289024353, 0.4876108765602112, -0.7158036231994629, 0.49800407886505127, -0.18922294676303864, 0.4988306164741516, -0.060269732028245926, -0.47746676206588745, -1.3874552249908447, -1.4369741678237915, -0.35041794180870056, -0.17787058651447296, 0.8279309868812561, 0.965869128704071, 1.451266884803772, 0.774532675743103, 0.8948243856430054, 0.6089109182357788, 4.532330513000488, 2.4813692569732666, 2.112624168395996, 1.2613558769226074, 1.305626392364502, 1.2173666954040527, 1.055824637413025, 0.1458195447921753, -8.777544975280762, -3.3303956985473633, 0.22165046632289886, -0.24194011092185974, -10.794304847717285, 0.24839042127132416, 0.43038418889045715, -0.5748007297515869, 1.2133091688156128, -0.7433232069015503, 0.8734686374664307, -0.3130723834037781, 3.2121834754943848, 0.10607273131608963, -0.6179821491241455, -0.36072948575019836, -0.6476112604141235, 0.3023219406604767, -0.5528578758239746, 0.037560656666755676, 1.9878206253051758, 3.3295130729675293, 0.19036130607128143, -3.5238215923309326, -6.40492582321167, -10.083856582641602, -9.790680885314941, -11.897777557373047, -11.309596061706543, -8.16537857055664, -4.585658550262451, -7.368370056152344, -1.7431230545043945, -5.166879653930664, -1.66887629032135, -4.584742546081543, -3.336078405380249, -6.059154510498047, -1.6525816917419434, -2.14245343208313, -4.092792510986328, -2.0044467449188232, -4.221402645111084, -1.4996662139892578, -2.972101926803589, -1.9158331155776978, -2.4203226566314697, -2.9057581424713135, -4.483760833740234, -1.281398057937622, -1.131919503211975, -0.9067531228065491, -1.0236477851867676, -1.257441520690918, -1.937111258506775, -0.21556560695171356, 0.709513247013092, -3.0301427841186523, 0.2656053602695465, -1.0813615322113037, -0.3780216574668884, -0.20815321803092957, 0.42901286482810974, -0.2392861545085907, -2.605818271636963, -0.86431485414505, -0.7243807315826416, -0.3742513358592987, -0.22884339094161987, 0.025325078517198563, 0.7732704281806946, -0.3985472321510315, 0.16029061377048492, 1.8401808738708496, -0.300541490316391, -0.47950634360313416, 0.7446222901344299, -0.3247467279434204, 0.3969283401966095, -0.5363669395446777, 0.09838587790727615, 0.25009846687316895, 1.387192726135254, 1.3507468700408936, 0.28283819556236267, 0.11735668033361435, -0.833392858505249, -2.0014379024505615, -2.919123888015747, -1.4755831956863403, -0.949961245059967, -0.7413705587387085, -9.580817222595215, -10.612905502319336, -5.750339508056641, -1.381137490272522, -1.880005121231079, -1.2526817321777344, -0.9165176749229431, -0.3214545249938965, -7.4235334396362305, -8.185215950012207, -1.1611775159835815, 0.22365787625312805, -6.677170753479004, -4.687042713165283, -1.104333519935608, 0.5235454440116882, -1.2530628442764282, -0.7386404871940613, -0.6773895621299744, 0.30902689695358276, 2.9395408630371094, 0.13832561671733856, -0.564487874507904, -0.5071085095405579, -1.5592316389083862, 0.4185751676559448, -0.5541017651557922, 0.0804615318775177, 1.7380670309066772, 3.1298227310180664, 0.15635636448860168, -3.591261386871338, -6.4358015060424805, -10.735091209411621, -10.198407173156738, -24.517120361328125, -6.3657402992248535, -7.8438005447387695, -4.5508928298950195, -7.143901824951172, -1.7702034711837769, -5.148921012878418, -1.8216018676757812, -4.528764247894287, -2.376386880874634, -3.7688820362091064, -1.7383065223693848, -2.1279988288879395, -2.532334804534912, -1.8712098598480225, -4.010451316833496, -1.617948293685913, -3.825892210006714, -2.908707857131958, -1.6663868427276611, -1.2733074426651, -1.4150670766830444, -1.278174638748169, -1.073642611503601, -0.9754862189292908, -1.1604262590408325, -1.11674964427948, -1.2858500480651855, -0.13160493969917297, 0.7079187631607056, -2.8933658599853516, 0.24327464401721954, -1.0096101760864258, -0.4499947428703308, -0.2123025357723236, 0.3633473813533783, -0.162286639213562, -1.4112114906311035, -1.0693395137786865, -0.7675403356552124, -0.31957727670669556, -0.27664440870285034, -0.09396519511938095, 0.8523868322372437, -0.8349786996841431, 0.18403346836566925, 1.8440912961959839, -0.35350823402404785, -0.5359216928482056, 0.7835922837257385, -0.40162190794944763, 0.33800390362739563, -0.5791444182395935, 0.022545333951711655, 0.2586481273174286, 1.5271910429000854, 1.3897197246551514, 0.4511193633079529, 0.1104169711470604, -0.9838781356811523, -2.157365322113037, -1.7037426233291626, -1.375399112701416, -1.0486834049224854, -0.8016714453697205, -11.121331214904785, -5.470461845397949, -2.888141632080078, -1.4748350381851196, -2.392019271850586, -1.3163450956344604, -1.048919439315796, -0.1316092312335968, -2.6575260162353516, -2.368626832962036, -1.1869951486587524, 0.06508775055408478, -2.4916975498199463, -2.450981378555298, -1.5207723379135132, 0.5177884101867676, -1.3736330270767212, -0.7511304020881653, -0.7303417921066284, 0.36395689845085144, 21.058435440063477, 9.12915325164795, -0.25019577145576477, -0.32718023657798767, -0.13435697555541992, 0.24798369407653809, 0.007742086425423622, 0.1744593232870102, 2.1947598457336426, 4.382591724395752, 0.19817961752414703, -14.266183853149414, -14.236342430114746, -5.732553482055664, 30.525476455688477, 55.66305160522461, 2.7460784912109375, -0.9372447729110718, -4.193747520446777, -4.583090782165527, -0.041570164263248444, 0.499439001083374, -0.8257566094398499, -2.054959774017334, -2.248997688293457, -2.1881630420684814, -1.6864163875579834, -2.203171730041504, -2.4180378913879395, -1.9553823471069336, -2.194016933441162, -1.5868390798568726, -1.4754722118377686, -1.5462244749069214, -1.191624402999878, -0.910804808139801, -0.4427856206893921, -1.4043998718261719, -1.1056311130523682, -0.5787000060081482, -1.0505337715148926, -12.395109176635742, -1.106887936592102, -0.3359536826610565, 0.5638695359230042, -1.04970383644104, 0.3423970341682434, -1.0439348220825195, -0.5383099913597107, -0.3183959424495697, 0.3600114583969116, -0.18680769205093384, -1.060125708580017, -0.6349836587905884, 16.35931396484375, -0.11585278809070587, -0.15916891396045685, -0.05726008489727974, 0.8844321370124817, -18.155141830444336, 0.32439282536506653, 1.7903741598129272, -3.329820156097412, -0.45139265060424805, 0.7490172386169434, -2.474151134490967, 0.31415724754333496, -18.46172523498535, 0.06788526475429535, 0.4433909058570862, 1.5188599824905396, 1.3348900079727173, 0.40647777915000916, 0.034642528742551804, -1.5371259450912476, -0.19851063191890717, -1.2684131860733032, -2.540963649749756, -1.0701502561569214, -0.7753573060035706, -3.845635414123535, 14.788578987121582, -2.112802267074585, -0.9182282090187073, -1.2395609617233276, -1.3820443153381348, -1.048235535621643, -0.32137513160705566, -1.4147359132766724, 8.470860481262207, 0.4240935742855072, 0.19208970665931702, 4.7737226486206055, 6.954910755157471, -0.4719589650630951, 0.7183969020843506, -1.3202235698699951, -0.5370994210243225, -0.7489437460899353, -0.49337053298950195, 0.19182538986206055, -0.49395933747291565, 1.4365226030349731, 0.5646209120750427, 0.9925091862678528]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (0, 0.8)}}, 'et0_eta1': {'discriminator': {'threshold': 0.004999199509620661, 'nodes': [100, 5, 1], 'bias': [-0.2419523298740387, -0.1788606494665146, -0.11421695351600647, 0.14182445406913757, -0.07570439577102661, 0.22020137310028076], 'weights': [2.2169363498687744, 2.7532498836517334, -0.8267584443092346, -0.7797825336456299, -1.020559310913086, -0.0499534048140049, -0.3282013237476349, 0.5312463045120239, 2.659205913543701, 5.342463970184326, 2.144444227218628, -0.0833103135228157, -11.308581352233887, -4.076024055480957, -8.603513717651367, -16.366212844848633, -5.259064674377441, -6.481001377105713, -12.627670288085938, -4.692115306854248, -5.565089225769043, -6.783063888549805, -4.543320178985596, -3.0383706092834473, -3.642913818359375, -1.2224321365356445, -7.077785968780518, -4.494020462036133, -3.2396719455718994, -3.3516175746917725, -3.506727457046509, -3.2087135314941406, -2.667553186416626, -2.7103047370910645, -5.8007402420043945, -2.4100589752197266, -1.2014609575271606, -2.7959556579589844, -0.5541382431983948, -4.078998565673828, -1.0442224740982056, -1.3879176378250122, 1.2014338970184326, -0.7012238502502441, 1.3713657855987549, -0.5381091237068176, -0.17806638777256012, 0.9453555345535278, 1.366939663887024, -5.294135570526123, -0.7591349482536316, 0.7920718789100647, -0.462947279214859, -4.339409828186035, -1.1262003183364868, -0.4685709774494171, -1.0528900623321533, 0.8854106068611145, -1.187703013420105, -2.815504789352417, -1.047894835472107, -0.7617879509925842, 0.624564528465271, 0.06664310395717621, 0.3762340843677521, -2.4422380924224854, 0.1785350739955902, 0.6013210415840149, 0.3860478103160858, 0.05054749175906181, -0.9731127619743347, -1.2421848773956299, 0.3652139902114868, 0.11926782876253128, -0.8625178337097168, -1.8412816524505615, -2.3486902713775635, -1.7384939193725586, -1.1514246463775635, -0.6194364428520203, -9.820606231689453, -5.94714879989624, -3.4351768493652344, -3.0902912616729736, -1.8717381954193115, -1.3676413297653198, -1.7327674627304077, -1.9622999429702759, -3.6860873699188232, -0.7463592886924744, 0.5572549700737, 0.30155766010284424, -7.388822555541992, -8.848809242248535, -0.23705165088176727, -0.1447933465242386, 0.3552716374397278, -1.1003679037094116, -1.5010054111480713, -0.07164696604013443, 2.179924726486206, 1.0082378387451172, -0.8127292990684509, -0.8268682360649109, -0.9137819409370422, -0.47814273834228516, -0.3614632785320282, 0.6130778789520264, 1.9895679950714111, 5.251211166381836, 2.003241539001465, -0.2468765676021576, -10.565252304077148, -3.4158098697662354, -8.538171768188477, -15.665409088134766, -5.202942371368408, -5.901217937469482, -12.562687873840332, -4.299706935882568, -5.48009729385376, -6.96751070022583, -4.617422103881836, -2.97694993019104, -4.4424920082092285, -1.3203697204589844, -5.45392370223999, -4.5033111572265625, -3.3547441959381104, -3.436358690261841, -3.6645357608795166, -3.1198506355285645, -2.705101728439331, -3.9648759365081787, -3.0624101161956787, -2.3369081020355225, -1.2047312259674072, -3.1745526790618896, -0.6369917392730713, -4.062929153442383, -1.128879189491272, -1.369496464729309, 1.2078688144683838, -0.7363274693489075, 1.3929245471954346, -0.38409000635147095, -0.3405444324016571, 0.8460223078727722, 1.3779445886611938, -3.2692196369171143, -0.8582490682601929, 0.6502522826194763, -0.5448287725448608, -4.385491371154785, -0.968392014503479, -0.5234550833702087, -1.2225149869918823, 0.5946704149246216, -0.9748676419258118, -2.8626723289489746, -1.0791670083999634, -0.7076032161712646, 0.6646453738212585, -0.0034364121966063976, 0.5190089344978333, -2.3634095191955566, -0.05494547635316849, 1.6995137929916382, 0.4713716506958008, -0.029251473024487495, -0.8175522685050964, -1.240248441696167, 0.5401641726493835, 0.12718243896961212, -0.6915145516395569, -1.895331859588623, -2.196659564971924, -1.630667805671692, -1.1080918312072754, -0.7638545632362366, -9.896124839782715, -7.4101433753967285, -3.4054222106933594, -3.2316782474517822, -1.9031871557235718, -1.4178217649459839, -1.6775732040405273, -1.9368301630020142, -2.026869297027588, -0.690743625164032, -0.5442407131195068, 0.2723405957221985, -7.502132415771484, -8.830202102661133, -0.33507582545280457, -0.12850044667720795, 1.2458628416061401, -1.1952428817749023, -1.3449838161468506, -0.12557072937488556, 2.255282163619995, 0.92508864402771, -0.32057368755340576, -0.5549095869064331, -0.3435039222240448, -0.49410825967788696, 0.0898943766951561, 0.59955894947052, 1.9818447828292847, 5.4488525390625, 2.1250998973846436, -0.22664912045001984, -1.5746294260025024, -9.53662395477295, -8.113788604736328, -6.87240743637085, -4.332401752471924, -4.196752071380615, -4.3074445724487305, -3.384168863296509, -4.739842891693115, -4.160134315490723, -5.109932899475098, -2.2272047996520996, -3.0943310260772705, -1.2474457025527954, -5.051222324371338, -4.322053909301758, -3.3698785305023193, -3.335650682449341, -3.8726353645324707, -3.08906626701355, -2.587754487991333, -3.4864842891693115, -2.2807652950286865, -2.187812089920044, -1.2461556196212769, 0.5336964726448059, -0.29373618960380554, -0.92899489402771, -1.1141397953033447, -1.3155173063278198, 1.7685489654541016, -0.4097933769226074, 1.3541674613952637, -0.2364848405122757, -0.17864270508289337, 1.048292636871338, 1.338594913482666, -1.844401240348816, -0.8443801403045654, 0.5884573459625244, -0.6398547887802124, -6.024773597717285, -1.0054324865341187, -0.5032756924629211, -1.0822479724884033, 0.6396970152854919, -0.9285800457000732, -2.7478291988372803, -0.9908654093742371, -0.5518115758895874, 0.7110306620597839, 0.13611719012260437, 0.428081750869751, -2.775491952896118, 0.17641127109527588, 1.5609934329986572, 0.42926275730133057, 0.06777767091989517, -1.0060672760009766, -1.0280340909957886, 0.20303383469581604, 0.14916649460792542, -0.6993547081947327, -0.7571804523468018, -1.5524744987487793, -1.0487337112426758, -0.6372774243354797, -0.3927784264087677, -3.1435720920562744, 11.845252990722656, -3.3446078300476074, -2.4433434009552, -1.8015235662460327, -1.3650074005126953, -1.8337547779083252, -1.977478265762329, 1.5484129190444946, -0.5749542713165283, -0.5401884317398071, -0.15113025903701782, 32.1970100402832, 25.611331939697266, -0.23964577913284302, -0.03404242545366287, 1.310422420501709, 0.1727093756198883, -1.4330334663391113, -0.263566792011261, -2.1751060485839844, -1.035946249961853, 0.673592746257782, 0.7085232138633728, 0.5158143639564514, 0.19016025960445404, 0.02306843362748623, -0.5579238533973694, -2.0862724781036377, -5.3436126708984375, -2.1633241176605225, 0.10163290053606033, 8.65424919128418, 15.908517837524414, 8.520809173583984, 7.398211479187012, 5.328628063201904, 5.485339164733887, 9.160340309143066, 3.8076565265655518, 5.458552360534668, 6.797657489776611, 3.4759681224823, 3.0724897384643555, 3.1501755714416504, 1.3562136888504028, 4.897558689117432, 4.407222270965576, 3.3011069297790527, 3.3482141494750977, 3.5584263801574707, 3.0816965103149414, 2.618988037109375, 3.529326915740967, 2.929184913635254, 2.425967216491699, 1.2664817571640015, -0.22728584706783295, 0.28546062111854553, 0.9497538805007935, 1.1099337339401245, 1.2939321994781494, -1.828993320465088, 0.43414321541786194, -1.2278379201889038, 0.29704153537750244, 0.29775917530059814, -0.9372382164001465, -1.3688970804214478, 3.1984920501708984, 0.8992602229118347, -0.6575921177864075, 0.46973884105682373, 4.236397743225098, 1.0550086498260498, 0.6718395948410034, 1.0928590297698975, -0.5286487340927124, 0.9334386587142944, 2.9640419483184814, 1.0886595249176025, 0.7026524543762207, -0.5850628018379211, -0.1319434493780136, -0.5144090056419373, 1.7701421976089478, -0.17973458766937256, -1.62489914894104, -0.2760557234287262, -0.062471143901348114, 0.8572553396224976, 1.1737757921218872, -0.22838062047958374, -0.2608878016471863, 0.8621696829795837, 0.7644885182380676, 1.9728444814682007, 1.1150742769241333, 0.8555498123168945, 0.5383461117744446, 4.460012912750244, 5.82310152053833, 3.237823009490967, 2.5480830669403076, 1.797529935836792, 1.4706848859786987, 1.8601220846176147, 1.959677815437317, 1.2026774883270264, 0.6463479399681091, 0.42303016781806946, -0.3455183506011963, -1.5780541896820068, 1.6332106590270996, 0.10772932320833206, -0.07981161028146744, -1.1880288124084473, -6.858782768249512, 1.454778790473938, 0.17228664457798004, -1.0589264631271362, -1.2777150869369507, -0.8202926516532898, -1.2153453826904297, -7.900195598602295, -0.3028285503387451, -0.23521244525909424, -0.5138748288154602, -0.9081577062606812, -4.760847091674805, -0.7580344080924988, -0.5153947472572327, 3.17096209526062, 31.483720779418945, 3.723647356033325, 2.9741768836975098, 1.8442035913467407, 1.7252893447875977, 1.3106104135513306, 1.2294288873672485, -3.3668296337127686, 2.2755684852600098, 0.8985055685043335, -1.0879207849502563, 0.2836175858974457, 0.2901609539985657, 0.23782014846801758, 1.200321912765503, 0.4658257067203522, -0.3615632951259613, -4.021435260772705, 0.726189136505127, 0.5964933037757874, 0.8738551139831543, 0.6852433085441589, 0.5820195078849792, -4.477887153625488, -1.5113470554351807, -1.0317434072494507, 0.06051911786198616, -3.362048864364624, -7.459989070892334, -1.3490523099899292, -0.2520720362663269, -2.8832485675811768, -1.016361117362976, -0.2892061173915863, -1.101325273513794, -4.395275115966797, 0.6755730509757996, 0.24080154299736023, -0.5123816132545471, -0.07995622605085373, 0.22133974730968475, 0.33544281125068665, 0.26873674988746643, 0.3825101852416992, -0.35860052704811096, 0.04941486567258835, 0.46868517994880676, 0.04499971494078636, 0.4071914553642273, -0.39102670550346375, -0.1014576330780983, -0.10466546565294266, 5.0549116134643555, -0.17937366664409637, -0.9165195226669312, -0.30500149726867676, -0.30383312702178955, 0.3180762231349945, 0.4968600571155548, -0.8282189965248108, -0.272370308637619, 0.20714102685451508, 0.3640463948249817, -32.001800537109375, -0.8529021143913269, -8.93774127960205, -4.88483190536499, 0.11148025840520859, 0.2184128314256668, -7.403574466705322, -0.2069324404001236, -1.176985502243042, -0.8256001472473145, 0.45193272829055786, 0.3454861640930176, -2.566599130630493, 0.7642796635627747, -1.0901622772216797, -0.16659995913505554, -5.848890781402588, -6.345538139343262, 1.5991814136505127, -0.17160169780254364, 0.9480943083763123, -5.87355899810791, 0.05881625786423683, 0.13153761625289917, 0.820921778678894, 1.0528318881988525, 0.5193421840667725, -0.42662134766578674, -0.3459281921386719]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (0.8, 1.37)}}, 'et1_eta1': {'discriminator': {'threshold': -0.3550007104873657, 'nodes': [100, 6, 1], 'bias': [-0.009262134321033955, 0.11403325945138931, -0.05697072297334671, 0.02670249342918396, -0.0004424861108418554, -0.09567686170339584, -0.06761693209409714], 'weights': [-1.68311607837677, -1.4569848775863647, 0.5335415005683899, 0.8660264611244202, 0.7174923419952393, 0.730705976486206, 0.09598191827535629, 0.7200860977172852, -2.1343369483947754, -4.757304668426514, -1.4119659662246704, 2.976902723312378, 2.519176721572876, 1.5647720098495483, 0.10974285751581192, 0.10809197276830673, 4.8538737297058105, 5.077908515930176, 5.329061031341553, 5.2591681480407715, 4.971745014190674, 4.666284561157227, 4.310705184936523, 4.793591499328613, 4.540436267852783, 3.747809410095215, 2.1948869228363037, 3.136486291885376, 2.200423240661621, 3.60239315032959, 2.740330457687378, 2.204880952835083, 2.1703991889953613, 2.2458949089050293, 2.954357624053955, 1.4308279752731323, 1.314427137374878, 1.5256716012954712, 1.705006718635559, 1.4887328147888184, 1.6929272413253784, 1.626034140586853, 2.609642744064331, 0.47312799096107483, 0.5724508166313171, 0.8067747950553894, 3.231626272201538, 0.8580575585365295, 4.727327823638916, 0.9930837154388428, 1.065865397453308, 0.7019524574279785, 0.8121689558029175, -0.8102405071258545, 0.781336784362793, 0.588182806968689, 0.6844849586486816, 0.6846994757652283, 0.8524537086486816, 0.23930908739566803, 0.5554389953613281, 0.6583843231201172, -0.5964277982711792, 0.8768768906593323, -0.05953080207109451, -1.6624952554702759, 0.580730140209198, -1.6758124828338623, -0.643416702747345, 0.3210599720478058, 0.20139828324317932, 0.5071247220039368, -0.5896103978157043, -0.19933345913887024, 0.7465687394142151, 1.0144462585449219, 1.5076524019241333, 1.3741308450698853, 0.7607359290122986, 0.2931405305862427, 10.498966217041016, 5.260972499847412, 3.5426642894744873, 2.233567714691162, 2.319105863571167, 2.194509267807007, 1.6586837768554688, 2.3370673656463623, 1.5669591426849365, 0.8519150018692017, 0.6782934665679932, -0.22657379508018494, 2.875805139541626, 1.7324320077896118, 0.2371082603931427, -0.10835153609514236, 2.2406046390533447, 1.7271203994750977, 0.5645100474357605, 0.6243765950202942, 26.117496490478516, 47.860939025878906, -0.0185922272503376, -0.08952942490577698, -0.07323047518730164, -0.076230987906456, -0.0784786194562912, -0.21038077771663666, 0.31702524423599243, 0.8066724538803101, -3.1502938270568848, -120.3679428100586, -9.880788803100586, -4.596731185913086, 29.22450828552246, 0.017462890595197678, -1.1553833484649658, -1.1195496320724487, -1.2243932485580444, -0.9548608064651489, -1.0794403553009033, -0.9172614812850952, -0.9452863931655884, -0.9285127520561218, -1.0340548753738403, -0.8179218769073486, -0.3497898578643799, -0.6662282347679138, -0.5086925625801086, -0.46222612261772156, -0.5275274515151978, -0.42630690336227417, -0.3595050573348999, -0.3644062876701355, -0.47783172130584717, -0.24926239252090454, -0.24036729335784912, -0.2418835312128067, -0.2943932116031647, -0.2044386863708496, -0.39601412415504456, -0.19684003293514252, -0.174738809466362, -0.22927667200565338, -0.10544516146183014, -0.26784849166870117, -0.35845011472702026, -0.09223094582557678, -0.22095224261283875, -0.22769610583782196, -0.10604245960712433, -0.12347967177629471, -0.2589598596096039, 0.18820318579673767, -0.27018824219703674, 41.964115142822266, -0.28381603956222534, -0.06393256038427353, -0.1931096762418747, -0.09659484773874283, -0.10530337691307068, -0.11529818922281265, 0.17910997569561005, -0.17627088725566864, -0.015767188742756844, 1.252566933631897, -0.20815938711166382, 0.2603822350502014, 0.13631519675254822, -0.13949330151081085, -0.1467839479446411, -0.014168902300298214, 0.1513163447380066, 0.6338702440261841, -0.23853857815265656, -0.27293604612350464, -0.38623708486557007, -0.2877321243286133, -0.22093838453292847, 0.03441372886300087, -2.4927520751953125, -0.8883300423622131, -0.7975724339485168, -0.6235693693161011, -0.4278264045715332, -0.37991246581077576, -0.3968816101551056, -0.2537919878959656, -0.4183489978313446, -0.1392844021320343, -0.16861552000045776, 0.11789364367723465, -0.6407777667045593, -0.4173126816749573, -0.1015007272362709, 0.1118307113647461, -0.34941568970680237, -0.3567374050617218, -0.20485980808734894, -0.08960124105215073, 1.6926958560943604, 1.1739120483398438, -0.3778495490550995, -0.748168408870697, -0.60002601146698, -0.688393235206604, -0.10886187851428986, 0.7823707461357117, 1.954888939857483, 4.082591533660889, 1.3562995195388794, -3.1061081886291504, -14.4478759765625, -1.1340501308441162, -7.89017391204834, -1.355668067932129, -5.379847526550293, -5.210483074188232, -5.527088165283203, -6.067376613616943, -5.566293716430664, -4.522905349731445, -4.378673553466797, -4.849443435668945, -4.719850063323975, -3.6691508293151855, -2.1491057872772217, -3.109639883041382, -2.2511565685272217, -4.536490440368652, -2.9407622814178467, -2.4051313400268555, -2.1256041526794434, -2.2372162342071533, -2.789137125015259, -1.5142287015914917, -1.2492684125900269, -1.6211843490600586, -1.7839574813842773, -1.4934532642364502, -1.7011547088623047, -1.5181875228881836, -1.4232414960861206, -0.5656542181968689, -0.4539507329463959, -0.7779789566993713, -1.1279048919677734, -1.0179001092910767, -1.0559519529342651, -0.9773439168930054, -1.0534878969192505, -0.73095703125, -0.8986287117004395, 0.770297646522522, -0.8808987140655518, -0.6339964270591736, -0.8934319019317627, -0.7237647175788879, -0.8160689473152161, -0.25114724040031433, -0.4401104748249054, -0.8078599572181702, -0.1128823459148407, -0.7314887046813965, -0.052875861525535583, 1.539644479751587, -0.5039902925491333, 1.6002612113952637, 0.4862348139286041, -0.3433493971824646, -0.4274101257324219, 1.9341918230056763, 0.3974999785423279, 0.28377246856689453, -0.7782816290855408, -1.0435620546340942, -1.4090238809585571, -1.42666494846344, -0.7047394514083862, -0.5438223481178284, -11.117718696594238, -4.498582363128662, -3.575146198272705, -2.35101580619812, -2.2881040573120117, -1.5803592205047607, -1.5527069568634033, -1.7492262125015259, -1.7389928102493286, -0.9570375084877014, -0.1886393427848816, 0.15874634683132172, -3.0056302547454834, -2.182521104812622, -0.5244185924530029, 0.21831248700618744, -2.208988904953003, -1.576480746269226, -0.5401718616485596, -0.5023214817047119, 0.3207312822341919, 1.2268915176391602, -0.11252876371145248, -0.22917109727859497, -0.0613178052008152, -0.03746052458882332, 0.08305753022432327, 0.2504933476448059, 0.47544988989830017, 1.0961859226226807, 0.2796965539455414, -3.2554128170013428, -1.2093565464019775, -1.4485738277435303, -0.9744834899902344, 0.019727423787117004, -0.9282875657081604, -0.994166910648346, -1.0240962505340576, -1.201321005821228, -0.9554650783538818, -1.0570991039276123, -0.8853266835212708, -0.8295027017593384, -0.8679211735725403, -0.6739240884780884, -0.43453657627105713, -0.5977059602737427, -0.4133867621421814, -0.5869407057762146, -0.4897671639919281, -0.5638994574546814, -0.3849004805088043, -0.5227524638175964, -0.6460722088813782, -0.28870177268981934, -0.3622654378414154, -0.3931449055671692, -0.2667752504348755, -0.24373890459537506, -0.4419442415237427, -0.27533140778541565, -0.6664111614227295, -0.13489198684692383, -0.17816193401813507, -0.22605203092098236, -0.32236671447753906, -0.07040201872587204, -0.12137936800718307, -0.31337106227874756, -0.07943723350763321, -0.13811169564723969, -0.27617186307907104, 0.16876719892024994, -0.19158783555030823, -0.012025796808302402, -0.18275116384029388, -0.07416193932294846, -0.1231045052409172, -0.14463919401168823, -0.21086907386779785, -0.14971907436847687, 0.04209398478269577, -0.07392524927854538, 0.03368920460343361, 0.31920942664146423, -0.14851324260234833, 0.41493648290634155, 0.17232975363731384, -0.10359667986631393, -0.034418314695358276, 0.4594833254814148, 0.1365262120962143, -0.05514472350478172, -0.21112124621868134, -0.14040443301200867, -0.34301382303237915, -0.33753329515457153, -0.075286366045475, -0.16005758941173553, -2.067650079727173, -0.62843918800354, -0.5556692481040955, -0.4679825007915497, -0.48359760642051697, -0.4274426996707916, -0.37278300523757935, -0.4013608992099762, -0.24077413976192474, -0.29583656787872314, 0.027360446751117706, -0.05881731957197189, -0.586703360080719, -0.19924455881118774, 0.0040486338548362255, -0.04747982323169708, -0.4401179850101471, -0.389442503452301, -0.2114265114068985, -0.16198934614658356, -1.690132737159729, -1.3687201738357544, 0.4556020200252533, 0.8527954816818237, 0.5999191999435425, 0.6221451163291931, 0.10438346862792969, 0.687874436378479, -2.0101394653320312, -4.8871259689331055, -1.5930103063583374, 3.1762843132019043, 1.0754178762435913, 1.441694736480713, -1.0820975303649902, 0.05032562091946602, 4.939760208129883, 4.9943318367004395, 5.317627906799316, 5.311254978179932, 4.989718437194824, 4.524256706237793, 4.336480140686035, 4.7966389656066895, 4.745635509490967, 3.6857500076293945, 2.247640371322632, 3.0365402698516846, 2.369861364364624, 3.847121477127075, 2.9389500617980957, 2.3582558631896973, 2.085233211517334, 2.124588966369629, 2.852431297302246, 1.4701558351516724, 1.326816439628601, 1.6742054224014282, 1.7030094861984253, 1.5289603471755981, 1.7025913000106812, 1.4520392417907715, 2.6067025661468506, 0.4762183725833893, 0.5174486041069031, 0.884993314743042, 3.8454627990722656, 0.8798968195915222, 4.731002330780029, 0.9449880123138428, 0.897678017616272, 0.7145578265190125, 0.864109218120575, -0.7105767726898193, 0.8060390949249268, 0.6032533049583435, 0.7130441069602966, 0.7531229853630066, 0.8018993735313416, 0.19523273408412933, 0.5336224436759949, 0.7721254825592041, 0.26588529348373413, 0.778928279876709, -0.058028846979141235, -1.6551185846328735, 0.5130794048309326, -1.6709634065628052, -0.7295700907707214, 0.2604445517063141, 0.38593539595603943, 0.43960869312286377, -0.5822135806083679, -0.13916073739528656, 0.691264808177948, 1.2089803218841553, 1.4040387868881226, 1.5151915550231934, 0.7375446557998657, 0.43524718284606934, 10.349853515625, 5.309102535247803, 3.455317974090576, 2.3784525394439697, 2.2248263359069824, 2.373924970626831, 1.5765775442123413, 2.960482120513916, 1.5727297067642212, 0.9360575079917908, 0.586595356464386, -0.23358409106731415, 2.832442283630371, 1.750033974647522, 0.12322598695755005, 0.09100231528282166, 2.2746238708496094, 1.5544936656951904, 0.5266433954238892, 0.581261932849884, 1.6814533472061157, 1.172446846961975, -0.2586249113082886, -0.8439111709594727, -0.7179451584815979, -0.6600342988967896, -0.2213069051504135, 0.9859451651573181, 1.7618019580841064, 4.235414028167725, 1.3822236061096191, -3.1086835861206055, -14.562711715698242, -1.059888243675232, -16.777902603149414, -4.529929161071777, -5.258783340454102, -5.110031604766846, -5.5335259437561035, -5.930649280548096, -5.649166584014893, -4.602900505065918, -4.279512882232666, -4.896762847900391, -4.582980632781982, -3.5727100372314453, -2.3015153408050537, -3.0661983489990234, -2.2142016887664795, -2.8304226398468018, -2.9345176219940186, -2.371076822280884, -2.1943888664245605, -2.119457960128784, -2.8591575622558594, -1.4466975927352905, -1.35748291015625, -1.5501443147659302, -1.767087697982788, -1.5341343879699707, -1.7305326461791992, -1.4832645654678345, -1.4578478336334229, -0.45584186911582947, -0.48572540283203125, -0.9220519065856934, -1.0070197582244873, -0.9191168546676636, -0.8233225345611572, -0.8701371550559998, -1.072057843208313, -0.814674973487854, -0.862621545791626, 0.702472984790802, -0.7575227618217468, -0.7151869535446167, -0.7163618206977844, -0.7611345648765564, -0.845486581325531, -0.29114389419555664, -0.623615562915802, -0.8391228914260864, -0.12719140946865082, -0.729718804359436, -0.2207925021648407, 1.4636245965957642, -0.7394801378250122, 1.5782012939453125, 0.49014732241630554, -0.2573527991771698, -0.481814444065094, 1.9003393650054932, 0.5471203327178955, 0.18622633814811707, -0.6945018768310547, -1.2002664804458618, -1.3966060876846313, -1.4773098230361938, -0.7708931565284729, -0.5748347640037537, -10.810044288635254, -3.4294321537017822, -3.435889959335327, -2.132974147796631, -2.300492525100708, -1.5717380046844482, -1.7953721284866333, -1.7138242721557617, -1.759426236152649, -0.9750609993934631, -0.06394440680742264, 0.20894065499305725, -3.0633206367492676, -2.071727752685547, -0.7266013026237488, 0.24678899347782135, -2.1746394634246826, -1.7095069885253906, -0.5420822501182556, -0.472383052110672, -0.5386008024215698, 0.3790470063686371, 0.9293994307518005, 0.49629369378089905, -0.606113851070404, 3.118548631668091]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0.8, 1.37)}}, 'et1_eta0': {'discriminator': {'threshold': -0.4650006055831909, 'nodes': [100, 5, 1], 'bias': [0.08850277215242386, 0.29802069067955017, 0.21457459032535553, -0.10977515578269958, -0.2650356590747833, -0.06368418782949448], 'weights': [-2.5806844234466553, -1.0012047290802002, -0.2730771601200104, 0.04640960693359375, -0.23492079973220825, -0.25099289417266846, -0.18854427337646484, -0.6312430500984192, -1.5728650093078613, -2.0988950729370117, 1.0723426342010498, 5.214395046234131, 7.634226322174072, 3.932420492172241, 3.1731977462768555, 2.7362208366394043, 2.520021915435791, 1.7802473306655884, 1.7117398977279663, 2.775007963180542, 1.8490713834762573, 4.080935001373291, 1.5807067155838013, 1.3705689907073975, 1.4523284435272217, 1.282424807548523, 1.9052059650421143, 1.3268152475357056, 1.2147687673568726, 1.1448230743408203, 1.0762319564819336, 1.149719476699829, 0.9828029274940491, 0.7869490385055542, 1.0506229400634766, 0.7081304788589478, 0.7478598356246948, 0.8586633205413818, 0.8232532739639282, 1.6884773969650269, 0.5400390028953552, 0.44420546293258667, 0.6171509623527527, 0.6396961212158203, 0.40406715869903564, 0.4276370704174042, 0.4723331928253174, 0.10639713704586029, 0.4063652455806732, -0.04959668591618538, 0.2616499960422516, -0.03402677923440933, 0.059273116290569305, 0.3306509256362915, 0.5020179152488708, 0.6612769365310669, -0.03246231749653816, -0.3431079685688019, 0.112039715051651, 0.20476339757442474, -0.2729301452636719, -0.652006208896637, 0.3640297055244446, 0.6954027414321899, 0.1482647806406021, 0.5909504890441895, -0.28839030861854553, 0.31749823689460754, -0.47111091017723083, 0.2065715789794922, -0.7505382895469666, 0.2084415853023529, -0.42441025376319885, -0.2964019775390625, 0.2804376482963562, 0.582612931728363, 1.00559663772583, 0.5798299312591553, 0.4391465187072754, 0.03747107461094856, 5.822595596313477, 1.6330883502960205, 1.7257215976715088, 1.1487311124801636, 0.8518974184989929, 0.7851455211639404, 0.9534518718719482, 1.4868475198745728, 1.8831793069839478, 1.4306070804595947, 0.39715254306793213, 0.24408017098903656, 1.7380021810531616, 1.0294674634933472, -0.11819819360971451, -0.24534854292869568, 2.358104705810547, 1.0681188106536865, 0.2522551417350769, -8.108581823762506e-05, -0.2052263468503952, 20.07004737854004, -0.05454494431614876, -0.18717095255851746, -0.022892674431204796, 6.42439079284668, 0.021967625245451927, -0.2698066532611847, 0.9815628528594971, 2.539395570755005, -0.041126005351543427, -188.51095581054688, 1.2481532096862793, 4.584614276885986, 31.096965789794922, 7.407281875610352, 6.4813032150268555, 0.44959187507629395, 6.5897698402404785, 3.112337350845337, 0.552180290222168, 0.7381755709648132, 0.34178149700164795, 0.10214046388864517, 0.28746888041496277, 0.11707084625959396, 0.2851114869117737, 0.29011955857276917, 0.2782539427280426, 0.1969985067844391, 0.2606906592845917, 0.1943608522415161, 0.2012009471654892, 0.12583144009113312, 0.1824081391096115, 0.13188831508159637, 0.13675498962402344, 0.13455922901630402, 0.1803206503391266, 0.03803775832056999, -0.0544644296169281, -0.08126848191022873, 0.17514316737651825, 0.15767283737659454, -0.02302093245089054, 0.0002129851491190493, 9.541810035705566, -0.11653793603181839, -0.02170524187386036, -0.0030093672685325146, 0.11309917271137238, -0.15355350077152252, -0.11288440972566605, -2.4306955337524414, -73.22344970703125, -0.020048722624778748, -0.17453287541866302, -0.7349122762680054, -0.1362602561712265, -0.11913035064935684, -0.24777555465698242, -0.09940226376056671, 0.08428455889225006, -0.187347412109375, 0.01218602154403925, 0.08000417053699493, -0.04203977808356285, 0.013009489513933659, -0.1961224377155304, 0.05147147923707962, -0.17532473802566528, -0.11450307816267014, 0.1367666870355606, 0.10501325130462646, 1.171893835067749, 4.778346538543701, 0.24694855511188507, 0.031231198459863663, 0.059682074934244156, -0.07460985332727432, 0.560391902923584, 8.475451469421387, 16.56343650817871, 0.22844885289669037, 0.005401573609560728, 0.09367279708385468, 0.021713171154260635, 0.1966490000486374, -1.247552514076233, 0.024344611912965775, -0.0208007600158453, -0.26645153760910034, 0.12142878770828247, 0.10227616131305695, -0.09873196482658386, -0.07469190657138824, 0.4973446726799011, 2.5086257457733154, -0.07525625079870224, -0.16092340648174286, -2.383897066116333, -1.3760507106781006, -0.3348962664604187, 1.179531455039978, -0.15976905822753906, -0.24633640050888062, -0.027256470173597336, -0.5228423476219177, -1.5888421535491943, -2.6769280433654785, 0.8242276310920715, 2.4047093391418457, 1.4194800853729248, 3.582404375076294, 3.1895318031311035, 2.3722589015960693, 2.534457206726074, 1.7707122564315796, 1.8028674125671387, 2.6878201961517334, 1.6965737342834473, 2.156740427017212, 1.542108178138733, 1.4480589628219604, 1.8843015432357788, 1.1578338146209717, 1.8208820819854736, 1.3979628086090088, 1.1670628786087036, 1.1282018423080444, 1.2297827005386353, 1.0489581823349, 1.0769861936569214, 0.6272847056388855, 0.8593021035194397, 0.6260786056518555, 0.5971726775169373, 0.8229843974113464, 0.8540348410606384, 1.5200797319412231, 0.6819210648536682, 0.5246379971504211, 0.6939978003501892, 0.5826196670532227, 0.2613293528556824, 0.5254384279251099, 0.5967040657997131, -0.01746673323214054, 0.5041105151176453, -0.12722176313400269, 0.30193957686424255, 0.1491677314043045, -0.1304699331521988, 0.3279569149017334, 0.5113049745559692, 0.6325740814208984, -0.14406374096870422, 0.02065088227391243, 0.15422871708869934, 0.2860473394393921, -0.3209764361381531, -0.7076837420463562, 0.3395984470844269, 0.7022368907928467, 0.1842680275440216, 0.6265614032745361, -0.3680141568183899, 0.45416259765625, -0.46680304408073425, 0.40902554988861084, -0.49815353751182556, 0.09244372695684433, -0.39312347769737244, -0.48561719059944153, 0.43097352981567383, 0.7226723432540894, 0.897112250328064, 0.6425195336341858, 0.45138198137283325, 0.00849300716072321, 5.954187870025635, 1.6895170211791992, 1.6343204975128174, 1.0949205160140991, 0.9260191321372986, 0.6236910820007324, 0.8671881556510925, 1.417702078819275, 1.9717001914978027, 1.473469614982605, 0.4402773082256317, 0.24526472389698029, 2.007535457611084, 1.0167276859283447, 0.41198447346687317, -0.30539608001708984, 2.3852570056915283, 0.996436595916748, 0.3332338035106659, -0.17675654590129852, 2.5845961570739746, 1.212166428565979, 0.20074820518493652, 0.030683953315019608, 0.2545512318611145, 0.17029887437820435, 0.16634932160377502, 0.4982535243034363, 1.6890970468521118, 1.9754447937011719, -1.2980303764343262, -5.312727451324463, -7.698091983795166, -3.7385916709899902, -3.286646604537964, -2.704873561859131, -2.4968903064727783, -1.7537165880203247, -1.8216450214385986, -2.681057929992676, -1.8271340131759644, -1.9379202127456665, -1.5291752815246582, -1.463510274887085, -1.3950189352035522, -1.0537468194961548, -1.7698345184326172, -1.4257134199142456, -1.1033873558044434, -1.2061586380004883, -1.0880452394485474, -1.0287353992462158, -1.074491024017334, -0.8654044270515442, -1.09386146068573, -0.7744948267936707, -0.6656947135925293, -0.6827832460403442, -0.7813001871109009, -1.495880365371704, -0.7289212346076965, -0.38663405179977417, -0.7631081938743591, -0.651140570640564, -0.39397621154785156, -0.4455743730068207, -0.4467396140098572, -0.04283224418759346, -0.40346524119377136, 0.20658908784389496, -0.34545084834098816, 0.04809919744729996, 0.0783865675330162, -0.3686244487762451, -0.5752061605453491, -0.7076175212860107, 0.121605284512043, 0.1639905422925949, -0.26296666264533997, -0.23427186906337738, 0.2737751007080078, 0.7305718064308167, -0.5138651132583618, -0.5449318289756775, -0.15384043753147125, -0.7897053956985474, 0.3668023347854614, -0.4822190999984741, 0.4539201259613037, -0.32751092314720154, 0.5043238401412964, -0.419588178396225, 0.6023481488227844, 0.17831134796142578, -0.24144744873046875, -0.6358891129493713, -0.9003252387046814, -0.5418298244476318, -0.43454253673553467, -0.1705821305513382, -5.86890983581543, -1.708831787109375, -1.6034786701202393, -1.0516904592514038, -0.7220751643180847, -0.7304001450538635, -0.9084433317184448, -1.4979172945022583, -2.0133533477783203, -1.2951805591583252, -0.19642029702663422, -0.1319875419139862, -1.6450563669204712, -0.9842507243156433, 0.104102723300457, 0.21811139583587646, -2.505967378616333, -0.9627663493156433, -0.20291189849376678, -0.17066088318824768, 2.523078203201294, 1.2397465705871582, 0.3222271502017975, 0.12637624144554138, 0.19881415367126465, 0.1611686795949936, 0.015605319291353226, 0.5323315262794495, 1.6160365343093872, 2.0284018516540527, -1.044151782989502, -3.7301273345947266, -1.5994799137115479, -3.6477060317993164, -3.2697880268096924, -2.807410955429077, -2.474952459335327, -1.6306145191192627, -1.6776785850524902, -2.6056666374206543, -1.7122881412506104, -1.9532740116119385, -1.5319031476974487, -1.4019474983215332, -1.90078866481781, -1.3484795093536377, -1.8125066757202148, -1.1925442218780518, -1.1334221363067627, -1.092852234840393, -1.013049840927124, -1.129899501800537, -0.9238896369934082, -0.6770639419555664, -1.1074323654174805, -0.6877516508102417, -0.7302060127258301, -0.8390008807182312, -0.9042571187019348, -1.6276228427886963, -0.5894379615783691, -0.46856778860092163, -0.6491129994392395, -0.5125652551651001, -0.2724980115890503, -0.30689680576324463, -0.41970714926719666, -0.1430593878030777, -0.39922475814819336, 0.13472452759742737, -0.3783359229564667, -0.057618461549282074, -0.016896555200219154, -0.4073556363582611, -0.6274473071098328, -0.5425912141799927, 0.13909856975078583, 0.12539851665496826, -0.11267583072185516, -0.25544434785842896, 0.2485422044992447, 0.7121180891990662, -0.3919336199760437, -0.7181009650230408, -0.22763942182064056, -0.6732332706451416, 0.37915194034576416, -0.3767874538898468, 0.6579141616821289, -0.1865592747926712, 0.7217347621917725, -0.06282942742109299, 0.4178060293197632, 0.5003261566162109, -0.3291083574295044, -0.7071840167045593, -0.9176375269889832, -0.7618668675422668, -0.5984167456626892, -0.17798370122909546, -5.918032169342041, -1.6591318845748901, -1.4021949768066406, -0.9522659778594971, -0.9617892503738403, -0.5658779144287109, -0.8876404762268066, -1.4604300260543823, -2.021662712097168, -1.3704696893692017, -0.4504642188549042, 0.9031230807304382, -2.0044949054718018, -1.0812060832977295, -0.45180824398994446, 0.2888007164001465, -3.373633623123169, -1.0152852535247803, -0.27049174904823303, 0.2571607232093811, -1.17954421043396, -0.2844941020011902, -1.0495645999908447, 2.2307827472686768, 2.5593717098236084]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0, 0.8)}}, 'et3_eta1': {'discriminator': {'threshold': -0.035000821948051458, 'nodes': [100, 5, 1], 'bias': [0.15730011463165283, 0.07815705239772797, -0.006643477361649275, 0.1405337154865265, -0.15454824268817902, -0.23352541029453278], 'weights': [-2.2592337131500244, -2.111402988433838, 1.0897276401519775, 1.14312744140625, 0.6493831276893616, -0.3516945540904999, -0.24517647922039032, -0.2307973951101303, -2.991236686706543, -3.7764527797698975, 2.889862060546875, 7.753478527069092, 1.6842848062515259, 3.7955284118652344, 9.603760719299316, 8.095412254333496, 3.444871425628662, 7.7395172119140625, 7.613654136657715, 6.645348072052002, 7.937831401824951, 2.643230676651001, 6.488022327423096, 3.073213815689087, 3.4893076419830322, 2.4130094051361084, 4.246172904968262, 2.2602477073669434, 1.967344045639038, 2.2002124786376953, 2.0582127571105957, 3.8808634281158447, 4.826034069061279, 8.88129997253418, 2.8044652938842773, 0.9710285663604736, 2.2622244358062744, 1.680975317955017, 3.2145273685455322, 1.786454200744629, 3.0584285259246826, 2.1071407794952393, 2.1291117668151855, 3.5432729721069336, 1.052205204963684, 0.030557846650481224, -2.2776753902435303, 1.5152586698532104, 1.7110742330551147, 1.7531414031982422, 0.7845969200134277, 0.8433842062950134, 4.040330410003662, -0.9446387887001038, -3.7090647220611572, 1.0371294021606445, 0.9976323246955872, 0.6247972846031189, 1.0383681058883667, 0.8938833475112915, 0.07614778727293015, -1.8009514808654785, 0.8994818329811096, -2.3960764408111572, 1.3220913410186768, 1.2301081418991089, 5.750441551208496, -0.347689151763916, -2.032581090927124, -0.004036625847220421, 0.9990876317024231, 0.10651766508817673, -0.6248242855072021, -0.6703989505767822, 1.238221526145935, 2.0437328815460205, 2.0885448455810547, 1.6882622241973877, 1.6431466341018677, 0.6129466891288757, 5.512369632720947, 6.847434043884277, 4.415524005889893, 4.060720443725586, 2.1885111331939697, 0.9768252372741699, 3.6383414268493652, 3.9159090518951416, 2.347606658935547, 1.1752392053604126, 0.09728527814149857, 0.03384150564670563, 4.355111122131348, 3.7721214294433594, 1.4732459783554077, 0.4030681848526001, 4.801760196685791, 2.2721035480499268, 2.0172536373138428, -0.409799188375473, -1.0578287839889526, -1.8762972354888916, 1.079729437828064, 1.1918156147003174, 0.6503933072090149, -0.19451335072517395, 0.18041542172431946, -0.2852369546890259, -3.0265536308288574, -3.862375497817993, 2.8850512504577637, 1.560224175453186, 1.7875977754592896, 3.647792339324951, 9.470881462097168, 8.199115753173828, 3.448289394378662, 7.844549179077148, 7.59998083114624, 6.665423393249512, 7.847585201263428, 2.698899745941162, 6.49744176864624, 3.2684009075164795, 3.482053518295288, 2.5860989093780518, 4.403741359710693, 2.1741089820861816, 2.1662118434906006, 2.245495557785034, 2.0364773273468018, 3.708613872528076, 5.011116027832031, 8.842255592346191, 2.6692419052124023, 0.9078444242477417, 2.1339166164398193, 1.6668797731399536, 6.28959321975708, 1.615511178970337, 2.183648109436035, 2.009016990661621, 3.1257035732269287, 6.710860729217529, 1.0459524393081665, 0.13967451453208923, -2.264399290084839, 1.5051060914993286, 1.6856147050857544, 1.744413137435913, -0.32601088285446167, 0.7349650859832764, 4.0952982902526855, -0.9256616830825806, 0.39020541310310364, 1.0775421857833862, 0.9500966668128967, 0.6222617030143738, 0.9999426603317261, 0.9623971581459045, -0.12071329355239868, -1.868445873260498, 0.568004310131073, -2.445319890975952, 1.2082405090332031, 1.3135732412338257, 5.609175205230713, -0.038440752774477005, -1.6587306261062622, -0.16029344499111176, 1.0652010440826416, 0.06854327023029327, -0.6420084238052368, -0.6593389511108398, 1.3284329175949097, 2.0131008625030518, 1.9690968990325928, 1.794880986213684, 1.609578251838684, 0.7076612710952759, 5.371720314025879, 6.823807716369629, 4.39454460144043, 3.982004165649414, 2.176537275314331, 1.0426629781723022, 3.6658716201782227, 3.863720655441284, 2.4182329177856445, 1.3307749032974243, 0.19643723964691162, -0.6463615894317627, 4.203552722930908, 3.610746383666992, 1.5748257637023926, 0.3813633322715759, 4.716528415679932, 2.3044610023498535, 1.9815802574157715, -0.4256702661514282, 0.948711097240448, 1.4046434164047241, -1.1294604539871216, -1.6056320667266846, -0.5236995816230774, 0.16869063675403595, -0.1355123668909073, -0.7893909811973572, 2.8440308570861816, 3.742664098739624, -2.7891299724578857, -1.5766050815582275, -1.9559719562530518, -3.642308235168457, -9.54025650024414, -8.080312728881836, -3.419504165649414, -7.699987411499023, -7.557397365570068, -6.559866905212402, -7.960373878479004, -2.503316879272461, -6.43572473526001, -3.2168118953704834, -3.5800607204437256, -2.5390164852142334, -4.433113098144531, -2.179738998413086, -2.1718313694000244, -2.30818247795105, -2.2183165550231934, -3.8191580772399902, -4.827245235443115, -8.837349891662598, -2.619448661804199, -0.939981997013092, -2.150607109069824, -1.808663249015808, -6.18973970413208, -1.819018006324768, -2.2086610794067383, -2.0497169494628906, -3.1091132164001465, -6.667771816253662, -1.0853623151779175, 0.044015172868967056, 2.189815044403076, -1.5199230909347534, -1.5938282012939453, -1.5399328470230103, 0.180278941988945, -0.7517843246459961, -3.931715488433838, 0.837063193321228, -0.3596337139606476, -1.0161563158035278, -0.9874147772789001, -0.6168691515922546, -1.1806604862213135, -0.9918128252029419, 0.06760714203119278, 1.7423646450042725, -0.7214913368225098, 2.388862371444702, -1.3336081504821777, -1.1807910203933716, -5.644992828369141, 0.13285598158836365, 1.6455429792404175, -0.012143492698669434, -1.1784769296646118, -0.10255590826272964, 0.6653430461883545, 0.5668428540229797, -1.3355993032455444, -2.030824899673462, -2.114377737045288, -1.8687688112258911, -1.6404701471328735, 0.11417483538389206, -5.477608680725098, -6.7639570236206055, -4.232583045959473, -4.16078519821167, -2.2094781398773193, -1.0866056680679321, -3.524570941925049, -3.929792642593384, -2.4525907039642334, -1.1559392213821411, -0.06478343158960342, 0.5546999573707581, -4.3912739753723145, -3.628386974334717, -1.5357224941253662, -0.4579792022705078, -4.605578422546387, -2.296983242034912, -1.9679656028747559, 0.28695544600486755, -2.3765549659729004, -1.826352834701538, 1.2187130451202393, 1.3092496395111084, 0.5915548205375671, -0.3426985442638397, -0.2751856744289398, -0.314382404088974, -2.811002016067505, -3.895705461502075, 2.9136977195739746, 7.730470180511475, 1.8735255002975464, 3.8248209953308105, 9.666841506958008, 8.284022331237793, 3.4880027770996094, 7.699344158172607, 7.492215156555176, 6.57686185836792, 7.852872848510742, 2.585815191268921, 6.493010997772217, 3.0883805751800537, 3.6977086067199707, 2.517072916030884, 4.410699844360352, 2.3049583435058594, 2.1643483638763428, 2.3864967823028564, 2.1740663051605225, 3.7206766605377197, 4.969498157501221, 8.886266708374023, 2.8033461570739746, 0.8167921900749207, 2.2691328525543213, 1.656901478767395, 3.2165815830230713, 1.7338237762451172, 2.9080471992492676, 2.1400740146636963, 2.060528039932251, 3.3422608375549316, 1.1214913129806519, 0.03210899978876114, -2.050215482711792, 1.3877946138381958, 1.665394902229309, 1.619297742843628, 0.8203185200691223, 0.9526190161705017, 3.569678783416748, -0.9109848141670227, -3.824537754058838, 1.0541692972183228, 0.895470917224884, 0.6667991280555725, 1.1071701049804688, 0.7507856488227844, 0.06456183642148972, -1.856168270111084, 0.5235879421234131, -2.2571492195129395, 1.2647886276245117, 1.1707028150558472, 5.652133941650391, -0.39103126525878906, -2.123114824295044, -0.01829957216978073, 1.14298677444458, 0.10547726601362228, -0.5980741381645203, -0.5880293250083923, 1.276043176651001, 1.8998985290527344, 2.1654112339019775, 1.7136738300323486, 1.611719012260437, 0.013624376617372036, 5.396884441375732, 6.844674110412598, 4.3231282234191895, 3.993725299835205, 1.9795293807983398, 1.0088306665420532, 4.624177932739258, 3.8446385860443115, 2.42866849899292, 1.2011736631393433, 0.12086088210344315, -0.683218240737915, 4.318774223327637, 3.723301410675049, 1.4488369226455688, 0.32057785987854004, 5.1095194816589355, 2.4652087688446045, 1.8802709579467773, -0.37574025988578796, -21.59067153930664, -63.43375015258789, -0.2735781669616699, 0.2153743952512741, -0.8092572689056396, -0.47440817952156067, -20.279008865356445, -0.24874059855937958, -0.36921605467796326, -0.5934879779815674, 47.644649505615234, 53.703582763671875, 11.008259773254395, 3.457265853881836, 0.8416662812232971, 2.116163730621338, 0.8367151021957397, 0.6726363897323608, -0.997137188911438, 1.2167855501174927, 1.4902551174163818, 0.38358455896377563, 1.4080822467803955, 0.6277941465377808, 0.9135026335716248, 0.6050988435745239, 0.40357279777526855, 0.6170344948768616, 0.2969239354133606, 0.5191042423248291, 0.6139196753501892, 0.7409111261367798, 0.9573351144790649, 1.8468486070632935, -248.90916442871094, -54.436676025390625, 0.43212229013442993, 0.09688788652420044, 0.38933852314949036, 0.16416221857070923, 0.6027839183807373, 0.2772578299045563, 0.3182348906993866, 0.21298809349536896, 0.2695401906967163, 0.1460779309272766, -0.7934804558753967, 0.28100353479385376, 0.13278765976428986, 0.31015878915786743, -0.035232365131378174, 0.0193338505923748, 66.85016632080078, 0.10123156756162643, 0.07632054388523102, 0.19312737882137299, 0.13152167201042175, -0.0026324214413762093, 0.24675513803958893, 0.1866142451763153, 0.00965319573879242, -0.40578967332839966, 0.019524067640304565, -0.5681098699569702, 0.17334890365600586, 0.18794532120227814, 0.256261944770813, -0.17903569340705872, -1.0559300184249878, -0.07804456353187561, 0.12097977101802826, -84.89774322509766, 0.009624776430428028, 0.11099477112293243, 0.14837472140789032, 0.40018707513809204, 0.2729507386684418, 0.39055711030960083, 0.2435155212879181, 0.007527800276875496, 1.1460940837860107, 1.4636454582214355, 0.7786661982536316, 0.8342838883399963, 0.44177284836769104, 0.23402126133441925, 28.704330444335938, 0.6955901980400085, 0.26131296157836914, 0.14333754777908325, -0.12008234858512878, -0.3277459740638733, 0.941196620464325, 0.7440329790115356, 0.245652437210083, 0.029291512444615364, 0.7237016558647156, 0.5614503622055054, 0.4866182804107666, -0.20025552809238434, -1.9216974973678589, -2.128844738006592, 0.4173222780227661, -1.8761860132217407, -0.4172418415546417]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (40, 50), 'etaBin': (0.8, 1.37)}}, 'et0_eta3': {'discriminator': {'threshold': -0.055000817775726324, 'nodes': [100, 9, 1], 'bias': [-0.1407214254140854, 0.06674350053071976, -0.18006108701229095, 0.05616862326860428, -0.18473659455776215, 0.16730372607707977, -0.09875761717557907, -0.018065694719552994, 0.14515070617198944, -0.12949378788471222], 'weights': [-0.8132635354995728, -0.7208519577980042, 0.11873473972082138, 0.33942773938179016, 1.0432066917419434, 0.36767181754112244, 0.27934151887893677, 0.0815957710146904, -1.380362629890442, -1.6840870380401611, -1.7429289817810059, -0.28187838196754456, 1.5563263893127441, 0.4624183475971222, 5.093498229980469, 4.076866626739502, 1.8049594163894653, 5.036686897277832, 0.5959597826004028, 5.1945366859436035, 1.6616880893707275, -1.4257605075836182, 3.233429431915283, 3.1460630893707275, 2.002929925918579, 2.0998306274414062, 1.980833888053894, 2.803379774093628, 0.3217647075653076, 0.7369864583015442, 0.722167432308197, 1.7329550981521606, 1.6127166748046875, 1.7412950992584229, -0.2182760089635849, 1.858873963356018, 0.45404917001724243, -0.461873859167099, 0.30324089527130127, 1.5901087522506714, 0.8437208533287048, -1.1453101634979248, 1.052100419998169, 1.3319687843322754, 1.0879489183425903, 0.9551039338111877, 1.2579126358032227, 0.12899626791477203, 0.1943940967321396, 0.9106179475784302, -0.08881685882806778, 1.0421924591064453, -0.10981596261262894, -0.4122312366962433, -0.10562685132026672, 0.026212286204099655, 1.1173734664916992, 0.8650310039520264, -0.08201833814382553, 0.07405491918325424, -0.27372512221336365, 2.4792611598968506, -0.7124928832054138, 0.0992538183927536, 0.24293576180934906, 0.6265254616737366, -1.1141934394836426, -0.9671548008918762, -0.26049870252609253, 0.9531799554824829, -2.1120102405548096, -1.0566222667694092, -0.29698124527931213, -0.22588281333446503, 0.5247219800949097, 1.7258588075637817, 2.1028051376342773, 1.4754496812820435, 0.4460217356681824, 0.9740409851074219, 5.81657075881958, 5.043082237243652, 2.6552717685699463, 1.1897108554840088, 1.492576003074646, 1.3613582849502563, 0.21798363327980042, 1.1362003087997437, 0.5873610377311707, 1.1977033615112305, 0.2068304717540741, 0.007278257980942726, 2.1149260997772217, 0.9510822296142578, 0.11564116925001144, 0.3190535008907318, 0.30512645840644836, 0.40963464975357056, 0.20987500250339508, -0.10704275220632553, 0.7592369318008423, 0.7010093927383423, -0.07309114933013916, -0.321598619222641, -1.2008109092712402, -0.20066553354263306, -0.3915606141090393, -0.09344636648893356, 1.399393916130066, 1.789229154586792, 1.7646849155426025, 0.46421006321907043, -1.5790103673934937, -0.39892324805259705, -5.003358364105225, -3.9036083221435547, -1.822140097618103, -4.984104633331299, -0.934328556060791, -5.151466369628906, -1.584260106086731, 1.5737708806991577, -3.1216108798980713, -3.0638585090637207, -1.789509892463684, -1.9562020301818848, -1.874325156211853, -2.966566324234009, -0.4420681893825531, -0.929384171962738, -0.7703667879104614, -1.8981620073318481, -1.5977709293365479, -1.752970576286316, 0.12634186446666718, -1.7356882095336914, -0.2895793318748474, 0.2668388783931732, -0.43842393159866333, -1.6531239748001099, -0.7248035073280334, 1.0227733850479126, -0.9419450759887695, -1.1990209817886353, 0.7308794856071472, -0.9434993863105774, -1.1982247829437256, 0.05041747912764549, -0.12107542902231216, -0.8440163731575012, 0.09307906776666641, -1.1794803142547607, 0.0777030885219574, 0.2817169725894928, 0.060458697378635406, -0.016693897545337677, -1.1133806705474854, -1.0501405000686646, 0.17486368119716644, 0.1022058054804802, 0.14273224771022797, -2.4254705905914307, 0.6866123080253601, 0.05049509555101395, -0.19168545305728912, 1.3615690469741821, 1.1406676769256592, 0.9363752007484436, 0.4406859278678894, -0.8153678774833679, 1.9708521366119385, 1.1368048191070557, 0.3213760554790497, 0.25849276781082153, -0.5581075549125671, -1.7605060338974, -2.0657196044921875, -1.4582678079605103, -0.5693160891532898, -0.8994877934455872, -5.7229461669921875, -4.89405632019043, -2.6821625232696533, -1.3737807273864746, -1.4649416208267212, -1.4477856159210205, -0.14602454006671906, -1.113690733909607, -0.6070882678031921, -1.0237780809402466, -0.2823850214481354, 0.08853570371866226, -2.1337239742279053, -1.0616344213485718, -0.13125473260879517, -0.2957075536251068, -0.2960958778858185, -0.37493205070495605, -0.20818856358528137, 0.04974399134516716, -0.6139215230941772, -0.675837516784668, 0.01800144463777542, 0.16583053767681122, 1.2029106616973877, 0.3534911572933197, 0.3536852300167084, 0.11401058733463287, -1.3429614305496216, -1.7399932146072388, -1.7351245880126953, -0.2631223797798157, 1.6811394691467285, 0.3199397027492523, 4.912400245666504, 4.087119102478027, 1.8122690916061401, 4.585328578948975, 0.5006241798400879, 5.293233871459961, 1.540311574935913, -1.5636931657791138, 2.9893717765808105, 3.1181747913360596, 1.9691492319107056, 1.8847261667251587, 1.9459575414657593, 2.723675012588501, 0.2768232524394989, 0.709211528301239, 0.7326670289039612, 1.730704426765442, 1.6340304613113403, 1.9072352647781372, -0.14522923529148102, 1.7837166786193848, 0.3496350049972534, -0.3285650312900543, 0.2599640488624573, 1.522546410560608, -0.4116015136241913, -1.0928959846496582, 1.0027908086776733, 1.1905454397201538, 0.9984291791915894, 0.9808773994445801, 1.19428551197052, 0.04732788726687431, 1.0897341966629028, 1.0191333293914795, -0.07227389514446259, 1.151305913925171, 0.03757204860448837, -0.35156339406967163, -0.02380802109837532, 0.14536979794502258, 1.219740629196167, 0.9114254117012024, -0.00130744487978518, -0.03901457041501999, -0.25455406308174133, 2.571018934249878, -0.8134226202964783, 0.14029164612293243, 0.24446211755275726, 0.6065241098403931, -1.1495189666748047, -1.0705891847610474, -0.4038388133049011, 0.8757845163345337, -2.127149820327759, -1.122079610824585, -0.32063862681388855, -0.18409450352191925, 0.5740222930908203, 1.6113555431365967, 1.9088267087936401, 1.6182595491409302, 0.5058969259262085, 0.9988620281219482, 5.763286590576172, 5.048830986022949, 2.5395450592041016, 1.2832765579223633, 1.3747955560684204, 1.3269175291061401, 0.17452827095985413, 1.1202446222305298, 0.5959217548370361, 0.9587409496307373, 0.09219545871019363, 0.03949817642569542, 1.9787968397140503, 0.991693377494812, 0.1883508414030075, 0.16261804103851318, 0.3252050578594208, 0.19150783121585846, 0.25308945775032043, 0.026354173198342323, 0.6227089166641235, 0.7692942023277283, -0.08964084833860397, -0.4267958104610443, -1.0906569957733154, -0.3703511655330658, -0.4365720748901367, -0.06057586148381233, 1.538360834121704, 1.7810781002044678, 1.7440450191497803, 0.4286406338214874, -1.7042056322097778, -0.3263782560825348, -5.154655933380127, -4.059049606323242, -2.0356369018554688, -5.170736312866211, -0.835893988609314, -5.329240798950195, -1.6158276796340942, 1.4615364074707031, -3.17944598197937, -3.052053689956665, -1.8381186723709106, -1.8850442171096802, -2.0912375450134277, -2.9795339107513428, -0.3490269184112549, -1.4141292572021484, -0.8147439956665039, -1.6981388330459595, -1.6216113567352295, -1.8562984466552734, 0.22728736698627472, -1.8928875923156738, -0.31895917654037476, 0.31665071845054626, 3.4235925674438477, -1.557573914527893, -0.8990640044212341, 1.1268880367279053, -1.1254336833953857, 0.4046348035335541, 0.6647327542304993, -1.0347871780395508, -1.1936805248260498, 0.01357869990170002, -0.13351063430309296, -0.9845501780509949, 0.1219787523150444, -1.229602575302124, 0.06844998896121979, 0.24674876034259796, 0.016024844720959663, -0.06808590888977051, -1.0710718631744385, -1.0635803937911987, 0.11627098172903061, 0.2314356565475464, 0.2823445498943329, -2.534559965133667, 0.7723482251167297, -0.07724808156490326, -0.1604723483324051, 1.304740071296692, 1.0992412567138672, 0.9320917725563049, 0.4397430121898651, -0.9811238646507263, 2.0688986778259277, 0.9843761324882507, 0.25361254811286926, 0.17018835246562958, -0.6069934368133545, -1.6504689455032349, -2.005711793899536, -1.4964929819107056, -0.48185303807258606, -1.0954331159591675, -5.6581926345825195, -5.042731285095215, -2.6847081184387207, -1.3244023323059082, -1.1975760459899902, -1.4887137413024902, 5.016898155212402, -1.3004270792007446, -0.6558590531349182, -1.0847349166870117, -0.3006038963794708, -0.06806442141532898, -2.0518479347229004, -0.9880046844482422, -0.1700318306684494, -0.4345398545265198, -0.5227755904197693, -0.21367666125297546, -0.1561916023492813, 0.06564300507307053, -0.6659454107284546, -0.622691810131073, -0.051412079483270645, 0.34174641966819763, 1.2015018463134766, 0.38680869340896606, 0.2616593539714813, 0.07423434406518936, -1.4861937761306763, -1.7715117931365967, -1.8740382194519043, -0.3130093812942505, 1.6568242311477661, 0.4021936357021332, 4.996301651000977, 4.259697437286377, 1.8955779075622559, 5.142794132232666, 0.9814954400062561, 5.332903861999512, 1.614749550819397, 2.6933858394622803, 3.115966320037842, 3.0592973232269287, 1.8946386575698853, 2.085125207901001, 1.9024978876113892, 2.8605880737304688, 0.4251677393913269, 1.232535481452942, 0.8212841749191284, 1.7352460622787476, 1.6488492488861084, 1.918835997581482, -0.029908062890172005, 1.8048712015151978, 0.4021608233451843, -0.29827722907066345, 0.4903169870376587, 1.4395898580551147, -0.27691856026649475, -1.0816011428833008, 1.1188898086547852, 1.1751198768615723, 1.0842138528823853, 1.114804744720459, 1.354832649230957, -0.03124201111495495, 1.0991301536560059, 1.063336968421936, -0.13179071247577667, 1.0225187540054321, 0.0463390126824379, -0.32412439584732056, -0.1525048166513443, 0.09484929591417313, 1.1942088603973389, 0.9197342991828918, 0.02821928635239601, 0.005864947102963924, -0.2811189293861389, 2.440190076828003, -0.7855979800224304, 0.12086456269025803, 0.13282744586467743, 0.49346262216567993, -1.1400457620620728, -0.880723774433136, -0.4784016013145447, 0.8666333556175232, -1.891428828239441, -1.1882468461990356, -0.32701680064201355, -0.2394263744354248, 2.557929277420044, 1.699292540550232, 2.016538143157959, 1.4745913743972778, 0.5076565742492676, 0.8669944405555725, 5.636932373046875, 5.054530143737793, 2.527874708175659, -0.07977724820375443, 1.3436614274978638, 1.3673244714736938, 0.2537522614002228, 1.3125509023666382, 0.6408349275588989, 1.0952733755111694, 0.06655373424291611, 0.046229083091020584, 1.980616807937622, 0.9861326813697815, 0.18340858817100525, 0.03663339093327522, 0.4393174648284912, 0.20378132164478302, 0.11638950556516647, 0.07391009479761124, 0.7904120683670044, 0.7548847198486328, 0.10546236485242844, -0.22652727365493774, -1.203131914138794, -0.2964054048061371, -0.4464738965034485, -0.09530619531869888, 1.3557573556900024, 1.6277737617492676, 1.6624302864074707, 0.44902920722961426, -1.7018150091171265, -0.35193052887916565, -5.1142120361328125, -3.9311115741729736, -1.9852997064590454, -4.830398082733154, -0.565402626991272, -5.132021903991699, -1.760054349899292, 1.3865091800689697, -3.0243148803710938, -3.162200450897217, -1.817534327507019, -2.113487720489502, -2.0752768516540527, -2.7552340030670166, -0.4173230826854706, -0.7053608298301697, -0.8918169736862183, -1.6928094625473022, -1.5515276193618774, -1.943318247795105, 0.12203282862901688, -1.7010403871536255, -0.32823503017425537, 0.4477287828922272, -0.41569429636001587, -1.487956166267395, 0.41814324259757996, 1.1215918064117432, -1.0393763780593872, -1.2042914628982544, -1.0021240711212158, -0.9621548652648926, -1.305995225906372, 0.03306679055094719, -0.13276417553424835, -0.941654622554779, 0.0567602813243866, -1.0809261798858643, 0.11984408646821976, 0.33333510160446167, 0.04753946512937546, -0.09345943480730057, -1.2096068859100342, -1.016615390777588, 0.021261446177959442, -0.08944723010063171, 0.15282049775123596, -2.4530937671661377, 0.7224584221839905, 0.09759773313999176, -0.1622200757265091, -0.4635638892650604, 1.212966799736023, 0.9171085953712463, 0.40835946798324585, -0.9684682488441467, 2.007861852645874, 1.1340219974517822, 0.2570323050022125, 0.2853410243988037, -0.5762231349945068, -1.67903470993042, -2.045976400375366, -1.4782031774520874, -0.49357855319976807, -0.84811931848526, -5.8028717041015625, -5.0524396896362305, -2.577767848968506, -1.1650478839874268, -1.3962191343307495, -1.341011643409729, -0.2615102231502533, -1.1311367750167847, -0.7195371389389038, -1.025370478630066, -0.23194703459739685, -0.003792643081396818, -2.1930365562438965, -0.9652890563011169, -0.1718796193599701, -0.31551459431648254, -0.41296103596687317, -0.3687058091163635, -0.2573288083076477, -0.10950438678264618, -0.7553176879882812, -0.5950412750244141, 0.061784058809280396, 0.38738369941711426, 1.0232112407684326, 0.2314578890800476, 0.27080437541007996, 0.12366103380918503, -1.4114328622817993, -1.5494160652160645, -1.7205865383148193, -0.3128710091114044, 1.6419261693954468, 0.4649029076099396, 4.947268486022949, 3.9843125343322754, 1.8459254503250122, 4.989476203918457, 0.538245439529419, 5.318441867828369, 1.6196821928024292, -1.613242506980896, 3.2171969413757324, 3.0326616764068604, 1.862798810005188, 2.0538835525512695, 1.9819453954696655, 2.9155337810516357, 0.49679017066955566, 0.8369187712669373, 0.7425017952919006, 1.7178410291671753, 1.5938711166381836, 1.9528785943984985, -0.001915204105898738, 1.8124868869781494, 0.2811996340751648, -0.5021361708641052, 0.3064672350883484, 1.6342695951461792, 0.9581728577613831, -1.1121954917907715, 1.072817087173462, 1.256352424621582, 0.8042021989822388, 1.0776768922805786, 1.1127344369888306, -0.05006515979766846, 0.26220694184303284, 0.9411124587059021, 0.07581096887588501, 1.0650126934051514, -0.01854572258889675, -0.2562927305698395, -0.2045576572418213, -0.015395746566355228, 1.2349133491516113, 1.0152405500411987, -0.019656650722026825, -0.16491565108299255, -0.2716693580150604, 2.5543885231018066, -0.6906757950782776, 0.07496882975101471, 0.2814233899116516, 0.6166151165962219, -1.1773701906204224, -0.8534405827522278, -0.31821948289871216, 0.8856787085533142, -1.9354966878890991, -1.0199341773986816, -0.33891865611076355, -0.3040750026702881, 0.49333348870277405, 1.7195175886154175, 1.9153486490249634, 1.5315181016921997, 0.5302369594573975, 0.8619439601898193, 5.654287815093994, 5.022297382354736, 2.558448314666748, 1.365851879119873, 1.3796416521072388, 1.41362726688385, 0.34433579444885254, 1.1483513116836548, 0.5417488813400269, 1.1383308172225952, 0.25591689348220825, -0.04382206127047539, 2.1382229328155518, 1.0295239686965942, 0.047772251069545746, 0.38837939500808716, 0.38120678067207336, 0.27101653814315796, 0.19322992861270905, -0.08113179355859756, -1.2226717472076416, -2.2615997791290283, 0.11468613892793655, -0.041502244770526886, -0.058404117822647095, -0.0006618080078624189, 0.06844418495893478, -0.04163588583469391, -2.885434865951538, -2.2815637588500977, -5.823894500732422, 6.315771102905273, 13.926741600036621, 0.3584934175014496, 7.180079936981201, 2.036898612976074, 1.0683224201202393, 1.9928253889083862, 0.4074763059616089, 2.3068251609802246, 0.008570806123316288, -3.5014407634735107, 0.1181761771440506, 0.10338350385427475, -0.08359355479478836, 0.0745428279042244, 0.07168718427419662, 0.19474110007286072, -0.18653930723667145, -0.008703239262104034, -0.16436587274074554, 0.008475163951516151, 0.05818643793463707, 0.1148080825805664, -0.0146404430270195, 0.14130903780460358, -0.07004042714834213, -0.07259126007556915, -0.07193485647439957, 0.1561882048845291, -0.1037708967924118, -0.08505424857139587, -0.11788424104452133, -0.02076549455523491, -0.05390157550573349, 0.01568114385008812, 0.007832315750420094, -0.1522279530763626, -0.03455847501754761, -0.11080139875411987, -0.049526382237672806, 0.10247504711151123, -0.1257350593805313, 0.03314872458577156, -0.17825110256671906, -0.033581092953681946, 0.051709990948438644, -0.0015021897852420807, -0.13709756731987, -0.04016176983714104, -0.1597995162010193, 0.19407711923122406, -0.29533061385154724, -0.02836567349731922, -0.09202534705400467, 0.05194428190588951, -0.17909935116767883, -0.0787263959646225, -0.08789540827274323, -0.09972371906042099, -0.3702903389930725, -0.22444038093090057, -0.393245130777359, -0.24160142242908478, 0.4288545548915863, 0.9095355868339539, -1.3994536399841309, 0.1041254997253418, -0.14515364170074463, -0.13872568309307098, 0.32822009921073914, 0.40128985047340393, 0.23110079765319824, 0.013566783629357815, 0.09797225892543793, 0.14670036733150482, -0.1992563158273697, 0.023033827543258667, -0.07138340920209885, -0.11761593073606491, -0.12291847169399261, 0.24084576964378357, 0.05392049252986908, -0.9788991212844849, -0.05892879143357277, 0.0387190505862236, -0.128006711602211, -0.13337089121341705, -0.020160453394055367, 0.17158415913581848, 0.7907049059867859, 0.6440308094024658, -0.12235572189092636, -0.144143745303154, -1.0617835521697998, -0.3811827301979065, -0.38613244891166687, -0.06276097148656845, 1.4026087522506714, 1.6855754852294922, 1.683066964149475, 0.2817555367946625, -1.695611596107483, -0.48389801383018494, -5.1422624588012695, -3.9930789470672607, -1.9463180303573608, -4.6762003898620605, -0.6216059923171997, -5.318002700805664, -1.5334546566009521, 1.5967717170715332, -3.089381694793701, -3.2239346504211426, -1.8783546686172485, -1.9791476726531982, -1.989551067352295, -2.758859634399414, -0.3009742796421051, -0.8281821608543396, -0.880773663520813, -1.8349069356918335, -1.526471734046936, -1.9013646841049194, 0.06110519543290138, -1.793364405632019, -0.3698478937149048, 0.47032514214515686, -0.4766908288002014, -1.481472134590149, 0.36378514766693115, 1.0824525356292725, -0.9414381980895996, -1.1176804304122925, -0.9144996404647827, -0.8910530209541321, -1.2857142686843872, -0.09906584769487381, -1.0923926830291748, -0.9732527136802673, -0.002614302560687065, -1.148712396621704, 0.03982345014810562, 0.46762239933013916, 0.17897582054138184, 0.023795591667294502, -1.1997110843658447, -1.058182954788208, 0.1343129724264145, 0.038008205592632294, 0.24716021120548248, -2.3277885913848877, 0.7066056132316589, -0.04173530265688896, -0.2536925673484802, -0.5391313433647156, 0.9800989031791687, 1.0427545309066772, 0.35465317964553833, -1.0036044120788574, 2.1387813091278076, 1.16023588180542, 0.44071075320243835, 0.10145777463912964, -0.48560264706611633, -1.6656851768493652, -2.005952835083008, -1.6018835306167603, -0.35362327098846436, -0.8403108716011047, -5.6993818283081055, -4.973056793212891, -2.6367321014404297, 0.19910159707069397, -1.4412904977798462, -1.5272680521011353, -0.12015276402235031, -1.165101408958435, -0.6846979856491089, -1.0296903848648071, -0.13966700434684753, 0.12266261875629425, -2.064850091934204, -0.8876504302024841, -0.18596825003623962, 0.0004316970007494092, -0.4121033251285553, -0.3569337725639343, -0.11948295682668686, 0.0958978682756424, -0.24796636402606964, 0.3102058470249176, -0.31246238946914673, 0.7109705209732056, -1.364931344985962, 0.4993029832839966, -0.27371105551719666, -0.2719373106956482, 0.9909254312515259]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (1.54, 2.5)}}, 'et3_eta3': {'discriminator': {'threshold': 0.069999167323112482, 'nodes': [100, 10, 1], 'bias': [-0.11204543709754944, -0.0005571477231569588, -0.015970643609762192, -0.09284664690494537, -0.04320921003818512, -0.42669299244880676, 0.03731859102845192, 0.08955458551645279, 0.006626900285482407, -0.11064879596233368, -0.17044442892074585], 'weights': [-0.3349671959877014, -2.1922991275787354, 0.6381950974464417, 1.8786818981170654, -0.09619683027267456, 0.9831786155700684, -0.10270281136035919, -0.36504659056663513, -1.1769630908966064, -1.2381079196929932, -0.36275455355644226, 0.7514060735702515, 0.5506219863891602, -0.09184645116329193, 2.3116815090179443, 1.989417552947998, 1.057970643043518, 3.2463321685791016, 2.4086410999298096, 0.3519798815250397, 1.2988545894622803, 0.8126804232597351, 1.498828411102295, 2.0563762187957764, 2.1049644947052, 3.1309635639190674, 2.0919837951660156, 0.7062703371047974, 0.08555298298597336, 1.629734992980957, -0.3702670633792877, 1.9434852600097656, 0.21980874240398407, 1.7597917318344116, 1.0452804565429688, 0.9453401565551758, 1.2282007932662964, 1.4760781526565552, 0.8298380970954895, 1.5435173511505127, -0.1920449435710907, 1.6701442003250122, 1.0551064014434814, -0.09667908400297165, 0.7571905851364136, 0.8571940660476685, 0.9294390678405762, 0.03769263997673988, -0.8469163775444031, 1.508821964263916, 0.47700855135917664, -0.25957950949668884, 0.47566965222358704, 0.49819257855415344, 1.2151286602020264, 0.490138441324234, -0.12011615931987762, 1.0474594831466675, 0.09285878390073776, 0.7700443267822266, -1.4918872117996216, 0.6713210940361023, 1.1657558679580688, -0.6743438839912415, -0.0705714076757431, 0.9142141938209534, 0.26151204109191895, -0.18699178099632263, -1.1757621765136719, -1.0924283266067505, 0.1508558839559555, 1.410093069076538, -0.5074962973594666, -0.18407458066940308, 0.7891706228256226, 1.6649242639541626, 1.7187005281448364, 1.5447419881820679, 1.1684495210647583, 0.7184458374977112, 0.845126748085022, 2.77567720413208, 4.662013530731201, 1.4182112216949463, 1.439104437828064, 1.5463923215866089, 0.3641999661922455, 0.902549147605896, 0.052764780819416046, 0.8090866208076477, 0.3928539454936981, -0.27104443311691284, 2.8212780952453613, 1.0455013513565063, 0.30424994230270386, 0.5833691954612732, -0.2732866704463959, 0.09257468581199646, -0.23206567764282227, -0.18406745791435242, 0.9383934736251831, 1.5834602117538452, -0.5277302861213684, -1.879165768623352, 0.14342409372329712, -1.0293627977371216, -0.12693572044372559, 0.4241839647293091, 1.1655879020690918, 1.1686946153640747, 0.5826362371444702, -0.6428468227386475, -0.5362977385520935, 0.09630941599607468, -2.2365779876708984, -2.0999398231506348, -1.0480588674545288, -3.2166411876678467, -2.4551191329956055, -0.20400846004486084, -1.4480869770050049, -0.8371495604515076, -1.06124746799469, -2.1287355422973633, -1.9415154457092285, -3.3048739433288574, -2.0947980880737305, -0.7278380393981934, 0.06465206295251846, -1.656935453414917, 0.2720947265625, -1.935396432876587, -0.17796848714351654, -1.7872473001480103, -1.163591742515564, -1.1122797727584839, -1.0570887327194214, -1.579468846321106, -0.6930827498435974, -1.710487723350525, 0.32126957178115845, -1.7568295001983643, -1.0130951404571533, -0.12102624028921127, -0.5092678666114807, -0.75847327709198, -0.6236388087272644, 0.15296846628189087, 0.7252858877182007, -1.6209874153137207, -0.3830263018608093, 0.5887121558189392, -0.5939456224441528, -0.5343878269195557, -1.0809246301651, -0.46315184235572815, 0.15594540536403656, -1.148966670036316, -0.10574719309806824, -0.6333145499229431, 1.6077347993850708, -0.7640979290008545, -0.7465420365333557, 0.5874470472335815, 0.19488239288330078, -0.8877139687538147, -0.013103763572871685, 0.23783902823925018, 1.0805784463882446, 1.4592550992965698, -0.16654767096042633, -0.6239666938781738, 0.511305034160614, 0.1920689344406128, -0.8151097297668457, -1.4758692979812622, -1.5936031341552734, -1.6363632678985596, -0.6946160197257996, -0.7333278059959412, -1.1497833728790283, -2.795340061187744, -4.684925079345703, -1.5059123039245605, -1.4766325950622559, -1.4417542219161987, -0.1884889304637909, -0.8865324854850769, -0.3097880780696869, -0.8902643322944641, -0.21785514056682587, 0.21168121695518494, -2.6762378215789795, -1.0289398431777954, -0.2538539469242096, -0.6335757374763489, 0.5555450916290283, -0.06977073848247528, 0.21438732743263245, 0.23139555752277374, 0.9777159690856934, 1.612128496170044, -0.5588719248771667, -0.8065817952156067, 0.4220631420612335, -1.0356889963150024, -0.03361280634999275, 0.4455021023750305, 0.9932084679603577, 1.2335463762283325, 0.6208199858665466, -0.564558744430542, -0.4566357731819153, 0.058975569903850555, -2.2251389026641846, -2.0190224647521973, -1.1098880767822266, -3.184762716293335, -2.6348910331726074, -0.384797066450119, -1.3955844640731812, -0.9479634165763855, -0.9920554161071777, -1.999262809753418, -3.5285394191741943, -3.27225399017334, -2.1000726222991943, -0.6026673316955566, 0.028924034908413887, -1.5391629934310913, 0.2134353071451187, -1.943014144897461, -0.04259577393531799, -1.8658264875411987, -1.031092882156372, -1.06613290309906, -1.1307796239852905, -1.591119408607483, -0.6144086718559265, -1.7190794944763184, 0.3857021927833557, -1.6511859893798828, -1.012676477432251, -0.09098929911851883, -0.45217078924179077, -0.7354037761688232, -0.50146484375, 0.1594591736793518, 0.7690284848213196, -1.440970540046692, -0.5685290694236755, 0.6981239914894104, -0.5359545350074768, -0.5994396805763245, -1.0814701318740845, -0.5588353276252747, 0.07252316176891327, -1.1659940481185913, -0.06611713767051697, -0.7412510514259338, 1.471016526222229, -0.5456522107124329, -0.850879430770874, 0.574748158454895, 0.09730437397956848, -0.8707695603370667, 0.0315660685300827, 0.30401718616485596, 1.097086787223816, 1.3451193571090698, -0.12018384039402008, -0.7805120944976807, 0.5140247941017151, 0.25006887316703796, -0.9304066300392151, -1.5619750022888184, -1.5237483978271484, -1.6407049894332886, -0.8769919276237488, -0.8572136759757996, -0.9628891348838806, -2.9257588386535645, -4.712568759918213, -1.3472496271133423, -1.4971189498901367, -1.4587372541427612, -0.2655378580093384, -0.7529715895652771, -0.35500410199165344, -0.9140278697013855, -0.18101373314857483, 0.26722192764282227, -2.7438910007476807, -1.1075698137283325, -0.1997983455657959, -0.5613659024238586, 0.504993736743927, -0.2085171639919281, 0.11533959954977036, 0.43482542037963867, 0.9250600337982178, 1.032142996788025, -0.5811259150505066, -0.8066530227661133, 0.29665932059288025, -0.992992103099823, 0.031951356679201126, 0.38190239667892456, 1.092992901802063, 1.1638330221176147, 0.24968662858009338, -3.3411080837249756, -0.6950407028198242, -0.041062142699956894, -2.2832560539245605, -2.1367578506469727, -1.0457638502120972, -3.114353656768799, -2.548537015914917, -2.223914623260498, -1.2886624336242676, -1.0534002780914307, -1.2133017778396606, -2.229454755783081, -3.579439163208008, -3.2545042037963867, -2.124349594116211, -0.5482796430587769, -0.1045973151922226, -1.6006287336349487, 0.2554238438606262, -1.8359912633895874, -0.053628429770469666, -1.8421820402145386, -1.172943353652954, -0.986102819442749, -1.064279556274414, -1.4185982942581177, -0.7591738700866699, -1.8016924858093262, 0.24099306762218475, -1.6632071733474731, -1.1342915296554565, -0.07686378061771393, -0.3154155910015106, -0.914932131767273, -0.6840060949325562, 0.11218519508838654, -0.23195785284042358, -1.4576090574264526, -0.6024360060691833, 1.6593729257583618, -0.4088800549507141, -0.44224175810813904, -3.02765154838562, -0.48232632875442505, 0.24770323932170868, -1.1361078023910522, -0.1834220141172409, -0.655113160610199, 1.4393014907836914, -0.6208243370056152, -0.9065263867378235, 0.7809772491455078, 0.045653194189071655, -0.8194165229797363, 0.1566622406244278, 0.31902164220809937, 1.0721532106399536, 1.3253062963485718, 0.09547056257724762, -0.8403527736663818, 0.3677157163619995, 0.5547420978546143, -0.8370879292488098, -1.5485479831695557, -1.643640160560608, -1.4016422033309937, -0.81944340467453, -0.821969211101532, -0.9941686391830444, -2.9019815921783447, -4.655714511871338, -1.2466386556625366, -1.5649137496948242, -1.5965360403060913, -0.33771687746047974, -0.8944688439369202, -0.21392667293548584, -0.8546475768089294, -0.2764699459075928, 0.12774713337421417, -2.7598276138305664, -0.9695761203765869, -0.13289405405521393, -0.6288184523582458, 0.445507675409317, -0.016699491068720818, 0.06278710812330246, 0.3505435585975647, -0.9003103971481323, -1.2974884510040283, 0.5560373663902283, 1.8097264766693115, -0.009194432757794857, 0.9247484803199768, 0.12704825401306152, -0.3870401680469513, -1.0359165668487549, -1.261805772781372, -0.597606360912323, 0.6559993028640747, 0.7225520610809326, -0.1047891154885292, 2.137369394302368, 1.961359977722168, 1.060703158378601, 3.1251256465911865, 2.420262336730957, 0.39078840613365173, 1.2243841886520386, 0.8601310849189758, 1.0000430345535278, 2.211505651473999, 3.562204122543335, 3.207707405090332, 2.0939199924468994, 0.7570949792861938, 0.2105238288640976, 1.7228022813796997, -0.4355507791042328, 1.7233307361602783, 0.18976189196109772, 1.8840469121932983, 1.1140397787094116, 1.0263358354568481, 1.0435765981674194, 1.5243266820907593, 0.6385778784751892, 1.8323403596878052, -0.47576141357421875, 1.6927173137664795, 0.9161306023597717, 0.11301440745592117, 0.44237184524536133, 0.7942527532577515, 0.47103163599967957, 0.024731812998652458, -0.7808135747909546, 1.4392311573028564, 0.5155419111251831, -0.6379481554031372, 0.4408721923828125, 0.611409604549408, 1.110713243484497, 0.4919058382511139, -0.18207226693630219, 1.1835707426071167, 0.15805809199810028, 0.5833492875099182, -1.512954592704773, 0.6586411595344543, 0.7164667844772339, -0.7128362655639648, -0.20924866199493408, 0.8137912750244141, 0.033716365694999695, -0.26000142097473145, -1.2153412103652954, -1.4988399744033813, 0.03428491950035095, 0.5666656494140625, -0.374586284160614, -0.18932901322841644, 0.9817655086517334, 1.5315333604812622, 1.637812852859497, 1.4184434413909912, 0.6960226893424988, 0.7163098454475403, 0.9820674061775208, 2.9349727630615234, 4.626328945159912, 1.4170825481414795, 1.4613254070281982, 1.6449171304702759, 0.3603718876838684, 0.8508049249649048, 0.3156041204929352, 0.8826151490211487, 0.36411744356155396, -0.3430602252483368, 2.794981002807617, 1.1508969068527222, 0.2290416955947876, 0.5060122609138489, -0.5132824182510376, 0.05987079069018364, -0.13215909898281097, -0.31820088624954224, 608.93505859375, 267.85546875, -6.378628730773926, 0.33263882994651794, -125.64762115478516, -39.93284606933594, -0.04853648319840431, 59.696353912353516, -0.2918473184108734, -0.33305034041404724, 0.3500538766384125, -19.91232681274414, 0.2854350209236145, -13.71103286743164, 1.9322808980941772, 1.3798667192459106, 1.3910174369812012, -23.507102966308594, -21.908449172973633, 0.10858732461929321, -137.61627197265625, -15.962505340576172, -206.61102294921875, -92.18582916259766, 1.5461252927780151, 0.4754636287689209, 0.37441882491111755, -0.005579917225986719, -67.76272583007812, 0.1548139601945877, -7.715848922729492, 0.3745519518852234, -0.018931357190012932, 0.3777935802936554, 0.25089144706726074, -138.63917541503906, -3.0718772411346436, 0.22783444821834564, 31.658987045288086, 0.37444379925727844, -0.26991599798202515, 0.26833248138427734, 0.01229032315313816, 44.543663024902344, -132.90029907226562, 90.19137573242188, -0.06142802536487579, -0.06738584488630295, -0.0855005756020546, 0.29129257798194885, -183.17877197265625, 84.56061553955078, -0.044022656977176666, 0.1171611100435257, 0.2519994080066681, -0.0471591092646122, -0.1458677351474762, 0.17735454440116882, -0.047444503754377365, 30.804187774658203, -0.3544883131980896, -36.42132568359375, -0.11568495631217957, -0.2802271842956543, 0.008129852823913097, -0.036577217280864716, 0.07157901674509048, -0.21903002262115479, -0.3106585443019867, -0.46044740080833435, 0.04806327819824219, 0.09376034140586853, -0.07303282618522644, -0.897283136844635, 0.5713763236999512, 0.1456032544374466, 0.3136045038700104, 0.3043023347854614, -0.013695154339075089, -0.03506314009428024, -64.56201171875, 16.288570404052734, -7.777749061584473, -20.72641372680664, 0.24397990107536316, 0.299025297164917, -22.395353317260742, 69.9798355102539, 145.16908264160156, 14.923798561096191, 1.1042617559432983, 0.030481893569231033, 0.5635495781898499, 0.09019069373607635, -0.13287849724292755, 691.88671875, -0.20705914497375488, -0.05275285243988037, -0.45272040367126465, 14709.2373046875, -0.8642759323120117, -1.5680649280548096, 0.4369680881500244, 0.8344177007675171, -0.22995835542678833, 0.9861013889312744, -0.08804081380367279, -0.363717257976532, -0.9978976845741272, -1.3513156175613403, -0.5989676713943481, 3.4440152645111084, 0.5986332893371582, 0.10821884870529175, 2.1151418685913086, 2.0682451725006104, 1.205670952796936, 3.087080955505371, 2.612340211868286, 2.0782809257507324, 1.281671404838562, 0.9900065660476685, 1.2912274599075317, 2.1591336727142334, 5.9241461753845215, 3.1011483669281006, 2.2857420444488525, 0.5820815563201904, -0.09678821265697479, 1.7206323146820068, -0.22484436631202698, 1.740064263343811, 0.019562192261219025, 1.7318657636642456, 1.1044847965240479, 0.9318149089813232, 1.195791244506836, 1.5427871942520142, 0.8101403117179871, 1.7795466184616089, -0.3044998347759247, 1.5635349750518799, 0.6233676075935364, 0.056803666055202484, 0.5316118001937866, 0.7678189277648926, 0.5163013339042664, 0.015180910006165504, -0.8095941543579102, 1.4333232641220093, 0.5839280486106873, -5.210971355438232, 0.5699249505996704, 0.49862805008888245, 3.078136682510376, 0.5322481393814087, -0.09594621509313583, 1.0992584228515625, 0.2679940462112427, 0.6500742435455322, -1.6026256084442139, 0.7362425923347473, 0.8052639961242676, -0.7317297458648682, -0.2984599769115448, 0.8984277844429016, -0.07464109361171722, -0.4400843381881714, -1.1176667213439941, -1.441033959388733, -0.22985532879829407, 0.5925242900848389, -0.43359464406967163, -0.11433926969766617, 0.9569036364555359, 1.457709550857544, 1.7515873908996582, 1.433363914489746, 0.6989014744758606, 0.8003503680229187, 1.001442790031433, 2.7631659507751465, 4.498702049255371, 1.1662336587905884, 1.482236385345459, 1.496585488319397, 0.3069888949394226, 0.7148589491844177, 0.32581207156181335, 0.5760663151741028, 0.32331857085227966, -0.18148556351661682, 2.3094043731689453, 1.1810826063156128, 0.3771262466907501, 0.22924940288066864, -0.4037111699581146, 0.09422307461500168, -0.24897414445877075, -0.35402294993400574, 0.8310986757278442, 1.1903191804885864, -0.5627408623695374, -1.6879571676254272, 0.01551483292132616, -0.9278779029846191, 0.09774628281593323, 0.42447859048843384, 1.156247854232788, 1.2236217260360718, 0.6438049674034119, -0.6681567430496216, -0.6663642525672913, 0.07469262927770615, -2.231431245803833, -1.9983638525009155, -1.122272253036499, -3.1514785289764404, -2.5910122394561768, -0.4037865102291107, -1.4306867122650146, -0.839373767375946, -1.0860460996627808, -2.2160749435424805, -1.8749535083770752, -3.1245431900024414, -2.0521647930145264, -0.6706720590591431, 0.22595834732055664, -1.6893175840377808, 0.24633535742759705, -1.890685796737671, -0.022140325978398323, -1.8386683464050293, -1.1632786989212036, -1.0937086343765259, -1.2426129579544067, -1.5900801420211792, -0.6648640036582947, -1.5876110792160034, 0.3754720389842987, -1.676450490951538, -1.0069875717163086, 0.08419283479452133, -0.4598500728607178, -0.7378610372543335, -0.5521301627159119, 0.1375296711921692, 0.8072067499160767, -1.4497714042663574, -0.6075873374938965, 0.6973845362663269, -0.43430352210998535, -0.5481491088867188, -1.0502358675003052, -0.47255739569664, 0.08718898892402649, -1.0849957466125488, -0.2935899794101715, -0.7763735055923462, 1.4037054777145386, -0.7420870065689087, -0.8355369567871094, 0.7748615741729736, 0.174818754196167, -0.7407917976379395, -0.04272041469812393, 0.26785755157470703, 1.2262333631515503, 1.467199683189392, -0.10513440519571304, -0.659709095954895, 0.3640255331993103, 0.023974575102329254, -0.8812496066093445, -1.5644217729568481, -1.7504239082336426, -1.640337586402893, -0.8079192042350769, -0.7988794445991516, -0.9731906056404114, -2.8976058959960938, -4.65114688873291, -1.4053499698638916, -1.3570537567138672, -1.6129049062728882, -0.332871675491333, -0.8450609445571899, -0.4263191819190979, -0.9869986772537231, -0.31008872389793396, 0.12673716247081757, -2.741502285003662, -0.9746290445327759, -0.142032653093338, -0.4832998812198639, 0.5212404727935791, -0.223173588514328, 0.15907761454582214, 0.33340707421302795, -0.9724976420402527, -1.2781873941421509, 0.37440311908721924, 0.7573132514953613, -0.32833990454673767, 0.971528172492981, -0.08501695096492767, -0.3965226113796234, -0.9734662175178528, -1.2060142755508423, -0.5361012816429138, 3.395104169845581, 0.5373645424842834, 0.1377948373556137, 2.158454656600952, 1.9997434616088867, 1.0596023797988892, 3.205472230911255, 2.4920666217803955, 2.141176223754883, 1.4665292501449585, 0.9304757714271545, 1.32386314868927, 2.2253828048706055, 5.831193447113037, 3.267540216445923, 2.1621320247650146, 0.6199184656143188, -0.17313796281814575, 1.5323913097381592, -0.39907726645469666, 1.804374098777771, 0.024435047060251236, 1.7440522909164429, 1.0922458171844482, 1.0869505405426025, 1.1939269304275513, 1.534067988395691, 0.683820903301239, 1.8016107082366943, -0.416195809841156, 1.7490507364273071, 0.9389775395393372, -0.0066984849981963634, 0.4977242052555084, 0.7842644453048706, 0.633277416229248, -0.1646454632282257, -0.9088186621665955, 1.4295293092727661, 0.46750128269195557, -5.374321460723877, 0.5071008801460266, 0.4143255054950714, 3.2297451496124268, 0.6261566877365112, -0.013353029265999794, 1.126759648323059, 0.15075580775737762, 0.6558187007904053, -1.5166150331497192, 0.6937483549118042, 0.8758693337440491, -0.6381175518035889, -0.07058162242174149, 0.7078053951263428, -0.07453806698322296, -0.21457242965698242, -1.0680290460586548, -1.3182734251022339, -0.2403300255537033, 0.7794545888900757, -0.2753189206123352, -0.15181441605091095, 0.8313480019569397, 1.574169635772705, 1.7310713529586792, 1.424288272857666, 0.7929701805114746, 0.9295756220817566, 0.9890704154968262, 2.989780902862549, 4.713570594787598, 1.3400217294692993, 1.3755748271942139, 1.6142131090164185, 0.3256987929344177, 0.6902822852134705, 0.22198761999607086, 0.47703543305397034, 0.3049871623516083, -0.19674327969551086, 2.4170212745666504, 0.9843716025352478, 0.2065003216266632, 0.6318442225456238, -0.5420563220977783, 0.17267575860023499, -0.2044893205165863, -0.19374431669712067, 0.8663700819015503, 1.299919843673706, -0.5593047142028809, -0.7321540117263794, 0.2824028432369232, -0.8836308717727661, 0.0855402797460556, 0.3843826651573181, 1.0332286357879639, 1.3348251581192017, 0.34375205636024475, -3.4945168495178223, -0.5923031568527222, -0.051170870661735535, -2.2332658767700195, -2.0607597827911377, -1.237189531326294, -3.1831607818603516, -2.5058953762054443, -2.218125343322754, -1.2196165323257446, -1.02603018283844, -1.3601137399673462, -2.230297565460205, -3.645559787750244, -3.1362709999084473, -2.1793227195739746, -0.7006319761276245, -0.027840934693813324, -1.6596485376358032, 0.4331428110599518, -1.8314865827560425, -0.14340093731880188, -1.9081026315689087, -1.1075129508972168, -1.0763660669326782, -1.0072771310806274, -1.5621119737625122, -0.5846183896064758, -1.817975640296936, 0.1856682002544403, -1.6571216583251953, -1.04145348072052, 0.0024020662531256676, -0.30587002635002136, -0.7585331201553345, -0.7410571575164795, -0.08389157056808472, -0.15793202817440033, -1.4584550857543945, -0.5301848649978638, 1.5399112701416016, -0.3687847852706909, -0.4999660551548004, -3.134387731552124, -0.5219212174415588, 0.04568237438797951, -1.0352834463119507, -0.1128348708152771, -0.7939441204071045, 1.4675416946411133, -0.6350466012954712, -0.7783241868019104, 0.7330111265182495, 0.22803419828414917, -0.8883169293403625, 0.004662253428250551, 0.2958712577819824, 1.12227201461792, 1.3343003988265991, 0.3185693621635437, -0.763487696647644, 0.3963637948036194, 0.6081469058990479, -0.8932719230651855, -1.5239202976226807, -1.6963834762573242, -1.501311182975769, -0.7283564209938049, -0.7871091961860657, -1.1082472801208496, -3.001173734664917, -4.753879070281982, -1.334190011024475, -1.459304690361023, -1.5389031171798706, -0.20233076810836792, -0.7283373475074768, -0.3180025517940521, -0.9112094044685364, -0.21841645240783691, 0.31444185972213745, -2.8441812992095947, -1.063040852546692, -0.25670257210731506, -0.5172252058982849, 0.5456728935241699, -0.029964270070195198, 0.1376665085554123, 0.23829707503318787, -0.5014091730117798, 2.2362592220306396, 1.3533912897109985, 1.1992579698562622, -0.824650764465332, -0.4929713010787964, -1.4007679224014282, 0.8023108243942261, -1.609825611114502, 1.901110053062439]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (40, 50), 'etaBin': (1.54, 2.5)}}, 'et0_eta2': {'discriminator': {'threshold': 0.1299991101026535, 'nodes': [100, 7, 1], 'bias': [-0.06348874419927597, 0.03623969852924347, -0.1288398653268814, -0.12441787868738174, 0.1003570482134819, -0.005418633110821247, 0.029942257329821587, -0.20454871654510498], 'weights': [-0.6994321942329407, 0.10208365321159363, 1.681780219078064, 0.8598272204399109, -0.3105170428752899, -0.8199452757835388, -0.24872657656669617, 0.24371692538261414, 1.2890616655349731, -3.030609607696533, -3.005108118057251, -2.7385737895965576, -0.9483087658882141, -0.10872109979391098, -1.2035022974014282, -1.1545008420944214, 5.109705924987793, -0.9131451845169067, -1.0364693403244019, 0.05470660328865051, 2.2213242053985596, 0.0609315000474453, -0.06487470865249634, 0.5144542455673218, 3.66133189201355, 0.13849909603595734, -2.2307546138763428, 1.0401767492294312, 1.1351555585861206, 1.4495421648025513, 1.2791365385055542, 0.6287277340888977, -0.733975350856781, 2.002916097640991, 1.6680200099945068, 0.002605465240776539, 2.368330240249634, 0.5400947332382202, 0.9055526256561279, -0.3188956081867218, -3.7293615341186523, 1.982121467590332, -0.7138312458992004, 1.2670035362243652, 1.3463627099990845, 1.3707585334777832, 0.4937777519226074, 0.9307859539985657, 1.6330000162124634, 0.42295849323272705, 1.4393194913864136, -3.489879608154297, -21.689550399780273, 0.7888513207435608, 0.6065999865531921, 1.1640162467956543, 1.1659111976623535, 1.1224546432495117, 0.8181604743003845, 0.34476009011268616, 0.7292398810386658, 0.307730108499527, 0.5083118081092834, -0.1468956023454666, 0.49803051352500916, 1.027100682258606, -0.023049376904964447, 0.3076647222042084, 0.44340968132019043, 0.46747466921806335, 1.4015519618988037, 1.0442742109298706, 0.017169183120131493, -0.5910464525222778, 1.9767276048660278, 0.9590660333633423, 1.0071029663085938, 0.6182443499565125, 0.6004731059074402, 0.40733572840690613, -4.144710540771484, -0.07095064222812653, -0.13940078020095825, 0.3004467487335205, 0.7743308544158936, -4.6586480140686035, 0.9079718589782715, 0.9051303267478943, -0.9884213209152222, 0.25647568702697754, 0.001450522686354816, -0.15312232077121735, 1.7478258609771729, -0.8393897414207458, 0.7932825088500977, -0.06429167836904526, -0.04977763071656227, -0.06843768805265427, 0.1047542616724968, -0.8194230198860168, -0.6115278601646423, 0.09765119850635529, 1.3214211463928223, 0.866887092590332, -0.4110688269138336, -0.8353613018989563, -0.3266078233718872, 0.15197445452213287, 1.2481001615524292, -3.0475668907165527, -2.9632232189178467, -2.6965742111206055, -0.8962796330451965, -0.10409792512655258, -1.1161562204360962, -1.1503418684005737, 5.042563438415527, -0.8737424612045288, -1.0692106485366821, 0.029309913516044617, 2.6510682106018066, -0.08167729526758194, -0.027943413704633713, 0.5984232425689697, 3.4828624725341797, 0.08236321806907654, -2.2207534313201904, 0.9744399189949036, 1.238242268562317, 1.58805251121521, 1.4116514921188354, 0.4440762400627136, -0.5017024278640747, 2.1402831077575684, 1.7400015592575073, 0.01887228712439537, 2.24285888671875, 0.5093076229095459, 0.841781497001648, -0.4968641400337219, 0.28141161799430847, 1.957116723060608, 0.6013190746307373, 1.2706714868545532, 1.385116457939148, 1.5819119215011597, 0.6709210872650146, 0.8653045296669006, 3.265524387359619, 0.363518089056015, 1.365139126777649, -0.7787774801254272, -2.7768466472625732, 0.743328869342804, 0.6601492762565613, 1.366594910621643, 1.0569247007369995, 1.1993486881256104, 0.8746750354766846, 0.35751205682754517, 0.6915795803070068, 0.1977250874042511, 0.43816831707954407, -0.3167257308959961, 0.5370357632637024, 0.9942529797554016, 0.13064152002334595, 0.16605283319950104, 0.3902914822101593, 0.5092731714248657, 1.3726606369018555, 0.9422245621681213, -0.13885952532291412, -0.49613067507743835, 2.1251988410949707, 0.9648995995521545, 1.0657436847686768, 0.8174012303352356, 0.7892894148826599, 0.5329540371894836, -1.6574095487594604, 0.06622839719057083, 0.3421139717102051, 0.42999839782714844, 0.843985378742218, -0.9439149498939514, 0.9481310844421387, 0.840822160243988, -0.9870644211769104, 0.2610977292060852, 0.1828286200761795, 0.0447382889688015, 1.8897302150726318, -0.7401317954063416, 0.8096083402633667, -0.13080072402954102, 0.028338264673948288, 0.053457845002412796, 0.25215551257133484, -0.7827207446098328, 0.2212507575750351, -0.14484000205993652, -0.384246289730072, -0.25710728764533997, 0.46749913692474365, 0.5572332143783569, 0.45652493834495544, 0.6051268577575684, -1.6051222085952759, 1.128701090812683, 2.6701321601867676, 1.1636186838150024, 0.2001228779554367, 0.22440995275974274, 0.2826562225818634, 0.27844810485839844, -1.3489367961883545, 0.5463594794273376, 0.33576756715774536, -0.0998910591006279, -0.5289080739021301, -0.19072000682353973, -0.2870570719242096, -1.556277871131897, -1.54615318775177, -0.8130171298980713, 4.524102687835693, -0.1396736055612564, -0.49219879508018494, -0.5249353647232056, -0.37386825680732727, 0.035871148109436035, 1.4547717571258545, -0.6416154503822327, -0.6378124356269836, -0.15821164846420288, -0.657520592212677, -0.14465390145778656, -0.14651301503181458, 0.3411875367164612, 1.6198832988739014, -0.657878577709198, -0.15671813488006592, -0.43762272596359253, -0.48266008496284485, -0.5495358109474182, -0.11727019399404526, -0.20478028059005737, -1.4401438236236572, -0.09428220242261887, -0.5240834355354309, 1.7509093284606934, 1.4686453342437744, -0.26726600527763367, -0.22691361606121063, -0.36868810653686523, -0.24493809044361115, -0.36019057035446167, -0.171264186501503, 0.18464073538780212, -0.18023346364498138, 0.07953140139579773, -0.10153011977672577, 0.15828613936901093, -0.03566069155931473, -0.09460435062646866, 0.11431301385164261, 0.05293290689587593, 0.07226324826478958, -0.12114517390727997, -0.3714432120323181, -0.30009016394615173, -0.1217225044965744, -0.0045923818834125996, -3.457169532775879, -0.24030056595802307, -0.11426949501037598, -0.2163078337907791, -0.21587233245372772, -0.16124066710472107, 0.5443711280822754, -0.14228269457817078, 0.12431485950946808, 0.06580327451229095, -0.3655425012111664, 2.051795482635498, -0.3123963475227356, -0.11518420279026031, 0.437244713306427, -1.0017818212509155, 0.012854296714067459, 1.1998306512832642, -0.388393372297287, 0.5600149631500244, -0.20035132765769958, -0.13071319460868835, -0.0399421788752079, -0.12273726612329483, -0.16315199434757233, 0.22284507751464844, -0.6074252724647522, -0.033254474401474, 1.7734354734420776, 0.9066227674484253, -0.43184366822242737, -0.7900717854499817, -0.1781877875328064, 0.11263395845890045, 1.331699013710022, -2.854299306869507, -2.904628038406372, -2.784907341003418, -0.8464739918708801, -0.19670042395591736, -1.2164088487625122, -1.1727181673049927, 5.151409149169922, -0.842821478843689, -1.0274747610092163, -0.1730169951915741, 2.069715738296509, 0.043851688504219055, 0.070670947432518, 0.6500223875045776, 3.5279433727264404, 0.307046115398407, -2.330390214920044, 0.9481484293937683, 1.2282432317733765, 1.4820579290390015, 1.4465502500534058, 0.8016788363456726, -0.5898081660270691, 2.0149948596954346, 1.6407771110534668, 0.013302115723490715, 2.398138999938965, 0.3364012539386749, 0.7973099946975708, -0.4934387803077698, -3.5097553730010986, 1.9622154235839844, -0.6902076601982117, 1.3413820266723633, 1.250186800956726, 1.396918535232544, 0.5621547698974609, 0.8888913989067078, 1.4824937582015991, 0.48818662762641907, 1.4166909456253052, -3.536811351776123, -24.92084503173828, 0.654778778553009, 0.44824737310409546, 1.33790922164917, 0.9533734321594238, 1.1114494800567627, 0.6530362963676453, 0.47235310077667236, 0.7386127710342407, 0.29787588119506836, 0.547225296497345, -0.24037419259548187, 0.512398898601532, 1.0412685871124268, -0.09365858882665634, 0.10470365732908249, 0.26602765917778015, 0.5356124639511108, 1.271186351776123, 0.8395084738731384, 0.07754461467266083, -0.4474998116493225, 2.0934016704559326, 0.91155606508255, 0.4728260040283203, 0.5563065409660339, 0.7580582499504089, 0.42653581500053406, -4.153563976287842, -0.18298356235027313, -0.17927567660808563, 0.3640288710594177, 0.7750224471092224, -4.609886169433594, 0.8984575271606445, 0.6813861727714539, -0.9628022909164429, 0.32882440090179443, 0.15228895843029022, -0.10598684102296829, 1.8224663734436035, -0.8819865584373474, 0.7348246574401855, -0.2222723513841629, -0.06606271862983704, 0.04948493093252182, -0.00904881302267313, -0.7661005854606628, 0.5607529282569885, -0.05159216746687889, -1.792655110359192, -0.9723911285400391, 0.2107294648885727, 0.8136662840843201, 0.16430503129959106, -0.2579205632209778, -1.2882338762283325, 2.911761999130249, 2.8237626552581787, 2.8000264167785645, 0.9412887096405029, 0.22695930302143097, 1.2663750648498535, 1.353284239768982, -5.121635913848877, 1.0401403903961182, 1.0674011707305908, 0.18953466415405273, -2.149789810180664, 0.10647141188383102, 0.03580387309193611, -0.5147081017494202, -3.628361701965332, -0.12231002002954483, 2.3675930500030518, -1.1145216226577759, -1.1123000383377075, -1.5907338857650757, -1.481510043144226, -0.7424841523170471, 0.6412054896354675, -2.0590980052948, -1.6372747421264648, 0.0619027242064476, -2.4287240505218506, -0.3367054760456085, -0.8573153018951416, 0.5163951516151428, 3.556837797164917, -1.858163833618164, 0.7149078249931335, -1.1894092559814453, -1.3607982397079468, -1.5640636682510376, -0.49976587295532227, -0.9596536755561829, -1.6972423791885376, -0.39594757556915283, -1.4810117483139038, 3.486910820007324, 2.8940298557281494, -0.857546865940094, -0.6077556014060974, -1.1933507919311523, -0.9613820910453796, -1.2438371181488037, -0.6647740006446838, -0.3744419515132904, -0.7347481846809387, -0.09965112060308456, -0.6350415945053101, 0.3057122528553009, -0.6031996607780457, -0.8806594610214233, -0.01072041504085064, -0.21616210043430328, -0.35064586997032166, -0.45507487654685974, -1.3696155548095703, -0.8669682145118713, -0.13787759840488434, 0.6219918727874756, -1.978965163230896, -0.8375784754753113, -0.4755556583404541, -0.6244028210639954, -0.7649192214012146, -0.6339374780654907, 4.167630672454834, 0.12187815457582474, 0.1668955683708191, -0.34224599599838257, -0.7939738631248474, 4.682919979095459, -0.9770385026931763, -0.7183697819709778, 0.8933781385421753, -0.1742231696844101, -0.10143762826919556, 0.05050342157483101, -1.7145602703094482, 0.8550977110862732, -0.73504638671875, -0.0055467355996370316, -0.04514014720916748, 0.09083645790815353, -0.08515525609254837, 1.0986518859863281, -0.5119187235832214, 0.05760094150900841, 1.3171058893203735, 0.8399652242660522, -0.33957669138908386, -0.8359718918800354, -0.18823641538619995, 0.05371649190783501, 1.2638932466506958, -2.888981580734253, -3.0126914978027344, -2.6422805786132812, -0.9336118102073669, -0.1310640275478363, -1.1350458860397339, -1.2499178647994995, 5.139877796173096, -0.9532581567764282, -1.0571777820587158, -0.015751279890537262, 2.4440970420837402, 0.09489630907773972, 0.0012970769312232733, 0.687771201133728, 3.577953338623047, 0.1779686063528061, -2.3735105991363525, 0.9543430209159851, 1.3185936212539673, 1.6423382759094238, 1.2892314195632935, 0.3614344298839569, -0.4948037266731262, 2.021239995956421, 1.642642617225647, -0.1457976996898651, 2.3662660121917725, 0.55765700340271, 0.821914553642273, -0.35032719373703003, 0.18251673877239227, 1.893751621246338, 0.559088945388794, 1.1893036365509033, 1.2400177717208862, 1.5134555101394653, 0.5754262208938599, 0.8589807152748108, 3.110215663909912, 0.47953107953071594, 1.5568150281906128, -0.8979969024658203, -2.721264362335205, 0.7211843132972717, 0.6376146674156189, 1.2742069959640503, 1.129908561706543, 1.2671172618865967, 0.741439163684845, 0.4965633749961853, 0.8062971830368042, 0.23679718375205994, 0.5215432643890381, -0.20244623720645905, 0.44972795248031616, 0.98760586977005, 0.08758813142776489, 0.20948883891105652, 0.42465686798095703, 0.6894136667251587, 1.3195726871490479, 0.9331247210502625, -0.02805432118475437, -0.598785400390625, 2.0426430702209473, 0.9867404103279114, 1.137693166732788, 0.8048722147941589, 0.8114951252937317, 0.664736270904541, -1.5552059412002563, 0.02622155286371708, 0.13953495025634766, 0.344723641872406, 0.7831734418869019, -0.9259676337242126, 1.013528823852539, 0.8709443211555481, -0.9086853265762329, 0.23759059607982635, 0.12343567609786987, -0.005225889850407839, 1.6622343063354492, -0.7085463404655457, 0.6308629512786865, -0.2025437355041504, 0.04593987762928009, 0.07471984624862671, 0.2311854511499405, -1.021540641784668, 0.007167748175561428, 0.25892382860183716, -0.06918046623468399, -0.00621141167357564, -0.22361071407794952, -0.26106134057044983, -0.5436748266220093, -0.8577413558959961, 1.4302963018417358, -0.19007162749767303, -0.05895201861858368, -0.041624072939157486, 0.019658850505948067, 0.05061909556388855, -0.10030277073383331, -0.02440410479903221, 0.15019437670707703, 0.08859577029943466, -0.0507817417383194, 0.18049032986164093, 0.03021840751171112, 0.1474703848361969, 0.2350054830312729, 0.37257248163223267, 0.28667935729026794, 0.3376149535179138, -0.9727715253829956, 0.04192372411489487, 0.0713353231549263, 0.015926873311400414, 0.03416824713349342, -0.15991435945034027, -0.33007901906967163, 0.16517677903175354, 0.08699169754981995, -0.02082204446196556, -0.041814230382442474, -0.13877896964550018, 0.05543418228626251, -0.6091954708099365, -0.4247947931289673, 0.14133520424365997, -0.1552610695362091, -0.08489401638507843, -0.02667396143078804, -0.05163195729255676, -0.051392100751399994, 0.016054268926382065, -0.06420417129993439, -0.029363417997956276, 0.004692618735134602, -1.9968196153640747, -1.6428422927856445, -0.11348580569028854, -0.16131089627742767, 0.02872431091964245, -0.11745506525039673, -0.07678171247243881, -0.06865803897380829, -0.2331675887107849, -0.019946591928601265, -0.1373768299818039, -0.1981438249349594, -0.3051968812942505, 0.08097540587186813, 0.01644028164446354, -0.08025483042001724, -0.15796218812465668, 0.036216042935848236, -0.058446139097213745, 0.1305682212114334, -0.014940540306270123, 0.2333737164735794, -0.03680476173758507, 1.1119219064712524, 0.009979184716939926, -0.12234748899936676, -0.12312275916337967, -0.08529893308877945, -0.06911766529083252, 0.057953253388404846, -0.13154922425746918, -0.21691179275512695, -0.07254161685705185, 0.06872223317623138, -1.9916510581970215, -0.11578366160392761, -0.14464883506298065, -0.02283313311636448, 0.2677203416824341, 0.009310171008110046, -0.45566526055336, 0.0005858965450897813, -0.005648707039654255, -0.15681412816047668, -0.11898121982812881, 0.06339046359062195, 0.03415011987090111, 0.7315319776535034, 0.07375860959291458, -0.6383800506591797, -0.8773346543312073, 0.5294492244720459, -0.5438499450683594, 0.7297844290733337, -0.8299105763435364, -0.022825097665190697]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (1.37, 1.54)}}, 'et4_eta1': {'discriminator': {'threshold': -0.025000816583633428, 'nodes': [100, 5, 1], 'bias': [0.1368117481470108, -0.20471306145191193, 0.25162437558174133, 0.037453796714544296, -0.14133796095848083, 0.38234931230545044], 'weights': [-2.130035638809204, -0.5393927693367004, -0.9759161472320557, 0.027014100924134254, 0.8318871855735779, 1.0238282680511475, 1.141689658164978, -1.869693398475647, -3.665236711502075, -4.683228492736816, 4.261914253234863, 3.514181137084961, 0.20307433605194092, 6.266193389892578, 5.99254846572876, 3.932964324951172, 17.59791374206543, 8.373623847961426, 7.607294082641602, 7.776383399963379, 8.354427337646484, 8.5038423538208, 13.071599960327148, 4.98869514465332, 4.986407279968262, 5.2472004890441895, 5.8095245361328125, 6.400001525878906, 6.61406946182251, 5.610245704650879, 4.371086597442627, -4.412916660308838, 4.295096397399902, 4.34031867980957, 4.5890350341796875, 0.7572334408760071, -2.9243900775909424, 3.5074942111968994, 4.746408462524414, 3.6123123168945312, -0.29847827553749084, 2.4830968379974365, 12.243091583251953, -2.671121835708618, -0.42474305629730225, 5.3024067878723145, 0.47904419898986816, -4.686585426330566, 1.057651162147522, 0.5037263631820679, -0.6339253187179565, -11.455190658569336, 2.888310194015503, 1.111154556274414, -2.011073350906372, 1.065307378768921, 8.978684425354004, 0.9059798121452332, 1.3704766035079956, 1.4005928039550781, 1.3405280113220215, 0.7859353423118591, 1.1938691139221191, 1.7589560747146606, 1.3541094064712524, 1.1626307964324951, 1.4609614610671997, 1.5543619394302368, -0.5058679580688477, 2.250509023666382, 1.5658988952636719, 11.599382400512695, -0.7680370211601257, -0.3099972605705261, 0.9102615118026733, 3.842761754989624, 3.410079002380371, 2.9276795387268066, 1.877437949180603, 0.7450165152549744, 1.20259428024292, 6.227108478546143, 9.775453567504883, 5.654054164886475, 4.373102188110352, 0.5716181993484497, 4.210047245025635, 3.1950364112854004, 2.887277841567993, 2.189822196960449, 0.08076183497905731, -0.47561392188072205, 12.133353233337402, 5.22784948348999, 2.3519136905670166, 1.3858380317687988, 3.441948413848877, 4.795068264007568, 0.26946109533309937, -0.3931163251399994, 2.0531983375549316, 3.5182902812957764, 0.36154523491859436, -0.08953151106834412, -1.5676263570785522, -1.1089410781860352, 2.055800676345825, 2.016171455383301, 4.887370586395264, 3.535243272781372, -4.930495738983154, -3.289088249206543, -0.2499181628227234, -6.260674476623535, -5.867226600646973, -3.8889119625091553, -17.596994400024414, -8.426430702209473, -7.641038417816162, -7.651299953460693, -8.437056541442871, -8.409344673156738, -13.048593521118164, -5.03273868560791, -5.010976791381836, -5.2970733642578125, -5.759562969207764, -6.3693695068359375, -6.5537238121032715, -5.702812194824219, -4.265665531158447, 4.3925065994262695, -4.482141494750977, -4.437830924987793, -4.678004741668701, -0.8397036194801331, -0.15652664005756378, -2.7364277839660645, -4.686943531036377, -3.6105051040649414, -1.52102530002594, -2.3185880184173584, -4.614280700683594, 2.9151771068573, 0.3193269968032837, -10.638097763061523, -0.4483521282672882, 4.5968098640441895, -1.1343300342559814, -0.4985029101371765, 0.6699225902557373, 1.0003150701522827, -3.6652991771698, -1.0335488319396973, 2.113910675048828, -1.4512553215026855, -11.102887153625488, -1.3996875286102295, -1.2658365964889526, -1.3318449258804321, -1.3592191934585571, -0.8332695364952087, -1.141115665435791, -1.80889093875885, -1.494734287261963, -1.1840511560440063, -1.5774871110916138, -1.6156516075134277, 0.5827875137329102, -2.3029839992523193, -1.3679801225662231, -3.759927749633789, 0.623717725276947, 0.4817883372306824, -1.0705909729003906, -3.8159971237182617, -3.559784173965454, -2.800854206085205, -0.25998586416244507, -0.7139890193939209, -1.323843002319336, -6.250438690185547, -9.895606994628906, -5.672438621520996, -4.342494964599609, -0.6370532512664795, -4.407532691955566, -4.767236709594727, -2.9602842330932617, -2.278280735015869, -0.22159385681152344, 0.8717446327209473, -12.011740684509277, -4.494610786437988, -1.9178028106689453, -1.4090640544891357, -3.5514323711395264, -4.603492736816406, 0.15254566073417664, 0.3649347722530365, -1.9347444772720337, -3.4411838054656982, 0.2424999475479126, 0.07644066214561462, 1.4897571802139282, 1.12418794631958, -1.9590630531311035, -1.9693427085876465, -4.938224792480469, -3.6590375900268555, 5.115259647369385, 3.2115535736083984, 0.262077271938324, 6.171327590942383, 5.821171760559082, 3.8345682621002197, 17.569730758666992, 8.430460929870605, 7.773387432098389, 7.7894606590271, 8.560273170471191, 8.36445140838623, 13.05023193359375, 5.072444438934326, 5.021036148071289, 5.2770256996154785, 5.686396598815918, 6.312747478485107, 6.452341556549072, 5.600564002990723, 4.344597339630127, -4.380504131317139, 4.462042808532715, 4.510515213012695, 4.68198299407959, 0.7366636991500854, -0.013637147843837738, 2.842212438583374, 4.888831615447998, 3.647587537765503, 1.5496257543563843, 2.4471447467803955, 4.578889846801758, -2.6680076122283936, -0.2750495672225952, 10.561718940734863, 0.38308224081993103, -4.58486270904541, 1.0569143295288086, 0.5706480145454407, -0.7779104113578796, -0.9494509696960449, 3.697617530822754, 1.2045910358428955, -2.0284082889556885, 1.4885661602020264, 11.23969841003418, 1.4069561958312988, 1.2414549589157104, 1.3621617555618286, 1.269284963607788, 0.8928844332695007, 1.1885015964508057, 1.6937881708145142, 1.369047999382019, 1.2404853105545044, 1.617439866065979, 1.5777935981750488, -0.4256432056427002, 2.2867300510406494, 1.3621190786361694, 3.635892152786255, -0.7695103287696838, -0.5179620385169983, 0.9356290102005005, 3.7094156742095947, 3.4421634674072266, 2.8587162494659424, 0.4235161542892456, 0.7770473957061768, 1.1957545280456543, 6.047815799713135, 9.751434326171875, 5.571600914001465, 4.5497145652771, 0.5733157396316528, 4.3490729331970215, 4.852941513061523, 2.9088807106018066, 2.2005069255828857, 0.07970323413610458, -0.7549872398376465, 11.988516807556152, 5.222102642059326, 2.2982215881347656, 1.518141508102417, 3.5133588314056396, 4.635383605957031, -0.3394232392311096, -0.5039586424827576, -2.1126832962036133, -3.126528263092041, -0.8905130624771118, 0.2526894509792328, 0.9697019457817078, 1.1697176694869995, 0.9658239483833313, -1.6358197927474976, -3.542360544204712, -3.643115758895874, 5.021982669830322, 0.8475335240364075, 0.6862958073616028, 6.191305637359619, 5.982331275939941, 3.841648578643799, 17.666725158691406, 8.448466300964355, 7.690269470214844, 7.750001430511475, 8.512673377990723, 8.32656192779541, 13.097729682922363, 4.891061305999756, 5.028873920440674, 5.315243244171143, 5.779512882232666, 6.42729377746582, 6.548605442047119, 5.492628574371338, 4.432719707489014, -3.757545232772827, 4.407778739929199, 4.376555919647217, 4.776916027069092, 0.7515699863433838, 0.15473267436027527, 3.503401041030884, 4.851888656616211, 3.6555261611938477, -0.3399224877357483, 3.285504102706909, 12.171703338623047, -2.310349464416504, -0.3852766156196594, 5.297940731048584, 0.398785799741745, -4.591699600219727, 1.1337236166000366, 0.49689191579818726, -0.8178296089172363, -6.896082878112793, 3.6698272228240967, 1.2443881034851074, -2.1804614067077637, 1.0107548236846924, 11.061007499694824, 1.122423529624939, 1.3488410711288452, 1.536514401435852, 1.3528521060943604, 0.8315747380256653, 1.281538486480713, 2.088397264480591, 1.4307785034179688, 1.1716574430465698, 1.4112392663955688, 1.5508853197097778, -0.4952566623687744, 1.877034306526184, 1.5999292135238647, 11.57441234588623, -0.6229255199432373, -0.3313760757446289, 0.9546158313751221, 3.752150297164917, 3.630032777786255, 3.185051679611206, 1.8875349760055542, 0.784959614276886, 1.4096580743789673, 6.043801307678223, 9.78857421875, 5.76153564453125, 4.328771591186523, 0.7151880264282227, 4.269259452819824, 3.0902724266052246, 2.9918134212493896, 2.436870574951172, 0.11758103966712952, -0.5334725975990295, 11.954203605651855, 5.096224784851074, 2.249992847442627, 1.5389662981033325, 3.575451374053955, 4.6377434730529785, 0.1630374938249588, -0.5051027536392212, 1.984914779663086, 0.5627711415290833, 1.0732998847961426, -0.19242368638515472, -0.8294803500175476, -1.1556565761566162, -1.1030082702636719, 1.8765265941619873, 3.5459787845611572, 4.77174711227417, -4.350045680999756, -3.55570650100708, -0.3403075635433197, -6.087789535522461, -5.966447353363037, -3.835606098175049, -17.626285552978516, -8.548233985900879, -7.739028453826904, -7.64619779586792, -8.525344848632812, -8.562987327575684, -12.968362808227539, -4.999866485595703, -5.012319087982178, -5.32070255279541, -5.9654669761657715, -6.27116584777832, -6.429178714752197, -5.6488447189331055, -4.270801067352295, 4.193481922149658, -4.312960624694824, -4.401850700378418, -4.714672565460205, -0.770115315914154, 2.73360276222229, -3.3352391719818115, -4.755034923553467, -3.6631531715393066, 0.30004802346229553, -3.2827205657958984, -12.332881927490234, 2.7946627140045166, 0.49721306562423706, -5.106895923614502, -0.5173488259315491, 4.480642318725586, -1.0393213033676147, -0.40753108263015747, 0.8173714876174927, 6.724306106567383, -2.8538410663604736, -1.0836765766143799, 2.1090803146362305, -1.0541775226593018, -9.022180557250977, -0.9658997654914856, -1.4897149801254272, -1.518357753753662, -1.437066912651062, -0.807464063167572, -1.2718617916107178, -1.614151120185852, -1.4347045421600342, -1.1070570945739746, -1.5882421731948853, -1.5664325952529907, 0.47449272871017456, -1.813798189163208, -1.3695961236953735, -11.625906944274902, 0.7945756316184998, 0.44462013244628906, -1.0783065557479858, -3.732006311416626, -3.626474380493164, -3.1738016605377197, -1.9752010107040405, -0.9405118823051453, -1.3127484321594238, -6.13884973526001, -9.861763000488281, -5.727163314819336, -4.516567230224609, -0.5624948740005493, -4.275181293487549, -3.1227517127990723, -2.936113119125366, -2.114412546157837, -0.1288205236196518, 0.5894713401794434, -12.076895713806152, -5.096946716308594, -2.3524556159973145, -1.4124445915222168, -3.512423038482666, -4.665160179138184, -0.30556291341781616, 0.5504725575447083, -0.835625946521759, 1.624426245689392, -1.4829803705215454, -0.9288313388824463, 1.4517772197723389]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (50, 500000), 'etaBin': (0.8, 1.37)}}, 'et4_eta3': {'discriminator': {'threshold': -0.055000817775726324, 'nodes': [100, 5, 1], 'bias': [0.10169322043657303, 0.11152373254299164, -0.10183665156364441, 0.14507950842380524, -0.012784632854163647, 0.3051639199256897], 'weights': [-1.0979061126708984, -0.08282068371772766, 0.34341326355934143, 0.19185738265514374, 0.1345616728067398, 0.27040520310401917, -0.24012655019760132, 0.30704063177108765, -1.3665729761123657, -1.2696759700775146, -0.18033018708229065, 0.8451737761497498, 0.3972945213317871, -0.0687713772058487, 0.5313021540641785, 2.0114214420318604, 0.44385334849357605, 1.6325621604919434, 1.1157288551330566, -2.3137314319610596, 0.7903743982315063, -0.2982981503009796, 0.5546078085899353, 1.270151972770691, 0.4905008375644684, 0.8352788686752319, -1.3395742177963257, 1.2522163391113281, 0.9795517921447754, -0.6428253650665283, -2.8577184677124023, 0.9079991579055786, 0.3171425461769104, 0.9993422031402588, 0.29240882396698, 0.8716768026351929, 0.12775194644927979, -0.3423280119895935, 0.1825614720582962, 0.8119484186172485, 0.0912979245185852, 0.28227120637893677, -1.8392573595046997, 0.40407654643058777, -0.04376028850674629, 2.1911468505859375, 0.20093314349651337, 0.33370083570480347, -0.8898378610610962, 0.19318871200084686, 0.26690852642059326, -0.17185620963573456, 0.040499769151210785, -5.500153064727783, -0.2076902836561203, -1.6063992977142334, -0.3194468915462494, -0.2711489796638489, -0.07819535583257675, 3.113276720046997, -0.04002723842859268, 0.17636047303676605, -0.5736351609230042, 0.27420365810394287, -0.22301238775253296, 0.1618892252445221, -0.1577230542898178, 1.013501763343811, 0.24833723902702332, 5.052083969116211, 0.060960665345191956, 1.642093300819397, -0.037449825555086136, -0.09065145999193192, 0.6004922986030579, 0.43923068046569824, 0.4695076048374176, 0.2831805944442749, -0.014764359220862389, -0.0768909826874733, 0.011413696222007275, 0.7759168744087219, 1.434158444404602, 0.8301385641098022, 0.7751454710960388, 0.2719067633152008, 2.961560010910034, 0.14687494933605194, -0.30398914217948914, -0.004368031397461891, -0.09897327423095703, -0.25245094299316406, 0.5440033078193665, 0.23826628923416138, -0.08488204330205917, 0.14345282316207886, -0.6308616995811462, 0.03856739029288292, -0.03184456750750542, 1.070357322692871, -2.617691993713379, -6.656711578369141, 2.4757888317108154, 3.5707614421844482, 2.057889223098755, 2.052273750305176, -2.0231831073760986, 1.939840316772461, -2.6131949424743652, -2.5421559810638428, -1.763682246208191, 3.3119683265686035, 0.7178563475608826, -0.39789652824401855, 6.116654872894287, 7.613209247589111, 3.4975619316101074, 6.759545803070068, 5.012187957763672, 15.513250350952148, 7.251643180847168, 4.53508996963501, 4.012040138244629, 6.30180549621582, 5.689427375793457, 5.829439163208008, 4.7401862144470215, 15.034461975097656, 5.4140238761901855, 2.107877016067505, 3.0105841159820557, 11.514065742492676, 3.2595458030700684, 11.68129825592041, 4.664960861206055, 5.22706413269043, 2.9597506523132324, -2.5245423316955566, 2.2901451587677, 9.183551788330078, -0.1297299861907959, 4.82317590713501, -1.211287498474121, 4.24929141998291, 0.6421849131584167, 8.138345718383789, 2.7121224403381348, 3.538393497467041, 0.5898178815841675, 3.014824867248535, 1.588001012802124, -2.2866568565368652, 0.019272340461611748, -9.419038772583008, -2.5010175704956055, -0.9488634467124939, -3.4928126335144043, 1.7943700551986694, -0.7283805012702942, 9.655435562133789, -0.7184367775917053, 3.136930227279663, -4.745823860168457, 3.207775354385376, -2.136139154434204, 3.2504653930664062, 0.6701611876487732, 15.872361183166504, 3.3193769454956055, 14.49349594116211, 2.468200206756592, 6.438237190246582, -1.4938722848892212, -0.639966607093811, 3.4333484172821045, 3.911973237991333, 3.677407741546631, 4.427213668823242, 2.643077850341797, 2.7849297523498535, -0.29479601979255676, 5.059480667114258, 17.023698806762695, 8.839578628540039, 4.89912748336792, 2.5039241313934326, 5.475114822387695, 3.013314723968506, 1.07643723487854, 3.775461196899414, 0.908786952495575, 1.0980957746505737, 11.619643211364746, 5.260384559631348, 0.5877745151519775, 2.6299173831939697, 1.4273529052734375, -0.4948287308216095, -2.033464193344116, 4.372760772705078, 2.500901460647583, 2.579420566558838, -2.5093531608581543, -4.606098651885986, -1.9711756706237793, -2.100320816040039, 1.8749351501464844, -2.1329658031463623, 2.437307596206665, 3.864166736602783, 1.5940780639648438, -3.1355409622192383, -0.5700050592422485, 1.048753023147583, -6.067641258239746, -7.68746280670166, -3.407564163208008, -6.8469038009643555, -5.190151691436768, -17.401081085205078, -7.434668064117432, -1.2659673690795898, -3.8133394718170166, -6.165755271911621, -5.254295349121094, -5.790334224700928, -4.496147632598877, -14.951017379760742, -5.329471111297607, 8.61903190612793, -0.5275079011917114, -5.586751461029053, -3.1718804836273193, -11.697233200073242, -4.556994915008545, -5.189043045043945, -2.7670092582702637, 2.689246654510498, -2.2010533809661865, -9.412078857421875, 0.24068301916122437, -4.658514022827148, 1.2108837366104126, -4.396398544311523, -0.5231589674949646, -5.344787120819092, -2.737154483795166, -3.3716776371002197, -0.6236485242843628, -2.9491689205169678, -1.3587371110916138, 2.3853695392608643, -0.003714960068464279, 9.313597679138184, 2.7558295726776123, 0.8726276159286499, 3.4560890197753906, -1.8512276411056519, 0.7082236409187317, -9.644646644592285, 0.864723265171051, -3.151304006576538, 6.809230327606201, -3.2238106727600098, 2.1201791763305664, -2.0560364723205566, -0.6338484287261963, -15.681925773620605, -3.4844303131103516, -14.612195014953613, -2.2891721725463867, -5.3732709884643555, 0.9272360801696777, 1.181979775428772, -3.3734681606292725, -3.72320556640625, -5.280770301818848, -4.350282192230225, -2.5575671195983887, -2.6050665378570557, -3.3768303394317627, -5.016435146331787, -16.990394592285156, -8.685245513916016, -4.9775824546813965, -2.4999797344207764, -5.642441749572754, -3.161771535873413, -1.024899959564209, -3.884551763534546, -1.6399691104888916, -0.9303645491600037, -11.548840522766113, -5.411692142486572, -0.4956657588481903, -2.5952160358428955, -1.4735021591186523, 0.3778286278247833, -0.7521504759788513, -4.337569236755371, 53.01465606689453, -1.298416256904602, 2.617765426635742, -13.046305656433105, 2.234074354171753, 2.1408660411834717, -9.46604061126709, 4.151231288909912, -2.499563217163086, -1.7210322618484497, -1.5978878736495972, 16.444271087646484, 1.0147067308425903, -2.8413987159729004, 6.655270099639893, 7.840666770935059, 3.780627489089966, -3.729732036590576, 12.36520767211914, -13.033893585205078, 7.415826320648193, 4.445235252380371, 3.8943684101104736, 6.3190836906433105, 22.114755630493164, 5.633950710296631, 3.6316051483154297, 14.974407196044922, 5.369043827056885, -8.791732788085938, -3.454469680786133, 11.705693244934082, 3.1771106719970703, 11.775496482849121, 4.508627414703369, -3.727743148803711, 2.8148369789123535, -4.559893608093262, 2.143740653991699, 9.26596736907959, -0.28415486216545105, 4.849753379821777, -1.292141318321228, 4.342484951019287, 0.6156432628631592, 5.531485557556152, 6.774319648742676, 3.4155354499816895, 0.7188467383384705, 2.8427388668060303, 17.954885482788086, -2.2932324409484863, -0.043466221541166306, -9.422235488891602, -2.822448492050171, -1.0253350734710693, -2.4667675495147705, 1.881261944770813, -0.8402062058448792, 9.672449111938477, -0.7901399731636047, 3.0479142665863037, -6.738386631011963, 3.107330322265625, -2.1448211669921875, 3.0629026889801025, 4.503348350524902, 15.817924499511719, 3.3827271461486816, 14.545833587646484, 2.492377996444702, 6.333768844604492, -1.4178109169006348, -1.0377272367477417, 3.3737051486968994, 3.614872932434082, 5.2997331619262695, 4.440213680267334, 2.5455493927001953, 2.761075973510742, -18.800033569335938, 5.065690040588379, 16.898515701293945, 8.77258586883545, 4.92848539352417, 2.418088436126709, 4.820222854614258, 3.1034581661224365, 51.12868118286133, 12.34978199005127, 2.116889476776123, 1.4288195371627808, 0.5983867049217224, 2.7856030464172363, 0.6184176206588745, 2.569619655609131, 9.459463119506836, -0.26877838373184204, 0.7392995953559875, -0.38821324706077576, 0.8399670124053955, 0.2777262330055237, -0.1357821673154831, -0.5220499634742737, -0.2703060209751129, -0.055373821407556534, 0.09603899717330933, -0.3123301565647125, 1.2544300556182861, 1.8659120798110962, 0.2846262454986572, -3.422534942626953, -3.0241026878356934, 1.2115352153778076, -1.6675751209259033, -1.9614168405532837, -0.36647292971611023, -1.3794169425964355, -1.116569995880127, 2.3009607791900635, -1.512026309967041, 0.3406734764575958, -0.5428059697151184, -1.2391767501831055, -0.3969387412071228, -0.9235440492630005, -0.05546741932630539, -1.3031277656555176, -0.7303032279014587, 0.6844742298126221, -0.16292323172092438, -1.0784679651260376, -0.3151314854621887, -0.9295787215232849, -0.393349826335907, -0.750480055809021, -0.13518023490905762, 2.5464935302734375, -0.07153121381998062, -0.6512382626533508, 0.04086637124419212, -0.3879895806312561, 1.8481264114379883, -0.09230849891901016, -0.07517105340957642, -0.6584089994430542, -0.17452041804790497, -0.2032109647989273, 1.032909631729126, -0.19110313057899475, -0.16645808517932892, 2.239582061767578, 0.21135148406028748, 5.550180912017822, 0.26484423875808716, 1.6695494651794434, 0.25145551562309265, 0.425235390663147, 0.29761841893196106, -3.217189073562622, 0.1453329175710678, -0.09675054252147675, 0.5040395259857178, -0.05637646093964577, 0.3299723267555237, -0.10154800862073898, 0.2093258947134018, -0.9515230059623718, -0.2501482665538788, -4.930473804473877, 0.03070908412337303, -1.5502731800079346, 0.466640442609787, 0.2452339231967926, -0.5247545838356018, -0.6222149133682251, -0.44065651297569275, -0.4496033191680908, 0.1696391999721527, -0.026013880968093872, 0.03566448763012886, -0.8327396512031555, -1.4984370470046997, -1.096489429473877, -0.5744541883468628, -0.08651740849018097, -2.928529739379883, -0.3007300794124603, 0.2601717412471771, 0.3471606373786926, -0.08165929466485977, -0.22601909935474396, -0.5088711977005005, 0.0077554043382406235, 0.9099997282028198, -0.3312782347202301, 0.4978024661540985, 0.08636274933815002, 0.024140648543834686, -1.0005066394805908, -3.6228630542755127, -1.2034006118774414, 1.6776691675186157, -1.1059746742248535, 1.0401599407196045]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (50, 500000), 'etaBin': (1.54, 2.5)}}, 'et3_eta0': {'discriminator': {'threshold': -0.10000081211328507, 'nodes': [100, 5, 1], 'bias': [0.08717413246631622, 0.07987606525421143, -0.0891275629401207, -0.023250024765729904, -0.026635879650712013, -0.4253220856189728], 'weights': [2.2681500911712646, 2.079900026321411, -0.33947908878326416, -0.026545777916908264, 0.7609163522720337, 1.0033166408538818, 0.2756510376930237, 1.0896888971328735, 2.5666394233703613, 2.388798475265503, -6.693527698516846, -2.7544918060302734, -6.087902545928955, -2.6686267852783203, -2.6295480728149414, -5.184552192687988, -3.6752121448516846, -3.4875972270965576, -3.3280348777770996, -3.430103302001953, -4.832165718078613, -3.773735523223877, -3.5406227111816406, -3.4261839389801025, -3.5784945487976074, -2.9147233963012695, -1.4379254579544067, -3.1726906299591064, -3.258202314376831, -2.6153550148010254, 0.2055467963218689, -1.7876670360565186, -2.224311113357544, -4.015501976013184, -3.022507667541504, -1.730854868888855, -1.6220908164978027, -1.8350517749786377, -1.3011441230773926, -2.2793126106262207, -4.432361125946045, -4.25582218170166, 1.2008366584777832, 0.4277830421924591, -0.5211353302001953, -2.3532819747924805, -2.2193915843963623, -3.309920072555542, -1.2911876440048218, -1.1818913221359253, -1.9365110397338867, 2.0710086822509766, -0.007945757359266281, 3.1537222862243652, -1.3415555953979492, -2.087634325027466, -0.07220783829689026, 1.7260982990264893, -1.6626362800598145, -3.8554580211639404, 0.21316450834274292, 1.3741559982299805, 0.9717640280723572, -0.46294111013412476, -0.34346452355384827, 1.3640385866165161, -0.5500186085700989, 1.6180779933929443, -0.47913509607315063, -1.358103632926941, -0.520005464553833, 0.561260461807251, 0.7398634552955627, 0.05589801073074341, -0.7283907532691956, -1.7042986154556274, -2.5798048973083496, -1.7380833625793457, -1.6584665775299072, -1.357088565826416, -1.6095407009124756, -4.945938587188721, -3.900132894515991, -3.4401230812072754, -1.5807958841323853, -2.535367012023926, -1.7578206062316895, -3.638277530670166, -4.470762729644775, -3.697664499282837, -0.9952393770217896, -0.2312505543231964, -3.7200167179107666, -3.252729654312134, -1.4943480491638184, -0.27065297961235046, -8.132335662841797, -2.3080925941467285, 0.5592635273933411, -0.3546481430530548, 2.4463951587677, 1.9880770444869995, -0.48482123017311096, -0.005826584994792938, 0.5851339101791382, 1.062596082687378, 0.1375136524438858, 1.1505777835845947, 2.5349080562591553, 2.236337423324585, -6.843856334686279, -2.6496658325195312, -6.799166679382324, -3.206312894821167, -2.804013967514038, -5.225292682647705, -3.5711240768432617, -3.3738090991973877, -3.3550992012023926, -3.5153350830078125, -4.706862449645996, -3.9292984008789062, -3.583012580871582, -3.522552251815796, -3.7470498085021973, -3.0970559120178223, -1.4312368631362915, -3.015939712524414, -3.3172662258148193, -2.583068609237671, 0.06776868551969528, -1.666075587272644, -2.015195608139038, -4.0161895751953125, -2.882598638534546, -1.9164810180664062, -1.7996349334716797, -1.8370146751403809, -1.355314016342163, -2.253908634185791, -4.5830512046813965, -4.456624507904053, 1.3362325429916382, 0.3204353153705597, -0.6760029196739197, -2.395637035369873, -2.1313436031341553, -3.119370222091675, -1.2161948680877686, -1.1246105432510376, -2.097766876220703, 2.0353033542633057, -0.10252197831869125, 3.2166507244110107, -1.2374905347824097, -2.114626884460449, -0.18791182339191437, 1.8331598043441772, -1.7690062522888184, -3.794090747833252, 0.11636921018362045, 1.3661470413208008, 0.9198753237724304, -0.5876086354255676, -0.3558407127857208, 1.2159229516983032, -0.6241759061813354, 1.6643364429473877, -0.6137420535087585, -4.0116753578186035, -0.5777978897094727, 0.500361979007721, 0.6505674719810486, 0.25670525431632996, -0.6605172157287598, -1.7072674036026, -2.649838924407959, -1.8182814121246338, -1.706974983215332, -1.356821060180664, -1.396317720413208, -4.8891377449035645, -3.930746555328369, -3.557610034942627, -1.697187066078186, -2.4656057357788086, -1.905996561050415, -3.634237289428711, -4.530080795288086, -3.7160747051239014, -1.1659671068191528, -0.15122747421264648, -3.7501344680786133, -3.239210844039917, -1.5352976322174072, -0.3094708025455475, -19.72968864440918, -2.426893711090088, 0.5629449486732483, -0.4031555652618408, -0.7764798998832703, -2.101797103881836, 0.41359439492225647, -0.012198015116155148, -0.5716569423675537, -1.024855375289917, -0.28448039293289185, -1.0423412322998047, -2.6221699714660645, -2.3653488159179688, 6.712673664093018, 2.6106224060058594, 6.476511001586914, 3.1795055866241455, 2.703843593597412, 5.151386260986328, 3.7313404083251953, 3.53232741355896, 3.490340232849121, 3.4104089736938477, 4.636786460876465, 3.784532070159912, 3.5146002769470215, 3.519984483718872, 3.5550174713134766, 3.0672061443328857, 1.5808106660842896, 3.0069823265075684, 3.1332614421844482, 2.4964497089385986, -0.04416756331920624, 1.7103191614151, 2.053579807281494, 4.203500270843506, 2.8984155654907227, 1.729622721672058, 1.7907354831695557, 1.7044827938079834, 1.2708089351654053, 2.1621689796447754, 4.555490970611572, 4.474891662597656, -1.2315996885299683, -0.3709278404712677, 0.6682347655296326, 2.3946242332458496, 2.2408931255340576, 3.2824597358703613, 1.379584789276123, 1.1354440450668335, 1.8918840885162354, -1.9478740692138672, 0.20254938304424286, -3.226553440093994, 1.3282544612884521, 2.028494119644165, 0.15404437482357025, -1.826766014099121, 1.6681016683578491, 3.810171604156494, -0.20248286426067352, -1.4376040697097778, -0.8654280304908752, 0.5292313098907471, 0.4658297002315521, -1.1470085382461548, 0.6128965616226196, -1.5579992532730103, -1.6742795705795288, 1.3928155899047852, 0.600355863571167, -0.6056905388832092, -0.7163179516792297, -0.1430409550666809, 0.7646363973617554, 1.8728001117706299, 2.5364155769348145, 1.7979557514190674, 1.8019986152648926, 1.1714766025543213, 1.392497181892395, 5.0426530838012695, 4.067913055419922, 3.6481518745422363, 1.6065806150436401, 2.4595863819122314, 1.9045389890670776, 3.7440080642700195, 4.524541854858398, 3.6195452213287354, 1.0578652620315552, -0.7546117901802063, 3.5762698650360107, 3.1909730434417725, 1.625138521194458, 0.25145629048347473, 8.057820320129395, 2.2714688777923584, -0.7487093210220337, 0.36658287048339844, 10.601336479187012, 2.3486015796661377, -0.48883068561553955, -0.030921315774321556, -0.6588714718818665, 1.1090047359466553, 0.12095142155885696, 1.0767301321029663, 2.5803449153900146, 2.845432758331299, -3.005988359451294, -2.6966347694396973, 8.092320442199707, -3.0568323135375977, -2.6848690509796143, -5.100444793701172, -3.687608480453491, -3.4052910804748535, -3.475186347961426, -3.4591307640075684, -4.923104286193848, -3.85518479347229, -3.4973647594451904, -3.557156562805176, -3.527707815170288, -2.663508653640747, -2.3545241355895996, -3.1414101123809814, -3.122628688812256, -2.5375185012817383, 0.12827737629413605, -1.88190495967865, -2.216580390930176, -1.7920469045639038, -2.823535203933716, -1.9149564504623413, -1.7011759281158447, -1.141815423965454, -1.257978081703186, -2.1186866760253906, -4.578508377075195, -4.2725701332092285, 1.0573289394378662, 0.38121190667152405, -0.510231614112854, -2.2349376678466797, -2.2155354022979736, -3.224957227706909, -1.3313136100769043, -1.0849641561508179, -2.966862916946411, 2.060497760772705, -0.23289397358894348, 3.251350164413452, -1.285964012145996, -2.021150827407837, -0.9624714851379395, 1.8656820058822632, -1.8160383701324463, -3.713286876678467, 0.18810054659843445, 1.388276219367981, 0.9094597101211548, -0.4733060896396637, -0.2816438674926758, 1.2042436599731445, -0.5040654540061951, 1.5934778451919556, -0.6388738751411438, -1.2615058422088623, 2.413672924041748, 0.48390454053878784, 0.24212536215782166, 0.3519132733345032, -0.8600905537605286, -1.3416095972061157, -2.6193883419036865, -1.8580267429351807, -1.6438733339309692, -1.2080692052841187, -0.6655287146568298, -4.8726887702941895, -4.046780586242676, -3.433450698852539, -1.4894355535507202, -2.386496067047119, -1.6990876197814941, -3.575183868408203, -4.424587726593018, -3.795478343963623, -1.1499186754226685, -0.21804332733154297, -2.526177406311035, -3.213907241821289, -1.7318994998931885, -0.2925381064414978, -8.27686595916748, -2.2592711448669434, 0.7715545892715454, -0.43027418851852417, -2.4589970111846924, -1.8989923000335693, 0.4602471888065338, 0.09353755414485931, 0.9011911749839783, -1.030157446861267, -0.15154880285263062, -1.1605008840560913, -2.576120615005493, -2.337810516357422, 6.66701078414917, 2.656461238861084, 6.698328018188477, 3.012401580810547, 2.807321310043335, 5.149005889892578, 3.5259971618652344, 3.4519119262695312, 3.3437204360961914, 3.3645424842834473, 4.880809783935547, 3.817607879638672, 3.406575918197632, 3.4616856575012207, 3.633307456970215, 3.0002620220184326, 2.2805230617523193, 3.0060055255889893, 3.2404773235321045, 2.653902292251587, -0.1338905543088913, 1.8328795433044434, 2.160149574279785, 4.426030158996582, 2.8809216022491455, 1.8393868207931519, 1.7423720359802246, 1.3731577396392822, 1.3589370250701904, 2.1390697956085205, 4.465871334075928, 4.267027378082275, -1.1880772113800049, -0.28225114941596985, 0.5433818697929382, 2.29086971282959, 2.073479652404785, 3.2025809288024902, 1.4455918073654175, 1.071745753288269, 2.0469069480895996, -1.9572094678878784, 0.19417183101177216, -3.1877684593200684, 1.2383781671524048, 2.0761518478393555, 0.1013798788189888, -1.725682020187378, 1.737042784690857, 3.889230728149414, -0.19426727294921875, -1.20805823802948, -0.9141234755516052, 0.39761027693748474, 0.42420968413352966, -1.1954774856567383, 0.6132887601852417, -1.6696009635925293, 0.6184801459312439, 1.217643141746521, -2.457885265350342, -0.3829217851161957, -0.6075864434242249, -0.23630546033382416, 0.8261470198631287, 1.8789469003677368, 2.5897252559661865, 1.9423701763153076, 1.70601224899292, 1.2675572633743286, 0.7246795296669006, 4.820921421051025, 3.9054529666900635, 3.4479055404663086, 1.5085712671279907, 2.4575765132904053, 1.7742023468017578, 3.7832281589508057, 4.373318195343018, 3.8084664344787598, 1.153889536857605, 0.17277860641479492, 3.7421257495880127, 3.216512441635132, 1.6230533123016357, 0.3557702898979187, 8.284748077392578, 2.247519016265869, -0.5243308544158936, 0.4056456685066223, 0.8545168042182922, 1.120518445968628, -1.1356474161148071, 1.794189214706421, -1.4717013835906982]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (40, 50), 'etaBin': (0, 0.8)}}, 'et4_eta0': {'discriminator': {'threshold': -0.06000081673264504, 'nodes': [100, 5, 1], 'bias': [-0.45464807748794556, 0.20552325248718262, 0.10041922330856323, -0.05248928815126419, -0.22410131990909576, -0.0736473947763443], 'weights': [0.8654434084892273, 0.7238449454307556, -0.016100937500596046, -0.25440120697021484, 0.07482898235321045, -0.030807798728346825, 0.11228960007429123, -0.009093526750802994, 0.4012471139431, 0.37599948048591614, -2.7480766773223877, -1.003393530845642, -0.663458526134491, -0.5567011833190918, -0.5626842975616455, -0.4391510784626007, -0.5311102271080017, -0.5860939025878906, -0.5039300322532654, -0.6715015769004822, -0.5225920081138611, -0.5690078735351562, -0.3136046826839447, -0.7533348202705383, -0.6315939426422119, -0.5109248161315918, -0.5853291153907776, -0.43357110023498535, -0.5417161583900452, -0.4573008716106415, -0.18659482896327972, -0.2626052498817444, -0.6091729998588562, -0.6240653395652771, -0.2358284741640091, 0.5703610777854919, -0.16411447525024414, -0.42654454708099365, -0.33193549513816833, -0.29979634284973145, -0.17617523670196533, -0.6149170398712158, -0.3203448951244354, -0.09810018539428711, -0.05930136516690254, -0.2373141646385193, -0.2271171659231186, -0.23208528757095337, 0.27704036235809326, 0.09344451129436493, 0.3813376724720001, -0.41856837272644043, -0.040545638650655746, -0.0506567507982254, 0.026553193107247353, -0.1488424390554428, -0.04041403904557228, 0.008025726303458214, 0.1478395164012909, 0.03709493204951286, 0.04564598575234413, 0.058449145406484604, 1.0249732732772827, -0.8301489353179932, 0.49061694741249084, 0.20719993114471436, 0.0224740169942379, -0.19264444708824158, 0.2008010745048523, 0.11050363630056381, -0.06956909596920013, 0.4201537072658539, 0.10056952387094498, 0.11979181319475174, -0.2621730864048004, -0.3530222773551941, -0.23982149362564087, -0.17515558004379272, -0.09984767436981201, 0.15087352693080902, -0.2621642053127289, -0.2963142693042755, -0.7800387740135193, -0.7981981039047241, -0.38331881165504456, -0.3252427577972412, -0.18831244111061096, -0.3211379647254944, -0.5502303838729858, -0.600724458694458, 0.08456476032733917, -0.029803911224007607, -0.6279226541519165, -0.4302491247653961, -0.1905108094215393, -0.16664323210716248, -1.4184746742248535, -1.0339531898498535, -0.05212470889091492, -0.02694692090153694, -2.89664626121521, -1.522126317024231, 0.4018760025501251, 0.6632153987884521, -0.7798606753349304, 0.6821388602256775, -0.2742626667022705, -0.05876707285642624, -1.9260213375091553, -1.6399043798446655, 2.5064587593078613, 0.1500595360994339, 2.973342180252075, 2.5104820728302, 2.231959581375122, 2.0803494453430176, 3.0945847034454346, 2.4651262760162354, 2.807868003845215, 2.7549498081207275, 2.822803020477295, 2.881761074066162, 1.6963393688201904, 4.415185928344727, 3.204582452774048, 2.9989960193634033, 2.9865028858184814, 1.8464858531951904, 4.592492580413818, 1.6828067302703857, 1.4450982809066772, 1.4380775690078735, 3.6352689266204834, 3.0613625049591064, 1.4443411827087402, -2.1787731647491455, 1.3897387981414795, 2.3056859970092773, 1.5532810688018799, 1.1870392560958862, 1.2428401708602905, 3.1866557598114014, 1.4062598943710327, 0.13774792850017548, 0.8020579814910889, 0.9122603535652161, 1.2649930715560913, 1.3068610429763794, -1.2336946725845337, -0.6574968695640564, -1.6042311191558838, 1.7356789112091064, 0.6620549559593201, 0.17718784511089325, 0.18065781891345978, 0.8247844576835632, -0.08921278268098831, -0.31668365001678467, -0.3119603395462036, -0.2912907898426056, -0.18129703402519226, -0.07816110551357269, -4.42380952835083, 3.818580389022827, -1.9053175449371338, -0.6864086985588074, -0.26168131828308105, 2.5147035121917725, -1.56748628616333, -0.19003517925739288, -0.12223684787750244, -2.712665319442749, -0.6076650023460388, -0.3756449818611145, 0.7902325987815857, 1.3035956621170044, 1.6836720705032349, 1.3523029088974, 1.0712761878967285, -0.7981645464897156, 0.8433824181556702, 1.766300916671753, 3.968885660171509, 3.0044257640838623, 1.3793870210647583, 1.3354099988937378, 1.0920867919921875, 1.3455820083618164, 3.0423827171325684, 3.003952980041504, 0.8978968858718872, -0.3142809569835663, 2.860992431640625, 2.330233335494995, 1.066333532333374, 0.35020801424980164, 6.688539028167725, 4.506115913391113, -0.6031891703605652, 0.32940608263015747, -2.9038455486297607, -1.623227596282959, 0.5406121611595154, 0.8475165367126465, -0.48916947841644287, 0.7471515536308289, -0.2566618323326111, -2.115492343902588, -1.9048508405685425, -1.7299522161483765, 2.3003745079040527, 0.21627192199230194, 2.8531148433685303, 2.5590667724609375, 2.2148633003234863, 1.8159559965133667, 2.8399252891540527, 2.235598564147949, 2.893561601638794, 2.850270986557007, 2.8349950313568115, 2.6701767444610596, 1.6580226421356201, 3.468771457672119, 3.096242904663086, 2.9424970149993896, 2.9990367889404297, 1.8209178447723389, 2.226557970046997, 1.7474256753921509, 1.3832262754440308, 1.466168999671936, 3.591931104660034, 3.1371963024139404, 1.4783045053482056, -2.104995012283325, 1.2974631786346436, 2.364189386367798, 1.4710657596588135, 1.1042094230651855, 1.215171217918396, 3.3849034309387207, 1.385764718055725, -0.014021494425833225, 0.8076024055480957, 0.8762842416763306, 1.2194186449050903, 1.1757382154464722, -1.4135451316833496, -0.6134902834892273, -1.391289472579956, 1.9358757734298706, 0.7488318085670471, 0.10341046005487442, 0.19832651317119598, 0.7993220090866089, 0.06751842796802521, -0.19233927130699158, -0.3591148853302002, -0.38272109627723694, -0.1326684057712555, 0.06153513118624687, -4.2384257316589355, 3.8730711936950684, -1.9382104873657227, -0.7312253713607788, -0.13728484511375427, 2.6223466396331787, -1.5314161777496338, -0.1439787894487381, -0.10129785537719727, -2.708142042160034, -0.5973096489906311, -0.37132561206817627, 0.8917113542556763, 1.3223198652267456, 1.6434791088104248, 1.3919332027435303, 0.9560523629188538, 0.9828652739524841, 0.9428966045379639, 1.6152968406677246, 3.990575075149536, 3.2077877521514893, 1.403012990951538, 1.3792610168457031, 1.253310203552246, 1.2463598251342773, 3.11582088470459, 3.1141462326049805, 0.9595915675163269, -0.1430038958787918, 2.862159013748169, 2.324970245361328, 1.2882179021835327, 0.3202151358127594, 6.660834789276123, 4.603679180145264, -0.5275687575340271, 0.33389902114868164, 2.8177311420440674, 1.432892084121704, -0.4087291657924652, -0.8980953693389893, 0.4600740969181061, -0.5846183896064758, 0.36127161979675293, 2.270127534866333, 2.0754613876342773, 1.7735780477523804, -2.5191783905029297, -1.8718628883361816, -2.9903199672698975, -2.7312474250793457, -2.3452813625335693, -1.7607662677764893, -2.844550132751465, -2.3965907096862793, -2.694422483444214, -2.7240097522735596, -2.9285266399383545, -2.760113477706909, -1.6335761547088623, -4.451236724853516, -3.1620421409606934, -2.8661000728607178, -3.08090877532959, -1.797761082649231, -4.763051509857178, -1.718124508857727, -1.3160881996154785, -1.4486864805221558, -3.5041887760162354, -3.174787759780884, -1.2657315731048584, 2.159719705581665, -1.4213159084320068, -4.020944118499756, -1.5134907960891724, -1.4005309343338013, -1.3205370903015137, -3.3943374156951904, -1.382098913192749, 0.020209314301609993, -0.8206770420074463, -0.9970183372497559, -1.1619480848312378, -1.361959457397461, 1.1774243116378784, 0.6213225722312927, 1.5801045894622803, -1.8135794401168823, -1.1466608047485352, -0.13892577588558197, -0.1261061728000641, -0.7023807764053345, -0.02267831563949585, 0.1866150200366974, 0.23058351874351501, 0.278452068567276, 0.10738613456487656, 0.13800562918186188, 4.400415897369385, -4.241020202636719, 1.8513851165771484, 0.8601193428039551, 0.2994016408920288, -2.584233522415161, 1.4830491542816162, 0.2706097662448883, 0.18619072437286377, 2.8031914234161377, 0.465737521648407, 0.46590203046798706, -0.7943810820579529, -1.3838398456573486, -1.6804900169372559, -1.2413676977157593, -0.9539666771888733, -0.7971248030662537, -1.0329701900482178, -1.673173189163208, -3.9746499061584473, -3.135118246078491, -1.2476274967193604, -1.4965581893920898, -1.3324739933013916, -1.2949087619781494, -2.990060806274414, -3.0730648040771484, -0.8636347055435181, 0.2923405170440674, -2.8703114986419678, -2.4225494861602783, -1.284198522567749, -0.41126593947410583, -7.129720211029053, -4.4336090087890625, 0.47070786356925964, -0.24420206248760223, 6.621960163116455, 1.5531953573226929, 0.16881611943244934, -0.6563533544540405, 0.9717976450920105, -0.5415729880332947, 0.2813624441623688, -0.02211250551044941, 1.990850806236267, 2.443688154220581, -13.056986808776855, -0.06846289336681366, -2.83554744720459, 1.4128798246383667, -0.5264930129051208, -2.086946964263916, -2.901472806930542, -2.4524571895599365, -2.742899179458618, -2.68485426902771, -2.724334239959717, -2.784693479537964, -1.6959819793701172, -3.558197498321533, -3.157496929168701, -2.844770908355713, -2.9571187496185303, -1.8365565538406372, -2.058974027633667, -1.8734827041625977, -1.4801733493804932, -1.5197715759277344, -3.4089183807373047, -2.659240245819092, -1.3161871433258057, 2.1144587993621826, -1.197648286819458, -2.4264097213745117, -1.4878005981445312, -1.225193738937378, -1.2998156547546387, -3.0821964740753174, -1.3705337047576904, -0.06024394556879997, -0.7749933004379272, -0.8323165774345398, -1.1959781646728516, -1.152975082397461, 1.0688725709915161, 0.5407252311706543, 1.5729928016662598, -1.9761295318603516, -0.6922330260276794, -0.014015045948326588, -0.11072008311748505, -0.8325469493865967, 0.1459876000881195, 0.15852101147174835, 0.3167571425437927, 0.271232545375824, 0.08685741573572159, -0.10567887127399445, 4.366079807281494, -3.8133983612060547, 1.9354991912841797, 0.6590432524681091, 0.15178334712982178, -1.2577868700027466, 1.4220062494277954, 0.14820916950702667, 0.3068661391735077, 2.7795424461364746, 0.4177979826927185, 0.5308338403701782, -0.9165863394737244, -1.464543104171753, -1.6435383558273315, -1.4106981754302979, -1.084282398223877, -0.8663834929466248, -0.9938668012619019, -1.2448112964630127, -3.9049248695373535, -2.9579334259033203, -1.2604814767837524, -1.457514762878418, -1.3085763454437256, -1.4251024723052979, -2.9756081104278564, -2.960500478744507, 0.08075465261936188, 0.19593694806098938, -2.8579344749450684, -2.3241536617279053, -1.1857752799987793, -0.32204028964042664, -6.7069783210754395, -4.4802985191345215, 0.8465225100517273, -0.2384466826915741, 0.19520102441310883, -2.7891340255737305, -2.1869490146636963, 2.4636752605438232, 2.442392587661743]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (50, 500000), 'etaBin': (0, 0.8)}}, 'et1_eta3': {'discriminator': {'threshold': -0.12000081166625023, 'nodes': [100, 13, 1], 'bias': [0.01576770842075348, -0.17712590098381042, 0.1333610564470291, 0.055166684091091156, 0.04430213198065758, -0.011580921709537506, -0.14800608158111572, -0.005270873662084341, -0.12565214931964874, -0.0865122452378273, 0.05252000689506531, 0.22120104730129242, -0.00014748472312930971, -0.18239182233810425], 'weights': [-1.6242141723632812, -1.4964895248413086, 0.37748241424560547, 0.7470607757568359, 0.9542444944381714, 0.5318184494972229, 0.4347248375415802, 0.5383001565933228, -1.9435062408447266, -2.7042596340179443, -2.2418925762176514, 1.7174015045166016, 0.21549135446548462, 0.08604630082845688, 3.5546133518218994, 0.8935694098472595, 1.419352412223816, 4.707134246826172, 2.0739784240722656, 4.4052605628967285, 1.1195226907730103, 2.078622579574585, 1.5331175327301025, 3.9400546550750732, 3.667813539505005, 2.234042167663574, 1.2733572721481323, 2.0328524112701416, 1.737978219985962, 1.8174703121185303, 1.415321946144104, 2.052001953125, 1.0036811828613281, 1.778766393661499, 0.8040391802787781, 1.5641635656356812, 0.9708910584449768, 0.6309452652931213, 1.3382713794708252, 1.494091510772705, 1.2222161293029785, 1.5860905647277832, 1.2585562467575073, 1.5427742004394531, -0.10605103522539139, 1.9475257396697998, 0.7545058727264404, 1.1645710468292236, -0.03386295959353447, 1.4772766828536987, 0.9225281476974487, 1.2584081888198853, -0.0013007435481995344, 0.05273319408297539, 1.3612408638000488, 0.9288939833641052, -0.29872816801071167, 0.6677990555763245, 0.5154576897621155, 0.38816744089126587, 0.5626683831214905, 0.514236330986023, 0.3904486894607544, -0.38007882237434387, -0.43703773617744446, 1.1052629947662354, 1.3141889572143555, 0.4210074841976166, -1.1155036687850952, -0.9305633306503296, -1.4501405954360962, 2.397630214691162, -0.7033202052116394, -0.06572511792182922, 1.303359031677246, 1.6486235857009888, 1.6052062511444092, 1.555179238319397, 1.042755365371704, 0.60936439037323, 3.031231641769409, 4.049725532531738, 3.155161142349243, 1.3237437009811401, 1.295178771018982, 0.9450104236602783, 0.8464922904968262, 0.9597887396812439, 0.591497540473938, 1.1264482736587524, 0.3443072438240051, 0.23298604786396027, 2.815629482269287, 1.1309726238250732, 0.2059529423713684, 0.6912635564804077, 0.36232665181159973, -0.09207841008901596, -0.08863653987646103, 1.7311025857925415, 552.792236328125, 2.7643704414367676, 0.03178073465824127, 2.4510867595672607, 0.47880813479423523, 0.19967111945152283, -22.79944610595703, 0.06149303913116455, 4.637579441070557, 9.932884216308594, -0.8642027974128723, -72.0328140258789, 5.356922149658203, -10.814126968383789, -21.906282424926758, 4.461131572723389, 2.3555476665496826, -382.99676513671875, -0.7506295442581177, -118.81001281738281, -0.23603971302509308, -359.9303283691406, -238.3626251220703, -123.53948211669922, 5.906637668609619, -2.9081966876983643, -270.46624755859375, -108.27574920654297, -32.92097091674805, 0.35070714354515076, 0.06556747108697891, 0.3463708758354187, 12.028189659118652, 0.35598239302635193, 0.199430450797081, -0.16904978454113007, -7.062976360321045, 0.12747342884540558, -120.97481536865234, 0.3730243742465973, 0.13945479691028595, 0.40641385316848755, -9.401337623596191, 0.36529579758644104, 0.015359221957623959, 19.928722381591797, -0.45481184124946594, 0.12378585338592529, -0.03318038582801819, 0.37035036087036133, 0.12706786394119263, 0.31845661997795105, 0.08344756066799164, 0.05344955250620842, 0.38324278593063354, 52.608642578125, -0.10237911343574524, 0.23618148267269135, 0.17435726523399353, 0.1518622636795044, 0.029518933966755867, 0.23272207379341125, 0.17592455446720123, 0.04647079482674599, -0.09742999821901321, 0.2759542763233185, 0.25486478209495544, 1.8833415508270264, -0.2674887776374817, -0.10872107744216919, -0.2236718088388443, 0.39290904998779297, -2.1441736221313477, -0.5715833306312561, 1.0811980962753296, 1.7409107685089111, 0.4397510588169098, -0.7035594582557678, -0.04647792875766754, 0.014676590450108051, -0.33066582679748535, 0.9460379481315613, 0.7540554404258728, 0.31899482011795044, 0.2915303111076355, 0.3317646086215973, 0.2781268060207367, 0.32645830512046814, 81.83029174804688, 12.409649848937988, 0.15977266430854797, 0.1402168869972229, 0.5275840759277344, 0.21177367866039276, 0.13422362506389618, -19.29012680053711, 0.19948558509349823, -0.02666034735739231, -0.12297744303941727, 0.2627582550048828, 1.3451869487762451, 1.5398826599121094, -0.5667336583137512, -0.6756628155708313, -0.7777997851371765, -0.3610230088233948, -0.5281922817230225, -0.5053830742835999, 1.9370986223220825, 2.40655779838562, 0.9808388948440552, -0.4040254056453705, -1.6646993160247803, -0.12418182939291, -3.91359281539917, -4.555013179779053, -3.540066957473755, -4.154556751251221, -1.983077883720398, -4.430322170257568, -1.5266995429992676, -2.4847044944763184, -1.4583783149719238, -3.7185375690460205, -4.202314853668213, -2.1284139156341553, -1.2668983936309814, -2.0230956077575684, -1.3704944849014282, -1.635471224784851, -1.5790205001831055, -1.994910478591919, -0.9721395969390869, -1.833087682723999, -0.9069038033485413, -1.6374646425247192, -0.8688830137252808, -0.5770263671875, -1.3354765176773071, -1.6173791885375977, -0.5580151677131653, -1.4621177911758423, -1.1774671077728271, -1.5859581232070923, 0.17720523476600647, -1.9122381210327148, -0.8429813385009766, -1.0451874732971191, 0.08511986583471298, -1.474605679512024, -1.789915919303894, -1.2390694618225098, -0.1389285922050476, -0.12887753546237946, -1.3730297088623047, -1.5071101188659668, 0.3250204920768738, -0.8615003824234009, -0.8253448009490967, -0.7397359609603882, -0.5332510471343994, -0.7578414082527161, -0.37777265906333923, 0.4106280207633972, 0.7251321077346802, -1.2262300252914429, -1.1063522100448608, -0.5078602433204651, 1.0481419563293457, 0.3587208092212677, 1.454047441482544, -2.561699151992798, 0.14295408129692078, 0.13616083562374115, -1.2397269010543823, -1.5601950883865356, -1.6087393760681152, -1.5504231452941895, -1.082851529121399, -0.47664424777030945, -3.024127721786499, -3.9904229640960693, -3.0953497886657715, -1.2052276134490967, -1.3117115497589111, -0.5782686471939087, -0.7740269899368286, -0.9467630982398987, -0.602620005607605, -1.1237213611602783, -0.14873045682907104, -0.47934702038764954, -2.6208910942077637, -1.1959482431411743, -0.38733866810798645, -0.6369909644126892, -0.2984714210033417, -0.13217131793498993, -0.004260192159563303, -1.7349183559417725, -1.5636281967163086, -1.524303913116455, 0.46807625889778137, 0.6881670951843262, 0.8886976838111877, 0.4724058508872986, 0.4774948060512543, 0.45738154649734497, -2.127117395401001, -2.264835834503174, -2.1885218620300293, 1.5548815727233887, 1.603270411491394, 0.04921438917517662, 3.9386258125305176, 1.033981204032898, 1.5921486616134644, 4.605279445648193, 2.034390449523926, 4.340433597564697, 1.5405898094177246, 2.096177577972412, 1.5370259284973145, 3.863614797592163, 3.6669256687164307, 2.246741533279419, 1.2843917608261108, 1.9595898389816284, 1.784196138381958, 1.945350170135498, 1.416082739830017, 2.064642906188965, 1.0506212711334229, 1.6227446794509888, 1.0033318996429443, 1.505257248878479, 1.0028568506240845, 0.6274805068969727, 1.4439401626586914, 1.587863802909851, 1.1598221063613892, 1.498486876487732, 1.184914469718933, 1.7404240369796753, -0.23110359907150269, 1.8027336597442627, 0.8465827107429504, 1.158596158027649, -0.12499502301216125, 1.5345361232757568, 0.8469158411026001, 1.2177677154541016, 0.06865401566028595, 0.22658230364322662, 1.4897241592407227, 0.9931418895721436, -0.3577333986759186, 0.5338138937950134, 0.5112457871437073, 0.37899768352508545, 0.5517551302909851, 0.5024477243423462, 0.3987458348274231, -0.3087290823459625, -0.3539457619190216, 1.0673022270202637, 1.321824312210083, 0.48313379287719727, -1.1617642641067505, -0.8124355673789978, -1.4520151615142822, 2.2560794353485107, -0.6670147180557251, -0.1809217780828476, 1.1968793869018555, 1.5539358854293823, 1.595673680305481, 1.5401126146316528, 1.187708854675293, 0.5038745999336243, 3.0686442852020264, 4.123976707458496, 3.0041894912719727, 1.1848679780960083, 1.297721266746521, 0.9273462295532227, 0.7773542404174805, 0.9081366062164307, 0.43511122465133667, 1.048279047012329, 0.28002145886421204, 0.06567780673503876, 2.603466272354126, 1.3191734552383423, 0.36029869318008423, 0.6783035397529602, 0.507758378982544, 0.07470805197954178, 0.036275628954172134, 1.5847333669662476, -1.7440775632858276, -1.505877137184143, 0.2649371325969696, 0.6923153400421143, 0.8982371687889099, 0.5299132466316223, 0.5649812817573547, 0.3271094560623169, -1.9742448329925537, -2.6683623790740967, -2.206207752227783, 1.5939074754714966, 0.21798333525657654, -0.053698278963565826, 3.5577590465545654, 0.933222234249115, 1.2130160331726074, 4.714488983154297, 1.9339014291763306, 4.461015224456787, 1.089707374572754, 2.1416754722595215, 1.4641839265823364, 3.821254253387451, 3.6482670307159424, 2.0975613594055176, 1.2187036275863647, 2.120209217071533, 1.7676467895507812, 1.7264128923416138, 1.4358125925064087, 1.9669864177703857, 0.8585684299468994, 1.7845708131790161, 0.9164472222328186, 1.6152206659317017, 0.9748068451881409, 0.6214003562927246, 1.430312156677246, 1.4658796787261963, 0.9964339137077332, 1.461653709411621, 1.1086094379425049, 1.5716569423675537, -0.11820424348115921, 1.7992467880249023, 0.8248462677001953, 1.231836199760437, 0.07739429175853729, 1.6597223281860352, 0.7933809757232666, 1.3380423784255981, -0.007976951077580452, 0.10687519609928131, 1.5742518901824951, 0.9120137095451355, -0.3792531490325928, 0.5739946961402893, 0.5841264128684998, 0.3421119451522827, 0.5871232151985168, 0.6052318811416626, 0.511553943157196, -0.5025423169136047, -0.340216726064682, 1.0866056680679321, 1.2445876598358154, 0.5235912799835205, -1.1418553590774536, -0.37823212146759033, -1.3342962265014648, 2.3976669311523438, -0.5554074645042419, -0.1412772685289383, 0.9277483224868774, 1.5325767993927002, 1.633580207824707, 1.404060959815979, 0.9922519326210022, 0.4968109726905823, 3.064375162124634, 4.122241020202637, 3.1240410804748535, 1.351357340812683, 1.169669270515442, 1.125045895576477, 0.8560924530029297, 1.0059247016906738, 0.4257277250289917, 1.3129643201828003, 0.37121298909187317, -0.007078672293573618, 2.6136226654052734, 1.252180814743042, 0.1924278736114502, 0.45479774475097656, 0.4666701853275299, -0.13599362969398499, 0.052490632981061935, 1.5569227933883667, 0.11207173764705658, 1.5673251152038574, 0.21948276460170746, -0.1706579476594925, 0.20658865571022034, 0.4444074034690857, -0.06275875866413116, -0.09602004289627075, 0.4329732656478882, 0.3868177533149719, 0.5335736870765686, -1.615212082862854, -1.6560707092285156, -0.3140912353992462, -3.6353068351745605, -0.7322068214416504, -0.28341037034988403, -1.0050400495529175, -0.3419286608695984, -0.9155945777893066, -0.8803226947784424, -0.7133737802505493, -0.16435860097408295, -0.676879346370697, -0.8959323763847351, -0.2383534014225006, -0.2511528432369232, -0.3358331620693207, -0.14717106521129608, -0.296308696269989, -0.9763094782829285, -0.31645631790161133, -0.059382546693086624, -0.1863415539264679, -0.2748272716999054, -0.34713470935821533, -0.0542185939848423, -0.1688673198223114, -0.8496227264404297, -0.25317972898483276, -0.08508124947547913, -0.26484042406082153, -0.06464679539203644, -0.3290494382381439, 0.092121921479702, -0.34205880761146545, -0.0895528569817543, -0.12434211373329163, 0.03791821002960205, -0.38038498163223267, -0.5401926636695862, -0.25441575050354004, 0.09118084609508514, 0.1188853308558464, -0.166121244430542, -0.14382879436016083, 0.19497434794902802, -0.17046307027339935, 0.05484700947999954, -0.01568160206079483, -0.03641972318291664, -0.09813490509986877, -0.13234658539295197, 0.12830500304698944, 0.1137353703379631, -0.08941684663295746, -0.165379598736763, 0.05546451732516289, 0.4119976758956909, 0.24452979862689972, 0.3213237524032593, -0.3851219117641449, -0.028218602761626244, 0.11134273558855057, -0.03273233771324158, -0.2635450065135956, -0.27601709961891174, -0.2385721355676651, -0.25492680072784424, 0.04179928079247475, 0.6108481884002686, -0.646676778793335, -0.6546499729156494, -0.26968488097190857, -0.1279374063014984, -0.03908933326601982, -0.09513313323259354, -0.1315973550081253, 0.35041600465774536, 0.07261974364519119, 0.13131588697433472, 0.0683763399720192, -0.28039631247520447, -0.06540018320083618, 0.0860893726348877, 0.01173508632928133, 0.05043424665927887, 0.0319412499666214, 0.44078320264816284, -0.22699443995952606, 0.569207489490509, 10.118484497070312, 0.5869184732437134, -0.23266395926475525, -0.22150415182113647, 0.11243846267461777, -0.08446071296930313, 0.03232450410723686, -0.14664967358112335, 1.566145658493042, 0.8566641807556152, -4.340214729309082, -1.0850410461425781, -0.9245840311050415, -8.765680313110352, -2.57635760307312, -0.8307259678840637, -1.5788475275039673, -0.10425139963626862, -1.879743218421936, -1.6567991971969604, -1.7835394144058228, -0.658108115196228, -1.1952704191207886, -17.831636428833008, -0.9914507865905762, -39.30318832397461, -0.6488813161849976, -17.420658111572266, -0.7398617267608643, -8.333794593811035, -0.7403357625007629, -0.41006144881248474, -0.6084940433502197, -0.3199058473110199, -0.705725371837616, -0.09825854748487473, -0.2415328025817871, -0.16026397049427032, -0.5344529747962952, -0.30099567770957947, -0.5692082047462463, -0.3368820250034332, -0.700025737285614, 0.38944900035858154, -0.6970731019973755, -0.22601492702960968, -0.29214417934417725, 0.19525261223316193, -0.4706447124481201, -2.170785427093506, -0.4108344316482544, 0.15164020657539368, 0.08020782470703125, -1.3762803077697754, -0.3609658181667328, 0.31938210129737854, -0.16691942512989044, -0.2319401353597641, -0.10534583777189255, 0.0004285731993149966, -0.17633305490016937, 0.015866998583078384, 0.30904003977775574, 0.5252588391304016, -0.3907189667224884, -0.41111278533935547, -0.06981083005666733, 0.7134514451026917, 0.25976642966270447, 0.7031596302986145, -0.325287401676178, -0.282072514295578, -0.08061013370752335, -0.2923697233200073, -0.6317827701568604, -0.716009259223938, -0.6643671989440918, -0.4638528823852539, -0.0693204402923584, -1.4576201438903809, -1.7735381126403809, -1.2580504417419434, -0.3902900516986847, -0.3694489896297455, -0.4418288469314575, -0.17822803556919098, -0.3224373161792755, -0.07440484315156937, 0.07097062468528748, 0.03084496408700943, 0.1774269938468933, -1.1567301750183105, -0.3372563421726227, 0.06563237309455872, -0.026887614279985428, 0.022859806194901466, 0.04626991227269173, 0.13664039969444275, -0.6153284311294556, 0.19879627227783203, 0.49912333488464355, 0.15074574947357178, -0.1389814019203186, 0.2656807601451874, 0.3537868559360504, -0.07524000108242035, -0.02653874270617962, 0.04904153198003769, -0.014147642999887466, 0.036865849047899246, -0.2073207050561905, -4.319263935089111, -0.09087192267179489, 0.4187915623188019, -0.6202352046966553, -0.0365801639854908, 0.03477364033460617, 0.07524202018976212, -0.15304630994796753, -1.084322214126587, -0.5789081454277039, -0.017221834510564804, -0.11415266245603561, -0.3979513645172119, -0.0009047755738720298, -0.08691267669200897, 0.07778538018465042, 0.08316941559314728, 0.013613002374768257, -0.39775756001472473, -0.10488886386156082, -0.07013958692550659, 0.006998687516897917, -0.29658201336860657, 0.051460158079862595, -0.09595461189746857, 0.04474246874451637, -0.8101599812507629, 0.002780354116111994, 0.02211136929690838, -0.01593831367790699, -0.02383730746805668, -0.12470965087413788, 0.03665545955300331, -0.15279939770698547, 0.04156281426548958, -0.10346100479364395, 0.12897290289402008, 0.006309210788458586, -0.6199628710746765, -0.11041916161775589, 0.11414217203855515, -0.031745944172143936, -0.06135125830769539, 0.03421567752957344, 0.11457649618387222, 0.10210516303777695, 0.04936494678258896, 0.04891703277826309, 0.03114130161702633, -0.06390345096588135, 0.11051042377948761, -0.055351242423057556, 0.1513061672449112, -0.07033836096525192, 0.07845842838287354, 0.13343358039855957, 0.18489046394824982, -0.05284982547163963, 0.12340499460697174, -0.005748967174440622, -0.02615467831492424, 0.03903046250343323, 0.027949120849370956, -0.14660902321338654, -0.13830402493476868, -0.06515458971261978, -0.09806390851736069, 0.12094021588563919, 1.3407784700393677, -0.06484344601631165, -0.20136243104934692, 0.06163958087563515, 0.10626552253961563, 0.038034453988075256, -0.011921621859073639, 0.05996355414390564, 0.31614866852760315, 0.14564809203147888, 0.017926644533872604, -0.030957091599702835, 0.020635919645428658, -0.08232193440198898, -0.07647424191236496, -0.15627843141555786, 0.013405008241534233, -0.11506153643131256, -0.06344332545995712, -0.06442835927009583, -1.6948215961456299, -1.374026894569397, 0.45735812187194824, 0.7441738247871399, 0.926918625831604, 0.5328865647315979, 0.6245124936103821, 0.6043076515197754, -1.9460148811340332, -3.728248119354248, -0.8666092753410339, 0.32013753056526184, 1.814964771270752, 0.08204898983240128, 3.5145561695098877, 4.606217861175537, 1.6926093101501465, 4.154201030731201, 2.084848642349243, 4.394313812255859, 2.1543452739715576, 2.3002374172210693, 1.5719012022018433, 3.7970693111419678, 3.478036403656006, 2.2518043518066406, 1.1834920644760132, 1.9087597131729126, 1.5292699337005615, 1.713663935661316, 0.7750661969184875, 2.0037338733673096, 0.9753880500793457, 1.8458985090255737, 0.7545556426048279, 1.5309269428253174, 1.0138039588928223, 0.779555082321167, 1.324082612991333, 1.5432661771774292, 1.2808539867401123, 1.302045226097107, 1.2884753942489624, 1.5711995363235474, -0.05899054557085037, 1.9335743188858032, 0.8873742818832397, 1.0036513805389404, 0.06123936548829079, 1.6129034757614136, 1.7194935083389282, 1.3282191753387451, 0.10062761604785919, 0.179970845580101, 2.2549612522125244, 1.5311799049377441, -0.4092741310596466, 0.9473189115524292, 0.9941576719284058, 0.5455511808395386, 0.43860843777656555, 0.469561368227005, 0.47462910413742065, -0.509946882724762, -0.41698065400123596, 1.1551569700241089, 1.159548282623291, 0.4582456648349762, -1.1753933429718018, -0.8450286984443665, -1.585595726966858, 2.9577999114990234, -0.6436326503753662, -0.17514505982398987, 1.5109885931015015, 1.5636075735092163, 1.7329803705215454, 1.5543644428253174, 1.0518341064453125, 0.4883584976196289, 2.5242295265197754, 4.147961139678955, 2.9376206398010254, 1.3096472024917603, 1.2615928649902344, 0.5879326462745667, 0.8940541744232178, 1.0711349248886108, 0.46630460023880005, 1.2440662384033203, 0.340199738740921, 0.11749430000782013, 2.7758820056915283, 1.200555443763733, 0.2967906594276428, 0.6783573627471924, 0.48993897438049316, 0.10238969326019287, -0.011745195835828781, 1.5402342081069946, -1.4734909534454346, -1.3780670166015625, 0.4619764983654022, 0.7953463792800903, 1.0563148260116577, 0.370169997215271, 0.5685901045799255, 0.4622335433959961, -2.030644178390503, -2.401200771331787, -0.957638144493103, 1.569664716720581, 1.6778439283370972, 0.1335846483707428, 3.960793972015381, 4.675021648406982, 3.5973570346832275, 4.142901420593262, 2.0527288913726807, 4.457016468048096, 1.5721279382705688, 2.3970298767089844, 1.5058456659317017, 3.721092939376831, 4.240220546722412, 2.1291346549987793, 1.2269959449768066, 2.0664103031158447, 1.756988763809204, 1.6647372245788574, 1.3654842376708984, 2.0576062202453613, 0.9074469208717346, 1.802932858467102, 0.8626964688301086, 1.5198301076889038, 1.0907427072525024, 0.5751223564147949, 1.4303526878356934, 1.53548002243042, 0.9767692685127258, 1.3242193460464478, 1.1571396589279175, 1.6120322942733765, -0.13162536919116974, 1.6732239723205566, 0.7331457138061523, 1.1402865648269653, -0.08006050437688828, 1.6901044845581055, 0.6937851905822754, 1.3397859334945679, 0.011032379232347012, 0.05293005332350731, 1.2205897569656372, 1.3738906383514404, -0.3984019458293915, 0.9045627117156982, 0.7442097663879395, 0.30125802755355835, 0.3498018682003021, 0.420055627822876, 0.5645756125450134, -0.4032018482685089, -0.2462673783302307, 1.0896871089935303, 1.2518011331558228, 0.4280555546283722, -1.1818678379058838, -0.9058977365493774, -1.6089688539505005, 2.4408814907073975, -0.616915225982666, -0.06590677797794342, 1.4060014486312866, 1.7127970457077026, 1.6957112550735474, 1.6063036918640137, 1.0776170492172241, 0.658760130405426, 3.0399088859558105, 4.112060070037842, 3.030510425567627, 1.3490625619888306, 1.362789273262024, 0.6233588457107544, 0.793054461479187, 0.9226189851760864, 0.41492846608161926, 1.0315072536468506, 0.22529368102550507, 0.09893400222063065, 2.512591600418091, 1.1801563501358032, 0.3042181730270386, 0.4467712342739105, 0.40187403559684753, -0.06129360944032669, -0.02255595661699772, 1.7093428373336792, -1.6432732343673706, -1.585505485534668, 0.4455070197582245, 0.6441716551780701, 1.0770249366760254, 0.5162317752838135, 0.6279934048652649, 0.4914849102497101, -2.109876871109009, -2.7053401470184326, -2.3338234424591064, 1.7057536840438843, 0.20316848158836365, -0.01807522587478161, 3.4759607315063477, 1.0748878717422485, 1.274013638496399, 4.655988693237305, 2.0632402896881104, 4.5135416984558105, 0.9690438508987427, 2.043833017349243, 1.6856648921966553, 3.8168728351593018, 3.757876396179199, 2.3390259742736816, 1.3626359701156616, 2.087589740753174, 1.7162327766418457, 1.9472029209136963, 1.437515139579773, 2.0037448406219482, 1.0522329807281494, 1.859933614730835, 0.9110863208770752, 1.652016520500183, 1.028664469718933, 0.6730564832687378, 1.3714547157287598, 1.6440644264221191, 1.0050503015518188, 1.535170316696167, 1.1386771202087402, 1.571481466293335, -0.26906633377075195, 2.007200241088867, 0.97314453125, 1.1479214429855347, -0.033159784972667694, 1.6762545108795166, 0.7559630870819092, 1.3668254613876343, 0.17066365480422974, 0.030890384688973427, 2.1763641834259033, 0.9327290058135986, -0.4737824499607086, 0.7423145771026611, 0.5662016868591309, 0.4495573043823242, 0.5087298154830933, 0.5781282186508179, 0.395752489566803, -0.39331531524658203, -0.29981517791748047, 1.2254409790039062, 1.13060462474823, 0.35779711604118347, -1.211405873298645, -0.8227726817131042, -1.6215662956237793, 2.342751979827881, -0.6547279953956604, -0.09885267913341522, 1.28086519241333, 1.5423967838287354, 1.6239371299743652, 1.49622642993927, 1.1781095266342163, 0.6366270780563354, 2.9106123447418213, 4.010722637176514, 3.0326154232025146, 1.1186727285385132, 1.242163062095642, 1.0580123662948608, 0.9041142463684082, 0.9899135231971741, 0.5209850072860718, 0.9766155481338501, 0.17762179672718048, 0.09583786129951477, 2.616609811782837, 1.2277886867523193, 0.3185042440891266, 0.49217161536216736, 0.3211157023906708, 0.09509262442588806, -0.09274669736623764, 1.6018213033676147, -552.864501953125, -89.66056823730469, -0.11743012815713882, -2.334815502166748, -0.2966395616531372, -0.03662319853901863, 42.54216003417969, -0.13022921979427338, 0.2541114091873169, -2.4763221740722656, 0.7610852122306824, 54.44601821899414, -5.226278781890869, 10.895147323608398, 254.3391571044922, -4.229949474334717, 4.767922878265381, 22.331096649169922, 0.5956622362136841, 116.17454528808594, 0.10975602269172668, 0.4308340847492218, -0.09527736902236938, 81.89161682128906, -4.8345947265625, -0.4923328161239624, 256.7643737792969, 107.61156463623047, 32.51325607299805, -0.2517307698726654, -0.10120502859354019, -0.31792065501213074, -6.690577507019043, -0.21603195369243622, -0.05702843517065048, -0.12909549474716187, 1.0213677883148193, -0.002027353970333934, 116.52684020996094, -0.36094701290130615, -0.12765632569789886, -0.3591914772987366, 5.100647926330566, -0.4217729866504669, 0.15308904647827148, -78.20451354980469, 0.951957106590271, -0.3251190185546875, 0.08644768595695496, -0.33919963240623474, -0.05406152084469795, -0.2206450253725052, -0.10779125243425369, -0.07888578623533249, -0.36401933431625366, -0.3730511963367462, 0.03132060170173645, -0.15898336470127106, -0.1694311797618866, -0.06712400913238525, -0.10189072042703629, -0.0068391598761081696, -0.06516451388597488, 0.1782175898551941, 0.21338370442390442, -0.2712914049625397, -0.29605811834335327, -17.021631240844727, 0.14963530004024506, -0.022046484053134918, 0.4077531695365906, -0.2888941764831543, 1.3947776556015015, 0.5609872937202454, -10.491022109985352, -0.40771394968032837, -9.830562591552734, 0.5514671802520752, -0.06376117467880249, -0.1530449390411377, -0.6828411817550659, -0.7085099220275879, -0.5495133996009827, -0.18635305762290955, -0.3539504408836365, -0.35058078169822693, -0.258853554725647, -0.21096371114253998, -103.15705871582031, -17.2119083404541, -0.171717569231987, -0.14994323253631592, -0.5220857262611389, -0.14971013367176056, -0.16776955127716064, 24.485219955444336, -0.12893813848495483, -0.05572142452001572, -0.09593889117240906, -0.28193774819374084, -0.3820389211177826, 0.020328717306256294, -0.18613170087337494, -0.089986152946949, -0.21945148706436157, -0.49083277583122253, -0.015738744288682938, -0.0071320682764053345, 0.029002400115132332, -0.019386347383260727, -0.26510390639305115, 1.1224726438522339, 6.664980888366699, 0.6481620073318481, -2.431462049484253, 0.677589476108551, -0.06548326462507248, -0.13572005927562714, -0.08753036707639694, 0.12488378584384918, 0.18689033389091492, 0.43816304206848145, -0.0063032894395291805, 0.03186273202300072, 0.39663681387901306, 0.08504485338926315, 0.07693356275558472, 0.09288141876459122, -0.076265349984169, -0.037395354360342026, 0.19528652727603912, -0.06863228231668472, 0.14609447121620178, -0.08660196512937546, 0.23252668976783752, -0.03541788086295128, -0.057179808616638184, 0.08873672038316727, 0.8471117615699768, 0.11827612668275833, 0.03169577196240425, -0.10762202739715576, -0.009779691696166992, -0.06842096894979477, 0.0792987123131752, -0.0782332643866539, 0.0766831785440445, 0.10943435877561569, -0.06310806423425674, -0.10216032713651657, 0.713716983795166, 0.09118673205375671, -0.031047694385051727, -0.11960230022668839, 0.3543779253959656, 0.12408443540334702, -0.11377641558647156, -0.09686360508203506, 0.07073569297790527, -0.06876904517412186, -0.008683153428137302, -0.10921872407197952, -0.013554458506405354, -0.06658368557691574, -0.09150417149066925, 0.08272112160921097, 0.06052215397357941, 0.012413851916790009, 0.03385744243860245, 0.017742592841386795, -0.03555351868271828, 0.0060442909598350525, 0.2159235030412674, -0.2910517752170563, 0.040971118956804276, 0.051287490874528885, -0.07658003270626068, -0.00937520619481802, 0.032818544656038284, -0.0017873405013233423, -1.3051505088806152, 0.011788404546678066, 0.016169341281056404, -0.1182766780257225, 0.002938428893685341, 0.06404751539230347, -0.13711322844028473, 0.03153100982308388, -0.1480286419391632, -0.18700993061065674, 0.07585188746452332, -0.18576261401176453, -0.030102837830781937, -0.03429120406508446, 0.06768222898244858, -0.06672611832618713, -0.06789281964302063, -0.032425131648778915, 0.09039555490016937, -0.0841752365231514, -0.5628393292427063, -0.2998746335506439, 0.7201017141342163, -0.6106091141700745, -1.2528587579727173, 2.5749545097351074, 0.2486107051372528, 0.003795512719079852, -0.6725246906280518, -0.6740331649780273, -0.7349206805229187, 0.3413822054862976, -3.0800232887268066]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (20, 30), 'etaBin': (1.54, 2.5)}}, 'et4_eta2': {'discriminator': {'threshold': -0.14500080645084382, 'nodes': [100, 5, 1], 'bias': [0.07917795330286026, -0.11831410974264145, 0.02653731033205986, 0.037854090332984924, 0.0019815023988485336, -0.3486272096633911], 'weights': [0.19843904674053192, -0.058875974267721176, -0.04326336458325386, -0.11321347951889038, -0.22157005965709686, -0.10730722546577454, 0.3745001554489136, -0.2558435797691345, 0.1424679458141327, 1.0263217687606812, 0.6999816298484802, 0.30600643157958984, 0.07806351780891418, 0.08327186852693558, -0.1777438074350357, 0.10038430243730545, -0.5248778462409973, -0.038612525910139084, -0.39872047305107117, -0.28444749116897583, -0.9980010986328125, -1.5127053260803223, 0.1979541778564453, -0.32997938990592957, -0.3489316999912262, -0.15367491543293, -2.2198708057403564, -0.26825016736984253, -2.7749743461608887, -0.8617600202560425, -0.09909697622060776, -0.17918868362903595, -0.18626078963279724, -0.14524361491203308, -0.15213170647621155, -0.29111459851264954, -1.9678081274032593, -0.2911415696144104, -0.33365485072135925, -0.15995465219020844, -0.17492829263210297, -1.3340978622436523, -0.605542778968811, -0.25727397203445435, -0.29796531796455383, -0.2302875965833664, -1.5060298442840576, -0.16948801279067993, 0.9827492237091064, -0.11198002845048904, -0.14857470989227295, -0.1308097541332245, -0.5809677243232727, -0.2103646844625473, 0.06424117088317871, 3.1437878608703613, -0.25365424156188965, 0.011770646087825298, 0.7938454747200012, -0.24619118869304657, 0.03621393069624901, -0.2733103036880493, -0.3014981746673584, -0.14885523915290833, -0.5823711156845093, -0.43225881457328796, -0.6819719672203064, -0.22043395042419434, -0.239812433719635, -0.24446256458759308, -0.19261875748634338, -0.09331440925598145, -0.0354016087949276, 0.1703440248966217, -0.4293913245201111, -0.3520030379295349, -0.6189568042755127, -0.2027088701725006, -0.16495664417743683, -0.09841347485780716, 0.11157503724098206, -0.143389493227005, -1.2832545042037964, -0.2871471047401428, 0.2769422233104706, 0.8271965384483337, -0.18569205701351166, -0.12356787174940109, 0.006625983398407698, -0.12885113060474396, -0.1413503736257553, -0.06292189657688141, -1.196790099143982, -0.5923837423324585, -0.37488433718681335, -0.08503884077072144, 0.061679136008024216, -0.005496353842318058, -0.4499998390674591, -0.3197402060031891, 0.6277943253517151, -0.10406453162431717, -0.3655036389827728, -1.0510603189468384, -1.1635586023330688, -0.7228602170944214, 2.0800740718841553, -0.9477074146270752, 0.24350564181804657, 1.4949134588241577, 3.0407767295837402, 1.0606045722961426, 0.6999744176864624, 0.07677821069955826, 0.13364534080028534, 0.20846040546894073, -2.300600051879883, 0.02978888340294361, -0.645549476146698, -0.9755619168281555, -4.458914279937744, -7.862541675567627, 0.6324165463447571, -1.301794409751892, -1.0996429920196533, -1.024741530418396, -11.186277389526367, -1.0049670934677124, -12.887227058410645, -3.7494685649871826, -0.8687475919723511, -1.3223682641983032, -0.867615282535553, -0.8138494491577148, -1.028181791305542, -0.8000075221061707, -9.404091835021973, -1.0163896083831787, -1.445360541343689, -0.6547778248786926, -0.7807666659355164, -5.904367923736572, -2.501373291015625, -1.5232384204864502, -1.0277657508850098, -0.9240407943725586, -7.114432334899902, -0.6644827127456665, 4.936777591705322, -0.9329755902290344, -0.8921515941619873, -0.8116706609725952, -3.0774483680725098, -0.9190694093704224, -0.07221107184886932, 14.74031925201416, -0.9749648571014404, -0.1763647496700287, 12.005014419555664, -0.8935961723327637, 0.6402859687805176, -1.0257129669189453, -1.181807518005371, -0.9516039490699768, -3.1304805278778076, -1.4402759075164795, -3.6530215740203857, -0.8244721293449402, -0.8461655974388123, -0.6997277140617371, -1.0689067840576172, -0.8016883134841919, 0.3022933006286621, 0.32295846939086914, -1.5995917320251465, -1.2440654039382935, -2.8085544109344482, -1.2667522430419922, -0.9192014336585999, -0.2858508825302124, 0.234048992395401, -0.26895758509635925, -6.08580207824707, -1.4630569219589233, 2.323629379272461, 4.4118242263793945, -0.781417727470398, -0.16982564330101013, 0.6514472961425781, -0.9848294258117676, -0.6113961935043335, 0.18455840647220612, -6.346983432769775, -3.0930964946746826, -2.12569260597229, -0.825966477394104, -0.03689870238304138, -0.05597178637981415, -1.7091572284698486, -0.8694016337394714, 0.538478672504425, -0.29178640246391296, -0.4680575132369995, -1.1599676609039307, -1.1469377279281616, -0.890026330947876, 1.9173754453659058, -0.9527194499969482, 0.24605567753314972, 1.3845936059951782, 2.9548888206481934, 0.8911598324775696, 0.5366544723510742, 0.13727369904518127, 0.03529117628931999, 0.36252060532569885, -2.377124309539795, 0.017898760735988617, -0.5337632894515991, -0.9570571184158325, -4.513769149780273, -7.736189365386963, 0.6784204840660095, -1.1835755109786987, -1.0912556648254395, -1.4223910570144653, -11.407207489013672, -1.0612695217132568, -12.851149559020996, -3.981472969055176, -0.9559224843978882, -1.2679510116577148, -1.0460032224655151, -0.7622424364089966, -1.0731977224349976, -0.952303946018219, -9.278315544128418, -0.9659073948860168, -1.3613336086273193, -0.4313996434211731, -0.8500753045082092, -5.89675760269165, -2.688828468322754, -1.5145313739776611, -0.9691314101219177, -0.9684584140777588, -7.193000793457031, -0.6728978157043457, 4.875428199768066, -0.8902928233146667, -0.8915324211120605, -0.6865395903587341, -3.149742841720581, -1.0453267097473145, -0.06865935027599335, 14.666970252990723, -0.9149070382118225, -0.30999842286109924, 12.11669921875, -1.038794994354248, 0.6735774278640747, -1.0106775760650635, -1.03125, -0.855364978313446, -3.305170774459839, -1.5760698318481445, -3.4677438735961914, -0.8828592896461487, -0.9409480690956116, -0.6717583537101746, -1.1452490091323853, -0.724443793296814, 0.09653688967227936, 0.3005527853965759, -1.504169225692749, -1.3878728151321411, -2.634042501449585, -1.2404276132583618, -1.0747389793395996, -0.7351477146148682, 0.2935914099216461, -0.1825401782989502, -6.09831428527832, -1.4852796792984009, 2.2743186950683594, 4.412333965301514, -0.8675190210342407, -0.14960786700248718, 0.6853855848312378, -0.9687178730964661, -0.5718677639961243, 0.1714552789926529, -6.306363105773926, -3.0675199031829834, -1.962223768234253, -0.7187012434005737, 0.09421937167644501, 0.0514395497739315, -1.6508066654205322, -1.0744011402130127, 0.5221546292304993, -0.1688251942396164, -0.2852502763271332, -1.1912262439727783, -1.1741142272949219, -0.8497717380523682, 2.0628299713134766, -0.9573359489440918, 0.1239398643374443, 1.39858877658844, 3.0097548961639404, 0.8631302118301392, 0.545143187046051, 0.17631390690803528, -0.1239486038684845, 0.3684420585632324, -2.429640769958496, -0.03239741176366806, -0.5000216364860535, -0.9886659383773804, -4.448267459869385, -7.8853678703308105, 0.4418301582336426, -1.3391191959381104, -1.3216300010681152, -1.2984806299209595, -11.182941436767578, -0.9329841136932373, -12.91749095916748, -3.9666085243225098, -0.9302960634231567, -1.3476884365081787, -0.9111068844795227, -0.80168616771698, -1.1871225833892822, -0.8475130200386047, -9.280434608459473, -1.1822551488876343, -1.2640880346298218, -0.5527045130729675, -0.8045503497123718, -5.992523670196533, -2.5902857780456543, -1.463446855545044, -1.0229277610778809, -0.944084644317627, -7.133020877838135, -0.782139778137207, 4.848005771636963, -1.0444939136505127, -0.7845062017440796, -0.13820376992225647, -3.2052440643310547, -0.9270139932632446, 0.058824386447668076, 14.628971099853516, -0.9205606579780579, -0.20612655580043793, 4.048259735107422, -0.8629136085510254, 0.7893847227096558, -0.8947634696960449, -1.1829833984375, -0.8525384068489075, -3.2257721424102783, -1.59385085105896, -3.6080033779144287, -0.8026497960090637, -0.9271995425224304, -0.7118434309959412, -0.9384663701057434, -0.6680995225906372, 0.20856314897537231, 0.3579999804496765, -1.6446177959442139, -1.3325717449188232, -2.8000986576080322, -1.323870062828064, -0.8808022737503052, -0.6807488203048706, 0.30382585525512695, -0.8766505122184753, -6.005836486816406, -1.2826693058013916, 2.448645830154419, 4.384418964385986, -0.9507842063903809, -0.22881141304969788, 0.5134653449058533, -0.9616960883140564, -0.7230673432350159, 0.11827108263969421, -6.438907146453857, -3.122575521469116, -2.015510320663452, -0.7925659418106079, 0.01845378428697586, 0.10577049106359482, -1.6219987869262695, -0.8885412812232971, -0.3990319073200226, 0.1610254943370819, 0.3931426405906677, 1.0031417608261108, 1.1299707889556885, 0.7007510662078857, -1.9989891052246094, 0.7475440502166748, -0.24501515924930573, -1.3563021421432495, -2.9222452640533447, -0.8815038800239563, -0.6206080913543701, -0.09661660343408585, 0.03201199322938919, -0.22039464116096497, 2.4530599117279053, 0.1538521945476532, 0.4481150805950165, 0.8931834697723389, 4.328883647918701, 7.734996318817139, -0.6424065232276917, 1.1826496124267578, 1.3137836456298828, 1.3616467714309692, 11.386146545410156, 1.080670952796936, 12.866631507873535, 3.9327449798583984, 1.060046672821045, 1.17130708694458, 0.8657472729682922, 0.7906845808029175, 1.0713013410568237, 1.0066542625427246, 9.36905574798584, 1.1339709758758545, 1.4620819091796875, 0.5239474177360535, 0.7948567271232605, 6.029382228851318, 2.539458751678467, 1.3745920658111572, 0.8908397555351257, 1.049965262413025, 7.19590950012207, 0.6697745323181152, -4.869314670562744, 1.0591723918914795, 0.8253028392791748, 0.7593411207199097, 3.0658555030822754, 1.0158782005310059, 0.1413022130727768, -14.779873847961426, 0.823947012424469, 0.20322173833847046, -4.047779083251953, 0.9640843868255615, -0.6722579002380371, 1.0212986469268799, 1.1114691495895386, 0.9280045032501221, 3.092660665512085, 1.6551597118377686, 3.593964099884033, 0.7618563771247864, 0.9365280270576477, 0.6471535563468933, 1.1175612211227417, 0.6640381813049316, -0.24009032547473907, -0.47837749123573303, 1.5553977489471436, 1.4176009893417358, 2.7892978191375732, 1.2938426733016968, 1.1021111011505127, 0.644943356513977, -0.3228708803653717, 0.1429155170917511, 6.081678867340088, 1.3728801012039185, -2.3426244258880615, -4.3570942878723145, 0.8937885761260986, 0.24191537499427795, -0.5800982713699341, 0.9014846086502075, 0.588697612285614, -0.31642162799835205, 6.248983860015869, 3.1653358936309814, 2.141467809677124, 0.7257773876190186, 0.08191932737827301, 0.0024512677919119596, 1.7630603313446045, 0.9945467114448547, 0.042988210916519165, 14.605488777160645, 2.8634936809539795, 2.8143715858459473, -2.6142516136169434]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (50, 500000), 'etaBin': (1.37, 1.54)}}, 'et2_eta1': {'discriminator': {'threshold': -0.080000812560319906, 'nodes': [100, 9, 1], 'bias': [0.1834578812122345, 0.038406264036893845, 0.2277717888355255, -0.11224567145109177, -0.032732654362916946, -0.13294199109077454, -0.0878298208117485, -0.03744007274508476, -0.2362646758556366, -0.38488686084747314], 'weights': [0.004499542061239481, -1.9415453672409058, -0.30703845620155334, 0.1669836789369583, 0.16948339343070984, 0.3984569013118744, 0.31329405307769775, -0.35503950715065, -15.21175479888916, -8.14402961730957, 0.7569541931152344, 36.71369934082031, 1.1281871795654297, 0.5330346822738647, 3.3125078678131104, 5.399392127990723, 5.428003311157227, 2.7117762565612793, 2.896425724029541, 2.153343915939331, 2.2664084434509277, 2.3275535106658936, 0.6963872313499451, -1.242303729057312, 1.416195034980774, -0.4414708614349365, 1.6310455799102783, 1.647055745124817, 1.0301884412765503, 1.561370611190796, 0.6816695928573608, -0.06212157383561134, 1.190083384513855, 0.9948219656944275, 0.5635619163513184, 0.48699843883514404, 0.6377851963043213, 1.1684753894805908, 0.5559937357902527, 1.7703348398208618, 0.4505130648612976, 0.530821681022644, 0.4961338937282562, 0.49482065439224243, 1.167014241218567, 0.4118550717830658, 0.2557421624660492, 1.4883331060409546, 0.22240997850894928, 0.3126266300678253, 0.16667155921459198, 0.0696839913725853, 0.045265376567840576, 0.19445180892944336, 2.012479066848755, 0.5592862963676453, 0.1429232805967331, -2.3565707206726074, 3.2528812885284424, -1.3066539764404297, 0.04093802347779274, 0.03383617848157883, 0.327037513256073, -0.10088060796260834, -0.1659843921661377, 1.8148635625839233, 10.08419418334961, 0.91677325963974, -0.31926605105400085, -0.038209520280361176, 0.335633248090744, -0.06547890603542328, -0.1458699107170105, 0.0707988440990448, 1.649000883102417, 0.4053569436073303, 0.6100645065307617, 0.5359510183334351, 0.07217152416706085, -0.136271670460701, 2.146354913711548, 2.5029799938201904, 1.5638030767440796, 1.088937759399414, 0.9201000928878784, 0.8669834136962891, 0.662987232208252, 1.0024718046188354, 0.6455403566360474, 1.2433773279190063, 0.3235679268836975, -0.19345244765281677, 0.9573050141334534, 0.8204120993614197, 0.25753602385520935, -0.20892475545406342, 1.1113395690917969, -8.521957397460938, 0.4651676118373871, 0.1444692462682724, -1.5022149085998535, -1.8229855298995972, 0.3492593765258789, 0.798374593257904, 0.8134347796440125, 0.47272565960884094, 0.5776800513267517, -0.2740126848220825, -2.629077196121216, -3.1090006828308105, 1.347335934638977, 4.013919353485107, 0.1908143311738968, -1.2652533054351807, 0.6310298442840576, 3.076305866241455, 2.557399034500122, 5.316928863525391, 6.355111598968506, 6.001584529876709, 5.763666152954102, 5.0943450927734375, 3.4046876430511475, 3.0425665378570557, 4.555365562438965, 0.1102314442396164, 4.8203043937683105, 3.7742035388946533, 3.40641450881958, 3.8364181518554688, 2.3925251960754395, 2.232933521270752, 4.025863170623779, 2.707824468612671, 1.6952582597732544, 1.9400101900100708, 3.73349666595459, 5.0669403076171875, 2.0745110511779785, 1.8654143810272217, 1.674062728881836, 1.5602108240127563, 2.8395001888275146, 1.402117371559143, 1.5328067541122437, 0.9909412860870361, 1.4280707836151123, 3.229188919067383, 0.8169304728507996, 1.0814898014068604, 0.6663644313812256, 0.668704628944397, 0.3052811622619629, 0.45168256759643555, 1.1257872581481934, 0.9267649054527283, 0.5674657821655273, -0.4290004372596741, 2.251713991165161, -2.0806214809417725, 0.23142021894454956, 0.2799263298511505, 1.5346530675888062, 0.12800148129463196, 0.17600910365581512, 1.8786375522613525, 2.9274871349334717, 2.382244348526001, -0.25315797328948975, 0.1466868370771408, 1.08413827419281, 0.3730648458003998, -0.4525236487388611, -0.3664560317993164, 0.563310980796814, 1.2535595893859863, 1.6344081163406372, 1.5166316032409668, 0.8127090930938721, 0.6384350061416626, 0.4925779104232788, 6.269612789154053, 3.8223912715911865, 2.513105630874634, 2.285754919052124, 2.351311206817627, 2.1976170539855957, 2.7794792652130127, 1.912764549255371, 1.0071821212768555, 0.12011672556400299, -0.0437142550945282, 2.90798282623291, 2.4290592670440674, 1.2592779397964478, 0.18222394585609436, 2.6393823623657227, 1.9669933319091797, 1.472691297531128, 0.6444822549819946, 28.41168785095215, 47.43718338012695, 13.47498893737793, 0.013317426666617393, 0.196879580616951, -0.12371323257684708, 0.0226189736276865, 0.5873128771781921, 0.09287849068641663, -5.849676609039307, -19.8280029296875, -68.08638000488281, -0.6993151307106018, -19.96688461303711, -25.044160842895508, -26.023447036743164, -21.507848739624023, -1.086702823638916, -0.9635292887687683, -1.2544578313827515, -1.0003620386123657, -0.9917522668838501, -0.894866943359375, -0.6843815445899963, -0.8408843874931335, -0.6775660514831543, -0.9608429074287415, -0.7371110916137695, 11.42117977142334, 3.594266176223755, -0.5161185264587402, -0.8242433071136475, -0.4583587646484375, -0.42477867007255554, 0.9191774725914001, -0.2670925557613373, -0.5567941665649414, 97.39399719238281, -0.4116446375846863, -0.3808867633342743, -0.3668149709701538, -0.22649337351322174, -0.22388523817062378, 0.4518795609474182, -0.46158498525619507, 110.1222152709961, -0.49389466643333435, -0.8184410333633423, -0.32555973529815674, -0.05224964767694473, -0.20526716113090515, -12.303352355957031, -0.040718384087085724, -0.11035522073507309, -0.21083015203475952, 79.80033874511719, 88.04261779785156, 0.540647029876709, 0.0693846046924591, 0.4059399962425232, 0.1039746105670929, -0.10286895185709, -0.13233275711536407, 0.09262023121118546, 91.39602661132812, 70.29059600830078, -0.16574479639530182, -0.554405927658081, 47.85167694091797, -36.75209045410156, -0.15515011548995972, 0.0975303053855896, 0.11210978776216507, -0.18740850687026978, -0.3541460633277893, -0.32059091329574585, -0.2577117681503296, -0.23744109272956848, -0.1360265463590622, -0.010025538504123688, -1.3780848979949951, 0.0021154675632715225, -0.9787189364433289, -0.5059293508529663, -6.785722255706787, -0.4535842835903168, -0.27630648016929626, -0.45833268761634827, -0.5230143666267395, -0.07583164423704147, 0.08355328440666199, 0.171754390001297, -0.5364022254943848, -0.3701072931289673, -0.21269479393959045, 0.10152851045131683, -0.4154379069805145, -7.532531261444092, -9.859244346618652, 0.03940296545624733, -1.2337274551391602, -0.4335934519767761, 0.9166411757469177, 0.7453747987747192, 0.5866844654083252, 0.3642278015613556, 0.32438454031944275, -0.23731689155101776, -0.8489590287208557, -2.9175198078155518, 1.5359359979629517, 12.10604476928711, 1.0601284503936768, 37.87739562988281, 7.095449924468994, 3.9640674591064453, 7.444843769073486, 10.113004684448242, 6.432591915130615, 6.033285617828369, 5.461123466491699, 5.922774791717529, 4.597827911376953, 5.73243522644043, 5.280814170837402, 0.03771522641181946, 4.807012557983398, 3.884894371032715, 3.4321846961975098, 3.775815486907959, 2.2388792037963867, -1.4359182119369507, 3.187615394592285, 2.7590298652648926, 1.6618001461029053, 1.9376020431518555, 2.2107949256896973, 2.1880698204040527, 2.113541841506958, 1.8094573020935059, 2.5658693313598633, 1.4600869417190552, 2.9799880981445312, 1.4653410911560059, 1.8500776290893555, 0.9305185079574585, 1.3162413835525513, 3.284100294113159, 0.9997169375419617, 2.221728801727295, 0.7267639636993408, 0.7726669907569885, 0.267424613237381, 0.4987851083278656, 0.9479166269302368, 0.8012362122535706, 0.5337008237838745, -0.1159716472029686, 2.6097190380096436, -2.4153318405151367, 0.22665263712406158, 0.15801391005516052, 1.209650993347168, 0.1512717753648758, 0.1114291399717331, 4.474946975708008, 2.7808334827423096, 2.305875062942505, 0.02152210846543312, 1.5491405725479126, 0.9760637879371643, 0.4223584830760956, -0.3807240426540375, -0.3168112337589264, 0.755028247833252, 1.2472203969955444, 1.520928144454956, 1.5277856588363647, 0.8655574321746826, 0.21166647970676422, 6.648160934448242, 6.387720108032227, 3.919774293899536, 2.4727578163146973, 2.191469669342041, 2.349933624267578, 2.195526361465454, 2.667527914047241, 1.9361271858215332, 1.1334940195083618, 0.258385568857193, -0.06807686388492584, 2.6236867904663086, 2.6032185554504395, 1.106451153755188, 0.3257206678390503, 2.5508103370666504, 1.929329514503479, 1.281491994857788, 0.6217859387397766, -1.5021765232086182, -1.4461970329284668, 0.5640124082565308, 0.981315553188324, 1.2827445268630981, 0.5912262797355652, 1.178019642829895, -0.33531904220581055, -2.809582233428955, -3.1131229400634766, 1.4225068092346191, 3.87982177734375, 0.469290554523468, -1.1348881721496582, 0.6388782262802124, 3.050302028656006, 2.4826037883758545, 5.365139007568359, 6.385817050933838, 5.990123271942139, 5.323315620422363, 5.085732460021973, 3.3135428428649902, 3.0149080753326416, 4.425673007965088, -0.19109445810317993, 4.892195701599121, 3.839364767074585, 3.4483485221862793, 3.8701438903808594, 2.4748520851135254, 2.3508870601654053, 3.980473041534424, 2.858336925506592, 1.7441316843032837, 1.8300179243087769, 3.696619749069214, 5.169502258300781, 2.155214786529541, 2.1112329959869385, 2.4660096168518066, 1.4416824579238892, 2.9635796546936035, 1.4038550853729248, 1.577034831047058, 0.870784342288971, 1.4041846990585327, 3.450667381286621, 1.004298210144043, 1.0883773565292358, 0.6329202055931091, 0.7479889988899231, 0.30382758378982544, 0.5790987014770508, 1.1568552255630493, 5.794923782348633, 0.5792981386184692, -0.061572104692459106, 2.185656785964966, -2.268634557723999, 0.10133589059114456, 0.296243280172348, 1.9594827890396118, -0.05143973231315613, 0.09080538898706436, 1.847223162651062, 2.890036106109619, 2.4931607246398926, -0.1823013424873352, 0.4473358690738678, 0.9557338953018188, 0.3270702362060547, -0.25409695506095886, -0.3848559856414795, 0.542361319065094, 1.2222687005996704, 1.5160866975784302, 1.4482650756835938, 0.7508527040481567, 0.448066771030426, 0.2841876447200775, 6.169351577758789, 3.963287591934204, 2.449603796005249, 2.318325996398926, 2.2539281845092773, 2.2551498413085938, 2.824129104614258, 1.8977012634277344, 0.9984173774719238, 0.3091556131839752, -0.19289308786392212, 2.915731906890869, 2.447483539581299, 1.1825993061065674, 0.10495427995920181, 2.626293659210205, 2.1071934700012207, 1.5078914165496826, 0.45019951462745667, -1.297458291053772, -0.45740842819213867, 0.952518880367279, 0.6373777985572815, 0.7348952293395996, 0.353727251291275, 0.42706888914108276, -0.3269568383693695, -1.0887354612350464, -2.9002525806427, 1.4518436193466187, 12.14744758605957, 0.9752563238143921, 37.93968200683594, 7.127453804016113, 3.9040489196777344, 7.506072521209717, 8.715500831604004, 6.388621807098389, 6.213069438934326, 5.509678840637207, 5.967726230621338, 4.50136137008667, 5.619169235229492, 5.209662437438965, 0.020495720207691193, 4.934803009033203, 3.9512500762939453, 3.443044662475586, 3.9560184478759766, 1.5216786861419678, -1.3993854522705078, 3.08848237991333, 2.9669272899627686, 1.5964852571487427, 1.731454610824585, 2.2143537998199463, 2.2742791175842285, 2.073272943496704, 1.9499629735946655, 2.6253602504730225, 1.5912553071975708, 2.9273369312286377, 1.4746536016464233, 1.7879953384399414, 1.165419578552246, 1.4779512882232666, 3.3087761402130127, 0.8256181478500366, 2.0899481773376465, 0.6756985187530518, 0.6540297269821167, 0.17427369952201843, 0.6067681312561035, 0.970686674118042, 0.7315359711647034, 0.6330856680870056, -0.02533109486103058, 2.65073561668396, -2.3136680126190186, 0.31018516421318054, 0.3979533612728119, 1.4435147047042847, 0.2120596468448639, 0.06903615593910217, 8.270658493041992, 2.8063602447509766, 2.5225446224212646, 0.1363167017698288, 3.1430139541625977, 1.0987015962600708, 0.34112128615379333, -0.26429417729377747, -0.24070362746715546, 0.6392266154289246, 1.3987681865692139, 1.5764124393463135, 1.3250266313552856, 0.944579005241394, 0.34557822346687317, 6.569159507751465, 6.1601972579956055, 3.9310855865478516, 2.5563488006591797, 2.3274309635162354, 2.1285853385925293, 2.203329086303711, 2.6448850631713867, 2.114823579788208, 1.1883994340896606, 0.08191344141960144, -0.07570543885231018, 2.898005723953247, 2.5649702548980713, 1.3304966688156128, 0.3165499269962311, 2.591526508331299, 1.9233766794204712, 1.4951139688491821, 0.5217757225036621, -23.634342193603516, -2.67168927192688, 0.045292843133211136, 0.2216816544532776, 0.07813402265310287, 6.476638317108154, 1.0681407451629639, -0.094279944896698, 10.026422500610352, -4.954705715179443, 0.276483952999115, -0.9913234114646912, 0.19012588262557983, -13.826842308044434, 0.5055462718009949, 3.183793067932129, 2.4594969749450684, 1.4656578302383423, 1.395868182182312, 1.7472290992736816, 1.2462667226791382, 1.5416176319122314, 0.8516262769699097, 16.841707229614258, 1.8300551176071167, 1.1149345636367798, 1.0239062309265137, 0.988641619682312, 0.7956610321998596, 0.8884279727935791, 0.4951491057872772, 0.3537820875644684, 1.2845431566238403, 0.49777495861053467, 0.2427581548690796, 0.365629106760025, 4.162539482116699, 0.3248137831687927, 0.4120083749294281, 0.3664233982563019, 0.39584794640541077, 0.3796992599964142, 0.6232036352157593, 0.260934442281723, 4.111270904541016, 2.965893268585205, 1.2554230690002441, 5.462955474853516, 0.2593518793582916, 0.20760609209537506, 0.051538560539484024, 0.05514802783727646, 0.10930357128381729, 0.029312636703252792, 0.11183460056781769, 0.27811092138290405, 0.052516620606184006, 0.0238356851041317, 0.36149781942367554, -0.3040696084499359, 288.4954528808594, 0.11892435699701309, 0.29140424728393555, -0.053263161331415176, 0.11719116568565369, 0.19966453313827515, 0.12815673649311066, 0.43745794892311096, 0.059598274528980255, 0.09878852963447571, 0.24286161363124847, 0.03916141763329506, -0.10920850932598114, 0.2808002531528473, 0.5932399034500122, 0.24074918031692505, 0.41230329871177673, 0.34480297565460205, 0.2830016613006592, 0.11590540409088135, 1.2982475757598877, 1.4071950912475586, 0.9277039766311646, 0.6887012124061584, 0.36969977617263794, 0.493261456489563, 0.5307020545005798, 0.5004181861877441, 0.35800501704216003, 0.6476626396179199, 0.10353843122720718, -0.008556912653148174, 0.6868646144866943, 0.5910359621047974, 0.3235679268836975, 0.11743918061256409, 0.5103510618209839, 0.314921498298645, 0.40727105736732483, 0.6025475263595581, -1.3994519710540771, -1.7226303815841675, 0.531259298324585, 0.8950603604316711, 0.6087445020675659, 0.5132849216461182, 0.4879535436630249, -0.20305709540843964, -2.7216796875, -3.1903700828552246, 1.4612499475479126, 3.9633963108062744, 0.5909196138381958, -1.1266835927963257, 0.6652944087982178, 3.0919103622436523, 3.2945356369018555, 5.363988876342773, 6.400425434112549, 6.181777000427246, 5.76285457611084, 5.312102794647217, 3.345689058303833, 3.08036470413208, 5.172361850738525, 0.11408300697803497, 4.958394527435303, 3.9501912593841553, 3.4192490577697754, 3.753365993499756, 2.499711275100708, 1.8412697315216064, 4.04606294631958, 2.8555219173431396, 1.7463409900665283, 1.8255099058151245, 3.6650938987731934, 3.4058666229248047, 2.0260956287384033, 2.1895196437835693, 1.590471625328064, 1.3690470457077026, 2.8683502674102783, 1.2934595346450806, 1.5637098550796509, 1.056125283241272, 1.3485442399978638, 3.3485984802246094, 0.9271038174629211, 1.0521769523620605, 0.7092902660369873, 0.7690393924713135, 0.19443196058273315, 0.4285842776298523, 0.9676355123519897, 0.859369158744812, 0.6703961491584778, -0.45424211025238037, 2.389968156814575, -1.9599623680114746, 0.1280466467142105, 0.26896631717681885, 1.5135680437088013, 0.04972628876566887, 0.05607781186699867, 1.9092299938201904, 2.7298192977905273, 2.4488275051116943, -0.2617037892341614, 0.1572466790676117, 0.9914611577987671, 0.2766714096069336, -0.37643498182296753, -0.19370697438716888, 0.6235930919647217, 1.273690938949585, 1.6386196613311768, 1.5023044347763062, 0.9571459293365479, 0.4961557984352112, 6.636341571807861, 6.200307369232178, 3.970154285430908, 2.6529831886291504, 2.200371742248535, 2.152639627456665, 2.0386765003204346, 2.8019371032714844, 1.9440817832946777, 0.981881856918335, 0.2583397626876831, -0.11086706072092056, 2.876617431640625, 2.546860933303833, 1.1089571714401245, 0.28759852051734924, 2.5311782360076904, 1.8756697177886963, 1.3897396326065063, 0.5234129428863525, 0.8017023801803589, -2.3502840995788574, -0.0693027526140213, -0.21624846756458282, -0.20724447071552277, -6.735622882843018, -0.062252093106508255, 0.3753495216369629, 10.807839393615723, 9.636984825134277, -0.8205879926681519, -3.51694917678833, -1.2329678535461426, -0.40269768238067627, -3.9202659130096436, -7.355228900909424, -5.336204528808594, -2.728790283203125, -2.794332981109619, -2.214664936065674, -2.3095030784606934, -2.286529064178467, -1.1347591876983643, -1.370967984199524, -2.8154757022857666, 0.5419830083847046, -1.713679313659668, -1.5397913455963135, -0.7256280183792114, -1.6379294395446777, -0.7846157550811768, 5.786059379577637, -2.338231325149536, -1.1871604919433594, -0.6099388599395752, -0.9533227682113647, -0.9428920745849609, -65.0632095336914, -0.5772411823272705, -0.8050519824028015, -0.5091246962547302, -0.46976080536842346, -0.5779293179512024, -0.46858686208724976, -1.1925735473632812, -0.23946407437324524, -0.26331502199172974, -1.5529396533966064, -0.18409310281276703, -0.21518602967262268, -0.09123919159173965, -0.09589371085166931, -0.026181204244494438, -0.6270238161087036, -9.73526668548584, -51.97587203979492, -0.08429419994354248, 0.23809543251991272, -1.5656036138534546, 1.131711483001709, -0.05779992416501045, -0.01669810526072979, -1.3589448928833008, 0.0744287371635437, 0.10739950835704803, -46.482173919677734, -49.18745040893555, -0.8655964136123657, 0.20156894624233246, -0.05822359398007393, -0.31801721453666687, -0.011549745686352253, 0.15759193897247314, 0.09393136203289032, -1.6774038076400757, -0.3906159996986389, -0.6258748173713684, -0.5668478012084961, -0.16054296493530273, -0.04315653070807457, 60.08961486816406, -2.3439624309539795, -1.5780463218688965, -1.0342209339141846, -0.9736708402633667, -0.9788872599601746, -0.6396852731704712, -0.9882106184959412, -0.7097277641296387, -0.2984163165092468, -0.23520687222480774, 0.37739497423171997, -0.8094437122344971, -0.820475697517395, -0.35888633131980896, 0.060245271772146225, -1.015425205230713, -0.6828067302703857, -0.5472896099090576, -14.223094940185547, -0.3423876464366913, -1.995727777481079, 0.4365156888961792, -0.9568784832954407, -1.145176649093628, -1.0865919589996338, -0.04911554232239723, -1.697597861289978, 0.16821187734603882]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (30, 40), 'etaBin': (0.8, 1.37)}}, 'et2_eta2': {'discriminator': {'threshold': -0.06000081673264504, 'nodes': [100, 5, 1], 'bias': [0.08753234893083572, 0.13090386986732483, -0.054588861763477325, -0.01655721850693226, -0.003977576736360788, 0.008401443250477314], 'weights': [0.43544790148735046, -0.2538854479789734, -0.8397748470306396, -0.8486863374710083, -1.009407639503479, -1.0432308912277222, -0.3306425213813782, -0.6216546297073364, -0.6540290713310242, 3.440434455871582, 3.277256727218628, 2.0262792110443115, 0.32433223724365234, 0.43337640166282654, 0.46535080671310425, 0.43867695331573486, -3.022052764892578, 0.3197908103466034, 0.057934291660785675, -0.31624263525009155, -2.448324203491211, -1.2621147632598877, -0.879868745803833, -1.3610750436782837, -1.3672606945037842, -1.0881459712982178, -1.2026821374893188, -1.3869057893753052, -5.145620346069336, -0.8585528135299683, -1.1984525918960571, 0.5639861226081848, 1.2934925556182861, -2.4027976989746094, -1.1335461139678955, -1.1355934143066406, -3.581644058227539, -0.9561834931373596, -1.0029189586639404, -1.067145586013794, -0.5116070508956909, -0.8311207294464111, 1.7083876132965088, -1.2086714506149292, 3.2893738746643066, -1.0111340284347534, -1.9538010358810425, -1.0812138319015503, -1.1459778547286987, -1.1777316331863403, -0.8713607788085938, -1.1594771146774292, -0.903601348400116, -0.9112756848335266, -1.215891718864441, -1.238979697227478, -0.8064771294593811, 7.213140964508057, -0.33242931962013245, -0.4586346745491028, -1.0447313785552979, -0.9684170484542847, 1.1170791387557983, -0.8538909554481506, 7.183265209197998, -0.2465347796678543, 0.717339277267456, 2.2496159076690674, -1.066243052482605, -1.0407042503356934, -1.0538791418075562, -1.0579310655593872, 0.1311648041009903, 0.07169005274772644, -5.1904754638671875, -0.8873730897903442, -3.0730955600738525, -2.4272725582122803, -1.2928894758224487, -1.0526258945465088, -0.12569546699523926, -4.972345352172852, -2.46457576751709, -1.3521400690078735, -1.3025455474853516, -1.4406278133392334, -1.3122296333312988, -0.6634224653244019, 0.7299451231956482, -0.7153655886650085, -0.4721425175666809, -0.09434489160776138, -4.599591255187988, -1.6644418239593506, -1.239997148513794, -1.8230412006378174, -0.07049793004989624, 0.06914123892784119, -0.6952479481697083, -0.9023397564888, -0.9573584198951721, 0.06490606814622879, 0.9684723615646362, 0.874728798866272, 1.102800726890564, 1.0971516370773315, 0.2597167491912842, 0.4802432060241699, -0.21859869360923767, -3.431432008743286, -3.1913387775421143, -1.9646916389465332, -0.5874313116073608, -0.20583021640777588, -0.39834147691726685, -0.33817678689956665, 2.970319986343384, -0.2858656644821167, -0.05120851844549179, 0.3205240070819855, 2.590973138809204, 1.2641915082931519, 0.2522640824317932, 1.477105975151062, 1.3650877475738525, 1.1837058067321777, 1.1533266305923462, 1.3192018270492554, 4.9258270263671875, 0.9556280374526978, 1.1799613237380981, -0.565028965473175, -1.309804916381836, 1.196069359779358, 1.1629536151885986, 1.2170822620391846, 3.508270740509033, 1.116434097290039, 0.9529591202735901, 1.0607781410217285, 0.4331416189670563, 0.8688268661499023, -1.6487596035003662, 1.169366478919983, -0.22837479412555695, 1.1421794891357422, 1.7672773599624634, 1.0516108274459839, 1.0632296800613403, 1.2456525564193726, 0.8417384624481201, 0.9716588854789734, 0.9690882563591003, 0.8602927327156067, 1.1396955251693726, 1.0545265674591064, 0.8554439544677734, -7.33428430557251, 0.3280395567417145, 0.5355259776115417, 1.0162546634674072, 1.207880973815918, 0.3732747435569763, 0.813510000705719, -7.314406871795654, 0.3517904579639435, -0.6806394457817078, -2.2064120769500732, 1.0840307474136353, 1.0318522453308105, 1.0951234102249146, 0.9928448796272278, -0.3500291705131531, -0.21853646636009216, 1.8853754997253418, 0.9339408874511719, 3.0617027282714844, 2.3884851932525635, 1.3142625093460083, 0.9540764689445496, 0.15042097866535187, 4.968503952026367, 2.4259274005889893, 1.1946336030960083, 1.4957234859466553, 1.5735015869140625, 1.2180371284484863, 0.7528160810470581, -0.8782432079315186, 0.6123750805854797, 0.5387499928474426, -0.205851748585701, 4.488345146179199, 1.5635864734649658, 1.1872773170471191, 1.8283729553222656, 0.07930629700422287, -0.08956926316022873, 0.4332733154296875, 0.9245277643203735, 0.3053550720214844, -0.10476681590080261, -0.9733907580375671, -0.9292745590209961, -0.9025076627731323, -1.049320101737976, -0.28465980291366577, -0.4118485748767853, 0.031934238970279694, 3.515028476715088, 3.28084397315979, 2.0305871963500977, 0.6264911890029907, 0.3885815441608429, 0.4074462652206421, 0.2582876980304718, -3.14158034324646, 0.2844088077545166, 0.24454064667224884, -0.34183499217033386, -2.518915891647339, -1.344730019569397, -0.38430649042129517, -1.2529305219650269, -1.2437069416046143, -1.053612470626831, -1.1766802072525024, -1.2144511938095093, -4.997520446777344, -0.9604114294052124, -1.1055437326431274, 0.5908668637275696, 1.2696261405944824, -1.122104525566101, -1.1961266994476318, -1.1486186981201172, -3.64306640625, -0.9639080166816711, -1.072693109512329, -1.1256461143493652, -0.4536110460758209, -0.8945903182029724, 2.9062373638153076, -1.1463106870651245, 0.21846027672290802, -1.1409780979156494, -1.8196452856063843, -1.0657037496566772, -1.059019684791565, -1.1091536283493042, -0.8726768493652344, -1.1519840955734253, -0.9086622595787048, -1.0277389287948608, -1.352437138557434, -1.129360556602478, -0.8972620964050293, 7.354781627655029, -0.30253973603248596, -0.3924461007118225, -0.9960758686065674, -1.112428903579712, 1.2012749910354614, -0.8379755616188049, 7.227231502532959, -0.4771038591861725, 0.729102611541748, 2.2410333156585693, -1.0523523092269897, -0.8465303778648376, -1.1298357248306274, -0.9771705865859985, 0.2529947757720947, 0.1848514974117279, -1.8511106967926025, -0.8738077878952026, -2.8375940322875977, -2.4110536575317383, -1.272687554359436, -0.9823499917984009, -0.03202511742711067, -4.962332725524902, -2.3779337406158447, -1.2724038362503052, -1.4004063606262207, -1.4816577434539795, -1.1140007972717285, -0.6948519349098206, 0.8216823935508728, -0.7394312024116516, -0.5942984223365784, 0.07731347531080246, -4.515483856201172, -1.7112752199172974, -1.0836892127990723, -1.9471524953842163, -0.09571601450443268, -0.014971595257520676, -0.2608397603034973, -0.9047937989234924, 0.27724403142929077, -0.01901376247406006, -0.7699190378189087, -0.7830173969268799, -1.167035460472107, -0.9709010720252991, -0.10496655106544495, -0.4907691478729248, -0.6567061543464661, 3.4595987796783447, 3.2112812995910645, 1.9043993949890137, 0.5714796781539917, 0.35154953598976135, 0.4668389558792114, 0.43017899990081787, -3.0579068660736084, 0.3886381983757019, 0.03927021473646164, -0.19387896358966827, -2.649522304534912, -1.236520528793335, -0.32060861587524414, -1.4439131021499634, -1.3942391872406006, -1.064635992050171, -1.2871571779251099, -1.2962430715560913, -4.978155136108398, -0.8016833066940308, -1.3351682424545288, 0.5719218850135803, 1.3680896759033203, -1.1584571599960327, -1.058614730834961, -1.2172975540161133, -3.5908002853393555, -0.8975604176521301, -0.5588316917419434, -1.0803050994873047, -0.4324931204319, -0.8710951805114746, 1.5746749639511108, -1.1904040575027466, 3.1687188148498535, -1.1420321464538574, -1.9427047967910767, -0.9957467913627625, -0.9661791920661926, -1.1866260766983032, -0.9056214094161987, -0.9388925433158875, -0.888228178024292, -0.9867854714393616, -1.320128321647644, -1.2492583990097046, -0.8571321964263916, 7.26641321182251, -0.2533717751502991, -0.34315019845962524, -1.0717334747314453, -1.0420279502868652, 1.2418256998062134, -0.8049693703651428, 7.271480083465576, -0.28884080052375793, 0.6832298636436462, 2.0866901874542236, -1.048599362373352, -1.0400032997131348, -0.9879794120788574, -1.2031575441360474, 0.3338753581047058, 0.005202845204621553, -1.870332956314087, -1.0473015308380127, -3.028496742248535, -2.3024778366088867, -1.366024136543274, -1.0702126026153564, -0.011121917515993118, -4.837756156921387, -2.5035622119903564, -1.2208665609359741, -1.485734224319458, -1.5851771831512451, -1.192561388015747, -0.7502496838569641, 0.8806524872779846, -0.7586238980293274, -0.5902004837989807, 0.07082610577344894, -4.474475860595703, -1.656426191329956, -1.0673701763153076, -1.8516955375671387, -0.10346166789531708, -0.03432529419660568, -0.3299255967140198, -0.9189863801002502, -0.34211108088493347, 0.15302442014217377, 0.8172764778137207, 0.9279978275299072, 1.0501629114151, 1.0340768098831177, 0.31618791818618774, 0.8232476711273193, 0.5855967402458191, -3.346769332885742, -3.2345681190490723, -1.9675462245941162, -0.5035005807876587, -0.3756554126739502, -0.33215922117233276, -0.45611947774887085, 3.185671091079712, -0.474907249212265, -0.0019796714186668396, 0.2282453030347824, 2.537781238555908, 1.1804982423782349, 0.892102837562561, 1.4359885454177856, 1.205693006515503, 1.2003264427185059, 1.3300193548202515, 1.310004472732544, 4.988697052001953, 0.8599144220352173, 1.336311936378479, -0.3725610375404358, -1.3246933221817017, 1.1793049573898315, 1.14927077293396, 1.1568491458892822, 3.6878509521484375, 0.9457520246505737, 0.560152530670166, 1.0932188034057617, 0.3348715007305145, 0.8299450278282166, -2.872796058654785, 1.1127365827560425, -3.654811143875122, 0.9817737936973572, 1.852124810218811, 1.057611346244812, 0.9731946587562561, 1.120308756828308, 1.0147731304168701, 1.0878523588180542, 1.0194711685180664, 1.0786226987838745, 1.2074791193008423, 1.204982876777649, 0.8299685120582581, -7.349228382110596, 0.20936447381973267, 0.5802146792411804, 1.1650177240371704, 0.9715105295181274, -1.0590862035751343, 0.6879644989967346, -7.308121204376221, 0.3085511028766632, -0.6069979071617126, -2.2799665927886963, 1.1295291185379028, 0.8643592596054077, 1.0620927810668945, 1.2044507265090942, -0.29747265577316284, -0.2227703034877777, 5.236808776855469, 1.0438685417175293, 2.8584067821502686, 2.376181125640869, 1.170770287513733, 0.966115415096283, 0.0054801031947135925, 5.0053391456604, 2.294739246368408, 1.3594955205917358, 1.4909740686416626, 1.517390489578247, 1.2738871574401855, 0.6205419301986694, -0.777568519115448, 0.808970034122467, 0.539140522480011, -0.12814348936080933, 4.707989692687988, 1.5344207286834717, 1.1467335224151611, 1.7948827743530273, 0.014194371178746223, -0.06376484781503677, 0.33352214097976685, 0.8976209163665771, 1.4930099248886108, -0.8525076508522034, 1.7975599765777588, 1.2298215627670288, -1.9667859077453613]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (30, 40), 'etaBin': (1.37, 1.54)}}, 'et2_eta3': {'discriminator': {'threshold': -0.10500081200152636, 'nodes': [100, 13, 1], 'bias': [0.12301873415708542, 0.12412352859973907, -0.14823086559772491, -0.1450803130865097, -0.12146025896072388, -0.04708926007151604, -0.20305420458316803, -0.13244207203388214, -0.1551319658756256, 0.12996461987495422, 0.16650205850601196, -0.11159323900938034, -0.0754173994064331, 0.11395751684904099], 'weights': [0.30418726801872253, 0.8497653007507324, -0.6887367963790894, -1.1621745824813843, -0.6113541126251221, -1.057387113571167, -0.3409591019153595, -0.6250436305999756, 1.0915658473968506, 1.1697919368743896, 0.11023081094026566, -2.862215280532837, -0.25837546586990356, -0.1397186815738678, -2.98982310295105, -3.6729938983917236, -1.3729815483093262, -4.9331135749816895, -3.3440096378326416, -2.172529935836792, -1.5044852495193481, -4.413820743560791, -1.3811358213424683, -1.588523507118225, -4.195178508758545, -2.3188867568969727, -0.6977825164794922, -1.3636525869369507, -0.4245065152645111, -1.4669708013534546, -0.772320568561554, -1.9325722455978394, -1.1024763584136963, 0.2176528424024582, -1.571555495262146, -1.6388942003250122, -0.73421311378479, -1.843888759613037, -1.0722200870513916, -0.4295573830604553, -0.45321106910705566, -0.7210465669631958, -0.7969924211502075, -1.5129765272140503, -0.9125153422355652, -0.47102102637290955, -0.9808535575866699, -1.9205478429794312, 0.28503116965293884, -0.2707855701446533, 0.21478445827960968, -0.3487158715724945, -0.7190283536911011, -0.5389546155929565, -0.6640545725822449, -0.34965771436691284, -0.8494725227355957, -1.8142505884170532, 0.4217793345451355, -0.17951776087284088, -0.16311372816562653, -1.8624355792999268, -0.05131518840789795, 0.6620866656303406, -0.06519957631826401, 0.26691943407058716, -1.0862338542938232, 0.47569042444229126, 2.3826143741607666, -0.9888518452644348, -0.6096920371055603, -2.0633859634399414, 0.1741425096988678, 0.09333915263414383, -1.3368562459945679, -1.0445584058761597, -1.8494149446487427, -1.421730637550354, -0.8431060314178467, -0.9251859188079834, -0.5813602805137634, -3.3905375003814697, -2.6186413764953613, -2.1882357597351074, -1.119201898574829, -0.9595183730125427, -1.125844120979309, -0.09222555160522461, -0.8053295016288757, -1.335995078086853, -0.6404117941856384, -0.15574225783348083, -2.905750036239624, -1.2272462844848633, -0.2803206145763397, -1.5305250883102417, -0.9465407133102417, -0.14035649597644806, -0.21217818558216095, -6.7821831703186035, 0.4178466796875, 0.9353280067443848, -0.5816575288772583, -1.1598467826843262, -0.5564528703689575, -0.9457266330718994, -0.16822941601276398, -0.5664964318275452, 0.9762808680534363, 1.2137621641159058, 0.437343031167984, -2.7996912002563477, -0.3631327748298645, -0.24042445421218872, -2.7883148193359375, -2.5495426654815674, -1.263527750968933, -5.11525297164917, -3.1762044429779053, -2.0281825065612793, -1.6031328439712524, -4.4091362953186035, -1.3487286567687988, -1.641599178314209, -4.1170244216918945, -2.3824644088745117, -0.6433667540550232, -1.461822509765625, -0.39284271001815796, -1.3839620351791382, -0.693322479724884, -2.0719099044799805, -1.0699131488800049, 0.1502453237771988, -1.7072285413742065, -1.4347018003463745, -0.6855227947235107, -1.8113669157028198, -1.0726268291473389, -0.24809420108795166, -0.3721972107887268, -0.6835063695907593, -0.801081657409668, -1.542225956916809, -0.7369579076766968, -0.639552652835846, -0.9209814071655273, -1.8816319704055786, 0.19405755400657654, -0.2908840775489807, 0.14995653927326202, -0.2907114028930664, -0.7556899785995483, -0.5869253873825073, -0.6548513770103455, -0.28700974583625793, -0.7130810022354126, -1.757418155670166, 0.3907534182071686, -0.07897394150495529, -0.27136585116386414, -2.0624635219573975, -0.2664145529270172, 0.4506451189517975, -0.08523759245872498, 0.1642151027917862, -0.8453987836837769, 0.25697019696235657, 2.3169705867767334, -0.9964538216590881, -0.6514313817024231, -2.0524673461914062, 0.1995789110660553, 0.051973167806863785, -1.3547682762145996, -1.0910674333572388, -1.7880864143371582, -1.3799949884414673, -0.8465836644172668, -0.957261323928833, -0.564211905002594, -3.5106306076049805, -3.1596767902374268, -2.178257942199707, -0.9829910397529602, -0.9245108962059021, -1.0569998025894165, -0.06946852803230286, -0.7025414109230042, -1.2926933765411377, -0.6913346648216248, -0.1600404530763626, -3.0791871547698975, -1.2459183931350708, -0.2689438760280609, -1.4641588926315308, -1.0716415643692017, -0.1361074596643448, -0.11653489619493484, -6.724954128265381, -0.3965246379375458, -0.8558112382888794, 0.5742728114128113, 1.2904711961746216, 0.5677658319473267, 1.086992621421814, 0.17724068462848663, 0.8273959755897522, -1.094128131866455, -1.1877236366271973, -0.45167985558509827, 2.8013670444488525, 0.481206476688385, 0.2692694067955017, 2.8116722106933594, 2.666585922241211, 1.3945326805114746, 4.969942092895508, 3.330779790878296, 2.2182538509368896, 1.571179747581482, 4.505165100097656, 1.344825267791748, 1.698574185371399, 4.963958263397217, 2.4525885581970215, 0.7026008367538452, 1.4111098051071167, 0.5565152168273926, 1.3050004243850708, 0.7208021283149719, 2.0179920196533203, 1.0633853673934937, -0.13319465517997742, 1.568001389503479, 1.4417909383773804, 0.6033551096916199, 1.9216288328170776, 1.117271065711975, 0.28853896260261536, 0.2680075168609619, 0.7167360186576843, 0.8398164510726929, 1.6980571746826172, 0.7816507816314697, 0.5635744333267212, 0.9330514669418335, 2.029628038406372, -0.15740585327148438, 0.21728986501693726, -0.0327858105301857, 0.2960619032382965, 0.7494935989379883, 0.6769182085990906, 0.4767330288887024, 0.33478879928588867, 0.8754949569702148, 1.8766576051712036, -0.39680272340774536, 0.09256334602832794, 0.0658884197473526, 1.8434150218963623, 0.05762580782175064, -0.6603575944900513, 0.1237194836139679, -0.2717497646808624, 0.8832526206970215, -0.3037146329879761, -2.31727933883667, 0.838454008102417, 0.6482180953025818, 1.9509977102279663, -0.0838266909122467, -0.01945280097424984, 1.4060927629470825, 1.3620051145553589, 1.7707526683807373, 1.4466333389282227, 0.93125981092453, 0.9794870018959045, 0.5605012774467468, 3.5484373569488525, 2.9119770526885986, 1.951120138168335, 1.035802960395813, 0.773888111114502, 1.120093584060669, 0.045821741223335266, 0.6521666646003723, 1.1093902587890625, 0.5105617046356201, 0.16685819625854492, 2.9315502643585205, 1.0994263887405396, 0.3065134286880493, 1.5813195705413818, 1.057920217514038, 0.2084522694349289, 0.1900288313627243, 6.71383810043335, -42.46225357055664, -70.96731567382812, 0.07631244510412216, 19.227619171142578, 3.3918514251708984, 18.458330154418945, 0.9544081687927246, 0.4319327771663666, -1.5471141338348389, 3.1591649055480957, -3.498514413833618, 11.57614803314209, 4.312415599822998, 9.06739330291748, -20.08837127685547, 1.2611100673675537, 4.591228008270264, 3.2659976482391357, -8.876774787902832, 2.2359485626220703, -29.228708267211914, 2.082066059112549, 1.5442314147949219, 1.4400252103805542, 17.212377548217773, 1.7645370960235596, -0.542725145816803, 1.4210560321807861, 1.026045560836792, 1.5745453834533691, -28.105018615722656, 1.1648740768432617, -19.639842987060547, 4.012938499450684, -0.051800403743982315, 1.4506182670593262, 0.8734657168388367, 1.3684583902359009, -0.8187167644500732, 1.4108632802963257, 0.6901399493217468, 26.724184036254883, 11.367783546447754, -7.4334940910339355, -9.515633583068848, 0.939599335193634, 0.5313428640365601, 0.720454752445221, -0.45186764001846313, 0.3764512538909912, -0.35271570086479187, 0.21664610505104065, -2.4248080253601074, -0.2605746388435364, 0.7959389090538025, 0.6855553388595581, 0.5836410522460938, 14.972626686096191, 0.3206372857093811, 4.867676734924316, 1.4906827211380005, -1.5150582790374756, 6.724363327026367, 0.7121997475624084, 16.79769515991211, 6.245677471160889, 0.8168960809707642, -0.3535807132720947, -0.9013701677322388, 19.182355880737305, 0.6428565382957458, 1.3382554054260254, -0.3308599293231964, -0.29333075881004333, 0.9137106537818909, 0.5301271677017212, 1.0323295593261719, 1.3004313707351685, 1.1908447742462158, 0.8775336146354675, 33.16133117675781, 2.3310062885284424, 2.678463935852051, 1.7283899784088135, 0.9873225092887878, -5.185284614562988, 1.2016500234603882, 12.617661476135254, -50.8746223449707, -6.66983699798584, 0.5779006481170654, 0.7036734223365784, 14.482378005981445, 1.5860333442687988, 0.4311436116695404, 1.172850489616394, -1.7398306131362915, 1.2602179050445557, -4.303325176239014, -688.7769775390625, -0.5277848243713379, -1.0461124181747437, 0.6094116568565369, 1.1573532819747925, 0.7563377022743225, 0.916793942451477, 0.35657933354377747, 0.8378023505210876, -1.0734639167785645, -1.1636098623275757, -0.4562557339668274, 2.833606481552124, 0.5163435339927673, 0.32135361433029175, 2.8050928115844727, 2.634460687637329, 1.279829740524292, 4.988045692443848, 3.1871063709259033, 2.096364736557007, 1.503313660621643, 4.611399173736572, 1.5462313890457153, 1.6967856884002686, 5.010919094085693, 2.3433640003204346, 0.668563723564148, 1.561421275138855, 0.49576336145401, 1.444431185722351, 0.841437578201294, 2.066014528274536, 1.0146316289901733, -0.21768641471862793, 1.7231591939926147, 1.5794697999954224, 0.5889291167259216, 2.0158655643463135, 1.012094497680664, 0.28763899207115173, 0.38233309984207153, 0.6044565439224243, 0.6848258376121521, 1.5692805051803589, 0.7184041142463684, 0.6654860377311707, 0.789604663848877, 1.8791120052337646, -0.2951842248439789, 0.17412510514259338, -0.08447487652301788, 0.33074140548706055, 0.5779514312744141, 0.5859646797180176, 0.5065541863441467, 0.444772332906723, 0.9155693054199219, 1.8753169775009155, -0.3768397867679596, 0.0687597393989563, 0.20108890533447266, 1.9811288118362427, 0.07897226512432098, -0.5760437250137329, 0.1798102855682373, -0.3355177640914917, 0.8649784326553345, -0.25917550921440125, -2.5271005630493164, 0.9552915692329407, 0.6989930272102356, 2.0957932472229004, -0.07641968131065369, -0.12085721641778946, 1.424972653388977, 1.3087549209594727, 1.7453577518463135, 1.3189929723739624, 0.9482564330101013, 1.064982295036316, 0.6298055648803711, 3.460169553756714, 2.7317564487457275, 2.083712577819824, 0.905897319316864, 0.9155291318893433, 1.1221959590911865, -0.04841718077659607, 0.7889496684074402, 1.128574013710022, 0.6327909827232361, 0.1991017609834671, 3.0771656036376953, 1.2395368814468384, 0.4259513318538666, 1.556912899017334, 0.9002264738082886, 0.3124716281890869, 0.20730529725551605, 6.586654186248779, 14.063756942749023, 8.218186378479004, -0.14519159495830536, 4.272008419036865, 7.982744216918945, 3.923720598220825, 0.22982282936573029, 6.627468585968018, -0.1453406661748886, 0.5045799612998962, -0.36684590578079224, -1.4339826107025146, -0.18114908039569855, -0.2483782172203064, -1.1930547952651978, -0.5184308290481567, -0.13267658650875092, -0.7445982098579407, -1.9974291324615479, -0.23628738522529602, -1.1211274862289429, -1.020624041557312, -66.09517669677734, -5.356493949890137, -1.3376556634902954, -0.34383901953697205, -0.4764726161956787, -0.051435891538858414, -0.13659794628620148, -0.25425228476524353, -0.4077799320220947, -0.535479724407196, -0.25888094305992126, 0.9030393958091736, -23.053281784057617, -39.430747985839844, -1.5864990949630737, -5.059427261352539, -0.26177147030830383, 0.4109734892845154, 0.07736000418663025, 0.481022447347641, 0.04597252234816551, -61.85880661010742, -0.4914794862270355, 0.07932600378990173, -0.7798473238945007, 54.87738037109375, -0.03970981761813164, -0.3524216115474701, -69.59514617919922, -23.8482666015625, -52.1743278503418, -1.2950568199157715, 0.019184764474630356, 15.454039573669434, -0.2506156265735626, -0.061185866594314575, -0.03239520639181137, -14.93748664855957, 3.340256929397583, 0.15641818940639496, -2.3994925022125244, 1.835261344909668, -13.6608247756958, 77.0022201538086, -0.19211140275001526, 19.97312355041504, -36.92919921875, -0.17449429631233215, -0.09447365999221802, 78.25885009765625, -5.779533863067627, -5.420243263244629, -0.3052462637424469, -3.9634804725646973, -0.5211328268051147, -0.31938979029655457, -0.2517760097980499, -0.2685023844242096, -212.9854736328125, -30.17164421081543, -24.490009307861328, -10.645490646362305, -21.07343864440918, -11.246722221374512, 0.04942397400736809, -71.0390625, 11.424042701721191, 10.798490524291992, -0.0429750494658947, 4.414422035217285, -2.6547229290008545, -4.820148944854736, -0.12145984172821045, -0.5519380569458008, 3.101762533187866, 4.2444658279418945, -3.6345603466033936, -0.562982976436615, -1.2166202068328857, -4.596149921417236, -0.7959448099136353, -6.384563446044922, -4.002380847930908, 0.8029256463050842, -0.35959765315055847, 3.7923853397369385, -16.618196487426758, -9.554988861083984, 1.1377618312835693, 47.795204162597656, 109.44261932373047, 24.423660278320312, -3.6046438217163086, -22.6756534576416, -260.8214416503906, -63.076087951660156, 15.552159309387207, 0.4022412896156311, -0.11724751442670822, 0.36431413888931274, -2.5042953491210938, -23.82703399658203, -85.89523315429688, -0.4229048192501068, 24.80335235595703, -2.1182053089141846, -0.4451961815357208, -0.012475650757551193, 26.245166778564453, 31.059240341186523, -35.73555374145508, 41.04964828491211, 36.78553009033203, 0.12180949747562408, -0.23237749934196472, 34.898136138916016, 0.4524468183517456, 41.13677215576172, 21.005521774291992, 15.234944343566895, -2.944014549255371, 0.13965633511543274, 50.49112319946289, -4.110185623168945, -0.39785847067832947, -43.943660736083984, -0.42626452445983887, -24.15531349182129, 0.644363284111023, -13.422357559204102, 49.38895797729492, -0.06469817459583282, 37.11933135986328, 38.50857162475586, 2.538553237915039, -32.90419006347656, -0.6295183897018433, -15.45336627960205, 52.15901565551758, 18.984493255615234, -2.1657252311706543, 25.40456771850586, -0.34799468517303467, -5.49114990234375, 26.026382446289062, -15.492897033691406, 47.72470474243164, -13.565674781799316, -0.576643168926239, 7.9617767333984375, 0.061585333198308945, 0.7577609419822693, -6.103629112243652, -14.067750930786133, -18.153383255004883, -3.8901801109313965, -0.06462503224611282, -3.9029226303100586, -51.21853256225586, 14.732786178588867, -26.661537170410156, 4.567901134490967, 10.833147048950195, 0.04311544820666313, 17.802446365356445, -4.474728107452393, -2.7988169193267822, -3.1032097339630127, -1.3325752019882202, 10.483931541442871, -45.62336349487305, -0.5037767887115479, 2.8887016773223877, 0.20716409385204315, 0.29963305592536926, 6.20416784286499, -0.5406949520111084, 1.17706298828125, -0.5078774094581604, -0.9594403505325317, 0.5891019701957703, 1.230588436126709, 0.7258692979812622, 0.918239951133728, 0.28832927346229553, 0.7563337087631226, -0.9690443277359009, -1.15109121799469, -0.5003306269645691, 2.9191904067993164, 0.369613915681839, 0.11917898803949356, 3.0260579586029053, 2.614006280899048, 1.4625333547592163, 5.118364334106445, 3.2308008670806885, 2.204737663269043, 1.5220906734466553, 4.58559513092041, 1.452600121498108, 1.6444710493087769, 5.074839115142822, 2.4159789085388184, 0.579825758934021, 1.4140586853027344, 0.5123767852783203, 1.2717394828796387, 0.7904630303382874, 2.1074490547180176, 0.9395533800125122, -0.0409160740673542, 1.589781641960144, 1.4682937860488892, 0.7720704078674316, 1.809342861175537, 1.080473780632019, 0.33711913228034973, 0.43754005432128906, 0.6236121654510498, 0.7613350749015808, 1.7258000373840332, 0.7839359045028687, 0.5030819177627563, 0.9207557439804077, 1.8706471920013428, -0.34089863300323486, 0.34998661279678345, -0.23262326419353485, 0.30890199542045593, 0.7487384080886841, 0.6121823787689209, 0.6804398894309998, 0.40631455183029175, 0.7663447260856628, 1.7124123573303223, -0.31505870819091797, 0.2561591565608978, 0.11884371936321259, 1.9870301485061646, 0.23096242547035217, 0.3338371515274048, 0.11443057656288147, -0.32183289527893066, 0.8388746976852417, -0.389498233795166, -2.471872091293335, 1.0024690628051758, 0.6032493710517883, 1.9581527709960938, -0.005172703880816698, -0.1352144181728363, 1.195815920829773, 1.1974705457687378, 1.8081310987472534, 1.469057321548462, 0.8334143757820129, 0.8341609835624695, 0.7078484296798706, 3.70715069770813, 3.0509819984436035, 2.0596837997436523, 0.9122124314308167, 0.8366513848304749, 1.0534800291061401, 0.056742988526821136, 0.7957990765571594, 1.1165286302566528, 0.6075904965400696, 0.11813954263925552, 3.0899298191070557, 1.1223469972610474, 0.4400268495082855, 1.4853813648223877, 1.0389213562011719, 0.30533814430236816, 0.25351232290267944, 6.785035610198975, -0.39140114188194275, -1.139840006828308, 0.6731201410293579, 1.1550958156585693, 0.5638008117675781, 1.0792462825775146, 0.3624536395072937, 0.6030336022377014, -1.1120805740356445, -1.2129931449890137, -0.2030080407857895, 2.742615222930908, -1.0337464809417725, 0.30721890926361084, 3.462728500366211, 2.477478504180908, 1.182031273841858, 4.89307165145874, 3.2948129177093506, 2.036480188369751, 1.670960545539856, 4.506345272064209, 1.5122008323669434, 2.244701623916626, 4.131073474884033, 2.262995958328247, 0.7003257274627686, 1.3925265073776245, 0.5528702735900879, 1.4417014122009277, 0.7929090857505798, 2.0238447189331055, 1.1691749095916748, -0.19980467855930328, 1.6516227722167969, 1.969643235206604, 0.761513888835907, 1.9527347087860107, 1.0873714685440063, 0.22053319215774536, 0.7128230929374695, 0.6049107313156128, 0.8591893315315247, 1.5111196041107178, 0.732628583908081, 0.558334231376648, 0.9773120880126953, 1.8561618328094482, -0.39211851358413696, 0.005776680540293455, -0.16405422985553741, 0.4031231999397278, 0.552124559879303, 0.4953479766845703, 0.4938861131668091, 0.3383435308933258, 0.7426741123199463, 1.6564736366271973, -0.41170963644981384, 0.03124856762588024, 0.2252117395401001, 1.9004722833633423, 0.16434632241725922, 0.2846846580505371, 0.11429283022880554, -0.3527865409851074, 0.9703900814056396, -0.3925929069519043, -2.333373785018921, 0.8955271244049072, 0.7136886119842529, 2.0322043895721436, -0.05712644010782242, -0.18348143994808197, 1.307091236114502, 1.2848570346832275, 1.8391969203948975, 1.3917560577392578, 0.8969113230705261, 1.0127688646316528, 0.7510788440704346, 3.6391384601593018, 3.945478677749634, 2.1604669094085693, 0.9281222820281982, 1.2677093744277954, 1.0914695262908936, 0.041172102093696594, 0.8696383833885193, 1.3039631843566895, 0.6090715527534485, 0.30596521496772766, 3.606468439102173, 1.1730620861053467, 0.3334497809410095, 1.609261155128479, 1.029264211654663, 0.32256901264190674, 0.1050935611128807, 6.615805625915527, 0.44275766611099243, 1.0860676765441895, -0.6361497044563293, -1.1486839056015015, -0.7489868402481079, -1.0916446447372437, -0.1996331810951233, -0.5125791430473328, 0.8987367749214172, 1.3552607297897339, 0.1900576651096344, -2.9276974201202393, -0.34848079085350037, -0.23827406764030457, -3.0009052753448486, -3.120072603225708, -1.3448060750961304, -4.940805435180664, -3.394080400466919, -2.1645140647888184, -1.6466408967971802, -4.567572593688965, -1.4169425964355469, -2.3487601280212402, -4.133004188537598, -2.437957525253296, -0.5606707334518433, -1.458410382270813, -0.554598867893219, -1.2566148042678833, -0.6758361458778381, -1.9483543634414673, -1.0569878816604614, 0.09677363187074661, -1.5889736413955688, -1.4748929738998413, -0.6199264526367188, -1.9844932556152344, -1.0697342157363892, -0.2587957978248596, -0.2410532832145691, -0.6015037298202515, -0.7069128751754761, -1.6559184789657593, -0.9482842683792114, -0.6457294225692749, -0.787306547164917, -1.9159588813781738, 0.3557521402835846, -0.2937186360359192, 0.23418042063713074, -0.4342738687992096, -0.6624311208724976, -0.5870678424835205, -0.608083963394165, -0.46999478340148926, -0.7522498965263367, -1.8880794048309326, 0.4712357521057129, -0.02299511805176735, -0.29113438725471497, -1.9809561967849731, -0.0999230444431305, -0.21887987852096558, -0.04071185737848282, 0.2224041372537613, -0.9774309396743774, 0.3506249785423279, 2.428495168685913, -0.865532636642456, -0.813362181186676, -2.069868564605713, 0.12737295031547546, 0.2549683749675751, -1.2262831926345825, -1.2279356718063354, -1.8744863271713257, -1.378003716468811, -0.9208574891090393, -0.8273350596427917, -0.5485767722129822, -3.598797082901001, -3.7702102661132812, -2.08737850189209, -0.973261833190918, -1.2275522947311401, -1.1310789585113525, -0.11530504375696182, -0.83946293592453, -1.3033760786056519, -0.694290041923523, -0.28694257140159607, -3.6592657566070557, -1.0928118228912354, -0.22903433442115784, -1.5917664766311646, -1.180234670639038, -0.42320385575294495, -0.13401277363300323, -6.652355670928955, 5.676045894622803, 19.770729064941406, 23.222349166870117, 11.33836555480957, -0.382088303565979, -1.095794677734375, -0.13374540209770203, -8.887331008911133, -4.773684024810791, -7.823843002319336, -9.213000297546387, -11.879658699035645, 173.0123748779297, 41.449607849121094, -13.581475257873535, 66.26525115966797, 8.883946418762207, -7.707841396331787, 49.82863235473633, 84.21129608154297, -1.0134878158569336, 134.4239044189453, -1.493996024131775, -1.3615819215774536, 8.893420219421387, 9.426976203918457, -0.5602660775184631, 26.191953659057617, -12.173545837402344, -1.5878174304962158, -2.582836627960205, -0.7510395646095276, -3.0528995990753174, -0.7998068928718567, 10.311631202697754, 41.3348274230957, 2.155888319015503, -2.0228519439697266, -22.477628707885742, 23.287004470825195, 3.4981820583343506, 9.579017639160156, 5.486382484436035, -1.6653884649276733, 15.744100570678711, -0.6553637385368347, 5.699670314788818, -24.563302993774414, 0.448487251996994, -2.5196456909179688, 67.56224822998047, -0.7288800477981567, 98.18753814697266, -12.992110252380371, -33.887813568115234, 15.54227352142334, -0.7602488398551941, -26.514163970947266, -22.066547393798828, 31.037639617919922, -8.115333557128906, 12.380725860595703, 8.054473876953125, 7.686533451080322, 7.942568778991699, -0.3603121042251587, 2.8651421070098877, 0.2672731578350067, 11.944064140319824, -0.846297025680542, -11.89965534210205, 11.031524658203125, 0.22739070653915405, 0.38495784997940063, -1.281140923500061, -1.7910065650939941, -1.864558458328247, -4.447373867034912, -1.1394922733306885, -8.389485359191895, 5.285486221313477, 1.3094311952590942, -14.86137866973877, 4.189198017120361, 6.647069454193115, -1.0425013303756714, 17.80618667602539, -16.129196166992188, -5.551366806030273, -4.523837089538574, 1.6083695888519287, 1.8986173868179321, -10.16767692565918, -3.654367208480835, -0.3141562044620514, 23.318510055541992, 9.78225326538086, -2.691760778427124, 5.128377437591553, 229.34840393066406, -0.40750205516815186, -0.9493240118026733, 0.7802091240882874, 1.1088117361068726, 0.7727574706077576, 1.0732859373092651, 0.25883087515830994, 0.8580639958381653, -0.8193686008453369, -1.2143988609313965, -0.42096102237701416, 5.592052459716797, 0.41015130281448364, 0.6507567167282104, 2.8110806941986084, 7.526437282562256, 2.3188974857330322, 7.0018768310546875, 3.231797695159912, 2.0545995235443115, 1.6128654479980469, 4.6465678215026855, 1.5516663789749146, 1.714942455291748, 5.084629058837891, 2.3604440689086914, 0.5300267934799194, 1.480985403060913, 0.41223475337028503, 1.2992547750473022, 0.7385439276695251, 2.10420560836792, 0.932577908039093, -0.1520778238773346, 1.713442325592041, 1.5210338830947876, 0.5656725764274597, 1.9072049856185913, 0.9567627310752869, 0.3960697650909424, 0.44163215160369873, 0.5878949165344238, 0.8206663131713867, 1.611753225326538, 0.8479095697402954, 0.5944604873657227, 0.7890034914016724, 1.7957267761230469, 0.2998366057872772, 0.22618070244789124, -0.18701373040676117, 0.4275779724121094, 0.6229318976402283, 0.484366774559021, 0.6177490949630737, 0.45515379309654236, 0.8331781625747681, 1.8538588285446167, -0.4489183723926544, 0.12093083560466766, 0.28035518527030945, 2.051271438598633, 0.1941535919904709, -0.5715430378913879, 0.06991387903690338, -0.23077881336212158, 1.0564696788787842, -0.38945966958999634, -2.5332345962524414, 0.8461225032806396, 0.6650053858757019, 2.1577959060668945, -0.2023492157459259, -0.014899578876793385, 1.2793691158294678, 1.315588355064392, 1.7638591527938843, 1.4163093566894531, 0.9151162505149841, 1.0821192264556885, 0.780752420425415, 3.455174207687378, 2.8397932052612305, 1.9887480735778809, 0.8774558305740356, 0.8926156759262085, 1.0601515769958496, 0.10924302041530609, 0.7368251085281372, 1.237809658050537, 0.6107839345932007, 0.23089584708213806, 2.823254346847534, 1.0797215700149536, 0.463812917470932, 1.6288496255874634, 1.098106026649475, 0.2966061234474182, 0.12865206599235535, 6.780473232269287, -0.3926839828491211, -0.8417141437530518, 0.5603635311126709, 1.2253443002700806, 0.5749374628067017, 1.0861812829971313, 0.14323027431964874, 0.837890088558197, -1.0361592769622803, -1.3356995582580566, -0.4629151225090027, 2.809370994567871, 0.35665374994277954, 0.32396990060806274, 2.9100983142852783, 2.6866960525512695, 1.233535647392273, 4.903575897216797, 3.28961443901062, 2.1631999015808105, 1.6127880811691284, 4.525756359100342, 1.3435090780258179, 1.7663136720657349, 4.98877477645874, 2.470659017562866, 0.6718692183494568, 1.4164974689483643, 0.4008151590824127, 1.4083858728408813, 0.6580820679664612, 2.0783207416534424, 0.9338761568069458, -0.20211385190486908, 1.5251353979110718, 1.570773720741272, 0.7841767072677612, 1.8578743934631348, 0.9782386422157288, 0.27680420875549316, 0.3058190643787384, 0.8169229030609131, 0.8495539426803589, 1.5865484476089478, 0.914578914642334, 0.46138980984687805, 0.7614924907684326, 2.0410616397857666, -0.3417319357395172, 0.15728244185447693, -0.10924871265888214, 0.405869722366333, 0.7487831711769104, 0.6119390726089478, 0.6409085392951965, 0.3202405869960785, 0.8153237104415894, 1.7592722177505493, -0.39275893568992615, 0.12709733843803406, 0.04390799254179001, 2.0353190898895264, 0.13898898661136627, -0.5605301260948181, -0.004498795606195927, -0.2200174480676651, 0.8615419864654541, -0.23729310929775238, -2.3160743713378906, 0.9283014535903931, 0.6896944642066956, 1.9768567085266113, -0.14448532462120056, -0.2189287692308426, 1.333641529083252, 1.1834828853607178, 1.696648359298706, 1.4531941413879395, 0.7313092947006226, 0.9738285541534424, 0.757607638835907, 3.4497151374816895, 3.037750482559204, 2.109966278076172, 0.933390736579895, 0.7784393429756165, 1.2766214609146118, 0.13047191500663757, 0.8273962140083313, 1.257369041442871, 0.6205911040306091, 0.2958318889141083, 3.019834280014038, 1.0379300117492676, 0.2847546637058258, 1.555392861366272, 1.0617468357086182, 0.17820194363594055, 0.21733613312244415, 6.705352306365967, 1.7399436235427856, 1.593267560005188, -1.848791480064392, 0.5474113821983337, -0.4398048520088196, 0.6698813438415527, -0.772300660610199, -1.4968303442001343, -0.6162540912628174, 1.213181972503662, 1.14113450050354, -0.7641025185585022, -0.45179712772369385]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (30, 40), 'etaBin': (1.54, 2.5)}}, 'et2_eta0': {'discriminator': {'threshold': -0.06000081673264504, 'nodes': [100, 5, 1], 'bias': [0.07847574353218079, 0.7629546523094177, 0.10928067564964294, 0.19618543982505798, 0.18218255043029785, -0.08439499139785767], 'weights': [-0.7119408845901489, -2.240541696548462, -2.7603185176849365, 0.2700490355491638, -0.41171079874038696, -0.9108693599700928, -0.9470913410186768, -0.1902671903371811, -2.4491517543792725, -3.2685701847076416, 3.370185136795044, 12.913612365722656, 5.621732711791992, 26.516376495361328, 55.569419860839844, 4.388315677642822, 3.5565598011016846, 3.211742401123047, 3.8946003913879395, 3.7326226234436035, 4.113090991973877, 2.12119722366333, 2.739637851715088, 2.7863919734954834, 2.442747116088867, 2.8151042461395264, 2.1818275451660156, 2.2052829265594482, 2.2070767879486084, 2.384472608566284, 1.6437053680419922, 0.8267799019813538, 1.2870289087295532, 3.154662609100342, 1.4556388854980469, 1.5003046989440918, 1.5551685094833374, 1.509101390838623, 1.483616828918457, 1.6190054416656494, 2.250215768814087, 1.4467514753341675, 0.16150003671646118, -8.42698860168457, 1.0536600351333618, 1.1665540933609009, 1.165086269378662, 1.4236738681793213, 1.230736255645752, 0.8768990635871887, 0.6607258915901184, 0.2204592376947403, 0.42039763927459717, 0.7857428193092346, 0.9055647253990173, 0.4581426978111267, 0.0927475318312645, 0.05435469374060631, -0.2726903259754181, -0.5764389038085938, -1.6322872638702393, -2.6324899196624756, 0.5350361466407776, 1.2776252031326294, 2.4128077030181885, 0.8366170525550842, 0.23994331061840057, -0.3887934684753418, 0.0355718694627285, -0.5618188977241516, 0.35970374941825867, 0.8971461653709412, -0.5802282691001892, -0.5947319269180298, 0.966034471988678, 1.4822137355804443, 1.62027108669281, 1.471069574356079, 0.15782611072063446, -0.020223205909132957, 2.823122262954712, 2.693579912185669, 2.8301751613616943, 2.3084781169891357, 1.6026636362075806, 1.6897698640823364, 1.5767418146133423, 5.69877815246582, 2.7764956951141357, 2.256046772003174, 0.16424404084682465, -0.06079587712883949, 3.2271440029144287, 2.1910839080810547, 0.9774269461631775, -0.20367079973220825, 4.154149055480957, 2.442843437194824, 0.2865254580974579, 3.124415397644043, -56.49191665649414, -0.4098327159881592, -0.7341068387031555, -1.5462725162506104, -0.11737889796495438, -0.08675909787416458, -0.6945703625679016, -0.0257110632956028, -5.058988094329834, -3.632960319519043, 0.46336981654167175, 8.2831449508667, 0.7417730093002319, -11.89832592010498, -0.3551108241081238, -0.6785120368003845, -2.656543254852295, 0.4756072461605072, 0.7682706117630005, 0.3508555293083191, 0.7252914309501648, 0.278731107711792, 0.7361022233963013, 0.7715103030204773, 0.19049392640590668, 0.4049382507801056, 0.2623523473739624, -0.08075734227895737, 0.2134803831577301, 0.22921833395957947, 0.261470228433609, 0.43027669191360474, 0.19312967360019684, 0.3928200304508209, 0.44809895753860474, 0.37734153866767883, 0.3831552565097809, 0.2500981092453003, 0.29143449664115906, 0.27737849950790405, 1.7319985628128052, 0.3704843819141388, 0.027276014909148216, 0.17787288129329681, 0.892750084400177, 0.2694832682609558, 0.15648795664310455, 0.2537045478820801, 0.18419775366783142, 0.19120995700359344, 0.11450974643230438, -0.11331019550561905, 0.38909637928009033, 0.5923218727111816, 0.31627798080444336, -0.04405646398663521, 0.0014515798538923264, 0.08459271490573883, -0.10759730637073517, 0.21883749961853027, -0.45896679162979126, -0.18342788517475128, 0.1355195939540863, 0.019575851038098335, 0.25031718611717224, 0.17690414190292358, 0.029845835641026497, -0.015406846068799496, 0.010905565693974495, -0.005880381446331739, -0.039869677275419235, 25.09929656982422, -0.011351218447089195, -0.23217561841011047, -1.473679542541504, 0.1123473197221756, 0.44710657000541687, 0.3514510989189148, -4.154234409332275, -0.02785796858370304, 0.05499179661273956, 0.705963134765625, 0.44965454936027527, 0.8405165672302246, 0.41737860441207886, 0.44072991609573364, 0.20978909730911255, 0.3216022253036499, 0.3156183063983917, -0.6809942722320557, -0.3737870454788208, 0.000582381384447217, -0.27832743525505066, 0.46415385603904724, 0.16863110661506653, 3.162311315536499, 0.7340706586837769, 0.5276182889938354, -0.019018065184354782, 0.13615861535072327, -3.885833740234375, -2.250655174255371, 0.08676255494356155, 0.3059181571006775, -0.3745964467525482, 0.36144012212753296, -0.7617700099945068, -0.6664785742759705, -2.301903009414673, -3.1738085746765137, 3.3496274948120117, 4.603571891784668, 5.325782775878906, -4.5366973876953125, -0.6852859258651733, 3.5065078735351562, 3.6086719036102295, 3.360424518585205, 3.8940789699554443, 3.435147285461426, 3.4170849323272705, 2.007793664932251, 2.9455790519714355, 2.7861993312835693, 2.4028189182281494, 2.2636289596557617, 2.12794828414917, 2.1937096118927, 2.122143268585205, 2.2096493244171143, 1.6055375337600708, 1.6099010705947876, 1.5194404125213623, 4.133847236633301, 1.4598667621612549, 1.6122678518295288, 1.4496665000915527, 1.5963572263717651, 1.616939902305603, 1.5164343118667603, 3.1513895988464355, 1.4457648992538452, 1.1238073110580444, 0.6345608234405518, 1.2533984184265137, 1.018856167793274, 0.7702746987342834, 0.8643901348114014, 0.7191444635391235, 0.9200932383537292, 0.7738093137741089, 0.34013867378234863, 1.3611621856689453, 0.7824179530143738, 1.0800970792770386, 0.5242002606391907, 0.26881375908851624, -0.007204233668744564, -0.2283705621957779, -0.501410961151123, -1.6035155057907104, -0.7626625299453735, 1.4196206331253052, 1.171082854270935, 2.4265995025634766, 0.9581426382064819, 0.2041902095079422, -0.254436731338501, 0.10813120752573013, -0.4622395634651184, 0.1457851231098175, 0.8357154726982117, -0.4234122037887573, -0.485456645488739, 0.8002054691314697, 1.5129543542861938, 1.6100502014160156, 1.620447039604187, 1.0160433053970337, 0.39991846680641174, 2.8421740531921387, 3.086730718612671, 3.16877818107605, 3.2167727947235107, 1.7400325536727905, 1.6114381551742554, 1.3821934461593628, 1.6403707265853882, 3.987455368041992, 2.641127347946167, 1.1868956089019775, -0.1966841071844101, 3.11489200592041, 2.3976504802703857, 1.0971933603286743, -0.1261538565158844, 4.030074119567871, 2.5336809158325195, 0.2542243003845215, 0.40848666429519653, -3.6147656440734863, -2.1539711952209473, 0.045470431447029114, 0.7304039597511292, -0.3738579750061035, -0.6959854364395142, -0.6956247091293335, -0.5939298868179321, -2.439155340194702, -3.18929123878479, 5.671125888824463, 4.483436584472656, 5.276941299438477, 4.772185325622559, -0.54397052526474, 3.5849523544311523, 3.6388955116271973, 3.3671553134918213, 4.1331281661987305, 3.3683149814605713, 3.404278039932251, 2.116446018218994, 2.9454658031463623, 2.9406914710998535, 2.028132677078247, 2.127959966659546, 2.0885345935821533, 2.175482749938965, 2.2884764671325684, 2.2066760063171387, 2.0421037673950195, 1.5948137044906616, 1.611924409866333, 4.083347797393799, 1.4701485633850098, 1.4637832641601562, 1.4488550424575806, 1.4325478076934814, 1.5399307012557983, 1.6220324039459229, 2.905242919921875, 1.3415616750717163, 1.1074074506759644, 0.6788487434387207, 1.1415725946426392, 1.1479862928390503, 0.8960355520248413, 0.7605296969413757, 0.8521959781646729, 0.9242546558380127, 0.8740400671958923, 0.1877056062221527, 1.4756288528442383, 0.7101624608039856, 2.6559505462646484, 0.37599489092826843, 0.06333006173372269, -0.04173819720745087, -0.24581675231456757, -0.5424069166183472, -1.6604419946670532, -0.7659134864807129, 0.8391252160072327, 2.537083864212036, 2.3545873165130615, 0.9121683835983276, 0.10163474828004837, -0.32298609614372253, 0.13920442759990692, -0.394283652305603, 0.18470700085163116, 0.6860589385032654, -0.6604444980621338, -0.6959370374679565, 0.7248620390892029, 1.5838512182235718, 1.7571015357971191, 1.4008452892303467, 0.9828911423683167, 0.36834990978240967, 2.867776393890381, 4.006468772888184, 3.2964606285095215, 3.3589704036712646, 1.7385478019714355, 1.744105577468872, 1.2849962711334229, 1.6732823848724365, 3.8446593284606934, 2.7659952640533447, 1.2162116765975952, -0.08323752135038376, 3.2214784622192383, 2.3385660648345947, 0.9700197577476501, -0.3291915953159332, 4.1662797927856445, 2.549304485321045, 0.22350864112377167, 0.30393296480178833, -3.6114461421966553, -2.3934710025787354, 0.09477496892213821, 0.3588869571685791, -0.45580652356147766, -0.7425466179847717, -0.7596940398216248, -0.6543024182319641, -2.3511250019073486, -2.977902889251709, 3.531572103500366, 4.63935661315918, 5.377264022827148, 1.71120023727417, -0.6276735663414001, 3.5791587829589844, 3.644695281982422, 3.318505048751831, 4.479356288909912, 3.693902015686035, 3.3519914150238037, 2.0276482105255127, 2.944472551345825, 3.9413626194000244, 2.0502684116363525, 2.1641287803649902, 2.111687421798706, 2.2166693210601807, 1.618442416191101, 1.6708953380584717, 1.9803305864334106, 1.6056240797042847, 1.5804476737976074, 4.259450912475586, 1.5122487545013428, 1.5869331359863281, 1.5093088150024414, 1.4131137132644653, 1.599554181098938, 1.534354567527771, 2.8035945892333984, 1.3648053407669067, 0.938794732093811, 0.7846008539199829, 0.8212500214576721, 0.8945085406303406, 0.9411532878875732, 0.8930754661560059, 0.7907464504241943, 0.8233004212379456, 0.896054208278656, 0.31046944856643677, 1.5223931074142456, 0.721443235874176, 1.0003323554992676, 0.541334331035614, 0.12053316831588745, -0.008119943551719189, -0.369466096162796, -0.7188175916671753, -1.6764843463897705, -0.7763171195983887, 1.4366395473480225, 1.1803926229476929, 2.5309770107269287, 0.7898460626602173, 0.17730993032455444, -0.32265764474868774, -0.005061417818069458, -0.4954034388065338, 0.33508720993995667, 0.7351938486099243, -0.6127973198890686, -0.48705407977104187, 0.8037559390068054, 1.3957831859588623, 1.6182202100753784, 1.54705810546875, 1.1642327308654785, 0.5082777142524719, 2.676494598388672, 3.9732484817504883, 3.3225440979003906, 3.216959238052368, 1.6738606691360474, 1.7805352210998535, 1.4509203433990479, 1.481755018234253, 3.917235851287842, 2.8054752349853516, 1.0479758977890015, -0.2747025787830353, 3.027235269546509, 2.5161335468292236, 0.6379184126853943, -0.3682080805301666, 3.984583854675293, 2.4014289379119873, -0.09441936016082764, 0.21489889919757843, -0.7867413759231567, -0.4875887334346771, -0.6358382105827332, -1.8459546566009521, -2.2943880558013916]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (30, 40), 'etaBin': (0, 0.8)}}, 'et1_eta2': {'discriminator': {'threshold': 0.029999205470085138, 'nodes': [100, 5, 1], 'bias': [0.09213433414697647, -0.23188082873821259, -0.022360503673553467, -0.04104926064610481, 0.03756337985396385, -0.0800914540886879], 'weights': [0.5904896855354309, 0.03893570229411125, -1.3907091617584229, -1.7032928466796875, -0.17930108308792114, -0.08128349483013153, -1.1231359243392944, -0.4356464147567749, -3.0507562160491943, 3.4091029167175293, 3.001242160797119, 2.186160087585449, -0.10801549255847931, -0.3285580277442932, 0.4429783225059509, 1.0124597549438477, -2.9995498657226562, 0.9482599496841431, 1.1347765922546387, -1.0792865753173828, -2.8616366386413574, -2.19612455368042, -0.933168351650238, -0.34021806716918945, -2.1018013954162598, -0.9993510842323303, -1.1490378379821777, -2.6507275104522705, -2.175452709197998, -2.6680071353912354, -1.598770022392273, -0.6464859843254089, 2.9719316959381104, -2.507420539855957, -2.6244289875030518, -1.669575572013855, -2.7445647716522217, -1.4244457483291626, -0.9748613834381104, -0.6090899109840393, -2.1220827102661133, 4.71447229385376, -1.5496011972427368, -1.635913610458374, -1.1907134056091309, -0.014827021397650242, -0.6180021166801453, -0.7886080741882324, 0.8222874402999878, -1.2192057371139526, 0.03905884549021721, -0.6332072019577026, 3.0907986164093018, -1.273242712020874, -1.4562478065490723, -0.7722591161727905, -0.9486415982246399, -0.8034889698028564, 3.963317632675171, -1.277497410774231, -1.5324105024337769, -1.5171821117401123, -0.7567922472953796, 11.43925952911377, 5.547926902770996, 2.2526206970214844, 0.32004526257514954, -0.08272207528352737, -0.8711645007133484, -1.5131275653839111, -5.475527286529541, -2.480309009552002, 0.15551942586898804, 0.6227447390556335, -2.8719332218170166, -1.444675326347351, -2.0609018802642822, -1.8438037633895874, -0.7539303302764893, -0.5538824200630188, 0.029319029301404953, -2.5630404949188232, -2.5874741077423096, -0.8599187135696411, -1.672669768333435, -1.1529184579849243, -1.4896444082260132, -1.1326221227645874, 0.6330705285072327, -0.6693201661109924, -0.13246819376945496, 0.21245704591274261, -2.72232723236084, -0.7060127854347229, -0.521721363067627, -1.2177700996398926, -0.02182083949446678, 0.08974209427833557, -0.7891942858695984, -2.5173909664154053, -0.008088058792054653, -0.36212486028671265, 0.23218347132205963, 0.22939063608646393, 0.0789651870727539, -0.10735327750444412, 0.16151665151119232, -0.04628978669643402, 0.3349303603172302, -0.7026050090789795, -0.6477628946304321, -0.3520905673503876, 0.1677282303571701, 0.8560368418693542, -0.1344541609287262, -0.17212247848510742, 0.4232829213142395, -0.22554950416088104, -0.4439670741558075, -0.0494656004011631, 0.44899943470954895, 0.3173619508743286, 0.20028135180473328, 0.0868181511759758, 0.4064970910549164, 0.24186518788337708, 0.13442009687423706, 0.49868378043174744, 0.4536883234977722, 0.41789302229881287, 0.2941080629825592, 0.08372219651937485, -0.6924700140953064, 0.3533497452735901, 0.5764604210853577, 0.28987061977386475, 0.44642946124076843, 0.2365383356809616, 0.1317114382982254, 0.049991242587566376, 0.45580965280532837, -0.9969360828399658, 0.14324866235256195, 0.26984602212905884, 0.1351763904094696, -0.07751408964395523, 0.07537492364645004, 0.07581835985183716, -0.2067098617553711, 0.22372019290924072, -0.14219994843006134, 0.17268246412277222, -0.8246129751205444, 0.15458162128925323, 0.2911348044872284, 0.16611871123313904, 0.10237517952919006, -0.02008274383842945, -0.8829513788223267, 0.10081202536821365, 0.21726326644420624, 0.1398436278104782, 0.11100310832262039, -2.3700549602508545, -1.3163566589355469, -0.4976082444190979, -0.2008645087480545, -0.05346931144595146, 0.01672099158167839, 0.2794433832168579, 1.153123378753662, 0.5347667336463928, -0.23591700196266174, 0.06366326659917831, 0.5289624929428101, 0.3109363913536072, 0.26955440640449524, 0.21271485090255737, 0.059970956295728683, -0.05220668762922287, -0.08240161091089249, 0.5594058036804199, 0.5780542492866516, -0.006105588749051094, 0.24551650881767273, 0.19855040311813354, 0.2277381420135498, 0.20978404581546783, 0.010368341580033302, -0.008331459946930408, 0.007413141895085573, -0.22215430438518524, 0.46232789754867554, 0.05946789309382439, 0.1490078866481781, 0.14973200857639313, -0.11406383663415909, -0.06628511101007462, 0.21060946583747864, 0.38572537899017334, 0.6790534853935242, -0.0625845268368721, -1.4726331233978271, -1.4356392621994019, -0.12817269563674927, -0.2684076130390167, -1.1802328824996948, 0.5320567488670349, -0.5610719919204712, 3.69439959526062, 3.151961088180542, 2.26894474029541, -0.06426209956407547, -3.326401472091675, 0.9820716381072998, 1.7997863292694092, -2.8844730854034424, 0.949916660785675, 1.9055261611938477, -0.28290674090385437, -2.8899521827697754, -2.081645965576172, -0.9682865738868713, -0.2956332564353943, -1.904733419418335, -1.0034464597702026, -1.4726214408874512, -2.6972193717956543, -2.149054527282715, -2.6661837100982666, -1.8061586618423462, -0.7728073000907898, 3.0695223808288574, -2.555445432662964, -2.6622440814971924, -1.762162446975708, -2.738736152648926, -1.5288463830947876, -1.049529790878296, -0.8103806376457214, -2.27580189704895, 4.559605121612549, -1.5203019380569458, -1.550980806350708, -1.1586025953292847, -0.5841806530952454, -0.579011857509613, -0.651354193687439, 0.8221023678779602, -1.1980561017990112, 0.065700463950634, -0.6556133031845093, 2.9849350452423096, -1.2717925310134888, -1.424140214920044, -0.6916865706443787, -0.9612129330635071, -0.792949914932251, 3.9885778427124023, -1.2518304586410522, -1.5309427976608276, -1.4580252170562744, -0.8494288325309753, 11.549216270446777, 5.5689897537231445, 2.112680673599243, 0.3473624289035797, -0.06544961035251617, -0.8742182850837708, -1.3191906213760376, -5.648783206939697, -2.374908447265625, 0.04539087414741516, 0.580887496471405, -2.9228873252868652, -1.5327987670898438, -1.870954155921936, -1.6144806146621704, -0.9528557658195496, -0.6053400635719299, 0.03321241959929466, -2.4870898723602295, -2.6514077186584473, -0.9663213491439819, -1.836551308631897, -0.943376362323761, -1.1616631746292114, -1.073682188987732, 0.6118646264076233, -0.6491239666938782, -0.48891928791999817, 0.20361731946468353, -2.894702196121216, -0.7100587487220764, -0.430533230304718, -1.1173512935638428, 0.07548007369041443, -0.033040277659893036, -0.9127926230430603, -2.6644287109375, -0.629770815372467, -0.07850421220064163, 1.4082646369934082, 1.3599551916122437, 0.19849306344985962, 0.23612728714942932, 1.1846352815628052, -0.4241095781326294, 3.0868964195251465, -3.493380308151245, -2.861161470413208, -2.2373175621032715, 0.048551034182310104, 0.446251779794693, -0.44748467206954956, -1.0757741928100586, 2.8319435119628906, -0.9173075556755066, -0.9451092481613159, 0.31820836663246155, 2.751389503479004, 2.2438759803771973, 0.8698926568031311, 0.4281347393989563, 2.0359036922454834, 1.1272084712982178, 1.5681869983673096, 2.4893717765808105, 2.0592267513275146, 2.616725444793701, 1.649046778678894, 0.787843644618988, -3.0635390281677246, 2.574495792388916, 2.610328197479248, 1.8476383686065674, 2.716024160385132, 1.4725632667541504, 0.9866077303886414, 0.6180453896522522, 2.3364200592041016, -4.705195903778076, 1.506639838218689, 1.6076021194458008, 0.9751289486885071, 0.5456989407539368, 0.5271331667900085, 0.6558789014816284, -0.8371469378471375, 1.0203856229782104, -0.013975318521261215, 0.7584142684936523, -2.991203784942627, 1.2342934608459473, 1.418912410736084, 0.8065088987350464, 1.038306474685669, 0.6427537798881531, -3.8408119678497314, 1.2946735620498657, 1.5718222856521606, 1.6892096996307373, 0.6667776703834534, -11.493181228637695, -5.559185028076172, -2.1062769889831543, -0.446382075548172, 0.2928588390350342, 0.8152022957801819, 1.4135942459106445, 5.444582462310791, 2.3882269859313965, -0.08741159737110138, -0.44619089365005493, 3.0019993782043457, 1.5476585626602173, 1.9402860403060913, 1.632541537284851, 0.9815916419029236, 0.6687995195388794, -0.1889418661594391, 2.5583789348602295, 2.2068729400634766, 0.8004432916641235, 1.6298130750656128, 1.104409098625183, 1.1206876039505005, 1.1845680475234985, -0.5918524861335754, 0.5153836607933044, -0.05285320058465004, -0.38325634598731995, 2.7411727905273438, 0.681136429309845, 0.5474600791931152, 1.2225672006607056, -0.10717086493968964, 0.06011933460831642, 1.0072410106658936, 2.5828940868377686, -0.7259383797645569, -0.016049988567829132, 1.543966293334961, 1.5821679830551147, 0.14803296327590942, 0.24122636020183563, 1.078426718711853, -0.42724740505218506, 0.5997751951217651, -3.838749885559082, -3.0026040077209473, -2.3924615383148193, -0.02239542454481125, 3.494504928588867, -1.005405306816101, -1.7695751190185547, 2.9350998401641846, -0.9304192662239075, -1.9162030220031738, 0.4818142354488373, 2.88106369972229, 2.149655342102051, 0.8577679991722107, 0.21102914214134216, 2.0918517112731934, 0.9984931945800781, 1.410853385925293, 2.6451926231384277, 2.114591360092163, 2.732818603515625, 1.5853537321090698, 0.6914913058280945, -3.081550121307373, 2.6373603343963623, 2.496070146560669, 1.7700231075286865, 2.7934415340423584, 1.4922529458999634, 0.9308130741119385, 0.6724027395248413, 2.326244592666626, -4.52893590927124, 1.3958758115768433, 1.5147380828857422, 1.1259888410568237, 0.5307672619819641, 0.5730082392692566, 0.6693390607833862, -0.8560463786125183, 1.1814037561416626, -0.08019416034221649, 0.8441669940948486, -3.1649646759033203, 1.1468080282211304, 1.5281178951263428, 0.6987478137016296, 1.06266188621521, 0.603773295879364, -3.802156925201416, 1.318844199180603, 1.6397875547409058, 1.6550276279449463, 0.8351544737815857, -11.452370643615723, -5.521458625793457, -2.293156623840332, -0.4740429222583771, 0.1676577776670456, 0.8885350823402405, 1.3051804304122925, 5.613041400909424, 2.4396400451660156, -0.028703929856419563, -0.6290497779846191, 2.951404094696045, 1.5168440341949463, 1.9830490350723267, 1.6369656324386597, 0.9549140334129333, 0.6835190057754517, -0.027351686730980873, 2.474626302719116, 2.6867542266845703, 0.7921246290206909, 1.6991311311721802, 1.0826727151870728, 0.9945557713508606, 1.2690974473953247, -0.6617172360420227, 0.6684654355049133, 0.5199615955352783, -0.3760114014148712, 2.87965989112854, 0.726798951625824, 0.5863709449768066, 1.1498115062713623, -0.007829710841178894, 0.0622253343462944, 0.816074550151825, 2.5150094032287598, 0.8264837265014648, -0.13779251277446747, 1.0971431732177734, -2.029695987701416, -2.529853105545044]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (20, 30), 'etaBin': (1.37, 1.54)}}}
-  signatures["ElectronHighEnergyVeryLooseConf"]={'et3_eta2': {'discriminator': {'threshold': 0.63999844789505, 'nodes': [100, 7, 1], 'bias': [0.14202213287353516, 0.044922810047864914, 0.130228653550148, -0.23902182281017303, -0.06338616460561752, -0.09544681757688522, -0.012388982810080051, 0.052718501538038254], 'weights': [0.28274717926979065, -0.0902794897556305, -1.1716275215148926, -1.3358254432678223, -1.1099737882614136, -1.2971314191818237, -1.1283234357833862, 1.2253859043121338, 0.06466394662857056, 3.320276975631714, 3.171196460723877, 1.138137936592102, 0.045503389090299606, 0.22475014626979828, 0.17751266062259674, 0.06439196318387985, -2.633634567260742, -0.034996699541807175, -0.26828062534332275, -2.000157594680786, -6.725962162017822, -1.618412971496582, -0.08970476686954498, -1.3093565702438354, 0.6815795302391052, -4.424966335296631, -4.0503716468811035, -1.5026123523712158, -4.661406517028809, -2.0828752517700195, -0.5624021291732788, -1.2347328662872314, -1.6328587532043457, -1.1456995010375977, -1.8225566148757935, -3.344203233718872, -5.027546405792236, -4.453680992126465, 2.239474058151245, -1.0636610984802246, -1.310888409614563, -2.8235020637512207, -1.498542070388794, -1.2264456748962402, -1.2086938619613647, -1.15601646900177, -1.4287259578704834, -1.165838360786438, -1.8594722747802734, -4.3931884765625, -0.19476176798343658, -3.165910005569458, -3.085859537124634, -2.0063984394073486, -1.8945086002349854, -16.13319969177246, -1.3044785261154175, -1.3416823148727417, 2.1770057678222656, -0.7433953881263733, 0.12988553941249847, -0.9316554069519043, 2.217691659927368, 1.3818416595458984, -0.5709995627403259, 0.10366477817296982, 1.7351735830307007, -2.106459379196167, -0.9717280268669128, -2.6626627445220947, -14.11143684387207, 1.331822395324707, 0.20649340748786926, 0.2823592722415924, -3.0638129711151123, -1.2494398355484009, -2.881779670715332, -2.7773523330688477, -1.3643923997879028, -2.6660802364349365, 0.12275853753089905, -0.531599223613739, -2.955622911453247, -1.8080048561096191, -1.099861979484558, -1.2246712446212769, -2.114856481552124, -3.929741382598877, 0.15120084583759308, -1.2696914672851562, -0.9174460172653198, -0.6061720848083496, -1.789094090461731, -3.2463278770446777, 0.8811066746711731, -0.703289806842804, 0.060550328344106674, 0.023639215156435966, -0.6814206838607788, -3.909001350402832, 0.18770723044872284, -0.1405377835035324, -1.2302677631378174, -1.2209010124206543, -1.1579291820526123, -1.246543049812317, -1.0957294702529907, 1.1706188917160034, -0.014210512861609459, 3.3775975704193115, 3.121427536010742, 1.215960144996643, -0.011379869654774666, 0.055852439254522324, 0.11891841888427734, -0.00011067414015997201, -2.463144302368164, 0.05265668407082558, -0.21255169808864594, -2.0422146320343018, -6.922985553741455, -1.5908870697021484, -0.05098368227481842, -1.2778136730194092, 0.672627866268158, -4.401785850524902, -4.167597770690918, -1.497903823852539, -4.746738433837891, -2.0047824382781982, -0.39979735016822815, -1.1637401580810547, -1.6208927631378174, -1.1186578273773193, -1.8880037069320679, -3.3668735027313232, -5.20128059387207, -4.5024027824401855, 2.1461684703826904, -1.0649056434631348, -1.2864209413528442, -2.715212821960449, -1.4060957431793213, -1.242992877960205, -1.0179378986358643, -1.1375652551651, -1.2584116458892822, -1.055956482887268, -1.7858989238739014, -4.418509006500244, -0.11106868088245392, -3.0379960536956787, -3.0995235443115234, -2.135347843170166, -1.9988124370574951, -15.904447555541992, -1.1588839292526245, -1.3118478059768677, 2.1590986251831055, -0.9344964623451233, -0.0135507732629776, -0.8568328022956848, 2.0817148685455322, 1.2662397623062134, -0.4850042164325714, 0.1536051332950592, 1.8482657670974731, -1.9428343772888184, -0.954640805721283, -2.658745050430298, -9.85637092590332, 1.3575080633163452, 0.06733619421720505, 0.30169108510017395, -3.0705435276031494, -1.178808569908142, -1.454285740852356, -1.2192264795303345, -1.438407301902771, -2.5547242164611816, -0.00877488311380148, -0.5377897620201111, -2.9677164554595947, -1.9030320644378662, -1.2191334962844849, -1.0897046327590942, -2.232499361038208, -4.124947547912598, 0.6349344849586487, -1.1538774967193604, -1.0822242498397827, -0.5848073959350586, -1.8498214483261108, -3.295718193054199, 1.0382333993911743, -0.6621528267860413, 0.07696890830993652, 0.0424940399825573, -0.4925270080566406, -3.891364574432373, 0.2936531603336334, -0.08454501628875732, -1.3505454063415527, -1.1100420951843262, -1.0956943035125732, -1.2969938516616821, -1.19979989528656, 1.156850814819336, 0.10668422281742096, 3.385024309158325, 3.27032470703125, 1.3354922533035278, -0.0006183558725751936, 0.11222503334283829, 0.11331998556852341, 0.151800274848938, -2.5373029708862305, 0.022961391136050224, -0.14889909327030182, -1.9839359521865845, -6.814295291900635, -1.7548489570617676, -0.060591235756874084, -1.2306143045425415, 0.6699003577232361, -4.380358695983887, -4.096383094787598, -1.4795560836791992, -4.785045623779297, -1.9159256219863892, -0.44302597641944885, -1.3554067611694336, -1.4681158065795898, -1.1972999572753906, -1.9608839750289917, -3.4111669063568115, -5.071067810058594, -4.420048236846924, 2.096034288406372, -1.073103666305542, -1.4559451341629028, -2.8757550716400146, -1.5540671348571777, -1.4096827507019043, -1.1300352811813354, -1.1148945093154907, -1.2811181545257568, -0.9829069972038269, -1.669853925704956, -4.369635581970215, -0.23904581367969513, -3.072566270828247, -2.955306053161621, -2.013627290725708, -1.9658594131469727, -16.02226448059082, -1.2750412225723267, -1.215607762336731, 2.318936824798584, -0.8296549916267395, 0.17947354912757874, -0.9137855172157288, 2.254194736480713, 1.352735996246338, -0.6126715540885925, 0.24527733027935028, 1.6311631202697754, -1.948216438293457, -1.0399196147918701, -2.6666765213012695, -14.206071853637695, 1.3620108366012573, 0.15816786885261536, 0.14013929665088654, -2.9734251499176025, -1.2094577550888062, -2.8923392295837402, -2.782792806625366, -1.386623501777649, -2.4949629306793213, 0.1145109087228775, -0.35467785596847534, -2.934598207473755, -1.894834280014038, -1.173606038093567, -1.0315607786178589, -2.0828115940093994, -3.9362707138061523, 0.22694946825504303, -1.1036574840545654, -1.0480130910873413, -0.48877695202827454, -1.848626732826233, -3.096954822540283, 0.9614549279212952, -0.7965526580810547, 0.10809937119483948, 0.007918222807347775, -0.6243818998336792, -3.9375853538513184, 0.051183849573135376, 0.09048901498317719, -0.4733905494213104, -0.3319469392299652, -0.2653762698173523, -0.4868011474609375, -0.297495573759079, 0.560832142829895, -0.05003780126571655, 1.3924373388290405, 1.3854362964630127, 0.5146607756614685, -0.19103823602199554, -0.017589056864380836, 0.023756936192512512, 0.0330176055431366, -1.114441156387329, -0.22596734762191772, -0.7708549499511719, -0.6054661870002747, -2.9334278106689453, -0.6454871296882629, 0.05751057714223862, -0.41776296496391296, 0.5411032438278198, -1.7859348058700562, -1.719722867012024, -0.580839216709137, -2.130156993865967, -0.7216871976852417, -0.10892875492572784, -0.4566148519515991, -0.6056199073791504, -0.4279724359512329, -0.7769535779953003, -1.4744900465011597, -2.1605429649353027, -1.7213953733444214, 1.1051760911941528, -0.3211342394351959, -0.445777952671051, -1.1812955141067505, -0.5576277375221252, -0.4195803701877594, -0.3422568142414093, -0.22653773427009583, -0.4695035219192505, -0.3262995183467865, -0.735004186630249, -1.9418224096298218, 0.09174071997404099, -1.168866515159607, -1.22128164768219, -0.7043483257293701, -0.7283256649971008, -7.204474925994873, -0.3798859715461731, -0.33746176958084106, 1.1496115922927856, -0.20708248019218445, 0.22945275902748108, -0.22658023238182068, 1.0233837366104126, 0.8642142415046692, -0.18985693156719208, 0.1500888168811798, 0.8520581126213074, -0.7269424796104431, -0.35286080837249756, -1.0235799551010132, -6.348456382751465, 0.8705183863639832, 0.15560570359230042, 0.08678900450468063, -1.209613561630249, -0.4835868179798126, -0.4736233949661255, -0.3437206447124481, -0.33955317735671997, -0.9751660823822021, -0.29732581973075867, -0.06590645760297775, -1.1636468172073364, -0.6912620067596436, -0.4436054527759552, -0.42642655968666077, -0.7728438377380371, -1.5741921663284302, 0.05708381533622742, -0.4356011748313904, -0.3077152967453003, -0.048934049904346466, -0.5054852366447449, -1.3148101568222046, 0.6431949734687805, -0.3225339353084564, 0.07493171840906143, 0.10042744129896164, -0.04590907320380211, -1.7250473499298096, -0.0603816881775856, 0.23417924344539642, 1.2101662158966064, 1.2427308559417725, 1.1328670978546143, 1.2249811887741089, 0.9862027764320374, -1.161576747894287, -0.04822760447859764, -3.262429714202881, -3.2015626430511475, -1.338485598564148, -0.15154676139354706, -0.07190978527069092, -0.1653263121843338, -0.15322059392929077, 2.595893383026123, -0.11972130835056305, 0.18652082979679108, 2.0217485427856445, 6.926002025604248, 1.5598387718200684, 0.16886068880558014, 1.2638275623321533, -0.5272692441940308, 4.492748260498047, 4.03787899017334, 1.5100269317626953, 4.785079002380371, 1.9689689874649048, 0.2699744701385498, 1.345538854598999, 1.4226157665252686, 1.2248382568359375, 1.8355270624160767, 3.399639368057251, 5.029793739318848, 4.3292717933654785, -2.115488052368164, 1.0870859622955322, 1.2395857572555542, 2.6768858432769775, 1.5618555545806885, 1.2893359661102295, 1.2196587324142456, 0.9908119440078735, 1.4075284004211426, 1.1343210935592651, 1.82818603515625, 4.285490036010742, 0.18009521067142487, 3.0944271087646484, 2.924328088760376, 2.0661463737487793, 2.0301294326782227, 16.130718231201172, 1.1917723417282104, 1.2245737314224243, -2.1768124103546143, 0.749620258808136, -0.12066446244716644, 0.9654014110565186, -2.0959198474884033, -1.3426272869110107, 0.4436481297016144, -0.20915882289409637, -1.6357824802398682, 1.9860965013504028, 0.9602493643760681, 2.645803689956665, 9.665706634521484, -1.38805091381073, -0.12973235547542572, -0.08195609599351883, 3.0752155780792236, 1.3292607069015503, 1.2726296186447144, 1.3841434717178345, 1.4111193418502808, 2.6714603900909424, 0.02954469993710518, 0.5684002041816711, 2.8847787380218506, 1.7597341537475586, 1.191670298576355, 1.0492116212844849, 2.0593647956848145, 4.1192450523376465, -0.7738291621208191, 1.2191345691680908, 0.9027732610702515, 0.5678022503852844, 1.767541766166687, 3.1131906509399414, -0.8755212426185608, 0.7946219444274902, -0.058945488184690475, 0.07659655064344406, 0.6571308374404907, 3.925680160522461, -0.07904722541570663, 0.09933401644229889, 1.1631450653076172, 1.292356252670288, 1.1254448890686035, 1.2377358675003052, 1.2000197172164917, -1.2117499113082886, -0.1780625283718109, -3.26377534866333, -3.06864595413208, -1.1412039995193481, -0.19419358670711517, -0.05612161383032799, -0.1832316666841507, -0.14489597082138062, 2.4453468322753906, -0.08739234507083893, 0.26468759775161743, 1.9401435852050781, 6.82135534286499, 1.6155610084533691, 0.17874838411808014, 1.2941884994506836, -0.6455373167991638, 4.384232997894287, 4.177690029144287, 1.375864028930664, 4.703462600708008, 2.041057586669922, 0.35167667269706726, 1.24973726272583, 1.5953521728515625, 1.2429873943328857, 1.7988351583480835, 3.3330843448638916, 5.070181846618652, 4.270904064178467, -2.24532413482666, 0.9881550669670105, 1.4153648614883423, 2.68945050239563, 1.424712896347046, 1.4129841327667236, 1.0125186443328857, 1.1543220281600952, 1.3040084838867188, 1.0121275186538696, 1.8835437297821045, 4.269620895385742, 0.21178914606571198, 3.054622173309326, 2.9546971321105957, 2.1172122955322266, 2.0112013816833496, 16.03333282470703, 1.143807291984558, 1.3549410104751587, -2.172865629196167, 0.8555322289466858, -0.15370137989521027, 0.8155571818351746, -2.0952937602996826, -1.2124121189117432, 0.5474461913108826, -0.23574058711528778, -1.8112386465072632, 2.120798349380493, 0.8876272439956665, 2.5760042667388916, 14.055011749267578, -1.3161897659301758, -0.19645124673843384, -0.18186043202877045, 3.0352323055267334, 1.2923511266708374, 1.2616549730300903, 2.6287970542907715, 1.4860528707504272, 2.4803502559661865, -0.12982788681983948, 0.439534991979599, 2.889356851577759, 1.8662235736846924, 1.1233550310134888, 1.044345736503601, 2.0779550075531006, 3.993479013442993, -0.6578121781349182, 1.232187032699585, 0.8924049139022827, 0.6412978172302246, 1.8662434816360474, 3.1129326820373535, -0.9073031544685364, 0.7616286277770996, -0.09526926279067993, 0.10485108941793442, 0.523346483707428, 3.7854385375976562, 0.17648743093013763, -0.2528316378593445, -1.2156128883361816, -1.1102771759033203, -1.0704588890075684, -1.2753180265426636, -1.210276484489441, 0.9992573261260986, 0.1409521847963333, 3.2184674739837646, 3.1039376258850098, 1.151229977607727, 0.09455053508281708, 0.23564834892749786, 0.09298748522996902, 0.1539033055305481, -2.470391273498535, 0.12664496898651123, -0.23481540381908417, -1.9038240909576416, -6.783145427703857, -1.6993741989135742, -0.11947531998157501, -1.2329158782958984, 0.5226105451583862, -4.325520992279053, -4.037867546081543, -1.550290584564209, -4.854043006896973, -1.916058897972107, -0.37323376536369324, -1.2939159870147705, -1.6378166675567627, -1.3380255699157715, -1.9009093046188354, -3.302973508834839, -5.188836574554443, -4.369269371032715, 2.299292802810669, -1.1578855514526367, -1.3190635442733765, -2.8401646614074707, -1.5704522132873535, -1.4302914142608643, -1.2236803770065308, -1.0672663450241089, -1.2983427047729492, -1.0083593130111694, -1.902198076248169, -4.474057197570801, -0.18566705286502838, -3.0211009979248047, -3.002972364425659, -2.0178515911102295, -1.930372953414917, -15.964561462402344, -1.225709080696106, -1.3742645978927612, 2.3071861267089844, -0.8480401635169983, 0.01940225251019001, -0.9427683353424072, 2.298581600189209, 1.2756229639053345, -0.5297210216522217, 0.09697975963354111, 1.660962462425232, -1.9817538261413574, -0.8847788572311401, -2.6862776279449463, -9.727682113647461, 1.4013739824295044, 0.17543819546699524, 0.26084262132644653, -2.953389883041382, -1.2830952405929565, -1.4196559190750122, -1.4025901556015015, -1.4884506464004517, -2.6430399417877197, 0.012899785302579403, -0.4018450379371643, -3.0324909687042236, -1.7914526462554932, -1.2262786626815796, -1.0926862955093384, -2.1743857860565186, -3.9383301734924316, 0.8301222920417786, -1.1796116828918457, -1.069738507270813, -0.6172525882720947, -1.7295562028884888, -3.3269524574279785, 1.008524775505066, -0.8471908569335938, -0.017537109553813934, 0.08606838434934616, -0.4558980464935303, -3.909362316131592, 0.9480514526367188, 2.385404586791992, 0.9066774845123291, 0.14874543249607086, -1.9307057857513428, -1.6492191553115845, 3.136667490005493]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (1.37, 1.54)}}, 'et1_eta3': {'discriminator': {'threshold': -0.25500081777572631, 'nodes': [100, 7, 1], 'bias': [-0.03094511106610298, -0.5799899697303772, -0.2377893626689911, -0.026239745318889618, 0.046430233865976334, -0.5510327816009521, -0.0039180004969239235, -0.051922306418418884], 'weights': [-2.1007091999053955, -2.313844680786133, 1.0081775188446045, 1.1952576637268066, 1.1381967067718506, 0.05225830525159836, 0.8718470931053162, 0.7521812915802002, -2.3881070613861084, -3.520962715148926, -1.7607707977294922, 1.2383842468261719, 0.5015622973442078, 0.5506165623664856, 7.889691352844238, 4.487699508666992, 2.413928270339966, 4.557316780090332, 2.7182300090789795, 6.116832256317139, 1.8896197080612183, 2.954477071762085, 2.252577304840088, 4.00665807723999, 7.100888729095459, 3.796987533569336, 1.3658812046051025, 2.5489814281463623, 2.373077392578125, 2.194671869277954, 3.1750872135162354, 2.3532614707946777, 1.3565171957015991, 2.281101703643799, 1.3306998014450073, 2.118257999420166, 2.540738105773926, 0.7964193224906921, 0.5464814305305481, 2.3898704051971436, 1.2077999114990234, 1.6454503536224365, 1.5282938480377197, 2.09716796875, -0.790364146232605, 2.1279666423797607, 0.2590458393096924, 1.4781116247177124, -0.3069359362125397, 1.6084834337234497, 1.3704075813293457, 1.980455994606018, 1.8952268362045288, 0.6363973617553711, 1.8800452947616577, 1.7378103733062744, 0.6629533171653748, 1.0552384853363037, 0.9378629326820374, 0.7483189702033997, -0.1298983097076416, 0.9791874289512634, 0.8771135210990906, -1.0042057037353516, 0.40825867652893066, 1.1051154136657715, 1.0564031600952148, 0.45147621631622314, -1.067683219909668, -1.2380783557891846, -3.285083770751953, 1.7178001403808594, -0.7389792203903198, -0.22323843836784363, 2.189730167388916, 2.009469747543335, 2.255263566970825, 1.9634788036346436, 1.4359910488128662, 0.6549786329269409, 3.5869414806365967, 5.503750324249268, 4.111057758331299, 1.946467638015747, 1.4941688776016235, 1.556199550628662, 1.214790940284729, 1.1002682447433472, 0.8039454817771912, 1.1697194576263428, 0.060469068586826324, 0.37819790840148926, 3.4146008491516113, 1.5209791660308838, 0.16834624111652374, 0.9300581216812134, 0.7021365165710449, 0.21195092797279358, -0.021994179114699364, 1.546455979347229, 1.3528074026107788, 5.125917434692383, 0.22711265087127686, -0.4906262159347534, -0.30035990476608276, 0.43955761194229126, -0.17688122391700745, -0.04665842652320862, 0.9400006532669067, 0.8820577263832092, 3.295884132385254, -6.009624481201172, -7.582295894622803, -0.5822781920433044, -0.8339431285858154, -0.7792884111404419, -1.3579961061477661, -1.968181848526001, -0.73675137758255, -3.972010850906372, 3.736644744873047, -1.5014550685882568, -0.1969117820262909, -1.642208456993103, -2.2833566665649414, -1.8617013692855835, 0.559748113155365, -1.1071833372116089, -1.2239174842834473, -0.8167917132377625, -2.072439432144165, -0.9969769716262817, -0.6641512513160706, -0.7494655847549438, -1.007724404335022, -0.8033524751663208, 1.0693188905715942, 0.4696619510650635, 0.44561606645584106, -0.7622324824333191, -0.4941210150718689, -0.500256359577179, -0.5528082847595215, -0.8811859488487244, -2.627695322036743, -0.9086533784866333, -0.13771457970142365, -0.4600067436695099, -0.23270897567272186, -0.48949337005615234, -0.4211263060569763, -0.8661603331565857, -0.3454934060573578, -0.25097566843032837, -1.109216332435608, -0.2770203948020935, 2.2806193828582764, -0.4382098913192749, -0.2284175008535385, 0.38630273938179016, 2.6404471397399902, 0.015628736466169357, 0.060615409165620804, 0.5514221787452698, -0.13763225078582764, -0.34061601758003235, -0.13166075944900513, -0.10710185021162033, 0.7150377631187439, 0.6659208536148071, 1.686867356300354, -0.4217521548271179, 0.051326170563697815, 1.9894918203353882, -0.4145640730857849, 0.0018460950814187527, -0.9995002746582031, -0.7671723365783691, -0.36894315481185913, -0.16878998279571533, -0.9874062538146973, -2.3170623779296875, -1.5303120613098145, -0.7137605547904968, -0.5784990787506104, -0.5984774231910706, -0.3706347346305847, -0.3041951358318329, 0.6751729249954224, -0.18250393867492676, 0.014772665686905384, 0.47152262926101685, -1.1612502336502075, -0.35504812002182007, -0.15878286957740784, -0.23169395327568054, 0.06546385586261749, 0.1422242820262909, 0.12764205038547516, -0.4763239026069641, 402.8721008300781, 33.97813034057617, 0.2774106562137604, -13.140117645263672, 18.208972930908203, -1.6552678346633911, -14.364242553710938, 0.10251864045858383, 0.6461477279663086, -6.983832359313965, -0.1841837614774704, -5.492713451385498, 11.75304889678955, -11.98824405670166, -159.63316345214844, -1.214348554611206, 0.8628255128860474, -107.30135345458984, 0.7032712697982788, -1.4195795059204102, -0.18183526396751404, -65.83489990234375, 0.33127501606941223, -106.34962463378906, 11.31546688079834, -53.09890365600586, -21.88643455505371, -3.195594072341919, -28.47698211669922, 0.3772991895675659, 0.3786780834197998, 0.3228470981121063, 13.256346702575684, -1.2974534034729004, 0.24294105172157288, -5.732027053833008, -98.69583892822266, 0.11705353111028671, -0.3564915955066681, 0.5138375163078308, -0.8186004757881165, 0.21545495092868805, 0.1928042769432068, 0.3294401466846466, -2.746062755584717, 0.5420972108840942, 0.1389545351266861, 0.3707195222377777, -0.10348216444253922, 0.40366220474243164, 0.21224001049995422, 0.35471540689468384, -78.8619155883789, 0.14935342967510223, 0.1958923041820526, 0.36816808581352234, -56.387245178222656, 0.10132946819067001, 0.16250264644622803, 0.06466923654079437, -0.06174613907933235, 0.10366235673427582, 0.06677092611789703, -0.16304466128349304, 0.07947070896625519, 0.19330325722694397, 0.23532555997371674, 0.03881563991308212, -0.1308038830757141, -0.32119083404541016, -0.6026683449745178, 7.16275691986084, -0.03346657752990723, -0.4408835768699646, 0.6430355906486511, 2.9998464584350586, 0.5100350379943848, 0.5578357577323914, 0.2675873935222626, -0.35237443447113037, -16.593713760375977, 1.062922716140747, 0.8223982453346252, -0.4407559633255005, 0.43679893016815186, 0.38295313715934753, 0.2279316931962967, 0.13923469185829163, 85.44652557373047, 11.521448135375977, 0.005550213158130646, 0.11674965918064117, 0.6307211518287659, 0.29508522152900696, 0.1420155018568039, 0.1129414290189743, 0.1537802517414093, 0.016230463981628418, 0.10687793791294098, 0.18670910596847534, -1.9405847787857056, -2.2584705352783203, 0.43508070707321167, 1.1229798793792725, 1.2083641290664673, -0.055893369019031525, 0.854990541934967, 0.4440760016441345, -2.362013339996338, -3.002002239227295, -1.7424116134643555, 1.282680869102478, 3.54481840133667, 0.3624274730682373, 7.852659225463867, 4.4275736808776855, 2.3369593620300293, 4.522994518280029, 2.953019380569458, 6.063052177429199, 1.98888099193573, 2.8754169940948486, 2.223193407058716, 4.024523735046387, 3.9249138832092285, 3.621492624282837, 1.3646823167800903, 2.564692497253418, 2.1688525676727295, 2.0190727710723877, 3.2260923385620117, 2.3291244506835938, 1.4813531637191772, 2.127375841140747, 1.2334511280059814, 2.068463087081909, 2.523533344268799, 1.1103572845458984, 0.47116997838020325, 2.399650812149048, 1.3764628171920776, 1.7786095142364502, 1.5651535987854004, 1.948794960975647, -0.4554291367530823, 2.1042613983154297, 0.5021664500236511, 1.5149105787277222, -0.09896903485059738, 1.6347845792770386, 1.3543245792388916, 2.042853355407715, 0.7513309121131897, 0.7224506139755249, 1.668306827545166, 1.629412293434143, 0.5949528217315674, 0.9215031862258911, 1.0848543643951416, 0.7651270627975464, -0.15050332248210907, 0.9530659317970276, 0.868942141532898, -1.1884386539459229, 0.473081111907959, 1.0005643367767334, 0.6908371448516846, 0.5094130635261536, -1.0406453609466553, -1.303475260734558, -3.4733846187591553, 1.6681971549987793, -0.6520408987998962, -0.12984442710876465, 1.2784024477005005, 1.8467698097229004, 2.34696626663208, 2.044661045074463, 1.404430627822876, 0.7100067734718323, 3.449969530105591, 5.455233573913574, 4.227277755737305, 2.001664876937866, 1.5308459997177124, 1.507209062576294, 1.4007253646850586, 1.0763568878173828, 0.2573568820953369, 1.2577941417694092, 0.20016540586948395, 0.2080109715461731, 3.231663942337036, 1.4974982738494873, 0.22924233973026276, 0.8112363219261169, 0.5831732153892517, 0.03717155382037163, -0.0931810736656189, 1.6993858814239502, 1.9425886869430542, 2.230010747909546, -0.7899075746536255, -1.041550874710083, -1.163835048675537, -0.023047853261232376, -0.7102572917938232, -0.6930257081985474, 2.35408616065979, 2.9593417644500732, 1.747288703918457, -1.4183573722839355, -3.672621726989746, -0.4312297999858856, -7.906158447265625, -4.6028571128845215, -2.2369861602783203, -4.694456100463867, -2.8813130855560303, -6.100637435913086, -5.464810848236084, -2.905691385269165, -2.2714719772338867, -3.974491834640503, -7.147107124328613, -3.6417150497436523, -1.5428097248077393, -2.6747145652770996, -2.2317328453063965, -2.1590499877929688, -3.2053399085998535, -2.3329577445983887, -1.3180989027023315, -2.262638807296753, -1.149888038635254, -2.112332820892334, -2.4860734939575195, -0.8565242886543274, -0.47458285093307495, -2.3548367023468018, -1.354463815689087, -1.7831059694290161, -1.6712779998779297, -2.0474355220794678, 0.6300367116928101, -2.0333731174468994, -0.30299773812294006, -1.705795407295227, 0.2845810353755951, -1.818902850151062, -1.2862391471862793, -2.0488240718841553, -0.5381596684455872, -0.5640580058097839, -1.6181864738464355, -1.55097234249115, -0.1210620179772377, -1.1456257104873657, -1.1275335550308228, -0.8689118027687073, 0.08309686183929443, -0.9453075528144836, -0.970598042011261, 0.9878921508789062, -0.34412458539009094, -1.0246222019195557, -1.0590088367462158, -0.5912625193595886, 1.081247091293335, 1.3132822513580322, 3.4099647998809814, -1.5989214181900024, 0.6513791680335999, 0.21187707781791687, -2.2735748291015625, -1.9909420013427734, -2.1788532733917236, -1.8416821956634521, -1.3916486501693726, -0.6080116629600525, -3.4252054691314697, -5.368403434753418, -4.12479305267334, -1.9456300735473633, -1.5372709035873413, -1.6067602634429932, -1.2785377502441406, -1.1867151260375977, 0.2990397810935974, -1.0779470205307007, -0.158025324344635, -0.14052170515060425, -3.3931007385253906, -1.5667158365249634, -0.36663204431533813, -0.8455533385276794, -0.6713784337043762, -0.16063879430294037, -0.040134310722351074, -1.4953278303146362, 1.596260905265808, 5.198098182678223, 2.63092041015625, -0.40998658537864685, -0.32816070318222046, 0.4930421710014343, -0.0616956390440464, -0.03750624507665634, 1.0591871738433838, 0.959857702255249, 3.3427958488464355, -4.3458991050720215, -7.73824405670166, -0.6858645081520081, -0.9432830214500427, -0.6730754375457764, -1.3013004064559937, -1.9121559858322144, -1.011731505393982, -3.1688013076782227, 3.716156482696533, -1.3690149784088135, -0.16697902977466583, -1.5855625867843628, -2.169727325439453, -1.7538241147994995, 0.6404786109924316, -1.0807452201843262, -1.1927940845489502, -0.849341869354248, -1.9389855861663818, -0.8733682632446289, -0.659896194934845, -0.8995044231414795, -1.0617659091949463, -0.8034411668777466, 0.9729233980178833, 0.5285145044326782, 0.2824307382106781, -0.9946240782737732, -0.37254321575164795, -0.6959270238876343, -0.4802451729774475, -0.7419224977493286, -2.6758620738983154, -0.695358157157898, 0.09782667458057404, -0.46678611636161804, -0.23515424132347107, -0.4873230457305908, -0.47331178188323975, -0.867354154586792, -0.21005989611148834, -0.2723740041255951, -1.0755614042282104, -0.29528096318244934, 2.2023961544036865, -0.32304009795188904, -0.22123561799526215, 0.24789991974830627, 2.7217793464660645, 0.15713565051555634, 0.04494522139430046, 0.6728058457374573, -0.14567501842975616, -0.4104965031147003, -0.2612016201019287, -0.21245737373828888, 0.7029872536659241, 0.7955795526504517, 1.6041685342788696, -0.3090055584907532, 0.10718128830194473, 1.8080730438232422, -0.46032610535621643, -0.11171220988035202, -0.7961090207099915, -0.790030837059021, -0.4890535771846771, -0.2189905345439911, -0.9987297058105469, -2.211577892303467, -1.6008617877960205, -0.5922768712043762, -0.5221610069274902, -0.637117862701416, -0.2673161029815674, -0.41357263922691345, 0.8814568519592285, -0.2164633423089981, 0.16833142936229706, 0.3782579302787781, -1.1592421531677246, -0.38619136810302734, -0.12990409135818481, -0.10718148946762085, -0.01697695441544056, 0.06661339849233627, 0.014486494474112988, -0.5699627995491028, 1.9973385334014893, 2.1309306621551514, -0.5122681260108948, -1.202344298362732, -1.1297152042388916, 0.014354710467159748, -0.9862836599349976, -0.30565881729125977, 2.4909772872924805, 4.27197265625, 4.374741554260254, -1.3085383176803589, -11.390575408935547, -0.20352113246917725, -7.747992038726807, -4.423669815063477, -2.3426685333251953, -4.480123519897461, -2.8186402320861816, -5.92237663269043, -1.4835683107376099, -3.0571129322052, -2.2464282512664795, -3.940237045288086, -2.7140586376190186, -3.6811470985412598, 0.9845989346504211, -2.5505330562591553, -1.9789199829101562, -2.08762788772583, -1.9171174764633179, -2.359292984008789, -1.315712809562683, -2.2376279830932617, -0.8671364784240723, -2.107095241546631, -2.6475205421447754, -0.8589930534362793, -0.3683758080005646, -2.1531691551208496, -1.4233540296554565, -1.5702155828475952, -1.6174753904342651, -2.0062501430511475, 0.342667818069458, -2.0331859588623047, -0.5590293407440186, -1.6435714960098267, 0.14125694334506989, -1.7987854480743408, -1.3453396558761597, -2.090360641479492, -0.6115875244140625, -0.7373771667480469, -1.8221087455749512, -1.6411436796188354, -0.6797935962677002, -0.9783271551132202, -1.0827277898788452, 0.2515128254890442, 0.021974338218569756, -0.9872182607650757, -0.47856155037879944, 1.1943868398666382, -0.36076390743255615, -0.9760910272598267, -0.7265956997871399, -0.5572766065597534, 1.1302062273025513, 1.1217896938323975, 3.399322032928467, -1.6227389574050903, 0.7325427532196045, 0.005098146852105856, -1.2944973707199097, -1.6728495359420776, -2.1555445194244385, -1.8680419921875, -1.3898398876190186, -0.7260504364967346, -3.4318902492523193, -5.429965496063232, -4.287997245788574, -2.0866763591766357, -1.5176806449890137, -1.5258362293243408, -1.2487256526947021, -1.1510461568832397, -0.7547659277915955, -1.276963472366333, -0.170984148979187, 0.596198558807373, -3.3602657318115234, -1.3989766836166382, -0.18409514427185059, -0.5489795804023743, -0.704750120639801, -0.2765718698501587, 0.021174276247620583, -1.4826658964157104, -0.8679412603378296, 0.2576349973678589, -0.5919599533081055, -0.7536229491233826, 1.2111365795135498, 0.7024969458580017, 1.1383100748062134]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (20, 30), 'etaBin': (1.54, 2.5)}}, 'et1_eta2': {'discriminator': {'threshold': 0.34999872446060182, 'nodes': [100, 16, 1], 'bias': [-0.019316092133522034, -0.1037711575627327, -0.03230678290128708, 0.11474386602640152, -0.08302824199199677, -0.05786946788430214, -0.006892677396535873, -0.01378057524561882, -0.14864644408226013, 0.019947558641433716, 0.1488591730594635, 0.038698844611644745, 0.040183890610933304, -0.017803698778152466, -0.1598578244447708, -0.11896070092916489, 0.11337883025407791], 'weights': [0.5552917718887329, 0.010228516533970833, -0.9567947387695312, -0.8506383895874023, -0.25354018807411194, -0.09409420937299728, -0.5022487640380859, -0.24314863979816437, -1.4397705793380737, 3.3494832515716553, 3.500687837600708, 1.4162331819534302, -1.6418179273605347, -0.2862023115158081, 0.6304506659507751, 0.7158096432685852, -2.605576753616333, 0.05955013632774353, 0.11632593721151352, -0.8891122341156006, -1.8062291145324707, -0.5559478402137756, -0.19555532932281494, 0.020463798195123672, -1.0237559080123901, -0.23868079483509064, -0.9529364705085754, -1.6772258281707764, -1.8570913076400757, -1.2494373321533203, -0.8983120322227478, -1.152151346206665, -0.6400688290596008, -1.185542345046997, -2.6568124294281006, -1.2505749464035034, -1.5172412395477295, -1.1229621171951294, -0.7818270921707153, 0.44712117314338684, -0.8999243974685669, 1.5345436334609985, -0.8705605864524841, -1.120680809020996, -0.4715586304664612, -0.18130704760551453, -0.9992321729660034, -0.8352436423301697, -0.7491253614425659, -1.182928204536438, 0.302002876996994, -0.13425582647323608, 0.8934618830680847, -0.8060379028320312, -1.351983666419983, -0.8858078718185425, -0.7271347045898438, -0.8996135592460632, -0.5432066917419434, -1.5538347959518433, -0.8567658066749573, -1.1478756666183472, -0.38719427585601807, 10.876370429992676, -0.332080215215683, 2.5477261543273926, 0.5793077349662781, -1.4362565279006958, -0.603681206703186, -0.8186864852905273, -2.2784171104431152, -3.0707437992095947, 0.32493945956230164, 0.12808974087238312, -1.5168015956878662, -1.3067073822021484, -1.2778325080871582, -1.0687216520309448, -0.7766463160514832, -0.04328407719731331, -0.19496800005435944, -1.2531750202178955, -2.910007953643799, -0.3609386682510376, -2.1424617767333984, -0.7363407611846924, -0.8463560342788696, -0.9375942945480347, 0.6519914865493774, -0.2914380431175232, -0.43966105580329895, 0.16867288947105408, -4.101846218109131, -1.0502941608428955, 0.011142313480377197, -0.9158366918563843, 0.0484946183860302, -0.06989461928606033, -0.5177410244941711, -0.7031639814376831, 0.7335751056671143, -0.0949900820851326, -0.8556097745895386, -0.897462010383606, -0.08025611937046051, -0.261803537607193, -0.4068710207939148, -0.1846694052219391, -0.2076261341571808, 3.481656789779663, 3.419125556945801, 1.398795485496521, -1.6988979578018188, -0.16265524923801422, 0.4975373148918152, 0.772631824016571, -2.782301902770996, 0.14371941983699799, 0.20590175688266754, -0.8948282599449158, -1.7259280681610107, -0.6316713094711304, -0.21104009449481964, -0.08008550852537155, -1.1546460390090942, -0.29059165716171265, -0.25878670811653137, -1.7542731761932373, -1.844640851020813, -1.0604256391525269, -0.9801983833312988, -0.9484772086143494, -0.8163326382637024, -1.4220900535583496, -2.7558176517486572, -1.266526222229004, -1.665647029876709, -1.1136500835418701, -0.7263275384902954, 0.2755652070045471, -0.7718544602394104, 1.5213825702667236, -0.8038144707679749, -1.051478385925293, -0.3741123676300049, -0.26005318760871887, -0.8455421924591064, -0.6586684584617615, -0.756643533706665, -1.1935230493545532, 0.2170078158378601, -0.048524320125579834, -0.3516852855682373, -0.9206705689430237, -1.4098917245864868, -0.9038867950439453, -0.6365238428115845, -0.8064131140708923, -0.4581282436847687, -1.4378315210342407, -0.8303741812705994, -1.0381807088851929, -0.32336902618408203, 10.86023235321045, -0.20308178663253784, 2.4996066093444824, 0.916535496711731, -1.4427239894866943, -0.651955246925354, -0.916057288646698, -2.6491751670837402, -1.3226696252822876, 0.20145893096923828, 0.016924021765589714, -1.5994532108306885, -1.3198020458221436, -1.2118921279907227, -1.0106171369552612, -0.8690285086631775, -0.05156170204281807, -0.1345367282629013, -1.1746867895126343, -3.0087599754333496, -0.4126783609390259, -1.6475902795791626, -0.6453680396080017, -0.8594444394111633, -0.8819097280502319, 0.5885420441627502, -0.3558621108531952, -0.5238243937492371, 0.14452555775642395, -4.069514751434326, -1.0835719108581543, -0.16290251910686493, -0.7415673136711121, -0.019963355734944344, 0.1148814857006073, -0.6057941317558289, -0.8104291558265686, 0.7246147394180298, -0.11818815022706985, -0.8793654441833496, -0.7741272449493408, -0.1725231111049652, -0.3059075176715851, -0.46918076276779175, -0.212732195854187, -1.3384826183319092, 3.487067461013794, 3.4443018436431885, 1.584708571434021, -1.7936021089553833, -0.1785620003938675, 0.6468092799186707, 0.7794907689094543, -2.569432497024536, 0.09671192616224289, 0.15427713096141815, -0.7508818507194519, -1.856061339378357, -0.46623748540878296, -0.02812071517109871, -0.07284417003393173, -0.9098274111747742, -0.18429060280323029, -0.23630863428115845, -1.5745432376861572, -2.073143482208252, -1.1390475034713745, -0.96384197473526, -0.9389058947563171, -0.666911780834198, -1.4336183071136475, -2.62703537940979, -1.4563757181167603, -1.7171554565429688, -1.0512981414794922, -0.6972362995147705, 0.339679092168808, -0.9511238932609558, 1.5715643167495728, -0.8007113337516785, -1.0636872053146362, -0.586872935295105, -0.3550742268562317, -0.8697413802146912, -0.6544356942176819, -0.8945467472076416, -1.2754613161087036, 0.3610660135746002, -0.06953465938568115, -0.26404812932014465, -0.8395150899887085, -1.3439617156982422, -0.774702787399292, -0.6974011659622192, -0.9728923439979553, -0.5893943309783936, -1.4801794290542603, -0.8205973505973816, -1.250777244567871, -0.36026930809020996, 10.894411087036133, -0.42308273911476135, 2.3444528579711914, 0.8858518600463867, -1.467198133468628, -0.7441110610961914, -0.9217826128005981, -2.156825304031372, -1.343586802482605, 0.25004807114601135, 0.05955538526177406, -1.6514348983764648, -1.2369376420974731, -1.2601590156555176, -1.0826798677444458, -0.7860440611839294, 0.0887174904346466, -0.041484326124191284, -1.1946935653686523, -2.973034620285034, -0.4790688157081604, -1.8347071409225464, -0.7825266718864441, -0.8445653915405273, -0.8828567266464233, 0.5315582156181335, -0.3270191550254822, -0.320083886384964, 0.09319224953651428, -4.249144554138184, -1.1637670993804932, -0.05504040792584419, -0.8941628932952881, -0.008276454173028469, -0.05497322976589203, -0.5358245968818665, -0.6403898000717163, -0.6696319580078125, 0.03270046040415764, 0.8640455007553101, 0.8980611562728882, 0.2464776635169983, 0.32776811718940735, 0.5700050592422485, 0.21295976638793945, 0.3229745626449585, -3.3371031284332275, -3.4341933727264404, -1.3828312158584595, 1.6272374391555786, 0.27042704820632935, -0.7119466662406921, -0.7196571230888367, 2.580906867980957, -0.156316876411438, -0.13831043243408203, 0.8095064759254456, 1.8257427215576172, 0.5846728086471558, 0.12217122316360474, 0.19327515363693237, 0.977573037147522, 0.3239986002445221, 0.1648118644952774, 1.7038171291351318, 1.908756971359253, 1.108931303024292, 0.8072933554649353, 1.0766046047210693, 0.8026160597801208, 1.286221981048584, 2.6415646076202393, 1.41896390914917, 1.5956764221191406, 0.9195521473884583, 0.6640766859054565, -0.2301202118396759, 0.9652895331382751, -1.598633885383606, 0.8651534914970398, 1.1733200550079346, 0.40456539392471313, 0.35020318627357483, 0.7773797512054443, 0.7307055592536926, 0.8341201543807983, 1.195003628730774, -0.23022514581680298, 0.22589200735092163, 0.3061002492904663, 0.8185170292854309, 1.4574700593948364, 0.938140332698822, 0.5677893161773682, 0.7599512934684753, 0.4279262125492096, 1.4332828521728516, 0.8324853777885437, 1.078055739402771, 0.2039680778980255, -10.871905326843262, 0.35006770491600037, -2.490281581878662, -0.7757031917572021, 1.5198066234588623, 0.7101616859436035, 0.7515924572944641, 2.7716360092163086, 1.3313320875167847, -0.20012888312339783, -0.076100192964077, 1.486978530883789, 1.3516525030136108, 1.2427988052368164, 1.0729584693908691, 0.729925811290741, 0.15996645390987396, 0.19842636585235596, 1.2653568983078003, 3.051607847213745, 0.4309154748916626, 1.63603937625885, 0.7357271313667297, 0.8980702757835388, 0.8016939163208008, -0.5445800423622131, 0.12130704522132874, 0.4391273558139801, -0.09838249534368515, 4.11781120300293, 1.122452974319458, 0.19744031131267548, 0.9369194507598877, 0.06823644787073135, 0.060421332716941833, 0.6352501511573792, 0.6739318370819092, 0.6858038902282715, -0.019727200269699097, -1.001968264579773, -0.8918737173080444, -0.1502036452293396, -0.3205699026584625, -0.5736018419265747, -0.13186383247375488, -0.39529410004615784, 3.4859557151794434, 3.4284462928771973, 1.4035826921463013, -1.640210509300232, -0.3135383725166321, 0.5356839299201965, 0.6600520014762878, -2.5823628902435303, 0.13955093920230865, 0.0725494921207428, -0.770932674407959, -1.7348649501800537, -0.6507049798965454, -0.20144428312778473, -0.13504642248153687, -1.1447025537490845, -0.35723036527633667, -0.286099910736084, -1.6319332122802734, -1.8560181856155396, -1.2031279802322388, -0.8930785059928894, -1.00017511844635, -0.6441065669059753, -1.245873212814331, -2.794471025466919, -1.3996754884719849, -1.5556483268737793, -1.0835742950439453, -0.7992517948150635, 0.22534754872322083, -0.9724661111831665, 1.6932770013809204, -0.8565849661827087, -1.1712214946746826, -0.360552579164505, -0.2824894189834595, -0.8571367263793945, -0.6806299090385437, -0.7907031774520874, -1.1049941778182983, 0.3263963758945465, -0.08406949043273926, -0.28964173793792725, -0.8079245090484619, -1.4929438829421997, -0.7955628633499146, -0.5991711616516113, -0.932087779045105, -0.6560699343681335, -1.404407024383545, -0.8554427027702332, -1.2351109981536865, -0.33419013023376465, 10.89401912689209, -0.2312469482421875, 2.4426827430725098, 0.9305117130279541, -1.3534389734268188, -0.6897302865982056, -0.9675629138946533, -2.168972969055176, -1.322123646736145, 0.3144022524356842, 0.23111803829669952, -1.4979221820831299, -1.1858443021774292, -1.2555993795394897, -1.1561403274536133, -0.7495806813240051, -0.04245036467909813, -0.18406154215335846, -1.1813132762908936, -2.8791563510894775, -0.4076322913169861, -1.7781468629837036, -0.5980466604232788, -0.7824084758758545, -0.967664361000061, 0.5172649025917053, -0.319959431886673, -0.3406945765018463, 0.28363990783691406, -4.237994194030762, -1.1467232704162598, -0.10464151203632355, -0.9307601451873779, 0.09541943669319153, -0.04833906143903732, -0.470238596200943, -0.7218970060348511, 0.6560988426208496, -0.019636064767837524, -0.987587571144104, -0.8654680252075195, -0.21539467573165894, -0.2691390812397003, -0.3547929525375366, -0.15463805198669434, -0.44715645909309387, 3.268347978591919, 3.445453643798828, 1.4911233186721802, -1.6178590059280396, -0.16750086843967438, 0.6673619151115417, 0.7508688569068909, -2.7298293113708496, 0.27502188086509705, 0.04391147196292877, -0.878665566444397, -1.7333455085754395, -0.42223119735717773, -0.08202985674142838, -0.1357778012752533, -1.0610271692276, -0.18828009068965912, -1.10871160030365, -1.6452271938323975, -1.9328927993774414, -1.1163911819458008, -1.0184240341186523, -1.1207354068756104, -0.799267590045929, -1.3428575992584229, -2.646636724472046, -1.378038763999939, -1.5872211456298828, -0.9589189887046814, -0.8143696784973145, 0.38390132784843445, -0.8238955140113831, 1.7091470956802368, -0.8524795174598694, -1.0142797231674194, -0.44063395261764526, -0.38869708776474, -0.8513612151145935, -0.6661911606788635, -0.7474545240402222, -1.113882303237915, 0.2191244661808014, -0.05329042673110962, -0.31202733516693115, -0.7818042039871216, -1.2730140686035156, -0.9762862324714661, -0.6460895538330078, -0.9700111150741577, -0.6080973148345947, -1.5421806573867798, -0.8005247712135315, -1.0704976320266724, -0.3505350351333618, 10.77982234954834, -0.4056065082550049, 2.332180976867676, 0.8519328832626343, -1.3173824548721313, -0.6615946292877197, -0.8192706108093262, -2.2163519859313965, -1.3874064683914185, 0.23657876253128052, 0.20182503759860992, -1.648252248764038, -1.3577327728271484, -1.1491069793701172, -1.0587122440338135, -0.9210017323493958, 0.09329727292060852, -0.10950182378292084, -1.2180290222167969, -2.954618453979492, -0.5974734425544739, -1.8027368783950806, -0.6955682039260864, -0.9109864234924316, -0.79716956615448, 0.6159631609916687, -0.1585788130760193, -0.5499623417854309, 0.1952921748161316, -4.153988838195801, -1.1303470134735107, -0.0651962012052536, -0.7791256308555603, 0.015276663936674595, -0.10145309567451477, -0.5245361924171448, -0.7878845930099487, 0.5420677065849304, 0.08807596564292908, -0.9652855396270752, -0.7756388187408447, -0.2582073509693146, -0.17781835794448853, -0.4082542657852173, -0.10696716606616974, -1.258629560470581, 3.3630504608154297, 3.330069065093994, 1.3764828443527222, -1.6140903234481812, -0.22745390236377716, 0.5316597819328308, 0.6512035727500916, -2.667112112045288, 0.06558626890182495, 0.055324967950582504, -0.8987908959388733, -1.9087872505187988, -0.5168763399124146, -0.017934247851371765, 0.1199500784277916, -1.108228087425232, -0.21412090957164764, -1.0999445915222168, -1.7409183979034424, -2.016655683517456, -1.1809495687484741, -0.9947664141654968, -1.0683255195617676, -0.749823272228241, -1.3067584037780762, -2.7546021938323975, -1.3776978254318237, -1.7094800472259521, -1.1140555143356323, -0.760067343711853, 0.42332199215888977, -0.8901544809341431, 1.6417795419692993, -0.6780205368995667, -1.0704796314239502, -0.5616641044616699, -0.3436475396156311, -0.7575474381446838, -0.7307946085929871, -0.9181311130523682, -1.2583494186401367, 0.38407453894615173, -0.14973074197769165, 0.8444107174873352, -0.802437424659729, -1.2806735038757324, -0.7632415294647217, -0.6862729787826538, -0.9626096487045288, -0.7404227256774902, -1.4165318012237549, -0.863975465297699, -1.18902587890625, -0.4225977659225464, 10.772107124328613, -0.23835685849189758, 2.40183162689209, 0.6040114760398865, -1.5220704078674316, -0.7533706426620483, -0.7849242687225342, -2.1319403648376465, -2.95457124710083, 0.2098451554775238, 0.21101662516593933, -1.606735110282898, -1.2558144330978394, -1.3445488214492798, -1.172842264175415, -0.8773942589759827, -0.022912582382559776, -0.11842013895511627, -1.2591526508331299, -2.9178128242492676, -0.5895341038703918, -2.1575403213500977, -0.660133957862854, -0.6962929964065552, -0.8991097211837769, 0.6525007486343384, -0.3258896470069885, -0.5198801159858704, 0.17467382550239563, -4.190149307250977, -1.1786179542541504, -0.0998210459947586, -0.8977149724960327, 0.030365636572241783, 0.09993544965982437, -0.5981345772743225, -0.8582810163497925, 0.5524110198020935, 0.11531226336956024, -1.0019946098327637, -0.9969024658203125, -0.20132476091384888, -0.11159340292215347, -0.5777144432067871, -0.15819329023361206, -0.4240085184574127, 3.3257875442504883, 3.2646822929382324, 1.432519555091858, -1.6101032495498657, -0.28971201181411743, 0.5283111929893494, 0.6881642937660217, -2.7632620334625244, 0.21138545870780945, 0.12903903424739838, -0.9136327505111694, -1.7372262477874756, -0.4604852497577667, -0.064637191593647, -0.006348660681396723, -1.0896896123886108, -0.13110902905464172, -0.9624751210212708, -1.7700157165527344, -2.0115745067596436, -1.1155856847763062, -0.788764238357544, -1.0497938394546509, -0.6650617718696594, -1.3809199333190918, -2.709787368774414, -1.4830747842788696, -1.7210495471954346, -0.9916821122169495, -0.6696491241455078, 0.2705630660057068, -0.8018741011619568, 1.6704416275024414, -0.7711095213890076, -0.9818471074104309, -0.34823861718177795, -0.1930639147758484, -0.8789785504341125, -0.8605405688285828, -0.8687694072723389, -1.0590296983718872, 0.24311695992946625, -0.17582863569259644, -0.2927711009979248, -0.9937281012535095, -1.429437279701233, -0.732380747795105, -0.7981847524642944, -0.9775375723838806, -0.7422921657562256, -1.5196466445922852, -0.8099066615104675, -1.2283482551574707, -0.2597169876098633, 10.907303810119629, -0.3482074439525604, 2.3625059127807617, 0.8717207908630371, -1.3964693546295166, -0.6666903495788574, -0.908074140548706, -2.1554651260375977, -1.3678256273269653, 0.1117272675037384, 0.09076996147632599, -1.5935816764831543, -1.3875312805175781, -1.3178406953811646, -1.0343167781829834, -0.891835629940033, 0.056560713797807693, -0.027595989406108856, -1.1675275564193726, -2.860581398010254, -0.49365389347076416, -1.71084725856781, -0.7552939057350159, -0.8165731430053711, -0.8600330352783203, 0.5460430383682251, -0.20101794600486755, -0.3369798958301544, 0.11865200847387314, -4.100966930389404, -1.0798583030700684, -0.01701251044869423, -0.9220162630081177, 0.09343264997005463, -0.030823949724435806, -0.49320000410079956, -0.7121666669845581, 0.632112979888916, -0.05428549274802208, -0.8398749828338623, -0.7990745306015015, -0.1185401976108551, 2.6731719970703125, -0.5765849351882935, -0.18326599895954132, -0.35980263352394104, 3.3923072814941406, 3.337785482406616, 1.521710991859436, -1.7350128889083862, -0.13072694838047028, 0.529849112033844, 0.7103376984596252, -2.7135844230651855, 0.2357502579689026, 0.06007874011993408, -0.7547092437744141, -1.775507926940918, -0.5906293392181396, -0.06129206717014313, -0.14705394208431244, -1.1301027536392212, -0.15509547293186188, -0.2765403687953949, -1.7038192749023438, -1.9208108186721802, -1.0965497493743896, -0.9743235111236572, -1.116319179534912, -0.8019616007804871, -1.4192209243774414, -2.8154807090759277, -1.3002300262451172, -1.5239949226379395, -1.1099088191986084, -0.7488856315612793, 0.23943021893501282, -0.8672509789466858, 1.6506108045578003, -0.7268218398094177, -1.1732014417648315, -0.44607657194137573, -0.1607809215784073, -0.7964323163032532, -0.6717060208320618, -0.7984524965286255, -1.0591058731079102, 0.35388270020484924, -0.13013166189193726, -0.4093472361564636, -0.8671713471412659, -1.3253464698791504, -0.9607282280921936, -0.6807286739349365, -0.9727411270141602, -0.46037420630455017, -1.5484155416488647, -0.799708902835846, -1.0443429946899414, -0.36867570877075195, 10.794164657592773, -0.2161657214164734, 2.3848462104797363, 0.927868127822876, -1.3043650388717651, -0.7762401103973389, -0.9174246191978455, -2.7800586223602295, -1.3057551383972168, 0.09613153338432312, 0.196137472987175, -1.4711434841156006, -1.2639726400375366, -1.1665273904800415, -1.0663243532180786, -0.8164348006248474, 0.04119865968823433, -0.04601795971393585, -1.2183531522750854, -3.0672388076782227, -0.39163029193878174, -1.6475480794906616, -0.6290925145149231, -0.8715149760246277, -0.9162837266921997, 0.6716094613075256, -0.13705773651599884, -0.43566396832466125, 0.26804637908935547, -4.089991092681885, -1.050508737564087, 0.005654691252857447, -0.765339195728302, -0.09186980128288269, 0.061650313436985016, -0.4814169406890869, -0.7700247168540955, 0.22261957824230194, 0.27385228872299194, -0.38581645488739014, -0.2188703864812851, 0.02134861797094345, 0.09258832782506943, -0.08652443438768387, -0.04787389934062958, -2.271608829498291, 1.4947373867034912, 1.4573472738265991, 0.5160476565361023, -0.8225224018096924, -0.07194259762763977, 0.07544585317373276, 0.22346793115139008, -0.9598096013069153, 0.7252102494239807, 0.6960195302963257, -1.4652684926986694, -0.7625773549079895, -0.8763155341148376, 0.1309540867805481, 0.6470280885696411, 0.15402714908123016, -0.10100390762090683, -0.42381924390792847, -0.6934351325035095, -0.762237012386322, -0.4023946523666382, -0.3195303976535797, -0.38602960109710693, -0.0778217613697052, -0.48665106296539307, -0.9878547787666321, -0.5887565016746521, -0.7072536945343018, -0.35406625270843506, -0.2763228118419647, 0.21918776631355286, -0.31705358624458313, 0.9699246287345886, -0.17995712161064148, -0.40799084305763245, -0.03289899230003357, 0.1274687796831131, -0.36904576420783997, -0.17907430231571198, -0.22493049502372742, -0.330144464969635, 0.2705046832561493, 0.14948803186416626, -0.06799889355897903, -0.3077440857887268, -0.43842312693595886, -0.22256720066070557, -0.06345987319946289, -0.18686693906784058, -0.06358469277620316, -0.5627282857894897, -0.32939475774765015, -0.45493051409721375, 0.01959889568388462, 5.156739234924316, 0.2834535539150238, 1.2460044622421265, 0.3060623109340668, -0.47827714681625366, -0.1157769039273262, -0.3361499011516571, -0.8086167573928833, -1.3150746822357178, 0.6540687680244446, 0.5690444707870483, -3.209197998046875, -0.395097553730011, -0.4609433114528656, -0.40177494287490845, -0.2810609042644501, 0.25238457322120667, 0.2293238490819931, -2.195103883743286, -1.167539358139038, -0.14838236570358276, -0.999081552028656, -0.212384432554245, -0.13247260451316833, -0.15001089870929718, 0.026074187830090523, -0.15011508762836456, -0.10747889429330826, 0.19392193853855133, -1.6530259847640991, -0.2750660479068756, -0.06225883215665817, -0.2546047568321228, -0.03841559961438179, -0.03967097029089928, 0.015415400266647339, -0.3048535883426666, -0.5692223310470581, -0.07346553355455399, 0.928709089756012, 0.7833044528961182, 0.153292715549469, -2.6441550254821777, 0.44275110960006714, 0.2619275450706482, 0.3028370440006256, -3.4265103340148926, -3.321615219116211, -1.5663403272628784, 1.835250973701477, 0.30459505319595337, -0.6639588475227356, -0.7172166705131531, 2.7376997470855713, -0.2478047013282776, -0.1797090619802475, 0.8652576208114624, 1.81241774559021, 0.6039350628852844, 0.10478495061397552, 0.06856509298086166, 0.9166993498802185, 0.3458516597747803, 0.2566390633583069, 1.6602988243103027, 2.040602684020996, 1.2547693252563477, 0.9900321364402771, 1.0598194599151611, 0.844077467918396, 1.2845771312713623, 2.759064197540283, 1.3612451553344727, 1.6575517654418945, 0.9038020968437195, 0.6493788957595825, -0.4374237358570099, 0.8661250472068787, -1.494763970375061, 0.723382294178009, 1.0331300497055054, 0.5366083383560181, 0.2624150216579437, 0.888665497303009, 0.7704996466636658, 0.9038853645324707, 1.2708921432495117, -0.38372424244880676, 0.03329093009233475, 0.3952557444572449, 0.8966758847236633, 1.389200210571289, 0.9724171757698059, 0.6618061065673828, 0.7775104641914368, 0.41268953680992126, 1.4101024866104126, 1.0018811225891113, 1.25154709815979, 0.41304636001586914, -10.789060592651367, 0.2728728652000427, -2.4127449989318848, -0.8776015043258667, 1.5104824304580688, 0.7814182043075562, 0.8841051459312439, 2.8040359020233154, 1.2939538955688477, -0.2128550112247467, -0.19145046174526215, 1.5584542751312256, 1.2222511768341064, 1.2886991500854492, 1.0066851377487183, 0.8890364766120911, -0.05277736857533455, 0.2140362411737442, 1.2769666910171509, 2.974672555923462, 0.5296852588653564, 1.7198127508163452, 0.5845268368721008, 0.7820757627487183, 0.9854792356491089, -0.6722201704978943, 0.23911726474761963, 0.3506932556629181, -0.3056710362434387, 4.160074234008789, 0.9940557479858398, 0.201008602976799, 0.90798020362854, 0.0233707744628191, -0.043903857469558716, 0.5909914374351501, 0.6908525228500366, -0.5875297784805298, -0.02776630036532879, 0.9093465805053711, 0.9859960675239563, 0.23784762620925903, 0.23874036967754364, 0.5052947402000427, 0.28018468618392944, 1.2873717546463013, -3.4774231910705566, -3.30070424079895, -1.5356227159500122, 1.7687159776687622, 0.18869982659816742, -0.5209565758705139, -0.6100957989692688, 2.753513813018799, -0.12017790228128433, -0.06640010327100754, 0.812556803226471, 1.909602165222168, 0.6444414258003235, 0.1857922524213791, -0.005518943537026644, 1.121510624885559, 0.25868430733680725, 1.003171443939209, 1.6081900596618652, 1.8776129484176636, 1.2382960319519043, 0.7876763343811035, 1.1334214210510254, 0.6184034943580627, 1.2892389297485352, 2.78045392036438, 1.4749940633773804, 1.7585704326629639, 0.9878721833229065, 0.7815052270889282, -0.3511771857738495, 0.8986721038818359, -1.596664547920227, 0.8401011824607849, 0.9845490455627441, 0.5737125873565674, 0.2673555612564087, 0.9618011116981506, 0.8235570788383484, 0.7815597057342529, 1.2024366855621338, -0.3832310736179352, 0.008286681026220322, -0.7784460186958313, 0.9768238067626953, 1.5027365684509277, 0.836801290512085, 0.6561470031738281, 0.8466697931289673, 0.6869416236877441, 1.4963550567626953, 0.791848361492157, 1.173964023590088, 0.3179985284805298, -10.969965934753418, 0.2000882625579834, -2.486266613006592, -0.7102620601654053, 1.2838163375854492, 0.7918285131454468, 0.9491873979568481, 2.214906930923462, 2.995861768722534, -0.2495458722114563, -0.21504539251327515, 1.5675654411315918, 1.2224774360656738, 1.2699116468429565, 1.089068055152893, 0.6877438426017761, 0.06078376993536949, -0.02695423737168312, 1.0760304927825928, 3.0633158683776855, 0.5158119797706604, 1.8551548719406128, 0.7786241769790649, 0.6904430389404297, 0.8602482080459595, -0.6634842157363892, 0.27224621176719666, 0.31184902787208557, -0.25209683179855347, 4.115756511688232, 1.1150634288787842, 0.07361479103565216, 0.7907412648200989, 0.07072055339813232, 0.016683489084243774, 0.501982569694519, 0.7487491369247437, -0.15351438522338867, -0.015474776737391949, 0.3224705457687378, 0.368401437997818, 0.054661836475133896, -0.33910059928894043, 0.20444133877754211, 0.14257746934890747, 1.1763544082641602, -0.7914208173751831, -0.761695384979248, -0.489960640668869, 0.2430058717727661, 0.04654635488986969, -0.30573949217796326, -0.29601770639419556, 0.5736737251281738, 0.040292833000421524, 0.0001534953189548105, 0.8606926202774048, 0.4631679654121399, 0.5023238658905029, -0.05345385521650314, -0.05911736190319061, -0.02512521483004093, 0.15216971933841705, 0.2015838325023651, 0.4772830307483673, 0.5508400797843933, 0.27763503789901733, 0.16519032418727875, 0.30578505992889404, 0.12799791991710663, 0.41659292578697205, 0.6312043070793152, 0.3065654933452606, 0.46833327412605286, 0.1810104250907898, 0.3182970881462097, 0.05631256848573685, 0.26955774426460266, -0.25929880142211914, 0.3093605935573578, 0.40027838945388794, 0.21371953189373016, 0.2256433367729187, 0.16652962565422058, 0.32942795753479004, 0.2278715968132019, 0.3164258897304535, 0.07985683530569077, 0.19594430923461914, -0.1714591681957245, 0.347763329744339, 0.4583021402359009, 0.19667427241802216, 0.1678125262260437, 0.2956392168998718, 0.31660836935043335, 0.2720945179462433, 0.36709728837013245, 0.42693787813186646, 0.15950585901737213, -2.0562732219696045, 0.19613035023212433, -0.3040444552898407, -0.10329990833997726, 0.3453850746154785, 0.35603317618370056, 0.1640731394290924, 0.43434178829193115, 0.3735398054122925, 0.03558903560042381, 0.11653785407543182, 1.4684211015701294, 0.2657748758792877, 0.3720548152923584, 0.2963389754295349, 0.13488070666790009, 0.19518886506557465, 0.1809907853603363, 1.1420998573303223, 0.7772908806800842, 0.07644534111022949, 0.45514440536499023, 0.2749902904033661, 0.19483910501003265, 0.34127283096313477, -0.2552580237388611, 0.07143449038267136, 0.2498902976512909, -0.02597561478614807, 0.8495694994926453, 0.2772759795188904, 0.0762675553560257, 0.3240980803966522, -0.04781553894281387, -0.02920999936759472, 0.11201774328947067, 0.20301388204097748, -0.22155533730983734, -0.25239482522010803, 0.3942726254463196, 0.35944950580596924, -0.15318694710731506, -0.14408089220523834, 0.08346880227327347, -0.02467876859009266, 2.467668056488037, -1.3736053705215454, -1.3765095472335815, -0.4578242897987366, 0.9056024551391602, 0.14426404237747192, -0.1581110656261444, -0.2552333474159241, 1.146436333656311, -0.7663829922676086, -0.6800397634506226, 1.678048014640808, 0.7941333651542664, 0.9000147581100464, -0.7960336208343506, -0.5820049047470093, -0.12017951905727386, 0.21020056307315826, 0.33966541290283203, 0.52530837059021, 0.850095272064209, 0.48447316884994507, 0.27255627512931824, 0.23525470495224, 0.18350504338741302, 0.4500918686389923, 0.9798058867454529, 0.5604541897773743, 0.6170668005943298, 0.3408123850822449, 0.17761513590812683, -0.2505834102630615, 0.18524663150310516, -0.9803856015205383, 0.20893211662769318, 0.3571166694164276, 0.08735021948814392, 0.058525990694761276, 0.28425905108451843, 0.18046684563159943, 0.13006743788719177, 0.22451025247573853, -0.296002596616745, 0.026890018954873085, 0.03122042305767536, 0.247061088681221, 0.4401393234729767, 0.21346578001976013, 0.11411820352077484, 0.3441142141819, 0.1260416954755783, 0.46154752373695374, 0.3290356993675232, 0.4680897891521454, -0.03187314420938492, -5.049267768859863, -0.30469444394111633, -1.268471360206604, -0.4665786027908325, 0.6065343022346497, 0.08062374591827393, 0.3166109621524811, 0.9076255559921265, 1.147546648979187, -0.6914778351783752, -0.6807433366775513, 3.230966567993164, 0.41428691148757935, 0.2955557703971863, 0.3404185175895691, 0.299495667219162, -0.23678402602672577, -0.11761575937271118, 2.1901726722717285, 1.0836626291275024, -0.07470156252384186, 0.9313201308250427, 0.12807345390319824, 0.1899438351392746, 0.37263065576553345, -0.19281698763370514, 0.2678961157798767, -0.010805061087012291, -0.12060068547725677, 1.7620373964309692, 0.3841964304447174, 0.0026256220880895853, 0.12676605582237244, -0.11460620164871216, 0.05920666456222534, -0.012849540449678898, 0.11611093580722809, 0.6771117448806763, -0.09010560810565948, -0.9665323495864868, -0.7928628921508789, -0.2548508644104004, 2.631056785583496, -0.373775839805603, -0.1700432449579239, -0.26178157329559326, 3.4720377922058105, 3.269885301589966, 1.568495750427246, -1.6251331567764282, -0.2848411202430725, 0.5914715528488159, 0.5737268328666687, -2.653423547744751, 0.15727578103542328, 0.11436566710472107, -0.36837369203567505, -1.7710082530975342, -0.5890544056892395, -0.004598815925419331, -0.1717689037322998, -0.9595019817352295, -0.1270713210105896, -0.2681505084037781, -1.6845159530639648, -1.821069359779358, -1.2113145589828491, -1.0177128314971924, -0.9937042593955994, -0.6653838753700256, -1.3438081741333008, -2.7087831497192383, -1.280611276626587, -1.7361533641815186, -1.045855164527893, -0.7381701469421387, 0.37074896693229675, -0.9689252972602844, 1.615546464920044, -0.7941573262214661, -1.187119483947754, -0.389799028635025, -0.1440800577402115, -0.9248347282409668, -0.8007283806800842, -0.8823519945144653, -1.109104871749878, 0.31093350052833557, -0.23165729641914368, -0.4798595607280731, -0.8755504488945007, -1.4294612407684326, -0.8385142683982849, -0.6832071542739868, -0.8230113387107849, -0.5643129348754883, -1.4732786417007446, -1.0101966857910156, -1.169541835784912, -0.41638052463531494, 10.843693733215332, -0.24382582306861877, 0.15963220596313477, 0.8735771179199219, -1.2987276315689087, -0.6054645776748657, -0.9831261038780212, -2.6652421951293945, -1.4855848550796509, 0.24082186818122864, -0.0018209561239928007, -1.6427631378173828, -1.3087844848632812, -1.102328896522522, -1.120883822441101, -0.7444868683815002, -0.07999657094478607, -0.14935782551765442, -1.2114752531051636, -4.82593297958374, -0.5667009353637695, -1.6259385347366333, -0.6089750528335571, -0.6789158582687378, -0.9202635288238525, 0.5959989428520203, -0.2938535809516907, -0.3423807919025421, 0.22740700840950012, -4.126529693603516, -0.9828047752380371, -0.10889439284801483, -0.8516637682914734, 0.03482954949140549, -0.12931567430496216, -0.5842295289039612, -0.721480667591095, 0.7322691679000854, 0.06651779264211655, -0.8901524543762207, -0.7736340761184692, -0.28127360343933105, -0.3023776113986969, -0.367135226726532, -0.18577773869037628, -0.2133750468492508, 3.312370777130127, 3.439251184463501, 1.4256643056869507, -1.6716214418411255, -0.08436109125614166, 0.4995855987071991, 0.678874671459198, -2.5522241592407227, 0.16384737193584442, 0.06027798354625702, -0.9152365326881409, -1.8614736795425415, -0.47841542959213257, -0.005530437454581261, -0.1541101038455963, -1.1144267320632935, -0.27409517765045166, -0.0974019393324852, -1.7681572437286377, -1.8858016729354858, -1.1614291667938232, -0.9538732171058655, -0.9946754574775696, -0.7595598101615906, -1.434044361114502, -2.6819193363189697, -1.4070396423339844, -1.7144439220428467, -1.00375235080719, -0.6213544607162476, 0.21728792786598206, -0.8275063633918762, 1.642755150794983, -0.8314856886863708, -1.0835851430892944, -0.42108863592147827, -0.28220322728157043, -0.9751375317573547, -0.7222127318382263, -0.7549343109130859, -1.224083662033081, 0.379701167345047, -0.18609243631362915, -0.22526735067367554, -0.7991133332252502, -1.374838948249817, -0.9978248476982117, -0.7451139688491821, -0.8566227555274963, -0.6976406574249268, -1.5913162231445312, -0.9853466153144836, -1.0982879400253296, -0.2764087915420532, 10.765791893005371, -0.27141159772872925, 2.37382173538208, 0.9282246828079224, -1.313207745552063, -0.6641057729721069, -0.8031356334686279, -2.574204921722412, -1.3942062854766846, 0.18911921977996826, 0.06048859283328056, -1.4564509391784668, -1.3828494548797607, -1.1867462396621704, -1.243852972984314, -0.7489772439002991, -0.028437986969947815, -0.1516718715429306, -1.1385879516601562, -2.876561164855957, -0.5500564575195312, -1.7365912199020386, -0.7247620224952698, -0.8301856517791748, -0.8328460454940796, 0.7055837512016296, -0.1701187789440155, -0.38160234689712524, 0.10288836807012558, -4.190521717071533, -1.1410326957702637, -0.052337292581796646, -0.9346357583999634, 0.04343460127711296, -0.00950728077441454, -0.42270371317863464, -0.7629152536392212, 0.42700091004371643, 0.6053087115287781, 0.3591371178627014, -0.46631619334220886, 0.5706192851066589, 0.27974873781204224, 0.3642050623893738, 0.5283149480819702, 0.3677680492401123, 1.3959580659866333, -0.5715200304985046, -0.6076533198356628, -1.867607593536377, -0.4095662832260132, 0.6237652897834778, 0.08427703380584717]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (1.37, 1.54)}}, 'et1_eta1': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 6, 1], 'bias': [0.21030354499816895, -0.18122774362564087, -0.14719505608081818, -0.18119624257087708, -0.14072690904140472, 0.16648980975151062, -0.14101508259773254], 'weights': [1.4386593103408813, 0.45915886759757996, -1.5229798555374146, -1.436055302619934, -1.004254698753357, -0.9490943551063538, -0.5090715289115906, 0.49285227060317993, 1.9872885942459106, 4.876913070678711, 0.6880943179130554, -4.636479377746582, 0.0033839084208011627, -0.9218282699584961, -5.503398895263672, -19.312273025512695, -7.673230171203613, -3.245694160461426, -12.294034957885742, -10.059121131896973, -8.340250015258789, -6.9441423416137695, -5.462812900543213, -6.334737300872803, -5.314388751983643, -5.322555065155029, -4.323203086853027, -4.6451287269592285, -3.095691680908203, -3.3984415531158447, -3.402747869491577, -2.7085652351379395, -2.51513671875, -2.951267957687378, -2.7571682929992676, -2.558816909790039, -2.4867498874664307, -2.3901329040527344, -2.375945568084717, -2.404093027114868, -2.5399789810180664, -2.4855754375457764, -2.0552096366882324, 0.23360034823417664, -0.6254650950431824, -1.5911295413970947, -2.2850494384765625, -1.5522570610046387, -1.359688401222229, -1.9866268634796143, -2.0798442363739014, -1.1338692903518677, -1.0612783432006836, -0.9105952382087708, -1.1205147504806519, -0.9206946492195129, -0.4777166247367859, -1.28596830368042, -1.001623511314392, -1.1145389080047607, -1.0381758213043213, -0.7109525799751282, -0.5408516526222229, -0.9200298190116882, -0.4221055507659912, -0.6132196187973022, -0.45678186416625977, 0.5002219080924988, 1.1828240156173706, 0.41585877537727356, 0.20065852999687195, 1.139463186264038, 0.3380820155143738, 0.3371035158634186, -0.3092867434024811, -2.6889688968658447, -1.9579792022705078, -1.7426689863204956, -1.6036344766616821, -1.2619227170944214, -14.300032615661621, -8.209640502929688, -4.43801736831665, -3.0450103282928467, -2.8707964420318604, -2.649761199951172, -2.2836263179779053, -2.322253942489624, -2.373394727706909, -1.5404067039489746, -0.3449452817440033, -0.13616986572742462, -3.456265926361084, -2.842782974243164, -1.1350173950195312, -0.3811895251274109, -3.3155393600463867, -2.7761964797973633, -1.235686182975769, -0.4446364641189575, -1.4873168468475342, -0.3480736315250397, 1.4507967233657837, 1.0528265237808228, 1.0006486177444458, 1.0663710832595825, 0.4961460828781128, -0.3954235315322876, -2.0221221446990967, -4.891871929168701, -0.8532798886299133, 4.709255218505859, -0.013590337708592415, 0.9823217391967773, 5.466055870056152, 19.248552322387695, 7.704766273498535, 5.583001136779785, 12.463115692138672, 9.907303810119629, 8.166528701782227, 6.845732688903809, 5.3061347007751465, 6.326858997344971, 5.333719730377197, 5.330562114715576, 4.300183296203613, 4.602540016174316, 2.9993722438812256, 3.5282344818115234, 3.533322811126709, 2.567115306854248, 2.5072102546691895, 2.760854959487915, 2.6527812480926514, 2.550811529159546, 2.410085916519165, 2.2692928314208984, 2.216564416885376, 2.2961227893829346, 2.407707452774048, 2.409529685974121, 2.016953468322754, -0.1272735744714737, 0.8253637552261353, 1.518592119216919, 1.4460020065307617, 1.5685250759124756, 1.2729991674423218, 2.198314905166626, 1.1334038972854614, 1.122263789176941, 0.6390866637229919, 0.8636446595191956, 1.1045585870742798, 0.5485116839408875, 0.4423002600669861, 1.242871642112732, 0.888534426689148, 0.4922315776348114, 0.8671665787696838, 0.7313299179077148, 0.5199978947639465, 0.9993928670883179, 0.2491784691810608, 0.17265687882900238, 0.5316669940948486, -0.5010084509849548, -1.1836270093917847, -0.8156769871711731, -0.3058880567550659, -1.3355276584625244, -0.25306302309036255, -0.23224976658821106, 0.2825390696525574, 2.7587192058563232, 1.9938229322433472, 1.7585293054580688, 1.3305540084838867, 1.0360625982284546, 14.278777122497559, 8.15658187866211, 4.375566005706787, 2.884700059890747, 2.5964536666870117, 2.567826509475708, 2.2518980503082275, 2.4391605854034424, 2.245429277420044, 1.4949644804000854, 0.582448422908783, -0.04790542274713516, 3.585293769836426, 2.8106274604797363, 1.177231788635254, 0.34081751108169556, 3.1510887145996094, 2.6571271419525146, 1.2718452215194702, 0.4502386450767517, -1.4569214582443237, -0.5183768272399902, 1.4247690439224243, 1.1952847242355347, 1.0704149007797241, 0.696662187576294, 0.4357132017612457, -0.578811526298523, -1.8127881288528442, -4.848544120788574, -1.1404229402542114, 4.530750274658203, -0.055479906499385834, 0.9808154106140137, 5.488518238067627, 19.33883285522461, 7.602758407592773, 5.736112594604492, 12.462970733642578, 9.844576835632324, 8.31246566772461, 6.9471540451049805, 5.471607685089111, 6.386049747467041, 5.386390209197998, 5.40241003036499, 2.610337018966675, 4.740708351135254, 3.048919439315796, 3.6115033626556396, 3.4233739376068115, 2.649955987930298, 2.675405979156494, 2.880108594894409, 2.622850179672241, 2.533543586730957, 2.4685275554656982, 2.43415904045105, 2.2711384296417236, 2.308668375015259, 2.3606715202331543, 2.2971839904785156, 2.1062240600585938, -0.2133009135723114, 0.714409589767456, 1.633223056793213, 1.4234013557434082, 1.6107935905456543, 1.2855113744735718, 2.2024240493774414, 1.1158424615859985, 0.4681008458137512, 0.7417191863059998, -0.018716486170887947, 0.6319336295127869, 0.4485854506492615, 0.40393227338790894, 1.1905807256698608, 0.9238787889480591, 0.5063086748123169, 0.3457896411418915, 0.659623384475708, 0.3616856336593628, 0.940438449382782, -0.017967281863093376, 0.23964345455169678, 0.4583423137664795, -0.3950194716453552, -1.2081607580184937, -0.837325394153595, -0.18445560336112976, -1.4030430316925049, -0.3841593861579895, -0.27677664160728455, 0.384226530790329, 2.7718987464904785, 2.0668253898620605, 1.8644696474075317, 1.3831040859222412, 1.118679165840149, 14.3859281539917, 8.18867301940918, 4.36430025100708, 3.0915863513946533, 2.7764554023742676, 2.5189714431762695, 2.1111817359924316, 2.325563907623291, 2.3995134830474854, 1.384935975074768, 0.4858267903327942, 0.13715675473213196, 3.7168657779693604, 2.8109235763549805, 1.3313827514648438, 0.20373184978961945, 3.2154736518859863, 2.7099101543426514, 1.243646502494812, 0.494144082069397, -1.3658320903778076, -0.2865876853466034, 1.411838173866272, 1.240986943244934, 1.1471396684646606, 0.6116806864738464, 0.5536534190177917, -0.39608824253082275, -1.845452904701233, -4.9010419845581055, -1.1081583499908447, 4.535780906677246, 0.04654265567660332, 0.9656124114990234, 1.0901126861572266, 19.22427749633789, 7.695137023925781, 3.196397304534912, 12.50178337097168, 10.081515312194824, 8.283769607543945, 6.9158220291137695, 5.522806644439697, 6.357304096221924, 5.484114170074463, 5.319051265716553, 2.5015573501586914, 2.6620595455169678, 3.189669370651245, 3.437335729598999, 3.353301525115967, 2.6260738372802734, 2.4773058891296387, 2.9661858081817627, 2.6470768451690674, 2.6678895950317383, 2.4720301628112793, 2.3206045627593994, 2.332486152648926, 2.2819125652313232, 2.450340747833252, 2.393202781677246, 2.08209228515625, -0.1893307864665985, 0.7928186655044556, 1.5357530117034912, 1.5885379314422607, 1.5258595943450928, 1.3274190425872803, 2.150324821472168, 1.0121275186538696, 0.4153326153755188, 0.6610209345817566, -0.06882555782794952, 0.5366686582565308, 0.4680175185203552, 0.5261852741241455, 1.1460870504379272, 1.0939064025878906, 0.5135902166366577, 0.38284966349601746, 0.5038571953773499, 0.34749162197113037, 1.035119891166687, 0.16806532442569733, 0.24726973474025726, 0.43164873123168945, -0.4612061381340027, -1.0572110414505005, -0.8009306788444519, -0.27980440855026245, -1.419301986694336, -0.2534865736961365, -0.14053583145141602, 0.38953104615211487, 2.7252590656280518, 1.8498742580413818, 1.7791889905929565, 1.5072519779205322, 1.0790969133377075, 14.251280784606934, 8.211511611938477, 4.321418285369873, 3.1319620609283447, 2.746779441833496, 2.6478898525238037, 2.173396587371826, 2.4205477237701416, 2.4815316200256348, 1.3614569902420044, 0.585685670375824, 0.0005135852843523026, 3.4771370887756348, 2.640866994857788, 1.2618694305419922, 0.2105192393064499, 3.308764934539795, 2.6412551403045654, 1.1818405389785767, 0.48150718212127686, -1.5107616186141968, -0.3225195109844208, 1.2603260278701782, 1.2160567045211792, 1.0267380475997925, 0.65908282995224, 0.5652944445610046, -0.49803096055984497, -1.9257208108901978, -4.867487907409668, -1.0967252254486084, 4.723787307739258, 0.02865936979651451, 1.019310712814331, 1.254241704940796, 4.055185317993164, 7.567360877990723, 3.211092472076416, 12.443714141845703, 9.924410820007324, 8.145870208740234, 6.735800743103027, 5.43444299697876, 6.302181720733643, 5.499661922454834, 5.4852070808410645, 2.479905366897583, 2.6220808029174805, 3.051096200942993, 3.459430456161499, 3.5227506160736084, 2.5863850116729736, 2.4729700088500977, 2.740309000015259, 2.59195876121521, 2.6279690265655518, 2.5373692512512207, 2.2866287231445312, 2.2001237869262695, 2.276484966278076, 2.440417528152466, 2.516087532043457, 2.0203919410705566, -0.20763608813285828, 0.7255880832672119, 1.629145860671997, 1.4388022422790527, 1.5746650695800781, 1.4260063171386719, 2.186660051345825, 0.9133277535438538, 0.6198347210884094, 0.5265095233917236, -0.012174995616078377, 0.4535791277885437, 0.5928670763969421, 0.5051784515380859, 1.3202658891677856, 0.934963583946228, 0.597823977470398, 0.3353094756603241, 0.5238648056983948, 0.40153753757476807, 0.9737392663955688, -0.0473051592707634, 0.23669660091400146, 0.3398519456386566, -0.36742353439331055, -1.111261248588562, -0.7812760472297668, -0.20095059275627136, -1.4737744331359863, -0.354761004447937, -0.1324179768562317, 0.3072521686553955, 2.800567865371704, 1.960886001586914, 1.7909883260726929, 1.387552261352539, 1.0448821783065796, 14.30859088897705, 8.236827850341797, 4.247890949249268, 3.0452592372894287, 2.5849311351776123, 2.470428705215454, 2.2210445404052734, 2.481506586074829, 2.468748092651367, 1.4939759969711304, 0.4870641827583313, -0.07574906200170517, 3.678239107131958, 2.8401055335998535, 1.1401684284210205, 0.38198792934417725, 3.2536163330078125, 2.6715707778930664, 1.2032781839370728, 0.2400844693183899, 1.3826874494552612, 0.3309628665447235, -1.2250014543533325, -1.1954489946365356, -1.0189226865768433, -0.582927405834198, -0.38215675950050354, 0.42838865518569946, 1.8308719396591187, 4.7571234703063965, 1.0189274549484253, -4.620083808898926, 0.020166272297501564, -0.9369232654571533, -1.1644896268844604, -3.984037399291992, -7.723116874694824, -3.3409547805786133, -12.376529693603516, -10.060873985290527, -8.131372451782227, -6.80804967880249, -5.285688877105713, -6.289992809295654, -5.292094707489014, -5.304602146148682, -2.461285352706909, -4.682882308959961, -3.0819664001464844, -3.54605770111084, -3.5396275520324707, -2.5012898445129395, -2.54142689704895, -2.9659008979797363, -2.7302956581115723, -2.6040196418762207, -2.442765951156616, -2.4858672618865967, -2.2360897064208984, -2.2670035362243652, -2.505980968475342, -2.3858113288879395, -2.1512467861175537, 0.20062515139579773, -0.7569640874862671, -1.6799755096435547, -1.6187050342559814, -1.5177586078643799, -1.3626587390899658, -2.055011510848999, -0.9831571578979492, -0.5517156720161438, -0.7114755511283875, 0.08137281239032745, -0.6173107028007507, -0.5799934267997742, -0.4994145631790161, -1.2213376760482788, -0.999640941619873, -0.3788909316062927, -0.31328150629997253, -0.5956922173500061, -0.3415490388870239, -1.0298950672149658, -0.006074368022382259, -0.32477182149887085, -0.36233147978782654, 0.3989202380180359, 1.0691436529159546, 0.7131035923957825, 0.23220178484916687, 1.3746638298034668, 0.1728249192237854, 0.2768540680408478, -0.42310068011283875, -2.7698402404785156, -1.8575527667999268, -1.8426998853683472, -1.2901911735534668, -1.1741160154342651, -14.219252586364746, -7.236485004425049, -4.247403621673584, -2.89684796333313, -2.7419683933258057, -2.643399953842163, -2.3037991523742676, -2.388740062713623, -2.2987513542175293, -1.397368311882019, -0.4194043278694153, -0.0017059465171769261, -3.605109214782715, -2.7221839427948, -1.258066177368164, -0.17627477645874023, -3.2137367725372314, -2.567908525466919, -1.2101079225540161, -0.3757832646369934, 0.7011764645576477, -1.0349770784378052, -0.6078515648841858, -0.7064729928970337, -0.4256393313407898, 0.6446554660797119]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (20, 30), 'etaBin': (0.8, 1.37)}}, 'et1_eta0': {'discriminator': {'threshold': -0.32000081166625022, 'nodes': [100, 6, 1], 'bias': [0.09428483247756958, -0.04721463471651077, 0.03348788246512413, -0.09799544513225555, -0.3383110463619232, 0.136421799659729, -0.0016502226935699582], 'weights': [3.923448324203491, 1.1882224082946777, -0.6763618588447571, -0.6988966464996338, -0.18739859759807587, -0.13122932612895966, -0.0803513303399086, 0.36352407932281494, 1.6484767198562622, 2.7206170558929443, -2.009655237197876, -4.764303684234619, -7.428475379943848, -5.242104530334473, -5.1493120193481445, -3.9369795322418213, -4.319851875305176, -2.42492413520813, -3.8639581203460693, -3.06176495552063, -3.5927224159240723, -2.342604398727417, -2.2864866256713867, -2.682417392730713, -2.4459338188171387, -1.8506228923797607, -2.380054473876953, -2.536121368408203, -1.7753264904022217, -1.7710134983062744, -1.7237180471420288, -1.73544442653656, -1.6591451168060303, -1.634910225868225, -1.7335577011108398, -1.5049324035644531, -1.4207079410552979, -1.808071494102478, -1.769775629043579, -1.9586020708084106, -1.759112000465393, 0.6824190020561218, -1.6991995573043823, -1.5732603073120117, -1.0441198348999023, -0.26445966958999634, -1.1053507328033447, -0.8227761387825012, -0.8396470546722412, -0.029614917933940887, -1.1335971355438232, -0.42685258388519287, -0.7260417938232422, -0.9086365103721619, -0.5909733772277832, -0.5020917654037476, -0.5897409915924072, 0.5629515051841736, -0.571086049079895, -0.4344123899936676, 0.3413902521133423, -0.184260293841362, 0.02249733917415142, -0.7398144602775574, -1.648028016090393, -1.3329564332962036, 0.5283265113830566, -0.4305841326713562, 0.36262255907058716, -0.7422177195549011, 0.9301882386207581, 0.1162920743227005, 0.3746093511581421, 0.08978663384914398, -0.7556164264678955, -1.4996659755706787, -1.5741618871688843, -1.4125343561172485, -1.1244484186172485, -0.6970234513282776, -7.393949508666992, -3.830742597579956, -2.5318894386291504, -1.7298834323883057, -1.7483831644058228, -1.3825581073760986, -1.6762408018112183, -1.9955909252166748, -3.0325729846954346, -2.321094274520874, -0.9059852361679077, 0.01854351907968521, -2.9494946002960205, -1.7963650226593018, -0.5497912764549255, 0.044953852891922, -2.9953620433807373, -1.6981210708618164, -0.07101298868656158, -0.12509861588478088, -4.037827491760254, -1.3446953296661377, 0.7784045934677124, 0.6073556542396545, 0.24960488080978394, 0.10312885791063309, 0.027864275500178337, -0.4808664619922638, -1.7037843465805054, -2.634799003601074, 2.0211637020111084, 5.004406929016113, 7.504706382751465, 5.29726505279541, 5.054901123046875, 4.020586967468262, 4.481381893157959, 2.438789129257202, 3.8085429668426514, 2.972856283187866, 3.5939173698425293, 2.3869593143463135, 2.360999345779419, 2.6569135189056396, 2.468747615814209, 1.950138807296753, 2.4906649589538574, 2.5407261848449707, 1.802910566329956, 1.877778172492981, 1.8937097787857056, 1.6418582201004028, 1.626845359802246, 1.6486958265304565, 1.8066765069961548, 1.5416336059570312, 1.399609088897705, 1.8354934453964233, 1.682347059249878, 1.8889862298965454, 1.6141008138656616, -0.5000907182693481, 1.6114388704299927, 1.336704969406128, 1.0233625173568726, 0.3405361771583557, 1.1204007863998413, 0.7052913308143616, 0.905900239944458, 0.2467210441827774, 1.1417542695999146, 0.487510621547699, 0.7292344570159912, 0.7330562472343445, 0.6316474080085754, 0.5346447229385376, 0.7719225287437439, -0.4184606969356537, 0.6150315999984741, 0.3875364661216736, -0.34836921095848083, 0.13995802402496338, 0.09368211776018143, 0.7073189616203308, 1.6107147932052612, 1.264011263847351, -0.5309082269668579, 0.37896299362182617, -0.4109354615211487, 0.6589947938919067, -1.0766267776489258, -0.36314404010772705, -0.28229787945747375, -0.2987841069698334, 0.7517623901367188, 1.3129756450653076, 1.6994911432266235, 1.4297255277633667, 1.0785218477249146, 0.6303584575653076, 7.369983673095703, 4.051222801208496, 2.5190908908843994, 1.715894103050232, 1.8000702857971191, 1.417280912399292, 1.6880205869674683, 1.9712133407592773, 2.953469753265381, 2.383610486984253, 0.8263368606567383, 0.1536141335964203, 2.960911273956299, 1.8261113166809082, 0.4312123656272888, -0.06406568735837936, 2.962948799133301, 1.8352017402648926, -0.006507714278995991, 0.30261319875717163, 4.094224452972412, 1.3538014888763428, -0.6430330276489258, -0.5037286281585693, -0.02021068148314953, -0.1343294233083725, -0.051147762686014175, 0.468893438577652, 1.6346927881240845, 2.55149507522583, -2.0465762615203857, -4.870841026306152, -7.596250057220459, -5.097512722015381, -5.134709358215332, -4.079732418060303, -4.504998683929443, -1.448211908340454, -3.7079124450683594, -3.1969354152679443, -3.535269260406494, -2.3765645027160645, -2.3216142654418945, -2.565958023071289, -2.5622763633728027, -1.9192848205566406, -2.419567108154297, -2.5183629989624023, -1.8477065563201904, -1.884598731994629, -1.7961883544921875, -1.645997405052185, -1.6679456233978271, -1.6720283031463623, -1.6914526224136353, -1.3376121520996094, -1.4698761701583862, -1.7278283834457397, -1.7396018505096436, -2.0397355556488037, -1.6054697036743164, 0.666731059551239, -1.6442240476608276, -1.170311689376831, -0.8893857002258301, -0.2035771906375885, -1.261660099029541, -0.860862672328949, -0.8593165874481201, -0.03884166479110718, -1.2719595432281494, -0.3960013687610626, -0.7602661848068237, -0.8397487998008728, -0.43347546458244324, -0.6437143087387085, -0.5984553098678589, 0.4384280741214752, -0.6860079169273376, -0.2746046781539917, 0.3457860052585602, -0.1354590803384781, 0.030843423679471016, -0.7352814674377441, -1.6452915668487549, -1.2735707759857178, 0.45766186714172363, -0.4680826663970947, 0.25973784923553467, -0.5401926636695862, 1.0860638618469238, 0.469875693321228, 0.31843212246894836, 0.26076576113700867, -0.7279438972473145, -1.4087984561920166, -1.5858793258666992, -1.2986433506011963, -1.0795834064483643, -0.4858991503715515, -7.280345439910889, -3.934363603591919, -2.5324549674987793, -1.6415549516677856, -1.7741668224334717, -1.2166703939437866, -1.7384816408157349, -1.7875797748565674, -2.9822635650634766, -2.255749225616455, -0.7790749669075012, 0.06430347263813019, -3.0778605937957764, -1.9036273956298828, -0.49056267738342285, 0.1618373692035675, -3.0342941284179688, -1.7184972763061523, -0.23414337635040283, -0.27585524320602417, -1.1261011362075806, -1.1798738241195679, -0.9485312700271606, 0.16112913191318512, 0.1641768515110016, 0.07582134753465652, 0.14433221518993378, -0.4372958242893219, -1.676491141319275, -2.551440954208374, 1.9285380840301514, 4.91425085067749, 7.662518501281738, 5.29468297958374, 5.193585395812988, 4.031679630279541, 4.416653633117676, 2.5406181812286377, 3.8636605739593506, 2.9419915676116943, 3.573391914367676, 2.4995038509368896, 2.229203224182129, 2.7799723148345947, 2.3641457557678223, 1.9324288368225098, 2.3154587745666504, 2.694338798522949, 1.870150089263916, 1.7996881008148193, 1.7266204357147217, 1.6662640571594238, 1.6988842487335205, 1.4557876586914062, 1.694400668144226, 1.518085241317749, 1.3557237386703491, 1.8312348127365112, 1.7126238346099854, 1.8639191389083862, 1.7016428709030151, -0.19371654093265533, 1.7526798248291016, 1.6858230829238892, 0.953188419342041, 0.36363399028778076, 1.0622607469558716, 0.8269491791725159, 0.7739856243133545, 0.23601265251636505, 1.2676434516906738, 0.5918899178504944, 0.8395336866378784, 0.981619119644165, 0.602532148361206, 0.5546470880508423, 0.7497178912162781, -0.36620593070983887, 0.5320726037025452, 0.4394287168979645, -0.3673272430896759, 0.11589080095291138, -0.08498596400022507, 0.7535653114318848, 1.600698471069336, 1.229651927947998, -0.49804428219795227, 0.3166012167930603, -0.4410797953605652, 0.9971193671226501, -0.8890329599380493, -0.0023846453987061977, -0.2948201298713684, -0.24493838846683502, 0.7322864532470703, 1.4917255640029907, 1.5198543071746826, 1.3444273471832275, 0.708216667175293, 0.5756549835205078, 7.282473087310791, 3.964520215988159, 2.5772628784179688, 1.7302260398864746, 1.707587480545044, 1.1897637844085693, 1.7308176755905151, 1.864957571029663, 3.0347917079925537, 2.334423303604126, 0.7820855975151062, -0.038981884717941284, 2.9271435737609863, 1.8597732782363892, 0.5414337515830994, -0.1161341443657875, 2.9158060550689697, 1.7217378616333008, 0.13564832508563995, 0.25485867261886597, 68.41543579101562, 0.807092010974884, -0.03815412148833275, -0.0031056092120707035, 0.3357650637626648, 0.17168110609054565, 0.14499792456626892, 0.3020905554294586, 1.037489414215088, 2.240356922149658, 0.2505757808685303, -10.780411720275879, 2.1264612674713135, -0.3292251527309418, -1.6696528196334839, -1.4874883890151978, -0.6973477005958557, -0.7882032990455627, -1.4552565813064575, 0.05444833263754845, -1.3506237268447876, -1.0490533113479614, -0.8472493886947632, -1.0677050352096558, -0.827885091304779, -0.7792014479637146, -0.6453233361244202, -1.0011374950408936, -0.6126304864883423, -0.6655076742172241, -0.6420760750770569, -0.6135802865028381, -0.72860187292099, 4.171623706817627, -0.5551552176475525, 2.451664686203003, -0.4434615671634674, -0.7158829569816589, -0.6591212153434753, -0.7634958624839783, -0.5202367305755615, 0.29859960079193115, -0.5022311806678772, -0.2385317087173462, -0.3225386440753937, 0.08737433701753616, -0.3380112946033478, -0.2965800166130066, -0.31959769129753113, 0.13457518815994263, -0.39021754264831543, -0.14648278057575226, -0.11529599875211716, -0.3072280287742615, -0.05452859029173851, -0.017405381426215172, -0.1924649477005005, 0.37374645471572876, -0.8509728908538818, -0.13951194286346436, 0.32901865243911743, 0.15458373725414276, 0.16355739533901215, -0.2256907969713211, -0.15639078617095947, -0.21790683269500732, 0.35897794365882874, 0.0248115137219429, 0.36136311292648315, -0.038327042013406754, 0.7363858222961426, 0.34456291794776917, 0.3903294801712036, -0.4767921268939972, -0.021873565390706062, 0.3957872688770294, 1.7582982778549194, 1.7655011415481567, -0.21013952791690826, 0.15366579592227936, -1.8137587308883667, -1.5353763103485107, -0.7630446553230286, -0.6249462366104126, -0.7243854999542236, -0.36755916476249695, -0.7164442539215088, -0.7284979820251465, 4.877445220947266, 1.675413727760315, -0.24474026262760162, 0.1344580352306366, 13.538191795349121, 0.393987774848938, 0.02512023225426674, 0.13981109857559204, -1.15338933467865, -0.909194827079773, 0.16977693140506744, 0.004831548780202866, 1.0855668783187866, 1.3767421245574951, 0.779876172542572, -0.3380758762359619, -0.214487686753273, -0.06112128123641014, -0.16263015568256378, 0.33733585476875305, 1.6739202737808228, 2.5217883586883545, -1.9365088939666748, -4.83817195892334, -7.593231678009033, -5.2851080894470215, -5.0597243309021, -4.102902889251709, -4.443674564361572, -2.5735738277435303, -3.7927825450897217, -2.9662463665008545, -3.575557231903076, -2.3379318714141846, -2.442155122756958, -2.6344223022460938, -2.339329242706299, -1.9245784282684326, -2.4700746536254883, -2.717705249786377, -1.6702909469604492, -1.8246701955795288, -1.8243670463562012, -1.7465704679489136, -1.7666319608688354, -1.4825994968414307, -1.7120200395584106, -1.3965201377868652, -1.376320719718933, -1.6275217533111572, -1.6995038986206055, -1.9057179689407349, -1.5360676050186157, 0.5846211314201355, -1.7099270820617676, -1.756282091140747, -0.9218419790267944, -0.4266519248485565, -1.21243155002594, -0.830771267414093, -0.8784458637237549, -0.046456318348646164, -1.2872374057769775, -0.4588843882083893, -0.7572606801986694, -0.9550910592079163, -0.5648831725120544, -0.49344655871391296, -0.7432249784469604, 0.4892309010028839, -0.5027213096618652, -0.47274747490882874, 0.22537299990653992, -0.1758030503988266, -0.037124548107385635, -0.7236385345458984, -1.6959059238433838, -1.3609012365341187, 0.40990275144577026, -0.4239270091056824, 0.2739073634147644, -0.8325074315071106, 0.9795343279838562, 0.00927299540489912, 0.22855588793754578, 0.13855595886707306, -0.8043398261070251, -1.298763632774353, -1.6467868089675903, -1.3270063400268555, -0.758661687374115, -0.6183732748031616, -7.344381332397461, -4.043093681335449, -2.7266080379486084, -1.7013587951660156, -1.7875580787658691, -1.3098913431167603, -1.6492325067520142, -1.946955680847168, -3.023843765258789, -2.2150039672851562, -0.9058859348297119, -0.10050598531961441, -2.876117706298828, -1.8660410642623901, -0.41135260462760925, 0.08043376356363297, -2.813690662384033, -1.6882896423339844, -0.03904115408658981, -0.3114432096481323, 0.8298541903495789, -0.9455680251121521, 1.103615641593933, -1.0841418504714966, 0.3889533579349518, 1.1483161449432373]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (20, 30), 'etaBin': (0, 0.8)}}, 'et3_eta1': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 5, 1], 'bias': [-0.14058396220207214, -0.010156997479498386, 0.06733924150466919, -0.07649846374988556, 0.1293705850839615, 0.10575754195451736], 'weights': [1.1464204788208008, 1.2067878246307373, -0.28515830636024475, -0.6625406742095947, -0.28769823908805847, 0.13101060688495636, 0.5060973763465881, 0.07477506250143051, 1.7470577955245972, 2.6376776695251465, -1.5882339477539062, -4.5880889892578125, -0.46777409315109253, -0.4468534290790558, -2.810885429382324, -4.303411960601807, -2.836515426635742, -2.6504995822906494, -5.5379157066345215, -5.193375110626221, -5.799534797668457, -2.3341825008392334, -2.6373019218444824, -2.5101006031036377, -2.6728148460388184, -0.5762125253677368, -2.9398365020751953, -1.8632680177688599, -1.7720856666564941, -1.7791000604629517, -2.0870559215545654, -2.242917537689209, -3.039011001586914, -4.897435665130615, -1.5594055652618408, 0.29868486523628235, -1.8047505617141724, -0.5125581622123718, -1.627350926399231, -1.0700658559799194, -1.6318979263305664, -1.447097897529602, -0.97405606508255, -0.9917728900909424, -0.27230104804039, -0.44569796323776245, 1.3847215175628662, -0.9223855137825012, -0.8403496742248535, -0.8519346117973328, -0.6648346185684204, -0.4896341860294342, -2.749429941177368, 2.6370368003845215, -0.33549007773399353, -0.480179101228714, -0.5426475405693054, -0.4316626489162445, -0.6873779296875, -0.660333514213562, 0.05645446106791496, 1.2366952896118164, -0.16785748302936554, 0.4090938866138458, -0.4713269770145416, -0.8317732810974121, -1.8288275003433228, -0.13761776685714722, 0.261544793844223, -0.020635241642594337, 0.19626902043819427, 1.6235370635986328, 0.4725204408168793, 0.1403738111257553, -0.43527036905288696, -0.8138880729675293, -1.7723891735076904, -0.7774099707603455, -1.136383056640625, -0.3619338572025299, -3.3469748497009277, -3.8529646396636963, -2.103095769882202, -1.985591173171997, -1.6665419340133667, -0.6530410647392273, -2.53981351852417, -1.8707005977630615, -1.3365834951400757, -0.7573326826095581, -0.1973240226507187, 0.24604938924312592, -3.0916507244110107, -2.1134731769561768, -0.7261000275611877, 0.03696891665458679, -2.770416736602783, -1.9849522113800049, -1.8168784379959106, -0.20196595788002014, 1.2289875745773315, 1.2332342863082886, -0.4334612786769867, -0.7423491477966309, -0.23879605531692505, 0.16808798909187317, 0.37993887066841125, 0.09751887619495392, 1.7321946620941162, 0.9208857417106628, -1.632216215133667, -4.4352898597717285, -0.5792647004127502, -1.706499457359314, -2.6057097911834717, -4.27695894241333, -2.979640483856201, -2.666217088699341, -5.394307613372803, -5.226280689239502, -5.667537212371826, -2.3605830669403076, -2.468632459640503, -2.567067861557007, -2.603724479675293, -0.6089507937431335, -2.765385389328003, -1.7737246751785278, -1.7722558975219727, -1.9457465410232544, -2.237405300140381, -2.1448466777801514, -2.932236433029175, -4.942885875701904, -1.5568363666534424, -0.7975941300392151, -1.7974990606307983, -0.48156991600990295, -1.6772531270980835, -1.093492865562439, -1.6772154569625854, -1.556591510772705, -1.097195029258728, -0.931762158870697, -0.39597970247268677, -0.6163713335990906, 1.096318244934082, -0.8394436836242676, -0.7740214467048645, -1.091386318206787, -0.696062445640564, -0.5440112948417664, -2.7632176876068115, 2.7588603496551514, 0.6027905941009521, -0.676897406578064, -0.7062645554542542, -0.6056439280509949, -0.5418381690979004, -0.5713596940040588, -0.03145892545580864, 1.4845952987670898, -0.739717960357666, 0.4211161434650421, -0.521577000617981, -0.642084002494812, -1.8894439935684204, -0.196270152926445, 0.2301837056875229, 0.12156328558921814, 0.09879958629608154, 1.5312397480010986, 0.4896114468574524, 0.1724841147661209, -0.447278767824173, -0.90472412109375, -1.6582369804382324, -1.0757876634597778, -1.2255232334136963, 0.17686861753463745, -3.4604837894439697, -3.9889583587646484, -2.2140815258026123, -1.859501838684082, -1.696321725845337, -0.6070360541343689, -2.626055955886841, -2.04848051071167, -1.4573805332183838, -0.8128771781921387, -0.034132182598114014, 0.2672517001628876, -3.0215039253234863, -2.030954122543335, -0.9436529278755188, -0.4262523651123047, -2.7508294582366943, -1.3706477880477905, -1.6185466051101685, -0.1981123685836792, -1.175389051437378, -1.1598323583602905, 0.38730573654174805, 0.8325306177139282, 0.28435105085372925, -0.18733718991279602, -0.4185461103916168, -0.08939151465892792, -1.8770824670791626, -2.563385248184204, 1.6099488735198975, 4.484491348266602, 0.6108928918838501, 1.6056360006332397, 2.662555456161499, 4.263810157775879, 2.78157901763916, 2.6834702491760254, 5.538370609283447, 5.223874568939209, 5.660417079925537, 2.297001600265503, 2.4157140254974365, 2.639709949493408, 2.755115032196045, 0.6514777541160583, 2.894240140914917, 1.737408995628357, 1.8106071949005127, 1.8579720258712769, 2.2233378887176514, 2.241504430770874, 2.9423248767852783, 4.878469467163086, 1.9052973985671997, 0.5610609650611877, 1.71853768825531, 0.5269231200218201, 1.4773133993148804, 1.1114442348480225, 1.4584585428237915, 1.5761823654174805, 0.9307408928871155, 0.9505367875099182, 0.30985787510871887, 0.4778963327407837, -1.0503709316253662, 0.7971989512443542, 0.8974006772041321, 1.0396018028259277, 0.6561216115951538, 0.6621599793434143, 2.640239715576172, -2.61531138420105, 0.38022053241729736, 0.4664246737957001, 0.6559479832649231, 0.44172337651252747, 0.5368390679359436, 0.554684042930603, 0.02156297117471695, -1.2618663311004639, 0.5779081583023071, -0.20528863370418549, 0.43809038400650024, 0.6577037572860718, 1.8972069025039673, 0.029116105288267136, -0.16851399838924408, -0.07194825261831284, -0.006217167712748051, -1.4465324878692627, -0.4251112639904022, -0.2592546343803406, 0.5819464921951294, 0.8879455327987671, 1.6747844219207764, 1.0146082639694214, 1.1712167263031006, -0.035036683082580566, 3.3428122997283936, 3.8900070190429688, 2.2322709560394287, 1.8635920286178589, 1.7416054010391235, 0.5695316195487976, 2.661424398422241, 2.0481526851654053, 1.4977550506591797, 0.8479567766189575, 0.012441311962902546, -0.24147672951221466, 3.0376315116882324, 2.089226484298706, 0.9434524178504944, 0.3540703356266022, 2.8294332027435303, 1.2397146224975586, 1.625142216682434, 0.09659366309642792, 1.0279542207717896, 1.138154149055481, -0.2595961391925812, -0.819037675857544, -0.41244974732398987, 0.05184108391404152, 0.4502420723438263, 0.1416597068309784, 1.6836082935333252, 2.4917287826538086, -1.4323716163635254, -4.5349345207214355, -0.6647194027900696, -1.6684268712997437, -2.6388678550720215, -4.355661869049072, -2.808748722076416, -2.6888272762298584, -5.588684558868408, -5.214621067047119, -5.685235500335693, -2.3215930461883545, -2.635526657104492, -2.6018660068511963, -2.5341546535491943, -0.6950390338897705, -2.7777016162872314, -1.7542210817337036, -1.8483892679214478, -1.846396565437317, -2.178955078125, -2.181396961212158, -2.9261341094970703, -4.951703071594238, -1.666548252105713, 0.2821841537952423, -1.681933045387268, -0.4199392795562744, -1.5648959875106812, -1.022971510887146, -1.6724826097488403, -1.485029697418213, -1.1298590898513794, -0.9730470776557922, -0.28265199065208435, -0.4415583610534668, 1.1810696125030518, -0.7960107922554016, -0.8624612092971802, -0.9603792428970337, -0.6445156335830688, -0.6536909937858582, -2.8332080841064453, 2.647057056427002, -0.3350646197795868, -0.681509256362915, -0.6635286211967468, -0.5253638029098511, -0.5234053134918213, -0.6012322902679443, 0.1517142355442047, 1.3208472728729248, -0.05931241810321808, 0.36842599511146545, -0.45350944995880127, -0.8182008266448975, -1.873921513557434, -0.009066952392458916, 0.35633140802383423, 0.00880338903516531, 0.11586792767047882, 1.6656674146652222, 0.45195531845092773, 0.1604243814945221, -0.630664587020874, -0.8327372670173645, -1.7361226081848145, -0.7621591687202454, -1.1136603355407715, -0.3598534166812897, -3.42808198928833, -3.8219974040985107, -2.2530033588409424, -1.8942232131958008, -1.8818079233169556, -0.5462697148323059, -2.6618480682373047, -1.9506031274795532, -1.5569698810577393, -0.7033156156539917, -0.2067478746175766, 0.3543814420700073, -2.9655261039733887, -2.0257229804992676, -0.9127545952796936, -0.5428412556648254, -2.681168556213379, -1.3037751913070679, -1.7885948419570923, -0.005853230599313974, -1.0860682725906372, -1.0734792947769165, 0.27771878242492676, 0.66318678855896, 0.4281288683414459, 0.021441476419568062, -0.4228176176548004, -0.045351747423410416, -1.7974884510040283, -2.4933993816375732, 1.4437899589538574, 4.48915433883667, 0.6418988704681396, 0.38811638951301575, 2.6976161003112793, 4.356443881988525, 2.789215087890625, 2.8492746353149414, 5.5300068855285645, 5.209054470062256, 5.647152423858643, 2.3758299350738525, 2.457690477371216, 2.6274266242980957, 2.619152545928955, 0.5737661123275757, 2.9511682987213135, 1.893384337425232, 1.8045170307159424, 1.8663023710250854, 2.0648622512817383, 2.0794131755828857, 3.0032405853271484, 4.855755805969238, 1.6529033184051514, -0.18197762966156006, 1.6592453718185425, 0.43303021788597107, 1.5172001123428345, 1.1304086446762085, 1.6846052408218384, 1.448781132698059, 0.9475112557411194, 0.9966188073158264, 0.47153156995773315, 0.5621554851531982, -1.3490948677062988, 1.062267541885376, 0.8943380117416382, 0.8916992545127869, 0.5641133785247803, 0.647514820098877, 2.8187954425811768, -2.661088466644287, 0.3544188439846039, 0.5078852772712708, 0.5281962752342224, 0.4739721715450287, 0.7331516742706299, 0.6662646532058716, -0.1832236498594284, -1.4693982601165771, 0.02233303338289261, -0.31534868478775024, 0.45322951674461365, 0.7676177024841309, 2.0272295475006104, 0.23029379546642303, -0.14894478023052216, -0.14739438891410828, -0.031203297898173332, -1.4461865425109863, -0.38258659839630127, -0.2581344246864319, 0.5952154397964478, 0.8467711210250854, 1.7590489387512207, 0.716701090335846, 1.0528626441955566, 0.41462835669517517, 3.313983917236328, 3.92500376701355, 2.3016252517700195, 1.765486240386963, 1.7265759706497192, 0.6142205595970154, 2.6038918495178223, 1.9042367935180664, 1.3280261754989624, 0.6109039783477783, -0.01948726363480091, -0.12509223818778992, 2.968801736831665, 2.007418155670166, 0.9509100317955017, 0.07723372429609299, 2.856487512588501, 1.2510318756103516, 1.7686060667037964, 0.144351989030838, 1.976989507675171, 0.8318104147911072, -4.274761199951172, 2.218122720718384, -1.989960789680481]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0.8, 1.37)}}, 'et0_eta3': {'discriminator': {'threshold': -0.28000081256031989, 'nodes': [100, 12, 1], 'bias': [-0.005526068154722452, -0.14407646656036377, -0.08192288130521774, -0.001809734501875937, -0.10623811930418015, -0.1274862289428711, 0.0917968600988388, 0.17756062746047974, 0.009135567583143711, 0.05177127569913864, 0.16776925325393677, 0.1346316933631897, 0.03238997980952263], 'weights': [0.07347682863473892, 0.11086798459291458, -0.22192643582820892, 0.09431090205907822, -0.05672236904501915, 0.11650260537862778, 0.14526772499084473, 0.018506711348891258, 0.3028365671634674, 0.15159951150417328, 0.2367319017648697, 0.042840637266635895, -0.35028985142707825, -0.31897103786468506, -1.3899519443511963, -1.9221934080123901, -0.8345057964324951, -1.4002259969711304, -0.11473327875137329, -0.5336739420890808, 0.046892136335372925, 0.020185809582471848, -0.27707216143608093, -0.32486623525619507, -0.28225624561309814, -0.12812288105487823, -0.07255647331476212, -0.0880657508969307, 0.04132342338562012, -0.01982087269425392, -0.06551582366228104, -0.21632741391658783, 0.08068790286779404, -0.2809408903121948, 0.07507067173719406, -0.21632595360279083, 0.10672523826360703, 0.17428983747959137, 0.08878613263368607, 0.0024222845677286386, 0.21090568602085114, 0.13904181122779846, 0.056481070816516876, -0.053941935300827026, -0.0006760474061593413, 0.1476811170578003, -0.2004903107881546, -0.060623180121183395, -0.03918984904885292, -0.14786642789840698, 0.07511330395936966, -0.12189099192619324, 0.11945702880620956, 0.0014888636069372296, 0.055504683405160904, 0.06655048578977585, -0.004591848701238632, 0.049100060015916824, 0.07141102105379105, 0.1084647849202156, 0.11069134622812271, -0.05304590240120888, 0.08269322663545609, 0.022154495120048523, 0.06309032440185547, 0.17265938222408295, 0.1972074657678604, 0.11327174305915833, 0.21721617877483368, 0.029723765328526497, 0.6813767552375793, 0.28352710604667664, 0.06496311724185944, -0.04755278304219246, -0.35126793384552, -0.07787079364061356, -0.13117091357707977, -0.1766783446073532, 0.031938813626766205, 0.07550125569105148, -0.8615522384643555, -0.6679161190986633, -0.12950240075588226, -0.09848945587873459, -0.0540039986371994, -0.14964455366134644, 0.23978275060653687, -0.15690870583057404, 0.08983753621578217, -0.10051235556602478, 0.02544274553656578, -0.025074589997529984, -0.1731126606464386, -0.013265403918921947, 0.005334390792995691, 0.3504922091960907, 0.05395995453000069, 0.20664794743061066, -0.008105502463877201, -0.0842062383890152, 0.855747640132904, 0.7074270248413086, -0.016444029286503792, -0.2780096232891083, -0.3728114366531372, -0.3448895812034607, 0.010952084325253963, 0.17163412272930145, 1.401155710220337, 1.4119529724121094, 1.1573766469955444, 0.15913087129592896, -0.9635791182518005, -0.004706947132945061, -2.7353320121765137, -1.8571641445159912, -0.8683490753173828, -1.224515676498413, -0.32254523038864136, -4.198087215423584, -0.6634833812713623, 0.08895087242126465, -1.5653350353240967, -1.5306264162063599, -1.265318751335144, -1.2880889177322388, -0.9057645201683044, -1.3303006887435913, -0.6194390654563904, -0.2876385748386383, -0.2651457190513611, -0.926378607749939, -0.689467191696167, -1.1560643911361694, -0.5342223644256592, -1.0350139141082764, -0.4904097616672516, 0.03905121982097626, -0.012493722140789032, -0.7521436214447021, 0.21592386066913605, 0.8197923302650452, -0.4486432373523712, -0.36533045768737793, -0.5907633304595947, 0.6238790154457092, -0.8606862425804138, -0.5602596998214722, -0.2714194655418396, -0.4400058686733246, 0.06338010728359222, -0.5400457382202148, 0.5681506395339966, -0.38450828194618225, 0.3632930815219879, 0.10522530227899551, -0.22643527388572693, -0.4927605390548706, 0.2428278625011444, 0.5828389525413513, 0.4789542257785797, -0.6057939529418945, 0.27690306305885315, 0.16087718307971954, -0.14181575179100037, 0.8329270482063293, 0.9529933333396912, 0.11186084151268005, 0.19148360192775726, -0.37853938341140747, 3.115266799926758, 0.48467060923576355, 0.27880263328552246, 0.3575509786605835, -0.1261363923549652, -0.8967247605323792, -0.9208580851554871, -0.7278516888618469, -0.4357077181339264, -0.30160582065582275, -4.074020862579346, -3.13667631149292, -1.4786394834518433, -0.6965441703796387, -0.9018935561180115, -0.7534804940223694, 0.41811078786849976, -0.6213122010231018, -0.34094229340553284, -0.5763772130012512, -0.09397301077842712, 0.05943828076124191, -1.3248196840286255, -0.6100223660469055, 0.19724351167678833, 0.10311945527791977, -0.3543071448802948, -0.03594284504652023, 0.10391878336668015, 0.24742886424064636, 0.00842108391225338, 0.0860825926065445, -0.07726234942674637, -0.12025225162506104, 0.022525157779455185, -0.06872686743736267, -0.16843517124652863, -0.08427511155605316, -1.0784353017807007, -0.1799338012933731, -0.583513081073761, 0.3034774661064148, 1.4859081506729126, 0.2909749746322632, 2.9033586978912354, 0.5619007349014282, 0.3196623921394348, 0.34367048740386963, -0.02729983814060688, 0.21850748360157013, -0.04758019000291824, -0.08521731197834015, -0.060818083584308624, 0.11483602970838547, -0.0322471521794796, 0.050403304398059845, 0.09942431002855301, 0.15561765432357788, -0.06184005364775658, -0.03521320968866348, -0.09842794388532639, 0.10993342846632004, -0.04234985262155533, 0.01581757329404354, -0.1170201376080513, -0.09533613175153732, 0.06596697866916656, -0.05266482010483742, -0.10430748015642166, -0.09664641320705414, -0.16822968423366547, -0.09581680595874786, 0.025377027690410614, 0.08222180604934692, 0.007014991249889135, -0.01759798638522625, 0.030903633683919907, -0.10274358093738556, 0.056878261268138885, 0.08013400435447693, -0.06835773587226868, -0.08981900662183762, -0.3249205946922302, 0.08807559311389923, -0.05523494631052017, -0.1798548847436905, -0.04893767833709717, 0.06124546378850937, -0.20350730419158936, -0.17651942372322083, -0.32398101687431335, -0.027756955474615097, -0.16674423217773438, -0.18017792701721191, -0.01897132210433483, -0.23978625237941742, -0.30503523349761963, -0.09166087210178375, -0.2619082033634186, -0.123734250664711, -0.6592873334884644, -0.22616378962993622, 0.3362840414047241, 0.01528079342097044, 0.19117462635040283, -0.09905395656824112, -0.08071215450763702, 0.0898781269788742, -0.07270664721727371, 0.08015698194503784, 0.1904226541519165, 0.0017876464407891035, -0.03542063757777214, 0.054917220026254654, 0.1386953890323639, -0.07253273576498032, -0.15625742077827454, -0.005800198297947645, 0.08101876825094223, -0.0663861334323883, -0.22704042494297028, -1.006371259689331, 0.09764708578586578, 0.010764076374471188, -0.11778287589550018, -2.0778450965881348, -0.09443961083889008, -0.17228789627552032, -0.18620581924915314, 0.27392756938934326, 0.8744163513183594, 0.8125483989715576, -0.0053376671858131886, -0.2002032846212387, -0.47455692291259766, -0.15588080883026123, -0.0051125288009643555, -0.024333246052265167, 1.2056201696395874, 1.3944300413131714, 1.1319537162780762, -0.09528699517250061, -0.9170843958854675, -0.014647792093455791, -2.8694591522216797, -1.9158152341842651, -0.8248977661132812, -1.2046726942062378, -0.25200286507606506, -3.3429982662200928, -0.37323155999183655, -0.027821844443678856, -1.4500927925109863, -1.486460566520691, -1.3272377252578735, -1.3038021326065063, -0.9106979966163635, -1.2255276441574097, -0.6897165179252625, -0.33680611848831177, -0.09995408356189728, -0.967322051525116, -0.6430069208145142, -1.2293671369552612, -0.39361080527305603, -1.0808135271072388, -0.001004521269351244, 0.26315218210220337, -0.006637883838266134, -0.8298298120498657, -0.07509388774633408, 0.7364076972007751, -0.4815395176410675, -0.38508111238479614, -0.43553584814071655, 0.7057363390922546, -0.8194615244865417, -0.6102641820907593, -0.4546935260295868, -0.579706609249115, 0.10725420713424683, -0.785744845867157, 0.4946363568305969, -0.474288672208786, 0.2102336436510086, -0.03970213234424591, -0.3224485218524933, -0.4019050598144531, 0.21190160512924194, 0.6654230356216431, 0.511168360710144, -0.4810371398925781, 1.0577058792114258, 0.2490135133266449, -0.09986763447523117, 0.8817153573036194, 1.0048160552978516, -0.36437126994132996, 0.20315374433994293, -0.330370157957077, 2.942955493927002, 0.42803582549095154, 0.5143197774887085, 0.39953476190567017, -0.5323323607444763, -0.7767040133476257, -1.044390082359314, -0.7440090179443359, -0.355406790971756, -0.35815170407295227, -4.237850189208984, -3.0227644443511963, -1.49408757686615, -0.6865396499633789, -0.8504322171211243, -0.673483669757843, 0.5320491194725037, -0.45379316806793213, -0.4189683198928833, -0.48896026611328125, 0.14664076268672943, 0.023087093606591225, -1.375417947769165, -0.587888777256012, 0.0001595106878085062, 0.10394413024187088, -0.2924331724643707, -0.1908976286649704, 0.012759930454194546, 0.3284040689468384, 0.14168211817741394, -0.04534709081053734, -0.061322566121816635, -0.0018186133820563555, -0.008228253573179245, 0.002197754569351673, 0.14681458473205566, 0.06852608174085617, 0.16117675602436066, 0.18891580402851105, 0.23935651779174805, -0.11590386182069778, -0.237266406416893, -0.37408459186553955, -1.3021790981292725, -2.021311044692993, -1.0043226480484009, -1.2683333158493042, 0.04500492289662361, -0.613460898399353, 0.028964290395379066, 0.05371265113353729, -0.15793932974338531, -0.3019441068172455, -0.199056476354599, -0.2443135529756546, -0.11962194740772247, -0.1444297730922699, -0.03305366635322571, 0.00960729829967022, 0.013261242769658566, -0.24069702625274658, -0.027906352654099464, -0.2840786874294281, -0.0272306427359581, -0.03390061482787132, 0.007627041079103947, 0.050167858600616455, 0.07867341488599777, 0.004167712293565273, 0.1452757567167282, 0.11340190470218658, -0.11871328204870224, -0.02474808134138584, -0.06323155760765076, 0.30139535665512085, -0.07401128858327866, -0.05047077685594559, 0.0033744617830961943, -0.10416176915168762, -0.0127211669459939, -0.11493046581745148, 0.21504515409469604, 0.04273524507880211, 0.10369852185249329, 0.0026657693088054657, 0.16297727823257446, 0.06843680143356323, 0.1936783790588379, 0.1834593564271927, 0.14125841856002808, -0.032214343547821045, 0.1515183448791504, 0.18664170801639557, 0.03668138012290001, 0.1209854707121849, 0.30160486698150635, 0.23028595745563507, 0.06258966028690338, -0.11846767365932465, 0.7819381952285767, 0.30579298734664917, -0.09066370129585266, 0.12039241194725037, -0.31799423694610596, -0.0535348616540432, -0.052090127021074295, 0.0012685826513916254, 0.08462054282426834, -0.04484141618013382, -0.8824142217636108, -0.4605533182621002, -0.2246975600719452, 0.06346900761127472, -0.04791492596268654, 0.045877862721681595, 0.2868633270263672, -0.001428512274287641, 0.06217288225889206, 0.050635140389204025, 0.013391317799687386, -0.04036753997206688, -0.30595308542251587, 0.06169583275914192, 0.17272765934467316, 0.43375855684280396, 0.09545344859361649, 0.23572556674480438, -0.05034046992659569, -0.2155289351940155, 0.9065430164337158, 0.5857232809066772, -0.03530312702059746, -0.3067540228366852, -0.4503781199455261, -0.339547336101532, -0.18671448528766632, 0.028712963685393333, 1.4522440433502197, 1.3335511684417725, 1.0613354444503784, 0.17492231726646423, -0.9013590812683105, -0.06811504065990448, -2.72227144241333, -1.8414833545684814, -0.899369478225708, -1.2936887741088867, -0.34870070219039917, -4.074159622192383, -0.7317330837249756, 0.06324698030948639, -1.571948528289795, -1.529797911643982, -1.3649953603744507, -1.2017725706100464, -0.8665840029716492, -1.1559250354766846, -0.5724329352378845, -0.3783361315727234, -0.20255477726459503, -1.071000337600708, -0.6594464778900146, -1.3547478914260864, -0.33298036456108093, -1.0795292854309082, -0.057504959404468536, 0.15285950899124146, 0.04248875379562378, -0.8943964242935181, 0.25436675548553467, 0.7213768362998962, -0.5781385898590088, -0.26770395040512085, -0.5101674795150757, 0.7498635649681091, -0.7504525780677795, -0.5074657201766968, -0.4570271074771881, -0.5983095169067383, -0.002321421168744564, -0.551486611366272, 0.6265198588371277, -0.4537837505340576, 0.3557170331478119, 0.06089989095926285, -0.4518108069896698, -0.4641896188259125, 0.1304561197757721, 0.6468974351882935, 0.6592563986778259, -0.41315239667892456, 0.1933002471923828, 0.3742205798625946, -0.1508912742137909, 0.821418285369873, 0.8794024586677551, 0.1548968255519867, 0.29681187868118286, -0.40018463134765625, 3.0190861225128174, 0.6254054307937622, 0.4011673033237457, 0.37429165840148926, -0.46948426961898804, -0.936190664768219, -1.0205520391464233, -0.8640571236610413, -0.4193330407142639, -0.34448835253715515, -4.124610424041748, -3.189025640487671, -1.5359941720962524, -0.6932930946350098, -0.7811101675033569, -0.5759922862052917, 0.37400275468826294, -0.4834817051887512, -0.37729647755622864, -0.49043789505958557, 0.10487262904644012, -0.039048321545124054, -1.2886598110198975, -0.49174559116363525, 0.06968165189027786, 0.13323935866355896, -0.2505851089954376, 0.005125742871314287, 0.18010830879211426, 0.21406501531600952, -0.9584665894508362, -0.7277305126190186, 0.16012613475322723, 0.18554215133190155, 0.32520437240600586, 0.35149189829826355, 0.16333350539207458, -0.06821055710315704, -1.296568751335144, -1.37785804271698, -1.1466500759124756, 0.03394511714577675, 1.0219504833221436, 0.10026994347572327, 2.81296706199646, 1.9108121395111084, 0.6823952198028564, 1.2771985530853271, 0.27122944593429565, 4.195213317871094, 0.7168731689453125, 0.0016496042953804135, 1.3323209285736084, 1.4375067949295044, 1.4913971424102783, 1.2384988069534302, 1.08400297164917, 1.3802720308303833, 0.6991890072822571, 0.22822077572345734, 0.11677227914333344, 0.8910311460494995, 0.6221300363540649, 1.138989806175232, 0.28660231828689575, 1.171839952468872, 0.10849226266145706, -0.23197291791439056, 0.0009737455984577537, 0.8462570905685425, -0.12290724366903305, -0.7538785338401794, 0.4840732514858246, 0.2649516463279724, 0.5004700422286987, -0.7625958323478699, 0.826468288898468, 0.5355994701385498, 0.4371645450592041, 0.6062021255493164, -0.10328906774520874, 0.5074070692062378, -0.5644182562828064, 0.3633464276790619, -0.23727551102638245, -0.12718234956264496, 0.4074524939060211, 0.5452460050582886, -0.22704115509986877, -0.5738474726676941, -0.4735086262226105, 0.485590398311615, -0.2908652126789093, -0.23514603078365326, 0.01691947877407074, -0.7105526924133301, -0.9028140902519226, -0.2472354620695114, -0.27440768480300903, 0.4295786917209625, -2.904749870300293, -0.46219155192375183, -0.49081698060035706, -0.36337631940841675, 0.6392976641654968, 0.9233927726745605, 1.0280735492706299, 0.855082094669342, 0.4253135025501251, 0.32280850410461426, 4.114168643951416, 3.0987489223480225, 1.4795920848846436, 0.7543225884437561, 0.8552014827728271, 0.6286765933036804, -0.3699073791503906, 0.5038646459579468, 0.5203952789306641, 0.37468552589416504, -0.002101720543578267, 0.11309120059013367, 1.2686017751693726, 0.48761066794395447, -0.11136091500520706, -0.03246009349822998, 0.36666861176490784, 0.18458890914916992, -0.18100899457931519, -0.33038026094436646, -0.8576292395591736, -0.6034986972808838, 0.1782567799091339, 0.1853518784046173, 0.48616868257522583, 0.3124924302101135, 0.14944002032279968, -0.13483746349811554, -1.4192923307418823, -1.456716537475586, -1.2490123510360718, -0.06486590951681137, 1.0535950660705566, -0.09196782112121582, 2.8710718154907227, 1.8114943504333496, 0.6964011788368225, 1.1661278009414673, 0.48658767342567444, 4.5252580642700195, 0.8016472458839417, 0.04046686738729477, 1.4570856094360352, 1.538711667060852, 1.277990698814392, 1.1479015350341797, 1.1226155757904053, 1.395092248916626, 0.6385074853897095, 0.3767186999320984, 0.36560413241386414, 0.939081072807312, 0.6355020403862, 1.2757031917572021, 0.4591260254383087, 1.0899118185043335, 0.3337954878807068, -0.19800813496112823, 0.10867235064506531, 0.8212641477584839, -0.16458255052566528, -0.8197336792945862, 0.6165056228637695, 0.2516234815120697, 0.49862009286880493, -0.5641435980796814, 0.692038893699646, 0.5399461984634399, 0.26827704906463623, 0.4212935268878937, 0.046381376683712006, 0.665159285068512, -0.45296868681907654, 0.3815387785434723, -0.2345687597990036, 0.027097560465335846, 0.338366836309433, 0.5328542590141296, -0.050201691687107086, -0.45964911580085754, -0.5936470627784729, 0.5169273018836975, -0.3848832845687866, -0.33402392268180847, 0.17707763612270355, -0.7725269198417664, -0.826316773891449, -0.23771458864212036, -0.2643836736679077, 0.3564695119857788, -2.928142786026001, -0.5430784225463867, -0.37379151582717896, -0.24647824466228485, 0.1978469341993332, 0.7825720310211182, 1.0872291326522827, 0.8748255372047424, 0.545219898223877, 0.4693337678909302, 4.217126846313477, 3.1120924949645996, 1.5275987386703491, 0.7005982398986816, 0.8788042068481445, 0.6872969269752502, -0.5256029367446899, 0.713604211807251, 0.31036660075187683, 0.4176439940929413, 0.054314471781253815, 0.03916264325380325, 1.3210774660110474, 0.7062481045722961, -0.027917219325900078, -0.07610499113798141, 0.26682043075561523, 0.08701750636100769, 0.04109897091984749, -0.19383859634399414, -0.9060099124908447, -0.8061052560806274, 0.1346808820962906, 0.2311590611934662, 0.44427114725112915, 0.1269865334033966, 0.021368691697716713, -0.16141526401042938, -1.2312791347503662, -1.4421308040618896, -0.9955828189849854, -0.06613966077566147, 1.1256804466247559, -0.08193204551935196, 2.844921827316284, 1.9210702180862427, 0.8079874515533447, 1.3337292671203613, 0.3976365923881531, 4.219398021697998, 0.45786532759666443, -0.13562770187854767, 1.3916535377502441, 1.4762107133865356, 1.463157057762146, 1.2964633703231812, 0.9028158783912659, 1.2343894243240356, 0.7546287775039673, 0.3548973500728607, 0.15370763838291168, 1.0007694959640503, 0.6673437356948853, 1.1535650491714478, 0.1998511403799057, 1.0750494003295898, -0.10461225360631943, -0.19961868226528168, 0.07331909239292145, 0.7016324996948242, -0.15799236297607422, -0.7915172576904297, 0.44717732071876526, 0.3366883099079132, 0.5416970252990723, -0.7644333243370056, 0.9053620100021362, 0.44135719537734985, 0.23079749941825867, 0.5505024194717407, -0.1197170615196228, 0.9046310782432556, -0.4715484380722046, 0.35268810391426086, -0.3597562611103058, -0.05945149064064026, 0.4516793191432953, 0.5026513934135437, -0.04410887509584427, -0.4710855782032013, -0.650486171245575, 0.4444030523300171, -0.33818143606185913, -0.36381253600120544, -0.012776313349604607, -0.8477009534835815, -0.8672123551368713, -0.22888538241386414, -0.11814677715301514, 0.2764802873134613, -3.0342233180999756, -0.602359414100647, -0.37518393993377686, -0.2685604691505432, 0.5680629014968872, 0.7738755345344543, 1.1179381608963013, 0.8658738136291504, 0.4418547749519348, 0.4673839509487152, 4.072352409362793, 3.0460755825042725, 1.4626399278640747, 0.8022899031639099, 0.7519503831863403, 0.7506676316261292, -0.5152669548988342, 0.4847334027290344, 0.3387884497642517, 0.4153599739074707, 0.07847215235233307, 0.015526333823800087, 1.264989972114563, 0.5176454186439514, -0.07653401792049408, -0.06885093450546265, 0.2627805173397064, -0.006038305349647999, -0.19594085216522217, -0.2749088406562805, -0.15506508946418762, -0.07674091309309006, 0.20880095660686493, -0.13028904795646667, -0.06834574788808823, -0.09979509562253952, 0.03406215459108353, -0.0370730385184288, -0.1818811446428299, -0.15657664835453033, -0.11721772700548172, 0.11424239724874496, 0.24962656199932098, 0.35821688175201416, 1.4577369689941406, 1.91103196144104, 0.9968602657318115, 1.2154844999313354, -0.035733118653297424, 0.5517828464508057, 0.1226339116692543, -0.017128044739365578, 0.2432246059179306, 0.1492808759212494, 0.1701391339302063, 0.10536917299032211, 0.1825931817293167, 0.17476706206798553, -0.030415143817663193, -0.1356056183576584, 0.017266996204853058, 0.15089617669582367, 0.027581969276070595, 0.21431761980056763, 0.05308667942881584, 0.20477096736431122, 0.07292912900447845, -0.09120200574398041, -0.12410985678434372, 0.06861978024244308, -0.14101625978946686, -0.28445982933044434, -0.05799431353807449, 0.02841321937739849, 0.12406405806541443, -0.3109760582447052, 0.16056585311889648, 0.11679185181856155, -0.07927782088518143, -0.04777057096362114, 0.004410652909427881, -0.05662199482321739, -0.08247187733650208, 0.03897350654006004, -0.18002575635910034, -0.1469271332025528, 0.027537068352103233, -0.06884099543094635, -0.05984370410442352, -0.06936267763376236, -0.280610054731369, 0.011115786619484425, -0.11427098512649536, -0.07855330407619476, -0.1768922656774521, -0.30564671754837036, -0.2704107463359833, -0.042173322290182114, -0.0405212864279747, 0.09127126634120941, -0.7688004970550537, -0.26651617884635925, -0.09464344382286072, -0.03610975667834282, 0.3480038046836853, -0.05798826366662979, 0.11375173926353455, 0.12823611497879028, 0.1179373487830162, 0.01817651093006134, 0.8470374345779419, 0.6677495241165161, 0.2742365002632141, 0.11571747809648514, 0.08905573189258575, -0.059712912887334824, -0.07337439060211182, -0.014665705151855946, -0.08936870098114014, 0.04892120137810707, -0.16316162049770355, -0.13913169503211975, 0.3091582655906677, 0.07353337854146957, 0.0036234387662261724, -0.5578142404556274, -0.1319304257631302, -0.2759475111961365, 0.10144764930009842, 0.1881783902645111, -0.09759411960840225, -0.04952652379870415, 0.26593542098999023, 0.00643699336796999, 0.16204950213432312, 0.04702237993478775, 0.06161084026098251, -0.03125558793544769, -0.31633904576301575, -0.373982697725296, -2.102773904800415, -0.13163958489894867, 0.07909572869539261, 0.23009540140628815, 3.4120571613311768, 8.32243824005127, 4.10237979888916, 5.228827953338623, -2.7055113315582275, 0.5222992897033691, 0.2140372395515442, 0.1592486947774887, 0.25893259048461914, 0.19383087754249573, 0.2061028927564621, 0.21586407721042633, 0.09745234251022339, 0.2664583921432495, 0.03401170298457146, 0.13446660339832306, 0.09642453491687775, -0.04614802449941635, 0.17165958881378174, 0.17747050523757935, 0.08152814209461212, 0.268003910779953, 0.09988859295845032, -0.0798511952161789, -0.13566634058952332, 0.2791441082954407, -0.05417996644973755, -0.27447569370269775, 0.04101395979523659, 0.023564089089632034, 0.0016796530690044165, -0.03237523138523102, 0.12366566061973572, 0.1786729097366333, 0.1742279976606369, 0.08037525415420532, -0.12613973021507263, 0.01852203905582428, -0.08336832374334335, 0.08367909491062164, -0.14198455214500427, 0.041289862245321274, 0.10388877987861633, 0.03752424567937851, -0.10942618548870087, -0.009894691407680511, -0.21749547123908997, 0.14783616364002228, -0.3288171589374542, 0.0449431836605072, -0.09457507729530334, -0.5045395493507385, -0.16149289906024933, -0.010722105391323566, -0.0024131862446665764, 0.10652121156454086, -0.6093565225601196, 0.00548471650108695, -0.023121826350688934, -0.038937196135520935, 0.7127572894096375, -0.14538134634494781, 0.2567242980003357, 0.20106500387191772, 0.12912382185459137, 0.10088694840669632, 0.9673728942871094, 0.5949899554252625, 0.35058775544166565, 0.10116714239120483, 0.00028490315889939666, 0.20796535909175873, -0.15689198672771454, 0.2182890772819519, 0.20317070186138153, 0.08681519329547882, 0.0504450686275959, -0.0007735955878160894, 0.2315407693386078, 0.15969708561897278, 0.09008954465389252, -0.05359499529004097, 0.0116139966994524, 0.025718441233038902, -0.1322256624698639, 0.026017479598522186, -0.9817870259284973, -0.6066368818283081, 0.16600172221660614, 0.16566255688667297, 0.3446674942970276, 0.30290859937667847, 0.1603359878063202, -0.02179131843149662, -1.355717658996582, -1.3758225440979004, -1.221917986869812, -0.16333216428756714, 0.9108412861824036, -0.08025842905044556, 2.6888298988342285, 2.0144193172454834, 0.7878190279006958, 1.1553541421890259, 0.4640013873577118, 4.694734573364258, 0.8231510519981384, 0.08003854751586914, 1.3627078533172607, 1.5198570489883423, 1.4475654363632202, 1.186111569404602, 0.8843483328819275, 1.2401591539382935, 0.6395353674888611, 0.38456523418426514, 0.198313906788826, 1.0574777126312256, 0.6501401662826538, 1.2411178350448608, 0.5506219863891602, 1.2045819759368896, 0.29643648862838745, -0.08840465545654297, 0.09486310184001923, 0.8406497240066528, -0.22680316865444183, -0.799617350101471, 0.5306044816970825, 0.29936936497688293, 0.5236285328865051, -0.5907637476921082, 0.714980959892273, 0.6494489908218384, 0.23771736025810242, 0.4380604326725006, 0.08380818367004395, 0.6636692881584167, -0.40345141291618347, 0.5661117434501648, -0.24809308350086212, 0.004664320964366198, 0.3084019124507904, 0.5841951370239258, -0.22073587775230408, -0.48312321305274963, -0.5276358127593994, 0.5587068200111389, -0.28312763571739197, -0.2465420961380005, -0.0572635792195797, -0.820408046245575, -0.865695059299469, -0.26787200570106506, -0.22597427666187286, 0.3101177215576172, -2.945730447769165, -0.5323840975761414, -0.3293997049331665, -0.343095064163208, 0.24950294196605682, 0.7813385725021362, 0.9707733988761902, 0.9425172209739685, 0.4118528366088867, 0.31547462940216064, 4.284393787384033, 3.0229828357696533, 1.379088282585144, 0.8345760703086853, 0.96744704246521, 0.7667807936668396, -0.4072304368019104, 0.531790554523468, 0.4480220377445221, 0.6070080399513245, -0.13287457823753357, 0.001303400844335556, 1.3107070922851562, 0.6144444346427917, 0.014874671585857868, -0.0792723298072815, 0.1337544173002243, 0.09746420383453369, 0.0009585428633727133, -0.26542824506759644, 2.372265338897705, 0.47514158487319946, -0.3515172600746155, 0.6451715230941772, 0.03153396397829056, 1.7297091484069824, -1.5963265895843506, -0.4168339967727661, -0.8385906219482422, -0.44107484817504883, -0.5089825391769409, -0.6203166246414185]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (1.54, 2.5)}}, 'et3_eta3': {'discriminator': {'threshold': -0.31500081177800893, 'nodes': [100, 5, 1], 'bias': [-0.0026822981890290976, -0.07377532869577408, -0.007974994368851185, -0.16853055357933044, -0.06441225856542587, 0.13564197719097137], 'weights': [1.6453747749328613, 2.6088600158691406, -1.3678135871887207, -1.2877781391143799, 0.0757671445608139, -1.313241958618164, 0.3504394292831421, 1.5601763725280762, 1.8411474227905273, 1.8598456382751465, 0.6482876539230347, -2.511263608932495, -0.2952120006084442, -0.7789666056632996, -2.5676252841949463, -2.1249446868896484, -2.0311155319213867, -4.27354097366333, -4.34259033203125, -6.79109001159668, 0.26440444588661194, -1.3378560543060303, -1.8120442628860474, -4.250185012817383, -4.795808792114258, -4.172086715698242, -2.1067121028900146, -1.054761290550232, -1.254315972328186, -2.626077651977539, -0.08611088991165161, -4.771571159362793, -0.9363676309585571, -2.3707633018493652, -1.7289048433303833, -1.649170994758606, -1.8055485486984253, -2.6921520233154297, -1.6702463626861572, -3.475526809692383, -0.8764222860336304, -2.4371860027313232, -1.4124659299850464, -1.1228387355804443, -0.0710236057639122, -1.706192135810852, -1.7178205251693726, -0.4437747001647949, 0.9503127336502075, -2.0104548931121826, -0.48377037048339844, 0.6771113872528076, 1.2609716653823853, -0.9713212847709656, -1.2625234127044678, 0.11309906840324402, 1.554800033569336, -3.551863431930542, 1.255460262298584, -2.244666337966919, 0.06816621869802475, 0.8891024589538574, -0.31957268714904785, 0.6217986941337585, -0.755652129650116, -1.3269896507263184, 0.393809050321579, -0.6914824843406677, 1.1989281177520752, 2.0677664279937744, -0.3061457872390747, -0.8172145485877991, 0.5543983578681946, 0.26117756962776184, -1.7833328247070312, -1.9560140371322632, -2.247663736343384, -1.8420708179473877, -1.7461508512496948, -0.7262256741523743, -1.5775303840637207, -3.9379920959472656, -6.896449565887451, -1.7874044179916382, -2.4555823802948, -1.904052495956421, 0.6451247334480286, -1.394220232963562, -0.6604307293891907, -1.612280249595642, -0.2587394118309021, -0.3036463260650635, -4.475130558013916, -1.869966745376587, -0.40121808648109436, -1.164275050163269, 0.9186030030250549, -0.16907858848571777, 0.43050912022590637, 3.2057249546051025, 1.6611487865447998, 1.9638066291809082, -1.3152694702148438, -1.266971468925476, -0.012450817972421646, -1.237388253211975, 0.5422267913818359, 0.033369556069374084, 1.9038782119750977, 1.9781697988510132, 0.5547154545783997, -2.5483882427215576, -0.28108328580856323, -0.7324627041816711, -2.6389048099517822, -1.9112340211868286, -2.124799966812134, -4.432255744934082, -4.41224479675293, -6.802875518798828, 0.4018074870109558, -1.1553627252578735, -1.9742958545684814, -4.18024206161499, -4.953296661376953, -4.3323283195495605, -1.9895886182785034, -0.9182958006858826, -1.2809019088745117, -4.090524196624756, 0.25694540143013, -4.791000843048096, -0.8209642171859741, -2.378762722015381, -1.9224141836166382, -1.8710798025131226, -1.7290903329849243, -1.6767504215240479, -1.8385858535766602, -3.344933032989502, -0.8140627145767212, -2.392922878265381, -1.3276156187057495, -1.1542680263519287, 0.02396303229033947, -2.0387930870056152, -1.7846342325210571, -0.4471873342990875, 0.8051605224609375, -1.8978304862976074, -0.4933512210845947, 0.6779794692993164, -1.2109791040420532, -0.8121653199195862, -1.2003304958343506, 0.01022394746541977, 1.5496234893798828, -3.6216423511505127, 1.2804350852966309, -2.2850427627563477, 0.1395234912633896, 0.8535337448120117, -0.37076684832572937, 0.5594646334648132, -0.5713777542114258, -1.3768380880355835, 0.35866066813468933, -0.6591535806655884, 1.0931122303009033, 2.1704494953155518, -0.15126368403434753, -0.8692861199378967, 0.4619787037372589, 0.4645921587944031, -0.45322543382644653, -1.9674001932144165, -2.243455410003662, -1.7346749305725098, -1.7518469095230103, -0.8585518002510071, -1.6066029071807861, -3.9446539878845215, -7.036523342132568, -1.761863112449646, -2.5527281761169434, -1.732835054397583, -1.3442597389221191, -1.5046111345291138, -0.5676074624061584, -1.465461015701294, -0.1604148894548416, -0.41759225726127625, -4.571678638458252, -1.8314518928527832, -0.2993718683719635, -1.3043948411941528, 0.8986514210700989, -0.35147565603256226, 0.31468939781188965, 3.329052448272705, 1.7038644552230835, 2.0513393878936768, -1.241438388824463, -1.2287734746932983, -0.014411812648177147, -1.1697802543640137, 0.3433302044868469, -0.11848220974206924, 1.7212376594543457, 1.8913778066635132, 0.624262809753418, -2.4948599338531494, -1.1592159271240234, -0.6414404511451721, -2.6828062534332275, -1.9724620580673218, -2.117993116378784, -4.335535049438477, -4.3711628913879395, -6.860287666320801, 0.3457065224647522, -1.2056001424789429, -1.8813178539276123, -4.197864055633545, -4.894214630126953, -4.131383895874023, -2.022266387939453, -1.0494474172592163, -1.1988086700439453, -2.6329545974731445, 0.05129804089665413, -4.660510063171387, -0.8967994451522827, -2.258549928665161, -1.802286982536316, -1.6968477964401245, -1.7932871580123901, -2.5292296409606934, -1.7534565925598145, -3.3403868675231934, -0.9253813028335571, -2.3010048866271973, -1.2638598680496216, -1.2387075424194336, -0.040734414011240005, -2.0132577419281006, -1.6782728433609009, -0.2569505572319031, 0.9217413663864136, -2.002413749694824, -0.6130432486534119, 0.48643115162849426, -1.1137219667434692, -0.8444671034812927, -1.1574695110321045, -0.08551698923110962, 1.4662344455718994, -3.6057822704315186, 1.3055717945098877, -2.2806570529937744, 0.004436437040567398, 0.9250521659851074, -0.4877007305622101, 0.6005710959434509, -0.6104230284690857, -1.3253049850463867, 0.321970671415329, -0.7774056792259216, 1.120121717453003, 2.1561338901519775, -0.2598663568496704, -0.7015664577484131, 0.5452624559402466, 0.4589969515800476, -1.7789264917373657, -1.9475234746932983, -2.2627665996551514, -1.8027403354644775, -1.793903112411499, -0.7669637799263, -1.5272283554077148, -4.112431526184082, -6.88445520401001, -1.8373111486434937, -2.5002312660217285, -1.789937973022461, 0.6400154232978821, -1.5303689241409302, -0.6031690239906311, -1.5702120065689087, -0.187468484044075, -0.3362116813659668, -4.640526294708252, -1.7236292362213135, -0.42891374230384827, -1.1815162897109985, 1.0636907815933228, -0.2656785249710083, 0.32441914081573486, 3.2690725326538086, -34.40025329589844, 0.41740137338638306, -1.3427472114562988, -1.8935437202453613, -0.07210046797990799, -1.257354736328125, 0.42105773091316223, 1.9622278213500977, 1.8373973369598389, 1.4988397359848022, 0.5791566371917725, -6.353612899780273, -0.27011504769325256, -0.9749468564987183, -2.828953504562378, -2.065742254257202, -2.1755571365356445, -4.3603644371032715, -4.385867595672607, -6.798715591430664, -0.9942068457603455, -1.1383098363876343, -1.8002347946166992, -4.139078140258789, -5.653036594390869, -4.271299362182617, -2.0500035285949707, -1.0299122333526611, -1.319596529006958, -4.078281879425049, -0.09901869297027588, -4.635015964508057, -0.9073197841644287, -2.270519733428955, -1.9242812395095825, -1.7391963005065918, -1.891558289527893, -2.5714898109436035, -1.6749062538146973, -3.3198678493499756, -0.7976337671279907, -2.5387473106384277, -1.2916070222854614, -1.0383052825927734, -0.1292460858821869, -1.9439153671264648, -1.7040313482284546, -0.37775999307632446, 0.8713788390159607, -1.7951557636260986, -0.41710808873176575, 0.6332650780677795, 1.430885910987854, -0.8980161547660828, -1.199503779411316, -0.12392499297857285, 1.5348355770111084, -3.6775381565093994, 1.289231538772583, -2.3353352546691895, 0.09248685836791992, 0.7473977208137512, -0.5191354155540466, 0.7092427015304565, -0.551459550857544, -1.4764515161514282, 0.4311779737472534, -0.818794310092926, 1.1750246286392212, 1.8094141483306885, -0.28274527192115784, -0.7673657536506653, 0.4760637581348419, 0.6220453977584839, -0.4894423484802246, -1.8552812337875366, -2.0978188514709473, -1.9490512609481812, -1.575343132019043, -0.8947160243988037, -1.7066760063171387, -3.9449539184570312, -6.8630571365356445, -1.743622899055481, -2.6345927715301514, -1.8126083612442017, 0.7065228223800659, -2.7592875957489014, -0.8106955289840698, -1.7465633153915405, -1.0619277954101562, -0.34462061524391174, -4.518394470214844, -1.8728910684585571, -0.3283807039260864, -1.2613738775253296, 1.3888221979141235, -0.3492630422115326, 0.45158952474594116, 3.269859552383423, 1.7088007926940918, 2.451556444168091, -1.3519201278686523, -1.9614174365997314, -0.008374339900910854, -1.1711941957473755, 0.39905989170074463, -0.06875412911176682, 1.673877239227295, 1.9118486642837524, 0.5733628273010254, -2.568279266357422, -1.2159640789031982, -0.6716782450675964, -2.5906946659088135, -2.105297327041626, -2.012949228286743, -4.33719539642334, -4.386645317077637, -6.748504161834717, 0.44734546542167664, 0.2650229036808014, -1.7927244901657104, -4.137123107910156, -4.86408805847168, -4.295288562774658, -3.994318723678589, -1.0194958448410034, -1.2288086414337158, -3.8779234886169434, 0.20965246856212616, -4.6872782707214355, -0.7442327737808228, -2.458414316177368, -2.1241183280944824, -1.7859731912612915, -1.7468398809432983, -1.7682089805603027, -1.6021887063980103, -3.3703441619873047, -0.9675437211990356, -2.391298294067383, -1.3692113161087036, -1.0898878574371338, -0.16703927516937256, -2.0278801918029785, -1.6609057188034058, -0.2729266583919525, 0.9068354368209839, -2.001925468444824, -0.37908220291137695, 0.5717799663543701, -1.30225670337677, -0.815249502658844, -1.2591121196746826, 0.0038052527233958244, 1.5792746543884277, -3.538403034210205, 1.1771156787872314, -2.1983330249786377, 0.18195728957653046, 0.9563326835632324, -0.4344067871570587, 0.6829262971878052, -0.5312673449516296, -1.3887757062911987, 0.31381747126579285, -0.653171181678772, 0.9940149784088135, 2.108583688735962, -0.16697187721729279, -0.8684530854225159, 0.6122769117355347, 0.4479224681854248, -0.39230504631996155, -2.239649772644043, -2.040733575820923, -1.8034400939941406, -1.5750021934509277, -0.8075667023658752, -1.5260570049285889, -3.907365322113037, -7.087438583374023, -1.7769445180892944, -2.514227867126465, -2.75828218460083, -1.3614614009857178, -1.432160496711731, -0.5940631031990051, -1.5489791631698608, -0.2553326189517975, -0.3682858943939209, -4.589400291442871, -1.7366037368774414, -0.40904679894447327, -1.2989604473114014, 0.9858608841896057, -0.5643770694732666, 0.19531701505184174, 3.3128654956817627, 1.0682185888290405, 0.4756389856338501, 3.894681453704834, 1.0250746011734009, 1.9188525676727295]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (40, 50), 'etaBin': (1.54, 2.5)}}, 'et0_eta2': {'discriminator': {'threshold': -0.075000885128974903, 'nodes': [100, 5, 1], 'bias': [-0.04407104104757309, -0.0810713842511177, 0.05680200457572937, -0.031822316348552704, 0.014685048721730709, -0.271891713142395], 'weights': [-1.0825904607772827, 0.08574618399143219, 0.9685280323028564, 0.25779464840888977, 1.4009474515914917, -0.43996185064315796, -0.5787885785102844, -0.052533622831106186, 2.152944564819336, -4.60988712310791, -4.571747303009033, -3.3987250328063965, 0.8187448978424072, 0.24409186840057373, -1.5000301599502563, -2.578064441680908, 6.256258964538574, -0.26530393958091736, -0.3800651431083679, 1.0240007638931274, 1.2560677528381348, 0.32237425446510315, 0.9248688817024231, 0.5689820051193237, 4.2176594734191895, 0.4145246148109436, 0.008375607430934906, 1.1467556953430176, 2.8383400440216064, 0.7960429787635803, 1.509331226348877, 0.3867398202419281, 0.08516347408294678, 1.1665160655975342, 2.0155913829803467, 0.7269957661628723, 2.8648746013641357, 0.3785054087638855, 1.0710755586624146, 0.44012337923049927, -7.029890060424805, 2.7329320907592773, -0.4517747163772583, 2.704028606414795, 1.7207869291305542, 1.76518976688385, 0.31695756316185, 0.4686599671840668, 1.864015817642212, -0.2112739086151123, 1.531958818435669, -9.805472373962402, -7.812379360198975, 0.012495559640228748, 0.5575580596923828, 1.4924118518829346, 1.44475257396698, 0.7656540274620056, 0.21027854084968567, 0.021225228905677795, 0.27754437923431396, 0.0004881627392023802, 1.467686653137207, -0.016614526510238647, 0.43773579597473145, 1.5841753482818604, 0.9382981061935425, -0.1464185118675232, -0.8255245089530945, 1.0672740936279297, 0.8217244744300842, 0.5950704216957092, -0.27170273661613464, -0.296937495470047, 2.9902400970458984, 0.479889452457428, 0.01635497808456421, 0.4594772756099701, 1.3170560598373413, 1.3166279792785645, -4.464760780334473, -1.6882765293121338, -0.8037212491035461, 1.1366719007492065, 0.7525591850280762, -7.0844807624816895, 0.3426554203033447, 1.106463074684143, -1.1505635976791382, 0.41234174370765686, -0.11217062175273895, 0.38337114453315735, 1.154335379600525, -1.9204294681549072, 0.7371239066123962, -0.3465268313884735, 0.08321468532085419, -0.030556054785847664, -0.031579989939928055, -0.35611554980278015, -0.9876312613487244, 0.10274811089038849, 1.0551854372024536, 0.37982040643692017, 1.4573813676834106, -0.6407098770141602, -0.5639141201972961, 0.10327505320310593, 2.2927420139312744, -4.5257673263549805, -4.426496982574463, -3.3717570304870605, 0.8411870002746582, 0.25315651297569275, -1.698035478591919, -3.124276876449585, 6.366399765014648, -0.14681683480739594, -0.33744296431541443, 0.9182819128036499, 1.2642593383789062, 0.23908913135528564, 1.0396828651428223, 0.4190557599067688, 4.11634635925293, 0.5109344124794006, -0.053779978305101395, 1.3481312990188599, 2.7488715648651123, 0.9549916386604309, 1.531281590461731, 0.39701613783836365, 0.01831832528114319, 1.2805454730987549, 1.9067471027374268, 0.7213699221611023, 3.0208144187927246, 0.5273315906524658, 0.984556257724762, 0.49320197105407715, -7.039739608764648, 2.548867702484131, -0.3765135407447815, 2.599059581756592, 1.788646936416626, 1.898934006690979, 0.3848823606967926, 0.4087528586387634, 1.8734512329101562, -0.0959416925907135, 1.609128713607788, -9.783060073852539, -7.7851176261901855, 0.19969406723976135, 0.4252587854862213, 1.6623327732086182, 1.4855653047561646, 0.814243495464325, 0.29807761311531067, -0.022644948214292526, 0.18716299533843994, -0.09185656160116196, 1.3251649141311646, -0.1139320433139801, 0.46420544385910034, 1.4334721565246582, 1.0781512260437012, 0.031342972069978714, -0.8239216208457947, 1.1147432327270508, 0.8097687363624573, 0.5916090607643127, -0.1644834578037262, -0.2390330582857132, 2.99937105178833, 0.2348819226026535, -0.040052302181720734, 0.5412852764129639, 1.1846431493759155, 1.2704479694366455, -4.510382652282715, -1.5035237073898315, -0.822405219078064, 1.1230968236923218, 0.8845148682594299, -6.992668151855469, 0.49421584606170654, 1.0364357233047485, -1.2529572248458862, 0.4496068060398102, 0.01672779582440853, 0.25050511956214905, 1.1040409803390503, -1.8346953392028809, 0.7438300848007202, -0.3751390874385834, 0.021725764498114586, -0.12088722735643387, -0.12522420287132263, -0.42078670859336853, 0.40593743324279785, -0.17704273760318756, -2.5800063610076904, -0.6200281977653503, -0.5745964646339417, -0.1709720939397812, 0.1915697306394577, -0.10357870161533356, -0.31075340509414673, 3.0802440643310547, 7.903794765472412, 1.383229374885559, 1.0003013610839844, 0.42152512073516846, 0.5634909272193909, 0.962303638458252, -2.6268694400787354, 0.015338052064180374, 0.11794253438711166, -0.187285378575325, -3.4550161361694336, -0.3742278218269348, -0.3502424955368042, -0.4000864624977112, -1.87181556224823, -1.419228196144104, -0.24961507320404053, -3.085707664489746, -1.0063339471817017, -1.8244991302490234, -3.7415499687194824, -1.082822322845459, -0.5979400873184204, -3.151231288909912, -4.487706184387207, -1.944701075553894, -1.6603573560714722, -1.8000693321228027, -0.17634537816047668, -1.2092612981796265, -0.9449935555458069, -1.0295277833938599, -1.5545796155929565, -1.2223538160324097, -0.6605437994003296, -0.7603915333747864, -1.1740238666534424, -0.7833941578865051, -0.6020617485046387, 0.07888055592775345, -0.8712419271469116, 2.9096338748931885, 7.952542781829834, 0.0743514746427536, -0.33217012882232666, -0.45973896980285645, -0.5926423668861389, -0.25713425874710083, -1.5991075038909912, -0.2073005586862564, -1.2610282897949219, -0.42198652029037476, -0.41359448432922363, -0.35890793800354004, -1.1611835956573486, -0.2069760262966156, -0.2726447284221649, -0.0705200657248497, -0.16371753811836243, -0.17558065056800842, -0.22931239008903503, -0.10156021267175674, -0.09828787297010422, 0.15635733306407928, -6.191123008728027, -1.6424697637557983, -2.1052184104919434, -1.5590429306030273, -0.4421420991420746, -0.3700082004070282, 1.9565821886062622, 0.33755236864089966, -0.95201176404953, -0.17235925793647766, -0.43996310234069824, 3.0674614906311035, -1.3589973449707031, -0.6367796063423157, 0.6908778548240662, -1.4051241874694824, 0.1204921156167984, 1.5098772048950195, -3.6376779079437256, 0.16056931018829346, -0.0936564952135086, 0.4496389627456665, -0.02629782259464264, -0.08783216029405594, -0.019794583320617676, 0.001618462847545743, 0.9761450290679932, -0.055561479181051254, -1.1416538953781128, -0.3853769302368164, -1.513965129852295, 0.5668556690216064, 0.302071750164032, -0.061637625098228455, -2.1873176097869873, 4.628849506378174, 4.638221740722656, 3.6216931343078613, 1.3733007907867432, -0.2658552825450897, 1.5429216623306274, 2.6711924076080322, -6.0058112144470215, 0.3061431646347046, 0.27969062328338623, -1.1286944150924683, -1.2777042388916016, -0.23044545948505402, -0.8125728368759155, -0.4178599715232849, -4.178099632263184, -0.5654889345169067, -0.13899219036102295, -1.275926947593689, -2.6826772689819336, -0.9007846713066101, -1.6263715028762817, -0.3489578664302826, -0.030371999368071556, -1.2079277038574219, -1.8554635047912598, -0.6779713034629822, -4.139376163482666, -0.5931854248046875, -0.8874623775482178, -0.49628978967666626, 1.0718165636062622, -2.5306694507598877, 0.3706080913543701, -2.745999336242676, -1.790184497833252, -1.7904106378555298, -0.5145547389984131, -0.30139032006263733, -3.0778181552886963, 0.1586395800113678, -1.5348047018051147, 5.99743127822876, 7.641915798187256, -0.22821012139320374, -0.4714745283126831, -1.6166611909866333, -1.562677264213562, -0.8104075789451599, -0.2106080949306488, 0.006476747803390026, -0.431707501411438, -0.005110820755362511, -1.3908367156982422, -0.033923424780368805, -0.3585066795349121, -1.5972576141357422, -1.1322345733642578, 0.07311927527189255, -0.4280344843864441, -1.0599029064178467, -0.8081928491592407, -0.5103299021720886, 0.23274576663970947, 0.20392929017543793, -3.0005948543548584, -0.6365391612052917, 0.0015095829730853438, -0.4286399781703949, -1.284263014793396, -1.330533504486084, 4.446524143218994, 1.1311116218566895, 0.09046709537506104, -1.0766178369522095, -0.8885828852653503, 7.081045627593994, -0.3920170068740845, -1.1443006992340088, 1.102772831916809, -0.472776859998703, 0.30169478058815, -0.17559286952018738, -1.0941393375396729, 1.7821416854858398, -0.9212589263916016, 0.4484897553920746, 0.01548506785184145, -0.09181047230958939, 0.1414693146944046, 0.4962255358695984, -1.0334877967834473, 0.07781491428613663, 1.1460769176483154, 0.30784404277801514, 1.320994257926941, -0.49919629096984863, -0.2512543797492981, 0.10831945389509201, 2.0478789806365967, -4.505317687988281, -4.594081401824951, -3.527892589569092, 0.8108193874359131, 0.15681114792823792, -1.598739504814148, -2.5955898761749268, 6.39864444732666, -0.3007097840309143, -0.27232977747917175, 0.9647157192230225, 1.4248409271240234, 0.2729596197605133, 0.8721199631690979, 0.34965887665748596, 4.077643394470215, 0.5557665824890137, 0.053583815693855286, 1.2528311014175415, 2.727527379989624, 0.9207438230514526, 1.5947096347808838, 0.33100053668022156, 0.06567537784576416, 1.1861624717712402, 2.0139987468719482, 0.7745558023452759, 3.9312446117401123, 0.5401031970977783, 1.036202073097229, 0.4027394652366638, -7.002265930175781, 2.680999994277954, -0.3758254051208496, 2.7289979457855225, 1.5763626098632812, 1.7348488569259644, 0.31913086771965027, 0.47689637541770935, 1.929862380027771, -0.09270866215229034, 1.5254355669021606, -9.940582275390625, -7.787464618682861, 0.024363325908780098, 0.4464062750339508, 1.6232454776763916, 1.6031330823898315, 0.9539582133293152, 0.201005756855011, -0.1744878888130188, 0.3411921262741089, -0.04162665456533432, 1.4588932991027832, -0.015815282240509987, 0.2954772412776947, 1.569823980331421, 0.9250545501708984, -0.0902547836303711, 0.3614014685153961, 1.2554881572723389, 0.8420773148536682, 0.5306254029273987, -0.1407562494277954, -0.3198264241218567, 2.945493698120117, 0.7684943079948425, 0.080005943775177, 0.4330621659755707, 1.3119004964828491, 1.314406394958496, -4.630164623260498, -1.5067929029464722, -0.9357821345329285, 1.0014532804489136, 0.7030044794082642, -7.084412097930908, 0.33034592866897583, 1.2532033920288086, -1.2166136503219604, 0.3960300385951996, -0.3553300201892853, 0.22526171803474426, 0.9761221408843994, -1.7732036113739014, 0.9098100066184998, -0.3755049705505371, -0.028497174382209778, -0.1154387891292572, -0.09133943170309067, -0.32184547185897827, -0.5127127170562744, -0.7881003022193909, 0.5929464101791382, 0.7647581100463867, -0.4633060097694397]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (1.37, 1.54)}}, 'et4_eta3': {'discriminator': {'threshold': -0.36000080332159995, 'nodes': [100, 5, 1], 'bias': [0.06462695449590683, -0.12676197290420532, -0.05327867344021797, -0.12458591908216476, -0.02929820492863655, 0.4395279586315155], 'weights': [-1.4867814779281616, -1.4737091064453125, 0.844450056552887, 1.5732043981552124, 0.6019328236579895, -0.4373997449874878, -0.5268439650535583, 1.2225843667984009, -1.5791033506393433, -1.3404196500778198, -0.37639474868774414, 2.592952251434326, 0.6489744186401367, -0.5390294194221497, 2.801182508468628, 4.186042308807373, 1.5369982719421387, 3.385530471801758, 4.301487922668457, 3.444990396499634, 3.128727436065674, 1.4267210960388184, 1.3380502462387085, 3.8352210521698, 4.03884220123291, 3.417123556137085, 1.5704231262207031, 4.7366719245910645, 1.7156262397766113, -0.337830126285553, -0.2463470995426178, 3.733076333999634, 2.0827527046203613, 3.4395291805267334, 1.6618478298187256, 2.271916151046753, 1.433703064918518, -0.7758818864822388, 1.5254719257354736, 3.477954387664795, -1.267235517501831, 1.9360064268112183, 0.8179213404655457, 3.515212059020996, 0.20326341688632965, 1.2137004137039185, 1.4239284992218018, 1.738392949104309, 0.07549072057008743, 1.7007884979248047, 0.5368281602859497, -0.2083173394203186, -0.2131136655807495, -4.36929988861084, -1.907471776008606, -0.1919580101966858, -2.4573922157287598, 1.0268385410308838, -1.1203089952468872, 7.070017337799072, -0.13881118595600128, 0.7215918302536011, -1.300080418586731, 0.9581174254417419, -1.2448112964630127, 1.5979256629943848, -1.021296501159668, 1.8850929737091064, 1.729594349861145, 7.351315975189209, -2.1720261573791504, 4.964243412017822, -0.4282679855823517, -0.4487836956977844, 1.6107763051986694, 1.6064417362213135, 1.8531638383865356, 1.4907758235931396, 1.025588870048523, 1.2084702253341675, 1.0822110176086426, 1.6485376358032227, 6.506876468658447, 4.879627227783203, 2.8146398067474365, 1.2076873779296875, 1.7120426893234253, 1.5159088373184204, 0.18634159862995148, 1.2148019075393677, 0.336647629737854, 0.3901866376399994, 4.704002380371094, 2.0778651237487793, 0.29331091046333313, 1.7218950986862183, 0.1951432079076767, -0.3266952335834503, 0.2843090891838074, 1.1680628061294556, 1.6010924577713013, 1.6172492504119873, -0.8451579213142395, -1.6616193056106567, -0.5480712652206421, 0.4967135190963745, 0.5839541554450989, -1.2435401678085327, 1.639122486114502, 1.4536617994308472, 0.8924252986907959, -2.502986431121826, -0.6584173440933228, 0.5919974446296692, -2.688136339187622, -4.183643341064453, -1.7220592498779297, -3.4389805793762207, -4.238657474517822, -3.503734827041626, -3.1268930435180664, -1.5796105861663818, -1.5052632093429565, -3.872730016708374, -3.983173370361328, -3.5366408824920654, -1.5897138118743896, -4.627622604370117, -1.7220213413238525, 0.19923824071884155, 0.262792706489563, -3.628666639328003, -2.0813517570495605, -3.420935869216919, -1.6493909358978271, -2.213114023208618, -1.3593264818191528, 0.6032209396362305, -1.4911677837371826, -2.0726802349090576, 1.450044870376587, -1.7461060285568237, -0.8393234610557556, -3.34538197517395, -0.20262302458286285, -1.1185157299041748, -1.4939242601394653, -1.680585265159607, -0.27598610520362854, -1.7114967107772827, -0.5413006544113159, 0.006118231453001499, 0.053060561418533325, 4.440168380737305, 1.9099938869476318, 0.0841115191578865, 2.4119558334350586, -1.0400716066360474, 1.1249712705612183, -7.125352382659912, 0.2292049080133438, -0.704696774482727, 1.3456120491027832, -1.1085519790649414, 1.2788655757904053, -1.536393642425537, 1.1718889474868774, -2.0209789276123047, -1.598495602607727, -7.162876605987549, 2.1705310344696045, -5.220207214355469, 0.5644900798797607, 0.4294244647026062, -1.6114963293075562, -1.7119221687316895, -1.7808786630630493, -1.5579559803009033, -0.8310328722000122, -1.0944525003433228, 0.19997258484363556, -1.7006828784942627, -6.591492652893066, -4.871800422668457, -2.7927043437957764, -0.9788928031921387, -1.8071975708007812, -1.5429456233978271, -0.24970172345638275, -1.3173140287399292, -0.4225567877292633, -0.3986871838569641, -4.786027908325195, -2.1147027015686035, -0.9594298601150513, -1.7684777975082397, -0.412676066160202, 0.31834909319877625, -0.22456033527851105, -1.012269377708435, -133.3319854736328, 0.7500282526016235, -1.04212486743927, -5.753209590911865, -1.772415280342102, -0.5085403919219971, 0.9793993830680847, 4.756992340087891, 1.5842928886413574, 2.8646275997161865, 0.9690821766853333, -3.982877731323242, -0.6454582810401917, 1.8154902458190918, -2.6285903453826904, -3.281752824783325, -1.7247415781021118, 9.381003379821777, -4.36454439163208, 0.47222229838371277, -3.27756404876709, -1.0361080169677734, -1.6282318830490112, -2.890007495880127, -4.3262939453125, 5.245368480682373, 30.798059463500977, -4.717989921569824, -1.8360204696655273, 18.620315551757812, 1.6453514099121094, -3.6965060234069824, -2.125960350036621, -3.574266195297241, -1.5278217792510986, 8.578984260559082, -1.4894806146621704, 0.5837669372558594, -1.5354734659194946, -2.2052173614501953, 1.2544898986816406, -1.7368152141571045, 3.2383806705474854, -3.3198013305664062, -0.20314103364944458, 36.236717224121094, -1.4842288494110107, -1.7330299615859985, -0.2848369777202606, -1.5803918838500977, -0.8730565309524536, 1.9593693017959595, -0.5476393699645996, 4.369739532470703, 1.837645411491394, 0.12737376987934113, 2.434699058532715, -1.0143126249313354, 1.073431134223938, -7.206415176391602, 0.026276158168911934, -0.7369642853736877, 1.454508662223816, -0.9562530517578125, 1.3384836912155151, -1.5626505613327026, 1.1611621379852295, -1.8394544124603271, -1.628089427947998, -7.215399742126465, -0.8328399658203125, -5.198910236358643, 0.5378676652908325, 0.299236923456192, -1.571925163269043, -1.752135157585144, -1.939960241317749, -1.6952630281448364, -1.1344391107559204, -1.1983847618103027, 15.013886451721191, -1.5810015201568604, -2.1311440467834473, 2.483027696609497, -2.818328619003296, -1.1147847175598145, -1.5673705339431763, -1.5386836528778076, -61.90903091430664, -7.341132640838623, -0.6849504113197327, -2.770543098449707, 14.490680694580078, -2.344757080078125, -0.32797905802726746, -1.8134076595306396, -9.469379425048828, 0.4396365284919739, -0.5708122849464417, 1175.425537109375, -0.6392597556114197, 5.817916393280029, -0.7583734393119812, -1.6797935962677002, -0.6084758043289185, 0.49208471179008484, 0.37925252318382263, -1.281166434288025, 1.4826879501342773, 1.3099654912948608, 0.9481105804443359, -2.466290235519409, -0.25591522455215454, 0.5295944213867188, -2.845876693725586, -4.244900703430176, -1.8413976430892944, -3.353544235229492, -4.254318714141846, -3.648327350616455, -3.2965798377990723, -1.60770845413208, -1.539547324180603, -3.897989273071289, -4.200295925140381, -3.5161688327789307, -1.5999046564102173, -4.629602432250977, -1.8001389503479004, 0.3400377631187439, 0.20770108699798584, -3.6942813396453857, -1.8704400062561035, -3.6249916553497314, -1.4966779947280884, -2.187971591949463, -1.331571102142334, 0.7840662598609924, -1.494399905204773, -3.4661026000976562, 1.2672978639602661, -1.9300782680511475, -0.6854815483093262, -3.309452533721924, -0.21256285905838013, -1.1317399740219116, -1.5249943733215332, -1.6415632963180542, -0.1943846344947815, -1.506707787513733, -0.4104507267475128, 0.2074458748102188, 0.22047878801822662, 4.341631889343262, 1.8496493101119995, 0.27076441049575806, 2.3170735836029053, -1.11367928981781, 1.0733110904693604, -7.143605709075928, 0.05996796116232872, -0.49723702669143677, 1.3839823007583618, -1.0266321897506714, 0.6632851362228394, -1.5816642045974731, 1.042488932609558, -1.8211493492126465, -1.6957498788833618, -7.30482816696167, 2.2417476177215576, -5.263777732849121, 0.4748886227607727, 0.4238177239894867, -1.6097875833511353, -1.5732351541519165, -1.7961047887802124, -1.581592082977295, -0.8914350271224976, -1.0374106168746948, 0.14475391805171967, -1.6208686828613281, -6.5695343017578125, -4.996014595031738, -2.8021655082702637, -1.0248346328735352, -1.7940449714660645, -1.6252694129943848, -0.36168837547302246, -1.28688645362854, -0.4638928472995758, -0.4508695900440216, -5.0872039794921875, -2.0638904571533203, -0.931699275970459, -1.6916216611862183, -0.3978312015533447, 0.45317956805229187, -0.1839575320482254, -1.1039848327636719, 1.9617257118225098, 1.6389902830123901, -0.8699897527694702, -1.5998834371566772, -0.47336500883102417, 0.32016292214393616, 0.5577893853187561, -1.2908899784088135, 1.6202701330184937, 1.4410102367401123, 0.358812153339386, -2.5089657306671143, -0.7544220685958862, 0.48537203669548035, -2.641774892807007, -4.277714252471924, -1.6127872467041016, -3.270237445831299, -4.33588171005249, -3.503051996231079, -3.3448410034179688, -1.3215751647949219, -0.953072726726532, -3.757697105407715, -4.174436092376709, -3.2933425903320312, -1.4677386283874512, -4.575158596038818, -1.8304145336151123, 0.1457415372133255, 0.18272513151168823, -3.783085584640503, -1.947263240814209, -3.5277891159057617, -1.4989421367645264, -2.245493173599243, -1.3996042013168335, 0.7301384210586548, -1.3280394077301025, -2.129436492919922, 1.3069052696228027, -1.75732421875, -0.6596307754516602, -3.3413944244384766, -0.31757453083992004, -1.0883784294128418, -1.5811158418655396, -1.68881094455719, -0.13395372033119202, -1.6528756618499756, -0.5463045835494995, 0.17333471775054932, 0.20440131425857544, 4.364204406738281, 1.8462419509887695, 0.04675350338220596, 2.4032280445098877, -1.1763029098510742, 0.6204546093940735, -7.208596706390381, 0.09103894978761673, -0.7689123749732971, 1.3510886430740356, -1.1080331802368164, 1.348832130432129, -1.6236079931259155, 1.1374080181121826, -1.9865670204162598, -1.5614207983016968, -7.277379035949707, 2.144817352294922, -5.323642253875732, 0.4416712820529938, 0.3412749767303467, -1.4677971601486206, -1.7046772241592407, -1.8935762643814087, -1.5041370391845703, -0.8366202116012573, -1.0677515268325806, -1.0486068725585938, -1.7086403369903564, -6.6407341957092285, -4.853827476501465, -2.8789336681365967, -1.0603193044662476, -1.8825640678405762, -1.6039913892745972, -0.37384241819381714, -1.3188132047653198, -0.4087521731853485, -0.3929712474346161, -5.079066276550293, -2.0130181312561035, -0.199309840798378, -1.767380714416504, -0.39557260274887085, 0.2972075045108795, -0.1916777640581131, -0.9607219099998474, -1.3500920534133911, 2.688656806945801, 0.8741428256034851, 0.8419037461280823, 4.304064750671387]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (50, 500000), 'etaBin': (1.54, 2.5)}}, 'et0_eta0': {'discriminator': {'threshold': -0.21500081121921538, 'nodes': [100, 12, 1], 'bias': [-0.3243821859359741, -0.022949250414967537, 0.06397953629493713, -0.002450532279908657, 0.005139805842190981, -0.0042592985555529594, -0.1272035837173462, -0.01745532639324665, -0.057310499250888824, -0.10154696553945541, 0.01067082304507494, -0.02071106806397438, -0.026636380702257156], 'weights': [1.476061463356018, 0.057953573763370514, -0.061145782470703125, 0.14903037250041962, 0.05627449229359627, 0.12229415774345398, 0.0437023751437664, 0.23709996044635773, 0.21900202333927155, 0.3448837399482727, 0.0644509568810463, -1.284635066986084, -5.035192489624023, -0.043930720537900925, -0.490546315908432, -0.7604197859764099, 0.054398056119680405, -0.20822304487228394, -0.8825193047523499, -0.41976767778396606, -0.32447633147239685, -0.22125662863254547, -0.15850138664245605, -0.24071381986141205, -0.3704829812049866, -0.362745076417923, -0.2589312791824341, -0.11356930434703827, -0.16233879327774048, -0.24333973228931427, -0.23491203784942627, 0.016969546675682068, -0.1014983132481575, -0.22767505049705505, -0.13504700362682343, 0.12819024920463562, -0.09571896493434906, 0.05516155809164047, -0.12372250854969025, -0.14374038577079773, -0.17545878887176514, 0.031179307028651237, -0.2246602326631546, -0.006212448701262474, 0.4229028522968292, -0.10946831107139587, -0.019336272031068802, 0.006436899304389954, -0.025292545557022095, 0.0565677285194397, 0.5393238067626953, 0.010842016898095608, -0.11572227627038956, -0.010478798300027847, 0.02785000391304493, -0.12484199553728104, 0.29947125911712646, 0.012082966044545174, 0.15753582119941711, 0.07837500423192978, 0.15220965445041656, 0.3800061047077179, -0.01225293893367052, 0.05631566792726517, 0.4082483947277069, 0.08196637034416199, 0.1384999006986618, -0.06263206899166107, 0.2716931700706482, 0.5301321148872375, 0.05661932751536369, 0.18994684517383575, 0.060955509543418884, -0.11557963490486145, -0.02318572625517845, -0.09796342253684998, -0.26194578409194946, 0.05938266962766647, -0.06903216987848282, 0.033798396587371826, -0.766826331615448, -0.19958138465881348, -0.18872560560703278, 0.01909077726304531, 0.03044808842241764, -0.06817609816789627, -0.13110919296741486, -0.012401021085679531, -0.1713392734527588, -0.21668341755867004, 0.012201621197164059, 0.4037587344646454, -0.14945973455905914, -0.1395430713891983, 0.06031619384884834, 0.38285258412361145, -0.2974977493286133, -0.12648186087608337, 0.20011746883392334, 0.10430724918842316, -0.6960152387619019, -0.2775358557701111, 0.1363564282655716, 0.18876704573631287, 0.16436830163002014, -0.14093901216983795, 0.09610968083143234, -0.1800735890865326, -0.7320963740348816, -1.1285581588745117, -0.11085426807403564, 0.6199904084205627, 2.050849199295044, 3.8321921825408936, 2.064218282699585, 2.286722421646118, 1.4917384386062622, 1.842494249343872, 2.0157387256622314, 1.0776647329330444, 1.0539902448654175, 0.9616613388061523, 0.9284083247184753, 1.0583244562149048, 0.9447614550590515, 1.046964406967163, 0.7982513904571533, 0.7098509669303894, 0.863567590713501, 0.8808420300483704, 0.8805064558982849, 0.25724586844444275, 0.36333155632019043, 0.9393158555030823, 0.6228321194648743, 0.37539443373680115, 0.6231546401977539, 0.247482031583786, 0.39974692463874817, 0.38513579964637756, 0.506837785243988, 0.44895729422569275, 0.6238045692443848, 0.4085644483566284, -0.5285047888755798, 0.34321993589401245, 0.3186812996864319, 0.4267951548099518, 0.4548929035663605, 0.31742143630981445, -0.19146175682544708, -0.01741754822432995, 0.5441179871559143, 0.31392115354537964, 0.320030152797699, 0.5049025416374207, -0.028435463085770607, 0.09931579977273941, -0.05825544148683548, 0.11842112243175507, 0.1963658332824707, -0.357530802488327, 0.12685859203338623, -0.19431133568286896, -0.46653425693511963, 0.3576080799102783, 0.2375250607728958, 0.24967795610427856, -0.19622279703617096, -0.651342511177063, 0.2566276490688324, -0.05432011932134628, -0.062122780829668045, -0.01816791109740734, 0.3294052183628082, 0.42870306968688965, 0.6888091564178467, 0.5112172961235046, 0.3980710208415985, 0.28258341550827026, 2.864884376525879, 1.0171176195144653, 0.8973293900489807, 0.4066636562347412, 0.4845094680786133, 0.501609206199646, 0.27183276414871216, 0.4392940402030945, 0.9660190939903259, 0.842970073223114, 0.29989534616470337, -0.10744970291852951, 1.1572062969207764, 0.46984249353408813, 0.28639930486679077, -0.20800787210464478, 0.8500248193740845, 0.4979040026664734, 0.24565085768699646, -0.13411100208759308, 0.6587658524513245, 0.3341616690158844, -0.31965118646621704, -0.1291426420211792, -0.1039436012506485, 0.09522631764411926, -0.09256931394338608, 0.17307069897651672, 0.878302276134491, 1.1097573041915894, 0.11843667924404144, -0.780601441860199, -2.0414466857910156, -3.766209602355957, -1.871741771697998, -2.2838282585144043, -1.6353451013565063, -1.8062189817428589, -1.9007903337478638, -1.1669193506240845, -1.0442146062850952, -1.0744746923446655, -0.70192950963974, -0.9318003058433533, -0.7778177261352539, -0.9121586680412292, -0.9268052577972412, -0.8662547469139099, -0.9678456783294678, -0.930668294429779, -0.8388561606407166, -0.39635470509529114, -0.35807496309280396, -0.8350146412849426, -0.7014111876487732, -0.3082309067249298, -0.5654641389846802, -0.32241711020469666, -0.340485543012619, -0.4271754026412964, -0.5996658802032471, -0.38121673464775085, -0.5805191993713379, -0.49109143018722534, 0.4162992238998413, -0.35344594717025757, -0.3992149829864502, -0.436668336391449, -0.4587709903717041, -0.2821115255355835, 0.09143092483282089, 0.022399021312594414, -0.38038790225982666, -0.4334152936935425, -0.4344814419746399, -0.415460467338562, 0.04464549571275711, -0.09638110548257828, -0.00780858937650919, -0.2073897421360016, -0.026212023571133614, 0.3322162330150604, -0.10899668186903, 0.1515868753194809, 0.5464217066764832, -0.17238718271255493, -0.2121865153312683, -0.3770309388637543, 0.09445513039827347, 0.48999956250190735, -0.4061352014541626, 0.07177530229091644, -0.030583752319216728, 0.15788069367408752, -0.3935731053352356, -0.634501576423645, -0.5583630800247192, -0.40997612476348877, -0.36782220005989075, -0.4019736349582672, -2.9742817878723145, -1.0826107263565063, -1.0108041763305664, -0.34852731227874756, -0.4269449710845947, -0.4836242198944092, -0.3701973855495453, -0.3664204478263855, -0.9441653490066528, -0.7609328031539917, -0.3055655360221863, 0.0812799483537674, -1.1000967025756836, -0.46806764602661133, -0.3543839752674103, 0.3440917432308197, -0.6621334552764893, -0.5414609909057617, -0.21703045070171356, 0.1872454583644867, -0.7800435423851013, -0.26391303539276123, 0.2687060832977295, 0.14706704020500183, 0.10998667776584625, -0.10566559433937073, -0.00527771795168519, -0.31274887919425964, -0.8602349162101746, -1.0804035663604736, -0.12237152457237244, 0.7297987937927246, 2.231590747833252, 3.8236396312713623, 1.8765668869018555, 2.218198537826538, 1.5936576128005981, 1.9169617891311646, 2.1039249897003174, 0.9597241282463074, 1.1086180210113525, 1.004084587097168, 0.7974360585212708, 0.9986209273338318, 0.8849788308143616, 0.8981264233589172, 0.9357025027275085, 0.9319033622741699, 0.9834273457527161, 0.7466726899147034, 0.9445087313652039, 0.2888241708278656, 0.4901118576526642, 0.887897789478302, 0.6136507391929626, 0.19943992793560028, 0.6060624718666077, 0.38367411494255066, 0.3388911187648773, 0.48767632246017456, 0.4434056878089905, 0.3775225579738617, 0.5883793830871582, 0.498860239982605, -0.6094395518302917, 0.36791694164276123, 0.3394908308982849, 0.4487156271934509, 0.5549932718276978, 0.1786375641822815, -0.03970607742667198, 0.13637468218803406, 0.4542858898639679, 0.3339504599571228, 0.41318264603614807, 0.34875234961509705, -0.1564885377883911, 0.08213863521814346, 0.008575341664254665, 0.10929201543331146, 0.07375779002904892, -0.22763368487358093, 0.15024155378341675, 0.029834937304258347, -0.635840117931366, 0.3727417588233948, 0.2866503596305847, 0.33003586530685425, -0.292678564786911, -0.6640088558197021, 0.17276149988174438, 0.033568210899829865, -0.1452905535697937, -0.1365237981081009, 0.2597862780094147, 0.5123768448829651, 0.5960836410522461, 0.4633513391017914, 0.5046104788780212, 0.2890225648880005, 2.9260005950927734, 1.0276273488998413, 1.0584967136383057, 0.37141573429107666, 0.5158037543296814, 0.508152425289154, 0.32820868492126465, 0.34160280227661133, 0.956307053565979, 0.7184001207351685, 0.1844894289970398, -0.01977946236729622, 1.168821930885315, 0.6351172924041748, 0.3504367172718048, -0.12327994406223297, 0.7826497554779053, 0.6101318597793579, 0.14397403597831726, -0.29887765645980835, 0.723616361618042, 0.25893381237983704, -0.30390241742134094, -0.18394224345684052, -0.0011842958629131317, 0.19550587236881256, 0.008074487559497356, 0.22621819376945496, 0.8383589386940002, 0.9687522053718567, -0.014054263941943645, -0.8114946484565735, -2.2685179710388184, -3.687333345413208, -1.8694920539855957, -2.25789475440979, -1.4992057085037231, -1.9338481426239014, -1.8828308582305908, -1.1564518213272095, -0.999512255191803, -0.9706010818481445, -0.9313433170318604, -0.9694126844406128, -0.8566136956214905, -1.0584187507629395, -0.784536600112915, -0.8348600268363953, -0.9686130285263062, -0.7070528864860535, -0.9538553357124329, -0.3339445888996124, -0.45528101921081543, -0.9326247572898865, -0.6954519152641296, -0.30490538477897644, -0.5611538290977478, -0.46350178122520447, -0.5306990146636963, -0.46445584297180176, -0.6350771188735962, -0.4572320878505707, -0.6470425128936768, -0.5068849921226501, 0.41750097274780273, -0.41931775212287903, -0.38742950558662415, -0.29768016934394836, -0.3747560679912567, -0.2540116608142853, -0.005796564277261496, -0.0955575704574585, -0.49509480595588684, -0.5135501027107239, -0.34334731101989746, -0.362275630235672, 0.06511737406253815, -0.10966382175683975, 0.07512755692005157, -0.1860388219356537, -0.03367023542523384, 0.30179962515830994, -0.2719210684299469, 0.01747116446495056, 0.4167458415031433, -0.32770150899887085, -0.09628990292549133, -0.2367144227027893, 0.2576958239078522, 0.6623708009719849, -0.3237297534942627, -0.011700491420924664, 0.06413056701421738, 0.17541424930095673, -0.2461612969636917, -0.536953330039978, -0.6084061861038208, -0.49747201800346375, -0.37795478105545044, -0.36963239312171936, -2.786975383758545, -0.9466710686683655, -0.8497671484947205, -0.522612988948822, -0.3659266531467438, -0.4781096875667572, -0.4927422106266022, -0.2832837700843811, -0.9536038041114807, -0.7994208335876465, -0.2122483104467392, 0.03496243804693222, -1.1701340675354004, -0.5265145897865295, -0.28813809156417847, 0.14604005217552185, -0.8775339126586914, -0.605994701385498, -0.2954024076461792, 0.16882073879241943, -0.7774041891098022, -0.1178220883011818, 0.22547976672649384, 0.1690535545349121, 0.15536841750144958, -0.29932695627212524, -0.03597563877701759, -0.10570986568927765, -0.8147822022438049, -1.076404094696045, 0.02478604018688202, 0.6669730544090271, 2.1209115982055664, 3.795520782470703, 1.8743782043457031, 2.13991379737854, 1.6914101839065552, 1.7487924098968506, 2.0167899131774902, 1.0183645486831665, 1.0455210208892822, 1.11996328830719, 0.7865516543388367, 0.8750813603401184, 0.8187900185585022, 0.936396062374115, 0.8437780141830444, 0.8014704585075378, 0.9436918497085571, 0.885571300983429, 0.9232723116874695, 0.25422343611717224, 0.5256718397140503, 0.8227117657661438, 0.6017442345619202, 0.2802416980266571, 0.5966557264328003, 0.3428051173686981, 0.3773047626018524, 0.5244446992874146, 0.6559674739837646, 0.563808023929596, 0.5616024732589722, 0.3792630136013031, -0.45197808742523193, 0.33967095613479614, 0.39106473326683044, 0.45449888706207275, 0.3592917323112488, 0.14236736297607422, 0.025437576696276665, 0.12701091170310974, 0.5290206074714661, 0.38731324672698975, 0.5297143459320068, 0.36218366026878357, -0.06395639479160309, 0.10603252798318863, -0.10770198702812195, 0.1613713800907135, -0.04068173095583916, -0.36586424708366394, 0.16843944787979126, -0.02052471414208412, -0.5898191332817078, 0.3797563910484314, 0.06766174733638763, 0.3673762381076813, -0.3272448778152466, -0.5951536893844604, 0.24615316092967987, -0.03786547854542732, -0.13957352936267853, -0.08918934315443039, 0.31821122765541077, 0.42612648010253906, 0.6158890724182129, 0.3239102363586426, 0.4248531758785248, 0.3625611960887909, 2.7510218620300293, 1.0123035907745361, 0.8732120394706726, 0.5261968970298767, 0.5547390580177307, 0.43870770931243896, 0.49714115262031555, 0.47235339879989624, 0.9114752411842346, 0.7698146104812622, 0.11789002269506454, -0.15053117275238037, 1.077889323234558, 0.5874332189559937, 0.16860392689704895, -0.1621113121509552, 0.7412704825401306, 0.4587494730949402, 0.14176379144191742, -0.12539425492286682, -0.579647958278656, -0.38935571908950806, 0.12167588621377945, 0.15145407617092133, 0.0600559338927269, 0.04652192071080208, -0.006256299093365669, 0.1282905489206314, -0.16438427567481995, -0.113800048828125, 0.08819019794464111, 2.362645387649536, 2.040235996246338, 0.6736499071121216, 0.2812625467777252, 0.4025460183620453, 0.00039687901153229177, 0.22943401336669922, 0.4316480755805969, 0.10370149463415146, 0.09645375609397888, 0.29061609506607056, 0.16679520905017853, 0.20591211318969727, 0.056572336703538895, 0.1707373559474945, 0.2876901626586914, -0.007451578509062529, 0.22167544066905975, 0.19639211893081665, 0.24014900624752045, 0.03732027858495712, 0.13819825649261475, 0.2038734257221222, 0.07922736555337906, 0.016163617372512817, 0.11822336912155151, 0.12362080067396164, 0.21042616665363312, 0.2035510241985321, 0.15610383450984955, 0.15003079175949097, 0.04464350640773773, 0.1710120290517807, -0.14172954857349396, 0.023574458435177803, -0.012666396796703339, 0.18968015909194946, -0.008056697435677052, 0.10037846118211746, 0.08987661451101303, -0.07269002497196198, 0.1226225420832634, 0.09563713520765305, 0.12487387657165527, 0.13163724541664124, 0.07762188464403152, 0.06325860321521759, 0.06127370521426201, 0.0795314759016037, -0.03956534340977669, -0.03349811211228371, -0.08067768812179565, 0.09203643351793289, -0.19249092042446136, 0.011392530985176563, 0.1043589785695076, 0.09499963372945786, -0.12877480685710907, -0.17455501854419708, 0.07403942197561264, 0.0576593279838562, 0.19663161039352417, 0.33649685978889465, 0.21683286130428314, 0.07682272046804428, 0.22730880975723267, 0.1339457482099533, 0.009706462733447552, -0.048624444752931595, 0.38573452830314636, 0.04370135813951492, 0.10157392919063568, -0.025286376476287842, 0.14711278676986694, 0.19015805423259735, 0.11559094488620758, 0.1336848884820938, 0.10356315225362778, 0.15963514149188995, -0.008706903085112572, 0.1580125093460083, 0.016266142949461937, 0.09074185788631439, 0.08938904851675034, 0.01862986758351326, 0.20890820026397705, 0.18977190554141998, 0.18820568919181824, 0.049352794885635376, -0.7806790471076965, -0.23438364267349243, 0.14554771780967712, 0.09212977439165115, 0.027323439717292786, -0.1795697957277298, -0.030876850709319115, -0.1481524109840393, -0.760424792766571, -1.1755577325820923, -0.10541558265686035, 0.6398243308067322, 2.0786359310150146, 3.635143518447876, 2.067805528640747, 2.346752166748047, 1.6585654020309448, 1.880583643913269, 1.9749646186828613, 1.0171561241149902, 1.133100986480713, 0.9676198959350586, 0.7912762761116028, 0.897345244884491, 0.9583345055580139, 0.9731187224388123, 0.7820274829864502, 0.8727594017982483, 0.9315875768661499, 0.8790619969367981, 1.0047755241394043, 0.4724777042865753, 0.41589975357055664, 0.837573230266571, 0.5062357783317566, 0.27869340777397156, 0.7179790139198303, 0.2380809485912323, 0.3466125428676605, 0.4632721543312073, 0.438789427280426, 0.38961848616600037, 0.710131824016571, 0.3566570580005646, -0.5497071146965027, 0.4447776675224304, 0.33844923973083496, 0.33722302317619324, 0.35933974385261536, 0.28477299213409424, -0.1063450425863266, 0.20133990049362183, 0.5057849287986755, 0.4971030056476593, 0.3894655108451843, 0.491787314414978, -0.1542949676513672, 0.140877366065979, -0.14365963637828827, 0.2957767844200134, 0.028755055740475655, -0.3070200979709625, 0.28425130248069763, -0.10196131467819214, -0.5294090509414673, 0.3867524266242981, 0.2215283066034317, 0.3122559189796448, -0.1881251484155655, -0.485280841588974, 0.36670801043510437, 0.12092411518096924, -0.19059531390666962, -0.05695551633834839, 0.21754713356494904, 0.5142231583595276, 0.7399312257766724, 0.4074784219264984, 0.3823760151863098, 0.24980266392230988, 2.9636974334716797, 1.074893832206726, 0.8481115698814392, 0.478789359331131, 0.4902724027633667, 0.5101810097694397, 0.3424863815307617, 0.3308432102203369, 1.004491925239563, 0.8160499334335327, 0.12408070266246796, -0.029177628457546234, 1.169668197631836, 0.47259026765823364, 0.22181475162506104, -0.24677099287509918, 0.8702714443206787, 0.42897742986679077, 0.23883172869682312, -0.0941210612654686, -0.7464067339897156, -0.1393120437860489, 0.30386295914649963, 0.06628911942243576, 0.016536641865968704, -0.254507839679718, -0.03825397044420242, -0.22446735203266144, -0.774318277835846, -1.1725398302078247, -0.05262186378240585, 0.7752832770347595, 2.062148332595825, 3.6173818111419678, 1.9630950689315796, 2.2362475395202637, 1.569177269935608, 1.8511412143707275, 1.9206682443618774, 0.954825222492218, 1.081829309463501, 0.8732966184616089, 0.7028389573097229, 0.9882843494415283, 0.8494143486022949, 0.9445117115974426, 0.9234167337417603, 0.7813320755958557, 0.8666919469833374, 0.8231660723686218, 0.8291475176811218, 0.44714823365211487, 0.4455345571041107, 0.8096457123756409, 0.6892251372337341, 0.30815285444259644, 0.6257227659225464, 0.4243081510066986, 0.5339103937149048, 0.3445960581302643, 0.6384410858154297, 0.39555492997169495, 0.7375269532203674, 0.30566170811653137, -0.550922691822052, 0.35684967041015625, 0.4111183285713196, 0.4807831645011902, 0.5070168375968933, 0.31376034021377563, -0.014503933489322662, 0.06359174102544785, 0.5199306607246399, 0.5111125111579895, 0.3320494294166565, 0.3863998055458069, -0.17949503660202026, 0.23546284437179565, -0.10630717873573303, 0.21629539132118225, 0.057924315333366394, -0.21113428473472595, 0.16882818937301636, -0.03254755213856697, -0.45083826780319214, 0.2201589047908783, 0.08624336123466492, 0.2879609763622284, -0.18969903886318207, -0.6674262881278992, 0.2343495935201645, 0.11666262149810791, -0.13148455321788788, -0.17209984362125397, 0.39633241295814514, 0.5815616846084595, 0.5470340251922607, 0.42488759756088257, 0.3591296970844269, 0.43875575065612793, 1.948797583580017, 0.9059339761734009, 0.8886678814888, 0.5393306612968445, 0.32810941338539124, 0.5039650797843933, 0.28703731298446655, 0.3776465058326721, 0.8586753606796265, 0.8085424304008484, 0.3255603015422821, -0.13518378138542175, 0.5526973009109497, 0.5480127930641174, 0.17460809648036957, -0.32457220554351807, 0.7896354794502258, 0.48064878582954407, 0.14689065515995026, -0.15502357482910156, -15.491171836853027, -4.285859107971191, 0.0818476751446724, 0.06650038808584213, 0.03016006015241146, -0.081988625228405, 0.08372359722852707, 0.06274610012769699, -0.13087241351604462, -0.19910715520381927, 3.3757717609405518, 39.55893325805664, 2.093914270401001, -176.65133666992188, -4.331258773803711, 0.39432811737060547, -0.10075069963932037, -3.6958420276641846, 0.37659895420074463, 0.2783397138118744, 0.1598002016544342, 0.21591122448444366, -0.3677313029766083, 0.24481381475925446, 0.2627587616443634, 0.12696927785873413, 0.13358008861541748, -0.01974961906671524, 0.19124282896518707, 0.25373348593711853, 0.13908451795578003, 0.0008843100513331592, 0.07936114817857742, 0.09220340847969055, 0.1904328465461731, 0.13175538182258606, 0.11042188107967377, 0.07629276812076569, 0.16529527306556702, -0.0060999030247330666, 0.02589152194559574, 0.18454609811306, 0.2563488185405731, 0.20759092271327972, -0.01230043824762106, 0.19658254086971283, 0.021490851417183876, 0.20630313456058502, 0.03463979810476303, 0.07174990326166153, 0.03506484255194664, 0.051517553627491, 0.06359807401895523, 0.15722902119159698, 0.03541490063071251, 0.014536981470882893, 0.09417340159416199, 0.044150520116090775, -0.08035457134246826, 0.8098222017288208, 5.259992030914873e-05, -0.01029662974178791, 0.13987113535404205, 0.05670633167028427, -0.04850941523909569, 0.051377393305301666, 0.10235633701086044, 0.005661094095557928, 0.09524820744991302, -0.12393156439065933, -0.0378715880215168, -0.5669868588447571, -0.40579789876937866, -0.2606159448623657, -0.04482203722000122, 0.038945335894823074, -0.15142029523849487, 0.034491658210754395, -0.015906868502497673, 0.022592587396502495, 0.4919695556163788, 0.41574862599372864, 0.26817673444747925, -0.002132260473445058, 0.12034596502780914, 0.015913166105747223, 0.008873587474226952, 0.11072759330272675, 0.14224855601787567, 0.008609726093709469, -0.05536558851599693, 0.005231568124145269, -0.018855849280953407, 0.20781876146793365, 0.1079775020480156, 0.025684602558612823, 0.11940726637840271, 0.06137339770793915, 0.04815657436847687, -0.9021568894386292, -0.880332887172699, -0.2813597023487091, 0.11267052590847015, 0.09328419715166092, 0.08167222887277603, -0.2526177763938904, -0.003816338023170829, -0.18739047646522522, -0.863169252872467, -1.0840320587158203, -0.06257447600364685, 0.6662363409996033, 2.093428611755371, 3.6898958683013916, 2.071664571762085, 2.1934731006622314, 1.6108354330062866, 1.8452820777893066, 2.0900933742523193, 1.1813876628875732, 1.0497792959213257, 1.1331278085708618, 0.6984289288520813, 0.914137601852417, 0.9053791165351868, 1.0205188989639282, 0.940129816532135, 0.9280211329460144, 0.9807019829750061, 0.9307714104652405, 0.9677285552024841, 0.4357527196407318, 0.4068205952644348, 1.0050190687179565, 0.7080274224281311, 0.3384552299976349, 0.5750148892402649, 0.2305757701396942, 0.35322532057762146, 0.45492783188819885, 0.53663170337677, 0.4528823792934418, 0.7420092821121216, 0.483097106218338, -0.41787874698638916, 0.4667041599750519, 0.29779791831970215, 0.407510906457901, 0.33215752243995667, 0.3730563521385193, -0.109189972281456, 0.10464361310005188, 0.5269121527671814, 0.41522321105003357, 0.5469120740890503, 0.4414403438568115, -0.2025863528251648, 0.21906358003616333, -0.15255723893642426, 0.31041210889816284, 0.1170356422662735, -0.3667773902416229, 0.24834677577018738, 0.01885516382753849, -0.4079081416130066, 0.31527531147003174, 0.16464368999004364, 0.2769801616668701, -0.2532947361469269, -0.5217404365539551, 0.33690035343170166, -0.08377234637737274, -0.17760571837425232, -0.06869559735059738, 0.3766525685787201, 0.42167961597442627, 0.5127557516098022, 0.5397555828094482, 0.3739357590675354, 0.2328018993139267, 2.946880340576172, 1.0774153470993042, 0.9717760682106018, 0.46458330750465393, 0.39710190892219543, 0.5541382431983948, 0.264120876789093, 0.4267430901527405, 0.8890705108642578, 0.743122935295105, 0.23032748699188232, -0.014709069393575191, 1.0502794981002808, 0.5195984840393066, 0.3432987630367279, -0.2584777772426605, 0.8596128225326538, 0.4797530770301819, 0.20566365122795105, -0.18376195430755615, -0.8227311968803406, -0.20698490738868713, 0.11102037131786346, 0.22080208361148834, 0.1153373271226883, -0.2897360324859619, 0.12594637274742126, -0.23577368259429932, -0.8286423087120056, -1.0136382579803467, -0.08974894881248474, 0.7163418531417847, 2.1168737411499023, 3.793184995651245, 2.0460703372955322, 2.3263978958129883, 1.6736890077590942, 1.8304005861282349, 1.9066585302352905, 0.9959879517555237, 1.1238120794296265, 0.9346550703048706, 0.8507928252220154, 0.8582316040992737, 0.9514577984809875, 0.8473272919654846, 0.7740100622177124, 0.7148613333702087, 0.965130090713501, 0.8125954270362854, 1.0081979036331177, 0.46507373452186584, 0.37572628259658813, 0.8053709864616394, 0.6264010071754456, 0.32764407992362976, 0.5767160058021545, 0.2904122769832611, 0.5325918197631836, 0.47844672203063965, 0.6541452407836914, 0.3666097819805145, 0.5771685242652893, 0.38559582829475403, -0.41357266902923584, 0.5147339105606079, 0.34592801332473755, 0.4873802661895752, 0.37800514698028564, 0.2250511646270752, 0.023746708407998085, -0.013935789465904236, 0.4142044186592102, 0.46205636858940125, 0.35973113775253296, 0.39222392439842224, -0.09047795832157135, 0.1042354479432106, -0.1764659732580185, 0.16848084330558777, 0.15030142664909363, -0.3375096619129181, 0.14844581484794617, -0.019485371187329292, -0.5909953117370605, 0.37221550941467285, 0.12829771637916565, 0.3150736689567566, -0.3749918043613434, -0.6171873807907104, 0.40479397773742676, -0.0752357691526413, -0.12085483968257904, -0.1529383510351181, 0.27498093247413635, 0.4954458475112915, 0.7150106430053711, 0.4734967052936554, 0.2890981435775757, 0.24244461953639984, 2.971099853515625, 0.883664608001709, 0.8501023650169373, 0.3935048580169678, 0.49203982949256897, 0.48357340693473816, 0.38229358196258545, 0.39532411098480225, 0.942328691482544, 0.8241564035415649, 0.2859242558479309, -0.19443035125732422, 1.148388385772705, 0.49751755595207214, 0.3637045919895172, -0.3307400047779083, 0.8817672729492188, 0.4765219986438751, 0.1777738481760025, -0.2705914378166199, 0.05752190575003624, -1.150236964225769, 0.5735300183296204, -1.1392220258712769, 0.22553712129592896, -0.6983524560928345, -2.0947089195251465, -1.6132698059082031, -0.5439276099205017, -0.27180683612823486, -1.7030823230743408, -0.43344739079475403]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (0, 0.8)}}, 'et3_eta0': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 10, 1], 'bias': [0.17728745937347412, -0.060267046093940735, -0.18031713366508484, 0.19339519739151, -0.2021235227584839, -0.2422117292881012, 0.02458428218960762, 0.0455373078584671, 0.19666767120361328, 0.1951281577348709, -0.38630449771881104], 'weights': [-2.239042282104492, -1.193054437637329, 0.10130614787340164, 0.077732153236866, -0.28948864340782166, -0.48709824681282043, -0.27328553795814514, -0.7119665741920471, -1.5452057123184204, -1.4948227405548096, 2.6356019973754883, 1.3895624876022339, 1.1060211658477783, 0.8897459506988525, 1.6279979944229126, 2.031764030456543, 1.9524110555648804, 1.950697660446167, 0.2668675184249878, 1.9286677837371826, 2.2022855281829834, 1.8675689697265625, 1.3760188817977905, 1.4287655353546143, 1.7971867322921753, 1.014933466911316, 1.4421981573104858, 1.2080477476119995, 1.2991358041763306, 0.8171337842941284, 0.6002821326255798, 0.42710310220718384, 1.1112200021743774, 1.1269630193710327, 2.4265713691711426, 1.1673288345336914, 0.4597588777542114, 0.8000677824020386, 0.948357343673706, 1.1512888669967651, 2.4464528560638428, 1.4949381351470947, 0.533879280090332, -1.5922576189041138, 0.2776532769203186, 0.855198085308075, 0.5342828631401062, 1.6617522239685059, 0.42463386058807373, 0.46751052141189575, 0.6457004547119141, -1.5743060111999512, -0.04708711430430412, -1.1245516538619995, 0.08592380583286285, 1.3257657289505005, -0.9139286875724792, -0.951816201210022, 0.63743656873703, 1.365053653717041, -0.48002371191978455, -0.8110402226448059, -0.12207528948783875, -0.1744014024734497, -0.6583820581436157, -0.6415829658508301, 0.16945123672485352, -0.6192817687988281, -0.4287709593772888, 0.5661042332649231, -0.3378031551837921, -0.4615362584590912, -0.494212806224823, -0.24629426002502441, 0.3412192761898041, 0.6793802976608276, 0.9677519798278809, 0.9163610339164734, 0.703278660774231, 0.3944285809993744, 0.8558233976364136, 0.9388306140899658, 2.641338348388672, 1.7916686534881592, 0.644843578338623, 1.081906795501709, 0.5050879716873169, 1.9577882289886475, 2.2299489974975586, 1.9200313091278076, 0.6415445804595947, -0.11577116698026657, 1.7925642728805542, 1.6948580741882324, 0.7407084107398987, -0.06291315704584122, 2.3198184967041016, 1.1895947456359863, -0.9326055645942688, -0.2404146045446396, 2.2779293060302734, 1.1723291873931885, -0.07709205895662308, 0.009872540831565857, 0.35524341464042664, 0.3591274917125702, 0.3421315848827362, 0.8148862719535828, 1.4112972021102905, 1.3282899856567383, -2.795855760574341, -1.3158165216445923, -0.9573688507080078, -1.0057073831558228, -1.7129524946212769, -2.1079723834991455, -1.985476016998291, -2.1140975952148438, -0.136284738779068, -1.9993411302566528, -2.3148820400238037, -1.9802287817001343, -1.3858450651168823, -1.4189133644104004, -1.6426162719726562, -1.1204235553741455, -1.346848487854004, -1.1531518697738647, -1.3088210821151733, -1.179398775100708, -0.6055530905723572, -0.6614584922790527, -1.0318186283111572, -1.1138473749160767, -2.309666872024536, -1.0168190002441406, -0.5687865018844604, -0.8607608079910278, -0.940894603729248, -1.1477817296981812, -2.4272351264953613, -1.4012854099273682, -0.4624536335468292, 1.5136843919754028, -0.09189184010028839, -0.8745547533035278, -1.0733500719070435, -1.7171263694763184, -0.3609464168548584, -0.49171313643455505, -0.5253045558929443, 1.7718403339385986, 0.15666791796684265, 0.9886773228645325, -0.18354475498199463, -1.3080577850341797, 0.9190080165863037, 1.0279908180236816, -0.5590051412582397, -1.3638322353363037, 0.40405648946762085, 0.6377573013305664, 0.15249820053577423, 0.18366572260856628, 0.7446582317352295, 0.7830826044082642, -0.2556442320346832, 0.6023577451705933, 0.5154051780700684, -0.3983910083770752, 0.3185587227344513, 0.32094255089759827, 0.3294515311717987, 0.3042007386684418, -0.3139403164386749, -0.6984218955039978, -1.3539637327194214, -1.032212734222412, -0.7718667984008789, -0.4775051474571228, -0.7494340538978577, -0.8928504586219788, -2.5885422229766846, -1.8221418857574463, -0.7289097905158997, -1.0671120882034302, -0.5120259523391724, -2.042602777481079, -2.547106981277466, -1.842767357826233, -0.47869452834129333, 0.13617964088916779, -2.1420276165008545, -1.50803804397583, -0.7052081227302551, 0.05322765186429024, -2.237316608428955, -0.9938442707061768, 0.8821194171905518, 0.16310741007328033, 2.1447434425354004, 1.0728535652160645, -0.13696448504924774, -0.05550730228424072, 0.19970948994159698, 0.27732881903648376, 0.25448402762413025, 0.7809370160102844, 1.4348810911178589, 1.310713768005371, -2.7845609188079834, -1.2118386030197144, -0.9166501760482788, -2.270514965057373, -1.476441740989685, -0.8001417517662048, -1.9898992776870728, -1.9654734134674072, -0.1848532259464264, -1.9239118099212646, -2.275127649307251, -1.9608579874038696, -1.4868172407150269, -1.6291639804840088, -1.723827838897705, -1.001381516456604, -1.2864340543746948, -1.2287296056747437, -1.3363977670669556, -0.794121503829956, -0.6423551440238953, -0.5582156181335449, -1.2088571786880493, -1.204245686531067, -2.2827398777008057, -1.1020257472991943, -0.49409157037734985, -0.9277572631835938, -0.8136351704597473, -1.0432268381118774, -2.5055317878723145, -1.256455659866333, -0.5008126497268677, 1.462856650352478, -0.23493452370166779, -0.9232950210571289, -0.6957864165306091, -1.6569700241088867, -0.5079548954963684, -0.5465513467788696, -0.6366112232208252, 1.701859474182129, 0.1274765282869339, 1.023290753364563, -0.15832042694091797, -1.4247366189956665, 0.8257716298103333, 1.093299388885498, -0.5974026918411255, -1.2377538681030273, 0.33323556184768677, 0.6493145227432251, 0.11781392246484756, 0.18269553780555725, 0.6720931529998779, 0.781604528427124, -0.34857335686683655, 0.5982115268707275, 0.4406513571739197, -0.6109530925750732, 0.4252433478832245, 0.4147861897945404, 0.43512752652168274, 0.3663524389266968, -0.5108449459075928, -0.6952983736991882, -1.1685101985931396, -0.9947712421417236, -0.7148631811141968, -0.4257887303829193, -0.7605547904968262, -0.940877377986908, -2.54469633102417, -1.868729829788208, -0.7485997676849365, -1.058110237121582, -0.42840108275413513, -2.1492533683776855, -2.37595272064209, -1.7107268571853638, -0.4529905617237091, 0.07569878548383713, -1.997704029083252, -1.5101165771484375, -0.7729349732398987, 0.1242036297917366, -2.2477755546569824, -1.1482243537902832, 0.9732744097709656, 0.32478398084640503, -2.1450037956237793, -1.1404597759246826, 0.014158740639686584, -0.020100193098187447, -0.23917531967163086, -0.44033604860305786, -0.30000045895576477, -0.7670972943305969, -1.4926031827926636, -1.305226445198059, 2.685429811477661, 1.216978907585144, 1.067989468574524, 0.8069314956665039, 1.5168771743774414, 1.9856197834014893, 1.8579005002975464, 1.9841488599777222, 0.11744345724582672, 2.0995750427246094, 2.1469924449920654, 1.938354253768921, 1.532765507698059, 1.6629221439361572, 1.813986897468567, 1.075127124786377, 1.392306923866272, 1.0991307497024536, 1.2994121313095093, 0.8540873527526855, 0.5601438879966736, 0.5102548599243164, 1.2119313478469849, 1.2631114721298218, 2.4230542182922363, 1.0549194812774658, 0.37923571467399597, 0.7586725950241089, 0.7696542739868164, 1.1345311403274536, 2.6058168411254883, 1.3772258758544922, 0.6079716086387634, -1.4751144647598267, 0.34056025743484497, 0.8070067167282104, 0.609471321105957, 1.6413116455078125, 0.42105668783187866, 0.6567086577415466, 0.5327335596084595, -1.653010368347168, -0.050537388771772385, -1.0919348001480103, 0.23021310567855835, 1.32795250415802, -0.8816784024238586, -1.1208522319793701, 0.5418692827224731, 1.2058699131011963, -0.3486722707748413, -0.6833118200302124, -0.18694405257701874, -0.20577266812324524, -0.657939076423645, -0.7211319208145142, 0.2891044616699219, -0.6881989240646362, -0.5385521650314331, 0.5182172656059265, -0.43464115262031555, -0.4231164753437042, -0.6709752082824707, -0.25787681341171265, 0.5009713172912598, 0.828959047794342, 1.1714119911193848, 0.8878676295280457, 0.5689829587936401, 0.3310777246952057, 0.7530944347381592, 0.9550017714500427, 2.7627170085906982, 1.948923110961914, 0.7047944664955139, 1.0841410160064697, 0.6756921410560608, 2.1105499267578125, 2.3265812397003174, 1.7316349744796753, 0.6462854146957397, -0.15122170746326447, 1.99532949924469, 1.6235671043395996, 0.6850496530532837, -0.12313885986804962, 2.15781307220459, 0.9901554584503174, -0.79831463098526, -0.2487647384405136, 2.318676233291626, 1.2051165103912354, 0.016452468931674957, 0.030725371092557907, 0.29274752736091614, 0.35086843371391296, 0.3077310025691986, 0.7247107625007629, 1.523887038230896, 1.4791914224624634, -2.736750364303589, -1.430783987045288, -0.9411048889160156, -1.0433337688446045, -1.532468557357788, -2.0924367904663086, -2.1113338470458984, -2.032477855682373, -0.2753092050552368, -2.058124542236328, -2.238680124282837, -1.9064738750457764, -1.5010687112808228, -1.6562058925628662, -1.8657268285751343, -1.0471060276031494, -1.4882447719573975, -1.3173631429672241, -1.3543518781661987, -0.8708300590515137, -0.5150277018547058, -0.6512885689735413, -1.1491857767105103, -1.1725527048110962, -2.293598175048828, -1.1983673572540283, -0.392975777387619, -0.8812519311904907, -0.970319926738739, -1.1021558046340942, -2.539600133895874, -1.3694462776184082, -0.5296359062194824, 1.4154243469238281, -0.310099333524704, -1.0040279626846313, -0.5231863260269165, -1.6038367748260498, -0.406640887260437, -0.46852391958236694, -0.4686395525932312, 1.8045070171356201, 0.010837312787771225, 0.9279595017433167, -0.08683158457279205, -1.4342236518859863, 0.9337668418884277, 0.9225844144821167, -0.6066074967384338, -1.151829481124878, 0.39342761039733887, 0.6785211563110352, 0.3597167730331421, 0.053507912904024124, 0.728875994682312, 0.7635947465896606, -0.32505154609680176, 0.7602272033691406, 0.4732668995857239, -0.49506449699401855, 0.279278963804245, 0.4092167317867279, 0.4421418011188507, 0.4406158924102783, -0.3217693269252777, -0.7668841481208801, -1.1708629131317139, -0.8821460604667664, -0.729198694229126, -0.3309440314769745, -0.8189537525177002, -1.0362927913665771, -2.5962555408477783, -1.7947170734405518, -0.6902950406074524, -1.0340635776519775, -0.6129263639450073, -1.987069845199585, -2.215005874633789, -1.748450756072998, -0.4539339244365692, 0.04778668284416199, -2.0020923614501953, -1.5182080268859863, -0.6809839010238647, 0.1724814474582672, -2.2697594165802, -1.0368678569793701, 0.9345167279243469, 0.33130133152008057, 2.144519567489624, 1.0889544486999512, -0.09744448214769363, 0.07499998062849045, 0.20698653161525726, 0.4883233606815338, 0.391111820936203, 0.93660968542099, 1.4492250680923462, 1.4098538160324097, -2.6955175399780273, -1.3490216732025146, -1.0756964683532715, -0.9678946137428284, -1.5755923986434937, -0.9260223507881165, -1.979748249053955, -2.006340503692627, -0.1477576494216919, -2.0643367767333984, -2.2879626750946045, -2.006572723388672, -1.4852737188339233, -1.6509864330291748, -1.7501575946807861, -1.1281912326812744, -1.3503042459487915, -1.2975503206253052, -1.1861628293991089, -0.9324530363082886, -0.6094515919685364, -0.6543434262275696, -1.0849491357803345, -1.1388517618179321, -2.2553892135620117, -1.2169792652130127, -0.4638415575027466, -0.7567497491836548, -1.0190273523330688, -1.0056623220443726, -2.481522560119629, -1.3798611164093018, -0.5934018492698669, 1.5739578008651733, -0.24730555713176727, -0.8688960671424866, -0.4644274413585663, -1.65216064453125, -0.4873929023742676, -0.5242351293563843, -0.5260884761810303, 1.7025573253631592, 0.09705090522766113, 1.128327488899231, -0.18647438287734985, -1.474462628364563, 0.8110279440879822, 1.0083045959472656, -0.722978949546814, -1.3484010696411133, 0.3560481071472168, 0.802780270576477, 0.1571776419878006, 0.08327765762805939, 0.6448144912719727, 0.6021802425384521, -0.3168061673641205, 0.6082123517990112, 0.43926411867141724, -0.5384664535522461, 0.22667023539543152, 0.43037864565849304, 0.6303468942642212, 0.3213287591934204, -0.37712201476097107, -0.7585886716842651, -1.1521053314208984, -0.8758272528648376, -0.7663147449493408, -0.3958512246608734, -0.8654335141181946, -0.8888355493545532, -2.521090507507324, -1.9970052242279053, -0.5365056991577148, -1.055628776550293, -0.6134313344955444, -2.00691819190979, -2.212327718734741, -1.7751946449279785, -0.4283324182033539, 0.01599796861410141, -1.9016767740249634, -1.6922330856323242, -0.6859153509140015, 0.18592292070388794, -2.3631749153137207, -1.0364668369293213, 0.7988559603691101, 0.20096497237682343, -2.2798359394073486, -0.9982129335403442, 0.14484696090221405, 0.058334507048130035, -0.24039840698242188, -0.36558279395103455, -0.21348002552986145, -0.8744270205497742, -1.4827383756637573, -1.4441452026367188, 2.7260162830352783, 1.2946815490722656, 0.9623924493789673, 0.974850058555603, 1.51039457321167, 2.1397788524627686, 2.0888113975524902, 2.111521005630493, 0.18752995133399963, 2.000131607055664, 2.2795708179473877, 1.739831566810608, 1.3394826650619507, 1.6208863258361816, 1.6451220512390137, 1.1405341625213623, 1.260148048400879, 1.310970425605774, 1.1956318616867065, 1.052588701248169, 0.6919853091239929, 0.5477901697158813, 1.0776972770690918, 1.2666066884994507, 2.262777805328369, 1.233924150466919, 0.4730463922023773, 0.9439457654953003, 0.8279562592506409, 0.9791718125343323, 2.393134832382202, 1.4605515003204346, 0.5147533416748047, -1.5413330793380737, 0.11887224018573761, 0.9663402438163757, 1.0797563791275024, 1.605398178100586, 0.5854249596595764, 0.5479366183280945, 0.6564112901687622, -1.7207872867584229, -0.1490982472896576, -0.9621780514717102, 0.19452688097953796, 1.3195611238479614, -0.8738262057304382, -1.099992275238037, 0.4820856750011444, 1.2972530126571655, -0.3631128668785095, -0.6268166303634644, -0.3341735601425171, -0.09541554749011993, -0.595929741859436, -0.7696031332015991, 0.2904965877532959, -0.7193057537078857, -0.4173148274421692, 0.5623487830162048, -0.4206360876560211, -0.4989962875843048, -0.3482714593410492, -0.3525504171848297, 0.3502817153930664, 0.7050169110298157, 1.1553555727005005, 0.8329162001609802, 0.6682993173599243, 0.608733594417572, 0.8484053611755371, 0.9189615845680237, 2.5287792682647705, 1.9301106929779053, 0.5394763946533203, 1.0197595357894897, 0.6329258680343628, 2.140395164489746, 2.4269795417785645, 1.8881759643554688, 0.6782927513122559, 0.02659289352595806, 2.1969492435455322, 1.598191499710083, 0.71418696641922, -0.0780780091881752, 2.3423802852630615, 1.0362517833709717, -0.8106425404548645, -0.20199988782405853, -2.2078311443328857, -1.0486295223236084, 0.08000613003969193, -0.05598746985197067, -0.1640249788761139, -0.32660695910453796, -0.3216648995876312, -0.9226858019828796, -1.5902694463729858, -1.4917333126068115, 2.743290424346924, 1.335413932800293, 0.9270409345626831, 0.9063587188720703, 1.654326319694519, 2.030198335647583, 1.9371541738510132, 1.9938161373138428, 0.26860201358795166, 1.9185068607330322, 2.3014047145843506, 1.9614020586013794, 1.5339189767837524, 1.5303282737731934, 1.735044240951538, 1.025425910949707, 1.3128609657287598, 1.2879351377487183, 1.4011987447738647, 1.2297163009643555, 0.661037266254425, 0.5798875093460083, 1.2024052143096924, 1.168814778327942, 2.42602801322937, 1.1895310878753662, 0.41222772002220154, 0.7535437345504761, 0.9807790517807007, 1.0562971830368042, 2.4006195068359375, 1.3851735591888428, 0.6346132159233093, -1.5671972036361694, 0.22047770023345947, 0.9846572279930115, 0.9454964995384216, 1.5533435344696045, 0.48403453826904297, 0.49274617433547974, 0.524734616279602, -1.80234694480896, 0.06958520412445068, -1.085220456123352, 0.2678837478160858, 1.3826919794082642, -0.8665017485618591, -0.9742083549499512, 0.5201785564422607, 1.26466965675354, -0.3033871650695801, -0.6176689863204956, -0.3366625905036926, -0.15645626187324524, -0.6730332374572754, -0.6068395376205444, 0.18305981159210205, -0.6252965927124023, -0.4429503083229065, 0.6097378730773926, -0.24749943614006042, -0.27167239785194397, -0.37826335430145264, -0.3050284683704376, 0.3062669634819031, 0.7746275067329407, 1.2191916704177856, 0.9001162648200989, 0.6878582239151001, 0.5731820464134216, 0.8624178767204285, 1.0523186922073364, 2.6571428775787354, 1.9173321723937988, 0.5480315685272217, 0.976004421710968, 0.43780383467674255, 2.158034324645996, 2.5132133960723877, 1.733149528503418, 0.6613456010818481, -0.07283436506986618, 2.049067258834839, 1.5807583332061768, 0.5517159700393677, -0.07113222032785416, 2.2422335147857666, 1.0118186473846436, -0.7374804019927979, -0.3297822177410126, -2.175553560256958, -1.1985993385314941, 0.07332075387239456, 0.021346617490053177, -0.3300497233867645, -0.25863024592399597, -0.17544278502464294, -0.7952801585197449, -1.5064650774002075, -1.385896921157837, 2.6337473392486572, 1.304810881614685, 0.9117859601974487, 1.0363479852676392, 1.6349717378616333, 1.9729249477386475, 2.1186742782592773, 1.9894551038742065, 0.30509769916534424, 1.9368107318878174, 2.3146684169769287, 1.8927338123321533, 1.4047926664352417, 1.490464448928833, 1.75087308883667, 1.1552612781524658, 1.4223501682281494, 1.2775908708572388, 1.3859087228775024, 0.9964785575866699, 0.6788200736045837, 0.575339674949646, 1.0307259559631348, 1.1754900217056274, 2.2640278339385986, 1.0483067035675049, 0.4824575185775757, 0.9896638989448547, 1.0003074407577515, 1.2147537469863892, 2.490678071975708, 1.2907373905181885, 0.5105671882629395, -1.4879711866378784, 0.21871095895767212, 0.8368341326713562, 0.5817559957504272, 1.5140950679779053, 0.4470527768135071, 0.5511883497238159, 0.5082119107246399, -1.7247977256774902, 0.06378090381622314, -0.9789692759513855, 0.2514275312423706, 1.3882944583892822, -0.8823153376579285, -1.0745110511779785, 0.5152118802070618, 1.2291442155838013, -0.42539942264556885, -0.6004307270050049, -0.3640444874763489, -0.1982484757900238, -0.6535419225692749, -0.7917993068695068, 0.2808682322502136, -0.5897175073623657, -0.6436878442764282, 0.47517508268356323, -0.24679943919181824, -0.37793126702308655, -0.5350465774536133, -0.43289899826049805, 0.5311357975006104, 0.8332191109657288, 1.0170798301696777, 0.8994541764259338, 0.7114859819412231, 0.46820077300071716, 0.9246200919151306, 1.0638461112976074, 2.562593698501587, 1.9693078994750977, 0.661144495010376, 1.1706914901733398, 0.49095994234085083, 2.0036778450012207, 2.1940133571624756, 1.7857164144515991, 0.5535497665405273, -0.09505709260702133, 1.8668205738067627, 1.6191902160644531, 0.7396007180213928, 0.01820875145494938, 2.3482308387756348, 1.0456078052520752, -0.8239447474479675, -0.17262275516986847, -0.1570029854774475, -0.30454376339912415, -0.11810807883739471, -0.012160603888332844, -0.1602475494146347, 0.009688081219792366, -0.22344590723514557, -0.08508329838514328, -0.055638670921325684, 0.027916520833969116, 1.3883978128433228, 0.8419553637504578, 0.604651689529419, 0.6455225944519043, -0.01491620671004057, 0.24911291897296906, 0.18244722485542297, 0.07595661282539368, -0.17563095688819885, 0.03616087883710861, 0.26147356629371643, 0.13462717831134796, 0.08592566102743149, 0.10849546641111374, 0.07942968606948853, 0.023789335042238235, 0.020618518814444542, 0.11601622402667999, -0.041020870208740234, -0.057366784662008286, -0.018283290788531303, 0.010939449071884155, 0.061094630509614944, 0.13172531127929688, 0.05412779003381729, 0.13239683210849762, 0.029915839433670044, -0.03913268819451332, 0.03614918887615204, -0.027741020545363426, 0.07831506431102753, -0.026448508724570274, 0.05860540643334389, -0.2783336043357849, -0.008596600033342838, 0.13391059637069702, -0.06457118690013885, 0.02984980121254921, -0.09440506249666214, -0.054244816303253174, -0.010101713240146637, -0.30560997128486633, -0.20492151379585266, -0.25943583250045776, 0.03756161779165268, 0.0475594587624073, -0.11881260573863983, -0.24812346696853638, -0.09469559043645859, 0.12125609815120697, -0.12497956305742264, -0.09155207127332687, -0.1283242404460907, 0.04938923567533493, -0.14584395289421082, -0.09356189519166946, 0.04735855013132095, -0.23610953986644745, 0.001409954740665853, -0.07452401518821716, -0.13415883481502533, -0.21019898355007172, 0.029680661857128143, -0.02904488705098629, -0.07434059679508209, -0.08405172824859619, -0.08609213680028915, 0.017704444006085396, -0.00887321773916483, -0.08505752682685852, 0.10295527428388596, 0.1559147834777832, 0.18057377636432648, 0.2034745216369629, -0.1067788377404213, -0.01611076109111309, -0.07507006078958511, 0.19650134444236755, 0.1453283727169037, 0.07884165644645691, -0.014847823418676853, 0.03448435291647911, 0.007493128534406424, 0.1800888031721115, 0.09988660365343094, -0.061529431492090225, 0.14850415289402008, 0.09273742139339447, -0.10822104662656784, 0.10528768599033356, -1.7289971113204956, 1.0254331827163696, 1.036848783493042, -1.0040441751480103, 2.7050065994262695, 1.0240970849990845, -1.2022963762283325, -1.1089030504226685, -1.0786373615264893, -0.049769964069128036]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (40, 50), 'etaBin': (0, 0.8)}}, 'et4_eta0': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 7, 1], 'bias': [-0.04682574048638344, -0.08617614209651947, 0.20550568401813507, 0.19406697154045105, -0.21780766546726227, -0.14207829535007477, -0.19644320011138916, -0.4111674726009369], 'weights': [3.058222532272339, -0.11194922029972076, 0.035943593829870224, -0.7757505774497986, 0.07118203490972519, -0.09140380471944809, 0.2142840027809143, 0.3084720969200134, 3.741539239883423, 2.846857786178589, -23.705419540405273, -2.217923164367676, -3.789524793624878, 6.113155841827393, -1.0452487468719482, -0.30597636103630066, -0.44204625487327576, -0.41467300057411194, -0.3544802665710449, -0.2849993407726288, -0.4855339527130127, -0.4296742379665375, -0.316491037607193, -0.5878586173057556, -0.4117034375667572, -0.4559156894683838, -0.38594603538513184, -0.0028064127545803785, -3.4092721939086914, -0.19013607501983643, 8.469882011413574, -0.11551237106323242, -1.1934882402420044, -0.6451283097267151, -0.15799158811569214, 0.230536550283432, -0.1870790719985962, -0.20149420201778412, -0.03712010011076927, -0.06004518270492554, -0.15890927612781525, -0.3119009733200073, -0.2208530604839325, -0.09368983656167984, -0.03259018063545227, -0.16843222081661224, -0.4838895797729492, -0.2368321269750595, -0.020008714869618416, 0.006714432034641504, 0.3447405993938446, -0.37682273983955383, 0.025721082463860512, -0.0037106380332261324, 0.03084147348999977, 0.12326698750257492, 0.08658303320407867, -0.047322701662778854, -0.044342804700136185, -0.1000499501824379, 0.011086884886026382, 0.05750685930252075, 1.5009475946426392, -0.3275568187236786, 0.23978331685066223, 0.12135636806488037, 14.254684448242188, 0.13094894587993622, 0.29169443249702454, -0.11389230936765671, -0.060511261224746704, 0.7684271931648254, 0.4076651334762573, 0.21494433283805847, -0.8374203443527222, -0.08702822029590607, -0.1917855441570282, -0.0933770164847374, -0.002842595800757408, 0.8212772607803345, 1.4939647912979126, 0.033795006573200226, -0.3374331295490265, -7.199451923370361, -0.2523188292980194, -0.14858418703079224, -0.02545495145022869, -0.2519879937171936, -0.2895655930042267, -0.501137375831604, -0.11993192136287689, 0.034077778458595276, -0.2932177484035492, -0.5695431232452393, -0.14869928359985352, -0.03629862517118454, -0.6153274178504944, -0.5390393137931824, 0.07262600213289261, -0.3199878931045532, 3.8441638946533203, 2.4829163551330566, -0.26871541142463684, -0.8806520104408264, 0.09902488440275192, -0.015863578766584396, 0.04607203230261803, -0.1474648118019104, 1.769394040107727, 1.810459852218628, -2.1421632766723633, -0.47937875986099243, -1.7101706266403198, -2.3814663887023926, -1.507400393486023, 0.2453577071428299, -0.9946631789207458, -0.9898926019668579, -1.0422345399856567, -1.0190954208374023, -1.0885716676712036, -1.0190953016281128, -0.7978494763374329, -1.138378381729126, -0.9015890955924988, -1.0785750150680542, -1.139174222946167, -0.5206763744354248, -1.209172010421753, -0.5813487768173218, -0.47889435291290283, -0.6585498452186584, -0.9243745803833008, -0.8175743818283081, -0.4532160460948944, 0.496810644865036, -0.47903749346733093, -0.672505259513855, -0.45675018429756165, -0.586637020111084, -0.36931079626083374, -1.2034589052200317, -0.38565999269485474, -0.3632654845714569, -0.5101311802864075, -0.2804872989654541, -0.5031045079231262, -0.4227074980735779, -0.15543816983699799, -0.23727214336395264, 0.8670980334281921, -1.1379660367965698, -0.3012160062789917, -0.19568713009357452, -0.1657724529504776, -0.19995617866516113, -0.3173958957195282, -0.26098230481147766, -0.2027474045753479, -0.2685406506061554, -0.12593881785869598, -0.20002315938472748, 0.31118521094322205, -1.1010000705718994, 0.362888902425766, 0.22763827443122864, 0.04347231239080429, 0.13150164484977722, 0.45144176483154297, -0.09309958666563034, -0.08833667635917664, 1.302908182144165, 0.16498632729053497, 0.2480601817369461, -0.9275625944137573, -0.6184854507446289, -0.6614977121353149, -0.6341808438301086, -0.4455365240573883, -0.061971455812454224, -0.5405353903770447, -0.670965313911438, -1.1627663373947144, -0.9610299468040466, -0.6288802027702332, -0.5787298679351807, -0.4981994330883026, -0.45428627729415894, -1.0223252773284912, -1.3182083368301392, -0.3163299262523651, -0.08467867970466614, -0.861793041229248, -0.6871806383132935, -0.3416394889354706, -0.12184478342533112, -1.5149272680282593, -1.1164722442626953, -0.16802158951759338, 0.015504078939557076, 3.6298203468322754, 2.2275190353393555, -0.981661319732666, -1.5638165473937988, 0.8214496970176697, -0.5503222942352295, 0.06743296980857849, 1.7082005739212036, 1.903743863105774, 1.9553890228271484, -1.9765180349349976, -3.019707202911377, -1.7605977058410645, -2.564491033554077, -2.147373914718628, 0.5959938168525696, -5.082260608673096, -4.647099494934082, -5.259606838226318, -5.12030553817749, -5.1186347007751465, -4.634576320648193, -3.6494760513305664, -5.623584270477295, -4.171816825866699, -5.107388496398926, -5.15177583694458, -2.693830728530884, -12.755818367004395, -2.7550582885742188, -2.427621841430664, -2.6396641731262207, -6.116861343383789, -4.335421562194824, -2.5281879901885986, 2.070563554763794, -1.891847848892212, -2.806384325027466, -2.6311497688293457, -2.2443137168884277, -2.0492849349975586, -5.445554256439209, -2.0076398849487305, -1.4045981168746948, -2.261333703994751, -1.442292332649231, -1.8760515451431274, -2.143193006515503, -1.1561247110366821, -0.4909752309322357, 4.346169471740723, -5.302811145782471, -0.9942522048950195, -1.0937047004699707, -1.446998119354248, -1.045389175415039, -1.1076384782791138, -0.8765107989311218, -0.7879534959793091, -1.090978980064392, -0.8969172239303589, -0.6372650861740112, 1.583371877670288, -5.118905544281006, 1.5666515827178955, 1.1148627996444702, 0.5236160755157471, 0.15286563336849213, 1.5849872827529907, -0.115245021879673, -1.1538535356521606, 6.115447998046875, 0.4133511185646057, 0.12399254739284515, -1.1436381340026855, -2.8712241649627686, -2.7044293880462646, -2.7658567428588867, -1.4567821025848389, -1.2862217426300049, -0.638632595539093, -3.1346116065979004, -5.393614768981934, -5.492956161499023, -2.6360185146331787, -2.5395565032958984, -2.088763475418091, -1.862412691116333, -5.033935546875, -5.098400115966797, -1.4891976118087769, -0.11286056786775589, -4.410672187805176, -3.9915692806243896, -1.8804373741149902, -0.4776649475097656, -7.639400482177734, -5.817543983459473, -0.47120505571365356, -0.14676909148693085, 3.7647016048431396, 2.2664897441864014, -0.8277937173843384, -1.5396820306777954, 0.7850982546806335, -0.7172222137451172, -0.0029119609389454126, 1.617307424545288, 1.9747254848480225, 1.8899439573287964, -1.7579938173294067, -2.979426383972168, -1.8452677726745605, -2.6823441982269287, -2.1170928478240967, 0.7532058358192444, -4.998748302459717, -4.28693962097168, -5.187532424926758, -5.077785491943359, -5.217937469482422, -4.488471984863281, -3.5019326210021973, -5.719718933105469, -4.103728294372559, -5.223949432373047, -5.266420364379883, -2.680941343307495, -5.460350513458252, -2.8738937377929688, -1.9959862232208252, -2.856679916381836, -5.214505195617676, -4.245157718658447, -2.482255220413208, 1.954346776008606, -1.9555160999298096, -2.844082832336426, -2.6627228260040283, -2.249976396560669, -2.1391794681549072, -5.342377185821533, -1.9597060680389404, -1.5938774347305298, -2.262721300125122, -1.6072357892990112, -1.6617052555084229, -2.3042099475860596, -0.9879289269447327, -0.4569021463394165, 4.486571311950684, -5.247201919555664, -1.0572209358215332, -1.0646865367889404, -1.244405746459961, -1.0535571575164795, -1.2069679498672485, -1.0317038297653198, -0.796983003616333, -1.0574246644973755, -0.9278029203414917, -0.683318018913269, 1.643038272857666, -5.229658603668213, 1.5981935262680054, 0.9773871898651123, 0.5397863984107971, 0.15572184324264526, 1.6528881788253784, -0.1438533514738083, -1.1919186115264893, 6.106741428375244, 0.5012319684028625, 0.1205344870686531, -1.096039056777954, -2.797684669494629, -2.859549045562744, -2.758711576461792, -1.5302135944366455, -1.516284465789795, -0.6106914281845093, -3.096102237701416, -5.324934959411621, -5.541281700134277, -2.5834882259368896, -2.511425495147705, -1.9021031856536865, -2.353917360305786, -4.917848110198975, -4.9027180671691895, -1.4773632287979126, -0.2708081603050232, -4.27911376953125, -3.933354377746582, -1.906004548072815, -0.5583126544952393, -7.705436706542969, -5.813662528991699, -0.33910590410232544, -0.13162696361541748, -3.7615854740142822, -1.4522404670715332, 0.8991000056266785, 1.686396598815918, -0.7773232460021973, 1.0072230100631714, 0.26715701818466187, -1.7207142114639282, -1.9176400899887085, -1.2886720895767212, 5.597075939178467, 4.755531311035156, 9.08128833770752, 15.556910514831543, 2.565484046936035, 33.14349365234375, 4.91190767288208, 4.60050630569458, 5.39437198638916, 5.049078941345215, 5.1297807693481445, 4.618407726287842, 3.7229318618774414, 5.705411434173584, 4.124068260192871, 5.011401653289795, 5.321530342102051, 2.8017966747283936, 4.413352012634277, 2.832120895385742, -0.14350518584251404, 2.842862129211426, 4.8411760330200195, 3.6803529262542725, 2.4113669395446777, -1.8979147672653198, 1.958972454071045, 2.683875560760498, 2.6418144702911377, 2.3044533729553223, 2.1664774417877197, 5.404063701629639, 2.030165672302246, 1.4528071880340576, 2.4251549243927, 1.5190815925598145, 2.187225341796875, 2.355745792388916, 1.5998170375823975, 0.5241653323173523, -4.441922664642334, 5.520379543304443, 1.104872226715088, 1.0641906261444092, 1.338766098022461, 1.0145593881607056, 1.0118064880371094, 0.9334816932678223, 0.627514123916626, 0.9344139099121094, 1.1682759523391724, 0.7832707762718201, -1.7494443655014038, 5.141222953796387, -1.7669464349746704, -0.940024197101593, -0.561367928981781, 0.023768587037920952, -1.7655338048934937, 0.09105351567268372, 1.1846694946289062, -5.94081449508667, -0.11080938577651978, -0.2980530560016632, 1.404118299484253, 2.6462109088897705, 2.835512399673462, 2.8947935104370117, 1.672385334968567, 1.2797707319259644, 0.5853452086448669, 3.032156467437744, 5.354996681213379, 4.589992523193359, 2.6931378841400146, 2.3857498168945312, 2.0071868896484375, 2.466366767883301, 4.9414544105529785, 5.093765735626221, 1.5791155099868774, 0.1517462581396103, 4.315247535705566, 3.8986899852752686, 1.950404167175293, 0.8662136197090149, 7.7105712890625, 5.836587429046631, 0.48735615611076355, 0.2787986099720001, -3.721740245819092, -2.1914706230163574, 0.9087993502616882, 1.640774130821228, -0.7228733897209167, 0.550100564956665, -0.013423996977508068, -1.60116446018219, -1.9033275842666626, -1.9928429126739502, 1.9557932615280151, 2.929208278656006, 1.947727918624878, 2.7449495792388916, 2.172131299972534, -0.5560443997383118, 4.972500324249268, 4.436136245727539, 5.282439708709717, 5.045923233032227, 5.130961894989014, 4.621788024902344, 3.6188478469848633, 5.9305949211120605, 4.306408405303955, 5.131011962890625, 5.15607213973999, 2.657116174697876, 12.78602409362793, 2.6523661613464355, 2.444584846496582, 2.8161470890045166, 6.058564186096191, 4.287871837615967, 2.543428897857666, -2.038630962371826, 2.082280158996582, 2.642899751663208, 2.7784817218780518, 2.1969587802886963, 2.081080913543701, 5.333948612213135, 2.107991933822632, 1.3853250741958618, 2.321838140487671, 1.5590497255325317, 1.6585291624069214, 2.332139730453491, 1.0124374628067017, 0.5344870090484619, -4.469806671142578, 5.179800510406494, 1.0166256427764893, 1.1776483058929443, 1.2407281398773193, 0.9641483426094055, 0.97700035572052, 0.9127278923988342, 0.6783474683761597, 0.9988885521888733, 0.8387950658798218, 0.782820999622345, -1.7371785640716553, 5.240685939788818, -1.707461953163147, -1.0152877569198608, -0.608104944229126, -0.1329755187034607, -1.6459537744522095, -0.060127999633550644, 1.1567333936691284, -5.90641975402832, -0.46212491393089294, -0.25896692276000977, 1.0951948165893555, 2.644749641418457, 2.677863121032715, 2.7380902767181396, 1.6574537754058838, 1.3541650772094727, 0.6627252697944641, 3.2182869911193848, 5.346889495849609, 5.5477705001831055, 2.5671355724334717, 2.5247654914855957, 2.070686101913452, 1.9010865688323975, 5.063714027404785, 4.701160907745361, 1.4274324178695679, 0.07615093886852264, 4.576550483703613, 3.784346103668213, 1.7273280620574951, 0.34699541330337524, 7.770010948181152, 5.818144798278809, 0.4020147919654846, 0.2080635279417038, -3.8537497520446777, -2.229783058166504, 0.8410850763320923, 1.5596709251403809, -0.7939671874046326, 0.4869135320186615, 0.0008100590202957392, -1.6491413116455078, -1.7287112474441528, -1.8115477561950684, 1.7512292861938477, 3.055027961730957, 1.867591142654419, 2.734863042831421, 2.111686944961548, -0.7517343163490295, 5.02384090423584, 4.319546699523926, 5.213986396789551, 5.21436071395874, 5.190641403198242, 4.480449676513672, 3.6517934799194336, 5.877364158630371, 4.189788341522217, 5.235416412353516, 5.155519485473633, 2.7725393772125244, 5.381101131439209, 2.8336939811706543, 1.0247656106948853, 2.690347671508789, 5.209045886993408, 4.165224552154541, 2.5942981243133545, -1.9667069911956787, 1.9036645889282227, 2.6956348419189453, 2.616560459136963, 2.1857504844665527, 2.0671610832214355, 5.291419506072998, 1.9691225290298462, 1.546148419380188, 2.2623331546783447, 1.613204836845398, 1.8738374710083008, 2.330886125564575, 1.0245407819747925, 0.4370993375778198, -4.325289726257324, 5.258477687835693, 1.0313644409179688, 1.117443323135376, 1.2593004703521729, 1.1157245635986328, 1.0128002166748047, 0.937661349773407, 0.692359447479248, 1.0423952341079712, 0.7915937304496765, 0.7418938279151917, -1.566014051437378, 5.089958667755127, -1.6445757150650024, -1.0467134714126587, -0.4334580600261688, 0.03142494335770607, -1.6122690439224243, -0.0543707013130188, 1.056473970413208, -6.1401047706604, -0.49200066924095154, -0.24462638795375824, 1.2733333110809326, 2.8084726333618164, 2.739459991455078, 2.889749526977539, 1.565711498260498, 1.4347708225250244, 0.7239013910293579, 3.0345113277435303, 5.252737998962402, 5.370234489440918, 2.5766031742095947, 2.4560861587524414, 2.05161714553833, 2.411252975463867, 5.0268659591674805, 4.689214706420898, 1.5177005529403687, 0.24555231630802155, 4.382572650909424, 3.7923269271850586, 1.7391070127487183, 0.38399314880371094, 7.753477096557617, 5.751125335693359, 0.34996873140335083, 0.21831955015659332, 1.2715792655944824, 2.1550581455230713, 1.637433409690857, 1.4867666959762573, -1.228814959526062, -1.1137611865997314, -0.38699743151664734]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0, 0.8)}}, 'et4_eta1': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 12, 1], 'bias': [-0.0026008044369518757, 0.023759836331009865, -0.024954164400696754, 0.17662985622882843, 0.13368922472000122, -0.003745823632925749, 0.08660782128572464, -0.16665630042552948, 0.08803021162748337, 0.06880437582731247, 0.2080850750207901, -0.20359952747821808, 0.5135029554367065], 'weights': [1.0251964330673218, 0.9432219862937927, -0.0820334330201149, -0.6389436721801758, -0.3155007064342499, -0.2924656271934509, -0.020791927352547646, 1.1528325080871582, 2.107461929321289, 2.2574687004089355, -2.087670087814331, -1.9684263467788696, -1.0845232009887695, -1.1545836925506592, -5.917627334594727, -2.3472442626953125, -2.384425401687622, -2.0445775985717773, -1.7059215307235718, -7.696312427520752, -5.7867913246154785, -5.58860969543457, -5.791332721710205, -5.08574914932251, -4.485403060913086, -4.859439373016357, -4.341657638549805, -5.740997791290283, -4.65217924118042, -3.9596948623657227, -1.6836967468261719, 1.4801589250564575, -3.132284164428711, -3.2424638271331787, -3.0248920917510986, -1.520330548286438, 0.900954008102417, -2.982525110244751, -3.6294922828674316, -3.0259299278259277, -0.5943242907524109, -1.8192708492279053, -5.717397212982178, 2.796595573425293, 0.3239839971065521, -6.452282428741455, -0.917125403881073, 1.2398161888122559, -1.199539303779602, 2.2845866680145264, 2.083760976791382, 3.8625245094299316, -3.4644060134887695, -1.1657593250274658, 0.22709402441978455, -1.031438946723938, -6.911469459533691, 1.969260334968567, -0.31299981474876404, -0.9276729226112366, -1.5744290351867676, 0.512809157371521, -0.0687171146273613, -3.875103235244751, -0.5436527729034424, -0.44733819365501404, 0.34765321016311646, -0.5354034304618835, 0.3033260107040405, -2.8684377670288086, -1.0951836109161377, -0.2306152880191803, 0.5077614188194275, 0.10726307332515717, -1.2207926511764526, -1.2413564920425415, -2.9442501068115234, -1.2926234006881714, -0.9796597361564636, -0.5431806445121765, -0.23998428881168365, -5.076852321624756, -5.459351539611816, -3.251709222793579, -3.8161978721618652, -0.08608277142047882, -2.73380446434021, -3.4887847900390625, -2.2211384773254395, -1.3793654441833496, 0.090150848031044, 0.15583693981170654, -6.495730876922607, -3.0528712272644043, -1.6602296829223633, -0.8064813017845154, -0.7644926309585571, -3.234057903289795, 0.05518966168165207, 0.845378577709198, -1.2251133918762207, -0.9910582304000854, 0.1137213259935379, 0.8121068477630615, 0.37160518765449524, 0.14337804913520813, 0.022148767486214638, -1.1122034788131714, -2.1749846935272217, -2.2468812465667725, 2.1103813648223877, 2.0191025733947754, 1.1914830207824707, 1.1817905902862549, 6.020692348480225, 2.291637420654297, 2.3170127868652344, 2.058645486831665, 1.7249642610549927, 7.651444435119629, 5.870999813079834, 5.3885884284973145, 5.946183681488037, 5.320845603942871, 4.460893630981445, 4.834956169128418, 4.259814262390137, 5.807432174682617, 4.7996063232421875, 3.779287576675415, 1.6268171072006226, -1.2817829847335815, 3.1548917293548584, 3.2432360649108887, 3.145568609237671, 1.5924879312515259, -0.7984192371368408, 2.853696346282959, 3.748835802078247, 3.05438232421875, 0.48264166712760925, 1.7104640007019043, 5.878546714782715, -2.7947616577148438, -0.39902082085609436, 6.383516788482666, 0.8567981123924255, -1.131406545639038, 1.395716667175293, -2.3324129581451416, -2.026764154434204, -3.7778069972991943, 3.4674205780029297, 1.1267383098602295, -0.15828856825828552, 1.019776463508606, 6.8414154052734375, -1.9757224321365356, 0.37437400221824646, 1.0116039514541626, 1.3810056447982788, -0.5017603635787964, 0.10016095638275146, 3.697732925415039, 0.6022651791572571, 0.34859874844551086, -0.20200702548027039, 0.3923362195491791, -0.2800343930721283, 2.882565975189209, 0.9871253371238708, 0.39308643341064453, -0.6089921593666077, -0.14284765720367432, 1.1342353820800781, 1.3159459829330444, 3.0907623767852783, 0.1247924417257309, 0.911798894405365, 0.6349954009056091, 0.045262888073921204, 5.072535991668701, 5.3848724365234375, 3.310866594314575, 3.766305923461914, 0.1662800908088684, 2.787860155105591, 3.375393867492676, 2.2090036869049072, 1.5013518333435059, -0.12616603076457977, -0.10926662385463715, 6.377896785736084, 3.0548548698425293, 1.7790255546569824, 0.9447789192199707, 0.6611884236335754, 3.247640609741211, -0.05340128391981125, -0.6745375990867615, 1.1099302768707275, 1.0986971855163574, -0.20162701606750488, -0.7073443531990051, -0.3732908070087433, -0.14736059308052063, -0.024858394637703896, 0.9577566385269165, 2.5017383098602295, 2.085331439971924, -2.207843065261841, -2.0857114791870117, -1.180777907371521, -1.2209975719451904, -5.892605781555176, -2.2799923419952393, -2.3057477474212646, -2.0553078651428223, -7.654836177825928, -7.512762546539307, -5.941270351409912, -5.707162380218506, -5.920308589935303, -5.096529006958008, -4.323911666870117, -4.680298805236816, -4.384183406829834, -5.889354228973389, -4.647495746612549, -3.74141263961792, -1.6859426498413086, 1.3276662826538086, -3.0246193408966064, -3.122396469116211, -3.0341885089874268, -1.4728587865829468, -1.061299204826355, -2.9632294178009033, -3.53519344329834, -3.0013208389282227, -0.5043294429779053, -1.572134256362915, -5.763169288635254, 4.467467784881592, 0.4760186970233917, -6.275606632232666, -0.8539478182792664, 1.2287415266036987, -1.2754777669906616, 2.3266050815582275, 2.0143067836761475, 3.8740429878234863, -3.43499493598938, -1.122295618057251, 0.22958852350711823, -1.0824428796768188, -6.930768013000488, 2.1717963218688965, -0.5099495649337769, -0.28866466879844666, -1.3955187797546387, 0.5555185079574585, 0.008487560786306858, -3.830439805984497, -0.6227790117263794, -0.3467789590358734, 0.19788362085819244, -0.5888499617576599, 0.5585444569587708, -6.443596839904785, -0.882118821144104, -0.6641891002655029, 0.2545921206474304, -0.011849665082991123, -0.4677331745624542, -1.1706691980361938, -2.4758248329162598, -1.2665096521377563, -0.9177460074424744, -0.5615562796592712, -0.16945156455039978, -4.842496871948242, -5.463808059692383, -3.393669843673706, -3.7802765369415283, -0.16411802172660828, -2.9243597984313965, -3.469766616821289, -1.929958462715149, -1.5249595642089844, 0.09455307573080063, 0.2940637171268463, -6.356712818145752, -2.9688708782196045, -1.7194840908050537, -0.9886189103126526, -0.8218236565589905, -3.2009527683258057, 0.061632126569747925, 0.6635765433311462, -1.2382216453552246, -0.9971335530281067, 0.019470958039164543, 0.6671754717826843, 0.3531658947467804, 0.12772180140018463, -0.05946039780974388, -1.4022151231765747, -2.53204083442688, -2.10646390914917, 2.19331955909729, 2.0382144451141357, 0.20711125433444977, 1.1339126825332642, 5.838322162628174, 2.1841650009155273, 2.322908639907837, 2.145693063735962, 1.573807716369629, 7.499920845031738, 5.714427947998047, 5.387157440185547, 5.922677516937256, 5.238670349121094, 4.401350975036621, 4.873429775238037, 4.369207859039307, 5.7771430015563965, 4.840404987335205, 3.9482839107513428, 1.808384895324707, -1.2685608863830566, 3.0990753173828125, 3.087587594985962, 3.0283801555633545, 1.5938576459884644, 1.001339316368103, 2.8978474140167236, 3.696366548538208, 3.145051956176758, 0.6527377963066101, 1.484790325164795, 5.62541389465332, -3.3827757835388184, -1.3616037368774414, 6.31757116317749, 0.8157055974006653, -1.1573904752731323, 1.4023290872573853, -2.2817232608795166, -1.9613368511199951, -3.9134373664855957, 3.5022149085998535, 1.1831471920013428, -0.13234640657901764, 1.2215951681137085, 6.950757026672363, -2.0840206146240234, 0.30289706587791443, 0.9187925457954407, 1.456176996231079, -0.6346155405044556, 0.035035520792007446, 3.731555700302124, 0.5033611059188843, 0.40924566984176636, -0.24243421852588654, 0.4083879292011261, -0.5669792294502258, 6.326224327087402, 1.074952244758606, 0.8087453842163086, -0.40509048104286194, -0.38344430923461914, 0.669874906539917, 1.2650383710861206, 2.5540072917938232, 1.1964179277420044, 0.6418784260749817, 0.5436469912528992, 0.13871504366397858, 5.06109094619751, 5.4087982177734375, 3.424656629562378, 3.82572865486145, -0.1069582849740982, 2.860503911972046, 3.3012142181396484, 1.8204606771469116, 1.488051176071167, -0.05020489543676376, -0.10891380906105042, 6.474694728851318, 3.051229953765869, 1.8003922700881958, 0.9816703796386719, 0.7326294779777527, 3.2426538467407227, -0.24795597791671753, -0.7556759715080261, -1.0224006175994873, -1.0960065126419067, 0.1724272072315216, 0.618081271648407, 0.2703900635242462, 0.161728173494339, 0.044488195329904556, -1.0469489097595215, -2.5955393314361572, -2.0356216430664062, 2.2399470806121826, 1.9626954793930054, 1.1609466075897217, 1.2922126054763794, 5.988289833068848, 2.2544703483581543, 2.410997152328491, 2.2540550231933594, 1.7642277479171753, 7.523647308349609, 5.807666778564453, 5.554626941680908, 5.7545390129089355, 5.135281562805176, 4.462368488311768, 4.680713653564453, 4.363576412200928, 5.796703815460205, 4.660062789916992, 3.772775650024414, 1.6081422567367554, -1.471457600593567, 3.0630686283111572, 3.2786765098571777, 3.0147647857666016, 1.6522928476333618, 0.9880763292312622, 2.998074769973755, 3.621058464050293, 3.078218698501587, 0.5854324698448181, 1.4462122917175293, 5.721438884735107, -2.9753527641296387, -0.5350960493087769, 6.3251423835754395, 0.8918828368186951, -1.178076148033142, 1.2798835039138794, -2.2551615238189697, -1.9484108686447144, -3.759337902069092, 3.4578652381896973, 1.2663029432296753, -0.07196418941020966, 1.2481582164764404, 7.079575538635254, -2.0389509201049805, 0.33912286162376404, 0.8573747277259827, 1.5641136169433594, -0.5602573156356812, 0.009096524678170681, 3.7935914993286133, 0.530432403087616, 0.3795877695083618, -0.29918399453163147, 0.4276634752750397, -0.7347871661186218, 2.9592950344085693, 1.0416816473007202, 0.4138214588165283, -0.5701772570610046, -0.33055979013442993, 1.2272226810455322, 1.2141225337982178, 2.643156051635742, 1.2718297243118286, 1.016147494316101, 0.48940518498420715, 0.25058063864707947, 5.002410888671875, 5.510743141174316, 3.2538001537323, 3.840313673019409, 0.045687563717365265, 2.706317186355591, 3.434723377227783, 1.7798007726669312, 1.3799846172332764, 0.031778641045093536, -0.2800126373767853, 6.452972412109375, 2.868900775909424, 1.7012298107147217, 0.9948225617408752, 0.7590370774269104, 3.325113296508789, -0.22099743783473969, -0.6587223410606384, -1.0300753116607666, -0.9809174537658691, 0.20402590930461884, 0.6747562289237976, 0.36125537753105164, 0.12726211547851562, -0.07617892324924469, -1.1187833547592163, -2.069230556488037, -2.2167840003967285, 2.0338022708892822, 2.032545804977417, 1.0873364210128784, 1.1565704345703125, 5.824941635131836, 2.3353078365325928, 2.3644630908966064, 2.2303528785705566, 7.487512588500977, 7.609893798828125, 5.867670059204102, 5.418933391571045, 5.811473369598389, 5.253249168395996, 4.464521884918213, 4.742184638977051, 4.261347770690918, 5.8816657066345215, 4.7547101974487305, 3.7690134048461914, 1.638009786605835, -1.3821550607681274, 3.147852897644043, 3.074791431427002, 3.158412218093872, 1.5820027589797974, -0.989870548248291, 3.018725633621216, 3.7248706817626953, 3.219202756881714, 0.42725083231925964, 1.8604326248168945, 5.686347007751465, -2.9643173217773438, -0.5248097777366638, 6.372659206390381, 0.981423556804657, -1.2166671752929688, 1.3060123920440674, -2.124894857406616, -2.146759271621704, -3.9191555976867676, 3.454770803451538, 1.1225602626800537, -0.11614386737346649, 1.2448756694793701, 6.994974136352539, -2.1830263137817383, 0.4231380522251129, 0.8697505593299866, 1.413941502571106, -0.44870397448539734, 0.10844480991363525, 3.7305378913879395, 0.6840401887893677, 0.3766346871852875, -0.1865873485803604, 0.5865291953086853, -0.3374776244163513, 6.403009414672852, 1.0956276655197144, 0.2733466625213623, -0.2795400619506836, -0.0930406004190445, 1.0954533815383911, 1.3384860754013062, 2.8791983127593994, 1.2319310903549194, 0.8559791445732117, 0.5842558741569519, 0.09502561390399933, 4.889835834503174, 5.443447113037109, 3.3410708904266357, 3.8299357891082764, -0.06345857679843903, 2.7926387786865234, 3.342074394226074, 2.1019814014434814, 1.304375410079956, -0.05082263797521591, -0.19152170419692993, 6.486573696136475, 2.8879756927490234, 1.724331021308899, 0.9359978437423706, 0.7728381752967834, 3.214877128601074, -0.11851073801517487, -0.6272141337394714, -1.1166294813156128, -1.1121360063552856, 0.18411636352539062, 0.8565714359283447, 0.37297323346138, 0.2280774563550949, -0.08014239370822906, -1.1548789739608765, -2.5157835483551025, -2.1218576431274414, 2.090181589126587, 2.110766649246216, 0.25221696496009827, 1.3033467531204224, 5.888796806335449, 2.25474214553833, 2.3459842205047607, 2.2046945095062256, 1.7174043655395508, 7.515282154083252, 5.754991054534912, 5.4150590896606445, 5.750059604644775, 5.159801483154297, 4.490351676940918, 4.875675201416016, 4.433055400848389, 5.792463779449463, 4.742518901824951, 3.9737443923950195, 1.6564021110534668, -1.4862838983535767, 2.996591567993164, 3.0679144859313965, 3.0173676013946533, 1.498238205909729, 1.094964623451233, 2.8488383293151855, 3.54923152923584, 3.013619899749756, 0.6003484129905701, 1.4759414196014404, 5.80795431137085, -4.4330058097839355, -1.442448616027832, 6.30916166305542, 0.8557291626930237, -1.2023191452026367, 1.2114955186843872, -2.3411848545074463, -1.9778631925582886, -3.8773550987243652, 3.48359751701355, 1.235430121421814, -0.16218973696231842, 1.0505543947219849, 6.992342472076416, -2.062955856323242, 0.38860073685646057, 0.8495431542396545, 1.4897562265396118, -0.4594704806804657, -0.010513165034353733, 3.9040799140930176, 0.671775221824646, 0.3353697657585144, -0.152586430311203, 0.42900630831718445, -0.6769211888313293, 6.255993843078613, 0.9770820140838623, 0.6344008445739746, -0.29145246744155884, -0.0953483060002327, 0.4649762213230133, 1.3594809770584106, 2.630267858505249, 1.272966980934143, 0.6785493493080139, 0.6704978346824646, 0.1687568873167038, 4.839813709259033, 5.330307960510254, 3.4490129947662354, 3.898158311843872, 0.10544763505458832, 2.700875997543335, 3.4022860527038574, 1.733189582824707, 1.427066445350647, -0.005441879853606224, -0.14965549111366272, 6.34743070602417, 3.063389778137207, 1.6905919313430786, 0.7814001441001892, 0.6579870581626892, 3.2099287509918213, -0.18618665635585785, -0.6988555788993835, 1.2149035930633545, 1.16795015335083, -0.22200945019721985, -0.7959122061729431, -0.41466668248176575, -0.14860273897647858, -0.1382313370704651, 1.0391335487365723, 2.4784133434295654, 2.249746084213257, -2.249352216720581, -2.0874972343444824, -0.4213871955871582, -1.1359636783599854, -6.009669303894043, -2.2226104736328125, -2.303112745285034, -2.1491024494171143, -1.5654852390289307, -7.577459812164307, -5.866010665893555, -5.474373817443848, -5.7755351066589355, -5.3064141273498535, -4.283693313598633, -4.689141750335693, -4.359087944030762, -5.8824143409729, -4.778071403503418, -3.740812301635742, -1.6160691976547241, 1.3038142919540405, -2.953028917312622, -3.0940487384796143, -3.118048667907715, -1.4443928003311157, -1.0324426889419556, -2.952965021133423, -3.6631109714508057, -2.997539758682251, -0.5683349967002869, -1.5038022994995117, -5.759454250335693, 2.8457465171813965, 0.39161112904548645, -6.390697002410889, -0.9834965467453003, 1.1485999822616577, -1.2466212511062622, 2.3544962406158447, 2.1072490215301514, 3.9213242530822754, -3.5204172134399414, -1.122330665588379, 0.06938106566667557, -1.1259019374847412, -6.937899112701416, 2.034280776977539, -0.30871596932411194, -0.8398390412330627, -1.530687928199768, 0.5888699293136597, -0.1530705839395523, -3.8922629356384277, -0.5593338012695312, -0.3847090005874634, 0.1662748008966446, -0.49479353427886963, 0.768643319606781, -6.365362167358398, -1.0220333337783813, -0.3567352294921875, 0.5736306309700012, 0.30605846643447876, -0.5093892812728882, -1.348019003868103, -2.491082191467285, -1.1999591588974, -0.9373847842216492, -0.5462061762809753, -0.07326000928878784, -5.006946563720703, -5.399425506591797, -3.3811516761779785, -3.707012176513672, 0.05647135525941849, -2.717548370361328, -3.4018797874450684, -1.9244493246078491, -1.3546781539916992, 0.024731269106268883, 0.1626574695110321, -6.39082670211792, -2.962495803833008, -1.675119161605835, -0.9574204683303833, -0.6156238913536072, -3.189774513244629, 0.18502198159694672, 0.8421322703361511, -1.0222623348236084, -1.143153190612793, 0.013463378883898258, 0.7491047978401184, 0.40147027373313904, 0.1811993420124054, 0.007847269997000694, -0.9783915281295776, -2.4940969944000244, -2.2550060749053955, 2.1688249111175537, 1.9139608144760132, 1.2336885929107666, 1.1167418956756592, 6.020171642303467, 2.2349677085876465, 2.510181188583374, 2.1606338024139404, 1.6287041902542114, 7.620609760284424, 5.948932647705078, 5.5473527908325195, 5.7792582511901855, 5.19249963760376, 4.373182773590088, 4.7597150802612305, 4.292849063873291, 5.758368015289307, 4.848705291748047, 3.81451678276062, 1.6483118534088135, -1.27611243724823, 3.051095724105835, 3.153315305709839, 3.131603240966797, 1.5296975374221802, 1.1238890886306763, 3.039480209350586, 3.573584794998169, 3.0737369060516357, 0.6491555571556091, 1.5693223476409912, 5.661680698394775, -3.2437689304351807, -0.3457508385181427, 6.303846836090088, 1.008841872215271, -1.1312384605407715, 1.4068719148635864, -2.2654953002929688, -2.0463144779205322, -3.7327847480773926, 3.446826457977295, 1.186560034751892, -0.22988276183605194, 1.141365885734558, 7.072263717651367, -2.0258939266204834, 0.43570128083229065, 1.0452723503112793, 1.3772087097167969, -0.43007585406303406, 0.15063299238681793, 3.836416244506836, 0.5418192148208618, 0.36403244733810425, -0.37238746881484985, 0.5682949423789978, -0.7023680806159973, 6.305296897888184, 0.936163067817688, 0.6358593106269836, -0.5677419304847717, -0.037809114903211594, 0.6699109673500061, 1.1641978025436401, 2.4565916061401367, 1.3862637281417847, 1.0064929723739624, 0.663727343082428, 0.11298004537820816, 4.901421546936035, 5.477721214294434, 3.346855878829956, 3.9012832641601562, 0.09644961357116699, 2.699148654937744, 3.494945526123047, 1.8501867055892944, 1.4628239870071411, 0.038194455206394196, -0.15482884645462036, 6.422201633453369, 3.023418426513672, 1.627535104751587, 0.9708508253097534, 0.6563124656677246, 3.1716485023498535, -0.09765737503767014, -0.7356085181236267, -1.2632811069488525, -0.9757750630378723, 0.1456412822008133, 0.7715763449668884, 0.3869102895259857, 0.27734893560409546, 0.07526598870754242, -0.9762293100357056, -2.561676263809204, -2.1265580654144287, 2.0286896228790283, 2.075723648071289, 1.1403844356536865, 1.2498040199279785, 5.931168556213379, 2.2029151916503906, 2.445253610610962, 2.15519118309021, 1.7489018440246582, 7.525898456573486, 5.800742149353027, 5.486359596252441, 5.953525066375732, 5.093734264373779, 4.458773136138916, 4.86409854888916, 4.24324369430542, 5.968506336212158, 4.754179954528809, 3.927828073501587, 1.6784312725067139, -1.3647832870483398, 3.084916353225708, 3.0687427520751953, 3.021444082260132, 1.5372239351272583, -0.8383357524871826, 3.0406997203826904, 3.5715415477752686, 3.0177345275878906, 0.5319532752037048, 1.7094852924346924, 5.823647499084473, -1.0495877265930176, -0.3313985764980316, 6.320600986480713, 1.0248901844024658, -1.1935510635375977, 1.4299181699752808, -2.140989065170288, -1.9564642906188965, -3.869663715362549, 3.498605489730835, 1.2037980556488037, -0.2191070020198822, 1.031865119934082, 6.947019100189209, -2.052544355392456, 0.2894705533981323, 0.8137699961662292, 1.4521355628967285, -0.5344530344009399, 0.07733277976512909, 3.698293447494507, 0.5997402667999268, 0.4596594274044037, -0.2561136782169342, 0.4026574194431305, -0.23997922241687775, 2.909172296524048, 0.9613901972770691, 0.22444286942481995, -0.5839609503746033, -0.141954243183136, 1.2224074602127075, 1.1505941152572632, 3.029334306716919, 1.3948553800582886, 0.9423107504844666, 0.6071872115135193, 0.23435761034488678, 4.915351390838623, 5.523367881774902, 3.2731335163116455, 3.685584545135498, -0.09336978197097778, 2.7627980709075928, 3.400871753692627, 1.8804012537002563, 1.3919806480407715, -0.04051085561513901, -0.2965579926967621, 6.4938483238220215, 2.8596763610839844, 1.5941591262817383, 0.8535481691360474, 0.8350687623023987, 3.2666754722595215, -0.1337282806634903, -0.7185978293418884, -0.4881719648838043, -2.3726656436920166, -0.1354139745235443, 0.41007015109062195, 0.22356638312339783, -0.11823854595422745, -0.04191459342837334, -0.20573462545871735, -1.1697183847427368, -1.0426634550094604, 0.8915672302246094, 4.2851715087890625, 2.458414077758789, 0.4938039481639862, 2.54923677444458, 0.9368886351585388, 1.120974063873291, 0.9774313569068909, 0.5055680871009827, 0.5286432504653931, 0.3642200827598572, 0.3323996067047119, 0.3324313163757324, 0.3339304029941559, 0.2565600275993347, 0.3400682210922241, 0.2231311798095703, 0.28890615701675415, 0.2303858995437622, 0.34407180547714233, 0.0006176748429425061, -0.3528464138507843, 0.20983506739139557, 0.2752494513988495, 0.1491883099079132, -0.009164920076727867, -0.24076879024505615, 0.07223982363939285, 0.0933871790766716, 0.19664359092712402, -0.020693277940154076, 0.03396375849843025, 0.489976704120636, -0.520698070526123, -0.2676529884338379, 0.385456919670105, -0.014354963786900043, -0.34748488664627075, -0.11984354257583618, -0.23356299102306366, -0.32783278822898865, -0.4992142915725708, 0.13648895919322968, 0.035519491881132126, -0.03337791934609413, 0.037562187761068344, 0.481515109539032, -0.3812156915664673, -0.010612674988806248, -0.018269475549459457, -0.05347813665866852, -0.2457127869129181, -0.04255553334951401, 0.10038922727108002, -0.15478916466236115, -0.17115379869937897, -0.15568377077579498, -0.04182932898402214, -0.15703913569450378, 0.4969960153102875, -0.12685450911521912, -0.12540540099143982, -0.35101842880249023, -0.20803843438625336, 0.39255017042160034, 0.3747952878475189, 0.09777461737394333, -0.2392813116312027, -0.03150489926338196, -0.09006363898515701, -0.23807393014431, 0.2210400551557541, -0.08718837797641754, -0.3871171474456787, 0.321759968996048, -0.281955748796463, 0.03998880833387375, -0.21555903553962708, 0.015326566062867641, -0.292760968208313, -0.024461526423692703, -0.14458686113357544, 0.4250515103340149, -0.07795492559671402, 0.08229611814022064, -0.022558560594916344, -0.18561464548110962, 0.08742937445640564, -0.19600357115268707, -0.17274850606918335, 1.1634411811828613, 1.2061887979507446, -0.19250428676605225, -0.6789903044700623, -0.30788543820381165, -0.20130446553230286, -1.0433489084243774, 1.390351414680481, 2.482160806655884, 2.165520191192627, -2.07529354095459, -2.054067373275757, -0.29039350152015686, -1.236459732055664, -5.964238166809082, -2.2441792488098145, -2.45337176322937, -2.135784864425659, -1.5322444438934326, -7.596198558807373, -5.77870512008667, -5.447120189666748, -5.762230396270752, -5.238992691040039, -4.4324631690979, -4.795217037200928, -4.31515645980835, -5.803284645080566, -4.644556999206543, -3.9494428634643555, -1.653674602508545, 1.3703794479370117, -3.1389079093933105, -3.086665391921997, -3.2554705142974854, -1.569161057472229, -1.0932494401931763, -3.013335943222046, -3.7027854919433594, -3.0392394065856934, -0.46050825715065, -1.3539319038391113, -5.78314733505249, 4.504164218902588, 1.295868992805481, -6.35349178314209, -0.7676976919174194, 1.2128064632415771, -1.447594404220581, 2.352041482925415, 2.1511385440826416, 3.82316255569458, -3.5111002922058105, -1.0806256532669067, 0.28926995396614075, -1.0196740627288818, -7.01775598526001, 2.047482490539551, -0.36901941895484924, -1.0376707315444946, -1.4746229648590088, 0.47547033429145813, -0.032845646142959595, -3.770587682723999, -0.680832028388977, -0.31705182790756226, 0.20884990692138672, -0.43002697825431824, 0.7914168238639832, -6.346975326538086, -1.1404894590377808, -0.27313899993896484, 0.49594825506210327, 0.30991673469543457, -0.6608273983001709, -1.233864665031433, -2.682706594467163, -1.387099266052246, -0.820092499256134, -0.6983631253242493, -0.2783139646053314, -5.068745136260986, -5.402896881103516, -3.325408697128296, -3.7116191387176514, 0.019110050052404404, -2.8012444972991943, -3.5018301010131836, -1.6971172094345093, -1.5141593217849731, -0.02155645191669464, 0.19456034898757935, -6.412229537963867, -2.8730740547180176, -1.7730263471603394, -0.8825761675834656, -0.7100264430046082, -3.229623317718506, 0.111324243247509, 0.7550041079521179, 0.5229239463806152, -0.3934052884578705, 0.4494021236896515, -1.2844314575195312, -1.1461303234100342, -0.9471862316131592, -0.48184508085250854, 1.5868885517120361, -1.0619027614593506, -0.7419309020042419, -2.942476749420166, 0.9977480173110962]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (0.8, 1.37)}}, 'et4_eta2': {'discriminator': {'threshold': 0.61499847173690791, 'nodes': [100, 5, 1], 'bias': [0.1416495442390442, 0.0917273536324501, 0.14888767898082733, -0.04687773063778877, 0.033612411469221115, 0.0564887635409832], 'weights': [0.581756591796875, -0.38689595460891724, -1.4645912647247314, -1.4333598613739014, -1.581018090248108, -1.115908145904541, 0.5698398947715759, -1.247531771659851, 0.12504728138446808, 2.482370376586914, 2.431360960006714, 2.273602247238159, 0.37852540612220764, 0.144611194729805, 0.040073834359645844, 0.2846015393733978, -2.8518881797790527, 0.0757441371679306, -0.33886414766311646, -1.1692278385162354, -3.2619733810424805, -4.886256694793701, 0.09398651123046875, -1.1386778354644775, -2.8565423488616943, -1.5504562854766846, -6.6825714111328125, -1.9303826093673706, -18.234264373779297, -2.8824312686920166, -1.2814736366271973, -2.142577648162842, -1.3583049774169922, -0.9495894312858582, -1.7242447137832642, -1.485337257385254, -9.032512664794922, -2.11647629737854, -2.000075578689575, -0.1717694103717804, -1.7989602088928223, -4.064884185791016, -2.4997408390045166, -1.9638032913208008, -1.3527863025665283, -2.530980110168457, -2.6757166385650635, -1.3389031887054443, 0.7322706580162048, -1.6147764921188354, -1.5603357553482056, -1.411029577255249, -4.707601070404053, -2.0605554580688477, -1.182787537574768, 0.3247404396533966, -1.654233455657959, -1.4792747497558594, 1.4332225322723389, -1.4648306369781494, 3.4037587642669678, -0.7914804220199585, -1.3773428201675415, -0.9748098254203796, -1.7981112003326416, -1.2366503477096558, -2.1252827644348145, -1.2274694442749023, -1.133897066116333, -1.336310863494873, -1.3621219396591187, 0.46997955441474915, 0.03448684513568878, 0.2173086404800415, -3.024440288543701, -2.6741464138031006, -2.740393877029419, -2.1167993545532227, -1.9065232276916504, -1.273890733718872, 0.15699931979179382, -0.6674656867980957, -3.8054914474487305, -2.7867767810821533, 0.14551353454589844, 5.9104132652282715, -1.6494784355163574, -1.493892788887024, 0.41633859276771545, -1.3532004356384277, -1.2799110412597656, -1.1865214109420776, -12.882661819458008, -2.708534002304077, -2.3703911304473877, -1.3462586402893066, -0.04463225230574608, 0.0634172260761261, -0.14307387173175812, -0.7493860721588135, 0.624331533908844, -0.3319099545478821, -1.4028029441833496, -1.432462453842163, -1.650894284248352, -1.1406965255737305, 0.6025397181510925, -1.2855747938156128, 0.19959670305252075, 2.4982616901397705, 2.2735466957092285, 2.4246840476989746, 0.4553634226322174, 0.08936864137649536, 0.1311582624912262, 0.39617517590522766, -2.7375380992889404, 0.1265452355146408, -0.4928475022315979, -1.3645174503326416, -3.450955390930176, -5.069662570953369, 6.010491847991943, -1.1299443244934082, -2.9162395000457764, -1.3828439712524414, -6.523721218109131, -1.9435957670211792, -18.175365447998047, -4.8544697761535645, -1.2547545433044434, -2.0425124168395996, -1.295743465423584, -1.1035903692245483, -1.6218727827072144, -1.4932665824890137, -8.968793869018555, -1.9807897806167603, -2.0454328060150146, -0.27600958943367004, -1.8898911476135254, -4.025547504425049, -2.6954073905944824, -1.9785104990005493, -1.3680779933929443, -2.6349480152130127, -2.5782358646392822, -1.4823532104492188, 0.8074877858161926, -1.6718937158584595, -1.6565669775009155, -1.4112842082977295, -4.705615520477295, -2.0217299461364746, -1.1736942529678345, 0.2864823639392853, -1.6903040409088135, -1.5538396835327148, 1.3823657035827637, -1.4413871765136719, 3.3367693424224854, -0.8150039315223694, -1.2524248361587524, -0.9798521399497986, -1.7331271171569824, -1.2518690824508667, -2.1376397609710693, -1.3412749767303467, -1.2559378147125244, -1.1515171527862549, -1.3376590013504028, -0.5129407644271851, 0.4098140299320221, 0.32758745551109314, -3.0089964866638184, -2.708430767059326, -2.7736716270446777, -2.0044891834259033, -1.8417493104934692, -1.360335111618042, -0.03031604364514351, -0.6983081102371216, -3.8915762901306152, -2.7295982837677, 0.15288233757019043, 5.834036350250244, -1.6299433708190918, -1.5219801664352417, 0.507905125617981, -1.1420137882232666, -1.283940315246582, -1.1613298654556274, -12.937507629394531, -2.830153703689575, -2.3496272563934326, -1.3355052471160889, 0.0610378123819828, 0.07120959460735321, -0.24674025177955627, -0.5232481956481934, -0.7768791913986206, -0.04269222542643547, 0.37302982807159424, 0.3743942975997925, 0.5956953167915344, 0.41626232862472534, -0.3297511339187622, 0.22902551293373108, 0.02797701582312584, -1.0573911666870117, -1.0043467283248901, -0.8652474880218506, -0.7001688480377197, 0.22859597206115723, 0.2892363667488098, -0.39173272252082825, 1.0319538116455078, 0.13310158252716064, -0.08140266686677933, 0.29927441477775574, 1.4145119190216064, 2.0886285305023193, -0.22144514322280884, 0.4602801203727722, 1.1516647338867188, 0.565574586391449, 2.883911609649658, 0.7410096526145935, 8.241190910339355, 1.2128138542175293, 0.3351460099220276, 0.8095336556434631, 0.5186111330986023, 0.23221103847026825, 0.6689755916595459, 0.5271771550178528, 4.032434463500977, 0.7397922873497009, 0.7466270923614502, -0.038530126214027405, 0.7031628489494324, 1.7122201919555664, 0.9707109332084656, 0.679175615310669, 0.39778760075569153, 1.142361044883728, 1.1290290355682373, 0.45476406812667847, -0.5605642199516296, 0.7049155235290527, 0.5497601628303528, 0.4192332625389099, 1.94161057472229, 0.9260550737380981, 0.4753219485282898, -0.17405633628368378, 0.6759582161903381, 0.5302416682243347, -0.8510857820510864, 0.5060176253318787, -1.5695650577545166, 0.1299366056919098, 0.3747384548187256, 0.3956664204597473, 0.6052114367485046, 0.5236614942550659, 0.7338953614234924, 0.3463488519191742, 0.3284866511821747, 0.42990943789482117, 0.5080832242965698, -0.29795873165130615, -0.2717497944831848, -0.2828475832939148, 1.294087529182434, 1.086865782737732, 1.210087537765503, 0.8098084926605225, 0.8012542724609375, 0.3895547688007355, 0.33182236552238464, 0.04182581603527069, 1.5352742671966553, 1.1779708862304688, -0.26449793577194214, -2.7262187004089355, 0.5978327393531799, 0.6218563914299011, -0.7817511558532715, 0.48067569732666016, 0.32804039120674133, -0.1880754977464676, 5.819159030914307, 1.0537340641021729, 0.9694578647613525, 0.32649025321006775, -0.0868649110198021, 0.1041400209069252, -0.1043575257062912, 0.1182376891374588, -0.6229959726333618, 0.16744478046894073, 1.3969554901123047, 1.2333827018737793, 1.5443974733352661, 0.947704017162323, -0.42188408970832825, 1.1320701837539673, -0.07529882341623306, -2.5634045600891113, -2.3602521419525146, -2.198295831680298, -0.531038224697113, -0.14220385253429413, -0.14005814492702484, -0.39447101950645447, 2.8902058601379395, 0.010370515286922455, 0.337504506111145, 1.23195219039917, 3.447141170501709, 5.030959606170654, -0.23326095938682556, 1.1086513996124268, 2.8516478538513184, 1.436439037322998, 6.618173599243164, 2.040743827819824, 18.237911224365234, 3.074505567550659, 1.4356138706207275, 2.1096386909484863, 1.1413476467132568, 1.0334633588790894, 1.7350581884384155, 1.4775125980377197, 8.950813293457031, 2.029491901397705, 1.8650645017623901, 0.151828795671463, 1.8766956329345703, 4.003612518310547, 2.552476167678833, 2.1347784996032715, 1.2965524196624756, 2.4863617420196533, 2.491069793701172, 1.459900975227356, -0.8224032521247864, 1.727763295173645, 1.6051439046859741, 1.6376934051513672, 4.719537734985352, 2.2118425369262695, 1.1336716413497925, -0.3403971493244171, 1.6888728141784668, 1.6115145683288574, -1.3358869552612305, 1.505746841430664, -3.32519793510437, 0.7972029447555542, 1.380665898323059, 1.082166314125061, 1.8903379440307617, 1.2481564283370972, 2.227444887161255, 1.2353661060333252, 1.3041725158691406, 1.3060925006866455, 1.3527084589004517, -0.46772220730781555, -0.5223127603530884, -0.2103305160999298, 2.9519202709198, 2.769545316696167, 2.7390973567962646, 2.1053855419158936, 1.9840058088302612, 1.3140904903411865, -0.05805663391947746, 0.5440028309822083, 3.826601982116699, 2.651902437210083, -0.12031984329223633, -5.935788631439209, 1.5015780925750732, 1.5563565492630005, -0.555227518081665, 1.3052659034729004, 1.1375374794006348, 1.1288236379623413, 12.837820053100586, 2.815237045288086, 2.1742961406707764, 1.1478896141052246, -0.08291198313236237, 0.08840353786945343, 0.19835461676120758, 0.5463638305664062, 0.4496197998523712, -0.15365897119045258, -1.303152322769165, -1.4211831092834473, -1.6294633150100708, -1.1218407154083252, 0.513221025466919, -1.0979574918746948, 0.03863683342933655, 2.535245418548584, 2.413844347000122, 2.2838621139526367, 0.3961125910282135, -0.07022036612033844, 0.11505560576915741, 0.38931742310523987, -2.9232537746429443, 0.16309437155723572, -0.2143958956003189, -1.178619384765625, -3.444204807281494, -4.952271938323975, 6.059645175933838, -1.0870082378387451, -2.7587931156158447, -1.5785882472991943, -6.752011299133301, -2.0239031314849854, -18.183874130249023, -3.0692338943481445, -1.4014091491699219, -1.9880406856536865, -1.363227367401123, -0.9414331316947937, -1.560322880744934, -1.5435211658477783, -9.025472640991211, -2.004357099533081, -1.9044069051742554, -0.2705972492694855, -1.8722727298736572, -3.9819154739379883, -2.5931248664855957, -2.024343967437744, -1.0690704584121704, -2.6245663166046143, -2.6267261505126953, -1.3086411952972412, 0.9304255843162537, -1.7328647375106812, -1.5346494913101196, -1.6334125995635986, -4.653397083282471, -2.088351249694824, -1.1151939630508423, 0.23838695883750916, -1.7149772644042969, -1.4859371185302734, 1.2581639289855957, -1.470367431640625, 3.2151098251342773, -0.8481677174568176, -1.4646252393722534, -1.1731973886489868, -1.8418259620666504, -1.3983176946640015, -2.143547296524048, -1.26896071434021, -1.1882612705230713, -1.2540905475616455, -1.2641340494155884, -0.451155424118042, 0.6385239362716675, 0.2657028138637543, -2.9695358276367188, -2.645637035369873, -2.829376220703125, -2.0177202224731445, -1.8429359197616577, -1.4030251502990723, 0.047014832496643066, -0.5733755826950073, -3.9187021255493164, -2.751581907272339, -0.026499062776565552, 5.869612216949463, -1.6958210468292236, -1.4883424043655396, 0.3736911714076996, -1.3362948894500732, -1.2750811576843262, -0.1901623010635376, -12.92725944519043, -2.795802593231201, -2.3234610557556152, -1.1962645053863525, -0.055261313915252686, 0.0872664824128151, -0.27287760376930237, -0.5760724544525146, 1.1626110076904297, 0.5277957320213318, -0.3125312030315399, -3.901346206665039, 2.7279491424560547]}, 'datecode': '2016-10-18 17:04', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (50, 500000), 'etaBin': (1.37, 1.54)}}, 'et2_eta1': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 5, 1], 'bias': [0.25435444712638855, 0.24932298064231873, 0.1606546938419342, 0.17509008944034576, 0.25274309515953064, -0.1329682171344757], 'weights': [2.34734845161438, 2.2353413105010986, -1.4175097942352295, -2.0679333209991455, -1.7088115215301514, -1.090505599975586, -0.9405161738395691, 0.07812463492155075, 3.223778486251831, 4.487850189208984, -1.621321439743042, -18.826236724853516, -3.515526056289673, -5.319347381591797, -4.333478927612305, -16.02056312561035, -14.881732940673828, -15.005784034729004, -29.321186065673828, -12.3950777053833, -6.208489418029785, -5.976852893829346, -5.684929847717285, -4.873940467834473, -5.227859973907471, -4.900532245635986, -5.202627182006836, -5.217679977416992, -5.026147842407227, -5.188652515411377, -3.006340742111206, -3.6230204105377197, -5.149136543273926, -3.7510833740234375, -3.32551908493042, -3.5563111305236816, -3.6126794815063477, -4.35263729095459, -3.3301844596862793, -3.2909648418426514, -3.1816136837005615, -3.1273691654205322, -5.119664192199707, -2.3374550342559814, -2.3226845264434814, 1.0537031888961792, -2.0353944301605225, -2.8840839862823486, -1.0816434621810913, -1.2895511388778687, -1.4665906429290771, -1.879166603088379, -0.6715376377105713, -0.9060519337654114, -3.2911500930786133, -1.6601240634918213, -1.2586548328399658, 0.7846032381057739, -1.4076411724090576, 2.3761954307556152, -0.0068921297788619995, -0.8526430726051331, -1.4239529371261597, -0.9651980400085449, -0.3084358870983124, -2.6593523025512695, -4.51272439956665, -3.846759080886841, -0.264786958694458, -3.1015594005584717, -1.8586152791976929, 1.2396572828292847, 0.4872204065322876, 0.31810009479522705, -2.1604723930358887, -1.9867172241210938, -3.048135757446289, -2.8708887100219727, -1.8841103315353394, -1.1307868957519531, -8.395145416259766, -8.912646293640137, -6.91707706451416, -4.316050052642822, -3.7324368953704834, -3.8086652755737305, -3.946287155151367, -4.903172016143799, -3.338960647583008, -1.9490082263946533, -0.4464111030101776, -0.01041414961218834, -5.482597351074219, -4.337868690490723, -2.302276849746704, -0.5417815446853638, -5.261777400970459, -3.6287102699279785, -2.8670549392700195, -1.1715818643569946, 2.4082601070404053, 2.3155205249786377, -1.30961275100708, -2.0798983573913574, -1.7543258666992188, -0.8788909912109375, -0.9141046404838562, 0.11732571572065353, 3.244760513305664, 4.5515618324279785, -0.570267915725708, -18.782840728759766, -3.6088829040527344, -5.332759857177734, -4.539529323577881, -16.06619644165039, -14.936424255371094, -15.030831336975098, -29.28931427001953, -13.075589179992676, -6.093319892883301, -5.8231916427612305, -5.667521953582764, -4.899781227111816, -5.190850734710693, -4.793137073516846, -4.966039657592773, -5.124669075012207, -4.944052696228027, -5.175408840179443, -3.154536008834839, -3.728513479232788, -5.0548858642578125, -3.758059501647949, -3.194476842880249, -3.508413553237915, -3.485253095626831, -4.196972370147705, -3.2448697090148926, -3.141759157180786, -3.1605613231658936, -3.1169254779815674, -5.169933795928955, -2.4049296379089355, -2.323885679244995, 1.0402504205703735, -2.150291919708252, -2.9381868839263916, -1.1183582544326782, -1.384813666343689, -1.6520863771438599, -1.8024953603744507, 1.1591219902038574, -0.8256304860115051, -3.2385435104370117, -1.8150010108947754, -1.3193364143371582, 0.8193210363388062, -1.221009373664856, 2.3958117961883545, 0.03928287327289581, -1.0275776386260986, -1.508032202720642, -1.0758867263793945, -0.2418442666530609, -2.61417818069458, -4.577299118041992, -3.6503682136535645, -0.31244587898254395, -3.081012010574341, -1.7621029615402222, 1.1646537780761719, 0.2716709077358246, 0.3604987859725952, -2.0217785835266113, -1.954727053642273, -3.020965814590454, -2.881538152694702, -1.9082502126693726, -1.1385557651519775, -8.499287605285645, -9.120352745056152, -6.841338634490967, -4.365355968475342, -3.611335515975952, -3.687152624130249, -3.9019813537597656, -5.091282367706299, -3.431231737136841, -1.9277317523956299, -0.3656170070171356, -0.05825749784708023, -5.426592826843262, -4.340138912200928, -2.459061861038208, -0.41598108410835266, -5.220657825469971, -3.601567029953003, -2.795365333557129, -1.1763371229171753, 2.811112642288208, 2.5227930545806885, -1.444344401359558, -1.5754635334014893, -1.0973962545394897, -0.7491856813430786, -0.9243454337120056, 0.13079145550727844, 3.151118040084839, 6.790395736694336, 0.32513368129730225, -12.827497482299805, -2.957951307296753, -1.7616462707519531, -4.232787609100342, -1.8743022680282593, -1.7567611932754517, -4.316827774047852, 3.419816017150879, -12.018769264221191, -5.7668023109436035, -5.60882568359375, -5.372860431671143, -5.002426624298096, -5.05574893951416, -4.7270708084106445, -5.024880886077881, -5.097719192504883, -5.005908012390137, -4.997485160827637, -3.166358470916748, -3.670208692550659, -5.238664150238037, -3.728379964828491, -3.17771315574646, -3.393096685409546, -3.891113758087158, -4.192734718322754, -3.3598718643188477, -3.155097246170044, -3.2248013019561768, -2.271979570388794, -5.302158832550049, -2.368779420852661, -2.420971155166626, 0.9169970154762268, -2.1893346309661865, -2.8826770782470703, -1.17876136302948, -1.3448166847229004, -1.0073626041412354, -1.7319085597991943, 1.0225878953933716, -0.9852231740951538, -3.2627015113830566, -1.6896803379058838, -1.3609062433242798, 1.10788893699646, -2.0538289546966553, 2.2444591522216797, 0.12137456238269806, 0.04628625884652138, -1.3568137884140015, -0.4794471263885498, -0.407931923866272, -1.2879277467727661, -4.405134677886963, -3.6737868785858154, -0.03872992843389511, -1.610177755355835, -1.7973215579986572, 1.3261101245880127, 0.4872419834136963, 0.4436241090297699, -1.4046887159347534, -2.079847574234009, -3.0631580352783203, -2.9221057891845703, -1.6201002597808838, -0.9972444176673889, -8.556312561035156, -9.002589225769043, -6.866401672363281, -3.0796523094177246, -3.6062872409820557, -3.7342910766601562, -3.9350335597991943, -4.882983207702637, -3.3224947452545166, -1.918792486190796, -0.5560785531997681, -0.13559351861476898, -5.573633670806885, -4.131962776184082, -2.367072582244873, -0.47103238105773926, -5.332761764526367, -3.6747207641601562, -2.871645450592041, -0.8256722092628479, 2.941892623901367, 2.502934455871582, -1.269112467765808, -1.4101308584213257, -1.1652023792266846, -0.800626277923584, -0.7536101937294006, 0.2163701355457306, 3.268038034439087, 6.86021614074707, 0.5129356980323792, -12.83459758758545, -3.1473758220672607, -1.8621606826782227, -4.232149124145508, -1.869612216949463, -1.7273067235946655, -4.113978385925293, 3.2919187545776367, -12.167437553405762, -5.740009784698486, -5.786488056182861, -5.412658214569092, -5.016499042510986, -5.11262321472168, -4.823041915893555, -5.151134014129639, -4.983872413635254, -4.937246799468994, -5.064393997192383, -3.193347454071045, -3.7103846073150635, -5.0858235359191895, -3.9251208305358887, -3.2472145557403564, -3.500729560852051, -3.899669885635376, -4.331266403198242, -3.426748037338257, -3.2863588333129883, -3.291468620300293, -2.3030073642730713, -5.200867652893066, -2.385159730911255, -2.3903801441192627, 1.0167884826660156, -2.19888973236084, -2.824765205383301, -1.1157466173171997, -1.2426419258117676, -1.1002538204193115, -1.6497070789337158, 1.186728835105896, -0.8782953023910522, -3.1967155933380127, -1.8226830959320068, -1.347823977470398, 0.9099755883216858, -2.451645612716675, 2.3240644931793213, -0.005819007754325867, -0.003381119342520833, -1.3195263147354126, -0.6934226751327515, -0.41471731662750244, -1.31814444065094, -4.533324718475342, -3.6912612915039062, 0.03214214742183685, -1.5663814544677734, -1.7064321041107178, 1.3282749652862549, 0.4978797733783722, 0.36116692423820496, -1.4167730808258057, -2.0364906787872314, -3.0129506587982178, -2.945878505706787, -1.5209360122680664, -1.123647928237915, -8.717535018920898, -8.99514102935791, -6.908481597900391, -4.345072269439697, -3.7309775352478027, -3.7125165462493896, -4.065122604370117, -4.99635648727417, -3.3609871864318848, -2.0716211795806885, -0.5877062082290649, -0.0616493858397007, -5.53644323348999, -4.132359504699707, -2.267481565475464, -0.44276005029678345, -5.357322692871094, -3.701948642730713, -2.858717203140259, -1.1447056531906128, 2.38533878326416, 2.5263023376464844, -1.270406723022461, -1.2259048223495483, -1.5087919235229492, -0.7332354784011841, -0.8843678832054138, 0.2249567210674286, 2.7270829677581787, 6.839478015899658, 0.36457327008247375, -12.985332489013672, -13.488051414489746, -2.212155818939209, -4.179521560668945, -10.305965423583984, -2.2630205154418945, -4.2650322914123535, 3.2165136337280273, -12.161434173583984, -5.455844402313232, -5.790342807769775, -5.330578804016113, -4.849613666534424, -5.01917839050293, -4.6553425788879395, -5.030160903930664, -5.154499053955078, -5.052484035491943, -5.025943279266357, -3.1107544898986816, -3.723585367202759, -5.083714485168457, -3.817638397216797, -3.2068088054656982, -3.535679578781128, -3.960758686065674, -4.185840129852295, -3.404463768005371, -3.181771993637085, -3.163426160812378, -2.4307937622070312, -5.159397602081299, -2.318039655685425, -2.4280123710632324, 1.109175682067871, -2.16939640045166, -2.7949440479278564, -1.0821527242660522, -1.2902882099151611, -1.1317893266677856, -1.7080326080322266, 1.100637435913086, -0.8294426202774048, -3.341434955596924, -1.7753850221633911, -1.189115285873413, 0.8867673873901367, -2.335678815841675, 2.3658251762390137, 0.13740785419940948, -0.8321027755737305, -2.6740853786468506, -0.5717334151268005, -0.34603822231292725, -1.2502217292785645, -4.402581691741943, -3.685314655303955, -0.3322296738624573, -1.413826584815979, -1.8322283029556274, 1.199074149131775, 0.28668448328971863, 0.3135620355606079, -1.1069045066833496, -2.049344778060913, -3.238943576812744, -3.0058977603912354, -1.612861156463623, -1.0803155899047852, -8.562191009521484, -9.116655349731445, -6.687618255615234, -4.475407123565674, -3.567601203918457, -3.872127056121826, -3.9123833179473877, -4.910545349121094, -3.3081064224243164, -2.0348949432373047, -0.45677995681762695, -0.10121360421180725, -5.542350769042969, -4.2080183029174805, -2.418548345565796, -0.37975195050239563, -5.366208076477051, -3.721823215484619, -2.790003776550293, -1.1252593994140625, 0.8020282983779907, 1.1572458744049072, 0.5900255441665649, 0.6378750205039978, 1.1789149045944214]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0.8, 1.37)}}, 'et2_eta2': {'discriminator': {'threshold': 0.55999852418899532, 'nodes': [100, 8, 1], 'bias': [-0.07655982673168182, 0.04617781937122345, -0.07329944521188736, 0.0852469801902771, -0.049393802881240845, -0.04781743884086609, 0.0020837648771703243, 0.10123120993375778, 0.28863173723220825], 'weights': [0.22343340516090393, -0.14321954548358917, -0.7969184517860413, -0.741295337677002, -0.9789867997169495, -0.9572865962982178, -0.16236446797847748, -0.5906817317008972, -0.16750997304916382, 2.7913169860839844, 2.56168794631958, 1.4937310218811035, 0.24083633720874786, -0.5946738123893738, 0.19848881661891937, 0.04796139523386955, -1.9238426685333252, 0.20910198986530304, 0.1546224057674408, -0.46144625544548035, -3.088106870651245, -1.3108936548233032, -0.6792631149291992, -1.096684455871582, -0.4145166277885437, -2.5957822799682617, -1.6750906705856323, -2.6148037910461426, -4.941394805908203, -1.0071359872817993, -1.1465017795562744, -1.030295491218567, -0.5925990343093872, -1.6988445520401, -1.0531017780303955, -1.020698070526123, -2.7289516925811768, -1.0833101272583008, 1.142014503479004, -0.7882360219955444, -0.7749398350715637, -0.7853214144706726, 2.313577651977539, -2.747591257095337, 1.867350459098816, -0.9817673563957214, -1.086301565170288, -1.2249387502670288, -0.8839070200920105, -0.8902090191841125, -0.580605685710907, -0.7777495980262756, -2.8894705772399902, -0.8431349396705627, -0.789000928401947, -2.120290994644165, -0.07784846425056458, 3.4826533794403076, -0.4669339954853058, -0.29841503500938416, -0.9088532328605652, -1.1546927690505981, 2.0670769214630127, -0.6617923974990845, 4.524196624755859, 3.1855268478393555, 1.2950915098190308, 0.06424147635698318, -0.904999315738678, -0.8628777265548706, -0.8245858550071716, -1.0090689659118652, 0.2747821807861328, 0.10214386880397797, -2.4779117107391357, -0.9773576855659485, -1.8188464641571045, -1.3777896165847778, -1.2273633480072021, -0.7081152200698853, -0.16788071393966675, -1.1654075384140015, -1.259030818939209, -1.1874983310699463, -0.9264681935310364, -0.9186518788337708, -0.8914804458618164, -0.9218055009841919, 0.7837216854095459, -0.8910134434700012, -0.2089620679616928, 0.16324535012245178, -4.087540626525879, -1.0314360857009888, -0.8699924945831299, -1.015000581741333, -0.10263320058584213, 0.07023771852254868, -0.37558451294898987, -0.30881813168525696, 0.2082013189792633, 0.06330819427967072, -0.8568580746650696, -0.8060777187347412, -0.83689284324646, -0.7497181296348572, -0.1738254874944687, -0.4366702139377594, -0.3223575949668884, 2.9135329723358154, 2.4753031730651855, 1.537800908088684, 0.20792335271835327, -0.5464007258415222, 0.046046413481235504, 0.1231943741440773, -1.8414950370788574, 0.16063444316387177, 0.003367061261087656, -1.217653512954712, -3.2840464115142822, -1.2698521614074707, -0.8337908983230591, -0.9966315031051636, -0.35329461097717285, -1.4399248361587524, -1.5452131032943726, -2.6740429401397705, -4.942326068878174, -1.0309700965881348, -1.060135006904602, -1.056551218032837, -0.6609721183776855, -1.6627198457717896, -0.8930734992027283, -0.9364414215087891, -2.73632550239563, -1.1858092546463013, 1.1292157173156738, -0.8602423071861267, -0.7451333999633789, -0.6334381699562073, 2.317405939102173, -2.7447357177734375, 1.8164399862289429, -0.8790375590324402, -1.0266516208648682, -1.2070320844650269, -1.0807114839553833, -0.9633757472038269, -0.3880324363708496, -0.9220374822616577, -2.911503314971924, -0.6549553275108337, -0.8126870393753052, -2.0710089206695557, -0.20544598996639252, 3.5708484649658203, -0.49633222818374634, -0.1758769303560257, -0.8343421816825867, -1.078677773475647, 1.9122920036315918, -0.8494187593460083, 4.3852691650390625, 3.200863838195801, 1.1445114612579346, -0.09215206652879715, -1.0130023956298828, -0.7751897573471069, -0.7957462668418884, -1.0866068601608276, 0.26328665018081665, -0.11597792059183121, -2.54250168800354, -1.0498559474945068, -1.6831717491149902, -1.3642908334732056, -1.2684246301651, -0.7591524124145508, -0.2174561619758606, -4.891088485717773, -1.4618377685546875, -1.0080394744873047, -0.929750382900238, -0.9019274115562439, -0.913806676864624, -0.8016263842582703, 0.6376355886459351, -0.7236019372940063, -0.21736304461956024, 0.3427373468875885, -4.053901672363281, -0.9434950351715088, -0.9492806792259216, -0.8692220449447632, -0.009448030032217503, 0.11537988483905792, -0.3962923586368561, -0.30279508233070374, -0.11674385517835617, 0.0715663805603981, 0.8507844805717468, 0.8731920123100281, 0.7847808599472046, 0.7785347104072571, 0.173873171210289, 0.5018649697303772, 0.4123990833759308, -2.975001096725464, -1.5538098812103271, -1.5466874837875366, -0.28720423579216003, 0.6159036755561829, -0.1280972957611084, -0.2603619694709778, 1.8770792484283447, -0.2359393686056137, -0.07419365644454956, 1.267500400543213, 3.276418924331665, 1.244958519935608, 0.8461859226226807, 1.0035147666931152, 0.4249263405799866, 1.5108433961868286, 1.6834756135940552, 2.677158832550049, 5.054049968719482, 0.9495651721954346, 1.1234631538391113, 1.0083847045898438, 0.4630945026874542, 1.2207255363464355, 0.9218323826789856, 0.9377996921539307, 2.8223962783813477, 1.2048046588897705, -1.0724740028381348, 0.7850067615509033, 0.9540084600448608, 0.7268407940864563, -2.411339044570923, 2.622981548309326, -1.9048823118209839, 0.954401433467865, 1.019078254699707, 1.1443625688552856, 1.070959210395813, 0.8751644492149353, 0.3850209712982178, 0.9144691824913025, 3.0497469902038574, 0.6741500496864319, 0.8218127489089966, 2.290695905685425, 0.2857479751110077, -3.6748085021972656, 0.46778643131256104, 0.3777141273021698, 0.9003259539604187, 1.1232715845108032, -2.00996994972229, 0.9688726663589478, -4.524957656860352, -3.0184340476989746, -0.9719988107681274, 0.02877887897193432, 0.9630817174911499, 0.952743649482727, 0.9084296226501465, 0.9942100048065186, -0.24129773676395416, -0.11661992967128754, 2.579699993133545, 0.9712111353874207, 1.7772858142852783, 1.3841044902801514, 1.3784581422805786, 0.8533254861831665, 0.26534998416900635, 4.9882988929748535, 1.07706618309021, 1.0975077152252197, 0.7948075532913208, 0.9976577162742615, 0.9716132879257202, 0.7567970156669617, -0.6556764841079712, 0.7230876088142395, 0.3645001947879791, -0.28498318791389465, 4.127756118774414, 1.0028256177902222, 0.8751408457756042, 1.0547360181808472, -0.00014002238458488137, -0.06870749592781067, 0.2670288383960724, 0.2527075707912445, -0.23057374358177185, 0.1159537136554718, 0.733686089515686, 0.7673280239105225, 0.8657631278038025, 0.8761321306228638, 0.09439922869205475, 0.4805983603000641, 0.24639520049095154, -2.8465054035186768, -2.4486613273620605, -1.502673864364624, -0.12065938115119934, 0.48617175221443176, -0.11879396438598633, -0.18583029508590698, 1.862165927886963, -0.15171419084072113, 0.062174439430236816, 0.3802166283130646, 3.2006494998931885, 1.21664297580719, 0.7338136434555054, 0.8903597593307495, 0.27823829650878906, 2.5870518684387207, 1.5798734426498413, 2.5969998836517334, 4.420010566711426, 1.0058954954147339, 1.0823618173599243, 1.0875388383865356, 0.556039035320282, 1.3046209812164307, 0.8941696286201477, 0.8771262168884277, 2.489576816558838, 1.0986230373382568, -1.1534610986709595, 0.8150595426559448, 0.9772729277610779, 0.6446929574012756, -2.452162265777588, 2.827893018722534, -1.8742727041244507, 0.9241117835044861, 1.027500033378601, 1.157573938369751, 0.8824051022529602, 0.8059958815574646, 0.5275769829750061, 0.8900220990180969, 2.9532198905944824, 0.8458910584449768, 0.9371623396873474, 2.289970874786377, 0.07063987851142883, -3.671917676925659, -2.1410415172576904, 0.35559019446372986, 0.9562572836875916, 0.9989854097366333, -1.9538923501968384, 0.6736979484558105, -4.322859764099121, -3.2325096130371094, -1.184324860572815, -0.07266504317522049, 0.8745638728141785, 0.9634345173835754, 0.9299636483192444, 0.9387571811676025, -0.10403236001729965, 0.10685780644416809, 2.486668348312378, 0.9303608536720276, 1.7279841899871826, 1.3289790153503418, 1.3552104234695435, 0.8579573035240173, 0.27706554532051086, 0.998016893863678, 1.27894127368927, 1.118223786354065, 1.0036280155181885, 1.087958574295044, 0.99065101146698, 0.7499627470970154, -0.5614715814590454, 0.8232236504554749, 0.335134357213974, -0.13579979538917542, 3.9406707286834717, 1.0299527645111084, 0.908333420753479, 1.0707021951675415, 0.05540156736969948, 0.08010388165712357, 0.18064694106578827, 0.22991688549518585, -0.053718987852334976, 0.03770876303315163, 0.8211138248443604, 0.9251333475112915, 0.9422194361686707, 0.9227993488311768, 0.20368193089962006, 0.4970192313194275, 0.37606605887413025, -2.9752488136291504, -2.5571131706237793, -1.4064146280288696, -0.25167956948280334, 0.6407450437545776, -0.09174489229917526, -0.24206680059432983, 1.794206142425537, -0.13071288168430328, -0.14342865347862244, 1.181628942489624, 3.1931679248809814, 1.161007285118103, 0.6395425796508789, 0.9108783006668091, 0.27959346771240234, 1.3069024085998535, 1.65396249294281, 2.5047287940979004, 4.858447551727295, 1.0527172088623047, 1.1473751068115234, 0.8762071132659912, 0.532788872718811, 1.2153698205947876, 0.8419976234436035, 0.9237966537475586, 2.7201690673828125, 1.1543779373168945, -1.0917235612869263, 0.8875826001167297, 0.9029335975646973, 0.8400679230690002, -2.4096264839172363, 2.6078319549560547, -1.7664130926132202, 0.9920657277107239, 1.0218231678009033, 1.199558138847351, 0.9727138876914978, 0.8082738518714905, 0.5954812169075012, 0.974108874797821, 2.8985040187835693, 0.6783674359321594, 0.7892172336578369, 2.2352566719055176, 0.08562389016151428, -3.4957809448242188, 0.4810532331466675, 0.22312386333942413, 0.9413687586784363, 1.1608532667160034, -2.055600881576538, 0.8384740352630615, -4.492331504821777, -3.1443004608154297, -1.1783127784729004, -0.041278451681137085, 1.0278916358947754, 0.7890925407409668, 0.9406034350395203, 1.008379578590393, -0.05296599864959717, -0.08233290910720825, 2.5783183574676514, 1.0592559576034546, 1.6081008911132812, 1.3850672245025635, 1.2805626392364502, 0.8270314335823059, 0.09334245324134827, 4.859727382659912, 1.1108125448226929, 1.1218739748001099, 0.9115898013114929, 0.9984079003334045, 0.9409406185150146, 0.9145911931991577, -0.7170349359512329, 0.706082284450531, 0.3673035204410553, -0.30489805340766907, 4.147932052612305, 0.9603983163833618, 0.9659633636474609, 0.8664016723632812, 0.07270254194736481, 0.1184486597776413, 0.24982959032058716, 0.3911813795566559, -0.2137686312198639, 0.02675258368253708, 0.7096277475357056, 0.8169723153114319, 0.7832303047180176, 0.9360334873199463, 0.21627460420131683, 0.6310918927192688, 0.3179105818271637, -2.9908299446105957, -1.7069120407104492, -1.3913296461105347, -0.21819917857646942, 0.5974876880645752, -0.16580218076705933, -0.05874728783965111, 1.940727949142456, -0.04484415054321289, -0.11117886751890182, 0.5372625589370728, 3.31087327003479, 1.2650471925735474, 0.7965402603149414, 0.9625160694122314, 0.41458410024642944, 1.501137614250183, 1.4837394952774048, 2.6789937019348145, 4.883045196533203, 1.0389249324798584, 0.951423704624176, 0.979072093963623, 0.5104587078094482, 1.145853042602539, 0.8391197919845581, 0.9807944297790527, 2.9022035598754883, 1.1616744995117188, -1.138969898223877, 0.7731444835662842, 0.8922306299209595, 0.7459601759910583, -2.270662307739258, 2.6330277919769287, -1.9013599157333374, 0.8186554312705994, 0.992020845413208, 1.2087147235870361, 0.8875907063484192, 0.8083035349845886, 0.5574833750724792, 0.7683736681938171, 3.000155448913574, 0.7997855544090271, 0.8734368085861206, 2.233581304550171, 0.1629600077867508, -3.584202766418457, 0.4153255820274353, 0.32263895869255066, 0.8415730595588684, 1.1370948553085327, -2.091538190841675, 0.9546653032302856, -4.3472900390625, -3.1855340003967285, -1.2434409856796265, 0.04753706231713295, 0.98084956407547, 0.9150350093841553, 0.9125065803527832, 0.9637389779090881, -0.25944823026657104, 0.030952535569667816, 2.5564563274383545, 0.9561443328857422, 1.7862932682037354, 1.3309850692749023, 1.1890255212783813, 0.9176821112632751, 0.27760735154151917, 1.2800241708755493, 1.2340452671051025, 1.1694729328155518, 0.9034730792045593, 0.9675430655479431, 0.9892826080322266, 0.9813922643661499, -0.5980042219161987, 0.6911150813102722, 0.29530248045921326, -0.2832447588443756, 4.106788158416748, 1.0907776355743408, 0.865490734577179, 0.9727181792259216, -0.07646874338388443, -0.0495702289044857, 0.20658829808235168, 0.20768584311008453, 0.04429035261273384, -0.0433923676609993, -0.9134440422058105, -0.7716778516769409, -0.9881393313407898, -0.9322150945663452, -0.2140124887228012, -0.4854046702384949, -0.2995252013206482, 2.8478212356567383, 2.529799222946167, 1.3921564817428589, 0.16275128722190857, -0.6251542568206787, 0.19713158905506134, 0.19618692994117737, -1.8141940832138062, 0.2411600649356842, 0.0529620498418808, -0.3727266788482666, -3.198047637939453, -1.2138251066207886, -0.7363572120666504, -1.021730899810791, -0.23983481526374817, -1.2998919486999512, -1.5453191995620728, -2.6852004528045654, -5.03449010848999, -0.9100886583328247, -1.1855742931365967, -1.0559604167938232, -0.6422983407974243, -1.3397839069366455, -0.862576425075531, -1.0735080242156982, -2.848280668258667, -1.1910055875778198, 1.2000806331634521, -0.7991795539855957, -0.8205350637435913, -0.7647427916526794, 2.2373175621032715, -2.6086435317993164, 1.863047480583191, -0.8125342726707458, -1.074232816696167, -1.1286301612854004, -0.9291890263557434, -0.9568683505058289, -0.5568981766700745, -0.9411821365356445, -2.8534626960754395, -0.7308806777000427, -0.8614240884780884, -2.156174421310425, -0.13684506714344025, 3.5264992713928223, -0.32664069533348083, -0.20393343269824982, -0.7623044848442078, -1.0478729009628296, 2.1414926052093506, -0.5593440532684326, 4.486616134643555, 3.203895092010498, 1.0981566905975342, -0.09826714545488358, -0.9999253749847412, -1.007345199584961, -0.7452923655509949, -0.9030133485794067, 0.1564921885728836, 0.11105343699455261, -2.479482889175415, -1.1055493354797363, -1.6463027000427246, -1.3443597555160522, -1.2502096891403198, -0.8274266123771667, -0.19551128149032593, -4.7850728034973145, -1.292590618133545, -1.1847198009490967, -0.8951672911643982, -1.0380836725234985, -0.9189863204956055, -0.955099880695343, 0.7137960195541382, -0.7855178713798523, -0.14217603206634521, 0.23426973819732666, -4.120105743408203, -0.8958330154418945, -0.9430932402610779, -1.0907455682754517, 0.04573884606361389, 0.04677553474903107, -0.36726489663124084, -0.2497732788324356, -0.28974300622940063, 0.054067306220531464, 0.708282470703125, 0.9231085777282715, 0.8193240165710449, 0.8251836895942688, 0.2579769492149353, 0.5626338124275208, 0.3770608603954315, -2.9594309329986572, -2.6156413555145264, -1.4124524593353271, -0.12167993187904358, 0.5273809432983398, -0.17264917492866516, -0.21231192350387573, 1.785294532775879, -0.18236799538135529, 0.052227526903152466, 0.3973369598388672, 3.160827398300171, 1.266247034072876, 0.8668997287750244, 0.9340139627456665, 0.4354833960533142, 2.513948678970337, 1.6737345457077026, 2.6224794387817383, 4.277675628662109, 0.9889689683914185, 1.0266441106796265, 0.8903666734695435, 0.4771876633167267, 1.227838397026062, 0.8484460115432739, 0.999708890914917, 2.6096272468566895, 1.220813512802124, -1.1966242790222168, 0.9037378430366516, 0.7387562394142151, 0.6823309063911438, -2.363344669342041, 2.836137294769287, -1.7910863161087036, 0.9634130597114563, 1.004923939704895, 1.1682276725769043, 0.8867138028144836, 0.7691341042518616, 0.5510122179985046, 0.858849823474884, 2.9702963829040527, 0.7546311020851135, 0.9539784789085388, 2.2165112495422363, 0.15405817329883575, -3.5655791759490967, -2.1933605670928955, 0.3010120093822479, 0.8021878600120544, 1.1387302875518799, -1.9578548669815063, 0.6887824535369873, -4.507678031921387, -3.0344138145446777, -1.2946633100509644, 0.11034775525331497, 0.9470683336257935, 0.8142690658569336, 0.8681297898292542, 1.0205273628234863, -0.17983399331569672, -0.11393976211547852, 2.572343111038208, 0.9020224213600159, 1.794269323348999, 1.3964163064956665, 1.3418643474578857, 0.932891845703125, 0.05985955148935318, 1.003767728805542, 1.3183605670928955, 1.165875792503357, 0.9224570989608765, 0.8964117169380188, 0.9605047702789307, 0.7478715777397156, -0.6423405408859253, 0.7450972199440002, 0.28280380368232727, -0.12295665591955185, 3.997950553894043, 0.9693208932876587, 0.9316984415054321, 0.9475011825561523, -0.05491603910923004, -0.0025306360330432653, 0.23612764477729797, 0.43988505005836487, 1.668373465538025, 1.1371721029281616, -1.097514271736145, -0.5632918477058411, -1.1591737270355225, -0.7539603114128113, 1.0011816024780273, -2.256110906600952]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (1.37, 1.54)}}, 'et2_eta3': {'discriminator': {'threshold': -0.34000080749392508, 'nodes': [100, 5, 1], 'bias': [0.13335025310516357, 0.248552143573761, 0.2607596516609192, 0.23980382084846497, -0.17763327062129974, 0.2343870997428894], 'weights': [-10.756834030151367, -5.154053688049316, -7.0025458335876465, -2.218642473220825, -1.07419753074646, -2.0236716270446777, -0.4742881953716278, -0.03815107047557831, -0.2741263508796692, -3.1508870124816895, 19.5971622467041, 2.403977870941162, -2.0943031311035156, 7.2989888191223145, 3.9618937969207764, -5.566046237945557, 51.05552291870117, 0.37886664271354675, 4.642994403839111, -0.6491299271583557, 11.151782989501953, 0.11410417407751083, 23.86515235900879, -1.9333291053771973, -10.39181137084961, -0.6153316497802734, 42.109947204589844, -0.2110520750284195, 12.593066215515137, -1.1302924156188965, 26.546398162841797, -8.614419937133789, 0.13233278691768646, 0.25577646493911743, 24.940628051757812, -0.20735733211040497, 5.364617824554443, 0.10353343933820724, 3.115074634552002, 0.14641344547271729, 8.40974235534668, 8.625457763671875, 0.09375984966754913, 1.208945393562317, 0.07423337548971176, 0.15145687758922577, 0.46819332242012024, -16.380521774291992, -0.15161031484603882, 21.851728439331055, 12.557600975036621, 0.10420508682727814, -4.14501428604126, 0.21442590653896332, 18.04941177368164, 0.17690162360668182, -0.0108153922483325, 0.04098479449748993, 0.3071639835834503, 0.1312766969203949, 0.4420854449272156, 23.29166030883789, 0.018159044906497, 0.13832451403141022, 0.8246799111366272, -8.584503173828125, 0.05028685927391052, 3.3795101642608643, -0.12710095942020416, 0.23381438851356506, 0.022220849990844727, -30.590267181396484, -0.12401554733514786, 0.1345580667257309, 0.22404614090919495, -8.626749038696289, 0.12128259986639023, 0.2123095840215683, -0.9947080612182617, 0.15545381605625153, -3.0764477252960205, -1.8702014684677124, 0.42185866832733154, 16.13136100769043, -0.6422619223594666, 0.16187888383865356, -0.9172854423522949, 9.631973266601562, -1.1423531770706177, -2.620586395263672, -2.374701738357544, -3.936511278152466, 0.25551971793174744, -0.02190171182155609, -0.04584646224975586, -0.27712079882621765, 0.14468258619308472, 0.030499180778861046, -3.141718864440918, 88.65790557861328, -2.5324573516845703, -4.374341011047363, 0.6859371066093445, 1.9106290340423584, 0.6596091985702515, 1.8849974870681763, -0.674700140953064, 0.660778820514679, -3.480478525161743, -4.1822190284729, -1.4325149059295654, 1.1752970218658447, 1.7581167221069336, -0.5020906329154968, 4.604200839996338, 1.9714369773864746, 2.4581234455108643, 7.138940334320068, 5.738563060760498, 3.129223585128784, 3.9697062969207764, 3.5533447265625, 1.1901803016662598, 5.782238483428955, 8.86247444152832, 0.523585319519043, -0.02157605066895485, 1.1680787801742554, 3.927422046661377, 2.714078903198242, -0.4944123923778534, 3.6332807540893555, 2.709134817123413, 2.9711852073669434, 5.126705646514893, -0.7336161732673645, 0.9812389016151428, 2.3340704441070557, 1.3021881580352783, 1.3694522380828857, 1.2027201652526855, 1.2100907564163208, 1.289125680923462, 4.048458099365234, 2.1643471717834473, 0.35024294257164, 1.4579193592071533, 3.5349833965301514, -0.15462449193000793, -3.88193416595459, 2.7522335052490234, -0.06720936298370361, 3.204317331314087, -0.019455675035715103, 3.507672071456909, 0.4213518500328064, 0.3603975772857666, 2.0518710613250732, 0.5751850008964539, -1.5830974578857422, 3.848586320877075, 0.9717985987663269, 0.44291964173316956, -0.8807228207588196, 2.290783643722534, -0.23605653643608093, 1.227684497833252, -0.003825950436294079, -4.663488388061523, 1.6658002138137817, 5.13378381729126, 6.0269598960876465, -1.0647153854370117, -0.6556851863861084, 1.803419828414917, 2.9657299518585205, 2.5982794761657715, 2.7404441833496094, 1.6974892616271973, 1.6881728172302246, 0.6873123049736023, 6.274681091308594, 8.36557674407959, 4.364907741546631, 1.637835144996643, 1.103344440460205, 2.2714977264404297, 0.7774200439453125, 0.7928032875061035, 1.8765802383422852, 0.5476711988449097, 0.07748151570558548, 6.8607659339904785, 2.732969045639038, 0.3886774480342865, 2.827256679534912, 0.37176939845085144, -0.013558509759604931, -0.3260025382041931, 8.167928695678711, 53.11573028564453, 31.998504638671875, 0.7986357808113098, -7.163128852844238, -0.6253488659858704, 1.1188615560531616, -1.3782844543457031, 0.7688377499580383, 0.42100590467453003, 1.7917190790176392, -15.676565170288086, 12.676505088806152, -0.9360592365264893, -4.500792503356934, -21.410022735595703, 1.1764541864395142, -1.2546459436416626, -11.680105209350586, -23.284387588500977, -4.306753635406494, -19.183818817138672, 6.2244367599487305, -12.680574417114258, -3.5009639263153076, 12.968194961547852, -9.88486099243164, -82.18316650390625, 0.15911909937858582, 0.6369820833206177, 1.7977516651153564, -0.29602837562561035, 1.5609605312347412, 5.279357433319092, -5.59156608581543, -23.88628578186035, -12.71351146697998, -8.801299095153809, 20.297061920166016, 0.021973656490445137, -0.8585444688796997, -2.9222116470336914, 1.2671905755996704, 0.5269664525985718, 8.260369300842285, -3.2834479808807373, 0.6941452026367188, -14.314531326293945, 24.933794021606445, -8.902850151062012, -11.617528915405273, -30.619714736938477, 13.680442810058594, -20.13739585876465, 10.085596084594727, -14.83609390258789, 26.037694931030273, -0.14633238315582275, 1.1378346681594849, 0.3858771026134491, -7.258084297180176, 0.43984153866767883, 10.910409927368164, -17.31711196899414, -1.007501482963562, -27.515432357788086, -0.1505083441734314, -21.593725204467773, 8.039786338806152, -2.401052236557007, 0.6295750737190247, 0.02726588025689125, 13.659438133239746, 0.3220360279083252, -2.358847141265869, 5.056670665740967, 0.7876736521720886, 1.9370248317718506, -0.09462462365627289, -0.18033425509929657, 0.12362048029899597, -8.971482276916504, 2.0015969276428223, 3.0477662086486816, -7.6233625411987305, 1.0016531944274902, 0.3745057284832001, 1.0311485528945923, 0.21755991876125336, 40.135868072509766, 12.324202537536621, 0.6266895532608032, 2.2410624027252197, 2.065934419631958, 0.9237793684005737, 0.18036027252674103, -16.828275680541992, 0.35438159108161926, -0.1555556058883667, 4.154973030090332, -475.23138427734375, -2.502817153930664, -4.302284240722656, -0.6296444535255432, 1.8844630718231201, 0.6088113188743591, 2.2870635986328125, -0.5094284415245056, 0.7945058941841125, -3.447042942047119, -3.647264003753662, -0.6113442778587341, 1.1077313423156738, 2.127782106399536, -0.40056928992271423, 4.655635356903076, 2.178720712661743, 2.7995572090148926, 7.104198455810547, 5.905070781707764, 3.2854087352752686, 3.934929370880127, 3.707108497619629, 1.3646639585494995, 5.755138874053955, 8.847835540771484, 0.8089349269866943, -0.11532001197338104, 1.146803617477417, 2.426882028579712, 2.8990681171417236, -0.38362497091293335, 3.910571336746216, 2.6533946990966797, 2.781461477279663, 5.299633026123047, -0.5826964378356934, 0.9958195686340332, 2.4386825561523438, 1.2550694942474365, 1.4544106721878052, 1.2984797954559326, 1.8875641822814941, 1.4372845888137817, 4.373566627502441, 2.349292278289795, 0.2892161011695862, 2.2028911113739014, 3.612194299697876, -1.7294856309890747, -0.4223075211048126, 2.4665699005126953, -0.20626167953014374, 2.9696385860443115, -0.010548719204962254, 3.3602588176727295, 0.39201220870018005, 0.32493478059768677, 2.06101393699646, 0.6399164199829102, -1.390122652053833, 2.6932859420776367, 0.8907122611999512, 0.553081750869751, -0.7583954930305481, 2.277139902114868, 0.6291739344596863, 2.7604525089263916, -0.005663110874593258, -5.736014366149902, 1.6331316232681274, 1.4976601600646973, 6.064630508422852, -0.925768256187439, -0.5103186964988708, 1.661220908164978, 3.0831050872802734, 2.750983953475952, 2.756680488586426, 1.649301528930664, 1.712792158126831, 0.26813170313835144, 5.1360344886779785, 8.015815734863281, 4.326051712036133, 1.5424004793167114, 1.0750715732574463, 2.370279550552368, 0.7323935031890869, 0.3343536853790283, 2.009101390838623, 0.6932831406593323, -0.03671253100037575, 6.679688930511475, 2.4077558517456055, 0.3968178927898407, 2.891972780227661, 0.2196534425020218, 0.00961389858275652, -0.5204793810844421, 8.124086380004883, 0.4501791000366211, 1.2842708826065063, 1.2731422185897827, 0.6348394751548767, -0.435335248708725, 0.5225095748901367, 0.43921151757240295, -1.3023449182510376, 3.713515281677246, 6.4112348556518555, 0.842943549156189, -10.726643562316895, -8.334908485412598, -0.16133823990821838, -4.632417678833008, -2.0630006790161133, 3.4924919605255127, -7.2158379554748535, -5.91160249710083, -5.372579097747803, -3.8819172382354736, -5.345448017120361, -0.25050151348114014, -5.493337154388428, -7.339334487915039, -5.2933125495910645, 0.12195873260498047, -0.9954842329025269, -1.3830924034118652, -2.6811864376068115, 0.4685163199901581, -3.6322438716888428, -2.5715246200561523, -2.889451742172241, -5.268944263458252, 0.6407426595687866, -0.7952390313148499, -2.078568696975708, -1.1098804473876953, 0.33429673314094543, -1.1769680976867676, -1.0174493789672852, -1.510162353515625, -3.542238473892212, -1.597876787185669, -0.34909144043922424, -1.2422542572021484, -2.7350168228149414, 2.5111312866210938, 2.6181581020355225, -1.2021911144256592, 0.1684180051088333, -3.4331066608428955, -0.26513049006462097, -3.43839955329895, 6.674975395202637, -0.31000077724456787, -1.8686954975128174, -0.5798888802528381, 4.219579219818115, -3.7151522636413574, -0.4743309020996094, -0.43988871574401855, 0.8754767775535583, -2.315849542617798, 6.703108310699463, -1.2990057468414307, 7.061644077301025, 5.463805675506592, -1.585597276687622, -0.7856287956237793, -6.636855125427246, 1.067458987236023, 0.5610536932945251, -1.2216709852218628, -2.821749210357666, -2.791036367416382, -1.9990876913070679, -1.3242096900939941, -1.6728241443634033, -0.34435802698135376, -4.782454013824463, -7.547537803649902, -0.2774135172367096, -0.8089768886566162, -1.030517339706421, -2.8310625553131104, -0.5920827984809875, 0.15740729868412018, -0.825404167175293, -0.5701107382774353, 0.312010794878006, -1.5172830820083618, -0.5282378792762756, -0.1631062626838684, -1.8005297183990479, -0.6700261235237122, 0.043705716729164124, 0.4681946039199829, -10.75798511505127, -0.8759651780128479, -1.5461176633834839, -1.23297119140625, -1.4937539100646973, 1.4530240297317505]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (30, 40), 'etaBin': (1.54, 2.5)}}, 'et2_eta0': {'discriminator': {'threshold': -0.94999999999999996, 'nodes': [100, 7, 1], 'bias': [0.019224368035793304, 0.45628318190574646, -0.12031170725822449, -0.015363171696662903, -0.049233756959438324, 0.045791663229465485, 0.03335244953632355, -0.09124189615249634], 'weights': [2.4329495429992676, 1.4420313835144043, -0.15772387385368347, -0.45292413234710693, 0.3055766224861145, 0.5392810702323914, 0.5628986954689026, 0.07073460519313812, 1.9584318399429321, 1.8563319444656372, -2.371872663497925, -2.354975938796997, -2.7561957836151123, 2.817047119140625, 0.08973520249128342, -3.268537998199463, -1.070982575416565, -1.8271304368972778, -2.4616522789001465, -2.3151986598968506, -1.887192964553833, -1.8527302742004395, -2.3407819271087646, -2.473985433578491, -1.3908601999282837, -1.4299952983856201, -1.5499542951583862, -2.0558488368988037, -1.5325924158096313, -1.394205927848816, -1.5222370624542236, -1.4686172008514404, -1.5534261465072632, -1.4842036962509155, -1.3858249187469482, -1.3416050672531128, -1.531836748123169, -1.428819179534912, -1.4558062553405762, -0.8207655549049377, -0.8782278299331665, -1.0157896280288696, -0.5276156067848206, -0.8581804037094116, -0.6648080945014954, -0.45357322692871094, -0.8857735395431519, -0.8280180096626282, -0.8657222390174866, -0.8005098700523376, -0.6567687392234802, -0.0016746609471738338, -0.6134666800498962, -0.7531946301460266, -0.7140744924545288, -0.4470549523830414, -0.636455774307251, -0.19409911334514618, -0.41761863231658936, 0.07512872666120529, -0.46277540922164917, 1.4176570177078247, -0.8929492831230164, -0.9296699166297913, -0.8491492867469788, -0.9557816386222839, 0.2912381589412689, -0.44588908553123474, 0.19240215420722961, -0.5164107084274292, -0.6210252046585083, -0.9396032691001892, 0.6607837080955505, 0.14490465819835663, -0.6050184965133667, -1.12909734249115, -1.4073784351348877, -0.8343877196311951, -1.138207197189331, -0.5169039368629456, -1.937561273574829, -1.8662525415420532, -1.915310263633728, -2.233858823776245, -1.7492365837097168, -1.3136546611785889, -1.3534401655197144, -1.400665044784546, -2.9078454971313477, -2.20707631111145, -0.9425890445709229, -0.03192368894815445, -2.7494051456451416, -1.704785704612732, -0.6634554862976074, 0.05951673164963722, -4.10584831237793, -2.448336601257324, -0.41072091460227966, -0.27269992232322693, -1.4788968563079834, -0.8261141777038574, -0.05670209601521492, 0.002791410544887185, -0.28939205408096313, -0.3831201195716858, -0.2669445276260376, -0.39940598607063293, -0.8653852343559265, -1.1035109758377075, 5.203746795654297, 4.88874626159668, -0.08087887614965439, -0.29121914505958557, -0.5097947716712952, 0.4677366018295288, 0.7954995632171631, 0.7813175916671753, 1.2717020511627197, 0.9484448432922363, 0.7764231562614441, 0.809074342250824, 0.8015225529670715, 0.9934772849082947, 0.479518324136734, 0.56662517786026, 0.4497523307800293, 0.5770207047462463, 0.579328715801239, 0.5804927945137024, 0.47426074743270874, 0.5920686721801758, 0.5701936483383179, 0.6489295959472656, 0.47899195551872253, 0.40846553444862366, 0.3863874673843384, 0.4638066589832306, 0.40672117471694946, 0.2634744942188263, 0.15485037863254547, 0.026525290682911873, 0.07605506479740143, 0.11399006843566895, 0.3101194500923157, 0.14307749271392822, 0.16039623320102692, 0.23738282918930054, 0.24280521273612976, 0.26603251695632935, 0.14755947887897491, -0.15468497574329376, 0.23101232945919037, 0.1688367873430252, 0.11484790593385696, -0.033109478652477264, 0.0003158295003231615, -0.14705990254878998, 0.13513056933879852, -0.05535063147544861, -0.6226818561553955, -0.831747829914093, 0.17960545420646667, 0.26952144503593445, 0.0686379075050354, 0.16775889694690704, -0.13495196402072906, 0.09117455780506134, -0.32439175248146057, -0.042516350746154785, 0.1461169421672821, 0.3471764624118805, -0.17577430605888367, -2.5552563667297363, 0.15897704660892487, 0.17573589086532593, -0.05086727440357208, -0.13653911650180817, -1.011115312576294, -0.19663439691066742, 0.20274174213409424, 0.7060439586639404, 0.4570104777812958, 0.4854345917701721, 0.4555254578590393, 0.4067375063896179, 0.5382141470909119, 0.3978714942932129, 0.8932828903198242, 0.6028915047645569, -0.05715129151940346, -0.34641629457473755, 1.0517120361328125, 0.578312337398529, -0.71567702293396, -0.18141664564609528, 1.7424260377883911, 0.9161783456802368, -0.5402849912643433, 0.09533532708883286, 2.562138795852661, 1.5500154495239258, -0.24047265946865082, -0.29138559103012085, 0.3148193657398224, 0.47478795051574707, 0.4756316542625427, 0.40536364912986755, 2.0594069957733154, 1.807045817375183, -2.1784279346466064, -2.0940635204315186, -0.9356326460838318, 2.7754881381988525, -1.3487353324890137, -1.4713248014450073, -1.16933012008667, -2.811002254486084, -3.2187931537628174, -2.675110101699829, -2.3073205947875977, -1.9761515855789185, -2.4064102172851562, -2.545433282852173, -1.5459630489349365, -1.544931411743164, -1.481935739517212, -1.8270764350891113, -1.4253467321395874, -1.4545460939407349, -1.3441903591156006, -1.4803478717803955, -1.5137966871261597, -1.3985644578933716, -1.3568552732467651, -1.302380919456482, -1.5009571313858032, -1.4774668216705322, -1.3306632041931152, -0.9371532797813416, -0.7280012965202332, -0.9935320019721985, -0.6516280770301819, -0.8398025631904602, -0.8120349049568176, -0.3519139289855957, -0.9073634147644043, -0.8254354596138, -0.767120361328125, -0.853701651096344, -0.741077184677124, 0.10455520451068878, -0.7997367978096008, -0.6552387475967407, -0.6452860832214355, -0.540259063243866, -0.6437557935714722, -0.22889691591262817, -0.5302101969718933, 0.02918851189315319, 0.7381013035774231, 1.2349488735198975, -0.8047325015068054, -0.8460726141929626, -0.9038191437721252, -1.0867608785629272, 0.1658903807401657, -0.5121541619300842, 0.26093533635139465, -0.5085957646369934, -0.8133324384689331, -0.9956737160682678, 0.4444533586502075, 0.11229830980300903, -0.6257104873657227, -0.8876718878746033, -1.4783036708831787, -1.317688226699829, -0.8321372866630554, -0.44442787766456604, -1.0517348051071167, -1.8077179193496704, -1.3538740873336792, -2.241945743560791, -1.3934167623519897, -1.329193115234375, -1.4903050661087036, -1.2067742347717285, -2.811061382293701, -2.207946300506592, -0.7235689759254456, 0.36650580167770386, -2.5691821575164795, -1.8738287687301636, -0.6872693300247192, 0.04656132310628891, -4.157707214355469, -2.091909170150757, 0.8802509307861328, -0.2656829059123993, -2.426492929458618, -1.3851568698883057, 0.059051163494586945, 0.3478064239025116, -0.33703580498695374, -0.5045357346534729, -0.5599914193153381, -0.019190818071365356, -1.8953324556350708, -2.4973785877227783, 2.232837677001953, 2.252776861190796, 0.9709047675132751, -2.79278564453125, -0.010164869949221611, 1.5122946500778198, 2.172455310821533, 1.7269326448440552, 2.261995315551758, 2.166290521621704, 1.9688866138458252, 1.962256669998169, 2.439129114151001, 2.336719512939453, 1.4186104536056519, 1.4049092531204224, 1.4736586809158325, 1.847051978111267, 1.5520299673080444, 1.3687318563461304, 1.3582417964935303, 1.5198113918304443, 1.5707532167434692, 1.469887375831604, 1.4525644779205322, 1.336944341659546, 1.303916573524475, 1.4890121221542358, 1.4932266473770142, 0.9043020606040955, 0.7885726094245911, 1.162514328956604, 0.5184091925621033, 0.6969605684280396, 0.8452600836753845, 0.47120940685272217, 0.8056679964065552, 0.90936678647995, 0.7736977338790894, 0.769103467464447, 0.835401177406311, 0.0007846203516237438, 0.7544705271720886, 0.7839801907539368, 0.8243162035942078, 0.606340229511261, 0.6326882243156433, 0.006035619415342808, 0.37757769227027893, -0.09361042827367783, -0.8933119177818298, -1.3733415603637695, 0.720933735370636, 0.7511315941810608, 0.8383000493049622, 1.0988450050354004, -0.22380509972572327, 0.486883282661438, -0.2374916970729828, 0.3708416223526001, 0.754981279373169, 0.8724632263183594, -0.6503762602806091, -0.07306433469057083, 0.5668611526489258, 1.3136569261550903, 1.291954517364502, 0.9644765257835388, 1.1525988578796387, 0.5578071475028992, 2.0050060749053955, 1.7692725658416748, 1.9648202657699585, 2.2346577644348145, 1.573161244392395, 1.225036859512329, 1.2651726007461548, 1.3745157718658447, 2.879516124725342, 2.06929874420166, 0.8042070269584656, 0.046606600284576416, 2.626986026763916, 1.7895833253860474, 0.7479560375213623, -0.13244923949241638, 4.086292266845703, 2.3496358394622803, 0.371665358543396, 0.2165805697441101, 2.4569509029388428, 1.4385862350463867, -0.16386932134628296, -0.3167145848274231, 0.3162664473056793, 0.46230649948120117, 0.4655436873435974, 0.07541755586862564, 2.011347770690918, 1.7762595415115356, -2.383378028869629, -2.045424222946167, -0.9808481335639954, 2.7819881439208984, -1.1634764671325684, -1.6215306520462036, -1.2168718576431274, -2.80134916305542, -3.029503345489502, -2.819157838821411, -2.1202502250671387, -1.8975133895874023, -2.366917133331299, -2.5516650676727295, -1.4806523323059082, -1.435504674911499, -1.5217608213424683, -1.9047131538391113, -1.4785221815109253, -1.4539152383804321, -1.306567907333374, -1.391014814376831, -1.3592268228530884, -1.532035231590271, -1.283663272857666, -1.3940602540969849, -1.3992893695831299, -1.423553705215454, -1.5037975311279297, -0.8926613926887512, -0.9525676965713501, -1.1239711046218872, -0.6273049116134644, -0.8618878722190857, -0.8085115551948547, -0.5689142346382141, -0.8319580554962158, -0.8602641224861145, -0.7267711162567139, -0.8367028832435608, -0.6722570657730103, -0.06398558616638184, -0.6949097514152527, -0.7947496175765991, -0.8108732104301453, -0.6094116568565369, -0.6834646463394165, -0.18662497401237488, -0.4377152919769287, -0.05450530722737312, 0.789487898349762, 1.3558756113052368, -0.8082835078239441, -0.8878145813941956, -0.6686668992042542, -1.0263078212738037, 0.2801620662212372, -0.422963947057724, 0.384494811296463, -0.5766454339027405, -0.6704477071762085, -0.8489841818809509, 0.4937117099761963, 0.08810242265462875, -0.49191591143608093, -1.1825255155563354, -1.4684760570526123, -1.356184720993042, -0.8141841292381287, -0.3850608766078949, -1.064042329788208, -1.9686410427093506, -1.8462729454040527, -2.441925048828125, -1.446154236793518, -1.3654451370239258, -1.475347638130188, -1.2900302410125732, -2.795851230621338, -2.0913033485412598, -0.8997092843055725, -0.07227753102779388, -2.5798871517181396, -1.8058234453201294, -0.6624166965484619, 0.023890217766165733, -4.020058631896973, -2.2059144973754883, -0.18558931350708008, -0.2521713078022003, 3.1621625423431396, 1.3985220193862915, -0.09007403999567032, -0.16138528287410736, 0.24604009091854095, 0.5129308700561523, 0.5637645721435547, 0.10085611045360565, 1.305787205696106, 1.8163641691207886, -2.4210641384124756, -2.391801595687866, -28.43486785888672, -23.484031677246094, -0.9793418645858765, -4.18854284286499, -2.1310503482818604, -2.870819568634033, -3.0719714164733887, -2.8416945934295654, -1.785984754562378, -1.8175822496414185, -2.3831961154937744, -2.4582366943359375, -1.5033769607543945, -1.3726886510849, -1.5788654088974, -1.9010940790176392, -1.3715871572494507, -1.3963435888290405, -1.542748212814331, -1.4265767335891724, -1.498540997505188, -1.44312584400177, -1.4168643951416016, -1.3526530265808105, -1.5110632181167603, -1.4531513452529907, -1.4370427131652832, -0.755885899066925, -1.1705522537231445, -1.0521912574768066, -0.5583027601242065, -0.7097495794296265, -0.7271955609321594, -0.5963847637176514, -0.8199965953826904, -0.9824211597442627, -0.7588356137275696, -0.8616625666618347, -0.8250113129615784, -0.01304912194609642, -0.6456601023674011, -0.7116826772689819, -0.7044937610626221, -0.5820220708847046, -0.5252363681793213, -0.11877278983592987, -0.40739378333091736, 0.08936440199613571, -0.4846968352794647, 1.4016880989074707, -0.8306226134300232, -0.8886826038360596, -0.785695493221283, -0.9155530333518982, 0.06494328379631042, -0.40058434009552, 0.19867633283138275, -0.4699579179286957, -0.7626007795333862, -1.004346251487732, 0.4306110143661499, 0.2243686318397522, -0.6151213049888611, -1.2966523170471191, -1.3448292016983032, -1.3667707443237305, -1.0932161808013916, -0.2092115581035614, -2.1191136837005615, -1.7377432584762573, -1.9527406692504883, -2.3827550411224365, -1.39419686794281, -0.8450744152069092, -1.434301733970642, -1.4196327924728394, -2.9662694931030273, -2.2719085216522217, -0.9973747134208679, -0.10633020102977753, -2.559225082397461, -1.7566699981689453, -0.7702963352203369, 0.009006070904433727, -3.9826912879943848, -2.4611897468566895, -0.40986642241477966, -0.39345476031303406, -2.505054235458374, -1.5627460479736328, 0.20679648220539093, 0.21784821152687073, -0.392333060503006, -0.5391677021980286, -0.5631539821624756, -0.11808450520038605, -2.0265042781829834, -1.8561762571334839, 2.326373815536499, 2.1077661514282227, 0.8973670601844788, -2.8357458114624023, 0.18519389629364014, 1.6604644060134888, 1.2396122217178345, 1.7915445566177368, 2.2420578002929688, 2.1091504096984863, 1.8518445491790771, 1.7843892574310303, 2.500272274017334, 2.4845471382141113, 1.415296196937561, 1.437915325164795, 1.563604712486267, 1.9767711162567139, 1.4405521154403687, 1.5654958486557007, 1.4094858169555664, 1.5619754791259766, 1.346497893333435, 1.4208425283432007, 1.3556067943572998, 1.3054238557815552, 1.4682717323303223, 1.3980369567871094, 1.3724548816680908, 0.9466394186019897, 0.8472837209701538, 1.1444425582885742, 0.48658162355422974, 0.6729785203933716, 0.775073230266571, 0.38670814037323, 0.6818282604217529, 0.8494165539741516, 0.7629603147506714, 0.6344732642173767, 0.7261439561843872, 0.10614152252674103, 0.636592447757721, 0.7263050079345703, 0.7870194315910339, 0.48588988184928894, 0.6175801753997803, 0.04768501967191696, 0.38610199093818665, -0.18572714924812317, -0.920181155204773, -1.304421305656433, 0.8753919005393982, 0.747620165348053, 0.8673272728919983, 0.9083234667778015, -0.25196096301078796, 0.4322338104248047, -0.2709597647190094, 0.47382813692092896, 0.7335174083709717, 0.8570857644081116, -0.5762098431587219, -0.117202028632164, 0.5681395530700684, 1.3236256837844849, 1.4113497734069824, 0.8510667681694031, 0.798176109790802, 0.41843101382255554, 2.0457067489624023, 1.8958936929702759, 1.9216493368148804, 2.364807367324829, 1.752082347869873, 1.1599316596984863, 1.2741354703903198, 1.3849525451660156, 2.8652143478393555, 2.095937728881836, 0.9269382953643799, 0.01417516265064478, 2.731696844100952, 1.8187381029129028, 0.7211563587188721, -0.00786273367702961, 4.172025203704834, 2.287806272506714, 0.1911832094192505, 0.2606365382671356, 0.43680086731910706, -0.1364956498146057, 1.7345826625823975, -0.24970099329948425, 1.3585660457611084, 2.0351836681365967, -2.3376505374908447]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_Pd', 'etBin': (30, 40), 'etaBin': (0, 0.8)}}, 'et0_eta1': {'discriminator': {'threshold': -0.25000081881880759, 'nodes': [100, 5, 1], 'bias': [-0.00734415277838707, -0.04007263109087944, 0.01721646450459957, 0.020719019696116447, 0.046631548553705215, -0.18706800043582916], 'weights': [1.7377108335494995, 1.6247806549072266, -0.6348843574523926, -0.967391848564148, -0.6266287565231323, -0.12843042612075806, -0.24559998512268066, 0.6452810764312744, 1.7221064567565918, 4.701451301574707, 1.5039163827896118, -1.7288532257080078, -3.80412220954895, -4.534799575805664, -11.179051399230957, -6.4496870040893555, -8.357569694519043, -6.8953094482421875, -7.319294452667236, -5.33613920211792, -4.331879138946533, -5.6166863441467285, -4.2194905281066895, -2.046111583709717, -2.654541015625, -3.0550479888916016, -2.8370306491851807, -2.8363215923309326, -1.7923264503479004, -1.9503059387207031, -2.1109097003936768, -1.5169703960418701, -3.1434714794158936, -1.9001425504684448, -1.9343191385269165, -1.5400060415267944, -0.9514163732528687, -1.007479190826416, -0.7397158741950989, -1.6267057657241821, -1.0203564167022705, 1.0543880462646484, 0.6386894583702087, -1.2183719873428345, -0.6848020553588867, -0.7528361082077026, -0.6116979122161865, -0.4854795038700104, 2.340702533721924, -0.8718724250793457, -0.9812522530555725, -0.6533620953559875, -0.8048100471496582, -1.6046602725982666, -1.7465568780899048, -0.6194329261779785, -1.1124358177185059, -0.20086267590522766, -0.4949987530708313, -1.9724587202072144, -0.8920513391494751, -0.9077373743057251, -0.7814194560050964, -0.15274149179458618, 2.1128220558166504, -2.2169740200042725, -0.8975223898887634, 0.5442677140235901, -0.5187479257583618, -0.8365760445594788, -0.6088159084320068, -1.0121889114379883, 0.3801363706588745, 0.10336347669363022, -0.5735204815864563, -1.1391230821609497, -1.2338380813598633, -1.2934484481811523, -0.7137042880058289, -0.41635215282440186, -7.322882652282715, -5.276535987854004, -2.771449565887451, -2.0942189693450928, -1.6656136512756348, -1.0785226821899414, -1.6305023431777954, -1.6055757999420166, -1.3450241088867188, -0.5596164464950562, -0.11945312470197678, 0.35502442717552185, -0.8384147882461548, -1.2007514238357544, -0.4678857624530792, 0.039978619664907455, 1.0076828002929688, -0.952568531036377, -1.2570031881332397, -0.23503649234771729, -1.6402820348739624, -1.5127460956573486, 0.4896644949913025, 0.9996862411499023, 0.6316338777542114, -0.05889454483985901, 0.31666478514671326, -0.5924645066261292, -1.5233347415924072, -4.635391712188721, -1.5924246311187744, 1.7247827053070068, 4.796441078186035, 4.448203086853027, 11.463770866394043, 6.490278244018555, 8.44174861907959, 7.014037132263184, 7.2010955810546875, 5.264009952545166, 4.238999366760254, 5.545492649078369, 4.161722660064697, 2.1480047702789307, 2.6515791416168213, 3.1205153465270996, 2.6546432971954346, 2.9718923568725586, 1.9094560146331787, 1.9614886045455933, 2.300384759902954, 1.7265303134918213, 3.0444772243499756, 1.9394394159317017, 1.9208742380142212, 1.4410552978515625, 1.0585501194000244, 1.0687505006790161, 0.6892903447151184, 1.677449345588684, 1.1359859704971313, -1.1883652210235596, -1.6451480388641357, 1.2536815404891968, 0.7193902730941772, 0.6834232211112976, 0.7398744821548462, 0.5992100238800049, -2.2864277362823486, 0.9311156868934631, 0.3724539875984192, 0.6097988486289978, 0.7879002690315247, 1.588571310043335, 1.5497242212295532, 0.603609561920166, 1.1750744581222534, -0.04816123843193054, 0.6257660388946533, 1.8887654542922974, 1.2753300666809082, 0.9734532237052917, 0.9355945587158203, 0.22402648627758026, -2.003486394882202, 2.329573631286621, 0.8748180270195007, -0.5829601883888245, 0.43745458126068115, 1.018608808517456, 0.6258258819580078, 1.0582246780395508, -0.5872433185577393, -0.039680421352386475, 0.7071413397789001, 1.2217668294906616, 1.2330670356750488, 1.3000836372375488, 0.6549936532974243, 0.46489715576171875, 7.133599281311035, 5.509708404541016, 2.7714719772338867, 2.1431872844696045, 1.6275341510772705, 1.1368684768676758, 1.6586905717849731, 1.6267948150634766, 1.5344808101654053, 0.72353595495224, 0.05223165079951286, -0.193617045879364, 0.811058521270752, 1.2553423643112183, 0.3935408890247345, -0.21197541058063507, -1.1687506437301636, 0.795699954032898, 1.3014763593673706, 0.559053361415863, 1.6971548795700073, 1.6421247720718384, -0.6125500202178955, -0.8785212635993958, -0.6199382543563843, 0.013110571540892124, -0.1995123028755188, 0.6310725808143616, 1.6666274070739746, 4.549563884735107, 1.6783168315887451, -1.602736234664917, -3.60491681098938, -4.563404560089111, -11.225308418273926, -6.517359733581543, -8.52653980255127, -6.908738136291504, -7.293144226074219, -5.438269138336182, -4.447637557983398, -5.533753395080566, -4.112213611602783, -2.0517115592956543, -2.710681915283203, -2.9905197620391846, -2.888941526412964, -2.897081136703491, -1.9851126670837402, -1.8915457725524902, -2.130089044570923, -1.4963324069976807, -3.0612261295318604, -1.890846610069275, -1.8185125589370728, -1.4449262619018555, -1.0545589923858643, -1.0982578992843628, -0.6701894402503967, -1.5313478708267212, -1.0022999048233032, 1.0443370342254639, 1.6642746925354004, -1.2045964002609253, -0.7295986413955688, -0.577769935131073, -0.7165750861167908, -0.44526585936546326, 2.248359203338623, -1.001162052154541, -0.14367026090621948, -0.6079222559928894, -0.845024824142456, -1.5592997074127197, -1.7005757093429565, -0.7219295501708984, -1.256527304649353, -0.21293357014656067, -0.4042748808860779, -2.055356740951538, -1.0993387699127197, -0.8300517797470093, -1.1209880113601685, -0.023806476965546608, 1.9458227157592773, -2.1635842323303223, -0.9274901151657104, 0.5281060338020325, -0.5499939918518066, -0.8031582832336426, -0.7835997343063354, -1.0382599830627441, 0.40964436531066895, 0.15005438029766083, -0.6369092464447021, -1.1605530977249146, -1.2648217678070068, -1.2078478336334229, -0.6887795329093933, -0.5347774028778076, -7.112590789794922, -5.313528060913086, -2.8382933139801025, -2.17812180519104, -1.6449476480484009, -1.1055173873901367, -1.562923789024353, -1.7412986755371094, -1.3868542909622192, -0.6552503705024719, -0.08430500328540802, 0.056784000247716904, -0.8490777015686035, -1.2237876653671265, -0.3313363194465637, 0.1151110976934433, 1.1172733306884766, -0.7849849462509155, -1.1281226873397827, -0.4740486741065979, 0.20113703608512878, 0.46706873178482056, 3.3443868160247803, 0.0019720655400305986, 0.13751398026943207, 0.11463986337184906, -0.054993316531181335, 0.0005939880502410233, 0.11016981303691864, 0.6726107597351074, 0.042212970554828644, -0.03931845352053642, -0.3522316515445709, -4.168498516082764, -1.773709774017334, -0.7661309242248535, 2.926222324371338, 15.713441848754883, 0.20957282185554504, -0.12710338830947876, -0.15954293310642242, -0.03282167389988899, -0.20720987021923065, 0.11721758544445038, 0.041065141558647156, -0.032421231269836426, -0.13650856912136078, -0.127809077501297, -0.07367092370986938, 0.06390083581209183, 0.058594707399606705, -0.10104340314865112, -0.10050068795681, 0.012421872466802597, 0.04457055777311325, -0.13037733733654022, 0.33397701382637024, -0.09054571390151978, -0.013086449354887009, 0.09852015972137451, 0.15304064750671387, 0.07057426124811172, -0.02443324215710163, -0.061001006513834, 0.13005077838897705, 0.10313422977924347, 0.091720350086689, 0.0019253441132605076, 0.19575555622577667, -0.08634136617183685, -0.07270817458629608, -0.08559800684452057, -0.10676305741071701, -0.12269830703735352, -0.13107672333717346, 0.12739445269107819, 0.03380059450864792, 0.1581369936466217, -0.03735366091132164, -0.14027100801467896, -0.0697922334074974, -0.062155693769454956, 0.1611591875553131, 0.03714694455265999, -0.009726821444928646, -0.10127469152212143, 0.05225877836346626, 0.03888211399316788, -0.005761187989264727, -0.08715536445379257, -0.01650351844727993, -0.12151829898357391, -0.11404469609260559, 0.26282382011413574, 0.24459707736968994, -0.058049142360687256, 0.04820716381072998, 0.07749176770448685, 0.11551076918840408, 0.043929558247327805, -0.2830004394054413, 3.160240888595581, -0.022538000717759132, -0.06248863413929939, -0.09175369888544083, 0.05565928295254707, -0.1255132406949997, -0.1596456915140152, 0.2763366401195526, 4.071994781494141, -0.05163346603512764, 0.07486403733491898, 0.21910560131072998, 0.008399086073040962, 0.12011364847421646, 0.24441072344779968, 0.465086966753006, 6.567686557769775, -0.01316999550908804, 0.28601378202438354, 1.7071956396102905, 1.5287998914718628, -0.687768280506134, -0.8502946496009827, -0.5942376255989075, -0.0449761301279068, -0.2746228277683258, 0.6345289349555969, 1.5856270790100098, 4.527773857116699, 1.6942353248596191, -1.653761625289917, -3.6029293537139893, -4.643495559692383, -11.113751411437988, -6.479907989501953, -8.507214546203613, -6.84465217590332, -7.141478538513184, -5.221799373626709, -4.4340386390686035, -3.9746246337890625, -3.389453649520874, -2.0051987171173096, -2.6005899906158447, -2.96285343170166, -2.7049834728240967, -2.9300992488861084, -2.0001440048217773, -2.0101425647735596, -2.2492759227752686, -1.501780390739441, -3.0788395404815674, -1.837992548942566, -1.7952581644058228, -1.4362595081329346, -1.0592143535614014, -1.1495295763015747, -0.6406679749488831, -1.6174167394638062, -1.0759459733963013, 1.0903568267822266, 1.5277600288391113, -1.2756751775741577, -0.7636460661888123, -0.6033079624176025, -0.5029428005218506, -0.46109431982040405, 2.2874879837036133, -0.8831217288970947, -0.18936757743358612, -0.5557740330696106, -0.8890725374221802, -1.5411829948425293, -1.6013349294662476, -0.5776059627532959, -1.2101696729660034, -0.1772131621837616, -0.5562077164649963, -2.024610996246338, -1.1759512424468994, -0.8539146184921265, -1.0952142477035522, -0.15724796056747437, 1.9753937721252441, -2.115135908126831, -1.0516853332519531, 0.5524421334266663, -0.5522418022155762, -0.898411750793457, -0.5980734825134277, -1.1147339344024658, 0.3609904646873474, 0.14524613320827484, -0.5372028350830078, -1.24443781375885, -1.2413482666015625, -1.141768455505371, -0.7879902124404907, -0.47159528732299805, -6.6832194328308105, -5.458854675292969, -2.722381114959717, -2.206742525100708, -1.5248979330062866, -1.1376259326934814, -1.6945186853408813, -1.5754711627960205, -1.3838223218917847, -0.6915212273597717, -0.13499073684215546, 0.19182723760604858, -0.9086313247680664, -1.2486023902893066, -0.3303142189979553, 0.08454875648021698, 1.1562718152999878, -0.9075783491134644, -1.134928584098816, -0.4533402621746063, 0.9840611219406128, -0.7687405347824097, 0.7144935131072998, 0.04092424735426903, 1.0375465154647827]}, 'datecode': '2016-10-18 17:03', 'configuration': {'benchmarkName': 'OperationPoint_L2Calo_SP', 'etBin': (0, 20), 'etaBin': (0.8, 1.37)}}}
-  return signatures
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerCutDefs.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerCutDefs.py
deleted file mode 100755
index 4a07d4ed2023..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerCutDefs.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-
-
-class TrigL2CaloRingerCutDefs():
-
-  _signatureDict = {
-      'signature' : ['e','g'],
-  }
-  _pidMap = {
-      'tight': 'Tight', 'medium':'Medium', 'loose':'Loose', 'vloose':'VeryLoose',
-      'lhtight': 'Tight', 'lhmedium': 'Medium', 'lhloose':'Loose', 'lhvloose': 'VeryLoose'
-      }
-
-  def __init__(self, threshold, IDinfo, trigType):
-    self._chainPart           = dict()
-    self.Nodes                = list()
-    self.Weights              = list()
-    self.Bias                 = list()
-    self.Thresholds           = list()
-    self.EtBins               = list()
-    self.EtaBins              = list()
-    self.NormalisationRings   = list()
-    self.SectionRings         = list()
-    self.NRings               = list()
-
-    from AthenaCommon.Logging import logging
-    logging.getLogger().info("Importing %s",__name__)
-    logger = logging.getLogger("TrigMultiVarHypo.TrigL2CaloRingerCutDefs")
-    logger.info(('CutDefs for chain %s')%(trigType))
-   
-    #local variable
-    discrs = None
-
-    if not (trigType[0] in self._signatureDict['signature']):
-      raise RuntimeError('Bad signature')
-
-    # Select the correct threshold.
-    if (float(threshold) < 15): 
-      if self._signatureDict['signature'][0] in trigType:
-        # ElectronLowEnergyTightConf
-        # ElectronLowEnergyMediumConf
-        # ElectronLowEnergyLooseConf
-        # ElectronLowEnergyVeryLooseConf
-        key = ('ElectronLowEnergy%sConf')%(IDinfo)
-      else:
-        # PhotonLowEnergyTightConf
-        # PhotonLowEnergyMediumConf
-        # PhotonLowEnergyLooseConf
-        # PhotonLowEnergyVeryLooseConf
-        key = ('PhotonLowEnergy%sConf')%(IDinfo)
-    else: #(float(threshold) >= 20):
-      if self._signatureDict['signature'][0] in trigType:
-        # ElectronHighEnergyTightConf
-        # ElectronHighEnergyMediumConf
-        # ElectronHighEnergyLooseConf
-        # ElectronHighEnergyVeryLooseConf
-        key = ('ElectronHighEnergy%sConf')%(self._pidMap[IDinfo])
-      else:
-        # PhotonHighEnergyTightConf
-        # PhotonHighEnergyMediumConf
-        # PhotonHighEnergyLooseConf
-        # PhotonHighEnergyVeryLooseConf
-        key = ('PhotonHighEnergy%sConf')%(self._pidMap[IDinfo])
-
-
-
-    try:  
-      #inport all the discriminators
-      from TrigMultiVarHypo.TrigL2CaloRingerConstants import SignaturesMap
-      logger.info('discriminator: %s -> key: %s', trigType, key)
-      discrs =  SignaturesMap()[key]
-    except:
-      logger.info(('INCORRECT key info: [%s] not configured.')%(key) )
-    
-
-    if discrs:
-      #This is a dep region hypothesis: row is Et bin and col is eta bin
-      from TrigMultiVarHypo.TrigRingerPreprocessorDefs import Norm1
-
-      ppList=list();  discrList=list()
-      for key_, o in discrs.iteritems():
-        ppList.append( Norm1() )
-        discrList.append( o )
-      
-      logger.info('parser discrimiator with key: [%s]',key)
-      #prepare the parser to athena phase
-      self.__parser(discrList, ppList)
-
-
-  def __parser(self, discrList, ppList):
-
-    for discr in discrList:
-      self.Nodes += discr['discriminator']['nodes'] 
-      self.Thresholds.append(  discr['discriminator']['threshold']   )
-      self.Weights.append(     discr['discriminator']['weights']      )
-      self.Bias.append(        discr['discriminator']['bias']         )
-      self.EtBins.append(      discr['configuration']['etBin']        )
-      self.EtaBins.append(     discr['configuration']['etaBin']       )
-
-    for pp in ppList:
-      #Prepoc configuration
-      self.NormalisationRings += pp.NormalisationRings
-      self.SectionRings       += pp.SectionRings      
-      self.NRings             += pp.NRings           
-
-
-
-
-
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerFexMTInit.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerFexMTInit.py
deleted file mode 100755
index 7cb18851af92..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerFexMTInit.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-#
-
-from TrigMultiVarHypo.TrigL2CaloRingerCutDefs import TrigL2CaloRingerCutDefs
-from TrigMultiVarHypo.TrigMultiVarHypoConf import TrigL2CaloRingerFexMT
-
-def init_ringer():
-    
-    ringer = TrigL2CaloRingerFexMT()
-    
-    threshold = 15
-    IDinfo = 'loose'
-    trigType = 'e'
-    theRingerConfig = TrigL2CaloRingerCutDefs(threshold,IDinfo,trigType)
-    
-    #Prepoc configuration
-    ringer.NRings             = theRingerConfig.NRings
-    ringer.SectionRings       = theRingerConfig.SectionRings
-    ringer.NormalisationRings = theRingerConfig.NormalisationRings
-
-    #MultiLayerPerceptron configuration
-    ringer.Nodes       = theRingerConfig.Nodes
-    ringer.Threshold   = theRingerConfig.Thresholds
-    ringer.Bias        = theRingerConfig.Bias
-    ringer.Weights     = theRingerConfig.Weights
-    ringer.EtaBins     = theRingerConfig.EtaBins
-    ringer.EtBins      = theRingerConfig.EtBins
-    
-    ringer = add_monitoring(ringer)
-    
-    return ringer
-
-def add_monitoring(tool):
-
-
-    from TriggerJobOpts.TriggerFlags import TriggerFlags
-
-    from AthenaMonitoring.GenericMonitoringTool import GenericMonitoringTool, defineHistogram
-    monTool = GenericMonitoringTool("RingerFexMon")
-    
-    monTool.Histograms = [     defineHistogram('Et', type='TH1F', path='EXPERT', title="E_{T}", xbins=50, xmin=0, xmax=50),
-                               defineHistogram('Eta', type='TH1F', path='EXPERT', title="#eta", xbins=25, xmin=0, xmax=2.5),
-                               defineHistogram('rnnOut', type='TH1F', path='EXPERT', title="NN output", xbins=80, xmin=-1, xmax=1),
-                               defineHistogram('Eta,rnnOut', type='TH2F', path='EXPERT', title="NN output as function of #eta",  xbins=15, xmin=0, xmax=2.5, ybins=80, ymin=-1, ymax=1),
-                               defineHistogram('Et,rnnOut', type='TH2F', path='EXPERT', title="NN output as function of E_{T}",  xbins=20, xmin=0, xmax=50,  ybins=80, ymin=-1, ymax=1),
-                               defineHistogram( "TIME_total",      path='EXPERT', title="Total Time;time[ms]",         xbins=50, xmin=0, xmax=100 ),
-                               defineHistogram( "TIME_preprocess", path='EXPERT', title="Preprocessing Time;time[ms]", xbins=50, xmin=0, xmax=50 ),
-                               defineHistogram( "TIME_decision",   path='EXPERT', title="Decision Time;time[ms]",      xbins=50, xmin=0, xmax=50 )]
-    tool.MonTool = monTool
-
-    monTool.HistPath = 'TrigL2CaloRinger/'+tool.name()
-    tool.MonTool = monTool
-    tool += monTool
-    return tool
-
-       
-            
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoConfig.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoConfig.py
index bf701bbe5622..35a350abe191 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoConfig.py
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoConfig.py
@@ -1,113 +1,16 @@
 
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 # Authors: joao victor pinto <jodafons@cern.ch>
 
+
 from TrigMultiVarHypo.TrigMultiVarHypoConf        import TrigL2CaloRingerFex, TrigL2CaloRingerHypo
 from AthenaCommon.SystemOfUnits                   import GeV
-
-
-
-class TrigL2CaloRingerPidConfs:
-
-  """
-    This class will be responsible to build all calib
-    paths and point the hypo to the ATLAS calib area files.
-    This will be implemented here for now. To switch between
-    tuning, you just need add this in your job option
-    e.g:
-    from TriggerMenu.egamma.EgammaSliceFlags import EgammaSliceFlags
-    EgammaSliceFlags.ringerVersion = 'RingerSelectorTools/file_of_your_ringer_confs'
-  """
-
-  _signatureDict = {
-      'signature' : ['e','g'],
-  }
-
-  _pidMap = {
-      'tight'   : 'tight' , 
-      'medium'  :'medium' , 
-      'loose'   :'loose'  , 
-      'vloose'  :'vloose' ,
-      'lhtight' : 'tight' , 
-      'lhmedium': 'medium', 
-      'lhloose' :'loose'  , 
-      'lhvloose': 'vloose'
-      }
-
-  # The default path for ringer selectors. The standard cuts will be the ringer v6 tuning for now.
-  # Last modification in: 2017/02/21
-  # MC15c tuning if pileup corrention using data 2016 (periods A to K) to fix all thresholds values
-  _default_basepath = 'RingerSelectorTools/TrigL2_20170221_v6'
-
-  def __init__(self):
-    
-    from AthenaCommon.Logging import logging
-    self._logger = logging.getLogger("TrigMultiVarHypo.TrigL2CaloRingerPidConfs")
-
-    #TODO: Use this to configurate the calib path from triggerMenu flags
-    from TriggerMenu.egamma.EgammaSliceFlags import EgammaSliceFlags
-    if EgammaSliceFlags.ringerVersion():
-      self._basePath = EgammaSliceFlags.ringerVersion()
-      self._logger.info('TrigMultiVarHypo version: %s',self._basePath)
-    else:
-      self._basePath = self._default_basepath
-      self._logger.info('TrigMultiVarHypo version: %s (default)',self._basePath)
-
-    # Electron files
-    self._electronConstants = {
-        'vloose' : 'TrigL2CaloRingerElectronVeryLooseConstants.root',
-        'loose'  : 'TrigL2CaloRingerElectronLooseConstants.root',
-        'medium' : 'TrigL2CaloRingerElectronMediumConstants.root',
-        'tight'  : 'TrigL2CaloRingerElectronTightConstants.root',
-        }
-    self._electronCutDefs = {
-        'vloose' : 'TrigL2CaloRingerElectronVeryLooseThresholds.root',
-        'loose'  : 'TrigL2CaloRingerElectronLooseThresholds.root',
-        'medium' : 'TrigL2CaloRingerElectronMediumThresholds.root',
-        'tight'  : 'TrigL2CaloRingerElectronTightThresholds.root',
-        }
-
-    #TODO: photon paths for future
-    self._photonConstants = {
-        'vloose' : 'TrigL2CaloRingerPhotonVeryLooseConstants.root',
-        'loose'  : 'TrigL2CaloRingerPhotonLooseConstants.root',
-        'medium' : 'TrigL2CaloRingerPhotonMediumConstants.root',
-        'tight'  : 'TrigL2CaloRingerPhotonTightConstants.root',
-        }
-    self._photonCutDefs = {
-        'vloose' : 'TrigL2CaloRingerPhotonVeryLooseThresholds.root',
-        'loose'  : 'TrigL2CaloRingerPhotonLooseThresholds.root',
-        'medium' : 'TrigL2CaloRingerPhotonMediumThresholds.root',
-        'tight'  : 'TrigL2CaloRingerPhotonTightThresholds.root',
-        }
-
-    
-  def get_constants_path(self, trigType, IDinfo):
-    if not (trigType[0] in self._signatureDict['signature']):
-      raise RuntimeError('Bad signature')
-    # is Electron
-    if self._signatureDict['signature'][0] in trigType:
-      return self._basePath + '/' +self._electronConstants[self._pidMap[IDinfo]]
-    else: #is Photon
-      #TODO: this will be uncoment when we have photon tuning 
-      #return self._basePath + '/' +self._photonConstants[self._pidMap[IDinfo]]
-      return str()
-
-  def get_cutDefs_path(self, trigType, IDinfo):
-    if not (trigType[0] in self._signatureDict['signature']):
-      raise RuntimeError('Bad signature')
-    # is Electron
-    if self._signatureDict['signature'][0] in trigType:
-      return self._basePath + '/' +self._electronCutDefs[self._pidMap[IDinfo]]
-    else: #is Photon
-      #TODO: this will be uncoment when we have photon tuning 
-      #return self._basePath + '/' +self._photonCutDefs[self._pidMap[IDinfo]]
-      return str() 
-
-# Instance object here!
-# For future use this object to call all paths
-theRingerConfig = TrigL2CaloRingerPidConfs()
-
+from TrigMultiVarHypo.TrigL2CaloRingerHypoTool    import _GetPath
+from TrigMultiVarHypo.TrigL2CaloRingerHypoMonitoring import TrigL2CaloRingerHypoValidationMonitoring, \
+                                                            TrigL2CaloRingerHypoOnlineMonitoring,\
+                                                            TrigL2CaloRingerHypoTimeMonitoring,\
+                                                            TrigL2CaloRingerFexTimeMonitoring
+ 
 
 # Call all Trigger Ringer Fast configurations here!
 class TrigL2CaloRingerFexBase( TrigL2CaloRingerFex ):
@@ -117,21 +20,15 @@ class TrigL2CaloRingerFexBase( TrigL2CaloRingerFex ):
 
     self.HltFeature = "TrigRingerNeuralFex"
     self.Feature    = "TrigT2CaloEgamma"
-    from TrigMultiVarHypo.TrigL2CaloRingerHypoMonitoring import TrigL2CaloRingerHypoValidationMonitoring, \
-                                                                TrigL2CaloRingerHypoOnlineMonitoring,\
-                                                                TrigL2CaloRingerHypoTimeMonitoring
-    validation = TrigL2CaloRingerHypoValidationMonitoring()       
-    online     = TrigL2CaloRingerHypoOnlineMonitoring()
-    time       = TrigL2CaloRingerHypoTimeMonitoring()
     
-    self.AthenaMonTools = [ time, validation, online ]
-    self.doTiming = True
-
-'''
-  The multi layer perceptron and preprocessing step is called by
-  Fex because we store the output network. So to complete the trigger
-  chain you must uses the Fex and Hypo together.
-'''
+    #time       = TrigL2CaloRingerFexTimeMonitoring()
+    #self.AthenaMonTools = [ time ]
+    #self.doTiming = True
+
+
+#  The multi layer perceptron and preprocessing step is called by
+#  Fex because we store the output network. So to complete the trigger
+#  chain you must uses the Fex and Hypo together.
 class TrigL2CaloRingerFex( TrigL2CaloRingerFexBase ):
   __slots__ = []
   def __init__(self, name, threshold, IDinfo, trigType):
@@ -140,16 +37,10 @@ class TrigL2CaloRingerFex( TrigL2CaloRingerFexBase ):
     from AthenaCommon.AppMgr import ToolSvc
     from LumiBlockComps.LuminosityToolDefault import LuminosityToolOnline
     ToolSvc += LuminosityToolOnline()
+    pconstants,pthresholds=_GetPath(trigType,IDinfo)
     #if this is empty, the fex will work like EtCut
-    self.CalibPath = theRingerConfig.get_constants_path(trigType, IDinfo) 
+    self.CalibPath =pconstants
    
-    # The standard preproc to normalize the rings
-    from TrigMultiVarHypo.TrigRingerPreprocessorDefs import Norm1
-    preproc = Norm1()
-
-    self.SectionRings = preproc.SectionRings
-    self.NormalisationRings =  preproc.NormalisationRings
-    self.NRings = preproc.NRings
 
 
 
@@ -160,17 +51,16 @@ class TrigL2CaloRingerFex_Empty( TrigL2CaloRingerFexBase ):
 
 
 
-'''
-  Hypothesis group for electron trigger, NoCut step (bypass) and
-  photons chains for future. Because the neural output store,
-  you must put the Fex and Hypo together in the same sequence
-  list. For example:
-    L2SequenceList = [theT2CaloEgamma_Ringer, 
-    theTrigL2CaloRingerFex, theTrigL2CaloRingerHypo]
+#  Hypothesis group for electron trigger, NoCut step (bypass) and
+#  photons chains for future. Because the neural output store,
+#  you must put the Fex and Hypo together in the same sequence
+#  list. For example:
+#    L2SequenceList = [theT2CaloEgamma_Ringer, 
+#    theTrigL2CaloRingerFex, theTrigL2CaloRingerHypo]
+#
+#  the same configuration must be passed to fex and hypo when
+#  you create the objects.
 
-  the same configuration must be passed to fex and hypo when
-  you create the objects.
-'''
 class TrigL2CaloRingerHypo_e_ID(TrigL2CaloRingerHypo):
   __slots__ = []
 
@@ -180,7 +70,13 @@ class TrigL2CaloRingerHypo_e_ID(TrigL2CaloRingerHypo):
     self.HltFeature = 'TrigRingerNeuralFex'
     self.AcceptAll  = False
     self.EmEtCut    = (float(threshold) - 3)*GeV
-    self.CalibPath = theRingerConfig.get_cutDefs_path(trigType, IDinfo) 
+    pconstants,pthresholds=_GetPath(trigType,IDinfo)
+    self.CalibPath = pthresholds
+    #validation = TrigL2CaloRingerHypoValidationMonitoring()       
+    #online     = TrigL2CaloRingerHypoOnlineMonitoring()
+    #time       = TrigL2CaloRingerHypoTimeMonitoring()
+    #self.AthenaMonTools = [ time, validation, online ]
+    #self.doTiming = True
 
 
 
@@ -193,7 +89,14 @@ class TrigL2CaloRingerHypo_g_ID(TrigL2CaloRingerHypo):
     self.HltFeature = 'TrigRingerNeuralFex'
     self.AcceptAll  = False
     self.EmEtCut    = (float(threshold) - 3)*GeV
-    self.CalibPath = theRingerConfig.get_cutDefs_path(trigType, IDinfo) 
+    pconstants,pthresholds=_GetPath(trigType,IDinfo)
+    self.CalibPath = pthresholds
+    #validation = TrigL2CaloRingerHypoValidationMonitoring()       
+    #online     = TrigL2CaloRingerHypoOnlineMonitoring()
+    #time       = TrigL2CaloRingerHypoTimeMonitoring()
+    #self.AthenaMonTools = [ time, validation, online ]
+    #self.doTiming = True
+
 
 
 class TrigL2CaloRingerHypo_NoCut(TrigL2CaloRingerHypo):
@@ -203,6 +106,12 @@ class TrigL2CaloRingerHypo_NoCut(TrigL2CaloRingerHypo):
     super( TrigL2CaloRingerHypo_NoCut, self ).__init__( name ) 
     self.HltFeature = 'TrigRingerNeuralFex'
     self.AcceptAll  = True
+    #validation = TrigL2CaloRingerHypoValidationMonitoring()       
+    #online     = TrigL2CaloRingerHypoOnlineMonitoring()
+    #time       = TrigL2CaloRingerHypoTimeMonitoring()
+    #self.AthenaMonTools = [ time, validation, online ]
+    #self.doTiming = True
+
 
 class TrigL2CaloRingerHypo_EtCut(TrigL2CaloRingerHypo):
   __slots__ = []
@@ -212,6 +121,12 @@ class TrigL2CaloRingerHypo_EtCut(TrigL2CaloRingerHypo):
     self.HltFeature = 'TrigRingerNeuralFex'
     self.AcceptAll  = False
     self.EmEtCut    = (float(threshold) - 3)*GeV
+    #validation = TrigL2CaloRingerHypoValidationMonitoring()       
+    #online     = TrigL2CaloRingerHypoOnlineMonitoring()
+    #time       = TrigL2CaloRingerHypoTimeMonitoring()
+    #self.AthenaMonTools = [ time, validation, online ]
+    #self.doTiming = True
+
 
 
 
@@ -254,4 +169,3 @@ def TrigL2CaloRingerFexHypo_g_EtCut(threshold):
 
 
 
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoMonitoring.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoMonitoring.py
index 0e978485526b..1e1f33299df7 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoMonitoring.py
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoMonitoring.py
@@ -1,5 +1,5 @@
 
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig
 
 class TrigL2CaloRingerHypoValidationMonitoring(TrigGenericMonitoringToolConfig):
@@ -26,7 +26,7 @@ class TrigL2CaloRingerHypoTimeMonitoring(TrigGenericMonitoringToolConfig):
   def __init__(self, name = "TrigL2CaloRingerHypoTimeMonitoring"):
     super(TrigL2CaloRingerHypoTimeMonitoring,self).__init__(name)
     self.defineTarget("Time")
-    self.Histograms = [defineHistogram('TotalTime',
+    self.Histograms = [defineHistogram('Total',
                                         type='TH1F',title='TotalTime'
                                         ,xbins=220,xmin=0.0,xmax=0.2)]
 
@@ -34,17 +34,25 @@ class TrigL2CaloRingerFexTimeMonitoring(TrigGenericMonitoringToolConfig):
   __slots__ = []
  
   def __init__(self, name = "TrigL2CaloRingerFexTimeMonitoring"):
+    
     super(TrigL2CaloRingerFexTimeMonitoring,self).__init__(name)
     self.defineTarget("Time")
-    self.Histograms = [defineHistogram('TotalTime',
-                                        type='TH1F',title='TotalTime'
-                                        ,xbins=220,xmin=0.0,xmax=0.2)]
-    self.Histograms += [defineHistogram('Decision',
+    self.Histograms  = [defineHistogram('Total',
                                         type='TH1F',title='Decision'
-                                        ,xbins=220,xmin=0.0,xmax=0.2)]
+                                        ,xbins=50,xmin=0.0,xmax=5.0)]
+    self.Histograms  = [defineHistogram('Decision',
+                                        type='TH1F',title='Decision'
+                                        ,xbins=50,xmin=0.0,xmax=5.0)]
     self.Histograms += [defineHistogram('Normalization',
                                         type='TH1F',title='Normalization'
-                                        ,xbins=220,xmin=0.0,xmax=0.2)]
+                                        ,xbins=50,xmin=0.0,xmax=0.3)]
+    self.Histograms += [defineHistogram('Propagation',
+                                        type='TH1F',title='Propagation'
+                                        ,xbins=50,xmin=0.0,xmax=0.3)]
     self.Histograms += [defineHistogram('StoreOutput',
                                         type='TH1F',title='StoreOutput'
-                                        ,xbins=220,xmin=0.0,xmax=0.2)]
+                                        ,xbins=50,xmin=0.0,xmax=5.0)]
+
+
+
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoTool.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoTool.py
new file mode 100644
index 000000000000..367e58ace837
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigL2CaloRingerHypoTool.py
@@ -0,0 +1,143 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+import re
+
+_pattern = "(?P<mult>\d*)(e(?P<threshold1>\d+))(e(?P<threshold2>\d+))*"
+_cpattern = re.compile( _pattern )
+_possibleSel  = { 'tight':'Tight', 'medium':'Medium', 'loose':'Loose', 'vloose':'VeryLoose',
+                  'lhtight':'Tight', 'lhmedium':'Medium', 'lhloose':'Loose', 'lhvloose':'VeryLoose'}
+ 
+from AthenaCommon.SystemOfUnits import GeV
+
+
+
+
+
+def _GetPath( cand, sel, basepath = 'RingerSelectorTools/TrigL2_20170221_v6' ):
+  
+  from AthenaCommon.Logging import logging
+  logger = logging.getLogger("TrigMultiVarHypo.GetPath")
+  from TriggerMenu.egamma.EgammaSliceFlags import EgammaSliceFlags
+  if EgammaSliceFlags.ringerVersion():
+    basepath = EgammaSliceFlags.ringerVersion()
+  logger.info('TrigMultiVarHypo version: %s', basepath)
+  if not sel in _possibleSel.keys():
+    raise RuntimeError( "Bad selection name: %s" % sel )
+  if 'e' in cand:
+    constant = basepath+'/'+ 'TrigL2CaloRingerElectron{SEL}Constants.root'.format(SEL=_possibleSel[sel])
+    threshold = basepath+'/'+ 'TrigL2CaloRingerElectron{SEL}Thresholds.root'.format(SEL=_possibleSel[sel])
+  elif 'g' in cand:
+    constant = basepath+'/'+ 'TrigL2CaloRingerPhoton{SEL}Constants.root'.format(SEL=_possibleSel[sel])
+    threshold = basepath+'/'+ 'TrigL2CaloRingerPhoton{SEL}Thresholds.root'.format(SEL=_possibleSel[sel])
+  else:
+    raise RuntimeError( "Bad signature %s" % cand )
+  return constant, threshold
+
+
+
+
+
+
+
+
+
+
+def _HypoTool(name, cand, threshold, sel):
+
+  from TrigMultiVarHypo.TrigMultiVarHypoConf import TrigL2CaloRingerHypoToolMT
+  tool = TrigL2CaloRingerHypoToolMT( name ) 
+  tool.AcceptAll = False
+  tool.MonTool = ""
+  tool.EtCut = (float(threshold)-3.)*GeV
+  
+  from TriggerJobOpts.TriggerFlags import TriggerFlags
+  if 'Validation' in TriggerFlags.enableMonitoring() or 'Online' in  TriggerFlags.enableMonitoring():
+  
+    from AthenaMonitoring.GenericMonitoringTool import GenericMonitoringTool,defineHistogram
+    monTool = GenericMonitoringTool('MonTool'+name)
+    monTool.Histograms = [
+      defineHistogram( "TIME_total", path='EXPERT',title="Total Time;time[ms]",xbins=50, xmin=0,xmax=5,type='TH1F'),
+      defineHistogram( "TIME_preproc", path='EXPERT',title="Total Time;time[ms]",xbins=50, xmin=0,xmax=5,type='TH1F'),
+      defineHistogram( "TIME_propagate",path='EXPERT', title="Total Time;time[ms]",xbins=50, xmin=0,xmax=5,type='TH1F'),
+      defineHistogram('Eta', type='TH1F', path='EXPERT',title="#eta of Clusters; #eta; number of RoIs", xbins=50,xmin=-2.5,xmax=2.5),
+      defineHistogram('Phi',type='TH1F', path='EXPERT',title="#phi of Clusters; #phi; number of RoIs", xbins=64,xmin=-3.2,xmax=3.2),
+      defineHistogram('Et',type='TH1F', path='EXPERT',title="E_{T} of Clusters; E_{T} [MeV]; number of RoIs", xbins=60,xmin=0,xmax=5e4),
+      defineHistogram('RnnOut',type='TH1F', path='EXPERT',title="E_{T} of Clusters; E_{T} [MeV]; number of RoIs", xbins=100,xmin=-10,xmax=10),
+    ]
+    
+    monTool.HistPath='L2CaloHypo_Ringer/'+monTool.name()
+    tool.MonTool=monTool
+
+
+
+
+  if sel == 'nocut':
+    tool.AcceptAll = True
+  elif sel == "etcut":
+    tool.EtCut = (float(threshold)-3.)*GeV
+  elif sel in _possibleSel.keys(): # real selection
+    pconstants, pthresholds = _GetPath( cand, sel )
+    tool.ConstantsCalibPath = pconstants
+    tool.ThresholdsCalibPath = pthresholds
+
+  return tool
+
+
+def _AlgTool(name):
+    from TrigMultiVarHypo.TrigMultiVarHypoConf import TrigL2CaloRingerHypoAlgMT
+    return TrigL2CaloRingerHypoAlgMT( name )
+
+
+def decodeThreshold( threshold ):
+    """ decodes the thresholds of the form e10, 2e10, e10e15, ... """
+    print "TrigL2CaloHypoToolFromName: decoding threshold ", threshold
+    if threshold[0].isdigit(): # is if the from NeX, return as list [X,X,X...N times...]
+        assert threshold[1] == 'e', "Two digit multiplicity not supported"
+        return [ threshold[2:] ] * int( threshold[0] )
+    if threshold.count('e') > 1: # is of the form eXeYeZ, return as [X, Y, Z]
+        return threshold.strip('e').split('e')
+    if threshold.count('g') > 1: # us of the form gXgYgZ, return as [X, Y, Z]
+        return threshold.strip('g').split('g')
+    # inclusive, return as 1 element list
+    return [ threshold[1:] ] ,  threshold[0]
+
+
+
+
+
+def createRingerDecisions( name, chains, ClustersKey="CaloClusters",RingerKey="CaloRings" ):
+
+    # set the name of the HypoTool (name=chain) and figure out the threshold and selection from conf """
+    from AthenaCommon.Constants import INFO
+    tool = _AlgTool(name) 
+    from AthenaCommon.AppMgr import ToolSvc
+    from LumiBlockComps.LuminosityToolDefault import LuminosityToolOnline
+    ToolSvc+=LuminosityToolOnline()
+    
+    if not type(chains) is list:
+      chains=[chains]
+
+    hypotools = []
+    for c in chains:
+      #print "Configuring ", name
+      bname = c.split('_')
+      threshold = bname[1]
+      sel = bname[2]
+      dt, cand = decodeThreshold( threshold )
+      hypotools.append(_HypoTool( c, cand, dt[0], sel ))
+    
+    for t in tool.HypoTools:
+       t.OutputLevel=INFO
+    
+    tool.HypoTools = hypotools
+    tool.ClustersKey = ClustersKey
+    tool.RingerKey = RingerKey
+    return tool
+
+
+
+
+
+
+
+
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigRingerPreprocessorDefs.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigRingerPreprocessorDefs.py
deleted file mode 100644
index cbc72921384d..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/TrigRingerPreprocessorDefs.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-
-class Norm1(object):
-
-  def __init__(self):
-    from TrigT2CaloEgamma.RingerConstants import Section, Normalisation
-
-    # this part config the TrigRingerPrepoc
-    self.NormalisationRings = [Normalisation.EVENT,
-                               Normalisation.EVENT,
-                               Normalisation.EVENT,
-                               Normalisation.EVENT,
-                               Normalisation.EVENT,
-                               Normalisation.EVENT,
-                               Normalisation.EVENT];
-
-    self.SectionRings = [Section.EM,
-                         Section.EM,
-                         Section.EM,
-                         Section.EM,
-                         Section.HAD,
-                         Section.HAD,
-                         Section.HAD];
-
-    # Only change this if you know what you are doing
-    # default configuration from RingerFex
-    self.NRings = [8, 64, 8, 8, 4, 4, 4]
-
- 
-
-class Sequential(object):
-
-  def __init__(self):
-    from TrigT2CaloEgamma.RingerConstants import Section, Normalisation
-
-    # this part config the TrigRingerPrepoc
-    self.NormalisationRings = [Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL,
-                               Normalisation.SEQUENTIAL];
-
-    self.SectionRings = [Section.EM,
-                         Section.EM,
-                         Section.EM,
-                         Section.EM,
-                         Section.HAD,
-                         Section.HAD,
-                         Section.HAD];
-
-    # Only change this if you know what you are doing
-    # default configuration from RingerFex
-    self.NRings = [8, 64, 8, 8, 4, 4, 4]
-
- 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/__init__.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/__init__.py
index d1d85aba3415..e71879d76577 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/python/__init__.py
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/python/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 
 # File: TrigMultiVarHypo/__init__.py
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/share/convert2version1.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/share/convert2version1.py
index 97b85ea61d32..bed34abbc669 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/share/convert2version1.py
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/share/convert2version1.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 from RingerCore import Logger, LoggingLevel, retrieve_kw, checkForUnusedVars
 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/share/switch_tuning.py b/Trigger/TrigHypothesis/TrigMultiVarHypo/share/switch_tuning.py
index 5c041ac43f83..ee36d04b0a8a 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/share/switch_tuning.py
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/share/switch_tuning.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 import argparse
 mainParser = argparse.ArgumentParser()
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFex.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFex.cxx
index ead3fd197d4e..373d8fec9e93 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFex.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFex.cxx
@@ -4,42 +4,34 @@
 
 ///Local include(s)
 #include "TrigMultiVarHypo/TrigL2CaloRingerFex.h"
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-
-///xAOD include(s)
 #include "xAODTrigCalo/TrigEMCluster.h"
 #include "xAODTrigRinger/TrigRNNOutput.h"
 #include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRingerRingsContainer.h"
 
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+#include "TrigMultiVarHypo/tools/procedures/Norm1.h"
+
+
 ///std include(s)
 #include <new>
 #include <cmath>
-
-#define SIZEOF_NODES            3 
-#define SIZEOF_RINGSETS         7
-
 #include <iostream>
 using namespace std;
 
 //!===============================================================================================
 TrigL2CaloRingerFex::TrigL2CaloRingerFex(const std::string& name, ISvcLocator* pSvcLocator):
-  HLT::FexAlgo(name, pSvcLocator), m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
+  HLT::FexAlgo(name, pSvcLocator), 
+  m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
   m_reader("TrigL2CaloRingerReader")
 {  
   declareProperty("HltFeature"        , m_hlt_feature = "TrigRingerNeuralFex" );  
   declareProperty("Feature"           , m_feature = "TrigT2CaloEgamma"        );  
-  declareProperty("NormalisationRings", m_normRings                           );
-  declareProperty("SectionRings"      , m_sectionRings                        );
-  declareProperty("NRings"            , m_nRings                              );
   declareProperty("CalibPath"         , m_calibPath = ""                      );
   declareProperty("LuminosityTool"    , m_lumiBlockMuTool, "Luminosity Tool"  );
-  declareMonitoredVariable("NeuralNetworkOutput", m_output                    );
   
-  m_useLumiVar=false;
-  m_useEtaVar=false;
   m_key       = "";
 }
 
@@ -49,77 +41,44 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltInitialize()
   // Retrieve the NeuralNetwork list
   if(!m_calibPath.empty()){
     if(!m_reader.retrieve(m_calibPath, m_discriminators)){
-      msg() << MSG::ERROR << "Can not retrieve all information from " << m_calibPath <<  endmsg;
+      ATH_MSG_ERROR("Can not retrieve all information from " << m_calibPath);
       return HLT::BAD_JOB_SETUP;
     }
-    m_useLumiVar = m_reader.useLumiVar();
-    m_useEtaVar  = m_reader.useEtaVar();
-  }
-
-  if(m_nRings.size() != m_normRings.size()){
-    msg() << MSG::ERROR << "Preproc nRings list dont match with the number of discriminators found" << endmsg;
-    return HLT::BAD_JOB_SETUP;
-  }
-
-  if(m_sectionRings.size() != m_normRings.size()){
-    msg() << MSG::ERROR << "Preproc section rings list dont match with the number of discriminators found" << endmsg;
-    return HLT::BAD_JOB_SETUP;
   }
 
-  ///TODO: This is default for now, apply this into the conf file for future
-  ///Initialize all discriminators
-  for(unsigned i=0; i<m_discriminators.size(); ++i)
-  {
-    TrigRingerPreprocessor *preproc;
-    try{
-      preproc = new TrigRingerPreprocessor(m_nRings,m_normRings,m_sectionRings);
-    }catch(const std::bad_alloc& xa){
-      msg() << MSG::ERROR << "Bad alloc for TrigRingerPrepoc." << endmsg;
-      return HLT::BAD_JOB_SETUP;
-    }
-    ///Hold the pointer configuration
-    m_preproc.push_back(preproc);
-  }///Loop over discriminators
-  
-
   ///Monitoring hitograms
   if(doTiming()){
+    m_totalTimer    = addTimer("Total");
     m_normTimer     = addTimer("Normalization");
-    m_decisionTimer = addTimer("Decision");
+    m_propagateTimer= addTimer("Propagation");
     m_storeTimer    = addTimer("StoreOutput");
   }///Only if time is set on python config
 
   m_useLumiTool=false;
   if (m_lumiBlockMuTool.retrieve().isFailure()) {
-    msg() << MSG::WARNING << "Unable to retrieve Luminosity Tool" << endmsg;
+    ATH_MSG_WARNING("Unable to retrieve Luminosity Tool");
   } else {
     m_useLumiTool=true; // Tell to the execute that the LumiTool is available...
-    msg() << MSG::INFO << "Successfully retrieved Luminosity Tool" << endmsg;
+    ATH_MSG_INFO("Successfully retrieved Luminosity Tool");
   }
- 
-  msg() << MSG::INFO << "Using the Luminosity tool? " <<  (m_useLumiTool ? "Yes":"No")  << endmsg;
-  msg() << MSG::INFO << "Using lumiVar?             " <<  (m_useLumiVar ? "Yes":"No")  << endmsg;
-  msg() << MSG::INFO << "Using etaVar?              " <<  (m_useEtaVar ? "Yes":"No")  << endmsg;
-  
-  msg() << MSG::INFO <<  "TrigL2CaloRingerHypo initialization completed successfully." << endmsg;
-  msg() << MSG::INFO << "TrigL2CaloRingerHypo initialization completed successfully." << endmsg;
+
+  // NOTE: Norm1 standard normalization used for Run2 (only for ringer shape)
+  m_preproc.push_back( std::make_shared<Ringer::Norm1>(-999.,999.,-999,999,-999,999.,true) );
+
+  ATH_MSG_INFO("Using the Luminosity tool? " <<  (m_useLumiTool ? "Yes":"No") );
+  ATH_MSG_INFO( "TrigL2CaloRingerHypo initialization completed successfully." );
 
   return HLT::OK;
 }
 //!===============================================================================================
 HLT::ErrorCode TrigL2CaloRingerFex::hltFinalize() {  
-  ///release memory
-  for(unsigned i=0; i<m_discriminators.size();++i){
-    if(m_preproc.at(i))         delete m_preproc.at(i);
-    if(m_discriminators.at(i))  delete m_discriminators.at(i);
-  }///Loop over all discriminators and prepoc objects
-  msg() << MSG::INFO <<  "TrigL2CaloRingerHypo finalization completed successfully." << endmsg;
-
+  ATH_MSG_INFO( "TrigL2CaloRingerHypo finalization completed successfully." );
   return HLT::OK;
 }
 //!===============================================================================================
 HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inputTE*/, HLT::TriggerElement* outputTE){
 
+  if(doTiming())  m_totalTimer->start();
   // For now, this must be [avgmu, rnnOutputWithTansig, rnnOutputWithoutTansig] 
   m_output=-999;
   std::vector<float> output;
@@ -127,7 +86,8 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
   ///Retrieve rings pattern information
   const xAOD::TrigRingerRings *ringerShape = get_rings(outputTE);
   if(!ringerShape){
-    msg() << MSG::WARNING <<  "Can not retrieve xADO::TrigRingerRings from storegate."  << endmsg;
+    ATH_MSG_WARNING( "Can not retrieve xADO::TrigRingerRings from storegate." );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }///protection
 
@@ -136,16 +96,16 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
 
   ///Check if emCluster link exist
   if(!emCluster){
-    msg() << MSG::WARNING <<  "Can not found the xAOD::TrigEMCluster link"  << endmsg;
+    ATH_MSG_WARNING( "Can not found the xAOD::TrigEMCluster link" );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }///protection
 
-  msg() << MSG::DEBUG <<  "Event with roiword: 0x" << std::hex << emCluster->RoIword() << std::dec  << endmsg; 
+  ATH_MSG_DEBUG( "Event with roiword: 0x" << std::hex << emCluster->RoIword() << std::dec );
+
 
 
-  ///It's ready to select the correct eta/et bin
-  MultiLayerPerceptron    *discr  = nullptr;
-  TrigRingerPreprocessor  *preproc = nullptr;
+  std::shared_ptr<Ringer::IModel> discr;
 
   float eta = std::fabs(emCluster->eta());
   float et  = emCluster->et()*1e-3; ///in GeV 
@@ -155,8 +115,8 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
     if(m_lumiBlockMuTool){
       mu = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID)
       avgmu = m_lumiBlockMuTool->averageInteractionsPerCrossing();
-      msg() << MSG::DEBUG << "Retrieved Mu Value : " << mu<< endmsg;
-      msg() << MSG::DEBUG << "Average Mu Value   : " << avgmu<< endmsg;   
+      ATH_MSG_DEBUG("Retrieved Mu Value : " << mu);
+      ATH_MSG_DEBUG("Average Mu Value   : " << avgmu);   
     }
   }
 
@@ -165,7 +125,7 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
   // Add avgmu!
   output.push_back(avgmu);
 
-  if(doTiming())  m_decisionTimer->start();
+
   
   if(m_discriminators.size() > 0){
       
@@ -174,57 +134,37 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
         if(et > m_discriminators[i]->etmin() && et <= m_discriminators[i]->etmax()){
           if(eta > m_discriminators[i]->etamin() && eta <= m_discriminators[i]->etamax()){
             discr   = m_discriminators[i];
-            preproc = m_preproc[i];
             break;
           }// mu conditions
         }///eta conditions
       }///Et conditions
     }///Loop over discriminators
 
-    msg() << MSG::DEBUG <<  "Et = " << et << " GeV, |eta| = " << eta << endmsg;
+    ATH_MSG_DEBUG( "Et = " << et << " GeV, |eta| = " << eta );
     
     ///Apply the discriminator
     if(discr){
-
       const std::vector<float> rings = ringerShape->rings();
       std::vector<float> refRings(rings.size());
       refRings.assign(rings.begin(), rings.end());
 
       ///pre-processing ringer shape (default is Norm1...)
       if(doTiming())  m_normTimer->start();
-      if(preproc)     preproc->ppExecute(refRings);
-      if(doTiming())  m_normTimer->stop();
-
-
-      float eta_norm=0.0;
-      float avgmu_norm=0.0;
-
-      // Add extra variables in this order! Do not change this!!!
-      if(m_useEtaVar){
-        if(preproc){
-          eta_norm = preproc->normalize_eta(emCluster->eta(), discr->etamin(), discr->etamax());
-          refRings.push_back(eta_norm);
-        }
-      }
-
-      if(m_useLumiVar){
-        if(preproc){
-          avgmu_norm = preproc->normalize_mu(avgmu, m_lumiCut);
-          refRings.push_back(avgmu_norm);
-        }
-      }
-
-      m_output=discr->propagate(refRings);
-      output.push_back(m_output);
-      output.push_back(discr->getOutputBeforeTheActivationFunction());
+      m_preproc.at(0)->execute(refRings);
+      if(doTiming())  m_normTimer->stop();    
+      if(doTiming())  m_propagateTimer->start();    
+      auto answer = discr->propagate(refRings);
+      if(doTiming())  m_propagateTimer->stop();    
+      output.push_back(answer.output);
+      output.push_back(answer.outputBeforeTheActivationFunction);
     }// has discr?
   }else{
-    msg() << MSG::DEBUG <<  "There is no discriminator into this Fex." << endmsg;
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
   }
 
-  if(doTiming())  m_decisionTimer->stop();
 
-  msg() << MSG::DEBUG <<  "Et = " << et << " GeV, |eta| = " << eta << " and rnnoutput = " << m_output << endmsg;
+
+  ATH_MSG_DEBUG( "Et = " << et << " GeV, |eta| = " << eta << " and rnnoutput = " << m_output );
 
   if(doTiming())  m_storeTimer->start();
   ///Store outout information for monitoring and studys
@@ -238,15 +178,17 @@ HLT::ErrorCode TrigL2CaloRingerFex::hltExecute(const HLT::TriggerElement* /*inpu
   hltStatus = getFeatureLink<xAOD::TrigRingerRingsContainer,xAOD::TrigRingerRings>(outputTE, ringer_link);
 
   if( (hltStatus != HLT::OK) || (!ringer_link.isValid())){
-    msg() << MSG::WARNING <<  "Failed to access ElementLink to TrigRingerRings"  << endmsg;
+    ATH_MSG_WARNING( "Failed to access ElementLink to TrigRingerRings" );
   }else{
     rnnOutput->setRingerLink( ringer_link );
   }
   hltStatus = recordAndAttachFeature<xAOD::TrigRNNOutput>(outputTE, rnnOutput, m_key, m_hlt_feature);
-  if(doTiming())  m_storeTimer->stop();
-
+  if(doTiming()){
+    m_storeTimer->stop();
+    m_totalTimer->stop();
+  }
   if (hltStatus != HLT::OK) {
-    msg() << MSG::WARNING <<  "Failed to record xAOD::TrigRNNOutput to StoreGate."  << endmsg;
+    ATH_MSG_WARNING( "Failed to record xAOD::TrigRNNOutput to StoreGate." );
     return HLT::OK;
   }
 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.cxx
deleted file mode 100644
index 3b0bbb061961..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.cxx
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "AthenaMonitoring/Monitored.h"
-
-#include "xAODTrigCalo/TrigEMClusterContainer.h"
-#include "xAODTrigCalo/TrigEMClusterAuxContainer.h"
-#include "AthenaMonitoring/Monitored.h"
-
-#include "TrigL2CaloRingerFexMT.h"
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-
-///xAOD include(s)
-#include "xAODTrigCalo/TrigEMCluster.h"
-#include "xAODTrigRinger/TrigRNNOutput.h"
-#include "xAODTrigRinger/TrigRNNOutputContainer.h"
-#include "xAODTrigRinger/TrigRingerRings.h"
-#include "xAODTrigRinger/TrigRingerRingsContainer.h"
-
-
-
-static const size_t SIZEOF_NODES = 3;
-static const size_t SIZEOF_RINGSETS = 7;
-
-
-TrigL2CaloRingerFexMT:: TrigL2CaloRingerFexMT(const std::string & name, ISvcLocator* pSvcLocator)
-  :AthAlgorithm(name, pSvcLocator){  
-  ATH_MSG_DEBUG( "start RingerMT const:" );     
-}
-
-TrigL2CaloRingerFexMT:: ~TrigL2CaloRingerFexMT(){}
-
-
-StatusCode TrigL2CaloRingerFexMT::initialize(){
-
-  ATH_MSG_DEBUG( "start RingerMT init:" );     
-
-  ///What is the number of discriminators?
-  m_nDiscr   = m_nodes.size()/SIZEOF_NODES;
-  m_nPreproc = m_normRings.size()/SIZEOF_RINGSETS;
-
-  ATH_CHECK( m_ringsKey.initialize());
-  ATH_CHECK( m_clustersKey.initialize());
-  ATH_CHECK( m_outputKey.initialize());
-
-  if(configurationInvalid()){
-    return StatusCode::FAILURE;
-  }
-  ///Initialize all discriminators
-  for(unsigned i=0; i<m_nDiscr; ++i) {
-    MultiLayerPerceptron   *discr   = nullptr;
-    TrigRingerPreprocessor *preproc = nullptr;
-
-    ATH_MSG_INFO( "Create multi layer perceptron discriminator using configuration:");     
-    ATH_MSG_INFO( "   Input layer   :   " << m_nodes[i*SIZEOF_NODES+0] );
-    ATH_MSG_INFO( "   Output layer  :   " << m_nodes[i*SIZEOF_NODES+2] );
-    ATH_MSG_INFO( "   Eta range     :   " << m_etaBins[i][0] << " < |eta|   <=" << m_etaBins[i][1] );
-    ATH_MSG_INFO( "   Et range      :   " << m_etBins[i][0] << "  < Et[GeV] <=" << m_etBins[i][1] );
-
-   
-    try {
-      ///Alloc discriminator
-      ///TODO: find best way to parse this vector. The athena don't accept vector<vector<unsigned int>>
-      std::vector<unsigned int> nodes(SIZEOF_NODES);
-      for(unsigned k=0; k<SIZEOF_NODES;++k) nodes[k]= m_nodes[i*SIZEOF_NODES+k]; ///Parser
-
-      discr = new MultiLayerPerceptron(nodes, m_weights[i], m_bias[i], 
-                                       m_etBins[i][0], m_etBins[i][1], m_etaBins[i][0],
-                                       m_etaBins[i][1], -999, 999);
-    } catch(const std::bad_alloc& ) {
-      ATH_MSG_ERROR( "Weight vector size is not compatible with nodes vector." );
-      return StatusCode::FAILURE;
-    } catch(int e){
-      if (e == BAD_WEIGHT_SIZE) { 
-        ATH_MSG_ERROR( "Weight vector size is not compatible with nodes vector." );
-	return StatusCode::FAILURE;
-     }
-      else if (e == BAD_BIAS_SIZE) {
-        ATH_MSG_ERROR( "Bias vector size is not compatible with nodes vector." );
-        return StatusCode::FAILURE;
-      }
-    }///try and catch alloc protection
-
-    ///hold the pointer configuration
-    m_discriminators.push_back(discr);
-
-    try{
-      ///TODO: find best way to parse this vector. The athena don't accept vector<vector<unsigned int>>
-      std::vector<unsigned int> nrings(SIZEOF_RINGSETS), normrings(SIZEOF_RINGSETS), sectionrings(SIZEOF_RINGSETS);
-      
-      for(unsigned rs = 0; rs < SIZEOF_RINGSETS; ++rs ){
-        nrings[rs]	 = m_nRings[rs+i*SIZEOF_RINGSETS];
-        normrings[rs]	 = m_normRings[rs+i*SIZEOF_RINGSETS];
-        sectionrings[rs] = m_sectionRings[rs+i*SIZEOF_RINGSETS];
-      }				///parser
-
-      preproc = new TrigRingerPreprocessor( nrings, normrings, sectionrings );
-    } catch(const std::bad_alloc& ){     
-    ATH_MSG_ERROR(  "Bad alloc for TrigRingerPrepoc." );
-      return StatusCode::FAILURE;
-    }
-
-    ///Hold the pointer configuration
-    m_preproc.push_back(preproc);
-  }///Loop over discriminators
-
-    ATH_MSG_DEBUG( "TrigL2CaloRingerHypo initialization completed successful" );
-
-  return StatusCode::SUCCESS;
-}
-
-
-StatusCode TrigL2CaloRingerFexMT::finalize(){
-    ///release memory
-    for(unsigned i=0; i<m_nDiscr;++i){
-      if(m_preproc.at(i))         delete m_preproc.at(i);
-      if(m_discriminators.at(i))  delete m_discriminators.at(i);
-     }///Loop over all discriminators and prepoc objects
-
-    ATH_MSG_DEBUG( "TrigL2CaloRingerHypo finalization completed successfully." );
-    return StatusCode::SUCCESS;
-}
-
-StatusCode TrigL2CaloRingerFexMT::execute(){
-  
-  ATH_MSG_DEBUG("start RingerMT");
-  auto etMon    = Monitored::Scalar( "Et", -100. );
-  auto etaMon    = Monitored::Scalar( "Eta", -100. );
-  auto rnnOutMon = Monitored::Scalar( "rnnOut", -100. );
-  auto monitorIt  = Monitored::Group( m_monTool, etMon, etaMon, rnnOutMon );
-
-  auto totalTime = Monitored::Timer("TIME_total");
-  totalTime.start();
-  ATH_MSG_DEBUG( "start RingerMT" );
-  
-  m_output = 999;
-  auto context = getContext();
-
-  ///Retrieve rings pattern information
-  auto ringerShapeHandle = SG::makeHandle( m_ringsKey, context );
-  const xAOD::TrigRingerRings* ringerRings =  ringerShapeHandle.cptr();
-
-
-  auto clustersHandle = SG::makeHandle( m_clustersKey, context );
-  const xAOD::TrigEMClusterContainer* clusters = clustersHandle.cptr();
-  CHECK( clusters->size() == 1 );
-  
-  //It's ready to select the correct eta/et bin
-  ATH_MSG_DEBUG("executing"); 
-
-  MultiLayerPerceptron    *discr  = nullptr;
-  TrigRingerPreprocessor  *preproc = nullptr;
-  
-  
-  float eta = std::fabs(clusters->front()->eta());
-  if(eta>2.50) eta=2.50;///fix for events out of the ranger
-  float et  = clusters->front()->et() / CLHEP::GeV; // in GeV
-  
-
-  if(m_discriminators.size() > 0){
-    for(unsigned i=0; i<m_discriminators.size(); ++i){
-      if(et > m_discriminators[i]->etmin() && et <= m_discriminators[i]->etmax()){
-        if(eta > m_discriminators[i]->etamin() && eta <= m_discriminators[i]->etamax()){
-      discr   = m_discriminators[i];
-      preproc = m_preproc[i];
-      break;
-    }///eta conditions
-      }///Et conditions
-    }///Loop over discriminators
-
-    ///get shape
-    const std::vector<float> rings = ringerRings->rings();
-     
-    ATH_MSG_DEBUG( "rings->rings().size() is: " <<rings.size() );
-
-    std::vector<float> refRings(rings.size());
-    refRings.assign(rings.begin(), rings.end());
-
-    
-    ATH_MSG_DEBUG( "Et = " << et << " GeV, |eta| = " << eta );
-    auto preprocessTime = Monitored::Timer("TIME_preprocess");
-    ///pre-processing shape
-    preprocessTime.start();
-    if(preproc)     preproc->ppExecute(refRings);
-    preprocessTime.stop();
-    
-    ATH_MSG_DEBUG( "after preproc refRings.size() is: " << rings.size() );
-    auto decisionTime = Monitored::Timer("TIME_decision");
-    ///Apply the discriminator
-    decisionTime.start();
-    if(discr)  m_output = discr->propagate(refRings);
-    decisionTime.stop();
-    auto scope = Monitored::Group( m_monTool, preprocessTime, decisionTime );
-    
-  }else{
-     ATH_MSG_DEBUG("There is no discriminator into this Fex.");
-  }
-
-
-  ATH_MSG_DEBUG( "Et = " << et << " GeV, |eta| = " << eta << " and rnnoutput = " << m_output );
-  ///Store outout information for monitoring and studys
-  etMon = et;
-  etaMon = eta;
-  rnnOutMon = m_output;
-
-  std::unique_ptr<xAOD::TrigRNNOutput> rnnOutput( new xAOD::TrigRNNOutput());
-  rnnOutput->makePrivateStore();
-  rnnOutput->setRnnDecision(m_output);
-
-
-  auto outputHandle =   SG::makeHandle (m_outputKey, context);  
-  ATH_CHECK( outputHandle.record(std::move(rnnOutput)) );
-
-  totalTime.stop();
-  auto scope = Monitored::Group( m_monTool, totalTime );
-  
-  return StatusCode::SUCCESS;
-}
-
-bool TrigL2CaloRingerFexMT::configurationInvalid(){
-
-  if(m_weights.size() != m_nDiscr){
-    ATH_MSG_ERROR( "Weight list dont match with the number of discriminators found" );
-    return true;
-  }
-
-  if(m_bias.size() != m_nDiscr){
-    ATH_MSG_ERROR( "Bias list dont match with the number of discriminators found" );
-    return true;
-  }
-
-  if((m_etaBins.size() != m_nDiscr) || (m_etBins.size() != m_nDiscr)){ 
-    ATH_MSG_ERROR( "Eta/Et list dont match with the number of discriminators found" );
-    return true;
-  }
-
-
-  if(m_nRings.size() != m_normRings.size()){ 
-    ATH_MSG_ERROR( "Preproc nRings list dont match with the number of discriminators found" );
-    return true;
-  }
-
-  if(m_sectionRings.size() != m_normRings.size()){
-    ATH_MSG_ERROR("Preproc section rings list dont match with the number of discriminators found");
-    return true;    
-  }
-
-  return false;
-    
-}
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.h
deleted file mode 100644
index b86c1bd3a4ca..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerFexMT.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-// standard stuff
-#include <vector>
-#include <cmath>
-
-// general athena stuff
-#include "GaudiKernel/IToolSvc.h"
-
-//Gaudi
-#include "GaudiKernel/ToolHandle.h"
-#include "GaudiKernel/ServiceHandle.h"
-
-#include "AthenaMonitoring/GenericMonitoringTool.h"
-#include "AthenaBaseComps/AthAlgorithm.h"
-///Local include(s)
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-
-///xAOD include(s)
-#include "xAODTrigCalo/TrigEMClusterContainer.h"
-#include "xAODTrigRinger/TrigRNNOutput.h"
-#include "xAODTrigRinger/TrigRNNOutputContainer.h"
-#include "xAODTrigRinger/TrigRingerRings.h"
-#include "xAODTrigRinger/TrigRingerRingsContainer.h"
-
-#include "TrigTimeAlgs/TrigTimer.h"
-#include "AthenaMonitoring/GenericMonitoringTool.h"
-
-
-class TrigL2CaloRingerFexMT : public AthAlgorithm  {
-
- public:
-    TrigL2CaloRingerFexMT(const std::string & name, ISvcLocator* pSvcLocator);
-    ~TrigL2CaloRingerFexMT();
-
-    StatusCode initialize();
-    StatusCode finalize();
-    StatusCode execute();
-
-  protected:
-    TrigTimer* m_storeTimer;
-    TrigTimer* m_normTimer;
-    TrigTimer* m_decisionTimer;
-
-
-
- private:
-
-    //feature keys
-    Gaudi::Property<std::string>  m_hlt_feature  {this, "HltFeature", "TrigRingerNeuralFex", "..."};
-    Gaudi::Property<std::string>  m_feature  {this, "Feature", "TrigRingerNeuralFex", "..."};
-
-    //Prepoc configuration
-    Gaudi::Property<std::vector<unsigned int>> m_normRings {this, "NormalisationRings", std::vector<unsigned int>(),  "..." };
-    Gaudi::Property<std::vector<unsigned int>> m_sectionRings {this, "SectionRings", std::vector<unsigned int>(), "..."};
-    Gaudi::Property<std::vector<unsigned int>> m_nRings {this, "NRings", std::vector<unsigned int>(), "..." };
-
-    //Disriminator configuration
-    Gaudi::Property<std::vector<unsigned int>> m_nodes {this, "Nodes", std::vector<unsigned int>(), "..."};
-    Gaudi::Property<std::vector<std::vector<double>>> m_weights {this, "Weights",  std::vector<std::vector<double>>(), "..."};
-    Gaudi::Property<std::vector<std::vector<double>>> m_bias {this, "Bias", std::vector<std::vector<double>>(), "..." };
-    Gaudi::Property<std::vector<double>> m_threshold {this, "Threshold", std::vector<double>(), "..."};
-    Gaudi::Property<std::vector<std::vector<double>>> m_etaBins {this, "EtaBins", std::vector<std::vector<double>>(), "..." };
-    Gaudi::Property<std::vector<std::vector<double>>> m_etBins {this, "EtBins", std::vector<std::vector<double>>(), "..."};
-
-    bool configurationInvalid();
-
-    //Discriminator holder
-    std::vector<MultiLayerPerceptron*> m_discriminators;
-    //Pre-processing holder
-    std::vector<TrigRingerPreprocessor*> m_preproc;
-
-
-    unsigned  m_nDiscr;
-    unsigned  m_nPreproc;
-    float     m_output;
-
-   SG::ReadHandleKey<xAOD::TrigRingerRings> m_ringsKey { 
-	this,
-        "CaloRingsKey",
-        "CaloRings",
-        ""
-    };
-  
-   SG::ReadHandleKey<xAOD::TrigEMClusterContainer> m_clustersKey { 
-	this,
-        "ClustersKey",
-        "CaloClusters",
-        ""
-    };
-
-   SG::WriteHandleKey<xAOD::TrigRNNOutput> m_outputKey {
-	this,
-        "RNNOutputKey",
-	"CaloRNNOutput",
-	""
-    };
-
-   ToolHandle<GenericMonitoringTool> m_monTool { this, "MonTool", "GenericMonitoringTool/RingerFexMon", "Monitoring" };
-
-};
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypo.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypo.cxx
index 7be8014552a1..2e5495a13849 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypo.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 ///Local include(s)
 #include "TrigMultiVarHypo/TrigL2CaloRingerHypo.h"
@@ -11,6 +11,7 @@
 #include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRingerRingsContainer.h"
 
+#include "TrigMultiVarHypo/tools/procedures/Thresholds.h"
 ///std include(s)
 #include <new>
 #include <cmath>
@@ -25,7 +26,7 @@ TrigL2CaloRingerHypo::TrigL2CaloRingerHypo(const std::string& name, ISvcLocator*
   declareProperty("CalibPath"         , m_calibPath = ""                      );
   declareProperty("HltFeature"        , m_hlt_feature = "TrigRingerNeuralFex" );  
   
-  m_useNoActivationFunctionInTheLastLayer=false;
+  m_removeOutputTansigTF=false;
   m_doPileupCorrection=false;
   m_lumiCut=50;
 }
@@ -34,29 +35,31 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltInitialize()
 {
   if(!m_calibPath.empty()){
     if(!m_reader.retrieve(m_calibPath, m_cutDefs)){
-      msg() << MSG::ERROR << "Can not retrieve the information from " << m_calibPath << endmsg;
+      ATH_MSG_ERROR("Can not retrieve the information from " << m_calibPath);
       return HLT::BAD_JOB_SETUP;
     }
     // retrieve metadata
-    m_useNoActivationFunctionInTheLastLayer = m_reader.useNoActivationFunctionInTheLastLayer();
+    m_removeOutputTansigTF = m_reader.removeOutputTansigTF();
     m_doPileupCorrection = m_reader.doPileupCorrection();
     m_lumiCut  = m_reader.lumiCut();
   }
-  msg() << MSG::INFO << "Using the activation function in the last layer? " <<  (m_useNoActivationFunctionInTheLastLayer ? "No":"Yes")  << endmsg;
-  msg() << MSG::INFO << "Using pileup correction?                         " <<  (m_doPileupCorrection ? "Yes":"No")  << endmsg;
-  msg() << MSG::INFO << "Using lumi threshold equal: "  <<  m_lumiCut << endmsg;
+  ATH_MSG_INFO("Using the activation function in the last layer? " <<  (!m_removeOutputTansigTF ? "Yes":"No") );
+  ATH_MSG_INFO("Using pileup correction?                         " <<  (m_doPileupCorrection ? "Yes":"No") );
+  ATH_MSG_INFO("Using lumi threshold equal:                      "  <<  m_lumiCut); 
+  ATH_MSG_INFO( "TrigL2CaloRingerHypo initialization completed successfully." );
   
-  msg() << MSG::INFO <<  "TrigL2CaloRingerHypo initialization completed successfully."  << endmsg;
+  ///Monitoring hitograms
+  if(doTiming()){
+    m_totalTimer    = addTimer("Total");
+  }///Only if time is set on python config
+
 
   return HLT::OK;
 }
 //!===============================================================================================
 HLT::ErrorCode TrigL2CaloRingerHypo::hltFinalize() {  
   
-  for(unsigned i=0; i<m_cutDefs.size();++i){
-    if(m_cutDefs[i])  delete m_cutDefs[i];
-  } 
-  msg() << MSG::INFO <<  "TrigL2CaloRingerHypo finalization completed successfully."  << endmsg;
+  ATH_MSG_INFO( "TrigL2CaloRingerHypo finalization completed successfully." );
   return HLT::OK;
 }
 //!===============================================================================================
@@ -65,15 +68,19 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
 
   pass = false;
 
+  if(doTiming())  m_totalTimer->start();
+  
   if (m_acceptAll){
     pass = true;
-    msg() << MSG::DEBUG << "AcceptAll property is set: taking all events"  << endmsg;
+    ATH_MSG_DEBUG( "AcceptAll property is set: taking all events"  );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }
 
   const xAOD::TrigRNNOutput* rnnOutput = get_rnnOutput(outputTE);
   if(!rnnOutput){
-    msg() << MSG::WARNING <<  "There is no xAO::TrigRNNOutput into the TriggerElement."  << endmsg;
+    ATH_MSG_WARNING( "There is no xAO::TrigRNNOutput into the TriggerElement." );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }
 
@@ -83,11 +90,13 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
   if(ringerShape){
     emCluster = ringerShape->emCluster();
     if(!emCluster){
-      msg() << MSG::WARNING <<  "There is no link to xAOD::TrigEMCluster into the Ringer object."  << endmsg;
+      ATH_MSG_WARNING( "There is no link to xAOD::TrigEMCluster into the Ringer object." );
+      if(doTiming())  m_totalTimer->stop();
       return HLT::OK;
     }
   }else{
-    msg() << MSG::WARNING <<  "There is no xAOD::TrigRingerRings link into the rnnOutput object."  << endmsg;
+    ATH_MSG_WARNING( "There is no xAOD::TrigRingerRings link into the rnnOutput object." );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }
 
@@ -97,7 +106,8 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
 
   ///Et threshold
   if(et < m_emEtCut*1e-3){
-    msg() << MSG::DEBUG <<  "Event reproved by Et threshold. Et = " << et << ", EtCut = " << m_emEtCut*1e-3  << endmsg;
+    ATH_MSG_DEBUG( "Event reproved by Et threshold. Et = " << et << ", EtCut = " << m_emEtCut*1e-3 );
+    if(doTiming())  m_totalTimer->stop();
     return HLT::OK;
   }
 
@@ -106,7 +116,8 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
     // TODO: Maybe this will expanded for future...
     // This was define as [avgmu, rnnOtput, rnnOutputWithoutTansig]
     if(rnnOutput->rnnDecision().size() != 3){
-      msg() << MSG::INFO <<  "Event reproved because we can not retrieve the completed information from RnnOutput to run this hypo!"  << endmsg;
+      ATH_MSG_INFO( "Event reproved because we can not retrieve the completed information from RnnOutput to run this hypo!" );
+      if(doTiming())  m_totalTimer->stop();
       return HLT::OK;
     }
 
@@ -133,20 +144,20 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
               threshold = m_cutDefs[i]->threshold();
             }
 
-            if(m_useNoActivationFunctionInTheLastLayer)
+            if(m_removeOutputTansigTF)
               output=rnnOutput->rnnDecision().at(2);
             else
               output=rnnOutput->rnnDecision().at(1);
 
             if(output >= threshold){
-              msg() << MSG::DEBUG <<  "Event information:"  << endmsg;
-              msg() << MSG::DEBUG <<  "   " << m_cutDefs[i]->etmin() << "< Et ("<<et<<") GeV" << " <=" << m_cutDefs[i]->etmax()  << endmsg;
-              msg() << MSG::DEBUG <<  "   " << m_cutDefs[i]->etamin() << "< |Eta| ("<<eta<<") " << " <=" << m_cutDefs[i]->etamax()  << endmsg;
-              msg() << MSG::DEBUG <<  "   " << m_cutDefs[i]->mumin() << "< Mu ("<<avgmu<<") " << " <=" << m_cutDefs[i]->mumax()  << endmsg;
-              msg() << MSG::DEBUG <<  "   rnnOutput: " << output <<  " and threshold: " << m_cutDefs[i]->threshold()  << endmsg;
+              ATH_MSG_DEBUG( "Event information:" );
+              ATH_MSG_DEBUG( "   " << m_cutDefs[i]->etmin()  << " < Et ("<<et<<") GeV " << " <=" << m_cutDefs[i]->etmax() );
+              ATH_MSG_DEBUG( "   " << m_cutDefs[i]->etamin() << " < |Eta| ("<<eta<<") " << " <=" << m_cutDefs[i]->etamax() );
+              ATH_MSG_DEBUG( "   " << m_cutDefs[i]->mumin()  << " < Mu ("<<avgmu<<")  " << " <=" << m_cutDefs[i]->mumax() );
+              ATH_MSG_DEBUG( "   rnnOutput: " << output <<  " and threshold: " << m_cutDefs[i]->threshold() );
               pass=true;
             }else{
-              msg() << MSG::DEBUG <<  "Event reproved by discriminator threshold"  << endmsg;
+              ATH_MSG_DEBUG( "Event reproved by discriminator threshold" );
             }///Threshold condition
             
             break;
@@ -155,11 +166,12 @@ HLT::ErrorCode TrigL2CaloRingerHypo::hltExecute(const HLT::TriggerElement* outpu
       }///Loop over mu
     }///Loop over cutDefs
   }else{
-    msg() << MSG::DEBUG <<  "There is no discriminator. Event approved by Et threshold."  << endmsg;
+    ATH_MSG_DEBUG( "There is no discriminator. Event approved by Et threshold." );
     ///Only for EtCut
     pass=true; 
   }///protection
 
+  if(doTiming())  m_totalTimer->stop();
   return HLT::OK;
 }
 //!===============================================================================================
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.cxx
index 5e2a85c76c9c..2f11af3c5b59 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.cxx
@@ -4,6 +4,11 @@
 #include <map>
 #include "GaudiKernel/Property.h"
 #include "TrigL2CaloRingerHypoAlgMT.h"
+#include "AthViews/ViewHelper.h"
+#include "DecisionHandling/HLTIdentifier.h"
+#include "DecisionHandling/TrigCompositeUtils.h"
+#include "AthViews/ViewHelper.h"
+
 
 using TrigCompositeUtils::DecisionContainer;
 using TrigCompositeUtils::DecisionAuxContainer;
@@ -11,65 +16,91 @@ using TrigCompositeUtils::DecisionIDContainer;
 using TrigCompositeUtils::decisionIDs;
 using TrigCompositeUtils::newDecisionIn;
 using TrigCompositeUtils::linkToPrevious;
-
+using TrigCompositeUtils::createAndStore; 
 
 TrigL2CaloRingerHypoAlgMT::TrigL2CaloRingerHypoAlgMT( const std::string& name, 
               ISvcLocator* pSvcLocator ) : 
   ::HypoBase( name, pSvcLocator ) {}
 
+
 TrigL2CaloRingerHypoAlgMT::~TrigL2CaloRingerHypoAlgMT() {}
 
+
 StatusCode TrigL2CaloRingerHypoAlgMT::initialize() {
-  ATH_MSG_INFO ( "Initializing " << name() << "..." );
-  ATH_CHECK( m_hypoTools.retrieve() );
-  
-  ATH_CHECK( m_views.initialize() );
-  ATH_CHECK( m_decisionsKey.initialize() );
   
-  renounce( m_outputKey );  
-  ATH_CHECK( m_outputKey.initialize() );
-
+  ATH_MSG_INFO ( "Initializing " << name() << "..." );
+  ATH_CHECK( m_hypoTools.retrieve() );  
+  ATH_CHECK( m_ringsKey.initialize());
+  ATH_CHECK( m_clustersKey.initialize());
+  renounce(m_clustersKey);
+  renounce(m_ringsKey);
 
   return StatusCode::SUCCESS;
 }
 
+StatusCode TrigL2CaloRingerHypoAlgMT::finalize() {
+  return StatusCode::SUCCESS;
+}
 
 StatusCode TrigL2CaloRingerHypoAlgMT::execute( const EventContext& context ) const {  
+  
   ATH_MSG_DEBUG ( "Executing " << name() << "..." );
+  auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context );
+  if( not previousDecisionsHandle.isValid() ) {//implicit
+    ATH_MSG_DEBUG( "No implicit RH for previous decisions "<<  decisionInput().key()<<": is this expected?" );
+    return StatusCode::SUCCESS;      
+  }
   
-  // prepare decisions container and link back to the clusters, and decision on clusters
-  auto decisions = std::make_unique<DecisionContainer>();
-  auto aux = std::make_unique<DecisionAuxContainer>();
-  decisions->setStore( aux.get() );
-
-
-  //ATH_MSG_DEBUG( "RNNOutput ptr to decision map has size " << clusterToIndexMap.size() );
-
-  // prepare imput for tools
-  std::vector<TrigL2CaloRingerHypoToolMT::RNNOutInfo> hypoToolInput;
+  ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" implicit ReadHandles for previous decisions");
+  // new decisions
+  // new output decisions
+  SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context ); 
+  auto decisions = outputHandle.ptr();
+  // input for decision
+  std::vector<TrigL2CaloRingerHypoToolMT::RingerInfo> hypoToolInput;
   
-  auto viewsHandle = SG::makeHandle( m_views, context );
-  for ( auto view: *viewsHandle ) {
-    size_t counter = 0;
-    auto rnnOutHandle = SG::makeHandle( m_outputKey, context );  
-    //CHECK( electronsHandle.setProxyDict( view ) );
-    //CHECK( electronsHandle.isValid() );
-
-    for ( auto rnnOutIter = rnnOutHandle->begin(); rnnOutIter != rnnOutHandle->end(); ++rnnOutIter, counter++ ) {
-      auto d = newDecisionIn( decisions.get() );
-      d->setObjectLink( "feature", ElementLink<xAOD::TrigRNNOutputContainer>( view->name()+"_"+m_outputKey.key(), counter ) );
-      hypoToolInput.emplace_back( TrigL2CaloRingerHypoToolMT::RNNOutInfo{ d, *rnnOutIter } );
+  // loop over previous decisions
+  size_t counter=0;
+  for ( auto previousDecision: *previousDecisionsHandle ) {
+    
+    // get View
+    auto view = TrigCompositeUtils::findLink< ViewContainer >( previousDecision, "view" );
+    ATH_CHECK( view.isValid() );
+    auto ringerShapeHandle = ViewHelper::makeHandle( *(view.link), m_ringsKey, context);
+    ATH_CHECK( ringerShapeHandle.isValid() );
+    ATH_MSG_DEBUG ( "Ringer handle size: " << ringerShapeHandle->size() << "..." );
+    // create new decision
+    auto d = newDecisionIn( decisions,  name() );
+    hypoToolInput.emplace_back( TrigL2CaloRingerHypoToolMT::RingerInfo{ d, ringerShapeHandle.cptr()->at(0) } );
+    
+    {
+      auto el = ViewHelper::makeLink( *(view.link), ringerShapeHandle, 0 );
+      ATH_CHECK( el.isValid() );
+      d->setObjectLink( "feature",  el );
     }
+    
+    TrigCompositeUtils::linkToPrevious( d, decisionInput().key(), counter );
+    counter++;
   }
 
-  for ( auto & tool: m_hypoTools ) {
+  ATH_MSG_DEBUG( "Found "<<hypoToolInput.size()<<" inputs to tools");
+   
+  for ( auto& tool: m_hypoTools ) {
     ATH_CHECK( tool->decide( hypoToolInput ) );
-    
-  } 
-
-  {
-    auto handle =  SG::makeHandle( m_decisionsKey, context );
-    CHECK( handle.record( std::move( decisions ), std::move( aux ) ) );
+  }
+ 
+
+  {// make output handle and debug
+    ATH_MSG_DEBUG ( "Exit with "<<outputHandle->size() <<" decisions");
+    TrigCompositeUtils::DecisionIDContainer allPassingIDs;
+    if ( outputHandle.isValid() ) {
+      for ( auto decisionObject: *outputHandle )  {
+        TrigCompositeUtils::decisionIDs( decisionObject, allPassingIDs );
+      }
+      for ( TrigCompositeUtils::DecisionID id : allPassingIDs ) {
+        ATH_MSG_DEBUG( " +++ " << HLT::Identifier( id ) );
+      }
+    }
   }
 
   return StatusCode::SUCCESS;
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.h
index 2163e6e2840f..554b0a23a80f 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.h
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoAlgMT.h
@@ -1,14 +1,14 @@
 /*
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
-#ifndef MULTIVARHYPO_TRIGL2CALORINGERHYPOALG_H
-#define MULTIVARHYPO_TRIGL2CALORINGERHYPOALG_H 1
+#ifndef TRIGL2CALORINGERHYPOALGMT_H
+#define TRIGL2CALORINGERHYPOALGMT_H 1
 
 #include <string>
 
 #include "AthenaBaseComps/AthReentrantAlgorithm.h"
-#include "xAODTrigRinger/TrigRNNOutput.h"
-#include "xAODTrigRinger/TrigRNNOutputContainer.h"
+#include "xAODTrigRinger/TrigRingerRings.h"
+#include "xAODTrigRinger/TrigRingerRingsContainer.h"
 #include "DecisionHandling/TrigCompositeUtils.h"
 #include "DecisionHandling/HypoBase.h"
 #include "AthViews/View.h"
@@ -23,28 +23,17 @@ class TrigL2CaloRingerHypoAlgMT
  public: 
 
   TrigL2CaloRingerHypoAlgMT( const std::string& name, ISvcLocator* pSvcLocator );
-
   virtual ~TrigL2CaloRingerHypoAlgMT(); 
-
   virtual StatusCode  initialize() override;
+  virtual StatusCode  finalize() override;
   virtual StatusCode  execute(const EventContext& context) const override;
 
  
  private: 
   TrigL2CaloRingerHypoAlgMT();
   ToolHandleArray< TrigL2CaloRingerHypoToolMT > m_hypoTools {this, "HypoTools", {}, "Tools to perfrom selection"};
-
-
-  SG::ReadHandleKey< ViewContainer > m_views {this, "Views", "Unspecified", "Views to read electrons from" };
-  SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_decisionsKey {this, "RNNOutDecisions", "RNNOutDecisions", "Output decisions"};
-  //SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_RNNOutdecisionsKey {this, "RNNOutDecisions", "RNNOutDecisions", "Output decisions"};
-
-  SG::ReadHandleKey<xAOD::TrigRNNOutputContainer> m_outputKey {
-      this,
-      "RNNOutputContainer",
-      "CaloRNNOutput",
-      ""
-  };
+  SG::ReadHandleKey<xAOD::TrigRingerRingsContainer> m_ringsKey { this, "RingerKey","CaloRings",""};
+  SG::ReadHandleKey<xAOD::TrigEMClusterContainer> m_clustersKey { this,"ClustersKey","CaloClusters",""};
 
 
 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.cxx
index 7b6b8c736fe4..4e59ecef61ee 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.cxx
@@ -8,64 +8,88 @@
 #include "AthenaMonitoring/Monitored.h"
 #include "GaudiKernel/SystemOfUnits.h"
 #include "TrigL2CaloRingerHypoToolMT.h"
+#include "AthenaMonitoring/GenericMonitoringTool.h"
+#include "AthenaMonitoring/Monitored.h"
 
+using namespace Monitored;
 using namespace TrigCompositeUtils;
+using namespace Ringer;
 
 TrigL2CaloRingerHypoToolMT::TrigL2CaloRingerHypoToolMT( const std::string& type, 
-                        const std::string& name, 
-                        const IInterface* parent ) 
+                                                        const std::string& name, 
+                                                        const IInterface* parent ) 
+
   : AthAlgTool( type, name, parent ),
-    m_decisionId( HLT::Identifier::fromToolName( name ) ) {}
+    m_selectorTool(),
+    m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"),
+    m_decisionId( HLT::Identifier::fromToolName( name ) )
+{
+  declareProperty("LumiBlockMuTool", m_lumiBlockMuTool, "Luminosity Tool" );
+}
+
+
 
 StatusCode TrigL2CaloRingerHypoToolMT::initialize()  {
 
-    	///What is the number of discriminators?
-  m_nThresholds = m_thresholds.size();
+  m_selectorTool.setConstantsCalibPath( m_constantsCalibPath ); 
+  m_selectorTool.setThresholdsCalibPath( m_thresholdsCalibPath ); 
 
-  if((m_etaBins.size() != m_nThresholds) && (m_etBins.size() != m_nThresholds)){
-    ATH_MSG_ERROR("Eta/Et list dont match with the number of thesholds found");
+  if(m_selectorTool.initialize().isFailure())
+    return StatusCode::FAILURE;
+  
+  if (m_lumiBlockMuTool.retrieve().isFailure())
     return StatusCode::FAILURE;
-  }
-
-  ///Initialize all discriminators
-  for(unsigned i=0; i<m_nThresholds; ++i)
-  {
-    ///Hold the pointer configuration
-    try{
-      m_cutDefs.push_back(new TrigL2CaloRingerHypoToolMT::CutDefsHelper(m_thresholds[i],m_etaBins[i][0],
-                                                                  m_etaBins[i][1], m_etBins[i][0],m_etBins[i][1]));
-    }catch(const std::bad_alloc& xa){
-      ATH_MSG_ERROR("Can not alloc cutDefs on memory.");
-      return StatusCode::FAILURE;
-    }
-  }///Loop over discriminators
   
   ATH_MSG_INFO("TrigL2CaloRingerHypo initialization completed successfully.");
+  return StatusCode::SUCCESS;
+}
+
 
+StatusCode TrigL2CaloRingerHypoToolMT::finalize()  {
+ 
+  if (!m_monTool.empty()){
+    ATH_MSG_DEBUG("Retrieving monTool");
+    ATH_CHECK(m_monTool.retrieve());
+  }else{
+    ATH_MSG_INFO("No monTool configured. NO MONITORING");
+  }
 
+ 
+  if(m_selectorTool.finalize().isFailure())
+    return StatusCode::FAILURE;
+  ATH_MSG_INFO("TrigL2CaloRingerHypo finalization completed successfully.");
   return StatusCode::SUCCESS;
 }
 
-
 TrigL2CaloRingerHypoToolMT::~TrigL2CaloRingerHypoToolMT() {}
 
 
-bool TrigL2CaloRingerHypoToolMT::decideOnSingleObject( const xAOD::TrigRNNOutput* rnnOutput) const {
-  
+bool TrigL2CaloRingerHypoToolMT::decideOnSingleObject( const xAOD::TrigRingerRings* ringerShape) const {
   
+ 
+  auto etMon      =  Monitored::Scalar("Et",-100);
+  auto etaMon     =  Monitored::Scalar("Eta",-100);
+  auto phiMon     =  Monitored::Scalar("Phi",-100);
+  auto rnnOutMon  =  Monitored::Scalar("RnnOut",-100);
+
+ 
+  auto total_time     = Monitored::Timer("TIME_total");
+  auto propagate_time = Monitored::Timer("TIME_propagate");
+  auto preproc_time   = Monitored::Timer("TIME_preproc");
+  auto decide_time    = Monitored::Timer("TIME_decide");
+  auto mon = Monitored::Group(m_monTool,etMon,etaMon,phiMon,rnnOutMon,total_time,propagate_time,preproc_time,decide_time);
+
+  total_time.start();
+
+ 
 
   if(m_acceptAll){
     ATH_MSG_DEBUG("AcceptAll property is set: taking all events");
     return true;
   }
 
-  if(!rnnOutput){
-    ATH_MSG_WARNING("There is no xAO::TrigRNNOutput into the TriggerElement.");
-    return false;
-  }
 
   const xAOD::TrigEMCluster *emCluster = 0;
-  const xAOD::TrigRingerRings *ringerShape = rnnOutput->ringer();
   if(ringerShape){
     emCluster = ringerShape->emCluster();
     if(!emCluster){
@@ -79,51 +103,47 @@ bool TrigL2CaloRingerHypoToolMT::decideOnSingleObject( const xAOD::TrigRNNOutput
 
   float eta     = std::fabs(emCluster->eta());
   float et      = emCluster->et() / Gaudi::Units::GeV;
-  if(eta>2.50) eta=2.50;///fix for events out of the ranger
-  float output  = rnnOutput->rnnDecision().at(0);
+  float avgmu   = m_lumiBlockMuTool->averageInteractionsPerCrossing();
+  
+  etaMon =  emCluster->eta();
+  etMon  = emCluster->et();
+  phiMon = emCluster->phi();
 
+  if(eta>2.50) eta=2.50;///fix for events out of the ranger
 
   ///Et threshold
-  if(et < m_emEtCut){
-    ATH_MSG_DEBUG( "Event reproved by Et threshold. Et = " << et << ", EtCut = " << m_emEtCut);
+  if(et < m_emEtCut/Gaudi::Units::GeV){
+    ATH_MSG_DEBUG( "Event reproved by Et threshold. Et = " << et << ", EtCut = " << m_emEtCut/Gaudi::Units::GeV);
     return false;
   }
 
+  const std::vector<float> rings = ringerShape->rings();
+  std::vector<float> refRings(rings.size());
+  refRings.assign(rings.begin(), rings.end());
   
-  if(m_nThresholds > 0){
-    ///Select the correct threshold for each eta/Et region
-    for(unsigned i=0; i<m_nThresholds;++i){
-      if((et  > m_cutDefs[i]->etmin()) && (et  <= m_cutDefs[i]->etmax())){
-        if((eta > m_cutDefs[i]->etamin()) && (eta <= m_cutDefs[i]->etamax())){
-          if(output >= m_cutDefs[i]->threshold()){
-              ATH_MSG_DEBUG( "Event information:" );
-              //ATH_MSG_DEBUG( "   " << m_cutDefs[i]->etmin() << "< Et ("<<et<<") GeV" << " <=" << m_cutDefs[i]->etmax() );
-              //ATH_MSG_DEBUG( "   " << m_cutDefs[i]->etamin() << "< |Eta| ("<<eta<<") " << " <=" << m_cutDefs[i]->etamax() );
-              //ATH_MSG_DEBUG( "   rnnOutput: " << output <<  " and threshold: " << m_cutDefs[i]->threshold());      
-              return true;
-	  }else{
-              ATH_MSG_DEBUG( "Event reproved by discriminator threshold" );
-          }///Threshold condition
-          break;
-        }///Loop over eta
-      }///Loop over et
-    }///Loop over cutDefs
-  }else{
-    ATH_MSG_DEBUG( "There is no discriminator. Event approved by Et threshold.");   
-    return true;
-  }///protection
-  return false;
-}
+  ATH_MSG_DEBUG("Et = "<< et << " Eta = "<<eta << " mu = " << avgmu << "rsize = "<< refRings.size()); 
 
+  auto output = m_selectorTool.calculate( refRings, et, eta, avgmu, propagate_time, preproc_time );
+  rnnOutMon = output;
+  ATH_MSG_DEBUG(name()<< " generate as NN output " <<  output );
+  
+  decide_time.start();
+  bool accept = m_selectorTool.accept(output, et,eta,avgmu);
+  decide_time.stop();
+
+  total_time.stop();
+  return accept;
+
+}
 
-StatusCode TrigL2CaloRingerHypoToolMT::decide(  std::vector<RNNOutInfo>& input )  const {
 
+StatusCode TrigL2CaloRingerHypoToolMT::decide(  std::vector<RingerInfo>& input )  const {
 
     for ( auto i: input ) {
-        auto objDecision = decideOnSingleObject( i.rnnOut );
-      if ( objDecision == true ) {
-        addDecisionID( m_decisionId.numeric(), i.decision );
-      }
+        auto objDecision = decideOnSingleObject( i.ringerShape );
+        if ( objDecision == true ) {
+          addDecisionID( m_decisionId.numeric(), i.decision );
+        }
     }
     return StatusCode::SUCCESS;
 }
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.h b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.h
index fb50c43d5da1..802a1d8c2169 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.h
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/TrigL2CaloRingerHypoToolMT.h
@@ -1,8 +1,9 @@
 /*
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
-#ifndef TRIGL2CALORINGERTOOL_H
-#define TRIGL2CALORINGERTOOL_H 1
+
+#ifndef TRIGL2CALORINGERHYPOTOOLMT_H
+#define TRIGL2CALORINGERHYPOTOOLMT_H 1
 
 #include "GaudiKernel/Property.h"
 #include "CLHEP/Units/SystemOfUnits.h"
@@ -10,75 +11,45 @@
 #include "AthenaMonitoring/GenericMonitoringTool.h"
 #include "DecisionHandling/HLTIdentifier.h"
 #include "DecisionHandling/TrigCompositeUtils.h"
-
-#include "xAODTrigRinger/TrigRNNOutput.h"
-
-
-
-
+#include "xAODTrigRinger/TrigRingerRings.h"
+#include "TrigMultiVarHypo/tools/RingerSelectorTool.h"
+#include "LumiBlockComps/ILumiBlockMuTool.h"
 
 class TrigL2CaloRingerHypoToolMT : virtual public ::AthAlgTool
 { 
- public: 
-  TrigL2CaloRingerHypoToolMT( const std::string& type, 
-                            const std::string& name, 
-                            const IInterface* parent );
-
-  virtual ~TrigL2CaloRingerHypoToolMT();
-  virtual StatusCode initialize() override;
-
-
-
-  struct RNNOutInfo {
-    TrigCompositeUtils::Decision* decision;
-    const xAOD::TrigRNNOutput* rnnOut;
-  };
-
-  StatusCode decide( std::vector<RNNOutInfo>& decisions )  const;
-  bool decideOnSingleObject( const xAOD::TrigRNNOutput* rnnOut ) const;
-
-  
-      ///Helper class
-  class CutDefsHelper{
-      private:
-        double m_etamin;
-        double m_etamax;
-        double m_etmin;
-        double m_etmax;
-        double m_threshold;
+  public: 
+    TrigL2CaloRingerHypoToolMT( const std::string& type, 
+                                const std::string& name, 
+                                const IInterface* parent );
 
-      public:
-        CutDefsHelper(double th, double etamin, double etamax,
-                      double etmin, double etmax):m_etamin(etamin),
-                      m_etamax(etamax),m_etmin(etmin),m_etmax(etmax),
-                      m_threshold(th)
-        {;}
+    virtual ~TrigL2CaloRingerHypoToolMT();
+    
+    virtual StatusCode initialize() override;
+    virtual StatusCode finalize() override;
 
-        ~CutDefsHelper()
-        {;}
-        double threshold(){return m_threshold;};
-        double etamin(){return m_etamin;};
-        double etamax(){return m_etamax;};
-        double etmin(){return m_etmin;};
-        double etmax(){return m_etmax;};
 
-    };///end of configuration
+    
+    bool decideOnSingleObject( const xAOD::TrigRingerRings* ringerShape ) const;
 
-    std::vector<TrigL2CaloRingerHypoToolMT::CutDefsHelper*>  m_cutDefs; 
 
+    struct RingerInfo {
+      TrigCompositeUtils::Decision* decision;
+      const xAOD::TrigRingerRings* ringerShape;
+    };
 
+    StatusCode decide( std::vector<RingerInfo>& decisions )  const;
 
- private:
-  HLT::Identifier m_decisionId;
-  Gaudi::Property<bool>  m_acceptAll{ this, "AcceptAll", false, "Ignore selection" };
-  Gaudi::Property<std::vector<double>>                                m_thresholds;
-  Gaudi::Property<std::vector<std::vector<double>>>                   m_etaBins;
-  Gaudi::Property<std::vector<std::vector<double>>>                   m_etBins;
-  Gaudi::Property<double>                                             m_nThresholds;
-  Gaudi::Property<double>                                             m_emEtCut;
+  private:
+    
+    Ringer::RingerSelectorTool        m_selectorTool;
+    ToolHandle<ILumiBlockMuTool>      m_lumiBlockMuTool;
+    ToolHandle<GenericMonitoringTool> m_monTool{ this, "MonTool", "", "Monitoring tool" };
+    HLT::Identifier                   m_decisionId;
+    Gaudi::Property<bool>             m_acceptAll{ this, "AcceptAll", false, "Ignore selection" };
+    Gaudi::Property<double>           m_emEtCut{this,"EtCut", 0.0, "Et threshold"};
+    Gaudi::Property<std::string>      m_constantsCalibPath{this, "ConstantsCalibPath", "", "Constants Calib Path"};
+    Gaudi::Property<std::string>      m_thresholdsCalibPath{this, "ThresholdsCalibPath", "", "Thresholds Calib Path"};
 
-  
-  //ToolHandle<GenericMonitoringTool> m_monTool{ this, "MonTool", "", "Monitoring tool" };
 }; 
 
 //:DECLARE_TOOL_FACTORY( TrigL2CaloRingerHypoToolMT )
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/components/TrigMultiVarHypo_entries.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/components/TrigMultiVarHypo_entries.cxx
old mode 100644
new mode 100755
index 4eb9c6f1c7bc..124b9c4d6e31
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/components/TrigMultiVarHypo_entries.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/components/TrigMultiVarHypo_entries.cxx
@@ -1,13 +1,17 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
+
+
 #include "TrigMultiVarHypo/TrigL2CaloRingerFex.h"
 #include "TrigMultiVarHypo/TrigL2CaloRingerHypo.h"
-#include "../TrigL2CaloRingerFexMT.h"
+#include "../TrigL2CaloRingerHypoToolMT.h"
+#include "../TrigL2CaloRingerHypoAlgMT.h"
 
 
 DECLARE_COMPONENT( TrigL2CaloRingerFex )
 DECLARE_COMPONENT( TrigL2CaloRingerHypo )
-DECLARE_COMPONENT( TrigL2CaloRingerFexMT )
+DECLARE_COMPONENT( TrigL2CaloRingerHypoToolMT )
+DECLARE_COMPONENT( TrigL2CaloRingerHypoAlgMT )
 
 
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/preproc/TrigRingerPreprocessor.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/preproc/TrigRingerPreprocessor.cxx
deleted file mode 100644
index bfc343700ea6..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/preproc/TrigRingerPreprocessor.cxx
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-///Local include(s)
-#include "TrigMultiVarHypo/preproc/TrigRingerPreprocessor.h"
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-///std library(s)
-#include <numeric>
-#include <cmath>
-
-#include <iostream>
-using namespace std;
-
-using TrigCaloRingsHelper::RingSet;
-
-//!======================================================================================
-TrigRingerPreprocessor::TrigRingerPreprocessor(std::vector<unsigned int> &nRings, 
-                                               std::vector<unsigned int>  &normRings,
-                                               std::vector<unsigned int>  &sectionRings)
-{
-  // For each configured ring set, create an ordered RingSet, placing them into a vector.
-  for (unsigned int i = 0; i < nRings.size(); ++i) {
-    m_ringsSet.push_back(new RingSet(nRings[i], (RingSet::Normalisation) normRings[i], (RingSet::Section) sectionRings[i]));
-  } 
-
-  m_energyThreshold = -9999; 
-  m_maxRingsAccumulated = std::accumulate(nRings.begin(), nRings.end(), 0);
-}
-//!======================================================================================
-TrigRingerPreprocessor::~TrigRingerPreprocessor(){
-  for(unsigned rs=0; rs<m_ringsSet.size(); ++rs){
-    if(m_ringsSet.at(rs)) delete m_ringsSet.at(rs);
-  }
-}
-//!======================================================================================
-void TrigRingerPreprocessor::sequential(Pattern& rings, const Feature& stop_energy) {
-
-  //if the energyThreshold is greater than `stop', use stop instead.
-  Feature stop = stop_energy;
-  if (m_energyThreshold > stop) {
-    stop = m_energyThreshold;
-  }
-
-  Pattern norm(rings.size(), 0);
-  Feature sum = 0;
-
-  for (unsigned i = 0; i < rings.size(); ++i)
-    sum += rings[i];
-
-  norm[0] = std::fabs(sum);
-
-  //if the sum is less than stop, apply layer normalisation to all rings
-  if (norm[0] < stop) {
-    //if the normalization factor is smaller than stop, I have to verify if it
-    //is still too small. A small value will make things go bad... So, I
-    //verify if the sum is smaller than the layer maxima, if that is the case,
-    //I have to reconsider the normalization factor to a more reasonable
-    //value, e.g. the layer absolute maximum
-    Feature max = -999e30;
-    Feature min =  999e30;
-    for (unsigned i = 0; i < rings.size(); ++i) {
-      if (rings[i] < min)
-        min = rings[i];
-      if (rings[i] > max)
-        max = rings[i];
-    }
-    if (norm[0] < max) {
-      Feature new_norm = std::fabs(max);
-      if (std::fabs(min) > new_norm) new_norm = std::fabs(min);
-      norm[0] = new_norm;
-    }
-
-    //if the sum is even less than the threshold, do not apply any
-    //normalisation at all here!
-    if (norm[0] < m_energyThreshold) {
-      return;
-    }
-
-    for (unsigned i = 0; i < rings.size(); i++) {
-      rings[i] /= norm[0];
-    }
-    return;
-  }
-
-  //I'm ok to proceed with the calculations
-  bool fixed = false; //shall I stop to apply a variant normalisation factor?
-  for (unsigned int i=1; i<rings.size(); ++i) {
-    norm[i] = std::fabs(norm[i-1] - rings[i-1]);
-    //if the normalization factor is less than `stop', just apply a fixed,
-    //known to be great enough, value instead of that. Otherwise, the noise
-    //will get too amplified.
-    if (fixed || norm[i] < stop) {
-      norm[i] = norm[0];
-      if (!fixed) {
-	      fixed = true;
-      }
-    }
-  }
-  for (unsigned i = 0; i < rings.size(); ++i) {
-    rings[i] /= norm[i];
-  }
-}
-//!======================================================================================
-void TrigRingerPreprocessor::normalize_rings(std::vector<RingSet*> &rset) {
-
-  //at this point, I have all ring sets, separated
-  double emsection = 0; // energy at e.m. section
-  double hadsection = 0; // energy at hadronic section
-
-  //for each RingSet (first iteration) -- apply set dependent norms.
-  for (auto &jt : rset) 
-  {
-    //calculate the relevant energies
-    double setenergy = 0;
-    for (unsigned i=0; i<jt->pattern().size(); ++i) setenergy += jt->pattern()[i];
-    if (jt->section() == RingSet::EM) emsection += setenergy;
-    else hadsection += setenergy;
-
-    //what is the normalisation strategy here? Can I do something already?
-    switch(jt->normalisation())
-    {
-      case RingSet::SET:
-        if (setenergy > m_energyThreshold) {
-		      for (unsigned i = 0; i < jt->pattern().size(); ++i)
-			      jt->pattern()[i] /= fabs(setenergy);
-	      }
-        break;
-      case RingSet::SEQUENTIAL:
-        sequential(jt->pattern());
-        break;
-      default: //do nothing
-        break;
-    }
-  } //for each RingSet (first iteration)
-
-  double event = emsection + hadsection; // event energy
-  //for each RingSet (third iteration) -- now accumulate and store
-  for (auto &jt : rset) 
-  {
-    //what is the normalisation strategy here? Do the rest of options
-    switch(jt->normalisation())
-    {
-      case RingSet::EVENT:
-        if (event > m_energyThreshold) {
-          for (unsigned i = 0; i < jt->pattern().size(); ++i)
-            jt->pattern()[i] /= fabs(event);
-        }
-        break;
-      case RingSet::SECTION:
-        if (jt->section() == RingSet::EM)
-        {
-	        if (emsection > m_energyThreshold) {
-            for (unsigned i = 0; i < jt->pattern().size(); ++i)
-               jt->pattern()[i] /= fabs(emsection);
-          }
-        }else
-        {
-          if (hadsection > m_energyThreshold) {
-            for (unsigned i = 0; i < jt->pattern().size(); ++i)
-              jt->pattern()[i] /= fabs(hadsection);
-          }
-        }
-        break;
-
-      default: //do nothing
-      break;
-    }
-  }
-}
-//!======================================================================================
-bool TrigRingerPreprocessor::ppExecute( Pattern& rings) {
-  // vector rings 2 RingSets
-  unsigned ridx = 0;
-  for (auto& jt : m_ringsSet){
-    jt->reset(); //reset this ringset
-    for (unsigned j = 0; j < jt->max(); j++){
-      jt->add( rings.at(ridx) );
-      ridx++;
-    } //for each ring of the RingSet
-  } //for each RingSet
-
-  // Normalize
-  normalize_rings(m_ringsSet);
-
-  // RingSets 2 vector rings
-  rings.clear();
-  rings.reserve( m_maxRingsAccumulated );
-  for (auto& jt : m_ringsSet) rings.insert(rings.end(), jt->pattern().begin(), jt->pattern().end());
-  return true;
-}
-//!======================================================================================
-float TrigRingerPreprocessor::normalize_eta( float eta, float etamin, float etamax ){
-  int s = eta >= 0 ? 1 : -1;
-  return ((std::abs(eta)-etamin) * s)/(etamax-etamin);
-}
-//!======================================================================================
-float TrigRingerPreprocessor::normalize_mu(float mu, float mumax ){
-  if(mu>mumax)
-    mu=mumax;
-  return (mu/mumax);
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/MultiLayerPerceptron.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/MultiLayerPerceptron.cxx
deleted file mode 100644
index 838382379ed8..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/MultiLayerPerceptron.cxx
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-
-/*
- * Neural Network Implementation v3.0
- * Developed by: Dhiana Deva Cavalcanti Rocha
- * Contact: dhiana.deva@gmail.com
- * Laboratorio de Processamento de Sinais
- * Universidade Federal do Rio de Janeiro
- */
-
-
-///Local include(s)
-#include "TrigMultiVarHypo/tools/MultiLayerPerceptron.h"
-
-///std library(s)
-#include <cstddef>
-#include <vector>
-#include <cmath>
-
-MultiLayerPerceptron::MultiLayerPerceptron(std::vector<unsigned int> &n, 
-                                           std::vector<REAL> &w, 
-                                           std::vector<REAL> &b,
-                                           REAL etmin, 
-                                           REAL etmax, 
-                                           REAL etamin, 
-                                           REAL etamax,
-                                           REAL mumin,
-                                           REAL mumax)
-  : m_nodes(n),
-    m_weights(0),
-    m_bias(0),
-    m_layerOutputs(0),
-    m_neuronOutputs(0),
-    m_etmin(etmin),
-    m_etmax(etmax),
-    m_etamin(etamin),
-    m_etamax(etamax),
-    m_mumin(mumin),
-    m_mumax(mumax)
-{
-  if ( !n.size() )  throw BAD_BIAS_SIZE; //Nothing to do
-  
-  //Verifying weight vector size
-  unsigned wSize=0;
-  for (unsigned k=0; k<n.size()-1; ++k) wSize+=n[k]*n[k+1];
-  try{
-    if (wSize != w.size() || !w.size() )  throw BAD_WEIGHT_SIZE;
-    //Verifying bias vector size
-    unsigned bSize=0;
-    for (unsigned k=1; k<n.size(); ++k)bSize+=n[k];
-    if(bSize != b.size() || !b.size() ) throw BAD_BIAS_SIZE;
-  }catch(int i){
-    throw;
-  }
-  //First weight dimension
-  try{
-    m_weights = new REAL **[n.size()-1]; //number of layers excluding input
-  }catch (const std::bad_alloc& xa){
-    m_weights = nullptr;
-    throw;
-  }
-  //First bias dimension
-  try{    
-    m_bias = new REAL *[n.size()-1]; //number of layers excluding input
-  }catch (const std::bad_alloc& xa){
-    m_bias = nullptr;
-    throw;    
-  }
-
-  //First multiplication dimension
-  try{
-    m_neuronOutputs   = new REAL *[n.size()];
-    m_layerOutputs = new REAL *[n.size()]; //number of layers including input
-  } catch (const std::bad_alloc& xa){
-    m_layerOutputs = nullptr; 
-    m_neuronOutputs   = nullptr;
-    throw;
-  }
-
-  for (unsigned l = 0; l<n.size(); ++l){ 
-    //Checks if no bad_alloc happened to layerOutputs
-    if(m_layerOutputs){
-      try{
-        //Second and last dimension of layerOutputs
-        m_layerOutputs[l] = new REAL[n[l]]; //number of nodes in current layer
-      } catch (const std::bad_alloc& xa){
-        m_layerOutputs[l] = nullptr;
-        throw;
-      }
-    }
-
-    //Checks if no bad_alloc happened to layerOutputs
-    if(m_neuronOutputs){
-      try{
-        //Second and last dimension of layerOutputs
-        m_neuronOutputs[l] = new REAL[n[l]]; //number of nodes in current layer
-      } catch (const std::bad_alloc& xa){
-        m_neuronOutputs[l] = nullptr;
-        throw;
-      }
-    }
-  }
-
-  std::vector<REAL>::const_iterator itrB = b.begin();
-  std::vector<REAL>::const_iterator itrW = w.begin();
-  for (unsigned l = 0; l < n.size()-1; ++l){  
-    //Checks if no bad_alloc happened to bias
-    if(m_bias){
-      try{
-        //Second and last dimension of bias
-        m_bias[l] = new REAL[n[l+1]]; //number of nodes in next layer
-      } catch (const std::bad_alloc& xa){
-        m_bias[l] = nullptr;
-        throw;
-      }
-    }
-    //Checks if no bad_alloc happened to m_weights
-    if(m_weights){ 
-      try{
-        //Second dimension of weights
-        m_weights[l] = new REAL*[n[l+1]]; //number of nodes in next layer
-      } catch (const std::bad_alloc& xa){
-        m_weights[l] = nullptr;
-        throw;
-      }
-    }
-    for (unsigned i=0; i<n[l+1]; i++){ 
-      //Checks if no bad_alloc happened to weights[l]
-      if(m_weights){
-        if(m_weights[l]){
-          try{
-            //Third and last dimension of weights
-            m_weights[l][i]=new REAL [n[l]]; //number of nodes in current layer
-          } catch (const std::bad_alloc& xa){
-            m_weights[l][i] = nullptr;
-            throw;
-          }
-        }
-      }
-      //Populating bias matrix
-      if (m_bias){
-        //Checks if no bad_alloc happened to bias[l]
-        if (m_bias[l]){
-            m_bias[l][i]=(*itrB++);
-        }
-      }
-      //Populating weight matrix
-      for (unsigned j=0; j<n[l]; j++){
-        if (m_weights){
-          if (m_weights[l]){
-            if(m_weights[l][i]){
-              m_weights[l][i][j]=(*itrW++);
-            }
-          }
-        }
-      }
-    }
-
-    //Populating multiplication matrix so that starting sum equals zero
-    for (unsigned i=0; i<n[l]; i++){
-      //Checks if no bad_alloc happened to layerOutputs[L]
-      if (m_layerOutputs){
-        if (m_layerOutputs[l]){
-          m_layerOutputs[l][i]=0;
-        }
-      }
-      if (m_neuronOutputs){
-        if (m_neuronOutputs[l]){
-          m_neuronOutputs[l][i]=0;
-        }
-      }
-    }   
-  }
-
-}
-
-MultiLayerPerceptron::~MultiLayerPerceptron(){
-
-  for (unsigned l=0; l<m_nodes.size()-1; l++){
-    if (m_bias){
-      if (m_bias[l]==nullptr){
-        delete m_bias[l]; //Deletes null pointer
-      }else{
-        delete[] m_bias[l]; //Deletes array of values at second dimension of bias
-      }
-    } 
-    for (unsigned i=0; i<m_nodes[l+1]; i++){
-      if (m_weights){ 
-        if(m_weights[l]){
-          if (m_weights[l][i]==nullptr){
-            delete m_weights[l][i]; //Deletes null pointer
-          }else{
-            delete[] m_weights[l][i]; //Deletes array of values at third dimension of weights
-          }
-        }
-      }
-    }
-    if (m_weights){
-      if (m_weights[l]==nullptr){
-        delete m_weights[l]; //Deletes null pointer
-      }else{
-        delete[] m_weights[l]; //Deletes array of pointers at second dimension of weights
-      }
-    } 
-  }//Layers
-
-  for (unsigned l=0; l<m_nodes.size(); l++){
-    if(m_layerOutputs){
-      if (m_layerOutputs[l]==nullptr){
-        delete m_layerOutputs[l]; //Deletes null pointer
-      }
-    }else{
-      delete[] m_layerOutputs[l]; //Deletes array of values at second dimension of layerOutputs
-    }
-  }
-
-  if (m_weights==nullptr){
-    delete m_weights; //Deletes null pointer
-  }else{
-    delete[] m_weights; //Deletes array of pointers at first dimension of weights
-  }
-
-  if (m_bias==nullptr){
-    delete m_bias; //Deletes null pointer
-  }else{
-    delete[] m_bias; //Deletes array of pointers at first dimension of bias
-  }
-
-  if (m_layerOutputs==nullptr){
-    delete m_layerOutputs; //Deletes null pointer
-  }else{
-    delete[] m_layerOutputs; //Deletes array of pointers at first dimension of layerOutputs
-  }
-}
-
-float MultiLayerPerceptron::propagate(std::vector<float> &input){
-
-  for(unsigned i=0; i<input.size();i++){
-    m_layerOutputs[0][i]=(REAL)input[i];
-  }
-
-  for(unsigned l=0; l<m_nodes.size()-1;l++){
-    for(unsigned i=0; i<m_nodes[l+1]; i++){
-      m_layerOutputs[l+1][i]=m_bias[l][i];
-      for (unsigned j=0;j<m_nodes[l]; j++)  m_layerOutputs[l+1][i]+=m_layerOutputs[l][j]*m_weights[l][i][j];
-      m_neuronOutputs[l+1][i] = m_layerOutputs[l+1][i]; // Hold the sum neuron output before apply the activation function
-      m_layerOutputs[l+1][i]  = tanh(m_layerOutputs[l+1][i]);
-    }
-  }
-  return (float)(m_layerOutputs[m_nodes.size()-1][0]);
-}
-
-float MultiLayerPerceptron::getOutput(){
-  return (float)(m_layerOutputs[m_nodes.size()-1][0]);
-}
-
-float MultiLayerPerceptron::getOutputBeforeTheActivationFunction(){
-  return (float)(m_neuronOutputs[m_nodes.size()-1][0]);
-}
-
-
-
-
-
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/RingerSelectorTool.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/RingerSelectorTool.cxx
new file mode 100644
index 000000000000..ed84774ad628
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/RingerSelectorTool.cxx
@@ -0,0 +1,412 @@
+
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+// Use this tool as base to asg or alg mt
+#include "TrigMultiVarHypo/tools/RingerSelectorTool.h"
+#include "TrigMultiVarHypo/tools/procedures/Norm1.h"
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+
+using namespace Monitored;
+using namespace Ringer;
+
+RingerSelectorTool::RingerSelectorTool():
+  asg::AsgMessaging("RingerSelectorTool"),
+  m_reader("RingerReader"),
+  m_useTrack(false),
+  m_useCaloRings(true),
+  m_useShowerShape(false),
+  m_useTileCal(true)
+{;}
+
+
+RingerSelectorTool::~RingerSelectorTool()
+{
+  ATH_MSG_INFO("Finalizing this tool....");
+}
+
+
+StatusCode  RingerSelectorTool::initialize()
+{
+  if(!m_thresholdsCalibPath.empty()){
+    if(!m_reader.retrieve(m_thresholdsCalibPath, m_cutDefs)){
+      ATH_MSG_ERROR("Can not retrieve the information from " << m_thresholdsCalibPath );
+      return StatusCode::FAILURE;
+    }
+    // retrieve metadata
+    m_doPileupCorrection = m_reader.doPileupCorrection();
+
+    m_lumiCut  = m_reader.lumiCut();
+  }
+
+  // Retrieve the NeuralNetwork list
+  if(!m_constantsCalibPath.empty()){
+    if(!m_reader.retrieve(m_constantsCalibPath, m_discriminators)){
+      ATH_MSG_ERROR("Can not retrieve all information from " << m_constantsCalibPath );
+      return StatusCode::FAILURE;
+    }
+
+    m_useShowerShape=m_reader.useShowerShape();
+    m_useTrack=m_reader.useTrack();
+    m_useCaloRings=m_reader.useCaloRings();
+    m_useTileCal=m_reader.useTileCal();
+    m_removeOutputTansigTF=m_reader.removeOutputTansigTF();
+
+  }
+  
+
+  // Use Norm1 as default for rings normalization only!
+  for(unsigned i=0; i<m_discriminators.size();++i)  m_preprocs.push_back( std::make_shared< Ringer::Norm1 > (-999.,999.,-999.,999.,-999.,999.,true));
+  
+  
+
+  ATH_MSG_INFO("Using the activation function in the last layer? " <<  (m_removeOutputTansigTF ? "No":"Yes") );
+  ATH_MSG_INFO("Using the Correction?                            " <<  (m_doPileupCorrection ? "Yes":"No") );
+  ATH_MSG_INFO("Using lumi threshold equal: "  <<  m_lumiCut );
+  ATH_MSG_INFO("Initialization completed successfully." );
+  return StatusCode::SUCCESS;
+
+}
+
+
+StatusCode  RingerSelectorTool::finalize(){
+  return StatusCode::SUCCESS;
+}
+
+
+double  RingerSelectorTool::calculate( std::vector<float>& rings, double et, double eta, double mu,
+                                              double eratio, double reta, double rphi, double rhad, double weta2,
+                                              double f1, double f3 ) 
+const {
+
+  float output = -999;
+  // It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+  // Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    
+    //ATH_MSG_DEBUG(( "ringer->rings().size() is: " <<rings.size());
+    std::vector<float> refRings(rings.size());
+    refRings.assign(rings.begin(), rings.end());
+ 
+    // norm1 calo rings
+    if(preproc)  preproc->execute(refRings);
+
+    // standards calo variables
+    refRings.push_back(eratio/1.0);
+    refRings.push_back(reta/1.0);
+    refRings.push_back(rphi/1.0);
+    refRings.push_back(rhad/0.1);
+    refRings.push_back(weta2/0.02);
+    refRings.push_back(f1/0.6);
+    refRings.push_back(f3/0.04);
+    auto answer = discr->propagate(refRings);
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+
+  }else{
+    ATH_MSG_DEBUG("There is no discriminator into this Fex." );
+  }//
+  return output;
+}
+
+
+
+
+
+double  RingerSelectorTool::calculate( std::vector<float>& rings, double et, double eta, double mu,
+                                              double eratio, double reta, double rphi, double rhad, double weta2,
+                                              double f1, double f3, double deltaeta1, double deltaPoverP, 
+                                              double deltaPhiReescaled, double d0significance, double d0pvunbiased, 
+                                              double eProbabilityHT)
+const {
+
+  float  output = -999;
+  ///It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+
+ ///Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    
+    //ATH_MSG_DEBUG(( "ringer->rings().size() is: " <<rings.size());
+    std::vector<float> refRings(rings.size());
+    refRings.assign(rings.begin(), rings.end());
+ 
+    // norm1 calo rings
+    if(preproc)  preproc->execute(refRings);
+    // standards calo variables
+    refRings.push_back(eratio/1.0);
+    refRings.push_back(reta/1.0);
+    refRings.push_back(rphi/1.0);
+    refRings.push_back(rhad/0.1);
+    refRings.push_back(weta2/0.02);
+    refRings.push_back(f1/0.6);
+    refRings.push_back(f3/0.04);
+    // track variables
+    refRings.push_back(deltaeta1/0.05);
+    refRings.push_back(deltaPoverP/1.0);
+    refRings.push_back(deltaPhiReescaled/0.05);
+    refRings.push_back(d0significance/6.0);
+    refRings.push_back(d0pvunbiased/0.2);
+    refRings.push_back(eProbabilityHT/1.0);
+    // Add extra variables in this order! Do not change this!!!
+ 
+    auto answer = discr->propagate(refRings);
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+
+  }else{
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
+  }//
+  return output;
+}
+
+
+
+
+double  RingerSelectorTool::calculate( std::vector<float>& rings, double et, double eta, double mu,
+                                              double deltaeta1, double deltaPoverP, double deltaPhiReescaled,
+                                              double d0significance, double d0pvunbiased, double eProbabilityHT)
+
+const {
+  
+  float output=-999.;
+
+  // It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+
+  // Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    
+    //ATH_MSG_DEBUG(( "ringer->rings().size() is: " <<rings.size());
+    std::vector<float> refRings(rings.size());
+    refRings.assign(rings.begin(), rings.end());
+    if(preproc)  preproc->execute(refRings);
+    refRings.push_back(deltaeta1/0.05);
+    refRings.push_back(deltaPoverP/1.0);
+    refRings.push_back(deltaPhiReescaled/0.05);
+    refRings.push_back(d0significance/6.0);
+    refRings.push_back(d0pvunbiased/0.2);
+    refRings.push_back(eProbabilityHT/1.0);
+    // Add extra variables in this order! Do not change this!!!
+    
+    auto answer = discr->propagate(refRings);
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+
+
+  }else{
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
+  }//
+  return output;
+}
+
+double  RingerSelectorTool::calculate( std::vector<float>& rings, double et, double eta, double mu)
+
+const {
+  
+  float output = -999;
+  ///It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+
+  ///Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    //ATH_MSG_DEBUG(( "ringer->rings().size() is: " <<rings.size());
+    std::vector<float> refRings(rings.size());
+    refRings.assign(rings.begin(), rings.end());
+    // Apply preprocessor
+    if(preproc)  preproc->execute(refRings);
+    auto answer = discr->propagate(refRings);
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+
+
+  }else{
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
+  }//
+
+  return output;
+}
+
+
+
+double  RingerSelectorTool::calculate( std::vector<float>& rings, double et, double eta, double mu,
+                                       Monitored::Timer &propagate_time, 
+                                       Monitored::Timer &preproc_time)  
+
+const {
+  
+  float output = -999;
+  ///It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+
+  ///Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    //ATH_MSG_DEBUG(( "ringer->rings().size() is: " <<rings.size());
+    std::vector<float> refRings(rings.size());
+    refRings.assign(rings.begin(), rings.end());
+    // Apply preprocessor
+    preproc_time.start();
+    if(preproc)  preproc->execute(refRings);
+    preproc_time.stop();
+    propagate_time.start();
+    auto answer = discr->propagate(refRings);
+    propagate_time.stop();
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+
+
+  }else{
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
+  }//
+
+  return output;
+}
+
+
+double  RingerSelectorTool::calculate( double et, double eta, double mu,
+                                              double deltaeta1, double deltaPoverP, double deltaPhiReescaled,
+                                              double d0significance, double d0pvunbiased, double eProbabilityHT)
+const {
+
+  ///It's ready to select the correct eta/et bin
+  std::shared_ptr<Ringer::IModel>         discr;
+  std::shared_ptr<Ringer::INormalization> preproc;
+
+  float output = -999;
+  ///Apply the discriminator
+  if(retrieve(et,eta,mu,discr,preproc)){
+    std::vector<float> refRings;
+    refRings.push_back(deltaeta1/0.05);
+    refRings.push_back(deltaPoverP/1.0);
+    refRings.push_back(deltaPhiReescaled/0.05);
+    refRings.push_back(d0significance/6.0);
+    refRings.push_back(d0pvunbiased/0.2);
+    refRings.push_back(eProbabilityHT/1.0);
+    // Add extra variables in this order! Do not change this!!!
+    auto answer = discr->propagate(refRings);
+    
+    if(m_removeOutputTansigTF){
+      output = answer.outputBeforeTheActivationFunction;
+    }else{
+      output = answer.output;
+    }
+
+  }else{
+    ATH_MSG_DEBUG( "There is no discriminator into this Fex." );
+  }//
+  return output;
+}
+
+
+bool  RingerSelectorTool::accept( double discriminant, double et, double eta, double mu) 
+  
+const {
+
+  eta = std::fabs(eta);
+  if(eta>2.50) eta=2.50;///fix for events out of the ranger
+  et  = et*1e-3; ///in GeV
+  double threshold = 0.0;
+  double avgmu = mu;
+  //m_doPileupCorrection=false; 
+  //Apply cut
+  for(unsigned i=0; i < m_cutDefs.size(); ++i){
+    if((avgmu  > m_cutDefs[i]->mumin()) && (avgmu  <= m_cutDefs[i]->mumax())){
+      if((et  > m_cutDefs[i]->etmin()) && (et  <= m_cutDefs[i]->etmax())){
+        if((eta > m_cutDefs[i]->etamin()) && (eta <= m_cutDefs[i]->etamax())){
+          
+          if(m_doPileupCorrection){
+            // Limited Pileup
+            if(avgmu>m_lumiCut)
+              avgmu=m_lumiCut;
+            //ATH_MSG_DEBUG(("Apply avgmu == " << avgmu);
+            threshold = m_cutDefs[i]->threshold(avgmu);
+            //ATH_MSG_DEBUG(("With correction, thr = "<<threshold);
+          }else{
+            threshold = m_cutDefs[i]->threshold();
+            //ATH_MSG_DEBUG( "Without correction, thr = "<<threshold );
+          }
+        }
+      }
+    }
+  }// Loop over cutDefs
+
+  if(discriminant >= threshold){
+    //ATH_MSG_DEBUG( "Event approved by discriminator." );
+    return true;
+    //m_accept.setCutResult("NeuralCut", true);
+  }
+
+  //return m_accept;
+  return false;
+}
+
+
+
+
+bool RingerSelectorTool::retrieve(double et, double eta, double mu, std::shared_ptr<Ringer::IModel> &discr, std::shared_ptr<Ringer::INormalization> &preproc)
+
+const {
+
+  eta = std::fabs(eta);
+  if(eta>2.50) eta=2.50;///fix for events out of the ranger
+  //et  = et*1e-3; ///in GeV
+  
+  if(m_discriminators.size() > 0){
+    for(unsigned i=0; i<m_discriminators.size(); ++i){
+      //ATH_MSG_INFO(m_discriminators[i]->etmin()<<"<Et(" <<et<< ")<="<<m_discriminators[i]->etmax());
+      //ATH_MSG_INFO(m_discriminators[i]->etamin()<<"<Eta(" <<eta<< ")<="<<m_discriminators[i]->etamax());
+      if(mu > m_discriminators[i]->mumin() && mu <= m_discriminators[i]->mumax()){
+        if(et > m_discriminators[i]->etmin() && et <= m_discriminators[i]->etmax()){
+          if(eta > m_discriminators[i]->etamin() && eta <= m_discriminators[i]->etamax()){
+            discr   = m_discriminators[i];
+            preproc = m_preprocs[i];
+            return true;
+          }///eta conditions
+        }///Et conditions
+      }///Mu conditions
+    }///Loop over discriminators
+  }
+  return false;
+}
+
+
+
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigL2CaloRingerReader.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigL2CaloRingerReader.cxx
deleted file mode 100644
index 7df0907ad7cf..000000000000
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigL2CaloRingerReader.cxx
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-*/
-#include <iostream>
-#include "TrigMultiVarHypo/tools/TrigL2CaloRingerReader.h"
-#include "TTree.h"
-//#include "TFile.h"
-#include "TParameter.h"
-#include <vector>
-// Use this to find the absoluty path
-#include "PathResolver/PathResolver.h"
-
-TrigL2CaloRingerReader::TrigL2CaloRingerReader(const std::string& name) :
-  asg::AsgMessaging(name),
-  m_name(name)
-{
-  m_etaBins=nullptr;
-  m_etBins=nullptr;
-  m_thresholds=nullptr;
-  m_weights=nullptr;
-  m_bias=nullptr;
-  // current version
-  m_version = 3;
-}
-
-
-// ========================================================================
-
-TrigL2CaloRingerReader::~TrigL2CaloRingerReader()
-{;}
-
-// ========================================================================
-template <class T>
-void TrigL2CaloRingerReader::InitBranch(TTree* fChain, std::string branch_name, T* param){
-  bool message=true;
-  std::string bname = branch_name;
-  if (fChain->GetAlias(bname.c_str()))
-     bname = std::string(fChain->GetAlias(bname.c_str()));
-
-  if (!fChain->FindBranch(bname.c_str()) && message) {
-    msg()  << MSG::WARNING << " unknown branch " << bname << endmsg;
-    return; 
-  }
-  fChain->SetBranchStatus(bname.c_str(), 1.);
-  fChain->SetBranchAddress(bname.c_str(), param);
-}
-// ========================================================================
-
-bool TrigL2CaloRingerReader::retrieve( std::string &calibPath, std::vector<MultiLayerPerceptron*> &discriminators )
-{
-  m_etaBins=nullptr;
-  m_etBins=nullptr;
-  m_muBins=nullptr;
-  m_weights=nullptr;
-  m_bias=nullptr;
-  m_nodes=nullptr;
-  discriminators.clear();
-
-  // Retrive the
-  msg() << MSG::INFO << "Checking discriminators CalibPath: "<< calibPath<< endmsg;
-  auto fullpath = PathResolverFindCalibFile(calibPath);
-	TFile file(fullpath.c_str(),"READ");
-  auto version = ((TParameter<int>*)file.Get("__version__"))->GetVal();
-  TTree *t = (TTree*)file.Get("tuning/discriminators");
-
-  if(version == 2){
-	  // Link all branches
-    InitBranch(t, "weights", &m_weights);
-    InitBranch(t, "bias"   , &m_bias   );
-    InitBranch(t, "nodes"  , &m_nodes  );
-    InitBranch(t, "etaBin" , &m_etaBins );
-    InitBranch(t, "etBin"  , &m_etBins  );
-   
-    for(Long64_t d=0; d<t->GetEntries();++d){
-      t->GetEntry(d);
-      // Create the discriminator object
-      try{
-	  	  discriminators.push_back(new MultiLayerPerceptron(*m_nodes,*m_weights,*m_bias,m_etBins->at(0),
-              m_etBins->at(1),m_etaBins->at(0),m_etaBins->at(1), -999, 999) ); 
-        //msg() << MSG::INFO << "Added new discriminator into the list." << endmsg;
-	    }catch(const std::bad_alloc& xa){
-        msg() << MSG::ERROR << "Can not alloc cutDefs on memory." << endmsg;
-        return false;
-      }
-    }	// Loop over ttree events	
- 
-    // retrieve metadata
-    m_useEtaVar = ((TParameter<bool>*)file.Get("metadata/UseEtaVar"))->GetVal();
-    m_useLumiVar = ((TParameter<bool>*)file.Get("metadata/UseLumiVar"))->GetVal();
-  
-
-  // After version 2, the neural networks include mu bins
-  }else if ( version == m_version ){ // version 3
- 	  // Link all branches
-    InitBranch(t, "weights", &m_weights);
-    InitBranch(t, "bias"   , &m_bias   );
-    InitBranch(t, "nodes"  , &m_nodes  );
-    InitBranch(t, "etaBin" , &m_etaBins );
-    InitBranch(t, "etBin"  , &m_etBins  );
-    InitBranch(t, "muBin"  , &m_muBins  );
-   
-    for(Long64_t d=0; d<t->GetEntries();++d){
-      t->GetEntry(d);
-      // Create the discriminator object
-      try{
-	  	  discriminators.push_back(new MultiLayerPerceptron(*m_nodes,*m_weights,*m_bias,m_etBins->at(0),
-              m_etBins->at(1),m_etaBins->at(0),m_etaBins->at(1), m_muBins->at(0), m_muBins->at(1) ) ); 
-        //msg() << MSG::INFO << "Added new discriminator into the list." << endmsg;
-	    }catch(const std::bad_alloc& xa){
-        msg() << MSG::ERROR << "Can not alloc cutDefs on memory." << endmsg;
-        return false;
-      }
-    }	// Loop over ttree events	
- 
-    // retrieve metadata
-    m_useEtaVar = ((TParameter<bool>*)file.Get("metadata/UseEtaVar"))->GetVal();
-    m_useLumiVar = ((TParameter<bool>*)file.Get("metadata/UseLumiVar"))->GetVal();
-
-  }else{
-    msg() << MSG::WARNING << "version not supported" << endmsg;
-    return false;
-  }
-
-  msg() << MSG::INFO << "Config file version                         : " << version << endmsg;
-  msg() << MSG::INFO << "Total of discriminators retrievied is       : " << discriminators.size() << endmsg;
-  msg() << MSG::INFO << "Using eta variable                          : " << (m_useEtaVar?"Yes":"No") << endmsg;
-  msg() << MSG::INFO << "Using lumi variable                         : " << (m_useLumiVar?"Yes":"No") << endmsg;
-  file.Close();
-  
-  return true;
-}
-
-// ========================================================================
-
-bool TrigL2CaloRingerReader::retrieve( std::string &calibPath, std::vector<TrigCaloRingsHelper::CutDefsHelper*> &cutDefs )
-{
-  m_etaBins=nullptr;
-  m_etBins=nullptr;
-  m_muBins=nullptr;
-  m_thresholds=nullptr;
-
-  cutDefs.clear();
-  msg() << MSG::INFO <<"Checking thresholds CalibPath: "<< calibPath << endmsg;
- 	auto fullpath = PathResolverFindCalibFile(calibPath);
-	TFile file(fullpath.c_str(),"READ");
-  auto version = ((TParameter<int>*)file.Get("__version__"))->GetVal();
-  TTree *t = (TTree*)file.Get("tuning/thresholds");
-	
-  if(version == 2){  
-    InitBranch(t, "thresholds", &m_thresholds);
-    InitBranch(t, "etBin"     , &m_etBins  );
-    InitBranch(t, "etaBin"    , &m_etaBins );
-	  
-	  for(Long64_t d=0; d<t->GetEntries();++d){
-	    t->GetEntry(d);
-      // Create the discriminator object
-      try{
-        cutDefs.push_back(new TrigCaloRingsHelper::CutDefsHelper(*m_thresholds,m_etaBins->at(0),
-                                                    m_etaBins->at(1), m_etBins->at(0),m_etBins->at(1),-999 , 999));
-        //msg() << MSG::INFO << "Added new cutDef into the list." << endmsg;
-      }catch(const std::bad_alloc& xa){
-        msg() << MSG::ERROR << "Can not alloc cutDefs on memory." << endmsg;
-        return false;
-      }
-	  }	// Loop over ttree events	
-    
-    // retrieve metadata
-    m_useNoActivationFunctionInTheLastLayer = ((TParameter<bool>*)file.Get("metadata/UseNoActivationFunctionInTheLastLayer"))->GetVal();
-    m_lumiCut = ((TParameter<int>*)file.Get("metadata/LumiCut"))->GetVal();
-    m_doPileupCorrection = ((TParameter<bool>*)file.Get("metadata/DoPileupCorrection"))->GetVal();
-  
-  }else if(version == m_version){ // version 3
-  
-    InitBranch(t, "thresholds", &m_thresholds);
-    InitBranch(t, "etBin"     , &m_etBins  );
-    InitBranch(t, "etaBin"    , &m_etaBins );
-    InitBranch(t, "muBin"     , &m_muBins );
-	  
-	  for(Long64_t d=0; d<t->GetEntries();++d){
-	    t->GetEntry(d);
-      // Create the discriminator object
-      try{
-        cutDefs.push_back(new TrigCaloRingsHelper::CutDefsHelper(*m_thresholds,m_etaBins->at(0),
-                                                    m_etaBins->at(1), m_etBins->at(0),m_etBins->at(1),
-                                                    m_muBins->at(0), m_muBins->at(1)) );
-        //msg() << MSG::INFO << "Added new cutDef into the list." << endmsg;
-      }catch(const std::bad_alloc& xa){
-        msg() << MSG::ERROR << "Can not alloc cutDefs on memory." << endmsg;
-        return false;
-      }
-	  }	// Loop over ttree events	
-    
-    // retrieve metadata
-    m_useNoActivationFunctionInTheLastLayer = ((TParameter<bool>*)file.Get("metadata/UseNoActivationFunctionInTheLastLayer"))->GetVal();
-    m_lumiCut = ((TParameter<int>*)file.Get("metadata/LumiCut"))->GetVal();
-    m_doPileupCorrection = ((TParameter<bool>*)file.Get("metadata/DoPileupCorrection"))->GetVal();
-  
-  }else{
-    msg() << MSG::WARNING << "version not supported" << endmsg;
-    return false;
-  }
-  
-  file.Close();
-  
-  msg() << MSG::INFO << "Config file version                         : " << version << endmsg;
-  msg() << MSG::INFO << "Total of cutDefs retrievied is              : " << cutDefs.size() << endmsg;
-  msg() << MSG::INFO << "Using pileup correction                     : " << (m_doPileupCorrection?"Yes":"No") << endmsg;
-  msg() << MSG::INFO << "Using useNoActivationFunctionInTheLastLayer : " << (m_useNoActivationFunctionInTheLastLayer?"Yes":"No") << endmsg;
-  msg() << MSG::INFO << "Using lumi cut                              : " << (m_lumiCut) << endmsg;
-  return true;
-}
-
-
-
-
-
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigRingerHelper.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerHelper.cxx
similarity index 81%
rename from Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigRingerHelper.cxx
rename to Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerHelper.cxx
index 3b5dc826e4c7..30d10ad0ee8b 100644
--- a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/TrigRingerHelper.cxx
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerHelper.cxx
@@ -1,8 +1,8 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
-#include "TrigMultiVarHypo/tools/TrigRingerHelper.h"
-using namespace TrigCaloRingsHelper;
+#include "TrigMultiVarHypo/tools/common/RingerHelper.h"
+using namespace Ringer;
   
 void parseTrigCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, 
                                std::string &caloLayerName)
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerReader.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerReader.cxx
new file mode 100644
index 000000000000..95a3b7925353
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/common/RingerReader.cxx
@@ -0,0 +1,318 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <vector>
+#include "TTree.h"
+#include <iostream>
+#include "TParameter.h"
+#include "PathResolver/PathResolver.h"
+
+// ringer file reader
+#include "TrigMultiVarHypo/tools/common/RingerReader.h"
+// interfaces
+#include "TrigMultiVarHypo/tools/procedures/IModel.h"
+#include "TrigMultiVarHypo/tools/procedures/IThresholds.h"
+// models
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+#include "TrigMultiVarHypo/tools/procedures/Thresholds.h"
+#include "GaudiKernel/StatusCode.h"
+
+using namespace Ringer;
+
+RingerReader::RingerReader(std::string  name):
+  asg::AsgMessaging(name),
+  m_name(name)
+{
+  m_etaBins=nullptr;
+  m_etBins=nullptr;
+  m_thresholds=nullptr;
+  m_weights=nullptr;
+  m_bias=nullptr;
+  m_conv_kernel=nullptr;
+  m_conv_nodes=nullptr;
+  m_conv_kernel_i=nullptr;
+  m_conv_kernel_j=nullptr;
+
+
+  // current version
+  //m_version = 2; //  Used for v6 and v8 tuning for Run 2
+  m_version = 3; // Should be used for future in Run 3
+  m_useCaloRings=true;
+  m_useTileCal=true;
+  m_useTrack=false;
+  m_useShowerShape=false;
+
+}
+
+
+// ========================================================================
+
+RingerReader::~RingerReader()
+{;}
+
+// ========================================================================
+template <class T>
+void RingerReader::InitBranch(TTree* fChain, std::string branch_name, T* param){
+  bool message=true;
+  std::string bname = branch_name;
+  if (fChain->GetAlias(bname.c_str()))
+     bname = std::string(fChain->GetAlias(bname.c_str()));
+
+  if (!fChain->FindBranch(bname.c_str()) && message) {
+    ATH_MSG_WARNING( " unknown branch " << bname );
+    return; 
+  }
+  fChain->SetBranchStatus(bname.c_str(), 1.);
+  fChain->SetBranchAddress(bname.c_str(), param);
+}
+// ========================================================================
+
+
+bool RingerReader::retrieve( std::string &calibPath, std::vector< std::shared_ptr<IModel> > &discriminators )
+{
+  m_etaBins=nullptr;
+  m_etBins=nullptr;
+  m_muBins=nullptr;
+  m_weights=nullptr;
+  m_bias=nullptr;
+  m_nodes=nullptr; 
+  m_tfnames=nullptr;
+  m_conv_kernel=nullptr;
+  m_conv_bias=nullptr;;
+  m_conv_nodes=nullptr;
+  m_conv_kernel_i=nullptr;
+  m_conv_kernel_j=nullptr;
+  m_conv_input_i=nullptr;
+  m_conv_input_j=nullptr;
+  m_conv_tfnames=nullptr;
+  m_useConvLayer=nullptr; 
+  discriminators.clear();
+
+  ATH_MSG_INFO( "Checking discriminators CalibPath: "<< calibPath );
+
+  auto fullpath = PathResolverFindCalibFile(calibPath);
+	TFile file(fullpath.c_str(),"READ");
+  auto version = ((TParameter<int>*)file.Get("__version__"))->GetVal();
+  TTree *t = (TTree*)file.Get("tuning/discriminators");
+
+  if(version == 2){
+	  // Link all branches
+    InitBranch(t, "weights", &m_weights);
+    InitBranch(t, "bias"   , &m_bias   );
+    InitBranch(t, "nodes"  , &m_nodes  );
+    InitBranch(t, "etaBin" , &m_etaBins );
+    InitBranch(t, "etBin"  , &m_etBins  );
+   
+    for(Long64_t d=0; d<t->GetEntries();++d){
+      t->GetEntry(d);
+      // Create the discriminator object
+      try{
+        std::vector<std::string> tfnames;
+        for(unsigned l=0; l<m_nodes->size(); l++) tfnames.push_back("tanh"); // This is default for this version
+	  	  discriminators.push_back( std::make_shared<MultiLayerPerceptron>(*m_nodes,*m_weights,*m_bias,tfnames,m_etBins->at(0),
+                                                                          m_etBins->at(1),m_etaBins->at(0),m_etaBins->at(1), -999., 999.) ); 
+        ATH_MSG_INFO( "Added new discriminator into the list." );
+	    }catch(std::bad_alloc &){
+        ATH_MSG_ERROR("Can not alloc cutDefs on memory." );
+        return false;
+      }
+    }	// Loop over ttree events	
+ 
+    // retrieve metadata
+    m_useCaloRings=true;
+
+
+  
+  }else if ( version == m_version ){ // version 3 (development version for Run 3)
+
+    // Dense configuration
+    InitBranch(t, "dense_weights", &m_weights );
+    InitBranch(t, "dense_bias"   , &m_bias    );
+    InitBranch(t, "dense_nodes"  , &m_nodes   );
+    InitBranch(t, "dense_tfnames", &m_tfnames );
+
+    
+    // Need to attach the convolutional layer?
+    InitBranch(t, "useConvLayer"   , &m_useConvLayer    );
+
+    if(m_useConvLayer->at(0)){
+      InitBranch(t, "conv_kernel_i" , &m_conv_kernel_i  );
+      InitBranch(t, "conv_kernel_j" , &m_conv_kernel_j  );
+      InitBranch(t, "conv_input_i"  , &m_conv_input_i   );
+      InitBranch(t, "conv_input_j"  , &m_conv_input_j   );
+      InitBranch(t, "conv_tfnames"  , &m_conv_tfnames   );
+      InitBranch(t, "conv_nodes"    , &m_conv_nodes     );
+      InitBranch(t, "conv_bias"     , &m_conv_bias      );
+      InitBranch(t, "conv_kernel"   , &m_conv_kernel    );
+      InitBranch(t, "conv_frame"    , &m_conv_frame     );
+    }
+      
+    // Model params
+    InitBranch(t, "etaBin" , &m_etaBins );
+    InitBranch(t, "etBin"  , &m_etBins  );
+    InitBranch(t, "muBin"  , &m_muBins  );
+
+    for(Long64_t d=0; d<t->GetEntries();++d){
+      
+      t->GetEntry(d);
+
+      // Create the discriminator object
+      try{
+
+        if(m_useConvLayer->at(0)){
+          ATH_MSG_INFO( "Alloc Convolutional Neural Object into the stack..." );
+          /* To be include in the future
+          discriminators.push_back(new ConvMultiLayerPerceptron( 
+                                    // Dense layers
+                                    *m_nodes, *m_weights, *m_bias, *m_tfnames,
+                                    // Convolutional layers
+                                    *m_conv_frame,
+                                    m_conv_input_i->at(0), m_conv_input_j->at(0), *m_conv_nodes, *m_conv_kernel_i, 
+                                    *m_conv_kernel_j, *m_conv_kernel, *m_conv_bias ,*m_conv_tfnames,
+                                    // Model params
+                                    m_etBins->at(0),m_etBins->at(1),m_etaBins->at(0),m_etaBins->at(1), m_muBins->at(0), m_muBins->at(1)
+                                    ) 
+                                  ); 
+          */
+        }else{
+	  	    discriminators.push_back(std::make_shared< MultiLayerPerceptron >(
+                                      // Dense layer
+                                      *m_nodes,*m_weights,*m_bias,*m_tfnames,
+                                      // Model params
+                                      m_etBins->at(0),m_etBins->at(1),m_etaBins->at(0),m_etaBins->at(1), m_muBins->at(0), m_muBins->at(1) 
+                                      ) 
+                                    );
+
+
+
+        }
+        
+        ATH_MSG_INFO( "Added new discriminator into the list." );
+	    }catch(std::bad_alloc &){
+        ATH_MSG_ERROR(  "Can not alloc cutDefs on memory." );
+        return false;
+      }
+
+    }	// Loop over ttree events	
+ 
+    // retrieve metadata
+    m_useTrack        = ((TParameter<bool>*)file.Get("metadata/UseTrack"))->GetVal();
+    m_useCaloRings    = ((TParameter<bool>*)file.Get("metadata/UseCaloRings"))->GetVal();
+    m_useShowerShape  = ((TParameter<bool>*)file.Get("metadata/UseShowerShape"))->GetVal();
+    m_useTileCal      = ((TParameter<bool>*)file.Get("metadata/UseTileCal"))->GetVal();
+
+  }
+  else{
+    ATH_MSG_WARNING("version not supported" );
+    return false;
+  }
+
+  ATH_MSG_INFO( "Config file version                         : " << version );
+  ATH_MSG_INFO( "RemoveOutputTansigTF?                       : " << (m_removeOutputTansigTF?"Yes":"No") );
+  ATH_MSG_INFO( "Total of discriminators retrievied is       : " << discriminators.size() );
+  ATH_MSG_INFO( "UseCaloRings?                               : " << m_useCaloRings );
+  ATH_MSG_INFO( "UseShowerShape?                             : " << m_useShowerShape );
+  ATH_MSG_INFO( "UseTrack?                                   : " << m_useTrack );
+  ATH_MSG_INFO( "UseTileCal?                                 : " << m_useTileCal );
+  file.Close();
+  
+  return true;
+}
+
+// ========================================================================
+
+
+
+bool RingerReader::retrieve( std::string &calibPath, std::vector< std::shared_ptr<IThresholds> > &cutDefs )
+{
+  m_etaBins=nullptr;
+  m_etBins=nullptr;
+  m_muBins=nullptr;
+  m_thresholds=nullptr;
+
+  cutDefs.clear();
+  ATH_MSG_INFO("Checking thresholds CalibPath: "<< calibPath );
+ 	auto fullpath = PathResolverFindCalibFile(calibPath);
+	TFile file(fullpath.c_str(),"READ");
+  auto version = ((TParameter<int>*)file.Get("__version__"))->GetVal();
+  TTree *t = (TTree*)file.Get("tuning/thresholds");
+	
+  if(version == 2){  
+    InitBranch(t, "thresholds", &m_thresholds);
+    InitBranch(t, "etBin"     , &m_etBins  );
+    InitBranch(t, "etaBin"    , &m_etaBins );
+	  
+	  for(Long64_t d=0; d<t->GetEntries();++d){
+	    t->GetEntry(d);
+      // Create the discriminator object
+      try{
+        cutDefs.push_back( std::make_shared< Thresholds >(*m_thresholds,m_etaBins->at(0),
+                                          m_etaBins->at(1), 
+                                          m_etBins->at(0),
+                                          m_etBins->at(1),
+                                          -999. , 
+                                          999.));
+      }catch(std::bad_alloc &){
+        ATH_MSG_ERROR( "Can not alloc cutDefs on memory." );
+        return false;
+      }
+	  }	// Loop over ttree events	
+    
+    // retrieve metadata
+
+    m_lumiCut = ((TParameter<int>*)file.Get("metadata/LumiCut"))->GetVal();
+    m_doPileupCorrection = ((TParameter<bool>*)file.Get("metadata/DoPileupCorrection"))->GetVal();
+    m_removeOutputTansigTF = ((TParameter<bool>*)file.Get("metadata/UseNoActivationFunctionInTheLastLayer"))->GetVal();
+  
+  
+  }else if ( version == m_version ){ // version 3 (current)
+
+    InitBranch(t, "thresholds", &m_thresholds);
+    InitBranch(t, "etBin"     , &m_etBins  );
+    InitBranch(t, "etaBin"    , &m_etaBins );
+    InitBranch(t, "muBin"     , &m_muBins );
+	  
+    for(Long64_t d=0; d<t->GetEntries();++d){
+      t->GetEntry(d);
+      // Create the discriminator object
+      try{
+        cutDefs.push_back(std::make_shared< Thresholds >(  *m_thresholds,
+                                           m_etaBins->at(0),
+                                           m_etaBins->at(1), 
+                                           m_etBins->at(0),
+                                           m_etBins->at(1),
+                                           m_muBins->at(0), 
+                                           m_muBins->at(1)) );
+ 
+	    }catch(std::bad_alloc &){
+        ATH_MSG_ERROR( "Can not alloc cutDefs on memory." );
+        return false;
+      }
+    }	// Loop over ttree events	
+ 
+    // retrieve metadata
+    m_lumiCut               = ((TParameter<int>*)file.Get("metadata/LumiCut"))->GetVal();
+    m_doPileupCorrection    = ((TParameter<bool>*)file.Get("metadata/DoPileupCorrection"))->GetVal();
+    m_removeOutputTansigTF  = ((TParameter<bool>*)file.Get("metadata/RemoveOutputTansigTF"))->GetVal();
+  
+  }else{
+    ATH_MSG_WARNING("version not supported" );
+    return false;
+  }
+  
+  file.Close(); 
+  ATH_MSG_INFO( "Config file version                         : " << version );
+  ATH_MSG_INFO( "Total of cutDefs retrievied is              : " << cutDefs.size() );
+  ATH_MSG_INFO( "Using pileup correction                     : " << (m_doPileupCorrection?"Yes":"No") );
+  ATH_MSG_INFO( "Using lumi cut                              : " << (m_lumiCut) );
+  return true;
+}
+
+    
+
+
+
+
+
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/MultiLayerPerceptron.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/MultiLayerPerceptron.cxx
new file mode 100644
index 000000000000..98baca25a981
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/MultiLayerPerceptron.cxx
@@ -0,0 +1,266 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#include "TrigMultiVarHypo/tools/procedures/MultiLayerPerceptron.h"
+
+#include <cstddef>
+#include <vector>
+#include <cmath>
+#include <iostream>
+using namespace std;
+using namespace Ringer;
+
+MultiLayerPerceptron::MultiLayerPerceptron(std::vector<unsigned int>  &n, 
+                                           std::vector<double>        &w, 
+                                           std::vector<double>        &b,
+                                           std::vector<std::string>   &TF,
+                                           double etmin, 
+                                           double etmax, 
+                                           double etamin, 
+                                           double etamax,
+                                           double mumin,
+                                           double mumax)
+  : 
+    IModel(etmin,etmax,etamin,etamax,mumin,mumax),
+    m_nodes(n),
+    m_weights(0),
+    m_bias(0),
+    m_tfnames(TF)
+{
+
+  if ( !n.size() )  throw BAD_BIAS_SIZE; //Nothing to do
+  
+  //Verifying weight vector size
+  unsigned wSize=0;
+  for (unsigned k=0; k<n.size()-1; ++k) wSize+=n[k]*n[k+1];
+  try{
+    if (wSize != w.size() || !w.size() )  throw BAD_WEIGHT_SIZE;
+    //Verifying bias vector size
+    unsigned bSize=0;
+    for (unsigned k=1; k<n.size(); ++k)bSize+=n[k];
+    if(bSize != b.size() || !b.size() ) throw BAD_BIAS_SIZE;
+  }catch(int i){
+    throw;
+  }
+  //First weight dimension
+  try{
+    m_weights = new double **[n.size()-1]; //number of layers excluding input
+  }catch (const std::bad_alloc &){
+    m_weights = nullptr;
+    throw;
+  }
+  //First bias dimension
+  try{    
+    m_bias = new double *[n.size()-1]; //number of layers excluding input
+  }catch (const std::bad_alloc &){
+    m_bias = nullptr;
+    throw;    
+  }
+
+
+  std::vector<double>::const_iterator itrB = b.begin();
+  std::vector<double>::const_iterator itrW = w.begin();
+  for (unsigned l = 0; l < n.size()-1; ++l){  
+    //Checks if no bad_alloc happened to bias
+    if(m_bias){
+      try{
+        //Second and last dimension of bias
+        m_bias[l] = new double[n[l+1]]; //number of nodes in next layer
+      } catch (const std::bad_alloc &){
+        m_bias[l] = nullptr;
+        throw;
+      }
+    }
+    //Checks if no bad_alloc happened to m_weights
+    if(m_weights){ 
+      try{
+        //Second dimension of weights
+        m_weights[l] = new double*[n[l+1]]; //number of nodes in next layer
+      } catch ( const std::bad_alloc &){
+        m_weights[l] = nullptr;
+        throw;
+      }
+    }
+    for (unsigned i=0; i<n[l+1]; i++){ 
+      //Checks if no bad_alloc happened to weights[l]
+      if(m_weights){
+        if(m_weights[l]){
+          try{
+            //Third and last dimension of weights
+            m_weights[l][i]=new double [n[l]]; //number of nodes in current layer
+          } catch (const std::bad_alloc &){
+            m_weights[l][i] = nullptr;
+            throw;
+          }
+        }
+      }
+      //Populating bias matrix
+      if (m_bias){
+        //Checks if no bad_alloc happened to bias[l]
+        if (m_bias[l]){
+            m_bias[l][i]=(*itrB++);
+        }
+      }
+      //Populating weight matrix
+      for (unsigned j=0; j<n[l]; j++){
+        if (m_weights){
+          if (m_weights[l]){
+            if(m_weights[l][i]){
+              m_weights[l][i][j]=(*itrW++);
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+void MultiLayerPerceptron::release(double** neuronOutputs, double** layerOutputs) const
+{
+
+  for (unsigned l=0; l<m_nodes.size(); l++){
+    if(layerOutputs){
+      if (layerOutputs[l]==nullptr){
+        delete layerOutputs[l]; //Deletes null pointer
+      }
+    }else{
+      delete[] layerOutputs[l]; //Deletes array of values at second dimension of layerOutputs
+    }
+    if(neuronOutputs){
+      if (neuronOutputs[l]==nullptr){
+        delete neuronOutputs[l]; //Deletes null pointer
+      }
+    }else{
+      delete[] neuronOutputs[l]; //Deletes array of values at second dimension of layerOutputs
+    }
+  }
+
+  if(layerOutputs==nullptr)
+    delete layerOutputs;
+  else
+    delete[] layerOutputs;
+
+  if(neuronOutputs==nullptr)
+    delete neuronOutputs;
+  else
+    delete[] neuronOutputs;
+
+
+}
+
+
+
+
+MultiLayerPerceptron::~MultiLayerPerceptron(){
+
+  for (unsigned l=0; l<m_nodes.size()-1; l++){
+    if (m_bias){
+      if (m_bias[l]==nullptr){
+        delete m_bias[l]; //Deletes null pointer
+      }else{
+        delete[] m_bias[l]; //Deletes array of values at second dimension of bias
+      }
+    } 
+    for (unsigned i=0; i<m_nodes[l+1]; i++){
+      if (m_weights){ 
+        if(m_weights[l]){
+          if (m_weights[l][i]==nullptr){
+            delete m_weights[l][i]; //Deletes null pointer
+          }else{
+            delete[] m_weights[l][i]; //Deletes array of values at third dimension of weights
+          }
+        }
+      }
+    }
+    if (m_weights){
+      if (m_weights[l]==nullptr){
+        delete m_weights[l]; //Deletes null pointer
+      }else{
+        delete[] m_weights[l]; //Deletes array of pointers at second dimension of weights
+      }
+    } 
+  }//Layers
+
+
+  if (m_weights==nullptr){
+    delete m_weights; //Deletes null pointer
+  }else{
+    delete[] m_weights; //Deletes array of pointers at first dimension of weights
+  }
+
+  if (m_bias==nullptr){
+    delete m_bias; //Deletes null pointer
+  }else{
+    delete[] m_bias; //Deletes array of pointers at first dimension of bias
+  }
+}
+
+
+
+Ringer::RnnOutInfo MultiLayerPerceptron::propagate(std::vector<float> &input ) const
+{
+  double **layerOutputs;
+  double **neuronOutputs;
+  //this->malloc(neuronOutputs, layerOutputs);
+
+  //First multiplication dimension
+  neuronOutputs   = new double *[m_nodes.size()];
+  layerOutputs = new double *[m_nodes.size()]; //number of layers including input
+
+  for (unsigned l = 0; l<m_nodes.size(); ++l){ 
+    //Second and last dimension of layerOutputs
+    layerOutputs[l] = new double[m_nodes[l]]; //number of nodes in current layer
+    //Second and last dimension of layerOutputs
+    neuronOutputs[l] = new double[m_nodes[l]]; //number of nodes in current layer
+  }
+
+
+  for (unsigned l = 0; l<m_nodes.size()-1; ++l){ 
+    for (unsigned i=0; i<m_nodes[l]; i++){ 
+      //Populating multiplication matrix so that starting sum equals zero
+      if(l==0)
+        layerOutputs[0][i]=(double)input.at(i);
+      else
+        layerOutputs[l][i]=0;
+      neuronOutputs[l][i]=0;
+    }
+  }
+
+  // Propagate
+  for(unsigned l=0; l<m_nodes.size()-1;l++){
+    for(unsigned i=0; i<m_nodes[l+1]; i++){
+      layerOutputs[l+1][i]=m_bias[l][i];
+      for (unsigned j=0;j<m_nodes[l]; j++)  layerOutputs[l+1][i]+=layerOutputs[l][j]*m_weights[l][i][j];
+      neuronOutputs[l+1][i] = layerOutputs[l+1][i]; // Hold the sum neuron output before apply the activation function
+      //layerOutputs[l+1][i]  = this->activation(layerOutputs[l+1][i], m_tfnames[l]);
+      layerOutputs[l+1][i]  = tanh(layerOutputs[l+1][i]);
+    } 
+  }
+
+  Ringer::RnnOutInfo answer;
+  answer.output=(float)(layerOutputs[m_nodes.size()-1][0]);
+  answer.outputBeforeTheActivationFunction=(float)(neuronOutputs[m_nodes.size()-1][0]);
+  this->release(neuronOutputs,layerOutputs);
+  return answer;
+}
+
+/*
+double MultiLayerPerceptron::activation( double value, std::string &tfname ){
+
+  // Apply the hiperbolic tangent
+  if(tfname=="tanh"){
+    return tanh(value);
+  // Applyt the RELU transfer function 
+  }else if(tfname=="relu"){
+    return (value > 0) ? value : 0;
+  }else if(tfname=="linear"){
+    return value;
+  }else{ // Bypass the TF
+    return value;
+  }
+}
+*/
+
diff --git a/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/Norm1.cxx b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/Norm1.cxx
new file mode 100644
index 000000000000..fe393d414aaf
--- /dev/null
+++ b/Trigger/TrigHypothesis/TrigMultiVarHypo/src/tools/procedures/Norm1.cxx
@@ -0,0 +1,36 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///Local include(s)
+#include "TrigMultiVarHypo/tools/procedures/Norm1.h"
+///std library(s)
+#include <cmath>
+using namespace std;
+using namespace Ringer;
+
+
+
+
+Norm1::Norm1( double etmin, double etmax, double etamin, double etamax, double mumin, double mumax, bool usetilecal):
+  INormalization(etmin,etmax,etamin,etamax,mumin,mumax),
+  m_useTileCal(usetilecal)
+{;}
+ 
+
+
+void Norm1::execute( std::vector<float> &rings ) const {
+  
+  if(!m_useTileCal){
+    if(rings.size() == 100){
+      // remove the last 12 rings (tilecal)
+      rings.erase(rings.begin()+88,rings.end());   
+    }
+  }
+  float energy=0.0;
+  for(unsigned i=0; i<rings.size(); ++i)  energy+=rings.at(i);
+  for(unsigned i=0; i<rings.size(); ++i)  rings.at(i)=rings.at(i)/std::fabs(energy);
+}
+
+
+
-- 
GitLab


From 6058a680e1b3276896ccbb8161bd5111f810e8af Mon Sep 17 00:00:00 2001
From: Bertrand Martin <martindl@cern.ch>
Date: Mon, 11 Mar 2019 09:05:24 +0100
Subject: [PATCH 017/163] drop comment

---
 Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
index 4c5cdb184798..9bcb6b2af825 100644
--- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py
@@ -347,7 +347,6 @@ class TauHypoProvider:
         ('medium0', 200): [0,3, 200.0*GeV, 2, False],
         }
 
-# 'massTrkSysMin', 'massTrkSysMax', 'massTrkSysKaonMin', 'massTrkSysKaonMax', 'massTrkSysKaonPiMin', 'massTrkSysKaonPiMax', 'targetMassTrkSysKaonPi', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax'
     thresholdsEF_dikaon = {
         ('dikaon', 25):          [0.2*GeV, 0.45*GeV,    0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   15.0*GeV, 25.0*GeV, 1.5],
         ('dikaon', 35):          [0.2*GeV, 0.45*GeV,    0.0*GeV, 1000.0*GeV,  0.0*GeV, 1000.0*GeV, 0.0*GeV,   25.0*GeV, 35.0*GeV, 1.5], 
-- 
GitLab


From 84ba11223e882d598099108eda16d91345e87a43 Mon Sep 17 00:00:00 2001
From: Walter Lampl <Walter.Lampl@cern.ch>
Date: Mon, 11 Mar 2019 13:55:46 +0100
Subject: [PATCH 018/163] re-instante a way to pass private algo-tools through
 ComponentAccumulator

---
 .../CaloRec/python/CaloCellMakerConfig.py     | 18 ++++---
 .../CaloRec/python/CaloTopoClusterConfig.py   | 13 +++--
 .../CaloTools/python/CaloNoiseToolConfig.py   |  2 +-
 .../python/ComponentAccumulator.py            | 47 +++++++++++--------
 Database/IOVDbSvc/python/IOVDbSvcConfig.py    |  1 +
 .../python/LArBadChannelConfig.py             |  8 ++--
 .../LArCabling/python/LArCablingConfig.py     |  9 ++--
 .../LArCellRec/python/LArCellBuilderConfig.py | 22 ++++-----
 .../python/egammaCaloToolsConfig.py           |  2 +-
 9 files changed, 70 insertions(+), 52 deletions(-)

diff --git a/Calorimeter/CaloRec/python/CaloCellMakerConfig.py b/Calorimeter/CaloRec/python/CaloCellMakerConfig.py
index 7d35c0ad382e..0fca0d226c2e 100644
--- a/Calorimeter/CaloRec/python/CaloCellMakerConfig.py
+++ b/Calorimeter/CaloRec/python/CaloCellMakerConfig.py
@@ -15,15 +15,18 @@ def CaloCellMakerCfg(configFlags):
     result.merge(LArGMCfg(configFlags))
     result.merge(TileGMCfg(configFlags))
 
-    acc,theLArCellMaker=LArCellBuilderCfg(configFlags)
-    result.merge(acc)
+    larCellBuilder=LArCellBuilderCfg(configFlags)
 
-    acc,theLArCellCorrectors=LArCellCorrectorCfg(configFlags)
-    result.merge(acc)
+
+    
+    larCellCorrectors=LArCellCorrectorCfg(configFlags)
 
     theTileCellBuilder = TileCellBuilder()
-    cellAlgo=(CaloCellMaker(CaloCellMakerToolNames=[theLArCellMaker,CaloCellContainerFinalizerTool()]+theLArCellCorrectors,
-                            CaloCellsOutputName="AllCalo"))
+
+    cellAlgo=CaloCellMaker(CaloCellMakerToolNames=[larCellBuilder.popPrivateTools(),CaloCellContainerFinalizerTool()]+larCellCorrectors.popPrivateTools(),
+                            CaloCellsOutputName="AllCalo")
+    result.merge(larCellBuilder)
+    result.merge(larCellCorrectors)
     return result,cellAlgo
 
 
@@ -37,8 +40,9 @@ if __name__=="__main__":
     Configurable.configurableRun3Behavior=1
 
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
 
-    ConfigFlags.Input.Files=["myRDO.pool.root",]
+    ConfigFlags.Input.Files = defaultTestFiles.RAW
     ConfigFlags.lock()
 
     cfg=ComponentAccumulator()
diff --git a/Calorimeter/CaloRec/python/CaloTopoClusterConfig.py b/Calorimeter/CaloRec/python/CaloTopoClusterConfig.py
index 20f9aec6e030..77cf8db91455 100644
--- a/Calorimeter/CaloRec/python/CaloTopoClusterConfig.py
+++ b/Calorimeter/CaloRec/python/CaloTopoClusterConfig.py
@@ -21,7 +21,8 @@ def CaloTopoClusterCfg(configFlags):
     result.merge(TileGMCfg(configFlags))
 
     #Get CaloNoiseTool
-    acc,theCaloNoiseTool=CaloNoiseToolCfg(configFlags)
+    acc=CaloNoiseToolCfg(configFlags)
+    theCaloNoiseTool=acc.getPublicTool("CaloNoiseTool")
     result.merge(acc)
 
     # maker tools
@@ -107,17 +108,19 @@ if __name__=="__main__":
     from AthenaCommon.Logging import log
     from AthenaCommon.Constants import DEBUG
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
 
     log.setLevel(DEBUG)
 
-    ConfigFlags.Input.isMC = False
-    ConfigFlags.Input.Files = ["myESD.pool.root"]
-    ConfigFlags.Output.ESDFileName="esdOut.pool.root"
+    #ConfigFlags.Input.isMC = False
+    ConfigFlags.Input.Files = ConfigFlags.Input.Files = defaultTestFiles.ESD
+    ConfigFlags.Output.ESDFileName= "esdOut.pool.root"
     ConfigFlags.lock()
 
     from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg 
     from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
-    #cfg=ComponentAccumulator()
+
+
     cfg=MainServicesSerialCfg() 
     cfg.merge(PoolReadCfg(ConfigFlags))
     
diff --git a/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py b/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
index d3e6c0010ed0..cdba6579e1aa 100644
--- a/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
+++ b/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
@@ -97,7 +97,7 @@ def CaloNoiseToolCfg(configFlags):
 
     result.addPublicTool(caloNoiseToolDB)
     
-    return result,caloNoiseToolDB
+    return result
 
 if __name__ == "__main__":
     from AthenaCommon.Configurable import Configurable
diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index e3df021c15aa..48807fd520e6 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -31,16 +31,13 @@ class ComponentAccumulator(object):
         self._services=[]                #List of service, not yet sure if the order matters here in the MT age
         self._eventInputs=set()          #List of items (as strings) to be read from the input (required at least for BS-reading).
         self._outputPerStream={}         #Dictionary of {streamName,set(items)}, all as strings
-
+        self._privateTools=None          #A placeholder to carry a private tool(s) not yet attached to its parent
 
         self._theAppProps=dict()        #Properties of the ApplicationMgr
 
         #Backward compatiblity hack: Allow also public tools:
         self._publicTools=[]
 
-        # small CAs can have only tools
-        self._privateTools=[]
-
         #To check if this accumulator was merged:
         self._wasMerged=False
 
@@ -161,7 +158,26 @@ class ComponentAccumulator(object):
         else:
             return findSubSequence(self._sequence,sequenceName)
 
-
+    def setPrivateTools(self,privTool):
+        if self._privateTools is not None:
+            raise ConfigurationError("This ComponentAccumulator holds already a private tool. Only one private tool is allowed")
+
+        if isinstance(privTool,collections.Sequence):
+            for t in privTool:
+                if not isinstance(t,ConfigurableAlgTool):
+                    raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only configurableAlgTools or lists of ConfigurableAlgTools. Encountered %s in a list" % type(t))
+        else: 
+            if not isinstance(privTool,ConfigurableAlgTool):
+                raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only configurableAlgTools or lists of ConfigurableAlgTools. Encountered %s " % type(privTool))
+                
+        self._privateTools=privTool
+        return
+        
+    def popPrivateTools(self):
+        tool=self._privateTools
+        self._privateTools=None
+        return tool
+        
 
     def addEventAlgo(self, algorithms,sequenceName=None):
         if not isinstance(algorithms,collections.Sequence):
@@ -233,7 +249,7 @@ class ComponentAccumulator(object):
             raise TypeError("Attempt to add wrong type: %s as service" % type( newSvc ).__name__)
             pass
         self._deduplicate(newSvc,self._services)  #will raise on conflict
-        return newSvc
+        return 
 
 
     def addPublicTool(self,newTool):
@@ -370,19 +386,6 @@ class ComponentAccumulator(object):
         """ Returns single service, exception if either not found or to many found"""
         return self.__getOne( self._services, name, "Services")
     
-    def addPrivateTool(self, newTool):
-        if not isinstance(newTool,ConfigurableAlgTool):
-            raise TypeError("Attempt to add wrong type: %s as private AlgTool" % type( newTool ).__name__)
-        self._deduplicate(newTool,self._privateTools)
-
-    def getPrivateTools(self):
-        return self._privateTools
-
-    def getPrivateTool(self, name=None):        
-        """ Returns single private tool, exception if either not found or to many found"""
-        return self.__getOne( self._privateTools, name, "PrivateTools")
-        
-
     def addEventInput(self,condObj):
         #That's a string, should do some sanity checks on formatting
         self._eventInput.add(condObj)
@@ -428,7 +431,7 @@ class ComponentAccumulator(object):
                     self.addEventAlgorithm(other, sequenceName=sequenceName)
                     #FIXME: At this point we can't distingush event algos from conditions algos.
                     #Might become possible with new Gaudi configurables
-                elif isinstance(other,ConfigurableAlgTool):
+                elif isinstance(otherConfigurableAlgTool):
                     self.addPublicTool(other)
                 else:
                     raise RuntimeError("mergeAll called with unexpected parameter of type %s" % type(other))
@@ -441,6 +444,10 @@ class ComponentAccumulator(object):
         if other is None:
             raise RuntimeError("merge called on object of type None: did you forget to return a CA from a config function?")
 
+        privTool=self._privateTools or other._privateTools
+        if (privTool is not None):
+            raise RuntimeError("merge called on a ComponentAccumulator with and dangling private tool %s/%s" % (privTool.getType(),privTool.getName()))
+
         if isinstance(other,collections.Sequence):
             self._msg.error("Merge called with a: %s "  % str(type(other)) + " of length: %d " % len(other))
             self._msg.error("where elements are of type : " + ", ".join([ str(type(x).__name__) for x in other]) )
diff --git a/Database/IOVDbSvc/python/IOVDbSvcConfig.py b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
index 2a6df21a71f3..3d3d7034bae6 100644
--- a/Database/IOVDbSvc/python/IOVDbSvcConfig.py
+++ b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
@@ -90,6 +90,7 @@ This allows the possibility of later adding a new IOV using IOVSvc::setRange."""
 
     result,iovDbSvc=IOVDbSvcCfg(configFlags)
 
+
     #Add class-name to CondInputLoader (if reqired)
     if className is not None:
         loadFolders=[]
diff --git a/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py b/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
index 2084ae83337d..fd30c40ed52d 100644
--- a/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
+++ b/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
@@ -5,7 +5,7 @@ from IOVDbSvc.IOVDbSvcConfig import addFolders
 
 def LArBadChannelCfg(configFlags):
 
-    result=LArOnOffIdMappingCfg(configFlags)[0]
+    result=LArOnOffIdMappingCfg(configFlags)
     
     if configFlags.Common.isOnline or configFlags.Input.isMC:
         foldername="/LAR/BadChannels/BadChannels"
@@ -48,7 +48,8 @@ def LArBadChannelMaskerCfg(configFlags,problemsToMask,doMasking=True,ToolName="L
     result=LArBadChannelCfg(configFlags)
      
     bcMasker=LArBadChannelMasker(ToolName,ProblemsToMask=problemsToMask, DoMasking=doMasking)
-    return result,bcMasker
+    result.setPrivateTools(bcMasker)
+    return result
                     
 
 
@@ -69,7 +70,8 @@ if __name__=="__main__":
     
     cfg.merge(LArBadChannelCfg(ConfigFlags))
     cfg.merge(LArBadFebCfg(ConfigFlags))
-    acc,privTool=LArBadChannelMaskerCfg(ConfigFlags,["allDead",])
+    acc=LArBadChannelMaskerCfg(ConfigFlags,["allDead",])
+    masker=acc.popPrivateTool()
     cfg.merge(acc)
     f=open("LArBCCondAlgos.pkl","w")
     cfg.store(f)
diff --git a/LArCalorimeter/LArCabling/python/LArCablingConfig.py b/LArCalorimeter/LArCabling/python/LArCablingConfig.py
index 39dc34077457..afa2f57c9772 100644
--- a/LArCalorimeter/LArCabling/python/LArCablingConfig.py
+++ b/LArCalorimeter/LArCabling/python/LArCablingConfig.py
@@ -25,7 +25,8 @@ def _larCablingCfg(configFlags,algo,folder):
 
     result.addCondAlgo(algo(ReadKey=folder))
     result.merge(addFolders(configFlags,folderwithtag,className="AthenaAttributeList",detDb=db))
-    return result,None
+    #print result
+    return result
 
 
 def LArOnOffIdMappingCfg(configFlags):
@@ -51,8 +52,8 @@ if __name__ == "__main__":
     ConfigFlags.Input.Files = defaultTestFiles.RAW
     ConfigFlags.lock()
 
-    acc = LArOnOffIdMappingCfg( ConfigFlags )[0]
-    acc.merge(LArFebRodMappingCfg(ConfigFlags)[0])
-    acc.merge(LArCalibIdMappingCfg(ConfigFlags)[0])
+    acc = LArOnOffIdMappingCfg( ConfigFlags )
+    acc.merge(LArFebRodMappingCfg(ConfigFlags))
+    acc.merge(LArCalibIdMappingCfg(ConfigFlags))
     acc.store( file( "test.pkl", "w" ) )
     print "All OK"
diff --git a/LArCalorimeter/LArCellRec/python/LArCellBuilderConfig.py b/LArCalorimeter/LArCellRec/python/LArCellBuilderConfig.py
index 9ba36ba02a0c..0275c9ee1eec 100644
--- a/LArCalorimeter/LArCellRec/python/LArCellBuilderConfig.py
+++ b/LArCalorimeter/LArCellRec/python/LArCellBuilderConfig.py
@@ -5,11 +5,13 @@ from LArCellRec.LArCellRecConf import LArCellBuilderFromLArRawChannelTool, LArCe
 from LArCabling.LArCablingConfig import LArOnOffIdMappingCfg 
 
 def LArCellBuilderCfg(configFlags):
-    result=LArOnOffIdMappingCfg(configFlags)
+    result=ComponentAccumulator()
+    result.merge(LArOnOffIdMappingCfg(configFlags))
     theLArCellBuilder = LArCellBuilderFromLArRawChannelTool()
 
     theLArCellBuilder.addDeadOTX = False #Create flag? Requires bad-feb DB access
-    return result,theLArCellBuilder
+    result.setPrivateTools(theLArCellBuilder)
+    return result
 
 
 
@@ -26,20 +28,18 @@ def LArCellCorrectorCfg(configFlags):
         from LArBadChannelTool.LArBadChannelConfig import LArBadChannelMaskerCfg
         theNoiseMasker=LArCellNoiseMaskingTool()
         if configFlags.LAr.doCellNoiseMasking:
-            acc,cellNoiseMaskingTool= LArBadChannelMaskerCfg(configFlags,problemsToMask=["highNoiseHG","highNoiseMG","highNoiseLG","deadReadout","deadPhys"],ToolName="CellNoiseMask")
+            acc= LArBadChannelMaskerCfg(configFlags,problemsToMask=["highNoiseHG","highNoiseMG","highNoiseLG","deadReadout","deadPhys"],ToolName="CellNoiseMask")
+            theNoiseMasker.MaskingTool=acc.popPrivateTools()
             result.merge(acc)
-            theNoiseMasker.MaskingTool=cellNoiseMaskingTool
+
             pass
         if configFlags.LAr.doCellSporadicNoiseMasking:
-            acc,sporadicNoiseMaskingTool=LArBadChannelMaskerCfg(configFlags,problemsToMask=["sporadicBurstNoise",],ToolName="SporadicNoiseMask")
+            acc=LArBadChannelMaskerCfg(configFlags,problemsToMask=["sporadicBurstNoise",],ToolName="SporadicNoiseMask")
+            theNoiseMasker.MaskingSporadicTool=acc.popPrivateTools()
             result.merge(acc)
-            theNoiseMasker.MaskingSporadicTool=sporadicNoiseMaskingTool
             pass
         correctionTools.append(theNoiseMasker)
     #Many more tools to be added, eg HV correction
 
-    
-    return result,correctionTools
-        
-        
-        
+    result.setPrivateTools(correctionTools)
+    return result
diff --git a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
index a40efe7b4efb..b8907c151624 100644
--- a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
+++ b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
@@ -13,7 +13,7 @@ def CaloFillRectangularClusterCfg(flags):
                                                             phi_size = 7,
                                                             cells_name = flags.Egamma.Keys.Input.Cells)
 
-    result.addPrivateTool(caloFillRectangularCluster)
+    result.setPrivateTools(caloFillRectangularCluster)
     return result
 
 #---------------------------------------
-- 
GitLab


From b451fba6328004b1b3099f809f34cb265fc4fb32 Mon Sep 17 00:00:00 2001
From: Walter Lampl <walter.lampl@cern.ch>
Date: Tue, 12 Mar 2019 06:46:50 +0000
Subject: [PATCH 019/163] Fix typo in ComponentAccumulator.py

---
 Control/AthenaConfiguration/python/ComponentAccumulator.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 48807fd520e6..611e554aac26 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -431,7 +431,7 @@ class ComponentAccumulator(object):
                     self.addEventAlgorithm(other, sequenceName=sequenceName)
                     #FIXME: At this point we can't distingush event algos from conditions algos.
                     #Might become possible with new Gaudi configurables
-                elif isinstance(otherConfigurableAlgTool):
+                elif isinstance(other,ConfigurableAlgTool):
                     self.addPublicTool(other)
                 else:
                     raise RuntimeError("mergeAll called with unexpected parameter of type %s" % type(other))
-- 
GitLab


From 13705edf212aeead9811c2c1f502c824441a3038 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Tue, 12 Mar 2019 14:55:19 +0100
Subject: [PATCH 020/163] updates along the comments from the big meeting

---
 .../python/ComponentAccumulator.py            | 113 ++++--------------
 .../python/ComponentAccumulatorTest.py        |   6 +-
 .../python/PropSetterProxy.py                 |  79 ++++++++++++
 .../TrigUpgradeTest/share/newJOtest.py        |  24 ++--
 4 files changed, 112 insertions(+), 110 deletions(-)
 create mode 100644 Control/AthenaConfiguration/python/PropSetterProxy.py

diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 353770ce4be9..5d806457a5e9 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -592,6 +592,7 @@ class ComponentAccumulator(object):
     def store(self,outfile,nEvents=10,useBootStrapFile=True,threaded=False):
         from AthenaCommon.Utils.unixtools import find_datafile
         import pickle
+        self._isMergable = True # this is CA we store, it is ok it is not mergable
         if useBootStrapFile:
             import glob
             # first load basics from the bootstrap-pickle
@@ -843,6 +844,27 @@ class ComponentAccumulator(object):
         sc1 = app.terminate()
         return sc1
 
+    def foreach_component(self, path):
+        """ Utility to set properties of components using wildcards
+        
+        Example:
+        forcomps(ca, "*/HLTTop/*/*Hypo*").OutputLevel=VERBOSE
+        
+        The compoments name & locations in the CF tree are translated into the unix like path. 
+        Components of matching path are taken under consideration in setting the property.
+        If the property is set succesfully an INFO message is printed. Else, a warning is printed.      
+        
+        The convention for path of nested components is as follows:
+        Sequencer - only the name is used in the path
+        Algorithm - full name - type/instance_name (aka full name) is used
+        PrivateTools - the name of the property + the type/instance_name are added
+        PublicTools - are located under ToolSvc/ and type/instance_name is used
+        Services - located under SvcMgr/ and type/instance_name is used
+        """
+        from AthenaConfiguration.PropSetterProxy import PropSetterProxy
+        self._isMergable=False
+        return PropSetterProxy(self, path)
+
 
 
 def CAtoGlobalWrapper(cfgmethod,flags):
@@ -852,94 +874,3 @@ def CAtoGlobalWrapper(cfgmethod,flags):
 
      result.appendToGlobals()
      return
-
-
-class PropSetterProxy(object):
-   __compPaths = {}
-   __scannedCA = None
-
-   def __init__(self, ca, path):      
-      self.__path = path
-      self.__findComponents( ca )
-
-      
-   def __setattr__(self, name, value):
-       if name.startswith("_PropSetterProxy"):
-           return super(PropSetterProxy, self).__setattr__(name, value)
-       
-       msg = logging.getLogger('foreach_component')
-       import fnmatch
-       for component_path, component in PropSetterProxy.__compPaths.iteritems():
-           if fnmatch.fnmatch( component_path, self.__path ):
-               if name in component.getProperties():
-                   try:
-                       setattr( component, name, value )
-                       msg.debug( "Set property: %s to value %s of component %s because it matched %s " % ( name, str(value), component_path, self.__path )   )
-                   except Exception, ex:
-                       msg.warning( "Failed to set property: %s to value %s of component %s because it matched %s, reason: %s" % ( name, str(value), component_path, self.__path, str(ex) )   )
-                       pass
-               else:
-                   msg.warning( "No such a property: %s in component %s, tried to set it because it matched %s" % ( name, component_path, self.__path )   )
-
-
-   def __findComponents(self, ca):
-       if ca is not PropSetterProxy.__scannedCA:
-           PropSetterProxy.__scannedCA = ca
-           PropSetterProxy.__compPaths = {}
-           def __add(path, comp):
-               if comp.getName() == "":
-                   return
-               PropSetterProxy.__compPaths[ path ] = comp
-
-
-           for svc in ca._services:
-               PropSetterProxy.__compPaths['SvcMgr/'+svc.getFullName()] = svc
-           for t in ca._publicTools:
-               PropSetterProxy.__compPaths['ToolSvc/'+t.getFullName()] = t
-           
-           def __nestAlg(startpath, comp): # it actually dives inside the algorithms and (sub) tools               
-               if comp.getName() == "":
-                   return
-               for name, value in comp.getProperties().iteritems():
-                   if isinstance( value, ConfigurableAlgTool ) or isinstance( value, PrivateToolHandle ):
-                       __add( startpath+"/"+name+"/"+value.getFullName(), value )
-                       __nestAlg( startpath+"/"+name+"/"+value.getName(), value )
-                   if isinstance( value, PrivateToolHandleArray):
-                       for toolIndex,t in enumerate(value):
-                           __add( startpath+"/"+name+"/"+t.getFullName(), t )
-                           __nestAlg( startpath+"/"+name+"/"+t.getName(), value[toolIndex] )
-                           
-               
-           def __nestSeq( startpath, seq ):
-               for c in seq.getChildren():
-                   if isSequence(c):
-                       __nestSeq( startpath+"/"+c.getName(), c )                       
-                   else: # the algorithm or tool
-                       __add( startpath+"/"+c.getFullName(),  c )
-                       __nestAlg( startpath+"/"+c.getFullName(), c )
-
-           __nestSeq("", ca._sequence)
-            
-            
-def foreach_component(componentAccumulator, path):
-   """ Utility to set properties of components using wildcards
-   
-   Example:
-   forcomps(ca, "*/HLTTop/*/*Hypo*").OutputLevel=VERBOSE
-      
-   The compoments name & locations in the CF tree are translated into the unix like path. 
-   Components of matching path are taken under consideration in setting the property.
-   If the property is set succesfully an INFO message is printed. Else, a warning is printed.      
-   
-   The convention for path of nested components is as follows:
-   Sequencer - only the name is used in the path
-   Algorithm - full name - type/instance_name (aka full name) is used
-   PrivateTools - the name of the property + the type/instance_name are added
-   PublicTools - are located under ToolSvc/ and type/instance_name is used
-   Services - located under SvcMgr/ and type/instance_name is used
-   """
-   componentAccumulator._isMergable=False
-   return PropSetterProxy(componentAccumulator, path)
-
-
-
diff --git a/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py b/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py
index 10bff26b51ca..b97d2d485fe2 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulatorTest.py
@@ -2,7 +2,7 @@
 
 # self test of ComponentAccumulator
 
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator, foreach_component
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
 from AthenaCommon.CFElements import findSubSequence,findAlgorithm
 from AthenaCommon.Configurable import Configurable, ConfigurablePyAlgorithm # guinea pig algorithms
@@ -106,9 +106,9 @@ class TestComponentAccumulator( unittest.TestCase ):
         logging.getLogger('foreach_component').setLevel(DEBUG)
         algo3 = self.acc.getEventAlgo("Algo3")        
         algo3.OutputLevel = INFO
-        foreach_component(self.acc, "*/Algo3").OutputLevel = DEBUG # restet to debug level
+        self.acc.foreach_component("*/Algo3").OutputLevel = DEBUG # restet to debug level
         self.assertEqual( algo3.OutputLevel, DEBUG, "wrong OutputLevel value for Algo3")
-        foreach_component(self.acc, "*sub2*/*").OutputLevel = INFO 
+        self.acc.foreach_component("*sub2*/*").OutputLevel = INFO 
         self.assertEqual(self.acc.getEventAlgo("NestedAlgo1").OutputLevel, INFO, "wrong OutputLevel value for NestedAlgo1")
         self.assertEqual(self.acc.getEventAlgo("NestedAlgo2").OutputLevel, INFO, "wrong OutputLevel value for NestedAlgo1")
 
diff --git a/Control/AthenaConfiguration/python/PropSetterProxy.py b/Control/AthenaConfiguration/python/PropSetterProxy.py
new file mode 100644
index 000000000000..e55e6e32fa2b
--- /dev/null
+++ b/Control/AthenaConfiguration/python/PropSetterProxy.py
@@ -0,0 +1,79 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.Logging import logging
+from AthenaCommon.CFElements import isSequence
+from AthenaCommon.Configurable import ConfigurableAlgTool
+from GaudiKernel.GaudiHandles import PrivateToolHandle, PrivateToolHandleArray
+class PropSetterProxy(object):
+   __compPaths = {}
+   __scannedCA = None
+
+   def __init__(self, ca, path):      
+      self.__path = path      
+      self.__findComponents( ca )
+      
+   def __setattr__(self, name, value):
+       if name.startswith("_PropSetterProxy"):
+           return super(PropSetterProxy, self).__setattr__(name, value)
+
+       msg = logging.getLogger('foreach_component')
+       if name != "OutputLevel":
+           msg.warning( "Only OutputLevel is allowed to be changed with the foreach_component at the moment"  )
+           return
+
+       
+       import fnmatch
+       for component_path, component in PropSetterProxy.__compPaths.iteritems():
+           if fnmatch.fnmatch( component_path, self.__path ):
+               if name in component.getProperties():
+                   try:
+                       setattr( component, name, value )
+                       msg.info( "Set property: %s to value %s of component %s because it matched %s " % ( name, str(value), component_path, self.__path )   )
+                   except Exception, ex:
+                       msg.warning( "Failed to set property: %s to value %s of component %s because it matched %s, reason: %s" % ( name, str(value), component_path, self.__path, str(ex) )   )
+                       pass
+               else:
+                   msg.warning( "No such a property: %s in component %s, tried to set it because it matched %s" % ( name, component_path, self.__path )   )
+
+
+   def __findComponents(self, ca):
+       if ca is not PropSetterProxy.__scannedCA:
+           PropSetterProxy.__scannedCA = ca
+           PropSetterProxy.__compPaths = {}
+           def __add(path, comp):
+               if comp.getName() == "":
+                   return
+               PropSetterProxy.__compPaths[ path ] = comp
+
+
+           for svc in ca._services:
+               PropSetterProxy.__compPaths['SvcMgr/'+svc.getFullName()] = svc
+           for t in ca._publicTools:
+               PropSetterProxy.__compPaths['ToolSvc/'+t.getFullName()] = t
+           
+           def __nestAlg(startpath, comp): # it actually dives inside the algorithms and (sub) tools               
+               if comp.getName() == "":
+                   return
+               for name, value in comp.getProperties().iteritems():
+                   if isinstance( value, ConfigurableAlgTool ) or isinstance( value, PrivateToolHandle ):
+                       __add( startpath+"/"+name+"/"+value.getFullName(), value )
+                       __nestAlg( startpath+"/"+name+"/"+value.getName(), value )
+                   if isinstance( value, PrivateToolHandleArray):
+                       for toolIndex,t in enumerate(value):
+                           __add( startpath+"/"+name+"/"+t.getFullName(), t )
+                           __nestAlg( startpath+"/"+name+"/"+t.getName(), value[toolIndex] )
+                           
+               
+           def __nestSeq( startpath, seq ):
+               for c in seq.getChildren():
+                   if isSequence(c):
+                       __nestSeq( startpath+"/"+c.getName(), c )                       
+                   else: # the algorithm or tool
+                       __add( startpath+"/"+c.getFullName(),  c )
+                       __nestAlg( startpath+"/"+c.getFullName(), c )
+
+           __nestSeq("", ca._sequence)
+            
+            
+
+
+
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
index 9dee4be183bc..5f29484cadec 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py
@@ -71,24 +71,16 @@ if mcc:
     top += mcc
 
 
-from AthenaConfiguration.ComponentAccumulator import foreach_component
 from AthenaCommon.Logging import logging
 logging.getLogger('forcomps').setLevel(DEBUG)
-foreach_component(acc, "*/L1Decoder").OutputLevel = DEBUG
-foreach_component(acc, "*/L1Decoder/*Tool").OutputLevel = DEBUG # tools
-foreach_component(acc, "*HLTTop/*Hypo*").OutputLevel = DEBUG # hypo algs
-foreach_component(acc, "*HLTTop/*Hypo*/*Tool*").OutputLevel = DEBUG # hypo tools
-foreach_component(acc, "*HLTTop/RoRSeqFilter/*").OutputLevel = DEBUG # filters
-foreach_component(acc, "*HLTTop/*Input*").OutputLevel = DEBUG # input makers
-foreach_component(acc, "*HLTTop/*GenericMonitoringTool*").OutputLevel = WARNING # silcence mon tools (addressing by type)
-
-
-# # from TrigUpgradeTest.TestUtils import applyMenu
-# # applyMenu( acc.getEventAlgo( "L1Decoder" ) )
-# #acc.getEventAlgo( "L1Decoder" ).OutputLevel=DEBUG
-# #acc.getEventAlgo( "L2ElectronCaloHypo" ).OutputLevel=DEBUG
-# #acc.getEventAlgo( "FastEMCaloAlgo" ).OutputLevel=DEBUG
-# #acc.getEventAlgo( "Filter_for_L2PhotonCaloHypo" ).OutputLevel=DEBUG
+acc.foreach_component("*/L1Decoder").OutputLevel = DEBUG
+acc.foreach_component("*/L1Decoder/*Tool").OutputLevel = DEBUG # tools
+acc.foreach_component("*HLTTop/*Hypo*").OutputLevel = DEBUG # hypo algs
+acc.foreach_component("*HLTTop/*Hypo*/*Tool*").OutputLevel = DEBUG # hypo tools
+acc.foreach_component("*HLTTop/RoRSeqFilter/*").OutputLevel = DEBUG # filters
+acc.foreach_component("*HLTTop/*Input*").OutputLevel = DEBUG # input makers
+acc.foreach_component("*HLTTop/*GenericMonitoringTool*").OutputLevel = WARNING # silcence mon tools (addressing by type)
+
 
 acc.printConfig()
 
-- 
GitLab


From 6136df6a9338bf217096b5392c3f4b9f1406919d Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Tue, 12 Mar 2019 17:35:30 +0000
Subject: [PATCH 021/163] Using tryFetch method to query the container cache in
 order to allow a map of undecoded collections to be created

---
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.h     | 42 +++++++++++--------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
index 66dd7f1bdcb8..f882e79c570c 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
@@ -513,18 +513,23 @@ namespace Muon
       for( ; it!=collections.end(); ++it)
       {
 
-        // Using RpcPadCache
-        RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( (*it) );
-
-        if(lock.alreadyPresent() ){
+        // Normally, we would get a write handle and put a lock, but we do not process the decoding in this loop
+        // Therefore, we just query the cache via the container and process the hashes which have not been decoded yet
+        // Note that this means different threads may decode the same data if processing simultaneously
+        // However, only one will be written to the cache using the lock
+        
+        bool alreadyPresent = rdoIdc.tryFetch( *it );
+        
+        if(alreadyPresent){
           ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
         }
         else{
-          ATH_MSG_DEBUG(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+          ATH_MSG_DEBUG ( "Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
 
 		      // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
           RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
           mapOfCollections[coll->identify()]=coll;
+          
 	      }// endif collection not found in the container 
 	    }//end loop over vector of hash id 
 
@@ -547,23 +552,26 @@ namespace Muon
 	    }
 
       // All un-decoded collections were decoded successfully, so they are passed back to the IDC
-	    //for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
       for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
 	    {
-	      // Get the write handle again, but note that lock.alreadyPresent() will be true BUT we have already checked 
-        // for this hash that it was not present before processing, and we still need to attach to the container
+	      // Get the WriteHandle for this hash but we need to then check if it has already been decoded and
+        // added to the event cache for this hash in a different view
         RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( ((*it).second)->identifyHash() );
         
-        // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
-        StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>((*it).second)));
-
-		    if(status_lock != StatusCode::SUCCESS)
-		    {
-		      ATH_MSG_ERROR("Failed to add RPC PAD collection to container" );
-		      //report the error condition
-		    }
+        if(lock.alreadyPresent()){
+          ATH_MSG_DEBUG("RpcPad collection with hash " << (int)((*it).second)->identifyHash() << " was already decoded in a parallel view");
+        }
         else{
-          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
+          // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
+          StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>((*it).second) ) );
+
+          if(status_lock != StatusCode::SUCCESS)
+          {
+            ATH_MSG_ERROR("Failed to add RPC PAD collection to container with hash " << (int)((*it).second)->identifyHash() );
+          }
+          else{
+            ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
+          }
         }
       }
       return cnv_sc;
-- 
GitLab


From 573fe6bfddf50d4550869ecfa28f008d0b88db15 Mon Sep 17 00:00:00 2001
From: Walter Lampl <Walter.Lampl@cern.ch>
Date: Wed, 13 Mar 2019 13:07:54 +0100
Subject: [PATCH 022/163] fix unit tests failing to to private tool bucket

---
 .../CaloTools/python/CaloNoiseToolConfig.py   |    2 +-
 .../python/LArBadChannelConfig.py             |    2 +-
 .../MuonConfig/share/MuonDataDecodeTest.ref   | 1556 ++++++++++++++++-
 .../share/MuonDataDecodeTest_Cache.ref        | 1516 +++++++++++++++-
 .../python/TrigCaloDataAccessConfig.py        |    4 +-
 5 files changed, 3074 insertions(+), 6 deletions(-)

diff --git a/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py b/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
index cdba6579e1aa..d8779b5f10e2 100644
--- a/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
+++ b/Calorimeter/CaloTools/python/CaloNoiseToolConfig.py
@@ -109,7 +109,7 @@ if __name__ == "__main__":
     ConfigFlags.lock()
 
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-    acc, caloNoiseToolDB = CaloNoiseToolCfg(ConfigFlags)
+    acc = CaloNoiseToolCfg(ConfigFlags)
 
     f=open('test.pkl','w')
     acc.store(f)
diff --git a/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py b/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
index fd30c40ed52d..944b9fb3335c 100644
--- a/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
+++ b/LArCalorimeter/LArBadChannelTool/python/LArBadChannelConfig.py
@@ -71,7 +71,7 @@ if __name__=="__main__":
     cfg.merge(LArBadChannelCfg(ConfigFlags))
     cfg.merge(LArBadFebCfg(ConfigFlags))
     acc=LArBadChannelMaskerCfg(ConfigFlags,["allDead",])
-    masker=acc.popPrivateTool()
+    masker=acc.popPrivateTools()
     cfg.merge(acc)
     f=open("LArBCCondAlgos.pkl","w")
     cfg.store(f)
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index 80ddcf2e960b..5a6ded6b6aab 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -1,10 +1,48 @@
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : [function]
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:Athena            INFO About to setup Rpc Raw data decoding
 Py:ComponentAccumulator   DEBUG Adding component EventSelectorByteStream/EventSelector to the job
@@ -34,13 +72,120 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
 dynamically loading the flag Detector
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : [function]
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : [function]
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : [function]
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : [function]
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : [function]
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -49,12 +194,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -73,6 +221,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -97,25 +246,37 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
@@ -126,12 +287,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -151,6 +315,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -172,17 +337,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -191,12 +377,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -216,8 +405,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -258,6 +449,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -272,10 +469,172 @@ Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersiste
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 dynamically loading the flag Muon
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
@@ -296,12 +655,38 @@ Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libMagFieldServices.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloRec.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCabling.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libegammaCaloTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArBadChannelTool.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCellRec.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigT2CaloCommon.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
@@ -317,9 +702,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -331,21 +730,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
@@ -356,12 +776,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -384,16 +807,32 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -402,12 +841,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -426,6 +868,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -450,14 +893,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component RPCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonRPC_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.RPCCablingDbTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -466,12 +933,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -491,6 +961,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -512,14 +983,36 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component LVL1TGC::TGCRecRoiSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TGCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -528,12 +1021,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -553,8 +1049,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -593,6 +1091,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -632,9 +1136,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -646,14 +1164,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingAlg
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AtlasFieldSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MuonCalib::MdtCalibDbCoolStrTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -662,12 +1208,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -714,6 +1263,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -726,6 +1281,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -738,6 +1299,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -750,6 +1317,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -762,6 +1335,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -774,6 +1353,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -786,11 +1371,18 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -799,19 +1391,48 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CSCcablingSvc
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
 Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
 |-Atomic                                  = False
 |-AuditAlgorithms                         = False
 |-AuditBeginRun                           = False
@@ -823,21 +1444,29 @@ Py:Athena            INFO Print Config
 |-AuditRestart                            = False
 |-AuditStart                              = False
 |-AuditStop                               = False
+|-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f8505b81f90 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
+|-EvtStore                   @0x7f8505b81f10 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f85041a0560 = []  (default: [])
+|-ExtraOutputs               @0x7f85041a05f0 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
+|-Members                    @0x7f85041a0128 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f85041a0440 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                              = False
+|-Sequential                 @0x7f8507d45b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
+|-Timeline                                = True
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
 | |-AuditBeginRun                           = False
@@ -849,17 +1478,26 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85047a4a50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85047a49d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a06c8 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0680 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0638 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8504c62908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f85047a4ad0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -868,6 +1506,11 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7f8504c62a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f8504713890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f85047138d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f850478e758 = []  (default: [])
+| | |-ExtraOutputs      @0x7f850478e4d0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -881,6 +1524,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f8504713990 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f85047139d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f850478e5f0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f850478e5a8 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -899,15 +1546,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85046f5a10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85046f5990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0908 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a09e0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0950 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f850592f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -916,7 +1571,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7f850592faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f850473aed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f850473af10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f8504744710 = []  (default: [])
+| | |-ExtraOutputs      @0x7f8504744560 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -928,6 +1588,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f850473afd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f850467f050 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85047443b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8504744518 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -946,15 +1610,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85046f7c50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85046f7bd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0a28 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0ab8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0998 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f85049a3a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -964,6 +1636,11 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f850592fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f85042acfd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f8504234050 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f85042a09e0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f85042a0878 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -976,6 +1653,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8504234110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8504234150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85042a0908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85042a08c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -994,15 +1675,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f850478ab10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f850478aa90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0b00 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0b48 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0488 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f85049a3c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1012,7 +1701,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f85046cf050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f850426de90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f850426ded0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f85041f19e0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f85041f1c68 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1024,6 +1718,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f850426df90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f850426dfd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85041f1b48 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85041f1b00 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1042,19 +1740,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8505840e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f8504227950 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85042278d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0710 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0c20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0c68 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f85042279d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
 | | |-AuditFinalize                                   = False
 | | |-AuditInitialize                                 = False
@@ -1064,11 +1772,16 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f8504195b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f8504195b90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f8504202fc8 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f85042027a0 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f850461a590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1086,6 +1799,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8504195c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8504195c50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f8504202680 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85042028c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1102,20 +1819,30 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f85041a6050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f8504180850 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041807d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0cb0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0cf8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f85041808d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
 | | |-AuditFinalize                                        = False
 | | |-AuditInitialize                                      = False
@@ -1125,6 +1852,10 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f8504195c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f8504195e50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f85041a5b00 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f85041a5ab8 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1133,7 +1864,9 @@ Py:Athena            INFO Print Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f85041a5560 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f85041a5b90 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1149,19 +1882,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8507dee890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f8504215810 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8504215790 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0d88 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0e18 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0dd0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8504215890 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
 | | |-AuditFinalize                        = False
 | | |-AuditInitialize                      = False
@@ -1172,9 +1915,13 @@ Py:Athena            INFO Print Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
+| | |-DetStore                @0x7f8504195d50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f8504195fd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f85041a4ef0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f85041a4e18 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1201,19 +1948,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f8504886380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f85041fbcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041fbbd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0b90 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0e60 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f85041fbd50 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1223,7 +1980,13 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f8507df1860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f85041a2de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
+| | |-DetStore          @0x7f85041af090 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f85041af190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f85041b9290 = []  (default: [])
+| | |-ExtraOutputs      @0x7f85041b9710 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1236,6 +1999,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f85041af1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f85041af210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f85041b5fc8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f85041b58c0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -1262,6 +2029,11 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f85041af110 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f85041af0d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f85041af150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85041b92d8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85041b90e0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -1278,30 +2050,719 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85041da650 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041da5d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f8504121050 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0f80 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0fc8 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f850410bf50 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
+/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f8505b81f90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7f8505b81f10 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f85041a0560 = []  (default: [])
+|-ExtraOutputs               @0x7f85041a05f0 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7f8504749320 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f85041a0440 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7f8507d45b00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85047a4a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85047a49d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a06c8 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0680 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0638 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8504c62908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f85047a4ad0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f8504c62a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f8504713890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f85047138d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f850478e758 = []  (default: [])
+| | |-ExtraOutputs      @0x7f850478e4d0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f8504713990 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f85047139d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f850478e5f0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f850478e5a8 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85046f5a10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85046f5990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0908 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a09e0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0950 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f850592f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f850592faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f850473aed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f850473af10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f8504744710 = []  (default: [])
+| | |-ExtraOutputs      @0x7f8504744560 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f850473afd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f850467f050 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85047443b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8504744518 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85046f7c50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85046f7bd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0a28 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0ab8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0998 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f85049a3a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f850592fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f85042acfd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f8504234050 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f85042a09e0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f85042a0878 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel                       = 0
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8504234110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8504234150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85042a0908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85042a08c0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f850478ab10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f850478aa90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0b00 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0b48 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0488 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f85049a3c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f85046cf050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f850426de90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f850426ded0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f85041f19e0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f85041f1c68 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel                       = 0
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f850426df90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f850426dfd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85041f1b48 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85041f1b00 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8505840e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f8504227950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85042278d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0710 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0c20 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0c68 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f85042279d0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f8504195b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f8504195b90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f8504202fc8 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f85042027a0 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f850461a590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8504195c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8504195c50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f8504202680 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85042028c0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f85041a6050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f8504180850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041807d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0cb0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0cf8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f85041808d0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f8504195c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f8504195e50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f85041a5b00 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f85041a5ab8 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f85041a5560 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f85041a5b90 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8507dee890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f8504215810 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8504215790 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0d88 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0e18 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0dd0 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8504215890 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7f8504195d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f8504195fd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f85041a4ef0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f85041a4e18 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f8504886380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f85041fbcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041fbbd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f85041a0ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0b90 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0e60 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f85041fbd50 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f8507df1860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f85041a2de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7f85041af090 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f85041af190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f85041b9290 = []  (default: [])
+| | |-ExtraOutputs      @0x7f85041b9710 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f85041af1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f85041af210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f85041b5fc8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f85041b58c0 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f85041af110 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f85041af0d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f85041af150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f85041b92d8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f85041b90e0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f85041da650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f85041da5d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f8504121050 = []  (default: [])
+| |-ExtraOutputs               @0x7f85041a0f80 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f85041a0fc8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f850410bf50 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
+Wed Mar 13 10:50:38 CET 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on pcaz004 on Wed Mar 13 10:50:42 2019
+====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3440 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
 ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
 ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
 ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
@@ -1316,6 +2777,10 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
@@ -1324,13 +2789,26 @@ PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
 IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
 IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
 IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
 IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
 IOVDbSvc             INFO Initialised with 8 connections and 19 folders
 IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3314 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4046 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3110 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -1411,6 +2889,10 @@ GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
 GeoModelSvc.Muo...   INFO Properties have been set as follows: 
 GeoModelSvc.Muo...   INFO     LayoutName                     R
 GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
@@ -1525,6 +3007,7 @@ AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary!
 MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
 MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
 MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
 RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
 MuGM:RDBReadAtlas    INFO After getQuery XtomoData
 In DblQ00Xtomo(data)
@@ -1554,6 +3037,7 @@ MuGM:ProcCutouts     INFO  Processing Cutouts DONE
 MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
 MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
 MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
 MuGM:MuonFactory     INFO  TreeTop added to the Manager
 MuGM:MuonFactory     INFO  Muon Layout R.08.01
 MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
@@ -1577,9 +3061,13 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.42S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
@@ -1589,12 +3077,17 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
 RpcRawDataProvider   INFO RpcRawDataProvider::initialize
 RpcRawDataProvider   INFO  'DoSeededDecoding':False
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
 ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
 MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
 MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
 MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
 MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
@@ -1609,25 +3102,32 @@ RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
 TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 878 CLIDRegistry entries for module ALL
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
 TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x120ae200]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
 MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
 MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
 MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
 MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
 CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
 CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
 CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
 RpcRdoToRpcPrep...   INFO properties are 
 RpcRdoToRpcPrep...   INFO processingData                     0
 RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
@@ -1642,21 +3142,35 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
 MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
+ClassIDSvc           INFO  getRegistryEntries: read 1126 CLIDRegistry entries for module ALL
 ToolSvc.Luminos...   INFO LuminosityTool::initialize() registering 
 ToolSvc.Luminos...   INFO LumiFolderName is empty, skipping
 ToolSvc.Luminos...   INFO OnlineLumiCalibrationTool.empty() is TRUE, skipping...
@@ -1665,6 +3179,7 @@ ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
 EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
 EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
@@ -1746,6 +3261,7 @@ phi high-pt    mu11  mu15   mu15
 
 
 RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
 RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
 RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
 RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
@@ -1783,13 +3299,19 @@ AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value]
 AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
 AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
 AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
 IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524665, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524665, run #327265 2 events processed so far  <<<===
@@ -1831,10 +3353,40 @@ AthenaEventLoopMgr   INFO   ===>>>  start processing event #186580451, run #3272
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
 CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.27 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.76 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     1.37 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.41 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.94 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.55 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.63 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     1.77 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.97 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.94 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.92 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.26 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.22 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.12 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.22 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.77 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.58 ))s
+IOVDbSvc             INFO  bytes in ((     11.71 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.78 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.90 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.03 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.76 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.97 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.27 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -1858,6 +3410,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 4.92  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
index 5c116b9ab32b..0c3da702cdbd 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
@@ -1,10 +1,48 @@
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : [function]
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:Athena            INFO About to setup Rpc Raw data decoding
 Py:ComponentAccumulator   DEBUG Adding component EventSelectorByteStream/EventSelector to the job
@@ -34,13 +72,120 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
 dynamically loading the flag Detector
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : [function]
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : [function]
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : [function]
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : [function]
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : [function]
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -324,10 +469,172 @@ Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersiste
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 dynamically loading the flag Muon
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
@@ -348,12 +655,38 @@ Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libMagFieldServices.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloRec.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCabling.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libegammaCaloTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArBadChannelTool.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCellRec.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigT2CaloCommon.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
@@ -579,6 +912,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
@@ -1076,6 +1410,8 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
@@ -1093,8 +1429,13 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Mu
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
 Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
 |-Atomic                                  = False
 |-AuditAlgorithms                         = False
 |-AuditBeginRun                           = False
@@ -1106,21 +1447,29 @@ Py:Athena            INFO Print Config
 |-AuditRestart                            = False
 |-AuditStart                              = False
 |-AuditStop                               = False
+|-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f16dec04f50 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
+|-EvtStore                   @0x7f16dec04ed0 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f16dd1998c0 = []  (default: [])
+|-ExtraOutputs               @0x7f16dd199950 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
+|-Members                    @0x7f16dd199560 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'MuonCacheCreator/MuonCacheCreator', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f16dd1997a0 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                              = False
+|-Sequential                 @0x7f16e0dc8b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
+|-Timeline                                = True
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
 | |-AuditBeginRun                           = False
@@ -1132,17 +1481,26 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd827a10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd827990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1997e8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199680 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16ddce5908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f16dd827a90 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1151,6 +1509,11 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7f16ddce5a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f16dd796850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd796890 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd811758 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd8114d0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -1164,6 +1527,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f16dd796950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f16dd796990 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f16dd8115f0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f16dd8115a8 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1182,15 +1549,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd7789d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd778950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199cb0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199d88 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199cf8 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16de9b29b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1199,7 +1574,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7f16de9b2aa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f16dd7bde90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd7bded0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd7c7710 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd7c7560 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1211,6 +1591,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd7bdf90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd7bdfd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd7c73b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd7c7518 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1229,15 +1613,26 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7f16ddb72780 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f16dd78a7d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DisableViewWarning                      = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd78a750 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd2f2560 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd2f2518 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7f16ddb72480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd2f22d8 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7f16ddb724b0 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f16ddb724e0 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
 | \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
 |=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
@@ -1250,15 +1645,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd77ac10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd77ab90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199998 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199dd0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199e18 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16dda26a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1267,7 +1670,14 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7f16ddb72480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f16de9b2d70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f16dd32ffd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f16dd2b9050 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f16dd323a28 = []  (default: [])
+| | |-ExtraOutputs         @0x7f16dd323a70 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x123c1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
 | | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
 | | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
@@ -1278,6 +1688,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd2b9110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd2b9150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd323908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd3238c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1296,15 +1710,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd80ead0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd80ea50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199e60 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199ab8 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16dda26c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1313,8 +1735,15 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7f16ddb72780 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f16dd753050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f16dd2f1e90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f16dd2f1ed0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f16dd2f2098 = []  (default: [])
+| | |-ExtraOutputs         @0x7f16dd2f2200 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x123c1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
 | | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
 | | | |-AuditFinalize                  = False
@@ -1324,6 +1753,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd2f1f90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd2f1fd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd273cf8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd273cb0 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1342,19 +1775,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16de8c3e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f16dd2ab8d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd2ab850 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a60e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199d40 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199f38 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd2ab950 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
 | | |-AuditFinalize                                   = False
 | | |-AuditInitialize                                 = False
@@ -1364,11 +1807,16 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f16dd21aa90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f16dd21ab10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f16dd2860e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f16dd286e18 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f16dd69d590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1386,6 +1834,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd21ab90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd21abd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd27d098 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd27d050 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1402,20 +1854,30 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16dd22b050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f16dd2057d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd205750 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6098 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199ea8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a6128 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f16dd205850 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
 | | |-AuditFinalize                                        = False
 | | |-AuditInitialize                                      = False
@@ -1425,6 +1887,10 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f16dd21ac10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f16dd21add0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f16dd229170 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f16dd229128 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1433,7 +1899,9 @@ Py:Athena            INFO Print Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f16dd229050 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f16dd229200 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1449,19 +1917,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16e0e71890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f16dd29a790 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd29a710 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6290 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a6050 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a6200 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd29a810 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
 | | |-AuditFinalize                        = False
 | | |-AuditInitialize                      = False
@@ -1472,9 +1950,13 @@ Py:Athena            INFO Print Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
+| | |-DetStore                @0x7f16dd21ae10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f16dd21af90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f16dd22a2d8 = []  (default: [])
+| | |-ExtraOutputs            @0x7f16dd22a128 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1501,19 +1983,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f16dd909380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f16dd27fd10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd27fc10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6368 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a61b8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a62d8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd27fd90 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1523,7 +2015,13 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f16e0e74860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f16dd223de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
+| | |-DetStore          @0x7f16dd21ad50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd237090 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd23b098 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd23b488 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1536,6 +2034,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f16dd2370d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f16dd237290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f16dd236cf8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f16dd236878 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -1562,6 +2064,11 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f16dd237250 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f16dd237110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd237050 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd2367a0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd236f38 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -1578,30 +2085,751 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd25e610 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd25e590 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6320 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a6170 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a63b0 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f16dd1a0f10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
+/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f16dec04f50 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7f16dec04ed0 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f16dd1998c0 = []  (default: [])
+|-ExtraOutputs               @0x7f16dd199950 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7f16dd1994d0 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'MuonCacheCreator/MuonCacheCreator', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f16dd1997a0 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7f16e0dc8b00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd827a10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd827990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1997e8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199680 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16ddce5908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f16dd827a90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f16ddce5a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f16dd796850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd796890 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd811758 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd8114d0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f16dd796950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f16dd796990 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f16dd8115f0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f16dd8115a8 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd7789d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd778950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199cb0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199d88 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199cf8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16de9b29b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f16de9b2aa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f16dd7bde90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd7bded0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd7c7710 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd7c7560 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd7bdf90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd7bdfd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd7c73b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd7c7518 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7f16ddb72780 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f16dd78a7d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DisableViewWarning                      = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd78a750 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd2f2560 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd2f2518 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7f16ddb72480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd2f22d8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7f16ddb724b0 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f16ddb724e0 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
+| \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd77ac10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd77ab90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199998 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199dd0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199e18 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16dda26a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7f16ddb72480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f16de9b2d70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f16dd32ffd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f16dd2b9050 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f16dd323a28 = []  (default: [])
+| | |-ExtraOutputs         @0x7f16dd323a70 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x123c1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd2b9110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd2b9150 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd323908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd3238c0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd80ead0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd80ea50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd199ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199e60 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199ab8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f16dda26c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7f16ddb72780 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f16dd753050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f16dd2f1e90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f16dd2f1ed0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f16dd2f2098 = []  (default: [])
+| | |-ExtraOutputs         @0x7f16dd2f2200 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x123c1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd2f1f90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd2f1fd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd273cf8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd273cb0 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16de8c3e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f16dd2ab8d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd2ab850 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a60e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199d40 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd199f38 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd2ab950 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f16dd21aa90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f16dd21ab10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f16dd2860e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f16dd286e18 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f16dd69d590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f16dd21ab90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd21abd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd27d098 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd27d050 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16dd22b050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f16dd2057d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd205750 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6098 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd199ea8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a6128 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f16dd205850 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f16dd21ac10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f16dd21add0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f16dd229170 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f16dd229128 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f16dd229050 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f16dd229200 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f16e0e71890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f16dd29a790 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd29a710 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6290 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a6050 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a6200 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd29a810 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7f16dd21ae10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f16dd21af90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f16dd22a2d8 = []  (default: [])
+| | |-ExtraOutputs            @0x7f16dd22a128 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f16dd909380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f16dd27fd10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd27fc10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6368 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a61b8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a62d8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f16e0dc8b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f16dd27fd90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f16e0e74860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f16dd223de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7f16dd21ad50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f16dd237090 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f16dd23b098 = []  (default: [])
+| | |-ExtraOutputs      @0x7f16dd23b488 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f16dd2370d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f16dd237290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f16dd236cf8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f16dd236878 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f16dd237250 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f16dd237110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f16dd237050 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f16dd2367a0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f16dd236f38 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f16dd25e610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f16dd25e590 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f16dd1a6320 = []  (default: [])
+| |-ExtraOutputs               @0x7f16dd1a6170 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f16dd1a63b0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f16dd1a0f10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
+Wed Mar 13 10:51:05 CET 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode_Cache.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on pcaz004 on Wed Mar 13 10:51:09 2019
+====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3440 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
 ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
 ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
 ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
@@ -1616,6 +2844,10 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
@@ -1624,13 +2856,26 @@ PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
 IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
 IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
 IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
 IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
 IOVDbSvc             INFO Initialised with 8 connections and 19 folders
 IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3314 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4046 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3110 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -1711,6 +2956,10 @@ GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
 GeoModelSvc.Muo...   INFO Properties have been set as follows: 
 GeoModelSvc.Muo...   INFO     LayoutName                     R
 GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
@@ -1825,6 +3074,7 @@ AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary!
 MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
 MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
 MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
 RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
 MuGM:RDBReadAtlas    INFO After getQuery XtomoData
 In DblQ00Xtomo(data)
@@ -1854,6 +3104,7 @@ MuGM:ProcCutouts     INFO  Processing Cutouts DONE
 MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
 MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
 MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
 MuGM:MuonFactory     INFO  TreeTop added to the Manager
 MuGM:MuonFactory     INFO  Muon Layout R.08.01
 MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
@@ -1877,9 +3128,13 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.36S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
@@ -1889,12 +3144,17 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
 RpcRawDataProvider   INFO RpcRawDataProvider::initialize
 RpcRawDataProvider   INFO  'DoSeededDecoding':False
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
 ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
 MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
 MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
 MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
 MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
@@ -1909,19 +3169,25 @@ RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
 TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 878 CLIDRegistry entries for module ALL
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
 TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x108dcc00]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 MdtRawDataProvi...VERBOSE Starting init
 MdtRawDataProvi...VERBOSE Getting m_robDataProvider
 MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 MdtRawDataProvi...VERBOSE Getting MuonDetectorManager
 MdtRawDataProvi...VERBOSE Getting m_decoder
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
 MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
 MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
@@ -1929,15 +3195,20 @@ MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is
 MdtRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
 MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
 MdtRawDataProvi...  DEBUG Adding private ToolHandle tool MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder (MdtROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 CscRawDataProvi...VERBOSE ServiceLocatorHelper::service: found service JobOptionsSvc
 CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 CscRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 CscRawDataProvi...  DEBUG  Found the CscIdHelper. 
 CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
 CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
 CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
 CscRawDataProvi...  DEBUG Adding private ToolHandle tool CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder (Muon::CscROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
 RpcRdoToRpcPrep...   INFO properties are 
 RpcRdoToRpcPrep...   INFO processingData                     0
 RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
@@ -1952,21 +3223,35 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
 MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1aaacd00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
+ClassIDSvc           INFO  getRegistryEntries: read 1126 CLIDRegistry entries for module ALL
 ToolSvc.Luminos...   INFO LuminosityTool::initialize() registering 
 ToolSvc.Luminos...   INFO LumiFolderName is empty, skipping
 ToolSvc.Luminos...   INFO OnlineLumiCalibrationTool.empty() is TRUE, skipping...
@@ -1975,6 +3260,7 @@ ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
 EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
 EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
@@ -2056,6 +3342,7 @@ phi high-pt    mu11  mu15   mu15
 
 
 RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
 RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
 RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
 RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
@@ -2093,13 +3380,19 @@ AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value]
 AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
 AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
 AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
 IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG fillCollection: starting
@@ -2213,6 +3506,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6048000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 1
@@ -2220,6 +3514,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6050000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
@@ -2229,6 +3524,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6248000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 3
@@ -2236,6 +3532,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6250000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -2245,6 +3542,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6448000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 15
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 5
@@ -2252,6 +3550,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6450000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -2387,12 +3686,14 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6049000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 1
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6051000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 10
@@ -2403,6 +3704,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6249000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 3
@@ -2410,6 +3712,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6251000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
@@ -2418,6 +3721,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6449000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 2 chan: 22
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
@@ -2433,6 +3737,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6451000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -2540,18 +3845,21 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x604a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 1
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6052000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 2
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x624a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 0 chan: 20
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
@@ -2563,6 +3871,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6252000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 7 chan: 12
@@ -2574,6 +3883,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x644a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
@@ -2595,6 +3905,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x80
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x80 24 8 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 8
@@ -2604,28 +3915,55 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 112
+CscRawDataProvi...  DEBUG RPU Header word 0x5000070
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 112
 CscRawDataProvi...  DEBUG SCA Address = 724315438
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20202
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x600006c
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 108
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 12
+CscRawDataProvi...  DEBUG cluster location word 0x10a2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31725  6  51 :: measphi0 L2 strId 46 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.2.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10a35
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 54
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31733  6  51 :: measphi0 L2 strId 54 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.0.54]
+CscRawDataProvi...  DEBUG cluster location word 0x10c2c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 45
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31916  7  51 :: measphi0 L3 strId 45 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.0.45]
+CscRawDataProvi...  DEBUG cluster location word 0x10c37
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 56
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31927  7  51 :: measphi0 L3 strId 56 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.3.0.56]
+CscRawDataProvi...  DEBUG cluster location word 0x10e2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32109  8  51 :: measphi0 L4 strId 46 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10e39
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 58
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32121  8  51 :: measphi0 L4 strId 58 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.58]
+CscRawDataProvi...  DEBUG cluster location word 0x10903
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55491  9  51 :: measphi1 L1 strId 4 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.1.1.4]
+CscRawDataProvi...  DEBUG cluster location word 0x10b08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55544  9  51 :: measphi1 L2 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x10b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55566  9  51 :: measphi1 L2 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10d07
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 8
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55591  9  51 :: measphi1 L3 strId 8 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.1.8]
+CscRawDataProvi...  DEBUG cluster location word 0x10d1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55614  9  51 :: measphi1 L3 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.3.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10f08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55640  9  51 :: measphi1 L4 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.1.9]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 12 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2634,6 +3972,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x81
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x81 16 0 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 0
@@ -2643,38 +3982,52 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 122
+CscRawDataProvi...  DEBUG RPU Header word 0xd00007a
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 122
 CscRawDataProvi...  DEBUG SCA Address = 2358087311
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000002
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x7000076
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 7
 CscRawDataProvi...  DEBUG Cluster Data Words = 118
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
 CscRawDataProvi...  DEBUG cluster location word 0x810
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 17
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 784  0  50 :: measphi0 L1 strId 17 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.1.0.17]
 CscRawDataProvi...  DEBUG cluster location word 0x868
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 105
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 872  0  50 :: measphi0 L1 strId 105 nStr 7 T0 nSampWords 14 [7.50.-1.1.1.2.1.0.105]
 CscRawDataProvi...  DEBUG cluster location word 0xe11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000a 18
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1361  3  50 :: measphi0 L4 strId 18 nStr 10 T0 nSampWords 20 [7.50.-1.1.1.2.4.0.18]
 CscRawDataProvi...  DEBUG cluster location word 0xe41
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 66
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1409  3  50 :: measphi0 L4 strId 66 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.4.0.66]
 CscRawDataProvi...  DEBUG cluster location word 0x916
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24790  4  50 :: measphi1 L1 strId 23 nStr 5 T0 nSampWords 10 [7.50.-1.1.1.2.1.1.23]
 CscRawDataProvi...  DEBUG cluster location word 0xb16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24838  4  50 :: measphi1 L2 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.2.1.23]
 CscRawDataProvi...  DEBUG cluster location word 0xd03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24867  4  50 :: measphi1 L3 strId 4 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.4]
 CscRawDataProvi...  DEBUG cluster location word 0xd15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24885  4  50 :: measphi1 L3 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.22]
 CscRawDataProvi...  DEBUG cluster location word 0xd2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24909  4  50 :: measphi1 L3 strId 46 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.46]
 CscRawDataProvi...  DEBUG cluster location word 0xf15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24933  4  50 :: measphi1 L4 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.22]
 CscRawDataProvi...  DEBUG cluster location word 0xf1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24942  4  50 :: measphi1 L4 strId 31 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.31]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2683,6 +4036,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x82
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x82 25 9 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 9
@@ -2692,6 +4046,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 50
+CscRawDataProvi...  DEBUG RPU Header word 0x5000032
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 50
@@ -2701,13 +4056,24 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x200002e
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 2
 CscRawDataProvi...  DEBUG Cluster Data Words = 46
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 5
+CscRawDataProvi...  DEBUG cluster location word 0x12c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33431  7  51 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.51.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x12e16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33622  8  51 :: measphi0 L4 strId 23 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.23]
+CscRawDataProvi...  DEBUG cluster location word 0x12e1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 27
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33626  8  51 :: measphi0 L4 strId 27 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x12d24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56004  9  51 :: measphi1 L3 strId 37 nStr 4 T0 nSampWords 8 [7.51.-1.2.1.2.3.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x12f24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56052  9  51 :: measphi1 L4 strId 37 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.1.37]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 5 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2716,6 +4082,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x83
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x83 17 1 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 1
@@ -2725,27 +4092,52 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 116
+CscRawDataProvi...  DEBUG RPU Header word 0xd000074
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 116
 CscRawDataProvi...  DEBUG SCA Address = 1920169077
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010102
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x6000070
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 112
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
+CscRawDataProvi...  DEBUG cluster location word 0x2818
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2328  0  50 :: measphi0 L1 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2a17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2519  1  50 :: measphi0 L2 strId 24 nStr 6 T0 nSampWords 12 [7.50.-1.2.1.2.2.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2711  2  50 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2e18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2904  3  50 :: measphi0 L4 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2ebc
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 189
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 3068  3  50 :: measphi0 L4 strId 189 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.0.189]
+CscRawDataProvi...  DEBUG cluster location word 0x2909
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25161  4  50 :: measphi1 L1 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2b09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25209  4  50 :: measphi1 L2 strId 10 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.2.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25257  4  50 :: measphi1 L3 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25270  4  50 :: measphi1 L3 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.3.1.23]
+CscRawDataProvi...  DEBUG cluster location word 0x2f09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25305  4  50 :: measphi1 L4 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2f28
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 41
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25336  4  50 :: measphi1 L4 strId 41 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.1.41]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2754,6 +4146,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x84
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x84 26 10 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 10
@@ -2763,6 +4156,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 114
+CscRawDataProvi...  DEBUG RPU Header word 0x5000072
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 114
@@ -2772,14 +4166,27 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x400006e
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
 CscRawDataProvi...  DEBUG Cluster Data Words = 110
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 6
+CscRawDataProvi...  DEBUG cluster location word 0x14c03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 34947  7  51 :: measphi0 L3 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.3.1.2.3.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x14c66
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000013 103
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 35046  7  51 :: measphi0 L3 strId 103 nStr 19 T0 nSampWords 38 [7.51.-1.3.1.2.3.0.103]
+CscRawDataProvi...  DEBUG cluster location word 0x1491b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56283  9  51 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x14d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56361  9  51 :: measphi1 L3 strId 10 nStr 6 T0 nSampWords 12 [7.51.-1.3.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x14d1f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56383  9  51 :: measphi1 L3 strId 32 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.3.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x14d23
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000d 36
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56387  9  51 :: measphi1 L3 strId 36 nStr 13 T0 nSampWords 26 [7.51.-1.3.1.2.3.1.36]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 6 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2788,6 +4195,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x85
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x85 18 2 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 2
@@ -2797,23 +4205,40 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 90
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005a
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 90
 CscRawDataProvi...  DEBUG SCA Address = 1482250843
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20100
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x4000056
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
 CscRawDataProvi...  DEBUG Cluster Data Words = 86
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 7
+CscRawDataProvi...  DEBUG cluster location word 0x4a18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4056  1  50 :: measphi0 L2 strId 25 nStr 8 T0 nSampWords 16 [7.50.-1.3.1.2.2.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4a3a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 59
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4090  1  50 :: measphi0 L2 strId 59 nStr 4 T0 nSampWords 8 [7.50.-1.3.1.2.2.0.59]
+CscRawDataProvi...  DEBUG cluster location word 0x4c1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 27
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4250  2  50 :: measphi0 L3 strId 27 nStr 6 T0 nSampWords 12 [7.50.-1.3.1.2.3.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x4b11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 18
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25601  4  50 :: measphi1 L2 strId 18 nStr 3 T0 nSampWords 6 [7.50.-1.3.1.2.2.1.18]
+CscRawDataProvi...  DEBUG cluster location word 0x4b18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25608  4  50 :: measphi1 L2 strId 25 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25614  4  50 :: measphi1 L2 strId 31 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x4d14
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 21
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25652  4  50 :: measphi1 L3 strId 21 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.3.1.21]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 7 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2822,6 +4247,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x86
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x86 27 11 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 11
@@ -2831,6 +4257,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 58
+CscRawDataProvi...  DEBUG RPU Header word 0x500003a
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 58
@@ -2840,12 +4267,21 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x1000036
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 1
 CscRawDataProvi...  DEBUG Cluster Data Words = 54
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 4
+CscRawDataProvi...  DEBUG cluster location word 0x16c2f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 48
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36527  7  51 :: measphi0 L3 strId 48 nStr 3 T0 nSampWords 6 [7.51.-1.4.1.2.3.0.48]
+CscRawDataProvi...  DEBUG cluster location word 0x16c56
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 87
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36566  7  51 :: measphi0 L3 strId 87 nStr 8 T0 nSampWords 16 [7.51.-1.4.1.2.3.0.87]
+CscRawDataProvi...  DEBUG cluster location word 0x16e57
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 88
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36759  8  51 :: measphi0 L4 strId 88 nStr 7 T0 nSampWords 14 [7.51.-1.4.1.2.4.0.88]
+CscRawDataProvi...  DEBUG cluster location word 0x16f04
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 5
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 56788  9  51 :: measphi1 L4 strId 5 nStr 5 T0 nSampWords 10 [7.51.-1.4.1.2.4.1.5]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 4 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2854,6 +4290,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x87
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x87 19 3 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 3
@@ -2863,26 +4300,49 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 92
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005c
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 92
 CscRawDataProvi...  DEBUG SCA Address = 404298267
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010101
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x6000058
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 88
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 10
+CscRawDataProvi...  DEBUG cluster location word 0x6855
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 86
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5461  0  50 :: measphi0 L1 strId 86 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.1.0.86]
+CscRawDataProvi...  DEBUG cluster location word 0x6a7c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 125
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5692  1  50 :: measphi0 L2 strId 125 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.0.125]
+CscRawDataProvi...  DEBUG cluster location word 0x6c77
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 120
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5879  2  50 :: measphi0 L3 strId 120 nStr 5 T0 nSampWords 10 [7.50.-1.4.1.2.3.0.120]
+CscRawDataProvi...  DEBUG cluster location word 0x6e71
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 114
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 6065  3  50 :: measphi0 L4 strId 114 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.0.114]
+CscRawDataProvi...  DEBUG cluster location word 0x691b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25947  4  50 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x691f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25951  4  50 :: measphi1 L1 strId 32 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x6924
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25956  4  50 :: measphi1 L1 strId 37 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x6b17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25991  4  50 :: measphi1 L2 strId 24 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6d17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26039  4  50 :: measphi1 L3 strId 24 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.3.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6f2a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 43
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26106  4  50 :: measphi1 L4 strId 43 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.1.43]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 10 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -2891,6 +4351,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x88
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x88 28 12 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 12
@@ -2900,24 +4361,42 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 74
+CscRawDataProvi...  DEBUG RPU Header word 0x500004a
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 74
 CscRawDataProvi...  DEBUG SCA Address = 1499093852
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000001
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x5000046
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 5
 CscRawDataProvi...  DEBUG Cluster Data Words = 70
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 8
+CscRawDataProvi...  DEBUG cluster location word 0x18831
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 50
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37681  5  51 :: measphi0 L1 strId 50 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.50]
+CscRawDataProvi...  DEBUG cluster location word 0x188ab
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 172
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37803  5  51 :: measphi0 L1 strId 172 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.172]
+CscRawDataProvi...  DEBUG cluster location word 0x18e03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 38211  8  51 :: measphi0 L4 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.5.1.2.4.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x18908
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57032  9  51 :: measphi1 L1 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x1892e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 47
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57070  9  51 :: measphi1 L1 strId 47 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.1.1.47]
+CscRawDataProvi...  DEBUG cluster location word 0x18b00
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 1
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57072  9  51 :: measphi1 L2 strId 1 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.2.1.1]
+CscRawDataProvi...  DEBUG cluster location word 0x18d0d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 14
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57133  9  51 :: measphi1 L3 strId 14 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.3.1.14]
+CscRawDataProvi...  DEBUG cluster location word 0x18f1c
 CscRawDataProvi...WARNING DEBUG message limit (500) reached for CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder. Suppressing further output.
 CscRawDataProvi...  DEBUG After processing numColls=32
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
@@ -3132,10 +4611,40 @@ CscRawDataProvi...  DEBUG After processing numColls=32
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
 CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.27 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     1.17 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.70 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.49 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     1.17 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.39 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.64 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     1.06 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.47 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.61 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.75 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.13 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.03 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.03 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.10 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     2.85 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.68 ))s
+IOVDbSvc             INFO  bytes in ((     11.54 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.19 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.27 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     5.18 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     1.17 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.47 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.27 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -3159,12 +4668,17 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 5.14  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Listing sources of suppressed message: 
+=====================================================
  Message Source              |   Level |    Count
+-----------------------------+---------+-------------
  CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder|   DEBUG |    35169
  MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder|   DEBUG |   854603
+=====================================================
 Py:Athena            INFO leaving with code 0: "successful run"
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
index 79f5d951a4b9..172ac995f675 100644
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
@@ -11,8 +11,8 @@ def createLArRoI_Map( flags ):
     from LArCabling.LArCablingConf import LArCablingLegacyService
     cablingTool = LArCablingLegacyService() # this is realy a tool
     # needed by above
-    acc.merge( LArFebRodMappingCfg( flags )[0] )
-    acc.merge( LArCalibIdMappingCfg( flags )[0] )
+    acc.merge( LArFebRodMappingCfg( flags ))
+    acc.merge( LArCalibIdMappingCfg( flags ))
 
     from CaloTriggerTool.CaloTriggerToolConf import CaloTriggerTowerService
     triggerTowerTool = CaloTriggerTowerService()                                              
-- 
GitLab


From 8f1462e7382c0aefe56324e83ecb2cf371211f7c Mon Sep 17 00:00:00 2001
From: Walter Lampl <Walter.Lampl@cern.ch>
Date: Wed, 13 Mar 2019 13:09:18 +0100
Subject: [PATCH 023/163] ComponentAccumulator: Add doc-strings for
 setPrivateTool and popPrivateTool, move check for dangling private tool(s) to
 __del__

---
 .../python/ComponentAccumulator.py            | 20 ++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 611e554aac26..40c4b80b7cb0 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -51,6 +51,9 @@ class ComponentAccumulator(object):
             raise RuntimeError("ComponentAccumulator was not merged!")
             #log = logging.getLogger("ComponentAccumulator")
             #log.error("The ComponentAccumulator listed below was never merged!")
+
+        if self._privateTools is not None:
+            raise RuntimeError("Deleting a ComponentAccumulator with and dangling private tool(s)")
         #pass
 
 
@@ -159,21 +162,28 @@ class ComponentAccumulator(object):
             return findSubSequence(self._sequence,sequenceName)
 
     def setPrivateTools(self,privTool):
+        """Use this method to carry private AlgTool(s) to the caller when returning this ComponentAccumulator. 
+        The method accepts either a single private AlgTool or a list of private AlgTools (typically assigned to ToolHandleArray)
+        """
+
         if self._privateTools is not None:
-            raise ConfigurationError("This ComponentAccumulator holds already a private tool. Only one private tool is allowed")
+            raise ConfigurationError("This ComponentAccumulator holds already a (list of) private tool. Only one (list of)  private tool(s) is allowed")
 
         if isinstance(privTool,collections.Sequence):
             for t in privTool:
                 if not isinstance(t,ConfigurableAlgTool):
-                    raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only configurableAlgTools or lists of ConfigurableAlgTools. Encountered %s in a list" % type(t))
+                    raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only ConfigurableAlgTools or lists of ConfigurableAlgTools. Encountered %s in a list" % type(t))
         else: 
             if not isinstance(privTool,ConfigurableAlgTool):
-                raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only configurableAlgTools or lists of ConfigurableAlgTools. Encountered %s " % type(privTool))
+                raise  ConfigurationError("ComponentAccumulator.setPrivateTools accepts only cCnfigurableAlgTools or lists of ConfigurableAlgTools. Encountered %s " % type(privTool))
                 
         self._privateTools=privTool
         return
         
     def popPrivateTools(self):
+        """Get the (list of) private AlgTools from this CompoentAccumulator. 
+        The CA will not keep any reference to the AlgTool.
+        """
         tool=self._privateTools
         self._privateTools=None
         return tool
@@ -444,10 +454,6 @@ class ComponentAccumulator(object):
         if other is None:
             raise RuntimeError("merge called on object of type None: did you forget to return a CA from a config function?")
 
-        privTool=self._privateTools or other._privateTools
-        if (privTool is not None):
-            raise RuntimeError("merge called on a ComponentAccumulator with and dangling private tool %s/%s" % (privTool.getType(),privTool.getName()))
-
         if isinstance(other,collections.Sequence):
             self._msg.error("Merge called with a: %s "  % str(type(other)) + " of length: %d " % len(other))
             self._msg.error("where elements are of type : " + ", ".join([ str(type(x).__name__) for x in other]) )
-- 
GitLab


From 54859f36c277845d98f294cd1c169f0ceaa344c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Ma=C5=A1=C3=ADk?=
 <Jiri.Masik@manchester.ac.uk>
Date: Wed, 13 Mar 2019 13:22:45 +0100
Subject: [PATCH 024/163] disable access to the offline conditions in the
 online mode - it fixes  ATLASRECTS-4865

---
 .../python/PixelConditionsSummaryToolSetup.py      |  7 +------
 .../share/InDetRecConditionsAccess.py              |  5 +++--
 .../TrigUpgradeTest/python/InDetSetup.py           | 10 ++++++----
 .../TrigValidation/TrigUpgradeTest/share/IDCalo.py | 14 ++------------
 4 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py
index 4094ad6eee46..b3fbbe5e864d 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryToolSetup.py
@@ -78,13 +78,8 @@ class PixelConditionsSummaryToolSetup:
         from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelTDAQCondAlg
         condSeq += PixelTDAQCondAlg(name="PixelTDAQCondAlg", ReadKey=PixelTDAQFolder)
 
+    PixelDeadMapFolder = "/PIXEL/PixMapOverlay"
     if (self.useDeadMap):
-      PixelDeadMapFolder = "/PIXEL/PixMapOverlay"
-      PixelDeadMapInstance = "PIXEL_OFL"
-
-      if not conddb.folderRequested(PixelDeadMapFolder):
-        conddb.addFolder(PixelDeadMapInstance, PixelDeadMapFolder, className="CondAttrListCollection")
-
       if not (conddb.folderRequested("/PIXEL/PixMapOverlay") or conddb.folderRequested("/PIXEL/Onl/PixMapOverlay")):
         conddb.addFolderSplitOnline("PIXEL","/PIXEL/Onl/PixMapOverlay","/PIXEL/PixMapOverlay", className='CondAttrListCollection')
 
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
index ef043d6801ff..4cb832a1e9b4 100644
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
@@ -86,9 +86,10 @@ if DetFlags.haveRIO.pixel_on():
                 conddb.addFolder("PIXEL_OFL","/PIXEL/PixdEdx")
             else:
                 conddb.addFolder("PIXEL_OFL","/PIXEL/PixdEdx")
+                
+        if not conddb.folderRequested("/PIXEL/PixReco"):
+            conddb.addFolder("PIXEL_OFL", "/PIXEL/PixReco", className="DetCondCFloat")
 
-    if not conddb.folderRequested("/PIXEL/PixReco"):
-        conddb.addFolder("PIXEL_OFL", "/PIXEL/PixReco", className="DetCondCFloat")
 
     if not hasattr(condSeq, 'PixelOfflineCalibCondAlg'):
         from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelOfflineCalibCondAlg
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py
index 690e08dc747d..9da79e352da6 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py
@@ -6,9 +6,12 @@ def makeInDetAlgs( whichSignature='' ):
   #If signature specified add suffix to the algorithms
   signature =  "_" + whichSignature if whichSignature else ''
 
+
   eventAlgs = []
   viewAlgs = []
+  from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags
   from InDetRecExample.InDetKeys import InDetKeys
+
   #Create IdentifiableCaches
   from InDetPrepRawDataFormation.InDetPrepRawDataFormationConf import InDet__CacheCreator
   InDetCacheCreatorTrigViews = InDet__CacheCreator(name = "InDetCacheCreatorTrigViews" + signature,
@@ -38,8 +41,7 @@ def makeInDetAlgs( whichSignature='' ):
                                                              Decoder = InDetPixelRodDecoder)
     ToolSvc += InDetPixelRawDataProviderTool
 
-    from InDetRecExample.InDetJobProperties import InDetFlags
-    if (InDetFlags.doPrintConfigurables()):
+    if (InDetTrigFlags.doPrintConfigurables()):
       print      InDetPixelRawDataProviderTool
     
     # load the PixelRawDataProvider
@@ -55,7 +57,7 @@ def makeInDetAlgs( whichSignature='' ):
     viewAlgs.append(InDetPixelRawDataProvider)
     
     
-    if (InDetFlags.doPrintConfigurables()):
+    if (InDetTrigFlags.doPrintConfigurables()):
       print          InDetPixelRawDataProvider
     
     
@@ -69,7 +71,7 @@ def makeInDetAlgs( whichSignature='' ):
     InDetSCTRawDataProviderTool = SCTRawDataProviderTool(name    = "InDetSCTRawDataProviderTool" + signature,
                                                         Decoder = InDetSCTRodDecoder)
     ToolSvc += InDetSCTRawDataProviderTool
-    if (InDetFlags.doPrintConfigurables()):
+    if (InDetTrigFlags.doPrintConfigurables()):
       print      InDetSCTRawDataProviderTool
     
     # load the SCTRawDataProvider
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
index 318c2e2a9f4f..096bf0e4ce5e 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
@@ -34,18 +34,8 @@ allViewAlgorithms = AthSequencer(viewNodeName, Sequential=False, ModeOR=False, S
 
 
 if TriggerFlags.doID:
-  
-  from InDetRecExample.InDetJobProperties import InDetFlags
-  InDetFlags.doCaloSeededBrem = False
-  InDetFlags.InDet25nsec = True 
-  InDetFlags.doPrimaryVertex3DFinding = False 
-  InDetFlags.doPrintConfigurables = False
-  InDetFlags.doResolveBackTracks = True 
-  InDetFlags.doSiSPSeededTrackFinder = True
-  InDetFlags.doTRTPhaseCalculation = True
-  InDetFlags.doTRTSeededTrackFinder = True
-  InDetFlags.doTruth = False
-  InDetFlags.init()
+  from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags
+  InDetTrigFlags.doPixelClusterSplitting = False
   
   # PixelLorentzAngleSvc and SCTLorentzAngleSvc
   include("InDetRecExample/InDetRecConditionsAccess.py")
-- 
GitLab


From 83a03b45336280d261ee2a563be4cf27b84631f5 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 13 Mar 2019 13:45:36 +0000
Subject: [PATCH 025/163] Minor changes before pulling in master

---
 .../MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
index 96f98cbef9e2..402ed5c8dd1b 100644
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx
@@ -304,9 +304,10 @@ StatusCode Muon::RPC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs
       // store the error condition into the StatusCode and continue
     }
   }
-  // Unsure about this at the moment
-  //ATH_CHECK( rdoContainerHandle.record (std::move (pad)) );
+
   ATH_MSG_DEBUG("After processing, number of collections in container : " << pad-> numberOfCollections() );
+
+  // Only write out the RpcSectorLogigContainer if we activate the flag
   if(m_WriteOutRpcSectorLogic){
     ATH_MSG_DEBUG("Writing out RpcSectorLogicContainer");
     ATH_CHECK( logicHandle.record (std::move (logic)) );
-- 
GitLab


From 0bf794806095c11d54b75ae342e76a7585d9e4b9 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 13 Mar 2019 13:57:19 +0000
Subject: [PATCH 026/163] Update config

---
 .../python/MuonBytestreamDecodeConfig.py       | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
index 8c7f10f26b4c..c955ef8947c0 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
@@ -1,4 +1,4 @@
-#
+1;95;0c#
 #  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 #
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
@@ -55,7 +55,13 @@ def RpcBytestreamDecodeCfg(flags, forTrigger=False):
     from MuonRPC_CnvTools.MuonRPC_CnvToolsConf import Muon__RPC_RawDataProviderTool
     MuonRpcRawDataProviderTool = Muon__RPC_RawDataProviderTool(name    = "RPC_RawDataProviderTool",
                                                                Decoder = RPCRodDecoder )
-    MuonRpcRawDataProviderTool.OutputLevel = VERBOSE
+    if forTrigger:
+        cacheAcc,cacheAlg = MuonCacheCfg()
+        acc.merge( cacheAcc )
+        MuonRpcRawDataProviderTool.RpcContainerCacheKey   = MuonCacheNames.RpcCache
+        MuonRpcRawDataProviderTool.WriteOutRpcSectorLogic = False
+        MuonRpcRawDataProviderTool.OutputLevel = DEBUG
+
     acc.addPublicTool( MuonRpcRawDataProviderTool ) # This should be removed, but now defined as PublicTool at MuFastSteering 
     
     # Setup the RAW data provider algorithm
@@ -68,6 +74,7 @@ def RpcBytestreamDecodeCfg(flags, forTrigger=False):
         RpcRawDataProvider.DoSeededDecoding = True
         RpcRawDataProvider.RoIs = "MURoIs" # Maybe we don't want to hard code this?
 
+
     return acc, RpcRawDataProvider
 
 def TgcBytestreamDecodeCfg(flags, forTrigger=False):
@@ -119,7 +126,7 @@ def MdtBytestreamDecodeCfg(flags, forTrigger=False):
 
     # Setup the MDT ROD decoder
     from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import MdtROD_Decoder
-    MDTRodDecoder = MdtROD_Decoder(name	     = "MdtROD_Decoder" )
+    MDTRodDecoder = MdtROD_Decoder(name	     = "MdtROD_Decoder")
 
     # RAW data provider tool needs ROB data provider service (should be another Config function?)
     from ByteStreamCnvSvcBase.ByteStreamCnvSvcBaseConf import ROBDataProviderSvc
@@ -130,6 +137,7 @@ def MdtBytestreamDecodeCfg(flags, forTrigger=False):
     from MuonMDT_CnvTools.MuonMDT_CnvToolsConf import Muon__MDT_RawDataProviderTool
     MuonMdtRawDataProviderTool = Muon__MDT_RawDataProviderTool(name    = "MDT_RawDataProviderTool",
                                                                Decoder = MDTRodDecoder)
+
     if forTrigger:
         # Trigger the creation of cache containers
         cacheAcc,cacheAlg = MuonCacheCfg()
@@ -226,12 +234,12 @@ if __name__=="__main__":
     cfg.addEventAlgo( tgcdecodingAlg )
 
     # Schedule Mdt data decoding - once mergeAll is working can simplify these lines
-    mdtdecodingAcc, mdtdecodingAlg = MdtBytestreamDecodeCfg( ConfigFlags , True)
+    mdtdecodingAcc, mdtdecodingAlg = MdtBytestreamDecodeCfg( ConfigFlags )
     cfg.merge( mdtdecodingAcc )
     cfg.addEventAlgo( mdtdecodingAlg )
 
     # Schedule Csc data decoding - once mergeAll is working can simplify these lines
-    cscdecodingAcc, cscdecodingAlg = CscBytestreamDecodeCfg( ConfigFlags , True) 
+    cscdecodingAcc, cscdecodingAlg = CscBytestreamDecodeCfg( ConfigFlags ) 
     cfg.merge( cscdecodingAcc )
     cfg.addEventAlgo( cscdecodingAlg )
 
-- 
GitLab


From e84807d18282dde430d23e44049b3750f956a0af Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 13 Mar 2019 13:59:06 +0000
Subject: [PATCH 027/163] Update RDO config

---
 .../MuonConfig/python/MuonRdoDecodeConfig.py          | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
index f96f53de9347..241ef97febf3 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
@@ -167,16 +167,20 @@ def muonRdoDecodeTestData( forTrigger = False ):
 
     log.setLevel(DEBUG)
     log.info('About to setup Rpc Raw data decoding')
-
+    
     cfg=ComponentAccumulator()
-        
+
     # Seem to need this to read BS properly
     from ByteStreamCnvSvc.ByteStreamConfig import TrigBSReadCfg
     cfg.merge(TrigBSReadCfg(ConfigFlags ))
 
     # Schedule Rpc bytestream data decoding - once mergeAll is working can simplify these lines
     from MuonConfig.MuonBytestreamDecodeConfig import RpcBytestreamDecodeCfg
-    rpcdecodingAcc, rpcdecodingAlg = RpcBytestreamDecodeCfg( ConfigFlags ) 
+    rpcdecodingAcc, rpcdecodingAlg = RpcBytestreamDecodeCfg( ConfigFlags, forTrigger ) 
+    # Put into a verbose logging mode to check the caching
+    if forTrigger:
+        rpcdecodingAlg.ProviderTool.OutputLevel = DEBUG
+
     cfg.merge( rpcdecodingAcc )
     cfg.addEventAlgo( rpcdecodingAlg )
 
@@ -223,7 +227,6 @@ def muonRdoDecodeTestData( forTrigger = False ):
     cfg.merge(cscbuildingAcc)
     cfg.addEventAlgo(cscbuildingAlg)
 
-
     # Need to add POOL converter  - may be a better way of doing this?
     from AthenaCommon import CfgMgr
     cfg.addService( CfgMgr.AthenaPoolCnvSvc() )
-- 
GitLab


From 52a23f6cadc9bea2a1afddadbea9f1466b7503fb Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 13 Mar 2019 14:18:33 +0000
Subject: [PATCH 028/163] Tweaking config

---
 .../MuonConfig/python/MuonBytestreamDecodeConfig.py           | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
index d16cc4169b84..d3bf83c4c775 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
@@ -1,4 +1,4 @@
-1;95;0c#
+#
 #  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 #
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
@@ -56,8 +56,6 @@ def RpcBytestreamDecodeCfg(flags, forTrigger=False):
     MuonRpcRawDataProviderTool = Muon__RPC_RawDataProviderTool(name    = "RPC_RawDataProviderTool",
                                                                Decoder = RPCRodDecoder )
     if forTrigger:
-        cacheAcc,cacheAlg = MuonCacheCfg()
-        acc.merge( cacheAcc )
         MuonRpcRawDataProviderTool.RpcContainerCacheKey   = MuonCacheNames.RpcCache
         MuonRpcRawDataProviderTool.WriteOutRpcSectorLogic = False
         MuonRpcRawDataProviderTool.OutputLevel = DEBUG
-- 
GitLab


From a874954827d55c18510fb3d8cd1c42d35c04c7a7 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Wed, 13 Mar 2019 14:24:26 +0000
Subject: [PATCH 029/163] Forcing the push

---
 .../MuonConfig/python/MuonBytestreamDecodeConfig.py             | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
index d3bf83c4c775..c81299b4f0c1 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
@@ -204,7 +204,7 @@ if __name__=="__main__":
     ConfigFlags.lock()
     ConfigFlags.dump()
 
-    from AthenaCommon.Logging import log
+    from AthenaCommon.Logging import log 
 
     log.setLevel(DEBUG)
     log.info('About to setup Rpc Raw data decoding')
-- 
GitLab


From 2b5b7a74e926a5be02af554576e493111938cabc Mon Sep 17 00:00:00 2001
From: sherwood <peter.sherwood@cern.ch>
Date: Wed, 13 Mar 2019 18:12:46 +0100
Subject: [PATCH 030/163] Copyright updates. Use  SystemOfUnits

---
 .../TrigHLTJetHypo/ITrigHLTJetHypoTool.h           |  2 +-
 .../TrigHLTJetHypo/ITrigJetHypoTool.h              |  2 +-
 .../TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h         |  2 +-
 .../TrigHLTJetHypo/TrigEFRazorAllTE.h              |  2 +-
 .../TrigHLTJetHypo/TrigHLTJetHypo2.h               |  2 +-
 .../TrigHLTJetHypo/TrigHLTJetHypoBase.h            |  2 +-
 .../TrigHLTJetHypoUtils/AllJetsGrouper.h           |  2 +-
 .../TrigHLTJetHypoUtils/AntiBasicCleaner.h         |  2 +-
 .../TrigHLTJetHypoUtils/AntiLlpCleaner.h           |  2 +-
 .../TrigHLTJetHypoUtils/AntiLooseCleaner.h         |  2 +-
 .../TrigHLTJetHypoUtils/AntiTightCleaner.h         |  2 +-
 .../TrigHLTJetHypoUtils/BasicCleaner.h             |  2 +-
 .../TrigHLTJetHypoUtils/CleanerBridge.h            |  2 +-
 .../TrigHLTJetHypoUtils/CleanerFactory.h           |  2 +-
 .../TrigHLTJetHypoUtils/CleanerWrapper.h           |  2 +-
 .../TrigHLTJetHypoUtils/CombinationsGen.h          |  2 +-
 .../TrigHLTJetHypoUtils/CombinationsGrouper.h      |  2 +-
 .../TrigHLTJetHypoUtils/ConditionBridge.h          |  2 +-
 .../TrigHLTJetHypoUtils/ConditionsDefs.h           |  2 +-
 .../TrigHLTJetHypoUtils/ConditionsSorter.h         |  2 +-
 .../TrigHLTJetHypoUtils/DescendingEt.h             |  2 +-
 .../TrigHLTJetHypoUtils/DijetCondition.h           |  2 +-
 .../TrigHLTJetHypoUtils/DijetDEtaMassCondition.h   |  2 +-
 .../TrigHLTJetHypoUtils/DijetDPhiCondition.h       |  2 +-
 .../TrigHLTJetHypoUtils/DijetMTCondition.h         |  2 +-
 .../TrigHLTJetHypoUtils/EtaECondition.h            |  2 +-
 .../TrigHLTJetHypo/python/ChainLabelParser.py      |  1 +
 .../TrigHLTJetHypo/python/JetCleanMonitoring.py    |  2 +-
 .../TrigHLTJetHypo/python/ToolSetter.py            |  7 +++++++
 .../python/TrigEFDPhiMetJetAllTEConfig.py          |  2 +-
 .../python/TrigEFDPhiMetJetAllTEMonitoring.py      |  2 +-
 .../python/TrigEFRazorAllTEConfig.py               |  2 +-
 .../python/TrigEFRazorAllTEMonitoring.py           |  2 +-
 .../python/TrigHLTJetHypo2Monitoring.py            |  2 +-
 .../TrigHLTJetHypo/python/TrigHLTJetHypoConfig.py  |  2 +-
 .../TrigHLTJetHypo/python/TrigJetHypoToolConfig.py |  2 ++
 .../TrigHLTJetHypo/python/__init__.py              |  2 +-
 .../TrigHLTJetHypo/python/chainDict2jetLabel.py    |  2 ++
 .../TrigHLTJetHypo/python/chainDictDumper.py       |  2 ++
 .../TrigHLTJetHypo/python/constants.py             |  2 ++
 .../TrigHypothesis/TrigHLTJetHypo/python/node.py   |  2 ++
 .../TrigHLTJetHypo/python/test_cases.py            |  2 ++
 .../TrigHLTJetHypo/python/treeVisitors.py          |  2 ++
 .../TrigHLTJetHypo/src/ITrigJetHypoToolConfig.h    |  2 +-
 .../TrigHLTJetHypo/src/ITrigJetHypoToolMT.h        |  2 +-
 .../TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx   |  2 +-
 .../TrigHLTJetHypo/src/TrigEFRazorAllTEHypo.cxx    |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypoBase.cxx      |  2 +-
 .../src/TrigHLTJetHypoUtils/DijetCondition.cxx     | 14 +++++++++-----
 .../src/TrigHLTJetHypoUtils/DijetMTCondition.cxx   |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypo_Dijet.cxx    |  2 +-
 .../src/TrigHLTJetHypo_DijetMassDEta.cxx           |  2 +-
 .../src/TrigHLTJetHypo_DijetMassDEtaDPhi.cxx       |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypo_EtaEt.cxx    |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypo_HT.cxx       |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypo_SMC.cxx      |  2 +-
 .../TrigHLTJetHypo/src/TrigHLTJetHypo_TLA.cxx      |  2 +-
 .../TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx        |  2 +-
 .../TrigHLTJetHypo/src/TrigJetHypoAlgMT.h          |  2 +-
 .../src/TrigJetHypoToolConfig_EtaEt.cxx            |  2 +-
 .../src/TrigJetHypoToolConfig_EtaEt.h              |  2 +-
 .../src/TrigJetHypoToolConfig_dijet.cxx            |  2 +-
 .../src/TrigJetHypoToolConfig_dijet.h              |  2 +-
 .../src/TrigJetHypoToolConfig_simple.cxx           |  2 +-
 .../src/TrigJetHypoToolConfig_simple.h             |  2 +-
 .../TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx       |  2 +-
 .../TrigHLTJetHypo/src/TrigJetHypoToolMT.h         |  2 +-
 .../src/components/TrigHLTJetHypo_entries.cxx      |  4 ++++
 .../TrigHLTJetHypo/src/xAODJetAsIJetFactory.cxx    |  2 +-
 69 files changed, 93 insertions(+), 63 deletions(-)

diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigHLTJetHypoTool.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigHLTJetHypoTool.h
index c9b692283403..b12c42a11d9f 100755
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigHLTJetHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigHLTJetHypoTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ITRIGHLTJETHYPOTOOL_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigJetHypoTool.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigJetHypoTool.h
index 39927ef7470f..2df735689083 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigJetHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/ITrigJetHypoTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ITRIGJETHYPOTOOL_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h
index e83cfe5be147..0c7397fe6cce 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFRazorAllTE.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFRazorAllTE.h
index 1281f3c32f15..96a881d54960 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFRazorAllTE.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigEFRazorAllTE.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypo2.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypo2.h
index 98ebef72ecfe..b6ac26f6c03e 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypo2.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypo2.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_TRIGHLTJETHYPO2_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoBase.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoBase.h
index e4737e6ad77c..bde0538d865e 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoBase.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoBase.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_TRIGHLTJETHYPOBASE_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AllJetsGrouper.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AllJetsGrouper.h
index b319dace8111..734ebdc64c5a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AllJetsGrouper.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AllJetsGrouper.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ALLJETSGROUPER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiBasicCleaner.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiBasicCleaner.h
index 50e9038960fe..c66a4611e515 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiBasicCleaner.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiBasicCleaner.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ANTIBASICCLEANER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLlpCleaner.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLlpCleaner.h
index eeeea3736cec..ee8e2d62759a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLlpCleaner.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLlpCleaner.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ANTILLPCLEANER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLooseCleaner.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLooseCleaner.h
index ecc9f59d90af..13785181d35b 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLooseCleaner.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiLooseCleaner.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ANTILOOSECLEANER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiTightCleaner.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiTightCleaner.h
index 95c5b322d7c9..6493eb0283bf 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiTightCleaner.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/AntiTightCleaner.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ANTITIGHTCLEANER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/BasicCleaner.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/BasicCleaner.h
index db3bbb765e2b..c1ed78d04b4c 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/BasicCleaner.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/BasicCleaner.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_BASICCLEANER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h
index 8b5672cb94c9..89bbaf2e8d45 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerBridge.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CLEANERBRIDGE_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h
index ffd4b7a8e951..86aa45d9abcd 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CLEANERFACTORY_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerWrapper.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerWrapper.h
index 8dcd84af7da9..e535373ad972 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerWrapper.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerWrapper.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CLEANERWRAPPER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGen.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGen.h
index 558ff7176ba0..d3febb8cc7d8 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGen.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGen.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTHETHYPO_COMBINATIONSGEN_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGrouper.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGrouper.h
index 822af0d39a85..c3ee42ca53e4 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGrouper.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/CombinationsGrouper.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_COMBINATIONSGROUPER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionBridge.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionBridge.h
index 18112dcfb564..8f0154b546f5 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionBridge.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionBridge.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CONDITIONBRIDGE_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h
index beee0988619e..a799e55401d5 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CONDITIONSDEFS_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h
index 4f02ba07914a..b6e90762b451 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsSorter.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_CONDITIONSSORTER_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DescendingEt.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DescendingEt.h
index 737797625001..6a88c24eb365 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DescendingEt.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DescendingEt.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_DESCENDINGET_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetCondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetCondition.h
index 5ff7487c70f8..fd9095041c2f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetCondition.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetCondition.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_DIJETCONDITION_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDEtaMassCondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDEtaMassCondition.h
index c98416bfbd46..b763ffa1f72b 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDEtaMassCondition.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDEtaMassCondition.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_DIJETDETAMASSCONDITION_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDPhiCondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDPhiCondition.h
index 984d5b2eb746..be3afbea26e7 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDPhiCondition.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetDPhiCondition.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_DIJETDPHICONDITION_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
index 84aef0dc56ad..6a10fd8dae1b 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_DIJETMTCONDITION_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/EtaECondition.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/EtaECondition.h
index a50bcd543e48..c4e55680b442 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/EtaECondition.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/TrigHLTJetHypo/TrigHLTJetHypoUtils/EtaECondition.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ETAECONDITION_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
index 46230e0139dc..8738af9af25f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ChainLabelParser.py
@@ -1,3 +1,4 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 from node import Node
 from constants import (lchars,
                        digits,
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/JetCleanMonitoring.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/JetCleanMonitoring.py
index 8c3975a10cf8..d4c0a643a61f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/JetCleanMonitoring.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/JetCleanMonitoring.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 JetChainsToKeepMonitoring={
 #Adding in 2018 for monitoring GSC and large-R
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
index 87c1114df9cf..a8ebc14baad8 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ToolSetter.py
@@ -1,3 +1,10 @@
+"""Instantiates AlgTools from paramters stored in a node instance"""
+
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+
+
+
 from TrigHLTJetHypo.TrigHLTJetHypoConf import (TrigJetHypoToolConfig_simple,
                                                TrigJetHypoToolConfig_dijet,
                                                TrigJetNotToolMT,
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEConfig.py
index 139d3a1f6932..4a26b827f7ce 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEConfig.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigEFDPhiMetJetAllTE
 from TrigHLTJetHypo.TrigEFDPhiMetJetAllTEMonitoring import (
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEMonitoring.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEMonitoring.py
index 6fce97bf28e3..22a6fdac69e4 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEMonitoring.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFDPhiMetJetAllTEMonitoring.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig
 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEConfig.py
index c78a4697f879..da8d3fc9aff6 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEConfig.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigEFRazorAllTE
 from TrigHLTJetHypo.TrigEFRazorAllTEMonitoring import (
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEMonitoring.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEMonitoring.py
index a23572ddd8b2..eb38b3a0e6b4 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEMonitoring.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigEFRazorAllTEMonitoring.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig 
         
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypo2Monitoring.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypo2Monitoring.py
index 80436837178e..b1b383a1cc00 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypo2Monitoring.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypo2Monitoring.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig
 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypoConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypoConfig.py
index 3e7b3e407a86..1d974624f301 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypoConfig.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigHLTJetHypoConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 # from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigHLTJetHypo
 import  TrigHLTJetHypoConf
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
index 908fcb0454ad..11b29338d4a1 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 from TrigHLTJetHypo.TrigHLTJetHypoConf import (TrigJetHypoToolMT,
                                                TrigJetHypoToolConfig_EtaEt)
 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/__init__.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/__init__.py
index 74583d364ec2..bbfc91ea870d 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/__init__.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/__init__.py
@@ -1,2 +1,2 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
index 89047bbe9e7f..8b51539d39e0 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 import re
 
 # substrings that cannot occur in any chainPartName for simple chains.
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
index 608d8b49228b..f4702a0b48ad 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDictDumper.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
 from TriggerMenuMT.HLTMenuConfig.Menu.SignatureDicts import JetChainParts
 import sys
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
index 33afe422d318..10b599fea316 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/constants.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 lchars = 'abcdefghijklmnopqrstuvwxyz'
 digits = '0123456789'
 delims = '()[],'
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
index 7ce56d947df5..0bf899086730 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/node.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 from constants import logicals
     
 class Node(object):
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
index 549dc54109a0..b928116d28da 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/test_cases.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 test_strings = [
     'ijet([(10et, 0eta320)])',
      'ijet([(10et, 0eta320)(20et, 0eta320)])',
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
index 5dcc580ce236..d1d5757e5812 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 from constants import lchars
 
 import re
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolConfig.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolConfig.h
index 4a0a65fb6ec9..d49d5758f3d4 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolConfig.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolConfig.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #ifndef TRIGHLTJETHYPO_ITRIGJETHYPOTOOLCONFIG_H
 #define TRIGHLTJETHYPO_ITRIGJETHYPOTOOLCONFIG_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolMT.h
index b0f4844ef05a..72d438ef5f5a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/ITrigJetHypoToolMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTJETHYPO_ITRIGJETHYPOTOOLMT_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
index a7c547ca2ee7..e027e7ba83a8 100755
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFRazorAllTEHypo.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFRazorAllTEHypo.cxx
index 85e06ce328c3..552911a8e0ba 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFRazorAllTEHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFRazorAllTEHypo.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoBase.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoBase.cxx
index 4300b37cbba9..90966c1bec3f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoBase.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoBase.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetCondition.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetCondition.cxx
index 35928de193f6..e7c8cec34a7a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetCondition.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetCondition.cxx
@@ -7,6 +7,8 @@
 #include <stdexcept>
 #include <TLorentzVector.h>
 #include <limits>
+#include "GaudiKernel/SystemOfUnits.h"
+
 // #include <iostream>
 DijetCondition::DijetCondition(
                                double etThreshold0,
@@ -56,8 +58,10 @@ bool DijetCondition::isSatisfied(const HypoJetVector& ips) const{
 
 bool DijetCondition::passJetCuts(pHypoJet j0, pHypoJet j1) const {
 
-  auto et0 = 0.001 * j0->et();
-  auto et1 = 0.001 * j1->et();
+  constexpr double invGeV = 1./Gaudi::Units::GeV;
+
+  auto et0 = j0->et() * invGeV;
+  auto et1 = j1->et() * invGeV;
 
   auto eta0 =  j0->eta();
   auto eta1 =  j1->eta();
@@ -78,9 +82,9 @@ bool DijetCondition::passJetCuts(pHypoJet j0, pHypoJet j1) const {
 
 bool DijetCondition::passDijetCuts(pHypoJet j0, pHypoJet j1) const {
 
-
-  auto rj0 = 0.001 * (j0 -> p4());
-  auto rj1 = 0.001 * (j1 -> p4());
+  constexpr double invGeV = 1./Gaudi::Units::GeV;
+  auto rj0 = (j0 -> p4()) * invGeV;
+  auto rj1 = (j1 -> p4()) * invGeV;
 
   auto mass = (rj0 + rj1).M();
   if (m_massMin > mass or mass >= m_massMax){return false;}
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
index 8e1c5d29314c..3bb2c8c2269c 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/DijetMTCondition.h"
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_Dijet.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_Dijet.cxx
index 439e78489a37..ba1079b2f131 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_Dijet.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_Dijet.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEta.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEta.cxx
index 06ae5f3324e3..86142dcc6197 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEta.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEta.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEtaDPhi.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEtaDPhi.cxx
index 2a6cef035217..243b98ab9a3d 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEtaDPhi.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_DijetMassDEtaDPhi.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_EtaEt.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_EtaEt.cxx
index 93dacee0008c..f7e85ee43160 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_EtaEt.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_EtaEt.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_HT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_HT.cxx
index cb2c8d9ae440..ba73e14d3995 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_HT.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_HT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_SMC.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_SMC.cxx
index 938c20723db5..1354f8dbe0de 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_SMC.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_SMC.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_TLA.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_TLA.cxx
index 195d0a41d6b0..1efbece2a227 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_TLA.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypo_TLA.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx
index a6ca525b17c7..45fd41423c3a 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "GaudiKernel/Property.h"
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h
index d4413eb184e5..3157bf40f2a4 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoAlgMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #ifndef TrigHLTJetHypo_TrigJetHypoAlgMT_H
 #define TrigHLTJetHypo_TrigJetHypoAlgMT_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.cxx
index fc26f284bb1d..bf74c882428d 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.h
index 2d07e666129f..356310c44271 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_EtaEt.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGJETHYPOTOOLConfig_ETAET_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
index c079a5328ca9..a3d7a5f9a805 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /*
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
index 0f47ee6b7ca5..d89255c9b474 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGJETHYPOTOOLConfig_DIJET_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
index 9eaa545f00f7..7a6362a30788 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
index 6f8b04e489d0..b503b12948e1 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGJETHYPOTOOLConfig_SIMPLE_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
index 90fcef396941..9c52d1334d82 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
index 0e3744f582bd..7e431a512783 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGJETHYPOTOOLMT_H
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
index d24e32ccc4fa..b8363a2069cc 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx
@@ -1,3 +1,7 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
 #include "TrigHLTJetHypo/TrigHLTJetHypo2.h"
 #include "TrigHLTJetHypo/TrigEFRazorAllTE.h"
 #include "TrigHLTJetHypo/TrigEFDPhiMetJetAllTE.h"
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/xAODJetAsIJetFactory.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/xAODJetAsIJetFactory.cxx
index 3a79530f2729..ab7261bdc2a1 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/xAODJetAsIJetFactory.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/xAODJetAsIJetFactory.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/xAODJetAsIJetFactory.h"
 
-- 
GitLab


From 48c691228ba4e91b319c63d9c3f9d630c4157ffa Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Thu, 14 Mar 2019 03:39:39 +0100
Subject: [PATCH 031/163] solve most part of review comments.

---
 .../Root/TrigEgammaDistTool.cxx               |   9 --
 .../Root/TrigEgammaEventSelection.cxx         |  49 +-------
 .../Root/TrigEgammaNavTPAnalysisTool.cxx      |   1 -
 .../Root/TrigEgammaNavTPBaseTool.cxx          |   1 -
 .../Root/TrigEgammaPhysValBase.cxx            | 109 +-----------------
 .../TrigEgammaEventSelection.h                |  13 +--
 .../TrigEgammaPhysValBase.h                   |  46 +-------
 .../TrigEgammaAnalysisTools_entries.cxx       |   3 -
 8 files changed, 4 insertions(+), 227 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
index 2572366022b4..93b1274d32d7 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
@@ -150,15 +150,6 @@ StatusCode TrigEgammaDistTool::toolExecute(const std::string basePath,TrigInfo i
                 fillL2Calo(dir+"L2Calo",obj); // Fill HLT shower shapes
             }
 
-            /*
-            const auto vec_l2ringer = fc.get<xAOD::TrigRingerRings>("",TrigDefs::alsoDeactivateTEs);
-            for(const auto feat : vec_l2ringer){
-                if(feat.te()==nullptr) continue;
-                const auto* obj = getFeature<xAOD::TrigRingerRings>(feat.te());
-                // Only consider passing objects
-                if(!obj) continue;
-                fillRingerShapes(dir+"L2Calo",obj);// Fill HLT ringer shapes
-            }*/
 
             const auto vec_l2rnn = fc.get<xAOD::TrigRNNOutput>("",TrigDefs::alsoDeactivateTEs);
             for(const auto feat : vec_l2rnn){
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
index fb2df7075283..86b0c5af4c42 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /**********************************************************************
  * AsgTool: TrigEgammaEventSelection
@@ -184,9 +184,6 @@ StatusCode TrigEgammaEventSelection::childBook(){
     m_doCaloRings=true;
   }
 
-  // This will needed to emulate objects without all features attached
-  //if(emulation())
-  //  emulation()->ExperimentalAndExpertMethods();
 
   ///Alloc pointers
   alloc_space();
@@ -214,9 +211,6 @@ StatusCode TrigEgammaEventSelection::childExecute(){
   if(m_selectionFakes)
     EventSelectionFakes();
 
-  //if(m_selectionMC)
-  //  EventSelectionMC();
-  
 
   return StatusCode::SUCCESS;
 }
@@ -324,19 +318,12 @@ bool TrigEgammaEventSelection::fill( TTree *t, const xAOD::Electron *el){
 
   const HLT::TriggerElement* feat=nullptr;
 
-  //bool doAccept=false;
-  //if(trigItem.empty()){
-  // Use the support match method from the emulation tool
   if(getEmulation())
     emulation()->match( el,  feat );
   else{
     ATH_MSG_ERROR("Emulation tool was not configurated. Impossible to match! Please, see your python config.");
     return false;
   }
-  //}else{
-  //  match()->match(el, trigItem, feat);
-  //  doAccept=true;
-  //}
 
   if(feat){
     clear();
@@ -441,8 +428,6 @@ bool TrigEgammaEventSelection::fillTDT(const xAOD::Electron *el , const HLT::Tri
       m_trig_tdt_L2_el_accept->push_back( -1 );
       m_trig_tdt_EF_calo_accept->push_back( -1 );
       m_trig_tdt_EF_el_accept->push_back( -1 );
-      //ATH_MSG_DEBUG("Trigger bitmask was converted to " << int(GetByteFromBools(mask)));
-      //m_trig_tdt_decision_mask->push_back(GetByteFromBools(mask));
     }
 
     if(te && getEmulation()){
@@ -470,8 +455,6 @@ bool TrigEgammaEventSelection::fillTDT(const xAOD::Electron *el , const HLT::Tri
       m_trig_tdt_emu_L2_el_accept->push_back( -1 );
       m_trig_tdt_emu_EF_calo_accept->push_back( -1 );
       m_trig_tdt_emu_EF_el_accept->push_back( -1 );
-      //ATH_MSG_DEBUG("Trigger bitmask was converted to " << int(GetByteFromBools(mask)));
-      //m_trig_tdt_decision_mask->push_back(GetByteFromBools(mask));
     }
 
 
@@ -570,8 +553,6 @@ bool TrigEgammaEventSelection::ApplyFireTriggers( const xAOD::Electron *el){
 
 
 StatusCode TrigEgammaEventSelection::childFinalize(){
-  //release_space();
-  //ATH_MSG_DEBUG( "Number of probes collected is: " <<tree("probes"  , m_dir+"/Egamma")->GetEntries());
   
   for(auto& trigItem : m_trigList){
     ATH_MSG_DEBUG("From TDT tool:");
@@ -603,9 +584,6 @@ bool TrigEgammaEventSelection::fillEmTauRoI( const xAOD::EmTauRoI *emTauRoI ){
   m_trig_L1_emIsol  = emTauRoI->emIsol();
   m_trig_L1_hadIsol = emTauRoI->hadIsol();
   m_trig_L1_hadCore = emTauRoI->hadCore();
-  //for(unsigned i=0; i < emTauRoI->thrNames().size();++i){
-  //  m_trig_L1_thrNames->push_back(emTauRoI->thrNames().at(i));
-  //}
   return true;
 } 
 
@@ -1103,31 +1081,6 @@ bool TrigEgammaEventSelection::fillHLTElectron( const xAOD::Electron *el ){
   el->isolationValue(val,xAOD::Iso::ptvarcone40);
   m_trig_EF_el_ptCone->push_back(val);
 
- 
-  
-    
-  /*
-  m_trig_EF_el_nblayerhits                  ->push_back( nblayerhits ); 
-  m_trig_EF_el_nblayerolhits                ->push_back( nblayerolhits ); 
-  m_trig_EF_el_npixhits                     ->push_back( npixhits ); 
-  m_trig_EF_el_npixolhits                   ->push_back( npixolhits ); 
-  m_trig_EF_el_npixdeadsensors              ->push_back( npixdeadsensors ); 
-  m_trig_EF_el_nscthits                     ->push_back( nscthits ); 
-  m_trig_EF_el_nsctolhits                   ->push_back( nsctolhits ); 
-  m_trig_EF_el_nsctdeadsensors              ->push_back( nsctdeadsensors ); 
-  m_trig_EF_el_ntrthits                     ->push_back( ntrthits ); 
-  m_trig_EF_el_ntrtolhits                   ->push_back( ntrtolhits ); 
-  m_trig_EF_el_ntrthightreshits             ->push_back( ntrthighthreshits ); 
-  m_trig_EF_el_ntrthighthresolhits          ->push_back( ntrthighthresolhits ); 
-  m_trig_EF_el_ntrtxenonhits                ->push_back( ntrtxenonhits ); 
-  m_trig_EF_el_expectblayerhit              ->push_back( expectblayerhit ); 
-  m_trig_EF_el_expectNextToInnerMostLayer   ->push_back( expectNextToInnerMostLayer); 
-  m_trig_EF_el_nNextToInnerMostLayerHits    ->push_back( nNextToInnerMostLayerHits ); 
-  m_trig_EF_el_nNextToInnerMostLayerOutliers->push_back( nNextToInnerMostLayerOutliers );
-  */
-
-
-
 
   return true;
 }
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
index e18a851a02a7..c13b73ef8d1f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
@@ -43,7 +43,6 @@ StatusCode TrigEgammaNavTPAnalysisTool::childBook(){
     //Set the base directory from the plot()
     m_dir=plot()->getBasePath();
     std::vector<std::string> chains  = tdt()->getListOfTriggers("HLT_e.*, L1_EM.*, HLT_g.*");
-    //TrigEgammaAnalysisBaseTool::write_trigger_list(chains);
 
     for(const auto trigName:m_trigInputList){ 
         if (std::find(chains.begin(), chains.end(), trigName) != chains.end()){ 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
index b9a15b8223d9..fa0d71d180d9 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
@@ -587,7 +587,6 @@ float TrigEgammaNavTPBaseTool::getWTransverseMass( const xAOD::Electron *el ){
 bool TrigEgammaNavTPBaseTool::passesEventCleaning()
 {
   ATH_MSG_DEBUG("Appling Event Cleaning...");
-  //if(m_ismc) return true;
   bool failsLAr  = (m_eventInfo->errorState(xAOD::EventInfo::LAr)  == xAOD::EventInfo::Error );
   bool failsTile = (m_eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error );
   bool failsSCT  = (m_eventInfo->errorState(xAOD::EventInfo::SCT)  == xAOD::EventInfo::Error );
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
index 3c63338f5693..2b6fe03aa69a 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <iostream>
@@ -44,7 +44,6 @@ void TrigEgammaPhysValBase::InitBranch(TTree* fChain, std::string branch_name, T
      bname = std::string(fChain->GetAlias(bname.c_str()));
 
   if (!fChain->FindBranch(bname.c_str()) && message) {
-    std::cout << "[WARNING] unknown branch " << bname << std::endl;
     return;  
   }
   fChain->SetBranchStatus(bname.c_str(), 1.);
@@ -62,7 +61,6 @@ void TrigEgammaPhysValBase::bookEventBranches(TTree *t){
 void TrigEgammaPhysValBase::bookTriggerBranches(TTree *t){
 
   // Level L1 cluster
-  //t->Branch( "trig_isPrescaled",        &m_trig_isPrescaled);
   t->Branch( "trig_L1_eta",             &m_trig_L1_eta);
   t->Branch( "trig_L1_phi",             &m_trig_L1_phi);
   t->Branch( "trig_L1_emClus",          &m_trig_L1_emClus);
@@ -178,25 +176,6 @@ void TrigEgammaPhysValBase::bookTriggerBranches(TTree *t){
   BRANCH( trig_EF_el_lhvloose                     );
 
   
-/*
-  BRANCH( trig_EF_el_nblayerhits                  );  
-  BRANCH( trig_EF_el_nblayerolhits                ); 
-  BRANCH( trig_EF_el_npixhits                     );  
-  BRANCH( trig_EF_el_npixolhits                   );  
-  BRANCH( trig_EF_el_nscthits                     );  
-  BRANCH( trig_EF_el_nsctolhits                   );  
-  BRANCH( trig_EF_el_ntrthightreshits             );  
-  BRANCH( trig_EF_el_ntrthits                     );  
-  BRANCH( trig_EF_el_ntrthighthresolhits          );   
-  BRANCH( trig_EF_el_ntrtolhits                   );   
-  BRANCH( trig_EF_el_ntrtxenonhits                ); 
-  BRANCH( trig_EF_el_expectblayerhit              ); 
-  BRANCH( trig_EF_el_npixdeadsensors              ); 
-  BRANCH( trig_EF_el_nsctdeadsensors              ); 
-  BRANCH( trig_EF_el_expectNextToInnerMostLayer   ); 
-  BRANCH( trig_EF_el_nNextToInnerMostLayerHits    ); 
-  BRANCH( trig_EF_el_nNextToInnerMostLayerOutliers);  
-  */
 
 #undef BRANCH
 
@@ -309,8 +288,6 @@ void TrigEgammaPhysValBase::bookTDTBranches(TTree *t){
 }
 
 
-/*void TrigEgammaPhysValBase::bookPhotonBranches(TTree *t){
-} */ 
   
 void TrigEgammaPhysValBase::bookMonteCarloBranches(TTree *t){
   // Monte Carlo
@@ -429,31 +406,9 @@ void TrigEgammaPhysValBase::linkElectronBranches( TTree *t ){
   InitBranch( t, "el_lhmedium",              &m_el_lhMedium ); 
   InitBranch( t, "el_lhtight",               &m_el_lhTight ); 
   InitBranch( t, "el_multiLepton",           &m_el_multiLepton);
-   /*
-    InitBranch( t, "el_nblayerhits",           &m_el_nblayerhits);
-    InitBranch( t, "el_nblayerolhits",         &m_el_nblayerolhits);
-    InitBranch( t, "el_npixhits",              &m_el_npixhits);
-    InitBranch( t, "el_npixolhits",            &m_el_npixolhits);
-    InitBranch( t, "el_npixdeadsensors",       &m_el_npixdeadsensors  );
-    InitBranch( t, "el_nscthits",              &m_el_nscthits);
-    InitBranch( t, "el_nsctolhits",            &m_el_nsctolhits);
-    InitBranch( t, "el_nsctdeadsensors",       &m_el_nsctdeadsensors  );
-    InitBranch( t, "el_ntrthits",              &m_el_ntrthits);
-    InitBranch( t, "el_ntrtolhits",            &m_el_ntrtolhits);
-    InitBranch( t, "el_ntrthighthreshits",     &m_el_ntrthighthreshits);
-    InitBranch( t, "el_ntrthighthresolhits",   &m_el_ntrthighthresolhits);
-    InitBranch( t, "el_ntrtxenonhits",         &m_el_ntrtxenonhits);
-    InitBranch( t, "el_expectblayerhit",       &m_el_expectblayerhit); 
-  */
-
-
-
-
 }
 
 
-/*void TrigEgammaPhysValBase::linkPhotonBranches( TTree *t ){
-}*/
 
 void TrigEgammaPhysValBase::linkTriggerBranches( TTree *t ){
 
@@ -574,27 +529,6 @@ void TrigEgammaPhysValBase::linkTriggerBranches( TTree *t ){
   INIT( trig_EF_el_lhloose                      );
   INIT( trig_EF_el_lhvloose                     );
 
-  /*
-  INIT( trig_EF_el_nblayerhits                  );  
-  INIT( trig_EF_el_nblayerolhits                ); 
-  INIT( trig_EF_el_npixhits                     );  
-  INIT( trig_EF_el_npixolhits                   );  
-  INIT( trig_EF_el_nscthits                     );  
-  INIT( trig_EF_el_nsctolhits                   );  
-  INIT( trig_EF_el_ntrthightreshits             );  
-  INIT( trig_EF_el_ntrthits                     );  
-  INIT( trig_EF_el_ntrthighthresolhits          );   
-  INIT( trig_EF_el_ntrtolhits                   );   
-  INIT( trig_EF_el_ntrtxenonhits                ); 
-  INIT( trig_EF_el_expectblayerhit              ); 
-  INIT( trig_EF_el_npixdeadsensors              ); 
-  INIT( trig_EF_el_nsctdeadsensors              ); 
-  INIT( trig_EF_el_expectNextToInnerMostLayer   ); 
-  INIT( trig_EF_el_nNextToInnerMostLayerHits    ); 
-  INIT( trig_EF_el_nNextToInnerMostLayerOutliers);  
-  */
-
-
 
 
 #undef INIT
@@ -998,27 +932,6 @@ void TrigEgammaPhysValBase::alloc_space(){
 
 
 
-  /*
-  m_trig_EF_el_nblayerhits                    = new std::vector<uint8_t>();     
-  m_trig_EF_el_nblayerolhits                  = new std::vector<uint8_t>();   
-  m_trig_EF_el_npixhits                       = new std::vector<uint8_t>();     
-  m_trig_EF_el_npixolhits                     = new std::vector<uint8_t>();     
-  m_trig_EF_el_nscthits                       = new std::vector<uint8_t>();     
-  m_trig_EF_el_nsctolhits                     = new std::vector<uint8_t>();     
-  m_trig_EF_el_ntrthightreshits               = new std::vector<uint8_t>();     
-  m_trig_EF_el_ntrthits                       = new std::vector<uint8_t>();     
-  m_trig_EF_el_ntrthighthresolhits            = new std::vector<uint8_t>();      
-  m_trig_EF_el_ntrtolhits                     = new std::vector<uint8_t>();      
-  m_trig_EF_el_ntrtxenonhits                  = new std::vector<uint8_t>(); 
-  m_trig_EF_el_expectblayerhit                = new std::vector<uint8_t>();
-  m_trig_EF_el_npixdeadsensors                = new std::vector<uint8_t>(); 
-  m_trig_EF_el_nsctdeadsensors                = new std::vector<uint8_t>(); 
-  m_trig_EF_el_expectNextToInnerMostLayer     = new std::vector<uint8_t>(); 
-  m_trig_EF_el_nNextToInnerMostLayerHits      = new std::vector<uint8_t>(); 
-  m_trig_EF_el_nNextToInnerMostLayerOutliers  = new std::vector<uint8_t>();
-  */
-
- 
 }
 
 void TrigEgammaPhysValBase::release_space(){
@@ -1030,7 +943,6 @@ void TrigEgammaPhysValBase::release_space(){
 
 
   
-  //delete m_trig_L1_thrNames       ;
   delete m_trig_L2_calo_energySample;
   delete m_trig_L2_calo_rings     ;
   delete m_trig_L2_calo_rnnOutput ;
@@ -1099,25 +1011,6 @@ void TrigEgammaPhysValBase::release_space(){
   delete m_trig_EF_el_trk_deltaPOverP                ;     
   delete m_trig_EF_el_trk_summaryValues              ;     
   
-  /*
-  delete m_trig_EF_el_nblayerhits                    ;     
-  delete m_trig_EF_el_nblayerolhits                  ;   
-  delete m_trig_EF_el_npixhits                       ;     
-  delete m_trig_EF_el_npixolhits                     ;     
-  delete m_trig_EF_el_nscthits                       ;     
-  delete m_trig_EF_el_nsctolhits                     ;     
-  delete m_trig_EF_el_ntrthightreshits               ;     
-  delete m_trig_EF_el_ntrthits                       ;     
-  delete m_trig_EF_el_ntrthighthresolhits            ;      
-  delete m_trig_EF_el_ntrtolhits                     ;      
-  delete m_trig_EF_el_ntrtxenonhits                  ; 
-  delete m_trig_EF_el_expectblayerhit                ;
-  delete m_trig_EF_el_npixdeadsensors                ; 
-  delete m_trig_EF_el_nsctdeadsensors                ; 
-  delete m_trig_EF_el_expectNextToInnerMostLayer     ; 
-  delete m_trig_EF_el_nNextToInnerMostLayerHits      ; 
-  delete m_trig_EF_el_nNextToInnerMostLayerOutliers  ;
-  */
   delete m_trig_EF_calo_tight                        ;
   delete m_trig_EF_calo_medium                       ;
   delete m_trig_EF_calo_loose                        ;
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
index 294e43189f96..eb112b0d1a4a 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaEventSelection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
 #define TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMANAVTPNTUPLE_H
@@ -78,17 +78,6 @@ class TrigEgammaEventSelection : public TrigEgammaNavTPBaseTool, public TrigEgam
 
 
 
-    // [*,*,HLT,EFCalo,L2,L2Calo,L1Calo,isGoodMatch]
-    //uint8_t GetByteFromBools(const bool eightBools[8])
-    int GetByteFromBools(const bool eightBools[8])
-    {
-      int ret = 0;
-      //uint8_t ret = 0;
-      for (int i=0; i<8; i++) if (eightBools[i] == true) ret |= (1<<i);
-      return ret;
-    }
-
-    //ToolHandleArray<ITrigEgammaEmulationTool>   m_emulationTools;
 
     ToolHandleArray<IAsgElectronIsEMSelector>   m_EFCaloElectronIsEMSelectors;
     ToolHandleArray<IAsgElectronIsEMSelector>   m_HLTElectronIsEMSelectors;
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
index 53f925f4fe32..6b77c0d095ad 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPhysValBase.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGEGAMMAANALYSISTOOLS_TRIGEGAMMAPHYSVALBASE_H
@@ -270,50 +270,6 @@ class TrigEgammaPhysValBase
     bool                m_mc_hasZMother{};
     bool                m_mc_hasWMother{};
 
-    /* 
-     
-    uint8_t             m_el_nblayerhits;
-    uint8_t             m_el_nblayerolhits;
-    uint8_t             m_el_npixhits;
-    uint8_t             m_el_npixolhits;
-    uint8_t             m_el_nscthits;
-    uint8_t             m_el_nsctolhits;
-    uint8_t             m_el_ntrthightreshits;
-    uint8_t             m_el_ntrthits;
-    uint8_t             m_el_ntrthighthresolhits;
-    uint8_t             m_el_ntrtolhits;
-    uint8_t             m_el_ntrtxenonhits;
-    uint8_t             m_el_expectblayerhit;
-    uint8_t             m_el_nsihits         ;
-    uint8_t             m_el_nsideadsensors  ;
-    uint8_t             m_el_npixdeadsensors ;
-    uint8_t             m_el_nsctdeadsensors ;
-    uint8_t             m_el_expectNextToInnerMostLayer;
-    uint8_t             m_el_nNextToInnerMostLayerHits;
-    uint8_t             m_el_nNextToInnerMostLayerOutliers;
-    
-    std::vector<float>               *m_trig_EF_el_charge;
-    std::vector<uint8_t>             *m_trig_EF_el_nblayerhits;
-    std::vector<uint8_t>             *m_trig_EF_el_nblayerolhits;
-    std::vector<uint8_t>             *m_trig_EF_el_npixhits;
-    std::vector<uint8_t>             *m_trig_EF_el_npixolhits;
-    std::vector<uint8_t>             *m_trig_EF_el_nscthits;
-    std::vector<uint8_t>             *m_trig_EF_el_nsctolhits;
-    std::vector<uint8_t>             *m_trig_EF_el_ntrthightreshits;
-    std::vector<uint8_t>             *m_trig_EF_el_ntrthits;
-    std::vector<uint8_t>             *m_trig_EF_el_ntrthighthresolhits;
-    std::vector<uint8_t>             *m_trig_EF_el_ntrtolhits;
-    std::vector<uint8_t>             *m_trig_EF_el_ntrtxenonhits;
-    std::vector<uint8_t>             *m_trig_EF_el_expectblayerhit;
-    std::vector<uint8_t>             *m_trig_EF_el_transformed_expectblayerhit;
-    std::vector<uint8_t>             *m_trig_EF_el_nsihits         ;
-    std::vector<uint8_t>             *m_trig_EF_el_nsideadsensors  ;
-    std::vector<uint8_t>             *m_trig_EF_el_npixdeadsensors ;
-    std::vector<uint8_t>             *m_trig_EF_el_nsctdeadsensors ;
-    std::vector<uint8_t>             *m_trig_EF_el_expectNextToInnerMostLayer;
-    std::vector<uint8_t>             *m_trig_EF_el_nNextToInnerMostLayerHits;
-    std::vector<uint8_t>             *m_trig_EF_el_nNextToInnerMostLayerOutliers;
-    */
 };
 
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
index 9ca518c5150f..9facf0a35faf 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/src/components/TrigEgammaAnalysisTools_entries.cxx
@@ -1,6 +1,3 @@
-
-
-
 #include "TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h"
 #include "../TrigEgammaMonTool.h"
 #include "../TrigEgammaPhysValMonTool.h"
-- 
GitLab


From 05625abade74c212a2738bb6b1b0f7a221a5dfd8 Mon Sep 17 00:00:00 2001
From: Walter Lampl <Walter.Lampl@cern.ch>
Date: Thu, 14 Mar 2019 11:20:16 +0100
Subject: [PATCH 032/163] LArHVScaleConfig: Fix import of addFolders

---
 LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py b/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
index fbe52c53e456..8dbcce76d5ac 100644
--- a/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
+++ b/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
@@ -1,6 +1,7 @@
 # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from IOVDbSvc.IOVDbSvcConfig import addFolders
 
 def LArHVScaleCfg(configFlags):
     result=ComponentAccumulator()
@@ -9,8 +10,6 @@ def LArHVScaleCfg(configFlags):
         result.merge(addFolders(configFlags,["/LAR/IdentifierOfl/HVLineToElectrodeMap<tag>LARHVLineToElectrodeMap-001</tag>"], "LAR_OFL", className="AthenaAttributeList"))
 
     elif not configFlags.Common.isOnline:
-        from IOVDbSvc.IOVDbSvcConfig import addFolders, IOVDbSvcCfg
-        result.mergeAll(IOVDbSvcCfg(configFlags))
         result.merge(addFolders(configFlags,["/LAR/DCS/HV/BARREl/I16"], "DCS_OFL", className="CondAttrListCollection"))
         result.merge(addFolders(configFlags,["/LAR/DCS/HV/BARREL/I8"],  "DCS_OFL", className="CondAttrListCollection"))
 
-- 
GitLab


From 63cc84ed068ca305ad2676b393ed59656b2a1c2a Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Thu, 14 Mar 2019 11:50:13 +0000
Subject: [PATCH 033/163] Updating reference files for data decode test. These
 were updated because some core athena changed, and then also because of small
 updates to the container decoding

---
 .../MuonConfig/share/MuonDataDecodeTest.ref   | 1777 +++++++++++-----
 .../share/MuonDataDecodeTest_Cache.ref        | 1803 ++++++++++++-----
 2 files changed, 2578 insertions(+), 1002 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index 9ad83eb8eb9f..d727a4d7a0ac 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -1,9 +1,44 @@
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : [function]
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -36,12 +71,116 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
 dynamically loading the flag Detector
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : [function]
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : [function]
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : [function]
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : [function]
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : [function]
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -53,12 +192,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -77,6 +219,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -101,25 +244,37 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
@@ -130,12 +285,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -155,6 +313,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -176,17 +335,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -195,12 +375,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -220,8 +403,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -262,6 +447,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -276,10 +467,169 @@ Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersiste
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 dynamically loading the flag Muon
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
@@ -302,12 +652,31 @@ Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonByteStream.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
@@ -323,9 +692,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -337,21 +720,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
@@ -362,12 +766,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -390,16 +797,32 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -408,12 +831,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -432,6 +858,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
@@ -456,14 +883,38 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component RPCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonRPC_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.RPCCablingDbTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -472,12 +923,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -497,6 +951,7 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
@@ -518,14 +973,36 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component LVL1TGC::TGCRecRoiSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TGCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -534,12 +1011,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -559,8 +1039,10 @@ Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
@@ -599,6 +1081,12 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
@@ -638,9 +1126,23 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
@@ -652,14 +1154,42 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingAlg
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AtlasFieldSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MuonCalib::MdtCalibDbCoolStrTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -668,12 +1198,15 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -720,6 +1253,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -732,6 +1271,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -744,6 +1289,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -756,6 +1307,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -768,6 +1325,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -780,6 +1343,12 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
@@ -792,11 +1361,18 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -805,19 +1381,48 @@ Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the jo
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
 Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
 Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CSCcablingSvc
 Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
 Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
 |-Atomic                                  = False
 |-AuditAlgorithms                         = False
 |-AuditBeginRun                           = False
@@ -829,20 +1434,29 @@ Py:Athena            INFO Print Config
 |-AuditRestart                            = False
 |-AuditStart                              = False
 |-AuditStop                               = False
+|-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7fbd4e2eeed0 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
+|-EvtStore                   @0x7fbd4e2eee50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7fbd4c928bd8 = []  (default: [])
+|-ExtraOutputs               @0x7fbd4c928d40 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
+|-Members                    @0x7fbd4c928ab8 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7fbd4c928e18 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
+|-Sequential                              = False
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
+|-Timeline                                = True
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
 | |-AuditBeginRun                           = False
@@ -854,29 +1468,45 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fbd4cefd7d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4cefd750 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930050 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c928f80 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c928e60 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fbd4d18a680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7fbd4cefd850 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7fbd4d1e4620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7fbd4cea4690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7fbd4cea4650 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7fbd4cf78170 = []  (default: [])
+| | |-ExtraOutputs           @0x7fbd4cf78200 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel                         = 0
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey                = 'StoreGateSvc+'
+| | |-WriteOutRpcSectorLogic              = True
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -886,6 +1516,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7fbd4cea4710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7fbd4cea4750 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7fbd4cf78290 = []  (default: [])
+| | | |-ExtraOutputs        @0x7fbd4cf78248 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -904,15 +1538,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fbd4cf0b790 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4cf0b710 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930200 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c9302d8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c930248 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fbd4e09d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -921,7 +1563,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7fbd4e09d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7fbd4ce45c50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fbd4ce45c90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fbd4ce535a8 = []  (default: [])
+| | |-ExtraOutputs      @0x7fbd4ce533f8 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -933,6 +1580,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fbd4ce45d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fbd4ce45d90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fbd4ce53248 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fbd4ce533b0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -951,15 +1602,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fbd4cef19d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4cef1950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930320 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c9303b0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c930290 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fbd4d28bd50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -969,6 +1628,11 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7fbd4e09dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7fbd4ca01d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7fbd4ca01d90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fbd4ca09638 = []  (default: [])
+| | |-ExtraOutputs         @0x7fbd4ca096c8 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -981,6 +1645,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fbd4ca01e50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fbd4ca01e90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fbd4ca095a8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fbd4ca09560 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -999,15 +1667,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fbd4cee7bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4cee7b50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c9303f8 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c930440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c930098 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fbd4c9cc050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1017,7 +1693,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7fbd4e09de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7fbd4c9c4c10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7fbd4c9c4c50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fbd4c9c2d88 = []  (default: [])
+| | |-ExtraOutputs         @0x7fbd4c9cb050 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1029,6 +1710,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fbd4c9c4d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fbd4c9c4d50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fbd4c9c2ea8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fbd4c9c2e60 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1047,19 +1732,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fbd4d06fd20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7fbd4c8ff6d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4c8ff650 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c9300e0 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c930518 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c930560 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fbd4c8ff750 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
 | | |-AuditFinalize                                   = False
 | | |-AuditInitialize                                 = False
@@ -1069,11 +1764,16 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
+| | |-DetStore                           @0x7fbd4c967850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7fbd4c9678d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7fbd4c9d4710 = []  (default: [])
+| | |-ExtraOutputs                       @0x7fbd4c9d48c0 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7fbd4c9dd2f0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1091,6 +1791,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fbd4c967950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fbd4c967990 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fbd4c9d49e0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fbd4c9d4998 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1107,20 +1811,30 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fbd4c975050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7fbd4c958590 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4c958510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930368 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c9305a8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c9305f0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7fbd4c958610 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
 | | |-AuditFinalize                                        = False
 | | |-AuditInitialize                                      = False
@@ -1130,6 +1844,10 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
+| | |-DetStore                                @0x7fbd4c967710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7fbd4c967a50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7fbd4c9780e0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7fbd4c9787a0 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1138,7 +1856,9 @@ Py:Athena            INFO Print Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7fbd4c978998 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7fbd4c978440 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1154,19 +1874,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fbd4f21bb50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7fbd4c8f3590 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4c8f3510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930680 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c930710 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c9306c8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fbd4c8f3610 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
 | | |-AuditFinalize                        = False
 | | |-AuditInitialize                      = False
@@ -1177,9 +1907,13 @@ Py:Athena            INFO Print Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
+| | |-DetStore                @0x7fbd4c967cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7fbd4c967d90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7fbd4c984fc8 = []  (default: [])
+| | |-ExtraOutputs            @0x7fbd4c984e60 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1206,19 +1940,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7fbd4d04f5a0 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7fbd4c960b90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4c960a90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c9307e8 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c930488 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c930758 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fbd4c960c10 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1228,7 +1972,13 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7fbd4f284b10 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7fbd4c981c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
+| | |-DetStore          @0x7fbd4c967890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fbd4c98b050 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fbd4ce53f38 = []  (default: [])
+| | |-ExtraOutputs      @0x7fbd4ce53cf8 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1241,6 +1991,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
+| | | |-DetStore           @0x7fbd4c98b090 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7fbd4c98b0d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7fbd4c978fc8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7fbd4c978cb0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -1267,6 +2021,11 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7fbd4c967f90 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7fbd4c9679d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fbd4c967fd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fbd4c978d40 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fbd4ce57098 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -1283,507 +2042,449 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fbd4c874390 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fbd4c874310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fbd4c930830 = []  (default: [])
+| |-ExtraOutputs               @0x7fbd4c930878 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fbd4c9308c0 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7fbd4c925cd0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
-/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
-|-Atomic                                  = False
-|-AuditAlgorithms                         = False
-|-AuditBeginRun                           = False
-|-AuditEndRun                             = False
-|-AuditExecute                            = False
-|-AuditFinalize                           = False
-|-AuditInitialize                         = False
-|-AuditReinitialize                       = False
-|-AuditRestart                            = False
-|-AuditStart                              = False
-|-AuditStop                               = False
-|-ContinueEventloopOnFPE                  = False
-|-Enable                                  = True
-|-ErrorCounter                            = 0
-|-ErrorMax                                = 1
-|-FilterCircularDependencies              = True
-|-IgnoreFilterPassed                      = False
-|-IsIOBound                               = False
-|                                            (default: [])
-|-ModeOR                                  = False
-|-MonitorService                          = 'MonitorSvc'
-|-OutputLevel                             = 0
-|-RegisterForContextService               = False
-|-StopOverride                            = False
-|-TimeOut                                 = 0.0
-|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
-| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
-| | | |-AuditFinalize                    = False
-| | | |-AuditInitialize                  = False
-| | | |-AuditReinitialize                = False
-| | | |-AuditRestart                     = False
-| | | |-AuditStart                       = False
-| | | |-AuditStop                        = False
-| | | |-AuditTools                       = False
-| | | |-DataErrorPrintLimit              = 1000
-| | | |-MonitorService                   = 'MonitorSvc'
-| | | |-OutputLevel                      = 0
-| | | |-Sector13Data                     = False
-| | | |-SpecialROBNumber                 = -1
-| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
-| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | |-ShowStatusWords                = False
-| | | |-SkipCoincidence                = False
-| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
-| | |-AuditFinalize                     = False
-| | |-AuditInitialize                   = False
-| | |-AuditReinitialize                 = False
-| | |-AuditRestart                      = False
-| | |-AuditStart                        = False
-| | |-AuditStop                         = False
-| | |-AuditTools                        = False
-| | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel                       = 0
-| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
-| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
-| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
-| | | |-SpecialROBNumber               = -1
-| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
-| | |-AuditFinalize                     = False
-| | |-AuditInitialize                   = False
-| | |-AuditReinitialize                 = False
-| | |-AuditRestart                      = False
-| | |-AuditStart                        = False
-| | |-AuditStop                         = False
-| | |-AuditTools                        = False
-| | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel                       = 0
-| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
-| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-IsCosmics                      = False
-| | | |-IsOldCosmics                   = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
-|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
-| | |-AuditFinalize                                   = False
-| | |-AuditInitialize                                 = False
-| | |-AuditReinitialize                               = False
-| | |-AuditRestart                                    = False
-| | |-AuditStart                                      = False
-| | |-AuditStop                                       = False
-| | |-AuditTools                                      = False
-| | |-DecodeData                                      = True
-| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
-| | |-MonitorService                                  = 'MonitorSvc'
-| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
-| | |-OutputLevel                                     = 0
-| | |-RPCInfoFromDb                                   = False
-| | |                                                    (default: 'Muon::RpcRDO_Decoder')
-| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
-| | |-etaphi_coincidenceTime                          = 20.0
-| | |-overlap_timeTolerance                           = 10.0
-| | |-processingData                                  = False
-| | |-produceRpcCoinDatafromTriggerWords              = True
-| | |-reduceCablingOverlap                            = True
-| | |-solvePhiAmbiguities                             = True
-| | |-timeShift                                       = -12.5
-| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
-| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
-| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
-|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |-Setting                                 = 0
-| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
-| | |-AuditFinalize                                        = False
-| | |-AuditInitialize                                      = False
-| | |-AuditReinitialize                                    = False
-| | |-AuditRestart                                         = False
-| | |-AuditStart                                           = False
-| | |-AuditStop                                            = False
-| | |-AuditTools                                           = False
-| | |-DecodeData                                           = True
-| | |-FillCoinData                                         = True
-| | |-MonitorService                                       = 'MonitorSvc'
-| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
-| | |-OutputCollection                                     = 'TGC_Measurements'
-| | |-OutputLevel                                          = 0
-| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
-| | |-TGCHashIdOffset                                      = 26000
-| | |-dropPrdsWithZeroWidth                                = True
-| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-show_warning_level_invalid_A09_SSW6_hit              = False
-| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
-| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
-|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
-| | |-AuditFinalize                        = False
-| | |-AuditInitialize                      = False
-| | |-AuditReinitialize                    = False
-| | |-AuditRestart                         = False
-| | |-AuditStart                           = False
-| | |-AuditStop                            = False
-| | |-AuditTools                           = False
-| | |-CalibratePrepData                    = True
-| | |-DecodeData                           = True
-| | |-DiscardSecondaryHitTwin              = False
-| | |-DoPropagationCorrection              = False
-| | |-DoTofCorrection                      = True
-| | |-MonitorService                       = 'MonitorSvc'
-| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
-| | |-OutputLevel                          = 0
-| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
-| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
-| | |-SortPrepData                         = False
-| | |-TimeWindowLowerBound                 = -1000000.0
-| | |-TimeWindowSetting                    = 2
-| | |-TimeWindowUpperBound                 = -1000000.0
-| | |-TwinCorrectSlewing                   = False
-| | |-Use1DPrepDataTwin                    = False
-| | |-UseAllBOLTwin                        = False
-| | |-UseTwin                              = True
-| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
-| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
-|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-CSCHashIdOffset                = 22000
-| | |-DecodeData                     = True
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
-| | |-OutputLevel                    = 0
-| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
-| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
-| | | |-AuditFinalize                   = False
-| | | |-AuditInitialize                 = False
-| | | |-AuditReinitialize               = False
-| | | |-AuditRestart                    = False
-| | | |-AuditStart                      = False
-| | | |-AuditStop                       = False
-| | | |-AuditTools                      = False
-| | | |-IsOnline                        = True
-| | | |-Latency                         = 100.0
-| | | |-MonitorService                  = 'MonitorSvc'
-| | | |-NSamples                        = 4
-| | | |-Noise                           = 3.5
-| | | |-OutputLevel                     = 0
-| | | |-Pedestal                        = 2048.0
-| | | |-ReadFromDatabase                = True
-| | | |-Slope                           = 0.19
-| | | |-SlopeFromDatabase               = False
-| | | |-TimeOffsetRange                 = 1.0
-| | | |-Use2Samples                     = False
-| | | |-integrationNumber               = 12.0
-| | | |-integrationNumber2              = 11.66
-| | | |-samplingTime                    = 50.0
-| | | |-signalWidth                     = 14.4092
-| | | |-timeOffset                      = 46.825
-| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
-| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
-| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
-| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
-|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |-RegisterForContextService               = False
-| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
-| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
-\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+RpcRawDataProvider ExtraOutputs []
+RpcRawDataProvider EvtStore StoreGateSvc
+RpcRawDataProvider ExtraInputs []
+RpcRawDataProvider RegionSelectionSvc RegSelSvc
+RpcRawDataProvider ProviderTool Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool
+RpcRawDataProvider NeededResources []
+RpcRawDataProvider DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider ExtraOutputs []
+TgcRawDataProvider EvtStore StoreGateSvc
+TgcRawDataProvider ExtraInputs []
+TgcRawDataProvider NeededResources []
+TgcRawDataProvider ProviderTool Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool
+TgcRawDataProvider DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider ExtraOutputs []
+MdtRawDataProvider EvtStore StoreGateSvc
+MdtRawDataProvider ExtraInputs []
+MdtRawDataProvider NeededResources []
+MdtRawDataProvider ProviderTool Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool
+MdtRawDataProvider DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider ExtraOutputs []
+CscRawDataProvider EvtStore StoreGateSvc
+CscRawDataProvider ExtraInputs []
+CscRawDataProvider NeededResources []
+CscRawDataProvider ProviderTool Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool
+CscRawDataProvider DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData ExtraOutputs []
+RpcRdoToRpcPrepData DecodingTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool
+RpcRdoToRpcPrepData EvtStore StoreGateSvc
+RpcRdoToRpcPrepData ExtraInputs []
+RpcRdoToRpcPrepData PrintPrepData False
+RpcRdoToRpcPrepData RegionSelectionSvc RegSelSvc
+RpcRdoToRpcPrepData NeededResources []
+RpcRdoToRpcPrepData DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData ExtraOutputs []
+TgcRdoToTgcPrepData DecodingTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool
+TgcRdoToTgcPrepData EvtStore StoreGateSvc
+TgcRdoToTgcPrepData RegionSelectorSvc RegSelSvc
+TgcRdoToTgcPrepData ExtraInputs []
+TgcRdoToTgcPrepData PrintPrepData False
+TgcRdoToTgcPrepData NeededResources []
+TgcRdoToTgcPrepData DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraOutputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraInputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData ExtraOutputs []
+MdtRdoToMdtPrepData DecodingTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool
+MdtRdoToMdtPrepData EvtStore StoreGateSvc
+MdtRdoToMdtPrepData ExtraInputs []
+MdtRdoToMdtPrepData PrintPrepData False
+MdtRdoToMdtPrepData RegionSelectionSvc RegSelSvc
+MdtRdoToMdtPrepData NeededResources []
+MdtRdoToMdtPrepData DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraOutputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraInputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData ExtraOutputs []
+CscRdoToCscPrepData CscRdoToCscPrepDataTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool
+CscRdoToCscPrepData EvtStore StoreGateSvc
+CscRdoToCscPrepData ExtraInputs []
+CscRdoToCscPrepData PrintPrepData False
+CscRdoToCscPrepData RegionSelectionSvc RegSelSvc
+CscRdoToCscPrepData NeededResources []
+CscRdoToCscPrepData DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+CscThesholdClusterBuilder ExtraOutputs []
+CscThesholdClusterBuilder EvtStore StoreGateSvc
+CscThesholdClusterBuilder ExtraInputs []
+CscThesholdClusterBuilder cluster_builder CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool
+CscThesholdClusterBuilder NeededResources []
+CscThesholdClusterBuilder DetStore StoreGateSvc/DetectorStore
+CondInputLoader ExtraOutputs []
+CondInputLoader Load [('CondAttrListCollection', '/MDT/CABLING/MEZZANINE_SCHEMA'), ('CondAttrListCollection', '/EXT/DCS/MAGNETS/SENSORDATA'), ('CondAttrListCollection', '/MDT/CABLING/MAP_SCHEMA')]
+CondInputLoader EvtStore StoreGateSvc
+CondInputLoader ExtraInputs []
+CondInputLoader NeededResources []
+CondInputLoader DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg ExtraOutputs []
+MuonMDT_CablingAlg EvtStore StoreGateSvc
+MuonMDT_CablingAlg ExtraInputs []
+MuonMDT_CablingAlg NeededResources []
+MuonMDT_CablingAlg DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+MuonMDT_CablingAlg MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.IOVDbMetaDataTool ExtraOutputs []
+ToolSvc.IOVDbMetaDataTool FoldersToBeModified ['/Simulation/Parameters']
+ToolSvc.IOVDbMetaDataTool MinMaxRunNumbers []
+ToolSvc.IOVDbMetaDataTool EvtStore StoreGateSvc
+ToolSvc.IOVDbMetaDataTool AttributesToBeRemoved ['RandomSeedOffset']
+ToolSvc.IOVDbMetaDataTool ExtraInputs []
+ToolSvc.IOVDbMetaDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.ByteStreamMetadataTool ExtraOutputs []
+ToolSvc.ByteStreamMetadataTool EvtStore StoreGateSvc
+ToolSvc.ByteStreamMetadataTool ExtraInputs []
+ToolSvc.ByteStreamMetadataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.Muon::MuonIdHelperTool ExtraOutputs []
+ToolSvc.Muon::MuonIdHelperTool EvtStore StoreGateSvc
+ToolSvc.Muon::MuonIdHelperTool ExtraInputs []
+ToolSvc.Muon::MuonIdHelperTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool ExtraOutputs []
+ToolSvc.RPCCablingDbTool EvtStore StoreGateSvc
+ToolSvc.RPCCablingDbTool ExtraInputs []
+ToolSvc.RPCCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool MapCorrectionFolder /RPC/CABLING/MAP_SCHEMA_CORR
+ToolSvc.RPCCablingDbTool MapConfigurationFolder /RPC/CABLING/MAP_SCHEMA
+ToolSvc.RPC_RawDataProviderTool ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool ExtraOutputs []
+ToolSvc.MDTCablingDbTool EvtStore StoreGateSvc
+ToolSvc.MDTCablingDbTool ExtraInputs []
+ToolSvc.MDTCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+ToolSvc.MDTCablingDbTool MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraOutputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RT_InputFiles ['Muon_RT_default.data']
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TimeSlewingCorrection False
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RtFolder /MDT/RTBLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool MeanCorrectionVsR [-5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524]
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool defaultT0 40
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraInputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool UseMLRt True
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool PropagationSpeedBeta 0.85
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TubeFolder /MDT/T0BLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+ToolSvc.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraOutputs []
+ToolSvc.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraInputs []
+ToolSvc.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraOutputs []
+ToolSvc.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraInputs []
+ToolSvc.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+ToolSvc.CscRdoToCscPrepDataTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscThesholdClusterBuilderTool ExtraOutputs []
+ToolSvc.CscThesholdClusterBuilderTool split_fitter CscSplitClusterFitter/CscSplitClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool strip_fitter CalibCscStripFitter/CalibCscStripFitter
+ToolSvc.CscThesholdClusterBuilderTool cscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscThesholdClusterBuilderTool default_fitter SimpleCscClusterFitter/SimpleCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool precision_fitter QratCscClusterFitter/QratCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool EvtStore StoreGateSvc
+ToolSvc.CscThesholdClusterBuilderTool ExtraInputs []
+ToolSvc.CscThesholdClusterBuilderTool DetStore StoreGateSvc/DetectorStore
+EventSelector SharedMemoryTool 
+EventSelector SkipEventSequence []
+EventSelector CounterTool 
+EventSelector Input []
+EventSelector ByteStreamInputSvc ByteStreamInputSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraOutputs []
+EventSelector.xAODMaker::EventInfoSelectorTool EvtStore StoreGateSvc
+EventSelector.xAODMaker::EventInfoSelectorTool BeamCondSvc BeamCondSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraInputs []
+EventSelector.xAODMaker::EventInfoSelectorTool LuminosityTool LuminosityTool
+EventSelector.xAODMaker::EventInfoSelectorTool DetStore StoreGateSvc/DetectorStore
+ByteStreamInputSvc EventStore StoreGateSvc
+ByteStreamInputSvc FullFileName ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+ByteStreamInputSvc AttributeListKeys []
+ByteStreamInputSvc MetaDataStore StoreGateSvc/InputMetaDataStore
+EventPersistencySvc CnvServices ['ByteStreamCnvSvc', 'AthenaPoolCnvSvc/AthenaPoolCnvSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'AthenaPoolCnvSvc']
+ByteStreamCnvSvc InitCnvs ['EventInfo', 'ROIB::RoIBResult', 'HLT::HLTResult']
+ByteStreamCnvSvc EventStore StoreGateSvc
+ByteStreamCnvSvc ROD2ROBmap []
+ByteStreamCnvSvc ByteStreamOutputSvcList []
+ByteStreamCnvSvc GetDetectorMask True
+ROBDataProviderSvc filterRobWithStatus []
+ROBDataProviderSvc filterSubDetWithStatus []
+ByteStreamAddressProviderSvc TypeNames ['TileCellIDC/TileCellIDC', 'MdtDigitContainer/MDT_DIGITS', 'RpcDigitContainer/RPC_DIGITS', 'TgcDigitContainer/TGC_DIGITS', 'CscDigitContainer/CSC_DIGITS', 'ROIB::RecRoIBResult/RecRoIBResult', 'MuCTPI_RIO/MUCTPI_RIO', 'CTP_RIO/CTP_RIO', 'LArRawChannelContainer/LArRawChannels', 'TileRawChannelContainer/TileRawChannelCnt', 'ROIB::RoIBResult/RoIBResult', 'MuCTPI_RDO/MUCTPI_RDO', 'HLT::HLTResult/HLTResult_L2', 'HLT::HLTResult/HLTResult_EF', 'CTP_RDO/CTP_RDO', 'L1TopoRDOCollection/L1TopoRDOCollection']
+ByteStreamAddressProviderSvc TopoProcModuleID [129, 145]
+ByteStreamAddressProviderSvc JetProcModuleID [172, 173]
+ByteStreamAddressProviderSvc CaloClusterProcModuleID [168, 169, 170, 171]
+MetaDataStore IncidentSvc IncidentSvc
+MetaDataStore ProxyProviderSvc ProxyProviderSvc
+InputMetaDataStore IncidentSvc IncidentSvc
+InputMetaDataStore ProxyProviderSvc ProxyProviderSvc
+MetaDataSvc MetaDataContainer MetaDataHdr
+MetaDataSvc CnvSvc AthenaPoolCnvSvc
+ProxyProviderSvc ProviderNames ['ByteStreamAddressProviderSvc', 'IOVDbSvc', 'MetaDataSvc', 'TagInfoMgr']
+GeoModelSvc SupportedGeometry 22
+GeoModelSvc AtlasVersion ATLAS-R2-2016-01-00-01
+GeoModelSvc.MuonDetectorTool ExtraOutputs []
+GeoModelSvc.MuonDetectorTool TheMuonAlignmentTool 
+GeoModelSvc.MuonDetectorTool EvtStore StoreGateSvc
+GeoModelSvc.MuonDetectorTool UseConditionDb 1
+GeoModelSvc.MuonDetectorTool ExtraInputs []
+GeoModelSvc.MuonDetectorTool UseIlinesFromGM 1
+GeoModelSvc.MuonDetectorTool SelectedStJff []
+GeoModelSvc.MuonDetectorTool DetStore StoreGateSvc/DetectorStore
+GeoModelSvc.MuonDetectorTool SelectedStations []
+GeoModelSvc.MuonDetectorTool SelectedStJzz []
+DetDescrCnvSvc IdDictFromRDB True
+DetDescrCnvSvc IdDictName IdDictParser/ATLAS_IDS.xml
+DetDescrCnvSvc DetectorNodes []
+DetDescrCnvSvc DetectorManagers []
+TagInfoMgr ExtraTagValuePairs ['AtlasRelease', 'Athena-22.0.1']
+RPCcablingServerSvc Atlas True
+RPCcablingServerSvc useMuonRPC_CablingSvc True
+RPCcablingServerSvc forcedUse True
+IOVDbSvc Folders ['/MDT/CABLING/MEZZANINE_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_ETA<db>COOLONL_RPC/CONDBR2</db>', '/MDT/RTBLOB<db>COOLOFL_MDT/CONDBR2</db>', '/MDT/T0BLOB<db>COOLOFL_MDT/CONDBR2</db>', '/CSC/STAT <key>CSC_STAT</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/NOISE <key>CSC_NOISE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/PED <key>CSC_PED</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/RMS <key>CSC_RMS</key> <db>COOLOFL_CSC/CONDBR2</db>', '/GLOBAL/BField/Maps <noover/><db>COOLONL_GLOBAL/CONDBR2</db>', '/CSC/T0PHASE <key>CSC_T0PHASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/TGC/CABLING/MAP_SCHEMA<db>COOLONL_TGC/CONDBR2</db>', '/EXT/DCS/MAGNETS/SENSORDATA<db>COOLOFL_DCS/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA_CORR<db>COOLONL_RPC/CONDBR2</db>', '/MDT/CABLING/MAP_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_PHI<db>COOLONL_RPC/CONDBR2</db>', '/CSC/PSLOPE <key>CSC_PSLOPE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA<db>COOLONL_RPC/CONDBR2</db>', '/CSC/T0BASE <key>CSC_T0BASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/FTHOLD <key>CSC_FTHOLD</key> <db>COOLOFL_CSC/CONDBR2</db>']
+IOVDbSvc CacheAlign 3
+IOVDbSvc dbConnection sqlite://;schema=mycool.db;dbname=CONDBR2
+IOVDbSvc GlobalTag CONDBR2-BLKPA-2018-13
+IOVDbSvc FoldersToMetaData ['/GLOBAL/BField/Maps']
+IOVDbSvc DBInstance CONDBR2
+IOVDbSvc overrideTags []
+PoolSvc FrontierRefreshSchema []
+PoolSvc ReadCatalog ['apcfile:poolcond/PoolFileCatalog.xml', 'prfile:poolcond/PoolCat_oflcond.xml', 'apcfile:poolcond/PoolCat_oflcond.xml', 'prfile:poolcond/PoolCat_comcond.xml', 'apcfile:poolcond/PoolCat_comcond.xml']
+PoolSvc MaxFilesOpen 0
+DBReplicaSvc COOLSQLiteVetoPattern /DBRelease/
+MuonRPC_CablingSvc ConfFilePath MuonRPC_Cabling/
+MuonRPC_CablingSvc TheRpcTriggerDbTool RPCTriggerDbTool
+MuonRPC_CablingSvc ConfFileName LVL1confAtlas.data
+MuonRPC_CablingSvc FeetPadThresolds []
+MuonRPC_CablingSvc TheRpcCablingDbTool RPCCablingDbTool/RPCCablingDbTool
+MuonRPC_CablingSvc RPCTriggerRoadsfromCool True
+MuonRPC_CablingSvc CorrFileName LVL1confAtlas.corr
+MuonRPC_CablingSvc CosmicConfiguration True
+TGCcablingServerSvc Atlas True
+TGCcablingServerSvc useMuonTGC_CablingSvc True
+TGCcablingServerSvc forcedUse True
+AthenaPoolCnvSvc InputPoolAttributes []
+AthenaPoolCnvSvc PoolAttributes []
+AthenaPoolCnvSvc PrintInputAttrPerEvt []
+AthenaPoolCnvSvc InputStreamingTool 
+AthenaPoolCnvSvc OutputPoolFileAllocator []
+AthenaPoolCnvSvc MaxFileSizes []
+MuonMDT_CablingSvc DBTool MDTCablingDbTool/MDTCablingDbTool
+MuonMDT_CablingSvc TagInfoManager TagInfoMgr
+MuonMDT_CablingSvc ForcedUse True
+MuonMDT_CablingSvc UseOldCabling False
+AtlasFieldSvc UseDCS True
+MdtCalibrationDbSvc CreateSlewingFunctions False
+MdtCalibrationDbSvc DBTool MuonCalib::MdtCalibDbAsciiTool
+MdtCalibrationDbSvc CreateBFieldFunctions False
+MdtCalibrationDbSvc CreateWireSagFunctions False
+MdtCalibrationSvc DoTofCorrection True
+MdtCalibrationSvc MagFieldSvc AtlasFieldSvc
+MdtCalibrationSvc DoWireSagCorrection False
+MdtCalibrationSvc TimeWindowSetting 2
+MdtCalibrationSvc DoSlewingCorrection False
+MdtCalibrationSvc DoTemperatureCorrection True
+MuonCalib::CscCoolStrSvc ParSGKeys ['CSC_PED', 'CSC_NOISE', 'CSC_PSLOPE', 'CSC_STAT', 'CSC_RMS', 'CSC_FTHOLD', 'CSC_T0BASE', 'CSC_T0PHASE']
+MuonCalib::CscCoolStrSvc ParDefaults ['2048', '3.5', '0.189', '0', '2.56', '0', '0', '0']
+MuonCalib::CscCoolStrSvc ParDataTypes ['float', 'float', 'float', 'uint32_t', 'float', 'float', 'float', 'float']
+MuonCalib::CscCoolStrSvc ParFolders ['/CSC/PED', '/CSC/NOISE', '/CSC/PSLOPE', '/CSC/STAT', '/CSC/RMS', '/CSC/FTHOLD', '/CSC/T0BASE', '/CSC/T0PHASE']
+MuonCalib::CscCoolStrSvc ParCats ['CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'ASM']
+MuonCalib::CscCoolStrSvc ParNames ['ped', 'noise', 'pslope', 'status', 'rms', 'f001', 't0base', 't0phase']
 
 JOs reading stage finished, launching Athena from pickle file
 
+Thu Mar 14 11:32:12 GMT 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on ppevm02.ppe.gla.ac.uk on Thu Mar 14 11:32:26 2019
+====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3383 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
 ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
 ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
 ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
@@ -1798,6 +2499,10 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 1 servers found for host ppevm02.ppe.gla.ac.uk [ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
@@ -1806,13 +2511,26 @@ PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
 IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
 IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
 IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
 IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
 IOVDbSvc             INFO Initialised with 8 connections and 19 folders
 IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3291 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4012 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3031 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -1893,6 +2611,10 @@ GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
 GeoModelSvc.Muo...   INFO Properties have been set as follows: 
 GeoModelSvc.Muo...   INFO     LayoutName                     R
 GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
@@ -2007,6 +2729,7 @@ AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary!
 MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
 MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
 MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
 RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
 MuGM:RDBReadAtlas    INFO After getQuery XtomoData
 In DblQ00Xtomo(data)
@@ -2036,6 +2759,7 @@ MuGM:ProcCutouts     INFO  Processing Cutouts DONE
 MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
 MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
 MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
 MuGM:MuonFactory     INFO  TreeTop added to the Manager
 MuGM:MuonFactory     INFO  Muon Layout R.08.01
 MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
@@ -2059,9 +2783,13 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 44888Kb 	 Time = 1.04S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
@@ -2071,12 +2799,17 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
 RpcRawDataProvider   INFO RpcRawDataProvider::initialize
 RpcRawDataProvider   INFO  'DoSeededDecoding':False
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
 ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
 MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
 MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
 MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
 MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
@@ -2091,25 +2824,32 @@ RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
 TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 878 CLIDRegistry entries for module ALL
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
 TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x161ac100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
 MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
 MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
 MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
 MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
 CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
 CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
 CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
 RpcRdoToRpcPrep...   INFO properties are 
 RpcRdoToRpcPrep...   INFO processingData                     0
 RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
@@ -2124,18 +2864,31 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
 MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
@@ -2147,10 +2900,12 @@ ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
 EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
 EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
 ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
+ClassIDSvc           INFO  getRegistryEntries: read 1159 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
@@ -2228,6 +2983,7 @@ phi high-pt    mu11  mu15   mu15
 
 
 RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
 RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
 RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
 RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
@@ -2265,13 +3021,19 @@ AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value]
 AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
 AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
 AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
 IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524665, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524665, run #327265 2 events processed so far  <<<===
@@ -2311,11 +3073,42 @@ AthenaEventLoopMgr   INFO   ===>>>  start processing event #186568452, run #3272
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186568452, run #327265 19 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186580451, run #327265 19 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
+Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
 CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/25 ((     0.27 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/271 ((     0.60 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216598 ((     0.81 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/300 ((     0.55 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/444470 ((     0.62 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/58804 ((     0.52 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562972 ((     1.13 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8101322 ((     0.97 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/7408 ((     0.58 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/331329 ((     1.05 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/359591 ((     0.51 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422629 ((     0.52 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/363009 ((     0.48 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422831 ((     0.55 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/236289 ((     0.48 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322855 ((     0.52 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3234 ((     0.37 ))s
+IOVDbSvc             INFO  bytes in ((     10.52 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.36 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.24 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.48 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.60 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.58 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.27 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -2339,6 +3132,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=   10 [ms] Ave/Min/Max=0.556(+- 2.29)/    0/   10 [ms] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 10.9  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
index bca879f265a7..88e725e64ae7 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
@@ -1,9 +1,44 @@
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : [function]
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -37,12 +72,116 @@ Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/By
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
 Py:ComponentAccumulator   DEBUG   Merging algorithm MuonCacheCreator to a sequence AthAlgSeq
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
 dynamically loading the flag Detector
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : [function]
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : [function]
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : [function]
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : [function]
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : [function]
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : [function]
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : [function]
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -329,10 +468,169 @@ Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersiste
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 dynamically loading the flag Muon
 Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : 0
+Beam.Type                                : 'collisions'
+Beam.estimatedLuminosity                 : [function]
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : False
+Scheduler.ShowDataDeps                   : False
+Scheduler.ShowDataFlow                   : False
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
-Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
@@ -355,12 +653,31 @@ Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonByteStream.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
 Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
 Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
@@ -583,6 +900,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
@@ -1080,6 +1398,8 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
@@ -1097,8 +1417,13 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Mu
 Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
 Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
 |-Atomic                                  = False
 |-AuditAlgorithms                         = False
 |-AuditBeginRun                           = False
@@ -1110,20 +1435,29 @@ Py:Athena            INFO Print Config
 |-AuditRestart                            = False
 |-AuditStart                              = False
 |-AuditStop                               = False
+|-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f0461dd3e90 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
+|-EvtStore                   @0x7f0461dd3e10 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f0460462098 = []  (default: [])
+|-ExtraOutputs               @0x7f0460462200 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
+|-Members                    @0x7f0460410e18 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f04604622d8 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
+|-Sequential                              = False
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
+|-Timeline                                = True
 |=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
 | |-AuditAlgorithms                         = False
 | |-AuditBeginRun                           = False
@@ -1135,15 +1469,26 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7f0460cef870 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f0460a5db10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DisableViewWarning                      = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460a5da90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f0460462320 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462488 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7f0460cef510 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462368 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7f0460cef540 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f0460cef570 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
 | \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
 | |-AuditAlgorithms                         = False
@@ -1156,29 +1501,45 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
-| |-DoSeededDecoding                        = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f0460a44d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding           @0x7f0463486b00 = True  (default: False)
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460a44cd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f04604623f8 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462518 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f04604623b0 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f0460c6f680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f0460a44dd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-RoIs                       @0x7f0462ce6e70 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7f0460cc9620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7f046098b5d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7f046098b610 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7f0460a23518 = []  (default: [])
+| | |-ExtraOutputs           @0x7f0460a23560 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel            @  0x171a1c0 = 2  (default: 0)
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey   @0x7f0460cef540 = 'RpcCache'  (default: 'StoreGateSvc+')
+| | |-WriteOutRpcSectorLogic @0x7f0463486b20 = False  (default: True)
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -1188,6 +1549,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f046098b6d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f046098b710 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f0460a232d8 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f0460a23290 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1206,15 +1571,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f0460a50d10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460a50c90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f04604627a0 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462878 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f04604627e8 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f0461b828c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1223,7 +1596,12 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
+| | |-Decoder           @0x7f0461b829b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f0460927c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f0460927c50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f046092b9e0 = []  (default: [])
+| | |-ExtraOutputs      @0x7f046092b830 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1235,6 +1613,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f0460927d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f0460927d50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f046092b680 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f046092b7e8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1253,15 +1635,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f0460bf7f50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460bf7ed0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f04604628c0 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462950 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462830 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f0460d70d50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1270,7 +1660,14 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7f0460cef510 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f0461b82c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f04604e7d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f04604e7d50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f04604eca70 = []  (default: [])
+| | |-ExtraOutputs         @0x7f04604ecb48 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x171a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
 | | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
 | | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
@@ -1281,6 +1678,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f04604e7e10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f04604e7e50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f04604ec950 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f04604ec908 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1299,15 +1700,23 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f0460bf7190 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460bf7110 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f04604629e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462908 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462710 = []  (default: [])
 | |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f04604b2050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
 | | |-AuditFinalize                     = False
 | | |-AuditInitialize                   = False
@@ -1316,8 +1725,15 @@ Py:Athena            INFO Print Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7f0460cef870 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f0461b82e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f04604aabd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f04604aac10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f046047c248 = []  (default: [])
+| | |-ExtraOutputs         @0x7f046047c560 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x171a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
 | | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
 | | | |-AuditFinalize                  = False
@@ -1327,6 +1743,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f04604aacd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f04604aad10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f046047c368 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f046047c320 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1345,19 +1765,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f0460b59d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f04603e4690 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f04603e4610 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f04604626c8 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462b00 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462a28 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f04603e4710 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
 | | |-AuditFinalize                                   = False
 | | |-AuditInitialize                                 = False
@@ -1367,11 +1797,16 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f046044b850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f046044b8d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f04604bac68 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f04604bacf8 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f04604c22f0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1389,6 +1824,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f046044b950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f046044b990 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f04604baf38 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f04604baef0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1405,20 +1844,30 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f046045e050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f046043e590 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f046043e510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f0460462998 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462b48 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462b90 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f046043e610 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
 | | |-AuditFinalize                                        = False
 | | |-AuditInitialize                                      = False
@@ -1428,6 +1877,10 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f046044bad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f046044ba10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f046045cb48 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f046045c2d8 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1436,7 +1889,9 @@ Py:Athena            INFO Print Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f046045c710 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f046045cbd8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1452,19 +1907,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f0462d00b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f04603d8550 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f04603d84d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f0460462c20 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462cb0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462c68 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f04603d85d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
 | | |-AuditFinalize                        = False
 | | |-AuditInitialize                      = False
@@ -1475,9 +1940,13 @@ Py:Athena            INFO Print Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
+| | |-DetStore                @0x7f046044bcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f046044bd90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f046046b488 = []  (default: [])
+| | |-ExtraOutputs            @0x7f046046b368 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1504,19 +1973,29 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f0460b225a0 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f0460446b50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f0460446a50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f0460462d88 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462a70 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462cf8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f0460446bd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
 | |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
 | | |-AuditFinalize                  = False
 | | |-AuditInitialize                = False
@@ -1526,7 +2005,13 @@ Py:Athena            INFO Print Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f0462d69b10 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f0460468c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
+| | |-DetStore          @0x7f046044b9d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f0460471090 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f046045f128 = []  (default: [])
+| | |-ExtraOutputs      @0x7f046045fb48 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1539,6 +2024,10 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f04604710d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f0460471110 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f046045fdd0 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f04609a9290 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -1565,6 +2054,11 @@ Py:Athena            INFO Print Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f046044bfd0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f046044bf90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f0460471050 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f0460996998 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f046092bf38 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -1581,524 +2075,472 @@ Py:Athena            INFO Print Config
 | |-AuditRestart                            = False
 | |-AuditStart                              = False
 | |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f046035c390 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f046035c310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f0460462dd0 = []  (default: [])
+| |-ExtraOutputs               @0x7f0460462e18 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f0460462e60 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f046040ecd0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
-/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
-|-Atomic                                  = False
-|-AuditAlgorithms                         = False
-|-AuditBeginRun                           = False
-|-AuditEndRun                             = False
-|-AuditExecute                            = False
-|-AuditFinalize                           = False
-|-AuditInitialize                         = False
-|-AuditReinitialize                       = False
-|-AuditRestart                            = False
-|-AuditStart                              = False
-|-AuditStop                               = False
-|-ContinueEventloopOnFPE                  = False
-|-Enable                                  = True
-|-ErrorCounter                            = 0
-|-ErrorMax                                = 1
-|-FilterCircularDependencies              = True
-|-IgnoreFilterPassed                      = False
-|-IsIOBound                               = False
-|                                            (default: [])
-|-ModeOR                                  = False
-|-MonitorService                          = 'MonitorSvc'
-|-OutputLevel                             = 0
-|-RegisterForContextService               = False
-|-StopOverride                            = False
-|-TimeOut                                 = 0.0
-|=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-DisableViewWarning                      = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |-RegisterForContextService               = False
-| \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
-|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
-| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
-| | | |-AuditFinalize                    = False
-| | | |-AuditInitialize                  = False
-| | | |-AuditReinitialize                = False
-| | | |-AuditRestart                     = False
-| | | |-AuditStart                       = False
-| | | |-AuditStop                        = False
-| | | |-AuditTools                       = False
-| | | |-DataErrorPrintLimit              = 1000
-| | | |-MonitorService                   = 'MonitorSvc'
-| | | |-OutputLevel                      = 0
-| | | |-Sector13Data                     = False
-| | | |-SpecialROBNumber                 = -1
-| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
-| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | |-ShowStatusWords                = False
-| | | |-SkipCoincidence                = False
-| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
-| | |-AuditFinalize                     = False
-| | |-AuditInitialize                   = False
-| | |-AuditReinitialize                 = False
-| | |-AuditRestart                      = False
-| | |-AuditStart                        = False
-| | |-AuditStop                         = False
-| | |-AuditTools                        = False
-| | |-MonitorService                    = 'MonitorSvc'
-| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
-| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
-| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
-| | | |-SpecialROBNumber               = -1
-| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
-|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
-| |-RegisterForContextService               = False
-| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
-| | |-AuditFinalize                     = False
-| | |-AuditInitialize                   = False
-| | |-AuditReinitialize                 = False
-| | |-AuditRestart                      = False
-| | |-AuditStart                        = False
-| | |-AuditStop                         = False
-| | |-AuditTools                        = False
-| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-MonitorService                    = 'MonitorSvc'
-| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
-| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-IsCosmics                      = False
-| | | |-IsOldCosmics                   = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
-| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
-| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
-|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
-| | |-AuditFinalize                                   = False
-| | |-AuditInitialize                                 = False
-| | |-AuditReinitialize                               = False
-| | |-AuditRestart                                    = False
-| | |-AuditStart                                      = False
-| | |-AuditStop                                       = False
-| | |-AuditTools                                      = False
-| | |-DecodeData                                      = True
-| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
-| | |-MonitorService                                  = 'MonitorSvc'
-| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
-| | |-OutputLevel                                     = 0
-| | |-RPCInfoFromDb                                   = False
-| | |                                                    (default: 'Muon::RpcRDO_Decoder')
-| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
-| | |-etaphi_coincidenceTime                          = 20.0
-| | |-overlap_timeTolerance                           = 10.0
-| | |-processingData                                  = False
-| | |-produceRpcCoinDatafromTriggerWords              = True
-| | |-reduceCablingOverlap                            = True
-| | |-solvePhiAmbiguities                             = True
-| | |-timeShift                                       = -12.5
-| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
-| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
-| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
-|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |-Setting                                 = 0
-| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
-| | |-AuditFinalize                                        = False
-| | |-AuditInitialize                                      = False
-| | |-AuditReinitialize                                    = False
-| | |-AuditRestart                                         = False
-| | |-AuditStart                                           = False
-| | |-AuditStop                                            = False
-| | |-AuditTools                                           = False
-| | |-DecodeData                                           = True
-| | |-FillCoinData                                         = True
-| | |-MonitorService                                       = 'MonitorSvc'
-| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
-| | |-OutputCollection                                     = 'TGC_Measurements'
-| | |-OutputLevel                                          = 0
-| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
-| | |-TGCHashIdOffset                                      = 26000
-| | |-dropPrdsWithZeroWidth                                = True
-| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-show_warning_level_invalid_A09_SSW6_hit              = False
-| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
-| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
-|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
-| | |-AuditFinalize                        = False
-| | |-AuditInitialize                      = False
-| | |-AuditReinitialize                    = False
-| | |-AuditRestart                         = False
-| | |-AuditStart                           = False
-| | |-AuditStop                            = False
-| | |-AuditTools                           = False
-| | |-CalibratePrepData                    = True
-| | |-DecodeData                           = True
-| | |-DiscardSecondaryHitTwin              = False
-| | |-DoPropagationCorrection              = False
-| | |-DoTofCorrection                      = True
-| | |-MonitorService                       = 'MonitorSvc'
-| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
-| | |-OutputLevel                          = 0
-| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
-| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
-| | |-SortPrepData                         = False
-| | |-TimeWindowLowerBound                 = -1000000.0
-| | |-TimeWindowSetting                    = 2
-| | |-TimeWindowUpperBound                 = -1000000.0
-| | |-TwinCorrectSlewing                   = False
-| | |-Use1DPrepDataTwin                    = False
-| | |-UseAllBOLTwin                        = False
-| | |-UseTwin                              = True
-| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
-| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
-|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DoSeededDecoding                        = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
-| |-OutputLevel                             = 0
-| |-PrintInputRdo                           = False
-| |-RegisterForContextService               = False
-| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
-| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-CSCHashIdOffset                = 22000
-| | |-DecodeData                     = True
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
-| | |-OutputLevel                    = 0
-| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
-| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
-| | | |-AuditFinalize                   = False
-| | | |-AuditInitialize                 = False
-| | | |-AuditReinitialize               = False
-| | | |-AuditRestart                    = False
-| | | |-AuditStart                      = False
-| | | |-AuditStop                       = False
-| | | |-AuditTools                      = False
-| | | |-IsOnline                        = True
-| | | |-Latency                         = 100.0
-| | | |-MonitorService                  = 'MonitorSvc'
-| | | |-NSamples                        = 4
-| | | |-Noise                           = 3.5
-| | | |-OutputLevel                     = 0
-| | | |-Pedestal                        = 2048.0
-| | | |-ReadFromDatabase                = True
-| | | |-Slope                           = 0.19
-| | | |-SlopeFromDatabase               = False
-| | | |-TimeOffsetRange                 = 1.0
-| | | |-Use2Samples                     = False
-| | | |-integrationNumber               = 12.0
-| | | |-integrationNumber2              = 11.66
-| | | |-samplingTime                    = 50.0
-| | | |-signalWidth                     = 14.4092
-| | | |-timeOffset                      = 46.825
-| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
-| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
-| | | |-AuditFinalize                  = False
-| | | |-AuditInitialize                = False
-| | | |-AuditReinitialize              = False
-| | | |-AuditRestart                   = False
-| | | |-AuditStart                     = False
-| | | |-AuditStop                      = False
-| | | |-AuditTools                     = False
-| | | |-MonitorService                 = 'MonitorSvc'
-| | | |-OutputLevel                    = 0
-| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
-| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
-| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
-|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
-| |-AuditAlgorithms                         = False
-| |-AuditBeginRun                           = False
-| |-AuditEndRun                             = False
-| |-AuditExecute                            = False
-| |-AuditFinalize                           = False
-| |-AuditInitialize                         = False
-| |-AuditReinitialize                       = False
-| |-AuditRestart                            = False
-| |-AuditStart                              = False
-| |-AuditStop                               = False
-| |-Enable                                  = True
-| |-ErrorCounter                            = 0
-| |-ErrorMax                                = 1
-| |-FilterCircularDependencies              = True
-| |-IsIOBound                               = False
-| |-MonitorService                          = 'MonitorSvc'
-| |-OutputLevel                             = 0
-| |-RegisterForContextService               = False
-| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
-| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
-\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+MuonCacheCreator ExtraOutputs []
+MuonCacheCreator MdtCsmCacheKey MdtCsmCache
+MuonCacheCreator TgcCacheKey TgcCache
+MuonCacheCreator CscCacheKey CscCache
+MuonCacheCreator RpcCacheKey RpcCache
+MuonCacheCreator ExtraInputs []
+MuonCacheCreator NeededResources []
+MuonCacheCreator DetStore StoreGateSvc/DetectorStore
+MuonCacheCreator EvtStore StoreGateSvc
+RpcRawDataProvider ExtraOutputs []
+RpcRawDataProvider DoSeededDecoding True
+RpcRawDataProvider EvtStore StoreGateSvc
+RpcRawDataProvider RoIs MURoIs
+RpcRawDataProvider ExtraInputs []
+RpcRawDataProvider RegionSelectionSvc RegSelSvc
+RpcRawDataProvider ProviderTool Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool
+RpcRawDataProvider NeededResources []
+RpcRawDataProvider DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool OutputLevel 2
+RpcRawDataProvider.RPC_RawDataProviderTool RpcContainerCacheKey RpcCache
+RpcRawDataProvider.RPC_RawDataProviderTool WriteOutRpcSectorLogic False
+RpcRawDataProvider.RPC_RawDataProviderTool ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+RpcRawDataProvider.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider ExtraOutputs []
+TgcRawDataProvider EvtStore StoreGateSvc
+TgcRawDataProvider ExtraInputs []
+TgcRawDataProvider NeededResources []
+TgcRawDataProvider ProviderTool Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool
+TgcRawDataProvider DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+TgcRawDataProvider.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider ExtraOutputs []
+MdtRawDataProvider EvtStore StoreGateSvc
+MdtRawDataProvider ExtraInputs []
+MdtRawDataProvider NeededResources []
+MdtRawDataProvider ProviderTool Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool
+MdtRawDataProvider DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool OutputLevel 1
+MdtRawDataProvider.MDT_RawDataProviderTool ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+MdtRawDataProvider.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+MdtRawDataProvider.MDT_RawDataProviderTool CsmContainerCacheKey MdtCsmCache
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider ExtraOutputs []
+CscRawDataProvider EvtStore StoreGateSvc
+CscRawDataProvider ExtraInputs []
+CscRawDataProvider NeededResources []
+CscRawDataProvider ProviderTool Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool
+CscRawDataProvider DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool OutputLevel 1
+CscRawDataProvider.CSC_RawDataProviderTool CscContainerCacheKey CscCache
+CscRawDataProvider.CSC_RawDataProviderTool ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+CscRawDataProvider.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData ExtraOutputs []
+RpcRdoToRpcPrepData DecodingTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool
+RpcRdoToRpcPrepData EvtStore StoreGateSvc
+RpcRdoToRpcPrepData ExtraInputs []
+RpcRdoToRpcPrepData PrintPrepData False
+RpcRdoToRpcPrepData RegionSelectionSvc RegSelSvc
+RpcRdoToRpcPrepData NeededResources []
+RpcRdoToRpcPrepData DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData ExtraOutputs []
+TgcRdoToTgcPrepData DecodingTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool
+TgcRdoToTgcPrepData EvtStore StoreGateSvc
+TgcRdoToTgcPrepData RegionSelectorSvc RegSelSvc
+TgcRdoToTgcPrepData ExtraInputs []
+TgcRdoToTgcPrepData PrintPrepData False
+TgcRdoToTgcPrepData NeededResources []
+TgcRdoToTgcPrepData DetStore StoreGateSvc/DetectorStore
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraOutputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraInputs []
+TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData ExtraOutputs []
+MdtRdoToMdtPrepData DecodingTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool
+MdtRdoToMdtPrepData EvtStore StoreGateSvc
+MdtRdoToMdtPrepData ExtraInputs []
+MdtRdoToMdtPrepData PrintPrepData False
+MdtRdoToMdtPrepData RegionSelectionSvc RegSelSvc
+MdtRdoToMdtPrepData NeededResources []
+MdtRdoToMdtPrepData DetStore StoreGateSvc/DetectorStore
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraOutputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraInputs []
+MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData ExtraOutputs []
+CscRdoToCscPrepData CscRdoToCscPrepDataTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool
+CscRdoToCscPrepData EvtStore StoreGateSvc
+CscRdoToCscPrepData ExtraInputs []
+CscRdoToCscPrepData PrintPrepData False
+CscRdoToCscPrepData RegionSelectionSvc RegSelSvc
+CscRdoToCscPrepData NeededResources []
+CscRdoToCscPrepData DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+CscThesholdClusterBuilder ExtraOutputs []
+CscThesholdClusterBuilder EvtStore StoreGateSvc
+CscThesholdClusterBuilder ExtraInputs []
+CscThesholdClusterBuilder cluster_builder CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool
+CscThesholdClusterBuilder NeededResources []
+CscThesholdClusterBuilder DetStore StoreGateSvc/DetectorStore
+CondInputLoader ExtraOutputs []
+CondInputLoader Load [('CondAttrListCollection', '/MDT/CABLING/MEZZANINE_SCHEMA'), ('CondAttrListCollection', '/EXT/DCS/MAGNETS/SENSORDATA'), ('CondAttrListCollection', '/MDT/CABLING/MAP_SCHEMA')]
+CondInputLoader EvtStore StoreGateSvc
+CondInputLoader ExtraInputs []
+CondInputLoader NeededResources []
+CondInputLoader DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg ExtraOutputs []
+MuonMDT_CablingAlg EvtStore StoreGateSvc
+MuonMDT_CablingAlg ExtraInputs []
+MuonMDT_CablingAlg NeededResources []
+MuonMDT_CablingAlg DetStore StoreGateSvc/DetectorStore
+MuonMDT_CablingAlg MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+MuonMDT_CablingAlg MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.IOVDbMetaDataTool ExtraOutputs []
+ToolSvc.IOVDbMetaDataTool FoldersToBeModified ['/Simulation/Parameters']
+ToolSvc.IOVDbMetaDataTool MinMaxRunNumbers []
+ToolSvc.IOVDbMetaDataTool EvtStore StoreGateSvc
+ToolSvc.IOVDbMetaDataTool AttributesToBeRemoved ['RandomSeedOffset']
+ToolSvc.IOVDbMetaDataTool ExtraInputs []
+ToolSvc.IOVDbMetaDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.ByteStreamMetadataTool ExtraOutputs []
+ToolSvc.ByteStreamMetadataTool EvtStore StoreGateSvc
+ToolSvc.ByteStreamMetadataTool ExtraInputs []
+ToolSvc.ByteStreamMetadataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.Muon::MuonIdHelperTool ExtraOutputs []
+ToolSvc.Muon::MuonIdHelperTool EvtStore StoreGateSvc
+ToolSvc.Muon::MuonIdHelperTool ExtraInputs []
+ToolSvc.Muon::MuonIdHelperTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool ExtraOutputs []
+ToolSvc.RPCCablingDbTool EvtStore StoreGateSvc
+ToolSvc.RPCCablingDbTool ExtraInputs []
+ToolSvc.RPCCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPCCablingDbTool MapCorrectionFolder /RPC/CABLING/MAP_SCHEMA_CORR
+ToolSvc.RPCCablingDbTool MapConfigurationFolder /RPC/CABLING/MAP_SCHEMA
+ToolSvc.RPC_RawDataProviderTool ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool OutputLevel 2
+ToolSvc.RPC_RawDataProviderTool RpcContainerCacheKey RpcCache
+ToolSvc.RPC_RawDataProviderTool WriteOutRpcSectorLogic False
+ToolSvc.RPC_RawDataProviderTool ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
+ToolSvc.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
+ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
+ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool ExtraOutputs []
+ToolSvc.MDTCablingDbTool EvtStore StoreGateSvc
+ToolSvc.MDTCablingDbTool ExtraInputs []
+ToolSvc.MDTCablingDbTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDTCablingDbTool MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
+ToolSvc.MDTCablingDbTool MapFolders /MDT/CABLING/MAP_SCHEMA
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraOutputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RT_InputFiles ['Muon_RT_default.data']
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TimeSlewingCorrection False
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RtFolder /MDT/RTBLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool MeanCorrectionVsR [-5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524]
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool defaultT0 40
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraInputs []
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool UseMLRt True
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool PropagationSpeedBeta 0.85
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TubeFolder /MDT/T0BLOB
+ToolSvc.MuonCalib::MdtCalibDbCoolStrTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
+ToolSvc.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MDT_RawDataProviderTool CsmContainerCacheKey MdtCsmCache
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
+ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool CscContainerCacheKey CscCache
+ToolSvc.CSC_RawDataProviderTool ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
+ToolSvc.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
+ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
+ToolSvc.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
+ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraOutputs []
+ToolSvc.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
+ToolSvc.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+ToolSvc.TgcRdoToTgcPrepDataTool ExtraInputs []
+ToolSvc.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraOutputs []
+ToolSvc.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
+ToolSvc.MdtRdoToMdtPrepDataTool ExtraInputs []
+ToolSvc.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
+ToolSvc.CscRdoToCscPrepDataTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
+ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
+ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
+ToolSvc.CscThesholdClusterBuilderTool ExtraOutputs []
+ToolSvc.CscThesholdClusterBuilderTool split_fitter CscSplitClusterFitter/CscSplitClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool strip_fitter CalibCscStripFitter/CalibCscStripFitter
+ToolSvc.CscThesholdClusterBuilderTool cscCalibTool CscCalibTool/CscCalibTool
+ToolSvc.CscThesholdClusterBuilderTool default_fitter SimpleCscClusterFitter/SimpleCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool precision_fitter QratCscClusterFitter/QratCscClusterFitter
+ToolSvc.CscThesholdClusterBuilderTool EvtStore StoreGateSvc
+ToolSvc.CscThesholdClusterBuilderTool ExtraInputs []
+ToolSvc.CscThesholdClusterBuilderTool DetStore StoreGateSvc/DetectorStore
+EventSelector SharedMemoryTool 
+EventSelector SkipEventSequence []
+EventSelector CounterTool 
+EventSelector Input []
+EventSelector ByteStreamInputSvc ByteStreamInputSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraOutputs []
+EventSelector.xAODMaker::EventInfoSelectorTool EvtStore StoreGateSvc
+EventSelector.xAODMaker::EventInfoSelectorTool BeamCondSvc BeamCondSvc
+EventSelector.xAODMaker::EventInfoSelectorTool ExtraInputs []
+EventSelector.xAODMaker::EventInfoSelectorTool LuminosityTool LuminosityTool
+EventSelector.xAODMaker::EventInfoSelectorTool DetStore StoreGateSvc/DetectorStore
+ByteStreamInputSvc EventStore StoreGateSvc
+ByteStreamInputSvc FullFileName ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+ByteStreamInputSvc AttributeListKeys []
+ByteStreamInputSvc MetaDataStore StoreGateSvc/InputMetaDataStore
+EventPersistencySvc CnvServices ['ByteStreamCnvSvc', 'AthenaPoolCnvSvc/AthenaPoolCnvSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'AthenaPoolCnvSvc']
+ByteStreamCnvSvc InitCnvs ['EventInfo', 'ROIB::RoIBResult', 'HLT::HLTResult']
+ByteStreamCnvSvc EventStore StoreGateSvc
+ByteStreamCnvSvc ROD2ROBmap []
+ByteStreamCnvSvc ByteStreamOutputSvcList []
+ByteStreamCnvSvc GetDetectorMask True
+ROBDataProviderSvc filterRobWithStatus []
+ROBDataProviderSvc filterSubDetWithStatus []
+ByteStreamAddressProviderSvc TypeNames ['TileCellIDC/TileCellIDC', 'MdtDigitContainer/MDT_DIGITS', 'RpcDigitContainer/RPC_DIGITS', 'TgcDigitContainer/TGC_DIGITS', 'CscDigitContainer/CSC_DIGITS', 'ROIB::RecRoIBResult/RecRoIBResult', 'MuCTPI_RIO/MUCTPI_RIO', 'CTP_RIO/CTP_RIO', 'LArRawChannelContainer/LArRawChannels', 'TileRawChannelContainer/TileRawChannelCnt', 'ROIB::RoIBResult/RoIBResult', 'MuCTPI_RDO/MUCTPI_RDO', 'HLT::HLTResult/HLTResult_L2', 'HLT::HLTResult/HLTResult_EF', 'CTP_RDO/CTP_RDO', 'L1TopoRDOCollection/L1TopoRDOCollection']
+ByteStreamAddressProviderSvc TopoProcModuleID [129, 145]
+ByteStreamAddressProviderSvc JetProcModuleID [172, 173]
+ByteStreamAddressProviderSvc CaloClusterProcModuleID [168, 169, 170, 171]
+MetaDataStore IncidentSvc IncidentSvc
+MetaDataStore ProxyProviderSvc ProxyProviderSvc
+InputMetaDataStore IncidentSvc IncidentSvc
+InputMetaDataStore ProxyProviderSvc ProxyProviderSvc
+MetaDataSvc MetaDataContainer MetaDataHdr
+MetaDataSvc CnvSvc AthenaPoolCnvSvc
+ProxyProviderSvc ProviderNames ['ByteStreamAddressProviderSvc', 'IOVDbSvc', 'MetaDataSvc', 'TagInfoMgr']
+GeoModelSvc SupportedGeometry 22
+GeoModelSvc AtlasVersion ATLAS-R2-2016-01-00-01
+GeoModelSvc.MuonDetectorTool ExtraOutputs []
+GeoModelSvc.MuonDetectorTool TheMuonAlignmentTool 
+GeoModelSvc.MuonDetectorTool EvtStore StoreGateSvc
+GeoModelSvc.MuonDetectorTool UseConditionDb 1
+GeoModelSvc.MuonDetectorTool ExtraInputs []
+GeoModelSvc.MuonDetectorTool UseIlinesFromGM 1
+GeoModelSvc.MuonDetectorTool SelectedStJff []
+GeoModelSvc.MuonDetectorTool DetStore StoreGateSvc/DetectorStore
+GeoModelSvc.MuonDetectorTool SelectedStations []
+GeoModelSvc.MuonDetectorTool SelectedStJzz []
+DetDescrCnvSvc IdDictFromRDB True
+DetDescrCnvSvc IdDictName IdDictParser/ATLAS_IDS.xml
+DetDescrCnvSvc DetectorNodes []
+DetDescrCnvSvc DetectorManagers []
+TagInfoMgr ExtraTagValuePairs ['AtlasRelease', 'Athena-22.0.1']
+RPCcablingServerSvc Atlas True
+RPCcablingServerSvc useMuonRPC_CablingSvc True
+RPCcablingServerSvc forcedUse True
+IOVDbSvc Folders ['/MDT/CABLING/MEZZANINE_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_ETA<db>COOLONL_RPC/CONDBR2</db>', '/MDT/RTBLOB<db>COOLOFL_MDT/CONDBR2</db>', '/MDT/T0BLOB<db>COOLOFL_MDT/CONDBR2</db>', '/CSC/STAT <key>CSC_STAT</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/NOISE <key>CSC_NOISE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/PED <key>CSC_PED</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/RMS <key>CSC_RMS</key> <db>COOLOFL_CSC/CONDBR2</db>', '/GLOBAL/BField/Maps <noover/><db>COOLONL_GLOBAL/CONDBR2</db>', '/CSC/T0PHASE <key>CSC_T0PHASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/TGC/CABLING/MAP_SCHEMA<db>COOLONL_TGC/CONDBR2</db>', '/EXT/DCS/MAGNETS/SENSORDATA<db>COOLOFL_DCS/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA_CORR<db>COOLONL_RPC/CONDBR2</db>', '/MDT/CABLING/MAP_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_PHI<db>COOLONL_RPC/CONDBR2</db>', '/CSC/PSLOPE <key>CSC_PSLOPE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA<db>COOLONL_RPC/CONDBR2</db>', '/CSC/T0BASE <key>CSC_T0BASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/FTHOLD <key>CSC_FTHOLD</key> <db>COOLOFL_CSC/CONDBR2</db>']
+IOVDbSvc CacheAlign 3
+IOVDbSvc dbConnection sqlite://;schema=mycool.db;dbname=CONDBR2
+IOVDbSvc GlobalTag CONDBR2-BLKPA-2018-13
+IOVDbSvc FoldersToMetaData ['/GLOBAL/BField/Maps']
+IOVDbSvc DBInstance CONDBR2
+IOVDbSvc overrideTags []
+PoolSvc FrontierRefreshSchema []
+PoolSvc ReadCatalog ['apcfile:poolcond/PoolFileCatalog.xml', 'prfile:poolcond/PoolCat_oflcond.xml', 'apcfile:poolcond/PoolCat_oflcond.xml', 'prfile:poolcond/PoolCat_comcond.xml', 'apcfile:poolcond/PoolCat_comcond.xml']
+PoolSvc MaxFilesOpen 0
+DBReplicaSvc COOLSQLiteVetoPattern /DBRelease/
+MuonRPC_CablingSvc ConfFilePath MuonRPC_Cabling/
+MuonRPC_CablingSvc TheRpcTriggerDbTool RPCTriggerDbTool
+MuonRPC_CablingSvc ConfFileName LVL1confAtlas.data
+MuonRPC_CablingSvc FeetPadThresolds []
+MuonRPC_CablingSvc TheRpcCablingDbTool RPCCablingDbTool/RPCCablingDbTool
+MuonRPC_CablingSvc RPCTriggerRoadsfromCool True
+MuonRPC_CablingSvc CorrFileName LVL1confAtlas.corr
+MuonRPC_CablingSvc CosmicConfiguration True
+TGCcablingServerSvc Atlas True
+TGCcablingServerSvc useMuonTGC_CablingSvc True
+TGCcablingServerSvc forcedUse True
+AthenaPoolCnvSvc InputPoolAttributes []
+AthenaPoolCnvSvc PoolAttributes []
+AthenaPoolCnvSvc PrintInputAttrPerEvt []
+AthenaPoolCnvSvc InputStreamingTool 
+AthenaPoolCnvSvc OutputPoolFileAllocator []
+AthenaPoolCnvSvc MaxFileSizes []
+MuonMDT_CablingSvc DBTool MDTCablingDbTool/MDTCablingDbTool
+MuonMDT_CablingSvc TagInfoManager TagInfoMgr
+MuonMDT_CablingSvc ForcedUse True
+MuonMDT_CablingSvc UseOldCabling False
+AtlasFieldSvc UseDCS True
+MdtCalibrationDbSvc CreateSlewingFunctions False
+MdtCalibrationDbSvc DBTool MuonCalib::MdtCalibDbAsciiTool
+MdtCalibrationDbSvc CreateBFieldFunctions False
+MdtCalibrationDbSvc CreateWireSagFunctions False
+MdtCalibrationSvc DoTofCorrection True
+MdtCalibrationSvc MagFieldSvc AtlasFieldSvc
+MdtCalibrationSvc DoWireSagCorrection False
+MdtCalibrationSvc TimeWindowSetting 2
+MdtCalibrationSvc DoSlewingCorrection False
+MdtCalibrationSvc DoTemperatureCorrection True
+MuonCalib::CscCoolStrSvc ParSGKeys ['CSC_PED', 'CSC_NOISE', 'CSC_PSLOPE', 'CSC_STAT', 'CSC_RMS', 'CSC_FTHOLD', 'CSC_T0BASE', 'CSC_T0PHASE']
+MuonCalib::CscCoolStrSvc ParDefaults ['2048', '3.5', '0.189', '0', '2.56', '0', '0', '0']
+MuonCalib::CscCoolStrSvc ParDataTypes ['float', 'float', 'float', 'uint32_t', 'float', 'float', 'float', 'float']
+MuonCalib::CscCoolStrSvc ParFolders ['/CSC/PED', '/CSC/NOISE', '/CSC/PSLOPE', '/CSC/STAT', '/CSC/RMS', '/CSC/FTHOLD', '/CSC/T0BASE', '/CSC/T0PHASE']
+MuonCalib::CscCoolStrSvc ParCats ['CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'ASM']
+MuonCalib::CscCoolStrSvc ParNames ['ped', 'noise', 'pslope', 'status', 'rms', 'f001', 't0base', 't0phase']
 
 JOs reading stage finished, launching Athena from pickle file
 
+Thu Mar 14 11:38:54 GMT 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode_Cache.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on ppevm02.ppe.gla.ac.uk on Thu Mar 14 11:39:07 2019
+====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3383 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
 ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
 ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
 ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
@@ -2113,6 +2555,10 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 1 servers found for host ppevm02.ppe.gla.ac.uk [ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
@@ -2121,13 +2567,26 @@ PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
 IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
 IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
 IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
 IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
 IOVDbSvc             INFO Initialised with 8 connections and 19 folders
 IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3291 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4012 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3031 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -2208,6 +2667,10 @@ GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
 GeoModelSvc.Muo...   INFO Properties have been set as follows: 
 GeoModelSvc.Muo...   INFO     LayoutName                     R
 GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
@@ -2322,6 +2785,7 @@ AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary!
 MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
 MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
 MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
 RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
 MuGM:RDBReadAtlas    INFO After getQuery XtomoData
 In DblQ00Xtomo(data)
@@ -2351,6 +2815,7 @@ MuGM:ProcCutouts     INFO  Processing Cutouts DONE
 MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
 MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
 MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
 MuGM:MuonFactory     INFO  TreeTop added to the Manager
 MuGM:MuonFactory     INFO  Muon Layout R.08.01
 MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
@@ -2374,9 +2839,13 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 44888Kb 	 Time = 0.96S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
@@ -2386,12 +2855,19 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
 RpcRawDataProvider   INFO RpcRawDataProvider::initialize
-RpcRawDataProvider   INFO  'DoSeededDecoding':False
+RpcRawDataProvider   INFO  'DoSeededDecoding':True
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+RpcRawDataProvi...  DEBUG Property update for OutputLevel : new value = 2
+RpcRawDataProvi...  DEBUG Property update for OutputLevel : new value = 2
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
 ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
 MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
 MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
 MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
 MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
 MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
@@ -2404,21 +2880,34 @@ MuonRPC_CablingSvc   INFO initTrigRoadsModel registered for call-back against fo
 RpcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
 RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
+RpcRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
 RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
+RpcRawDataProvi...  DEBUG Adding private ToolHandle tool RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder (Muon::RpcROD_Decoder)
+RegSelSvc            INFO Initializing RegSelSvc - package version RegionSelector-00-00-00
+RegSelSvc            INFO DetectorDescription version ATLAS-R2-2016-01-00-01 (obtained from GeoModelSvc)
+RegSelSvc            INFO DeltaZ = 168
+RegSelSvc            INFO detector switches: indet=disabled calo=disabled muon=disabled
+RegSelSvc            INFO  registered Listener with IncidentSvc
 TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 987 CLIDRegistry entries for module ALL
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
 TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x13304100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 MdtRawDataProvi...VERBOSE Starting init
 MdtRawDataProvi...VERBOSE Getting m_robDataProvider
 MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 MdtRawDataProvi...VERBOSE Getting MuonDetectorManager
 MdtRawDataProvi...VERBOSE Getting m_decoder
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
 MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
 MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
@@ -2426,15 +2915,20 @@ MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is
 MdtRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
 MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
 MdtRawDataProvi...  DEBUG Adding private ToolHandle tool MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder (MdtROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
 CscRawDataProvi...VERBOSE ServiceLocatorHelper::service: found service JobOptionsSvc
 CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
 CscRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
 CscRawDataProvi...  DEBUG  Found the CscIdHelper. 
 CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
 CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
 CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
 CscRawDataProvi...  DEBUG Adding private ToolHandle tool CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder (Muon::CscROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
 RpcRdoToRpcPrep...   INFO properties are 
 RpcRdoToRpcPrep...   INFO processingData                     0
 RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
@@ -2449,18 +2943,31 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
 MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
 MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
@@ -2472,10 +2979,12 @@ ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
 ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
 EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
 EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
 ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
+ClassIDSvc           INFO  getRegistryEntries: read 1159 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
@@ -2553,6 +3062,7 @@ phi high-pt    mu11  mu15   mu15
 
 
 RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
 RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
 RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
 RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
@@ -2590,13 +3100,22 @@ AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value]
 AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
 AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
 AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
+RegSelSvc            INFO  handle incident type BeginRun
+RegSelSvc            INFO  >>>>>  detectors have been initialized
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
 IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
 MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG fillCollection: starting
@@ -2710,6 +3229,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6048000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 1
@@ -2717,6 +3237,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6050000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
@@ -2726,6 +3247,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6248000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 3
@@ -2733,6 +3255,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6250000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -2742,6 +3265,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6448000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 15
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 5
@@ -2749,6 +3273,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6450000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -2884,12 +3409,14 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6049000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 1
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6051000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 10
@@ -2900,6 +3427,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6249000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 3
@@ -2907,6 +3435,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6251000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
@@ -2915,6 +3444,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6449000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 2 chan: 22
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
@@ -2930,6 +3460,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6451000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
@@ -3037,18 +3568,21 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x604a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 1
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 0
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6052000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
 MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 2
 MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x624a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 0 chan: 20
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
@@ -3060,6 +3594,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 2
 MdtRawDataProvi...  DEBUG Eta  : 2
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6252000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
 MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 7 chan: 12
@@ -3071,6 +3606,7 @@ MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result:
 MdtRawDataProvi...  DEBUG Name : 4
 MdtRawDataProvi...  DEBUG Eta  : 1
 MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x644a000000000000 does not exist, create it 
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
 MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
@@ -3092,6 +3628,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x80
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x80 24 8 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 8
@@ -3101,28 +3638,55 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 112
+CscRawDataProvi...  DEBUG RPU Header word 0x5000070
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 112
 CscRawDataProvi...  DEBUG SCA Address = 724315438
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20202
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x600006c
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 108
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 12
+CscRawDataProvi...  DEBUG cluster location word 0x10a2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31725  6  51 :: measphi0 L2 strId 46 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.2.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10a35
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 54
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31733  6  51 :: measphi0 L2 strId 54 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.0.54]
+CscRawDataProvi...  DEBUG cluster location word 0x10c2c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 45
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31916  7  51 :: measphi0 L3 strId 45 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.0.45]
+CscRawDataProvi...  DEBUG cluster location word 0x10c37
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 56
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31927  7  51 :: measphi0 L3 strId 56 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.3.0.56]
+CscRawDataProvi...  DEBUG cluster location word 0x10e2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32109  8  51 :: measphi0 L4 strId 46 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10e39
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 58
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32121  8  51 :: measphi0 L4 strId 58 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.58]
+CscRawDataProvi...  DEBUG cluster location word 0x10903
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55491  9  51 :: measphi1 L1 strId 4 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.1.1.4]
+CscRawDataProvi...  DEBUG cluster location word 0x10b08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55544  9  51 :: measphi1 L2 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x10b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55566  9  51 :: measphi1 L2 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10d07
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 8
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55591  9  51 :: measphi1 L3 strId 8 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.1.8]
+CscRawDataProvi...  DEBUG cluster location word 0x10d1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55614  9  51 :: measphi1 L3 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.3.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10f08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55640  9  51 :: measphi1 L4 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.1.9]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 12 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3131,6 +3695,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x81
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x81 16 0 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 0
@@ -3140,38 +3705,52 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 122
+CscRawDataProvi...  DEBUG RPU Header word 0xd00007a
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 122
 CscRawDataProvi...  DEBUG SCA Address = 2358087311
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000002
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x7000076
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 7
 CscRawDataProvi...  DEBUG Cluster Data Words = 118
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
 CscRawDataProvi...  DEBUG cluster location word 0x810
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 17
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 784  0  50 :: measphi0 L1 strId 17 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.1.0.17]
 CscRawDataProvi...  DEBUG cluster location word 0x868
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 105
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 872  0  50 :: measphi0 L1 strId 105 nStr 7 T0 nSampWords 14 [7.50.-1.1.1.2.1.0.105]
 CscRawDataProvi...  DEBUG cluster location word 0xe11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000a 18
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1361  3  50 :: measphi0 L4 strId 18 nStr 10 T0 nSampWords 20 [7.50.-1.1.1.2.4.0.18]
 CscRawDataProvi...  DEBUG cluster location word 0xe41
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 66
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1409  3  50 :: measphi0 L4 strId 66 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.4.0.66]
 CscRawDataProvi...  DEBUG cluster location word 0x916
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24790  4  50 :: measphi1 L1 strId 23 nStr 5 T0 nSampWords 10 [7.50.-1.1.1.2.1.1.23]
 CscRawDataProvi...  DEBUG cluster location word 0xb16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24838  4  50 :: measphi1 L2 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.2.1.23]
 CscRawDataProvi...  DEBUG cluster location word 0xd03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24867  4  50 :: measphi1 L3 strId 4 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.4]
 CscRawDataProvi...  DEBUG cluster location word 0xd15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24885  4  50 :: measphi1 L3 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.22]
 CscRawDataProvi...  DEBUG cluster location word 0xd2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24909  4  50 :: measphi1 L3 strId 46 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.46]
 CscRawDataProvi...  DEBUG cluster location word 0xf15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24933  4  50 :: measphi1 L4 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.22]
 CscRawDataProvi...  DEBUG cluster location word 0xf1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24942  4  50 :: measphi1 L4 strId 31 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.31]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3180,6 +3759,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x82
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x82 25 9 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 9
@@ -3189,6 +3769,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 50
+CscRawDataProvi...  DEBUG RPU Header word 0x5000032
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 50
@@ -3198,13 +3779,24 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x200002e
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 2
 CscRawDataProvi...  DEBUG Cluster Data Words = 46
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 5
+CscRawDataProvi...  DEBUG cluster location word 0x12c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33431  7  51 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.51.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x12e16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33622  8  51 :: measphi0 L4 strId 23 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.23]
+CscRawDataProvi...  DEBUG cluster location word 0x12e1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 27
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33626  8  51 :: measphi0 L4 strId 27 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x12d24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56004  9  51 :: measphi1 L3 strId 37 nStr 4 T0 nSampWords 8 [7.51.-1.2.1.2.3.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x12f24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56052  9  51 :: measphi1 L4 strId 37 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.1.37]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 5 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3213,6 +3805,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x83
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x83 17 1 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 1
@@ -3222,27 +3815,52 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 116
+CscRawDataProvi...  DEBUG RPU Header word 0xd000074
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 116
 CscRawDataProvi...  DEBUG SCA Address = 1920169077
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010102
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x6000070
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 112
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
+CscRawDataProvi...  DEBUG cluster location word 0x2818
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2328  0  50 :: measphi0 L1 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2a17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2519  1  50 :: measphi0 L2 strId 24 nStr 6 T0 nSampWords 12 [7.50.-1.2.1.2.2.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2711  2  50 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2e18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2904  3  50 :: measphi0 L4 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2ebc
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 189
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 3068  3  50 :: measphi0 L4 strId 189 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.0.189]
+CscRawDataProvi...  DEBUG cluster location word 0x2909
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25161  4  50 :: measphi1 L1 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2b09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25209  4  50 :: measphi1 L2 strId 10 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.2.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25257  4  50 :: measphi1 L3 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25270  4  50 :: measphi1 L3 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.3.1.23]
+CscRawDataProvi...  DEBUG cluster location word 0x2f09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25305  4  50 :: measphi1 L4 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2f28
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 41
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25336  4  50 :: measphi1 L4 strId 41 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.1.41]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3251,6 +3869,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x84
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x84 26 10 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 10
@@ -3260,6 +3879,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 114
+CscRawDataProvi...  DEBUG RPU Header word 0x5000072
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 114
@@ -3269,14 +3889,27 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x400006e
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
 CscRawDataProvi...  DEBUG Cluster Data Words = 110
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 6
+CscRawDataProvi...  DEBUG cluster location word 0x14c03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 34947  7  51 :: measphi0 L3 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.3.1.2.3.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x14c66
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000013 103
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 35046  7  51 :: measphi0 L3 strId 103 nStr 19 T0 nSampWords 38 [7.51.-1.3.1.2.3.0.103]
+CscRawDataProvi...  DEBUG cluster location word 0x1491b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56283  9  51 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x14d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 10
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56361  9  51 :: measphi1 L3 strId 10 nStr 6 T0 nSampWords 12 [7.51.-1.3.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x14d1f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56383  9  51 :: measphi1 L3 strId 32 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.3.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x14d23
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000d 36
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56387  9  51 :: measphi1 L3 strId 36 nStr 13 T0 nSampWords 26 [7.51.-1.3.1.2.3.1.36]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 6 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3285,6 +3918,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x85
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x85 18 2 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 2
@@ -3294,23 +3928,40 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 90
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005a
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 90
 CscRawDataProvi...  DEBUG SCA Address = 1482250843
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20100
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x4000056
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
 CscRawDataProvi...  DEBUG Cluster Data Words = 86
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 7
+CscRawDataProvi...  DEBUG cluster location word 0x4a18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4056  1  50 :: measphi0 L2 strId 25 nStr 8 T0 nSampWords 16 [7.50.-1.3.1.2.2.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4a3a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 59
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4090  1  50 :: measphi0 L2 strId 59 nStr 4 T0 nSampWords 8 [7.50.-1.3.1.2.2.0.59]
+CscRawDataProvi...  DEBUG cluster location word 0x4c1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 27
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4250  2  50 :: measphi0 L3 strId 27 nStr 6 T0 nSampWords 12 [7.50.-1.3.1.2.3.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x4b11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 18
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25601  4  50 :: measphi1 L2 strId 18 nStr 3 T0 nSampWords 6 [7.50.-1.3.1.2.2.1.18]
+CscRawDataProvi...  DEBUG cluster location word 0x4b18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 25
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25608  4  50 :: measphi1 L2 strId 25 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 31
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25614  4  50 :: measphi1 L2 strId 31 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x4d14
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 21
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25652  4  50 :: measphi1 L3 strId 21 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.3.1.21]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 7 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3319,6 +3970,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x86
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x86 27 11 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 11
@@ -3328,6 +3980,7 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 58
+CscRawDataProvi...  DEBUG RPU Header word 0x500003a
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 58
@@ -3337,12 +3990,21 @@ CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 C
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x1000036
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 1
 CscRawDataProvi...  DEBUG Cluster Data Words = 54
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 4
+CscRawDataProvi...  DEBUG cluster location word 0x16c2f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 48
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36527  7  51 :: measphi0 L3 strId 48 nStr 3 T0 nSampWords 6 [7.51.-1.4.1.2.3.0.48]
+CscRawDataProvi...  DEBUG cluster location word 0x16c56
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 87
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36566  7  51 :: measphi0 L3 strId 87 nStr 8 T0 nSampWords 16 [7.51.-1.4.1.2.3.0.87]
+CscRawDataProvi...  DEBUG cluster location word 0x16e57
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 88
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36759  8  51 :: measphi0 L4 strId 88 nStr 7 T0 nSampWords 14 [7.51.-1.4.1.2.4.0.88]
+CscRawDataProvi...  DEBUG cluster location word 0x16f04
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 5
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 56788  9  51 :: measphi1 L4 strId 5 nStr 5 T0 nSampWords 10 [7.51.-1.4.1.2.4.1.5]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 4 for RPU ID 5
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3351,6 +4013,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x87
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x87 19 3 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 3
@@ -3360,26 +4023,49 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 92
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005c
 CscRawDataProvi...  DEBUG RPU ID original = 13
 CscRawDataProvi...  DEBUG RPU ID Updated = 11
 CscRawDataProvi...  DEBUG RPU size = 92
 CscRawDataProvi...  DEBUG SCA Address = 404298267
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010101
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x6000058
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
 CscRawDataProvi...  DEBUG Cluster Data Words = 88
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 10
+CscRawDataProvi...  DEBUG cluster location word 0x6855
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 86
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5461  0  50 :: measphi0 L1 strId 86 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.1.0.86]
+CscRawDataProvi...  DEBUG cluster location word 0x6a7c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 125
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5692  1  50 :: measphi0 L2 strId 125 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.0.125]
+CscRawDataProvi...  DEBUG cluster location word 0x6c77
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 120
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5879  2  50 :: measphi0 L3 strId 120 nStr 5 T0 nSampWords 10 [7.50.-1.4.1.2.3.0.120]
+CscRawDataProvi...  DEBUG cluster location word 0x6e71
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 114
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 6065  3  50 :: measphi0 L4 strId 114 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.0.114]
+CscRawDataProvi...  DEBUG cluster location word 0x691b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25947  4  50 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x691f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25951  4  50 :: measphi1 L1 strId 32 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x6924
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25956  4  50 :: measphi1 L1 strId 37 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x6b17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25991  4  50 :: measphi1 L2 strId 24 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6d17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 24
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26039  4  50 :: measphi1 L3 strId 24 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.3.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6f2a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 43
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26106  4  50 :: measphi1 L4 strId 43 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.1.43]
 CscRawDataProvi...  DEBUG ****Total Cluster count = 10 for RPU ID 11
 CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
@@ -3388,6 +4074,7 @@ CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
 CscRawDataProvi...  DEBUG  
 CscRawDataProvi...  DEBUG ===================================================
 CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
 CscRawDataProvi...  DEBUG Online ROD id is 0x88
 CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x88 28 12 106
 CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 12
@@ -3397,28 +4084,48 @@ CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
 CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
 CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
 CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 74
+CscRawDataProvi...  DEBUG RPU Header word 0x500004a
 CscRawDataProvi...  DEBUG RPU ID original = 5
 CscRawDataProvi...  DEBUG RPU ID Updated = 5
 CscRawDataProvi...  DEBUG RPU size = 74
 CscRawDataProvi...  DEBUG SCA Address = 1499093852
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000001
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
 CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x5000046
 CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 5
 CscRawDataProvi...  DEBUG Cluster Data Words = 70
 CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 8
+CscRawDataProvi...  DEBUG cluster location word 0x18831
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 50
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37681  5  51 :: measphi0 L1 strId 50 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.50]
+CscRawDataProvi...  DEBUG cluster location word 0x188ab
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 172
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37803  5  51 :: measphi0 L1 strId 172 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.172]
+CscRawDataProvi...  DEBUG cluster location word 0x18e03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 38211  8  51 :: measphi0 L4 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.5.1.2.4.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x18908
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57032  9  51 :: measphi1 L1 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x1892e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 47
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57070  9  51 :: measphi1 L1 strId 47 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.1.1.47]
+CscRawDataProvi...  DEBUG cluster location word 0x18b00
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 1
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57072  9  51 :: measphi1 L2 strId 1 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.2.1.1]
+CscRawDataProvi...  DEBUG cluster location word 0x18d0d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 14
 CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57133  9  51 :: measphi1 L3 strId 14 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.3.1.14]
+CscRawDataProvi...  DEBUG cluster location word 0x18f1c
 CscRawDataProvi...WARNING DEBUG message limit (500) reached for CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder. Suppressing further output.
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524665, run #327265 1 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3428,8 +4135,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524665, run #327265 2 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186542447, run #327265 2 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3439,8 +4148,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186542447, run #327265 3 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186543405, run #327265 3 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3450,8 +4161,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186543405, run #327265 4 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186548387, run #327265 4 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3461,8 +4174,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186548387, run #327265 5 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186515186, run #327265 5 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3472,8 +4187,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186515186, run #327265 6 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186556019, run #327265 6 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3483,8 +4200,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186556019, run #327265 7 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186542866, run #327265 7 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3494,8 +4213,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186542866, run #327265 8 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186537901, run #327265 8 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3505,8 +4226,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186537901, run #327265 9 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186517811, run #327265 9 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3516,8 +4239,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186517811, run #327265 10 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186534221, run #327265 10 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3527,8 +4252,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186534221, run #327265 11 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186540986, run #327265 11 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3538,8 +4265,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186540986, run #327265 12 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186535104, run #327265 12 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3549,8 +4278,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186535104, run #327265 13 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186539903, run #327265 13 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3560,8 +4291,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186539903, run #327265 14 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186552713, run #327265 14 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3571,8 +4304,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186552713, run #327265 15 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524730, run #327265 15 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3582,8 +4317,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524730, run #327265 16 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186547632, run #327265 16 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3593,8 +4330,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186547632, run #327265 17 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186555621, run #327265 17 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3604,8 +4343,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186555621, run #327265 18 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186568452, run #327265 18 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3615,8 +4356,10 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186568452, run #327265 19 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #186580451, run #327265 19 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
 MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
 MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
 MdtRawDataProvi...  DEBUG After processing numColls=1136
@@ -3626,12 +4369,45 @@ CscRawDataProvi...  DEBUG Created container using cache for CscCache
 CscRawDataProvi...  DEBUG Before processing numColls=0
 CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
 CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
+Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
 CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
+RegSelSvc            INFO Finalizing RegSelSvc
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/25 ((     0.29 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/271 ((     0.66 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216598 ((     0.80 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/300 ((     0.43 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/444470 ((     0.68 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/58804 ((     0.43 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562972 ((     1.07 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8101322 ((     1.02 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/7408 ((     0.56 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/331329 ((     0.71 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/359591 ((     2.08 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422629 ((     0.59 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/363009 ((     0.50 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422831 ((     0.54 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/236289 ((     0.48 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322855 ((     1.12 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3234 ((     0.37 ))s
+IOVDbSvc             INFO  bytes in ((     12.33 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.23 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.20 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     6.39 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.66 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.56 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.29 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -3655,12 +4431,17 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 10.7  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Listing sources of suppressed message: 
+=====================================================
  Message Source              |   Level |    Count
+-----------------------------+---------+-------------
  CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder|   DEBUG |    35169
  MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder|   DEBUG |   854603
+=====================================================
 Py:Athena            INFO leaving with code 0: "successful run"
-- 
GitLab


From 0e4f8bddf6e475aac0ef2c9b67a9390590043f94 Mon Sep 17 00:00:00 2001
From: Walter Lampl <Walter.Lampl@cern.ch>
Date: Thu, 14 Mar 2019 15:47:31 +0100
Subject: [PATCH 034/163] split TileCoolMgr into a class-definition that is
 compatible with run-3 style configuration flags and a separte file for
 backward-compatiblity

---
 .../TileConditions/python/TileCoolMgr.py      | 352 +----------------
 .../TileConditions/python/TileCoolMgrClass.py | 356 ++++++++++++++++++
 2 files changed, 364 insertions(+), 344 deletions(-)
 create mode 100644 TileCalorimeter/TileConditions/python/TileCoolMgrClass.py

diff --git a/TileCalorimeter/TileConditions/python/TileCoolMgr.py b/TileCalorimeter/TileConditions/python/TileCoolMgr.py
index 2726edd2e8b9..ebd2c81d3ac6 100644
--- a/TileCalorimeter/TileConditions/python/TileCoolMgr.py
+++ b/TileCalorimeter/TileConditions/python/TileCoolMgr.py
@@ -4,258 +4,16 @@
 #author: nils.gollub@cern.ch
 #modifications: lukas.pribyl@cern.ch
 
-import string
-
-class TileCoolMgr:
-    
-    #_______________________________________________________________
-    def __init__(self):
-
-        #=== initialize logger with INFO level
-        from AthenaCommon.Logging import logging
-        self.__log = logging.getLogger( 'TileCoolMgr' )
-        #        self.__log.setLevel(logging.INFO)
-        
-        #=== Master dictionary for: condId -> [folder, connStr, tag, folder2, type]
-        self.__idDict = {}
-
-        #=== Available folder types
-        self.__validTypes = ["SplitMC", "SplitOnline", "OfflineOnly", "Sqlite"]
-
-        #=== do we run on real data (not MC)?
-        from AthenaCommon.GlobalFlags import globalflags
-        self.__globalflags = globalflags
-        self.isData = globalflags.DataSource()=='data'
-        from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-        self.__athenaCommonFlags = athenaCommonFlags
-
-        
-    #_______________________________________________________________
-    def addSource(self, condId, folder, connStr, tag, folder2, type, key = ""):
-        if type not in self.__validTypes:
-            self.__log.error("Folder type \'%s\' not recognized!" % type)
-        if (type != "OfflineOnly") and (folder2 == ""):
-            self.__log.error("For folder type \'%s\' second folder name required!" % type)
-        self.__idDict[condId] = [folder, connStr, tag, folder2, type, key]
-
-    #_______________________________________________________________
-    def getFolder(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            return idInfo[0]
-    #_______________________________________________________________
-    def getKey(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        elif idInfo[5] != "": return idInfo[5]
-        elif len(self.getTag(condId)):   return self.getTag(condId)
-        else:
-            folder = self.getActualFolder(condId)
-            if folder: return folder
-            else:
-                self.__log.error("Cannot find out key for  \'%s\'!" % condId)
-                return None
-
-    #_______________________________________________________________
-    def getFolderTwo(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            return idInfo[3]
-
-    #_______________________________________________________________
-    def isSplitMC(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            if idInfo[4]=="SplitMC": return True
-            else: return False
-
-    #_______________________________________________________________
-    def isSplitOnline(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            if idInfo[4]=="SplitOnline": return True
-            else: return False            
-
-    #_______________________________________________________________
-    def isOfflineOnly(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            if idInfo[4]=="OfflineOnly": return True
-            else: return False            
-
-    #_______________________________________________________________
-    def isSqlite(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-            return None
-        else:
-            if idInfo[4]=="Sqlite": return True
-            else: return False
-
-
-    #_______________________________________________________________
-    def setFolder(self, condId, folder):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            self.__log.info("Setting folder for condId \'%s\' to \'%s\'" % (condId,folder))
-            idInfo[0] = folder
-            idInfo[3] = folder
-
-    #_______________________________________________________________
-    def setDbConn(self, condId, dbConn):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            self.__log.info("Setting dbConn for condId \'%s\' to \'%s\'" % (condId,dbConn))
-            idInfo[1] = dbConn
-            from string import find
-            if find(dbConn,".db")>0:
-                self.__log.info("The data source looks like sqlite file (.db), setting folder type to Sqlite")
-                self.__idDict[condId][4] = "Sqlite"
-                
-    #_______________________________________________________________
-    def getDbConn(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            return idInfo[1]
-
-    #_______________________________________________________________
-    def setTag(self, condId, tag):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            if len(tag) > 0:
-                if not tag.startswith('Tile'):
-                    tag = self.getTagPrefix(self.getActualFolder(condId)) + tag
-            self.__log.info("Setting tag for condId \'%s\' to \'%s\'" % (condId,tag))
-            idInfo[2] = tag
-
-    #_______________________________________________________________
-    def getTag(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            return idInfo[2]
-
-    #_______________________________________________________________
-    def setGlobalDbConn(self, dbConn):
-        for condId in self.__idDict.keys():
-            self.setDbConn(condId,dbConn)
-            
-    #_______________________________________________________________
-    def setGlobalTag(self, tag):
-        for condId in self.__idDict.keys():
-            self.setTag(condId,tag)
-
-    #_______________________________________________________________
-    def getTagPrefix(self, coolFolder):
-        folderTag=""
-        for i in coolFolder.lower().split("/")[1:]:
-            folderTag+=i.capitalize()
-        folderTag+="-"
-        return folderTag
-        
-    #_______________________________________________________________
-    def getConnectionString(self, condId):
-        idInfo = self.__idDict.get(condId)
-        if not idInfo:
-            self.__log.error("CondId \'%s\' not recognized!" % condId)
-        else:
-            fullStr = idInfo[1]+" "
-            if len(idInfo[2]):
-                fullStr += idInfo[2]+" "
-            fullStr += idInfo[0]
-            return fullStr
-
-
-    def isMC(self):
-        return self.__globalflags.DataSource() != 'data'
-
-    def isOnline(self):
-        return self.__athenaCommonFlags.isOnline()
-
-
-    def isSourceAvailable(self, source):
-        return source in  self.__idDict
-
-
-    def getActualFolder(self, condId):
-        if self.isOfflineOnly(condId): return self.getFolder(condId)
-        elif self.isSplitOnline(condId): 
-            if self.isOnline() and not self.isMC(): return self.getFolder(condId)
-            else:                                   return self.getFolderTwo(condId)
-        elif self.isSplitMC(condId):
-            if self.isMC(): return self.getFolderTwo(condId)
-            else:           return self.getFolder(condId)
-        elif self.isSqlite(condId): return self.getFolder(condId)
-        else: return None
-
-
-#--------------------------------------------------------------------------------------------------------
-#=== create object of the user 
-#--------------------------------------------------------------------------------------------------------
-
-#=== fill with default folders:
-tileCoolMgr = TileCoolMgr()
-defConnStr = 'TILE'
-oflConnStr = 'TILE_OFL'
-#--- energy calibration
-
-tileCoolMgr.addSource('oflLasLin',    '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN',     'SplitOnline')
-tileCoolMgr.addSource('oflCes',       '/TILE/ONL01/CALIB/CES',     defConnStr, "", '/TILE/OFL02/CALIB/CES',         'SplitOnline')
-tileCoolMgr.addSource('oflEms',       '/TILE/ONL01/CALIB/EMS',     defConnStr, "", '/TILE/OFL02/CALIB/EMS',         'SplitOnline')
-
-#--- online calib is taken from the folder tag defined in TileOfcCoolPlugin 
-#--- the tags are fixed only in the case of real data - in both online and offline schema.
-tileCoolMgr.addSource('onlCisLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitMC')
-tileCoolMgr.addSource('onlLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN',     'SplitMC')
-tileCoolMgr.addSource('onlCes',    '/TILE/ONL01/CALIB/CES',     defConnStr, "", '/TILE/OFL02/CALIB/CES',         'SplitMC')
-tileCoolMgr.addSource('onlEms',    '/TILE/ONL01/CALIB/EMS',     defConnStr, "", '/TILE/OFL02/CALIB/EMS',         'SplitMC')
-
-#--- MuID
-tileCoolMgr.addSource('onlMuID'  , '/TILE/ONL01/MUID',  defConnStr, "", '/TILE/ONL01/MUID',   'SplitMC')
-
-#--- noise
-tileCoolMgr.addSource('onlNoise1gOfni', '/TILE/ONL01/NOISE/OFNI', defConnStr, "", '/TILE/ONL01/NOISE/OFNI', 'SplitMC')
-
-
-#--- status
-tileCoolMgr.addSource('onlStatAdc', '/TILE/ONL01/STATUS/ADC', defConnStr, "", '/TILE/ONL01/STATUS/ADC', 'SplitMC')
+from TileConditions.TileCoolMgrClass import TileCoolMgr
+from AthenaCommon.GlobalFlags import globalflags
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from IOVDbSvc.CondDB import conddb
 
-#--- OFCs OF2
-tileCoolMgr.addSource('OfcOf2CisPl100', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC')
-tileCoolMgr.addSource('OfcOf2CisPl5p2', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC')
-tileCoolMgr.addSource('OfcOf2Las',      '/TILE/ONL01/FILTER/OF2/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/LAS', 'SplitMC')
+import string
 
-#--- OFCs OF1
-tileCoolMgr.addSource('OfcOf1CisPl100', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC')
-tileCoolMgr.addSource('OfcOf1CisPl5p2', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC')
-tileCoolMgr.addSource('OfcOf1Las',      '/TILE/ONL01/FILTER/OF1/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/LAS', 'SplitMC')
+tileCoolMgr = TileCoolMgr(isMC=(globalflags.DataSource()!='data'), 
+                          isOnline=athenaCommonFlags.isOnline(),
+                          dbInstance=conddb.GetInstance())
 
 def GetTileOfcCoolSource(ofcType, runType = 'PHY'):
     return 'Ofc' + string.capwords(ofcType,'/').replace('/','') + runType.lower().capitalize()
@@ -270,99 +28,5 @@ def AddTileOfcCoolSource(ofcType, runType = 'PHY', splitOnline = False):
     else:
         tileCoolMgr.addSource(ofcSource, ofcFolder, defConnStr, "", ofcFolder, 'SplitMC')
 
-from IOVDbSvc.CondDB import conddb
-if conddb.GetInstance() == 'CONDBR2':
-    
-    #--- OFCs
-    tileCoolMgr.addSource('OfcOf2Phy',    '/TILE/ONL01/FILTER/OF2/PHY',  defConnStr, "", '/TILE/OFL02/FILTER/OF2/PHY', 'SplitOnline')
-    tileCoolMgr.addSource('OfcOf1Phy',    '/TILE/ONL01/FILTER/OF1/PHY',  defConnStr, "", '/TILE/OFL02/FILTER/OF1/PHY', 'SplitOnline')
-
-    #--- energy calibration
-    tileCoolMgr.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN',   defConnStr, "", '/TILE/OFL02/CALIB/CIS/LIN', 'SplitOnline')
-    tileCoolMgr.addSource('oflCisFitNln', '/TILE/ONL01/CALIB/CIS/NLN',   defConnStr, "", '/TILE/OFL02/CALIB/CIS/NLN', 'SplitOnline')
-    tileCoolMgr.addSource('oflLasNln',    '/TILE/ONL01/CALIB/LAS/NLN',   defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline')
-    tileCoolMgr.addSource('oflLasFib',    '/TILE/OFL02/CALIB/LAS/FIBER', oflConnStr, "", "", 'OfflineOnly')
-    
-    #--- pulse shape
-    tileCoolMgr.addSource('oflPlsPhy',      '/TILE/OFL02/PULSESHAPE/PHY',          oflConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflPlsLas',      '/TILE/OFL02/PULSESHAPE/LAS',          oflConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflPlsCisPl100', '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', oflConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflPlsCisPl5p2', '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', oflConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflPlsCisLk100', '/TILE/OFL02/PULSESHAPE/CIS/LEAK100',  oflConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflPlsCisLk5p2', '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2',  oflConnStr, "", "", 'OfflineOnly')
-    
-    #--- noise
-    tileCoolMgr.addSource('oflNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline')
-    tileCoolMgr.addSource('onlNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflNoiseAcr', '/TILE/OFL02/NOISE/AUTOCR', oflConnStr, "", "", 'OfflineOnly')
-
-    #--- timing
-    tileCoolMgr.addSource('oflTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline')
-    tileCoolMgr.addSource('onlTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline')
-    tileCoolMgr.addSource('onlTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/GAP/LAS', 'SplitOnline')
-    tileCoolMgr.addSource('onlTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", "", 'OfflineOnly')
-    tileCoolMgr.addSource('oflTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline')
-    tileCoolMgr.addSource('onlTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", "", 'OfflineOnly')
-
-    #--- integrator
-    tileCoolMgr.addSource('oflIntGain', '/TILE/ONL01/INTEGRATOR',  defConnStr, "", '/TILE/OFL02/INTEGRATOR',   'SplitOnline')
-
-    #--- status
-    tileCoolMgr.addSource('oflStatAdc', '/TILE/OFL02/STATUS/ADC', oflConnStr, "", "", 'OfflineOnly')
-
-
-    #--- TMDB
-    tileCoolMgr.addSource('onlTmdbThresholdPhy', '/TILE/ONL01/TMDB/THRESHOLD/PHY', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/PHY', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbThresholdLas', '/TILE/ONL01/TMDB/THRESHOLD/LAS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/LAS', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbThresholdCis', '/TILE/ONL01/TMDB/THRESHOLD/CIS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/CIS', 'SplitMC')
-
-    tileCoolMgr.addSource('onlTmdbDelayPhy', '/TILE/ONL01/TMDB/DELAY/PHY', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/PHY', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbDelayLas', '/TILE/ONL01/TMDB/DELAY/LAS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/LAS', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbDelayCis', '/TILE/ONL01/TMDB/DELAY/CIS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/CIS', 'SplitMC')
-
-    tileCoolMgr.addSource('onlTmdbTmfPhy', '/TILE/ONL01/TMDB/TMF/PHY', defConnStr, "", '/TILE/ONL01/TMDB/TMF/PHY', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbTmfLas', '/TILE/ONL01/TMDB/TMF/LAS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/LAS', 'SplitMC')
-    tileCoolMgr.addSource('onlTmdbTmfCis', '/TILE/ONL01/TMDB/TMF/CIS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/CIS', 'SplitMC')
-
-    tileCoolMgr.addSource('onlTmdbCalibPhy', '/TILE/ONL01/TMDB/CALIB/PHY', defConnStr, "", '/TILE/ONL01/TMDB/CALIB/PHY', 'SplitMC')
-
-    #--- noise
-    tileCoolMgr.addSource('oflDspThreshold', '/TILE/ONL01/DSP/THRESHOLD', defConnStr, "", '/TILE/OFL02/DSP/THRESHOLD', 'SplitOnline')
-
-    
-else:
-
-    #--- OFCs
-    tileCoolMgr.addSource('OfcOf2Phy',      '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF2/PHY', 'SplitMC')
-    tileCoolMgr.addSource('OfcOf1Phy',      '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF1/PHY', 'SplitMC')
-
-    #--- energy calibration
-    tileCoolMgr.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitOnline')
-    tileCoolMgr.addSource('oflCisFitNln', '/TILE/OFL01/CALIB/CIS/FIT/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/NLN', 'SplitOnline')
-    tileCoolMgr.addSource('oflLasNln',    '/TILE/OFL01/CALIB/LAS/NLN',     defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN',     'SplitOnline')
-    tileCoolMgr.addSource('oflLasFib',    '/TILE/OFL01/CALIB/LAS/FIBER',   defConnStr, "", '/TILE/OFL02/CALIB/LAS/FIBER',   'SplitOnline')    
-    #--- pulse shape
-    tileCoolMgr.addSource('oflPlsPhy',      '/TILE/OFL01/PULSESHAPE/PHY',          defConnStr, "", '/TILE/OFL02/PULSESHAPE/PHY',          'SplitOnline')
-    tileCoolMgr.addSource('oflPlsLas',      '/TILE/OFL01/PULSESHAPE/LAS',          defConnStr, "", '/TILE/OFL02/PULSESHAPE/LAS',          'SplitOnline')
-    tileCoolMgr.addSource('oflPlsCisPl100', '/TILE/OFL01/PULSESHAPE/CIS/PULSE100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', 'SplitOnline')
-    tileCoolMgr.addSource('oflPlsCisPl5p2', '/TILE/OFL01/PULSESHAPE/CIS/PULSE5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', 'SplitOnline')
-    tileCoolMgr.addSource('oflPlsCisLk100', '/TILE/OFL01/PULSESHAPE/CIS/LEAK100',  defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK100',  'SplitOnline')
-    tileCoolMgr.addSource('oflPlsCisLk5p2', '/TILE/OFL01/PULSESHAPE/CIS/LEAK5P2',  defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2',  'SplitOnline')
-    
-    #--- noise
-    tileCoolMgr.addSource('oflNoiseAdc', '/TILE/OFL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline')
-    tileCoolMgr.addSource('oflNoiseAcr', '/TILE/OFL01/NOISE/AUTOCR', defConnStr, "", '/TILE/OFL02/NOISE/AUTOCR', 'SplitOnline')
-
-    #--- timing
-    tileCoolMgr.addSource('oflTimeCphy', '/TILE/OFL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline')
-    tileCoolMgr.addSource('oflTimeClas', '/TILE/OFL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline')
-    tileCoolMgr.addSource('oflTimeCcis', '/TILE/OFL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline')
-
-    #--- integrator
-    tileCoolMgr.addSource('oflIntGain', '/TILE/OFL01/INTEGRATOR',  defConnStr, "", '/TILE/OFL02/INTEGRATOR',   'SplitOnline')
 
-    #--- status
-    tileCoolMgr.addSource('oflStatAdc', '/TILE/OFL01/STATUS/ADC', defConnStr, "", '/TILE/OFL02/STATUS/ADC', 'SplitOnline')
 
diff --git a/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py b/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py
new file mode 100644
index 000000000000..62d0e448e343
--- /dev/null
+++ b/TileCalorimeter/TileConditions/python/TileCoolMgrClass.py
@@ -0,0 +1,356 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+#file: TileCoolMgr.py
+#author: nils.gollub@cern.ch
+#modifications: lukas.pribyl@cern.ch
+
+class TileCoolMgr:
+    
+    #_______________________________________________________________
+    def __init__(self,isMC,isOnline,dbInstance):
+
+        #=== initialize logger with INFO level
+        from AthenaCommon.Logging import logging
+        self.__log = logging.getLogger( 'TileCoolMgr' )
+        #        self.__log.setLevel(logging.INFO)
+        
+        #=== Master dictionary for: condId -> [folder, connStr, tag, folder2, type]
+        self.__idDict = {}
+
+        #=== Available folder types
+        self.__validTypes = ["SplitMC", "SplitOnline", "OfflineOnly", "Sqlite"]
+
+        #=== do we run on real data (not MC)?
+        self._isMC=isMC
+        self._isOnline=isOnline
+        self._dbInstance=dbInstance
+
+        self.fillMe()
+
+
+    def isMC(self):
+        return self._isMC
+
+    def isOnline(self):
+        return self._isOnline
+
+        
+    #_______________________________________________________________
+    def addSource(self, condId, folder, connStr, tag, folder2, type, key = ""):
+        if type not in self.__validTypes:
+            self.__log.error("Folder type \'%s\' not recognized!" % type)
+        if (type != "OfflineOnly") and (folder2 == ""):
+            self.__log.error("For folder type \'%s\' second folder name required!" % type)
+        self.__idDict[condId] = [folder, connStr, tag, folder2, type, key]
+
+    #_______________________________________________________________
+    def getFolder(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            return idInfo[0]
+    #_______________________________________________________________
+    def getKey(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        elif idInfo[5] != "": return idInfo[5]
+        elif len(self.getTag(condId)):   return self.getTag(condId)
+        else:
+            folder = self.getActualFolder(condId)
+            if folder: return folder
+            else:
+                self.__log.error("Cannot find out key for  \'%s\'!" % condId)
+                return None
+
+    #_______________________________________________________________
+    def getFolderTwo(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            return idInfo[3]
+
+    #_______________________________________________________________
+    def isSplitMC(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            if idInfo[4]=="SplitMC": return True
+            else: return False
+
+    #_______________________________________________________________
+    def isSplitOnline(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            if idInfo[4]=="SplitOnline": return True
+            else: return False            
+
+    #_______________________________________________________________
+    def isOfflineOnly(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            if idInfo[4]=="OfflineOnly": return True
+            else: return False            
+
+    #_______________________________________________________________
+    def isSqlite(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+            return None
+        else:
+            if idInfo[4]=="Sqlite": return True
+            else: return False
+
+
+    #_______________________________________________________________
+    def setFolder(self, condId, folder):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            self.__log.info("Setting folder for condId \'%s\' to \'%s\'" % (condId,folder))
+            idInfo[0] = folder
+            idInfo[3] = folder
+
+    #_______________________________________________________________
+    def setDbConn(self, condId, dbConn):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            self.__log.info("Setting dbConn for condId \'%s\' to \'%s\'" % (condId,dbConn))
+            idInfo[1] = dbConn
+            from string import find
+            if find(dbConn,".db")>0:
+                self.__log.info("The data source looks like sqlite file (.db), setting folder type to Sqlite")
+                self.__idDict[condId][4] = "Sqlite"
+                
+    #_______________________________________________________________
+    def getDbConn(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            return idInfo[1]
+
+    #_______________________________________________________________
+    def setTag(self, condId, tag):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            if len(tag) > 0:
+                if not tag.startswith('Tile'):
+                    tag = self.getTagPrefix(self.getActualFolder(condId)) + tag
+            self.__log.info("Setting tag for condId \'%s\' to \'%s\'" % (condId,tag))
+            idInfo[2] = tag
+
+    #_______________________________________________________________
+    def getTag(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            return idInfo[2]
+
+    #_______________________________________________________________
+    def setGlobalDbConn(self, dbConn):
+        for condId in self.__idDict.keys():
+            self.setDbConn(condId,dbConn)
+            
+    #_______________________________________________________________
+    def setGlobalTag(self, tag):
+        for condId in self.__idDict.keys():
+            self.setTag(condId,tag)
+
+    #_______________________________________________________________
+    def getTagPrefix(self, coolFolder):
+        folderTag=""
+        for i in coolFolder.lower().split("/")[1:]:
+            folderTag+=i.capitalize()
+        folderTag+="-"
+        return folderTag
+        
+    #_______________________________________________________________
+    def getConnectionString(self, condId):
+        idInfo = self.__idDict.get(condId)
+        if not idInfo:
+            self.__log.error("CondId \'%s\' not recognized!" % condId)
+        else:
+            fullStr = idInfo[1]+" "
+            if len(idInfo[2]):
+                fullStr += idInfo[2]+" "
+            fullStr += idInfo[0]
+            return fullStr
+
+
+    def isSourceAvailable(self, source):
+        return source in  self.__idDict
+
+
+    def getActualFolder(self, condId):
+        if self.isOfflineOnly(condId): return self.getFolder(condId)
+        elif self.isSplitOnline(condId): 
+            if self.isOnline() and not self.isMC(): return self.getFolder(condId)
+            else:                                   return self.getFolderTwo(condId)
+        elif self.isSplitMC(condId):
+            if self.isMC(): return self.getFolderTwo(condId)
+            else:           return self.getFolder(condId)
+        elif self.isSqlite(condId): return self.getFolder(condId)
+        else: return None
+
+
+
+
+    def fillMe(self):
+        defConnStr = 'TILE'
+        oflConnStr = 'TILE_OFL'
+        #--- energy calibration
+
+        self.addSource('oflLasLin',    '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN',     'SplitOnline')
+        self.addSource('oflCes',       '/TILE/ONL01/CALIB/CES',     defConnStr, "", '/TILE/OFL02/CALIB/CES',         'SplitOnline')
+        self.addSource('oflEms',       '/TILE/ONL01/CALIB/EMS',     defConnStr, "", '/TILE/OFL02/CALIB/EMS',         'SplitOnline')
+
+        #--- online calib is taken from the folder tag defined in TileOfcCoolPlugin 
+        #--- the tags are fixed only in the case of real data - in both online and offline schema.
+        self.addSource('onlCisLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitMC')
+        self.addSource('onlLasLin', '/TILE/ONL01/CALIB/LAS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/LAS/LIN',     'SplitMC')
+        self.addSource('onlCes',    '/TILE/ONL01/CALIB/CES',     defConnStr, "", '/TILE/OFL02/CALIB/CES',         'SplitMC')
+        self.addSource('onlEms',    '/TILE/ONL01/CALIB/EMS',     defConnStr, "", '/TILE/OFL02/CALIB/EMS',         'SplitMC')
+
+        #--- MuID
+        self.addSource('onlMuID'  , '/TILE/ONL01/MUID',  defConnStr, "", '/TILE/ONL01/MUID',   'SplitMC')
+
+        #--- noise
+        self.addSource('onlNoise1gOfni', '/TILE/ONL01/NOISE/OFNI', defConnStr, "", '/TILE/ONL01/NOISE/OFNI', 'SplitMC')
+
+
+        #--- status
+        self.addSource('onlStatAdc', '/TILE/ONL01/STATUS/ADC', defConnStr, "", '/TILE/ONL01/STATUS/ADC', 'SplitMC')
+
+        #--- OFCs OF2
+        self.addSource('OfcOf2CisPl100', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC')
+        self.addSource('OfcOf2CisPl5p2', '/TILE/ONL01/FILTER/OF2/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/CIS', 'SplitMC')
+        self.addSource('OfcOf2Las',      '/TILE/ONL01/FILTER/OF2/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF2/LAS', 'SplitMC')
+
+        #--- OFCs OF1
+        self.addSource('OfcOf1CisPl100', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC')
+        self.addSource('OfcOf1CisPl5p2', '/TILE/ONL01/FILTER/OF1/CIS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/CIS', 'SplitMC')
+        self.addSource('OfcOf1Las',      '/TILE/ONL01/FILTER/OF1/LAS', defConnStr, "", '/TILE/ONL01/FILTER/OF1/LAS', 'SplitMC')
+
+
+        if (self._dbInstance == 'CONDBR2'):
+            #--- OFCs
+            self.addSource('OfcOf2Phy',    '/TILE/ONL01/FILTER/OF2/PHY',  defConnStr, "", '/TILE/OFL02/FILTER/OF2/PHY', 'SplitOnline')
+            self.addSource('OfcOf1Phy',    '/TILE/ONL01/FILTER/OF1/PHY',  defConnStr, "", '/TILE/OFL02/FILTER/OF1/PHY', 'SplitOnline')
+
+            #--- energy calibration
+            self.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN',   defConnStr, "", '/TILE/OFL02/CALIB/CIS/LIN', 'SplitOnline')
+            self.addSource('oflCisFitNln', '/TILE/ONL01/CALIB/CIS/NLN',   defConnStr, "", '/TILE/OFL02/CALIB/CIS/NLN', 'SplitOnline')
+            self.addSource('oflLasNln',    '/TILE/ONL01/CALIB/LAS/NLN',   defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN', 'SplitOnline')
+            self.addSource('oflLasFib',    '/TILE/OFL02/CALIB/LAS/FIBER', oflConnStr, "", "", 'OfflineOnly')
+    
+            #--- pulse shape
+            self.addSource('oflPlsPhy',      '/TILE/OFL02/PULSESHAPE/PHY',          oflConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflPlsLas',      '/TILE/OFL02/PULSESHAPE/LAS',          oflConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflPlsCisPl100', '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', oflConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflPlsCisPl5p2', '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', oflConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflPlsCisLk100', '/TILE/OFL02/PULSESHAPE/CIS/LEAK100',  oflConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflPlsCisLk5p2', '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2',  oflConnStr, "", "", 'OfflineOnly')
+    
+            #--- noise
+            self.addSource('oflNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline')
+            self.addSource('onlNoiseAdc', '/TILE/ONL01/NOISE/SAMPLE', defConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflNoiseAcr', '/TILE/OFL02/NOISE/AUTOCR', oflConnStr, "", "", 'OfflineOnly')
+
+            #--- timing
+            self.addSource('oflTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline')
+            self.addSource('onlTimeCphy', '/TILE/ONL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline')
+            self.addSource('onlTimeClas', '/TILE/ONL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/GAP/LAS', 'SplitOnline')
+            self.addSource('onlTimeCgapLas', '/TILE/ONL01/TIME/CHANNELOFFSET/GAP/LAS', defConnStr, "", "", 'OfflineOnly')
+            self.addSource('oflTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline')
+            self.addSource('onlTimeCcis', '/TILE/ONL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", "", 'OfflineOnly')
+
+            #--- integrator
+            self.addSource('oflIntGain', '/TILE/ONL01/INTEGRATOR',  defConnStr, "", '/TILE/OFL02/INTEGRATOR',   'SplitOnline')
+
+            #--- status
+            self.addSource('oflStatAdc', '/TILE/OFL02/STATUS/ADC', oflConnStr, "", "", 'OfflineOnly')
+
+
+            #--- TMDB
+            self.addSource('onlTmdbThresholdPhy', '/TILE/ONL01/TMDB/THRESHOLD/PHY', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/PHY', 'SplitMC')
+            self.addSource('onlTmdbThresholdLas', '/TILE/ONL01/TMDB/THRESHOLD/LAS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/LAS', 'SplitMC')
+            self.addSource('onlTmdbThresholdCis', '/TILE/ONL01/TMDB/THRESHOLD/CIS', defConnStr, "", '/TILE/ONL01/TMDB/THRESHOLD/CIS', 'SplitMC')
+            
+            self.addSource('onlTmdbDelayPhy', '/TILE/ONL01/TMDB/DELAY/PHY', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/PHY', 'SplitMC')
+            self.addSource('onlTmdbDelayLas', '/TILE/ONL01/TMDB/DELAY/LAS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/LAS', 'SplitMC')
+            self.addSource('onlTmdbDelayCis', '/TILE/ONL01/TMDB/DELAY/CIS', defConnStr, "", '/TILE/ONL01/TMDB/DELAY/CIS', 'SplitMC')
+            
+            self.addSource('onlTmdbTmfPhy', '/TILE/ONL01/TMDB/TMF/PHY', defConnStr, "", '/TILE/ONL01/TMDB/TMF/PHY', 'SplitMC')
+            self.addSource('onlTmdbTmfLas', '/TILE/ONL01/TMDB/TMF/LAS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/LAS', 'SplitMC')
+            self.addSource('onlTmdbTmfCis', '/TILE/ONL01/TMDB/TMF/CIS', defConnStr, "", '/TILE/ONL01/TMDB/TMF/CIS', 'SplitMC')
+            
+            self.addSource('onlTmdbCalibPhy', '/TILE/ONL01/TMDB/CALIB/PHY', defConnStr, "", '/TILE/ONL01/TMDB/CALIB/PHY', 'SplitMC')
+
+            #--- noise
+            self.addSource('oflDspThreshold', '/TILE/ONL01/DSP/THRESHOLD', defConnStr, "", '/TILE/OFL02/DSP/THRESHOLD', 'SplitOnline')
+        else:
+            
+            #--- OFCs
+            self.addSource('OfcOf2Phy',      '/TILE/ONL01/FILTER/OF2/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF2/PHY', 'SplitMC')
+            self.addSource('OfcOf1Phy',      '/TILE/ONL01/FILTER/OF1/PHY', defConnStr, "", '/TILE/ONL01/FILTER/OF1/PHY', 'SplitMC')
+
+            #--- energy calibration
+            self.addSource('oflCisFitLin', '/TILE/ONL01/CALIB/CIS/LIN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/LIN', 'SplitOnline')
+            self.addSource('oflCisFitNln', '/TILE/OFL01/CALIB/CIS/FIT/NLN', defConnStr, "", '/TILE/OFL02/CALIB/CIS/FIT/NLN', 'SplitOnline')
+            self.addSource('oflLasNln',    '/TILE/OFL01/CALIB/LAS/NLN',     defConnStr, "", '/TILE/OFL02/CALIB/LAS/NLN',     'SplitOnline')
+            self.addSource('oflLasFib',    '/TILE/OFL01/CALIB/LAS/FIBER',   defConnStr, "", '/TILE/OFL02/CALIB/LAS/FIBER',   'SplitOnline')    
+            #--- pulse shape
+            self.addSource('oflPlsPhy',      '/TILE/OFL01/PULSESHAPE/PHY',          defConnStr, "", '/TILE/OFL02/PULSESHAPE/PHY',          'SplitOnline')
+            self.addSource('oflPlsLas',      '/TILE/OFL01/PULSESHAPE/LAS',          defConnStr, "", '/TILE/OFL02/PULSESHAPE/LAS',          'SplitOnline')
+            self.addSource('oflPlsCisPl100', '/TILE/OFL01/PULSESHAPE/CIS/PULSE100', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE100', 'SplitOnline')
+            self.addSource('oflPlsCisPl5p2', '/TILE/OFL01/PULSESHAPE/CIS/PULSE5P2', defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/PULSE5P2', 'SplitOnline')
+            self.addSource('oflPlsCisLk100', '/TILE/OFL01/PULSESHAPE/CIS/LEAK100',  defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK100',  'SplitOnline')
+            self.addSource('oflPlsCisLk5p2', '/TILE/OFL01/PULSESHAPE/CIS/LEAK5P2',  defConnStr, "", '/TILE/OFL02/PULSESHAPE/CIS/LEAK5P2',  'SplitOnline')
+    
+            #--- noise
+            self.addSource('oflNoiseAdc', '/TILE/OFL01/NOISE/SAMPLE', defConnStr, "", '/TILE/OFL02/NOISE/SAMPLE', 'SplitOnline')
+            self.addSource('oflNoiseAcr', '/TILE/OFL01/NOISE/AUTOCR', defConnStr, "", '/TILE/OFL02/NOISE/AUTOCR', 'SplitOnline')
+            
+            #--- timing
+            self.addSource('oflTimeCphy', '/TILE/OFL01/TIME/CHANNELOFFSET/PHY', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/PHY', 'SplitOnline')
+            self.addSource('oflTimeClas', '/TILE/OFL01/TIME/CHANNELOFFSET/LAS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/LAS', 'SplitOnline')
+            self.addSource('oflTimeCcis', '/TILE/OFL01/TIME/CHANNELOFFSET/CIS', defConnStr, "", '/TILE/OFL02/TIME/CHANNELOFFSET/CIS', 'SplitOnline')
+
+            #--- integrator
+            self.addSource('oflIntGain', '/TILE/OFL01/INTEGRATOR',  defConnStr, "", '/TILE/OFL02/INTEGRATOR',   'SplitOnline')
+
+            #--- status
+            self.addSource('oflStatAdc', '/TILE/OFL01/STATUS/ADC', defConnStr, "", '/TILE/OFL02/STATUS/ADC', 'SplitOnline')
+            pass
+
+
+
+def TileCoolMgrConfig(configflags):
+    #Instantiate TileCoolMgr based on run3-style config flags
+    return TileCoolMgr(isMC=configFlags.Input.isMC, 
+                       isOnline=configFlags.common.isOnline,
+                       dbInstance=configFlags.IOVDb.DatabaseInstance)
+    
-- 
GitLab


From 589a6cd149d04c400c1db064eeccfcd4c475c194 Mon Sep 17 00:00:00 2001
From: Rupert Tombs <rt500@cam.ac.uk>
Date: Mon, 11 Mar 2019 17:51:11 +0000
Subject: [PATCH 035/163] ComponentAccumulator configuration for SCT and Pixel
 inner detectors. With ToolSetup dependencies also converted to new style.
 ConfigFlags initialisation set up for Digitization and Overlay. Tests for all
 new modules

Add ConditionsStore StoreGateSvc

Remove Pixel config update
---
 .../python/AllConfigFlags.py                  |   4 +
 .../python/OverlayConfigFlags.py              |  19 ++
 .../PixelConditionsTools/CMakeLists.txt       |   4 +
 .../python/PixelConditionsSummaryConfig.py    |  35 +++
 .../python/PixelDCSConditionsConfig.py        |  31 +++
 .../test/PixelConditionsConfig_test.py        |  25 ++
 .../SCT_ConditionsTools/CMakeLists.txt        |   5 +
 .../python/SCT_DCSConditionsConfig.py         |  48 ++++
 .../python/SCT_ReadCalibChipDataConfig.py     |  33 +++
 .../python/SCT_SiliconConditionsConfig.py     |  34 +++
 .../test/SCT_ConditionsConfig_test.py         |  29 ++
 .../SiLorentzAngleTool/CMakeLists.txt         |   4 +
 .../python/PixelLorentzAngleConfig.py         |  34 +++
 .../python/SCT_LorentzAngleConfig.py          |  57 ++++
 .../test/SiLorentzAngleConfig_test.py         |  31 +++
 .../SiPropertiesTool/CMakeLists.txt           |   5 +
 .../python/PixelSiPropertiesConfig.py         |  25 ++
 .../python/SCT_SiPropertiesConfig.py          |  25 ++
 .../test/SiPropertiesConfig_test.py           |  25 ++
 .../InDetDetDescr/PixelCabling/CMakeLists.txt |   4 +
 .../python/PixelCablingConfigNew.py           | 100 +++++++
 .../test/PixelCablingConfigNew_test.py        |  21 ++
 .../python/BCM_DigitizationConfigNew.py       |   4 +-
 .../test/BCM_DigitizationConfigNew_test.py    |  39 +--
 .../SCT_Digitization/CMakeLists.txt           |   4 +
 .../python/SCT_DigitizationConfigNew.py       | 254 ++++++++++++++++++
 .../test/SCT_DigitizationConfigNew_test.py    |  73 +++++
 .../python/DigitizationConfigFlags.py         |  19 ++
 28 files changed, 970 insertions(+), 21 deletions(-)
 create mode 100644 Event/EventOverlay/OverlayCommonAlgs/python/OverlayConfigFlags.py
 create mode 100644 InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
 create mode 100644 InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsConfig.py
 create mode 100755 InnerDetector/InDetConditions/PixelConditionsTools/test/PixelConditionsConfig_test.py
 create mode 100644 InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
 create mode 100644 InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
 create mode 100644 InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
 create mode 100755 InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
 create mode 100644 InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
 create mode 100644 InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
 create mode 100755 InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
 create mode 100644 InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
 create mode 100644 InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
 create mode 100755 InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
 create mode 100644 InnerDetector/InDetDetDescr/PixelCabling/python/PixelCablingConfigNew.py
 create mode 100755 InnerDetector/InDetDetDescr/PixelCabling/test/PixelCablingConfigNew_test.py
 create mode 100644 InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
 create mode 100755 InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
 create mode 100644 Simulation/Digitization/python/DigitizationConfigFlags.py

diff --git a/Control/AthenaConfiguration/python/AllConfigFlags.py b/Control/AthenaConfiguration/python/AllConfigFlags.py
index 3dbc6b7a75c8..c47cf0cd001e 100644
--- a/Control/AthenaConfiguration/python/AllConfigFlags.py
+++ b/Control/AthenaConfiguration/python/AllConfigFlags.py
@@ -70,6 +70,8 @@ def _createCfgFlags():
     acf.addFlag("GeoModel.Align.Dynamic", lambda prevFlags : (not prevFlags.Detector.Simulate))
     acf.addFlag("GeoModel.StripGeoType", "GMX") # Based on CommonGeometryFlags.StripGeoType
     acf.addFlag("GeoModel.Run","RUN2") # Based on CommonGeometryFlags.Run (InDetGeometryFlags.isSLHC replaced by GeoModel.Run=="RUN4")
+    acf.addFlag("GeoModel.Type", "UNDEFINED") # Geometry type in {ITKLoI, ITkLoI-VF, etc...}
+    acf.addFlag("GeoModel.IBLLayout", "UNDEFINED") # IBL layer layout  in {"planar", "3D", "noIBL", "UNDEFINED"}
 
 #IOVDbSvc Flags:
     acf.addFlag("IOVDb.GlobalTag",lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("ConditionsTag","CONDBR2-BLKPA-2017-05"))
@@ -94,6 +96,8 @@ def _createCfgFlags():
     acf.addFlag("Calo.TopoCluster.doTreatEnergyCutAsAbsolute",False)
     acf.addFlag("Calo.TopoCluster.doTopoClusterLocalCalib",True)
 
+#Random engine Flags:
+    acf.addFlag("Random.Engine", "dSFMT") # Random service used in {"dSFMT", "Ranlux64", "Ranecu"}
 
     def __trigger():
         from TriggerJobOpts.TriggerConfigFlags import createTriggerFlags
diff --git a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayConfigFlags.py b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayConfigFlags.py
new file mode 100644
index 000000000000..19092cba371d
--- /dev/null
+++ b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayConfigFlags.py
@@ -0,0 +1,19 @@
+"""Construct ConfigFlags for Overlay
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+
+def createOverlayCfgFlags():
+    """Return an AthConfigFlags object with required flags"""
+    flags = AthConfigFlags()
+    # Overlay background StoreGate key prefix
+    flags.addFlag("Overlay.BkgPrefix", "Bkg_")
+    # Overlay signal StoreGate key prefix
+    flags.addFlag("Overlay.SigPrefix", "Sig_")
+    # Are we multithreaded?
+    flags.addFlag("Overlay.Legacy.MT", False)
+    # Name of MC EvtStore to overlay
+    flags.addFlag("Overlay.Legacy.EventStore", "BkgEvent_0_SG")
+    return flags
+
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
index 0209bebcef78..ac5761032a35 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
@@ -51,6 +51,10 @@ atlas_add_component( PixelConditionsTools
                      INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
                      LINK_LIBRARIES ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel GeoPrimitives GaudiKernel AthenaBaseComps SGTools AthenaPoolUtilities DetDescrConditions Identifier PixelConditionsData PixelCoralClientUtils InDetIdentifier GeoModelUtilities InDetReadoutGeometry PathResolver ${extra_lib} )
 
+atlas_add_test( PixelConditionsConfig_test
+                SCRIPT test/PixelConditionsConfig_test.py
+                PROPERTIES TIMEOUT 30 )
+
 # Install files from the package:
 atlas_install_headers( PixelConditionsTools )
 atlas_install_joboptions( share/*.py )
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
new file mode 100644
index 000000000000..1f5af82d70f2
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
@@ -0,0 +1,35 @@
+"""Define methods to configure PixelConditionsSummary
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from IOVDbSvc.IOVDbSvcConfig import addFolders, addFoldersSplitOnline
+from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
+from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelTDAQCondAlg
+from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelConfigCondAlg
+from PixelConditionsTools.PixelDCSConditionsConfig import PixelDCSConditionsCfg
+
+def PixelConditionsSummaryCfg(flags, name="PixelConditionsSummary", **kwargs):
+    """Return configured ComponentAccumulator and tool for PixelDCSConditions"""
+    acc = ComponentAccumulator()
+    kwargs.setdefault("UseDCSState", False)
+    kwargs.setdefault("UseByteStream", False)
+    kwargs.setdefault("UseTDAQ", False)
+    kwargs.setdefault("UseDeadMap", True)
+    PixelDeadMapFolder = "/PIXEL/PixMapOverlay"
+    if kwargs["UseDCSState"]:
+        acc.merge(PixelDCSConditionsCfg(flags, DCSConditionsTool=DCSTool))
+    if kwargs["UseTDAQ"]:
+        PixelTDAQFolder = "/TDAQ/Resources/ATLAS/PIXEL/Modules"
+        acc.merge(addFolders(flags, PixelTDAQFolder, "TDAQ_ONL", "CondAttrListCollection"))
+        acc.addCondAlgo(PixelTDAQCondAlg(name="PixelTDAQCondAlg", ReadKey=PixelTDAQFolder))
+    if kwargs["UseDeadMap"]:
+        acc.merge(addFolders(flags, PixelDeadMapFolder, "PIXEL_OFL","CondAttrListCollection"))
+        acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/PixMapOverlay",
+                                        "/PIXEL/PixMapOverlay", "CondAttrListCollection"))
+    acc.addCondAlgo(PixelConfigCondAlg(name=name + "CondAlg", 
+                                       UseDeadMap=kwargs["UseDeadMap"],
+                                       ReadDeadMapKey=PixelDeadMapFolder))
+    tool = PixelConditionsSummaryTool(name=name + "Tool", **kwargs)
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsConfig.py
new file mode 100644
index 000000000000..60fd358a48a5
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelDCSConditionsConfig.py
@@ -0,0 +1,31 @@
+"""Define methods to configure PixelDCSConditions
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from IOVDbSvc.IOVDbSvcConfig import addFolders
+from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondStateAlg
+from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondHVAlg
+from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondTempAlg
+
+def PixelDCSConditionsCfg(flags, name="PixelDCSCond", **kwargs):
+    """Return configured ComponentAccumulator and tool for PixelDCSConditions"""
+    acc = ComponentAccumulator()
+    kwargs.setdefault("UseConditions", True)
+    if flags.Common.isOnline:
+        hvFolder = "/PIXEL/HLT/DCS/HV"
+        tempFolder = "/PIXEL/HLT/DCS/TEMPERATURE"
+        dbInstance = "PIXEL_ONL"
+    else:
+        hvFolder = "/PIXEL/DCS/HV"
+        tempFolder = "/PIXEL/DCS/TEMPERATURE"
+        dbInstance = "DCS_OFL"
+    folders = [hvFolder, tempFolder]
+    if not flags.Input.isMC:
+        folders.extend(["/PIXEL/DCS/FSMSTATE", "/PIXEL/DCS/FSMSTATUS"])
+        acc.addCondAlgo(PixelDCSCondStateAlg(name=name + "StateAlg"))
+    acc.merge(addFolders(flags, folders, dbInstance, "CondAttrListCollection"))
+    acc.addCondAlgo(PixelDCSCondHVAlg(name=name + "HVAlg", ReadKey=hvFolder))
+    acc.addCondAlgo(PixelDCSCondTempAlg(name=name + "TempAlg", ReadKey=tempFolder))
+    return acc
+
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/test/PixelConditionsConfig_test.py b/InnerDetector/InDetConditions/PixelConditionsTools/test/PixelConditionsConfig_test.py
new file mode 100755
index 000000000000..182a291c0788
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/test/PixelConditionsConfig_test.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+"""Run tests on PixelConditionsTools/python/*Config.py scripts
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from PixelConditionsTools.PixelDCSConditionsConfig import PixelDCSConditionsCfg
+from PixelConditionsTools.PixelConditionsSummaryConfig import PixelConditionsSummaryCfg
+
+# test setup
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+# test
+DCSAcc = PixelDCSConditionsCfg(ConfigFlags, name="DCSTest")
+SummaryAcc, SummaryTool = PixelConditionsSummaryCfg(ConfigFlags, name="SummaryTest")
+# prevent raise on __del__
+DCSAcc.wasMerged()
+SummaryAcc.wasMerged()
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/CMakeLists.txt b/InnerDetector/InDetConditions/SCT_ConditionsTools/CMakeLists.txt
index 6f3c6525d757..6a707095ed0d 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/CMakeLists.txt
@@ -52,7 +52,12 @@ atlas_add_test( SCT_RODVetoTool_test
                 LINK_LIBRARIES TestTools SCT_ConditionsToolsLib ${GTEST_LIBRARIES} ${GMOCK_LIBRARIES}
                 ENVIRONMENT "JOBOPTSEARCHPATH=${CMAKE_CURRENT_SOURCE_DIR}/share" )
 
+atlas_add_test( SCT_ConditionsConfig_test
+                SCRIPT test/SCT_ConditionsConfig_test.py
+                PROPERTIES TIMEOUT 300 )
+
 # Install files from the package:
 atlas_install_headers( SCT_ConditionsTools )
 atlas_install_python_modules( python/*.py )
 atlas_install_scripts( share/*.py )
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
new file mode 100644
index 000000000000..9f09f2eb727d
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
@@ -0,0 +1,48 @@
+"""Define methods to configure SCT_DCSConditions
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from IOVDbSvc.IOVDbSvcConfig import addFolders
+from SCT_ConditionsTools.SCT_ConditionsToolsConf import SCT_DCSConditionsTool
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_DCSConditionsStatCondAlg
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_DCSConditionsHVCondAlg
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_DCSConditionsTempCondAlg
+
+def SCT_DCSConditionsToolCfg(flags, name="InDetSCT_DCSConditionsTool", **kwargs):
+    """Return a configured SCT_DCSConditionsTool"""
+    kwargs.setdefault("ReadAllDBFolders", True)
+    kwargs.setdefault("ReturnHVTemp", True)
+    return SCT_DCSConditionsTool(name, **kwargs)
+
+def SCT_DCSConditionsCfg(flags, name="InDetSCT_DCSConditions", **kwargs):
+    """Return configured ComponentAccumulator and tool for SCT_DCSConditions
+
+    DCSConditionsTool may be provided in kwargs
+    """
+    acc = ComponentAccumulator()
+    tool = kwargs.get("DCSConditionsTool", SCT_DCSConditionsToolCfg(flags))
+    # folder arguments
+    dbInstance = kwargs.get("dbInstance", "DCS_OFL")
+    hvFolder = kwargs.get("hvFolder", "/SCT/DCS/HV")
+    tempFolder = kwargs.get("tempFolder", "/SCT/DCS/MODTEMP")
+    stateFolder = kwargs.get("stateFolder", "/SCT/DCS/CHANSTAT")
+    if tool.ReadAllDBFolders == tool.ReturnHVTemp:
+        acc.merge(addFolders(flags, stateFolder, dbInstance, className="CondAttrListCollection"))
+        # algo
+        statArgs = {
+            "name": name + "StatCondAlg",
+            "ReturnHVTemp": tool.ReturnHVTemp,
+            "ReadKeyHV": hvFolder,
+            "ReadKeyState": stateFolder,
+        }
+        statAlg = SCT_DCSConditionsStatCondAlg(**statArgs)
+        acc.addCondAlgo(statAlg)
+    if tool.ReturnHVTemp:
+        acc.merge(addFolders(flags, [hvFolder, tempFolder], dbInstance, className="CondAttrListCollection"))
+        hvAlg = SCT_DCSConditionsHVCondAlg(name=name + "HVCondAlg", ReadKey=hvFolder)
+        acc.addCondAlgo(hvAlg)
+        tempAlg = SCT_DCSConditionsTempCondAlg(name=name + "TempCondAlg", ReadKey=tempFolder)
+        acc.addCondAlgo(tempAlg)
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
new file mode 100644
index 000000000000..0727f41c1158
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
@@ -0,0 +1,33 @@
+"""Define methods to configure ReadCalibChipDataTool
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
+from SCT_ConditionsTools.SCT_ConditionsToolsConf import SCT_ReadCalibChipDataTool
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_ReadCalibChipNoiseCondAlg
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_ReadCalibChipGainCondAlg
+
+def SCT_ReadCalibChipDataToolCfg(flags, name="InDetSCT_ReadCalibChipDataTool", **kwargs):
+    """Return a ReadCalibChipDataTool configured for SCT"""
+    return SCT_ReadCalibChipDataTool(name, **kwargs)
+
+def SCT_ReadCalibChipDataCfg(flags, name="SCT_ReadCalibChip", **kwargs):
+    """Return configured ComponentAccumulator and tool for SCT_ReadCalibChipDataCfg
+
+    Accepts optional noiseFolder and gainFolder keyword arguments
+    """
+    acc = ComponentAccumulator()
+    # folders
+    noiseFolder = kwargs.get("noiseFolder", "/SCT/DAQ/Calibration/ChipNoise")
+    acc.merge(addFoldersSplitOnline(flags, "SCT", noiseFolder, noiseFolder, "CondAttrListCollection"))
+    gainFolder = kwargs.get("gainFolder", "/SCT/DAQ/Calibration/ChipGain")
+    acc.merge(addFoldersSplitOnline(flags, "SCT", gainFolder, gainFolder, "CondAttrListCollection"))
+    # Algorithms
+    noiseAlg = SCT_ReadCalibChipNoiseCondAlg(name=name + "NoiseCondAlg", ReadKey=noiseFolder)
+    acc.addCondAlgo(noiseAlg)
+    gainAlg = SCT_ReadCalibChipGainCondAlg(name=name + "GainCondAlg", ReadKey=gainFolder)
+    acc.addCondAlgo(gainAlg)
+    tool = kwargs.get("ReadCalibChipDataTool", SCT_ReadCalibChipDataToolCfg(flags))
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
new file mode 100644
index 000000000000..fb841600267f
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
@@ -0,0 +1,34 @@
+"""Define methods to configure SiPropertiesTool
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_SiliconHVCondAlg
+from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_SiliconTempCondAlg
+from SCT_ConditionsTools.SCT_ConditionsToolsConf import SCT_SiliconConditionsTool
+
+def SCT_SiliconConditionsToolCfg(flags, name="SCT_SiliconConditionsTool", **kwargs):
+    """Return a configured SCT_SiliconConditionsTool (a.k.a. SiConditionsTool)"""
+    kwargs.setdefault("UseDB", True)
+    kwargs.setdefault("ForceUseGeoModel", False)
+    return SCT_SiliconConditionsTool(name, **kwargs)
+
+def SCT_SiliconConditionsCfg(flags, name="SCT_Silicon", **kwargs):
+    """Return configured ComponentAccumulator and tool for SCT_SiliconConditions
+
+    SiConditionsTool and/or DCSConditionsTool may be provided in kwargs
+    """
+    acc = ComponentAccumulator()
+    tool = kwargs.get("SiConditionsTool", SCT_SiliconConditionsToolCfg(flags))
+    if tool.UseDB:
+        CondArgs = {}
+        if "DCSConditionsTool" in kwargs:
+            DCSConditionsTool = kwargs["DCSConditionsTool"]
+            CondArgs["UseState"] = DCSConditionsTool.ReadAllDBFolders
+            CondArgs["DCSConditionsTool"] = DCSConditionsTool
+        hvAlg = SCT_SiliconHVCondAlg(name=name + "HVCondAlg", **CondArgs)
+        tempAlg = SCT_SiliconTempCondAlg(name=name + "TempCondAlg", **CondArgs)
+        acc.addCondAlgo(hvAlg)
+        acc.addCondAlgo(tempAlg)
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
new file mode 100755
index 000000000000..78cdab2ff3f9
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+"""Run tests on SCT_ConditionsTools/python/*Config.py scripts
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from SCT_ConditionsTools.SCT_DCSConditionsConfig import SCT_DCSConditionsCfg
+from SCT_ConditionsTools.SCT_SiliconConditionsConfig import SCT_SiliconConditionsCfg
+from SCT_ConditionsTools.SCT_ReadCalibChipDataConfig import SCT_ReadCalibChipDataCfg
+
+# test setup
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+# DCS
+DCSAcc, DCSTool = SCT_DCSConditionsCfg(ConfigFlags, name="DCSTest")
+# Silicon
+SiliconAcc, SiliconTool = SCT_SiliconConditionsCfg(ConfigFlags, name="SiliconTest")
+# ReadCalibChipData
+ReadAcc, ReadTool = SCT_ReadCalibChipDataCfg(ConfigFlags, name="ReadTest")
+# prevent raise on __del__
+DCSAcc.wasMerged()
+SiliconAcc.wasMerged()
+ReadAcc.wasMerged()
+
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/CMakeLists.txt b/InnerDetector/InDetConditions/SiLorentzAngleTool/CMakeLists.txt
index 86125e6f55e0..10122dac8cd6 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleTool/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/CMakeLists.txt
@@ -41,6 +41,10 @@ atlas_add_test( TestSCTLorentzAngle
                 PROPERTIES TIMEOUT 300
                 ENVIRONMENT THREADS=5 )
 
+atlas_add_test( SiLorentzAngleConfig_test
+                SCRIPT test/SiLorentzAngleConfig_test.py
+                PROPERTIES TIMEOUT 30 )
+
 # Install files from the package:
 atlas_install_headers( SiLorentzAngleTool )
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
new file mode 100644
index 000000000000..908a57e1419c
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
@@ -0,0 +1,34 @@
+"""Define methods to configure SCTLorentzAngleTool
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from SiPropertiesTool.PixelSiPropertiesConfig import PixelSiPropertiesCfg
+from SiLorentzAngleTool.SiLorentzAngleToolConf import SiLorentzAngleTool
+from SiLorentzAngleTool.SiLorentzAngleToolConf import PixelSiLorentzAngleCondAlg
+from PixelConditionsTools.PixelDCSConditionsConfig import PixelDCSConditionsCfg
+from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
+
+def PixelLorentzAngleToolCfg(flags, name="PixelLorentzAngleTool", **kwargs):
+    """Return a SiLorentzAngleTool configured for Pixel"""
+    kwargs.setdefault("DetectorName", "Pixel")
+    kwargs.setdefault("SiLorentzAngleCondData", "PixelSiLorentzAngleCondData")
+    kwargs.setdefault("UseMagFieldSvc", True)
+    return SiLorentzAngleTool(name, **kwargs)
+
+def PixelLorentzAngleCfg(flags, name="PixelSiLorentzAngleCondAlg", **kwargs):
+    """Return configured ComponentAccumulator and tool for PixelLorentzAngle
+
+    SiLorentzAngleTool may be provided in kwargs
+    """
+    acc, svc = MagneticFieldSvcCfg(flags)
+    tool = kwargs.get("SiLorentzAngleTool", PixelLorentzAngleToolCfg(flags))
+    acc.merge(PixelDCSConditionsCfg(flags))
+    SiPropAcc, SiPropTool = PixelSiPropertiesCfg(flags)
+    acc.merge(SiPropAcc)
+    kwargs.setdefault("SiPropertiesTool", SiPropTool)
+    kwargs.setdefault("UseMagFieldSvc", tool.UseMagFieldSvc)
+    kwargs.setdefault("UseMagFieldDcs", not flags.Common.isOnline)
+    acc.addCondAlgo(PixelSiLorentzAngleCondAlg(name, **kwargs))
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
new file mode 100644
index 000000000000..233f4ff54db3
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
@@ -0,0 +1,57 @@
+"""Define methods to configure SCTLorentzAngleTool
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaCommon import Logging
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from SiLorentzAngleTool.SiLorentzAngleToolConf import SiLorentzAngleTool
+from SiLorentzAngleTool.SiLorentzAngleToolConf import SCTSiLorentzAngleCondAlg
+from SCT_ConditionsTools.SCT_DCSConditionsConfig import SCT_DCSConditionsCfg
+from SCT_ConditionsTools.SCT_SiliconConditionsConfig import SCT_SiliconConditionsCfg
+from SCT_ConditionsTools.SCT_SiliconConditionsConfig import SCT_SiliconConditionsToolCfg
+from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
+
+def SCT_LorentzAngleToolCfg(flags, name="SCT_LorentzAngleTool", **kwargs):
+    """Return a SiLorentzAngleTool configured for SCT"""
+    kwargs.setdefault("DetectorName", "SCT")
+    kwargs.setdefault("SiLorentzAngleCondData", "SCTSiLorentzAngleCondData")
+    kwargs.setdefault("UseMagFieldSvc", True)
+    return SiLorentzAngleTool(name, **kwargs)
+
+def SCT_LorentzAngleCfg(flags, name="SCT_SiLorentzAngleCondAlg",
+                        forceUseDB=False, forceUseGeoModel=False, **kwargs):
+    """Return configured ComponentAccumulator and tool for SCT_LorentzAngle
+
+    SiLorentzAngleTool may be provided in kwargs
+    """
+    if forceUseDB and forceUseGeoModel:
+        msg = Logging.logging.getLogger("SCT_LorentzAngleCfg")
+        msg.error("Setting is wrong: both forceUseDB and forceUseGeoModel cannot be True at the same time")
+    # construct with field services
+    acc, svc = MagneticFieldSvcCfg(flags)
+    tool = kwargs.get("SiLorentzAngleTool", SCT_LorentzAngleToolCfg(flags))
+    if not forceUseGeoModel:
+        DCSkwargs = {}
+        # For HLT
+        if flags.Common.isOnline and not flags.Input.isMC:
+            dcs_folder = "/SCT/HLT/DCS"
+            DCSkwargs["dbInstance"] = "SCT"
+            DCSkwargs["hvFolder"] = dcs_folder + "/HV"
+            DCSkwargs["tempFolder"] = dcs_folder + "/MODTEMP"
+            DCSkwargs["stateFolder"] = dcs_folder + "/CHANSTAT"
+        DCSAcc, DCSTool = SCT_DCSConditionsCfg(flags, **DCSkwargs)
+        acc.merge(DCSAcc)
+        SCAcc, SCTool = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSTool)
+    else:
+        SCTool = SCT_SiliconConditionsToolCfg(flags, UseDB=False, ForceUseGeoModel=True)
+        SCAcc, SCTool = SCT_SiliconConditionsCfg(flags, SiliconConditionsTool=SCTool)
+    acc.merge(SCAcc)
+    # set up SCTSiLorentzAngleCondAlg
+    kwargs.setdefault("UseMagFieldSvc", tool.UseMagFieldSvc)
+    kwargs.setdefault("UseMagFieldDcs", not flags.Common.isOnline)
+    kwargs.setdefault("UseGeoModel", forceUseGeoModel)
+    kwargs.setdefault("useSctDefaults", False)
+    alg = SCTSiLorentzAngleCondAlg(name, **kwargs)
+    acc.addCondAlgo(alg)
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
new file mode 100755
index 000000000000..1c72737ed6f7
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+"""Run tests on *LorentzAngleConfig.py
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
+from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
+
+# test setup
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+# case online
+ConfigFlags.Common.isOnline = True
+acc, tool = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOnline")
+acc2, tool = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOnline")
+acc.merge(acc2)
+acc.wasMerged()
+# case offline
+ConfigFlags.Common.isOnline = False
+acc, tool = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOffline")
+acc2, tool = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOffline")
+acc.merge(acc2)
+acc.wasMerged()
+
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/CMakeLists.txt b/InnerDetector/InDetConditions/SiPropertiesTool/CMakeLists.txt
index c91b4aef25d5..0cc2f935cad8 100644
--- a/InnerDetector/InDetConditions/SiPropertiesTool/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/CMakeLists.txt
@@ -43,6 +43,11 @@ atlas_add_test( TestSCTProperties
                 PROPERTIES TIMEOUT 300
                 ENVIRONMENT THREADS=5 )
 
+atlas_add_test( SiPropertiesConfig_test
+                SCRIPT test/SiPropertiesConfig_test.py
+                PROPERTIES TIMEOUT 300 )
+
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
+
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py b/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
new file mode 100644
index 000000000000..66de19b5e61c
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
@@ -0,0 +1,25 @@
+"""Define methods to configure SiPropertiesTool
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from PixelConditionsTools.PixelDCSConditionsConfig import PixelDCSConditionsCfg
+from SiPropertiesTool.SiPropertiesToolConf import SiPropertiesTool
+from SiPropertiesTool.SiPropertiesToolConf import PixelSiPropertiesCondAlg
+
+def PixelSiPropertiesToolCfg(flags, name="PixelSiPropertiesTool", **kwargs):
+    """Return a SiPropertiesTool configured for Pixel"""
+    kwargs.setdefault("DetectorName", "Pixel")
+    kwargs.setdefault("ReadKey", "PixelSiliconPropertiesVector")
+    return SiPropertiesTool(name=name, **kwargs)
+
+def PixelSiPropertiesCfg(flags, name="PixelSiPropertiesCondAlg", **kwargs):
+    """Return configured ComponentAccumulator and tool for PixelSiPropertiesCondAlg
+
+    SiPropertiesTool may be provided in kwargs
+    """
+    acc = PixelDCSConditionsCfg(flags)
+    tool = kwargs.get("SiPropertiesTool", PixelSiPropertiesToolCfg(flags))
+    acc.addCondAlgo(PixelSiPropertiesCondAlg(name, **kwargs))
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py b/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
new file mode 100644
index 000000000000..db9151a29e3d
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
@@ -0,0 +1,25 @@
+"""Define methods to configure SCT SiProperties
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from SiPropertiesTool.SiPropertiesToolConf import SiPropertiesTool
+from SiPropertiesTool.SiPropertiesToolConf import SCTSiPropertiesCondAlg
+
+def SCT_SiPropertiesToolCfg(flags, name="SCT_SiPropertiesTool", **kwargs):
+    """Return a SiPropertiesTool configured for SCT"""
+    kwargs.setdefault("DetectorName", "SCT")
+    kwargs.setdefault("ReadKey", "SCTSiliconPropertiesVector")
+    return SiPropertiesTool(name=name, **kwargs)
+
+def SCT_SiPropertiesCfg(flags, name="SCTSiPropertiesCondAlg", **kwargs):
+    """Return configured ComponentAccumulator and tool for SCT_SiProperties
+
+    SiConditionsTool and/or SiPropertiesTool may be provided in kwargs
+    """
+    acc = ComponentAccumulator()
+    tool = kwargs.get("SiPropertiesTool", SCT_SiPropertiesToolCfg(flags))
+    alg = SCTSiPropertiesCondAlg(name, **kwargs)
+    acc.addEventAlgo(alg)
+    return acc, tool
+
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py b/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
new file mode 100755
index 000000000000..b68c74d5ce63
--- /dev/null
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+"""Run tests on SCT_SiPropertiesConfig.py
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from SiPropertiesTool.SCT_SiPropertiesConfig import SCT_SiPropertiesCfg
+from SiPropertiesTool.PixelSiPropertiesConfig import PixelSiPropertiesCfg
+
+# test setup
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+# test
+acc1, tool = SCT_SiPropertiesCfg(ConfigFlags, name="SCT_SiPropertiesConfigTest")
+acc2, tool = PixelSiPropertiesCfg(ConfigFlags, name="PixelSiPropertiesConfigTest")
+# prevent raise on __del__
+acc1.merge(acc2)
+acc1.wasMerged()
+
diff --git a/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt b/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
index 3cf3b4331657..bf7ce80ff9a5 100644
--- a/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
@@ -40,6 +40,10 @@ atlas_add_component( PixelCabling
    ${TDAQ-COMMON_LIBRARIES} GaudiKernel AthenaBaseComps SGTools StoreGateLib
    AthenaPoolUtilities Identifier InDetIdentifier InDetReadoutGeometry PathResolver PixelCablingLib )
 
+atlas_add_test( PixelCablingConfigNew_test
+                SCRIPT test/PixelCablingConfigNew_test.py
+                PROPERTIES TIMEOUT 30 )
+
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
diff --git a/InnerDetector/InDetDetDescr/PixelCabling/python/PixelCablingConfigNew.py b/InnerDetector/InDetDetDescr/PixelCabling/python/PixelCablingConfigNew.py
new file mode 100644
index 000000000000..1d631ad0ac62
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/PixelCabling/python/PixelCablingConfigNew.py
@@ -0,0 +1,100 @@
+"""Define a method to construct configured PixelCablingSvc
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaCommon.Logging import logging
+from IOVDbSvc.CondDB import conddb
+from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline, addFolders
+from PixelCabling.PixelCablingConf import PixelCablingSvc
+from RecExConfig.AutoConfiguration import GetRunNumber
+
+def PixelCablingSvcCfg(flags, name="PixelCablingSvc", **kwargs):
+    """Return a ComponentAccumulator with configured PixelCablingSvc"""
+    acc = ComponentAccumulator()
+    logger = logging.getLogger("PixelCablingSvc")
+    if flags.Input.isMC:
+        acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/ReadoutSpeed", "/PIXEL/ReadoutSpeed"))
+    else:
+        acc.merge(addFolders(flags, "/PIXEL/ReadoutSpeed", "PIXEL"))
+    # Add the HitDiscCnfg folder
+    if (conddb.dbdata == "CONDBR2" or (conddb.dbmc == "OFLP200" and flags.GeoModel.Run == "RUN2")):
+        acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/HitDiscCnfg", "/PIXEL/HitDiscCnfg"))
+    # Online mode
+    if flags.Common.isOnline:
+        logger.debug("Running in online mode")
+        # Request the CablingMap folder
+        # (COOL is the default mapping type)
+        if (conddb.dbdata == "CONDBR2"):
+            acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/CablingMap","/PIXEL/CablingMap"))
+            logger.debug("Requested CablingMap folder")
+        else:
+            kwargs.setdefault("MappingType", "Final")
+            kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_May08.dat")
+    # Offline mode
+    else:
+        logger.debug("Running in offline mode")
+        # SIMULATION
+        if flags.Input.isMC:
+            logger.debug("Running on simulation")
+            # Set cabling svc to get map from file
+            kwargs.setdefault("MappingType", "Final")
+            # ITk:
+            if flags.GeoModel.Run == "RUN4":
+                IdMappingDat = "ITk_Atlas_IdMapping.dat"
+                if flags.GeoModel.Type == "BrlIncl4.0_ref":
+                    IdMappingDat = "ITk_Atlas_IdMapping_InclBrl4.dat"
+                elif flags.GeoModel.Type == "IBrlExt4.0ref":
+                    IdMappingDat = "ITk_Atlas_IdMapping_IExtBrl4.dat"
+                elif flags.GeoModel.Type == "BrlExt4.0_ref":
+                    IdMappingDat = "ITk_Atlas_IdMapping_ExtBrl4.dat"
+                elif flags.GeoModel.Type == "BrlExt3.2_ref":
+                    IdMappingDat = "ITk_Atlas_IdMapping_ExtBrl32.dat"
+                logger.info("Using ITk pixel mapping: %s" % IdMappingDat)
+                kwargs.setdefault("MappingFile", IdMappingDat)
+            # IBL
+            elif flags.GeoModel.Run == "RUN2" or flags.GeoModel.Run == "RUN3":
+                # Planar IBL
+                if flags.GeoModel.IBLLayout == "planar":
+                    # DBM or not
+                    if flags.GeoModel.Run == "RUN2":
+                        kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_inclIBL_DBM.dat")
+                    else:
+                        kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_inclIBL.dat")
+                # Hybrid IBL plus DBM
+                elif flags.GeoModel.IBLLayout == "3D":
+                    #kwargs.setdefault("MappingFile", "Pixels_Atlas_IdMapping_inclIBL3D_DBM.dat")
+                    kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_Run2.dat")
+                elif flags.GeoModel.IBLLayout == "UNDEFINED":
+                    logger.warning("IBL is required, but flags.GeoModel.IBLLayout is \"UNDEFINED\"")
+                    logger.warning("Pixel cabling map cannot be set at this point")
+            # No IBL
+            else:
+                kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping.dat")
+        # DATA
+        elif not flags.Input.isMC:
+            runNum = GetRunNumber()
+            logger.debug("Running on data, run number %d" % runNum)
+            # For data older than run number 222222, use the appropriate text file
+            if runNum < 222222:
+                kwargs.setdefault("MappingType", "Final")
+                kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_May08.dat")
+            # For Run-2 onwards, get cabling map from database
+            else:
+                kwargs.setdefault("MappingType", "COOL")
+                kwargs.setdefault("KeyCabling", "/PIXEL/CablingMap")
+                # Request the CablingMap folder
+                acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/CablingMap","/PIXEL/CablingMap"))
+                logger.debug("Requested CablingMap folder")
+                # Even though we are reading from COOL, set the correct fallback map.
+                if runNum >= 289350: # 2016
+                    kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_2016.dat")
+                elif runNum >= 222222 and runNum < 289350: # 2015
+                    kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_Run2.dat")
+                else:
+                    kwargs.setdefault("MappingFile", "PixelCabling/Pixels_Atlas_IdMapping_May08.dat")
+        # Unknown input
+        else:
+            logger.warning("Unknown input source. Pixel cabling map cannot be set at this point")
+    acc.addService(PixelCablingSvc(name, **kwargs))
+    return acc
diff --git a/InnerDetector/InDetDetDescr/PixelCabling/test/PixelCablingConfigNew_test.py b/InnerDetector/InDetDetDescr/PixelCabling/test/PixelCablingConfigNew_test.py
new file mode 100755
index 000000000000..16ad79046ad9
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/PixelCabling/test/PixelCablingConfigNew_test.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""Run tests on PixelCablingConfigNew.py
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from PixelCabling.PixelCablingConfigNew import PixelCablingSvcCfg
+
+# test setup
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+# test
+PixelCablingAcc = PixelCablingSvcCfg(ConfigFlags, name="PixelCablingSvcTest")
+# prevent raise on __del__
+PixelCablingAcc.wasMerged()
+
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
index b8f0e266f737..22fc5f896eb3 100755
--- a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
@@ -55,10 +55,10 @@ def BCM_DigitizationCfg(configFlags, name="BCM_OverlayDigitization", **kwargs):
 
 def BCM_OverlayDigitizationToolCfg(configFlags, name="BCM_OverlayDigitizationTool", **kwargs):
     """Return tuple (ComponentAccumulator, tool) configured for BCM Overlay Digitization"""
-    kwargs.setdefault("EvtStore", configFlags.Overlay.EventStore)
+    kwargs.setdefault("EvtStore", configFlags.Overlay.Legacy.EventStore)
     return BCM_DigitizationToolCfg(configFlags, name, **kwargs)
 
-def BCM_OverlayDigitization(configFlags, name="BCM_OverlayDigitization", **kwargs):
+def BCM_OverlayDigitizationCfg(configFlags, name="BCM_OverlayDigitization", **kwargs):
     """Return a ComponentAccumulator with BCM Overlay Digitization algorithm"""
     acc, tool = BCM_OverlayDigitizationToolCfg(configFlags, **kwargs)
     kwargs.setdefault("DigitizationTool", tool)
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
index 17b3469e2e68..daf3af3ae99f 100755
--- a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
@@ -9,37 +9,38 @@ from AthenaCommon.Constants import DEBUG
 from AthenaCommon.Configurable import Configurable
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
 from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
+from AthenaConfiguration.TestDefaults import defaultTestFiles
 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
-from BCM_Digitization.BCM_DigitizationConfigFlags import createBCMCfgFlags
 from BCM_Digitization.BCM_DigitizationConfigNew import BCM_DigitizationCfg
+from Digitization.DigitizationConfigFlags import createDigitizationCfgFlags
+from OverlayCommonAlgs.OverlayConfigFlags import createOverlayCfgFlags
 from TrigUpgradeTest.InDetConfig import InDetGMConfig # FIXME This module would ideally be located somewhere else
+
 # Set up logging and new style config
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
-# Provide input
-dataDir = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art"
-inputDir = os.environ.get("ATLAS_REFERENCE_DATA", dataDir)
-fileDir = "/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1"
-ConfigFlags.Input.Files = [inputDir + fileDir]
-# Specify output
+# Configure
+ConfigFlags.Input.Files = defaultTestFiles.HITS
 ConfigFlags.Output.RDOFileName = "myRDO.pool.root"
+ConfigFlags.join(createDigitizationCfgFlags())
+ConfigFlags.join(createOverlayCfgFlags())
 ConfigFlags.lock()
-# Construct ComponentAccumulator
-cfg = MainServicesSerialCfg()
-cfg.merge(PoolReadCfg(ConfigFlags))
-cfg.merge(InDetGMConfig(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required for BCM
-# Use BCM tools
-BCMflags = createBCMCfgFlags()
-acc = BCM_DigitizationCfg(BCMflags)
-cfg.merge(acc)
+# Construct our accumulator to run
+acc = MainServicesSerialCfg()
+from StoreGate.StoreGateConf import StoreGateSvc # FIXME remove this once athena is fixed
+acc.addService(StoreGateSvc("ConditionStore"))
+acc.merge(PoolReadCfg(ConfigFlags))
+acc.merge(InDetGMConfig(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required for BCM
 # Add configuration to write HITS pool file
 outConfig = OutputStreamCfg(ConfigFlags, "RDO",
     ItemList=["InDetSimDataCollection#*", "BCM_RDO_Container#*"])
-cfg.merge(outConfig)
-cfg.getService("StoreGateSvc").Dump=True
-cfg.printConfig(withDetails=True)
+acc.merge(outConfig)
+# Dump config
+acc.getService("StoreGateSvc").Dump=True
+acc.getService("ConditionStore").Dump = True
+acc.printConfig(withDetails=True)
 ConfigFlags.dump()
 # Execute and finish
-cfg.run(maxEvents=3)
+acc.run(maxEvents=3)
 
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/CMakeLists.txt b/InnerDetector/InDetDigitization/SCT_Digitization/CMakeLists.txt
index 2b9b85790706..9430fcedfd7d 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/CMakeLists.txt
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/CMakeLists.txt
@@ -42,6 +42,10 @@ atlas_add_component( SCT_Digitization
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                      LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} CommissionEvent AthenaBaseComps AthenaKernel PileUpToolsLib Identifier xAODEventInfo GaudiKernel SiDigitization InDetRawData InDetSimEvent HitManagement GeneratorObjects SiPropertiesToolLib InDetIdentifier InDetReadoutGeometry InDetSimData )
 
+atlas_add_test( SCT_DigitizationConfigNew_test
+                SCRIPT test/SCT_DigitizationConfigNew_test.py
+                PROPERTIES TIMEOUT 300 )
+
 # Install files from the package:
 atlas_install_headers( SCT_Digitization )
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
new file mode 100644
index 000000000000..d54410fc56e1
--- /dev/null
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
@@ -0,0 +1,254 @@
+"""Define methods to construct configured SCT Digitization tools and algorithms
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaCommon import Logging
+from SCT_Digitization.SCT_DigitizationConf import (
+    SCT_RandomDisabledCellGenerator,
+    SCT_Amp,
+    SCT_DetailedSurfaceChargesGenerator,
+    SCT_SurfaceChargesGenerator,
+    SCT_FrontEnd,
+    SCT_DigitizationTool,
+    SCT_Digitization,
+)
+from PileUpComps.PileUpCompsConf import PileUpXingFolder
+from SCT_ConditionsTools.SCT_ConditionsToolsConf import SCT_RadDamageSummaryTool
+from SCT_GeoModel.SCT_GeoModelConfig import SCT_GeometryCfg
+from SCT_ConditionsTools.SCT_DCSConditionsConfig import SCT_DCSConditionsCfg
+from SCT_ConditionsTools.SCT_SiliconConditionsConfig import SCT_SiliconConditionsCfg
+from SCT_ConditionsTools.SCT_ReadCalibChipDataConfig import SCT_ReadCalibChipDataCfg
+from SiPropertiesTool.SCT_SiPropertiesConfig import SCT_SiPropertiesCfg
+from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
+from StoreGate.StoreGateConf import StoreGateSvc
+
+# The earliest and last bunch crossing times for which interactions will be sent
+# to the SCT Digitization code
+def SCT_FirstXing():
+    return -50
+
+def SCT_LastXing():
+    return 25
+
+def SCT_DigitizationCommonCfg(flags, name="SCT_DigitizationToolCommon", **kwargs):
+    """Return ComponentAccumulator with common SCT digitization tool config"""
+    acc = SCT_GeometryCfg(flags)
+    if not flags.Digitization.DoInnerDetectorNoise:
+        kwargs.setdefault("OnlyHitElements", True)
+    kwargs.setdefault("InputObjectName", "SCT_Hits")
+    kwargs.setdefault("EnableHits", True)
+    kwargs.setdefault("BarrelOnly", False)
+    # Set FixedTime for cosmics for use in SurfaceChargesGenerator
+    if flags.Beam.Type == "cosmics":
+        kwargs.setdefault("CosmicsRun", True)
+        kwargs.setdefault("FixedTime", 10)
+    if flags.Digitization.DoXingByXingPileUp:
+        kwargs.setdefault("FirstXing", SCT_FirstXing())
+        kwargs.setdefault("LastXing", SCT_LastXing() )
+    tool = SCT_DigitizationTool(name, **kwargs)
+    # attach ToolHandles
+    frontAcc, frontTool = SCT_FrontEndCfg(flags)
+    tool.FrontEnd = frontTool
+    surfAcc, surfTool = SCT_SurfaceChargesGeneratorCfg(flags)
+    tool.SurfaceChargesGenerator = surfTool
+    tool.RandomDisabledCellGenerator = SCT_RandomDisabledCellGeneratorCfg(flags)
+    acc.mergeAll([frontAcc, surfAcc])
+    return acc, tool
+
+def SCT_DigitizationToolCfg(flags, name="SCT_DigitizationTool", **kwargs):
+    """Return configured digitization tool"""
+    if flags.Digitization.PileUpPremixingForMT:
+        kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "SCT_SDO_Map")
+    else:
+        kwargs.setdefault("OutputObjectName", "SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
+    kwargs.setdefault("HardScatterSplittingMode", 0)
+    return SCT_DigitizationCommonCfg(flags, name, **kwargs)
+
+def SCT_DigitizationToolHSCfg(flags, name="SCT_DigitizationToolHS", **kwargs):
+    """Return hard scatter configured digitization tool"""
+    kwargs.setdefault("OutputObjectName", "SCT_RDOs")
+    kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
+    kwargs.setdefault("HardScatterSplittingMode", 1)
+    return SCT_DigitizationCommonCfg(flags, name, **kwargs)
+
+def SCT_DigitizationToolPUCfg(flags, name="SCT_DigitizationToolPU",**kwargs):
+    """Return pileup configured digitization tool"""
+    kwargs.setdefault("OutputObjectName", "SCT_PU_RDOs")
+    kwargs.setdefault("OutputSDOName", "SCT_PU_SDO_Map")
+    kwargs.setdefault("HardScatterSplittingMode", 2)
+    return SCT_DigitizationCommonCfg(flags, name, **kwargs)
+
+def SCT_DigitizationToolOverlayCfg(flags, name="SCT_OverlayDigitizationTool",**kwargs):
+    """Return overlay configured digitization tool"""
+    acc = ComponentAccumulator()
+    if flags.Overlay.Legacy.MT:
+        kwargs.setdefault("InputSingleHitsName", "SCT_Hits")
+        kwargs.setdefault("OutputObjectName", "StoreGateSvc+" + flags.Overlay.SigPrefix + "SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", "StoreGateSvc+" + flags.Overlay.SigPrefix + "SCT_SDO_Map")
+    else:
+        acc.addService(StoreGateSvc(flags.Overlay.Legacy.EventStore))
+        kwargs.setdefault("OutputObjectName", flags.Overlay.Legacy.EventStore + "+SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", flags.Overlay.Legacy.EventStore + "+SCT_SDO_Map")
+    kwargs.setdefault("HardScatterSplittingMode", 0)
+    CommonAcc, tool = SCT_DigitizationCommonCfg(flags, name, **kwargs)
+    acc.merge(CommonAcc)
+    return acc, tool
+
+def SCT_DigitizationToolSplitNoMergePUCfg(flags, name="SCT_DigitizationToolSplitNoMergePU",**kwargs):
+    """Return no merged pileup configured digitization tool"""
+    kwargs.setdefault("InputObjectName", "PileupSCT_Hits")
+    kwargs.setdefault("HardScatterSplittingMode", 0)
+    kwargs.setdefault("OutputObjectName", "SCT_PU_RDOs")
+    kwargs.setdefault("OutputSDOName", "SCT_PU_SDO_Map")
+    kwargs.setdefault("OnlyHitElements", True)
+    kwargs.setdefault("FrontEnd", "PileupSCT_FrontEnd")
+    return SCT_DigitizationCommonCfg(flags, name, **kwargs)
+
+def SCT_DigitizationToolGeantinoTruthCfg(flags, name="SCT_GeantinoTruthDigitizationTool", **kwargs):
+    """Return Geantino truth configured digitization tool"""
+    kwargs.setdefault("ParticleBarcodeVeto", 0)
+    return SCT_DigitizationToolCfg(flags, name, **kwargs)
+
+def SCT_RandomDisabledCellGeneratorCfg(flags, name="SCT_RandomDisabledCellGenerator", **kwargs):
+    """Return configured random cell disabling tool"""
+    kwargs.setdefault("TotalBadChannels", 0.01)
+    return SCT_RandomDisabledCellGenerator(name, **kwargs)
+
+def SCT_AmpCfg(flags, name="SCT_Amp", **kwargs):
+    """Return configured amplifier and shaper tool"""
+    kwargs.setdefault("CrossFactor2sides", 0.1)
+    kwargs.setdefault("CrossFactorBack", 0.07)
+    kwargs.setdefault("PeakTime", 21)
+    kwargs.setdefault("deltaT", 1.0)
+    kwargs.setdefault("Tmin", -25.0)
+    kwargs.setdefault("Tmax", 150.0)
+    return SCT_Amp(name, **kwargs)
+
+def SCT_SurfaceChargesGeneratorCfg(flags, name="SCT_SurfaceChargesGenerator", **kwargs):
+    """Return configured (detailed) surface charges tool, conditioned on flags"""
+    acc = ComponentAccumulator()
+    kwargs.setdefault("FixedTime", -999)
+    kwargs.setdefault("SubtractTime", -999)
+    kwargs.setdefault("SurfaceDriftTime", 10)
+    kwargs.setdefault("NumberOfCharges", 1)
+    kwargs.setdefault("SmallStepLength", 5)
+    kwargs.setdefault("DepletionVoltage", 70)
+    kwargs.setdefault("BiasVoltage", 150)
+    kwargs.setdefault("isOverlay", flags.Detector.Overlay)
+    # kwargs.setdefault("doTrapping", True) # ATL-INDET-INT-2016-019
+    # experimental SCT_DetailedSurfaceChargesGenerator config dropped here
+    tool = SCT_SurfaceChargesGenerator(name, **kwargs)
+    tool.RadDamageSummaryTool = SCT_RadDamageSummaryTool()
+    DCSCondAcc, DCSCondTool = SCT_DCSConditionsCfg(flags)
+    SiliCondAcc, SiliCondTool = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSCondTool)
+    SiliPropsAcc, SiliPropsTool = SCT_SiPropertiesCfg(flags, SiConditionsTool=SiliCondTool)
+    LorentzAcc, LorentzTool = SCT_LorentzAngleCfg(flags)
+    tool.SiConditionsTool = SiliCondTool
+    tool.SiPropertiesTool = SiliPropsTool
+    tool.LorentzAngleTool = LorentzTool
+    acc.mergeAll([DCSCondAcc, SiliCondAcc, SiliPropsAcc, LorentzAcc])
+    return acc, tool
+
+def SCT_FrontEndCfg(flags, name="SCT_FrontEnd", **kwargs):
+    """Return configured ComponentAccumulator with front-end electronics tool"""
+    acc = ComponentAccumulator()
+    # Setup noise treament in SCT_FrontEnd
+    # To set the mean noise values for the different module types
+    # Default values set at 0 degrees, plus/minus ~5 enc per plus/minus degree
+    kwargs.setdefault("NoiseBarrel", 1500.0)
+    kwargs.setdefault("NoiseBarrel3", 1541.0)
+    kwargs.setdefault("NoiseInners", 1090.0)
+    kwargs.setdefault("NoiseMiddles", 1557.0)
+    kwargs.setdefault("NoiseShortMiddles", 940.0)
+    kwargs.setdefault("NoiseOuters", 1618.0)
+    kwargs.setdefault("NOBarrel", 1.5e-5)
+    kwargs.setdefault("NOBarrel3", 2.1e-5)
+    kwargs.setdefault("NOInners", 5.0e-9)
+    kwargs.setdefault("NOMiddles", 2.7e-5)
+    kwargs.setdefault("NOShortMiddles", 2.0e-9)
+    kwargs.setdefault("NOOuters", 3.5e-5)
+    if not flags.Digitization.DoInnerDetectorNoise:
+        Logging.logging.getLogger("SCT_FrontEndCfg")
+        log.info("SCT_Digitization:::: Turned off Noise in SCT_FrontEnd")
+        kwargs.setdefault("NoiseOn", False)
+        kwargs.setdefault("AnalogueNoiseOn", False)
+    else:
+        kwargs.setdefault("NoiseOn", True)
+        kwargs.setdefault("AnalogueNoiseOn", True)
+    # In overlay MC, only analogue noise is on. Noise hits are not added.
+    if flags.Detector.Overlay and flags.Input.isMC:
+        kwargs["NoiseOn"] = False
+        kwargs["AnalogueNoiseOn"] = True
+    # Use Calibration data from Conditions DB, still for testing purposes only
+    kwargs.setdefault("UseCalibData", True)
+    # Setup the ReadCalibChip folders and Svc
+    readAcc, readTool = SCT_ReadCalibChipDataCfg(flags)
+    kwargs.setdefault("SCT_ReadCalibChipDataTool", readTool)
+    acc.merge(readAcc)
+    # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx
+    if flags.Digitization.PileUpPremixing:
+        kwargs.setdefault("DataCompressionMode", 3)
+    elif flags.Detector.Overlay and flags.Input.isMC:
+        kwargs.setdefault("DataCompressionMode", 2)
+    elif flags.Beam.BunchSpacing <= 50:
+        kwargs.setdefault("DataCompressionMode", 1)
+    else:
+        kwargs.setdefault("DataCompressionMode", 3)
+    # DataReadOutMode: 0 is condensed mode and 1 is expanded mode
+    if flags.Detector.Overlay and flags.Input.isMC:
+        kwargs.setdefault("DataReadOutMode", 0)
+    else:
+        kwargs.setdefault("DataReadOutMode", 1)
+    return acc, SCT_FrontEnd(name, **kwargs)
+
+def SCT_FrontEndPileupCfg(flags, name="PileupSCT_FrontEnd", **kwargs):
+    """Return pileup-configured ComponentAccumulator with front-end electronics tool"""
+    kwargs.setdefault("NoiseBarrel", 0.0)
+    kwargs.setdefault("NoiseBarrel3", 0.0)
+    kwargs.setdefault("NoiseInners", 0.0)
+    kwargs.setdefault("NoiseMiddles", 0.0)
+    kwargs.setdefault("NoiseShortMiddles", 0.0)
+    kwargs.setdefault("NoiseOuters", 0.0)
+    kwargs.setdefault("NOBarrel", 0.0)
+    kwargs.setdefault("NOBarrel3", 0.0)
+    kwargs.setdefault("NOInners", 0.0)
+    kwargs.setdefault("NOMiddles", 0.0)
+    kwargs.setdefault("NOShortMiddles", 0.0)
+    kwargs.setdefault("NOOuters", 0.0)
+    kwargs.setdefault("NoiseOn", False)
+    return SCT_FrontEndCfg(flags, name, **kwargs)
+
+def SiliconRangeCfg(flags, name="SiliconRange", **kwargs):
+    """Return a configured PileUpXingFolder tool"""
+    kwargs.setdefault("FirstXing", SCT_FirstXing())
+    kwargs.setdefault("LastXing", SCT_LastXing())
+    kwargs.setdefault("CacheRefreshFrequency", 1.0) # default 0 no dataproxy reset
+    kwargs.setdefault("ItemList", ["SiHitCollection#SCT_Hits"] )
+    return PileUpXingFolder(name, **kwargs)
+
+def SCT_DigitizationCfg(toolCfg, flags, name="SCT_Digitization", **kwargs):
+    """Return a ComponentAccumulator with toolCfg type SCT digitization"""
+    acc = ComponentAccumulator()
+    if "DigitizationTool" not in kwargs:
+        toolAcc, tool = toolCfg(flags)
+        kwargs["DigitizationTool"] = tool
+        acc.merge(toolAcc)
+    alg = SCT_Digitization(name, **kwargs)
+    acc.addEventAlgo(alg)
+    return acc
+
+def SCT_DigitizationHSCfg(flags, name="SCT_DigitizationHS", **kwargs):
+    """Return a ComponentAccumulator with Hard Scatter SCT digitization"""
+    return SCT_DigitizationCfg(SCT_DigitizationToolHSCfg, flags, name, **kwargs)
+
+def SCT_DigitizationPUCfg(flags, name="SCT_DigitizationPU", **kwargs):
+    """Return a ComponentAccumulator with PileUp SCT digitization"""
+    return SCT_DigitizationCfg(SCT_DigitizationToolPUCfg, flags, name, **kwargs)
+
+def SCT_DigitizationOverlayCfg(flags, name="SCT_OverlayDigitization", **kwargs):
+    """Return a ComponentAccumulator with Overlay SCT digitization"""
+    return SCT_DigitizationCfg(SCT_DigitizationToolOverlayCfg, flags, name, **kwargs)
+
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py b/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
new file mode 100755
index 000000000000..334c61141216
--- /dev/null
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+"""Run tests on SCT_DigitizationConfigNew.py
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+from AthenaCommon.Configurable import Configurable
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
+from AthenaConfiguration.TestDefaults import defaultTestFiles
+from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg
+from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
+from SCT_Digitization.SCT_DigitizationConfigNew import (
+    SCT_RandomDisabledCellGeneratorCfg, SCT_AmpCfg, SCT_SurfaceChargesGeneratorCfg,
+    SCT_FrontEndCfg, SCT_FrontEndPileupCfg, SCT_DigitizationCommonCfg, SCT_DigitizationToolCfg,
+    SCT_DigitizationToolGeantinoTruthCfg, SCT_DigitizationToolHSCfg, SCT_DigitizationToolPUCfg,
+    SCT_DigitizationToolSplitNoMergePUCfg, SCT_DigitizationToolOverlayCfg, SCT_DigitizationHSCfg,
+    SCT_DigitizationPUCfg, SCT_DigitizationOverlayCfg, SiliconRangeCfg,
+)
+from Digitization.DigitizationConfigFlags import createDigitizationCfgFlags
+from OverlayCommonAlgs.OverlayConfigFlags import createOverlayCfgFlags
+
+# Set up logging and new style config
+log.setLevel(DEBUG)
+Configurable.configurableRun3Behavior = True
+# Configure
+ConfigFlags.join(createDigitizationCfgFlags())
+ConfigFlags.join(createOverlayCfgFlags())
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
+ConfigFlags.GeoModel.Align.Dynamic = False
+ConfigFlags.Concurrency.NumThreads = 1
+ConfigFlags.lock()
+# Function tests
+acc1, tool = SCT_DigitizationCommonCfg(ConfigFlags)
+acc2, tool = SCT_DigitizationToolCfg(ConfigFlags)
+acc3, tool = SCT_DigitizationToolHSCfg(ConfigFlags)
+acc4, tool = SCT_DigitizationToolPUCfg(ConfigFlags)
+acc5, tool = SCT_DigitizationToolOverlayCfg(ConfigFlags)
+acc6, tool = SCT_DigitizationToolSplitNoMergePUCfg(ConfigFlags)
+acc7, tool = SCT_DigitizationToolGeantinoTruthCfg(ConfigFlags)
+tool = SCT_RandomDisabledCellGeneratorCfg(ConfigFlags)
+tool = SCT_AmpCfg(ConfigFlags)
+acc8, tool = SCT_SurfaceChargesGeneratorCfg(ConfigFlags)
+acc9, tool = SCT_FrontEndCfg(ConfigFlags)
+accA, tool = SCT_FrontEndPileupCfg(ConfigFlags)
+tool = SiliconRangeCfg(ConfigFlags)
+accB = SCT_DigitizationHSCfg(ConfigFlags)
+accC = SCT_DigitizationPUCfg(ConfigFlags)
+accD = SCT_DigitizationOverlayCfg(ConfigFlags)
+acc1.mergeAll([acc2, acc3, acc4, acc5, acc6, acc7, acc8, acc9, accA, accB, accC, accD])
+acc1.wasMerged()
+# Construct our accumulator to run
+acc = MainServicesSerialCfg()
+from StoreGate.StoreGateConf import StoreGateSvc # FIXME remove this once athena is fixed
+acc.addService(StoreGateSvc("ConditionStore"))
+acc.merge(PoolReadCfg(ConfigFlags))
+acc.merge(SCT_DigitizationHSCfg(ConfigFlags))
+# Add configuration to write HITS pool file
+outConfig = OutputStreamCfg(ConfigFlags, "RDO",
+                            ItemList=["InDet::SiClusterContainer#*", "SCT_RDO_Container#*"])
+acc.merge(outConfig)
+# Dump config
+acc.getService("StoreGateSvc").Dump = True
+acc.getService("ConditionStore").Dump = True
+acc.printConfig(withDetails=True)
+ConfigFlags.dump()
+# Execute and finish
+acc.run(maxEvents=3)
+
diff --git a/Simulation/Digitization/python/DigitizationConfigFlags.py b/Simulation/Digitization/python/DigitizationConfigFlags.py
new file mode 100644
index 000000000000..4345f43b11bc
--- /dev/null
+++ b/Simulation/Digitization/python/DigitizationConfigFlags.py
@@ -0,0 +1,19 @@
+"""Construct ConfigFlags for Digitization
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+
+def createDigitizationCfgFlags():
+    """Return an AthConfigFlags object with required flags"""
+    flags = AthConfigFlags()
+    # Run Inner Detector noise simulation
+    flags.addFlag("Digitization.DoInnerDetectorNoise", True)
+    # Run pile-up digitization on one bunch crossing at a time?
+    flags.addFlag("Digitization.DoXingByXingPileUp", False)
+    # Run pile-up premixing
+    flags.addFlag("Digitization.PileUpPremixing", False)
+    # Run pile-up premixing for Multi-Threading
+    flags.addFlag("Digitization.PileUpPremixingForMT", False)
+    return flags
+
-- 
GitLab


From b1224d0883e05c3291c31ba29fa3282504520057 Mon Sep 17 00:00:00 2001
From: Stewart Martin-Haugh <smh@cern.ch>
Date: Thu, 14 Mar 2019 09:53:57 +0100
Subject: [PATCH 036/163] Use ID geometry setup from GeoModel

---
 .../TrigUpgradeTest/python/InDetConfig.py     | 55 ++-----------------
 1 file changed, 5 insertions(+), 50 deletions(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py
index 3c78e4354836..c1140dcbfd78 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/InDetConfig.py
@@ -27,58 +27,14 @@ def InDetIDCCacheCreatorCfg():
   acc.addEventAlgo( InDetCacheCreatorTrig )
   return acc
 
-
-
-#Set up ID GeoModel
-def InDetGMConfig( flags ):
-  acc = ComponentAccumulator()
-  from AtlasGeoModel.GeoModelConfig import GeoModelCfg
-  gmc,geoModelSvc = GeoModelCfg( flags )
-  acc.merge( gmc )
-
-  from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
-  acc.addService(GeometryDBSvc("InDetGeometryDBSvc"))
-
-  from AthenaCommon import CfgGetter
-  geoModelSvc.DetectorTools += [ CfgGetter.getPrivateTool("PixelDetectorTool", checkType=True) ]
-
-#  if (DetFlags.detdescr.BCM_on() ) :
-
-  from BCM_GeoModel.BCM_GeoModelConf import InDetDD__BCM_Builder
-  bcmTool = InDetDD__BCM_Builder()
-  acc.addPublicTool( bcmTool )
-  geoModelSvc.DetectorTools['PixelDetectorTool'].BCM_Tool = bcmTool
-
-  from BLM_GeoModel.BLM_GeoModelConf import InDetDD__BLM_Builder
-  blmTool = InDetDD__BLM_Builder()
-  acc.addPublicTool( blmTool )
-  geoModelSvc.DetectorTools['PixelDetectorTool'].BLM_Tool = blmTool
-
-  geoModelSvc.DetectorTools['PixelDetectorTool'].useDynamicAlignFolders = True #InDetGeometryFlags.useDynamicAlignFolders()
-
-#if ( DetFlags.detdescr.SCT_on() ):
-  # Current atlas specific code
-  from AthenaCommon import CfgGetter
-  geoModelSvc.DetectorTools += [ CfgGetter.getPrivateTool("SCT_DetectorTool", checkType=True) ]
-
-  geoModelSvc.DetectorTools['SCT_DetectorTool'].useDynamicAlignFolders = True #InDetGeometryFlags.useDynamicAlignFolders()
-
-#    if ( DetFlags.detdescr.TRT_on() ):
-  from TRT_GeoModel.TRT_GeoModelConf import TRT_DetectorTool
-  trtDetectorTool = TRT_DetectorTool()
-#  if ( DetFlags.simulate.TRT_on() ):
-#      trtDetectorTool.DoXenonArgonMixture = True
-#      trtDetectorTool.DoKryptonMixture = True
-  trtDetectorTool.useDynamicAlignFolders = True #InDetGeometryFlags.useDynamicAlignFolders()
-  geoModelSvc.DetectorTools += [ trtDetectorTool ]
-  acc.addService(geoModelSvc)
-  return acc
-
 #Set up conditions algorithms
 def TrigInDetCondConfig( flags ):
 
   acc = ComponentAccumulator()
-  acc.merge(InDetGMConfig(flags))
+  from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg
+  acc.merge(InDetGeometryCfg(flags))
+  #acc.merge(InDetGMConfig(flags))
+
   from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline, addFolders
   acc.merge(addFoldersSplitOnline(flags, "INDET","/Indet/Onl/AlignL1/ID","/Indet/AlignL1/ID",className="CondAttrListCollection"))
   acc.merge(addFoldersSplitOnline(flags, "INDET","/Indet/Onl/AlignL2/PIX","/Indet/AlignL2/PIX",className="CondAttrListCollection"))
@@ -495,8 +451,7 @@ if __name__ == "__main__":
 
     acc.merge( TrigInDetConfig( ConfigFlags ) )
     from RegionSelector.RegSelConfig import regSelCfg
-    rsc, regSel = regSelCfg( ConfigFlags )
-    regSel.enableCalo = False # turn off calo, certainly a better way to do this...
+    rsc = regSelCfg( ConfigFlags )
     acc.merge( rsc )
     acc.addService(regSel)
 
-- 
GitLab


From 66a5b9f75113173712b3f26baea3eb0ef28a7bd4 Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Fri, 15 Mar 2019 00:47:33 +0100
Subject: [PATCH 037/163] Fixed the retrieval of Event Info from event store
 inside AthenaEventLoopMgr::handle()

Fixes ATLASRECTS-4898
---
 .../AthenaServices/src/AthenaEventLoopMgr.cxx | 29 +++++++++----------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/Control/AthenaServices/src/AthenaEventLoopMgr.cxx b/Control/AthenaServices/src/AthenaEventLoopMgr.cxx
index ece6bb68f8a6..75a09f43c7f3 100644
--- a/Control/AthenaServices/src/AthenaEventLoopMgr.cxx
+++ b/Control/AthenaServices/src/AthenaEventLoopMgr.cxx
@@ -1086,21 +1086,6 @@ void AthenaEventLoopMgr::handle(const Incident& inc)
   }
 
   // Construct EventInfo
-  EventID eventID;
-  const EventInfo* pEvent=eventStore()->tryConstRetrieve<EventInfo>(); //Try getting EventInfo from old-style object
-  if (pEvent) {
-    eventID=*(pEvent->event_ID());
-  }
-  else { //Try getting xAOD::EventInfo object
-    const xAOD::EventInfo* xAODEvent=eventStore()->tryConstRetrieve<xAOD::EventInfo>(); 
-    if (xAODEvent==nullptr) {
-      error() << "Failed to get EventID from input. Tried old-style and xAOD::EventInfo" <<endmsg;
-      return; 
-    }
-    eventID=eventIDFromxAOD(xAODEvent);
-  }
-
-
   IOpaqueAddress* addr = nullptr;
   sc = m_evtSelector->next(*m_evtSelCtxt);
   if(!sc.isSuccess()) {
@@ -1126,6 +1111,20 @@ void AthenaEventLoopMgr::handle(const Incident& inc)
     return;
   }
 
+  EventID eventID;
+  const EventInfo* pEvent=eventStore()->tryConstRetrieve<EventInfo>(); //Try getting EventInfo from old-style object
+  if (pEvent) {
+    eventID=*(pEvent->event_ID());
+  }
+  else { //Try getting xAOD::EventInfo object
+    const xAOD::EventInfo* xAODEvent=eventStore()->tryConstRetrieve<xAOD::EventInfo>();
+    if (xAODEvent==nullptr) {
+      error() << "Failed to get EventID from input. Tried old-style and xAOD::EventInfo" <<endmsg;
+      return;
+    }
+    eventID=eventIDFromxAOD(xAODEvent);
+  }
+
   // Need to make sure we have a valid EventContext in place before
   // doing anything that could fire incidents.
   unsigned int conditionsRun = eventID.run_number();
-- 
GitLab


From 5a55801e440620662c2a7c8570323a0629f5d58c Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Fri, 15 Mar 2019 01:23:57 +0100
Subject: [PATCH 038/163] Finished the migration of LongLivedParticleDPDMaker
 to xAOD::EventInfo

---
 .../LongLivedParticleDPDMaker/CMakeLists.txt  |  3 +-
 .../RPVLLTestRates.h                          |  5 +++-
 .../src/RPVLLTestRates.cxx                    | 30 ++++++++-----------
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
index d4f0ba0143d7..3eefb5f3d620 100644
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
@@ -20,7 +20,6 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           Control/AthenaKernel
                           Event/EventBookkeeperMetaData
-                          Event/EventInfo
                           Event/FourMomUtils
                           Event/xAOD/xAODEventInfo
                           Event/xAOD/xAODJet
@@ -35,7 +34,7 @@ atlas_add_component( LongLivedParticleDPDMaker
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps xAODCaloEvent xAODEgamma xAODMuon xAODTracking GaudiKernel MuonSelectorToolsLib TrigDecisionToolLib TrigObjectMatchingLib AthenaKernel EventBookkeeperMetaData EventInfo FourMomUtils xAODEventInfo xAODJet xAODMissingET )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps xAODCaloEvent xAODEgamma xAODMuon xAODTracking GaudiKernel MuonSelectorToolsLib TrigDecisionToolLib TrigObjectMatchingLib AthenaKernel EventBookkeeperMetaData FourMomUtils xAODEventInfo xAODJet xAODMissingET )
 
 # Install files from the package:
 atlas_install_headers( LongLivedParticleDPDMaker )
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
index 69a9a8025a46..181e682df0af 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef RPVLL_TESTRATES_H
@@ -15,6 +15,8 @@
 #include "GaudiKernel/IIncidentListener.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ITHistSvc.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "TH1.h"
 #include "TH2.h"
@@ -39,6 +41,7 @@ class RPVLLTestRates : public AthAlgorithm  {
 
    int m_EventCounter;
    ServiceHandle<ITHistSvc> m_tHistSvc;
+   SG::ReadHandleKey<xAOD::EventInfo> m_evt{this, "EvtInfo", "EventInfo", "EventInfo name"};
 
    std::vector<std::string> m_DecisionLabel;
    std::vector<int>         m_EventNumber;
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
index e47f2a85be88..cd083a3b9569 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
@@ -1,12 +1,10 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LongLivedParticleDPDMaker/RPVLLTestRates.h"
 #include "EventBookkeeperMetaData/EventBookkeeperCollection.h"
 #include "EventBookkeeperMetaData/SkimDecisionCollection.h" 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 #include <iostream>
 
 
@@ -23,7 +21,6 @@ RPVLLTestRates::RPVLLTestRates(const std::string& name, ISvcLocator* pSvcLocator
   m_runNum(0),
   m_lumiBlock(0),
   m_evtNum(0)
-  //  m_filterPassed(0)
 {
 }
 
@@ -40,12 +37,12 @@ StatusCode RPVLLTestRates::initialize() {
 
   m_EventCounter=0;
 
-  StatusCode sc = m_tHistSvc.retrieve();
-  if (sc.isFailure()) return StatusCode::FAILURE;
+  ATH_CHECK(m_tHistSvc.retrieve());
+  ATH_CHECK( m_evt.initialize() );
 
   m_myTree= new TTree("myTree","myTree");
-  sc = m_tHistSvc->regTree("/AANT/myTree",m_myTree);
-  if (sc.isFailure()) msg(MSG::ERROR)<<"Failed to book TTree"<<endmsg;
+  StatusCode sc = m_tHistSvc->regTree("/AANT/myTree",m_myTree);
+  if (sc.isFailure()) ATH_MSG_ERROR("Failed to book TTree");
 
   m_myTree->Branch("RunNumber",&m_runNum,"RunNumber/I");
   m_myTree->Branch("LumiBlock",&m_lumiBlock,"LumiBlock/I");
@@ -55,7 +52,6 @@ StatusCode RPVLLTestRates::initialize() {
 } 
 
 StatusCode RPVLLTestRates::finalize() {
-  //  delete m_filterPassed;
   return StatusCode::SUCCESS;
 }		 
 
@@ -94,19 +90,19 @@ StatusCode RPVLLTestRates::execute() {
 
   m_EventCounter++;
 
-  const EventInfo* eventInfo = nullptr;
-  StatusCode sc = evtStore()->retrieve(eventInfo);
-  if (sc.isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if (!evt.isValid()) {
     ATH_MSG_ERROR( "Could not retrieve event info" );
+    return StatusCode::FAILURE;
   }
-  m_runNum     = eventInfo->event_ID()->run_number();
-  m_evtNum   = eventInfo->event_ID()->event_number();
-  m_lumiBlock     = eventInfo->event_ID()->lumi_block();
+  m_runNum    = evt->runNumber();
+  m_evtNum    = evt->eventNumber();
+  m_lumiBlock = evt->lumiBlock();
   
   
   //// these are the ones that are useful for RPVLL filters
   const SkimDecisionCollection *SDcoll = 0;
-  sc = evtStore()->retrieve(SDcoll, "StreamDESDM_RPVLL_SkimDecisionsContainer");
+  StatusCode sc = evtStore()->retrieve(SDcoll, "StreamDESDM_RPVLL_SkimDecisionsContainer");
   int isAc=0;
 
   if (sc.isSuccess()){
@@ -133,7 +129,7 @@ StatusCode RPVLLTestRates::execute() {
     }
   } 
   else {
-    msg(MSG::WARNING )<< "No SkimDecisionCollection was found: key = DESDM_RPVLL_SkimDecisionsContaine"<< endmsg;
+    ATH_MSG_WARNING("No SkimDecisionCollection was found: key = DESDM_RPVLL_SkimDecisionsContaine");
   }
   
   
-- 
GitLab


From 45dc2054b911d1ceaaaed2ba144a73c9379b7657 Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Fri, 15 Mar 2019 03:55:33 +0100
Subject: [PATCH 039/163] apply the review comments

---
 .../Root/TrigEgammaEFCaloSelectorTool.cxx              |  2 +-
 .../TrigEgammaEFCaloSelectorTool.h                     |  3 ---
 .../TrigEgammaEmulationTool/TrigEgammaEmulationTool.h  | 10 +++++-----
 .../python/TrigEgammaEmulationIsolationConfig.py       |  2 ++
 4 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
index fb2b2a9af71f..6273d312216a 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaEFCaloSelectorTool.cxx
@@ -1,5 +1,5 @@
 /*
- *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  *   */
 
 /**********************************************************************
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
index 1a7de4802d59..27def77df3c9 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEFCaloSelectorTool.h
@@ -10,10 +10,7 @@
 #include "TrigEgammaEmulationTool/TrigEgammaSelectorBaseTool.h"
 #include "AsgTools/AsgTool.h"
 #include "EgammaAnalysisInterfaces/IAsgElectronIsEMSelector.h"
-//#include "ElectronPhotonSelectorTools/IAsgPhotonIsEMSelector.h"
 #include "EgammaAnalysisInterfaces/IAsgElectronLikelihoodTool.h"
-//#include "egammaInterfaces/IEMFourMomBuilder.h"
-//#include "egammaInterfaces/IEMShowerBuilder.h"
 #include <vector>
 
 namespace Trig{
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
index d0946b0e49cf..a3060965f41f 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/TrigEgammaEmulationTool/TrigEgammaEmulationTool.h
@@ -123,17 +123,17 @@ class TrigEgammaEmulationTool
   template<class T>
   const T*
   TrigEgammaEmulationTool::getFeature(const HLT::TriggerElement* te,const std::string key){
-      if ( te == NULL ) return NULL;
-      if ( (m_trigdec->ancestor<T>(te,key)).te() == NULL )
-          return NULL;
+      if ( te == nullptr ) return nullptr;
+      if ( (m_trigdec->ancestor<T>(te,key)).te() == nullptr )
+          return nullptr;
       return ( (m_trigdec->ancestor<T>(te)).cptr() );
   }
 
   template<class T>
   bool
   TrigEgammaEmulationTool::ancestorPassed(const HLT::TriggerElement* te,const std::string key){
-      if ( te == NULL ) return false;
-      if ( (m_trigdec->ancestor<T>(te,key)).te() == NULL )
+      if ( te == nullptr ) return false;
+      if ( (m_trigdec->ancestor<T>(te,key)).te() == nullptr )
           return false;
       return ( (m_trigdec->ancestor<T>(te)).te()->getActiveState());
   }
diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
index 652d2222337e..23961e8ee341 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/python/TrigEgammaEmulationIsolationConfig.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 def createIsoToolElectronSelector():
 
   from AthenaCommon.AppMgr import ToolSvc
-- 
GitLab


From bf69f948fc0baf43435028233173f99eac1b44fb Mon Sep 17 00:00:00 2001
From: Rafal Bielski <rafal.bielski@cern.ch>
Date: Thu, 14 Mar 2019 12:16:54 +0100
Subject: [PATCH 040/163] Add HLT timeout handling and improve handling of
 other errors

---
 .../TrigExPartialEB/src/MTCalibPebHypoAlg.cxx |  10 +-
 .../src/MTCalibPebHypoTool.cxx                |  15 +-
 .../TrigExPartialEB/src/MTCalibPebHypoTool.h  |   6 +-
 .../TrigKernel/TrigKernel/HltPscErrorCode.h   |   4 +-
 .../TrigServices/src/HltEventLoopMgr.cxx      |  69 ++++++---
 .../TrigServices/src/HltEventLoopMgr.h        |  17 ++-
 .../TrigSteeringEvent/src/HLTResultMT.cxx     |   1 +
 .../src/HLTResultMTByteStreamCnv.cxx          |  56 +++++--
 .../src/HLTResultMTMaker.cxx                  |   8 +-
 .../src/StreamTagMakerTool.cxx                |   4 +
 .../src/TriggerBitsMakerTool.cxx              |   6 +-
 .../TrigP1Test/share/testHLT_timeout.py       | 143 ++++++++++++++++++
 .../TrigP1Test/test/test_athenaHLT_timeout.sh |  50 ++++++
 13 files changed, 324 insertions(+), 65 deletions(-)
 create mode 100644 Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_timeout.sh

diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoAlg.cxx b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoAlg.cxx
index 8d9466b1ea96..6ad94e7227bb 100644
--- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoAlg.cxx
+++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoAlg.cxx
@@ -1,9 +1,10 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "MTCalibPebHypoAlg.h"
 #include "DecisionHandling/HLTIdentifier.h"
+#include "AthenaKernel/AthStatusCode.h"
 
 // TrigCompositeUtils types used here
 using TrigCompositeUtils::Decision;
@@ -64,7 +65,12 @@ StatusCode MTCalibPebHypoAlg::execute(const EventContext& eventContext) const {
   // Call the hypo tools
   for (const auto& tool: m_hypoTools) {
     ATH_MSG_DEBUG("Calling " << tool);
-    ATH_CHECK(tool->decide(toolInput));
+    StatusCode sc = tool->decide(toolInput);
+    if (sc == Athena::Status::TIMEOUT) {
+      ATH_MSG_ERROR("Timeout reached in hypo tool " << tool->name());
+      return sc;
+    }
+    else ATH_CHECK(sc);
   }
 
   ATH_MSG_DEBUG( "Exiting with "<< outputHandle->size() <<" decisions");
diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx
index fb805b06bf1f..3786018d9263 100644
--- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx
+++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Trigger includes
@@ -8,6 +8,7 @@
 
 // Athena includes
 #include "AthenaKernel/Timeout.h"
+#include "AthenaKernel/AthStatusCode.h"
 
 // System includes
 #include <random>
@@ -148,12 +149,8 @@ StatusCode MTCalibPebHypoTool::decide(const MTCalibPebHypoTool::Input& input) co
   // ---------------------------------------------------------------------------
   for (unsigned int iCycle = 0; iCycle < m_numBurnCycles; ++iCycle) {
     if (Athena::Timeout::instance(input.eventContext).reached()) {
-      if (m_failOnTimeout) {
-        ATH_MSG_ERROR("Timeout reached in CPU time burning cycle # " << iCycle+1 << " and FailOnTimeout is true");
-        return StatusCode::FAILURE;
-      }
-      ATH_MSG_INFO("Timeout reached in CPU time burning cycle # " << iCycle+1);
-      break;
+      ATH_MSG_ERROR("Timeout reached in CPU time burning cycle # " << iCycle+1);
+      return Athena::Status::TIMEOUT;
     }
     unsigned int burnTime = m_burnTimeRandomly
                             ? randomInteger<unsigned int>(0, m_burnTimePerCycleMillisec)
@@ -168,8 +165,8 @@ StatusCode MTCalibPebHypoTool::decide(const MTCalibPebHypoTool::Input& input) co
   for (const auto& p : m_robAccessDict) {
     // Check for timeout
     if (Athena::Timeout::instance(input.eventContext).reached()) {
-      ATH_MSG_INFO("Timeout reached in ROB retrieval loop");
-      break;
+      ATH_MSG_ERROR("Timeout reached in ROB retrieval loop");
+      return Athena::Status::TIMEOUT;
     }
     const std::string& instruction = p.first;
     const std::vector<uint32_t>& robs = p.second;
diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h
index 9010986303fb..667d44cd7377 100644
--- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h
+++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGEXPARTIALEB_MTCALIBPEBHYPOTOOL_H
@@ -60,10 +60,6 @@ private:
     this, "BurnTimeRandomly", true,
     "If true, burn time per cycle is a random value from uniform distribution between 0 and the given value"
   };
-  Gaudi::Property<bool> m_failOnTimeout {
-    this, "FailOnTimeout", true,
-    "If true, the execution will return StatusCode::FAILURE when Athena timeout is detected"
-  };
   Gaudi::Property<std::map<std::string,std::vector<uint32_t> > > m_robAccessDict {
     this, "ROBAccessDict", {},
     "List of prefetch/retrieve operations with given ROB IDs."
diff --git a/HLT/Trigger/TrigControl/TrigKernel/TrigKernel/HltPscErrorCode.h b/HLT/Trigger/TrigControl/TrigKernel/TrigKernel/HltPscErrorCode.h
index de33953d9619..d8f145bd7805 100644
--- a/HLT/Trigger/TrigControl/TrigKernel/TrigKernel/HltPscErrorCode.h
+++ b/HLT/Trigger/TrigControl/TrigKernel/TrigKernel/HltPscErrorCode.h
@@ -22,7 +22,8 @@ namespace hltonl {
     OUTPUT_BUILD_FAILURE  = 8,
     OUTPUT_SEND_FAILURE   = 9,
     AFTER_RESULT_SENT     = 10,
-    COOL_UPDATE           = 11
+    COOL_UPDATE           = 11,
+    TIMEOUT               = 12
   };
 
   /// helper class to map HLT PSC error code on a string name or a int index
@@ -50,6 +51,7 @@ inline hltonl::MapPscErrorCode::MapPscErrorCode() {
   add(hltonl::PSCErrorCode::OUTPUT_SEND_FAILURE,   "PSCErrorCode::OUTPUT_SEND_FAILURE");
   add(hltonl::PSCErrorCode::AFTER_RESULT_SENT,     "PSCErrorCode::AFTER_RESULT_SENT");
   add(hltonl::PSCErrorCode::COOL_UPDATE,           "PSCErrorCode::COOL_UPDATE");
+  add(hltonl::PSCErrorCode::TIMEOUT,               "PSCErrorCode::TIMEOUT");
   // return values in case of invalid code
   invalidCode("UNDEFINED",-1);
 }
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
index c49c1fc21767..9db5388955ea 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
@@ -10,6 +10,7 @@
 #include "TrigSteeringEvent/HLTResultMT.h"
 
 // Athena includes
+#include "AthenaKernel/AthStatusCode.h"
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
 #include "ByteStreamData/ByteStreamMetadata.h"
 #include "StoreGate/StoreGateSvc.h"
@@ -102,7 +103,10 @@ StatusCode HltEventLoopMgr::initialize()
   // Setup properties
   //----------------------------------------------------------------------------
 
-  // read DataFlow configuration properties
+  // Set the timeout value (cast float to int)
+  m_softTimeoutValue = static_cast<int>(m_hardTimeout.value() * m_softTimeoutFraction.value());
+
+  // Read DataFlow configuration properties
   updateDFProps();
 
   // JobOptions type
@@ -124,9 +128,11 @@ StatusCode HltEventLoopMgr::initialize()
   ATH_MSG_INFO(" ---> ApplicationName         = " << m_applicationName);
   ATH_MSG_INFO(" ---> HardTimeout             = " << m_hardTimeout.value());
   ATH_MSG_INFO(" ---> SoftTimeoutFraction     = " << m_softTimeoutFraction.value());
+  ATH_MSG_INFO(" ---> SoftTimeoutValue        = " << m_softTimeoutValue);
   ATH_MSG_INFO(" ---> MaxFrameworkErrors      = " << m_maxFrameworkErrors.value());
   ATH_MSG_INFO(" ---> FwkErrorDebugStreamName = " << m_fwkErrorDebugStreamName.value());
   ATH_MSG_INFO(" ---> AlgErrorDebugStreamName = " << m_algErrorDebugStreamName.value());
+  ATH_MSG_INFO(" ---> TimeoutDebugStreamName  = " << m_timeoutDebugStreamName.value());
   ATH_MSG_INFO(" ---> EventContextWHKey       = " << m_eventContextWHKey.key());
   ATH_MSG_INFO(" ---> EventInfoRHKey          = " << m_eventInfoRHKey.key());
 
@@ -943,7 +949,8 @@ void HltEventLoopMgr::printSORAttrList(const coral::AttributeList& atr) const
 // =============================================================================
 StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const EventContext& eventContext)
 {
-  ATH_MSG_VERBOSE("start of " << __FUNCTION__);
+  ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " with errorCode = " << hltonl::PrintPscErrorCode(errorCode)
+                  << ", context = " << eventContext << " eventID = " << eventContext.eventID());
 
   // Used by MsgSvc (and possibly others but not relevant here)
   Gaudi::Hive::setCurrentContext(eventContext);
@@ -1014,15 +1021,8 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
   }
 
   //----------------------------------------------------------------------------
-  // Try to retrieve event info for printouts
+  // Handle SCHEDULING_FAILURE
   //----------------------------------------------------------------------------
-  auto eventInfo = SG::makeHandle(m_eventInfoRHKey,eventContext);
-  std::ostringstream ss;
-  if (eventInfo.isValid()) {
-    ss << *eventInfo->event_ID();
-  }
-  std::string eventInfoString = ss.str();
-
   if (errorCode==hltonl::PSCErrorCode::SCHEDULING_FAILURE) {
     // Here we cannot be certain if the scheduler started processing the event or not, so we can only try to drain
     // the scheduler and continue. Trying to create a debug stream result for this event and clear the event slot may
@@ -1030,7 +1030,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "Failure occurred with PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << ". Cannot determine if the"
       << " event processing started or not. Current local event number is " << eventContext.evt()
-      << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1057,7 +1057,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "Failed to record the HLT Result in event store while handling a failed event. Likely an issue with the store."
       << " PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << ", local event number " << eventContext.evt()
-      << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1066,9 +1066,17 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
   // Set error code and make sure the debug stream tag is added
   //----------------------------------------------------------------------------
   hltResultWH->addErrorCode( static_cast<uint32_t>(errorCode) );
-  std::string debugStreamName = (errorCode==hltonl::PSCErrorCode::PROCESSING_FAILURE) ?
-                                m_algErrorDebugStreamName.value() : m_fwkErrorDebugStreamName.value();
-  hltResultWH->addStreamTag({debugStreamName,eformat::DEBUG_TAG,true});
+  switch (errorCode) {
+    case hltonl::PSCErrorCode::PROCESSING_FAILURE:
+      hltResultWH->addStreamTag({m_algErrorDebugStreamName.value(), eformat::DEBUG_TAG, true});
+      break;
+    case hltonl::PSCErrorCode::TIMEOUT:
+      hltResultWH->addStreamTag({m_timeoutDebugStreamName.value(), eformat::DEBUG_TAG, true});
+      break;
+    default:
+      hltResultWH->addStreamTag({m_fwkErrorDebugStreamName.value(), eformat::DEBUG_TAG, true});
+      break;
+  }
 
   //----------------------------------------------------------------------------
   // Try to build and send the output
@@ -1077,7 +1085,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "The output conversion service failed in connectOutput() while handling a failed event. No HLT result can be"
       << " recorded for this event. PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << ", local event number "
-      << eventContext.evt() << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << eventContext.evt() << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1087,7 +1095,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "Failed to retrieve DataObject for the HLT result object while handling a failed event. No HLT result"
       << " can be recorded for this event. PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode)
-      << ", local event number " << eventContext.evt() << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << ", local event number " << eventContext.evt() << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1097,7 +1105,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "Conversion of HLT result object to the output format failed while handling a failed event. No HLT result"
       << " can be recorded for this event. PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode)
-      << ", local event number " << eventContext.evt() << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << ", local event number " << eventContext.evt() << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1106,7 +1114,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
     ATH_REPORT_MESSAGE(MSG::ERROR)
       << "The output conversion service failed in commitOutput() while handling a failed event. No HLT result can be"
       << " recorded for this event. PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << ", local event number "
-      << eventContext.evt() << ", slot " << eventContext.slot() << ". " << eventInfoString
+      << eventContext.evt() << ", slot " << eventContext.slot() << ", eventID = " << eventContext.eventID()
       << " All slots of this HltEventLoopMgr instance will be drained before proceeding.";
     return drainAllAndProceed();
   }
@@ -1123,14 +1131,14 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
   // Finish handling the failed event
   //----------------------------------------------------------------------------
 
-  // Unless this is a processing (i.e. algorithm) failure, increment the number of framework failures
-  if (errorCode != hltonl::PSCErrorCode::PROCESSING_FAILURE) {
+  // Unless this is a timeout or processing (i.e. algorithm) failure, increment the number of framework failures
+  if (errorCode != hltonl::PSCErrorCode::TIMEOUT && errorCode != hltonl::PSCErrorCode::PROCESSING_FAILURE) {
     if ( (++m_nFrameworkErrors)>m_maxFrameworkErrors.value() ) {
       ATH_REPORT_MESSAGE(MSG::ERROR)
         << "Failure with PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << " was successfully handled, but the"
         << " number of tolerable framework errors for this HltEventLoopMgr instance, which is "
         << m_maxFrameworkErrors.value() << ", was exceeded. Current local event number is " << eventContextCopy.evt()
-        << ", slot " << eventContextCopy.slot() << ". " << eventInfoString
+        << ", slot " << eventContextCopy.slot() << ", eventID = " << eventContextCopy.eventID()
         << " All slots of this HltEventLoopMgr instance will be drained and the loop will exit.";
       ATH_CHECK(drainAllSlots());
       return StatusCode::FAILURE;
@@ -1140,7 +1148,7 @@ StatusCode HltEventLoopMgr::failedEvent(hltonl::PSCErrorCode errorCode, const Ev
   // Even if handling the failed event succeeded, print an error message with failed event details
   ATH_REPORT_MESSAGE(MSG::ERROR)
     << "Failed event with PSCErrorCode=" << hltonl::PrintPscErrorCode(errorCode) << " Current local event number is "
-    << eventContextCopy.evt() << ", slot " << eventContextCopy.slot() << ". " << eventInfoString;
+    << eventContextCopy.evt() << ", slot " << eventContextCopy.slot() << ", eventID = " << eventContextCopy.eventID();
 
   ATH_MSG_VERBOSE("end of " << __FUNCTION__);
   return StatusCode::SUCCESS; // continue the event loop
@@ -1174,6 +1182,17 @@ void HltEventLoopMgr::runEventTimer()
   ATH_MSG_VERBOSE("end of " << __FUNCTION__);
 }
 
+// =============================================================================
+bool HltEventLoopMgr::isTimedOut(const EventContext& eventContext) const {
+  for (const auto& [key, state] : m_aess->algExecStates(eventContext)) {
+    if (state.execStatus() == Athena::Status::TIMEOUT) {
+      ATH_MSG_DEBUG("Algorithm " << key << " returned Athena::Status::TIMEOUT in event " << eventContext.eventID());
+      return true;
+    }
+  }
+  return false;
+}
+
 // =============================================================================
 /**
  * @brief Retrieves finished events from the scheduler, processes their output and cleans up the slots
@@ -1229,9 +1248,11 @@ HltEventLoopMgr::DrainSchedulerStatusCode HltEventLoopMgr::drainScheduler()
 
     // Check the event processing status
     if (m_aess->eventStatus(*thisFinishedEvtContext) != EventStatus::Success) markFailed();
+    hltonl::PSCErrorCode errCode = isTimedOut(*thisFinishedEvtContext) ?
+                                   hltonl::PSCErrorCode::TIMEOUT : hltonl::PSCErrorCode::PROCESSING_FAILURE;
     HLT_DRAINSCHED_CHECK(sc, "Processing event with context " << *thisFinishedEvtContext
                          << " failed with status " << m_aess->eventStatus(*thisFinishedEvtContext),
-                         hltonl::PSCErrorCode::PROCESSING_FAILURE, *thisFinishedEvtContext);
+                         errCode, *thisFinishedEvtContext);
 
     // Select the whiteboard slot
     sc = m_whiteboard->selectStore(thisFinishedEvtContext->slot());
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.h b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.h
index 182d6a8f7a21..e3553adc11ad 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.h
+++ b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.h
@@ -153,6 +153,9 @@ private:
   /// The method executed by the event timeout monitoring thread
   void runEventTimer();
 
+  /// Uses AlgExecStateSvc to determine if any algorithm in the event returned Athena::Status::TIMEOUT
+  bool isTimedOut(const EventContext& eventContext) const;
+
   /// Drain the scheduler from all actions that may be queued
   DrainSchedulerStatusCode drainScheduler();
 
@@ -212,9 +215,13 @@ private:
     "Debug stream name for events with HLT framework errors"};
 
   Gaudi::Property<std::string> m_algErrorDebugStreamName{
-    this, "AlgErrorDebugStreamName", "HLTError",
+    this, "AlgErrorDebugStreamName", "HltError",
     "Debug stream name for events with HLT algorithm errors"};
 
+  Gaudi::Property<std::string> m_timeoutDebugStreamName{
+    this, "TimeoutDebugStreamName", "HltTimeout",
+    "Debug stream name for events with HLT timeout"};
+
   Gaudi::Property<std::string> m_sorPath{
     this, "SORPath", "/TDAQ/RunCtrl/SOR_Params", "Path to StartOfRun parameters in detector store"};
 
@@ -243,7 +250,7 @@ private:
   /// Event counter used for local bookkeeping; incremental per instance of HltEventLoopMgr, unrelated to global_id
   size_t m_localEventNumber{0};
   /// Event selector context
-  IEvtSelector::Context* m_evtSelContext;
+  IEvtSelector::Context* m_evtSelContext{nullptr};
   /// Vector of top level algorithms
   std::vector<SmartIF<IAlgorithm> > m_topAlgList;
   /// Vector of event start-processing time stamps in each slot
@@ -256,10 +263,10 @@ private:
   std::condition_variable m_timeoutCond;
   /// Timeout thread
   std::unique_ptr<std::thread> m_timeoutThread;
-  /// Soft timeout value
-  int m_softTimeoutValue;
+  /// Soft timeout value set to HardTimeout*SoftTimeoutFraction at initialisation
+  int m_softTimeoutValue{0};
   /// Flag set to false if timer thread should be stopped
-  std::atomic<bool> m_runEventTimer;
+  std::atomic<bool> m_runEventTimer{true};
   /// Counter of framework errors
   int m_nFrameworkErrors{0};
   /// Application name
diff --git a/Trigger/TrigEvent/TrigSteeringEvent/src/HLTResultMT.cxx b/Trigger/TrigEvent/TrigSteeringEvent/src/HLTResultMT.cxx
index f1ad2d38c24c..873d3a2db6df 100644
--- a/Trigger/TrigEvent/TrigSteeringEvent/src/HLTResultMT.cxx
+++ b/Trigger/TrigEvent/TrigSteeringEvent/src/HLTResultMT.cxx
@@ -235,6 +235,7 @@ std::ostream& operator<<(std::ostream& str, const HLT::HLTResultMT& hltResult) {
     for (const auto& detid : st.dets) printWord(detid,2);
     str << "]}" << std::endl;
   }
+  if (hltResult.getStreamTags().empty()) str << std::endl;
 
   // HLT bits
   std::vector<uint32_t> hltBitWords;
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
index 1bca9613f6b1..7d7a38d94545 100644
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
@@ -104,6 +104,41 @@ StatusCode HLT::HLTResultMTByteStreamCnv::createRep(DataObject* pObj, IOpaqueAdd
   // its lifetime has to be at least as long as the lifetime of RawEventWrite which points to the StreamTag data
   delete m_streamTagData.release();
 
+  // Read the stream tags to check for debug stream tag and decide which HLT ROBFragments to write out
+  std::set<eformat::helper::SourceIdentifier> resultIdsToWrite;
+  bool debugEvent=false;
+  auto isDebugStreamTag = [](const eformat::helper::StreamTag& st){
+    return eformat::helper::string_to_tagtype(st.type) == eformat::TagType::DEBUG_TAG;
+  };
+  for (const eformat::helper::StreamTag& st : hltResult->getStreamTags()) {
+    // Flag debug stream events
+    if (isDebugStreamTag(st)) debugEvent=true;
+    // In case of full event building, add the full result ID
+    if (st.robs.empty() && st.dets.empty()) {
+      eformat::helper::SourceIdentifier sid(eformat::SubDetector::TDAQ_HLT, fullResultModuleId);
+      resultIdsToWrite.insert(sid);
+    }
+    // In case of partial event building, add the results explicitly requested in the stream tag
+    for (const uint32_t robid : st.robs) {
+      eformat::helper::SourceIdentifier sid(robid);
+      if (sid.subdetector_id() == eformat::SubDetector::TDAQ_HLT)
+        resultIdsToWrite.insert(sid);
+    }
+  }
+
+  // Remove all non-debug stream tags if the event goes to the debug stream.
+  // Write all HLT results (if available) to the debug stream.
+  if (debugEvent) {
+    std::vector<eformat::helper::StreamTag>& writableStreamTags = hltResult->getStreamTagsNonConst();
+    writableStreamTags.erase(
+      std::remove_if(writableStreamTags.begin(),writableStreamTags.end(),std::not_fn(isDebugStreamTag)),
+      writableStreamTags.end()
+    );
+    for (eformat::helper::StreamTag& st : writableStreamTags)
+      for (const eformat::helper::SourceIdentifier& sid : resultIdsToWrite)
+        st.robs.insert(sid.code());
+  }
+
   // Fill the stream tags
   uint32_t nStreamTagWords = eformat::helper::size_word(hltResult->getStreamTags());
   m_streamTagData = std::make_unique<uint32_t[]>(nStreamTagWords);
@@ -126,22 +161,6 @@ StatusCode HLT::HLTResultMTByteStreamCnv::createRep(DataObject* pObj, IOpaqueAdd
   const std::vector<uint32_t>& hltBits = hltResult->getHltBitsAsWords();
   re->hlt_info(hltBits.size(), hltBits.data());
 
-  // Read the stream tags to decide which HLT ROBFragments to write out
-  std::set<eformat::helper::SourceIdentifier> resultIdsToWrite;
-  for (const eformat::helper::StreamTag& st : hltResult->getStreamTags()) {
-    // In case of full event building, add the full result ID
-    if (st.robs.empty() && st.dets.empty()) {
-      eformat::helper::SourceIdentifier sid(eformat::SubDetector::TDAQ_HLT, fullResultModuleId);
-      resultIdsToWrite.insert(sid);
-    }
-    // In case of partial event building, add the results explicitly requested in the stream tag
-    for (const uint32_t robid : st.robs) {
-      eformat::helper::SourceIdentifier sid(robid);
-      if (sid.subdetector_id() == eformat::SubDetector::TDAQ_HLT)
-        resultIdsToWrite.insert(sid);
-    }
-  }
-
   // Clear the FEA stack
   m_fullEventAssembler.clear();
 
@@ -152,6 +171,11 @@ StatusCode HLT::HLTResultMTByteStreamCnv::createRep(DataObject* pObj, IOpaqueAdd
     // Find the serialised data for this module ID
     const auto it = serialisedData.find(resultId.module_id());
     if (it==serialisedData.end()) {
+      if (debugEvent) {
+        ATH_MSG_DEBUG("HLT result with ID 0x" << MSG::hex << resultId.code() << MSG::dec
+                    << " requested by a debug stream tag, but missing in the serialised data - skipping this result");
+        continue;
+      }
       ATH_MSG_ERROR("HLT result with ID 0x" << MSG::hex << resultId.code() << MSG::dec
                     << " requested by a stream tag, but missing in the serialised data");
       return StatusCode::FAILURE;
diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
index 870b0f171bac..4de4537ec920 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
+++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
@@ -131,8 +131,12 @@ StatusCode HLTResultMTMaker::makeResult(const EventContext& eventContext) const
 
   // Fill the object using the result maker tools
   auto time =  Monitored::Timer("TIME_build" );
+  StatusCode finalStatus = StatusCode::SUCCESS;
   for (auto& maker: m_makerTools) {
-    ATH_CHECK(maker->fill(*hltResult));
+    if (StatusCode sc = maker->fill(*hltResult); sc.isFailure()) {
+      ATH_MSG_ERROR(maker->name() << " failed");
+      finalStatus = sc;
+    }
   }
   time.stop();
 
@@ -151,7 +155,7 @@ StatusCode HLTResultMTMaker::makeResult(const EventContext& eventContext) const
 
   Monitored::Group(m_monTool, time, nstreams, nfrags, sizeMain, bitWords);
 
-  return StatusCode::SUCCESS;
+  return finalStatus;
 }
 
 // =============================================================================
diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
index d57eb54ae630..e38acebc8b04 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
+++ b/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
@@ -52,6 +52,10 @@ StatusCode StreamTagMakerTool::fill( HLT::HLTResultMT& resultToFill ) const {
   // obtain chain decisions,
   using namespace TrigCompositeUtils;
   auto chainsHandle = SG::makeHandle( m_finalChainDecisions );
+  if (!chainsHandle.isValid()) {
+    ATH_MSG_ERROR("Unable to read in the HLTSummary from the DecisionSummaryMakerAlg");
+    return StatusCode::FAILURE;
+  }
 
   const Decision* passRawChains = nullptr;
   const Decision* rerunChains = nullptr;
diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/TriggerBitsMakerTool.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/TriggerBitsMakerTool.cxx
index 4daf544ebe4a..a4ec63cd3c59 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/src/TriggerBitsMakerTool.cxx
+++ b/Trigger/TrigSteer/TrigOutputHandling/src/TriggerBitsMakerTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #include "DecisionHandling/HLTIdentifier.h"
 #include "TrigOutputHandling/TriggerBitsMakerTool.h"
@@ -25,6 +25,10 @@ StatusCode TriggerBitsMakerTool::initialize() {
 
 StatusCode TriggerBitsMakerTool::fill( HLT::HLTResultMT& resultToFill ) const {
   auto chainsHandle = SG::makeHandle( m_finalChainDecisions );
+  if (!chainsHandle.isValid()) {
+    ATH_MSG_ERROR("Unable to read in the HLTSummary from the DecisionSummaryMakerAlg");
+    return StatusCode::FAILURE;
+  }
 
   const TrigCompositeUtils::Decision* passRawChains = nullptr;
   for (const TrigCompositeUtils::Decision* d : *chainsHandle) {
diff --git a/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py b/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
new file mode 100644
index 000000000000..f67fbe813b4e
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
@@ -0,0 +1,143 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+# This file is based on MTCalibPeb.py
+
+################################################################################
+# General set up
+################################################################################
+
+# The top algo sequence
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+# SGInputLoader takes care of unmet input dependencies (e.g. triggering conversion from BS)
+from AthenaCommon.AlgScheduler import AlgScheduler
+AlgScheduler.setDataLoaderAlg ('SGInputLoader')
+
+# EventInfoCnvAlg produces xAOD::EventInfo from the plain non-xAOD EventInfo
+from xAODEventInfoCnv.xAODEventInfoCreator import xAODMaker__EventInfoCnvAlg
+topSequence += xAODMaker__EventInfoCnvAlg()
+
+################################################################################
+# L1 result decoding
+################################################################################
+
+# Configure BS converter and address provider for RoIBResult decoding
+from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+svcMgr.ByteStreamCnvSvc.GetDetectorMask = True
+svcMgr.ByteStreamCnvSvc.InitCnvs += [ "ROIB::RoIBResult" ]
+svcMgr.ByteStreamAddressProviderSvc.TypeNames += [ "ROIB::RoIBResult/RoIBResult" ]
+
+# Ensure LVL1ConfigSvc is initialised before L1Decoder handles BeginRun incident
+# This should be done by the L1Decoder configuration in new-style job options (with component accumulator)
+from TrigConfigSvc.TrigConfigSvcConfig import LVL1ConfigSvc, findFileInXMLPATH
+svcMgr += LVL1ConfigSvc()
+
+# Set the LVL1 menu (needed for initialising LVL1ConfigSvc)
+from TriggerJobOpts.TriggerFlags import TriggerFlags
+svcMgr.LVL1ConfigSvc.XMLMenuFile = findFileInXMLPATH(TriggerFlags.inputLVL1configFile())
+
+# Initialise L1 decoding tools
+from L1Decoder.L1DecoderConf import CTPUnpackingTool
+ctpUnpacker = CTPUnpackingTool(ForceEnableAllChains = True)
+# Can add other tools here if needed
+
+# Define the "menu" - L1 items do not matter if we set ForceEnableAllChains = True,
+# but they have to be defined in the L1 menu xml
+chainCTPMap = {"HLT_MTCalibPeb1": "L1_RD0_FILLED",
+               "HLT_MTCalibPeb2": "L1_RD0_FILLED"}
+
+# Schedule the L1Decoder algo with the above tools
+from L1Decoder.L1DecoderConf import L1Decoder
+l1decoder = L1Decoder()
+l1decoder.ctpUnpacker = ctpUnpacker
+l1decoder.ChainToCTPMapping = chainCTPMap
+topSequence += l1decoder
+
+################################################################################
+# HLT configuration
+################################################################################
+
+from TrigExPartialEB.TrigExPartialEBConf import MTCalibPebHypoAlg,MTCalibPebHypoTool
+hypo = MTCalibPebHypoAlg()
+hypo.HypoInputDecisions = "HLTChains"
+hypo.HypoOutputDecisions = "MTCalibPebDecisions"
+
+# Chain 1 - high accept rate, sleeps for up to 2 seconds
+hypoTool1 = MTCalibPebHypoTool("HLT_MTCalibPeb1")
+hypoTool1.RandomAcceptRate = 0.75
+hypoTool1.BurnTimePerCycleMillisec = 200
+hypoTool1.NumBurnCycles = 10
+
+# Chain 2 - lower accept rate, sleeps for up to 3 seconds
+hypoTool2 = MTCalibPebHypoTool("HLT_MTCalibPeb2")
+hypoTool2.RandomAcceptRate = 0.25
+hypoTool2.BurnTimePerCycleMillisec = 600
+hypoTool2.NumBurnCycles = 5
+
+# Add the hypo tools to the algorithm
+hypo.HypoTools = [hypoTool1, hypoTool2]
+
+################################################################################
+# HLT result maker configuration
+################################################################################
+from TrigOutputHandling.TrigOutputHandlingConf import HLTResultMTMakerAlg, StreamTagMakerTool, TriggerBitsMakerTool
+from TrigOutputHandling.TrigOutputHandlingConfig import TriggerEDMSerialiserToolCfg, HLTResultMTMakerCfg
+
+# Tool serialising EDM objects to fill the HLT result
+serialiser = TriggerEDMSerialiserToolCfg("Serialiser")
+serialiser.addCollectionListToMainResult([
+  "xAOD::TrigCompositeContainer_v1#"+hypo.HypoOutputDecisions,
+  "xAOD::TrigCompositeAuxContainer_v2#"+hypo.HypoOutputDecisions+"Aux.decisions",
+])
+
+# StreamTag definitions
+streamPhysicsMain = ['Main', 'physics', "True", "True"]
+
+# Tool adding stream tags to HLT result
+stmaker = StreamTagMakerTool()
+stmaker.ChainDecisions = "HLTSummary"
+stmaker.PEBDecisionKeys = [hypo.HypoOutputDecisions]
+stmaker.ChainToStream = {}
+stmaker.ChainToStream["HLT_MTCalibPeb1"] = streamPhysicsMain
+stmaker.ChainToStream["HLT_MTCalibPeb2"] = streamPhysicsMain
+
+# Tool adding HLT bits to HLT result
+bitsmaker = TriggerBitsMakerTool()
+bitsmaker.ChainDecisions = "HLTSummary"
+bitsmaker.ChainToBit = {}
+bitsmaker.ChainToBit["HLT_MTCalibPeb1"] = 4
+bitsmaker.ChainToBit["HLT_MTCalibPeb2"] = 32
+
+# Configure the HLT result maker to use the above tools
+hltResultMaker = svcMgr.HltEventLoopMgr.ResultMaker
+hltResultMaker.MakerTools = [ stmaker, bitsmaker, serialiser ]
+
+################################################################################
+# Control Flow construction
+################################################################################
+
+from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg
+summary = TriggerSummaryAlg( "TriggerSummaryAlg" )
+summary.InputDecision = "HLTChains"
+summary.FinalDecisions = [ hypo.HypoOutputDecisions ]
+
+from TrigOutputHandling.TrigOutputHandlingConf import DecisionSummaryMakerAlg
+summMaker = DecisionSummaryMakerAlg()
+summMaker.FinalDecisionKeys = [ hypo.HypoOutputDecisions ]
+summMaker.FinalStepDecisions =  dict( [ ( tool.getName(), hypo.HypoOutputDecisions ) for tool in hypo.HypoTools ] )
+print summMaker
+
+# Create a top-level algorithm as a sequence
+from AthenaCommon.CFElements import seqOR
+hltTop = seqOR( "hltTop", [ hypo, summary, summMaker ] )
+topSequence += hltTop
+
+# Print configuration for debugging
+print("Dump of topSequence")
+from AthenaCommon.AlgSequence import dumpSequence
+dumpSequence(topSequence)
+print("Dump of serviceMgr")
+dumpSequence(ServiceMgr)
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_timeout.sh b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_timeout.sh
new file mode 100755
index 000000000000..1ab6c02a472b
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_timeout.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# art-description: athenaHLT test of timeout handling
+# art-type: build
+# art-include: master/Athena
+# art-output: *.log
+# art-output: *.out
+# art-output: *.err
+# art-output: *.data
+# art-output: *.root
+
+outputBaseName="output.test_athenaHLT_timeout.data"
+nEvents=20
+
+(set -x; \
+athenaHLT \
+-n ${nEvents} \
+--timeout 2000 \
+--nprocs 2 \
+--threads 2 \
+--concurrent-events 2 \
+-o ${outputBaseName} \
+-f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1 \
+TrigP1Test/testHLT_timeout.py \
+2>&1 > athena.log)
+
+status=$?
+echo "art-result: ${status} athenaHLT-mother"
+
+outputFile=`ls ${outputBaseName}* | tail -n 1`
+
+# Check if there is at least one event with the debug_HltTimeout stream tag
+nDebugEvents=`trigbs_dumpHLTContentInBS.py --stag output.test_athenaHLT_timeout.data_Child-001._0001.data | grep "\[('HltTimeout', 'debug')\]" | wc -l`
+if [ $nDebugEvents -gt 0 ]; then 
+  echo "Found ${nDebugEvents} events with stream tag debug_HltTimeout in the output file ${outputFile}"
+  echo "art-result: 0 StreamTags"
+else
+  echo "ERROR no event with stream tag debug_HltTimeout was found in the output file ${outputFile}"
+  echo "art-result: 0 StreamTags"
+fi
+
+# Check if the number of events in output is the same as number of processed events
+nOutputEvents=`trigbs_dumpHLTContentInBS.py --stats output.test_athenaHLT_timeout.data_Child-001._0001.data | grep Global_ID | wc -l`
+if [ $nOutputEvents -eq $nEvents ]; then
+  echo "All ${nEvents} processed events were found in the output file ${outputFile}"
+  echo "art-result: 0 NOutputEvents"
+else
+  echo "Processed ${nEvents} events, but found ${nOutputEvents} in the output file ${outputFile}"
+  echo "art-result: 1 NOutputEvents"
+fi
+
-- 
GitLab


From 9c4070fbfb987d3734cb4ac4fb724716ce1e81fb Mon Sep 17 00:00:00 2001
From: Rupert Tombs <rt500@cam.ac.uk>
Date: Fri, 15 Mar 2019 10:56:59 +0000
Subject: [PATCH 041/163] Do not run PixelConditionsConfig_test in
 AthSimulation

---
 .../InDetConditions/PixelConditionsTools/CMakeLists.txt   | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
index ac5761032a35..803c1555eab8 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
@@ -51,9 +51,11 @@ atlas_add_component( PixelConditionsTools
                      INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
                      LINK_LIBRARIES ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel GeoPrimitives GaudiKernel AthenaBaseComps SGTools AthenaPoolUtilities DetDescrConditions Identifier PixelConditionsData PixelCoralClientUtils InDetIdentifier GeoModelUtilities InDetReadoutGeometry PathResolver ${extra_lib} )
 
-atlas_add_test( PixelConditionsConfig_test
-                SCRIPT test/PixelConditionsConfig_test.py
-                PROPERTIES TIMEOUT 30 )
+if( NOT SIMULATIONBASE )
+  atlas_add_test( PixelConditionsConfig_test
+                  SCRIPT test/PixelConditionsConfig_test.py
+                  PROPERTIES TIMEOUT 30 )
+endif()
 
 # Install files from the package:
 atlas_install_headers( PixelConditionsTools )
-- 
GitLab


From 51c78246cc6e79222a1073dab4ad52513a3d5985 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Fri, 15 Mar 2019 11:27:52 +0100
Subject: [PATCH 042/163] Protection against calling
 G4ThreadInitTool::terminateThread without having called initThread

Based on the discussion in ATLASSIM-4062, it seems that with the new version of TBB introduced
in `LCG_95` (see !21493) can sometimes try to call `G4ThreadInitTool::terminateThread` without
having first called `G4ThreadInitTool::initThread`. This causes the `G4ExHive-test` CI test
to fail at random. Adding some protection to `G4ThreadInitTool::terminateThread` to prevent
crashes in this case while the experts follow up with the TBB experts.
---
 .../G4AtlasTools/src/G4ThreadInitTool.cxx     | 21 ++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/Simulation/G4Atlas/G4AtlasTools/src/G4ThreadInitTool.cxx b/Simulation/G4Atlas/G4AtlasTools/src/G4ThreadInitTool.cxx
index e7306476e847..c9716c25046a 100644
--- a/Simulation/G4Atlas/G4AtlasTools/src/G4ThreadInitTool.cxx
+++ b/Simulation/G4Atlas/G4AtlasTools/src/G4ThreadInitTool.cxx
@@ -114,12 +114,23 @@ void G4ThreadInitTool::initThread()
 //-----------------------------------------------------------------------------
 void G4ThreadInitTool::terminateThread()
 {
-  ATH_MSG_INFO("terminateThread ==> tbb thread 0x" <<
+  ATH_MSG_DEBUG("terminateThread ==> tbb thread 0x" <<
                std::hex << pthread_self() << std::dec);
 
   // Geant4 worker finalization
-  G4RunManager::GetRunManager()->RunTermination();
-
-  // Atomic decrement number of initialized threads
-  m_nInitThreads--;
+  auto runMgr = G4RunManager::GetRunManager();
+  ATH_MSG_DEBUG("G4RunManager ptr" << runMgr);
+  if(runMgr) {
+    runMgr->RunTermination();
+    ATH_MSG_INFO("terminateThread ==> safely called G4AtlasWorkerRunManager::RunTermination for tbb thread 0x" <<
+               std::hex << pthread_self() << std::dec);
+    // Atomic decrement number of initialized threads
+    m_nInitThreads--;
+  }
+  else {
+    ATH_MSG_WARNING("skipping attempt to call terminateThread for tbb thread 0x" <<
+                    std::hex << pthread_self() << std::dec <<
+                    " without having first called initThread.");
+    // Not decrementing m_nInitThreads as initThread was not called in this case.
+  }
 }
-- 
GitLab


From 2c6bb4d376812ab55f66df17cf219335b2988dd2 Mon Sep 17 00:00:00 2001
From: Peter Onyisi <ponyisi@utexas.edu>
Date: Fri, 15 Mar 2019 13:55:54 +0100
Subject: [PATCH 043/163] Fix TCT failing due to syntax error

---
 .../InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py
index 6b51841abe78..09902f3087d7 100644
--- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py
+++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py
@@ -413,7 +413,7 @@ if dumpPixInfo:
 
     from AthenaCommon.AlgSequence import AthSequencer
     condSeq = AthSequencer("AthCondSeq")
-     if not hasattr(condSeq, "PixelDCSCondStateAlg"):
+    if not hasattr(condSeq, "PixelDCSCondStateAlg"):
       from PixelConditionsAlgorithms.PixelConditionsAlgorithmsConf import PixelDCSCondStateAlg
       condSeq += PixelDCSCondStateAlg(name="PixelDCSCondStateAlg")
 
-- 
GitLab


From 6de833af1ef562f445ed15bd3d61d4582efb3043 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Fri, 15 Mar 2019 13:28:45 +0000
Subject: [PATCH 044/163] Update the reference files for newer version of
 athena

---
 .../MuonConfig/share/MuonDataDecodeTest.ref   | 1427 +++++++++-------
 .../share/MuonDataDecodeTest_Cache.ref        | 1516 ++++++++++-------
 2 files changed, 1757 insertions(+), 1186 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index d727a4d7a0ac..01b352152854 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -1,11 +1,13 @@
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -32,13 +34,14 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -71,16 +74,18 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [iac_master_rpcrdo/63cc84e] -- built on [2019-03-15T1157]
 dynamically loading the flag Detector
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -175,12 +180,13 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -469,11 +475,13 @@ dynamically loading the flag Muon
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -624,12 +632,13 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
@@ -653,14 +662,14 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
 Py:ConfigurableDb   DEBUG loading confDb files...
-Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonByteStream.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
 Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
 Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
-Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
@@ -1436,24 +1445,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7fbd4e2eeed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7f36dfab5ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7fbd4e2eee50 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7fbd4c928bd8 = []  (default: [])
-|-ExtraOutputs               @0x7fbd4c928d40 = []  (default: [])
+|-EvtStore                   @0x7f36dfab5e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f36de048560 = []  (default: [])
+|-ExtraOutputs               @0x7f36de0485f0 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7fbd4c928ab8 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7f36de048200 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7fbd4c928e18 = []  (default: [])
+|-NeededResources            @0x7f36de048440 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                              = False
+|-Sequential                 @0x7f36e1166b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -1469,22 +1478,22 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fbd4cefd7d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de6d8cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4cefd750 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930050 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c928f80 = []  (default: [])
+| |-EvtStore                   @0x7f36de6d8c50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de0486c8 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048680 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c928e60 = []  (default: [])
+| |-NeededResources            @0x7f36de048638 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fbd4d18a680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7f36de95c680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7fbd4cefd850 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7f36de6d8d50 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1496,11 +1505,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                          = False
 | | |-AuditStop                           = False
 | | |-AuditTools                          = False
-| | |-Decoder                @0x7fbd4d1e4620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore               @0x7fbd4cea4690 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore               @0x7fbd4cea4650 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs            @0x7fbd4cf78170 = []  (default: [])
-| | |-ExtraOutputs           @0x7fbd4cf78200 = []  (default: [])
+| | |-Decoder                @0x7f36de9b9620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7f36de67fb90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7f36de67fb50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7f36de6c9050 = []  (default: [])
+| | |-ExtraOutputs           @0x7f36de6c9170 = []  (default: [])
 | | |-MonitorService                      = 'MonitorSvc'
 | | |-OutputLevel                         = 0
 | | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -1516,10 +1525,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7fbd4cea4710 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7fbd4cea4750 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7fbd4cf78290 = []  (default: [])
-| | | |-ExtraOutputs        @0x7fbd4cf78248 = []  (default: [])
+| | | |-DetStore            @0x7f36de67fc10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f36de67fc50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f36de6bff80 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f36de6bff38 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1539,19 +1548,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fbd4cf0b790 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de665c90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4cf0b710 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930200 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c9302d8 = []  (default: [])
+| |-EvtStore                   @0x7f36de665c10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048908 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de0489e0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c930248 = []  (default: [])
+| |-NeededResources            @0x7f36de048950 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fbd4e09d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7f36df86d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1563,12 +1572,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7fbd4e09d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7f36df86d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7fbd4ce45c50 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fbd4ce45c90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fbd4ce535a8 = []  (default: [])
-| | |-ExtraOutputs      @0x7fbd4ce533f8 = []  (default: [])
+| | |-DetStore          @0x7f36de69f190 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f36de69f1d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f36de62f7e8 = []  (default: [])
+| | |-ExtraOutputs      @0x7f36de62f638 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1580,10 +1589,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fbd4ce45d50 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fbd4ce45d90 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fbd4ce53248 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fbd4ce533b0 = []  (default: [])
+| | | |-DetStore          @0x7f36de69f290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de69f2d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de62f488 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de62f5f0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1603,19 +1612,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fbd4cef19d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de6cced0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4cef1950 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930320 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c9303b0 = []  (default: [])
+| |-EvtStore                   @0x7f36de6cce50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048a28 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048ab8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c930290 = []  (default: [])
+| |-NeededResources            @0x7f36de048998 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fbd4d28bd50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7f36de76ee50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1628,11 +1637,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fbd4e09dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7fbd4ca01d50 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7fbd4ca01d90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fbd4ca09638 = []  (default: [])
-| | |-ExtraOutputs         @0x7fbd4ca096c8 = []  (default: [])
+| | |-Decoder              @0x7f36df86dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f36de1ca250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f36de1ca290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f36de1e0f38 = []  (default: [])
+| | |-ExtraOutputs         @0x7f36de1e0dd0 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -1645,10 +1654,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fbd4ca01e50 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fbd4ca01e90 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fbd4ca095a8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fbd4ca09560 = []  (default: [])
+| | | |-DetStore          @0x7f36de1ca350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de1ca390 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de1e0e60 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de1e0e18 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1668,19 +1677,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fbd4cee7bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de6cc110 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4cee7b50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c9303f8 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c930440 = []  (default: [])
+| |-EvtStore                   @0x7f36de6cc090 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048b00 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048b48 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c930098 = []  (default: [])
+| |-NeededResources            @0x7f36de048710 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fbd4c9cc050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7f36de14f150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1693,12 +1702,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fbd4e09de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7fbd4c9c4c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-Decoder              @0x7f36df86de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f36de12a110 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7fbd4c9c4c50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fbd4c9c2d88 = []  (default: [])
-| | |-ExtraOutputs         @0x7fbd4c9cb050 = []  (default: [])
+| | |-EvtStore             @0x7f36de12a150 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f36de122ab8 = []  (default: [])
+| | |-ExtraOutputs         @0x7f36de122d40 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1710,10 +1719,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fbd4c9c4d10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fbd4c9c4d50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fbd4c9c2ea8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fbd4c9c2e60 = []  (default: [])
+| | | |-DetStore          @0x7f36de12a210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de12a250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de122c20 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de122bd8 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1733,25 +1742,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fbd4d06fd20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7f36de8d5d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7fbd4c8ff6d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de159b90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4c8ff650 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c9300e0 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c930518 = []  (default: [])
+| |-EvtStore                   @0x7f36de159b10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048320 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048c20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c930560 = []  (default: [])
+| |-NeededResources            @0x7f36de048c68 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fbd4c8ff750 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de159c10 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1764,16 +1773,16 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7fbd4c967850 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7fbd4c9678d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7fbd4c9d4710 = []  (default: [])
-| | |-ExtraOutputs                       @0x7fbd4c9d48c0 = []  (default: [])
+| | |-DetStore                           @0x7f36de0c8d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f36de0c8dd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f36de134950 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f36de134b00 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7fbd4c9dd2f0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7f36de4b84b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1791,10 +1800,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fbd4c967950 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fbd4c967990 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fbd4c9d49e0 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fbd4c9d4998 = []  (default: [])
+| | | |-DetStore          @0x7f36de0c8e50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de0c8e90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de134c20 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de134bd8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1812,25 +1821,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fbd4c975050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7f36de0d5050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7fbd4c958590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de0b0a90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4c958510 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930368 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c9305a8 = []  (default: [])
+| |-EvtStore                   @0x7f36de0b0a10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048cb0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c9305f0 = []  (default: [])
+| |-NeededResources            @0x7f36de048cf8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7fbd4c958610 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f36de0b0b10 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -1844,10 +1853,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7fbd4c967710 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7fbd4c967a50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7fbd4c9780e0 = []  (default: [])
-| | |-ExtraOutputs                            @0x7fbd4c9787a0 = []  (default: [])
+| | |-DetStore                                @0x7f36de0c8ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f36de0c8f50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f36de0d69e0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f36de0d6998 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1856,9 +1865,9 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7fbd4c978998 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7f36de0d6440 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7fbd4c978440 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7f36de0d6a70 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1875,25 +1884,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fbd4f21bb50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7f36e09e8b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7fbd4c8f3590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de145a50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4c8f3510 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930680 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c930710 = []  (default: [])
+| |-EvtStore                   @0x7f36de1459d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048d88 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048e18 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c9306c8 = []  (default: [])
+| |-NeededResources            @0x7f36de048dd0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fbd4c8f3610 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de145ad0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1907,13 +1916,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7fbd4c967cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7f36de0dd350 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7fbd4c967d90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7fbd4c984fc8 = []  (default: [])
-| | |-ExtraOutputs            @0x7fbd4c984e60 = []  (default: [])
+| | |-EvtStore                @0x7f36de0dd2d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f36de0e2b90 = []  (default: [])
+| | |-ExtraOutputs            @0x7f36de0e2a28 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1941,25 +1950,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7fbd4d04f5a0 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7f36de841380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7fbd4c960b90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de12a790 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4c960a90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c9307e8 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c930488 = []  (default: [])
+| |-EvtStore                   @0x7f36de12af50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048b90 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c930758 = []  (default: [])
+| |-NeededResources            @0x7f36de048e60 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fbd4f9a1b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fbd4c960c10 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de12a810 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1972,13 +1981,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7fbd4f284b10 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7fbd4c981c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7f36e09df9b8 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f36de0e3960 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7fbd4c967890 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fbd4c98b050 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fbd4ce53f38 = []  (default: [])
-| | |-ExtraOutputs      @0x7fbd4ce53cf8 = []  (default: [])
+| | |-DetStore          @0x7f36de0dd450 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f36de0dd590 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f36de0d34d0 = []  (default: [])
+| | |-ExtraOutputs      @0x7f36de0d3fc8 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1991,10 +2000,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7fbd4c98b090 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7fbd4c98b0d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7fbd4c978fc8 = []  (default: [])
-| | | |-ExtraOutputs       @0x7fbd4c978cb0 = []  (default: [])
+| | | |-DetStore           @0x7f36de0dd5d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f36de0dd610 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f36de0e7998 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f36de0e7a28 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2021,11 +2030,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7fbd4c967f90 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7fbd4c9679d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fbd4c967fd0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fbd4c978d40 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fbd4ce57098 = []  (default: [])
+| | | |-CscCalibTool      @0x7f36de0dd510 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f36de0dd490 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de0dd550 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de0e7908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de0e78c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2043,21 +2052,21 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fbd4c874390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f36de106890 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fbd4c874310 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fbd4c930830 = []  (default: [])
-| |-ExtraOutputs               @0x7fbd4c930878 = []  (default: [])
+| |-EvtStore                   @0x7f36de106810 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de054050 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048f80 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fbd4c9308c0 = []  (default: [])
+| |-NeededResources            @0x7f36de048fc8 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7fbd4c925cd0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7f36de046210 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
@@ -2086,379 +2095,651 @@ Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepD
 Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
 Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
-RpcRawDataProvider ExtraOutputs []
-RpcRawDataProvider EvtStore StoreGateSvc
-RpcRawDataProvider ExtraInputs []
-RpcRawDataProvider RegionSelectionSvc RegSelSvc
-RpcRawDataProvider ProviderTool Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool
-RpcRawDataProvider NeededResources []
-RpcRawDataProvider DetStore StoreGateSvc/DetectorStore
-RpcRawDataProvider.RPC_RawDataProviderTool ExtraOutputs []
-RpcRawDataProvider.RPC_RawDataProviderTool EvtStore StoreGateSvc
-RpcRawDataProvider.RPC_RawDataProviderTool ExtraInputs []
-RpcRawDataProvider.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-RpcRawDataProvider.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider ExtraOutputs []
-TgcRawDataProvider EvtStore StoreGateSvc
-TgcRawDataProvider ExtraInputs []
-TgcRawDataProvider NeededResources []
-TgcRawDataProvider ProviderTool Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool
-TgcRawDataProvider DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider.TGC_RawDataProviderTool ExtraOutputs []
-TgcRawDataProvider.TGC_RawDataProviderTool EvtStore StoreGateSvc
-TgcRawDataProvider.TGC_RawDataProviderTool ExtraInputs []
-TgcRawDataProvider.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider ExtraOutputs []
-MdtRawDataProvider EvtStore StoreGateSvc
-MdtRawDataProvider ExtraInputs []
-MdtRawDataProvider NeededResources []
-MdtRawDataProvider ProviderTool Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool
-MdtRawDataProvider DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider.MDT_RawDataProviderTool ExtraOutputs []
-MdtRawDataProvider.MDT_RawDataProviderTool EvtStore StoreGateSvc
-MdtRawDataProvider.MDT_RawDataProviderTool ExtraInputs []
-MdtRawDataProvider.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider ExtraOutputs []
-CscRawDataProvider EvtStore StoreGateSvc
-CscRawDataProvider ExtraInputs []
-CscRawDataProvider NeededResources []
-CscRawDataProvider ProviderTool Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool
-CscRawDataProvider DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider.CSC_RawDataProviderTool ExtraOutputs []
-CscRawDataProvider.CSC_RawDataProviderTool EvtStore StoreGateSvc
-CscRawDataProvider.CSC_RawDataProviderTool ExtraInputs []
-CscRawDataProvider.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData ExtraOutputs []
-RpcRdoToRpcPrepData DecodingTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool
-RpcRdoToRpcPrepData EvtStore StoreGateSvc
-RpcRdoToRpcPrepData ExtraInputs []
-RpcRdoToRpcPrepData PrintPrepData False
-RpcRdoToRpcPrepData RegionSelectionSvc RegSelSvc
-RpcRdoToRpcPrepData NeededResources []
-RpcRdoToRpcPrepData DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraOutputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraInputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
-TgcRdoToTgcPrepData ExtraOutputs []
-TgcRdoToTgcPrepData DecodingTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool
-TgcRdoToTgcPrepData EvtStore StoreGateSvc
-TgcRdoToTgcPrepData RegionSelectorSvc RegSelSvc
-TgcRdoToTgcPrepData ExtraInputs []
-TgcRdoToTgcPrepData PrintPrepData False
-TgcRdoToTgcPrepData NeededResources []
-TgcRdoToTgcPrepData DetStore StoreGateSvc/DetectorStore
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraOutputs []
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraInputs []
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
-MdtRdoToMdtPrepData ExtraOutputs []
-MdtRdoToMdtPrepData DecodingTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool
-MdtRdoToMdtPrepData EvtStore StoreGateSvc
-MdtRdoToMdtPrepData ExtraInputs []
-MdtRdoToMdtPrepData PrintPrepData False
-MdtRdoToMdtPrepData RegionSelectionSvc RegSelSvc
-MdtRdoToMdtPrepData NeededResources []
-MdtRdoToMdtPrepData DetStore StoreGateSvc/DetectorStore
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraOutputs []
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraInputs []
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData ExtraOutputs []
-CscRdoToCscPrepData CscRdoToCscPrepDataTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool
-CscRdoToCscPrepData EvtStore StoreGateSvc
-CscRdoToCscPrepData ExtraInputs []
-CscRdoToCscPrepData PrintPrepData False
-CscRdoToCscPrepData RegionSelectionSvc RegSelSvc
-CscRdoToCscPrepData NeededResources []
-CscRdoToCscPrepData DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
-CscThesholdClusterBuilder ExtraOutputs []
-CscThesholdClusterBuilder EvtStore StoreGateSvc
-CscThesholdClusterBuilder ExtraInputs []
-CscThesholdClusterBuilder cluster_builder CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool
-CscThesholdClusterBuilder NeededResources []
-CscThesholdClusterBuilder DetStore StoreGateSvc/DetectorStore
-CondInputLoader ExtraOutputs []
-CondInputLoader Load [('CondAttrListCollection', '/MDT/CABLING/MEZZANINE_SCHEMA'), ('CondAttrListCollection', '/EXT/DCS/MAGNETS/SENSORDATA'), ('CondAttrListCollection', '/MDT/CABLING/MAP_SCHEMA')]
-CondInputLoader EvtStore StoreGateSvc
-CondInputLoader ExtraInputs []
-CondInputLoader NeededResources []
-CondInputLoader DetStore StoreGateSvc/DetectorStore
-MuonMDT_CablingAlg ExtraOutputs []
-MuonMDT_CablingAlg EvtStore StoreGateSvc
-MuonMDT_CablingAlg ExtraInputs []
-MuonMDT_CablingAlg NeededResources []
-MuonMDT_CablingAlg DetStore StoreGateSvc/DetectorStore
-MuonMDT_CablingAlg MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
-MuonMDT_CablingAlg MapFolders /MDT/CABLING/MAP_SCHEMA
-ToolSvc.IOVDbMetaDataTool ExtraOutputs []
-ToolSvc.IOVDbMetaDataTool FoldersToBeModified ['/Simulation/Parameters']
-ToolSvc.IOVDbMetaDataTool MinMaxRunNumbers []
-ToolSvc.IOVDbMetaDataTool EvtStore StoreGateSvc
-ToolSvc.IOVDbMetaDataTool AttributesToBeRemoved ['RandomSeedOffset']
-ToolSvc.IOVDbMetaDataTool ExtraInputs []
-ToolSvc.IOVDbMetaDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.ByteStreamMetadataTool ExtraOutputs []
-ToolSvc.ByteStreamMetadataTool EvtStore StoreGateSvc
-ToolSvc.ByteStreamMetadataTool ExtraInputs []
-ToolSvc.ByteStreamMetadataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.Muon::MuonIdHelperTool ExtraOutputs []
-ToolSvc.Muon::MuonIdHelperTool EvtStore StoreGateSvc
-ToolSvc.Muon::MuonIdHelperTool ExtraInputs []
-ToolSvc.Muon::MuonIdHelperTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPCCablingDbTool ExtraOutputs []
-ToolSvc.RPCCablingDbTool EvtStore StoreGateSvc
-ToolSvc.RPCCablingDbTool ExtraInputs []
-ToolSvc.RPCCablingDbTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPCCablingDbTool MapCorrectionFolder /RPC/CABLING/MAP_SCHEMA_CORR
-ToolSvc.RPCCablingDbTool MapConfigurationFolder /RPC/CABLING/MAP_SCHEMA
-ToolSvc.RPC_RawDataProviderTool ExtraOutputs []
-ToolSvc.RPC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.RPC_RawDataProviderTool ExtraInputs []
-ToolSvc.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.TGC_RawDataProviderTool ExtraOutputs []
-ToolSvc.TGC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.TGC_RawDataProviderTool ExtraInputs []
-ToolSvc.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDTCablingDbTool ExtraOutputs []
-ToolSvc.MDTCablingDbTool EvtStore StoreGateSvc
-ToolSvc.MDTCablingDbTool ExtraInputs []
-ToolSvc.MDTCablingDbTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDTCablingDbTool MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
-ToolSvc.MDTCablingDbTool MapFolders /MDT/CABLING/MAP_SCHEMA
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraOutputs []
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RT_InputFiles ['Muon_RT_default.data']
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TimeSlewingCorrection False
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RtFolder /MDT/RTBLOB
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool MeanCorrectionVsR [-5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524]
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool defaultT0 40
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraInputs []
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool UseMLRt True
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool PropagationSpeedBeta 0.85
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TubeFolder /MDT/T0BLOB
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool ExtraOutputs []
-ToolSvc.MDT_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool ExtraInputs []
-ToolSvc.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.CSC_RawDataProviderTool ExtraOutputs []
-ToolSvc.CSC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.CSC_RawDataProviderTool ExtraInputs []
-ToolSvc.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.RpcRdoToRpcPrepDataTool ExtraOutputs []
-ToolSvc.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
-ToolSvc.RpcRdoToRpcPrepDataTool ExtraInputs []
-ToolSvc.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
-ToolSvc.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.TgcRdoToTgcPrepDataTool ExtraOutputs []
-ToolSvc.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-ToolSvc.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
-ToolSvc.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-ToolSvc.TgcRdoToTgcPrepDataTool ExtraInputs []
-ToolSvc.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MdtRdoToMdtPrepDataTool ExtraOutputs []
-ToolSvc.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
-ToolSvc.MdtRdoToMdtPrepDataTool ExtraInputs []
-ToolSvc.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
-ToolSvc.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
-ToolSvc.CscRdoToCscPrepDataTool ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscThesholdClusterBuilderTool ExtraOutputs []
-ToolSvc.CscThesholdClusterBuilderTool split_fitter CscSplitClusterFitter/CscSplitClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool strip_fitter CalibCscStripFitter/CalibCscStripFitter
-ToolSvc.CscThesholdClusterBuilderTool cscCalibTool CscCalibTool/CscCalibTool
-ToolSvc.CscThesholdClusterBuilderTool default_fitter SimpleCscClusterFitter/SimpleCscClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool precision_fitter QratCscClusterFitter/QratCscClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool EvtStore StoreGateSvc
-ToolSvc.CscThesholdClusterBuilderTool ExtraInputs []
-ToolSvc.CscThesholdClusterBuilderTool DetStore StoreGateSvc/DetectorStore
-EventSelector SharedMemoryTool 
-EventSelector SkipEventSequence []
-EventSelector CounterTool 
-EventSelector Input []
-EventSelector ByteStreamInputSvc ByteStreamInputSvc
-EventSelector.xAODMaker::EventInfoSelectorTool ExtraOutputs []
-EventSelector.xAODMaker::EventInfoSelectorTool EvtStore StoreGateSvc
-EventSelector.xAODMaker::EventInfoSelectorTool BeamCondSvc BeamCondSvc
-EventSelector.xAODMaker::EventInfoSelectorTool ExtraInputs []
-EventSelector.xAODMaker::EventInfoSelectorTool LuminosityTool LuminosityTool
-EventSelector.xAODMaker::EventInfoSelectorTool DetStore StoreGateSvc/DetectorStore
-ByteStreamInputSvc EventStore StoreGateSvc
-ByteStreamInputSvc FullFileName ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
-ByteStreamInputSvc AttributeListKeys []
-ByteStreamInputSvc MetaDataStore StoreGateSvc/InputMetaDataStore
-EventPersistencySvc CnvServices ['ByteStreamCnvSvc', 'AthenaPoolCnvSvc/AthenaPoolCnvSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'AthenaPoolCnvSvc']
-ByteStreamCnvSvc InitCnvs ['EventInfo', 'ROIB::RoIBResult', 'HLT::HLTResult']
-ByteStreamCnvSvc EventStore StoreGateSvc
-ByteStreamCnvSvc ROD2ROBmap []
-ByteStreamCnvSvc ByteStreamOutputSvcList []
-ByteStreamCnvSvc GetDetectorMask True
-ROBDataProviderSvc filterRobWithStatus []
-ROBDataProviderSvc filterSubDetWithStatus []
-ByteStreamAddressProviderSvc TypeNames ['TileCellIDC/TileCellIDC', 'MdtDigitContainer/MDT_DIGITS', 'RpcDigitContainer/RPC_DIGITS', 'TgcDigitContainer/TGC_DIGITS', 'CscDigitContainer/CSC_DIGITS', 'ROIB::RecRoIBResult/RecRoIBResult', 'MuCTPI_RIO/MUCTPI_RIO', 'CTP_RIO/CTP_RIO', 'LArRawChannelContainer/LArRawChannels', 'TileRawChannelContainer/TileRawChannelCnt', 'ROIB::RoIBResult/RoIBResult', 'MuCTPI_RDO/MUCTPI_RDO', 'HLT::HLTResult/HLTResult_L2', 'HLT::HLTResult/HLTResult_EF', 'CTP_RDO/CTP_RDO', 'L1TopoRDOCollection/L1TopoRDOCollection']
-ByteStreamAddressProviderSvc TopoProcModuleID [129, 145]
-ByteStreamAddressProviderSvc JetProcModuleID [172, 173]
-ByteStreamAddressProviderSvc CaloClusterProcModuleID [168, 169, 170, 171]
-MetaDataStore IncidentSvc IncidentSvc
-MetaDataStore ProxyProviderSvc ProxyProviderSvc
-InputMetaDataStore IncidentSvc IncidentSvc
-InputMetaDataStore ProxyProviderSvc ProxyProviderSvc
-MetaDataSvc MetaDataContainer MetaDataHdr
-MetaDataSvc CnvSvc AthenaPoolCnvSvc
-ProxyProviderSvc ProviderNames ['ByteStreamAddressProviderSvc', 'IOVDbSvc', 'MetaDataSvc', 'TagInfoMgr']
-GeoModelSvc SupportedGeometry 22
-GeoModelSvc AtlasVersion ATLAS-R2-2016-01-00-01
-GeoModelSvc.MuonDetectorTool ExtraOutputs []
-GeoModelSvc.MuonDetectorTool TheMuonAlignmentTool 
-GeoModelSvc.MuonDetectorTool EvtStore StoreGateSvc
-GeoModelSvc.MuonDetectorTool UseConditionDb 1
-GeoModelSvc.MuonDetectorTool ExtraInputs []
-GeoModelSvc.MuonDetectorTool UseIlinesFromGM 1
-GeoModelSvc.MuonDetectorTool SelectedStJff []
-GeoModelSvc.MuonDetectorTool DetStore StoreGateSvc/DetectorStore
-GeoModelSvc.MuonDetectorTool SelectedStations []
-GeoModelSvc.MuonDetectorTool SelectedStJzz []
-DetDescrCnvSvc IdDictFromRDB True
-DetDescrCnvSvc IdDictName IdDictParser/ATLAS_IDS.xml
-DetDescrCnvSvc DetectorNodes []
-DetDescrCnvSvc DetectorManagers []
-TagInfoMgr ExtraTagValuePairs ['AtlasRelease', 'Athena-22.0.1']
-RPCcablingServerSvc Atlas True
-RPCcablingServerSvc useMuonRPC_CablingSvc True
-RPCcablingServerSvc forcedUse True
-IOVDbSvc Folders ['/MDT/CABLING/MEZZANINE_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_ETA<db>COOLONL_RPC/CONDBR2</db>', '/MDT/RTBLOB<db>COOLOFL_MDT/CONDBR2</db>', '/MDT/T0BLOB<db>COOLOFL_MDT/CONDBR2</db>', '/CSC/STAT <key>CSC_STAT</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/NOISE <key>CSC_NOISE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/PED <key>CSC_PED</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/RMS <key>CSC_RMS</key> <db>COOLOFL_CSC/CONDBR2</db>', '/GLOBAL/BField/Maps <noover/><db>COOLONL_GLOBAL/CONDBR2</db>', '/CSC/T0PHASE <key>CSC_T0PHASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/TGC/CABLING/MAP_SCHEMA<db>COOLONL_TGC/CONDBR2</db>', '/EXT/DCS/MAGNETS/SENSORDATA<db>COOLOFL_DCS/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA_CORR<db>COOLONL_RPC/CONDBR2</db>', '/MDT/CABLING/MAP_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_PHI<db>COOLONL_RPC/CONDBR2</db>', '/CSC/PSLOPE <key>CSC_PSLOPE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA<db>COOLONL_RPC/CONDBR2</db>', '/CSC/T0BASE <key>CSC_T0BASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/FTHOLD <key>CSC_FTHOLD</key> <db>COOLOFL_CSC/CONDBR2</db>']
-IOVDbSvc CacheAlign 3
-IOVDbSvc dbConnection sqlite://;schema=mycool.db;dbname=CONDBR2
-IOVDbSvc GlobalTag CONDBR2-BLKPA-2018-13
-IOVDbSvc FoldersToMetaData ['/GLOBAL/BField/Maps']
-IOVDbSvc DBInstance CONDBR2
-IOVDbSvc overrideTags []
-PoolSvc FrontierRefreshSchema []
-PoolSvc ReadCatalog ['apcfile:poolcond/PoolFileCatalog.xml', 'prfile:poolcond/PoolCat_oflcond.xml', 'apcfile:poolcond/PoolCat_oflcond.xml', 'prfile:poolcond/PoolCat_comcond.xml', 'apcfile:poolcond/PoolCat_comcond.xml']
-PoolSvc MaxFilesOpen 0
-DBReplicaSvc COOLSQLiteVetoPattern /DBRelease/
-MuonRPC_CablingSvc ConfFilePath MuonRPC_Cabling/
-MuonRPC_CablingSvc TheRpcTriggerDbTool RPCTriggerDbTool
-MuonRPC_CablingSvc ConfFileName LVL1confAtlas.data
-MuonRPC_CablingSvc FeetPadThresolds []
-MuonRPC_CablingSvc TheRpcCablingDbTool RPCCablingDbTool/RPCCablingDbTool
-MuonRPC_CablingSvc RPCTriggerRoadsfromCool True
-MuonRPC_CablingSvc CorrFileName LVL1confAtlas.corr
-MuonRPC_CablingSvc CosmicConfiguration True
-TGCcablingServerSvc Atlas True
-TGCcablingServerSvc useMuonTGC_CablingSvc True
-TGCcablingServerSvc forcedUse True
-AthenaPoolCnvSvc InputPoolAttributes []
-AthenaPoolCnvSvc PoolAttributes []
-AthenaPoolCnvSvc PrintInputAttrPerEvt []
-AthenaPoolCnvSvc InputStreamingTool 
-AthenaPoolCnvSvc OutputPoolFileAllocator []
-AthenaPoolCnvSvc MaxFileSizes []
-MuonMDT_CablingSvc DBTool MDTCablingDbTool/MDTCablingDbTool
-MuonMDT_CablingSvc TagInfoManager TagInfoMgr
-MuonMDT_CablingSvc ForcedUse True
-MuonMDT_CablingSvc UseOldCabling False
-AtlasFieldSvc UseDCS True
-MdtCalibrationDbSvc CreateSlewingFunctions False
-MdtCalibrationDbSvc DBTool MuonCalib::MdtCalibDbAsciiTool
-MdtCalibrationDbSvc CreateBFieldFunctions False
-MdtCalibrationDbSvc CreateWireSagFunctions False
-MdtCalibrationSvc DoTofCorrection True
-MdtCalibrationSvc MagFieldSvc AtlasFieldSvc
-MdtCalibrationSvc DoWireSagCorrection False
-MdtCalibrationSvc TimeWindowSetting 2
-MdtCalibrationSvc DoSlewingCorrection False
-MdtCalibrationSvc DoTemperatureCorrection True
-MuonCalib::CscCoolStrSvc ParSGKeys ['CSC_PED', 'CSC_NOISE', 'CSC_PSLOPE', 'CSC_STAT', 'CSC_RMS', 'CSC_FTHOLD', 'CSC_T0BASE', 'CSC_T0PHASE']
-MuonCalib::CscCoolStrSvc ParDefaults ['2048', '3.5', '0.189', '0', '2.56', '0', '0', '0']
-MuonCalib::CscCoolStrSvc ParDataTypes ['float', 'float', 'float', 'uint32_t', 'float', 'float', 'float', 'float']
-MuonCalib::CscCoolStrSvc ParFolders ['/CSC/PED', '/CSC/NOISE', '/CSC/PSLOPE', '/CSC/STAT', '/CSC/RMS', '/CSC/FTHOLD', '/CSC/T0BASE', '/CSC/T0PHASE']
-MuonCalib::CscCoolStrSvc ParCats ['CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'ASM']
-MuonCalib::CscCoolStrSvc ParNames ['ped', 'noise', 'pslope', 'status', 'rms', 'f001', 't0base', 't0phase']
+/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f36dfab5ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7f36dfab5e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f36de048560 = []  (default: [])
+|-ExtraOutputs               @0x7f36de0485f0 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7f36de048170 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f36de048440 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7f36e1166b00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f36de6d8cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de6d8c50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de0486c8 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048680 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048638 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f36de95c680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f36de6d8d50 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7f36de9b9620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7f36de67fb90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7f36de67fb50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7f36de6c9050 = []  (default: [])
+| | |-ExtraOutputs           @0x7f36de6c9170 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel                         = 0
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey                = 'StoreGateSvc+'
+| | |-WriteOutRpcSectorLogic              = True
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f36de67fc10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f36de67fc50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f36de6bff80 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f36de6bff38 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f36de665c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de665c10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048908 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de0489e0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048950 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f36df86d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f36df86d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f36de69f190 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f36de69f1d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f36de62f7e8 = []  (default: [])
+| | |-ExtraOutputs      @0x7f36de62f638 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f36de69f290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de69f2d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de62f488 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de62f5f0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f36de6cced0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de6cce50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048a28 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048ab8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048998 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f36de76ee50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f36df86dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f36de1ca250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f36de1ca290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f36de1e0f38 = []  (default: [])
+| | |-ExtraOutputs         @0x7f36de1e0dd0 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel                       = 0
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f36de1ca350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de1ca390 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de1e0e60 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de1e0e18 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f36de6cc110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de6cc090 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048b00 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048b48 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048710 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f36de14f150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey              = 'StoreGateSvc+'
+| | |-Decoder              @0x7f36df86de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f36de12a110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f36de12a150 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f36de122ab8 = []  (default: [])
+| | |-ExtraOutputs         @0x7f36de122d40 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel                       = 0
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f36de12a210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de12a250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de122c20 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de122bd8 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f36de8d5d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f36de159b90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de159b10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048320 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048c20 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048c68 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de159c10 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f36de0c8d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f36de0c8dd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f36de134950 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f36de134b00 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f36de4b84b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f36de0c8e50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de0c8e90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de134c20 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de134bd8 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f36de0d5050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f36de0b0a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de0b0a10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048a70 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048cb0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048cf8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f36de0b0b10 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f36de0c8ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f36de0c8f50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f36de0d69e0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f36de0d6998 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f36de0d6440 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f36de0d6a70 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f36e09e8b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f36de145a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de1459d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048d88 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048e18 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048dd0 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de145ad0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7f36de0dd350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f36de0dd2d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f36de0e2b90 = []  (default: [])
+| | |-ExtraOutputs            @0x7f36de0e2a28 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f36de841380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f36de12a790 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de12af50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de048ef0 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048b90 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048e60 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f36e1166b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f36de12a810 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f36e09df9b8 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f36de0e3960 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7f36de0dd450 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f36de0dd590 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f36de0d34d0 = []  (default: [])
+| | |-ExtraOutputs      @0x7f36de0d3fc8 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f36de0dd5d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f36de0dd610 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f36de0e7998 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f36de0e7a28 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f36de0dd510 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f36de0dd490 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f36de0dd550 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f36de0e7908 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f36de0e78c0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f36de106890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f36de106810 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f36de054050 = []  (default: [])
+| |-ExtraOutputs               @0x7f36de048f80 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f36de048fc8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f36de046210 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
-Thu Mar 14 11:32:12 GMT 2019
+Fri Mar 15 12:38:46 GMT 2019
 Preloading tcmalloc_minimal.so
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [iac_master_rpcrdo/63cc84e] -- built on [2019-03-15T1157]
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -2466,13 +2747,13 @@ Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
-Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
-                                          running on ppevm02.ppe.gla.ac.uk on Thu Mar 14 11:32:26 2019
+                                          running on ppevm02.ppe.gla.ac.uk on Fri Mar 15 12:38:59 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -2480,7 +2761,7 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 3383 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3440 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
@@ -2500,7 +2781,7 @@ PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.x
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
 DBReplicaSvc         INFO Total of 1 servers found for host ppevm02.ppe.gla.ac.uk [ATLF ]
 DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
@@ -2526,11 +2807,11 @@ AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version Athena
 ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
 MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
-ClassIDSvc           INFO  getRegistryEntries: read 3291 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3314 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO  getRegistryEntries: read 4012 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4046 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO  getRegistryEntries: read 3031 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3110 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -2783,7 +3064,7 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
-GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 44888Kb 	 Time = 1.04S
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.92S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
@@ -2832,7 +3113,7 @@ TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
 ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x161ac100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x153a2100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
 ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
@@ -2878,20 +3159,21 @@ ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
 ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_PED]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_NOISE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_STAT]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_RMS]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a255a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1a59d400]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
+ClassIDSvc           INFO  getRegistryEntries: read 1126 CLIDRegistry entries for module ALL
 ToolSvc.Luminos...   INFO LuminosityTool::initialize() registering 
 ToolSvc.Luminos...   INFO LumiFolderName is empty, skipping
 ToolSvc.Luminos...   INFO OnlineLumiCalibrationTool.empty() is TRUE, skipping...
@@ -2905,7 +3187,6 @@ EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
 ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
-ClassIDSvc           INFO  getRegistryEntries: read 1159 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
@@ -3081,34 +3362,34 @@ IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/25 ((     0.27 ))s
-IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/271 ((     0.60 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216598 ((     0.81 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/300 ((     0.55 ))s
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.26 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.66 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.78 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.42 ))s
 IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/444470 ((     0.62 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/58804 ((     0.52 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562972 ((     1.13 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8101322 ((     0.97 ))s
-IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/7408 ((     0.58 ))s
-IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/331329 ((     1.05 ))s
-IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/359591 ((     0.51 ))s
-IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422629 ((     0.52 ))s
-IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/363009 ((     0.48 ))s
-IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422831 ((     0.55 ))s
-IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/236289 ((     0.48 ))s
-IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322855 ((     0.52 ))s
-IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3234 ((     0.37 ))s
-IOVDbSvc             INFO  bytes in ((     10.52 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.62 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.42 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     1.06 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.81 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.56 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.67 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.50 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.51 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.47 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.53 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.47 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.48 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.36 ))s
+IOVDbSvc             INFO  bytes in ((      9.58 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.36 ))s
-IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.24 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.20 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     2.91 ))s
 IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.48 ))s
-IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.60 ))s
-IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.58 ))s
-IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.27 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     3.98 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.66 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.56 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.26 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -3132,8 +3413,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObj_ALL             INFO Time User   : Tot=   10 [ms] Ave/Min/Max=0.556(+- 2.29)/    0/   10 [ms] #= 18
-ChronoStatSvc        INFO Time User   : Tot= 10.9  [s]                                             #=  1
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
+ChronoStatSvc        INFO Time User   : Tot= 10.5  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
index 88e725e64ae7..1f4ee37443eb 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
@@ -1,11 +1,13 @@
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -32,13 +34,14 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
 Detector        :                     __detector : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -72,16 +75,18 @@ Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/By
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
 Py:ComponentAccumulator   DEBUG   Merging algorithm MuonCacheCreator to a sequence AthAlgSeq
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [iac_master_rpcrdo/63cc84e] -- built on [2019-03-15T1157]
 dynamically loading the flag Detector
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -176,12 +181,13 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Muon            :                         __muon : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
@@ -470,11 +476,13 @@ dynamically loading the flag Muon
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -625,12 +633,13 @@ Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
 Scheduler.CheckDependencies              : True
-Scheduler.ShowControlFlow                : False
-Scheduler.ShowDataDeps                   : False
-Scheduler.ShowDataFlow                   : False
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
 Flag categories that can be loaded dynamically
 Category        :                 Generator name : Defined in
 DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
 LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
 Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
 Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
@@ -654,14 +663,14 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
 Py:ConfigurableDb   DEBUG loading confDb files...
-Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonByteStream.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/home/ppe/i/iconnell/projects/MuonTriggerAthenaMT/build_RPC/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
 Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
 Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
-Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
@@ -1437,24 +1446,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7f0461dd3e90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7fe2e5219e90 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7f0461dd3e10 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7f0460462098 = []  (default: [])
-|-ExtraOutputs               @0x7f0460462200 = []  (default: [])
+|-EvtStore                   @0x7fe2e5219e10 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7fe2e3857290 = []  (default: [])
+|-ExtraOutputs               @0x7fe2e3857320 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7f0460410e18 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7fe2e37a6dd0 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7f04604622d8 = []  (default: [])
+|-NeededResources            @0x7fe2e3857170 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                              = False
+|-Sequential                 @0x7fe2e68cab00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -1470,24 +1479,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 0
-| |-CscCacheKey                @0x7f0460cef870 = 'CscCache'  (default: 'StoreGateSvc+')
-| |-DetStore                   @0x7f0460a5db10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-CscCacheKey                @0x7fe2e4141870 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7fe2e4009050 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DisableViewWarning                      = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460a5da90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f0460462320 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462488 = []  (default: [])
+| |-EvtStore                   @0x7fe2e407df90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857368 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38571b8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
-| |-MdtCsmCacheKey             @0x7f0460cef510 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MdtCsmCacheKey             @0x7fe2e4141450 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462368 = []  (default: [])
+| |-NeededResources            @0x7fe2e38573b0 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
-| |-RpcCacheKey                @0x7f0460cef540 = 'RpcCache'  (default: 'StoreGateSvc+')
-| |-TgcCacheKey                @0x7f0460cef570 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-RpcCacheKey                @0x7fe2e4141480 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7fe2e41414e0 = 'TgcCache'  (default: 'StoreGateSvc+')
 | |-Timeline                                = True
 | \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
@@ -1502,24 +1511,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f0460a44d50 = ServiceHandle('StoreGateSvc/DetectorStore')
-| |-DoSeededDecoding           @0x7f0463486b00 = True  (default: False)
+| |-DetStore                   @0x7fe2e406f290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding           @0x7fe2e68cab00 = True  (default: False)
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460a44cd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f04604623f8 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462518 = []  (default: [])
+| |-EvtStore                   @0x7fe2e406f210 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857440 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38574d0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f04604623b0 = []  (default: [])
+| |-NeededResources            @0x7fe2e3857488 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f0460c6f680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7fe2e40c0680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7f0460a44dd0 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7fe2e406f310 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
-| |-RoIs                       @0x7f0462ce6e70 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
+| |-RoIs                       @0x7fe2e6132f00 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
 | |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
 | | |-AuditFinalize                       = False
@@ -1529,17 +1538,17 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                          = False
 | | |-AuditStop                           = False
 | | |-AuditTools                          = False
-| | |-Decoder                @0x7f0460cc9620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore               @0x7f046098b5d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore               @0x7f046098b610 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs            @0x7f0460a23518 = []  (default: [])
-| | |-ExtraOutputs           @0x7f0460a23560 = []  (default: [])
+| | |-Decoder                @0x7fe2e411d620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7fe2e3ce6ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7fe2e3ce6b10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7fe2e3ced3f8 = []  (default: [])
+| | |-ExtraOutputs           @0x7fe2e3ced290 = []  (default: [])
 | | |-MonitorService                      = 'MonitorSvc'
-| | |-OutputLevel            @  0x171a1c0 = 2  (default: 0)
+| | |-OutputLevel            @  0x22561c0 = 2  (default: 0)
 | | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
 | | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
-| | |-RpcContainerCacheKey   @0x7f0460cef540 = 'RpcCache'  (default: 'StoreGateSvc+')
-| | |-WriteOutRpcSectorLogic @0x7f0463486b20 = False  (default: True)
+| | |-RpcContainerCacheKey   @0x7fe2e4141480 = 'RpcCache'  (default: 'StoreGateSvc+')
+| | |-WriteOutRpcSectorLogic @0x7fe2e68cab20 = False  (default: True)
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -1549,10 +1558,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7f046098b6d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7f046098b710 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7f0460a232d8 = []  (default: [])
-| | | |-ExtraOutputs        @0x7f0460a23290 = []  (default: [])
+| | | |-DetStore            @0x7fe2e3ce6bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7fe2e3ce6c10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7fe2e3ced320 = []  (default: [])
+| | | |-ExtraOutputs        @0x7fe2e3ced2d8 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1572,19 +1581,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f0460a50d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e407d250 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460a50c90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f04604627a0 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462878 = []  (default: [])
+| |-EvtStore                   @0x7fe2e407d1d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857758 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857830 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f04604627e8 = []  (default: [])
+| |-NeededResources            @0x7fe2e38577a0 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f0461b828c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7fe2e4fd18c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1596,12 +1605,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f0461b829b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7fe2e4fd19b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7f0460927c10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f0460927c50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f046092b9e0 = []  (default: [])
-| | |-ExtraOutputs      @0x7f046092b830 = []  (default: [])
+| | |-DetStore          @0x7fe2e3d47150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fe2e3d47190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fe2e3dd1bd8 = []  (default: [])
+| | |-ExtraOutputs      @0x7fe2e3dd1a28 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1613,10 +1622,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f0460927d10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f0460927d50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f046092b680 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f046092b7e8 = []  (default: [])
+| | | |-DetStore          @0x7fe2e3d47250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3d47290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e3dd1878 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e3dd19e0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1636,19 +1645,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f0460bf7f50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e4061490 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460bf7ed0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f04604628c0 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462950 = []  (default: [])
+| |-EvtStore                   @0x7fe2e4061410 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857878 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857908 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462830 = []  (default: [])
+| |-NeededResources            @0x7fe2e38577e8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f0460d70d50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7fe2e3ed2e50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1660,14 +1669,14 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CsmContainerCacheKey @0x7f0460cef510 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f0461b82c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7f04604e7d10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7f04604e7d50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f04604eca70 = []  (default: [])
-| | |-ExtraOutputs         @0x7f04604ecb48 = []  (default: [])
+| | |-CsmContainerCacheKey @0x7fe2e4141450 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7fe2e4fd1c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7fe2e3923210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7fe2e3923250 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fe2e38d0128 = []  (default: [])
+| | |-ExtraOutputs         @0x7fe2e38d0098 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @  0x171a1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x22561d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
 | | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
 | | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
@@ -1678,10 +1687,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f04604e7e10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f04604e7e50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f04604ec950 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f04604ec908 = []  (default: [])
+| | | |-DetStore          @0x7fe2e3923310 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3923350 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e38d0050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e393cfc8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1701,19 +1710,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f0460bf7190 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e4056690 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460bf7110 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f04604629e0 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462908 = []  (default: [])
+| |-EvtStore                   @0x7fe2e4056610 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857998 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38578c0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462710 = []  (default: [])
+| |-NeededResources            @0x7fe2e38576c8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f04604b2050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7fe2e3890150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1725,15 +1734,15 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CscContainerCacheKey @0x7f0460cef870 = 'CscCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f0461b82e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7f04604aabd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-CscContainerCacheKey @0x7fe2e4141870 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7fe2e4fd1e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7fe2e38910d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7f04604aac10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f046047c248 = []  (default: [])
-| | |-ExtraOutputs         @0x7f046047c560 = []  (default: [])
+| | |-EvtStore             @0x7fe2e3891110 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fe2e388d440 = []  (default: [])
+| | |-ExtraOutputs         @0x7fe2e388d758 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @  0x171a1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x22561d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
 | | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
 | | | |-AuditFinalize                  = False
@@ -1743,10 +1752,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f04604aacd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f04604aad10 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f046047c368 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f046047c320 = []  (default: [])
+| | | |-DetStore          @0x7fe2e38911d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3891210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e388d560 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e388d518 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1766,25 +1775,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f0460b59d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7fe2e3fbcd20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7f04603e4690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e38c0b50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f04603e4610 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f04604626c8 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462b00 = []  (default: [])
+| |-EvtStore                   @0x7fe2e38c0ad0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857680 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857ab8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462a28 = []  (default: [])
+| |-NeededResources            @0x7fe2e38579e0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f04603e4710 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e38c0bd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1797,16 +1806,16 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7f046044b850 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7f046044b8d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7f04604bac68 = []  (default: [])
-| | |-ExtraOutputs                       @0x7f04604bacf8 = []  (default: [])
+| | |-DetStore                           @0x7fe2e382dd10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7fe2e382dd90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7fe2e389b128 = []  (default: [])
+| | |-ExtraOutputs                       @0x7fe2e389b518 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7f04604c22f0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7fe2e3d1e4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1824,10 +1833,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f046044b950 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f046044b990 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f04604baf38 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f04604baef0 = []  (default: [])
+| | | |-DetStore          @0x7fe2e382de10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e382de50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e389b638 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e389b5f0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1845,25 +1854,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f046045e050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7fe2e383e050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7f046043e590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e3819a50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f046043e510 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f0460462998 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462b48 = []  (default: [])
+| |-EvtStore                   @0x7fe2e38199d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857950 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857b00 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462b90 = []  (default: [])
+| |-NeededResources            @0x7fe2e3857b48 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7f046043e610 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7fe2e3819ad0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -1877,10 +1886,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7f046044bad0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7f046044ba10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7f046045cb48 = []  (default: [])
-| | |-ExtraOutputs                            @0x7f046045c2d8 = []  (default: [])
+| | |-DetStore                                @0x7fe2e382df10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7fe2e382dfd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7fe2e383da70 = []  (default: [])
+| | |-ExtraOutputs                            @0x7fe2e383da28 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1889,9 +1898,9 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7f046045c710 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7fe2e383d4d0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7f046045cbd8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7fe2e383db00 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1908,25 +1917,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f0462d00b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7fe2e614cb50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7f04603d8550 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e38aca10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f04603d84d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f0460462c20 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462cb0 = []  (default: [])
+| |-EvtStore                   @0x7fe2e38ac990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857bd8 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857c68 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462c68 = []  (default: [])
+| |-NeededResources            @0x7fe2e3857c20 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f04603d85d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e38aca90 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1940,13 +1949,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7f046044bcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7fe2e382dc10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7f046044bd90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7f046046b488 = []  (default: [])
-| | |-ExtraOutputs            @0x7f046046b368 = []  (default: [])
+| | |-EvtStore                @0x7fe2e382dd50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7fe2e3846b48 = []  (default: [])
+| | |-ExtraOutputs            @0x7fe2e384a5f0 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1974,25 +1983,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7f0460b225a0 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7fe2e3f62380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7f0460446b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e3891610 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f0460446a50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f0460462d88 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462a70 = []  (default: [])
+| |-EvtStore                   @0x7fe2e3891f10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857d40 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857a28 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462cf8 = []  (default: [])
+| |-NeededResources            @0x7fe2e3857cb0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f0463486b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f0460446bd0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e3891690 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2005,13 +2014,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7f0462d69b10 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7f0460468c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7fe2e61439b8 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7fe2e3838c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7f046044b9d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f0460471090 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f046045f128 = []  (default: [])
-| | |-ExtraOutputs      @0x7f046045fb48 = []  (default: [])
+| | |-DetStore          @0x7fe2e382dc50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fe2e383f090 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fe2e3853a70 = []  (default: [])
+| | |-ExtraOutputs      @0x7fe2e3853878 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2024,10 +2033,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7f04604710d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7f0460471110 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7f046045fdd0 = []  (default: [])
-| | | |-ExtraOutputs       @0x7f04609a9290 = []  (default: [])
+| | | |-DetStore           @0x7fe2e383f3d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7fe2e383f290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7fe2e3853c68 = []  (default: [])
+| | | |-ExtraOutputs       @0x7fe2e3853cb0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2054,11 +2063,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7f046044bfd0 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7f046044bf90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f0460471050 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f0460996998 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f046092bf38 = []  (default: [])
+| | | |-CscCalibTool      @0x7fe2e383f4d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7fe2e383f410 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e383f110 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e3853b90 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e3853b48 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2076,21 +2085,21 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f046035c390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7fe2e386e850 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f046035c310 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f0460462dd0 = []  (default: [])
-| |-ExtraOutputs               @0x7f0460462e18 = []  (default: [])
+| |-EvtStore                   @0x7fe2e386e7d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857d88 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857dd0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f0460462e60 = []  (default: [])
+| |-NeededResources            @0x7fe2e3857e18 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7f046040ecd0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7fe2e37b61d0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
@@ -2119,402 +2128,683 @@ Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepD
 Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
 Py:ComponentAccumulator    INFO ]
 Py:Athena            INFO Save Config
-MuonCacheCreator ExtraOutputs []
-MuonCacheCreator MdtCsmCacheKey MdtCsmCache
-MuonCacheCreator TgcCacheKey TgcCache
-MuonCacheCreator CscCacheKey CscCache
-MuonCacheCreator RpcCacheKey RpcCache
-MuonCacheCreator ExtraInputs []
-MuonCacheCreator NeededResources []
-MuonCacheCreator DetStore StoreGateSvc/DetectorStore
-MuonCacheCreator EvtStore StoreGateSvc
-RpcRawDataProvider ExtraOutputs []
-RpcRawDataProvider DoSeededDecoding True
-RpcRawDataProvider EvtStore StoreGateSvc
-RpcRawDataProvider RoIs MURoIs
-RpcRawDataProvider ExtraInputs []
-RpcRawDataProvider RegionSelectionSvc RegSelSvc
-RpcRawDataProvider ProviderTool Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool
-RpcRawDataProvider NeededResources []
-RpcRawDataProvider DetStore StoreGateSvc/DetectorStore
-RpcRawDataProvider.RPC_RawDataProviderTool ExtraOutputs []
-RpcRawDataProvider.RPC_RawDataProviderTool EvtStore StoreGateSvc
-RpcRawDataProvider.RPC_RawDataProviderTool OutputLevel 2
-RpcRawDataProvider.RPC_RawDataProviderTool RpcContainerCacheKey RpcCache
-RpcRawDataProvider.RPC_RawDataProviderTool WriteOutRpcSectorLogic False
-RpcRawDataProvider.RPC_RawDataProviderTool ExtraInputs []
-RpcRawDataProvider.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
-RpcRawDataProvider.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
-RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider ExtraOutputs []
-TgcRawDataProvider EvtStore StoreGateSvc
-TgcRawDataProvider ExtraInputs []
-TgcRawDataProvider NeededResources []
-TgcRawDataProvider ProviderTool Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool
-TgcRawDataProvider DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider.TGC_RawDataProviderTool ExtraOutputs []
-TgcRawDataProvider.TGC_RawDataProviderTool EvtStore StoreGateSvc
-TgcRawDataProvider.TGC_RawDataProviderTool ExtraInputs []
-TgcRawDataProvider.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-TgcRawDataProvider.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
-TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider ExtraOutputs []
-MdtRawDataProvider EvtStore StoreGateSvc
-MdtRawDataProvider ExtraInputs []
-MdtRawDataProvider NeededResources []
-MdtRawDataProvider ProviderTool Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool
-MdtRawDataProvider DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider.MDT_RawDataProviderTool ExtraOutputs []
-MdtRawDataProvider.MDT_RawDataProviderTool EvtStore StoreGateSvc
-MdtRawDataProvider.MDT_RawDataProviderTool OutputLevel 1
-MdtRawDataProvider.MDT_RawDataProviderTool ExtraInputs []
-MdtRawDataProvider.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
-MdtRawDataProvider.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-MdtRawDataProvider.MDT_RawDataProviderTool CsmContainerCacheKey MdtCsmCache
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
-MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider ExtraOutputs []
-CscRawDataProvider EvtStore StoreGateSvc
-CscRawDataProvider ExtraInputs []
-CscRawDataProvider NeededResources []
-CscRawDataProvider ProviderTool Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool
-CscRawDataProvider DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider.CSC_RawDataProviderTool ExtraOutputs []
-CscRawDataProvider.CSC_RawDataProviderTool EvtStore StoreGateSvc
-CscRawDataProvider.CSC_RawDataProviderTool OutputLevel 1
-CscRawDataProvider.CSC_RawDataProviderTool CscContainerCacheKey CscCache
-CscRawDataProvider.CSC_RawDataProviderTool ExtraInputs []
-CscRawDataProvider.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
-CscRawDataProvider.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
-CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData ExtraOutputs []
-RpcRdoToRpcPrepData DecodingTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool
-RpcRdoToRpcPrepData EvtStore StoreGateSvc
-RpcRdoToRpcPrepData ExtraInputs []
-RpcRdoToRpcPrepData PrintPrepData False
-RpcRdoToRpcPrepData RegionSelectionSvc RegSelSvc
-RpcRdoToRpcPrepData NeededResources []
-RpcRdoToRpcPrepData DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraOutputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ExtraInputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
-RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
-TgcRdoToTgcPrepData ExtraOutputs []
-TgcRdoToTgcPrepData DecodingTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool
-TgcRdoToTgcPrepData EvtStore StoreGateSvc
-TgcRdoToTgcPrepData RegionSelectorSvc RegSelSvc
-TgcRdoToTgcPrepData ExtraInputs []
-TgcRdoToTgcPrepData PrintPrepData False
-TgcRdoToTgcPrepData NeededResources []
-TgcRdoToTgcPrepData DetStore StoreGateSvc/DetectorStore
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraOutputs []
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ExtraInputs []
-TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
-MdtRdoToMdtPrepData ExtraOutputs []
-MdtRdoToMdtPrepData DecodingTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool
-MdtRdoToMdtPrepData EvtStore StoreGateSvc
-MdtRdoToMdtPrepData ExtraInputs []
-MdtRdoToMdtPrepData PrintPrepData False
-MdtRdoToMdtPrepData RegionSelectionSvc RegSelSvc
-MdtRdoToMdtPrepData NeededResources []
-MdtRdoToMdtPrepData DetStore StoreGateSvc/DetectorStore
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraOutputs []
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ExtraInputs []
-MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData ExtraOutputs []
-CscRdoToCscPrepData CscRdoToCscPrepDataTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool
-CscRdoToCscPrepData EvtStore StoreGateSvc
-CscRdoToCscPrepData ExtraInputs []
-CscRdoToCscPrepData PrintPrepData False
-CscRdoToCscPrepData RegionSelectionSvc RegSelSvc
-CscRdoToCscPrepData NeededResources []
-CscRdoToCscPrepData DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
-CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
-CscThesholdClusterBuilder ExtraOutputs []
-CscThesholdClusterBuilder EvtStore StoreGateSvc
-CscThesholdClusterBuilder ExtraInputs []
-CscThesholdClusterBuilder cluster_builder CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool
-CscThesholdClusterBuilder NeededResources []
-CscThesholdClusterBuilder DetStore StoreGateSvc/DetectorStore
-CondInputLoader ExtraOutputs []
-CondInputLoader Load [('CondAttrListCollection', '/MDT/CABLING/MEZZANINE_SCHEMA'), ('CondAttrListCollection', '/EXT/DCS/MAGNETS/SENSORDATA'), ('CondAttrListCollection', '/MDT/CABLING/MAP_SCHEMA')]
-CondInputLoader EvtStore StoreGateSvc
-CondInputLoader ExtraInputs []
-CondInputLoader NeededResources []
-CondInputLoader DetStore StoreGateSvc/DetectorStore
-MuonMDT_CablingAlg ExtraOutputs []
-MuonMDT_CablingAlg EvtStore StoreGateSvc
-MuonMDT_CablingAlg ExtraInputs []
-MuonMDT_CablingAlg NeededResources []
-MuonMDT_CablingAlg DetStore StoreGateSvc/DetectorStore
-MuonMDT_CablingAlg MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
-MuonMDT_CablingAlg MapFolders /MDT/CABLING/MAP_SCHEMA
-ToolSvc.IOVDbMetaDataTool ExtraOutputs []
-ToolSvc.IOVDbMetaDataTool FoldersToBeModified ['/Simulation/Parameters']
-ToolSvc.IOVDbMetaDataTool MinMaxRunNumbers []
-ToolSvc.IOVDbMetaDataTool EvtStore StoreGateSvc
-ToolSvc.IOVDbMetaDataTool AttributesToBeRemoved ['RandomSeedOffset']
-ToolSvc.IOVDbMetaDataTool ExtraInputs []
-ToolSvc.IOVDbMetaDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.ByteStreamMetadataTool ExtraOutputs []
-ToolSvc.ByteStreamMetadataTool EvtStore StoreGateSvc
-ToolSvc.ByteStreamMetadataTool ExtraInputs []
-ToolSvc.ByteStreamMetadataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.Muon::MuonIdHelperTool ExtraOutputs []
-ToolSvc.Muon::MuonIdHelperTool EvtStore StoreGateSvc
-ToolSvc.Muon::MuonIdHelperTool ExtraInputs []
-ToolSvc.Muon::MuonIdHelperTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPCCablingDbTool ExtraOutputs []
-ToolSvc.RPCCablingDbTool EvtStore StoreGateSvc
-ToolSvc.RPCCablingDbTool ExtraInputs []
-ToolSvc.RPCCablingDbTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPCCablingDbTool MapCorrectionFolder /RPC/CABLING/MAP_SCHEMA_CORR
-ToolSvc.RPCCablingDbTool MapConfigurationFolder /RPC/CABLING/MAP_SCHEMA
-ToolSvc.RPC_RawDataProviderTool ExtraOutputs []
-ToolSvc.RPC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.RPC_RawDataProviderTool OutputLevel 2
-ToolSvc.RPC_RawDataProviderTool RpcContainerCacheKey RpcCache
-ToolSvc.RPC_RawDataProviderTool WriteOutRpcSectorLogic False
-ToolSvc.RPC_RawDataProviderTool ExtraInputs []
-ToolSvc.RPC_RawDataProviderTool Decoder Muon::RpcROD_Decoder/RpcROD_Decoder
-ToolSvc.RPC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraOutputs []
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder EvtStore StoreGateSvc
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder ExtraInputs []
-ToolSvc.RPC_RawDataProviderTool.RpcROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.TGC_RawDataProviderTool ExtraOutputs []
-ToolSvc.TGC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.TGC_RawDataProviderTool ExtraInputs []
-ToolSvc.TGC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.TGC_RawDataProviderTool Decoder Muon::TGC_RodDecoderReadout/TgcROD_Decoder
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraOutputs []
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder EvtStore StoreGateSvc
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder ExtraInputs []
-ToolSvc.TGC_RawDataProviderTool.TgcROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDTCablingDbTool ExtraOutputs []
-ToolSvc.MDTCablingDbTool EvtStore StoreGateSvc
-ToolSvc.MDTCablingDbTool ExtraInputs []
-ToolSvc.MDTCablingDbTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDTCablingDbTool MezzanineFolders /MDT/CABLING/MEZZANINE_SCHEMA
-ToolSvc.MDTCablingDbTool MapFolders /MDT/CABLING/MAP_SCHEMA
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraOutputs []
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RT_InputFiles ['Muon_RT_default.data']
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TimeSlewingCorrection False
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool RtFolder /MDT/RTBLOB
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool MeanCorrectionVsR [-5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524]
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool defaultT0 40
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool ExtraInputs []
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool UseMLRt True
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool PropagationSpeedBeta 0.85
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool TubeFolder /MDT/T0BLOB
-ToolSvc.MuonCalib::MdtCalibDbCoolStrTool EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool ExtraOutputs []
-ToolSvc.MDT_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool ExtraInputs []
-ToolSvc.MDT_RawDataProviderTool Decoder MdtROD_Decoder/MdtROD_Decoder
-ToolSvc.MDT_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MDT_RawDataProviderTool CsmContainerCacheKey MdtCsmCache
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraOutputs []
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder EvtStore StoreGateSvc
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder ExtraInputs []
-ToolSvc.MDT_RawDataProviderTool.MdtROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.CSC_RawDataProviderTool ExtraOutputs []
-ToolSvc.CSC_RawDataProviderTool EvtStore StoreGateSvc
-ToolSvc.CSC_RawDataProviderTool CscContainerCacheKey CscCache
-ToolSvc.CSC_RawDataProviderTool ExtraInputs []
-ToolSvc.CSC_RawDataProviderTool Decoder Muon::CscROD_Decoder/CscROD_Decoder
-ToolSvc.CSC_RawDataProviderTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraOutputs []
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder EvtStore StoreGateSvc
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder ExtraInputs []
-ToolSvc.CSC_RawDataProviderTool.CscROD_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.RpcRdoToRpcPrepDataTool ExtraOutputs []
-ToolSvc.RpcRdoToRpcPrepDataTool EvtStore StoreGateSvc
-ToolSvc.RpcRdoToRpcPrepDataTool ExtraInputs []
-ToolSvc.RpcRdoToRpcPrepDataTool RdoDecoderTool Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder
-ToolSvc.RpcRdoToRpcPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraOutputs []
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder EvtStore StoreGateSvc
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder ExtraInputs []
-ToolSvc.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.TgcRdoToTgcPrepDataTool ExtraOutputs []
-ToolSvc.TgcRdoToTgcPrepDataTool prepDataKeys ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-ToolSvc.TgcRdoToTgcPrepDataTool EvtStore StoreGateSvc
-ToolSvc.TgcRdoToTgcPrepDataTool outputCoinKey ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
-ToolSvc.TgcRdoToTgcPrepDataTool ExtraInputs []
-ToolSvc.TgcRdoToTgcPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.MdtRdoToMdtPrepDataTool ExtraOutputs []
-ToolSvc.MdtRdoToMdtPrepDataTool EvtStore StoreGateSvc
-ToolSvc.MdtRdoToMdtPrepDataTool ExtraInputs []
-ToolSvc.MdtRdoToMdtPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool CscCalibTool CscCalibTool/CscCalibTool
-ToolSvc.CscRdoToCscPrepDataTool EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool CscRdoDecoderTool Muon::CscRDO_Decoder/CscRDO_Decoder
-ToolSvc.CscRdoToCscPrepDataTool ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder CscCalibTool CscCalibTool
-ToolSvc.CscRdoToCscPrepDataTool.CscRDO_Decoder DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraOutputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool EvtStore StoreGateSvc
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool ExtraInputs []
-ToolSvc.CscRdoToCscPrepDataTool.CscCalibTool DetStore StoreGateSvc/DetectorStore
-ToolSvc.CscThesholdClusterBuilderTool ExtraOutputs []
-ToolSvc.CscThesholdClusterBuilderTool split_fitter CscSplitClusterFitter/CscSplitClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool strip_fitter CalibCscStripFitter/CalibCscStripFitter
-ToolSvc.CscThesholdClusterBuilderTool cscCalibTool CscCalibTool/CscCalibTool
-ToolSvc.CscThesholdClusterBuilderTool default_fitter SimpleCscClusterFitter/SimpleCscClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool precision_fitter QratCscClusterFitter/QratCscClusterFitter
-ToolSvc.CscThesholdClusterBuilderTool EvtStore StoreGateSvc
-ToolSvc.CscThesholdClusterBuilderTool ExtraInputs []
-ToolSvc.CscThesholdClusterBuilderTool DetStore StoreGateSvc/DetectorStore
-EventSelector SharedMemoryTool 
-EventSelector SkipEventSequence []
-EventSelector CounterTool 
-EventSelector Input []
-EventSelector ByteStreamInputSvc ByteStreamInputSvc
-EventSelector.xAODMaker::EventInfoSelectorTool ExtraOutputs []
-EventSelector.xAODMaker::EventInfoSelectorTool EvtStore StoreGateSvc
-EventSelector.xAODMaker::EventInfoSelectorTool BeamCondSvc BeamCondSvc
-EventSelector.xAODMaker::EventInfoSelectorTool ExtraInputs []
-EventSelector.xAODMaker::EventInfoSelectorTool LuminosityTool LuminosityTool
-EventSelector.xAODMaker::EventInfoSelectorTool DetStore StoreGateSvc/DetectorStore
-ByteStreamInputSvc EventStore StoreGateSvc
-ByteStreamInputSvc FullFileName ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
-ByteStreamInputSvc AttributeListKeys []
-ByteStreamInputSvc MetaDataStore StoreGateSvc/InputMetaDataStore
-EventPersistencySvc CnvServices ['ByteStreamCnvSvc', 'AthenaPoolCnvSvc/AthenaPoolCnvSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'AthenaPoolCnvSvc']
-ByteStreamCnvSvc InitCnvs ['EventInfo', 'ROIB::RoIBResult', 'HLT::HLTResult']
-ByteStreamCnvSvc EventStore StoreGateSvc
-ByteStreamCnvSvc ROD2ROBmap []
-ByteStreamCnvSvc ByteStreamOutputSvcList []
-ByteStreamCnvSvc GetDetectorMask True
-ROBDataProviderSvc filterRobWithStatus []
-ROBDataProviderSvc filterSubDetWithStatus []
-ByteStreamAddressProviderSvc TypeNames ['TileCellIDC/TileCellIDC', 'MdtDigitContainer/MDT_DIGITS', 'RpcDigitContainer/RPC_DIGITS', 'TgcDigitContainer/TGC_DIGITS', 'CscDigitContainer/CSC_DIGITS', 'ROIB::RecRoIBResult/RecRoIBResult', 'MuCTPI_RIO/MUCTPI_RIO', 'CTP_RIO/CTP_RIO', 'LArRawChannelContainer/LArRawChannels', 'TileRawChannelContainer/TileRawChannelCnt', 'ROIB::RoIBResult/RoIBResult', 'MuCTPI_RDO/MUCTPI_RDO', 'HLT::HLTResult/HLTResult_L2', 'HLT::HLTResult/HLTResult_EF', 'CTP_RDO/CTP_RDO', 'L1TopoRDOCollection/L1TopoRDOCollection']
-ByteStreamAddressProviderSvc TopoProcModuleID [129, 145]
-ByteStreamAddressProviderSvc JetProcModuleID [172, 173]
-ByteStreamAddressProviderSvc CaloClusterProcModuleID [168, 169, 170, 171]
-MetaDataStore IncidentSvc IncidentSvc
-MetaDataStore ProxyProviderSvc ProxyProviderSvc
-InputMetaDataStore IncidentSvc IncidentSvc
-InputMetaDataStore ProxyProviderSvc ProxyProviderSvc
-MetaDataSvc MetaDataContainer MetaDataHdr
-MetaDataSvc CnvSvc AthenaPoolCnvSvc
-ProxyProviderSvc ProviderNames ['ByteStreamAddressProviderSvc', 'IOVDbSvc', 'MetaDataSvc', 'TagInfoMgr']
-GeoModelSvc SupportedGeometry 22
-GeoModelSvc AtlasVersion ATLAS-R2-2016-01-00-01
-GeoModelSvc.MuonDetectorTool ExtraOutputs []
-GeoModelSvc.MuonDetectorTool TheMuonAlignmentTool 
-GeoModelSvc.MuonDetectorTool EvtStore StoreGateSvc
-GeoModelSvc.MuonDetectorTool UseConditionDb 1
-GeoModelSvc.MuonDetectorTool ExtraInputs []
-GeoModelSvc.MuonDetectorTool UseIlinesFromGM 1
-GeoModelSvc.MuonDetectorTool SelectedStJff []
-GeoModelSvc.MuonDetectorTool DetStore StoreGateSvc/DetectorStore
-GeoModelSvc.MuonDetectorTool SelectedStations []
-GeoModelSvc.MuonDetectorTool SelectedStJzz []
-DetDescrCnvSvc IdDictFromRDB True
-DetDescrCnvSvc IdDictName IdDictParser/ATLAS_IDS.xml
-DetDescrCnvSvc DetectorNodes []
-DetDescrCnvSvc DetectorManagers []
-TagInfoMgr ExtraTagValuePairs ['AtlasRelease', 'Athena-22.0.1']
-RPCcablingServerSvc Atlas True
-RPCcablingServerSvc useMuonRPC_CablingSvc True
-RPCcablingServerSvc forcedUse True
-IOVDbSvc Folders ['/MDT/CABLING/MEZZANINE_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_ETA<db>COOLONL_RPC/CONDBR2</db>', '/MDT/RTBLOB<db>COOLOFL_MDT/CONDBR2</db>', '/MDT/T0BLOB<db>COOLOFL_MDT/CONDBR2</db>', '/CSC/STAT <key>CSC_STAT</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/NOISE <key>CSC_NOISE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/PED <key>CSC_PED</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/RMS <key>CSC_RMS</key> <db>COOLOFL_CSC/CONDBR2</db>', '/GLOBAL/BField/Maps <noover/><db>COOLONL_GLOBAL/CONDBR2</db>', '/CSC/T0PHASE <key>CSC_T0PHASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/TGC/CABLING/MAP_SCHEMA<db>COOLONL_TGC/CONDBR2</db>', '/EXT/DCS/MAGNETS/SENSORDATA<db>COOLOFL_DCS/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA_CORR<db>COOLONL_RPC/CONDBR2</db>', '/MDT/CABLING/MAP_SCHEMA<db>COOLONL_MDT/CONDBR2</db>', '/RPC/TRIGGER/CM_THR_PHI<db>COOLONL_RPC/CONDBR2</db>', '/CSC/PSLOPE <key>CSC_PSLOPE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/RPC/CABLING/MAP_SCHEMA<db>COOLONL_RPC/CONDBR2</db>', '/CSC/T0BASE <key>CSC_T0BASE</key> <db>COOLOFL_CSC/CONDBR2</db>', '/CSC/FTHOLD <key>CSC_FTHOLD</key> <db>COOLOFL_CSC/CONDBR2</db>']
-IOVDbSvc CacheAlign 3
-IOVDbSvc dbConnection sqlite://;schema=mycool.db;dbname=CONDBR2
-IOVDbSvc GlobalTag CONDBR2-BLKPA-2018-13
-IOVDbSvc FoldersToMetaData ['/GLOBAL/BField/Maps']
-IOVDbSvc DBInstance CONDBR2
-IOVDbSvc overrideTags []
-PoolSvc FrontierRefreshSchema []
-PoolSvc ReadCatalog ['apcfile:poolcond/PoolFileCatalog.xml', 'prfile:poolcond/PoolCat_oflcond.xml', 'apcfile:poolcond/PoolCat_oflcond.xml', 'prfile:poolcond/PoolCat_comcond.xml', 'apcfile:poolcond/PoolCat_comcond.xml']
-PoolSvc MaxFilesOpen 0
-DBReplicaSvc COOLSQLiteVetoPattern /DBRelease/
-MuonRPC_CablingSvc ConfFilePath MuonRPC_Cabling/
-MuonRPC_CablingSvc TheRpcTriggerDbTool RPCTriggerDbTool
-MuonRPC_CablingSvc ConfFileName LVL1confAtlas.data
-MuonRPC_CablingSvc FeetPadThresolds []
-MuonRPC_CablingSvc TheRpcCablingDbTool RPCCablingDbTool/RPCCablingDbTool
-MuonRPC_CablingSvc RPCTriggerRoadsfromCool True
-MuonRPC_CablingSvc CorrFileName LVL1confAtlas.corr
-MuonRPC_CablingSvc CosmicConfiguration True
-TGCcablingServerSvc Atlas True
-TGCcablingServerSvc useMuonTGC_CablingSvc True
-TGCcablingServerSvc forcedUse True
-AthenaPoolCnvSvc InputPoolAttributes []
-AthenaPoolCnvSvc PoolAttributes []
-AthenaPoolCnvSvc PrintInputAttrPerEvt []
-AthenaPoolCnvSvc InputStreamingTool 
-AthenaPoolCnvSvc OutputPoolFileAllocator []
-AthenaPoolCnvSvc MaxFileSizes []
-MuonMDT_CablingSvc DBTool MDTCablingDbTool/MDTCablingDbTool
-MuonMDT_CablingSvc TagInfoManager TagInfoMgr
-MuonMDT_CablingSvc ForcedUse True
-MuonMDT_CablingSvc UseOldCabling False
-AtlasFieldSvc UseDCS True
-MdtCalibrationDbSvc CreateSlewingFunctions False
-MdtCalibrationDbSvc DBTool MuonCalib::MdtCalibDbAsciiTool
-MdtCalibrationDbSvc CreateBFieldFunctions False
-MdtCalibrationDbSvc CreateWireSagFunctions False
-MdtCalibrationSvc DoTofCorrection True
-MdtCalibrationSvc MagFieldSvc AtlasFieldSvc
-MdtCalibrationSvc DoWireSagCorrection False
-MdtCalibrationSvc TimeWindowSetting 2
-MdtCalibrationSvc DoSlewingCorrection False
-MdtCalibrationSvc DoTemperatureCorrection True
-MuonCalib::CscCoolStrSvc ParSGKeys ['CSC_PED', 'CSC_NOISE', 'CSC_PSLOPE', 'CSC_STAT', 'CSC_RMS', 'CSC_FTHOLD', 'CSC_T0BASE', 'CSC_T0PHASE']
-MuonCalib::CscCoolStrSvc ParDefaults ['2048', '3.5', '0.189', '0', '2.56', '0', '0', '0']
-MuonCalib::CscCoolStrSvc ParDataTypes ['float', 'float', 'float', 'uint32_t', 'float', 'float', 'float', 'float']
-MuonCalib::CscCoolStrSvc ParFolders ['/CSC/PED', '/CSC/NOISE', '/CSC/PSLOPE', '/CSC/STAT', '/CSC/RMS', '/CSC/FTHOLD', '/CSC/T0BASE', '/CSC/T0PHASE']
-MuonCalib::CscCoolStrSvc ParCats ['CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'CHANNEL', 'ASM']
-MuonCalib::CscCoolStrSvc ParNames ['ped', 'noise', 'pslope', 'status', 'rms', 'f001', 't0base', 't0phase']
+/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7fe2e5219e90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7fe2e5219e10 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7fe2e3857290 = []  (default: [])
+|-ExtraOutputs               @0x7fe2e3857320 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7fe2e3e6e908 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7fe2e3857170 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7fe2e68cab00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7fe2e4141870 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7fe2e4009050 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DisableViewWarning                      = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e407df90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857368 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38571b8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7fe2e4141450 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e38573b0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7fe2e4141480 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7fe2e41414e0 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
+| \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fe2e406f290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding           @0x7fe2e68cab00 = True  (default: False)
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e406f210 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857440 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38574d0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e3857488 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fe2e40c0680 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7fe2e406f310 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                       @0x7fe2e6132f00 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7fe2e411d620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7fe2e3ce6ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7fe2e3ce6b10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7fe2e3ced3f8 = []  (default: [])
+| | |-ExtraOutputs           @0x7fe2e3ced290 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel            @  0x22561c0 = 2  (default: 0)
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey   @0x7fe2e4141480 = 'RpcCache'  (default: 'StoreGateSvc+')
+| | |-WriteOutRpcSectorLogic @0x7fe2e68cab20 = False  (default: True)
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7fe2e3ce6bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7fe2e3ce6c10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7fe2e3ced320 = []  (default: [])
+| | | |-ExtraOutputs        @0x7fe2e3ced2d8 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fe2e407d250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e407d1d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857758 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857830 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e38577a0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fe2e4fd18c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7fe2e4fd19b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7fe2e3d47150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fe2e3d47190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fe2e3dd1bd8 = []  (default: [])
+| | |-ExtraOutputs      @0x7fe2e3dd1a28 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fe2e3d47250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3d47290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e3dd1878 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e3dd19e0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fe2e4061490 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e4061410 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857878 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857908 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e38577e8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fe2e3ed2e50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7fe2e4141450 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7fe2e4fd1c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7fe2e3923210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7fe2e3923250 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fe2e38d0128 = []  (default: [])
+| | |-ExtraOutputs         @0x7fe2e38d0098 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x22561d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fe2e3923310 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3923350 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e38d0050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e393cfc8 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fe2e4056690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e4056610 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857998 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e38578c0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e38576c8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7fe2e3890150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7fe2e4141870 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7fe2e4fd1e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7fe2e38910d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7fe2e3891110 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7fe2e388d440 = []  (default: [])
+| | |-ExtraOutputs         @0x7fe2e388d758 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x22561d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fe2e38911d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e3891210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e388d560 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e388d518 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fe2e3fbcd20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7fe2e38c0b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e38c0ad0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857680 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857ab8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e38579e0 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e38c0bd0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7fe2e382dd10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7fe2e382dd90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7fe2e389b128 = []  (default: [])
+| | |-ExtraOutputs                       @0x7fe2e389b518 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7fe2e3d1e4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7fe2e382de10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e382de50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e389b638 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e389b5f0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fe2e383e050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7fe2e3819a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e38199d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857950 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857b00 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e3857b48 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7fe2e3819ad0 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7fe2e382df10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7fe2e382dfd0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7fe2e383da70 = []  (default: [])
+| | |-ExtraOutputs                            @0x7fe2e383da28 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7fe2e383d4d0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7fe2e383db00 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7fe2e614cb50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7fe2e38aca10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e38ac990 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857bd8 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857c68 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e3857c20 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e38aca90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7fe2e382dc10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7fe2e382dd50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7fe2e3846b48 = []  (default: [])
+| | |-ExtraOutputs            @0x7fe2e384a5f0 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7fe2e3f62380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7fe2e3891610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e3891f10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857d40 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857a28 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e3857cb0 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7fe2e68cab20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7fe2e3891690 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7fe2e61439b8 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7fe2e3838c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7fe2e382dc50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7fe2e383f090 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7fe2e3853a70 = []  (default: [])
+| | |-ExtraOutputs      @0x7fe2e3853878 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7fe2e383f3d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7fe2e383f290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7fe2e3853c68 = []  (default: [])
+| | | |-ExtraOutputs       @0x7fe2e3853cb0 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7fe2e383f4d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7fe2e383f410 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7fe2e383f110 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7fe2e3853b90 = []  (default: [])
+| | | |-ExtraOutputs      @0x7fe2e3853b48 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7fe2e386e850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7fe2e386e7d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7fe2e3857d88 = []  (default: [])
+| |-ExtraOutputs               @0x7fe2e3857dd0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7fe2e3857e18 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7fe2e37b61d0 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
-Thu Mar 14 11:38:54 GMT 2019
+Fri Mar 15 12:37:55 GMT 2019
 Preloading tcmalloc_minimal.so
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.22/2840e19] -- built on [2019-02-26T2109]
+Py:Athena            INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [iac_master_rpcrdo/63cc84e] -- built on [2019-03-15T1157]
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -2522,13 +2812,13 @@ Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode_Cache.pkl  ... 
-Py:ConfigurableDb    INFO Read module info for 5460 configurables from 5 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5461 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
-                                          running on ppevm02.ppe.gla.ac.uk on Thu Mar 14 11:39:07 2019
+                                          running on ppevm02.ppe.gla.ac.uk on Fri Mar 15 12:38:09 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -2536,7 +2826,7 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 3383 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3440 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
@@ -2556,7 +2846,7 @@ PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.x
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-26T2150/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-13T2154/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
 DBReplicaSvc         INFO Total of 1 servers found for host ppevm02.ppe.gla.ac.uk [ATLF ]
 DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
@@ -2582,11 +2872,11 @@ AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version Athena
 ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
 MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
 IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
-ClassIDSvc           INFO  getRegistryEntries: read 3291 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3314 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO  getRegistryEntries: read 4012 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4046 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO  getRegistryEntries: read 3031 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3110 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvcTool           INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
@@ -2839,7 +3129,7 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
-GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 44888Kb 	 Time = 0.96S
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.92S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
@@ -2897,7 +3187,7 @@ TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
 ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x13304100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x15d87600]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
 ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
@@ -2957,20 +3247,21 @@ ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
 ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_PED]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_NOISE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_STAT]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_RMS]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_T0BASE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x19b6fa00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1afb5400]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
 EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
 EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
 EventSelector        INFO reinitialization...
+ClassIDSvc           INFO  getRegistryEntries: read 1126 CLIDRegistry entries for module ALL
 ToolSvc.Luminos...   INFO LuminosityTool::initialize() registering 
 ToolSvc.Luminos...   INFO LumiFolderName is empty, skipping
 ToolSvc.Luminos...   INFO OnlineLumiCalibrationTool.empty() is TRUE, skipping...
@@ -2984,7 +3275,6 @@ EventSelector        INFO reinitialization...
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
 ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
-ClassIDSvc           INFO  getRegistryEntries: read 1159 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
 CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
@@ -4380,34 +4670,34 @@ AtlasFieldSvc        INFO finalize() successful
 RegSelSvc            INFO Finalizing RegSelSvc
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/25 ((     0.29 ))s
-IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/271 ((     0.66 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216598 ((     0.80 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/300 ((     0.43 ))s
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.26 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.63 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.82 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.43 ))s
 IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/444470 ((     0.68 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/58804 ((     0.43 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562972 ((     1.07 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8101322 ((     1.02 ))s
-IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/7408 ((     0.56 ))s
-IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/331329 ((     0.71 ))s
-IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/359591 ((     2.08 ))s
-IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422629 ((     0.59 ))s
-IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/363009 ((     0.50 ))s
-IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/422831 ((     0.54 ))s
-IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/236289 ((     0.48 ))s
-IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322855 ((     1.12 ))s
-IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3234 ((     0.37 ))s
-IOVDbSvc             INFO  bytes in ((     12.33 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.68 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.56 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     1.04 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.96 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.67 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.71 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.54 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.58 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.49 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.61 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.57 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.53 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.44 ))s
+IOVDbSvc             INFO  bytes in ((     10.55 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.23 ))s
-IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.20 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.25 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.25 ))s
 IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     6.39 ))s
-IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.66 ))s
-IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.56 ))s
-IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.29 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.48 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.63 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.67 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.26 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -4432,7 +4722,7 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
 cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
-ChronoStatSvc        INFO Time User   : Tot= 10.7  [s]                                             #=  1
+ChronoStatSvc        INFO Time User   : Tot= 10.5  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
-- 
GitLab


From dd4bb5f714807a123db74a4ba34a142561c77163 Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 11 Mar 2019 10:27:22 +0000
Subject: [PATCH 045/163] Merge branch '21.0-FastCaloSimDev' into '21.0'

21.0-FastCaloSim: Removing LoadFCalGeometryFromFiles function

See merge request atlas/athena!21722

(cherry picked from commit 0553871027d71c1522e6827f9bd78c8ddd224ae0)

301a82c4 Removing LoadFCalGeometryFromFiles function
---
 .../CaloGeometry.h                            |  3 +-
 .../src/CaloGeometry.cxx                      | 75 -------------------
 2 files changed, 1 insertion(+), 77 deletions(-)

diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
index ffad36c45c07..f7b161a9bfef 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
@@ -66,10 +66,9 @@ class CaloGeometry : virtual public ICaloGeometry {
 
     TGraph*  DrawGeoSampleForPhi0(int sample, int calocol, bool print=false);
     TCanvas* DrawGeoForPhi0();
+    
     FCAL_ChannelMap* GetFCAL_ChannelMap(){return &m_FCal_ChannelMap;}
     void SetFCal_ChannelMap(const FCAL_ChannelMap* fcal_ChannnelMap){m_FCal_ChannelMap=*fcal_ChannnelMap;}
-    
-    virtual bool LoadFCalGeometryFromFiles(TString filename1,TString filename2,TString filename3); // Initialize m_FCal_ChannelMap
     void calculateFCalRminRmax();
     virtual bool checkFCalGeometryConsistency();
     virtual void PrintMapInfo(int i, int j);
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
index 09231e67a9c6..a62e63d45b23 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
@@ -899,81 +899,6 @@ std::string CaloGeometry::SamplingName(int sample)
   return CaloSampling::getSamplingName(sample);
 }
 
-bool CaloGeometry::LoadFCalGeometryFromFiles(TString filename1,TString filename2,TString filename3){
-
-  vector<ifstream*> electrodes(3);
-
-  electrodes[0]=new ifstream(filename1);
-  electrodes[1]=new ifstream(filename2);
-  electrodes[2]=new ifstream(filename3);
-
-
-  int    thisTubeId;
-  int    thisTubeI;
-  int    thisTubeJ;
-  //int    thisTubeID;
-  //int    thisTubeMod;
-  double thisTubeX;
-  double thisTubeY;
-  TString tubeName;
-
-  //int second_column;
-  string seventh_column;
-  string eight_column;
-  int ninth_column;
-
-
-
-
-
-  int i;
-  for(int imodule=1;imodule<=3;imodule++){
-
-    i=0;
-    while(1){
-
-      (*electrodes[imodule-1]) >> tubeName;
-      if(electrodes[imodule-1]->eof())break;
-      (*electrodes[imodule-1]) >> thisTubeId; // ?????
-      (*electrodes[imodule-1]) >> thisTubeI;
-      (*electrodes[imodule-1]) >> thisTubeJ;
-      (*electrodes[imodule-1]) >> thisTubeX;
-      (*electrodes[imodule-1]) >> thisTubeY;
-      (*electrodes[imodule-1]) >> seventh_column;
-      (*electrodes[imodule-1]) >> eight_column;
-      (*electrodes[imodule-1]) >> ninth_column;
-
-      tubeName.ReplaceAll("'","");
-      string tubeNamestring=tubeName.Data();
-
-      std::istringstream tileStream1(std::string(tubeNamestring,1,1));
-      std::istringstream tileStream2(std::string(tubeNamestring,3,2));
-      std::istringstream tileStream3(std::string(tubeNamestring,6,3));
-      int a1=0,a2=0,a3=0;
-      if (tileStream1) tileStream1 >> a1;
-      if (tileStream2) tileStream2 >> a2;
-      if (tileStream3) tileStream3 >> a3;
-
-      stringstream s;
-
-
-      m_FCal_ChannelMap.add_tube(tubeNamestring, imodule, thisTubeId, thisTubeI,thisTubeJ, thisTubeX, thisTubeY,seventh_column);
-      
-      i++;
-    }
-  }
-
-
-  m_FCal_ChannelMap.finish(); // Creates maps
-  
-  for(int imodule=1;imodule<=3;imodule++) delete electrodes[imodule-1];
-  electrodes.clear();
-
-  this->calculateFCalRminRmax();
-  return this->checkFCalGeometryConsistency();
-
-}
-
 void  CaloGeometry::calculateFCalRminRmax(){
    
    m_FCal_rmin.resize(3,FLT_MAX);
-- 
GitLab


From 413227bb4a10c6a10e5130efd8153594d84a29eb Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 11 Mar 2019 10:28:47 +0000
Subject: [PATCH 046/163] Merge branch 'QballSimFix2_ALTMCPROD-6719_21.0' into
 '21.0'

Patch preInclude.Qball.py to work-around missing specialConfiguration metadata

See merge request atlas/athena!21660

(cherry picked from commit 29c9a5d790b0ff49ab4441ec8892addb23da9ecc)

ddad4098 Patch preInclude.Qball.py to work-around missing specialConfiguration metadata
---
 .../share/specialConfig/preInclude.Qball.py                | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
index 5b686b1ad2cf..a6123bd0a938 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
@@ -37,8 +37,6 @@ def load_files_for_qball_scenario(MASS, CHARGE):
     del BLINE1
     del BLINE2
 
-assert "MASS" in simdict
-assert "CHARGE" in simdict
 doG4SimConfig = True
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 import PyUtils.AthFile as af
@@ -52,13 +50,16 @@ try:
     else:
         from G4AtlasApps.SimFlags import simFlags
         if not "InteractingPDGCodes" in simFlags.specialConfiguration.get_Value():
-            CODE=10000000+int(float(simdict["CHARGE"])*100)
+            assert "CHARGE" in simFlags.specialConfiguration.get_Value()
+            CODE=10000000+int(float(simFlags.specialConfiguration.get_Value()["CHARGE"])*100)
             simFlags.specialConfiguration.get_Value()['InteractingPDGCodes'] = str([CODE,-1*CODE])
         simdict = simFlags.specialConfiguration.get_Value()
 except:
     from G4AtlasApps.SimFlags import simFlags
     simdict = simFlags.specialConfiguration.get_Value()
 
+assert "MASS" in simdict
+assert "CHARGE" in simdict
 load_files_for_qball_scenario(simdict["MASS"], simdict["CHARGE"])
 
 if doG4SimConfig:
-- 
GitLab


From c9784a45dd3e1cc3ba4635e36bc7c127e410d9df Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Wed, 13 Mar 2019 15:42:33 +0000
Subject: [PATCH 047/163] Merge branch '21.0-fix-dcsc' into '21.0'

Fix failure on invalid LumiAccounting data (affected 301915 and 301918)

See merge request atlas/athena!21859

(cherry picked from commit 17869351050366564c42cf6547ba3f255b45053e)

ac49dc79 Fix failure on invalid LumiAccounting data (affected 301915 and 301918)
---
 .../python/subdetectors/global_system.py               | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/DataQuality/DCSCalculator2/python/subdetectors/global_system.py b/DataQuality/DCSCalculator2/python/subdetectors/global_system.py
index d63ec4023b96..7d4b02bf0e41 100644
--- a/DataQuality/DCSCalculator2/python/subdetectors/global_system.py
+++ b/DataQuality/DCSCalculator2/python/subdetectors/global_system.py
@@ -48,10 +48,14 @@ class TDAQ_Busy(DCSC_Defect_Global_Variable):
 	counter=0
 
         for since, until, (state,) in events:
-            if state.Run == 0: continue
+            if state.Run == 0 or state.Run is None: continue
 	    #print state
             if state is not None:
-                deadfrac = 1-state.LiveFraction
+                if state.LiveFraction is None:
+                    deadfrac=1
+                    print 'WARNING: LiveFraction is "None" for', state.Run, state.LumiBlock 
+                else:
+                    deadfrac = 1-state.LiveFraction
                 if deadfrac < self.deadfraction_threshold:
                     continue
                 yield DefectIOV(RunLumi(state.Run, state.LumiBlock), 
@@ -65,7 +69,7 @@ class TDAQ_Busy(DCSC_Defect_Global_Variable):
 	#print counter_max
 	events = process_iovs(iovs)
         for since, until, (state,) in events:
-	    if state is not None:
+	    if state is not None and state.Run is not None:
                 deadfrac = 1-state.LiveFraction
                 if deadfrac < self.deadfraction_threshold:
                     continue
-- 
GitLab


From 0652e31a82ffd78d4c274ca4ec9fead42ce0bd4c Mon Sep 17 00:00:00 2001
From: Nils Erik Krumnack <nils.erik.krumnack@cern.ch>
Date: Mon, 11 Mar 2019 21:38:56 +0000
Subject: [PATCH 048/163] Merge branch '21.2-directIO-art-updating-daod-turls'
 into '21.2'

DirectIOART: Renamed TURLs for xAODChecker tests in 21.2/AnalysisBase

See merge request atlas/athena!21781

(cherry picked from commit f6db1174c1862c1c86d121bf8c2a875e6c3a2a15)

c31cc5ce Renamed TURLs for xAODChecker tests in 21.2/AnalysisBase
---
 Tools/DirectIOART/generateARTtests.py                       | 6 +++---
 .../test/test_directioart_analysisbase_xaodchecker_davs.sh  | 2 +-
 .../test/test_directioart_analysisbase_xaodchecker_https.sh | 2 +-
 .../test/test_directioart_analysisbase_xaodchecker_root.sh  | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Tools/DirectIOART/generateARTtests.py b/Tools/DirectIOART/generateARTtests.py
index d55aef995ef6..3953108018ce 100755
--- a/Tools/DirectIOART/generateARTtests.py
+++ b/Tools/DirectIOART/generateARTtests.py
@@ -9,9 +9,9 @@ HAMMERCLOUD_FILE = "mc15_13TeV.423202.Pythia8B_A14_CTEQ6L1_Jpsie3e13.merge.AOD.e
 PROJECTS = ["AthAnalysis", "AthDerivation", "AthSimulation", "Athena", "AnalysisBase"]
 
 XAODCHECKER_TURLS = {
-  "ROOT"  : "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1", # LRZ-LMU,
-  "DAVS"  : "davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",   # LRZ-LMU
-  "HTTPS" : "https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",  # LRZ-LMU
+  "ROOT"  : "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1", # LRZ-LMU,
+  "DAVS"  : "davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",   # LRZ-LMU
+  "HTTPS" : "https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",  # LRZ-LMU
 }
 
 RECO_TF_TURLS = {
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh
index c4306e3f5217..b5d39409bad9 100755
--- a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh
@@ -6,7 +6,7 @@
 
 set -e
 
-xAODChecker davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+xAODChecker davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
 
 echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_DAVS"
 
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh
index 73877cbec82d..29c73dcceaeb 100755
--- a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh
@@ -6,7 +6,7 @@
 
 set -e
 
-xAODChecker https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+xAODChecker https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
 
 echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_HTTPS"
 
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh
index 1f34aa499793..abea51cc1486 100755
--- a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh
@@ -6,7 +6,7 @@
 
 set -e
 
-xAODChecker root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+xAODChecker root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlaslocalgroupdisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
 
 echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_ROOT"
 
-- 
GitLab


From 12fb1599d3e297a11a86056221964049a63614ef Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Fri, 15 Mar 2019 11:59:28 +0000
Subject: [PATCH 049/163] Merge branch 'NSWMMFastDigi0313' into '21.3'

Apply MMSimHit in MM fast digitization (ATLASSIM-3755)

See merge request atlas/athena!21904

(cherry picked from commit 84f662910dd5a3939a27b16204f6de514f9e62c2)

d7793694 Apply MMSimHit in MM fast digitization.
b43bf604 Add MMSimHit results in the output.
3a8349ad Merge remote-tracking branch 'upstream/21.3' into NSWMMFastDigi0313
---
 .../src/MM_FastDigitizer.cxx                  | 41 ++++---------------
 .../src/MM_FastDigitizer.h                    |  8 +---
 Simulation/Digitization/python/DigiOutput.py  |  1 +
 3 files changed, 11 insertions(+), 39 deletions(-)

diff --git a/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.cxx b/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.cxx
index fcc59733e263..811f2985b31b 100644
--- a/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.cxx
+++ b/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //Gaudi - Core
@@ -15,7 +15,7 @@
 
 #include "MM_FastDigitizer.h"
 #include "MuonSimEvent/MM_SimIdToOfflineId.h"
-#include "MuonSimEvent/GenericMuonSimHitCollection.h"
+#include "MuonSimEvent/MMSimHitCollection.h"
 #include "MuonSimEvent/MicromegasHitIdHelper.h"
 
 #include "MuonReadoutGeometry/MuonDetectorManager.h"
@@ -44,9 +44,9 @@ using namespace Muon;
 /*******************************************************************************/ 
   MM_FastDigitizer::MM_FastDigitizer(const std::string& name, ISvcLocator* pSvcLocator)
 : AthAlgorithm(name, pSvcLocator) , m_activeStore(NULL) , m_detManager(NULL) , m_idHelper(NULL)
-  , m_file(NULL) , m_ntuple(NULL) , m_slx(0.) , m_sly(0.) , m_slz(0.) , m_dlx(0.) , m_dly(0.) , m_dlz(0.)
+  , m_file(NULL) , m_ntuple(NULL) , m_dlx(0.) , m_dly(0.) , m_dlz(0.)
   , m_sulx(0.) , m_suly(0.) , m_tsulx(0.) , m_tsuly(0.) , m_tsulz(0.) , m_stsulx(0.) , m_stsuly(0.) , m_stsulz(0.)
-  , m_ang(0.) , m_shift(0.) , m_resx(0.) , m_resy(0.) , m_resz(0.) , m_suresx(0.) , m_suresy(0.) , m_err(0.) , m_res(0.)
+  , m_ang(0.) , m_shift(0.) , m_suresx(0.) , m_suresy(0.) , m_err(0.) , m_res(0.)
   , m_pull(0.) , m_is(0) , m_seta(0) , m_sphi(0) , m_sml(0) , m_sl(0) , m_ss(0) , m_ieta(0) , m_iphi(0) , m_iml(0) , m_il(0)
   , m_ich(0) , m_istr(0) , m_exitcode(0) , m_mode(0) , m_pdg(0) , m_trkid(0) , m_gpx(0.) , m_gpy(0.) , m_gpz(0.)
   , m_gpr(0.) , m_gpp(0.) , m_dgpx(0.) , m_dgpy(0.) , m_dgpz(0.), m_dgpr(0.) , m_dgpp(0.) , m_tofCorrection(0.)
@@ -131,9 +131,6 @@ StatusCode MM_FastDigitizer::initialize() {
 
   m_file = new TFile("MM_plots.root","RECREATE");
   m_ntuple = new TTree("a","a");
-  m_ntuple->Branch("slx",&m_slx);
-  m_ntuple->Branch("sly",&m_sly);
-  m_ntuple->Branch("slz",&m_slz);
   m_ntuple->Branch("dlx",&m_dlx);
   m_ntuple->Branch("dly",&m_dly);
   m_ntuple->Branch("dlz",&m_dlz);
@@ -147,11 +144,8 @@ StatusCode MM_FastDigitizer::initialize() {
   m_ntuple->Branch("stsulz",&m_stsulz);
   m_ntuple->Branch("ang",&m_ang);
   m_ntuple->Branch("shift",&m_shift);
-  m_ntuple->Branch("resx",&m_resx);
-  m_ntuple->Branch("resy",&m_resy);
   m_ntuple->Branch("suresx",&m_suresx);
   m_ntuple->Branch("suresy",&m_suresy);
-  m_ntuple->Branch("resz",&m_resz);
   m_ntuple->Branch("err",&m_err);
   m_ntuple->Branch("res",&m_res);
   m_ntuple->Branch("pull",&m_pull);
@@ -214,7 +208,7 @@ StatusCode MM_FastDigitizer::execute() {
   // as the MMPrepDataContainer only allows const accesss, need a local vector as well.
   std::vector<MMPrepDataCollection*> localMMVec(m_idHelper->module_hash_max());
 
-  const DataHandle< GenericMuonSimHitCollection > collGMSH;
+  const DataHandle< MMSimHitCollection > collGMSH;
   if ( evtStore()->retrieve( collGMSH,m_inputObjectName ).isFailure()) {
     ATH_MSG_WARNING("No MM hits found in SG");
     return StatusCode::FAILURE;
@@ -228,26 +222,17 @@ StatusCode MM_FastDigitizer::execute() {
   std::map<Identifier,int> hitsPerChannel;
   int nhits = 0;
 
-  GenericMuonSimHitCollection::const_iterator iterMM;
-
-  const GenericMuonSimHit* previousHit = 0;
+  MMSimHitCollection::const_iterator iterMM;
 
   for (iterMM=collGMSH->begin();iterMM!=collGMSH->end();++iterMM) {
-    const GenericMuonSimHit& hit = *iterMM;
+    const MMSimHit& hit = *iterMM;
 
     // SimHits without energy loss are not recorded. 
     // not needed because of already done in sensitive detector
     // https://svnweb.cern.ch/trac/atlasoff/browser/MuonSpectrometer/MuonG4/MuonG4SD/trunk/src/MicromegasSensitiveDetector.cxx?rev=542333#L65
     // if(hit.depositEnergy()==0.) continue;
 
-    if( previousHit && abs(hit.particleEncoding())==13 && abs(previousHit->particleEncoding())==13 ) {
-      Amg::Vector3D diff = previousHit->localPosition() - hit.localPrePosition();
-      ATH_MSG_VERBOSE("second hit from a muon: prev " <<  previousHit->localPosition() << " current " << hit.localPrePosition() 
-		      << " diff " << diff );
-      if( diff.mag() < 0.1 ) continue;
-    }
-
-    m_globalHitTime = hit.globalpreTime();
+    m_globalHitTime = hit.globalTime();
     m_tofCorrection = hit.globalPosition().mag()/CLHEP::c_light;
     m_bunchTime = m_globalHitTime - m_tofCorrection;
     const float stripPropagationTime = 0.;
@@ -265,7 +250,7 @@ StatusCode MM_FastDigitizer::execute() {
     ATH_MSG_VERBOSE("MM hit: r " << hit.globalPosition().perp() << " z " << hit.globalPosition().z() << " mclink " << hit.particleLink() );
 
     //  convert simHit id to offline layer id; make sanity checks; retrieve the associated detector element.
-    int simId = hit.GenericId();
+    int simId = hit.MMId();
     Identifier layid = simToOffline.convert(simId);
 
     // sanity checks
@@ -388,9 +373,6 @@ StatusCode MM_FastDigitizer::execute() {
 
     std::string stName = m_idHelper->stationNameString(m_idHelper->stationName(layid));
     int isSmall = stName[2] == 'S';
-    m_slx = hit.localPosition().x();
-    m_sly = hit.localPosition().y();
-    m_slz = hit.localPosition().z();
     m_dlx = lpos.x();
     m_dly = lpos.y();
     m_sulx = posOnSurf.x();
@@ -403,9 +385,6 @@ StatusCode MM_FastDigitizer::execute() {
     m_stsulz = hitAfterTimeShiftOnSurface.z();
     m_ang = inAngle_XZ;
     m_shift  = shiftTimeOffset;
-    m_resx = hit.localPosition().x() - lpos.x();
-    m_resy = hit.localPosition().y() - lpos.y();
-    m_resz = hit.localPosition().z() - lpos.z();
     m_suresx = posOnSurf.x()-hitOnSurface.x();
     m_suresy = posOnSurf.y()-hitOnSurface.y();
     m_err  = -99999.; 
@@ -506,7 +485,6 @@ StatusCode MM_FastDigitizer::execute() {
     ATH_MSG_VERBOSE(" Calculated truth hitOnSurfaceGlobal: r " << hitOnSurfaceGlobal.perp() << " phi " << hitOnSurfaceGlobal.phi() << " z " << hitOnSurfaceGlobal.z());
     ATH_MSG_VERBOSE(" detEl: r " << repos.perp() << " phi " << repos.phi() << " z " << repos.z());
     ATH_MSG_VERBOSE(" Surface center: r " << surf.center().perp() << " phi " << surf.center().phi() << " z " << surf.center().z());
-    ATH_MSG_VERBOSE("Local hit in Det Element Frame: x " << hit.localPosition().x() << " y " << hit.localPosition().y() << " z " << hit.localPosition().z());
     ATH_MSG_DEBUG(" hit:  " << m_idHelperTool->toString(id) << " hitx " << posOnSurf.x() << " hitOnSurface.x() " << hitOnSurface.x() << " residual " << posOnSurf.x() - hitOnSurface.x()
 		  << " pull " << (posOnSurf.x() - hitOnSurface.x())/resolution );
     Amg::Vector3D CurrentHitInDriftGap = slpos;
@@ -592,7 +570,6 @@ StatusCode MM_FastDigitizer::execute() {
     m_ntuple->Fill();
     // OLD CODE ENDS HERE
 
-    previousHit = &hit;
   } 
 
   if( msgLvl(MSG::DEBUG) ){
diff --git a/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.h b/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.h
index d75c16fad84b..59801a2f9e5e 100644
--- a/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.h
+++ b/MuonSpectrometer/MuonDigitization/MuonFastDigitization/src/MM_FastDigitizer.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef MUONDIGITIZATION_MM_FASTDIGITIZER_H
@@ -62,9 +62,6 @@ class MM_FastDigitizer : public AthAlgorithm {
   
   TFile* m_file;
   TTree* m_ntuple;
-  float  m_slx; // local position simhit in G4
-  float  m_sly;
-  float  m_slz;
   float  m_dlx;  //  local position simhit in GeoModel frame
   float  m_dly;
   float  m_dlz;
@@ -78,9 +75,6 @@ class MM_FastDigitizer : public AthAlgorithm {
   float  m_stsulz;
   float  m_ang; // local angel
   float  m_shift; // m_shift due to bunch offset 
-  float  m_resx; // residuals in local G4 - GeoModel
-  float  m_resy;
-  float  m_resz;
   float  m_suresx; // residuals g4 - RE stripPosition in tracking frame
   float  m_suresy;
   float  m_err;    // error
diff --git a/Simulation/Digitization/python/DigiOutput.py b/Simulation/Digitization/python/DigiOutput.py
index 5c5f562832d4..0b4f1521e7f7 100644
--- a/Simulation/Digitization/python/DigiOutput.py
+++ b/Simulation/Digitization/python/DigiOutput.py
@@ -175,6 +175,7 @@ def getStreamRDO_ItemList(log):
             StreamRDO_ItemList+=["Muon::MM_RawDataContainer#*"]
             # the sensitive detector must not be removed w/o checking with the atlas-muon-nsw-sim-dev list
             StreamRDO_ItemList+=["GenericMuonSimHitCollection#MicromegasSensitiveDetector"]
+            StreamRDO_ItemList+=["MMSimHitCollection#MicromegasSensitiveDetector"]
     # LVL1 Emulation Output
     if DetFlags.simulateLVL1.LAr_on():
         if DetFlags.writeRDOPool.LAr_on():
-- 
GitLab


From 667e93c08e804b81625b70c699f8910e3d82e364 Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Sun, 10 Mar 2019 22:10:04 +0000
Subject: [PATCH 050/163] Merge branch 'TriggerTest-CI-ref-path' into '21.3'

Fix branch name determination in TriggerTest post-exec

See merge request atlas/athena!21757

(cherry picked from commit b86236bb57723473dbfae41dea2e8920850a6b73)

39f7703f fix branch name determination in TriggerTest post-exec
---
 .../TriggerTest/test/exec_art_triggertest_post.sh     | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/Trigger/TrigValidation/TriggerTest/test/exec_art_triggertest_post.sh b/Trigger/TrigValidation/TriggerTest/test/exec_art_triggertest_post.sh
index 85a0d3c6bf34..5a2a2b76de5e 100755
--- a/Trigger/TrigValidation/TriggerTest/test/exec_art_triggertest_post.sh
+++ b/Trigger/TrigValidation/TriggerTest/test/exec_art_triggertest_post.sh
@@ -2,6 +2,15 @@
 
 echo  $(date "+%FT%H:%M %Z")"     Execute TriggerTest post processing for test ${NAME}"
 
+### Find the branch name
+if [ -n "${AtlasBuildBranch}" ]; then
+  export BRANCH=${AtlasBuildBranch} # available after asetup
+elif [ -n "${gitlabTargetBranch}" ]; then
+  export BRANCH=${gitlabTargetBranch} # available in CI
+else
+  echo "WARNING Cannot determine the branch name, both variables AtlasBuildBranch and gitlabTargetBranch are empty"
+fi
+
 ### DEFAULTS
 
 if [ -z ${JOB_LOG} ]; then
@@ -13,7 +22,7 @@ if [ -z ${TEST} ]; then
 fi
 
 if [ -z ${REF_FOLDER} ]; then
-  export REF_FOLDER="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/${TEST}/ref/${AtlasBuildBranch}/test_${NAME}"
+  export REF_FOLDER="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/${TEST}/ref/${BRANCH}/test_${NAME}"
 fi
 
 ###
-- 
GitLab


From 5255f7de5c1469df30af505a5ae24550c4769201 Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Fri, 15 Mar 2019 16:12:02 +0100
Subject: [PATCH 051/163] remove ringer dists in E/G dist tool and substitute
 all 1e3 to GeV Gaudi unit

---
 .../Root/TrigEgammaDistTool.cxx               | 50 -------------------
 .../Root/TrigEgammaEventSelection.cxx         | 36 +++++++------
 .../Root/TrigEgammaNavBaseTool.cxx            |  4 +-
 .../Root/TrigEgammaNavTPBaseTool.cxx          |  9 ++--
 .../TrigEgammaDistTool.h                      |  1 -
 5 files changed, 23 insertions(+), 77 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
index 93b1274d32d7..93525c633b68 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
@@ -151,17 +151,6 @@ StatusCode TrigEgammaDistTool::toolExecute(const std::string basePath,TrigInfo i
             }
 
 
-            const auto vec_l2rnn = fc.get<xAOD::TrigRNNOutput>("",TrigDefs::alsoDeactivateTEs);
-            for(const auto feat : vec_l2rnn){
-                if(feat.te()==nullptr) continue;
-                const auto* obj = getFeature<xAOD::TrigRNNOutput>(feat.te());
-                // Only consider passing objects
-                if(!obj) continue;   
-                //cd(dir+"HLT");
-                //if(ancestorPassed<xAOD::TrigRNNOutput>(feat.te()))
-                //  hist1("rejection")->Fill("L2Calo",1);
-                fillRnnDistribution(dir+"L2Calo",obj);// Fill HLT Rnn distribution output
-            }
 
             const auto vec_clus = fc.get<xAOD::CaloClusterContainer>("TrigEFCaloCalibFex",TrigDefs::alsoDeactivateTEs);
             for(const auto feat : vec_clus){
@@ -332,45 +321,6 @@ void TrigEgammaDistTool::fillRingerShapes(const std::string dir, const xAOD::Tri
     }
 }
 
-void TrigEgammaDistTool::fillRnnDistribution(const std::string dir, const xAOD::TrigRNNOutput *rnn){
-    // ringer threshold grid for mc15c, 2016 and 2017       
-    float ringer_thres_et_bins[6]={15.,20.,30.,40.,50.,50000.};
-    float ringer_thres_eta_bins[6]={0.,0.8,1.37,1.54,2.37,2.5};
-
-    if(!rnn)  ATH_MSG_DEBUG("Online pointer fails");
-    else{
-      if(rnn->rnnDecision().empty() || rnn->rnnDecision().size()!=3){
-        ATH_MSG_DEBUG("Invalid RNN Decision. skip object...");
-        return;
-      }
-
-      auto emCluster=rnn->ringer()->emCluster();
-      float eta=std::abs(emCluster->eta());
-      float et=emCluster->et()*1e-3;
-      float output=rnn->rnnDecision()[2];
-      float avgmu=rnn->rnnDecision()[0];
-
-      cd(dir);
-      hist1("discriminant")->Fill(output);
-      hist2("discriminantVsMu")->Fill(output,avgmu);
-      cd(dir+"/discriminant_binned");
-      for (unsigned etBinIdx=0; etBinIdx<6-1; ++etBinIdx){
-        for (unsigned etaBinIdx=0; etaBinIdx<6-1; ++etaBinIdx){
-          if( ( et < ringer_thres_et_bins[etBinIdx]  && ringer_thres_et_bins[etBinIdx+1] >= et)
-           && ( eta < ringer_thres_eta_bins[etaBinIdx]  && ringer_thres_eta_bins[etaBinIdx+1] >= eta)){
-            std::stringstream ss1,ss2;
-            ss1 << "discriminant_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
-            ss2 << "discriminantVsMu_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
-            hist1(ss1.str())->Fill(output);
-            hist2(ss2.str())->Fill(output,avgmu);
-           }
-        }
-      }
-      ATH_MSG_DEBUG("L2 Calo distributions.");
-    }
-}
-
-
 
 void TrigEgammaDistTool::fillShowerShapes(const std::string dir,const xAOD::Egamma *eg){
     cd(dir);
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
index 86b0c5af4c42..d85e8c7f90c4 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
@@ -15,7 +15,7 @@
  **********************************************************************/
 
 #include "TrigEgammaAnalysisTools/TrigEgammaEventSelection.h"
-
+#include "GaudiKernel/SystemOfUnits.h"
 using namespace std;
 
 TrigEgammaEventSelection::TrigEgammaEventSelection( const std::string& myname ): 
@@ -238,7 +238,6 @@ bool TrigEgammaEventSelection::EventSelectionFakes(){
 
   
   ATH_MSG_INFO("In EventSelectonFakes...");
-  double GeV = 1000.;
 
   for(const auto& elTag : *m_offElectrons){ 
 
@@ -250,7 +249,7 @@ bool TrigEgammaEventSelection::EventSelectionFakes(){
     if(!elTag->trackParticle()) continue;
 
     // Default is 4 GeV
-    if( !(elTag->e()/cosh(elTag->trackParticle()->eta())  > m_probeMinEt*GeV) ) continue;
+    if( !(elTag->e()/cosh(elTag->trackParticle()->eta())  > m_probeMinEt*Gaudi::Units::GeV) ) continue;
     
     //fiducial detector acceptance region
     float absEta = fabs(elTag->caloCluster()->etaBE(2));
@@ -270,7 +269,7 @@ bool TrigEgammaEventSelection::EventSelectionFakes(){
       if(!elProbe->trackParticle()) continue;
       
       // Must be higher than 4 GeV
-      if( (getEt(elProbe)) < 4*GeV)  continue;
+      if( (getEt(elProbe)) < 4*Gaudi::Units::GeV)  continue;
 
       if(!TrigEgammaNavTPBaseTool::ApplyElectronPid(elProbe,"LHMedium")) continue;
 
@@ -504,38 +503,37 @@ bool TrigEgammaEventSelection::fillTrigCaloRings( const HLT::TriggerElement *fea
 
 bool TrigEgammaEventSelection::ApplyFireTriggers( const xAOD::Electron *el){
 
-  float GeV = 1000.0;
   float et = getEt(el);
 
   std::string trigger="";
   
-  if(et < 5*GeV){
+  if(et < 5*Gaudi::Units::GeV){
     return false;
-  }else if(et >= 5*GeV && et < 10*GeV){
+  }else if(et >= 5*Gaudi::Units::GeV && et < 10*Gaudi::Units::GeV){
     trigger = "HLT_e5_etcut";
-  }else if(et >= 10*GeV && et < 15*GeV){
+  }else if(et >= 10*Gaudi::Units::GeV && et < 15*Gaudi::Units::GeV){
     trigger = "HLT_e10_etcut_L1EM7";
-  }else if(et >= 15*GeV && et < 20*GeV){
+  }else if(et >= 15*Gaudi::Units::GeV && et < 20*Gaudi::Units::GeV){
     trigger = "HLT_e15_etcut_L1EM7";
-  }else if(et >= 20*GeV && et < 25*GeV){
+  }else if(et >= 20*Gaudi::Units::GeV && et < 25*Gaudi::Units::GeV){
     trigger = "HLT_e20_etcut_L1EM12";
-  }else if(et >= 25*GeV && et < 30*GeV){
+  }else if(et >= 25*Gaudi::Units::GeV && et < 30*Gaudi::Units::GeV){
     trigger = "HLT_e25_etcut_L1EM15";
-  }else if(et >= 30*GeV && et < 40*GeV){
+  }else if(et >= 30*Gaudi::Units::GeV && et < 40*Gaudi::Units::GeV){
     trigger = "HLT_e30_etcut_L1EM15";
-  }else if(et >= 40*GeV && et < 50*GeV){
+  }else if(et >= 40*Gaudi::Units::GeV && et < 50*Gaudi::Units::GeV){
     trigger = "HLT_e40_etcut_L1EM15";
-  }else if(et >= 50*GeV && et < 60*GeV){
+  }else if(et >= 50*Gaudi::Units::GeV && et < 60*Gaudi::Units::GeV){
     trigger = "HLT_e50_etcut_L1EM15";
-  }else if(et >= 50*GeV && et < 60*GeV){
+  }else if(et >= 50*Gaudi::Units::GeV && et < 60*Gaudi::Units::GeV){
     trigger = "HLT_e60_etcut";
-  }else if(et >= 60*GeV && et < 70*GeV){
+  }else if(et >= 60*Gaudi::Units::GeV && et < 70*Gaudi::Units::GeV){
     trigger = "HLT_e70_etcut";
-  }else if(et >= 70*GeV && et < 80*GeV){
+  }else if(et >= 70*Gaudi::Units::GeV && et < 80*Gaudi::Units::GeV){
     trigger = "HLT_e80_etcut";
-  }else if(et >= 80*GeV && et < 100*GeV){
+  }else if(et >= 80*Gaudi::Units::GeV && et < 100*Gaudi::Units::GeV){
     trigger = "HLT_e100_etcut";
-  }else if(et >= 100*GeV && et < 120*GeV){
+  }else if(et >= 100*Gaudi::Units::GeV && et < 120*Gaudi::Units::GeV){
     trigger = "HLT_e120_etcut";
   }else{
     return true;
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
index 73cf6e0b6b5b..4f313a969095 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
@@ -16,7 +16,7 @@
 #include "TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h"
 #include "TrigConfxAOD/xAODConfigTool.h"
 #include "PATCore/AcceptData.h"
-
+#include "GaudiKernel/SystemOfUnits.h"
 #include "string"
 #include <algorithm>
 #include "boost/algorithm/string.hpp"
@@ -274,7 +274,7 @@ StatusCode TrigEgammaNavBaseTool::executePhotonNavigation( std::string trigItem,
           ATH_MSG_DEBUG("No caloCluster");
           continue;
       } 
-      if( !(getCluster_et(eg) > (etthr-5.)*1.e3)) continue; //Take 2GeV above threshold
+      if( !(getCluster_et(eg) > (etthr-5.)*Gaudi::Units::GeV)) continue; //Take 2GeV above threshold
       if(!eg->passSelection(m_photonPid)) continue;
       if(m_doUnconverted){
           if (eg->vertex()){
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
index fa0d71d180d9..90610ba04a1e 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
@@ -22,6 +22,7 @@
 #include "TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h"
 #include "TrigConfxAOD/xAODConfigTool.h"
 #include "xAODEventInfo/EventInfo.h"
+#include "GaudiKernel/SystemOfUnits.h"
 #include "PATCore/AcceptData.h"
 #include "string"
 #include <algorithm>
@@ -328,7 +329,6 @@ bool TrigEgammaNavTPBaseTool::isTagElectron(const xAOD::Electron *el){
     // Require offline tight electron
     // Match to e24_tight1_L1EM20V
     ATH_MSG_DEBUG("Selecting Tag Electron");
-    double GeV = 1000.;
 
     //Check constituents
     const xAOD::TrackParticle *trk = el->trackParticle();
@@ -351,7 +351,7 @@ bool TrigEgammaNavTPBaseTool::isTagElectron(const xAOD::Electron *el){
     hist1(m_anatype+"_TagCutCounter")->Fill("GoodPid",1);
     ATH_MSG_DEBUG("Selecting Tag Electron Et");
     //Require Et > 25 GeV
-    if( !(el->e()/cosh(el->trackParticle()->eta())  > m_tagMinEt*GeV) ){
+    if( !(el->e()/cosh(el->trackParticle()->eta())  > m_tagMinEt*Gaudi::Units::GeV) ){
         return false;
     }
     hist1(m_anatype+"_TagCutCounter")->Fill("Et",1);
@@ -464,7 +464,6 @@ bool TrigEgammaNavTPBaseTool::ApplyElectronPid(const xAOD::Electron *eg, const s
 
 bool TrigEgammaNavTPBaseTool::isGoodProbeElectron(const xAOD::Electron *el){
 
-    double GeV = 1000.;
     //Check constituents
     if(!el->trackParticle()){
         ATH_MSG_DEBUG("No track Particle");
@@ -484,7 +483,7 @@ bool TrigEgammaNavTPBaseTool::isGoodProbeElectron(const xAOD::Electron *el){
         }
     }
     hist1(m_anatype+"_ProbeCutCounter")->Fill("Eta",1);
-    /*if( !(el->e()/cosh(el->trackParticle()->eta())  > (etthr-5.0)*GeV) ){
+    /*if( !(el->e()/cosh(el->trackParticle()->eta())  > (etthr-5.0)*Gaudi::Units::GeV) ){
         return false;
     }
     hist1("ProbeCutCounter")->Fill("Et",1);*/
@@ -501,7 +500,7 @@ bool TrigEgammaNavTPBaseTool::isGoodProbeElectron(const xAOD::Electron *el){
         for(const auto &i_jet : *m_jets){
             TLorentzVector jet;
             jet.SetPtEtaPhiE(i_jet->pt(), i_jet->eta(), i_jet->phi(), i_jet->e());
-            if( (jet.Et() > 20*GeV) && (jet.DeltaR(probeCandidate) < 0.4)) jetsAroundProbeElectron++;
+            if( (jet.Et() > 20*Gaudi::Units::GeV) && (jet.DeltaR(probeCandidate) < 0.4)) jetsAroundProbeElectron++;
         }
         //reject if more than 1 jet close to the probe electron
         if ( jetsAroundProbeElectron >= 2 ) {
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
index 71379e7fec15..15f403b7845b 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
@@ -33,7 +33,6 @@ private:
   void fillL2Electron(const std::string,const xAOD::TrigElectron *);
   void fillL2Calo(const std::string,const xAOD::TrigEMCluster *);
   void fillRingerShapes(const std::string,const xAOD::TrigRingerRings *);
-  void fillRnnDistribution(const std::string,const xAOD::TrigRNNOutput *);
   void fillL1Calo(const std::string,const xAOD::EmTauRoI *);
    /*! Include more detailed histograms */
   bool m_detailedHists;
-- 
GitLab


From c6f77268bdb3a794800dedde0dd8a0abc84e127e Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Fri, 15 Mar 2019 16:15:06 +0100
Subject: [PATCH 052/163] remove ringer dists in E/G dist tool and substitute
 all 1e3 to GeV Gaudi unit

---
 .../TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
index d85e8c7f90c4..bf313f2bde98 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaEventSelection.cxx
@@ -279,7 +279,7 @@ bool TrigEgammaEventSelection::EventSelectionFakes(){
       el1.SetPtEtaPhiE(elTag->pt(), elTag->trackParticle()->eta(), elTag->trackParticle()->phi(), elTag->e());
       el2.SetPtEtaPhiE(elProbe->pt(), elProbe->trackParticle()->eta(), elProbe->trackParticle()->phi(), elProbe->e());
       float tpPairMass = (el1 + el2).M();
-      if( !((tpPairMass > m_ZeeMassMin*1.e3) && (tpPairMass < m_ZeeMassMax*1.e3))){
+      if( !((tpPairMass > m_ZeeMassMin*Gaudi::Units::GeV) && (tpPairMass < m_ZeeMassMax*Gaudi::Units::GeV))){
           ATH_MSG_DEBUG("tag and probe pair not in Z mass window");
           continue;
       }else{
-- 
GitLab


From b7ffcebfe55984fed164abb646fd260bc0acc580 Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Fri, 15 Mar 2019 22:52:23 +0100
Subject: [PATCH 053/163] Migrated 5 tools from the TrkValTools package to
 xAOD::EventInfo

---
 .../BasicValTrkParticleNtupleTool.h           |  6 ++-
 .../TrkValTools/JetTruthNtupleTool.h          |  6 ++-
 .../TrkValTools/TrkValTools/TrackDiff.h       |  9 ++--
 .../TrkValTools/TrkValTools/TruthNtupleTool.h |  6 ++-
 .../src/BasicValTrkParticleNtupleTool.cxx     | 46 +++++++++----------
 .../src/EventToTrackLinkNtupleTool.cxx        |  9 +---
 .../TrkValTools/src/JetTruthNtupleTool.cxx    | 25 ++++------
 .../TrkValTools/src/TrackDiff.cxx             | 18 +++-----
 .../src/TrackInformationNtupleTool.cxx        | 46 +++++++++----------
 .../src/TrackInformationNtupleTool.h          |  5 +-
 .../TrkValTools/src/TruthNtupleTool.cxx       | 19 ++++----
 11 files changed, 91 insertions(+), 104 deletions(-)

diff --git a/Tracking/TrkValidation/TrkValTools/TrkValTools/BasicValTrkParticleNtupleTool.h b/Tracking/TrkValidation/TrkValTools/TrkValTools/BasicValTrkParticleNtupleTool.h
index aa3497d30e6f..c8bf1012c257 100644
--- a/Tracking/TrkValidation/TrkValTools/TrkValTools/BasicValTrkParticleNtupleTool.h
+++ b/Tracking/TrkValidation/TrkValTools/TrkValTools/BasicValTrkParticleNtupleTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef Trk_BasicValTrkParticleNtupleTool_h
@@ -9,6 +9,8 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "TrkValInterfaces/IValidationNtupleTool.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 #include <vector>
 
 class TTree;
@@ -163,6 +165,8 @@ private:
     mutable unsigned long    m_idHitPattern;                  //!< bit word carrying information about hit layers
      
     static const float  s_errorEntry;        //!< error entry costant
+
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 
diff --git a/Tracking/TrkValidation/TrkValTools/TrkValTools/JetTruthNtupleTool.h b/Tracking/TrkValidation/TrkValTools/TrkValTools/JetTruthNtupleTool.h
index 50c3ea365e25..fd7e6682fd74 100644
--- a/Tracking/TrkValidation/TrkValTools/TrkValTools/JetTruthNtupleTool.h
+++ b/Tracking/TrkValidation/TrkValTools/TrkValTools/JetTruthNtupleTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -16,6 +16,8 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "TrkValInterfaces/IJetTruthNtupleTool.h"
 #include <vector>
@@ -72,6 +74,8 @@ private:
     mutable float       m_mc_jetThrust;
     mutable float       m_mc_jetEnergy;
     mutable float       m_mc_jetMomentum;
+
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 
diff --git a/Tracking/TrkValidation/TrkValTools/TrkValTools/TrackDiff.h b/Tracking/TrkValidation/TrkValTools/TrkValTools/TrackDiff.h
index 019f3121bed7..1804399f4dff 100755
--- a/Tracking/TrkValidation/TrkValTools/TrkValTools/TrackDiff.h
+++ b/Tracking/TrkValidation/TrkValTools/TrkValTools/TrackDiff.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -19,9 +19,10 @@
 #include "TrkValInterfaces/ITrackDiff.h"
 #include "TrkEventPrimitives/TrackStateDefs.h"
 #include "TrkValEvent/TrackStateData.h"
-//#include <vector>
 #include "AthContainers/DataVector.h"
-//class INTupleSvc;
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
+
 class AtlasDetectorID;
 class TTree;
 
@@ -153,6 +154,8 @@ private:
     mutable int m_PRD_MismatchesSum[Trk::TrackState::NumberOfMeasurementTypes];
     mutable int m_trackSum;
 
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
+
     /** extract data from a Trk::Track into a list of Trk::TrackStateData */
     DataVector< const Trk::TrackStateData >* extractDataFromTrack( const Trk::Track& ) const;
 
diff --git a/Tracking/TrkValidation/TrkValTools/TrkValTools/TruthNtupleTool.h b/Tracking/TrkValidation/TrkValTools/TrkValTools/TruthNtupleTool.h
index 37f940a5e732..56e817ab6255 100644
--- a/Tracking/TrkValidation/TrkValTools/TrkValTools/TruthNtupleTool.h
+++ b/Tracking/TrkValidation/TrkValTools/TrkValTools/TruthNtupleTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -17,6 +17,8 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "TrkValInterfaces/ITruthNtupleTool.h"
 #include "TrkValInterfaces/ITrackTruthClassifier.h"
@@ -99,6 +101,8 @@ private:
     mutable std::vector< std::vector<TH1D*> >   m_truthTrackCounts;
 
     mutable std::vector<const Trk::ITrackTruthClassifier*> m_trackTruthClassifiers;     //!< the truth classifiers
+
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 
diff --git a/Tracking/TrkValidation/TrkValTools/src/BasicValTrkParticleNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/BasicValTrkParticleNtupleTool.cxx
index c953054a7040..d784fc15a180 100644
--- a/Tracking/TrkValidation/TrkValTools/src/BasicValTrkParticleNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/BasicValTrkParticleNtupleTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -13,16 +13,11 @@
 
 
 #include "TTree.h"
-//Gaudi
 #include "GaudiKernel/ITHistSvc.h"
 
 #include "EventPrimitives/EventPrimitivesHelpers.h"
 #include "TrkParticleBase/TrackParticleBase.h"
-// #include "TrkParameters/Perigee.h"
 #include "TrkTrackSummary/TrackSummary.h"
-
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 #include "TrkValTools/BasicValTrkParticleNtupleTool.h"
 #include <bitset>
 
@@ -85,6 +80,8 @@ Trk::BasicValTrkParticleNtupleTool::~BasicValTrkParticleNtupleTool() {}
 // initialize
 StatusCode Trk::BasicValTrkParticleNtupleTool::initialize() {
 
+  ATH_CHECK( m_evt.initialize() );
+
     // create ntuple tree
   if (m_bookNewNtuple) {
     // ---------------------------
@@ -92,7 +89,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::initialize() {
     ITHistSvc *tHistSvc;
     StatusCode sc =  service("THistSvc", tHistSvc);
     if (sc.isFailure()) {
-        msg(MSG::ERROR) << "Unable to retrieve pointer to THistSvc" << endmsg;
+        ATH_MSG_ERROR("Unable to retrieve pointer to THistSvc");
         return sc;
     }
 
@@ -105,7 +102,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::initialize() {
     std::string fullNtupleName =  "/"+m_ntupleFileName+"/"+m_ntupleDirName+"/"+m_ntupleTreeName;
     sc = tHistSvc->regTree(fullNtupleName, m_nt);
     if (sc.isFailure()) {
-        msg(MSG::ERROR) << "Unable to register TTree : " << fullNtupleName << endmsg;
+        ATH_MSG_ERROR("Unable to register TTree : " << fullNtupleName);
         return sc;
     }
     // add the ntuple branches (this function has to be called by the client of this tool, if m_bookNewNtuple is set to false...)
@@ -121,7 +118,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::initialize() {
 ///////////////////////////////////////
 StatusCode Trk::BasicValTrkParticleNtupleTool::finalize() {
 
-  msg(MSG::DEBUG) << "start finalize() in " << name() << endmsg;
+  ATH_MSG_DEBUG("start finalize() in " << name());
   if (m_nt) {
     delete m_nt;
     m_nt = 0;
@@ -181,7 +178,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::addNtupleItems( TTree* tree ) con
 StatusCode Trk::BasicValTrkParticleNtupleTool::writeTrackParticleData (
      const Trk::TrackParticleBase& track)  const {
     if (!m_nt) {
-        msg(MSG::ERROR) << "writeTrackParticleData(...) can only be used, if property BookNewNtuple is set to true"  << endmsg;
+        ATH_MSG_ERROR("writeTrackParticleData(...) can only be used, if property BookNewNtuple is set to true" );
         return StatusCode::FAILURE;
     }
     StatusCode sc;
@@ -202,37 +199,36 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::fillTrackParticleData (
 
   // ---------------------------------------
     // detect new event, reset TrackParticle counter if new event
-    const EventInfo* eventInfo;
-    if ((evtStore()->retrieve(eventInfo)).isFailure()) {
-      msg(MSG::WARNING) << "Could not retrieve event info" << endmsg;
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+    if (!evt.isValid()) {
+      ATH_MSG_WARNING("Could not retrieve event info");
       m_runNumber   = (int)s_errorEntry;
       m_eventNumber = (int)s_errorEntry;
       return StatusCode::FAILURE;
       }
   
-   const EventID* myEventID=eventInfo->event_ID();
-   if (m_lastEventNumber!=myEventID->event_number()) {
+   if (m_lastEventNumber!=evt->eventNumber()) {
         // we have a new event, reset TrackParticleID:
         m_TrackIDcounter = 0;
-        m_lastEventNumber = myEventID->event_number();
+        m_lastEventNumber = evt->eventNumber();
       }
     m_TrackIDcounter++;
     m_TrackID = (unsigned char)m_TrackIDcounter;
-    m_eventNumber = myEventID->event_number();
-    m_runNumber   = myEventID->run_number(); 
+    m_eventNumber = evt->eventNumber();
+    m_runNumber   = evt->runNumber(); 
    
     ATH_MSG_VERBOSE ("Event: " << m_eventNumber << ", Run: "<< m_runNumber  << " TrackID: " << m_TrackID);
             
     //----------------------------------------------
     // fill track parameters in ntuple
     const Trk::Perigee* perpars = track.perigee();
-    if (perpars != NULL && fillTrkParticlePerigee(perpars).isFailure())  msg(MSG::WARNING) << "Perigee parameters could not be written to ntuple" << endmsg;
+    if (perpars != NULL && fillTrkParticlePerigee(perpars).isFailure())  ATH_MSG_WARNING("Perigee parameters could not be written to ntuple");
     
     const Trk::TrackSummary* summary = track.trackSummary();
-    if((!summary) || fillTrkParticleSummary(summary).isFailure()) msg(MSG::WARNING) << "Summary parameters could not be written to ntuple" << endmsg;
+    if((!summary) || fillTrkParticleSummary(summary).isFailure()) ATH_MSG_WARNING("Summary parameters could not be written to ntuple");
 
     const Trk::FitQuality* fitQuality = track.fitQuality();
-    if((!fitQuality) || fillFitQualityData(fitQuality).isFailure() ) msg(MSG::WARNING) << "Fit Quality data could not be written to ntuple" << endmsg;
+    if((!fitQuality) || fillFitQualityData(fitQuality).isFailure() ) ATH_MSG_WARNING("Fit Quality data could not be written to ntuple");
 
     return StatusCode::SUCCESS;
 }
@@ -246,7 +242,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::fillTrkParticlePerigee(const Trk:
   ATH_MSG_VERBOSE ("in fillTrackPerigee");
 
     if (!perigee) {
-        msg(MSG::WARNING) << "Something is wrong - track has no perigee at all!" << endmsg;
+        ATH_MSG_WARNING("Something is wrong - track has no perigee at all!");
         m_Rec_d0    = 0;
         m_Rec_z0    = 0;
         m_Rec_phi0  = 0;
@@ -287,7 +283,7 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::fillTrkParticleSummary(const Trk:
   ATH_MSG_VERBOSE ("in fillTrackSummary");
 
     if (!summary) {
-        msg(MSG::WARNING) << "Something is wrong - track has no summary at all!" << endmsg;
+        ATH_MSG_WARNING("Something is wrong - track has no summary at all!");
         m_numberOfPixelHits  = 0;
         m_numberOfSCTHits    = 0;
 
@@ -321,14 +317,14 @@ StatusCode Trk::BasicValTrkParticleNtupleTool::fillTrkParticleSummary(const Trk:
 
 StatusCode Trk::BasicValTrkParticleNtupleTool::fillFitQualityData(const Trk::FitQuality* fitQuality) const {
   if (!fitQuality) {
-        msg(MSG::WARNING) << "Something is wrong - track has no fit quality data !!" << endmsg;
+        ATH_MSG_WARNING("Something is wrong - track has no fit quality data !!");
         m_chi2  = 0;
                    
         return StatusCode::FAILURE;
       }
 
   if(fitQuality->numberDoF() == 0) {
-                                    msg(MSG::WARNING) << "Number of DOF is zero !! Could not normalize chi2 " << endmsg;
+                                    ATH_MSG_WARNING("Number of DOF is zero !! Could not normalize chi2 ");
 				    return StatusCode::FAILURE;
                                     }
   
diff --git a/Tracking/TrkValidation/TrkValTools/src/EventToTrackLinkNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/EventToTrackLinkNtupleTool.cxx
index e895b76abc25..7ececf2ac1fe 100644
--- a/Tracking/TrkValidation/TrkValTools/src/EventToTrackLinkNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/EventToTrackLinkNtupleTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -12,16 +12,9 @@
 ///////////////////////////////////////////////////////////////////
 
 #include "TTree.h"
-//Gaudi
-// #include "GaudiKernel/SmartDataPtr.h"
 #include "GaudiKernel/ITHistSvc.h"
-// #include "GaudiKernel/ISvcLocator.h"
-// #include "GaudiKernel/PropertyMgr.h"
 #include "TrkValTools/EventToTrackLinkNtupleTool.h"
 #include "CommissionEvent/ComTime.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
-#include "EventInfo/TriggerInfo.h"
 
   const std::string Trk::EventToTrackLinkNtupleTool::s_trackTypeName = "Trk::Track";
   const std::string Trk::EventToTrackLinkNtupleTool::s_trkParticleTypeName = "Rec::TrackParticle";
diff --git a/Tracking/TrkValidation/TrkValTools/src/JetTruthNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/JetTruthNtupleTool.cxx
index a98b8e7b2699..51a1d14ff97f 100644
--- a/Tracking/TrkValidation/TrkValTools/src/JetTruthNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/JetTruthNtupleTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -9,11 +9,8 @@
 // (c) ATLAS Detector software
 ///////////////////////////////////////////////////////////////////
 
-//Gaudi
-// #include "GaudiKernel/SmartDataPtr.h"
 #include "GaudiKernel/ITHistSvc.h"
 #include "GaudiKernel/ISvcLocator.h"
-// #include "GaudiKernel/PropertyMgr.h"
 
 // Trk
 #include "TrkValTools/JetTruthNtupleTool.h"
@@ -22,9 +19,6 @@
 // Truth
 #include "TrkTruthData/TrackTruth.h"
 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
-
 #include "HepMC/GenParticle.h"
 
 #include <TGraphAsymmErrors.h>
@@ -62,6 +56,8 @@ Trk::JetTruthNtupleTool::~JetTruthNtupleTool() {}
 // initialize
 StatusCode Trk::JetTruthNtupleTool::initialize() {
 
+  ATH_CHECK( m_evt.initialize() );
+
     // ---------------------------
     // retrieve pointer to THistSvc
     ITHistSvc *tHistSvc;
@@ -125,22 +121,17 @@ StatusCode Trk::JetTruthNtupleTool::writeJetTruthData (
                 const int& nTruthRecordsAtCurrentEvent
                 //                const std::vector<unsigned int>& /*particleToJetIndex*/ 
                 ) const {
-
-  StatusCode sc;
-
   ATH_MSG_VERBOSE ( "in writeJetTruthData(...)" );
 
   // ---------------------------------------
   // fill event data
-  const EventInfo* eventInfo = nullptr;
-  sc = evtStore()->retrieve(eventInfo);
-  if (sc.isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if (!evt.isValid()) {
     ATH_MSG_WARNING ( "Could not retrieve event info" );
+    return StatusCode::FAILURE;
   }
-  const EventID* myEventID=eventInfo->event_ID();
-
-  m_runNumber=myEventID->run_number();
-  m_eventNumber=myEventID->event_number();
+  m_runNumber=evt->runNumber();
+  m_eventNumber=evt->eventNumber();
 
   for (std::vector<Trk::GenParticleJet>::const_iterator itJet = jets.begin();
        itJet < jets.end(); ++itJet ) {
diff --git a/Tracking/TrkValidation/TrkValTools/src/TrackDiff.cxx b/Tracking/TrkValidation/TrkValTools/src/TrackDiff.cxx
index 79ca8c0ae8ee..beb3919dd431 100755
--- a/Tracking/TrkValidation/TrkValTools/src/TrackDiff.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/TrackDiff.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -29,8 +29,6 @@
 #include "TrkTrack/Track.h"
 
 #include "AtlasDetDescr/AtlasDetectorID.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 
 // constructor
 Trk::TrackDiff::TrackDiff(
@@ -106,6 +104,8 @@ Trk::TrackDiff::~TrackDiff() {}
 // initialize
 StatusCode Trk::TrackDiff::initialize() {
 
+  ATH_CHECK( m_evt.initialize() );
+
     StatusCode sc;
     if (m_writeNtuple) {
         // ---------------------------
@@ -232,22 +232,18 @@ StatusCode Trk::TrackDiff::diff (
         const Trk::Track& referenceTrack,
         const Trk::Track& comparedTrack ) const {
 
-    StatusCode sc;
-
     ATH_MSG_VERBOSE ( "in diff(trk, trk)" );
     resetVariables();
 
     // ---------------------------------------
     // fill event data
-    const EventInfo* eventInfo;
-    sc = evtStore()->retrieve(eventInfo);
-    if (sc.isFailure()) {
+    SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+    if (!evt.isValid()) {
       ATH_MSG_ERROR ("Could not retrieve event info");
+      return StatusCode::FAILURE;
     }
-    const EventID* myEventID=eventInfo->event_ID();
-
 
-    m_eventNumber = myEventID->event_number();
+    m_eventNumber = evt->eventNumber();
     if (referenceTrack.perigeeParameters()) {
         m_trackPhi = referenceTrack.perigeeParameters()->parameters()[Trk::phi0];
         m_trackEta = referenceTrack.perigeeParameters()->eta();
diff --git a/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.cxx
index 099f8f8450a8..aa3fc54c0576 100644
--- a/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -21,8 +21,6 @@
 #include "TrkTrack/TrackInfo.h"
 #include "TrkTrackSummary/TrackSummary.h"
 #include "TrkFitterUtils/ProtoTrackStateOnSurface.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 
 // constructor
 Trk::TrackInformationNtupleTool::TrackInformationNtupleTool(
@@ -57,7 +55,7 @@ Trk::TrackInformationNtupleTool::~TrackInformationNtupleTool() {}
 ///////////////////////////////////////
 StatusCode Trk::TrackInformationNtupleTool::initialize() {
 
-  ATH_MSG_DEBUG ("nothing specific initialized in " << name()); 
+  ATH_CHECK( m_evt.initialize() );
   return StatusCode::SUCCESS;
 }
 
@@ -103,25 +101,24 @@ StatusCode Trk::TrackInformationNtupleTool::fillTrackData (
   ATH_MSG_VERBOSE ("in fillTrackData(trk, indx)");
   // ---------------------------------------
   // detect new event, reset Track counter if new event
-  const EventInfo* eventInfo;
-  if ((evtStore()->retrieve(eventInfo)).isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if(!evt.isValid()) {
     msg(MSG::WARNING) << "Could not retrieve event info" << endmsg;
     m_runNumber   = (int)s_errorEntry;
     m_eventNumber = (int)s_errorEntry;
   } else {
-    const EventID* myEventID=eventInfo->event_ID();
-    if (m_lastEventNumber!=myEventID->event_number()) {
+    if (m_lastEventNumber!=evt->eventNumber()) {
       // we have a new event, reset TrackID:
       m_TrackIDcounter = 0;
-      m_lastEventNumber = myEventID->event_number();
+      m_lastEventNumber = evt->eventNumber();
     }
     // ---------------------------------------------
     // track id (increase if a new iteration was started = iterationIndex==0)
     if (iterationIndex == 0) m_TrackIDcounter++;
     m_TrackID = m_TrackIDcounter;
     m_iterIndex = iterationIndex;
-    m_eventNumber = myEventID->event_number();
-    m_runNumber   = myEventID->run_number();
+    m_eventNumber = evt->eventNumber();
+    m_runNumber   = evt->runNumber();
   }
   ATH_MSG_VERBOSE ("Event: " << m_eventNumber << ", Run: "
                    << m_runNumber  << " TrackID: " << m_TrackID 
@@ -178,22 +175,21 @@ StatusCode Trk::TrackInformationNtupleTool::fillTrackParticleData
   ATH_MSG_VERBOSE ("in fillTrackData(trk, indx)");
   // ---------------------------------------
   // detect new event, reset Track counter if new event
-  const EventInfo* eventInfo;
-  if ((evtStore()->retrieve(eventInfo)).isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if(!evt.isValid()) {
     msg(MSG::WARNING) << "Could not retrieve event info" << endmsg;
     m_runNumber   = (int)s_errorEntry;
     m_eventNumber = (int)s_errorEntry;
   } else {
-    const EventID* myEventID=eventInfo->event_ID();
-    if (m_lastEventNumber!=myEventID->event_number()) {
+    if (m_lastEventNumber!=evt->eventNumber()) {
       // we have a new event, reset TrackID:
       m_TrackIDcounter = 0;
-      m_lastEventNumber = myEventID->event_number();
+      m_lastEventNumber = evt->eventNumber();
     }
     // ---------------------------------------------
     m_TrackID = m_TrackIDcounter++;
-    m_eventNumber = myEventID->event_number();
-    m_runNumber   = myEventID->run_number();
+    m_eventNumber = evt->eventNumber();
+    m_runNumber   = evt->runNumber();
   }
   ATH_MSG_VERBOSE ("Event: " << m_eventNumber << ", Run: "
                    << m_runNumber  << " TrackID: " << m_TrackID);
@@ -238,17 +234,17 @@ StatusCode Trk::TrackInformationNtupleTool::fillProtoTrajectoryData
    //const Trk::FitterStatusCode fitStatCode) const
 {
   ATH_MSG_VERBOSE ("in fillProtoTrajectoryData(protoTraj, indx)");
-  const EventInfo* eventInfo;
-  if ((evtStore()->retrieve(eventInfo)).isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if(!evt.isValid()) {
     msg(MSG::ERROR) << "Could not retrieve event info" << endmsg;
+    return StatusCode::FAILURE;
   }
-  const EventID* myEventID=eventInfo->event_ID();
   
-  if (m_lastEventNumber!=myEventID->event_number()) {
+  if (m_lastEventNumber!=evt->eventNumber()) {
     // we have a new event!
     // reset TrackID:
     m_TrackIDcounter = 0;
-    m_lastEventNumber = myEventID->event_number();
+    m_lastEventNumber = evt->eventNumber();
   }
   // ---------------------------------------------
   // track id (increase if a new iteration was started = iterationIndex==0)
@@ -257,8 +253,8 @@ StatusCode Trk::TrackInformationNtupleTool::fillProtoTrajectoryData
   }
   m_TrackID = m_TrackIDcounter;
   m_iterIndex = iterationIndex;
-  m_eventNumber = myEventID->event_number();
-  m_runNumber   = myEventID->run_number();
+  m_eventNumber = evt->eventNumber();
+  m_runNumber   = evt->runNumber();
 
   ATH_MSG_VERBOSE ("Event: " << m_eventNumber << MSG::VERBOSE << " TrackID: " << m_TrackID << " iteration index: " << m_iterIndex);
   m_fitStatusCode = fitStatCode;
diff --git a/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.h b/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.h
index 8e02cd80e8d3..ef193bad9fd3 100644
--- a/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.h
+++ b/Tracking/TrkValidation/TrkValTools/src/TrackInformationNtupleTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -15,6 +15,8 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "TrkValInterfaces/ITrackValidationNtupleTool.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 namespace Trk {
 
@@ -95,6 +97,7 @@ private:
     mutable int         m_ndof;        //!< number of degrees of freedom of track fit
     mutable int         m_nHits;       //!< number of measurements on the track (including outliers)
 
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 
diff --git a/Tracking/TrkValidation/TrkValTools/src/TruthNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/TruthNtupleTool.cxx
index 79970a52b49d..a0e5117a52c1 100644
--- a/Tracking/TrkValidation/TrkValTools/src/TruthNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/TruthNtupleTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -21,8 +21,6 @@
 // Truth
 #include "TrkTruthData/TrackTruth.h"
 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 #include "HepMC/GenParticle.h"
 #include "HepMC/GenVertex.h"
 
@@ -81,6 +79,8 @@ Trk::TruthNtupleTool::~TruthNtupleTool() {}
 // initialize
 StatusCode Trk::TruthNtupleTool::initialize() {
 
+  ATH_CHECK( m_evt.initialize() );
+
     if (m_etaBins.size()<2) {
       ATH_MSG_ERROR ("Vector of eta bins too small");
       return StatusCode::FAILURE;
@@ -254,20 +254,17 @@ StatusCode Trk::TruthNtupleTool::finalize() {
 StatusCode Trk::TruthNtupleTool::writeTruthData (
                const std::vector< Trk::ValidationTrackTruthData >& truthData) const {
 
-    StatusCode sc;
-
     ATH_MSG_DEBUG ("in writeTruthData(...) with ValTrackTruthData size = "<<truthData.size());
     // ---------------------------------------
     // fill event data
-    const EventInfo* eventInfo = nullptr;
-    sc = evtStore()->retrieve(eventInfo);
-    if (sc.isFailure()) {
+    SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+    if (!evt.isValid()) {
       ATH_MSG_WARNING ("Could not retrieve event info");
+      return StatusCode::FAILURE;
     }
-    const EventID* myEventID=eventInfo->event_ID();
 
-    m_runNumber=myEventID->run_number();
-    m_eventNumber=myEventID->event_number();
+    m_runNumber=evt->runNumber();
+    m_eventNumber=evt->eventNumber();
 
     const HepMC::GenParticle*   genParticle = 0;
     const Trk::TrackParameters* truePerigee = 0;
-- 
GitLab


From 5a7e374e83464f41a0ebdb7ddcf68593d5bbe74e Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Sat, 16 Mar 2019 00:27:35 +0100
Subject: [PATCH 054/163] Several PhysicsAnalysis packages migrated to
 xAOD::EventInfo

---
 .../src/PileUpInfoAssociatorTool.h            |  3 +-
 .../egammaD3PDAnalysis/CMakeLists.txt         |  3 +-
 .../src/egammaTimeCorrAlg.h                   |  5 +-
 .../DerivationFrameworkMCTruth/CMakeLists.txt |  3 +-
 .../HardTruthThinning.h                       |  5 +-
 .../src/HardTruthThinning.cxx                 | 19 +++----
 .../ElectronPhotonTagTools/EgammaTagTool.h    | 18 +++----
 .../src/EgammaTagTool.cxx                     | 52 ++++++++-----------
 .../TagEvent/GlobalEventAttributeNames.h      |  4 +-
 .../LongLivedParticleDPDMaker/CMakeLists.txt  |  3 +-
 .../RPVLLTestRates.h                          |  6 ++-
 .../src/RPVLLTestRates.cxx                    | 21 ++++----
 12 files changed, 62 insertions(+), 80 deletions(-)

diff --git a/PhysicsAnalysis/D3PDMaker/TruthD3PDMaker/src/PileUpInfoAssociatorTool.h b/PhysicsAnalysis/D3PDMaker/TruthD3PDMaker/src/PileUpInfoAssociatorTool.h
index ca336e1363e2..1dc9672b9630 100644
--- a/PhysicsAnalysis/D3PDMaker/TruthD3PDMaker/src/PileUpInfoAssociatorTool.h
+++ b/PhysicsAnalysis/D3PDMaker/TruthD3PDMaker/src/PileUpInfoAssociatorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /**                                                                            
@@ -13,7 +13,6 @@
 #ifndef TRUTHD3P3MAKER_PILEUPINFOASSOCIATORTOOL_H
 #define TRUTHD3P3MAKER_PILEUPINFOASSOCIATORTOOL_H
 
-#include "EventInfo/EventInfo.h"
 #include "EventInfo/PileUpEventInfo.h"
 #include "D3PDMakerUtils/MultiAssociationTool.h"
 
diff --git a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/CMakeLists.txt b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/CMakeLists.txt
index 18b5cc52fcaf..10c8fb0f0995 100644
--- a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/CMakeLists.txt
+++ b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/CMakeLists.txt
@@ -16,7 +16,6 @@ atlas_depends_on_subdirs( PRIVATE
                           Control/AthenaBaseComps
                           Control/AthenaKernel
                           Control/CxxUtils
-                          Event/EventInfo
                           Event/EventKernel
                           Event/xAOD/xAODCaloEvent
                           Event/xAOD/xAODEgamma
@@ -36,7 +35,7 @@ atlas_depends_on_subdirs( PRIVATE
 atlas_add_component( egammaD3PDAnalysis
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES CaloClusterCorrectionLib CaloEvent CaloGeoHelpers CaloRecLib AthContainers AthenaBaseComps AthenaKernel CxxUtils EventInfo EventKernel xAODCaloEvent xAODEgamma xAODTruth GaudiKernel LArCablingLib D3PDMakerUtils MCTruthClassifierLib RecoToolInterfaces egammaEvent TrkCaloExtension VxVertex )
+                     LINK_LIBRARIES CaloClusterCorrectionLib CaloEvent CaloGeoHelpers CaloRecLib AthContainers AthenaBaseComps AthenaKernel CxxUtils EventKernel xAODCaloEvent xAODEgamma xAODTruth GaudiKernel LArCablingLib D3PDMakerUtils MCTruthClassifierLib RecoToolInterfaces egammaEvent TrkCaloExtension VxVertex )
 
 # Install files from the package:
 atlas_install_headers( egammaD3PDAnalysis )
diff --git a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/egammaTimeCorrAlg.h b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/egammaTimeCorrAlg.h
index 811f3ff631a1..85379ff790da 100644
--- a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/egammaTimeCorrAlg.h
+++ b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/egammaTimeCorrAlg.h
@@ -1,7 +1,7 @@
 // This file's extension implies that it's C, but it's really -*- C++ -*-.
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id: egammaTimeCorrAlg.h 604352 2014-07-01 04:52:11Z ssnyder $
@@ -23,9 +23,6 @@
 #include "VxVertex/VxContainer.h"   
 #include "VxVertex/RecVertex.h"
 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
-
 #include "CaloInterface/ICaloClusterTimeTool.h"
 
 #include <vector>
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt
index a2a5dc3a2e02..58a15924e427 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt
@@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PUBLIC
                           PhysicsAnalysis/DerivationFramework/DerivationFrameworkInterfaces
                           PRIVATE
                           Control/AthenaKernel
-                          Event/EventInfo
                           Event/xAOD/xAODBase
                           Event/xAOD/xAODJet
                           Generators/GeneratorObjects
@@ -34,7 +33,7 @@ atlas_add_library( DerivationFrameworkMCTruthLib
                    INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
                    LINK_LIBRARIES ${HEPPDT_LIBRARIES} ${FASTJET_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps xAODEventInfo xAODTruth GaudiKernel SGtests ExpressionEvaluationLib MCTruthClassifierLib
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaKernel EventInfo xAODBase xAODJet GeneratorObjects )
+                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaKernel xAODBase xAODJet GeneratorObjects )
 
 atlas_add_component( DerivationFrameworkMCTruth
                      src/components/*.cxx
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/DerivationFrameworkMCTruth/HardTruthThinning.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/DerivationFrameworkMCTruth/HardTruthThinning.h
index 9dc3911d0929..8ea9852662c3 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/DerivationFrameworkMCTruth/HardTruthThinning.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/DerivationFrameworkMCTruth/HardTruthThinning.h
@@ -36,7 +36,8 @@
 #include "DerivationFrameworkMCTruth/DecayGraphHelper.h"
 #include "xAODTruth/TruthParticleContainer.h"
 #include "GaudiKernel/ToolHandle.h"
-
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 class IThinningSvc;
 
 namespace DerivationFramework {
@@ -59,8 +60,8 @@ namespace DerivationFramework {
     // handle to the thinning service
     ServiceHandle<IThinningSvc> m_thinningSvc;
 
+    SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
     // TruthParticle container names
-    std::string m_eventInfoName;
     std::string m_truthParticleName;
     std::string m_truthVertexName;
     std::string m_hardParticleName;
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/HardTruthThinning.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/HardTruthThinning.cxx
index 2095f7def953..5bdd8400e7e8 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/HardTruthThinning.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/HardTruthThinning.cxx
@@ -21,13 +21,9 @@
 #include "xAODJet/JetContainer.h"
 #include "xAODBase/IParticle.h"
 #include "xAODBase/IParticleContainer.h"
-#include "xAODEventInfo/EventInfo.h"
-//#include "EventKernel/PdtPdg.h"
 #include "AthenaKernel/errorcheck.h"
 #include "HepPID/ParticleIDMethods.hh"
 #include "GaudiKernel/SystemOfUnits.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 
 #include <vector>
 #include <string>
@@ -60,9 +56,6 @@ DerivationFramework::HardTruthThinning::HardTruthThinning(
   declareInterface<DerivationFramework::IThinningTool>(this);
   declareProperty("ThinningService", m_thinningSvc);
 
-  declareProperty("EventInfo", m_eventInfoName,
-                  "EventInfo name");
-
   declareProperty("TruthParticles", m_truthParticleName,
                   "truth particle container name");
 
@@ -116,6 +109,8 @@ DerivationFramework::HardTruthThinning::~HardTruthThinning() {
 
 StatusCode DerivationFramework::HardTruthThinning::initialize()
 {
+  ATH_CHECK( m_evt.initialize() );
+
   m_evtCount = -1;
   m_errCount = 0;
 
@@ -151,14 +146,12 @@ StatusCode DerivationFramework::HardTruthThinning::doThinning() const
   //bool doExtra = false;
 
 
-  // Retrieve Event/EventInfo -- FIXME
-
-  const EventInfo* eventInfo = 0;
-  if( !evtStore()->retrieve( eventInfo, m_eventInfoName).isSuccess() ){
-    ATH_MSG_ERROR("No EventInfo found with name " <<m_eventInfoName );
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if(!evt.isValid()) {
+    ATH_MSG_ERROR("Failed to retrieve EventInfo");
     return StatusCode::FAILURE;
   }
-  long long int evtNum = eventInfo->event_ID()->event_number();
+  long long int evtNum = evt->eventNumber();
 
   // Retrieve truth particles and vertices
 
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/ElectronPhotonTagTools/EgammaTagTool.h b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/ElectronPhotonTagTools/EgammaTagTool.h
index bb34fa968b58..4e1fe2d63839 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/ElectronPhotonTagTools/EgammaTagTool.h
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/ElectronPhotonTagTools/EgammaTagTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef EGAMMATAGTOOL_H 
@@ -14,17 +14,13 @@ Purpose : build the Egamma Tag objects - AnalysisTag.h.
 	  The Egamma Analysis Tag fragment is built here
 *****************************************************************************/
 #include "StoreGate/StoreGateSvc.h"
+#include "StoreGate/ReadHandleKey.h"
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventType.h"
-#include "EventInfo/EventID.h"
-//#include "egammaEvent/ElectronContainer.h"
+#include "xAODEventInfo/EventInfo.h"
 #include "xAODEgamma/EgammaContainer.h"
 #include "xAODEgamma/PhotonContainer.h"
 #include "xAODEgamma/ElectronContainer.h"
 #include "xAODMissingET/MissingETContainer.h"
-//#include "egammaEvent/PhotonContainer.h"
-//#include "MissingETEvent/MissingET.h"
 #include "TagEvent/TagFragmentCollection.h"
 #include "AthenaPoolUtilities/AthenaAttributeSpecification.h"
 #include <vector>
@@ -51,12 +47,12 @@ public:
 
 private:
   bool ZeeSelection (const xAOD::ElectronContainer* eleColl,
-                     const DataHandle<EventInfo>& eventInfo);
+                     SG::ReadHandle<xAOD::EventInfo> eventInfo);
   bool WenuSelection (const xAOD::ElectronContainer* eleColl,
                       const xAOD::MissingETContainer* metTopo,
-                      const DataHandle<EventInfo>& eventInfo);
+                      SG::ReadHandle<xAOD::EventInfo> eventInfo);
   void dumpEventDetails(const xAOD::Electron*,
-                        const DataHandle<EventInfo>& eventInfo);
+                        SG::ReadHandle<xAOD::EventInfo> eventInfo);
 
 
 private:
@@ -78,6 +74,8 @@ private:
   double m_welectronPtCut; 
   
   double m_invMass;
+
+  SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
  };
 
 #endif // ELECTRONTAGTOOL_H
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
index a7a602169467..fec9448da381 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /*****************************************************************************
@@ -52,6 +52,7 @@ EgammaTagTool::EgammaTagTool (const std::string& type, const std::string& name,
 StatusCode  EgammaTagTool::initialize() 
 {
   ATH_MSG_DEBUG("in initialize()");
+  ATH_CHECK( m_evt.initialize() );
   return StatusCode::SUCCESS;
 }
 
@@ -81,8 +82,11 @@ StatusCode EgammaTagTool::execute(TagFragmentCollection& egammaTagCol, const int
   const xAOD::MissingETContainer* metTopo = nullptr;
   ATH_CHECK( evtStore()->retrieve(metTopo, m_missingEtObject) );
 
-  const DataHandle<EventInfo> eventInfo;
-  ATH_CHECK( evtStore()->retrieve(eventInfo) );
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if(!evt.isValid()) {
+    ATH_MSG_ERROR("Failed to retrieve EventInfo");
+    return StatusCode::FAILURE;
+  }
 
   /** Flags for Z and W events */ 
   m_flagZeeEvent  = false;
@@ -91,12 +95,12 @@ StatusCode EgammaTagTool::execute(TagFragmentCollection& egammaTagCol, const int
   //===================================================
   // Zee event reconstruction
   //===================================================
-  m_flagZeeEvent = ZeeSelection (eleColl, eventInfo);
+  m_flagZeeEvent = ZeeSelection (eleColl, evt);
 
   //===================================================
   // Wenu event reconstruction
   //===================================================
-  m_flagWenuEvent = WenuSelection (eleColl, metTopo, eventInfo);
+  m_flagWenuEvent = WenuSelection (eleColl, metTopo, evt);
 
   
   //===================================================
@@ -121,7 +125,7 @@ StatusCode  EgammaTagTool::finalize() {
 
 
 bool EgammaTagTool::ZeeSelection (const xAOD::ElectronContainer* eleColl,
-                                  const DataHandle<EventInfo>& eventInfo)
+                                  SG::ReadHandle<xAOD::EventInfo> eventInfo)
 {
 
   ATH_MSG_DEBUG("in ZeeSelection()");
@@ -173,7 +177,7 @@ bool EgammaTagTool::ZeeSelection (const xAOD::ElectronContainer* eleColl,
 	if ( (m_massZLow < invMass) && (invMass < m_massZHigh) ) m_flagZeeEvent = true;
 	
 	/** Print the details of Zee Candidate if outputLevel=DEBUG */      
-	if (m_flagZeeEvent) { 
+	if (m_flagZeeEvent && msgLvl(MSG::DEBUG)) {
           ATH_MSG_DEBUG("***** First electron candidate of Zee  *****" );
           dumpEventDetails(electrons_positive[i], eventInfo);
           ATH_MSG_DEBUG("***** Second electron candidate of Zee  *****" );
@@ -190,7 +194,7 @@ bool EgammaTagTool::ZeeSelection (const xAOD::ElectronContainer* eleColl,
 
 bool EgammaTagTool::WenuSelection (const xAOD::ElectronContainer* eleColl,
                                    const xAOD::MissingETContainer* metTopo,
-                                   const DataHandle<EventInfo>& eventInfo)
+                                   SG::ReadHandle<xAOD::EventInfo> eventInfo)
 {
   ATH_MSG_DEBUG("in WenuSelection()");
   
@@ -212,7 +216,7 @@ bool EgammaTagTool::WenuSelection (const xAOD::ElectronContainer* eleColl,
  
     if (select) m_flagWenuEvent = true;
 
-    if (m_flagWenuEvent) {
+    if (m_flagWenuEvent && msgLvl(MSG::DEBUG)) {
        ATH_MSG_DEBUG("***** Electron Candidate in Wenu *****" );
        dumpEventDetails(*eleItr, eventInfo);
     } 
@@ -223,30 +227,20 @@ bool EgammaTagTool::WenuSelection (const xAOD::ElectronContainer* eleColl,
 }
 
 void EgammaTagTool::dumpEventDetails(const xAOD::Electron* eleItr,
-                                     const DataHandle<EventInfo>& eventInfo)
+                                     SG::ReadHandle<xAOD::EventInfo> eventInfo)
 {
-
   ATH_MSG_DEBUG("Event info : "
-             << " runNumber = " << eventInfo->event_ID()->run_number() 
-             << " lumiBlock = " << eventInfo->event_ID()->lumi_block()
-             << " eventNumber = " << eventInfo->event_ID()->event_number()
-               );
+		<< " runNumber = " << eventInfo->runNumber()
+		<< " lumiBlock = " << eventInfo->lumiBlock()
+		<< " eventNumber = " << eventInfo->eventNumber()
+		);
 
   ATH_MSG_DEBUG("Electrons : "
-             <<" pt = "  << eleItr->pt()
-             <<" eta = " << eleItr->eta()
-             <<" phi = " << eleItr->phi() 
-             <<" charge = " << eleItr->charge() 
-		//             <<" loosePP = " << eleItr->passID(egammaPID::ElectronIDLoosePP)
-		// <<" mediumPP = " << eleItr->passID(egammaPID::ElectronIDMediumPP)
-		//          <<" tightPP = " << eleItr->passID(egammaPID::ElectronIDTightPP)
-              );       
-
-  ATH_MSG_DEBUG("Event MET_topo : " 
-		// <<" pt = "  << metTopo->et() 
-		// <<" phi = " << metTopo->phi() 
-               );
+		<<" pt = "  << eleItr->pt()
+		<<" eta = " << eleItr->eta()
+		<<" phi = " << eleItr->phi()
+		<<" charge = " << eleItr->charge()
+		);
 
   ATH_MSG_DEBUG("Invariant mass  = " << m_invMass );
-
 }
diff --git a/PhysicsAnalysis/EventTag/TagEvent/TagEvent/GlobalEventAttributeNames.h b/PhysicsAnalysis/EventTag/TagEvent/TagEvent/GlobalEventAttributeNames.h
index 4e30cccaf2c1..4fdb5f9a9fc4 100755
--- a/PhysicsAnalysis/EventTag/TagEvent/TagEvent/GlobalEventAttributeNames.h
+++ b/PhysicsAnalysis/EventTag/TagEvent/TagEvent/GlobalEventAttributeNames.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef EVENTTAGALGS_GLOBALEVENTATTRIBUTENAMES_H
@@ -9,7 +9,7 @@
  Author - Ketevi A. Assamagan
  Feb 2006
 ****************************************/
-//#include "EventInfo/EventInfo.h"
+
 #include "AthenaPoolUtilities/AthenaAttributeSpecification.h"
 #include "GlobalGroupAndUnitNames.h"
 #include <string>
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
index d4f0ba0143d7..3eefb5f3d620 100644
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/CMakeLists.txt
@@ -20,7 +20,6 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           Control/AthenaKernel
                           Event/EventBookkeeperMetaData
-                          Event/EventInfo
                           Event/FourMomUtils
                           Event/xAOD/xAODEventInfo
                           Event/xAOD/xAODJet
@@ -35,7 +34,7 @@ atlas_add_component( LongLivedParticleDPDMaker
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps xAODCaloEvent xAODEgamma xAODMuon xAODTracking GaudiKernel MuonSelectorToolsLib TrigDecisionToolLib TrigObjectMatchingLib AthenaKernel EventBookkeeperMetaData EventInfo FourMomUtils xAODEventInfo xAODJet xAODMissingET )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps xAODCaloEvent xAODEgamma xAODMuon xAODTracking GaudiKernel MuonSelectorToolsLib TrigDecisionToolLib TrigObjectMatchingLib AthenaKernel EventBookkeeperMetaData FourMomUtils xAODEventInfo xAODJet xAODMissingET )
 
 # Install files from the package:
 atlas_install_headers( LongLivedParticleDPDMaker )
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
index 69a9a8025a46..0c6afed0b3a6 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef RPVLL_TESTRATES_H
@@ -15,6 +15,8 @@
 #include "GaudiKernel/IIncidentListener.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ITHistSvc.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "TH1.h"
 #include "TH2.h"
@@ -51,6 +53,8 @@ class RPVLLTestRates : public AthAlgorithm  {
    int m_lumiBlock;
    int m_evtNum;
    std::vector<int>         m_filterPassed;   
+
+   SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 #endif 
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
index e47f2a85be88..b60a32be4097 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
@@ -1,12 +1,10 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LongLivedParticleDPDMaker/RPVLLTestRates.h"
 #include "EventBookkeeperMetaData/EventBookkeeperCollection.h"
 #include "EventBookkeeperMetaData/SkimDecisionCollection.h" 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
 #include <iostream>
 
 
@@ -23,7 +21,6 @@ RPVLLTestRates::RPVLLTestRates(const std::string& name, ISvcLocator* pSvcLocator
   m_runNum(0),
   m_lumiBlock(0),
   m_evtNum(0)
-  //  m_filterPassed(0)
 {
 }
 
@@ -43,6 +40,8 @@ StatusCode RPVLLTestRates::initialize() {
   StatusCode sc = m_tHistSvc.retrieve();
   if (sc.isFailure()) return StatusCode::FAILURE;
 
+  ATH_CHECK( m_evt.initialize() );
+
   m_myTree= new TTree("myTree","myTree");
   sc = m_tHistSvc->regTree("/AANT/myTree",m_myTree);
   if (sc.isFailure()) msg(MSG::ERROR)<<"Failed to book TTree"<<endmsg;
@@ -94,19 +93,19 @@ StatusCode RPVLLTestRates::execute() {
 
   m_EventCounter++;
 
-  const EventInfo* eventInfo = nullptr;
-  StatusCode sc = evtStore()->retrieve(eventInfo);
-  if (sc.isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
+  if (!evt.isValid()) {
     ATH_MSG_ERROR( "Could not retrieve event info" );
+    return StatusCode::FAILURE;
   }
-  m_runNum     = eventInfo->event_ID()->run_number();
-  m_evtNum   = eventInfo->event_ID()->event_number();
-  m_lumiBlock     = eventInfo->event_ID()->lumi_block();
+  m_runNum    = evt->runNumber();
+  m_evtNum    = evt->eventNumber();
+  m_lumiBlock = evt->lumiBlock();
   
   
   //// these are the ones that are useful for RPVLL filters
   const SkimDecisionCollection *SDcoll = 0;
-  sc = evtStore()->retrieve(SDcoll, "StreamDESDM_RPVLL_SkimDecisionsContainer");
+  StatusCode sc = evtStore()->retrieve(SDcoll, "StreamDESDM_RPVLL_SkimDecisionsContainer");
   int isAc=0;
 
   if (sc.isSuccess()){
-- 
GitLab


From 4dec34b72b04675440d613ad09096708a6d027b1 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Fri, 15 Mar 2019 15:55:55 +0100
Subject: [PATCH 055/163] CaloIdentifier: Fix cppcheck warnings.

Fix cppcheck warnings, including:
  - Use preincrement in iteration;
  - Initialize members in an initializer list;
  - Pass std::string by reference;
  - Format string type match.
---
 .../CaloIdentifier/CaloCell_Base_ID.h         |  2 +-
 .../CaloIdentifier/CaloCell_Base_ID.icc       |  2 +-
 .../CaloIdentifier/CaloID_Exception.h         |  6 +-
 .../CaloIdentifier/CaloNeighbours.h           | 16 ++--
 .../CaloIdentifier/LArFCAL_Base_ID.h          |  8 +-
 .../CaloIdentifier/LArID_Exception.h          |  6 +-
 .../CaloIdentifier/LArMiniFCAL_ID.h           |  8 +-
 .../CaloIdentifier/TileID_Exception.h         |  6 +-
 .../CaloIdentifier/src/CaloCellGroup.cxx      |  7 +-
 .../CaloIdentifier/src/CaloHelpersTest.cxx    |  4 +-
 .../CaloIdentifier/src/CaloIDHelper.cxx       |  3 +-
 .../CaloIdentifier/src/CaloID_Exception.cxx   |  6 +-
 .../CaloIdentifier/src/CaloNeighbours.cxx     | 88 +++++--------------
 .../CaloIdentifier/src/LArEM_region.cxx       | 34 +++----
 .../CaloIdentifier/src/LArFCAL_Base_ID.cxx    |  2 +-
 .../CaloIdentifier/src/LArHEC_region.cxx      | 26 +++---
 .../CaloIdentifier/src/LArMiniFCAL_ID.cxx     |  2 +-
 .../CaloIdentifier/src/TileNeighbour.cxx      |  4 +-
 .../CaloIdentifier/test/CaloCell_ID_test.cxx  |  6 +-
 .../CaloIdentifier/test/LArEM_ID_test.cxx     |  6 +-
 .../CaloIdentifier/test/LArFCAL_ID_test.cxx   |  6 +-
 .../CaloIdentifier/test/LArHEC_ID_test.cxx    |  6 +-
 .../test/LArHEC_SuperCell_ID_test.cxx         |  6 +-
 .../test/LArMiniFCAL_ID_test.cxx              |  6 +-
 .../CaloIdentifier/test/TileID_test.cxx       |  6 +-
 .../test/jgtower_id_test_common.cxx           |  4 +-
 .../CaloIdentifier/test/test_cell_id.cxx      |  8 +-
 .../CaloIdentifier/test/test_lar_id.cxx       | 20 +----
 28 files changed, 109 insertions(+), 195 deletions(-)

diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.h
index 09686c48e588..5d5c4d7f8efb 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.h
@@ -71,7 +71,7 @@ public:
   ~CaloCell_Base_ID();
 
 
-  int GetSubCaloName( const std::string SubCaloName ) const;
+  int GetSubCaloName( const std::string& SubCaloName ) const;
 
   /// Initialization from the identifier dictionary
   virtual int         initialize_from_dictionary(const IdDictMgr& dict_mgr) override;
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.icc b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.icc
index dfee1d461ae3..17898761b685 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.icc
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_Base_ID.icc
@@ -980,7 +980,7 @@ inline float CaloCell_Base_ID::phi0(const Identifier regId) const
 }
 
 //---------------------------------------------------------------------------
-inline int CaloCell_Base_ID::GetSubCaloName(const std::string SubCaloName )const 
+inline int CaloCell_Base_ID::GetSubCaloName(const std::string& SubCaloName )const 
 {
   if(SubCaloName=="LAREM"){
     return(LAREM);
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloID_Exception.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloID_Exception.h
index 05e870582cb0..8b3962b0f4ce 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloID_Exception.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloID_Exception.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /* date of creation : 10/X/2002 */
@@ -28,12 +28,12 @@ public:
     /**
      * constructor to be used 
      */
-    CaloID_Exception(std::string  lMessage , int lCode) ;
+    CaloID_Exception(const std::string&  lMessage , int lCode);
 
     /**
      * set error message 
      */
-    void message(std::string lMessage) ;
+   void message(const std::string& lMessage);
 
     /**
      * return error message <br> 
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloNeighbours.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloNeighbours.h
index 5f18578f929a..7ce61e473a60 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloNeighbours.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloNeighbours.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef CALOIDENTIFIER_CALONEIGHBOURS_H
@@ -43,7 +43,7 @@ class CaloNeighbourRegion {
 
   enum {SIDE = 2, SAMPL = 3, REGION = 4, ETA = 5, PHI = 6, TILESECTION = 1, TILEPHI = 3, TILEETA = 4, TILESAMPL = 5, FCALETA = 4, FCALPHI = 5};
  
-  CaloNeighbourRegion(const std::string name,
+  CaloNeighbourRegion(const std::string& name,
                       const CaloCell_Base_ID * theCaloId);
 
   virtual ~CaloNeighbourRegion();
@@ -86,8 +86,8 @@ class CaloNeighbourRegion {
   bool m_isValidMinus,m_isValidPlus;
 
   IdentifierHash m_minHashMinus,m_maxHashMinus,m_minHashPlus,m_maxHashPlus;
-  std::vector< std::vector<IdentifierHash>* > m_neighbours_plus;
-  std::vector< std::vector<IdentifierHash>* > m_neighbours_minus;
+  std::vector< std::unique_ptr<std::vector<IdentifierHash> > > m_neighbours_plus;
+  std::vector< std::unique_ptr<std::vector<IdentifierHash> > > m_neighbours_minus;
 };
 
 class CaloNeighbours {
@@ -106,12 +106,14 @@ public:
 
   int get_prevInCalo(const IdentifierHash &id,std::vector<IdentifierHash>& neighbourList) const;
 
-  int get_neighbours(const IdentifierHash &id, const std::vector<CaloNeighbourRegion*> &regions, std::vector<IdentifierHash>& neighbourList) const;
+  int get_neighbours(const IdentifierHash &id,
+                     const std::vector<std::unique_ptr<CaloNeighbourRegion> > &regions,
+                     std::vector<IdentifierHash>& neighbourList) const;
 
  private:
   const CaloCell_Base_ID * m_calo_id;
 
-  std::vector<CaloNeighbourRegion*> m_next_regions;
-  std::vector<CaloNeighbourRegion*> m_prev_regions;
+  std::vector<std::unique_ptr<CaloNeighbourRegion> > m_next_regions;
+  std::vector<std::unique_ptr<CaloNeighbourRegion> > m_prev_regions;
 };
 #endif // CALOIDENTIFIER_CALONEIGHBOURS_H
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_Base_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_Base_ID.h
index ea7cdf5f1c16..63af168d53c3 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_Base_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_Base_ID.h
@@ -176,19 +176,19 @@ private:
   int         initLevelsFromDict(const std::string& group_name) ;
   int         init_hashes(void) ;
 
-  int         init_neighbours_from_file(std::string filename, std::vector<std::set<IdentifierHash> > &vec);
+  int         init_neighbours_from_file(const std::string& filename, std::vector<std::set<IdentifierHash> > &vec);
 
-  int         init_neighbours_2d(std::string filename)
+  int         init_neighbours_2d(const std::string& filename)
     { 
       return init_neighbours_from_file(filename, m_neighbours_2d_vec);
     }
 
-  int         init_neighbours_3d_next(std::string filename)
+  int         init_neighbours_3d_next(const std::string& filename)
     { 
       return init_neighbours_from_file(filename, m_neighbours_3d_next_vec);
     }
 
-  int         init_neighbours_3d_prev(std::string filename)
+  int         init_neighbours_3d_prev(const std::string& filename)
     { 
       return init_neighbours_from_file(filename, m_neighbours_3d_prev_vec);
     }
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArID_Exception.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArID_Exception.h
index c6e63c9d95cb..26d403aede1b 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArID_Exception.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArID_Exception.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /* Generated by Together */
@@ -28,12 +28,12 @@ public:
     /**
      * constructor to be used 
      */
-    LArID_Exception(std::string  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
+    LArID_Exception(const std::string&  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
 
     /**
      * set error message 
      */
-    void message(std::string l_message) { m_message = l_message ;}
+    void message(const std::string& l_message) { m_message = l_message ;}
 
     /**
      * return error message <br> 
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
index b3dc8a743352..4247f7c41fc6 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
@@ -222,19 +222,19 @@ private:
 
   int         init_hashes(void) ;
 
-  int         init_neighbors_from_file(std::string filename, std::vector<std::set<IdentifierHash> > &vec);
+  int         init_neighbors_from_file(const std::string& filename, std::vector<std::set<IdentifierHash> > &vec);
 
-  int         init_neighbors_2d(std::string filename)
+  int         init_neighbors_2d(const std::string& filename)
     { 
       return init_neighbors_from_file(filename, m_neighbors_2d_vec);
     }
 
-  int         init_neighbors_3d_next(std::string filename)
+  int         init_neighbors_3d_next(const std::string& filename)
     { 
       return init_neighbors_from_file(filename, m_neighbors_3d_next_vec);
     }
 
-  int         init_neighbors_3d_prev(std::string filename)
+  int         init_neighbors_3d_prev(const std::string& filename)
     { 
       return init_neighbors_from_file(filename, m_neighbors_3d_prev_vec);
     }
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/TileID_Exception.h b/Calorimeter/CaloIdentifier/CaloIdentifier/TileID_Exception.h
index 84489df4a6c0..02a3c9413de1 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/TileID_Exception.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/TileID_Exception.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILEID_EXCEPTION_H
@@ -24,12 +24,12 @@ public:
     /**
      * constructor to be used 
      */
-    TileID_Exception(std::string  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
+    TileID_Exception(const std::string&  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
 
     /**
      * set error message 
      */
-    void message(std::string l_message) { m_message = l_message ;}
+    void message(const std::string& l_message) { m_message = l_message ;}
 
     /**
      * return error message  
diff --git a/Calorimeter/CaloIdentifier/src/CaloCellGroup.cxx b/Calorimeter/CaloIdentifier/src/CaloCellGroup.cxx
index 1d7614720268..51943e5bf4f1 100644
--- a/Calorimeter/CaloIdentifier/src/CaloCellGroup.cxx
+++ b/Calorimeter/CaloIdentifier/src/CaloCellGroup.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "CaloIdentifier/CaloCellGroup.h"
@@ -289,10 +289,7 @@ void CaloCellGroupList::dump(const CaloCell_ID* caloCellId) {
     m_groups[i].printDef();
   }
   std::cout << "Results: "<< std::endl;
-  std::vector<Identifier>::const_iterator it=caloCellId->cell_begin();
-  std::vector<Identifier>::const_iterator it_e=caloCellId->cell_end();
-  for(;it!=it_e;it++) {
-    const Identifier id=(*it);
+  for (const Identifier& id : caloCellId->cell_range()) {
     std::cout << "Values for " << caloCellId->show_to_string(id); 
     const std::vector<float>& x=this->valuesForCell(id);
     std::cout << " [";
diff --git a/Calorimeter/CaloIdentifier/src/CaloHelpersTest.cxx b/Calorimeter/CaloIdentifier/src/CaloHelpersTest.cxx
index 3f1180950f7b..465a636d9e1d 100644
--- a/Calorimeter/CaloIdentifier/src/CaloHelpersTest.cxx
+++ b/Calorimeter/CaloIdentifier/src/CaloHelpersTest.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /*
  */
@@ -16,8 +16,8 @@
 
 
 CaloHelpersTest::CaloHelpersTest()
+  : m_parser (std::make_unique<IdDictParser>())
 {
-  m_parser = std::make_unique<IdDictParser>();
   m_parser->register_external_entity("LArCalorimeter", "IdDictLArCalorimeter.xml");
   IdDictMgr& idd = m_parser->parse("IdDictParser/ATLAS_IDS.xml");
   m_em_idHelper.set_quiet (true);
diff --git a/Calorimeter/CaloIdentifier/src/CaloIDHelper.cxx b/Calorimeter/CaloIdentifier/src/CaloIDHelper.cxx
index 57e3b11c3c20..f7074232d324 100644
--- a/Calorimeter/CaloIdentifier/src/CaloIDHelper.cxx
+++ b/Calorimeter/CaloIdentifier/src/CaloIDHelper.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id$
@@ -268,6 +268,7 @@ CaloIDHelper::fill_vec_of_dict_regions (const std::string& group_name /*= ""*/)
       m_vecOfDictRegions.push_back (m_dict->find_region(expRegId,group_name));
     }
   }
+  // cppcheck-suppress assertWithSideEffect
   assert (m_vecOfDictRegions.size() == regions().hash_max());
   return 0;
 }
diff --git a/Calorimeter/CaloIdentifier/src/CaloID_Exception.cxx b/Calorimeter/CaloIdentifier/src/CaloID_Exception.cxx
index 7c9d8d90cff4..9449fc91b124 100755
--- a/Calorimeter/CaloIdentifier/src/CaloID_Exception.cxx
+++ b/Calorimeter/CaloIdentifier/src/CaloID_Exception.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "CaloIdentifier/CaloID_Exception.h"
@@ -12,11 +12,11 @@ CaloID_Exception::CaloID_Exception() :
 m_message("No error message") , m_code( 999 ) 
 {  }
 
-CaloID_Exception::CaloID_Exception(std::string  lMessage , int lCode) : 
+CaloID_Exception::CaloID_Exception(const std::string&  lMessage , int lCode) : 
 m_message ( lMessage ) , m_code ( lCode ) 
 { }
 
-void CaloID_Exception::message(std::string lMessage) 
+void CaloID_Exception::message(const std::string& lMessage) 
 { m_message = lMessage ;}
 
 std::string CaloID_Exception::message() const 
diff --git a/Calorimeter/CaloIdentifier/src/CaloNeighbours.cxx b/Calorimeter/CaloIdentifier/src/CaloNeighbours.cxx
index ceed400254e9..7fd705fb8b56 100755
--- a/Calorimeter/CaloIdentifier/src/CaloNeighbours.cxx
+++ b/Calorimeter/CaloIdentifier/src/CaloNeighbours.cxx
@@ -39,10 +39,11 @@
 
 //###############################################################################
 
-CaloNeighbourRegion::CaloNeighbourRegion(const std::string name,
+CaloNeighbourRegion::CaloNeighbourRegion(const std::string& name,
                                          const CaloCell_Base_ID *theCaloId) :
+  m_name(name),
   m_type(nextInCalo),
-  m_calo_id(0),
+  m_calo_id(theCaloId),
   m_hasPhi(false),
   m_iPhiSource(0),
   m_iPhiTarget(0),
@@ -52,30 +53,12 @@ CaloNeighbourRegion::CaloNeighbourRegion(const std::string name,
   m_isValidMinus(false),
   m_isValidPlus(false)
 {
-  m_name = name;
-  m_calo_id = theCaloId;
 }
 
 //###############################################################################
 
 CaloNeighbourRegion::~CaloNeighbourRegion()
 {
-  std::vector< std::vector<IdentifierHash>* >::iterator nIter = m_neighbours_plus.begin();
-  std::vector< std::vector<IdentifierHash>* >::iterator nIterEnd = m_neighbours_plus.end();
-  for(; nIter != nIterEnd; nIter++ ) {
-    if ( (*nIter) ) {
-      delete (*nIter);
-      (*nIter) = 0;
-    }
-  }
-  nIter = m_neighbours_minus.begin();
-  nIterEnd = m_neighbours_minus.end();
-  for(; nIter != nIterEnd; nIter++ ) {
-    if ( (*nIter) ) {
-      delete (*nIter);
-      (*nIter) = 0;
-    }
-  }
 }
 
 //###############################################################################
@@ -231,12 +214,10 @@ int CaloNeighbourRegion::setNeighbours(ExpandedIdentifier& id1,
       // get hash ID's for the source 
       IdentifierHash myHash = m_calo_id->calo_cell_hash (myId);
       // get ID's and hash ID's for the target
-      std::vector<ExpandedIdentifier>::const_iterator idIter    = id2.begin();
-      std::vector<ExpandedIdentifier>::const_iterator idIterEnd = id2.end();
       std::vector<IdentifierHash> theTargetHashIDs;
-      for ( ; idIter != idIterEnd; idIter++ ) {
+      for (const ExpandedIdentifier& eid : id2) {
 	Identifier myTargetId;
-	ExpandedIdentifier myNExpID(*idIter);
+	ExpandedIdentifier myNExpID(eid);
 	if ( getId(myNExpID,myTargetId,m_targetRange,side,dphi2) ) {
 	  return 1;
 	}
@@ -260,25 +241,19 @@ int CaloNeighbourRegion::setNeighbours(ExpandedIdentifier& id1,
 void  CaloNeighbourRegion::initializeVectors(std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>& neighbourMapPlus, std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>& neighbourMapMinus)
 {
   if ( m_isValidMinus ) {
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_iterator first = neighbourMapMinus.begin();
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_iterator end = neighbourMapMinus.end();
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_reverse_iterator last = neighbourMapMinus.rbegin();
-    m_minHashMinus = (*first).first;
-    m_maxHashMinus = (*last).first;
-    m_neighbours_minus.resize((unsigned int)(m_maxHashMinus-m_minHashMinus+1),0);
-    for(;first != end;first++) {
-      m_neighbours_minus[(unsigned int)((*first).first-m_minHashMinus)] = new std::vector<IdentifierHash>((*first).second);
+    m_minHashMinus = neighbourMapMinus.begin()->first;
+    m_maxHashMinus = neighbourMapMinus.rbegin()->first;
+    m_neighbours_minus.resize((unsigned int)(m_maxHashMinus-m_minHashMinus+1));
+    for (const auto& p : neighbourMapMinus) {
+      m_neighbours_minus[(unsigned int)(p.first-m_minHashMinus)] = std::make_unique<std::vector<IdentifierHash> >(p.second);
     }
   }
   if ( m_isValidPlus ) {
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_iterator first = neighbourMapPlus.begin();
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_iterator end = neighbourMapPlus.end();
-    std::map<IdentifierHash, std::vector<IdentifierHash>, ltIdHash>::const_reverse_iterator last = neighbourMapPlus.rbegin();
-    m_minHashPlus = (*first).first;
-    m_maxHashPlus = (*last).first;
-    m_neighbours_plus.resize((unsigned int)(m_maxHashPlus-m_minHashPlus+1),0);
-    for(;first != end;first++) {
-      m_neighbours_plus[(unsigned int)((*first).first-m_minHashPlus)] = new std::vector<IdentifierHash>((*first).second);
+    m_minHashPlus = neighbourMapPlus.begin()->first;
+    m_maxHashPlus = neighbourMapPlus.rbegin()->first;
+    m_neighbours_plus.resize((unsigned int)(m_maxHashPlus-m_minHashPlus+1));
+    for (const auto& p : neighbourMapPlus) {
+      m_neighbours_plus[(unsigned int)(p.first-m_minHashPlus)] = std::make_unique<std::vector<IdentifierHash> >(p.second);
     }
   }
 
@@ -315,23 +290,6 @@ CaloNeighbours::CaloNeighbours() :
 
 CaloNeighbours::~CaloNeighbours()
 {
-  std::vector<CaloNeighbourRegion*>::iterator rIter    = m_next_regions.begin();
-  std::vector<CaloNeighbourRegion*>::iterator rIterEnd = m_next_regions.end();
-  for(; rIter != rIterEnd; rIter++ ) {
-    if ((*rIter)) {
-      delete (*rIter);
-      (*rIter) = 0;
-    }
-  }
-
-  rIter    = m_prev_regions.begin();
-  rIterEnd = m_prev_regions.end();
-  for(; rIter != rIterEnd; rIter++ ) {
-    if ((*rIter)) {
-      delete (*rIter);
-      (*rIter) = 0;
-    }
-  }
 }
 
 //###############################################################################
@@ -430,7 +388,7 @@ int CaloNeighbours::initialize(const CaloCell_Base_ID* caloID,
 //	}
 //	std::cout << std::endl;
 	// create new CaloNeighbourRegion
-	CaloNeighbourRegion * myRegion = new CaloNeighbourRegion(cName,m_calo_id);
+	auto myRegion = std::make_unique<CaloNeighbourRegion>(cName,m_calo_id);
 	if ( isNext )
 	  myRegion->setType(nextInCalo);
 	else
@@ -473,9 +431,9 @@ int CaloNeighbours::initialize(const CaloCell_Base_ID* caloID,
 	} while (!fin.eof() && !endOfBlock);
 	myRegion->initializeVectors(neighbourMapPlus,neighbourMapMinus);
 	if (isNext) 
-	  m_next_regions.push_back(myRegion);
+	  m_next_regions.push_back(std::move(myRegion));
 	else
-	  m_prev_regions.push_back(myRegion);
+	  m_prev_regions.push_back(std::move(myRegion));
       }
       else {
 	std::cout << "CaloNeighbours::initialize ERROR Invalid neighbour dat file, exiting ... " << std::endl;
@@ -504,13 +462,13 @@ int CaloNeighbours::get_prevInCalo(const IdentifierHash &id,std::vector<Identifi
 
 //###############################################################################
 
-int CaloNeighbours::get_neighbours(const IdentifierHash &id, const std::vector<CaloNeighbourRegion*> &regions, std::vector<IdentifierHash>& neighbourList) const
+int CaloNeighbours::get_neighbours(const IdentifierHash &id,
+                                   const std::vector<std::unique_ptr<CaloNeighbourRegion> > &regions,
+                                   std::vector<IdentifierHash>& neighbourList) const
 {
   int result = 0;
-  std::vector<CaloNeighbourRegion*>::const_iterator rIter    = regions.begin();
-  std::vector<CaloNeighbourRegion*>::const_iterator rIterEnd = regions.end();
-  for(; rIter != rIterEnd; rIter++ ) {
-    result = (*rIter)->getNeighbours(id,neighbourList);
+  for (const std::unique_ptr<CaloNeighbourRegion>& p : regions) {
+    result = p->getNeighbours(id,neighbourList);
     if ( result != 0 )
       return result;
   }
diff --git a/Calorimeter/CaloIdentifier/src/LArEM_region.cxx b/Calorimeter/CaloIdentifier/src/LArEM_region.cxx
index 9effee8da571..ba35d0b5e298 100755
--- a/Calorimeter/CaloIdentifier/src/LArEM_region.cxx
+++ b/Calorimeter/CaloIdentifier/src/LArEM_region.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArEM_region.h"
@@ -28,24 +28,24 @@ LArEM_region::LArEM_region(unsigned int& minHash, short int& nbEtaBins, short in
 			   float minEta, float granulEta, float minPhi, float granulPhi, bool fullSym, bool isBarrelMiddle,
 			   short int& prevEtaReg, short int& nextEtaReg, 
 			   std::vector<short int>& prevSampReg, std::vector<short int>& nextSampReg,
-			   std::vector<short int>& prevSubdetReg, std::vector<short int>& nextSubdetReg)    
+			   std::vector<short int>& prevSubdetReg, std::vector<short int>& nextSubdetReg)
+  : m_hashMin             (minHash),
+    m_nbEtaBins           (nbEtaBins),
+    m_nPhi                (nPhi),
+    m_minEta              (minEta),
+    m_granulEta           (granulEta),
+    m_minPhi              (minPhi),
+    m_granulPhi           (granulPhi),
+    m_fullSym             (fullSym),
+    m_isFirstBarrelRegion (isBarrelMiddle),
+    m_prevEtaReg          (prevEtaReg),
+    m_nextEtaReg          (nextEtaReg),
+    m_prevSampReg         (prevSampReg),
+    m_nextSampReg         (nextSampReg),
+    m_prevSubdetReg       (prevSubdetReg),
+    m_nextSubdetReg       (nextSubdetReg)
 {
  
-  m_hashMin             = minHash;
-  m_nbEtaBins           = nbEtaBins;
-  m_minEta              = minEta;
-  m_granulEta           = granulEta;
-  m_minPhi              = minPhi;
-  m_granulPhi           = granulPhi;
-  m_nPhi                = nPhi;
-  m_fullSym             = fullSym;
-  m_isFirstBarrelRegion = isBarrelMiddle;
-  m_prevEtaReg          = prevEtaReg;
-  m_nextEtaReg          = nextEtaReg;
-  m_prevSampReg         = prevSampReg;
-  m_nextSampReg         = nextSampReg;
-  m_prevSubdetReg       = prevSubdetReg;
-  m_nextSubdetReg       = nextSubdetReg;
  
 }
 
diff --git a/Calorimeter/CaloIdentifier/src/LArFCAL_Base_ID.cxx b/Calorimeter/CaloIdentifier/src/LArFCAL_Base_ID.cxx
index 552ad48abcea..88b00023daba 100755
--- a/Calorimeter/CaloIdentifier/src/LArFCAL_Base_ID.cxx
+++ b/Calorimeter/CaloIdentifier/src/LArFCAL_Base_ID.cxx
@@ -604,7 +604,7 @@ int   LArFCAL_Base_ID::get_neighbours(const IdentifierHash id, const LArNeighbou
   return result;
 }
 
-int         LArFCAL_Base_ID::init_neighbours_from_file(std::string filename, std::vector<std::set<IdentifierHash> > & vec)
+int         LArFCAL_Base_ID::init_neighbours_from_file(const std::string& filename, std::vector<std::set<IdentifierHash> > & vec)
 {
   MsgStream log(m_msgSvc, "LArFCAL_Base_ID" );
 
diff --git a/Calorimeter/CaloIdentifier/src/LArHEC_region.cxx b/Calorimeter/CaloIdentifier/src/LArHEC_region.cxx
index 0408316c927e..12f8cd667605 100755
--- a/Calorimeter/CaloIdentifier/src/LArHEC_region.cxx
+++ b/Calorimeter/CaloIdentifier/src/LArHEC_region.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHEC_region.h"
@@ -26,20 +26,20 @@ LArHEC_region::LArHEC_region(unsigned int& minHash, short int& nbEtaBins, short
 			     float minEta, float granulEta, float minPhi, float granulPhi, bool fullSym,
 			     short int& prevEtaReg, short int& nextEtaReg, 
 			     std::vector<short int>& prevSampReg, std::vector<short int>& nextSampReg)
+  : m_hashMin    (minHash),
+    m_nbEtaBins  (nbEtaBins),
+    m_nPhi       (nPhi),
+    m_minEta     (minEta),
+    m_granulEta  (granulEta),
+    m_minPhi     (minPhi),
+    m_granulPhi  (granulPhi),
+    m_fullSym    (fullSym),
+    m_prevEtaReg (prevEtaReg),
+    m_nextEtaReg (nextEtaReg),
+    m_prevSampReg(prevSampReg),
+    m_nextSampReg(nextSampReg)
 {
  
-  m_hashMin     = minHash;
-  m_nbEtaBins   = nbEtaBins;
-  m_minEta      = minEta;
-  m_granulEta   = granulEta;
-  m_minPhi      = minPhi;
-  m_granulPhi   = granulPhi;
-  m_nPhi        = nPhi;
-  m_fullSym     = fullSym;
-  m_prevEtaReg  = prevEtaReg;
-  m_nextEtaReg  = nextEtaReg;
-  m_prevSampReg = prevSampReg;
-  m_nextSampReg = nextSampReg;
  
 }
 
diff --git a/Calorimeter/CaloIdentifier/src/LArMiniFCAL_ID.cxx b/Calorimeter/CaloIdentifier/src/LArMiniFCAL_ID.cxx
index 909376d2351d..c970bbfd0cba 100644
--- a/Calorimeter/CaloIdentifier/src/LArMiniFCAL_ID.cxx
+++ b/Calorimeter/CaloIdentifier/src/LArMiniFCAL_ID.cxx
@@ -650,7 +650,7 @@ int         LArMiniFCAL_ID::init_hashes(void)
 }
 
 
-int         LArMiniFCAL_ID::init_neighbors_from_file(std::string filename, std::vector<std::set<IdentifierHash> > & vec)
+int         LArMiniFCAL_ID::init_neighbors_from_file(const std::string& filename, std::vector<std::set<IdentifierHash> > & vec)
 {
   MsgStream log(m_msgSvc, "LArMiniFCAL_ID" );
 
diff --git a/Calorimeter/CaloIdentifier/src/TileNeighbour.cxx b/Calorimeter/CaloIdentifier/src/TileNeighbour.cxx
index 835776a7ae72..cde6b742ea91 100755
--- a/Calorimeter/CaloIdentifier/src/TileNeighbour.cxx
+++ b/Calorimeter/CaloIdentifier/src/TileNeighbour.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -40,7 +40,7 @@ typedef struct
 {
   Identifier id;
   IdentifierHash hash_id;
-  short int index;
+  short int index = 0;
 
   std::string name;
   std::vector<std::string> neighbours[4];
diff --git a/Calorimeter/CaloIdentifier/test/CaloCell_ID_test.cxx b/Calorimeter/CaloIdentifier/test/CaloCell_ID_test.cxx
index 19ac74a36c16..13e740b0f925 100644
--- a/Calorimeter/CaloIdentifier/test/CaloCell_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/CaloCell_ID_test.cxx
@@ -41,11 +41,7 @@ void test_neighbours (const CaloCell_ID& calo_id)
     std::vector<IdentifierHash> neighbourList;
     assert (calo_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList)
             == 0);
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-	  
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       assert (hash_min <= neighbourHash && neighbourHash <= hash_max);
     }
   }
diff --git a/Calorimeter/CaloIdentifier/test/LArEM_ID_test.cxx b/Calorimeter/CaloIdentifier/test/LArEM_ID_test.cxx
index 848417883a56..e6369c07f635 100644
--- a/Calorimeter/CaloIdentifier/test/LArEM_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/LArEM_ID_test.cxx
@@ -55,11 +55,7 @@ void test4 (const LArEM_ID& em_id)
   for (unsigned int iCell = 0 ; iCell < em_id.channel_hash_max(); ++iCell){
     em_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/LArFCAL_ID_test.cxx b/Calorimeter/CaloIdentifier/test/LArFCAL_ID_test.cxx
index ebf0f640f8af..ba939b242b4e 100644
--- a/Calorimeter/CaloIdentifier/test/LArFCAL_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/LArFCAL_ID_test.cxx
@@ -43,11 +43,7 @@ void test4 (const LArFCAL_ID& fcal_id)
   for (unsigned int iCell = 0 ; iCell < fcal_id.channel_hash_max(); ++iCell){
     fcal_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/LArHEC_ID_test.cxx b/Calorimeter/CaloIdentifier/test/LArHEC_ID_test.cxx
index 05b360ba84c8..f2e40652d22e 100644
--- a/Calorimeter/CaloIdentifier/test/LArHEC_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/LArHEC_ID_test.cxx
@@ -54,11 +54,7 @@ void test_neighbors (const LArHEC_ID& idhelper)
   for (unsigned int iCell = 0 ; iCell < idhelper.channel_hash_max(); ++iCell){
     idhelper.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/LArHEC_SuperCell_ID_test.cxx b/Calorimeter/CaloIdentifier/test/LArHEC_SuperCell_ID_test.cxx
index 0b49c4b09051..c7c8f87ad5e3 100644
--- a/Calorimeter/CaloIdentifier/test/LArHEC_SuperCell_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/LArHEC_SuperCell_ID_test.cxx
@@ -52,11 +52,7 @@ void test_neighbors (const LArHEC_SuperCell_ID& idhelper)
   for (unsigned int iCell = 0 ; iCell < idhelper.channel_hash_max(); ++iCell){
     idhelper.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/LArMiniFCAL_ID_test.cxx b/Calorimeter/CaloIdentifier/test/LArMiniFCAL_ID_test.cxx
index 7861d1d7baff..fae19f14526b 100644
--- a/Calorimeter/CaloIdentifier/test/LArMiniFCAL_ID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/LArMiniFCAL_ID_test.cxx
@@ -218,11 +218,7 @@ void test_neighbors (const LArMiniFCAL_ID& idhelper)
   for (unsigned int iCell = 0 ; iCell < idhelper.channel_hash_max(); ++iCell){
     idhelper.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/TileID_test.cxx b/Calorimeter/CaloIdentifier/test/TileID_test.cxx
index 6f0a36028d28..463188216365 100644
--- a/Calorimeter/CaloIdentifier/test/TileID_test.cxx
+++ b/Calorimeter/CaloIdentifier/test/TileID_test.cxx
@@ -81,11 +81,7 @@ void test_neighbors (const TileID& idhelper)
   for (unsigned int iCell = 0 ; iCell < idhelper.cell_hash_max(); ++iCell){
     idhelper.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-    std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-    std::vector<IdentifierHash>::iterator last=neighbourList.end();
-    for (;last!=first; first++){
-      
-      IdentifierHash neighbourHash=(*first);
+    for (IdentifierHash neighbourHash : neighbourList) {
       if(neighbourHash < hash_min ) {
         hash_min = neighbourHash;
       }
diff --git a/Calorimeter/CaloIdentifier/test/jgtower_id_test_common.cxx b/Calorimeter/CaloIdentifier/test/jgtower_id_test_common.cxx
index 0067c53df4c4..583a078328bd 100644
--- a/Calorimeter/CaloIdentifier/test/jgtower_id_test_common.cxx
+++ b/Calorimeter/CaloIdentifier/test/jgtower_id_test_common.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id$
@@ -70,7 +70,7 @@ void CellCounter::report()
 {
   int towerSum = 0;
   for(int regI=0; regI<N_REG; ++regI){
-    printf ("Region %2d: %6d\n", regI, m_counts[regI]);
+    printf ("Region %2d: %6u\n", regI, m_counts[regI]);
     towerSum+=m_counts[regI];
   }
   printf ("Total: %6d\n", towerSum);
diff --git a/Calorimeter/CaloIdentifier/test/test_cell_id.cxx b/Calorimeter/CaloIdentifier/test/test_cell_id.cxx
index 4438a617c3c1..7e6a669999e4 100755
--- a/Calorimeter/CaloIdentifier/test/test_cell_id.cxx
+++ b/Calorimeter/CaloIdentifier/test/test_cell_id.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Header: /build/atlas/cvs/atlas/offline/Calorimeter/CaloIdentifier/test/test_cell_id.cxx,v 1.19 2006-03-20 20:32:50 ssnyder Exp $ 
@@ -568,11 +568,7 @@ check_cell_neighbours(IdDictMgr& idd)
 	std::cout << "return code of get_neighbours not ok for iCell = " << iCell << "cellId = " << calo_id->show_to_string(cellId) << std::endl;
       }
       else {
-	std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-	std::vector<IdentifierHash>::iterator last=neighbourList.end();
-	for (;last!=first; first++){
-	  
-	  IdentifierHash neighbourHash=(*first);
+        for (IdentifierHash neighbourHash : neighbourList) {
 	  if(neighbourHash < hash_min || neighbourHash > hash_max) {
 	    std::cout << " neighbour index " << neighbourHash << " outside of det boundaries for iCell " << iCell << std::endl;
 	    error = true;
diff --git a/Calorimeter/CaloIdentifier/test/test_lar_id.cxx b/Calorimeter/CaloIdentifier/test/test_lar_id.cxx
index 90992010687c..d0f80f52b303 100755
--- a/Calorimeter/CaloIdentifier/test/test_lar_id.cxx
+++ b/Calorimeter/CaloIdentifier/test/test_lar_id.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Header: /build/atlas/cvs/atlas/offline/Calorimeter/CaloIdentifier/test/test_lar_id.cxx,v 1.25 2007-02-19 15:56:25 fledroit Exp $ 
@@ -1695,11 +1695,7 @@ static void check_lar_neighbour(IdDictMgr& idd)
 
       em_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList);
 
-      std::vector<IdentifierHash>::iterator first=neighbourList.begin();
-      std::vector<IdentifierHash>::iterator last=neighbourList.end();
-      for (;last!=first; first++){
-	
-	IdentifierHash neighbourHash=(*first);
+      for (IdentifierHash neighbourHash : neighbourList) {
 	if(neighbourHash < hash_min ) {
 	  hash_min = neighbourHash;
 	}
@@ -1738,11 +1734,7 @@ static void check_lar_neighbour(IdDictMgr& idd)
 
       hec_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList2);
 
-      std::vector<IdentifierHash>::iterator first=neighbourList2.begin();
-      std::vector<IdentifierHash>::iterator last=neighbourList2.end();
-      for (;last!=first; first++){
-	
-	IdentifierHash neighbourHash=(*first);
+      for (IdentifierHash neighbourHash : neighbourList2) {
 	if(neighbourHash < hash_min2 ) {
 	  hash_min2 = neighbourHash;
 	}
@@ -1781,11 +1773,7 @@ static void check_lar_neighbour(IdDictMgr& idd)
 
       fcal_id.get_neighbours(iCell, LArNeighbours::all3D, neighbourList3);
 
-      std::vector<IdentifierHash>::iterator first=neighbourList3.begin();
-      std::vector<IdentifierHash>::iterator last=neighbourList3.end();
-      for (;last!=first; first++){
-	
-	IdentifierHash neighbourHash=(*first);
+      for (IdentifierHash neighbourHash : neighbourList3) {
 	if(neighbourHash < hash_min3 ) {
 	  hash_min3 = neighbourHash;
 	}
-- 
GitLab


From 11806a387cbe140f1a2ce792bd80be06dbf454d1 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Fri, 15 Mar 2019 15:56:22 +0100
Subject: [PATCH 056/163] LArIdentifier: Enable thread-safety checker.

Enable thread-safety static checker.
---
 .../LArIdentifier/LArIdentifier/ATLAS_CHECK_THREAD_SAFETY        | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 LArCalorimeter/LArIdentifier/LArIdentifier/ATLAS_CHECK_THREAD_SAFETY

diff --git a/LArCalorimeter/LArIdentifier/LArIdentifier/ATLAS_CHECK_THREAD_SAFETY b/LArCalorimeter/LArIdentifier/LArIdentifier/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 000000000000..d428f4b1dec4
--- /dev/null
+++ b/LArCalorimeter/LArIdentifier/LArIdentifier/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+LArCalorimeter/LArIdentifier
-- 
GitLab


From cefe141f3b6885e2d8166ab93a983fbf9c831919 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Fri, 15 Mar 2019 15:56:44 +0100
Subject: [PATCH 057/163] TileIdentifier: Enable thread-safety static checker.

Enable thread-safety static checker.
---
 .../TileIdentifier/TileIdentifier/ATLAS_CHECK_THREAD_SAFETY      | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 TileCalorimeter/TileIdentifier/TileIdentifier/ATLAS_CHECK_THREAD_SAFETY

diff --git a/TileCalorimeter/TileIdentifier/TileIdentifier/ATLAS_CHECK_THREAD_SAFETY b/TileCalorimeter/TileIdentifier/TileIdentifier/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 000000000000..1f78367fb36b
--- /dev/null
+++ b/TileCalorimeter/TileIdentifier/TileIdentifier/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+TileCalorimeter/TileIdentifier
-- 
GitLab


From 6bf50f313ee8ab2797dbb06a5ec76f6d7eebaf3d Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Tue, 12 Mar 2019 14:55:47 +0100
Subject: [PATCH 058/163] TrigOutputHandling: Fix compilation to clang.

Streaming operators should live within the namespace of the class they're streaming.
Best not to define stream operators for types in std::; use formatting
functions instead.
---
 .../src/HLTResultMTMaker.cxx                  | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
index 870b0f171bac..48618245884d 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
+++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTResultMTMaker.cxx
@@ -5,6 +5,7 @@
 #include "TrigOutputHandling/HLTResultMTMaker.h"
 #include "AthenaMonitoring/Monitored.h"
 #include "GaudiKernel/IJobOptionsSvc.h"
+#include <sstream>
 
 // Local helpers
 namespace {
@@ -32,15 +33,17 @@ namespace {
     return removedIds;
   }
   /// Print helper for set<uint32_t>
-  std::ostream& operator<<(std::ostream& str, const std::set<uint32_t>& set) {
+  std::string format(const std::set<uint32_t>& set) {
+    std::ostringstream ss;
     for (const uint32_t id : set)
-      str << "0x" << std::hex << std::setfill('0') << std::setw(8) << id << std::dec << " ";
-    return str;
+      ss << "0x" << std::hex << std::setfill('0') << std::setw(8) << id << std::dec << " ";
+    return ss.str();
   }
   /// Print helper for set<eformat::SubDetector>
-  std::ostream& operator<<(std::ostream& str, const std::set<eformat::SubDetector>& set) {
-    for (const eformat::SubDetector id : set) str << eformat::helper::SubDetectorDictionary.string(id) << " ";
-    return str;
+  std::string format(const std::set<eformat::SubDetector>& set) {
+    std::ostringstream ss;
+    for (const eformat::SubDetector id : set) ss << eformat::helper::SubDetectorDictionary.string(id) << " ";
+    return ss.str();
   }
 }
 
@@ -161,14 +164,14 @@ void HLTResultMTMaker::validatePEBInfo(HLT::HLTResultMT& hltResult) const {
   for (eformat::helper::StreamTag& st : hltResult.getStreamTagsNonConst()) {
     std::set<uint32_t> removedROBs = removeDisabled(st.robs,m_enabledROBs);
     if (!removedROBs.empty())
-      ATH_MSG_WARNING("StreamTag " << st.type << "_" << st.name << " requested disabled ROBs: " << removedROBs
+      ATH_MSG_WARNING("StreamTag " << st.type << "_" << st.name << " requested disabled ROBs: " << format(removedROBs)
                       << " - these ROBs were removed from the StreamTag by " << name());
     else
       ATH_MSG_VERBOSE("No disabled ROBs were requested by StreamTag " << st.type << "_" << st.name);
 
     std::set<eformat::SubDetector> removedSubDets = removeDisabled(st.dets,m_enabledSubDets);
     if (!removedSubDets.empty())
-      ATH_MSG_WARNING("StreamTag " << st.type << "_" << st.name << " requested disabled SubDets: " << removedSubDets
+      ATH_MSG_WARNING("StreamTag " << st.type << "_" << st.name << " requested disabled SubDets: " << format(removedSubDets)
                       << " - these SubDets were removed from the StreamTag by " << name());
     else
       ATH_MSG_VERBOSE("No disabled SubDets were requested by StreamTag " << st.type << "_" << st.name);
-- 
GitLab


From 5f8e536b63f06ecde2a10654b3686b9d1b7f57b2 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Sat, 16 Mar 2019 15:46:25 +0000
Subject: [PATCH 059/163] Remove dictionary rule for deleted class
 ILArBadChanTool

---
 .../LArBadChannelTool/LArBadChannelTool/selection.xml          | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/LArCalorimeter/LArBadChannelTool/LArBadChannelTool/selection.xml b/LArCalorimeter/LArBadChannelTool/LArBadChannelTool/selection.xml
index 92958d1cba7a..f4342b557b39 100644
--- a/LArCalorimeter/LArBadChannelTool/LArBadChannelTool/selection.xml
+++ b/LArCalorimeter/LArBadChannelTool/LArBadChannelTool/selection.xml
@@ -27,8 +27,5 @@
 <class name="std::pair<bool,LArBadChannelEnum::ProblemType>"/> 
 
 <class name="ILArBadChannelMasker"/>
-<class name="ILArBadChanTool"/>
-<!-- <class name="LArBadChannelMasker"/> -->
-<!-- <class name="LArBadChanTool"/> -->
 
 </lcgdict>
-- 
GitLab


From 4e068bcb9684dcb25689b49b87a4ee54ba82ccc5 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Sat, 16 Mar 2019 16:44:28 +0100
Subject: [PATCH 060/163] TrigT1Interfaces: Make RoIDecoder interfaces const.

Rework CPRoIDecoder and JEPRoIDecoder to make interfaces const, removing
all data-dependent data members.
---
 .../TrigT1Interfaces/CPRoIDecoder.h           |  28 +--
 .../TrigT1Interfaces/JEPRoIDecoder.h          |  82 +++----
 .../TrigT1Interfaces/RoIDecoder.h             |  22 +-
 .../TrigT1Interfaces/src/CPRoIDecoder.cxx     | 105 ++++----
 .../TrigT1Interfaces/src/JEPRoIDecoder.cxx    | 232 ++++++++----------
 .../TrigT1Interfaces/src/RecEmTauRoI.cxx      |   4 +-
 .../TrigT1Interfaces/src/RecEnergyRoI.cxx     |  23 +-
 .../TrigT1/TrigT1Interfaces/src/RecJetRoI.cxx |   4 +-
 .../TrigT1Interfaces/src/RoIDecoder.cxx       |  70 +-----
 9 files changed, 194 insertions(+), 376 deletions(-)

diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CPRoIDecoder.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CPRoIDecoder.h
index 6a8411527998..2d02c45257d9 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CPRoIDecoder.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CPRoIDecoder.h
@@ -1,6 +1,6 @@
 // Dear emacs, this is -*- c++ -*-
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          CPRoIDecoder.h  -  description
@@ -39,28 +39,18 @@ namespace LVL1 {
       TrigT1CaloDefs::RoIType roiType( unsigned int word ) const;
 
       /** RoI coordinate information */
-      CoordinateRange coordinate( const unsigned int roiWord );
-      unsigned int crate( const unsigned int roiWord );
-      unsigned int module( const unsigned int roiWord );
-      unsigned int chip( const unsigned int roiWord );
-      unsigned int localcoord( const unsigned int roiWord );
+      virtual CoordinateRange coordinate( const unsigned int roiWord ) const override;
+      unsigned int crate( const unsigned int roiWord ) const;
+      unsigned int module( const unsigned int roiWord ) const;
+      unsigned int chip( const unsigned int roiWord ) const;
+      unsigned int localcoord( const unsigned int roiWord ) const;
 
       /** Thresholds passed (Run 1 RoIs) */
-      const std::vector< unsigned int >& thresholdsPassed( const unsigned int word );
+      const std::vector< unsigned int > thresholdsPassed( const unsigned int word ) const;
       
       /** ET and Isolation information (Run 2 RoIs) */
-      unsigned int et( const unsigned int roiWord );
-      unsigned int isolationWord( const unsigned int roiWord );
-      
-   protected:
-      /** get information from CP RoI word and store in member variables. */
-      void decodeWord( const unsigned int word );
-
-   private:
-      unsigned int m_cpm;
-      unsigned int m_cp;
-      unsigned int m_lc;
-
+      unsigned int et( const unsigned int roiWord ) const;
+      unsigned int isolationWord( const unsigned int roiWord ) const;
    }; // class CPRoIDecoder
 
 } // namespace LVL1
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/JEPRoIDecoder.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/JEPRoIDecoder.h
index e90fb62c1728..0969e074d926 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/JEPRoIDecoder.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/JEPRoIDecoder.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          JEPRoIDecoder.h  -  description
@@ -37,85 +37,63 @@ namespace LVL1 {
     unsigned int jetRoIVersion( unsigned int word ) const;
 
     /** Return eta/phi coordinate object */
-    CoordinateRange coordinate( const unsigned int roiWord );
+    virtual CoordinateRange coordinate( const unsigned int roiWord ) const override;
     /** Return hardware coordinates */
-    unsigned int crate( const unsigned int word );
-    unsigned int module( const unsigned int word );
-    unsigned int row( const unsigned int word );
-    unsigned int column( const unsigned int word );
+    unsigned int crate( const unsigned int word ) const;
+    unsigned int module( const unsigned int word ) const;
+    unsigned int row( const unsigned int word ) const;
+    unsigned int column( const unsigned int word ) const;
     /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5
         it means that this RoI passed thresholds 1,3 and 5.*/
-    const std::vector< unsigned int >& thresholdsPassed( const unsigned int word );
-    std::vector<unsigned int>& fwdThresholdsPassed( const unsigned int word );
+    const std::vector< unsigned int > thresholdsPassed( const unsigned int word ) const;
+    const std::vector<unsigned int> fwdThresholdsPassed( const unsigned int word ) const;
     
     /** Return ET values from Run 2 Jet RoIs */
-    unsigned int etLarge( const unsigned int word );
-    unsigned int etSmall( const unsigned int word );
+    unsigned int etLarge( const unsigned int word ) const;
+    unsigned int etSmall( const unsigned int word ) const;
     
     /** returns the (signed) Ex energy projection. If the RoIWord looks invalid, then zero will be returned. */
-    int energyX( unsigned int energyRoIWord0 );
+    int energyX( unsigned int energyRoIWord0 ) const;
     /** returns the (signed) Ex energy projection. If the RoIWord looks invalid, then zero will be returned. */
-    int energyY( unsigned int energyRoIWord1 );
+    int energyY( unsigned int energyRoIWord1 ) const;
     /** returns the (signed) Ex energy projection. If the RoIWord looks invalid, then zero will be returned. */
-    int energyT( unsigned int energyRoIWord2 );
+    int energyT( unsigned int energyRoIWord2 ) const;
     /** returns overflow flag energy RoIWord */
-    bool energyOverflow( unsigned int energyRoIWord );
+    bool energyOverflow( unsigned int energyRoIWord ) const;
     /** returns a vector containing the numbers of threshold passed
     i.e. if the vector contains 1,3,5 it means that this RoI passed thresholds 1,3 and 5.*/
-    std::vector<unsigned int>& mEtSigThresholdsPassed( const unsigned int energyRoIWord0 );
+    std::vector<unsigned int> mEtSigThresholdsPassed( const unsigned int energyRoIWord0 ) const;
     /** returns a vector containing the numbers of threshold passed
     i.e. if the vector contains 1,3,5 it means that this RoI passed thresholds 1,3 and 5.*/
-    std::vector<unsigned int>& etSumThresholdsPassed( const unsigned int energyRoIWord1 );
+    std::vector<unsigned int> etSumThresholdsPassed( const unsigned int energyRoIWord1 ) const;
     /** returns a vector containing the numbers of threshold passed
     i.e. if the vector contains 1,3,5 it means that this RoI passed thresholds 1,3 and 5.*/
-    std::vector<unsigned int>& etMissThresholdsPassed( const unsigned int energyRoIWord2 );
+    std::vector<unsigned int> etMissThresholdsPassed( const unsigned int energyRoIWord2 ) const;
     /** returns true if thresh is passed*/
-    bool mEtSigThresholdPassed( const unsigned int energyRoIWord0, const unsigned int thresh );
+    bool mEtSigThresholdPassed( const unsigned int energyRoIWord0, const unsigned int thresh ) const;
     /** returns true if thresh is passed*/
-    bool sumEtThresholdPassed( const unsigned int energyRoIWord1, const unsigned int thresh );
+    bool sumEtThresholdPassed( const unsigned int energyRoIWord1, const unsigned int thresh ) const;
     /** returns true if thresh is passed*/
-    bool etMissThresholdPassed( const unsigned int energyRoIWord2, const unsigned int thresh );
+    bool etMissThresholdPassed( const unsigned int energyRoIWord2, const unsigned int thresh ) const;
 
 
-  protected:
-    /** get information from Jet RoI word and store in member variables. */
-    void decodeWord( const unsigned int word );
-    /** No descriptions */
-    void decodeEnergyWord0( const unsigned int energyRoIWord0 );
-    /** No descriptions */
-    void decodeEnergyWord1( const unsigned int energyRoIWord1 );
-    /** No descriptions */
-    void decodeEnergyWord2( const unsigned int energyRoIWord2 );
+  private:
+    unsigned int mEtSigThresholdsFlags( const unsigned int energyRoIWord0 ) const;
+    unsigned int sumEtThresholdsFlags( const unsigned int energyRoIWord1 ) const;
+    unsigned int missEtThresholdsFlags( const unsigned int energyRoIWord1 ) const;
+
     /** No descriptions */
     int decodeEnergyComponent( const unsigned int energyRoIWord ) const;
 
-  private:
     /** return a CoordinateRange for the JEMs coving -2.4<eta<2.4 */
-    CoordinateRange midJEMCoordinate() const;
+    CoordinateRange midJEMCoordinate(const unsigned int jem, const unsigned int roiWord) const;
     /** returns a CoordinateRange for the end JEMs, i.e. 2.4<eta<4.9 */
-    CoordinateRange leftEndJEMCoordinate() const;
+    CoordinateRange leftEndJEMCoordinate(const unsigned int jem, const unsigned int roiWord) const;
     /** returns a CoordinateRange for the end JEMs, i.e. 2.4<eta<4.9 */
-    CoordinateRange rightEndJEMCoordinate() const;
+    CoordinateRange rightEndJEMCoordinate(const unsigned int jem, const unsigned int roiWord) const;
     /** set phi coords for Jet RoI */
-    void setPhiCoords( double& phiMin, double& phiMax ) const;
-
-    unsigned int m_fwdThresholdsPassed;
-    unsigned int m_jem;
-    unsigned int m_row;
-    unsigned int m_col;
-    unsigned int m_mEtSigThresholdsPassed;
-    unsigned int m_sumEtThresholdsPassed;
-    unsigned int m_missEtThresholdsPassed;
-    unsigned int m_etLarge;
-    unsigned int m_etSmall;
-    int m_ex;
-    int m_ey;
-    int m_et;
-    std::vector<unsigned int> m_mEtSigThreshPassedVec;
-    std::vector<unsigned int> m_sumEtThreshPassedVec;
-    std::vector<unsigned int> m_missEtThreshPassedVec;
-    std::vector<unsigned int> m_fwdThreshPassedVec;
-
+    void setPhiCoords( const unsigned int jem, const unsigned int roiWord,
+                       double& phiMin, double& phiMax ) const;
   }; // class JEPRoIDecoder
 
 } // namespace LVL1
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/RoIDecoder.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/RoIDecoder.h
index 6535cbb9314a..ac8810af827e 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/RoIDecoder.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/RoIDecoder.h
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 // $Id: RoIDecoder.h 187728 2009-05-27 16:18:06Z krasznaa $
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                           RoIDecoder.h  -  description
@@ -43,31 +43,13 @@ namespace LVL1 {
    public:
       RoIDecoder();
       virtual ~RoIDecoder();
-      virtual CoordinateRange coordinate( const unsigned int word ) = 0;
-      /** returns the crate associated with the RoI word */
-      unsigned int crate( const unsigned int word );
-      /** returns a vector containing the numbers of threshold passed i.e. if the
-          vector contains 1,3,5 it means that this RoI passed thresholds 1,3 and 5.*/
-      const std::vector< unsigned int >& thresholdsPassed( const unsigned int word );
-      /** examines an 32bit RoI word, extracts the RoI type and returns one of:
-          - CpRoIWordType,
-          - JetRoIWordType,
-          - JetEtRoIWordType,
-          - EnergyRoIWordType*/
-      TrigT1CaloDefs::RoIType roiType( unsigned int word ) const;
+      virtual CoordinateRange coordinate( const unsigned int word ) const = 0;
 
    protected:
-      /** get information from CP RoI word and store in member variables. */
-      virtual void decodeWord( const unsigned int word ) = 0;
       /** returns the value of bits in word between bit "start" and bit "start" + "length" */
       unsigned int extractBits( unsigned int word, const unsigned int start,
                                 const unsigned int length ) const;
-      /** print thresholds passed */
-      void dumpThresholdsPassed() const;
 
-      unsigned int m_crate;
-      unsigned int m_thresholdsPassed;
-      std::vector< unsigned int > m_threshPassedVec;
       bool m_DEBUG;
 
    }; // class RoIDecoder
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/CPRoIDecoder.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/CPRoIDecoder.cxx
index 476e339c9175..62aa87b74086 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/CPRoIDecoder.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/CPRoIDecoder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          CPRoIDecoder.cxx  -  description
@@ -13,13 +13,13 @@
 
 #include "TrigT1Interfaces/CPRoIDecoder.h"
 
-using namespace std;
+using std::cout;
+using std::endl;
 
 namespace LVL1 {
 
   CPRoIDecoder::CPRoIDecoder()
-    : m_cpm( 0 ), m_cp( 0 ), m_lc( 0 ) {
-
+  {
   }
 
   CPRoIDecoder::~CPRoIDecoder() {
@@ -47,9 +47,7 @@ namespace LVL1 {
 
 
   /** Return coordinate information for RoI */
-  CoordinateRange CPRoIDecoder::coordinate( const unsigned int roiWord ) {
-
-    decodeWord( roiWord );
+  CoordinateRange CPRoIDecoder::coordinate( const unsigned int roiWord ) const {
 
     //phi
     const double cratePhiSize = M_PI / 2.0;
@@ -66,27 +64,32 @@ namespace LVL1 {
     // (where each cell is 0.1x0.1)
     // so
 
-    unsigned int top = ( m_lc & 2 ) >> 1; // top=1, bot=0
-    double localCoordEta = ( ( ( m_lc & 4 ) >> 1 ) + ( m_lc & 1 ) ) * localCoordEtaSize; 
+    unsigned int crate = this->crate (roiWord);
+    unsigned int cpm   = this->module (roiWord);
+    unsigned int cp    = this->chip (roiWord);
+    unsigned int lc    = this->localcoord (roiWord);
+
+    unsigned int top = ( lc & 2 ) >> 1; // top=1, bot=0
+    double localCoordEta = ( ( ( lc & 4 ) >> 1 ) + ( lc & 1 ) ) * localCoordEtaSize;
 
-    double phiMin = ( static_cast< double >( m_crate ) * cratePhiSize ) +
-                    ( static_cast< double >( m_cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize );
-    double phiMax = ( static_cast< double >( m_crate ) * cratePhiSize ) +
-                    ( static_cast< double >( m_cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize ) + 2. * localCoordPhiSize;
-    double etaMin = ( ( static_cast< double >( static_cast< int >( m_cpm ) - 8 ) ) * cpmEtaSize ) + localCoordEta;
+    double phiMin = ( static_cast< double >( crate ) * cratePhiSize ) +
+                    ( static_cast< double >( cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize );
+    double phiMax = ( static_cast< double >( crate ) * cratePhiSize ) +
+                    ( static_cast< double >( cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize ) + 2. * localCoordPhiSize;
+    double etaMin = ( ( static_cast< double >( static_cast< int >( cpm ) - 8 ) ) * cpmEtaSize ) + localCoordEta;
 
-    double etaMax = ( static_cast< double >( static_cast< int >( m_cpm ) - 8 ) * cpmEtaSize ) + localCoordEta + 2. * localCoordEtaSize;
+    double etaMax = ( static_cast< double >( static_cast< int >( cpm ) - 8 ) * cpmEtaSize ) + localCoordEta + 2. * localCoordEtaSize;
 
     if ( RoIDecoder::m_DEBUG ) {
 
       cout << "phiMin : " << phiMin << "phiMax : " << phiMax << endl
            << "etaMin : " << etaMin << "etaMax : " << etaMax << endl
            << "Phi" << endl << "===" << endl
-           << "Crate phi min   : " << ( m_crate * cratePhiSize ) << " (size: " << ( cratePhiSize ) << ")" << endl
-           << "CP FPGA phi min : " << ( m_cp * fpgaPhiSize ) << " (size: " << ( fpgaPhiSize ) << ")" << endl
+           << "Crate phi min   : " << ( crate * cratePhiSize ) << " (size: " << ( cratePhiSize ) << ")" << endl
+           << "CP FPGA phi min : " << ( cp * fpgaPhiSize ) << " (size: " << ( fpgaPhiSize ) << ")" << endl
            << "Local coord min : " << ( top * localCoordPhiSize ) << " (size: " << ( localCoordPhiSize ) << ")" << endl
            << "Eta" << endl << "===" << endl
-           << "CPM eta min     : " << ( ( m_cpm - 8 ) * cpmEtaSize ) << " (size: " << ( cpmEtaSize ) << ")" << endl
+           << "CPM eta min     : " << ( ( cpm - 8 ) * cpmEtaSize ) << " (size: " << ( cpmEtaSize ) << ")" << endl
            << "CP FPGA phi min : " << localCoordEta << " (size: " << ( localCoordEtaSize ) << ")" << endl;
 
     }
@@ -98,57 +101,35 @@ namespace LVL1 {
   }
 
   /** Decode crate number from RoI word */
-  unsigned int CPRoIDecoder::crate( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_crate;
+  unsigned int CPRoIDecoder::crate( const unsigned int roiWord ) const {
+    int offset = 0;
+    if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
+    return extractBits( roiWord, 27+offset, 2 );
   }
 
   /** Decode module number from RoI word */
-  unsigned int CPRoIDecoder::module( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_cpm;
+  unsigned int CPRoIDecoder::module( const unsigned int roiWord ) const {
+    int offset = 0;
+    if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
+    return extractBits( roiWord, 23+offset, 4 );
   }
 
   /** Decode CP chip number from RoI word */
-  unsigned int CPRoIDecoder::chip( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_cp;
+  unsigned int CPRoIDecoder::chip( const unsigned int roiWord ) const {
+    int offset = 0;
+    if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
+    return extractBits( roiWord, 20+offset, 3 );
   }
 
   /** Decode local coordinate from RoI word */
-  unsigned int CPRoIDecoder::localcoord( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_lc;
-  }
-
-  /** get information from RoI word and store in member variables. */
-  void CPRoIDecoder::decodeWord( const unsigned int word ) {
-
+  unsigned int CPRoIDecoder::localcoord( const unsigned int roiWord ) const {
     int offset = 0;
-    if (roiType( word ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
-    
-    m_thresholdsPassed = extractBits( word, 1, 16 );
-    m_crate = extractBits( word, 27+offset, 2 );
-    m_cpm = extractBits( word, 23+offset, 4 );
-    m_cp = extractBits( word, 20+offset, 3 );
-    m_lc = extractBits( word, 17+offset, 3 );
-
-    if ( RoIDecoder::m_DEBUG ) {
-
-      cout << "CPRoIDecoder: RoIWord being analysed - " << hex << word << dec << endl;
-      cout << "Crate : " << m_crate << endl
-           << "CPM   : " << m_cpm << endl
-           << "CP    : " << m_cp << endl
-           << "LC    : " << m_lc << endl;
-
-    }
-
-    return;
-
+    if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
+    return extractBits( roiWord, 17+offset, 3 );
   }
-  
+
   /** Extract cluster ET from Run 2 RoI word */
-  unsigned int CPRoIDecoder::et( const unsigned int roiWord ) {
+  unsigned int CPRoIDecoder::et( const unsigned int roiWord ) const {
     unsigned int type = roiType( roiWord );
     
     if ( type == TrigT1CaloDefs::EMRoIWordType || type == TrigT1CaloDefs::TauRoIWordType )
@@ -158,7 +139,7 @@ namespace LVL1 {
   }
   
   /** Extract isolation results from Run 2 RoI word */
-  unsigned int CPRoIDecoder::isolationWord( const unsigned int roiWord ) {
+  unsigned int CPRoIDecoder::isolationWord( const unsigned int roiWord ) const {
     unsigned int type = roiType( roiWord );
     
     if ( type == TrigT1CaloDefs::EMRoIWordType || type == TrigT1CaloDefs::TauRoIWordType )
@@ -169,20 +150,20 @@ namespace LVL1 {
   
 
   /** Override default version by adding a check on Run 1/Run 2*/
-  const std::vector<unsigned int>& CPRoIDecoder::thresholdsPassed( const unsigned int word ) {
+  const std::vector<unsigned int> CPRoIDecoder::thresholdsPassed( const unsigned int word ) const {
 
-    m_threshPassedVec.clear();
+    std::vector<unsigned int> threshPassedVec;
     
     if (roiType(word) == TrigT1CaloDefs::CpRoIWordType) {
       unsigned int hitmask = word&0xffff;
       for ( unsigned int thresh = 0; thresh < 16; ++thresh ) {
         if ( ( 1 << thresh ) & hitmask ) {
-           m_threshPassedVec.push_back( thresh + 1 );
+          threshPassedVec.push_back( thresh + 1 );
         }
       }
     }
     
-   return m_threshPassedVec;
+   return threshPassedVec;
 
   }
 
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx
index 630f3ba0f19f..af29afac4b90 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx
@@ -15,15 +15,13 @@
 #include "TrigT1Interfaces/JEPRoIDecoder.h"
 #include "TrigT1Interfaces/TrigT1CaloDefs.h"
 
-using namespace std;
+using std::cout;
+using std::endl;
 
 namespace LVL1 {
 
   JEPRoIDecoder::JEPRoIDecoder()
-    : m_fwdThresholdsPassed( 0 ), m_jem( 0 ), m_row( 0 ), m_col( 0 ),
-      m_mEtSigThresholdsPassed( 0 ), m_sumEtThresholdsPassed( 0 ), m_missEtThresholdsPassed( 0 ),
-      m_etLarge(0), m_etSmall(0), m_ex( 0 ), m_ey( 0 ), m_et( 0 ) {
-
+  {
   }
 
   JEPRoIDecoder::~JEPRoIDecoder() {
@@ -65,141 +63,108 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const {
    else                                          return 999;
 }
 
-  CoordinateRange JEPRoIDecoder::coordinate( const unsigned int roiWord ) {
+  CoordinateRange JEPRoIDecoder::coordinate( const unsigned int roiWord ) const {
 
-    decodeWord( roiWord );
-    unsigned int temp = m_jem % 8;
+    const unsigned int jem = this->module (roiWord);
+    unsigned int temp = jem % 8;
     if ( temp == 0 ){
-        return leftEndJEMCoordinate();
+        return leftEndJEMCoordinate(jem, roiWord);
     } else if( temp == 7 ){
-        return rightEndJEMCoordinate();
-    } else return midJEMCoordinate();
+        return rightEndJEMCoordinate(jem, roiWord);
+    } else return midJEMCoordinate(jem, roiWord);
 
   }
 
   /** Extract crate number from Jet RoI word */
-  unsigned int JEPRoIDecoder::crate( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_crate;
+  unsigned int JEPRoIDecoder::crate( const unsigned int roiWord ) const {
+    return extractBits( roiWord, 29, 1 );
   }
 
   /** Extract module number from Jet RoI word */
-  unsigned int JEPRoIDecoder::module( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_jem;
+  unsigned int JEPRoIDecoder::module( const unsigned int roiWord ) const {
+    return extractBits( roiWord, 25, 4 );
   }
 
   /** Extract RoI row number within module from Jet RoI word */
-  unsigned int JEPRoIDecoder::row( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_row;
+  unsigned int JEPRoIDecoder::row( const unsigned int roiWord ) const {
+    unsigned int rl = extractBits( roiWord, 20, 2 );
+    unsigned int frame = extractBits( roiWord, 22, 3 );
+    return ( frame & 3 ) * 2 + ( rl >> 1 );
   }
 
   /** Extract RoI column number within module from Jet RoI word */
-  unsigned int JEPRoIDecoder::column( const unsigned int roiWord ) {
-    decodeWord( roiWord );
-    return m_col;
+  unsigned int JEPRoIDecoder::column( const unsigned int roiWord ) const {
+    unsigned int rl = extractBits( roiWord, 20, 2 );
+    unsigned int frame = extractBits( roiWord, 22, 3 );
+    return ( frame >> 2 ) * 2 + ( rl & 1 );
   }
 
-  /** Override default version by adding a check on Run 1/Run 2*/
-  const std::vector<unsigned int>& JEPRoIDecoder::thresholdsPassed( const unsigned int word ) {
+  /** Check on Run 1/Run 2*/
+  const std::vector<unsigned int> JEPRoIDecoder::thresholdsPassed( const unsigned int word ) const {
 
-    m_threshPassedVec.clear();
+    std::vector<unsigned int> threshPassedVec;
     
     if (jetRoIVersion(word) == 1) {
-      decodeWord( word );
+      unsigned int thresholdsPassed = extractBits( word, 1, 8 );
       for ( unsigned int thresh = 0; thresh < 16; ++thresh ) {
-        if ( ( 1 << thresh ) & m_thresholdsPassed ) {
-           m_threshPassedVec.push_back( thresh + 1 );
+        if ( ( 1 << thresh ) & thresholdsPassed ) {
+           threshPassedVec.push_back( thresh + 1 );
         }
       }
     }
     
-   return m_threshPassedVec;
+   return threshPassedVec;
 
   }
 
   /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5
       it means that this RoI passed thresholds 1,3 and 5.*/
-  std::vector<unsigned int>& JEPRoIDecoder::fwdThresholdsPassed( const unsigned int word ) {
+  const std::vector<unsigned int> JEPRoIDecoder::fwdThresholdsPassed( const unsigned int word ) const {
 
-    m_fwdThreshPassedVec.clear();
+    std::vector<unsigned int> fwdThreshPassedVec;
     
     if (jetRoIVersion(word) == 1) {
-      decodeWord( word );
+      unsigned int fwdThresholdsPassed = extractBits( word, 9, 4 );
       for ( unsigned int thresh = 0; thresh < 4;thresh++ ) {
-        if ( ( 1 << thresh ) & m_fwdThresholdsPassed ) {
-          m_fwdThreshPassedVec.push_back( thresh + 1 );
+        if ( ( 1 << thresh ) & fwdThresholdsPassed ) {
+          fwdThreshPassedVec.push_back( thresh + 1 );
         }
       } //endfor
     }
     
-    return m_fwdThreshPassedVec;
+    return fwdThreshPassedVec;
 
   }
   
 
   /** Extract larger cluster ET value from Jet RoI word */
-  unsigned int JEPRoIDecoder::etLarge( const unsigned int word ) {
+  unsigned int JEPRoIDecoder::etLarge( const unsigned int word ) const {
     if (jetRoIVersion(word) == 1) return 0;
-    decodeWord( word );
-    return m_etLarge;
+    return extractBits( word, 1, 10 );
   }
 
   /** Extract smaller cluster ET value from Jet RoI word */
-  unsigned int JEPRoIDecoder::etSmall( const unsigned int word ) {
+  unsigned int JEPRoIDecoder::etSmall( const unsigned int word ) const {
     if (jetRoIVersion(word) == 1) return 0;
-    decodeWord( word );
-    return m_etSmall;
-  }
-
-
-  /** get information from RoI word and store in member variables. */
-  void JEPRoIDecoder::decodeWord( const unsigned int word ) {
-
-    // Run 1 data
-    m_thresholdsPassed = extractBits( word, 1, 8 );
-    m_fwdThresholdsPassed = extractBits( word, 9, 4 );
-    
-    // Run 2 data
-    m_etLarge = extractBits( word, 1, 10 );
-    m_etSmall = extractBits( word, 11, 9 );
-    
-    // Common to both
-    unsigned int rl = extractBits( word, 20, 2 );
-    unsigned int frame = extractBits( word, 22, 3 );
-    m_jem = extractBits( word, 25, 4 );
-    m_crate = extractBits( word, 29, 1 );
-
-    m_col = ( frame >> 2 ) * 2 + ( rl & 1 );
-    m_row = ( frame & 3 ) * 2 + ( rl >> 1 );
-
-
-    if ( RoIDecoder::m_DEBUG ) {
-      cout << "JEPRoIDecoder: RoIWord being analysed - " << hex << word << dec << endl;
-      cout << "Crate : " << m_crate << endl
-           << "jem   : " << m_jem << endl
-           << "row    : " << m_row << endl
-           << "col    : " << m_col << endl;
-    } //end debug output
-
-    return;
+    return extractBits( word, 11, 9 );
   }
 
 
   /** return a CoordinateRange for the JEMs coving -2.4<eta<2.4 */
-  CoordinateRange JEPRoIDecoder::midJEMCoordinate() const {
+  CoordinateRange JEPRoIDecoder::midJEMCoordinate(const unsigned int jem,
+                                                  const unsigned int roiWord) const {
 
     double phiMin = 0.0;
     double phiMax = 0.0;
-    setPhiCoords( phiMin, phiMax );
+    setPhiCoords( jem, roiWord, phiMin, phiMax );
 
     //eta
     const double JEMEtaSize = 0.8;
     const double jeEtaSize = 0.2;
 
-    int etaBin = ( m_jem % 8 ) - 4; //bins range from -4 to +3
-    double etaMin = ( etaBin * JEMEtaSize ) + ( jeEtaSize * m_col );
+    const unsigned int col = this->column (roiWord);
+    int etaBin = ( jem % 8 ) - 4; //bins range from -4 to +3
+    double etaMin = ( etaBin * JEMEtaSize ) + ( jeEtaSize * col );
     double etaMax = etaMin + 2. * jeEtaSize;
 
     // there is one nasty "special case" as well
@@ -211,14 +176,15 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const {
   }
 
   /** returns a CoordinateRange for the end JEMs, i.e. 2.4<eta<4.9 */
-  CoordinateRange JEPRoIDecoder::leftEndJEMCoordinate() const {
+  CoordinateRange JEPRoIDecoder::leftEndJEMCoordinate(const unsigned int jem,
+                                                      const unsigned int roiWord) const {
 
     double phiMin = 0.0;
     double phiMax = 0.0;
-    setPhiCoords( phiMin, phiMax );
+    setPhiCoords( jem, roiWord, phiMin, phiMax );
 
     double etaMin = 0.0; double etaMax = 0.0;
-    switch ( m_col ) {
+    switch ( this->column (roiWord) ) {
     case 0:
       etaMin = -4.9; etaMax = -2.9;
       break;
@@ -238,13 +204,14 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const {
   }
 
   /** returns a CoordinateRange for the end JEMs, i.e. 2.4<eta<4.9 */
-  CoordinateRange JEPRoIDecoder::rightEndJEMCoordinate() const {
+  CoordinateRange JEPRoIDecoder::rightEndJEMCoordinate(const unsigned int jem,
+                                                       const unsigned int roiWord) const {
 
     double phiMin = 0.0;
     double phiMax = 0.0;
-    setPhiCoords( phiMin, phiMax );
+    setPhiCoords( jem, roiWord, phiMin, phiMax );
     double etaMin = 0.0; double etaMax = 0.0;
-    switch ( m_col ) {
+    switch ( this->column (roiWord) ) {
     case 0:
       etaMin = 2.4; etaMax = 2.9;
       break;
@@ -264,43 +231,44 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const {
   }
 
   /** set phi coords for Jet RoI */
-  void JEPRoIDecoder::setPhiCoords( double& phiMin, double& phiMax ) const {
+  void JEPRoIDecoder::setPhiCoords( const unsigned int jem, const unsigned int roiWord,
+                                    double& phiMin, double& phiMax ) const {
+
+    const unsigned int row = this->row (roiWord);
+    const unsigned int crate = this->crate (roiWord);
 
     const double jemPhiSize = M_PI / 2;
     const double jePhiSize = M_PI / 16;
-    int crateModifier = ( m_jem / 8 ) * 2; //=0 or 2
-    phiMin = ( m_crate + crateModifier ) * jemPhiSize + ( jePhiSize * m_row );
+    int crateModifier = ( jem / 8 ) * 2; //=0 or 2
+    phiMin = ( crate + crateModifier ) * jemPhiSize + ( jePhiSize * row );
     phiMax = phiMin + 2. * jePhiSize;
 
     return;
   }
 
   /** returns the (signed) Ex energy projection. If the RoIWord looks invalid, then zero will be returned. */
-  int JEPRoIDecoder::energyX( unsigned int energyRoIWord0 ) {
+  int JEPRoIDecoder::energyX( unsigned int energyRoIWord0 ) const {
 
     if ( roiType( energyRoIWord0 ) != TrigT1CaloDefs::EnergyRoIWordType0 ) return 0; // wrong type of word
-    decodeEnergyWord0( energyRoIWord0 );
-    return m_ex;
+    return decodeEnergyComponent( energyRoIWord0 );
   }
 
   /** returns the (signed) Ey energy projection. If the RoIWord looks invalid, then zero will be returned. */
-  int JEPRoIDecoder::energyY( unsigned int energyRoIWord1 ) {
+  int JEPRoIDecoder::energyY( unsigned int energyRoIWord1 ) const {
 
     if ( roiType( energyRoIWord1 ) != TrigT1CaloDefs::EnergyRoIWordType1 ) return 0; // wrong type of word
-    decodeEnergyWord1( energyRoIWord1 );
-    return m_ey;
+    return decodeEnergyComponent( energyRoIWord1 );
   }
 
   /** returns the ETSum value. If the RoIWord looks invalid, then zero will be returned. */
-  int JEPRoIDecoder::energyT( unsigned int energyRoIWord2 ) {
+  int JEPRoIDecoder::energyT( unsigned int energyRoIWord2 ) const {
 
     if ( roiType( energyRoIWord2 ) != TrigT1CaloDefs::EnergyRoIWordType2 ) return 0; // wrong type of word
-    decodeEnergyWord2( energyRoIWord2 );
-    return m_et;
+    return extractBits( energyRoIWord2, 1, 15 );
   }
 
   /** returns the overflow flag for an Energy RoIWord */
-  bool JEPRoIDecoder::energyOverflow( unsigned int energyRoIWord ) {
+  bool JEPRoIDecoder::energyOverflow( unsigned int energyRoIWord ) const {
 
     if ( extractBits( energyRoIWord, 16, 1 ) != 0 ) {
       return true;
@@ -311,86 +279,80 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const {
 
   /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5 it
       means that this RoI passed thresholds 1,3 and 5.*/
-  std::vector<unsigned int>& JEPRoIDecoder::mEtSigThresholdsPassed( const unsigned int energyRoIWord0 ) {
+  std::vector<unsigned int> JEPRoIDecoder::mEtSigThresholdsPassed( const unsigned int energyRoIWord0 ) const {
 
-    m_mEtSigThreshPassedVec.clear();
+    std::vector<unsigned int> mEtSigThreshPassedVec;
+    unsigned int passed = mEtSigThresholdsFlags( energyRoIWord0 );
     for ( unsigned int thresh = 0; thresh < TrigT1CaloDefs::numOfMEtSigThresholds; thresh++ ) {
-      if ( mEtSigThresholdPassed( energyRoIWord0, thresh ) ) {
-        m_mEtSigThreshPassedVec.push_back( thresh + 1 );
+      if ( passed & (1<<thresh)) {
+        mEtSigThreshPassedVec.push_back( thresh + 1 );
       }
     } //endfor
 
-    return m_mEtSigThreshPassedVec;
+    return mEtSigThreshPassedVec;
   }
 
   /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5 it
       means that this RoI passed thresholds 1,3 and 5.*/
-  std::vector<unsigned int>& JEPRoIDecoder::etSumThresholdsPassed( const unsigned int energyRoIWord1 ) {
+  std::vector<unsigned int> JEPRoIDecoder::etSumThresholdsPassed( const unsigned int energyRoIWord1 ) const {
 
-    m_sumEtThreshPassedVec.clear();
-    for ( unsigned int thresh = 0; thresh < TrigT1CaloDefs::numOfSumEtThresholds; thresh++ ) {
-      if ( sumEtThresholdPassed( energyRoIWord1, thresh ) ) {
-        m_sumEtThreshPassedVec.push_back( thresh + 1 );
+    std::vector<unsigned int> sumEtThreshPassedVec;
+    unsigned int passed = sumEtThresholdsFlags( energyRoIWord1 );
+for ( unsigned int thresh = 0; thresh < TrigT1CaloDefs::numOfSumEtThresholds; thresh++ ) {
+      if ( passed & (1<<thresh)) {
+        sumEtThreshPassedVec.push_back( thresh + 1 );
       }
     } //endfor
 
-    return m_sumEtThreshPassedVec;
+    return sumEtThreshPassedVec;
   }
 
   /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5 it
       means that this RoI passed thresholds 1,3 and 5.*/
-  std::vector<unsigned int>& JEPRoIDecoder::etMissThresholdsPassed( const unsigned int energyRoIWord2 ) {
+  std::vector<unsigned int> JEPRoIDecoder::etMissThresholdsPassed( const unsigned int energyRoIWord2 ) const {
 
-    m_missEtThreshPassedVec.clear();
+    std::vector<unsigned int> missEtThreshPassedVec;
+    unsigned int passed = missEtThresholdsFlags( energyRoIWord2 );
     for ( unsigned int thresh = 0; thresh < TrigT1CaloDefs::numOfMissingEtThresholds; thresh++ ) {
-      if ( etMissThresholdPassed( energyRoIWord2, thresh ) ) {
-        m_missEtThreshPassedVec.push_back( thresh + 1 );
+      if ( passed & (1<<thresh)) {
+        missEtThreshPassedVec.push_back( thresh + 1 );
       }
     } //endfor
 
-    return m_missEtThreshPassedVec;
+    return missEtThreshPassedVec;
   }
 
   /** returns true if thresh is passed*/
-  bool JEPRoIDecoder::mEtSigThresholdPassed( const unsigned int energyRoIWord0, const unsigned int thresh ) {
+  bool JEPRoIDecoder::mEtSigThresholdPassed( const unsigned int energyRoIWord0, const unsigned int thresh ) const {
 
-    decodeEnergyWord0( energyRoIWord0 );
-    return ( ( 1 << thresh ) & m_mEtSigThresholdsPassed );
+    return ( ( 1 << thresh ) & mEtSigThresholdsFlags( energyRoIWord0 ) );
   }
 
   /** returns true if thresh is passed*/
-  bool JEPRoIDecoder::sumEtThresholdPassed( const unsigned int energyRoIWord1, const unsigned int thresh ) {
+  bool JEPRoIDecoder::sumEtThresholdPassed( const unsigned int energyRoIWord1, const unsigned int thresh ) const {
 
-    decodeEnergyWord1( energyRoIWord1 );
-    return ( ( 1 << thresh ) & m_sumEtThresholdsPassed );
+    return ( ( 1 << thresh ) & sumEtThresholdsFlags( energyRoIWord1) );
   }
 
   /** returns true if thresh is passed*/
-  bool JEPRoIDecoder::etMissThresholdPassed( const unsigned int energyRoIWord2, const unsigned int thresh ) {
+  bool JEPRoIDecoder::etMissThresholdPassed( const unsigned int energyRoIWord2, const unsigned int thresh ) const {
 
-    decodeEnergyWord2( energyRoIWord2 );
-    return ( ( 1 << thresh ) & m_missEtThresholdsPassed );
+    return ( ( 1 << thresh ) & missEtThresholdsFlags( energyRoIWord2 ) );
   }
 
-  void JEPRoIDecoder::decodeEnergyWord0( const unsigned int energyRoIWord0 ) {
+  unsigned int JEPRoIDecoder::mEtSigThresholdsFlags( const unsigned int energyRoIWord0 ) const {
 
-    m_ex = decodeEnergyComponent( energyRoIWord0 );
-    m_mEtSigThresholdsPassed = extractBits( energyRoIWord0, 17, TrigT1CaloDefs::numOfMEtSigThresholds );
-    return;
+    return extractBits( energyRoIWord0, 17, TrigT1CaloDefs::numOfMEtSigThresholds );
   }
 
-  void JEPRoIDecoder::decodeEnergyWord1( const unsigned int energyRoIWord1 ) {
+  unsigned int JEPRoIDecoder::sumEtThresholdsFlags( const unsigned int energyRoIWord1 ) const {
 
-    m_ey = decodeEnergyComponent( energyRoIWord1 );
-    m_sumEtThresholdsPassed = extractBits( energyRoIWord1, 17, TrigT1CaloDefs::numOfSumEtThresholds );
-    return;
+    return extractBits( energyRoIWord1, 17, TrigT1CaloDefs::numOfSumEtThresholds );
   }
 
-  void JEPRoIDecoder::decodeEnergyWord2( const unsigned int energyRoIWord2 ) {
+  unsigned int JEPRoIDecoder::missEtThresholdsFlags( const unsigned int energyRoIWord2 ) const {
 
-    m_et = extractBits( energyRoIWord2, 1, 15 );
-    m_missEtThresholdsPassed = extractBits( energyRoIWord2, 17, TrigT1CaloDefs::numOfMissingEtThresholds );
-    return;
+    return extractBits( energyRoIWord2, 17, TrigT1CaloDefs::numOfMissingEtThresholds );
   }
 
   int JEPRoIDecoder::decodeEnergyComponent( const unsigned int energyRoIWord ) const {
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/RecEmTauRoI.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/RecEmTauRoI.cxx
index b86338e0a390..33c6103289fa 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/RecEmTauRoI.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/RecEmTauRoI.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 // $Id: RecEmTauRoI.cxx 796120 2017-02-08 03:20:47Z ssnyder $
 /***************************************************************************
@@ -91,7 +91,7 @@ void RecEmTauRoI::constructRun1(
   m_hadCoreIsolation.clear();
   m_thresholdType.clear();
 
-  const vector<unsigned int> &passed_thresholds =
+  const vector<unsigned int> passed_thresholds =
       m_decoder->thresholdsPassed(m_roiWord);
 
   //
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/RecEnergyRoI.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/RecEnergyRoI.cxx
index e6c13aba1412..de77ceb00f5e 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/RecEnergyRoI.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/RecEnergyRoI.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 // $Id: RecEnergyRoI.cxx 342657 2011-01-28 23:42:18Z watsona $
 /***************************************************************************
@@ -164,11 +164,8 @@ namespace LVL1 {
    vector< unsigned int >* RecEnergyRoI::etMissThresholdsPassed() const {
 
       JEPRoIDecoder get;
-      vector< unsigned int >* newVec = new std::vector< unsigned int >;
-      for( vector< unsigned int >::const_iterator i = get.etMissThresholdsPassed( m_roiWord2 ).begin();
-           i != get.etMissThresholdsPassed( m_roiWord2 ).end(); ++i ) {
-         newVec->push_back( *i );
-      }
+      vector< unsigned int >* newVec = new std::vector< unsigned int >
+        ( get.etMissThresholdsPassed( m_roiWord2 )  );
       return newVec;
 
    }
@@ -177,11 +174,8 @@ namespace LVL1 {
    vector< unsigned int >* RecEnergyRoI::sumEtThresholdsPassed() const {
 
       JEPRoIDecoder get;
-      vector< unsigned int >* newVec = new std::vector< unsigned int >;
-      for( vector< unsigned int >::const_iterator i = get.etSumThresholdsPassed( m_roiWord1 ).begin();
-           i != get.etSumThresholdsPassed( m_roiWord1 ).end(); ++i ) {
-         newVec->push_back( *i );
-      }
+      vector< unsigned int >* newVec = new std::vector< unsigned int >
+        ( get.etSumThresholdsPassed( m_roiWord1 ) );
       return newVec;
 
    }
@@ -190,11 +184,8 @@ namespace LVL1 {
    vector< unsigned int >* RecEnergyRoI::mEtSigThresholdsPassed() const {
 
       JEPRoIDecoder get;
-      vector< unsigned int >* newVec = new std::vector< unsigned int >;
-      for( vector< unsigned int >::const_iterator i = get.mEtSigThresholdsPassed( m_roiWord0 ).begin();
-           i != get.mEtSigThresholdsPassed( m_roiWord0 ).end(); ++i ) {
-         newVec->push_back( *i );
-      }
+      vector< unsigned int >* newVec = new std::vector< unsigned int >
+        (get.mEtSigThresholdsPassed( m_roiWord0 ));
       return newVec;
 
    }
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/RecJetRoI.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/RecJetRoI.cxx
index c4d5d6466171..7cf57a9c7361 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/RecJetRoI.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/RecJetRoI.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 // $Id: RecJetRoI.cxx 796120 2017-02-08 03:20:47Z ssnyder $
 /***************************************************************************
@@ -96,7 +96,7 @@ void RecJetRoI::constructRun1(
   //
   // Extract the properties of the passed thresholds:
   //
-  const vector<unsigned int> &passed_thresholds =
+  const vector<unsigned int> passed_thresholds =
       (this->isForwardJet() ? m_decoder->fwdThresholdsPassed(m_roiWord)
                             : m_decoder->thresholdsPassed(m_roiWord));
 
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/RoIDecoder.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/RoIDecoder.cxx
index fa19e6fa58d7..3dff53cade6c 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/RoIDecoder.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/RoIDecoder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 // $Id: RoIDecoder.cxx 187728 2009-05-27 16:18:06Z krasznaa $
 /***************************************************************************
@@ -22,7 +22,7 @@
 #include <iostream>
 
 LVL1::RoIDecoder::RoIDecoder():
-   m_crate( 0 ),  m_thresholdsPassed( 0 ), m_DEBUG( false ) {
+  m_DEBUG( false ) {
 
 }
 
@@ -48,69 +48,3 @@ unsigned int LVL1::RoIDecoder::extractBits( unsigned int word, const unsigned in
    return ( word & bitmask ); // return only bits in bitmask
 }
 
-/** print thresholds passed */
-void LVL1::RoIDecoder::dumpThresholdsPassed() const{
- 
-   for( unsigned int thresh = 0; thresh < 16; ++thresh ) {
-      if( ( 1 << thresh ) & m_thresholdsPassed ) {
-         std::cout << "Threshold " << ( thresh + 1 ) << " : passed" << std::endl;
-      }
-   }
-   return;
-}
-
-/** returns the crate associated with the RoI word */
-unsigned int LVL1::RoIDecoder::crate( const unsigned int word ){
-  decodeWord(word);
-  return m_crate;
-}
-
-/** returns a vector containing the numbers of threshold passed i.e. if the vector
-    contains 1,3,5 it means that this RoI passed thresholds 1,3 and 5.*/
-const std::vector< unsigned int >& LVL1::RoIDecoder::thresholdsPassed( const unsigned int word ) {
-
-   decodeWord( word );
-   m_threshPassedVec.clear();
-   for( unsigned int thresh = 0; thresh < 16; ++thresh ){
-      if( ( 1 << thresh ) & m_thresholdsPassed ) {
-         m_threshPassedVec.push_back( thresh + 1 );
-      }
-   }
-   return m_threshPassedVec;
-}
-
-/** examines an 32bit RoI word, extracts the RoI type and returns it*/
-LVL1::TrigT1CaloDefs::RoIType LVL1::RoIDecoder::roiType( unsigned int word ) const{
-   unsigned int temp=extractBits(word, 31, 2);
-   if (temp == TrigT1CaloDefs::cpRoIType) {
-      return TrigT1CaloDefs::CpRoIWordType;
-   }
-   else if (temp == TrigT1CaloDefs::jetRoIType) {
-      unsigned int temp2 = extractBits(word, 30, 1);
-      if (temp2 == TrigT1CaloDefs::jetRoI) {
-         return TrigT1CaloDefs::JetRoIWordType;
-      }
-      else if (temp2 == TrigT1CaloDefs::jetEtRoI) {
-         return TrigT1CaloDefs::JetEtRoIWordType;
-      }
-      else {
-         return TrigT1CaloDefs::RoIWordTypeError;
-      }
-   }
-   else if (temp == TrigT1CaloDefs::energyRoIType) {
-      unsigned int temp2 = extractBits(word, 29, 2);
-      if (temp2 == TrigT1CaloDefs::energyRoI0) {
-         return TrigT1CaloDefs::EnergyRoIWordType0;
-      }
-      else if (temp2 == TrigT1CaloDefs::energyRoI1) {
-         return TrigT1CaloDefs::EnergyRoIWordType1;
-      }
-      else if (temp2 == TrigT1CaloDefs::energyRoI2) {
-         return TrigT1CaloDefs::EnergyRoIWordType2;
-      }
-      else {
-         return TrigT1CaloDefs::RoIWordTypeError;
-      }
-   }
-   return TrigT1CaloDefs::RoIWordTypeError;
-}
-- 
GitLab


From 05045a16c36f65aa51bf3cc16d12f6b71d01a572 Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Sat, 16 Mar 2019 23:06:59 +0100
Subject: [PATCH 061/163] GeneratorObjects: Fix a couple more HepMcParticleLink
 issues.

Fix potential infinite loop in looking up event container.

Treat barcode of 0x7fffffff as null.
---
 Generators/GeneratorObjects/src/HepMcParticleLink.cxx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Generators/GeneratorObjects/src/HepMcParticleLink.cxx b/Generators/GeneratorObjects/src/HepMcParticleLink.cxx
index bbbdc2afb3f8..42d20ddc2f2b 100644
--- a/Generators/GeneratorObjects/src/HepMcParticleLink.cxx
+++ b/Generators/GeneratorObjects/src/HepMcParticleLink.cxx
@@ -233,7 +233,7 @@ HepMcParticleLink::index_type HepMcParticleLink::eventIndex() const
   m_extBarcode.eventIndex (index, position);
   if (index == ExtendedBarCode::UNDEFINED) {
     // Don't trip the assertion for a null link.
-    if (barcode() == 0) return 0;
+    if (barcode() == 0 || barcode() == 0x7fffffff) return 0;
     cptr();
     m_extBarcode.eventIndex (index, position);
     assert (index != ExtendedBarCode::UNDEFINED);
@@ -326,8 +326,8 @@ SG::DataProxy* HepMcParticleLink::find_proxy (const IProxyDict* sg) const
   EBC_EVCOLL evColl = getEventCollection();
   assert (evColl < EBC_NCOLLKINDS);
   unsigned int hint_orig = s_hints[evColl];
+  if (hint_orig >= NKEYS) hint_orig = 0;
   unsigned int hint = hint_orig;
-  if (hint >= NKEYS) hint = 0;
   do {
     SG::DataProxy* proxy = sg->proxy (clid, s_keys[evColl][hint]);
     if (proxy) {
-- 
GitLab


From aabb6060b8873af5593024d5e1f6d2189db246d2 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Sun, 17 Mar 2019 15:43:19 +0100
Subject: [PATCH 062/163] Make 'const static' 'static const'

---
 .../SCT_CalibAlgs/src/SCT_CalibHitmapTool.cxx |  6 ++--
 .../SCT_CalibAlgs/src/SCT_CalibHvTool.cxx     |  4 +--
 .../SCT_GeoModel/SCT_ComponentFactory.h       |  2 +-
 .../SCT_Monitoring/SCTMotherTrigMonTool.h     |  2 +-
 .../TrigFTK/TrigFTKSim/TrigFTKSim/FTKRawHit.h | 32 +++++++++----------
 5 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHitmapTool.cxx b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHitmapTool.cxx
index d3ee38ea9e5a..2289686944e7 100644
--- a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHitmapTool.cxx
+++ b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHitmapTool.cxx
@@ -30,9 +30,9 @@
 
 using namespace std;
 using namespace SCT_CalibAlgs;
-const static string pathRoot{"/HitMaps/"};
-const static string detectorNames[]{"negativeEndcap", "barrel", "positiveEndcap"};
-const static string detectorPaths[]{"SCTEC/", "SCTB/","SCTEA/"};
+static const string pathRoot{"/HitMaps/"};
+static const string detectorNames[]{"negativeEndcap", "barrel", "positiveEndcap"};
+static const string detectorPaths[]{"SCTEC/", "SCTB/","SCTEA/"};
 
 SCT_CalibHitmapTool::SCT_CalibHitmapTool(const std::string& type, const std::string& name, const IInterface* parent):
   base_class(type, name, parent),
diff --git a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHvTool.cxx b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHvTool.cxx
index 1239b093f586..6865c698e467 100644
--- a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHvTool.cxx
+++ b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCT_CalibHvTool.cxx
@@ -18,9 +18,9 @@
 using namespace std;
 using namespace SCT_CalibAlgs;
 
-const static string detectorNames[]{"negativeEndcap", "barrel", "positiveEndcap"};
+static const string detectorNames[]{"negativeEndcap", "barrel", "positiveEndcap"};
 
-const static string detectorPaths[]{"SCTEC/", "SCTB/","SCTEA/"};
+static const string detectorPaths[]{"SCTEC/", "SCTB/","SCTEA/"};
 namespace {
   void
   initQueue(std::queue<int>& q, const int numvals, const int setval) {
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_ComponentFactory.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_ComponentFactory.h
index cb3a123995b9..0886db0c5aff 100644
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_ComponentFactory.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_ComponentFactory.h
@@ -40,7 +40,7 @@ protected:
 
 private:
   std::string m_name;
-  const static double s_epsilon;
+  static const double s_epsilon;
 
 };
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
index d889f703a425..58fda5162473 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
@@ -50,7 +50,7 @@ protected:
   ///Check if the event passes L1 item
   bool isCalibrationNoise(const std::string& L1_Item);
   ///Abbreviations for level 1 trigger types
-  const static std::string m_triggerNames[8];
+  static const std::string m_triggerNames[8];
   ///Format and output (INFO msg level) the fired triggers
   StatusCode printTriggers() const;
   //@deprecated improper camel casing on old method
diff --git a/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKRawHit.h b/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKRawHit.h
index f00fd372ec4c..1e68d8cf5a25 100644
--- a/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKRawHit.h
+++ b/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKRawHit.h
@@ -229,22 +229,22 @@ public:
   friend std::istream& clusterC( std::istream & , FTKRawHit& );
 
   // These are now public because they are needed by FTKHit and FTKCoord
-  const static int row_coord_mask    = 0x00000FFF; ///< Bitmask marking the location of the row coordinate in m_hw_word for pixel(12 bits)
-  const static int phi_width_mask    = 0x00007000; ///< Bitmask marking the location of the row width in m_hw_word for pixel(3 bits)
-  const static int split_mask        = 0x00008000; ///< Bitmask marking the location of the split cluster flag in m_hw_word for pixel(1 bit)
-  const static int column_coord_mask = 0x0FFF0000; ///< Bitmask marking the location of the column coordinate in m_hw_word for pixel(12 bits)
-  const static int eta_width_mask    = 0x70000000; ///< Bitmask marking the location of the column width in m_hw_word for pixel(3 bits)
-
-  const static int row_coord_bit     = 0; ///< Starting bit of row coordinate in m_hw_word for pixel
-  const static int phi_width_bit     = 12; ///< Starting bit of row width in m_hw_word for pixel
-  const static int split_bit         = 15; ///< Bit for the split cluster flag in m_hw_word for pixel
-  const static int column_coord_bit  = 16; ///<  Starting bit of column coordinate in m_hw_word for pixel
-  const static int eta_width_bit     = 28; ///< Starting bit of column width in m_hw_word for pixel
-
-  const static int strip_coord_mask = 0x07FF; ///< Bitmask marking the location of the strip coordinate in m_hw_word for SCT (3 bits)
-  const static int strip_coord_bit  = 0; ///< Starting bit of strip coordinate in m_hw_word for SCT
-  const static int strip_width_mask = 0x7000; ///< Bitmask marking the location of the strip width in m_hw_word  for SCT (3 bits)
-  const static int strip_width_bit  = 12; ///< Starting bit of strip width in m_hw_word for SCT
+  static const int row_coord_mask    = 0x00000FFF; ///< Bitmask marking the location of the row coordinate in m_hw_word for pixel(12 bits)
+  static const int phi_width_mask    = 0x00007000; ///< Bitmask marking the location of the row width in m_hw_word for pixel(3 bits)
+  static const int split_mask        = 0x00008000; ///< Bitmask marking the location of the split cluster flag in m_hw_word for pixel(1 bit)
+  static const int column_coord_mask = 0x0FFF0000; ///< Bitmask marking the location of the column coordinate in m_hw_word for pixel(12 bits)
+  static const int eta_width_mask    = 0x70000000; ///< Bitmask marking the location of the column width in m_hw_word for pixel(3 bits)
+
+  static const int row_coord_bit     = 0; ///< Starting bit of row coordinate in m_hw_word for pixel
+  static const int phi_width_bit     = 12; ///< Starting bit of row width in m_hw_word for pixel
+  static const int split_bit         = 15; ///< Bit for the split cluster flag in m_hw_word for pixel
+  static const int column_coord_bit  = 16; ///<  Starting bit of column coordinate in m_hw_word for pixel
+  static const int eta_width_bit     = 28; ///< Starting bit of column width in m_hw_word for pixel
+
+  static const int strip_coord_mask = 0x07FF; ///< Bitmask marking the location of the strip coordinate in m_hw_word for SCT (3 bits)
+  static const int strip_coord_bit  = 0; ///< Starting bit of strip coordinate in m_hw_word for SCT
+  static const int strip_width_mask = 0x7000; ///< Bitmask marking the location of the strip width in m_hw_word  for SCT (3 bits)
+  static const int strip_width_bit  = 12; ///< Starting bit of strip width in m_hw_word for SCT
 
   const float SCT_row_scaling = 2.;
   const float PIX_row_scaling = 8.;
-- 
GitLab


From aa62fef83ec2a79c0305479ee62bf6b9698c66ed Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Mon, 18 Mar 2019 08:43:05 +0000
Subject: [PATCH 063/163] Revert "Merge branch 'remove_old_calo' into 'master'"

This reverts merge request !21910
---
 .../TrigT2CaloCosmic/CMakeLists.txt           |   33 +
 .../TrigT2CaloCosmic/CosmicHadEnFex.h         |   47 +
 .../TrigT2CaloCosmic/CosmicSamp2Fex.h         |   73 +
 .../TrigT2CaloCosmic/T2CaloCosmic.h           |   77 +
 .../python/TrigT2CaloCosmicConfig.py          |   91 +
 .../TrigT2CaloCosmic/python/__init__.py       |    6 +
 .../TrigT2CaloCosmic/src/CosmicHadEnFex.cxx   |  181 ++
 .../TrigT2CaloCosmic/src/CosmicSamp2Fex.cxx   |  184 ++
 .../TrigT2CaloCosmic/src/T2CaloCosmic.cxx     |  270 +++
 .../components/TrigT2CaloCosmic_entries.cxx   |   16 +
 .../TrigT2CaloJet/CMakeLists.txt              |   57 +
 .../TrigT2CaloJet/EtaPhiSampleHash.h          |   69 +
 .../TrigT2CaloJet/GridsHandler.h              |   42 +
 .../TrigT2CaloJet/HashedTrig3Momentum.h       |   39 +
 .../TrigT2CaloJet/T2AllRoiUnpacking.h         |  233 +++
 .../TrigT2CaloJet/T2CaloFastJet.h             |  148 ++
 .../TrigT2CaloJet/TrigT2CaloJet/T2CaloJet.h   |   97 ++
 .../TrigT2CaloJet/T2CaloJetBaseTool.h         |   58 +
 .../TrigT2CaloJet/T2CaloJetCalibTool.h        |   77 +
 .../TrigT2CaloJet/T2CaloJetConeTool.h         |   77 +
 .../TrigT2CaloJet/T2CaloJetGridFromCells.h    |  118 ++
 .../T2CaloJetGridFromFEBHeader.h              |   87 +
 .../TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h  |   46 +
 .../TrigT2CaloJet/T2L1CaloFullScanJet.h       |   95 +
 .../TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJet.h |   82 +
 .../TrigT2CaloJet/T2L1CaloJetCalibTool.h      |   68 +
 .../T2L1CaloJetFullScanBaseTool.h             |   54 +
 .../T2L1CaloJetFullScanFastJetTool.h          |  128 ++
 .../TrigT2CaloJet/TrigT2CaloJet/T2L1Tools.h   |  136 ++
 .../TrigT2CaloJet/T2L1ToolsDict.h             |   10 +
 .../TrigT2CaloJet/T2L1TowerCalibTool.h        |   69 +
 .../TrigT2CaloJet/T2L1Unpacking.h             |  116 ++
 .../TrigT2CaloJet/Trig3MomentumMerger.h       |   33 +
 .../TrigT2CaloJet/TrigT2CaloJet/selection.xml |    3 +
 .../python/CalibrationFactorsL15.py           |  126 ++
 .../python/TrigT2CaloJetConfig.py             | 1541 +++++++++++++++++
 .../python/TrigT2CaloJetMonitoring.py         |  630 +++++++
 .../share/jobOfragment_TrigT2CaloJet.py       |  139 ++
 .../jobOfragment_TrigT2CaloJet_RomeCalib.py   |  181 ++
 .../TrigT2CaloJet/src/EtaPhiSampleHash.cxx    |   84 +
 .../TrigT2CaloJet/src/GridsHandler.cxx        |   72 +
 .../TrigT2CaloJet/src/HashedTrig3Momentum.cxx |   55 +
 .../TrigT2CaloJet/src/T2AllRoiUnpacking.cxx   |  496 ++++++
 .../TrigT2CaloJet/src/T2CaloFastJet.cxx       |  824 +++++++++
 .../TrigT2CaloJet/src/T2CaloJet.cxx           |  491 ++++++
 .../TrigT2CaloJet/src/T2CaloJetBaseTool.cxx   |   61 +
 .../TrigT2CaloJet/src/T2CaloJetCalibTool.cxx  |  422 +++++
 .../TrigT2CaloJet/src/T2CaloJetConeTool.cxx   |  352 ++++
 .../src/T2CaloJetGridFromCells.cxx            |  443 +++++
 .../src/T2CaloJetGridFromFEBHeader.cxx        |  381 ++++
 .../src/T2CaloJetGridFromLvl1Ppr.cxx          |   92 +
 .../TrigT2CaloJet/src/T2L1CaloFullScanJet.cxx |  322 ++++
 .../TrigT2CaloJet/src/T2L1CaloJet.cxx         |  371 ++++
 .../src/T2L1CaloJetCalibTool.cxx              |  236 +++
 .../src/T2L1CaloJetFullScanBaseTool.cxx       |   57 +
 .../src/T2L1CaloJetFullScanFastJetTool.cxx    |  568 ++++++
 .../TrigT2CaloJet/src/T2L1TowerCalibTool.cxx  |  255 +++
 .../TrigT2CaloJet/src/T2L1Unpacking.cxx       |  649 +++++++
 .../TrigT2CaloJet/src/Trig3MomentumMerger.cxx |  140 ++
 .../src/components/TrigT2CaloJet_entries.cxx  |   35 +
 .../TrigT2CaloTau/CMakeLists.txt              |   42 +
 .../TrigT2CaloTau/T2CalibrationTau.h          |   52 +
 .../TrigT2CaloTau/TrigT2CaloTau/T2CaloTau.h   |  144 ++
 .../TrigT2CaloTau/T2CaloTauErrorHandler.h     |   25 +
 .../TrigT2CaloTau/T2CaloTauErrorMon.h         |   53 +
 .../TrigT2CaloTau/TauAllCaloDRFex.h           |   90 +
 .../TrigT2CaloTau/doc/packagedoc.h            |   21 +
 .../python/TrigT2CaloTauConfig.py             |  104 ++
 .../python/TrigT2CaloTauMonitoring.py         |  109 ++
 .../TrigT2CaloTau/src/T2CaloTau.cxx           |  663 +++++++
 .../TrigT2CaloTau/src/TauAllCaloDRFex.cxx     | 1186 +++++++++++++
 .../src/components/TrigT2CaloTau_entries.cxx  |    7 +
 .../TrigT2CaloTileMon/CMakeLists.txt          |   36 +
 .../TrigT2CaloTileMon/T2CaloTileMon.h         |   76 +
 .../TrigT2CaloTileMon/TileMonHadEnFex.h       |   80 +
 .../TrigT2CaloTileMon/TrigT2TileJet.h         |   50 +
 .../TrigT2CaloTileMon/TrigT2Tower.h           |   80 +
 .../python/TrigT2CaloTileMonConfig.py         |   36 +
 .../TrigT2CaloTileMon/src/T2CaloTileMon.cxx   |  156 ++
 .../TrigT2CaloTileMon/src/TileMonHadEnFex.cxx |  424 +++++
 .../TrigT2CaloTileMon/src/TrigT2TileJet.cxx   |   97 ++
 .../TrigT2CaloTileMon/src/TrigT2Tower.cxx     |  131 ++
 .../components/TrigT2CaloTileMon_entries.cxx  |    6 +
 83 files changed, 15611 insertions(+)
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloCosmic/CMakeLists.txt
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicHadEnFex.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicSamp2Fex.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/T2CaloCosmic.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/TrigT2CaloCosmicConfig.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/__init__.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicHadEnFex.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicSamp2Fex.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/T2CaloCosmic.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/components/TrigT2CaloCosmic_entries.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/CMakeLists.txt
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/EtaPhiSampleHash.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/GridsHandler.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/HashedTrig3Momentum.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2AllRoiUnpacking.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloFastJet.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJet.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetBaseTool.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetCalibTool.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetConeTool.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromCells.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloFullScanJet.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJet.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetCalibTool.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Tools.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1ToolsDict.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1TowerCalibTool.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Unpacking.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/Trig3MomentumMerger.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/selection.xml
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/python/CalibrationFactorsL15.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetConfig.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetMonitoring.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet_RomeCalib.py
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/EtaPhiSampleHash.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/GridsHandler.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/HashedTrig3Momentum.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2AllRoiUnpacking.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloFastJet.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJet.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetBaseTool.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetCalibTool.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetConeTool.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromCells.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromFEBHeader.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromLvl1Ppr.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloFullScanJet.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJet.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetCalibTool.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanBaseTool.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanFastJetTool.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1TowerCalibTool.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1Unpacking.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/Trig3MomentumMerger.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloJet/src/components/TrigT2CaloJet_entries.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTau/CMakeLists.txt
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CalibrationTau.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTau.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorHandler.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorMon.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/TauAllCaloDRFex.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTau/doc/packagedoc.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauConfig.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauMonitoring.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTau/src/T2CaloTau.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTau/src/TauAllCaloDRFex.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTau/src/components/TrigT2CaloTau_entries.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTileMon/CMakeLists.txt
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/T2CaloTileMon.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TileMonHadEnFex.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2TileJet.h
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2Tower.h
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/python/TrigT2CaloTileMonConfig.py
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/T2CaloTileMon.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TileMonHadEnFex.cxx
 create mode 100755 Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2TileJet.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2Tower.cxx
 create mode 100644 Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/components/TrigT2CaloTileMon_entries.cxx

diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/CMakeLists.txt
new file mode 100644
index 000000000000..4991e6f18ca2
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/CMakeLists.txt
@@ -0,0 +1,33 @@
+################################################################################
+# Package: TrigT2CaloCosmic
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrigT2CaloCosmic )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          DetectorDescription/IRegionSelector
+                          GaudiKernel
+                          Trigger/TrigAlgorithms/TrigT2CaloCommon
+                          Trigger/TrigEvent/TrigCaloEvent
+                          Trigger/TrigEvent/TrigSteeringEvent
+                          PRIVATE
+                          Calorimeter/CaloGeoHelpers
+                          Calorimeter/CaloIdentifier
+                          Trigger/TrigT1/TrigT1Interfaces )
+
+# Component(s) in the package:
+atlas_add_library( TrigT2CaloCosmicLib
+                   src/*.cxx
+                   PUBLIC_HEADERS TrigT2CaloCosmic
+                   LINK_LIBRARIES IRegionSelector GaudiKernel TrigCaloEvent TrigSteeringEvent TrigT2CaloCommonLib
+                   PRIVATE_LINK_LIBRARIES CaloGeoHelpers CaloIdentifier TrigT1Interfaces )
+
+atlas_add_component( TrigT2CaloCosmic
+                     src/components/*.cxx
+                     LINK_LIBRARIES IRegionSelector GaudiKernel TrigT2CaloCommonLib TrigCaloEvent TrigSteeringEvent CaloGeoHelpers CaloIdentifier TrigT1Interfaces TrigT2CaloCosmicLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicHadEnFex.h b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicHadEnFex.h
new file mode 100755
index 000000000000..ae55ad0e2196
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicHadEnFex.h
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+ 
+ NAME:     CosmicHadEnFex.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+ 
+ AUTHOR:   D.O.Damazio
+ 
+ PURPOSE:  Based on Cluster position defined in the second
+           EM Calorimeter layer, calculates total Had cluster
+           energy.
+ *******************************************************************/
+
+#ifndef TRIGT2CALOCOSMIC_COSMICHADENFEX_H 
+#define TRIGT2CALOCOSMIC_COSMICHADENFEX_H
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "GaudiKernel/AlgTool.h"
+
+/** Feature extraction Tool for LVL2 Calo. Hadronic EndCaps
+	and Tile Calorimeter. All Samples */
+class CosmicHadEnFex: public IAlgToolCalo {
+  public:
+    /** Constructor */
+    CosmicHadEnFex(const std::string & type, const std::string & name, 
+                 const IInterface* parent);
+    /** Destructor */
+    virtual ~CosmicHadEnFex();
+    /** @brief execute feature extraction for the EM Calorimeter
+    *   second layer 
+    *   @param[out] rtrigEmCluster is the output cluster.
+    *   @param[in] eta/phi-min/max = RoI definition.
+    */
+    using IAlgToolCalo::execute;
+    StatusCode execute(TrigEMCluster &rtrigEmCluster,double etamin,
+			double etamax, double phimin, double phimax);
+   private:
+    float m_THR_1;
+    float m_THR_2;
+
+};
+
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicSamp2Fex.h b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicSamp2Fex.h
new file mode 100755
index 000000000000..7833b89ca7a9
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/CosmicSamp2Fex.h
@@ -0,0 +1,73 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+ 
+ NAME:     CosmicSamp2Fex.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+ 
+ AUTHOR:   D.O. Damazio
+ 
+ PURPOSE:  Calculates energy weighted cluster position around
+	   hottest cell in RoI for LAr second layer.
+ *******************************************************************/
+
+#ifndef TRIGT2CALOCOSMIC_CALOSAMP2FEXCOSMIC_H 
+#define TRIGT2CALOCOSMIC_CALOSAMP2FEXCOSMIC_H
+
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "GaudiKernel/AlgTool.h"
+
+#include "IRegionSelector/IRoiDescriptor.h"
+
+/** Feature extraction Tool for LVL2 Calo. Second EM Calorimeter sample. */
+class CosmicSamp2Fex: public IAlgToolCalo {
+  public:
+    /** Constructor */
+    CosmicSamp2Fex(const std::string & type, const std::string & name, 
+                 const IInterface* parent);
+    /** Destructor */
+    virtual ~CosmicSamp2Fex();
+    /** @brief execute feature extraction for the EM Calorimeter
+    *	second layer 
+    *   @param[out] rtrigEmCluster is the output cluster.
+    *   @param[in] eta/phi-min/max = RoI definition.
+    */
+    using IAlgToolCalo::execute;
+    //    StatusCode execute(TrigEMCluster &rtrigEmCluster,double etamin,
+    //	  		     double etamax, double phimin, double phimax);
+    StatusCode execute(TrigEMCluster &rtrigEmCluster,
+		       const IRoiDescriptor& roi,
+		       const CaloDetDescrElement*& /*caloDDE*/);
+
+    /** Special initialize for Samp2 to include eta as a
+	trigger timer item monitored parameter. Important
+	to compare time performance as a function of cluster
+	position.
+    */
+    StatusCode initialize() {
+		// Very important to call base class initialize
+                if ( IAlgToolCalo::initialize().isFailure() ) {
+                	*(new MsgStream(AlgTool::msgSvc(), name()))
+			<< MSG::FATAL 
+			<< "Could not init base class IAlgTooCalo" << endmsg;
+                }
+                std::string basename(name().substr(25,5)+".");
+		if (m_timersvc) {
+                	m_timer[0]->propName(basename+"Eta");
+		}
+                return StatusCode::SUCCESS;
+    }
+
+  private:
+    double etaSizeLArEMSamp2(const double eta, const int calo) const;
+    double phiSizeLArEMSamp2(const double eta, const int calo) const;
+    float m_THR_1;
+    float m_THR_2;
+
+};
+
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/T2CaloCosmic.h b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/T2CaloCosmic.h
new file mode 100755
index 000000000000..944639bc7948
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/TrigT2CaloCosmic/T2CaloCosmic.h
@@ -0,0 +1,77 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+ NAME:     T2CaloCosmic.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+
+ AUTHOR:   D.O. Damazio
+
+ PURPOSE:  Based on T2CaloBase works as main driver for the LVL2
+	   Calorimeter Cosmic Algorithm. Receives and decodes LVL1
+	   information (RoI position), creates the TrigEMCluster to
+	   be the output of LVL2 Calo with extracted features. Call
+	   IAlgToolCalos to perform FEX.
+ *******************************************************************/
+
+#ifndef TRIGT2CALOCOSMIC_T2CALOCOSMIC_H
+#define TRIGT2CALOCOSMIC_T2CALOCOSMIC_H
+
+#include <string>
+#include "TrigT2CaloCommon/T2CaloBase.h"
+
+class IAlgToolCalo;
+class T2CaloEgammaMon;
+class MsgStream;
+class TrigEMCluster;
+
+/** Main LVL2 Algorithm. Processes LVL1 information, call FEX
+    IAlgToolCalos and produces the TrigEMCluster output. */
+class T2CaloCosmic: public T2CaloBase {
+
+
+  public:
+    /** Constructor */
+    T2CaloCosmic(const std::string & name, ISvcLocator* pSvcLocator);
+    /** Destructor */
+    ~T2CaloCosmic();
+
+    /** hltExecute will call FEX IAlgToolCalo::execute() to process RoI.
+	called by the Steering per EMRoI. */
+    HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE,
+			      HLT::TriggerElement* outputTE);
+    /** hltInitialize. Called by the Steering. */
+    HLT::ErrorCode hltInitialize();
+    /** hltFinalize. Called by the Steering. */
+    HLT::ErrorCode hltFinalize();
+
+  private:
+
+    /** Monitoring Tool */
+    // T2CaloEgammaMon* m_monitoring;
+    /** To support new monitoring. Values must be copied to
+	this monitored Cluster for each RoI. */
+    const TrigEMCluster* m_monitoredCluster;
+    /** To monitor rCore */
+    float m_rCore;
+    /** To monitor eRatio */
+    float m_eRatio;
+    /** Forced LVL1 eta */
+    float m_l1eta;
+    /** Forced LVL1 phi */
+    float m_l1phi;
+
+    // Properties:
+    std::string m_trigEmClusterKey;
+    /** Will monitoring be used or not */
+    //bool m_mon;
+    /** Coordinates to be used by the tools (in order by tool) */
+    std::vector<float> m_etamin;
+    std::vector<float> m_etamax;
+    std::vector<float> m_phimin;
+    std::vector<float> m_phimax;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/TrigT2CaloCosmicConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/TrigT2CaloCosmicConfig.py
new file mode 100755
index 000000000000..0cae5c1d6b02
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/TrigT2CaloCosmicConfig.py
@@ -0,0 +1,91 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+from TrigT2CaloCosmic.TrigT2CaloCosmicConf import CosmicSamp2Fex
+from TrigT2CaloCosmic.TrigT2CaloCosmicConf import CosmicHadEnFex
+from TrigT2CaloCosmic.TrigT2CaloCosmicConf import T2CaloCosmic
+
+#from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram
+#from TrigMonitorBase.TrigGenericMonitoringToolConfig import TrigGenericMonitoringToolConfig
+
+#from AthenaCommon.Constants import VERBOSE,DEBUG
+
+class CosmicHadEnFex1(CosmicHadEnFex):
+      __slots__ = []
+      def __init__ (self, name="CosmicHadEnFex1"):
+        super(CosmicHadEnFex1,self).__init__(name)
+        self.THR_1=200
+
+class CosmicHadEnFex2(CosmicHadEnFex):
+      __slots__ = []
+      def __init__ (self, name="CosmicHadEnFex2"):
+        super(CosmicHadEnFex2,self).__init__(name)
+        self.THR_1=200
+
+class CosmicSamp2Fex1(CosmicSamp2Fex):
+      __slots__ = []
+      def __init__ (self, name="CosmicSamp2Fex1"):
+        super(CosmicSamp2Fex1,self).__init__(name)
+        self.THR_1=420
+
+class CosmicSamp2Fex2(CosmicSamp2Fex):
+      __slots__ = []
+      def __init__ (self, name="CosmicSamp2Fex2"):
+        super(CosmicSamp2Fex2,self).__init__(name)
+        self.THR_1=420
+
+
+class T2CaloCosmic_Cosmic (T2CaloCosmic):
+   __slots__ = []
+   def __init__ (self, name="T2CaloCosmic_Cosmic"): 
+       super(T2CaloCosmic_Cosmic, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [CosmicHadEnFex1(),
+                           CosmicHadEnFex2(),
+                           CosmicSamp2Fex1(),
+                           CosmicSamp2Fex2()]
+       #self.EtaMin=[0.2,0,0.2,-1.0]
+       #self.EtaMax=[ 0.6, 1.0, 0.6, 0]
+       self.EtaMin=[1.0, 0.1, 0.1, -0.1]
+       self.EtaMax=[ 2.4, 2.4, 2.4, 2.4 ]
+       self.PhiMin=[1.3, -1.8, 1.3, -1.8]
+       self.PhiMax=[1.8, -1.3, 1.8, -1.3]
+       self.EtaWidth = 0.5
+       self.PhiWidth = 0.5
+       self.TimerNtuple="T2CaloCosmic.T2CaEgtTot"
+       self.TrigEMClusterKey="T2CaloCosmic"
+#       self.Monitoring=False
+#       self.OutputLevel = DEBUG
+#       self.AthenaMonTools = [ TrigT2CaloCosmicValMonitoring(),
+#			 TrigT2CaloCosmicOnMonitoring() ]
+
+class T2CaloCosmic_Cosmic_NoHad (T2CaloCosmic):
+   __slots__ = []
+   def __init__ (self, name="T2CaloCosmic_Cosmic_NoHad"): 
+       super(T2CaloCosmic_Cosmic_NoHad, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [CosmicSamp2Fex()]
+       self.EtaWidth = 0.5
+       self.PhiWidth = 0.5
+       self.TimerNtuple="T2CaloCosmic.T2CaEgtTot"
+       self.TrigEMClusterKey="T2CaloTrigEMCluster"
+#       self.Monitoring=False
+#       self.OutputLevel = DEBUG
+#       self.AthenaMonTools = [ TrigT2CaloCosmicValMonitoring(),
+#			 TrigT2CaloCosmicOnMonitoring() ]
+
+class T2CaloCosmic_Cosmic_NoEm (T2CaloCosmic):
+   __slots__ = []
+   def __init__ (self, name="T2CaloCosmic_Cosmic_NoEm"): 
+       super(T2CaloCosmic_Cosmic_NoEm, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [CosmicHadEnFex()]
+       self.EtaWidth = 0.5
+       self.PhiWidth = 0.5
+       self.TimerNtuple="T2CaloCosmic.T2CaEgtTot"
+       self.TrigEMClusterKey="T2CaloTrigEMCluster"
+#       self.Monitoring=False
+#       self.OutputLevel = DEBUG
+#       self.AthenaMonTools = [ TrigT2CaloCosmicValMonitoring(),
+#			 TrigT2CaloCosmicOnMonitoring() ]
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/__init__.py b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/__init__.py
new file mode 100755
index 000000000000..0cbf9c602dfc
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/python/__init__.py
@@ -0,0 +1,6 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+__version__ = "1.0.0"
+__author__  = "Denis.Oiveira.Damazio@cern.ch"
+__all__     = [ "TrigT2CaloCosmicConfig" ]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicHadEnFex.cxx b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicHadEnFex.cxx
new file mode 100755
index 000000000000..35192b4467d2
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicHadEnFex.cxx
@@ -0,0 +1,181 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+// 
+// NAME:     CosmicHadEnFex.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+// 
+// AUTHOR:   M.P. Casado
+// 
+// REFERENCES: Based on Trigger/TrigT2CaloCosmic/T2EmHadAlgorithm.cxx
+//
+// ********************************************************************
+
+#include "TrigCaloEvent/TrigEMCluster.h"
+#include "CaloGeoHelpers/CaloSampling.h"
+
+#include "TrigT2CaloCosmic/CosmicHadEnFex.h"
+#include "TrigT2CaloCommon/Calo_Def.h"
+
+
+CosmicHadEnFex::CosmicHadEnFex(const std::string & type, const std::string & name, 
+                   const IInterface* parent): IAlgToolCalo(type, name, parent),
+		   m_THR_1(400),m_THR_2(100)
+		   {
+	declareProperty("THR_1",m_THR_1);
+        declareProperty("THR_2",m_THR_2);
+	//#ifndef NDEBUG
+/*
+	// 1 -> CaloType HAD, 0 -> First Layer
+        m_geometry[0] = new T2Geometry(1,0);
+        // 1 -> CaloType HAD, 1 -> Second Layer
+        m_geometry[1] = new T2Geometry(1,1);
+        // 1 -> CaloType HAD, 2 -> Third Layer
+        m_geometry[2] = new T2Geometry(1,2);
+*/
+//#endif
+}
+
+CosmicHadEnFex::~CosmicHadEnFex(){
+}
+
+StatusCode CosmicHadEnFex::execute(TrigEMCluster &rtrigEmCluster,double etamin,
+		double etamax, double phimin, double phimax){
+
+	m_lardecoded=false;
+	m_tiledecoded=false;
+        // Time total AlgTool time
+        if (!m_timersvc.empty()) m_timer[0]->start();
+
+        // MsgStream log(msgSvc(), name());
+	if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("in execute(TrigEMCluster &)");
+
+  double deta = 0.;           // eta difference current cell - seed
+  double dphi = 0.;           // phi difference current cell - seed
+
+  CaloSampling::CaloSample samp;  
+
+  double energyEta = rtrigEmCluster.eta();
+  double energyPhi = rtrigEmCluster.phi();
+  rtrigEmCluster.set_ehad1(0.);
+
+  // Dump eta-phi strip ranges into arrays
+  // Define variables here so that their scope covers both the Tile and HEC loops
+  // Use arrays of length 3 since there is no samp 0 in the HAD calorimeters 
+  // this avoids wasting memory but makes the code slightly less clear
+
+  // Time Region Selector 
+  if (!m_timersvc.empty()) {
+	m_timer[1]->start();      
+	m_timer[1]->pause();      
+	m_timer[2]->start();      
+	m_timer[2]->pause();      
+	m_timer[3]->start();      
+	m_timer[3]->pause();      
+	m_timer[4]->start();      
+	m_timer[4]->pause();      
+  }
+  double seedEnergy = 0.;
+  double seedPhi    = 0;
+  double seedEta    = 999.;
+  
+   // TILECAL Assuming no knowledge about first sample
+  
+        // Time to access RegionSelector
+        if (!m_timersvc.empty()) m_timer[1]->resume();
+
+        // Region Selector, no sample needed
+        // Get detector offline ID's for Collections
+        m_data->RegionSelector(0,etamin,etamax,phimin,phimax,TILE);
+
+        if (!m_timersvc.empty()) m_timer[1]->pause();
+
+  for (unsigned int iR=0;iR<m_data->TileContSize();iR++) {
+
+        // Time to access Collection (and ByteStreamCnv ROBs)
+        if (!m_timersvc.empty()) m_timer[2]->resume();
+	// For the first sample you will create the containers
+	// For the others no
+        if ( m_data->LoadCollections(m_itBegin,m_itEnd,iR,!iR).isFailure() )
+                return StatusCode::FAILURE;
+	m_tiledecoded=true;
+	if ( m_saveCells ) IAlgToolCalo::storeCells();
+        // Finished to access Collection
+        if (!m_timersvc.empty()) m_timer[2]->pause();
+        // Algorithmic time
+        if (!m_timersvc.empty()) m_timer[3]->resume();
+
+   for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) { //loop over cells
+    
+     //double etaCell = (*m_itt)->eta();
+     //double phiCell = (*m_itt)->phi();
+     //double energyCell = (*m_itt)->energy();
+    if ((*m_itt)->energy() > seedEnergy && (*m_itt)->energy() > m_THR_1) {
+        seedEnergy = (*m_itt)->energy();
+        seedEta    = (*m_itt)->eta();
+        seedPhi    = (*m_itt)->phi();
+    }
+    }
+    if (!m_timersvc.empty()) m_timer[3]->pause();
+    }
+  energyEta = seedEta;
+  energyPhi = seedPhi;
+  rtrigEmCluster.setEta(seedEta);
+  rtrigEmCluster.setPhi(seedPhi);
+  rtrigEmCluster.setEnergy(seedEnergy);
+  rtrigEmCluster.set_ehad1(0.);
+  rtrigEmCluster.set_e277(999);
+  rtrigEmCluster.set_e2tsts1(999);
+
+  for (unsigned int iR=0;iR<m_data->TileContSize();iR++) {
+
+        // Time to access Collection (and ByteStreamCnv ROBs)
+        if (!m_timersvc.empty()) m_timer[2]->resume();
+	// For the first sample you will create the containers
+	// For the others no
+        if ( m_data->LoadCollections(m_itBegin,m_itEnd,iR,!iR).isFailure() )
+                return StatusCode::FAILURE;
+        // Finished to access Collection
+        if (!m_timersvc.empty()) m_timer[2]->pause();
+        // Algorithmic time
+        if (!m_timersvc.empty()) m_timer[3]->resume();
+
+   for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) { //loop over cells
+    
+    double etaCell = (*m_itt)->eta();
+    double phiCell = (*m_itt)->phi();
+    double energyCell = (*m_itt)->energy();
+
+    // find position of current cell w.r.t. seed
+    deta = fabs( etaCell - energyEta );
+    dphi = fabs( phiCell - energyPhi );
+    if ( dphi > M_PI ) dphi = 2.* M_PI - dphi;   // wrap 0 -> 6.28
+    // hadronic measurements: energy sum in 0.1*0.1
+    if ( deta <= 0.1  &&
+	 dphi <= 0.1  && energyCell>m_THR_2){ 
+      //samp = CaloSampling::getSampling(*(*m_itt));
+      samp = (*m_itt)->caloDDE()->getSampling();
+      rtrigEmCluster.setEnergy(samp,rtrigEmCluster.energy(samp) + energyCell);
+      rtrigEmCluster.setRawEnergy(samp,rtrigEmCluster.rawEnergy(samp) + energyCell);
+    }
+
+   } // end of loop over cells 
+   // Algorithmic time
+   if (!m_timersvc.empty()) m_timer[3]->pause();
+   
+  } // End of loop over TileCal drawers
+
+
+	// Stop all timers
+        if (!m_timersvc.empty()){ 
+		m_timer[4]->stop();
+		m_timer[3]->stop();
+		m_timer[2]->stop();
+		m_timer[1]->stop();
+		m_timer[0]->stop();
+	}
+
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicSamp2Fex.cxx b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicSamp2Fex.cxx
new file mode 100755
index 000000000000..985b61cc1a12
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/CosmicSamp2Fex.cxx
@@ -0,0 +1,184 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+// 
+// NAME:     CosmicSamp2Fex.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+// 
+// AUTHOR:   M.P. Casado
+// 
+//
+// ********************************************************************
+
+#include "CaloIdentifier/LArEM_ID.h"
+
+#include "TrigCaloEvent/TrigEMCluster.h"
+#include "CaloGeoHelpers/CaloSampling.h"
+
+#include "TrigT2CaloCosmic/CosmicSamp2Fex.h"
+#include "TrigT2CaloCommon/Calo_Def.h"
+
+
+CosmicSamp2Fex::CosmicSamp2Fex(const std::string & type, const std::string & name, 
+                   const IInterface* parent): IAlgToolCalo(type, name, parent)
+		   {
+	declareProperty("THR_1",m_THR_1 = 400.0);
+	declareProperty("THR_2",m_THR_2 = 100.0);
+	//#ifndef NDEBUG
+	// Create Geometry object
+        // 0 -> CaloType EM, 2 -> Second Layer
+	//        m_geometry[0] = new T2Geometry(0,2);
+	//#endif
+}
+
+CosmicSamp2Fex::~CosmicSamp2Fex(){
+}
+
+StatusCode CosmicSamp2Fex::execute(TrigEMCluster &rtrigEmCluster,
+				   const IRoiDescriptor& roi,
+				   const CaloDetDescrElement*& /*caloDDE*/) { 
+  
+        m_lardecoded=false;
+	m_tiledecoded=false;
+	// Time total AlgTool time 
+	if (!m_timersvc.empty()) m_timer[0]->start();      
+
+	if (msgLvl(MSG::DEBUG)) 
+	  ATH_MSG_DEBUG("in execute(TrigEMCluster&)");
+
+	// Time to access RegionSelector
+	if (!m_timersvc.empty()) m_timer[1]->start();      
+
+	// Region Selector, sampling 2
+	int sampling = 2;
+	// Get detector offline ID's for Collections
+	m_data->RegionSelector(sampling, roi);
+
+	// Finished to access RegionSelector
+	if (!m_timersvc.empty()) m_timer[1]->stop();      
+	// Time to access Collection (and ByteStreamCnv ROBs)
+	if (!m_timersvc.empty()) m_timer[2]->start();      
+
+	if ( m_data->LoadCollections(m_iBegin,m_iEnd).isFailure() )
+		return StatusCode::FAILURE;
+	m_lardecoded=true;
+	if ( m_saveCells ) IAlgToolCalo::storeCells();
+	// Finished to access Collection
+	if (!m_timersvc.empty()) m_timer[2]->stop();      
+	// Algorithmic time
+	if (!m_timersvc.empty()) m_timer[3]->start();      
+
+        //double energyEta = 0.;
+        //double energyPhi = 0.;
+ 
+        // add these variables to take care of phi wrap-around
+        //double energyNegPhi = 0.; //SRA
+        //double energyNegPhiConv = 0.; //SRA
+        //double energyPosPhi = 0.; //SRA
+
+
+  // 1. Find seed cell (highest Et in ROI .. layer 2)
+  // 2. Find Et weighted eta, phi in 3*7 cell (layer 2) (photon + e id)
+  // 3. Find Et in cells of sizes 3*3, 3*7, 7*7 (layer 2 + strips)
+  //	    				        (3*7 for photon + e id)
+  // 4. Find cluster width in 3*5 cell, layer 2 (photon id, needs
+  //		 			         parabolic parametrisation)
+  // 5. Find strip energies and eta (2*5 window)
+  // 6. Find frac73 (photon id), (E1-E2)/(E1+E2) (e + photon id)
+  
+  double seedEnergy = 0.; 
+  double seedPhi    = 0.;
+  double seedEta    = 999.;
+  
+  //const LArEM_ID*   emID  = m_larMgr->getEM_ID();
+  for(m_it = m_iBegin;m_it != m_iEnd; ++m_it) {
+      if ((*m_it)->energy() > seedEnergy && (*m_it)->energy() > m_THR_1) {
+        seedEnergy = (*m_it)->energy();
+        seedEta    = (*m_it)->eta();
+        seedPhi    = (*m_it)->phi();
+      } 
+  }
+
+  for(m_it = m_iBegin;m_it != m_iEnd; ++m_it) {
+
+    double etaCell = (*m_it)->eta();
+    double phiCell = (*m_it)->phi();
+    double energyCell = (*m_it)->energy();
+
+    // find position of current cell w.r.t. seed
+    float deta = fabs( etaCell - seedEta );
+    float dphi = fabs( phiCell - seedPhi );
+    if ( dphi > M_PI ) dphi = 2.* M_PI - dphi;   // wrap 0 -> 6.28
+    // hadronic measurements: energy sum in 0.1*0.1
+    if ( deta <= 0.1  &&
+         dphi <= 0.1  && energyCell>m_THR_2){
+      //CaloSampling::CaloSample samp = CaloSampling::getSampling(*(*m_it));
+      CaloSampling::CaloSample samp = (*m_it)->caloDDE()->getSampling();
+      rtrigEmCluster.setEnergy(samp,rtrigEmCluster.energy(samp) + energyCell);
+      rtrigEmCluster.setRawEnergy(samp,rtrigEmCluster.rawEnergy(samp) + energyCell);
+    }
+  }
+
+  //double totalEnergy = 0;
+  //CaloSampling::CaloSample samp;
+
+     
+	if (!m_timersvc.empty()) m_timer[3]->stop();      
+	// Save EMShowerMinimal time
+	if (!m_timersvc.empty()) m_timer[4]->start();      
+
+  
+  // Update cluster Variables
+
+  rtrigEmCluster.set_e277(999);
+  rtrigEmCluster.set_e2tsts1(999);
+  rtrigEmCluster.setRawEnergy( seedEnergy );
+  rtrigEmCluster.setEnergy( seedEnergy );
+  rtrigEmCluster.setEta(seedEta);
+  rtrigEmCluster.setPhi(seedPhi);
+  rtrigEmCluster.setRawEta(seedEta);
+  rtrigEmCluster.setRawPhi(seedPhi);
+        
+	// Finished save EMShowerMinimal time
+	if (!m_timersvc.empty()) m_timer[4]->stop();      
+
+
+	// Time total AlgTool time 
+	if (!m_timersvc.empty()) m_timer[0]->stop();      
+
+  return StatusCode::SUCCESS;
+}
+
+double CosmicSamp2Fex::etaSizeLArEMSamp2(double cellEta, int calo) const{
+  double sizeEta;
+  if( calo == Calorimeter::EMBAR ){             
+      if ( fabs(cellEta) < 1.4 ){
+        sizeEta = 0.025;
+      }else{
+        sizeEta = 0.075;
+      }
+  } else {             
+      if ( fabs(cellEta) < 2.5 ){
+	sizeEta = 0.025;
+      } else{
+	sizeEta = 0.1;
+      }		
+  }
+  return sizeEta;
+}
+
+double CosmicSamp2Fex::phiSizeLArEMSamp2(double cellEta, int calo) const{
+  double sizePhi;
+  if( calo == Calorimeter::EMBAR ){               
+    sizePhi = 0.025;
+  } else {             
+      if ( fabs(cellEta) < 2.5 ){
+	sizePhi = 0.025;
+      } else {
+	sizePhi = 0.1;
+      }		
+  }
+  return sizePhi;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/T2CaloCosmic.cxx b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/T2CaloCosmic.cxx
new file mode 100755
index 000000000000..ea59fd90b945
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/T2CaloCosmic.cxx
@@ -0,0 +1,270 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloCosmic.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloCosmic
+//
+// AUTHOR:   D.O. Damazio
+//
+// - Add variables for job option controlled region limits, set defaults
+//   to most likely values.
+// - Add function EtaPhiRange to return the maximum and minimum eta or phi
+//   values to use when calculating energy sums over a region  - R. Soluk
+// ********************************************************************
+
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IToolSvc.h"
+#include "GaudiKernel/StatusCode.h"
+
+#include "TrigT1Interfaces/RecEmTauRoI.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+#include "TrigSteeringEvent/PhiHelper.h"
+
+
+#include "TrigCaloEvent/TrigEMClusterContainer.h"
+
+#include "TrigT2CaloCosmic/T2CaloCosmic.h"
+//#include "TrigT2CaloCosmic/T2CaloCosmicMon.h"
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+
+class ISvcLocator;
+
+T2CaloCosmic::T2CaloCosmic(const std::string & name, ISvcLocator* pSvcLocator)
+  : T2CaloBase(name, pSvcLocator)
+{
+    declareProperty("TrigEMClusterKey",m_trigEmClusterKey = "T2CaloTrigEMCluster");
+    declareProperty("L1ForceEta",m_l1eta = -10.0);
+    declareProperty("L1ForcePhi",m_l1phi = -10.0);
+    declareProperty("EtaMin",m_etamin);
+    declareProperty("EtaMax",m_etamax);
+    declareProperty("PhiMin",m_phimin);
+    declareProperty("PhiMax",m_phimax);
+}
+
+T2CaloCosmic::~T2CaloCosmic()
+{
+}
+
+
+HLT::ErrorCode T2CaloCosmic::hltInitialize()
+{
+  // Support for new monitoring
+  declareMonitoredObject("Eta",
+			m_monitoredCluster,&TrigEMCluster::eta);
+  declareMonitoredObject("Phi",
+			m_monitoredCluster,&TrigEMCluster::phi);
+  declareMonitoredObject("Et",
+			m_monitoredCluster,&TrigEMCluster::et);
+  declareMonitoredObject("Had1Et",
+			m_monitoredCluster,&TrigEMCluster::ehad1);
+  declareMonitoredObject("weta2",
+			m_monitoredCluster,&TrigEMCluster::weta2);
+  // More complicated variables to be monitored
+  declareMonitoredVariable("Rcore", m_rCore );
+  declareMonitoredVariable("Eratio",m_eRatio);
+
+  return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloCosmic::hltExecute(const HLT::TriggerElement* inputTE,
+					HLT::TriggerElement* outputTE)
+{
+  // Time total T2CaloCosmic execution time.
+  if ( m_timersvc ) m_timer[0]->start();
+  
+  if (msgLvl(MSG::DEBUG))
+    ATH_MSG_DEBUG("in execute()");
+
+ 
+  //bool status = false;
+  
+  // Some debug output:
+  if (msgLvl(MSG::DEBUG)) {
+    msg (MSG::DEBUG) << "outputTE->getId(): " << outputTE->getId() << endmsg;
+    
+    msg(MSG::DEBUG) << "inputTE->getId(): " << inputTE->getId() << endmsg;
+  }
+    
+  const TrigRoiDescriptor* roiDescriptor = 0;
+
+  HLT::ErrorCode hltStatus = getFeature(inputTE, roiDescriptor);
+
+  if ( hltStatus == HLT::OK ) {
+    if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)  << *roiDescriptor << endmsg;	
+  } else {
+    msg(MSG::WARNING) << " Failed to find RoiDescriptor " << endmsg;
+    return hltStatus;
+  }
+
+  // Some debug output:
+
+  msg(MSG::DEBUG)  << "Message to count events. LVL1 phi="
+		   << roiDescriptor->phi()
+		   << " & LVL1 eta="
+		   << roiDescriptor->eta()
+		   << endmsg;
+
+  // End LVL1 part
+  double etamin, etamax, phimin, phimax;
+  double eta, phi;
+
+  int roiword = roiDescriptor->roiWord();
+
+  //  if ( !m_trustRoiLimits ) { 
+  if ( (m_l1eta<-9.9)&&(m_l1phi<-9.9)){
+    eta = roiDescriptor->eta();
+    phi = roiDescriptor->phi();
+  }
+  else { 
+    eta = m_l1eta;
+    phi = HLT::wrapPhi(m_l1phi);
+  }
+  
+  etamin = std::max(-2.5, eta - m_etaWidth);
+  etamax = std::min( 2.5, eta + m_etaWidth);
+  phimin = HLT::wrapPhi( phi - m_phiWidth);
+  phimax = HLT::wrapPhi( phi + m_phiWidth);
+  
+  TrigRoiDescriptor* newroi = new TrigRoiDescriptor( eta, etamin, etamax, phi, phimin, phimax );
+  attachFeature( outputTE, newroi, "T2CaloCosmic" );
+  roiDescriptor = newroi;
+  
+  //  }
+  
+  
+
+  if (msgLvl(MSG::DEBUG)) {
+    msg(MSG::DEBUG)  << " etamin = "<< *roiDescriptor << endmsg;
+    //  (*m_log) << MSG::DEBUG  << " etamin = "<< etamin << endmsg;
+    //  (*m_log) << MSG::DEBUG  << " etamax = "<< etamax << endmsg;
+    //  (*m_log) << MSG::DEBUG  << " phimin = "<< phimin << endmsg;
+    //  (*m_log) << MSG::DEBUG  << " phimax = "<< phimax << endmsg;
+  }
+
+
+  if (msgLvl(MSG::DEBUG))  msg(MSG::DEBUG)  << " Making TrigEMCluster "<< endmsg;
+
+  std::vector<xAOD::TrigEMCluster*> vec_clus;
+  std::cout << "m_emAlgTools.size() = " << m_emAlgTools.size() << std::endl;
+  // Ok, ignoring LVL1 and forcing a position
+  int counter=0;
+  
+  ToolHandleArray<IAlgToolCalo>::iterator it = m_emAlgTools.begin();
+  if ( m_timersvc ) m_timer[1]->start();
+  for (; it < m_emAlgTools.end(); it++)  {
+  xAOD::TrigEMCluster* ptrigEmCluster = new xAOD::TrigEMCluster();
+  // It is a good idea to clear the energies
+  for(int i=0;i<MAXSIZE;i++)
+		ptrigEmCluster->setEnergy((CaloSampling::CaloSample )i,0.);
+
+  // Add RoI word to TrigEMCluster
+  (*ptrigEmCluster).setRoIword(roiword);
+  (*ptrigEmCluster).setEta1(10+counter);
+  etamin=m_etamin[counter];
+  etamax=m_etamax[counter];
+  phimin=m_phimin[counter];
+  phimax=m_phimax[counter];
+  //    if ((*it)->execute(*ptrigEmCluster,etamin,etamax,phimin,phimax).isFailure() ) {
+  if ((*it)->execute(*ptrigEmCluster,*roiDescriptor, caloDDENull).isFailure() ) {
+    ATH_MSG_WARNING("T2Calo AlgToolCosmic returned Failure");
+    return HLT::TOOL_FAILURE;
+  }
+  // If you do not have any hot cell in top or bottom, stop algo
+  if ( (counter==0 || counter==1) && (*ptrigEmCluster).energy()==0)
+	return HLT::OK; 
+  counter++;
+  vec_clus.push_back(ptrigEmCluster);
+  }
+  // support to new monitoring
+  m_rCore=0;
+  m_eRatio=0;
+/*
+  if ( ptrigEmCluster->e277()!=0 )
+	m_rCore =  ptrigEmCluster->e237()/ptrigEmCluster->e277();
+  if ( ptrigEmCluster->emaxs1()+ptrigEmCluster->e2tsts1() !=0){
+	m_eRatio  =  ptrigEmCluster->emaxs1()-ptrigEmCluster->e2tsts1();
+	m_eRatio /=  ptrigEmCluster->emaxs1()+ptrigEmCluster->e2tsts1();
+  }
+*/
+  if ( m_timersvc ) m_timer[1]->stop();
+  for(size_t i=0;i<vec_clus.size();i++){
+  xAOD::TrigEMCluster* ptrigEmCluster=vec_clus[i];
+  
+  // Print out Cluster produced
+  msg(MSG::DEBUG)  << " Values of Cluster produced: "<< endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: emEnergy = "<< (*ptrigEmCluster).energy() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: hadEnergy = "<< (*ptrigEmCluster).ehad1() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: rCore = " << ((*ptrigEmCluster).e237() )/ ((*ptrigEmCluster).e277()) << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: energyRatio = "
+		   << (((*ptrigEmCluster).emaxs1()-(*ptrigEmCluster).e2tsts1())/
+		       ((*ptrigEmCluster).emaxs1()+(*ptrigEmCluster).e2tsts1()))
+		   << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: clusterWidth = " << (*ptrigEmCluster).weta2() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: frac73 = " << (*ptrigEmCluster).fracs1() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: eta = "<< (*ptrigEmCluster).eta() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: phi = "<< (*ptrigEmCluster).phi() << endmsg;
+  msg(MSG::DEBUG)  << " REGTEST: roiWord = " << (*ptrigEmCluster).RoIword() << endmsg;
+
+  // Fill monitoring hists:
+/*
+  if (m_mon)
+    if ( m_monitoring->fillT2CaloCosmicHists(ptrigEmCluster).isFailure() )
+	(*m_log) << MSG::DEBUG << " Failled to Monitor" << endmsg;
+*/
+  
+  std::string key = "";
+
+  hltStatus = recordAndAttachFeature(outputTE, ptrigEmCluster, key, "TrigT2CaloCosmic");
+  if (hltStatus != HLT::OK){
+    if(msgLvl(MSG::DEBUG)) ATH_MSG_ERROR("Write of TrigEMCluster into outputTE failed");
+    return hltStatus;
+  }
+  }
+
+  // Create a new RoiDescriptor with updated eta and phi.
+  // Note that the steering will propagate l1Id and roiId automatically
+  // so no need to set them.
+/*
+  TrigEMCluster* ptrigEmCluster = vec_clus[0];
+  TrigRoiDescriptor* newRoiDescriptor = 
+    new TrigRoiDescriptor(roiDescriptor->l1Id(), roiDescriptor->roiId(),
+			  ptrigEmCluster->eta(), ptrigEmCluster->phi());
+  
+  hltStatus = attachFeature(outputTE,newRoiDescriptor,"TrigT2CaloCosmic");
+ 
+  if ( hltStatus != HLT::OK ) {
+     (*m_log) << MSG::ERROR << "Write of update TrigRoiDescriptor into outputTE failed"
+	   << endmsg;
+     return hltStatus;
+  }
+*/
+
+//#ifndef NDEBUG
+ //   (*m_log) << MSG::DEBUG  << "Recorded an RoiDescriptor "
+//	  << " phi " <<  newRoiDescriptor->phi0()
+//	  << " eta " << newRoiDescriptor->eta0() << endmsg;
+//#endif
+
+  // Some debug output:
+  if (msgLvl(MSG::DEBUG)) {
+    msg(MSG::DEBUG) << "We assume success, set TE with Id "
+		    << outputTE->getId() << " active to signal positive result."
+		    << endmsg;
+  }
+  
+  // Time total T2CaloCosmic execution time.
+  if ( m_timersvc ) m_timer[0]->stop();
+  
+  return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloCosmic::hltFinalize(){
+  //  if ( msgLvl() <= MSG::INFO ) 
+  if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("in finalize()");
+  return HLT::OK;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/components/TrigT2CaloCosmic_entries.cxx b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/components/TrigT2CaloCosmic_entries.cxx
new file mode 100644
index 000000000000..f6ffcb69cfca
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCosmic/src/components/TrigT2CaloCosmic_entries.cxx
@@ -0,0 +1,16 @@
+#include "TrigT2CaloCosmic/T2CaloCosmic.h"
+//#include "TrigT2CaloCosmic/T2CaloCosmicMon.h"
+//#include "TrigT2CaloCosmic/T2CaloCosmicSamp1.h"
+#include "TrigT2CaloCosmic/CosmicSamp2Fex.h"
+//#include "TrigT2CaloCosmic/CosmicSamp1Fex.h"
+//#include "TrigT2CaloCosmic/CosmicEmEnFex.h"
+#include "TrigT2CaloCosmic/CosmicHadEnFex.h"
+
+DECLARE_COMPONENT( T2CaloCosmic )
+//DECLARE_COMPONENT( T2CaloCosmicSamp1 )
+DECLARE_COMPONENT( CosmicSamp2Fex )
+//DECLARE_COMPONENT( CosmicSamp1Fex )
+//DECLARE_COMPONENT( CosmicEmEnFex )
+DECLARE_COMPONENT( CosmicHadEnFex )
+//DECLARE_COMPONENT( T2CaloCosmicMon )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigT2CaloJet/CMakeLists.txt
new file mode 100644
index 000000000000..feea8bb7f8d2
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/CMakeLists.txt
@@ -0,0 +1,57 @@
+################################################################################
+# Package: TrigT2CaloJet
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrigT2CaloJet )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Calorimeter/CaloInterface
+                          Calorimeter/CaloRec
+                          Control/AthContainers
+                          DetectorDescription/IRegionSelector
+                          GaudiKernel
+                          Trigger/TrigAlgorithms/TrigT2CaloCommon
+                          Trigger/TrigEvent/TrigCaloEvent
+                          Trigger/TrigEvent/TrigParticle
+                          Trigger/TrigEvent/TrigSteeringEvent
+                          Trigger/TrigSteer/TrigInterfaces
+                          Trigger/TrigTools/TrigT2CaloCalibration
+                          Trigger/TrigTools/TrigTimeAlgs
+                          PRIVATE
+                          Calorimeter/CaloGeoHelpers
+                          Control/AthenaKernel
+                          Trigger/TrigT1/TrigT1CaloByteStream
+                          Trigger/TrigT1/TrigT1CaloEvent
+                          Trigger/TrigT1/TrigT1CaloToolInterfaces
+                          Trigger/TrigT1/TrigT1Interfaces )
+
+# External dependencies:
+find_package( Boost COMPONENTS filesystem thread system )
+find_package( FastJet )
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_library( TrigT2CaloJetLib
+                   src/*.cxx
+                   PUBLIC_HEADERS TrigT2CaloJet
+                   INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS}
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${FASTJET_LIBRARIES} AthContainers IRegionSelector GaudiKernel TrigCaloEvent TrigParticle TrigSteeringEvent CaloRecLib TrigT2CaloCommonLib TrigInterfacesLib TrigT2CaloCalibrationLib TrigTimeAlgsLib TrigT1CaloEventLib
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel TrigT1CaloToolInterfaces TrigT1Interfaces )
+
+atlas_add_component( TrigT2CaloJet
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${FASTJET_LIBRARIES} ${ROOT_LIBRARIES} CaloRecLib AthContainers IRegionSelector GaudiKernel TrigT2CaloCommonLib TrigCaloEvent TrigParticle TrigSteeringEvent TrigInterfacesLib TrigT2CaloCalibrationLib TrigTimeAlgsLib CaloGeoHelpers AthenaKernel TrigT1CaloEventLib TrigT1CaloToolInterfaces TrigT1Interfaces TrigT2CaloJetLib )
+
+atlas_add_dictionary( T2L1ToolsDict
+                      TrigT2CaloJet/T2L1ToolsDict.h
+                      TrigT2CaloJet/selection.xml
+                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${FASTJET_LIBRARIES} ${ROOT_LIBRARIES} CaloRecLib AthContainers IRegionSelector GaudiKernel TrigT2CaloCommonLib TrigCaloEvent TrigParticle TrigSteeringEvent TrigInterfacesLib TrigT2CaloCalibrationLib TrigTimeAlgsLib CaloGeoHelpers AthenaKernel TrigT1CaloEventLib TrigT1CaloToolInterfaces TrigT1Interfaces TrigT2CaloJetLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/EtaPhiSampleHash.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/EtaPhiSampleHash.h
new file mode 100644
index 000000000000..39f6c5b4ba41
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/EtaPhiSampleHash.h
@@ -0,0 +1,69 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <stdlib.h>
+#include <vector>
+
+#include "TrigCaloEvent/Trig3Momentum.h"  // needed for CaloSample (no fwd decl for enum)
+
+class HashedTrig3Momentum;
+
+
+/*!
+  @brief Class providing a map hash <--> (eta,phi,CaloSample).
+
+  The function encoding (eta,phi,sample) into an int relies on a given
+  granularity in (eta,phi). All the points that fall in the same
+  'tile' have the same hash. Currently using this with granularity
+  (eta x phi) = (0.1 x 0.1). Phi values are recorded in [-pi,+pi). Use
+  'testEtaPhiSampleHash' to verify that it works also for your
+  granularity.
+
+  This is the encoding of the 32-bit word (assumes int is 32-bit):
+
+    31     25      16 15       6 5     0
+   +------+----------+----------+-------+
+   |unused|      phi |    eta   | sample|
+   +------+----------+----------+-------+
+
+
+ */
+class EtaPhiSampleHash {
+public:
+  static const u_short kMaxNetaBins = 1024; // 10 bits
+  static const u_short kMaxNphiBins = 1024; // 10 bits
+  static const u_short kMaxNsamples = 64;   //  6 bits
+  static const u_int kTenBits = (kMaxNetaBins-1);
+  static const u_int kSixBits = (kMaxNsamples-1);
+  // Generalized (i.e. non-int) const must be assigned in the cpp if gcc<4.4
+  static const double kMinEta;
+  static const double kMaxEta;
+  static const double kMinPhi;
+  static const double kMaxPhi;
+
+public:
+  EtaPhiSampleHash(const u_short &nEtaBins=100 /* 2*5.0/0.1*/,
+		 const u_short &nPhiBins=64  /* 2*pi /0.1*/,
+		 double minEta=kMinEta, double maxEta=kMaxEta,
+		 double minPhi=kMinPhi, double maxPhi=kMaxPhi);
+  u_int hash(const double &eta, const double &phi,
+	     const  CaloSampling::CaloSample &sample) const;
+  u_int hash(const Trig3Momentum &t3m) const;
+  u_int hash(const HashedTrig3Momentum &mg) const;
+  bool etaPhiSample(const u_int &hash, double &eta, double &phi,
+		    CaloSampling::CaloSample &sample) const;
+private:
+  void checkValues();
+private:
+  double m_minEta;
+  double m_maxEta;
+  double m_minPhi;
+  double m_maxPhi;
+  double m_dEta;
+  double m_dPhi;
+  double m_invDeta;
+  double m_invDphi;
+  u_short m_nEtaBins;
+  u_short m_nPhiBins;
+};
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/GridsHandler.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/GridsHandler.h
new file mode 100644
index 000000000000..afb1ae2d65b1
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/GridsHandler.h
@@ -0,0 +1,42 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_GRIDSHANDLER_H 
+#define TRIGT2CALOJET_GRIDSHANDLER_H
+
+
+/*!
+  @brief Handles the separate grids for the different calorimeter compartments.
+
+  April 2012
+  davide.gerbaudo@gmail.com
+*/
+
+#include <stdlib.h>
+#include <vector>
+#include <map>
+#include <algorithm>
+
+#include "TrigCaloEvent/Trig3Momentum.h"
+
+class HashedTrig3Momentum;
+
+typedef std::vector< HashedTrig3Momentum > Vmc;
+typedef std::map< const CaloSampling::CaloSample, Vmc > CsVmcMap;
+typedef std::pair<const CaloSampling::CaloSample, Vmc > CsVmcPair;
+typedef std::vector< Trig3Momentum > Vt3m;
+
+class GridsHandler {
+ public:
+  GridsHandler();
+  Vmc& grid(const CaloSampling::CaloSample &sample);
+  void clearAllGrids();
+  void appendAllGrids(Vt3m &output) const;
+ private:
+  CsVmcMap m_grids;
+  std::vector< CaloSampling::CaloSample > m_allSamples;
+};
+
+#endif
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/HashedTrig3Momentum.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/HashedTrig3Momentum.h
new file mode 100644
index 000000000000..754cb9326450
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/HashedTrig3Momentum.h
@@ -0,0 +1,39 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_HASHEDTRIG3MOMENTUM_H 
+#define TRIGT2CALOJET_HASHEDTRIG3MOMENTUM_H
+
+/*! 
+  @brief Trig3Momentum with a hash; allows to merge energies from several Trig3Momentum.
+
+  Eta and phi positions are computed as a weighted average of the
+  contributions from different locations in (eta,phi), where the
+  weight is abs(energy).
+
+  April 2012
+  davide.gerbaudo@gmail.com
+ */
+
+#include "TrigCaloEvent/Trig3Momentum.h"
+
+typedef unsigned short u_short;
+typedef unsigned u_int;
+
+class HashedTrig3Momentum : public Trig3Momentum {
+ public:
+  HashedTrig3Momentum();
+  HashedTrig3Momentum(const Trig3Momentum &t3m,
+		      const u_int &hash);
+  u_int hash() const {return m_hash;};
+  void addE(const double &eta, const double &phi, const double &energy);
+  void addE(const Trig3Momentum &t3m);
+  void reset();
+ private:
+  void updateWeightedCoord(const double &eta, const double &phi, const double &energy);
+ private:
+  u_int m_hash;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2AllRoiUnpacking.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2AllRoiUnpacking.h
new file mode 100644
index 000000000000..14f644efa823
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2AllRoiUnpacking.h
@@ -0,0 +1,233 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2AllRoiUnpacking.h
+// PACKAGE:  Trigger/TrigAlgorithms/T2AllRoiUnpacking
+//
+// AUTHOR:   gerbaudo@cern.ch
+//
+// Description: Unpack several L2 calorimeter ROIs and store them in a single output grid.
+//              Used T2L1Unpacking (by Matthew Tamsett) as a template for this AllTEAlgo.
+// Updates:
+// Apr2012 (gerbaudo@cern.ch)
+//         add the option to merge EM cells to a coarser granularity.
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2ALLROIUNPACKING_H
+#define TRIGT2CALOJET_T2ALLROIUNPACKING_H
+
+#include "TrigT2CaloJet/Trig3MomentumMerger.h"
+#include "TrigT2CaloJet/T2CaloJetGridFromCells.h"
+#include "TrigInterfaces/AllTEAlgo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "GaudiKernel/ToolHandle.h"
+
+#include <ostream>
+
+class ITrigTimerSvc;
+class TrigT2Jet;
+class Trig3Momentum;
+//class ITrigDataAccess;
+
+class T2AllRoiUnpacking: public HLT::AllTEAlgo {
+
+
+ public:
+  T2AllRoiUnpacking(const std::string & name, ISvcLocator* pSvcLocator);
+  ~T2AllRoiUnpacking();
+  HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& input,
+                            unsigned int output);
+  HLT::ErrorCode hltInitialize();
+  HLT::ErrorCode hltFinalize();
+  //! N of elements initially allocated in the grid
+  /*! This is just a reasonable initial size for the vector (currently
+    using 2^13, which corresponds to ~10 ROI at low lumi after noise
+    suppr.). Also, this should be a static member (problems without
+    namespace?).
+   */
+  const size_t kAllocatedGridCells_;
+ private:
+  // functions
+  //! Process one trigger element
+  /*!
+    Cells are stored in m_grid, which should be allocated beforehand.
+    @param te TriggerElement to be processed
+    @param grid where the cells are stored
+   */
+  HLT::ErrorCode processTriggerElement(const HLT::TriggerElement *te,
+				       std::vector<Trig3Momentum> *grid);
+  bool initializeTimers(); //!< initialize the timers
+  bool initializeHelperTools(); //!< initialize tools
+  void resetTimers(); //!< reset the monitoring timers
+  bool inputIsValid(const std::vector<std::vector<HLT::TriggerElement*> >& input) const;
+  HLT::TriggerElement* setupOutputTe(unsigned int type_out) ; //!< prepare the output trigger element
+  void storeTimers(); //!< store timings in the monitoring variables
+  HLT::ErrorCode finalizeOutput(HLT::TriggerElement* outputTE); //! finalize the output TE (allocate TrigT2Jet and attach its grid)
+  void finalizeAccessories();  //!< finalize everything that's not the output
+  void determineOverlaps(const EtaPhiRectangle &l2Roi); //!< determine overlaps and store them in m_overlapRegions
+  // Properties:
+  std::string  m_jetOutputKey;
+  double m_roiEtaHalfWidth; //!< half width (in eta) of the L2 ROI that will be read out
+  double m_roiPhiHalfWidth; //!< half width (in phi) of the L2 ROI that will be read out
+  bool m_mergeEmCells;      //!< whether or not the EM cells shoud be merged
+  // non-configurable datamembers (see T2CaloJetGridFromCells.cxx for details)
+  std::vector<Trig3Momentum>  m_tmpGrid;  //!< tmp grid used to extract before merge
+  std::vector<int> m_ttEmSamplings;       //!< all possible EM samplings values
+  std::vector<int> m_ttHecSamplings;      //!< all possible HEC samplings values
+  int m_tileSampling;                     //!< tilecal sampling
+  bool m_prepare;                         //!< prepare T2CaloJetGridFromCells
+  Trig3MomentumMerger m_tmm;              //!< cell merger
+
+
+ protected:
+  ToolHandle< T2CaloJetGridFromCells > m_caloGridFromCellsTool;
+  bool m_retrievedGridTool;
+  std::vector<Trig3Momentum>* m_grid;
+  //! @f$ (\eta,\phi) @f$ regions that have been already processed
+  /*! This datamember is reset at each event */
+  std::vector< EtaPhiRectangle > m_processedRegions;
+  //! @f$ (\eta,\phi) @f$ regions that overlap with regions that have already been processed
+  /*! This datamember is reset at each TriggerElement */
+  std::vector< EtaPhiRectangle > m_overlapRegions;
+  /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+  MsgStream* m_log;
+  
+  TrigTimer *m_cell_unpacking_timer; //!< unpacking time ('addCell' only)
+  TrigTimer *m_unpacking_timer;      //!< unpacking time (geometry, overlap, and 'addCell')
+  TrigTimer *m_RoI_timer;            //!< time required to set up the output TE ('addRoI')
+  TrigTimer *m_merge_timer;          //!< time required merge the EM cells ('mergeEmCells')
+
+  // output
+  TrigT2Jet     *m_jet;
+  
+  // Monitored Variables
+  float               m_UnpckTime;      //!< see corresponding timer for details
+  float               m_cellUnpckTime;  //!< see corresponding timer for details
+  float               m_RoITime;        //!< see corresponding timer for details
+  float               m_mergeTime;      //!< see corresponding timer for details
+};
+
+//----------------------------------------------------------
+//
+// helper classes
+//
+//----------------------------------------------------------
+
+/*! \brief A class describing a rectangle in @f$ \eta @f$, @f$ \phi @f$
+ *
+ * An EtaPhiRectangle object can be used to keep track of a rectangle
+ * in these coordinates. It is meant to be a simple object that takes
+ * care of the @f$ 2\pi @f$ ambigiuties and that can perform simple operations
+ * such as compute the overlap between two rectangles.  While the
+ * minimum and maximum @f$ \phi @f$ values can be provided in any range,
+ * internally all @f$ \phi angles @f$ are stored and handled within
+ * (@f$ -\pi @f$,@f$ +\pi @f$].
+ * Maybe at some point you could use TVector2.h (but they store x,y) or gsl::polar.
+ */
+
+//! \todo should probably define an EtaPhiPair instead of EtaPhiPoint...and use it everywhere
+typedef std::pair< double, double > EtaPhiPoint;
+//----------------------------------------------------------
+class EtaPhiRectangle{
+ public:
+  //! default c'tor
+  EtaPhiRectangle():
+    m_etaMin(0.), m_etaMax(0.), m_etaCen(0.), m_etaHw(0.),
+    m_phiMin(0.), m_phiMax(0.), m_phiCen(0.), m_phiHw(0.),
+    m_wrapsAroundPi(false) {};
+  //! constructor: defined like this because these are usually the edges we get for an ROI
+  EtaPhiRectangle(const double &etaMin, const double &etaMax,
+		 const double &phiMin, const double &phiMax);
+  double area() const { return 2.0*m_etaHw*2.0*m_phiHw; };
+  double eta() const { return m_etaCen; };
+  double phi() const { return m_phiCen; };
+  double etaMin() const { return m_etaMin; };
+  double etaMax() const { return m_etaMax; };
+  double phiMin() const { return m_phiMin; };
+  double phiMax() const { return m_phiMax; };
+  double etaHalfWidth() const {return m_etaHw; };
+  double phiHalfWidth() const {return m_phiHw; };
+  //! determine whether a given point in (@f$ \eta @f$, @f$ \phi @f$) is inside this EtaPhiRectangle
+  bool contains(const EtaPhiPoint &point) const;
+  //! same as above, but less safe agaist eta-phi swap
+  bool contains(const double &eta, const double &phi) const { return contains(std::make_pair(eta,phi));};
+  //! determine whether two rectangles overlap
+  static double overlappingArea(const EtaPhiRectangle &lhs,
+				const EtaPhiRectangle &rhs);
+  //! compute the rectangle corresponding to the overlapping area
+  static EtaPhiRectangle overlappingRectangle(const EtaPhiRectangle &lhs,
+					     const EtaPhiRectangle &rhs);
+  //! convert any angle to its equivalent in ( @f$ -\pi @f$, @f$ +\pi @f$]
+  static double phi_mpi_pi(const double &val);
+  //! convert any angle to its equivalent in ( 0 , @f$ +2\pi @f$]
+  static double phi_zero_2pi(const double &val);
+  //! print the rectangle
+  void print(std::ostream& stream) const;
+
+ protected:
+  //! compute the location of the center of the rectangle
+  /*! In fact this method is initializing the internal representation
+    of the rectangle, with center, half width, etc.
+   */
+  void computeCenterCoord();
+ private:
+  double m_etaMin; //!< minimum eta
+  double m_etaMax; //!< maximum eta
+  double m_etaCen; //!< central eta
+  double m_etaHw;  //!< eta half width
+  double m_phiMin; //!< minimum phi
+  double m_phiMax; //!< maximum phi
+  double m_phiCen; //!< central phi
+  double m_phiHw;  //!< phi half width
+  bool m_wrapsAroundPi; //!< whether the rectangle crosses over @f$ \phi = \pi @f$
+
+}; // end EtaPhiRectangle
+
+std::ostream& operator<< (std::ostream& stream, const EtaPhiRectangle &epr);
+
+//----------------------------------------------------------
+
+/*! \brief compute L2 roi boundaries
+
+Given a L1 ROI descriptor, compute the boundaries of a calorimeter
+L2 ROI. We want to the ROI dimensions (halfWidths) to be
+configurable, so we pass them in through the c'tor. The
+calculation is done accounting for upper boundaries, and treating
+for the FCAL in a special way.
+
+\param trd the L1 ROI descriptor
+\param etaHalfWidth desired half width in eta at L2 (usually 0.5)
+\param phiHalfWidth desired half width in phi at L2 (usually 0.5)
+*/
+class L2CaloRoiBoundsCalculator {
+ public:
+  L2CaloRoiBoundsCalculator(const TrigRoiDescriptor* trd,
+			    const double &etaHalfWidth,
+			    const double &phiHalfWidth);
+  double etaMin() const {return m_etaMin; } ;
+  double etaMax() const {return m_etaMax; } ;
+  double phiMin() const {return m_phiMin; } ;
+  double phiMax() const {return m_phiMax; } ;
+ private:
+  //! actually compute and store the bounds
+  void computeBounds(const TrigRoiDescriptor* trd,
+		     const double &etaHalfWidth,
+		     const double &phiHalfWidth);
+  double m_etaMin, m_etaMax;  //!< eta range
+  double m_phiMin, m_phiMax;  //!< phi range
+  double m_roiEtaLimit;       //!< a reasonable maximum in @f$ \eta @f$ (4.8, does not include FCAL)
+  double m_fcalEtaMin;	      //!< FCAL minumum @f$ \eta @f$ (3.0)
+  double m_fcalEtaMax;	      //!< FCAL maxumum @f$ \eta @f$ (5.0)
+  double m_minFcalEtaCenter;  //!< if the \eta center is above this (3.2), then we think it's FCAL
+}; // end L2CaloRoiBoundsCalculator
+
+//----------------------------------------------------------
+
+
+//----------------------------------------------------------
+
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloFastJet.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloFastJet.h
new file mode 100644
index 000000000000..900db6ab5784
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloFastJet.h
@@ -0,0 +1,148 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloFastJet.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett, tamsett@cern.ch
+//
+// Description: Level 2 FastJet FEX algorithm.
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2CALOFASTJET_H
+#define TRIGT2CALOJET_T2CALOFASTJET_H
+
+//#include "TrigInterfaces/FexAlgo.h"
+#include "TrigInterfaces/AllTEAlgo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "fastjet/JetDefinition.hh"
+#include "fastjet/AreaDefinition.hh"
+#include "fastjet/ClusterSequence.hh"
+#include "fastjet/ClusterSequenceArea.hh"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigCaloEvent/TrigT2JetContainer.h"
+#include "TrigT2CaloJet/T2L1Tools.h"
+
+namespace fastjet{
+    class PseudoJet;
+    class JetDefinition;
+    class AreaDefinition;
+    class ClusterSequence;
+    class ClusterSequenceArea;
+}
+
+class ITrigTimerSvc;
+class TrigT2Jet;
+class T2CaloJetBaseTool;
+class T2L1Tools;
+
+
+
+//class T2CaloFastJet: public HLT::FexAlgo {    
+class T2CaloFastJet: public HLT::AllTEAlgo {    
+    
+    public:
+        T2CaloFastJet(const std::string & name, ISvcLocator* pSvcLocator);
+        ~T2CaloFastJet();
+        
+        //HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE,
+        //                                HLT::TriggerElement* outputTE);
+        HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& input,
+                                  unsigned int output);
+        
+        HLT::ErrorCode hltInitialize();
+        HLT::ErrorCode hltFinalize();
+    
+    private:
+        // Properties:
+        std::string  m_jetInputKey;
+        std::string  m_jetOutputKey;
+        int          m_inputType;
+        int          m_outputType; 
+        int          m_secondOutputType; // this is used to set a different RoI word for the subsequent algorithm
+        double m_cellMinEnergy; //!< minimum cell energy required
+        // Tools
+        ToolHandleArray< T2CaloJetBaseTool > m_tools; // for calibration
+        
+    protected: 
+        /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+        MsgStream* m_log;
+        
+        ITrigTimerSvc *m_pTimerService;   // pointer to Timer Service
+        //TrigTimer     *m_total_timer;
+        TrigTimer     *m_unpack_timer;
+        TrigTimer     *m_fastjet_timer;
+        TrigTimer     *m_pu_subtraction_timer;
+        TrigTimer     *m_cleaning_timer;
+        TrigTimer     *m_calibration_timer;
+        TrigTimer     *m_RoI_timer;
+        
+        // fast jet
+        double m_distanceParameter;
+        double m_pTmin;
+        std::vector<fastjet::PseudoJet> m_particles;
+        fastjet::JetDefinition * m_jet_def;
+        std::vector<fastjet::PseudoJet> m_jets;
+        std::vector<fastjet::PseudoJet> m_constituents;
+        fastjet::ClusterSequence* m_cluster_sequence;
+        
+        // cleaning:
+        bool m_doCleaning;
+        bool m_doT2L1Cleaning; // L1.5 m_jets do not have provenance, quality or time defined so a simpler cleaning must be applied
+        float m_leadingCellFraction;
+        int m_cellQualityThresholdLAr;
+        std::vector<double> m_cellenergies;
+        
+        // navigation
+        bool m_writeMultipleOutputTEs; 
+        /* Default behaviour is to write a single output TE with a vector of jets attached.
+         * This does not fit all use cases, so a switch is available which enables the writing of one output TE per jet.
+         */
+        
+        // pileup subtraction switch
+        bool m_doPileupSubtraction;
+        //double m_pu_distanceParameter;
+        fastjet::JetDefinition * m_pu_jet_def;
+        fastjet::AreaDefinition * m_pu_area_def;
+        fastjet::ClusterSequenceArea* m_pu_cluster_sequence;
+        fastjet::ClusterSequenceArea* m_pu_area_cluster_sequence;
+        double m_rho;
+        double m_sigma;
+        double m_area;
+        
+        
+        // Monitored Variables
+        //float               m_TotalTime;      // The total time
+        float               m_UnpackTime;     // The time to unpack
+        float               m_FastJetTime;    // The time to run fast jet
+        float               m_puSubTime;      // The time to do pileup subtraction
+        float               m_CleaningTime;   // The time to clean the jets
+        float               m_CalibrationTime;// The time to calibrate the jets
+        float               m_RoITime;        // The RoI making time
+        int                 m_nGrid;          // The number of grid elements given
+        int                 m_nJets;          // The number of jets found
+        std::vector<double> m_et;             // transverse energy
+        std::vector<double> m_et_em;          // electromagnetic transverse energy
+        std::vector<double> m_et_had;         // hadronic transverse energy 
+        std::vector<double> m_e;              // energy
+        std::vector<double> m_e_em;           // electromagnetic energy
+        std::vector<double> m_e_had;          // hadronic energy 
+        std::vector<double> m_em_frac;        // electromagnetic fraction
+        std::vector<double> m_eta;            // eta
+        std::vector<double> m_phi;            // phi
+        std::vector<int>    m_nLeadingTowers; // number of leading towers
+        
+        
+        // outputs 
+        TrigT2Jet *m_jet;
+        
+        // L1.5 tools
+        T2L1Tools m_t2l1_tools;
+
+};
+
+#endif
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJet.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJet.h
new file mode 100755
index 000000000000..afe6b3ce1d20
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJet.h
@@ -0,0 +1,97 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloJet.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Kyle Cranmer
+//
+// Description: Level2 Jet algorithm.  Basically copied from L2 EM and
+// Tau algs with some cleanup.
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2CALOJET_H
+#define TRIGT2CALOJET_T2CALOJET_H
+
+#include <string>
+#include "TrigT2CaloCommon/T2CaloBase.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "TrigCaloEvent/TrigCaloCluster.h"
+
+class StoreGateSvc;
+//class TriggerElement;
+//class TrigRoiDescriptor;
+class T2CaloJetBaseTool;
+class TrigT2Jet;
+
+class T2CaloJet: public T2CaloBase {
+
+
+ public:
+  T2CaloJet(const std::string & name, ISvcLocator* pSvcLocator);
+  ~T2CaloJet();
+
+  HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE,
+			    HLT::TriggerElement* outputTE);
+
+
+  HLT::ErrorCode hltInitialize();
+  HLT::ErrorCode hltFinalize();
+
+ private:
+
+  //  double m_etamin, m_etamax, m_phimin, m_phimax;
+  //  TriggerElement* m_inputTE ;
+  //  TrigRoiDescriptor* m_roiDescriptor;
+  TrigT2Jet* m_jet;
+  TrigCaloCluster *m_layerInfo;
+
+  //std::vector<T2CaloJetBaseTool*> m_tools;
+  ToolHandleArray< T2CaloJetBaseTool > m_tools;
+
+  // Properties:
+  std::string               m_jetOutputKey;
+  std::string               m_clusterOutputKey;
+  //std::vector<std::string>  m_toolNames;
+  bool		      m_clearJetGrid;
+  bool                m_fillLayerInfo;
+
+  // Monitored Variables
+  double              m_dR;
+  double              m_e;     // total energy of the jet after calibration
+  double              m_et;
+  double              m_ehad0; // hadronic energy before calibration
+  double              m_eem0;  // electromagnetic energy before calibration
+  
+  double              m_ethad0; // transverse energy : hadronic component before calibration
+  double              m_etem0;  // transverse energy : electromagnetic component before calibration
+  
+  double              m_eta;
+  double              m_phi;
+
+  double              m_etaIDWidth;
+  double              m_phiIDWidth;
+
+  unsigned int m_conversionError;
+  unsigned int m_algorithmError;
+
+
+
+ protected:
+
+  std::vector<TrigTimer*> m_timer;
+  const TrigTimer *m_timeLArUnpck;
+  const TrigTimer *m_timeTileUnpck;
+  const TrigTimer *m_timeHECUnpck;
+
+ public:
+
+  inline TrigT2Jet* GetTrigT2Jet() const {return m_jet;}
+//inline TrigCaloCluster* GetTrigCaloCluster() const {return m_layerInfo;}
+
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetBaseTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetBaseTool.h
new file mode 100755
index 000000000000..ea63bbc43f37
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetBaseTool.h
@@ -0,0 +1,58 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETBASETOOL_H
+#define TRIGT2CALOJET_T2CALOJETBASETOOL_H
+
+/********************************************************************
+
+NAME:     T2CaloJetBaseTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE:  Base Tool for all T2CaloJet tools require
+          an T2CaloJet object as its input.  The derived
+          tool must implement an execute(TrigT2Jet*) method.
+
+********************************************************************/
+
+class TrigT2Jet;
+
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+
+#include "IRegionSelector/IRoiDescriptor.h" 
+
+static const InterfaceID IID_T2CaloJetBaseTool("T2CaloJetBaseTool", 1, 0);
+
+class T2CaloJetBaseTool : public IAlgToolCalo
+{
+ public:
+
+  T2CaloJetBaseTool(const std::string& type, const std::string& name,
+		    const IInterface* parent);
+
+  ~T2CaloJetBaseTool();
+
+  virtual StatusCode initialize();
+  using IAlgToolCalo::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  //  virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax);
+
+  virtual StatusCode execute(TrigT2Jet* jet, const IRoiDescriptor& roi,
+				const CaloDetDescrElement*& /*caloDDE*/);
+
+  virtual TrigTimer* getTimer(const std::string& /*name*/){ return 0;};
+
+  static const InterfaceID& interfaceID() { return  IID_T2CaloJetBaseTool; }
+
+
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETBASETOOL
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetCalibTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetCalibTool.h
new file mode 100755
index 000000000000..0201d2382dee
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetCalibTool.h
@@ -0,0 +1,77 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETCALIBTOOL_H
+#define TRIGT2CALOJET_T2CALOJETCALIBTOOL_H
+
+/********************************************************************
+
+NAME:     T2CaloJetCalibTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Patricia Conde Muino <Patricia.Conde.Muino@cern.ch>
+          Nuno Anjos <Nuno.Anjos@cern.ch>
+CREATED:  May 2006
+
+PURPOSE: Calibration tool for LVL2 jets. 
+         It uses T2JESCalibTool / T2GSCalibTool / T2SamplingCalibTool 
+         from TrigTools/TrigT2CaloCalibration.
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "TrigT2CaloCalibration/IT2HadCalibTool.h"
+//#include "TrigCaloEvent/TrigCaloCluster.h"
+
+class TrigT2Jet;
+
+class T2CaloJetCalibTool : public T2CaloJetBaseTool
+{
+ public:
+
+  T2CaloJetCalibTool(const std::string& type, const std::string& name, 
+		    const IInterface* parent);
+  
+  ~T2CaloJetCalibTool();
+  
+  virtual StatusCode initialize();
+  using T2CaloJetBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax);
+
+ private:
+  
+  MsgStream * m_log;
+  int m_outputLevel;
+
+  ToolHandle < IT2HadCalibTool >  m_t2JetCalibTool;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolTile1;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolFcal1;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolEm3Bar;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolHec0;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolEm3Fwd;
+  ToolHandle < IT2HadCalibTool >  m_t2JetCorrToolPsBar;
+
+  bool m_useFEBJets;
+//bool m_fillLayerInfo;
+  bool m_doJetCalib;
+  bool m_doJetCorrTile1;
+  bool m_doJetCorrFcal1;
+  bool m_doJetCorrEm3Bar;
+  bool m_doJetCorrHec0;
+  bool m_doJetCorrEm3Fwd;
+  bool m_doJetCorrPsBar;
+
+//TrigCaloCluster *m_layer_info;
+
+// StatusCode calculateHadEMEnergy(TrigT2Jet* Jet, double *HadEnergy, double *EMEnergy);
+ StatusCode calculateLayerFracs(TrigT2Jet* Jet, double *fTile1, double *fFcal1, double *fEm3, double *fHec0, double *fPs);
+
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETCALIBTOOL
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetConeTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetConeTool.h
new file mode 100755
index 000000000000..a58185228495
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetConeTool.h
@@ -0,0 +1,77 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETCONETOOL_H
+#define TRIGT2CALOJET_T2CALOJETCONETOOL_H
+
+/********************************************************************
+
+NAME:     T2CaloJetConeTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Cone Tool for all T2CaloJet.  Does simple cone alg after data
+         preparation.
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/AlgTool.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+
+class TrigT2Jet;
+
+class T2CaloJetConeTool : public T2CaloJetBaseTool
+{
+ public:
+
+  T2CaloJetConeTool(const std::string& type, const std::string& name, 
+		    const IInterface* parent);
+  
+  ~T2CaloJetConeTool();
+  
+  virtual StatusCode initialize();
+  using T2CaloJetBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  //virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax);
+  virtual StatusCode execute(TrigT2Jet* jet, const IRoiDescriptor& roi);
+
+  void coneIteration(TrigT2Jet* jet, int coneIter);
+  
+ private:
+  int m_nIterations;  
+  double m_coneRadius;
+  //int niterations;
+  //double etot_jet;
+  //Cell check
+  int m_inCone, m_outCone, m_totalCell;
+  // cleaning:
+  int m_cellQualityThresholdLAr;
+  float m_leadingCellFraction;
+
+  std::vector<double> m_datav;
+  std::vector<double> m_range1;
+  std::vector<double> m_range2;
+  std::vector<int> m_ndiv;
+  std::vector<std::string> m_dataObject;
+  std::vector<std::string> m_dataaxis;
+
+  //New timers
+  ITrigTimerSvc *m_pTimerService;   // pointer to Timer Service
+  TrigTimer *m_fcal_timer;
+  TrigTimer *m_other_timer;
+
+  //FCal cone sizes
+  std::vector<double> m_fj_cone_sizes;
+  
+  // cleaning:
+  std::vector<double> m_cellenergies;
+
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETCONETOOL
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromCells.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromCells.h
new file mode 100644
index 000000000000..3ff3ff22a1d0
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromCells.h
@@ -0,0 +1,118 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETGRIDFROMCELLS_H
+#define TRIGT2CALOJET_T2CALOJETGRIDFROMCELLS_H
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromCells.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Data preparation from cells, uses the
+         TrigT2CaloCommon/CommonAccessTool
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/AlgTool.h"
+
+//#include "LArRecEvent/LArCellCollection.h"
+//#include "TileEvent/TileCellIDC.h"
+//#include "LArRecEvent/LArCellIDC.h"
+//#include "LArRawUtils/LArTT_Selector.h"
+//#include "TrigT2CaloCommon/LArCellCont.h"
+#include "TrigT2CaloCommon/TrigDataAccess.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "GaudiKernel/MsgStream.h"
+#include "CaloInterface/ICalorimeterNoiseTool.h"
+
+class TrigT2Jet;
+class Trig3Momentum;
+class ITrigDataAccess;
+class EtaPhiRectangle;
+
+class T2CaloJetGridFromCells : public T2CaloJetBaseTool
+{
+ public:
+  T2CaloJetGridFromCells(const std::string& type, const std::string& name, 
+		    const IInterface* parent);
+  
+  ~T2CaloJetGridFromCells();
+  
+  virtual StatusCode initialize();
+  using T2CaloJetBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+//  virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, 
+//			     double phimin, double phimax);
+  virtual StatusCode execute(TrigT2Jet * jet,const IRoiDescriptor& roi  );
+
+  virtual TrigTimer* getTimer(const std::string& name);
+  
+  StatusCode addAllCells(double etamin, double etamax, 
+			 double phimin, double phimax,
+			 std::vector<Trig3Momentum>* grid);
+  
+
+  StatusCode addLArCells(double etamin, double etamax, 
+			 double phimin, double phimax,
+			 std::vector<Trig3Momentum>* grid,
+			 DETID detectorID, int sampling,
+			 bool prepare);
+
+  StatusCode addTileCells(double etamin, double etamax, 
+			 double phimin, double phimax,
+			 std::vector<Trig3Momentum>* grid,
+			 DETID detectorID, int sampling,
+			 bool prepare);
+ //! set the regions to be skipped
+ void setForbiddenRegions(const std::vector< EtaPhiRectangle > &regions) { m_forbiddenRegions = regions; } ;
+ private:
+  bool isInVetoRegion(const double &eta, const double &phi);
+ private:
+  Trig3Momentum* m_gridElement;
+
+
+  // New way with TrigDataAccess doing BS conversion
+  // iterators to LArCells. Note the different type from the above
+  LArTT_Selector<LArCellCont>::const_iterator m_iBegin;
+  LArTT_Selector<LArCellCont>::const_iterator m_iEnd;
+  LArTT_Selector<LArCellCont>::const_iterator m_it;
+  
+  TileCellCollection::const_iterator m_itBegin;
+  TileCellCollection::const_iterator m_itEnd;
+  TileCellCollection::const_iterator m_itt;
+
+
+
+  //int ncell_roi;
+  //int nnegcell_roi;
+  //double eem_roi;
+  //double etot_roi;
+
+  bool m_applyNoiseCut;
+  double m_noiseCutValue;
+  // cell based jet cleaning:
+  bool m_doHECcellQualityCleaning;
+  int m_cellQualityThresholdHEC;
+
+  ToolHandle<LArCablingLegacyService> m_cablingSvc;
+  ToolHandle<ICalorimeterNoiseTool> m_noiseTool;
+  std::vector< EtaPhiRectangle > m_forbiddenRegions; //!< regions to be skipped
+
+ protected:
+
+  ITrigTimerSvc* m_timerSvc;
+  /** Timer Items for the main algorithms. */
+  std::map<std::string, TrigTimer*> m_timers;
+
+  bool m_doTiming;
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETGRIDFROMCELLS
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h
new file mode 100755
index 000000000000..cfc9eecd375d
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h
@@ -0,0 +1,87 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETGRIDFROMFEBHEADER_H
+#define TRIGT2CALOJET_T2CALOJETGRIDFROMFEBHEADER_H
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromFEBHeader.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+          Ignacio Aracena <ignacio.aracena@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Data preparation from FEB Headers (Ex/Ey)
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/AlgTool.h"
+//#include "LArRecEvent/LArFebEnergyIDC.h"
+#include "TrigT2CaloCommon/TrigDataAccess.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "GaudiKernel/MsgStream.h"
+
+class TrigT2Jet;
+class Trig3Momentum;
+class ITrigDataAccess;
+
+class T2CaloJetGridFromFEBHeader : public T2CaloJetBaseTool
+{
+ public:
+
+  T2CaloJetGridFromFEBHeader(const std::string& type, const std::string& name, 
+		    const IInterface* parent);
+  
+  ~T2CaloJetGridFromFEBHeader();
+  
+  virtual StatusCode initialize();
+  using T2CaloJetBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  virtual TrigTimer* getTimer(const std::string& name);
+
+  virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax);
+  
+  StatusCode addFebEnergies(double etamin, double etamax,
+                         double phimin, double phimax,
+                         std::vector<Trig3Momentum>* grid);
+
+  StatusCode addLArFebEnergy(double etamin, double etamax,
+                          double phimin, double phimax,
+                          std::vector<Trig3Momentum>* grid,
+                          DETID detectorID, int sampling,
+                          bool prepare);
+
+  StatusCode addTileCells(double etamin, double etamax,
+                          double phimin, double phimax,
+                          std::vector<Trig3Momentum>* grid,
+                          DETID detectorID, int sampling,
+                          bool prepare);
+ private:
+  //   ITrigDataAccess *m_data;
+   Trig3Momentum* m_gridElement;
+   std::vector<int>* m_usedfeb;
+   std::map<std::string, TrigTimer*> m_timers;
+
+protected:
+   ITrigTimerSvc* m_timerSvc;
+   bool m_doTiming;
+
+  // New way with TrigDataAccess doing BS conversion
+  // iterators to LArFEBEnergy. Note the different type from the above
+  LArFebEnergyCollection::const_iterator m_iFebBegin;
+  LArFebEnergyCollection::const_iterator m_iFebEnd;
+  LArFebEnergyCollection::const_iterator m_Febit;
+
+  TileCellCollection::const_iterator m_itBegin;
+  TileCellCollection::const_iterator m_itEnd;
+  TileCellCollection::const_iterator m_itt;
+
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETGRIDFROMFEBHEADER
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h
new file mode 100755
index 000000000000..8e05ce479112
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h
@@ -0,0 +1,46 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2CALOJETGRIDFROMLVL1PPR_H
+#define TRIGT2CALOJET_T2CALOJETGRIDFROMLVL1PPR_H
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromLvl1Ppr.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Data preparation tool from Lvl1 Trigger Towers (accessed via Lvl1 PPr Bytestream)
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/AlgTool.h"
+
+class TrigT2Jet;
+class Trig3Momentum;
+
+class T2CaloJetGridFromLvl1Ppr : public T2CaloJetBaseTool
+{
+ public:
+
+  T2CaloJetGridFromLvl1Ppr(const std::string& type, const std::string& name, 
+		    const IInterface* parent);
+  
+  ~T2CaloJetGridFromLvl1Ppr();
+  
+  virtual StatusCode initialize();
+  using T2CaloJetBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  virtual StatusCode execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax);
+  private:
+    Trig3Momentum* m_gridElement;
+  
+};
+
+#endif // TRIGT2CALOJET_T2CALOJETGRIDFROMLVL1PPR
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloFullScanJet.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloFullScanJet.h
new file mode 100644
index 000000000000..2c781d5f9066
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloFullScanJet.h
@@ -0,0 +1,95 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1CaloFullScanJet.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett
+//
+// Description: Level2 Jet Full scan algorithm.  Based on L2 MET
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2L1CaloFullScanJet_H
+#define TRIGT2CALOJET_T2L1CaloFullScanJet_H
+
+#include "TrigInterfaces/AllTEAlgo.h"
+#include <vector>
+
+#include <string>
+#include "GaudiKernel/ToolHandle.h"
+#include "TrigT2CaloCommon/T2CaloBase.h"
+#include "TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h"
+
+class StoreGateSvc;
+class TrigT2Jet;
+class ITrigTimerSvc;
+
+namespace LVL1BS{
+  class ITrigT1CaloDataAccess;
+}
+
+namespace LVL1{
+  class IL1JetTools;
+}
+
+class T2L1CaloFullScanJet: public HLT::AllTEAlgo {
+
+
+ public:
+  T2L1CaloFullScanJet(const std::string & name, ISvcLocator* pSvcLocator);
+  ~T2L1CaloFullScanJet();
+
+  HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& input,
+                            unsigned int output);
+
+
+  HLT::ErrorCode hltInitialize();
+  HLT::ErrorCode hltFinalize();
+
+ private:
+
+  const TrigT2Jet* m_jet;
+  DataVector<TrigT2Jet>* m_jets;
+  ToolHandleArray< T2L1CaloJetFullScanBaseTool > m_tools;
+  
+  // Properties:
+  std::string               m_jetOutputKey;
+  bool                      m_recordOutput;
+
+  // Monitored Variables
+  int                 m_nJets;          // The number of jets found
+  int                 m_nTowers;        // The number of trigger towers
+  float               m_UnpckTime;      // The unpacking time, includes L1 unpack + tower storage time
+  float               m_L1_UnpckTime;   // The L1 unpacking time
+  float               m_FastJetTime;    // The FastJet time
+  float               m_JetFindingTime; // The complete jet finding time
+  float               m_TotalTime;      // The total time
+  float               m_RoITime;        // The RoI making time
+  std::vector<double> m_e;              // energy
+  std::vector<double> m_et;             // transverse energy
+  std::vector<double> m_ehad;           // hadronic energy 
+  std::vector<double> m_eem;            // electromagnetic energy
+  std::vector<double> m_ethad;          // hadronic transverse energy 
+  std::vector<double> m_etem;           // electromagnetic transverse energy
+  std::vector<double> m_emfrac;         // electromagnetic fraction
+  std::vector<double> m_eta;            // eta
+  std::vector<double> m_phi;            // phi
+  std::vector<int>    m_nLeadingTowers; // number of leading towers
+  
+  
+  /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+  MsgStream* m_log;
+  
+  
+
+ protected:
+ 
+  std::vector<TrigTimer*> m_timer;
+  
+
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJet.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJet.h
new file mode 100755
index 000000000000..50d1b428819e
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJet.h
@@ -0,0 +1,82 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloJet.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Kyle Cranmer
+//
+// Description: Level2 Jet algorithm.  Basically copied from L2 EM and
+// Tau algs with some cleanup.
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2L1CALOJET_H
+#define TRIGT2CALOJET_T2L1CALOJET_H
+
+#include <string>
+#include "TrigInterfaces/FexAlgo.h"
+#include "AthContainers/ConstDataVector.h"
+#include "GaudiKernel/ToolHandle.h"
+
+class StoreGateSvc;
+class TrigT2Jet;
+
+namespace LVL1BS{
+  class ITrigT1CaloDataAccess;
+}
+namespace LVL1{
+  class IL1JetTools;
+  class JetElement;
+}
+
+class T2L1CaloJet: public HLT::FexAlgo {
+
+
+ public:
+  T2L1CaloJet(const std::string & name, ISvcLocator* pSvcLocator);
+  ~T2L1CaloJet();
+
+  HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE,
+			    HLT::TriggerElement* outputTE);
+
+
+  HLT::ErrorCode hltInitialize();
+  HLT::ErrorCode hltFinalize();
+
+ private:
+
+  TrigT2Jet* m_jet;
+
+
+  // Properties:
+  std::string               m_jetOutputKey;
+
+  // Monitored Variables
+  double              m_e;     // total energy of the jet after calibration
+  double              m_et;
+  //double              m_ehad0; // hadronic energy before calibration
+  //double              m_eem0;  // electromagnetic energy before calibration
+  double              m_eta;
+  double              m_phi;
+  
+  /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+  MsgStream* m_log;
+  
+  
+  
+
+ protected:
+
+  std::vector<TrigTimer*> m_timer;
+  ToolHandle< LVL1BS::ITrigT1CaloDataAccess > m_dataL1;
+  ToolHandle< LVL1::IL1JetTools > m_jetL1Tools;
+  ConstDataVector<DataVector<LVL1::JetElement> >* m_storedJEs;
+  bool m_retrievedJetTool;
+  
+
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetCalibTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetCalibTool.h
new file mode 100644
index 000000000000..8959104891f0
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetCalibTool.h
@@ -0,0 +1,68 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2L1CALOJETTOOL_H
+#define TRIGT2CALOJET_T2L1CALOJETTOOL_H
+
+/********************************************************************
+
+NAME:     T2L1CaloJetCalibTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>, Carlos Sandoval <csandova@mail.cern.ch>
+CREATED:  December 2010
+
+
+PURPOSE: Calibration tool for L1 towers. 
+         
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/AlgTool.h"
+#include "CaloRec/ToolWithConstantsMixin.h"
+
+class TrigT2Jet;
+class Trig3Momentum;
+
+class T2L1CaloJetCalibTool : public T2CaloJetBaseTool,
+                           public CaloRec::ToolWithConstantsMixin
+{
+    public:
+        
+        T2L1CaloJetCalibTool(const std::string& type, const std::string& name, 
+                           const IInterface* parent);
+        
+        ~T2L1CaloJetCalibTool();
+        
+        virtual StatusCode initialize();
+        using T2CaloJetBaseTool::execute;
+        virtual StatusCode execute();
+        virtual StatusCode finalize();
+        
+        virtual StatusCode execute(TrigT2Jet* jet,double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/);
+        
+        using AlgTool::setProperty;
+        virtual StatusCode setProperty (const std::string& propname,
+        const std::string& value);  
+        virtual StatusCode setProperty (const Property& p); 
+    
+    protected:
+        /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+        MsgStream* m_log;
+        
+        int GetEtaBin(double jet_eta);
+        double GetCalibFactor(int etabin, double energy);        
+        
+        CaloRec::Array<2> m_CalibConstants;
+        
+        // Bins
+        std::vector<double> m_eta_bin_lower_edges;
+        
+
+};
+
+#endif // TRIGT2CALOJET_T2L1CALOJETTOOL
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h
new file mode 100644
index 000000000000..36e9437485b4
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h
@@ -0,0 +1,54 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2L1CALOJETFULLSCANBASETOOL_H
+#define TRIGT2CALOJET_T2L1CALOJETFULLSCANBASETOOL_H
+
+/********************************************************************
+
+NAME:     T2L1CaloJetFullScanBaseTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett
+CREATED:  July, 2011
+
+PURPOSE:  Base Tool for all T2L1CaloJet tools that require
+          a vector of T2CaloJet objects as its input.  The derived
+          tool must implement an execute(vector<T2CaloJet*>) method.
+
+
+********************************************************************/
+
+class TrigT2Jet;
+
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+
+static const InterfaceID IID_T2L1CaloJetFullScanBaseTool("T2L1CaloJetFullScanBaseTool", 1, 0);
+
+class T2L1CaloJetFullScanBaseTool : public IAlgToolCalo
+{
+ public:
+
+  T2L1CaloJetFullScanBaseTool(const std::string& type, const std::string& name,
+		    const IInterface* parent);
+
+  ~T2L1CaloJetFullScanBaseTool();
+
+  virtual StatusCode initialize();
+  using IAlgToolCalo::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  virtual StatusCode execute(DataVector<TrigT2Jet>*, int&, float&, float&, float&, float&);
+
+  virtual TrigTimer* getTimer(const std::string& /*name*/){ return 0;};
+
+  static const InterfaceID& interfaceID() { return  IID_T2L1CaloJetFullScanBaseTool; }
+
+
+};
+
+#endif // TRIGT2CALOJET_T2L1CaloJetFullScanBaseTool
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h
new file mode 100644
index 000000000000..beb50ef75d7f
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h
@@ -0,0 +1,128 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2L1CALOJETFULLSCANFASTJETTOOL_H
+#define TRIGT2CALOJET_T2L1CALOJETFULLSCANFASTJETTOOL_H
+
+/********************************************************************
+
+NAME:     T2L1CaloJetFullScanFastJetTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett
+CREATED:  July, 2011
+
+PURPOSE:  FastJet Tool for all T2L1CaloJet tools that require
+          a vector of T2CaloJet objects as its input.  The derived
+          tool must implement an execute(vector<T2CaloJet*>) method.
+
+
+********************************************************************/
+
+class TrigT2Jet;
+class ITrigTimerSvc;
+
+namespace LVL1BS{
+  class ITrigT1CaloDataAccess;
+}
+
+namespace LVL1{
+  class IL1JetTools;
+  class JetElement;
+  class TriggerTower;
+}
+
+namespace fastjet{
+    class PseudoJet;
+    class JetDefinition;
+    class ClusterSequence;
+}
+
+// Extra tools for the RoI IDs
+namespace T2L1{
+    enum roi_types_enums {
+        NONE      = 0x01,  
+        L1SW8x8   = 0x02,  
+        A4TT      = 0x04,
+        A10TT     = 0x08,
+        A4JE      = 0x10,
+        A10JE     = 0x20,
+        UNKNOWN   = 0x40,
+        INPUT     = 0x10000,
+        OUTPUT    = 0x100,
+        BLANKWORD = 0x70000000
+    };
+}
+
+#include "TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h"
+#include "GaudiKernel/AlgTool.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+
+#include "fastjet/JetDefinition.hh"
+
+#include <vector>
+
+class T2L1CaloJetFullScanFastJetTool : public T2L1CaloJetFullScanBaseTool
+{
+ public:
+
+  T2L1CaloJetFullScanFastJetTool(const std::string& type, const std::string& name,
+		    const IInterface* parent);
+
+  ~T2L1CaloJetFullScanFastJetTool();
+
+  virtual StatusCode initialize();
+  using T2L1CaloJetFullScanBaseTool::execute;
+  virtual StatusCode execute();
+  virtual StatusCode finalize();
+
+  virtual StatusCode execute(DataVector<TrigT2Jet>*, int&, float&, float&, float&, float&);
+ 
+ protected:
+  ToolHandle< LVL1BS::ITrigT1CaloDataAccess > m_dataL1;
+  
+  double m_coneRadius;
+  double m_pTmin;
+  bool m_retrievedJetTool;
+  int m_inputType;
+  
+  TrigT2Jet* m_jet;
+  std::vector<float> m_l1_tower_information;
+  
+  double m_etaMin;
+  double m_etaMax;
+  double m_phiMin;
+  double m_phiMax;
+  bool m_fullScan;
+  
+  
+  ITrigTimerSvc *m_pTimerService;   // pointer to Timer Service
+  TrigTimer *m_total_timer;
+  TrigTimer *m_unpacking_timer;
+  TrigTimer *m_load_collection_timer;
+  TrigTimer *m_jet_finding_timer;
+  TrigTimer *m_fastjet_timer;
+  
+  /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+  MsgStream* m_log;
+  
+  bool m_doTriggerTowers; // bool to switch to trigger towers mode, default mode is Jet Elements
+  // fast jet
+  std::vector<fastjet::PseudoJet> m_particles;
+  fastjet::JetDefinition * m_jet_def;
+  //fastjet::ClusterSequence cs;
+  std::vector<fastjet::PseudoJet> m_jets;
+  std::vector<fastjet::PseudoJet> m_constituents;
+  
+  // cleaning:
+  float m_leadingCellFraction;
+  std::vector<double> m_cellenergies;
+  
+  // debug
+  bool m_doCleaning;
+  bool m_doJetFinding;
+
+};
+
+#endif // TRIGT2CALOJET_T2L1CaloJetFullScanFastJetTool
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Tools.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Tools.h
new file mode 100644
index 000000000000..502e621bdefa
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Tools.h
@@ -0,0 +1,136 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1Tools.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett, tamsett@cern.ch
+//
+// Description: Common tools and definitions for the L1.5 jet trigger
+// ********************************************************************
+#ifndef TRIGT2CALOJET_T2L1TOOLS_H
+# define TRIGT2CALOJET_T2L1TOOLS_H 1
+#ifndef GAUDIKERNEL_CLASSID_H
+# include "GaudiKernel/ClassID.h"
+#endif
+
+#include <string>
+#include <map>
+
+
+class T2L1Tools{
+    public:
+        
+        enum roi_types_enums {
+            NONE           = 0x01,  
+            L1SW8x8        = 0x02, 
+            L2CONE         = 0x03, 
+            A4TT           = 0x04,
+            A4TT_JES       = 0x05,
+            A4TT_TC        = 0x06,
+            A4TT_TC_JES    = 0x07,
+            A4TT_PU_SUB    = 0x08,
+            A10TT          = 0x09,
+            A4JE           = 0x10,
+            A4JE_JES       = 0x11,
+            A4JE_TC        = 0x12,
+            A4JE_TC_JES    = 0x13,
+            A4JE_PU_SUB    = 0x14,
+            A4CC           = 0x15,
+            A4CC_JES       = 0x16,
+            A10JE          = 0x20,
+            UNCALIBRATED   = 0x30, 
+            CALIBRATED     = 0x31, 
+            UNKNOWN        = 0x40,        
+            SET_INPUT      = 0x10000,
+            GET_INPUT      = 0x10000*255,
+            SET_OUTPUT     = 0x100,
+            GET_OUTPUT     = 0x100*255,
+            BLANKWORD      = 0x70000000
+        };
+        
+        int MapStringToEnum(std::string name_string){        
+            
+            std::map <std::string, int> L15NameMap;
+            L15NameMap["NONE"]         = NONE;
+            L15NameMap["L1SW8x8"]      = L1SW8x8;  
+            L15NameMap["L2CONE"]       = L2CONE;  
+            L15NameMap["A4TT"]         = A4TT;
+            L15NameMap["A4TT_JES"]     = A4TT_JES;
+            L15NameMap["A4TT_TC"]      = A4TT_TC;
+            L15NameMap["A4TT_TC_JES"]  = A4TT_TC_JES;
+            L15NameMap["A4TT_PU_SUB"]  = A4TT_PU_SUB;
+            L15NameMap["A10TT"]        = A10TT;
+            L15NameMap["A4JE"]         = A4JE;
+            L15NameMap["A4JE_JES"]     = A4JE_JES;
+            L15NameMap["A4JE_TC"]      = A4JE_TC;
+            L15NameMap["A4JE_TC_JES"]  = A4JE_TC_JES;
+            L15NameMap["A4JE_PU_SUB"]  = A4JE_PU_SUB;
+            L15NameMap["A10JE"]        = A10JE;
+            L15NameMap["A4CC"]         = A4CC;
+            L15NameMap["A4CC_JES"]     = A4CC_JES;
+            L15NameMap["CALIBRATED"]   = CALIBRATED; 
+            L15NameMap["UNCALIBRATED"] = UNCALIBRATED; 
+            
+            std::map <std::string, int>::const_iterator mask_map_iterator = L15NameMap.find(name_string);
+            if (mask_map_iterator == L15NameMap.end()){
+                return UNKNOWN;
+            } else {
+                return mask_map_iterator->second;
+            }
+         }
+         
+        std::string MapEnumToString(int enum_int){        
+            
+            std::map <int, std::string> L15NameMap;
+            L15NameMap[NONE]         = "NONE";
+            L15NameMap[L1SW8x8]      = "L1SW8x8";  
+            L15NameMap[L2CONE]       = "L2CONE";  
+            L15NameMap[A4TT]         = "A4TT";
+            L15NameMap[A4TT_JES]     = "A4TT_JES";
+            L15NameMap[A4TT_TC]      = "A4TT_TC";
+            L15NameMap[A4TT_TC_JES]  = "A4TT_TC_JES";
+            L15NameMap[A4TT_PU_SUB]  = "A4TT_PU_SUB";
+            L15NameMap[A10TT]        = "A10TT";
+            L15NameMap[A4JE]         = "A4JE";
+            L15NameMap[A4JE_JES]     = "A4JE_JES";
+            L15NameMap[A4JE_TC]      = "A4JE_TC";
+            L15NameMap[A4JE_TC_JES]  = "A4JE_TC_JES";
+            L15NameMap[A4JE_PU_SUB]  = "A4JE_PU_SUB";
+            L15NameMap[A10JE]        = "A10JE";
+            L15NameMap[A4CC]         = "A4CC";
+            L15NameMap[A4CC_JES]     = "A4CC_JES";
+            L15NameMap[CALIBRATED]   = "CALIBRATED"; 
+            L15NameMap[UNCALIBRATED] = "UNCALIBRATED"; 
+            
+            std::map <int, std::string>::const_iterator mask_map_iterator = L15NameMap.find(enum_int);
+            if (mask_map_iterator == L15NameMap.end()){
+                return "UNKNOWN";
+            } else {
+                return mask_map_iterator->second;
+            }
+        }
+         
+        void RoIWordToStrings(int RoIWord, std::string & input_type_string, std::string & output_type_string, int & counter){             
+            if ( (RoIWord & BLANKWORD) == BLANKWORD) { // L1.5 jets
+                unsigned int output_enum =  (RoIWord >> 8) & 255 ;
+                unsigned int input_enum  =  (RoIWord >> 16) & 255 ;
+                input_type_string  = MapEnumToString(input_enum);
+                output_type_string  = MapEnumToString(output_enum);
+                counter = RoIWord & 255;
+            } else { // others, probably L2 jets
+                input_type_string = "NON_L15";
+                output_type_string = "L2CONE";
+                counter = 0;
+            }
+                
+        }
+
+
+}; // end of class
+    
+
+#endif // TRIGT2CALOJET_T2L1TOOLS_H
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1ToolsDict.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1ToolsDict.h
new file mode 100644
index 000000000000..45c7641f6968
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1ToolsDict.h
@@ -0,0 +1,10 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2L1TOOLSDICT_H
+#define TRIGT2CALOJET_T2L1TOOLSDICT_H 1
+
+#include "TrigT2CaloJet/T2L1Tools.h"
+
+#endif //  TRIGT2CALOJET_T2L1TOOLSDICT_H
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1TowerCalibTool.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1TowerCalibTool.h
new file mode 100644
index 000000000000..695b01987836
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1TowerCalibTool.h
@@ -0,0 +1,69 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_T2L1TOWERCALIBTOOL_H
+#define TRIGT2CALOJET_T2L1TOWERCALIBTOOL_H
+
+/********************************************************************
+
+NAME:     T2L1TowerCalibTool.h
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>, Carlos Sandoval <csandova@mail.cern.ch>
+CREATED:  December 2010
+
+
+PURPOSE: Calibration tool for L1 towers. 
+         
+
+********************************************************************/
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/AlgTool.h"
+#include "CaloRec/ToolWithConstantsMixin.h"
+
+class TrigT2Jet;
+class Trig3Momentum;
+
+class T2L1TowerCalibTool : public T2CaloJetBaseTool,
+                           public CaloRec::ToolWithConstantsMixin
+{
+    public:
+        
+        T2L1TowerCalibTool(const std::string& type, const std::string& name, 
+                           const IInterface* parent);
+        
+        ~T2L1TowerCalibTool();
+        
+        virtual StatusCode initialize();
+        using T2CaloJetBaseTool::execute;
+        virtual StatusCode execute();
+        virtual StatusCode finalize();
+        
+        virtual StatusCode execute(TrigT2Jet* jet,double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/);
+        
+        using AlgTool::setProperty;
+        virtual StatusCode setProperty (const std::string& propname,
+        const std::string& value);  
+        virtual StatusCode setProperty (const Property& p); 
+    
+    protected:
+        /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+        MsgStream* m_log;
+        
+        Trig3Momentum *m_grid_element;
+        
+        int GetEtaBin(double jet_eta);
+        int GetPhiBin(double jet_phi);
+        int GetEtBin(double jet_et);
+        double GetEtaCalibFactor(int etabin, int phibin, int etbin);        
+        
+        CaloRec::Array<2> m_CalibConstants;
+    
+
+};
+
+#endif // TRIGT2CALOJET_T2L1TOWERCALIBTOOL
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Unpacking.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Unpacking.h
new file mode 100644
index 000000000000..404196dc5693
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/T2L1Unpacking.h
@@ -0,0 +1,116 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1Unpacking.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett
+//
+// Description: Unpack the L1Calo towers for use with L1.5
+// ********************************************************************
+
+#ifndef TRIGT2CALOJET_T2L1UNPACKING_H
+#define TRIGT2CALOJET_T2L1UNPACKING_H
+
+#include "TrigInterfaces/AllTEAlgo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "TrigT2CaloCommon/TrigDataAccess.h"
+
+
+class ITrigTimerSvc;
+class TrigT2Jet;
+class Trig3Momentum;
+class T2CaloJetBaseTool;
+
+namespace LVL1BS{
+    class ITrigT1CaloDataAccess;
+}
+
+namespace LVL1{
+    class IL1JetTools;
+    class JetElement;
+    class TriggerTower;
+}
+
+
+class T2L1Unpacking: public HLT::AllTEAlgo {
+    
+    
+    public:
+        T2L1Unpacking(const std::string & name, ISvcLocator* pSvcLocator);
+        ~T2L1Unpacking();
+        
+        HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& input,
+                                unsigned int output);
+        
+        
+        HLT::ErrorCode hltInitialize();
+        HLT::ErrorCode hltFinalize();
+        
+        CaloSampling::CaloSample determineCaloSampling(double fabs_eta, bool isEM);
+        double determineTriggerTowerEta(double eta, bool isEM);
+    
+    private:
+        // Properties:
+        std::string  m_jetOutputKey;
+        //int          m_outputType;   // record the type of output towers, e.g. calibrated, uncalibrated
+        //std::string  m_outputString; // mapped to enum in initalize, this should be changed so that its directly configured in the config
+        bool         m_doTriggerTowers; // bool to switch to trigger towers mode, default mode is Jet Elements
+        // Tools
+        ToolHandleArray< T2CaloJetBaseTool > m_tools; // for calibration
+        
+    protected: 
+        /** For Logging, in all tools we should use (*m_log) to avoid recalling of the MsgStream all the time. */
+        MsgStream* m_log;
+        
+        ITrigTimerSvc *m_pTimerService;   // pointer to Timer Service
+        //TrigTimer *m_total_timer;
+        TrigTimer *m_l1_unpacking_timer;
+        TrigTimer *m_unpacking_timer;
+        TrigTimer *m_calibration_timer;
+        TrigTimer *m_RoI_timer;
+        
+        ToolHandle< LVL1BS::ITrigT1CaloDataAccess > m_dataL1;
+        bool m_retrievedJetTool;
+
+	/// no longer needed - the the RoiDescriptor directly !!
+        double m_etaMin;
+        double m_etaMax;
+        double m_phiMin;
+        double m_phiMax;
+        bool m_fullScan;
+        
+        // output
+        TrigT2Jet     *m_jet;
+        Trig3Momentum *m_grid_element;
+        
+        // Monitored Variables
+        float               m_UnpckTime;      // The total unpacking time
+        float               m_L1UnpckTime;    // The L1 unpacking time
+        float               m_CalibrationTime;// The time to calibrate the jets
+        //float               m_TotalTime;      // The total time
+        float               m_RoITime;        // The RoI making time
+        int                 m_nTowers;        // The number of towers found
+        int                 m_nEMTowers;      // The number of EM towers found
+        int                 m_nHADTowers;     // The number of HAD towers found
+        std::vector<double> m_et;             // transverse energy
+        std::vector<double> m_et_had;         // hadronic transverse energy 
+        std::vector<double> m_et_em;          // electromagnetic transverse energy
+        std::vector<double> m_eta;            // eta
+        std::vector<double> m_eta_em;         // eta of EM towers
+        std::vector<double> m_eta_had;        // eta of HAD towers
+        std::vector<double> m_phi;            // phi  
+        std::vector<double> m_phi_em;         // phi of EM towers  
+        std::vector<double> m_phi_had;        // phi of HAD towers
+        
+        
+        
+
+
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/Trig3MomentumMerger.h b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/Trig3MomentumMerger.h
new file mode 100644
index 000000000000..7f60a0c817ae
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/Trig3MomentumMerger.h
@@ -0,0 +1,33 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOJET_TRIG3MOMENTUMMERGER_H 
+#define TRIGT2CALOJET_TRIG3MOMENTUMMERGER_H
+
+#include "TrigT2CaloJet/GridsHandler.h"
+#include "TrigT2CaloJet/EtaPhiSampleHash.h"
+#include "TrigT2CaloJet/HashedTrig3Momentum.h"
+
+/*! 
+  @brief Merge Trig3Momentum to a finite granularity
+
+  Merge some input Trig3Momentum collection into an output
+  Trig3Momentum collection with a predefined granularity.
+
+  April 2012
+  davide.gerbaudo@gmail.com
+*/
+
+class Trig3MomentumMerger {
+ public:
+  Trig3MomentumMerger();
+  bool mergeCells(const Vt3m &input, Vt3m &output);
+ private:
+  unsigned int expectedLength(const Vt3m &input);
+ private:
+  EtaPhiSampleHash m_hashMap;
+  GridsHandler m_gridsHandler;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/selection.xml b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/selection.xml
new file mode 100644
index 000000000000..b87b09fad7a1
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/TrigT2CaloJet/selection.xml
@@ -0,0 +1,3 @@
+<lcgdict>
+  <class name="T2L1Tools" />
+</lcgdict>
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/python/CalibrationFactorsL15.py b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/CalibrationFactorsL15.py
new file mode 100644
index 000000000000..1c2ad9602e2a
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/CalibrationFactorsL15.py
@@ -0,0 +1,126 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+binEdgeDict = {}
+binEdgeDict[ 'L2FS_em_residual_factors_eta' ] = [-4.9, -4.0, -3.2, -2.5, -1.6, -0.8, 0.0, 0.8, 1.6, 2.5, 3.2, 4.0, 4.9]
+
+
+energyCorrDict= {}
+## L2FS EM scale residual corrections 
+# Matthew Tamsett <tamsett@cern.ch>
+# Rajivalochan Subramaniam <rajiv.lochan@cern.ch>
+# [i]: eta: -4.9, -4.0, -3.2, -2.5, -1.6, -0.8, 0.0, 0.8, 1.6, 2.5, 3.2, 4.0, 4.9
+## Jet energy calibration
+##   [0]+[1]*(log10(x)^-1)+[2]*(log10(x)^-1)^2+...
+energyCorrDict[ 'L2FS_em_residual_factors' ] = [
+    [1.50000e-01,   1.50000e-01, -7.56261e-01,  1.32880e-01,  0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 0 -4.9< eta <-4.0
+    [-2.50000e-02, -2.50000e-02, -2.50000e-02, -2.50000e-02, -2.34682e-01 , 0.0000e+00, 0.0000e+00], ## bin 1 -4.0< eta <-3.2            
+    [-4.47860e-02,  1.91685e-01, -4.59624e-01,  0.0000e+00,   0.0000e+00 ,  0.0000e+00, 0.0000e+00], ## bin 2 -3.2<eta -2.5
+    [6.03751e-02,  -9.63390e-02, -3.05565e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 3  -2.5<eta<-1.6       
+    [-8.89929e-03,  2.22643e-02, -3.83097e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 4 -1.6<eta<-0.8
+    [5.73233e-02,  -5.45971e-02, -3.30586e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 5 -0.8<eta< 0
+    [5.73233e-02,  -5.45971e-02, -3.30586e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 6  0.0<eta< 0.8
+    [-8.89929e-03,  2.22643e-02, -3.83097e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 7  0.8<eta< 1.6
+    [6.03751e-02,  -9.63390e-02, -3.05565e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 8  1.6<eta<2.5
+    [-4.47860e-02,  1.91685e-01, -4.59624e-01,  0.0000e+00,   0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 9  2.5<eta<3.2
+    [-2.50000e-02, -2.50000e-02, -2.50000e-02, -2.50000e-02, -2.34682e-01 , 0.0000e+00, 0.0000e+00], ## bin 10 3.2< eta <4      
+    [1.50000e-01,   1.50000e-01, -7.56261e-01,  1.32880e-01,  0.0000e+00,   0.0000e+00, 0.0000e+00], ## bin 11 4.0< eta<4.9
+]
+
+
+## Jet element calibration
+energyCorrDict[ 'JE_factors' ] = [
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 0.732649, 0.657187, 0.582351, 0.568978, 0.787708, 0.797072, 0.788461, 0.758857, 0.709569, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[0.963072, 0.917165, 0.858138, 0.788752, 0.790744, 0.934746, 0.899513, 0.890402, 0.871661, 0.793681, 0.807622, 0.94587, 0.922921, 0.903774, 0.894499, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1.01831, 0.995006, 0.930382, 0.869178, 0.874385, 0.990226, 0.938528, 0.933349, 0.92158, 0.827567, 0.838162, 0.966597, 0.949608, 0.952079, 0.942151, 0.923921, 1, 1, 1, 1, 1],
+[1.04632, 1.0065, 0.998164, 0.943681, 0.991454, 1.01259, 0.989524, 0.975407, 0.954918, 0.853876, 0.870036, 0.97283, 0.96642, 0.968738, 0.963785, 0.954188, 0.909048, 1, 1, 0.758403, 1],
+[1.03808, 1.02677, 1.02914, 0.9612, 1.01392, 1.02696, 0.997101, 0.9781, 0.950607, 0.861182, 0.875115, 0.975573, 0.966072, 0.964686, 0.950734, 0.94877, 0.930003, 0.968884, 1, 0.673215, 1],
+[1.05728, 1.04072, 1.03521, 0.971556, 1.00436, 1.02207, 0.997667, 0.976948, 0.960568, 0.862825, 0.877273, 0.971429, 0.966273, 0.967753, 0.965021, 0.963443, 0.957007, 0.907368, 1, 0.777622, 1],
+[1.0335, 1.04651, 1.01774, 1.01502, 1.01123, 1.00854, 0.992301, 0.974068, 0.957547, 0.863424, 0.876279, 0.967542, 0.96582, 0.968138, 0.965577, 0.963099, 0.955318, 0.953505, 0.969231, 0.811548, 1],
+[1.05667, 1.07414, 1.12747, 1.17586, 1.0306, 1.05539, 1.04156, 1.0482, 1.01271, 1.00957, 0.986511, 1.00956, 1.00419, 0.997957, 0.990016, 0.980192, 0.972004, 0.964872, 0.969231, 0.841827, 1],
+[1.06822, 1.13373, 1.22308, 1.16611, 1.01388, 1.06828, 1.06539, 1.08269, 1.08061, 1.08864, 0.975235, 1.02304, 1.02052, 1.0031, 0.990162, 0.986197, 0.980423, 0.968884, 0.876923, 0.853859, 1],
+[1.088, 1.08228, 1.15033, 1.16992, 1.02095, 1.05037, 1.04923, 1.05511, 1.03741, 1.04549, 0.998608, 1.04065, 1.04638, 1.04287, 1.03978, 1.03551, 1.03327, 1.01964, 0.969231, 0.928778, 1],
+[1.06134, 1.07087, 1.13335, 1.1473, 1.01166, 1.05035, 1.03923, 1.05272, 1.03184, 1.02643, 0.985362, 1.03035, 1.03848, 1.03402, 1.03025, 1.02781, 1.02005, 1.01456, 1.04615, 0.947696, 1],
+[1.02439, 1.02975, 1.03728, 1.09439, 0.974983, 1.00738, 1.00662, 1.016, 0.999814, 0.975261, 0.958696, 0.999569, 1.00895, 1.00741, 1.00495, 1.00166, 0.999155, 0.993898, 0.992308, 0.97022, 1],
+[1.00698, 1.00495, 0.991761, 1.01249, 0.981476, 0.999528, 0.99939, 1.00238, 0.99601, 0.96414, 0.987203, 0.998647, 1.00389, 1.00354, 1.00338, 1.00247, 1.00239, 1.00077, 1.00879, 0.979493, 1],
+[1.01036, 1.00545, 1.0073, 1.01002, 0.986233, 1.00075, 1.00497, 0.997815, 0.999706, 0.982039, 1.00018, 1.00176, 1.00353, 1.0034, 1.00322, 1.00395, 1.00239, 1.00677, 0.995604, 1.00742, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1.00326, 1.00893, 0.981908, 1.00688, 0.983689, 1.00378, 0.998563, 0.995499, 1.00682, 0.997098, 0.992604, 0.994677, 0.998323, 0.997436, 0.997583, 0.997269, 0.995517, 0.990071, 0.984615, 0.997593, 1],
+[1.00419, 0.99139, 0.988142, 0.989949, 0.987665, 0.993987, 0.995894, 0.989736, 0.987683, 0.984006, 0.99745, 0.991238, 0.99326, 0.992002, 0.9916, 0.992211, 0.988493, 0.989086, 0.982657, 0.995758, 1],
+[1.00033, 0.999973, 0.986212, 0.992648, 0.990341, 0.996469, 0.990997, 0.98742, 0.982071, 0.966529, 0.996929, 0.988278, 0.99071, 0.990932, 0.990534, 0.990377, 0.991391, 0.986356, 0.986982, 0.995863, 1],
+[0.997823, 0.997993, 0.996516, 0.980383, 0.973388, 0.988612, 0.992555, 0.990589, 0.98603, 0.955803, 0.982497, 0.985134, 0.989585, 0.989439, 0.98986, 0.987933, 0.988564, 0.983245, 0.988811, 0.975359, 1],
+[1.00145, 1.00299, 1.01761, 1.03578, 0.971403, 0.991637, 1.001, 0.996646, 0.978679, 0.98986, 0.961125, 0.985624, 0.993008, 0.991249, 0.98943, 0.986799, 0.987093, 0.976908, 1, 0.95216, 1],
+[1.02765, 1.05224, 1.08272, 1.12208, 0.995723, 1.0241, 1.02565, 1.0367, 1.01459, 1.03169, 0.985472, 1.02033, 1.02764, 1.02175, 1.01865, 1.01438, 1.00701, 1.01059, 0.976923, 0.938199, 1],
+[1.0787, 1.08527, 1.10586, 1.15524, 1.02656, 1.03945, 1.04886, 1.04752, 1.03223, 1.00483, 1.00023, 1.03519, 1.03736, 1.03311, 1.02905, 1.02496, 1.01955, 1.00925, 1.03077, 0.928851, 1],
+[1.05407, 1.07286, 1.14085, 1.13365, 1.00321, 1.04376, 1.04587, 1.05198, 1.04193, 1.05515, 0.976433, 1.01714, 1.01288, 0.994341, 0.979535, 0.976823, 0.978074, 0.949956, 0.923077, 0.837593, 1],
+[1.06226, 1.12014, 1.17891, 1.18049, 1.03381, 1.07113, 1.05943, 1.05496, 1.04184, 1.04432, 1.00074, 1.01669, 1.00968, 1.00158, 0.991343, 0.981698, 0.971028, 0.963456, 1, 0.853603, 1],
+[1.0421, 1.04362, 1.03215, 1.00733, 1.00688, 1.01012, 0.995392, 0.975134, 0.961122, 0.859542, 0.894761, 0.968768, 0.968193, 0.971021, 0.968925, 0.966411, 0.963923, 0.962293, 1, 0.810748, 1],
+[1.05884, 1.04375, 1.03846, 1.01044, 1.01915, 1.01851, 1.0016, 0.986813, 0.966459, 0.867083, 0.886514, 0.973076, 0.970679, 0.972459, 0.970648, 0.96881, 0.972509, 0.968884, 1, 0.774462, 1],
+[1.05683, 1.0476, 1.0008, 0.97346, 1.02024, 1.02595, 0.994583, 0.98965, 0.959866, 0.867563, 0.885586, 0.975321, 0.969133, 0.970606, 0.968159, 0.961191, 0.957472, 1, 1, 0.728722, 1],
+[1.0544, 1.021, 1.02373, 0.981706, 1.00512, 1.01978, 0.989929, 0.974602, 0.95836, 0.854214, 0.865464, 0.972314, 0.965047, 0.967045, 0.961512, 0.947749, 0.83201, 1, 1, 0.656396, 1],
+[1.0136, 0.986109, 0.94201, 0.874168, 0.89865, 0.987246, 0.936149, 0.93741, 0.92277, 0.831139, 0.848595, 0.973952, 0.952389, 0.952801, 0.940302, 0.93932, 1, 1, 1, 0.709617, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[0.957084, 0.91684, 0.85538, 0.78333, 0.773765, 0.931254, 0.895317, 0.88877, 0.877844, 0.796638, 0.797414, 0.944883, 0.920993, 0.903721, 0.774315, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 0.832556, 0.698693, 0.639456, 0.692557, 0.777771, 0.792767, 0.849111, 0.708267, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
+]
+
+## Trigger Towers
+energyCorrDict[ 'TT_factors' ] = [
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 0.732649, 0.657187, 0.582351, 0.568978, 0.787708, 0.797072, 0.788461, 0.758857, 0.709569, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[0.963072, 0.917165, 0.858138, 0.788752, 0.790744, 0.934746, 0.899513, 0.890402, 0.871661, 0.793681, 0.807622, 0.94587, 0.922921, 0.903774, 0.894499, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1.01831, 0.995006, 0.930382, 0.869178, 0.874385, 0.990226, 0.938528, 0.933349, 0.92158, 0.827567, 0.838162, 0.966597, 0.949608, 0.952079, 0.942151, 0.923921, 1, 1, 1, 1, 1],
+[1.04632, 1.0065, 0.998164, 0.943681, 0.991454, 1.01259, 0.989524, 0.975407, 0.954918, 0.853876, 0.870036, 0.97283, 0.96642, 0.968738, 0.963785, 0.954188, 0.909048, 1, 1, 0.758403, 1],
+[1.03808, 1.02677, 1.02914, 0.9612, 1.01392, 1.02696, 0.997101, 0.9781, 0.950607, 0.861182, 0.875115, 0.975573, 0.966072, 0.964686, 0.950734, 0.94877, 0.930003, 0.968884, 1, 0.673215, 1],
+[1.05728, 1.04072, 1.03521, 0.971556, 1.00436, 1.02207, 0.997667, 0.976948, 0.960568, 0.862825, 0.877273, 0.971429, 0.966273, 0.967753, 0.965021, 0.963443, 0.957007, 0.907368, 1, 0.777622, 1],
+[1.0335, 1.04651, 1.01774, 1.01502, 1.01123, 1.00854, 0.992301, 0.974068, 0.957547, 0.863424, 0.876279, 0.967542, 0.96582, 0.968138, 0.965577, 0.963099, 0.955318, 0.953505, 0.969231, 0.811548, 1],
+[1.05667, 1.07414, 1.12747, 1.17586, 1.0306, 1.05539, 1.04156, 1.0482, 1.01271, 1.00957, 0.986511, 1.00956, 1.00419, 0.997957, 0.990016, 0.980192, 0.972004, 0.964872, 0.969231, 0.841827, 1],
+[1.06822, 1.13373, 1.22308, 1.16611, 1.01388, 1.06828, 1.06539, 1.08269, 1.08061, 1.08864, 0.975235, 1.02304, 1.02052, 1.0031, 0.990162, 0.986197, 0.980423, 0.968884, 0.876923, 0.853859, 1],
+[1.088, 1.08228, 1.15033, 1.16992, 1.02095, 1.05037, 1.04923, 1.05511, 1.03741, 1.04549, 0.998608, 1.04065, 1.04638, 1.04287, 1.03978, 1.03551, 1.03327, 1.01964, 0.969231, 0.928778, 1],
+[1.06134, 1.07087, 1.13335, 1.1473, 1.01166, 1.05035, 1.03923, 1.05272, 1.03184, 1.02643, 0.985362, 1.03035, 1.03848, 1.03402, 1.03025, 1.02781, 1.02005, 1.01456, 1.04615, 0.947696, 1],
+[1.02439, 1.02975, 1.03728, 1.09439, 0.974983, 1.00738, 1.00662, 1.016, 0.999814, 0.975261, 0.958696, 0.999569, 1.00895, 1.00741, 1.00495, 1.00166, 0.999155, 0.993898, 0.992308, 0.97022, 1],
+[1.00698, 1.00495, 0.991761, 1.01249, 0.981476, 0.999528, 0.99939, 1.00238, 0.99601, 0.96414, 0.987203, 0.998647, 1.00389, 1.00354, 1.00338, 1.00247, 1.00239, 1.00077, 1.00879, 0.979493, 1],
+[1.01036, 1.00545, 1.0073, 1.01002, 0.986233, 1.00075, 1.00497, 0.997815, 0.999706, 0.982039, 1.00018, 1.00176, 1.00353, 1.0034, 1.00322, 1.00395, 1.00239, 1.00677, 0.995604, 1.00742, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1.00326, 1.00893, 0.981908, 1.00688, 0.983689, 1.00378, 0.998563, 0.995499, 1.00682, 0.997098, 0.992604, 0.994677, 0.998323, 0.997436, 0.997583, 0.997269, 0.995517, 0.990071, 0.984615, 0.997593, 1],
+[1.00419, 0.99139, 0.988142, 0.989949, 0.987665, 0.993987, 0.995894, 0.989736, 0.987683, 0.984006, 0.99745, 0.991238, 0.99326, 0.992002, 0.9916, 0.992211, 0.988493, 0.989086, 0.982657, 0.995758, 1],
+[1.00033, 0.999973, 0.986212, 0.992648, 0.990341, 0.996469, 0.990997, 0.98742, 0.982071, 0.966529, 0.996929, 0.988278, 0.99071, 0.990932, 0.990534, 0.990377, 0.991391, 0.986356, 0.986982, 0.995863, 1],
+[0.997823, 0.997993, 0.996516, 0.980383, 0.973388, 0.988612, 0.992555, 0.990589, 0.98603, 0.955803, 0.982497, 0.985134, 0.989585, 0.989439, 0.98986, 0.987933, 0.988564, 0.983245, 0.988811, 0.975359, 1],
+[1.00145, 1.00299, 1.01761, 1.03578, 0.971403, 0.991637, 1.001, 0.996646, 0.978679, 0.98986, 0.961125, 0.985624, 0.993008, 0.991249, 0.98943, 0.986799, 0.987093, 0.976908, 1, 0.95216, 1],
+[1.02765, 1.05224, 1.08272, 1.12208, 0.995723, 1.0241, 1.02565, 1.0367, 1.01459, 1.03169, 0.985472, 1.02033, 1.02764, 1.02175, 1.01865, 1.01438, 1.00701, 1.01059, 0.976923, 0.938199, 1],
+[1.0787, 1.08527, 1.10586, 1.15524, 1.02656, 1.03945, 1.04886, 1.04752, 1.03223, 1.00483, 1.00023, 1.03519, 1.03736, 1.03311, 1.02905, 1.02496, 1.01955, 1.00925, 1.03077, 0.928851, 1],
+[1.05407, 1.07286, 1.14085, 1.13365, 1.00321, 1.04376, 1.04587, 1.05198, 1.04193, 1.05515, 0.976433, 1.01714, 1.01288, 0.994341, 0.979535, 0.976823, 0.978074, 0.949956, 0.923077, 0.837593, 1],
+[1.06226, 1.12014, 1.17891, 1.18049, 1.03381, 1.07113, 1.05943, 1.05496, 1.04184, 1.04432, 1.00074, 1.01669, 1.00968, 1.00158, 0.991343, 0.981698, 0.971028, 0.963456, 1, 0.853603, 1],
+[1.0421, 1.04362, 1.03215, 1.00733, 1.00688, 1.01012, 0.995392, 0.975134, 0.961122, 0.859542, 0.894761, 0.968768, 0.968193, 0.971021, 0.968925, 0.966411, 0.963923, 0.962293, 1, 0.810748, 1],
+[1.05884, 1.04375, 1.03846, 1.01044, 1.01915, 1.01851, 1.0016, 0.986813, 0.966459, 0.867083, 0.886514, 0.973076, 0.970679, 0.972459, 0.970648, 0.96881, 0.972509, 0.968884, 1, 0.774462, 1],
+[1.05683, 1.0476, 1.0008, 0.97346, 1.02024, 1.02595, 0.994583, 0.98965, 0.959866, 0.867563, 0.885586, 0.975321, 0.969133, 0.970606, 0.968159, 0.961191, 0.957472, 1, 1, 0.728722, 1],
+[1.0544, 1.021, 1.02373, 0.981706, 1.00512, 1.01978, 0.989929, 0.974602, 0.95836, 0.854214, 0.865464, 0.972314, 0.965047, 0.967045, 0.961512, 0.947749, 0.83201, 1, 1, 0.656396, 1],
+[1.0136, 0.986109, 0.94201, 0.874168, 0.89865, 0.987246, 0.936149, 0.93741, 0.92277, 0.831139, 0.848595, 0.973952, 0.952389, 0.952801, 0.940302, 0.93932, 1, 1, 1, 0.709617, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[0.957084, 0.91684, 0.85538, 0.78333, 0.773765, 0.931254, 0.895317, 0.88877, 0.877844, 0.796638, 0.797414, 0.944883, 0.920993, 0.903721, 0.774315, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 0.832556, 0.698693, 0.639456, 0.692557, 0.777771, 0.792767, 0.849111, 0.708267, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
+]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetConfig.py
new file mode 100755
index 000000000000..0d6f6473dd83
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetConfig.py
@@ -0,0 +1,1541 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Monitoring classes are loaded for each algorithm
+
+from AthenaCommon.Logging import logging
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloJetGridFromCells
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloJetGridFromFEBHeader
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloJetConeTool
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloJetCalibTool
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1CaloJet
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1CaloFullScanJet
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1CaloJetFullScanFastJetTool
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1Unpacking
+from TrigT2CaloJet.TrigT2CaloJetConf import T2AllRoiUnpacking
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloFastJet
+from TrigT2CaloJet.TrigT2CaloJetConf import T2CaloJet
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1TowerCalibTool
+from TrigT2CaloJet.TrigT2CaloJetConf import T2L1CaloJetCalibTool
+
+import TrigT2CaloJet.CalibrationFactorsL15 as CalibrationFactorsL15
+
+from TrigT2CaloCalibration.TrigT2CaloCalibrationConf import T2SampCalibTool
+from TrigT2CaloCalibration.TrigT2CaloCalibrationConf import T2JESCalibTool
+from TrigT2CaloCalibration.TrigT2CaloCalibrationConf import T2GSCalibTool
+
+#import JetCalibTools.EtaMassEnergyFactors        as EtaMassEnergyFactors
+#import JetCalibTools.Tile1FractionConstants      as Tile1FractionConstants
+#import JetCalibTools.HEC0FractionConstants       as HEC0FractionConstants
+#import JetCalibTools.EM3FractionConstants        as EM3FractionConstants
+#import JetCalibTools.FCAL1FractionConstants      as FCAL1FractionConstants
+#import JetCalibTools.PresamplerFractionConstants as PresamplerFractionConstants 
+
+from AthenaCommon.Constants import VERBOSE,DEBUG,INFO
+from AthenaPython import PyAthena # for L1.5 enums
+
+class  T2AllRoiUnpacking_test(T2AllRoiUnpacking):
+    __slots__ = []
+    def __init__(self, name="T2AllRoiUnpacking_test", noisecut=2.):
+        super( T2AllRoiUnpacking_test, self ).__init__(name)        
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import T2AllRoiUnpackingTimeOnlineMonitoring, T2AllRoiUnpackingTimeValidationMonitoring
+        online = T2AllRoiUnpackingTimeOnlineMonitoring()
+        validation = T2AllRoiUnpackingTimeValidationMonitoring()
+        self.AthenaMonTools = [online, validation, ]
+        self.doTiming=True
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2CaloJetGridFromCells()
+        from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+        theNoiseTool = CaloNoiseToolDefault()
+        ToolSvc += theNoiseTool
+        # add the tool used to get & fill the calorimeter cells
+        t2calojetgridfromcellsTool = T2CaloJetGridFromCells()
+        t2calojetgridfromcellsTool.doTiming = True
+        t2calojetgridfromcellsTool.doHECcellQualityCleaning = False
+        t2calojetgridfromcellsTool.applyNoiseCut = True  # gerbaudo@cern.ch: should I set also the threshold? (default is 2.0)
+        t2calojetgridfromcellsTool.noiseTool = theNoiseTool
+        t2calojetgridfromcellsTool.applyNoiseCut = True
+        t2calojetgridfromcellsTool.noiseCutValue = noisecut
+
+        self.GridFromCellsTool = t2calojetgridfromcellsTool
+        # here put your customizations
+        self.L2RoiEtaHalfWidth = 0.5
+        self.L2RoiPhiHalfWidth = 0.5
+        #self.MergeEmCells=False #default True
+
+## L1.5 unpackers
+class T2L1Unpacking_Base (T2L1Unpacking):
+    __slots__ = []
+    def __init__(self, name):
+        super( T2L1Unpacking_Base, self ).__init__(name)
+        
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2L1UnpackingValidationMonitoring, TrigT2L1UnpackingOnlineMonitoring, TrigT2L1UnpackingCosmicMonitoring
+        validation = TrigT2L1UnpackingValidationMonitoring()
+        online = TrigT2L1UnpackingOnlineMonitoring()
+        cosmic = TrigT2L1UnpackingCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1Unpacking_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+class T2L1Unpacking_TT (T2L1Unpacking_Base):
+    __slots__ = []
+    def __init__(self, name="T2L1Unpacking_TT"):
+        super( T2L1Unpacking_TT, self ).__init__(name)
+        # here put your customizations
+        self.doTriggerTowers = True
+
+class T2L1Unpacking_TT_TowerCalib (T2L1Unpacking_Base):
+    __slots__ = []
+    def __init__(self, name="T2L1Unpacking_TT_TowerCalib"):
+        super( T2L1Unpacking_TT_TowerCalib, self ).__init__(name)      
+        # here put your customizations
+        self.doTriggerTowers = True        
+        # add in the calibration tool
+        t2l1towercalibtool = T2L1TowerCalibTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1TowerCalibTool()
+        energyCorr = [ [ ] ]
+        energyCorr = CalibrationFactorsL15.energyCorrDict['TT_factors']
+        t2l1towercalibtool.Calib_Factors = str(energyCorr)
+        self.T2JetTools = [t2l1towercalibtool]        
+
+class T2L1Unpacking_JE (T2L1Unpacking_Base):
+    __slots__ = []
+    def __init__(self, name="T2L1Unpacking_JE"):
+        super( T2L1Unpacking_JE, self ).__init__(name)
+        # here put your customizations
+        self.doTriggerTowers = False
+        
+class T2L1Unpacking_JE_TowerCalib (T2L1Unpacking_Base):
+    __slots__ = []
+    def __init__(self, name="T2L1Unpacking_JE_TowerCalib"):
+        super( T2L1Unpacking_JE_TowerCalib, self ).__init__(name)
+        # here put your customizations
+        self.doTriggerTowers = False  
+        # add in the calibration tool
+        t2l1towercalibtool = T2L1TowerCalibTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1TowerCalibTool()
+        energyCorr = [ [ ] ]
+        energyCorr = CalibrationFactorsL15.energyCorrDict['JE_factors']
+        t2l1towercalibtool.Calib_Factors = str(energyCorr)
+        self.T2JetTools = [t2l1towercalibtool]        
+
+class T2CaloFastJet_CC (T2CaloFastJet):
+    "T2CaloFastJet FEX to be used with calorimeter cells"
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_CC"):
+        super( T2CaloFastJet_CC, self ).__init__(name)
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2CaloFastJetValidationMonitoring, TrigT2CaloFastJetOnlineMonitoring, TrigT2CaloFastJetCosmicMonitoring
+        validation = TrigT2CaloFastJetValidationMonitoring()
+        online = TrigT2CaloFastJetOnlineMonitoring()
+        cosmic = TrigT2CaloFastJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2CaloFastJet_CC_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = False # do the regular cell-based cleaning
+        self.outputType = PyAthena.T2L1Tools.A4CC
+
+class T2CaloFastJet_CC_JESCalib (T2CaloFastJet_CC):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_CC_JESCalib"):
+        super( T2CaloFastJet_CC_JESCalib, self ).__init__(name)
+        # here put your customizations
+        self.outputType = PyAthena.T2L1Tools.A4CC_JES
+        # add in the calibration tool
+        t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        t2jescalibtool.MinEtCut = 1 
+        # Jet calibration factors
+        energyCorr = [ [ ] ]
+#        energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        t2jescalibtool.JES_Factors = str(energyCorr)
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        t2calojetcalibtool.doJetCalib = True
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config        
+        self.T2JetTools = [t2calojetcalibtool]
+
+class T2CaloFastJet_CC_JESCalib_L15 (T2CaloFastJet_CC_JESCalib):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_CC_JESCalib_L15"):
+        super( T2CaloFastJet_CC_JESCalib_L15, self ).__init__(name)
+        # here put your customizations
+        self.inputType = PyAthena.T2L1Tools.A4TT
+class T2CaloFastJet_CC_JESCalib_L15had (T2CaloFastJet_CC_JESCalib):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_CC_JESCalib_L15had"):
+        super( T2CaloFastJet_CC_JESCalib_L15had, self ).__init__(name)
+        # here put your customizations
+        self.inputType = PyAthena.T2L1Tools.A4TT_JES
+
+        
+## L1.5 FastJet FEXes
+class T2CaloFastJet_Base (T2CaloFastJet):
+    __slots__ = []
+    def __init__(self, name):
+        super( T2CaloFastJet_Base, self ).__init__(name)
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2CaloFastJetValidationMonitoring, TrigT2CaloFastJetOnlineMonitoring, TrigT2CaloFastJetCosmicMonitoring
+        validation = TrigT2CaloFastJetValidationMonitoring()
+        online = TrigT2CaloFastJetOnlineMonitoring()
+        cosmic = TrigT2CaloFastJetCosmicMonitoring()
+        
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2CaloFastJet_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+        
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+
+###############
+# All non-multiple output TE algorithms should not be used with current L1.5 L2 interface
+###############
+#class T2CaloFastJet_a4JE (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4JE"):
+        #super( T2CaloFastJet_a4JE, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4JE
+        
+#class T2CaloFastJet_a4JE_TowerCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4JE_TowerCalib"):
+        #super( T2CaloFastJet_a4JE_TowerCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.inputType  = PyAthena.T2L1Tools.CALIBRATED
+        #self.outputType = PyAthena.T2L1Tools.A4JE_TC
+        
+        
+#class T2CaloFastJet_a4JE_JESCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4JE_JESCalib"):
+        #super( T2CaloFastJet_a4JE_JESCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4JE_JES
+        
+        ## add in the calibration tool
+        #t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        #t2jescalibtool.MinEtCut = 1 
+        ## Jet calibration factors
+        #energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        #t2jescalibtool.JES_Factors = str(energyCorr)
+
+        #t2calojetcalibtool = T2CaloJetCalibTool()
+        #t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        #t2calojetcalibtool.doJetCalib = True
+        #t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+        
+        #self.T2JetTools = [t2calojetcalibtool]
+        
+        
+#class T2CaloFastJet_a4JE_TowerCalib_JESCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4JE_TowerCalib_JESCalib"):
+        #super( T2CaloFastJet_a4JE_TowerCalib_JESCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.inputType  = PyAthena.T2L1Tools.CALIBRATED
+        #self.outputType = PyAthena.T2L1Tools.A4JE_TC_JES
+        
+        ## add in the calibration tool
+        #t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        #t2jescalibtool.MinEtCut = 1 
+        ## Jet calibration factors
+        #energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        #t2jescalibtool.JES_Factors = str(energyCorr)
+
+        #t2calojetcalibtool = T2CaloJetCalibTool()
+        #t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        #t2calojetcalibtool.doJetCalib = True
+        #t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+        
+        #self.T2JetTools = [t2calojetcalibtool]
+        
+        
+#class T2CaloFastJet_a10JE (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a10JE"):
+        #super( T2CaloFastJet_a10JE, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.distanceParameter = 1.0
+        #self.outputType = PyAthena.T2L1Tools.A10JE
+        
+class T2CaloFastJet_a4JE (T2CaloFastJet_Base):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_a4JE"):
+        super( T2CaloFastJet_a4JE, self ).__init__(name)
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = True
+        self.outputType = PyAthena.T2L1Tools.A4JE
+        self.writeMultipleOutputTEs = True
+        self.secondOutputType = PyAthena.T2L1Tools.L2CONE
+class T2CaloFastJet_a10JE (T2CaloFastJet_Base):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_a10JE"):
+        super( T2CaloFastJet_a10JE, self ).__init__(name)
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = True
+        self.outputType = PyAthena.T2L1Tools.A10JE
+        self.distanceParameter = 1.0
+        self.writeMultipleOutputTEs = True
+        self.secondOutputType = PyAthena.T2L1Tools.L2CONE
+###############
+# All non-multiple output TE algorithms should not be used with current L1.5 L2 interface
+###############
+#class T2CaloFastJet_a4JE_PileupSubtraction (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4JE_PileupSubtraction"):
+        #super( T2CaloFastJet_a4JE_PileupSubtraction, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4JE_PU_SUB
+        #self.doPileupSubtraction = True
+
+#class T2CaloFastJet_a4TT (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4TT"):
+        #super( T2CaloFastJet_a4TT, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4TT
+
+#class T2CaloFastJet_a4TT_TowerCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4TT_TowerCalib"):
+        #super( T2CaloFastJet_a4TT_TowerCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.inputType  = PyAthena.T2L1Tools.CALIBRATED
+        #self.outputType = PyAthena.T2L1Tools.A4TT_TC
+        
+        
+#class T2CaloFastJet_a4TT_JESCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4TT_JESCalib"):
+        #super( T2CaloFastJet_a4TT_JESCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4TT_JES
+        
+        ## add in the calibration tool
+        #t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        #t2jescalibtool.MinEtCut = 1 
+        ## Jet calibration factors
+        #energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        #t2jescalibtool.JES_Factors = str(energyCorr)
+
+        #t2calojetcalibtool = T2CaloJetCalibTool()
+        #t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        #t2calojetcalibtool.doJetCalib = True
+        #t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+        
+        #self.T2JetTools = [t2calojetcalibtool]
+        
+        
+#class T2CaloFastJet_a4TT_TowerCalib_JESCalib (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4TT_TowerCalib_JESCalib"):
+        #super( T2CaloFastJet_a4TT_TowerCalib_JESCalib, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.inputType  = PyAthena.T2L1Tools.CALIBRATED
+        #self.outputType = PyAthena.T2L1Tools.A4TT_TC_JES
+        
+        ## add in the calibration tool
+        #t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        #t2jescalibtool.MinEtCut = 1 
+        ## Jet calibration factors
+        #energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        #t2jescalibtool.JES_Factors = str(energyCorr)
+
+        #t2calojetcalibtool = T2CaloJetCalibTool()
+        #t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        #t2calojetcalibtool.doJetCalib = True
+        #t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        #t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+        
+        #self.T2JetTools = [t2calojetcalibtool]
+        
+
+#class T2CaloFastJet_a10TT (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a10TT"):
+        #super( T2CaloFastJet_a10TT, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.distanceParameter = 1.0
+        #self.outputType = PyAthena.T2L1Tools.A10TT
+        
+        
+class T2CaloFastJet_a4TT (T2CaloFastJet_Base):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_a4TT"):
+        super( T2CaloFastJet_a4TT, self ).__init__(name)
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = True
+        self.outputType = PyAthena.T2L1Tools.A4TT
+        self.writeMultipleOutputTEs = True
+        self.secondOutputType = PyAthena.T2L1Tools.L2CONE
+        
+class T2CaloFastJet_a10TT (T2CaloFastJet_Base):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_a10TT"):
+        super( T2CaloFastJet_a10TT, self ).__init__(name)
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = True
+        self.outputType = PyAthena.T2L1Tools.A10TT
+        self.distanceParameter = 1.0
+        self.writeMultipleOutputTEs = True
+        self.secondOutputType = PyAthena.T2L1Tools.L2CONE
+
+class T2CaloFastJet_a4TT_JESCalib (T2CaloFastJet_Base):
+    __slots__ = []
+    def __init__(self, name="T2CaloFastJet_a4TT_JESCalib"):
+        super( T2CaloFastJet_a4TT_JESCalib, self ).__init__(name)
+        # here put your customizations
+        self.doCleaning = True
+        self.doT2L1Cleaning = True
+        self.outputType = PyAthena.T2L1Tools.A4TT_JES
+        self.pTmin = 10000. # here we could lower the pTmin cut so we can calibrate jets up.
+        
+        # add in the calibration tool
+        t2l1calojetcalibtool = T2L1CaloJetCalibTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1CaloJetCalibTool()
+        # Jet calibration factors
+        energyCorr = [ [ ] ]
+        energyCorr = CalibrationFactorsL15.energyCorrDict['L2FS_em_residual_factors'] ### DEBUG FACTORS replace with real ones
+        Eta_bins   = CalibrationFactorsL15.binEdgeDict['L2FS_em_residual_factors_eta'] 
+        t2l1calojetcalibtool.Calib_Factors = str(energyCorr)
+        t2l1calojetcalibtool.Eta_bin_edges = Eta_bins
+        assert len(Eta_bins)-1 == len(energyCorr), "T2CaloFastJet_a4TT_JESCalib eta bin length %i-1 != number of x bins in energy correction matrix %i"%(len(Eta_bins),len(energyCorr))
+        
+        # add in the calibration tool
+        t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        t2jescalibtool.MinEtCut = 1 
+        # Jet calibration factors
+        energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM'] # as a test, eventually we'll have our own constants
+        t2jescalibtool.JES_Factors = str(energyCorr)
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        t2calojetcalibtool.doJetCalib = True
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config 
+         
+        self.T2JetTools = [t2l1calojetcalibtool,t2calojetcalibtool]      
+        
+        self.writeMultipleOutputTEs = True
+        self.secondOutputType = PyAthena.T2L1Tools.L2CONE
+        
+#class T2CaloFastJet_a4TT_PileupSubtraction (T2CaloFastJet_Base):
+    #__slots__ = []
+    #def __init__(self, name="T2CaloFastJet_a4TT_PileupSubtraction"):
+        #super( T2CaloFastJet_a4TT_PileupSubtraction, self ).__init__(name)
+        ## here put your customizations
+        #self.doCleaning = True
+        #self.doT2L1Cleaning = True
+        #self.outputType = PyAthena.T2L1Tools.A4TT_PU_SUB
+        #self.doPileupSubtraction = True
+        
+## depreciated L1.5 FEXes
+class T2L1CaloFullScanFastJet_JE_Jet (T2L1CaloFullScanJet):
+    __slots__ = []
+    def __init__(self, name="T2L1CaloFullScanFastJet_JE_Jet"):
+        super( T2L1CaloFullScanFastJet_JE_Jet, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2L1CaloJetValidationMonitoring, TrigT2L1CaloJetOnlineMonitoring, TrigT2L1CaloJetCosmicMonitoring
+        validation = TrigT2L1CaloJetValidationMonitoring()
+        online = TrigT2L1CaloJetOnlineMonitoring()
+        cosmic = TrigT2L1CaloJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1CaloFullScanJet_JE_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+        # here put your customizations
+        t2l1fullscanfastjettool = T2L1CaloJetFullScanFastJetTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1CaloJetFullScanFastJetTool()
+        t2l1fullscanfastjettool.coneRadius = 0.4        
+        t2l1fullscanfastjettool.doTriggerTowers = False
+        t2l1fullscanfastjettool.doCleaning = True
+        
+        self.T2JetTools = [t2l1fullscanfastjettool]
+        
+class T2L1CaloFullScanFastJet_TT_Jet (T2L1CaloFullScanJet):
+    __slots__ = []
+    def __init__(self, name="T2L1CaloFullScanFastJet_TT_Jet"):
+        super( T2L1CaloFullScanFastJet_TT_Jet, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2L1CaloJetValidationMonitoring, TrigT2L1CaloJetOnlineMonitoring, TrigT2L1CaloJetCosmicMonitoring
+        validation = TrigT2L1CaloJetValidationMonitoring()
+        online = TrigT2L1CaloJetOnlineMonitoring()
+        cosmic = TrigT2L1CaloJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1CaloFullScanJet_TT_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+        # here put your customizations
+        t2l1fullscanfastjettool = T2L1CaloJetFullScanFastJetTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1CaloJetFullScanFastJetTool()
+        t2l1fullscanfastjettool.coneRadius = 0.4        
+        t2l1fullscanfastjettool.doTriggerTowers = True
+        t2l1fullscanfastjettool.doCleaning   = True
+        t2l1fullscanfastjettool.doJetFinding = True
+        
+        self.T2JetTools = [t2l1fullscanfastjettool]
+        
+        # debug
+        self.recordOutput = True
+        
+class T2L1CaloFullScanFastJet_10_TT_Jet (T2L1CaloFullScanJet):
+    __slots__ = []
+    def __init__(self, name="T2L1CaloFullScanFastJet_10_TT_Jet"):
+        super( T2L1CaloFullScanFastJet_10_TT_Jet, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2L1CaloJetValidationMonitoring, TrigT2L1CaloJetOnlineMonitoring, TrigT2L1CaloJetCosmicMonitoring
+        validation = TrigT2L1CaloJetValidationMonitoring()
+        online = TrigT2L1CaloJetOnlineMonitoring()
+        cosmic = TrigT2L1CaloJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1CaloFullScanJet_10_TT_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+        # here put your customizations
+        t2l1fullscanfastjettool = T2L1CaloJetFullScanFastJetTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1CaloJetFullScanFastJetTool()
+        t2l1fullscanfastjettool.coneRadius = 1.0      
+        t2l1fullscanfastjettool.doTriggerTowers = True
+        
+        self.T2JetTools = [t2l1fullscanfastjettool]
+
+
+class T2L1CaloFullScanFastJet_10_JE_Jet (T2L1CaloFullScanJet):
+    __slots__ = []
+    def __init__(self, name="T2L1CaloFullScanFastJet_10_JE_Jet"):
+        super( T2L1CaloFullScanFastJet_10_JE_Jet, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2L1CaloJetValidationMonitoring, TrigT2L1CaloJetOnlineMonitoring, TrigT2L1CaloJetCosmicMonitoring
+        validation = TrigT2L1CaloJetValidationMonitoring()
+        online = TrigT2L1CaloJetOnlineMonitoring()
+        cosmic = TrigT2L1CaloJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1CaloFullScanJet_10_JE_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+        # here put your customizations
+        t2l1fullscanfastjettool = T2L1CaloJetFullScanFastJetTool()
+        from AthenaCommon.AppMgr import ToolSvc
+        ToolSvc += T2L1CaloJetFullScanFastJetTool()
+        t2l1fullscanfastjettool.coneRadius = 1.0      
+        t2l1fullscanfastjettool.doTriggerTowers = False
+        
+        self.T2JetTools = [t2l1fullscanfastjettool]
+
+
+class T2L1CaloJet_Jet (T2L1CaloJet):
+    __slots__ = []
+    def __init__(self, name="T2L1CaloJet_Jet"):
+        super( T2L1CaloJet_Jet, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2VirtualL1CaloJetValidationMonitoring, TrigT2VirtualL1CaloJetOnlineMonitoring, TrigT2VirtualL1CaloJetCosmicMonitoring
+        validation = TrigT2VirtualL1CaloJetValidationMonitoring()
+        online = TrigT2VirtualL1CaloJetOnlineMonitoring()
+        cosmic = TrigT2VirtualL1CaloJetCosmicMonitoring()
+
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2L1CaloJet_Time")
+        time.TimerHistLimits = [0,20]
+        self.doTiming=True
+
+        self.AthenaMonTools = [ validation, online, time, cosmic]
+        
+
+class T2CaloJetBase (T2CaloJet):
+    __slots__ = []
+    def __init__(self, name):
+        super( T2CaloJetBase, self ).__init__(name)
+
+        from TrigT2CaloJet.TrigT2CaloJetMonitoring import TrigT2CaloJetValidationMonitoring, TrigT2CaloJetOnlineMonitoring, TrigT2CaloJetCosmicMonitoring, TrigT2CaloJetTimeMonitoring
+        validation = TrigT2CaloJetValidationMonitoring()
+        online = TrigT2CaloJetOnlineMonitoring()
+        cosmic = TrigT2CaloJetCosmicMonitoring()
+        timeUnp = TrigT2CaloJetTimeMonitoring()
+        
+        from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+        time = TrigTimeHistToolConfig("T2CaloJet_Time")
+
+        self.AthenaMonTools = [ validation, online, time, timeUnp, cosmic]
+
+        # are these the correct widths for the jets ??
+        # really the best thing to do would be for T2CaloJet
+        # to determine the jet size *itself*, perhaps even on
+        # a jet-by-jet basis
+        self.EtaIDWidth = 0.2
+        self.PhiIDWidth = 0.2
+
+
+### Classes for non-calibrated L2 jets ####
+
+class T2CaloJet_Jet_noCalib (T2CaloJetBase):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_noCalib"):
+        super(T2CaloJet_Jet_noCalib, self).__init__(name)
+        
+        # here put your customizations
+        t2calojetconetool = T2CaloJetConeTool()
+        t2calojetconetool.coneRadius = 0.4
+        t2calojetconetool.numberOfIterations = 3
+        t2calojetconetool.coneFJRadius=[1.0,0.7,0.4]
+        t2calojetconetool.cellQualityThresholdLAr = 4000
+        t2calojetconetool.leadingCellFraction = 0.9 
+
+        self.EtaWidth = 0.5
+        self.PhiWidth = 0.5
+        self.clearJetGrid = False
+        #self.OutputLevel = INFO
+
+        t2calojetgridfromcells = T2CaloJetGridFromCells()
+        t2calojetgridfromcells.doTiming = True
+        t2calojetgridfromcells.doHECcellQualityCleaning = False
+
+        self.jetOutputKey = "TrigT2CaloJet"
+
+        self.T2JetTools = [t2calojetgridfromcells,
+                           t2calojetconetool
+                           ]
+
+class T2CaloJet_Jet_noCalib_cellCleaning (T2CaloJet_Jet_noCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_noCalib_cellCleaning"):
+        super(T2CaloJet_Jet_noCalib_cellCleaning, self).__init__(name)
+        
+        t2calojetgridfromcells = T2CaloJetGridFromCells("T2CaloJetGridFromCells_cellCleaning")
+        t2calojetgridfromcells.doHECcellQualityCleaning = True
+        t2calojetgridfromcells.cellQualityThresholdHEC = 65535
+
+
+class T2CaloJet_Jet_noCalib_noiseCut (T2CaloJet_Jet_noCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_noCalib_noiseCut",noisecut=2.):
+        mlog = logging.getLogger( 'T2CaloJet_Jet_noCalib_noiseCut:' )
+        try: 
+            from AthenaCommon.AppMgr import ToolSvc
+            from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+            theNoiseTool = CaloNoiseToolDefault()
+            ToolSvc += theNoiseTool
+            #cellTool.CaloNoiseTool=theCaloNoiseTool
+        except Exception:
+            mlog.error("could not get handle to CaloNoiseToolDefault")
+            print traceback.format_exc()
+            return False
+
+        super(T2CaloJet_Jet_noCalib_noiseCut, self).__init__(name)
+        #self.t2calojetgridfromcells = T2CaloJetGridFromCells()
+        self.T2JetTools[0].noiseTool = theNoiseTool
+        self.T2JetTools[0].applyNoiseCut = True
+        self.T2JetTools[0].noiseCutValue = noisecut
+
+### Classes for L2 jets calibrated with the offline JES correction ###
+
+class T2CaloJet_Jet_JESCalib (T2CaloJetBase):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib"):
+        super(T2CaloJet_Jet_JESCalib, self).__init__(name)
+        
+        # here put your customizations
+        t2calojetconetool = T2CaloJetConeTool()
+        t2calojetconetool.coneRadius = 0.4
+        t2calojetconetool.numberOfIterations = 3
+        t2calojetconetool.coneFJRadius=[1.0,0.7,0.4]
+        t2calojetconetool.cellQualityThresholdLAr = 4000
+        t2calojetconetool.leadingCellFraction = 0.9 
+
+        self.EtaWidth = 0.5
+        self.PhiWidth = 0.5
+        self.clearJetGrid = False
+        #self.OutputLevel = INFO
+
+        t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        t2jescalibtool.MinEtCut = 1 
+        # Jet calibration factors
+        energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM']
+        t2jescalibtool.JES_Factors = str(energyCorr)
+
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2JetCalibTool = t2jescalibtool
+        t2calojetcalibtool.doJetCalib = True
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+
+        t2calojetgridfromcells = T2CaloJetGridFromCells()
+        t2calojetgridfromcells.doTiming = True
+        t2calojetgridfromcells.doHECcellQualityCleaning = False
+
+        self.jetOutputKey = "TrigT2CaloJet"
+
+        self.T2JetTools = [t2calojetgridfromcells,
+                           t2calojetconetool,
+                           t2calojetcalibtool]
+
+class T2CaloJet_Jet_JESCalib_cellCleaning (T2CaloJet_Jet_JESCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib_cellCleaning"):
+        
+        t2calojetgridfromcells = T2CaloJetGridFromCells("T2CaloJetGridFromCells_cellCleaning")
+        t2calojetgridfromcells.doHECcellQualityCleaning = True
+        t2calojetgridfromcells.cellQualityThresholdHEC = 65535
+
+
+class T2CaloJet_Jet_JESCalib_noiseCut (T2CaloJet_Jet_JESCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib_noiseCut",noisecut=2.):
+        mlog = logging.getLogger( 'T2CaloJet_Jet_JESCalib_noiseCut:' )
+        try: 
+            from AthenaCommon.AppMgr import ToolSvc
+            from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+            theNoiseTool = CaloNoiseToolDefault()
+            ToolSvc += theNoiseTool
+            #cellTool.CaloNoiseTool=theCaloNoiseTool
+        except Exception:
+            mlog.error("could not get handle to CaloNoiseToolDefault")
+            print traceback.format_exc()
+            return False
+
+        super(T2CaloJet_Jet_JESCalib_noiseCut, self).__init__(name)
+        #self.t2calojetgridfromcells = T2CaloJetGridFromCells()
+        self.T2JetTools[0].noiseTool = theNoiseTool
+        self.T2JetTools[0].applyNoiseCut = True
+        self.T2JetTools[0].noiseCutValue = noisecut
+
+class T2CaloJet_Jet_JESCalib_writeLayers (T2CaloJet_Jet_JESCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib_writeLayers"):
+        super(T2CaloJet_Jet_JESCalib_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+class T2CaloJet_Jet_JESCalib_cellCleaning_writeLayers (T2CaloJet_Jet_JESCalib_cellCleaning):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib_cellCleaning_writeLayers"):
+        super(T2CaloJet_Jet_JESCalib_cellCleaning_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+class T2CaloJet_Jet_JESCalib_noiseCut_writeLayers (T2CaloJet_Jet_JESCalib_noiseCut):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_JESCalib_noiseCut_writeLayers"):
+        super(T2CaloJet_Jet_JESCalib_noiseCut_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+### Classes for jets calibrated with the offline GSC procedure ###
+
+class T2CaloJet_Jet_GSCalib (T2CaloJetBase):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib"):
+        super(T2CaloJet_Jet_GSCalib, self).__init__(name)
+        
+        # here put your customizations
+        t2calojetconetool = T2CaloJetConeTool()
+        t2calojetconetool.coneRadius = 0.4
+        t2calojetconetool.numberOfIterations = 3
+        t2calojetconetool.coneFJRadius=[1.0,0.7,0.4]
+        t2calojetconetool.cellQualityThresholdLAr = 4000
+        t2calojetconetool.leadingCellFraction = 0.9 
+
+        self.EtaWidth = 0.5
+        self.PhiWidth = 0.5
+        self.clearJetGrid = False
+        #self.OutputLevel = INFO
+
+        t2jescalibtool = T2JESCalibTool("T2JESCalibTool_Jet")
+        t2jescalibtool.MinEtCut = 1 
+        energyCorr = [ [ ] ]
+        #energyCorr = EtaMassEnergyFactors.energyCorrDict['AntiKt4TopoJets_EM']
+        t2jescalibtool.JES_Factors = str(energyCorr)
+
+        t2gscalibtooltile1 = T2GSCalibTool("T2GSCalibToolTile1_Jet")
+        etaFit        = []
+        etabins       = []
+        ptbins        = []
+        layerFracBins = []
+        #etaFit        = Tile1FractionConstants.tile1EtaFitDict['AntiKt4TopoJets']
+        #etabins       = Tile1FractionConstants.tile1EtaBinsDict['AntiKt4TopoJets']
+        #ptbins        = Tile1FractionConstants.tile1PtBinsDict['AntiKt4TopoJets']
+        #layerFracBins = Tile1FractionConstants.tile1LayerFracBinsDict['AntiKt4TopoJets']
+        t2gscalibtooltile1.CalibConstants  = str(etaFit)
+        t2gscalibtooltile1.EtaBins         = etabins
+        t2gscalibtooltile1.EtaMin          = -1.7
+        t2gscalibtooltile1.EtaMax          = 1.7
+        t2gscalibtooltile1.PtBins          = ptbins
+        t2gscalibtooltile1.PtMin           = 1000.0
+        t2gscalibtooltile1.JetPropertyBins = layerFracBins
+
+        t2gscalibtoolfcal1 = T2GSCalibTool("T2GSCalibToolFcal1_Jet")
+        etaFit        = []
+        etabins       = []
+        ptbins        = []
+        layerFracBins = []
+        #etaFit        = FCAL1FractionConstants.fcal1EtaFitDict['AntiKt4TopoJets']
+        #etabins       = FCAL1FractionConstants.fcal1EtaBinsDict['AntiKt4TopoJets']
+        #ptbins        = FCAL1FractionConstants.fcal1PtBinsDict['AntiKt4TopoJets']
+        #layerFracBins = FCAL1FractionConstants.fcal1LayerFracBinsDict['AntiKt4TopoJets']
+        t2gscalibtoolfcal1.CalibConstants  = str(etaFit)
+        t2gscalibtoolfcal1.EtaBins         = etabins
+        t2gscalibtoolfcal1.EtaMin          = -4.4
+        t2gscalibtoolfcal1.EtaGapMin       = -3.5
+        t2gscalibtoolfcal1.EtaGapMax       = 3.5
+        t2gscalibtoolfcal1.EtaMax          = 4.4
+        t2gscalibtoolfcal1.PtBins          = ptbins
+        t2gscalibtoolfcal1.PtMin           = 1000.0
+        t2gscalibtoolfcal1.JetPropertyBins = layerFracBins
+
+        t2gscalibtoolem3bar = T2GSCalibTool("T2GSCalibToolEm3Bar_Jet")
+        t2gscalibtoolem3fwd = T2GSCalibTool("T2GSCalibToolEm3Fwd_Jet")
+        etaFit        = []
+        etabins       = []
+        ptbins        = []
+        layerFracBins = []
+        #etaFit        = EM3FractionConstants.em3EtaFitDict['AntiKt4TopoJets']
+        #etabins       = EM3FractionConstants.em3EtaBinsDict['AntiKt4TopoJets']
+        #ptbins        = EM3FractionConstants.em3PtBinsDict['AntiKt4TopoJets']
+        #layerFracBins = EM3FractionConstants.em3LayerFracBinsDict['AntiKt4TopoJets']
+        t2gscalibtoolem3bar.CalibConstants  = str(etaFit)
+        t2gscalibtoolem3bar.EtaBins         = etabins
+        t2gscalibtoolem3bar.EtaMin          = -1.2
+        t2gscalibtoolem3bar.EtaMax          = 1.2
+        t2gscalibtoolem3bar.PtBins          = ptbins
+        t2gscalibtoolem3bar.PtMin           = 1000
+        t2gscalibtoolem3bar.JetPropertyBins = layerFracBins
+        t2gscalibtoolem3fwd.CalibConstants  = str(etaFit)
+        t2gscalibtoolem3fwd.EtaBins         = etabins
+        t2gscalibtoolem3fwd.EtaMin          = -3.0
+        t2gscalibtoolem3fwd.EtaGapMin       = -1.7
+        t2gscalibtoolem3fwd.EtaGapMax       = 1.7
+        t2gscalibtoolem3fwd.EtaMax          = 3.0
+        t2gscalibtoolem3fwd.PtBins          = ptbins
+        t2gscalibtoolem3fwd.PtMin           = 1000.0
+        t2gscalibtoolem3fwd.JetPropertyBins = layerFracBins
+
+        t2gscalibtoolhec0 = T2GSCalibTool("T2GSCalibToolHec0_Jet")
+        etaFit        = []
+        etabins       = []
+        ptbins        = []
+        layerFracBins = []
+        #etaFit        = HEC0FractionConstants.hec0EtaFitDict['AntiKt4TopoJets']
+        #etabins       = HEC0FractionConstants.hec0EtaBinsDict['AntiKt4TopoJets']
+        #ptbins        = HEC0FractionConstants.hec0PtBinsDict['AntiKt4TopoJets']
+        #layerFracBins = HEC0FractionConstants.hec0LayerFracBinsDict['AntiKt4TopoJets']
+        t2gscalibtoolhec0.CalibConstants  = str(etaFit)
+        t2gscalibtoolhec0.EtaBins         = etabins
+        t2gscalibtoolhec0.EtaMin          = -3.0
+        t2gscalibtoolhec0.EtaGapMin       = -1.4
+        t2gscalibtoolhec0.EtaGapMax       = 1.4
+        t2gscalibtoolhec0.EtaMax          = 3.0
+        t2gscalibtoolhec0.PtBins          = ptbins
+        t2gscalibtoolhec0.PtMin           = 1000.0
+        t2gscalibtoolhec0.JetPropertyBins = layerFracBins
+
+        t2gscalibtoolpsbar = T2GSCalibTool("T2GSCalibToolPsBar_Jet")
+        etaFit        = []
+        etabins       = []
+        ptbins        = []
+        layerFracBins = []
+        #etaFit        = PresamplerFractionConstants.presEtaFitDict['AntiKt4TopoJets']
+        #etabins       = PresamplerFractionConstants.presEtaBinsDict['AntiKt4TopoJets']
+        #ptbins        = PresamplerFractionConstants.presPtBinsDict['AntiKt4TopoJets']
+        #layerFracBins = PresamplerFractionConstants.presLayerFracBinsDict['AntiKt4TopoJets']
+        t2gscalibtoolpsbar.CalibConstants  = str(etaFit)
+        t2gscalibtoolpsbar.EtaBins         = etabins
+        t2gscalibtoolpsbar.EtaMin          = -1.7
+        t2gscalibtoolpsbar.EtaMax          = 1.7
+        t2gscalibtoolpsbar.PtBins          = ptbins
+        t2gscalibtoolpsbar.PtMin           = 1000.0
+        t2gscalibtoolpsbar.JetPropertyBins = layerFracBins
+
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2JetCalibTool      = t2jescalibtool
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2gscalibtooltile1
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2gscalibtoolfcal1
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2gscalibtoolem3bar
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2gscalibtoolhec0
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2gscalibtoolem3fwd
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2gscalibtoolpsbar
+        t2calojetcalibtool.doJetCalib      = True
+        t2calojetcalibtool.doJetCorrTile1  = True
+        t2calojetcalibtool.doJetCorrFcal1  = True
+        t2calojetcalibtool.doJetCorrEm3Bar = True
+        t2calojetcalibtool.doJetCorrHec0   = True
+        t2calojetcalibtool.doJetCorrEm3Fwd = True
+        t2calojetcalibtool.doJetCorrPsBar  = True
+
+        t2calojetgridfromcells = T2CaloJetGridFromCells()
+        t2calojetgridfromcells.doTiming = True
+        t2calojetgridfromcells.doHECcellQualityCleaning = False
+
+        self.jetOutputKey = "TrigT2CaloJet"
+        self.jetOutputKey = "TrigT2Calo"
+
+        self.T2JetTools = [t2calojetgridfromcells,
+                           t2calojetconetool,
+                           t2calojetcalibtool]
+
+
+class T2CaloJet_Jet_GSCalib_cellCleaning (T2CaloJet_Jet_GSCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib_cellCleaning"):
+        
+        t2calojetgridfromcells = T2CaloJetGridFromCells("T2CaloJetGridFromCells_cellCleaning")
+        t2calojetgridfromcells.doHECcellQualityCleaning = True
+        t2calojetgridfromcells.cellQualityThresholdHEC = 65535
+
+
+class T2CaloJet_Jet_GSCalib_noiseCut (T2CaloJet_Jet_GSCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib_noiseCut",noisecut=2.):
+        mlog = logging.getLogger( 'T2CaloJet_Jet_GSCalib_noiseCut:' )
+        try: 
+            from AthenaCommon.AppMgr import ToolSvc
+            from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+            theNoiseTool = CaloNoiseToolDefault()
+            ToolSvc += theNoiseTool
+            #cellTool.CaloNoiseTool=theCaloNoiseTool
+        except Exception:
+            mlog.error("could not get handle to CaloNoiseToolDefault")
+            print traceback.format_exc()
+            return False
+
+        super(T2CaloJet_Jet_GSCalib_noiseCut, self).__init__(name)
+        #self.t2calojetgridfromcells = T2CaloJetGridFromCells()
+        self.T2JetTools[0].noiseTool = theNoiseTool
+        self.T2JetTools[0].applyNoiseCut = True
+        self.T2JetTools[0].noiseCutValue = noisecut
+
+class T2CaloJet_Jet_GSCalib_writeLayers (T2CaloJet_Jet_GSCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib_writeLayers"):
+        super(T2CaloJet_Jet_GSCalib_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+class T2CaloJet_Jet_GSCalib_cellCleaning_writeLayers (T2CaloJet_Jet_GSCalib_cellCleaning):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib_cellCleaning_writeLayers"):
+        super(T2CaloJet_Jet_GSCalib_cellCleaning_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+class T2CaloJet_Jet_GSCalib_noiseCut_writeLayers (T2CaloJet_Jet_GSCalib_noiseCut):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_GSCalib_noiseCut_writeLayers"):
+        super(T2CaloJet_Jet_GSCalib_noiseCut_writeLayers, self).__init__(name)
+        self.fillLayerInfo = True
+
+### Classes for jets calibrated with the dedicated sampling method ####
+
+class T2CaloJet_Jet_sampCalib (T2CaloJetBase):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_sampCalib"):
+        super(T2CaloJet_Jet_sampCalib, self).__init__(name)
+        
+        # here put your customizations
+        t2calojetconetool = T2CaloJetConeTool()
+        t2calojetconetool.coneRadius = 0.4
+        t2calojetconetool.numberOfIterations = 3
+        t2calojetconetool.coneFJRadius=[1.0,0.7,0.4]
+        t2calojetconetool.cellQualityThresholdLAr = 4000
+        t2calojetconetool.leadingCellFraction = 0.9 
+
+        self.EtaWidth = 0.5
+        self.PhiWidth = 0.5
+        self.clearJetGrid = False
+        #self.OutputLevel = INFO
+
+        t2sampcalibtool = T2SampCalibTool("T2SampCalibTool_Jet")
+        t2sampcalibtool.MinEtCut = 1 
+        t2sampcalibtool.nEtaBin = 50
+        t2sampcalibtool.EtRegionLimit = 5000
+        #New database tag
+        t2sampcalibtool.CreateDbObject=False
+        t2sampcalibtool.ReadFromDB=True
+        L2CalibFolder = "/CALO/T2CaloCalib/T2CaloJetCalib"
+        L2CalibTag = "L2JetCalib-10TeV-Ideal-01"
+        from IOVDbSvc.CondDB import conddb
+        conddb.addFolder("CALO",L2CalibFolder+"<tag>"+L2CalibTag+"</tag>")
+
+        #############################################################
+        ## THESE VALUES ARE NOT USED !!!                            #
+        ## ONLY USED AS A REFERENCE FOR WHAT WAS PUT IN THIS DB TAG #
+        #############################################################
+
+        t2sampcalibtool.EtaReg=[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,
+                                1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,
+                                2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,
+                                3.0,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,
+                                4.0,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5.0]
+
+        t2sampcalibtool.VECut=[ 1.0,      1.00500,  1.02006,  1.04534,  1.08107,
+                                1.12763,  1.18547,  1.25517,  1.33743,  1.43308,
+                                1.54308,  1.66852,  1.81065,  1.97091,  2.15090,
+                                2.35240,  2.57746,  2.82832,  3.10748,  3.41774,
+                                3.76220,  4.14432,  4.56790,  5.03722,  5.55694,
+                                6.13228,  6.76900,  7.47346,  8.25272,  9.11458,
+                               10.0677,  11.1215,  12.2866,  13.5748,  14.9987,
+                               16.5728,  18.3128,  20.2360,  22.3618,  24.7114,
+                               27.3082,  30.1784,  33.3507,  36.8567,  40.7316,
+                                1.0,      1.0,      1.0,      1.0,      1.0]
+
+        t2sampcalibtool.Weights=[
+        1.71736, -0.0775919, 1., 0.,
+	1.68115, -0.0298649, 1., 0.,
+        1.72263, -0.0820785, 1., 0.,
+        1.59158, -0.0349583, 1., 0.,
+        1.71384, -0.0825993, 1., 0.,
+        1.56296, -0.0334272, 1., 0.,
+	1.71196, -0.0823075, 1., 0.,
+        1.55044, -0.0300373, 1., 0.,
+        1.73526, -0.0858796, 1., 0.,
+        1.52924, -0.0275084, 1., 0.,
+        1.74496, -0.0858104, 1., 0.,
+        1.61094, -0.032966, 1., 0.,
+        1.77075, -0.0874956, 1., 0.,
+        1.69556, -0.0399038, 1., 0.,
+        1.85845, -0.100017, 1., 0.,
+        1.63193, -0.0292829, 1., 0.,
+        1.92108, -0.108746, 1., 0.,
+        1.60507, -0.0185852, 1., 0.,
+        1.90991, -0.109427, 1., 0.,
+        1.73985, -0.0214682, 1., 0.,
+        1.97429, -0.114934, 1., 0.,
+        1.49217, -0.0234559, 1., 0.,
+        1.97011, -0.117122, 1., 0.,
+        1.40092, -0.0201076, 1., 0.,
+        1.96164, -0.119639, 1., 0.,
+	1.63634, -0.0399844, 1., 0.,
+        1.95562, -0.11617, 1., 0.,
+        1.81431, -0.0515824, 1., 0.,
+        1.96964, -0.105079, 1., 0.,
+        1.86882, -0.0653143, 1., 0.,
+	2.0155, -0.146639, 1., 0.,
+        1.60657, -0.00444997, 1., 0.,
+        1.82239, -0.111195, 1., 0.,
+        1.69562, -0.0408746, 1., 0.,
+        1.78718, -0.107874, 1., 0.,
+        1.6367, -0.0480624, 1., 0.,
+        1.73745, -0.100309, 1., 0.,
+        1.54562, -0.0400314, 1., 0.,
+        1.70874, -0.0979269, 1., 0.,
+        1.53771, -0.0414734, 1., 0.,
+        1.68658, -0.0964409, 1., 0.,
+        1.53234, -0.037261, 1., 0.,
+        1.62871, -0.0876685, 1., 0.,
+        1.5901, -0.0464532, 1., 0.,
+        1.60288, -0.0850231, 1., 0.,
+        1.51135, -0.0319969, 1., 0.,
+        1.55495, -0.0760847, 1., 0.,
+        1.60024, -0.0493416, 1., 0.,
+        1.61099, -0.0871627, 1., 0.,
+	1.56848, -0.0372076, 1., 0.,
+        1.61012, -0.080997, 1., 0.,
+        1.51628, -0.031721, 1., 0.,
+        1.5527, -0.0745029, 1., 0.,
+        1.68515, -0.0610052, 1., 0.,
+	1.54251, -0.0749989, 1., 0.,
+        1.75605, -0.0614183, 1., 0.,
+        1.5972, -0.0847241, 1., 0.,
+        1.83407, -0.0712398, 1., 0.,
+        1.63888, -0.085407, 1., 0.,
+        2.15163, -0.111614, 1., 0.,
+        1.86924, -0.127399, 1., 0.,
+        2.04718, -0.021142, 1., 0.,
+        1.93682, -0.114535, 1., 0.,
+        2.42857, -0.0398346, 1., 0.,
+        2.05425, -0.0634181, 1., 0.,
+        2.31097, -0.17624, 1., 0.,
+        2.3425, -0.134324, 1., 0.,
+        1.25573, 0.0160847, 1., 0.,
+        2.22724, -0.190316, 1., 0.,
+        1.59135, -0.0403045, 1., 0.,
+        1.70013, -0.105121, 1., 0.,
+        2.18796, -0.184129, 1., 0.,
+        1.46967, -0.0542641, 1., 0.,
+	1.40854, -0.00397349, 1., 0.,
+        1.7066, -0.103722, 1., 0.,
+        2.02067, -0.133273, 1., 0.,
+        2.3121, -0.244998, 1., 0.,
+        -0.0145766, 0.362844, 1., 0.,
+	1.62273, -0.0687159, 1., 0.,
+        2.01868, -0.120886, 1., 0.,
+        1.07068, 0.0528097, 1., 0.,
+        3.34939, -0.412248, 1., 0.,
+        1.18681, 0.0214479, 1., 0.,
+        0.91684, 0.149364, 1., 0.,
+        0.377452, 0.214947, 1., 0.,
+        10.9671, -2.31455, 1., 0.,
+        2.77778, -0.372772, 1., 0.,
+        -6.52839, 2.00992, 1., 0.,
+        -5.04373, 1.62889, 1., 0.,
+        -9.22444, 2.66876, 1., 0.,
+        #46; Eta range [min,max]: [4.5,4.6]
+        #NEntries: 413
+        3.33217,-0.26788,1,0,
+        3.66022,-0.303515,1,0,
+        #47; Eta range [min,max]: [4.6,4.7]
+        #NEntries: 292
+        3.64624,-0.30498,1,0,
+        3.732,-0.297252,1,0,
+        #48; Eta range [min,max]: [4.7,4.8]
+        #NEntries: 207
+        5.74177,-0.587572,1,0,
+        6.30603,-0.649457,1,0,
+        #49; Eta range [min,max]: [4.8,4.9]
+        #NEntries: 100
+        6.00682,-0.589085,1,0,
+        16.6035,-2.09057,1,0,
+        #50; Eta range [min,max]: [4.9,5]
+        #NEntries: 4
+        1.42662,-0.0942826,1,0,
+        8.93293,-0.0674104,1,0
+        ]
+
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2JetCalibTool = t2sampcalibtool
+        t2calojetcalibtool.doJetCalib = True
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2sampcalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2sampcalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2sampcalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2sampcalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2sampcalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2sampcalibtool #dummy config
+
+        t2calojetgridfromcells = T2CaloJetGridFromCells()
+        t2calojetgridfromcells.doTiming = True
+        t2calojetgridfromcells.doHECcellQualityCleaning = False
+
+        self.jetOutputKey = "TrigT2CaloJet"
+
+        self.T2JetTools = [t2calojetgridfromcells,
+                           t2calojetconetool,
+                           t2calojetcalibtool]
+
+class T2CaloJet_Jet_sampCalib_cellCleaning (T2CaloJet_Jet_sampCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_sampCalib_cellCleaning"):
+        
+        t2calojetgridfromcells = T2CaloJetGridFromCells("T2CaloJetGridFromCells_cellCleaning")
+        t2calojetgridfromcells.doHECcellQualityCleaning = True
+        t2calojetgridfromcells.cellQualityThresholdHEC = 65535
+
+
+class T2CaloJet_Jet_sampCalib_noiseCut (T2CaloJet_Jet_sampCalib):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_Jet_sampCalib_noiseCut",noisecut=2.):
+        mlog = logging.getLogger( 'T2CaloJet_Jet_sampCalib_noiseCut:' )
+        try: 
+            from AthenaCommon.AppMgr import ToolSvc
+            from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+            theNoiseTool = CaloNoiseToolDefault()
+            ToolSvc += theNoiseTool
+            #cellTool.CaloNoiseTool=theCaloNoiseTool
+        except Exception:
+            mlog.error("could not get handle to CaloNoiseToolDefault")
+            print traceback.format_exc()
+            return False
+
+        super(T2CaloJet_Jet_sampCalib_noiseCut, self).__init__(name)
+        #self.t2calojetgridfromcells = T2CaloJetGridFromCells()
+        self.T2JetTools[0].noiseTool = theNoiseTool
+        self.T2JetTools[0].applyNoiseCut = True
+        self.T2JetTools[0].noiseCutValue = noisecut
+
+### Legacy classes: use only one calibration option, disallow the others ####
+
+L2Calib="noCalib"
+#L2Calib="JESCalib"
+#L2Calib="JESCalib_LayerInfo"
+#L2Calib="GSCalib"
+#L2Calib="GSCalib_LayerInfo"
+#L2Calib="sampCalib"
+
+if L2Calib=="JESCalib" :
+### Use L2 jets calibrated with offline JES correction ###
+    class T2CaloJet_Jet (T2CaloJet_Jet_JESCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_JESCalib_noiseCut):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_JESCalib_cellCleaning):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_JESCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+elif L2Calib=="JESCalib_LayerInfo" :
+### Use L2 jets calibrated with offline JES correction and write Layer energy ###
+    class T2CaloJet_Jet (T2CaloJet_Jet_JESCalib_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_JESCalib_noiseCut_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_JESCalib_cellCleaning_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_JESCalib_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+elif L2Calib=="GSCalib" :
+### Use L2 jets calibrated with offline GSC procedure ###
+    class T2CaloJet_Jet (T2CaloJet_Jet_GSCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_GSCalib_noiseCut):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_GSCalib_cellCleaning):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_GSCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+elif L2Calib=="GSCalib_LayerInfo" :
+### Use L2 jets calibrated with offline GSC procedure and write Layer energy ###
+    class T2CaloJet_Jet (T2CaloJet_Jet_GSCalib_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_GSCalib_noiseCut_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_GSCalib_cellCleaning_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_GSCalib_writeLayers):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+elif L2Calib=="sampCalib" :
+### Use L2 jets calibrated with dedicated sampling method ###
+    class T2CaloJet_Jet (T2CaloJet_Jet_sampCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_sampCalib_noiseCut):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_sampCalib_cellCleaning):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_sampCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+else:
+### Use non-calibrated L2 jets 
+    class T2CaloJet_Jet (T2CaloJet_Jet_noCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet"):
+            super(T2CaloJet_Jet, self).__init__(name)
+    class T2CaloJet_Jet_noise (T2CaloJet_Jet_noCalib_noiseCut):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_noise"):
+            super(T2CaloJet_Jet_noise, self).__init__(name)
+    class T2CaloJet_Jet_cellCleaning (T2CaloJet_Jet_noCalib_cellCleaning):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_cellCleaning"):
+            super(T2CaloJet_Jet_cellCleaning, self).__init__(name)
+    class T2CaloJet_Jet_L15 (T2CaloJet_Jet_noCalib):
+        __slots__ = []
+        def __init__ (self, name="T2CaloJet_Jet_L15"):
+            super(T2CaloJet_Jet_L15, self).__init__(name)
+            #self.jetOutputKey = "TrigT2CaloJet"
+
+### L2 Jets from Front-End Buffers ###
+
+class T2CaloJet_FEBJet (T2CaloJetBase):
+    __slots__ = []
+    def __init__ (self, name="T2CaloJet_FEBJet"):
+        super(T2CaloJet_FEBJet, self).__init__(name)
+        
+        # here put your customizations
+        t2calojetconetool = T2CaloJetConeTool()
+        t2calojetconetool.coneRadius = 0.4
+        t2calojetconetool.numberOfIterations = 3
+        t2calojetconetool.coneFJRadius=[1.0,0.7,0.4]
+
+        self.EtaWidth = 0.5
+        self.PhiWidth = 0.5
+        self.clearJetGrid = False
+        #self.OutputLevel = INFO
+
+        t2sampcalibtool = T2SampCalibTool("T2SampCalibTool_Jet")
+        t2sampcalibtool.MinEtCut = 1 
+        t2sampcalibtool.nEtaBin = 50
+        t2sampcalibtool.EtRegionLimit = 5000
+        #New database tag
+        t2sampcalibtool.CreateDbObject=False
+        t2sampcalibtool.ReadFromDB=True
+        L2CalibFolder = "/CALO/T2CaloCalib/T2CaloJetCalib"
+        L2CalibTag = "L2JetCalib-10TeV-Ideal-01"
+        from IOVDbSvc.CondDB import conddb
+        conddb.addFolder("CALO",L2CalibFolder+"<tag>"+L2CalibTag+"</tag>")
+
+        #############################################################
+        ## THESE VALUES ARE NOT USED !!!                            #
+        ## ONLY USED AS A REFERENCE FOR WHAT WAS PUT IN THIS DB TAG #
+        #############################################################
+
+        t2sampcalibtool.EtaReg=[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,
+                                1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,
+                                2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,
+                                3.0,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,
+                                4.0,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5.0]
+
+        t2sampcalibtool.VECut=[ 1.0,      1.00500,  1.02006,  1.04534,  1.08107,
+                                1.12763,  1.18547,  1.25517,  1.33743,  1.43308,
+                                1.54308,  1.66852,  1.81065,  1.97091,  2.15090,
+                                2.35240,  2.57746,  2.82832,  3.10748,  3.41774,
+                                3.76220,  4.14432,  4.56790,  5.03722,  5.55694,
+                                6.13228,  6.76900,  7.47346,  8.25272,  9.11458,
+                               10.0677,  11.1215,  12.2866,  13.5748,  14.9987,
+                               16.5728,  18.3128,  20.2360,  22.3618,  24.7114,
+                               27.3082,  30.1784,  33.3507,  36.8567,  40.7316,
+                                1.0,      1.0,      1.0,      1.0,      1.0]
+
+        t2sampcalibtool.Weights=[
+        1.71736, -0.0775919, 1., 0.,
+	1.68115, -0.0298649, 1., 0.,
+        1.72263, -0.0820785, 1., 0.,
+        1.59158, -0.0349583, 1., 0.,
+        1.71384, -0.0825993, 1., 0.,
+        1.56296, -0.0334272, 1., 0.,
+	1.71196, -0.0823075, 1., 0.,
+        1.55044, -0.0300373, 1., 0.,
+        1.73526, -0.0858796, 1., 0.,
+        1.52924, -0.0275084, 1., 0.,
+        1.74496, -0.0858104, 1., 0.,
+        1.61094, -0.032966, 1., 0.,
+        1.77075, -0.0874956, 1., 0.,
+        1.69556, -0.0399038, 1., 0.,
+        1.85845, -0.100017, 1., 0.,
+        1.63193, -0.0292829, 1., 0.,
+        1.92108, -0.108746, 1., 0.,
+        1.60507, -0.0185852, 1., 0.,
+        1.90991, -0.109427, 1., 0.,
+        1.73985, -0.0214682, 1., 0.,
+        1.97429, -0.114934, 1., 0.,
+        1.49217, -0.0234559, 1., 0.,
+        1.97011, -0.117122, 1., 0.,
+        1.40092, -0.0201076, 1., 0.,
+        1.96164, -0.119639, 1., 0.,
+	1.63634, -0.0399844, 1., 0.,
+        1.95562, -0.11617, 1., 0.,
+        1.81431, -0.0515824, 1., 0.,
+        1.96964, -0.105079, 1., 0.,
+        1.86882, -0.0653143, 1., 0.,
+	2.0155, -0.146639, 1., 0.,
+        1.60657, -0.00444997, 1., 0.,
+        1.82239, -0.111195, 1., 0.,
+        1.69562, -0.0408746, 1., 0.,
+        1.78718, -0.107874, 1., 0.,
+        1.6367, -0.0480624, 1., 0.,
+        1.73745, -0.100309, 1., 0.,
+        1.54562, -0.0400314, 1., 0.,
+        1.70874, -0.0979269, 1., 0.,
+        1.53771, -0.0414734, 1., 0.,
+        1.68658, -0.0964409, 1., 0.,
+        1.53234, -0.037261, 1., 0.,
+        1.62871, -0.0876685, 1., 0.,
+        1.5901, -0.0464532, 1., 0.,
+        1.60288, -0.0850231, 1., 0.,
+        1.51135, -0.0319969, 1., 0.,
+        1.55495, -0.0760847, 1., 0.,
+        1.60024, -0.0493416, 1., 0.,
+        1.61099, -0.0871627, 1., 0.,
+	1.56848, -0.0372076, 1., 0.,
+        1.61012, -0.080997, 1., 0.,
+        1.51628, -0.031721, 1., 0.,
+        1.5527, -0.0745029, 1., 0.,
+        1.68515, -0.0610052, 1., 0.,
+	1.54251, -0.0749989, 1., 0.,
+        1.75605, -0.0614183, 1., 0.,
+        1.5972, -0.0847241, 1., 0.,
+        1.83407, -0.0712398, 1., 0.,
+        1.63888, -0.085407, 1., 0.,
+        2.15163, -0.111614, 1., 0.,
+        1.86924, -0.127399, 1., 0.,
+        2.04718, -0.021142, 1., 0.,
+        1.93682, -0.114535, 1., 0.,
+        2.42857, -0.0398346, 1., 0.,
+        2.05425, -0.0634181, 1., 0.,
+        2.31097, -0.17624, 1., 0.,
+        2.3425, -0.134324, 1., 0.,
+        1.25573, 0.0160847, 1., 0.,
+        2.22724, -0.190316, 1., 0.,
+        1.59135, -0.0403045, 1., 0.,
+        1.70013, -0.105121, 1., 0.,
+        2.18796, -0.184129, 1., 0.,
+        1.46967, -0.0542641, 1., 0.,
+	1.40854, -0.00397349, 1., 0.,
+        1.7066, -0.103722, 1., 0.,
+        2.02067, -0.133273, 1., 0.,
+        2.3121, -0.244998, 1., 0.,
+        -0.0145766, 0.362844, 1., 0.,
+	1.62273, -0.0687159, 1., 0.,
+        2.01868, -0.120886, 1., 0.,
+        1.07068, 0.0528097, 1., 0.,
+        3.34939, -0.412248, 1., 0.,
+        1.18681, 0.0214479, 1., 0.,
+        0.91684, 0.149364, 1., 0.,
+        0.377452, 0.214947, 1., 0.,
+        10.9671, -2.31455, 1., 0.,
+        2.77778, -0.372772, 1., 0.,
+        -6.52839, 2.00992, 1., 0.,
+        -5.04373, 1.62889, 1., 0.,
+        -9.22444, 2.66876, 1., 0.,
+        #46; Eta range [min,max]: [4.5,4.6]
+        #NEntries: 413
+        3.33217,-0.26788,1,0,
+        3.66022,-0.303515,1,0,
+        #47; Eta range [min,max]: [4.6,4.7]
+        #NEntries: 292
+        3.64624,-0.30498,1,0,
+        3.732,-0.297252,1,0,
+        #48; Eta range [min,max]: [4.7,4.8]
+        #NEntries: 207
+        5.74177,-0.587572,1,0,
+        6.30603,-0.649457,1,0,
+        #49; Eta range [min,max]: [4.8,4.9]
+        #NEntries: 100
+        6.00682,-0.589085,1,0,
+        16.6035,-2.09057,1,0,
+        #50; Eta range [min,max]: [4.9,5]
+        #NEntries: 4
+        1.42662,-0.0942826,1,0,
+        8.93293,-0.0674104,1,0
+        ]
+
+        t2calojetcalibtool = T2CaloJetCalibTool()
+        t2calojetcalibtool.T2SampCalibTool = t2sampcalibtool
+        t2calojetcalibtool.UseFebJets = True
+        t2calojetcalibtool.doJetCalib = False
+        t2calojetcalibtool.T2JetCorrToolTile1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolFcal1  = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Bar = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolHec0   = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolEm3Fwd = t2jescalibtool #dummy config
+        t2calojetcalibtool.T2JetCorrToolPsBar  = t2jescalibtool #dummy config
+
+        t2calojetgridfromfebs = T2CaloJetGridFromFEBHeader()
+        t2calojetgridfromfebs.doTiming = True
+
+        self.jetOutputKey = "TrigT2CaloFEBJet"
+
+        self.T2JetTools = [t2calojetgridfromfebs,
+                            t2calojetconetool,
+                            t2calojetcalibtool]
+        
+
+
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetMonitoring.py b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetMonitoring.py
new file mode 100755
index 000000000000..1253f57a92e5
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/python/TrigT2CaloJetMonitoring.py
@@ -0,0 +1,630 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+#Definitions of the monitoring classes  
+
+
+
+from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig 
+
+
+class TrigT2CaloJetValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloJet_Validation"):
+        super(TrigT2CaloJetValidationMonitoring, self).__init__(name)
+
+        self.defineTarget("Validation")
+# this target contains all the histograms necessary for validation
+
+        self.Histograms = [ defineHistogram('dR', type='TH1F', title="L2CaloJet FEX dR between roi and jet ;dR; nevents", xbins=100, xmin=-10., xmax=10.) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="L2CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="L2CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="L2CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="L2CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="L2CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="L2CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="L2CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="L2CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="L2CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="L2CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="L2CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="L2CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="L2CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram ('ConversionErrors' ,type='TH1F',title='Conversion Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('Eta, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Eta;#eta; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Phi;#phi; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+        self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+        
+class TrigT2CaloJetOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloJet_Online"):
+        """ defines hisograms for online """
+        super(TrigT2CaloJetOnlineMonitoring, self).__init__(name)
+
+        self.defineTarget("Online")
+# right now this target has the same list of histograms as "Validation"
+
+        self.Histograms = [ defineHistogram('dR', type='TH1F', title="L2CaloJet FEX dR between roi and jet ;dR; nevents", xbins=100, xmin=-10., xmax=10.) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="L2CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="L2CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="L2CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="L2CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="L2CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="L2CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="L2CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="L2CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="L2CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="L2CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="L2CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="L2CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="L2CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram ('ConversionErrors' ,type='TH1F',title='Conversion Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('Eta, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Eta;#eta; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Phi;#phi; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+        self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+
+
+class TrigT2CaloJetCosmicMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloJet_Cosmic"):
+        """ defines hisograms for online """
+        super(TrigT2CaloJetCosmicMonitoring, self).__init__(name)
+
+        self.defineTarget("Cosmic")
+# this target contains the same list of histograms as for "Online", but the axis range for plots of Et and etc. are smaller 
+
+        self.Histograms = [ defineHistogram('dR', type='TH1F', title="L2CaloJet FEX dR between roi and jet ;dR; nevents", xbins=100, xmin=-10., xmax=10.) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="L2CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=300000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="L2CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=300000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="L2CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=300000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="L2CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=300000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="L2CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="L2CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="L2CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="L2CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=300000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="L2CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=300000.) ]
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="L2CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=300000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="L2CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=300000.) ]
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="L2CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="L2CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="L2CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="L2CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram ('ConversionErrors' ,type='TH1F',title='Conversion Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram ('Eta, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Eta;#eta; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, ConversionErrors' ,type='TH2F',title='ConversionErrors vs Phi;#phi; Conversion Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+        self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+
+
+class TrigT2CaloJetTimeMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloJet_TimeUnpack"):
+        super(TrigT2CaloJetTimeMonitoring, self).__init__(name)
+        self.defineTarget("Time")
+        self.Histograms += [ defineHistogram('LArUnpck', type='TH1F', title="L2CaloJet Unpacking time (LAr)", xbins=100, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('TileUnpck', type='TH1F', title="L2CaloJet Unpacking time (Tile)", xbins=100, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('HECUnpck', type='TH1F', title="L2CaloJet Unpacking time (HEC)", xbins=100, xmin=0., xmax=50.) ]
+
+class TrigT2L1CaloJetValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1CaloJet_Validation"):
+        super(TrigT2L1CaloJetValidationMonitoring, self).__init__(name)
+
+        self.defineTarget("Validation")
+        # this target contains all the histograms necessary for validation
+        self.Histograms = [ defineHistogram('nJets', type='TH1F', title="T2L1CaloJet FEX number of jets;N; nevents", xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2L1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2L1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="T2L1CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="T2L1CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers', type='TH1F', title="T2L1CaloJet FEX nLeadingTowers;nLeadingTowers; nevents", xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf', type='TH1F', title="T2L1CaloJet FEX emf;EMF; nevents", xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2L1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2L1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('nTowers', type='TH1F', title="T2L1CaloJet number of L1 towers;number of L1 towers; nevents", xbins=101, xmin=-0.5, xmax=100.5) ]
+        self.Histograms += [ defineHistogram('UnpckTime', type='TH1F', title="T2L1CaloJet Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('L1_UnpckTime', type='TH1F', title="T2L1CaloJet L1 Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('FastJetTime', type='TH1F', title="T2L1CaloJet FastJet time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('JetFindingTime', type='TH1F', title="T2L1CaloJet Jet finding time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('OverallTime', type='TH1F', title="T2L1CaloJet Total time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('RoITime', type='TH1F', title="T2L1CaloJet RoI making time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2L1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2L1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2L1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="T2L1CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="T2L1CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2L1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2L1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',      type='TH2F', title="T2L1CaloJet Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1_UnpckTime',      type='TH2F', title="T2L1CaloJet L1 Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,FastJetTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,JetFindingTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,OverallTime', type='TH2F', title="T2L1CaloJet Total time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime', type='TH2F', title="T2L1CaloJet RoI making time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+        
+class TrigT2L1CaloJetOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1CaloJet_Online"):
+        """ defines hisograms for online """
+        super(TrigT2L1CaloJetOnlineMonitoring, self).__init__(name)
+
+        self.defineTarget("Online")
+        # right now this target has the same list of histograms as "Validation"
+        self.Histograms = [ defineHistogram('nJets', type='TH1F', title="T2L1CaloJet FEX number of jets;N; nevents", xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2L1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2L1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="T2L1CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="T2L1CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers', type='TH1F', title="T2L1CaloJet FEX nLeadingTowers;nLeadingTowers; nevents", xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf', type='TH1F', title="T2L1CaloJet FEX emf;EMF; nevents", xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2L1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2L1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('nTowers', type='TH1F', title="T2L1CaloJet number of L1 towers;number of L1 towers; nevents", xbins=101, xmin=-0.5, xmax=100.5) ]
+        self.Histograms += [ defineHistogram('UnpckTime', type='TH1F', title="T2L1CaloJet Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('L1_UnpckTime', type='TH1F', title="T2L1CaloJet L1 Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('FastJetTime', type='TH1F', title="T2L1CaloJet FastJet time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('JetFindingTime', type='TH1F', title="T2L1CaloJet Jet finding time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('OverallTime', type='TH1F', title="T2L1CaloJet Total time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('RoITime', type='TH1F', title="T2L1CaloJet RoI making time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2L1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2L1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2L1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="T2L1CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="T2L1CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2L1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2L1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',      type='TH2F', title="T2L1CaloJet Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1_UnpckTime',      type='TH2F', title="T2L1CaloJet L1 Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,FastJetTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,JetFindingTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,OverallTime', type='TH2F', title="T2L1CaloJet Total time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime', type='TH2F', title="T2L1CaloJet RoI making time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+class TrigT2L1CaloJetCosmicMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1CaloJet_Cosmic"):
+        """ defines hisograms for online """
+        super(TrigT2L1CaloJetCosmicMonitoring, self).__init__(name)
+
+        self.defineTarget("Cosmic")
+    # this target contains the same list of histograms as for "Online", but the axis range for plots of Et and etc. are smaller 
+        self.Histograms = [ defineHistogram('nJets', type='TH1F', title="T2L1CaloJet FEX number of jets;N; nevents", xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2L1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2L1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eem', type='TH1F', title="T2L1CaloJet FEX Eem;Eem [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Ehad', type='TH1F', title="T2L1CaloJet FEX Ehad;Ehad [MeV]; nevents", xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers', type='TH1F', title="T2L1CaloJet FEX nLeadingTowers;nLeadingTowers; nevents", xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf', type='TH1F', title="T2L1CaloJet FEX emf;EMF; nevents", xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2L1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2L1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('nTowers', type='TH1F', title="T2L1CaloJet number of L1 towers;number of L1 towers; nevents", xbins=101, xmin=-0.5, xmax=100.5) ]
+        self.Histograms += [ defineHistogram('UnpckTime', type='TH1F', title="T2L1CaloJet Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('L1_UnpckTime', type='TH1F', title="T2L1CaloJet L1 Unpacking time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('FastJetTime', type='TH1F', title="T2L1CaloJet FastJet time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('JetFindingTime', type='TH1F', title="T2L1CaloJet Jet finding time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('OverallTime', type='TH1F', title="T2L1CaloJet Total time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('RoITime', type='TH1F', title="T2L1CaloJet RoI making time; time [ms]; nevents", xbins=200, xmin=0., xmax=200.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2L1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2L1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2L1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Eem', type='TH2F', title="T2L1CaloJet EM ene vs. eta;#eta;Eem [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ehad', type='TH2F', title="T2L1CaloJet Had ene vs. eta;#eta;Ehad [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Etem', type='TH2F', title="T2L1CaloJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Ethad', type='TH2F', title="T2L1CaloJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]", xbins=100, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2L1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2L1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',      type='TH2F', title="T2L1CaloJet Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1_UnpckTime',      type='TH2F', title="T2L1CaloJet L1 Unpack time vs. nTowers;nTowers;time [ms]",      xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,FastJetTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,JetFindingTime', type='TH2F', title="T2L1CaloJet Jet finding time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,OverallTime', type='TH2F', title="T2L1CaloJet Total time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime', type='TH2F', title="T2L1CaloJet RoI making time vs. nTowers;nTowers;time [ms]", xbins=101, xmin=0., xmax=500., ybins=100, ymin=0., ymax=200.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+class TrigT2L1UnpackingValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1Unpacking_Validation"):
+        super(TrigT2L1UnpackingValidationMonitoring, self).__init__(name)
+
+        self.defineTarget("Validation")
+        # this target contains all the histograms necessary for validation
+        self.Histograms += [ defineHistogram('nTowers',        type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nEMTowers',      type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nHADTowers',     type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nTowers_zoom',   type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nEMTowers_zoom', type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nHADTowers_zoom',type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('Et',             type='TH1F', title="T2L1Unpacking FEX Et;Et [MeV]; nevents",                         xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',           type='TH1F', title="T2L1Unpacking FEX Etem;EM Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',          type='TH1F', title="T2L1Unpacking FEX Ethad;Had Et [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta',            type='TH1F', title="T2L1Unpacking FEX Eta;Eta; nevents",                             xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaEM',          type='TH1F', title="T2L1Unpacking FEX EM Eta;EM Eta; nevents",                       xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Eta;HAD Eta; nevents",                     xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',            type='TH1F', title="T2L1Unpacking FEX Phi;Phi; nevents",                             xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiEM',          type='TH1F', title="T2L1Unpacking FEX EM Phi;EM Phi; nevents",                       xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Phi;HAD Phi; nevents",                     xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('L1UnpckTime',    type='TH1F', title="T2L1Unpacking L1 unpacking time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('UnpckTime',      type='TH1F', title="T2L1Unpacking All unpacking time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime',type='TH1F', title="T2L1Unpacking Calibration time; time [ms]; nevents",             xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',        type='TH1F', title="T2L1Unpacking RoI making time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',    type='TH1F', title="T2L1Unpacking Total time; time [ms]; nevents",                   xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',        type='TH2F', title="T2L1Unpacking phi vs. eta;#eta;#phi",                            xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaEM,PhiEM',    type='TH2F', title="T2L1Unpacking EM phi vs. eta;EM #eta;EM #phi",                   xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaHAD,PhiHAD',  type='TH2F', title="T2L1Unpacking HAD phi vs. eta;HAD #eta;HAD #phi",                xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',         type='TH2F', title="T2L1Unpacking Et vs. eta;#eta;Et [MeV]",                         xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #eta;EM #eta;E_{T}^{em} [MeV]",       xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #eta;HAD #eta;E_{T}^{had} [MeV]",    xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',         type='TH2F', title="T2L1Unpacking Et vs. phi;#phi;Et [MeV]",                         xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #phi;EM #phi;E_{T}^{em} [MeV]",       xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #phi;HAD #phi;E_{T}^{had} [MeV]",    xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1UnpckTime',     type='TH2F', title="T2L1Unpacking L1 unpack time vs. nTowers;nTowers;time [ms]",         xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',       type='TH2F', title="T2L1Unpacking All unpack time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,CalibrationTime', type='TH2F', title="T2L1Unpacking Tower calibration time vs. nTowers;nTowers;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime',         type='TH2F', title="T2L1Unpacking RoI making time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,TotalTime',     type='TH2F', title="T2L1Unpacking Total time vs. nTowers;nTowers;time [ms]",             xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+       
+        
+class TrigT2L1UnpackingOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1Unpacking_Online"):
+        """ defines hisograms for online """
+        super(TrigT2L1UnpackingOnlineMonitoring, self).__init__(name)
+
+        self.defineTarget("Online")
+        # right now this target has the same list of histograms as "Validation"
+        self.Histograms += [ defineHistogram('nTowers',        type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nEMTowers',      type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nHADTowers',     type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nTowers_zoom',   type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nEMTowers_zoom', type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nHADTowers_zoom',type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('Et',             type='TH1F', title="T2L1Unpacking FEX Et;Et [MeV]; nevents",                         xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',           type='TH1F', title="T2L1Unpacking FEX Etem;EM Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',          type='TH1F', title="T2L1Unpacking FEX Ethad;Had Et [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta',            type='TH1F', title="T2L1Unpacking FEX Eta;Eta; nevents",                             xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaEM',          type='TH1F', title="T2L1Unpacking FEX EM Eta;EM Eta; nevents",                       xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Eta;HAD Eta; nevents",                     xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',            type='TH1F', title="T2L1Unpacking FEX Phi;Phi; nevents",                             xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiEM',          type='TH1F', title="T2L1Unpacking FEX EM Phi;EM Phi; nevents",                       xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Phi;HAD Phi; nevents",                     xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('L1UnpckTime',    type='TH1F', title="T2L1Unpacking L1 unpacking time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('UnpckTime',      type='TH1F', title="T2L1Unpacking All unpacking time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime',type='TH1F', title="T2L1Unpacking Calibration time; time [ms]; nevents",             xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',        type='TH1F', title="T2L1Unpacking RoI making time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',    type='TH1F', title="T2L1Unpacking Total time; time [ms]; nevents",                   xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',        type='TH2F', title="T2L1Unpacking phi vs. eta;#eta;#phi",                            xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaEM,PhiEM',    type='TH2F', title="T2L1Unpacking EM phi vs. eta;EM #eta;EM #phi",                   xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaHAD,PhiHAD',  type='TH2F', title="T2L1Unpacking HAD phi vs. eta;HAD #eta;HAD #phi",                xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',         type='TH2F', title="T2L1Unpacking Et vs. eta;#eta;Et [MeV]",                         xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #eta;EM #eta;E_{T}^{em} [MeV]",       xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #eta;HAD #eta;E_{T}^{had} [MeV]",    xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',         type='TH2F', title="T2L1Unpacking Et vs. phi;#phi;Et [MeV]",                         xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #phi;EM #phi;E_{T}^{em} [MeV]",       xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #phi;HAD #phi;E_{T}^{had} [MeV]",    xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1UnpckTime',     type='TH2F', title="T2L1Unpacking L1 unpack time vs. nTowers;nTowers;time [ms]",         xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',       type='TH2F', title="T2L1Unpacking All unpack time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,CalibrationTime', type='TH2F', title="T2L1Unpacking Tower calibration time vs. nTowers;nTowers;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime',         type='TH2F', title="T2L1Unpacking RoI making time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,TotalTime',     type='TH2F', title="T2L1Unpacking Total time vs. nTowers;nTowers;time [ms]",             xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+       
+        
+class TrigT2L1UnpackingCosmicMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2L1Unpacking_Cosmic"):
+        """ defines hisograms for online """
+        super(TrigT2L1UnpackingCosmicMonitoring, self).__init__(name)
+
+        self.defineTarget("Cosmic")
+        # this target contains the same list of histograms as for "Online", but the axis range for plots of Et and etc. are smaller 
+        self.Histograms += [ defineHistogram('nEMTowers',      type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nHADTowers',     type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nTowers',        type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('nTowers_zoom',   type='TH1F', title="T2L1Unpacking number of L1 towers;number of L1 towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nEMTowers_zoom', type='TH1F', title="T2L1Unpacking number of L1 EM towers;number of L1 EM towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('nHADTowers_zoom',type='TH1F', title="T2L1Unpacking number of L1 HAD towers;number of L1 HAD towers; nevents", xbins=50, xmin=0., xmax=50.) ]
+        self.Histograms += [ defineHistogram('Et',             type='TH1F', title="T2L1Unpacking FEX Et;Et [MeV]; nevents",                         xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',           type='TH1F', title="T2L1Unpacking FEX Etem;EM Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',          type='TH1F', title="T2L1Unpacking FEX Ethad;Had Et [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta',            type='TH1F', title="T2L1Unpacking FEX Eta;Eta; nevents",                             xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaEM',          type='TH1F', title="T2L1Unpacking FEX EM Eta;EM Eta; nevents",                       xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('EtaHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Eta;HAD Eta; nevents",                     xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',            type='TH1F', title="T2L1Unpacking FEX Phi;Phi; nevents",                             xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiEM',          type='TH1F', title="T2L1Unpacking FEX EM Phi;EM Phi; nevents",                       xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('PhiHAD',         type='TH1F', title="T2L1Unpacking FEX HAD Phi;HAD Phi; nevents",                     xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('L1UnpckTime',    type='TH1F', title="T2L1Unpacking L1 unpacking time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('UnpckTime',      type='TH1F', title="T2L1Unpacking All unpacking time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime',type='TH1F', title="T2L1Unpacking Calibration time; time [ms]; nevents",             xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',        type='TH1F', title="T2L1Unpacking RoI making time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',    type='TH1F', title="T2L1Unpacking Total time; time [ms]; nevents",                   xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',        type='TH2F', title="T2L1Unpacking phi vs. eta;#eta;#phi",                            xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaEM,PhiEM',    type='TH2F', title="T2L1Unpacking EM phi vs. eta;EM #eta;EM #phi",                   xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('EtaHAD,PhiHAD',  type='TH2F', title="T2L1Unpacking HAD phi vs. eta;HAD #eta;HAD #phi",                xbins=100, xmin=-5., xmax=5.,        ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',         type='TH2F', title="T2L1Unpacking Et vs. eta;#eta;Et [MeV]",                         xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #eta;EM #eta;E_{T}^{em} [MeV]",       xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('EtaHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #eta;HAD #eta;E_{T}^{had} [MeV]",    xbins=100, xmin=-5., xmax=5.,        ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',         type='TH2F', title="T2L1Unpacking Et vs. phi;#phi;Et [MeV]",                         xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiEM,EtEM',     type='TH2F', title="T2L1Unpacking EM E_{T} vs. #phi;EM #phi;E_{T}^{em} [MeV]",       xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('PhiHAD,EtHAD',   type='TH2F', title="T2L1Unpacking HAD E_{T} vs. #phi;HAD #phi;E_{T}^{had} [MeV]",    xbins=100, xmin=-3.1416, xmax=3.1416,ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nTowers,L1UnpckTime',     type='TH2F', title="T2L1Unpacking L1 unpack time vs. nTowers;nTowers;time [ms]",         xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,UnpckTime',       type='TH2F', title="T2L1Unpacking All unpack time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,CalibrationTime', type='TH2F', title="T2L1Unpacking Tower calibration time vs. nTowers;nTowers;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,RoITime',         type='TH2F', title="T2L1Unpacking RoI making time vs. nTowers;nTowers;time [ms]",        xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nTowers,TotalTime',     type='TH2F', title="T2L1Unpacking Total time vs. nTowers;nTowers;time [ms]",             xbins=100, xmin=0., xmax=1000.,   ybins=100, ymin=0., ymax=100.) ]
+       
+class TrigT2CaloFastJetValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloFastJet_Validation"):
+        super(TrigT2CaloFastJetValidationMonitoring, self).__init__(name)
+
+        self.defineTarget("Validation")
+        # this target contains all the histograms necessary for validation
+        self.Histograms = [  defineHistogram('nJets',           type='TH1F', title="T2CaloFastJet FEX number of jets;N;nevents",                xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('nGrid',           type='TH1F', title="T2CaloFastJet FEX number of inputs;N;nevents",              xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('Et',              type='TH1F', title="T2CaloFastJet FEX Et;Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',            type='TH1F', title="T2CaloFastJet FEX Et EM;Etem [MeV]; nevents",               xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',           type='TH1F', title="T2CaloFastJet FEX Et HAD;Ethad [MeV]; nevents",             xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('E',               type='TH1F', title="T2CaloFastJet FEX E;E [MeV]; nevents",                      xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EEM',             type='TH1F', title="T2CaloFastJet FEX Eem;Eem [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EHAD',            type='TH1F', title="T2CaloFastJet FEX Ehad;Ehad [MeV]; nevents",                xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers',  type='TH1F', title="T2CaloFastJet FEX nLeadingTowers;nLeadingTowers; nevents",  xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf',             type='TH1F', title="T2CaloFastJet FEX emf;EMF; nevents",                        xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta',             type='TH1F', title="T2CaloFastJet FEX Eta;Eta; nevents",                        xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',             type='TH1F', title="T2CaloFastJet FEX Phi;Phi; nevents",                        xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('UnpackTime',      type='TH1F', title="T2CaloFastJet Unpacking time; time [ms]; nevents",          xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('FastJetTime',     type='TH1F', title="T2CaloFastJet FastJet time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('puSubTime',       type='TH1F', title="T2CaloFastJet FastJet pu sub time; time [ms]; nevents",     xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CleaningTime',    type='TH1F', title="T2CaloFastJet Cleaning time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime', type='TH1F', title="T2CaloFastJet Calibration time; time [ms]; nevents",        xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',         type='TH1F', title="T2CaloFastJet RoI making time; time [ms]; nevents",         xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',     type='TH1F', title="T2CaloFastJet Total time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',         type='TH2F', title="T2CaloFastJet phi vs. eta;#eta;#phi",                       xbins=100, xmin=-5., xmax=5.,           ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',          type='TH2F', title="T2CaloFastJet Et vs. eta;#eta;Et [MeV]",                    xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]",     xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]",   xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,E',           type='TH2F', title="T2CaloFastJet ene vs. eta;#eta;ene [MeV]",                  xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EEM',         type='TH2F', title="T2CaloFastJet EM ene vs. eta;#eta;Eem [MeV]",               xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EHAD',        type='TH2F', title="T2CaloFastJet Had ene vs. eta;#eta;Ehad [MeV]",             xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E',           type='TH2F', title="T2CaloFastJet ene vs. phi;#phi;ene [MeV]",                  xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',          type='TH2F', title="T2CaloFastJet Et vs. phi;#phi;Et [MeV]",                    xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]",     xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]",   xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nGrid,UnpackTime',      type='TH2F', title="T2CaloFastJet Unpack time vs. nGrid;nGrid;time [ms]",       xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nGrid;nGrid;time [ms]",  xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nJets;nJets;time [ms]",  xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CalibrationTime', type='TH2F', title="T2CaloFastJet Jet calibration time vs. nJets;nJets;time [ms]",xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,RoITime',         type='TH2F', title="T2CaloFastJet RoI making time vs. nJets;nJets;time [ms]",   xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nGrid;nGrid;time [ms]",        xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nJets;nJets;time [ms]",        xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+class TrigT2CaloFastJetOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloFastJet_Online"):
+        super(TrigT2CaloFastJetOnlineMonitoring, self).__init__(name)
+
+        self.defineTarget("Online")
+        # this target contains all the histograms necessary for Online
+        self.Histograms = [  defineHistogram('nJets',           type='TH1F', title="T2CaloFastJet FEX number of jets;N;nevents",                xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('nGrid',           type='TH1F', title="T2CaloFastJet FEX number of inputs;N;nevents",              xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('Et',              type='TH1F', title="T2CaloFastJet FEX Et;Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',            type='TH1F', title="T2CaloFastJet FEX Et EM;Etem [MeV]; nevents",               xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',           type='TH1F', title="T2CaloFastJet FEX Et HAD;Ethad [MeV]; nevents",             xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('E',               type='TH1F', title="T2CaloFastJet FEX E;E [MeV]; nevents",                      xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EEM',             type='TH1F', title="T2CaloFastJet FEX Eem;Eem [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EHAD',            type='TH1F', title="T2CaloFastJet FEX Ehad;Ehad [MeV]; nevents",                xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers',  type='TH1F', title="T2CaloFastJet FEX nLeadingTowers;nLeadingTowers; nevents",  xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf',             type='TH1F', title="T2CaloFastJet FEX emf;EMF; nevents",                        xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta',             type='TH1F', title="T2CaloFastJet FEX Eta;Eta; nevents",                        xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',             type='TH1F', title="T2CaloFastJet FEX Phi;Phi; nevents",                        xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('UnpackTime',      type='TH1F', title="T2CaloFastJet Unpacking time; time [ms]; nevents",          xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('FastJetTime',     type='TH1F', title="T2CaloFastJet FastJet time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('puSubTime',       type='TH1F', title="T2CaloFastJet FastJet pu sub time; time [ms]; nevents",     xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CleaningTime',    type='TH1F', title="T2CaloFastJet Cleaning time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime', type='TH1F', title="T2CaloFastJet Calibration time; time [ms]; nevents",        xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',         type='TH1F', title="T2CaloFastJet RoI making time; time [ms]; nevents",         xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',     type='TH1F', title="T2CaloFastJet Total time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',         type='TH2F', title="T2CaloFastJet phi vs. eta;#eta;#phi",                       xbins=100, xmin=-5., xmax=5.,           ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',          type='TH2F', title="T2CaloFastJet Et vs. eta;#eta;Et [MeV]",                    xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]",     xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]",   xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,E',           type='TH2F', title="T2CaloFastJet ene vs. eta;#eta;ene [MeV]",                  xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EEM',         type='TH2F', title="T2CaloFastJet EM ene vs. eta;#eta;Eem [MeV]",               xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EHAD',        type='TH2F', title="T2CaloFastJet Had ene vs. eta;#eta;Ehad [MeV]",             xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E',           type='TH2F', title="T2CaloFastJet ene vs. phi;#phi;ene [MeV]",                  xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',          type='TH2F', title="T2CaloFastJet Et vs. phi;#phi;Et [MeV]",                    xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]",     xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]",   xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nGrid,UnpackTime',      type='TH2F', title="T2CaloFastJet Unpack time vs. nGrid;nGrid;time [ms]",       xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nGrid;nGrid;time [ms]",  xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nJets;nJets;time [ms]",  xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CalibrationTime', type='TH2F', title="T2CaloFastJet Jet calibration time vs. nJets;nJets;time [ms]",xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,RoITime',         type='TH2F', title="T2CaloFastJet RoI making time vs. nJets;nJets;time [ms]",   xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nGrid;nGrid;time [ms]",        xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nJets;nJets;time [ms]",        xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+        
+class TrigT2CaloFastJetCosmicMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloFastJet_Cosmic"):
+        super(TrigT2CaloFastJetCosmicMonitoring, self).__init__(name)
+
+        self.defineTarget("Cosmic")
+        # this target contains all the histograms necessary for Cosmic
+        self.Histograms = [  defineHistogram('nJets',           type='TH1F', title="T2CaloFastJet FEX number of jets;N;nevents",                xbins=21, xmin=-.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('nGrid',           type='TH1F', title="T2CaloFastJet FEX number of inputs;N;nevents",              xbins=100, xmin=0., xmax=1000.) ]
+        self.Histograms += [ defineHistogram('Et',              type='TH1F', title="T2CaloFastJet FEX Et;Et [MeV]; nevents",                    xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtEM',            type='TH1F', title="T2CaloFastJet FEX Et EM;Etem [MeV]; nevents",               xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EtHAD',           type='TH1F', title="T2CaloFastJet FEX Et HAD;Ethad [MeV]; nevents",             xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('E',               type='TH1F', title="T2CaloFastJet FEX E;E [MeV]; nevents",                      xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EEM',             type='TH1F', title="T2CaloFastJet FEX Eem;Eem [MeV]; nevents",                  xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('EHAD',            type='TH1F', title="T2CaloFastJet FEX Ehad;Ehad [MeV]; nevents",                xbins=100, xmin=0., xmax=100000.) ]
+        self.Histograms += [ defineHistogram('nLeadingTowers',  type='TH1F', title="T2CaloFastJet FEX nLeadingTowers;nLeadingTowers; nevents",  xbins=21, xmin=-0.5, xmax=20.5) ]
+        self.Histograms += [ defineHistogram('Emf',             type='TH1F', title="T2CaloFastJet FEX emf;EMF; nevents",                        xbins=100, xmin=-0.1, xmax=1.1) ]
+        self.Histograms += [ defineHistogram('Eta',             type='TH1F', title="T2CaloFastJet FEX Eta;Eta; nevents",                        xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi',             type='TH1F', title="T2CaloFastJet FEX Phi;Phi; nevents",                        xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('UnpackTime',      type='TH1F', title="T2CaloFastJet Unpacking time; time [ms]; nevents",          xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('FastJetTime',     type='TH1F', title="T2CaloFastJet FastJet time; time [ms]; nevents",            xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('puSubTime',       type='TH1F', title="T2CaloFastJet FastJet pu sub time; time [ms]; nevents",     xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CleaningTime',    type='TH1F', title="T2CaloFastJet Cleaning time; time [ms]; nevents",           xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('CalibrationTime', type='TH1F', title="T2CaloFastJet Calibration time; time [ms]; nevents",        xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('RoITime',         type='TH1F', title="T2CaloFastJet RoI making time; time [ms]; nevents",         xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('TotalTime',     type='TH1F', title="T2CaloFastJet Total time; time [ms]; nevents",              xbins=200, xmin=0., xmax=100.) ]
+        self.Histograms += [ defineHistogram('Eta,Phi',         type='TH2F', title="T2CaloFastJet phi vs. eta;#eta;#phi",                       xbins=100, xmin=-5., xmax=5.,           ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Et',          type='TH2F', title="T2CaloFastJet Et vs. eta;#eta;Et [MeV]",                    xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #eta;#eta;E_{T}^{em} [MeV]",     xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #eta;#eta;E_{T}^{had} [MeV]",   xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,E',           type='TH2F', title="T2CaloFastJet ene vs. eta;#eta;ene [MeV]",                  xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EEM',         type='TH2F', title="T2CaloFastJet EM ene vs. eta;#eta;Eem [MeV]",               xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Eta,EHAD',        type='TH2F', title="T2CaloFastJet Had ene vs. eta;#eta;Ehad [MeV]",             xbins=100, xmin=-5., xmax=5.,           ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,E',           type='TH2F', title="T2CaloFastJet ene vs. phi;#phi;ene [MeV]",                  xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et',          type='TH2F', title="T2CaloFastJet Et vs. phi;#phi;Et [MeV]",                    xbins=64, xmin=-3.1416, xmax=3.1416,    ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtEM',        type='TH2F', title="T2CaloFastJet EM E_{T} vs. #phi;#phi;E_{T}^{em} [MeV]",     xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('Phi,EtHAD',       type='TH2F', title="T2CaloFastJet HAD E_{T} vs. #phi;#phi;E_{T}^{had} [MeV]",   xbins=100, xmin=-3.1416, xmax=3.1416,   ybins=100 , ymin=0., ymax=100000.) ]
+        self.Histograms += [ defineHistogram('nGrid,UnpackTime',      type='TH2F', title="T2CaloFastJet Unpack time vs. nGrid;nGrid;time [ms]",       xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nGrid;nGrid;time [ms]",  xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,FastJetTime',     type='TH2F', title="T2CaloFastJet Jet finding time vs. nJets;nJets;time [ms]",  xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,puSubTime',       type='TH2F', title="T2CaloFastJet pu subtraction time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nGrid;nGrid;time [ms]", xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CleaningTime',    type='TH2F', title="T2CaloFastJet Jet cleaning time vs. nJets;nJets;time [ms]", xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,CalibrationTime', type='TH2F', title="T2CaloFastJet Jet calibration time vs. nJets;nJets;time [ms]",xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,RoITime',         type='TH2F', title="T2CaloFastJet RoI making time vs. nJets;nJets;time [ms]",   xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nGrid,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nGrid;nGrid;time [ms]",        xbins=100, xmin=0., xmax=1000., ybins=100, ymin=0., ymax=100.) ]
+        self.Histograms += [ defineHistogram('nJets,TotalTime',     type='TH2F', title="T2CaloFastJet Total time vs. nJets;nJets;time [ms]",        xbins=21, xmin=-.5, xmax=20.5, ybins=100, ymin=0., ymax=100.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+class TrigT2VirtualL1CaloJetValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2VirtualL1CaloJet_Validation"):
+        super(TrigT2VirtualL1CaloJetValidationMonitoring, self).__init__(name)
+
+        self.defineTarget("Validation")
+# this target contains all the histograms necessary for validation
+
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2VirtualL1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2VirtualL1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2VirtualL1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2VirtualL1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2VirtualL1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+        
+class TrigT2VirtualL1CaloJetOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2VirtualL1CaloJet_Online"):
+        """ defines hisograms for online """
+        super(TrigT2VirtualL1CaloJetOnlineMonitoring, self).__init__(name)
+
+        self.defineTarget("Online")
+# right now this target has the same list of histograms as "Validation"
+
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2VirtualL1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2VirtualL1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2VirtualL1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2VirtualL1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2VirtualL1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+ 
+
+class TrigT2VirtualL1CaloJetCosmicMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2VirtualL1CaloJet_Cosmic"):
+        """ defines hisograms for online """
+        super(TrigT2VirtualL1CaloJetCosmicMonitoring, self).__init__(name)
+
+        self.defineTarget("Cosmic")
+# this target contains the same list of histograms as for "Online", but the axis range for plots of Et and etc. are smaller 
+
+        self.Histograms += [ defineHistogram('E', type='TH1F', title="T2VirtualL1CaloJet FEX E;E [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Et', type='TH1F', title="T2VirtualL1CaloJet FEX Et;Et [MeV]; nevents", xbins=100, xmin=0., xmax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta', type='TH1F', title="T2VirtualL1CaloJet FEX Eta;Eta; nevents", xbins=100, xmin=-5., xmax=5.) ]
+        self.Histograms += [ defineHistogram('Phi', type='TH1F', title="T2VirtualL1CaloJet FEX Phi;Phi; nevents", xbins=64, xmin=-3.1416, xmax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,Phi', type='TH2F', title="T2VirtualL1CaloJet phi vs. eta;#eta;#phi", xbins=100, xmin=-5., xmax=5., ybins=64, ymin=-3.1416, ymax=3.1416) ]
+        self.Histograms += [ defineHistogram('Eta,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. eta;#eta;ene [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,E', type='TH2F', title="T2VirtualL1CaloJet ene vs. phi;#phi;ene [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Eta,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. eta;#eta;Et [MeV]", xbins=100, xmin=-5., xmax=5., ybins=100 , ymin=0., ymax=1000000.) ]
+        self.Histograms += [ defineHistogram('Phi,Et', type='TH2F', title="T2VirtualL1CaloJet Et vs. phi;#phi;Et [MeV]", xbins=64, xmin=-3.1416, xmax=3.1416, ybins=100 , ymin=0., ymax=1000000.) ]
+        #self.Histograms += [ defineHistogram ('AlgorithmErrors', type='TH1F',title='Algorithm Errors bit mask' ,xbins=10,xmin=0,xmax=10)]
+        #self.Histograms += [ defineHistogram ('Eta, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Eta;#eta; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=100,xmin=-5.,xmax=5.)]
+        #self.Histograms += [ defineHistogram ('Phi, AlgorithmErrors' ,type='TH2F',title='AlgorithmErrors vs Phi;#phi; AlgorithmErrors Errors' ,ybins=6,ymin=0,ymax=6,xbins=64,xmin=-3.1416,xmax=3.1416)]
+
+# T2AllRoiUnpacking histograms    [begin]
+fexName = "T2AllRoiUnpacking"
+hUnpckTime = defineHistogram(varname='UnpckTime', type='TH1F',
+                             title='%s tot unpacking time; time [ms]'%fexName,
+                             xbins=40, xmin=0., xmax=40)
+hCellUnpckTime = defineHistogram(varname='CellUnpckTime', type='TH1F',
+                                 title='%s unpacking time (addCell only); time [ms]'%fexName,
+                                 xbins=50, xmin=0., xmax=10)
+hRoITime = defineHistogram(varname='RoITime', type='TH1F',
+                           title='%s time to setup output TE; time [ms]'%fexName,
+                           xbins=50, xmin=0., xmax=10)    
+hMergeTime = defineHistogram(varname='MergeTime', type='TH1F',
+                             title='%s time to merge the EM cells; time [ms]'%fexName,
+                             xbins=50, xmin=0., xmax=10)    
+hTotalTime = defineHistogram('TotalTime', type='TH1F',
+                             title='%s Total time; time [ms]; nevents'%fexName,
+                             xbins=100, xmin=0., xmax=100.)
+# T2AllRoiUnpacking histograms    [end]
+
+class T2AllRoiUnpackingTimeOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name = "T2AllRoiUnpackingTimeOnlineMonitoring"):
+        super(T2AllRoiUnpackingTimeOnlineMonitoring, self).__init__(name)
+        self.defineTarget("Online")
+        self.Histograms = [hUnpckTime, hCellUnpckTime, hRoITime, hMergeTime, hTotalTime,]
+
+class T2AllRoiUnpackingTimeValidationMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name = "T2AllRoiUnpackingTimeValidationMonitoring"):
+        super(T2AllRoiUnpackingTimeValidationMonitoring, self).__init__(name)
+        self.defineTarget("Validation")
+        # validation can have additional histograms (online should be the minimal subset)
+        self.Histograms = [hUnpckTime, hCellUnpckTime, hRoITime, hMergeTime, hTotalTime,]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet.py b/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet.py
new file mode 100755
index 000000000000..85acbcdbc086
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet.py
@@ -0,0 +1,139 @@
+#----------------------------------------------------
+#  T2CaloJet options
+#----------------------------------------------------
+theApp.Dlls += [ "TrigT2CaloJet" ]
+
+include( "TrigT2CaloCommon/jobOfragment_TrigT2CaloCommon.py" )
+
+#T2CaloJet_g4_L2 = Algorithm( "T2CaloJet_g4_L2" )
+#T2CaloJet_g4_L2.T2JetTools=["T2CaloJetGridFromCells","T2CaloJetConeTool","T2CaloJetCalibTool"]
+#T2CaloJet_g4_L2.OutputLevel = INFO
+#T2CaloJet_g4_L2.clearJetGrid = False
+
+# Set up default options (according to Osamu's talk at Trigger&Physics week, March)
+#  ROI half width in eta x phi: 0.7x0.7
+#  Number of iterations = 3
+#  Cone radius: R = 0.4
+#T2CaloJet_g4_L2.EtaWidth = 0.7 # Eta half width
+#T2CaloJet_g4_L2.PhiWidth = 0.7 # Phi half width
+
+#T2CaloJet_g4_L2.T2CaloJetConeTool.coneRadius = 0.4;
+#T2CaloJet_g4_L2.T2CaloJetConeTool.numberOfIterations = 3;
+
+
+# Monitoring
+#include( "TrigJetMonitoring/jobOfragment_TrigT2CaloJetMoni.py" )
+
+
+# Using CSC calibration.
+# Performance described in:
+# http://indico.cern.ch/materialDisplay.py?contribId=16&amp;materialId=slides&amp;confId=6198
+
+include("TrigT2CaloCalibration/T2SampCalibration_jobOptions.py")
+
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.CalibToolName = "T2SampCalibTool"
+
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.nEtaBin = 44
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.EtRegionLimit = 5000
+
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.EtaReg=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4]
+
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.VECut=[20, 20.1001, 20.4013, 20.9068, 21.6214, 22.5525, 23.7093, 25.1034, 26.7487, 28.6617, 30.8616, 33.3704, 36.2131, 39.4183, 43.018, 47.0482, 51.5493, 56.5663, 62.1495, 68.3546, 75.2439, 82.8863, 91.3582, 100.744, 111.139, 122.646, 135.38, 149.469, 165.055, 182.292, 201.353, 222.43, 245.733, 271.495, 299.975, 331.456, 366.256, 404.72, 447.236, 494.227, 546.165, 603.569, 667.013, 737.134]
+
+#Schema of weights specification through jobO
+###########################################################
+# i -> this is the number of eta bin                      #
+#m_wt[i][0][0],m_wt[i][0][1],m_wt[i][0][2],m_wt[i][0][3], #
+#m_wt[i][1][0],m_wt[i][1][1],m_wt[i][0][2],m_wt[i][1][3], #
+###########################################################
+
+#T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.Weights=[
+#1.51389, -0.0895586,  1., 0.,
+#1.72829, -0.0340167, 1., 0.,
+#1.49137, -0.0868803, 1., 0.,
+#1.70548, -0.0337713, 1., 0.,
+#1.4857, -0.0863495, 1., 0.,
+#1.72645, -0.0432542, 1., 0.,
+#1.47319, -0.0812488, 1., 0.,
+#1.74611, -0.0531648, 1., 0.,
+#1.48531, -0.0863878, 1., 0.,
+#1.72056, -0.0471587, 1., 0.,
+#1.48752, -0.084979, 1., 0.,
+#1.71981, -0.0444118, 1., 0.,
+#1.51808, -0.0926553, 1., 0.,
+#1.74622, -0.0519999, 1., 0.,
+#1.55659, -0.101366, 1., 0.,
+#1.71495, -0.01945, 1., 0.,
+#1.58541, -0.105946, 1., 0.,
+#1.8069, -0.0353912, 1., 0.,
+#1.58109, -0.104969, 1., 0.,
+#1.86016, -0.0246607, 1., 0.,
+#1.59103, -0.108539, 1., 0.,
+#1.61592, -0.0223561, 1., 0.,
+#1.56324, -0.102244, 1., 0.,
+#1.54431, -0.030708, 1., 0.,
+#1.56805, -0.110581, 1., 0.,
+#1.68662, -0.0425636, 1., 0.,
+#1.5175, -0.0904923, 1., 0.,
+#1.9283, -0.0795127, 1., 0.,
+#1.57129, -0.102665, 1., 0.,
+#1.75441, -0.0341709, 1., 0.,
+#1.45089, -0.108513, 1., 0.,
+#1.71627, -0.0184717, 1., 0.,
+#1.38183, -0.0832477, 1., 0.,
+#1.68205, -0.0600046, 1., 0.,
+#1.3759, -0.0820196, 1., 0.,
+#1.52486, -0.0399448, 1., 0.,
+#1.3698, -0.0820021, 1., 0.,
+#1.50279, -0.0339901, 1., 0.,
+#1.36276, -0.0791147, 1., 0.,
+#1.47426, -0.0298548, 1., 0.,
+#1.34213, -0.0787685, 1., 0.,
+#1.49542, -0.0335057, 1., 0.,
+#1.34028, -0.0808486, 1., 0.,
+#1.47619, -0.020763, 1., 0.,
+#1.29883, -0.0668448, 1., 0.,
+#1.4767, -0.0266885, 1., 0.,
+#1.3058, -0.0647559, 1., 0.,
+#1.56106, -0.055258, 1., 0.,
+#1.30474, -0.0660207, 1., 0.,
+#1.53641, -0.0402638, 1., 0.,
+#1.32559, -0.070272, 1., 0.,
+#1.52766, -0.0386046, 1., 0.,
+#1.27423, -0.0582557, 1., 0.,
+#1.57456, -0.0636291, 1., 0.,
+#1.27919, -0.0590284, 1., 0.,
+#1.61072, -0.0685855, 1., 0.,
+#1.32345, -0.0834648, 1., 0.,
+#1.62766, -0.0522781, 1., 0.,
+#1.33869, -0.0813973, 1., 0.,
+#1.84186, -0.0996512, 1., 0.,
+#1.43289, -0.116186, 1., 0.,
+#1.98947, -0.0398448, 1., 0.,
+#1.35306, -0.0829135, 1., 0.,
+#2.58078, -0.266127, 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#1., 0., 1., 0.,
+#]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet_RomeCalib.py b/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet_RomeCalib.py
new file mode 100755
index 000000000000..a34a7951f0fe
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/share/jobOfragment_TrigT2CaloJet_RomeCalib.py
@@ -0,0 +1,181 @@
+#----------------------------------------------------
+#  T2CaloJet options
+#----------------------------------------------------
+theApp.Dlls += [ "TrigT2CaloJet" ]
+
+include( "TrigT2CaloCommon/jobOfragment_TrigT2CaloCommon.py" )
+
+T2CaloJet_g4_L2 = Algorithm( "T2CaloJet_g4_L2" )
+T2CaloJet_g4_L2.T2JetTools=["T2CaloJetGridFromCells","T2CaloJetConeTool","T2CaloJetCalibTool"]
+T2CaloJet_g4_L2.OutputLevel = INFO
+T2CaloJet_g4_L2.clearJetGrid = False
+
+# Set up default options (according to Osamu's talk at Trigger&Physics week, March)
+#  ROI size in eta x phi: 0.7x0.7
+#  Number of iterations = 3
+#  Cone radius: R = 0.4
+T2CaloJet_g4_L2.EtaWidth = 0.35 # Eta half width
+T2CaloJet_g4_L2.PhiWidth = 0.35 # Phi half width
+
+T2CaloJet_g4_L2.T2CaloJetConeTool.coneRadius = 0.4;
+T2CaloJet_g4_L2.T2CaloJetConeTool.numberOfIterations = 3;
+
+# Adding calibration. 
+# Performance described in: 
+# http://indico.cern.ch/getFile.py/access?contribId=25&amp;sessionId=4&amp;resId=0&amp;materialId=slides&amp;confId=5141
+
+include("TrigT2CaloCalibration/T2SampCalibration_jobOptions.py")
+
+T2CaloJet_g4_L2.T2CaloJetCalibTool.CalibToolName = "T2SampCalibTool"
+T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.nEtaBin = 44
+T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.EtRegionLimit = 5000
+
+T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.EtaReg=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4]
+
+T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.VECut=[20, 20.1001, 20.4013, 20.9068, 21.6214, 22.5525, 23.7093, 25.1034, 26.7487, 28.6617, 30.8616, 33.3704, 36.2131, 39.4183, 43.018, 47.0482, 51.5493, 56.5663, 62.1495, 68.3546, 75.2439, 82.8863, 91.3582, 100.744, 111.139, 122.646, 135.38, 149.469, 165.055, 182.292, 201.353, 222.43, 245.733, 271.495, 299.975, 331.456, 366.256, 404.72, 447.236, 494.227, 546.165, 603.569, 667.013, 737.134]
+
+#Schema of weights specification through jobO
+###########################################################
+# i -> this is the number of eta bin                      #
+#m_wt[i][0][0],m_wt[i][0][1],m_wt[i][0][2],m_wt[i][0][3], #
+#m_wt[i][1][0],m_wt[i][1][1],m_wt[i][0][2],m_wt[i][1][3], #
+###########################################################
+
+T2CaloJet_g4_L2.T2CaloJetCalibTool.T2SampCalibTool.Weights=[
+1.48308, -0.0826528, 0.5, 0.5,
+1.42289, -0.0171067, 0.5, 0.5,
+
+1.45557, -0.0781768, 0.5, 0.5,
+1.44633, -0.027712, 0.5, 0.5,
+
+1.43856, -0.0751478, 0.5, 0.5,
+1.45253, -0.0306214, 0.5, 0.5,
+
+1.43498, -0.0718259, 0.5, 0.5,
+1.45168, -0.032742, 0.5, 0.5,
+
+1.43684, -0.0729862, 0.5, 0.5,
+1.49863, -0.048398, 0.5, 0.5,
+
+1.45232, -0.0772673, 0.5, 0.5,
+1.45768, -0.03347, 0.5, 0.5,
+
+1.47967, -0.0838591, 0.5, 0.5,
+1.43648, -0.0286997, 0.5, 0.5,
+
+1.50318, -0.0855062, 0.5, 0.5,
+1.50884, -0.0353893, 0.5, 0.5,
+
+1.52509, -0.0885095, 0.5, 0.5,
+1.52056, -0.032717, 0.5, 0.5,
+
+1.5283, -0.0951263, 0.5, 0.5,
+1.58505, -0.0175355, 0.5, 0.5,
+
+ 1.53577, -0.0941264, 0.5, 0.5,
+ 1.44049, -0.0297817, 0.5, 0.5,
+
+ 1.54731, -0.103539, 0.5, 0.5,
+ 1.26273, 0.009096, 0.5, 0.5,
+
+ 1.50927, -0.0939212, 0.5, 0.5,
+ 1.53218, -0.0516523, 0.5, 0.5,
+
+ 1.53583, -0.0924597, 0.5, 0.5,
+ 1.57429, -0.0390652, 0.5, 0.5,
+
+ 1.56737, -0.0848132, 0.5, 0.5,
+ 1.6557, -0.0695771, 0.5, 0.5,
+
+ 1.48189, -0.122748, 0.5, 0.5,
+ 1.63334, -0.00433293, 0.5, 0.5,
+
+ 1.3956, -0.0938853, 0.5, 0.5,
+ 1.65188, -0.0527244, 0.5, 0.5,
+
+ 1.39098, -0.0913043, 0.5, 0.5,
+ 1.50682, -0.0362353, 0.5, 0.5,
+
+ 1.3567, -0.0810333, 0.5, 0.5,
+ 1.47922, -0.0375228, 0.5, 0.5,
+
+ 1.33288, -0.0776533, 0.5, 0.5,
+ 1.47069, -0.0322596, 0.5, 0.5,
+
+ 1.29355, -0.067195, 0.5, 0.5,
+ 1.50526, -0.0458961, 0.5, 0.5,
+
+ 1.27226, -0.0561386, 0.5, 0.5,
+ 1.51188, -0.0578599, 0.5, 0.5,
+
+ 1.29132, -0.071984, 0.5, 0.5,
+ 1.41631, -0.0172732, 0.5, 0.5,
+
+ 1.29759, -0.0714317, 0.5, 0.5,
+ 1.50393, -0.0499248, 0.5, 0.5,
+
+ 1.27971, -0.0677093, 0.5, 0.5,
+ 1.47009, -0.036954, 0.5, 0.5,
+
+ 1.27665, -0.0625996, 0.5, 0.5,
+ 1.47138, -0.0381273, 0.5, 0.5,
+
+ 1.28796, -0.0642188, 0.5, 0.5,
+ 1.45072, -0.0414209, 0.5, 0.5,
+
+ 1.23851, -0.0422229, 0.5, 0.5,
+ 1.57495, -0.0825966, 0.5, 0.5,
+
+ 1.29582, -0.0643765, 0.5, 0.5,
+ 1.57768, -0.0887841, 0.5, 0.5,
+
+ 1.37418, -0.116019, 0.5, 0.5,
+ 1.69627, -0.0531049, 0.5, 0.5,
+
+ 1.3154, -0.0621647, 0.5, 0.5,
+ 2.28643, -0.265052, 0.5, 0.5,
+
+ 1.28765, -0.0955826, 0.5, 0.5,
+ 2.76714, -0.109484, 0.5, 0.5,
+
+ # Weights were not extracted for the forward calorimeters.
+ # don't apply any correction there:
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+
+ 1., 0.  , 0.5, 0.5, 
+ 1., 0.  , 0.5, 0.5, 
+]
+
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/EtaPhiSampleHash.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/EtaPhiSampleHash.cxx
new file mode 100644
index 000000000000..f13eeb5f7fa6
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/EtaPhiSampleHash.cxx
@@ -0,0 +1,84 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigT2CaloJet/EtaPhiSampleHash.h"
+
+#include "TrigT2CaloJet/HashedTrig3Momentum.h"
+
+#include "TVector2.h" // Phi_mpi_pi
+
+#include <iostream>
+#include <cmath>    // M_PI, fabs
+
+
+
+const double EtaPhiSampleHash::kMinEta = -5.0;
+const double EtaPhiSampleHash::kMaxEta = +5.0;
+const double EtaPhiSampleHash::kMinPhi = -M_PI;
+const double EtaPhiSampleHash::kMaxPhi = +M_PI;
+
+//------------------------------------------------
+EtaPhiSampleHash::EtaPhiSampleHash(const u_short &nEtaBins, const u_short &nPhiBins,
+				   double minEta, double maxEta,
+				   double minPhi, double maxPhi):
+
+ m_minEta(minEta),
+ m_maxEta(maxEta),
+ m_minPhi(minPhi),
+ m_maxPhi(maxPhi),
+ m_nEtaBins(nEtaBins),
+ m_nPhiBins(nPhiBins)
+{
+  checkValues();
+  m_dEta = (m_maxEta-m_minEta)/ static_cast<double>(m_nEtaBins);
+  m_dPhi = (m_maxPhi-m_minPhi)/ static_cast<double>(m_nPhiBins);
+  m_invDeta = 1.0/m_dEta;
+  m_invDphi = 1.0/m_dPhi;
+}
+
+//------------------------------------------------
+void EtaPhiSampleHash::checkValues()
+{
+  using namespace std;
+  if(m_nEtaBins >= kMaxNetaBins)
+    cerr<<"EtaPhiSampleHash: number of eta bins too large"
+	<<" ("<<m_nEtaBins<<" >= "<<kMaxNetaBins<<")"<<endl;
+  if(m_nPhiBins >= kMaxNphiBins)
+    cerr<<"EtaPhiSampleHash: number of phi bins too large"
+	<<" ("<<m_nPhiBins<<" >= "<<kMaxNphiBins<<")"<<endl;
+}
+//------------------------------------------------
+u_int EtaPhiSampleHash::hash(const double &eta, const double &phi,
+			     const  CaloSampling::CaloSample &sample) const
+{
+  double rPhi = TVector2::Phi_mpi_pi(phi);
+  if(eta<m_minEta || eta>m_maxEta || rPhi<m_minPhi || rPhi>m_maxPhi){
+    std::cerr<<"EtaPhiSampleHash::hash("<<eta<<", phi, "<<sample<<")"<<std::endl
+	     <<"out of bounds: returning 0"<<std::endl;
+    return 0;
+  }
+  return (sample & kSixBits) + 
+    ((int((eta-m_minEta)*m_invDeta) & kTenBits) <<  6) +
+    ((int((phi-m_minPhi)*m_invDphi) & kTenBits) << 16);
+}
+//------------------------------------------------
+u_int EtaPhiSampleHash::hash(const Trig3Momentum &t3m) const
+{
+  return hash(t3m.eta(), t3m.phi(), t3m.caloSample());
+}
+//------------------------------------------------
+u_int EtaPhiSampleHash::hash(const HashedTrig3Momentum &htm) const
+{
+  return hash(htm.eta(), htm.phi(), htm.caloSample());
+}
+
+//------------------------------------------------
+bool EtaPhiSampleHash::etaPhiSample(const u_int &hash, double &eta, double &phi,
+				    CaloSampling::CaloSample &sample) const
+{
+  sample = static_cast< CaloSampling::CaloSample >(hash & kSixBits);
+  eta = m_minEta + m_dEta * ((hash >>  6) & kTenBits);
+  phi = m_minPhi + m_dPhi * ((hash >> 16) & kTenBits);
+  return true;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/GridsHandler.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/GridsHandler.cxx
new file mode 100644
index 000000000000..d0b6b70a2d19
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/GridsHandler.cxx
@@ -0,0 +1,72 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigT2CaloJet/GridsHandler.h"
+
+#include "TrigT2CaloJet/HashedTrig3Momentum.h"
+
+#include <iostream>
+
+
+GridsHandler::GridsHandler()
+{
+  using namespace std;
+  vector< CaloSampling::CaloSample > samples;
+  vector< size_t > defaultSizes;
+  // need to ajust the default sizes? (granularity ~0.1)
+  samples.push_back(CaloSampling::PreSamplerB); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EMB1	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EMB2	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EMB3       ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::PreSamplerE); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EME1	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EME2	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::EME3       ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::HEC0	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::HEC1	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::HEC2	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::HEC3       ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileBar0   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileBar1   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileBar2   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileGap1   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileGap2   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileGap3   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileExt0   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileExt1   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::TileExt2   ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::FCAL0	     ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::FCAL1      ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::FCAL2      ); defaultSizes.push_back(128);
+  samples.push_back(CaloSampling::Unknown    ); defaultSizes.push_back(128);
+
+  for(unsigned int iS=0; iS<samples.size(); iS++){
+    CaloSampling::CaloSample &sample = samples[iS];
+    m_grids[sample] = vector< HashedTrig3Momentum >(0);
+    m_grids[sample].reserve(defaultSizes[iS]);
+  } // end for(iS)
+
+  copy(samples.begin(), samples.end(),
+       back_inserter< vector< CaloSampling::CaloSample> >(m_allSamples));
+}
+
+//------------------------------------------------
+void clearGrid(CsVmcPair &map){ map.second.clear(); }
+//------------------------------------------------
+void GridsHandler::clearAllGrids()
+{
+  std::for_each(m_grids.begin(), m_grids.end(), clearGrid);
+}
+
+//------------------------------------------------
+Vmc& GridsHandler::grid(const CaloSampling::CaloSample &sample)
+{
+  return m_grids[sample];
+}
+//------------------------------------------------
+void GridsHandler::appendAllGrids(Vt3m &output) const
+{
+  for(CsVmcMap::const_iterator it=m_grids.begin(); it != m_grids.end(); ++it)
+    output.insert(output.end(), it->second.begin(), it->second.end());
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/HashedTrig3Momentum.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/HashedTrig3Momentum.cxx
new file mode 100644
index 000000000000..c657566a7f5e
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/HashedTrig3Momentum.cxx
@@ -0,0 +1,55 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigT2CaloJet/HashedTrig3Momentum.h"
+
+#include <cmath> // fabs
+
+HashedTrig3Momentum::HashedTrig3Momentum() : Trig3Momentum(), m_hash(0) {}
+//------------------------------------------------
+HashedTrig3Momentum::HashedTrig3Momentum(const Trig3Momentum &t3m, const u_int &hash) :
+  Trig3Momentum(t3m), m_hash(hash)
+{
+}
+//------------------------------------------------
+void HashedTrig3Momentum::addE(const double &eta, const double &phi,
+			       const double &energy)
+{
+  //-dbg-using namespace std;
+  //-dbg-cout<<"adding ("<<eta<<", "<<phi<<", "<<energy<<") to "
+  //-dbg-    <<" ("<<eta_<<", "<<phi_<<", "<<ene_<<")"<<endl;
+  updateWeightedCoord(eta, phi, energy);
+  setE(e() + energy);
+  //-dbg-cout<<"now ("<<eta_<<", "<<phi_<<", "<<ene_<<")"<<endl;
+}
+//------------------------------------------------
+void HashedTrig3Momentum::reset()
+{
+  m_hash = 0;
+  setE(0.);
+  setEta(0.);
+  setPhi(0.);
+}
+//------------------------------------------------
+void HashedTrig3Momentum::addE(const Trig3Momentum &t3m)
+{
+  HashedTrig3Momentum::addE(t3m.eta(), t3m.phi(), t3m.e());
+}
+//------------------------------------------------
+void HashedTrig3Momentum::updateWeightedCoord(const double &etaVal,
+					      const double &phiVal,
+					      const double &energyVal)
+{
+  double weightOld(fabs(e())), weightNew(fabs(energyVal));
+  double weightTot(weightOld+weightNew);
+  if(weightTot==0.0){
+    setEta(0.5*(eta() + etaVal));
+    setPhi(0.5*(phi() + phiVal));
+  } else {
+    double invWeightTot = 1.0 / weightTot;
+    setEta((eta()*weightOld + etaVal*weightNew) * invWeightTot);
+    setPhi((phi()*weightOld + phiVal*weightNew) * invWeightTot);
+  }
+}
+//------------------------------------------------
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2AllRoiUnpacking.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2AllRoiUnpacking.cxx
new file mode 100644
index 000000000000..6b9f64dc7aec
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2AllRoiUnpacking.cxx
@@ -0,0 +1,496 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2AllRoiUnpacking.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/T2AllRoiUnpacking
+//
+// AUTHOR:   Davide Gerbaudo, gerbaudo@cern.ch
+//
+// Description: Unpack several L2 calorimeter ROIs and store them in a single output grid.
+//              Used T2L1Unpacking (by Matthew Tamsett) as a template for this AllTEAlgo.
+// ********************************************************************
+
+#include "TrigT2CaloJet/T2AllRoiUnpacking.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+#include <boost/assign/std/vector.hpp> // for 'operator+=()'
+#include <boost/foreach.hpp>
+
+#include <cmath>
+#include <algorithm>
+#include <iostream>
+#include <fstream>
+
+//--------------------------------------------------------------
+T2AllRoiUnpacking::T2AllRoiUnpacking(const std::string & name, ISvcLocator* pSvcLocator)
+  : HLT::AllTEAlgo(name, pSvcLocator),
+    kAllocatedGridCells_(8192),
+    m_jetOutputKey(""),
+    m_roiEtaHalfWidth(0.),
+    m_roiPhiHalfWidth(0.),
+    m_mergeEmCells(true),
+    m_tmpGrid(0),
+    m_ttEmSamplings(0),
+    m_ttHecSamplings(0),
+    m_tileSampling(0),
+    m_prepare(true),
+    m_tmm(),
+    m_caloGridFromCellsTool("T2CaloJetGridFromCells",0),
+    m_retrievedGridTool(false),
+    m_grid(0),
+    m_processedRegions(0),
+    m_overlapRegions(0),
+    m_log(0),
+    m_cell_unpacking_timer(0),
+    m_unpacking_timer(0),
+    m_RoI_timer(0),
+    m_merge_timer(0),
+    m_jet(0),
+    m_UnpckTime(0.),
+    m_cellUnpckTime(0.),
+    m_RoITime(0.),
+    m_mergeTime(0.)
+{
+  // unpacking tool
+  // configurables
+  declareProperty("GridFromCellsTool", m_caloGridFromCellsTool, "tool used to unpack the grid");
+  declareProperty("L2RoiEtaHalfWidth", m_roiEtaHalfWidth = 1.0, "half width in eta of the L2 ROI");
+  declareProperty("L2RoiPhiHalfWidth", m_roiPhiHalfWidth = 1.0, "half width in phi of the L2 ROI");
+  declareProperty("jetOutputKey",      m_jetOutputKey = "T2L1Towers");
+  declareProperty("MergeEmCells",      m_mergeEmCells = true, "whether EM cells shoud be merged");
+  // monitoring
+  declareMonitoredVariable("UnpckTime",      m_UnpckTime);
+  declareMonitoredVariable("CellUnpckTime",  m_cellUnpckTime);
+  declareMonitoredVariable("RoITime",        m_RoITime);
+  declareMonitoredVariable("MergeTime",      m_mergeTime);
+    
+}
+//--------------------------------------------------------------
+HLT::ErrorCode T2AllRoiUnpacking::hltInitialize() {
+  m_log = new MsgStream(msgSvc(), name());
+  MsgStream &logStream = *m_log;
+  
+  if(logStream.level() <= MSG::INFO)
+    logStream << MSG::INFO << " Initalizing FEX algorithm: " << name() << endmsg;
+
+  initializeTimers();    
+  initializeHelperTools();
+
+  return HLT::OK;
+}
+//--------------------------------------------------------------
+T2AllRoiUnpacking::~T2AllRoiUnpacking(){
+}
+
+/*
+// Just a functor that allows to use
+// T2AllRoiUnpacking::processTriggerElement within for_each
+// Right now I cannot use it because processTriggerElement is private.
+// Later on I will check whether it's safe to make it public...
+// DG Jan2012
+typedef std::vector<Trig3Momentum> Trig3MomentumVec;
+struct SingleTeProcessor :
+  public std::binary_function< T2AllRoiUnpacking, Trig3MomentumVec, HLT::ErrorCode> {
+  Trig3MomentumVec *grid_;
+  SingleTeProcessor(Trig3MomentumVec *grid):grid_(grid) {} ;
+  bool operator() (const T2AllRoiUnpacking &tu, const HLT::TriggerElement *te) {
+    return tu.processTriggerElement(te, grid_);
+  }
+};
+*/
+//--------------------------------------------------------------
+HLT::ErrorCode T2AllRoiUnpacking::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& tes_in,
+					     unsigned int type_out)
+{
+  MsgStream &logStream = *m_log;
+  // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+  beforeExecMonitors().ignore();
+  // setup what we need (variables and tools)
+  resetTimers();
+  if(!inputIsValid(tes_in)) return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+  
+  // if the input is valid, take _the_ TEVec and process it
+  const HLT::TEVec &tev = tes_in[0];
+  HLT::TriggerElement* outputTE(setupOutputTe(type_out));
+  if(m_unpacking_timer) m_unpacking_timer->start();
+  // N.B. the ownership of m_grid is passed on to m_jet, and then to outputTE (i.e. no need to delete) 
+  m_grid = new std::vector<Trig3Momentum>();
+  m_grid->reserve(kAllocatedGridCells_);
+  m_processedRegions.clear();
+  for(unsigned int iTe=0; iTe<tev.size(); iTe++){
+    const HLT::TriggerElement* inputTe = tev[iTe];
+    processTriggerElement(inputTe, m_grid);
+  } // end for(iTe)
+  if(m_unpacking_timer) m_unpacking_timer->stop();
+  logStream<<MSG::DEBUG
+	   <<"Processed "<<tev.size()<<" TriggerElements"
+	   <<" and filled the grid with "<<m_grid->size()<<" cells."
+	   <<endmsg;
+  // finalize the output and the monitoring variables
+  {
+    HLT::ErrorCode stat(finalizeOutput(outputTE));
+    if(stat!= HLT::OK) return stat;
+  }
+  finalizeAccessories();
+  // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+  afterExecMonitors().ignore();
+  return HLT::OK;
+}
+//--------------------------------------------------------------
+HLT::ErrorCode T2AllRoiUnpacking::hltFinalize()
+{
+  MsgStream &logStream = *m_log;
+    if ( logStream.level() <= MSG::DEBUG )
+        logStream << MSG::DEBUG << "Finalizing T2AllRoiUnpacking FEX " << name() << endmsg;
+
+    delete m_log;
+          
+    return HLT::OK;
+}
+//--------------------------------------------------------------
+HLT::ErrorCode T2AllRoiUnpacking::processTriggerElement(const HLT::TriggerElement *te,
+							std::vector<Trig3Momentum>* grid) {
+  MsgStream &logStream = *m_log;
+  // sanity check on inputs
+  if(!te || !grid){
+    logStream<<MSG::ERROR
+	     <<"Invalid TriggerElement ("<<te<<") or grid ("<<grid<<") pointers"
+	     <<endmsg;
+    return HLT::ERROR;
+  } // end if(!te || !grid)
+
+  // get the (eta,phi) rectangles and overlaps
+  const TrigRoiDescriptor* roiDescriptor = 0;
+  HLT::ErrorCode hltStatus = getFeature(te, roiDescriptor);
+  if(HLT::OK != hltStatus){
+    logStream<<MSG::ERROR
+	     <<" Failed to find RoiDescriptor "<<endmsg;
+    return hltStatus;
+  } // end if(not OK)
+  L2CaloRoiBoundsCalculator bcalc(roiDescriptor, m_roiEtaHalfWidth, m_roiPhiHalfWidth);
+  EtaPhiRectangle l2Roi(bcalc.etaMin(), bcalc.etaMax(),
+		       bcalc.phiMin(), bcalc.phiMax());
+
+  // determine overlaps and avoid these regions for this TE
+  m_overlapRegions.clear();
+  determineOverlaps(l2Roi);
+  m_caloGridFromCellsTool->setForbiddenRegions(m_overlapRegions);
+
+  // unpack (see T2CaloJetGridFromCells::addAllCells for the various bits)
+  if(m_cell_unpacking_timer) m_cell_unpacking_timer->start();
+  double etaMin(l2Roi.etaMin()), etaMax(l2Roi.etaMax());
+  double phiMin(l2Roi.phiMin()), phiMax(l2Roi.phiMax());
+
+  StatusCode sc = StatusCode::SUCCESS;
+  if(!m_mergeEmCells){
+    if(m_caloGridFromCellsTool->addAllCells(etaMin, etaMax,
+					    phiMin, phiMax,
+					    grid).isFailure())
+      sc = StatusCode::FAILURE;
+    
+  } // end if not merge EM
+  else {
+    // merge EM
+    if(m_merge_timer) m_merge_timer->start();
+    m_tmpGrid.clear();
+    BOOST_FOREACH(int sampling, m_ttEmSamplings){
+      if(m_caloGridFromCellsTool->addLArCells(etaMin, etaMax, phiMin, phiMax,
+					      &m_tmpGrid,
+					      TTEM,
+					      sampling, m_prepare).isFailure())
+	sc = StatusCode::FAILURE;
+    }
+    m_tmm.mergeCells(m_tmpGrid, *grid);
+    if(m_merge_timer) m_merge_timer->stop();
+    
+    // then just add HEC and Tile
+    BOOST_FOREACH(int sampling, m_ttHecSamplings){
+      if(m_caloGridFromCellsTool->addLArCells(etaMin, etaMax, phiMin, phiMax,
+					      grid,
+					      TTHEC,
+					      sampling, m_prepare).isFailure())
+	sc = StatusCode::FAILURE;
+    }
+    if(m_caloGridFromCellsTool->addTileCells(etaMin, etaMax, phiMin, phiMax,
+					     grid,
+					     TILE,
+					     m_tileSampling, m_prepare).isFailure())
+      sc = StatusCode::FAILURE;
+  } // end if(m_mergeEmCells)
+
+  if(m_cell_unpacking_timer) m_cell_unpacking_timer->stop();
+  if(sc.isFailure()){
+    if(logStream.level() <= MSG::DEBUG)
+      logStream<<MSG::DEBUG
+	       <<" Failure of addCells. Empty grid, or some missing cells! "<<endmsg;
+    return HLT::ERROR;
+  } // end if(isFailure)
+  m_processedRegions.push_back(l2Roi);
+  return HLT::OK;
+}
+//----------------------------------------------------------
+bool T2AllRoiUnpacking::initializeTimers(){
+  MsgStream &logStream = *m_log;
+  ITrigTimerSvc *pTimerService=0;
+  if( service( "TrigTimerSvc", pTimerService).isFailure()
+      || !pTimerService){
+    logStream<<MSG::ERROR
+	     <<name()<<": Unable to locate TrigTimer Service"
+	     <<endmsg;
+    return false;
+  }
+  logStream << MSG::DEBUG << " Adding timers" << endmsg;
+  //Add timers
+  m_cell_unpacking_timer = addTimer("cell_unpacking_time");
+  m_unpacking_timer    = addTimer("unpacking_time");
+  m_RoI_timer          = addTimer("RoI_time");
+  m_merge_timer        = addTimer("merge_time");
+  return true;
+}
+//--------------------------------------------------------------
+bool T2AllRoiUnpacking::initializeHelperTools(){
+  using namespace boost::assign;
+  MsgStream &logStream = *m_log;
+  if ( m_caloGridFromCellsTool.retrieve().isFailure() ) {
+    logStream << MSG::ERROR << "Failed to retreive CaloGridFromCells tool: " << m_caloGridFromCellsTool << endmsg;
+    m_retrievedGridTool = false;
+    return false;
+  }
+  m_retrievedGridTool = true;
+  logStream << MSG::DEBUG << "Retrieved " << m_caloGridFromCellsTool << endmsg;
+
+  // not strictly 'helpers' but have to be initialized too
+  m_ttEmSamplings += 0,1,2,3;
+  m_ttHecSamplings += 0,1,2;
+  m_tmpGrid.reserve(kAllocatedGridCells_);
+
+  return true;
+}
+//--------------------------------------------------------------
+void T2AllRoiUnpacking::resetTimers(){
+  if(m_cell_unpacking_timer) m_cell_unpacking_timer->reset();
+  if(m_unpacking_timer) m_unpacking_timer->reset();
+  if(m_RoI_timer) m_RoI_timer->reset();
+  if(m_merge_timer) m_merge_timer->reset();
+}
+//--------------------------------------------------------------
+bool T2AllRoiUnpacking::inputIsValid(const std::vector<std::vector<HLT::TriggerElement*> >& input) const {
+  MsgStream &logStream = *m_log;
+  if(logStream.level() <= MSG::DEBUG)
+    logStream<< MSG::DEBUG << "T2AllRoiUnpacking "<<name()<<"\n"
+	     <<input.size()<<" input trigger elements for T2AllRoiUnpacking"
+	     <<endmsg;
+  // sanity check on the input
+  if(1!=input.size()){
+    logStream<<MSG::ERROR<<"T2AllRoiUnpacking "<<name()<<"\n"
+	     <<"Error! expected only one vector<TriggerElement> as input,\n"
+	     <<" that should contain the L1 jets."
+	     <<" (got "<<input.size()<<" vectors instead)\n"
+	     <<"Exiting hltExecute."
+	     <<endmsg;
+    return false;
+  } // end if(1!=input.size())
+  return true;
+}
+//--------------------------------------------------------------
+HLT::TriggerElement* T2AllRoiUnpacking::setupOutputTe(unsigned int type_out) {
+  if(m_RoI_timer) m_RoI_timer->start();
+  HLT::TriggerElement* outputTE = addRoI(type_out, new TrigRoiDescriptor( true ) );
+  outputTE->setActiveState(true);
+  if(m_RoI_timer) m_RoI_timer->stop();
+  return outputTE;
+}
+//--------------------------------------------------------------
+void T2AllRoiUnpacking::storeTimers(){
+  if(m_cell_unpacking_timer) m_cellUnpckTime = m_cell_unpacking_timer->elapsed();
+  if(m_unpacking_timer) m_UnpckTime = m_unpacking_timer->elapsed();
+  if(m_RoI_timer) m_RoITime = m_RoI_timer->elapsed();
+  if(m_merge_timer) m_mergeTime = m_merge_timer->elapsed();
+}
+//--------------------------------------------------------------
+HLT::ErrorCode T2AllRoiUnpacking::finalizeOutput(HLT::TriggerElement* outputTE){
+  MsgStream &logStream = *m_log;
+  if(m_RoI_timer) m_RoI_timer->start();
+  // N.B. the ownership of m_jet is passed on to outputTE (i.e. no need to delete)
+  m_jet = new TrigT2Jet();
+  m_jet->setGrid(m_grid);
+  //HLT::ErrorCode stat = attachFeature(outputTE, outJets, m_jetOutputKey);
+  std::string key = "";
+  HLT::ErrorCode stat = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+  if (stat != HLT::OK){
+    logStream<<MSG::ERROR
+	     <<" recording of TrigT2Jets into StoreGate failed"
+	     <<endmsg;
+    return stat;
+  }
+  if(m_RoI_timer) m_RoI_timer->stop();
+  if(logStream.level() <= MSG::DEBUG)
+    logStream<<MSG::DEBUG
+	     <<" Unpacking done. "<<name()
+	     <<endmsg;
+  return stat;
+}
+//--------------------------------------------------------------
+void T2AllRoiUnpacking::finalizeAccessories(){
+  storeTimers();
+}
+//--------------------------------------------------------------
+
+void T2AllRoiUnpacking::determineOverlaps(const EtaPhiRectangle &l2Roi)
+{
+  for(unsigned int iR=0;
+      iR < m_processedRegions.size();
+      iR++){
+    const EtaPhiRectangle &previous = m_processedRegions[iR];
+    EtaPhiRectangle overlap(EtaPhiRectangle::overlappingRectangle(l2Roi,previous));
+    if (overlap.area()>0.) m_overlapRegions.push_back(overlap);
+  } // end for(iR)
+}
+//--------------------------------------------------------------
+
+// M_PI is defined in cmath.
+
+EtaPhiRectangle::EtaPhiRectangle(const double &etaMin, const double &etaMax,
+			       const double &phiMin, const double &phiMax){
+  m_etaMin = etaMin;
+  m_etaMax = etaMax;
+  m_phiMin = phiMin;
+  m_phiMax = phiMax;
+  m_wrapsAroundPi = std::abs(m_phiMax-m_phiMin) > M_PI;
+  computeCenterCoord();
+}
+//--------------------------------------------------------------
+bool EtaPhiRectangle::contains(const EtaPhiPoint &point) const {
+  return ((fabs(point.first - m_etaCen) < m_etaHw)
+	  && fabs(phi_mpi_pi(point.second - m_phiCen)) < m_phiHw);
+}
+//--------------------------------------------------------------
+void EtaPhiRectangle::computeCenterCoord(){
+  m_etaCen = 0.5*(m_etaMin + m_etaMax);
+  // this takes care of the 2pi wrap
+  m_phiCen = atan2(sin(m_phiMin) + sin(m_phiMax),
+		  cos(m_phiMin) + cos(m_phiMax));
+  m_etaHw = 0.5*fabs(m_etaMax - m_etaMin);
+  m_phiHw = 0.5*fabs(phi_mpi_pi(m_phiMax - m_phiMin));
+}
+//--------------------------------------------------------------
+double EtaPhiRectangle::phi_mpi_pi(const double &val) {
+  double value(val);
+  while(value <= -M_PI) value += 2.*M_PI;
+  while(value >  +M_PI) value -= 2.*M_PI;
+  return value;
+}
+//--------------------------------------------------------------
+double EtaPhiRectangle::phi_zero_2pi(const double &val) {
+  double value(val);
+  while(value <= 0.     ) value += 2.*M_PI;
+  while(value >  2.*M_PI) value -= 2.*M_PI;
+  return value;
+}
+//--------------------------------------------------------------
+double EtaPhiRectangle::overlappingArea(const EtaPhiRectangle &lhs,
+				       const EtaPhiRectangle &rhs) {
+  // this is duplicated...we should just use EtaPhiRectangle::overlappingRectangle().area()
+  double etaOverlap(0.), phiOverlap(0.);
+  double deltaEta12(fabs(lhs.eta() - rhs.eta()));
+  double totHalfEtaWidth(lhs.etaHalfWidth() + rhs.etaHalfWidth());
+  double deltaPhi12(fabs(phi_mpi_pi(lhs.phi() - rhs.phi())));
+  double totHalfPhiWidth(lhs.phiHalfWidth() + rhs.phiHalfWidth()); 
+  if (deltaEta12 < totHalfEtaWidth)
+    etaOverlap = totHalfEtaWidth - deltaEta12;
+  if (deltaPhi12 < totHalfPhiWidth)
+    phiOverlap = totHalfPhiWidth - deltaPhi12;
+  return etaOverlap * phiOverlap;
+}
+//--------------------------------------------------------------
+EtaPhiRectangle EtaPhiRectangle::overlappingRectangle(const EtaPhiRectangle &lhs,
+						    const EtaPhiRectangle &rhs) {
+  double etaOverlap(0.), phiOverlap(0.);
+  double deltaEta12(fabs(lhs.eta() - rhs.eta()));
+  double totHalfEtaWidth(lhs.etaHalfWidth() + rhs.etaHalfWidth());
+  double deltaPhi12(fabs(phi_mpi_pi(lhs.phi() - rhs.phi())));
+  double totHalfPhiWidth(lhs.phiHalfWidth() + rhs.phiHalfWidth());
+  if (deltaEta12 < totHalfEtaWidth)
+    etaOverlap = totHalfEtaWidth - deltaEta12;
+  if (deltaPhi12 < totHalfPhiWidth)
+    phiOverlap = totHalfPhiWidth - deltaPhi12;
+  double etaAvg(0.5*(lhs.eta() + rhs.eta()));
+  double phiAvg(atan2(sin(lhs.phi()) + sin(rhs.phi()),
+		      cos(lhs.phi()) + cos(rhs.phi())));
+  
+  EtaPhiRectangle res(etaAvg-0.5*etaOverlap, etaAvg+0.5*etaOverlap,
+		     phiAvg-0.5*phiOverlap, phiAvg+0.5*phiOverlap);
+  /*
+  using std::ofstream;
+  using std::endl;
+  ofstream outFile;
+  std::string fileName("overlap_check.txt");
+  string marker("");
+  if(res.area()>0.) marker = " <<<<<<<<<<<<< ";
+  outFile.open(fileName.c_str(), std::ios::app);
+  outFile<<"Checking the overlap between "<<endl
+	 <<lhs<<endl<<rhs
+	 <<" result: "<<res<<" (area "<<res.area()
+	 <<" = "
+	 <<2.0*res.etaHalfWidth()<<" x "
+	 <<2.0*res.phiHalfWidth()<<")"
+	 <<marker<<endl;
+  outFile.close();
+  */
+  return   res;
+}
+
+//--------------------------------------------------------------
+void EtaPhiRectangle::print(std::ostream& stream) const {
+  stream<<"eta ["<<m_etaMin<<", "<<m_etaMax<<"], phi ["<<m_phiMin<<", "<<m_phiMax<<"]";
+}
+//--------------------------------------------------------------
+std::ostream& operator<< (std::ostream& stream, const EtaPhiRectangle &epr) {
+  epr.print(stream);
+  return stream;
+}
+//--------------------------------------------------------------
+L2CaloRoiBoundsCalculator::L2CaloRoiBoundsCalculator(const TrigRoiDescriptor* trd,
+						     const double &etaHalfWidth,
+						     const double &phiHalfWidth):
+  m_etaMin(0.),
+  m_etaMax(0.),
+  m_phiMin(0.),
+  m_phiMax(0.),
+  m_roiEtaLimit(4.8),
+  m_fcalEtaMin(3.0),
+  m_fcalEtaMax(5.0),
+  m_minFcalEtaCenter(3.2) {
+  computeBounds(trd, etaHalfWidth, phiHalfWidth);
+}
+//--------------------------------------------------------------
+void L2CaloRoiBoundsCalculator::computeBounds(const TrigRoiDescriptor* trd,
+					      const double &etaHalfWidth,
+					      const double &phiHalfWidth) {
+  if(!trd){
+    std::cerr<<"L2CaloRoiBoundsCalculator::computeBounds: invalid TrigRoiDescriptor ptr"<<std::endl;
+    return;
+  }
+  // DG Jan2012: I don't know why here they used (0, 2pi]...keeping it just for consistency
+  m_etaMin = std::max(-1.0 * m_roiEtaLimit, trd->eta() - etaHalfWidth);
+  m_etaMax = std::min( 1.0 * m_roiEtaLimit, trd->eta() + etaHalfWidth);
+  m_phiMin = EtaPhiRectangle::phi_zero_2pi(trd->phi() - phiHalfWidth);
+  m_phiMax = EtaPhiRectangle::phi_zero_2pi(trd->phi() + phiHalfWidth);
+  //Look at RoIs in FCal
+  if(fabs(trd->eta()) > m_minFcalEtaCenter){
+    if(trd->eta() < -m_minFcalEtaCenter){
+      m_etaMin = -m_fcalEtaMax;
+      m_etaMax = -m_fcalEtaMin;
+    }
+    if(trd->eta() > +m_minFcalEtaCenter){
+      m_etaMin = m_fcalEtaMin;
+      m_etaMax = m_fcalEtaMax;
+    }
+  }
+}
+//--------------------------------------------------------------
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloFastJet.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloFastJet.cxx
new file mode 100644
index 000000000000..a85e73691fbd
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloFastJet.cxx
@@ -0,0 +1,824 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloFastJet.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett, tamsett@cern.ch
+//
+// Description: Level 2 FastJet FEX algorithm.
+// ********************************************************************
+#include "TrigT2CaloJet/T2CaloFastJet.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigCaloEvent/TrigT2JetContainer.h"
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+#include <algorithm>
+#include <iterator>
+
+T2CaloFastJet::T2CaloFastJet(const std::string & name, ISvcLocator* pSvcLocator)
+  : HLT::AllTEAlgo(name, pSvcLocator),
+    m_cellMinEnergy(0.),
+    m_tools(this),
+    m_pTimerService(0),
+    //m_total_timer(0),
+    m_unpack_timer(0),
+    m_fastjet_timer(0),
+    m_pu_subtraction_timer(0),
+    m_cleaning_timer(0),
+    m_calibration_timer(0),
+    m_RoI_timer(0),
+    m_jet_def(0),
+    m_cluster_sequence(0),
+    m_pu_cluster_sequence(0),
+    m_pu_area_cluster_sequence(0),
+    m_jet(0)
+{   
+    // configurables
+    declareProperty("jetInputKey",             m_jetInputKey  = "T2L1Towers");
+    declareProperty("jetOutputKey",            m_jetOutputKey = "TrigT2CaloJet");
+    declareProperty("distanceParameter",       m_distanceParameter = 0.4);
+    declareProperty("pTmin",                   m_pTmin = 10000.);
+    declareProperty("inputType",               m_inputType = 1);
+    declareProperty("outputType",              m_outputType = 1);
+    declareProperty("T2JetTools",              m_tools, "list of Jet tools");
+    declareProperty("cellMinEnergy", m_cellMinEnergy=0.0);
+    // cleaning:
+    declareProperty("doCleaning",              m_doCleaning = false);
+    declareProperty("doT2L1Cleaning",          m_doT2L1Cleaning = true);
+    declareProperty("cellQualityThresholdLAr", m_cellQualityThresholdLAr = 4000);  
+    declareProperty("leadingCellFraction",     m_leadingCellFraction = 0.9);  // for jet cleaning, e.g.: n90 -> leadingCellFraction = 0.9
+    // navigation
+    declareProperty("writeMultipleOutputTEs",  m_writeMultipleOutputTEs = false);
+    declareProperty("secondOutputType",        m_secondOutputType = 0); 
+    
+    // pileup subtraction
+    declareProperty("doPileupSubtraction",     m_doPileupSubtraction = false);
+    
+    // monitoring
+    //declareMonitoredVariable("OverallTime",    m_TotalTime);
+    declareMonitoredVariable("UnpackTime",     m_UnpackTime);
+    declareMonitoredVariable("FastJetTime",    m_FastJetTime);
+    declareMonitoredVariable("puSubTime",      m_puSubTime);
+    declareMonitoredVariable("CleaningTime",   m_CleaningTime);
+    declareMonitoredVariable("CalibrationTime",m_CalibrationTime);
+    declareMonitoredVariable("RoITime",        m_RoITime);
+    declareMonitoredVariable("nJets",          m_nJets);
+    declareMonitoredVariable("nGrid",          m_nGrid);
+    declareMonitoredStdContainer("Et",         m_et);
+    declareMonitoredStdContainer("EtEM",       m_et_em);
+    declareMonitoredStdContainer("EtHAD",      m_et_had);
+    declareMonitoredStdContainer("E",          m_e);
+    declareMonitoredStdContainer("EEM",        m_e_em);
+    declareMonitoredStdContainer("EHAD",       m_e_had);
+    declareMonitoredStdContainer("Eta",        m_eta);
+    declareMonitoredStdContainer("Phi",        m_phi);
+    declareMonitoredStdContainer("Emf",        m_em_frac);
+    declareMonitoredStdContainer("nLeadingTowers", m_nLeadingTowers);
+}
+
+HLT::ErrorCode T2CaloFastJet::hltInitialize()
+{
+    m_log = new MsgStream(msgSvc(), name());
+    
+    if((*m_log).level() <= MSG::INFO){
+        (*m_log) << MSG::INFO << " Initalizing FEX algorithm: " << name() << endmsg;
+        (*m_log) << MSG::DEBUG << "Options: " << endmsg;
+        (*m_log) << MSG::DEBUG << "   distanceParameter:       " << m_distanceParameter << endmsg;
+        (*m_log) << MSG::DEBUG << "   pTmin:                   " << m_pTmin << endmsg;
+        (*m_log) << MSG::DEBUG << "   doCleaning:              " << m_doCleaning << endmsg;
+        (*m_log) << MSG::DEBUG << "   doT2L1Cleaning:          " << m_doT2L1Cleaning << endmsg;
+        (*m_log) << MSG::DEBUG << "   leadingCellFraction:     " << m_leadingCellFraction << endmsg;
+        (*m_log) << MSG::DEBUG << "   cellQualityThresholdLAr: " << m_cellQualityThresholdLAr << endmsg;
+        (*m_log) << MSG::DEBUG << "   input type:              " << m_inputType << endmsg;
+        (*m_log) << MSG::DEBUG << "   output type:             " << m_outputType << endmsg;
+        (*m_log) << MSG::DEBUG << "   write multiple TEs:      " << m_writeMultipleOutputTEs << endmsg;
+        (*m_log) << MSG::DEBUG << "   secondary output type:   " << m_secondOutputType << endmsg;
+        (*m_log) << MSG::DEBUG << "   do pileup subtraction:   " << m_doPileupSubtraction << endmsg;
+        
+    }
+        
+    // initalise T2L1 helper tools
+    m_t2l1_tools = T2L1Tools();    
+    
+    // Create helper tools
+    if ( m_tools.retrieve().isFailure() ) {
+        (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_tools << endmsg;
+    } else {
+        (*m_log) << MSG::INFO << "Retrieved " << m_tools << endmsg;
+    }    
+    
+    // Initialize timing service
+    if( service( "TrigTimerSvc", m_pTimerService).isFailure() ) {
+        (*m_log) << MSG::WARNING << name() << ": Unable to locate TrigTimer Service" << endmsg;
+    } 
+    
+    if (m_pTimerService){
+        (*m_log) << MSG::DEBUG << "Adding timers" << endmsg;
+        //Add timers
+        //m_total_timer          = addTimer("total_time");
+        m_unpack_timer         = addTimer("unpack_time");
+        m_fastjet_timer        = addTimer("fastjet_time");
+        m_pu_subtraction_timer = addTimer("pu_subtraction_time");
+        m_cleaning_timer       = addTimer("cleaing_time");
+        m_calibration_timer    = addTimer("calibration_time");
+        m_RoI_timer            = addTimer("roi_time");
+    }    
+    
+    // initialise fast jet
+    m_particles.reserve(100);
+    m_constituents.reserve(100);
+    m_jets.reserve(100);
+    
+    (*m_log) << MSG::INFO << "Setting up fastjet jet definition" << endmsg;
+    m_jet_def = new fastjet::JetDefinition(fastjet::antikt_algorithm, m_distanceParameter); // this should be made configurable in the future
+    // dummy call to fast jet so it's internal initalize methods are set (and we don't print the banner during execute)
+    (*m_log) << MSG::INFO << "Making dummy call to fast jet cluster sequence" << endmsg;
+    m_particles.clear();
+    m_cluster_sequence = new fastjet::ClusterSequence(m_particles, *m_jet_def);
+    delete m_cluster_sequence;
+    // pileup subtraction
+    if (m_doPileupSubtraction) {
+        (*m_log) << MSG::INFO << "Setting up fastjet pileup subtraction" << endmsg;
+        // define the jet algorithm
+        double ktRadius(0.4);
+        m_pu_jet_def = new fastjet::JetDefinition(fastjet::kt_algorithm,ktRadius,fastjet::E_scheme,fastjet::Best);
+         // define jet area algorithm
+        m_pu_area_def = new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec(0.9));
+    }
+    
+    // cleaning
+    m_cellenergies.reserve(100);
+    
+    // monitored vectors
+    m_et.reserve(100);
+    m_et_em.reserve(100);
+    m_et_had.reserve(100);
+    m_e.reserve(100);
+    m_e_em.reserve(100);
+    m_e_had.reserve(100);
+    m_eta.reserve(100);
+    m_phi.reserve(100);
+    m_em_frac.reserve(100);
+    m_nLeadingTowers.reserve(100);
+    
+    return HLT::OK;
+}
+
+T2CaloFastJet::~T2CaloFastJet(){
+}
+
+
+HLT::ErrorCode T2CaloFastJet::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& tes_in,
+                                        unsigned int type_out)
+{
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    beforeExecMonitors().ignore();
+    
+    // ==== pre-execute setup
+    if(doTiming()) {
+        //m_total_timer->reset();
+        m_unpack_timer->reset();
+        m_fastjet_timer->reset();
+        m_pu_subtraction_timer->reset();
+        m_cleaning_timer->reset();
+        m_calibration_timer->reset();
+        m_RoI_timer->reset();
+        //m_total_timer->start();
+    }
+    m_particles.clear();
+    m_constituents.clear();
+    m_jets.clear();
+    m_nJets = -99;
+    m_nGrid = -99;
+    //m_TotalTime = -99;
+    m_UnpackTime = -99;
+    m_FastJetTime = -99;
+    m_CleaningTime = -99;
+    m_CalibrationTime = -99;
+    m_RoITime = -99;
+    m_et.clear();
+    m_et_em.clear();
+    m_et_had.clear();
+    m_e.clear();
+    m_e_em.clear();
+    m_e_had.clear();
+    m_eta.clear();
+    m_phi.clear();
+    m_em_frac.clear();
+    m_nLeadingTowers.clear();  
+    
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "================= Executing T2CaloFastJet FEX " << name() << endmsg;
+        
+    }
+#endif
+    
+    // === get the input particles
+    //HLT::TriggerElement* seednode(0);
+    const TrigT2Jet* inputGrid(0);
+    
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << tes_in.size() << " input TEs found" << endmsg;        
+    }
+#endif
+    // error check, we should only have a single input TE
+    if ( tes_in.size() != 1 ) {
+        msg() << MSG::WARNING << "Got more than one input TE" << endmsg;
+        afterExecMonitors().ignore();
+        return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,  HLT::Reason::USERDEF_1); 
+    }
+    
+    for ( unsigned type = 0; type < tes_in.size(); ++ type ) {
+        std::vector<HLT::TriggerElement*>& tes = tes_in.at(type);
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "  - TE[" << type << "]: " << tes.size() << " sub TEs found" << endmsg;        
+        }
+#endif
+        // error check, we should only have a single sub TE
+        if ( tes.size() != 1 ) {
+            msg() << MSG::WARNING << "Got more than one sub TE" << endmsg;
+            afterExecMonitors().ignore();
+            return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,  HLT::Reason::USERDEF_1); 
+        }
+    
+        for ( unsigned teIdx = 0; teIdx < tes.size(); ++teIdx ) {
+            HLT::ErrorCode ec = getFeature(tes.at(teIdx), inputGrid, m_jetInputKey);
+            //seednode = tes.at(teIdx);
+            if(ec!=HLT::OK) {
+                (*m_log) << MSG::WARNING << "Failed to get the input particles" << endmsg;
+                return ec;
+            }          
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "  - A total of " << inputGrid->grid()->size()  << " particles found in this TE" << endmsg;
+            }
+#endif
+        } // end of loop on sub TEs
+    } // end of loop on TEs
+    
+    const std::vector<Trig3Momentum>* grid = inputGrid->grid();
+    
+#ifndef NDEBUG
+   if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "A total of " << grid->size()  << " particles are to be clustered" << endmsg;
+    }
+#endif
+    
+    // === Unpack the grid
+    if(doTiming()) m_unpack_timer->start();
+    std::vector<Trig3Momentum>::const_iterator begin_grid, begin_grid_fixed, end_grid;
+    begin_grid = grid->begin();
+    begin_grid_fixed = grid->begin();
+    end_grid = grid->end();  
+    int jet_counter = 0; 
+    for (; begin_grid != end_grid; ++begin_grid){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){  
+            (*m_log) << MSG::DEBUG << "Trig3Momentum["  << jet_counter
+                                   << "]: Et: "         << begin_grid->e()/cosh(begin_grid->eta())
+                                   << " MeV, eta: "     << begin_grid->eta() 
+                                   << ", phi: "         << begin_grid->phi() 
+                                   << ", sampling: "    << std::hex << begin_grid->caloSample() << std::dec << endmsg;
+        }
+#endif
+        
+        // now fill fast jet particles
+        double energy(begin_grid->e());
+        if(energy<m_cellMinEnergy) continue;
+        double eta(begin_grid->eta());
+        double phi(begin_grid->phi());
+        double transverse_energy = energy/cosh(eta);
+        double px = transverse_energy*cos(phi);
+        double py = transverse_energy*sin(phi);
+        double pz = transverse_energy*sinh(eta);
+        
+        fastjet::PseudoJet pseudo_jet( px, py, pz, energy);
+        pseudo_jet.set_user_index(std::distance(begin_grid_fixed, begin_grid));
+        m_particles.push_back( pseudo_jet );
+        
+        jet_counter++;
+    }
+    m_nGrid = grid->size();
+    if(doTiming()) m_unpack_timer->stop();
+    
+    // === Run fast jet
+    if(doTiming()) m_fastjet_timer->start();
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG <<  "=== Performing jet finding " << endmsg;
+    }
+#endif        
+    // run the clustering, extract the jets
+    m_cluster_sequence = 0;   
+    m_pu_cluster_sequence = 0;     
+    if (m_doPileupSubtraction){           
+        m_pu_cluster_sequence = new fastjet::ClusterSequenceArea(m_particles, *m_jet_def, *m_pu_area_def);
+        m_jets = fastjet::sorted_by_pt(m_pu_cluster_sequence->inclusive_jets(m_pTmin)); // sorted by decreasing pt
+    } else {
+        m_cluster_sequence = new fastjet::ClusterSequence(m_particles, *m_jet_def);
+        m_jets = fastjet::sorted_by_pt(m_cluster_sequence->inclusive_jets(m_pTmin)); // sorted by decreasing pt
+    }
+    
+    //std::reverse(m_jets.begin(),m_jets.end());  // sorted by increasing pt
+    m_nJets = m_jets.size();
+    if(doTiming()) m_fastjet_timer->stop();
+    
+    // pileup subtraction
+    if(doTiming()) m_pu_subtraction_timer->start();
+    if (m_doPileupSubtraction){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG <<  "=== Performing pileup subtraction jet finding " << endmsg;
+        }
+#endif 
+        m_pu_area_cluster_sequence = 0;
+        m_pu_area_cluster_sequence = new fastjet::ClusterSequenceArea(m_particles, *m_pu_jet_def, *m_pu_area_def);
+        // get rho in central eta range
+        m_rho = 0.;
+        m_sigma = 0.;
+        m_area = 0.;
+        fastjet::RangeDefinition etaRange(-2.,2.);
+        m_pu_area_cluster_sequence->get_median_rho_and_sigma(etaRange,false,m_rho,m_sigma,m_area);
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG <<  "   completed pileup subtraction jet finding" << endmsg;
+            (*m_log) << MSG::DEBUG <<  "   median rho:   " << m_rho << endmsg;
+            (*m_log) << MSG::DEBUG <<  "   median sigma: " << m_sigma << endmsg;
+            (*m_log) << MSG::DEBUG <<  "   area:         " << m_area << endmsg;
+            
+        }
+#endif 
+    }
+    if(doTiming()) m_pu_subtraction_timer->pause();
+    
+    // === Store output
+    if(doTiming()) m_RoI_timer->start();
+    std::string key = "";
+    HLT::TriggerElement* outputTE = 0;
+    if (!m_writeMultipleOutputTEs){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG <<  "Writing all jets to a single output TE" << endmsg;
+        }
+#endif
+        outputTE = addRoI(type_out, new TrigRoiDescriptor(true)); // make a single output TE
+        outputTE->setActiveState(true);
+    } else {
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG <<  "Writing each jet to it's own output TE" << endmsg;
+        }
+#endif
+    }
+    int recorded_jet_counter = 0;
+    
+    
+    
+    // inspect the output jets, compute some cleaning variables then store
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG <<  "Found "<< m_jets.size() << " jets " << endmsg;
+        if (m_jets.size()) (*m_log) << MSG::DEBUG <<  "== Resultant jets " << endmsg;
+    }
+#endif
+    for (unsigned i = 0; i < m_jets.size(); ++i) {
+        if (m_doPileupSubtraction){
+            m_constituents = fastjet::sorted_by_pt(m_pu_cluster_sequence->constituents(m_jets[i]));
+        } else {
+            m_constituents = fastjet::sorted_by_pt(m_cluster_sequence->constituents(m_jets[i]));
+        }
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+           (*m_log) << MSG::DEBUG << "  fastjet jet [" << i 
+                    << "]: Et: "            << m_jets[i].e()/cosh(m_jets[i].eta()) 
+                    << " MeV, eta: "        << m_jets[i].eta() 
+                    << ", phi: "            << m_jets[i].phi_std() 
+                    << ", rapidity: "       << m_jets[i].rapidity() 
+                    << ", n consituents: "  << m_constituents.size() << endmsg;
+        }
+#endif
+        // === pileup subtraction
+        if(doTiming()) m_pu_subtraction_timer->resume();
+        double et_offset = 0.;
+        double e_offset = 0.;
+        if (m_doPileupSubtraction){
+            double jet_area = m_pu_cluster_sequence->area(m_jets[i]);
+            et_offset = jet_area * m_rho;
+            e_offset = et_offset * cosh(m_jets[i].eta());
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG << "    - area: " << jet_area << ", offset (median m_rho * m_area): " << et_offset << endmsg;
+               (*m_log) << MSG::DEBUG << "    - offset ET: " << (m_jets[i].e()/cosh(m_jets[i].eta())) - et_offset << ", e: " << m_jets[i].e()-e_offset << endmsg;
+               
+            }
+#endif
+        }
+        if(doTiming()) m_pu_subtraction_timer->stop();
+        // === cleaning 
+        if(doTiming()) m_cleaning_timer->start();
+        // taken from Tobias' L2 cleaning code in T2CaloJetConeTool
+        // initialize cleaning variables
+        int nLeadingCells = 0.;     // number of leading cells
+        double em_energy = 0.;        // EM energy
+        double had_energy = 0.;       // hadronic energy
+        double emf = -9.;             // fraction of jet energy in emc
+        double hecf = -9.;            // fraction of jet energy in hec
+        float jetQuality = -9.;      // quality of the jet
+        float jetTimeCells = -9.;    // jet time calculated from cells
+  
+        // helper functions / variables for cleaning:
+        m_cellenergies.clear();
+        float HECEnergy = 0.;
+        float EinBadCells = 0.;
+        bool isTile = false;
+        bool isLAr = false;
+        bool qualityTimeIsDefined = false;
+        float totaltime = 0.;
+        float norm = 0.;
+        float cellNorm = 0.;
+        float totCellE = 0.;     // sum of energy in LAr cells with quality defined
+        double eTot=0, eta=0, phi=0, tmpE=0, eThresh=0, tmpPhi=0;
+        double tmpdPhi=0, dphi=0;
+        
+        if (m_doCleaning) {
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG  << "  Computing cleaning variables "<< endmsg;
+            }
+#endif
+            for (unsigned ii = 0; ii < m_constituents.size(); ++ii){
+                int grid_id = m_constituents[ii].user_index();
+                Trig3Momentum grid_element = grid->at(grid_id);
+#ifndef NDEBUG
+                if((*m_log).level() <= MSG::DEBUG){
+                    (*m_log) << MSG::DEBUG << "    - Constituent["<< ii
+                                           << "], grid id["     << grid_id
+                                           << "]: Et: "         << grid_element.e()/cosh(grid_element.eta())
+                                           << " MeV, eta: "     << grid_element.eta() 
+                                           << ", phi: "         << grid_element.phi() 
+                                           << ", sampling: "    << std::hex << grid_element.caloSample() << std::dec << endmsg;
+                    if (!m_doT2L1Cleaning){
+                        (*m_log) << MSG::DEBUG << "        provenance: " << grid_element.provenance()
+                                               << ", quality: "          << grid_element.quality()
+                                               << ", time: "             << grid_element.time() << endmsg;
+                    }
+                }
+#endif
+                // reset flags:
+                isTile = false;
+                isLAr = false;
+                
+                tmpE = grid_element.e();    
+                eTot += tmpE;     // maybe this should be Et weighted  
+                
+                // Summ contribution to hadronic/EM energy:  
+                const CaloSampling::CaloSample s = grid_element.caloSample();
+                if( s == CaloSampling::PreSamplerB || s == CaloSampling::PreSamplerE || 
+                    s == CaloSampling::EMB1 || s == CaloSampling::EME1 || 
+                    s == CaloSampling::EMB2 || s == CaloSampling::EME2 || 
+                    s == CaloSampling::EMB3 || s == CaloSampling::EME3 ||
+                    s == CaloSampling::FCAL0){
+                    em_energy += tmpE;
+                    isLAr = true;  // for cleaning
+                }
+                if( s == CaloSampling::HEC0 || s ==  CaloSampling::HEC1|| 
+                    s == CaloSampling::HEC2 || s == CaloSampling::HEC3 || 
+                    s == CaloSampling::TileBar0 || s == CaloSampling::TileExt0 || 
+                    s == CaloSampling::TileBar1 || s == CaloSampling::TileExt1 || 
+                    s == CaloSampling::TileBar2 || s == CaloSampling::TileExt2 || 
+                    s == CaloSampling::TileGap1 || s == CaloSampling::TileGap2 || 
+                    s == CaloSampling::TileGap3 || s == CaloSampling::FCAL1 || 
+                    s == CaloSampling::FCAL2)
+                    had_energy += tmpE;
+                
+                if (tmpE>0){ // threshold from job options?
+                    eThresh += tmpE;    
+                    eta += tmpE*grid_element.eta();
+                    tmpPhi = grid_element.phi();      
+                    
+                    tmpdPhi = tmpPhi - m_jets[i].phi_std();   // w.r.t Jet
+                    if (tmpdPhi > M_PI) tmpdPhi -= 2*M_PI;    
+                    if (tmpdPhi < -1*M_PI) tmpdPhi += 2*M_PI; 
+                    
+                    dphi += tmpE*tmpdPhi; // this needs the wrap-around check
+                
+                }
+                
+                // cleaning:
+                m_cellenergies.push_back( tmpE );
+                if(	s == CaloSampling::HEC0 || s == CaloSampling::HEC1 || 
+                    s == CaloSampling::HEC2 || s == CaloSampling::HEC3 ) {
+                    HECEnergy += tmpE;
+                    isLAr = true;
+                }
+                if( s == CaloSampling::FCAL1 || s == CaloSampling::FCAL2 ){
+                    isLAr = true;
+                }
+                if( s == CaloSampling::TileBar0 || s == CaloSampling::TileBar1 || 
+                    s == CaloSampling::TileBar2 || s == CaloSampling::TileGap1 ||
+                    s == CaloSampling::TileGap2 || s == CaloSampling::TileGap3 || 
+                    s == CaloSampling::TileExt0 || s == CaloSampling::TileExt1 || 
+                    s == CaloSampling::TileExt2 ) {
+                    isTile = true;
+                }
+                
+                if (!m_doT2L1Cleaning){
+                    uint16_t cellprovenance = grid_element.provenance();
+                    // grab cell quality and cell time.
+                    uint16_t cellquality =  grid_element.quality();
+                    float celltime = grid_element.time();
+                    qualityTimeIsDefined = false;
+                    
+                    // check for tile
+                    if(isTile){
+                        // cells with bad quality are masked -> don't take tile into account
+                        //   for jet quality calculation.
+                        // provenance not set for tile cells. but time is defined.
+                        // timing:
+                        cellNorm = tmpE * tmpE;
+                        totaltime += cellNorm * celltime;
+                        norm += cellNorm;
+                    }
+                    // check for LAr. only take cells into accout which have time and quality defined
+                    if( (isLAr) && (cellprovenance & 0x2000) ){
+                        qualityTimeIsDefined = true;
+                        totCellE += tmpE;
+                        // timing:
+                        cellNorm = tmpE * tmpE;
+                        totaltime += cellNorm * celltime;
+                        norm += cellNorm;
+                    }
+                            
+                    if( (isLAr) && (qualityTimeIsDefined) && (cellquality > m_cellQualityThresholdLAr) ){
+                        EinBadCells += tmpE;
+                    }
+                } // end of non L1.5 cleaning
+            } // end loop over constituents 
+            
+            // calculate the jet cleaning variables:
+            // -------------------------------------
+            if(eThresh != 0) {
+                eta /= eThresh;
+                phi = dphi/eThresh + m_jets[i].phi_std(); // recover absolute value
+                
+                // phi must be between -pi and pi :
+                if(phi > M_PI) phi -= 2.0* M_PI;
+                if(phi < -1.0*M_PI) phi += 2.0*M_PI;
+            }         
+            // sort cell-energy vector. (most energetic cell at end of vector)
+            std::sort(m_cellenergies.begin(), m_cellenergies.end());
+            float sumE = 0.;
+            for(int k = m_cellenergies.size()-1; k > -1; k--){
+                sumE += m_cellenergies[k];
+                nLeadingCells++;
+                if(sumE > m_leadingCellFraction*eTot){
+                    break;
+                }
+            }
+                        
+            float DELTA = 0.001;     // distance to compare floats
+            if(fabs(eTot)>DELTA){
+                hecf = HECEnergy/eTot;
+                emf = em_energy/eTot;
+            }
+            if (!m_doT2L1Cleaning){
+                if(fabs(totCellE)>DELTA){
+                    jetQuality = EinBadCells/totCellE;
+                }
+                if(fabs(norm)>DELTA){
+                    jetTimeCells = totaltime/norm;
+                }  
+            }
+            
+            // === cleaning completed
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "  - EM energy [MeV]:  " << em_energy  << ", (ET: " << em_energy/cosh(m_jets[i].eta())  << ")" << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - HAD energy [MeV]: " << had_energy << ", (ET: " << had_energy/cosh(m_jets[i].eta()) << ")" << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - n leading cells:  " << nLeadingCells << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - EM fraction:      " << emf << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - HEC fraction:     " << hecf << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - Jet quality:      " << jetQuality << endmsg;
+                (*m_log) << MSG::DEBUG  << "  - Jet time:         " << jetTimeCells << endmsg;
+            }
+#endif
+
+        } // end of cleaning
+        if(doTiming()) m_cleaning_timer->stop();
+        // Set properties
+        m_jet = new TrigT2Jet();
+        if (m_doPileupSubtraction){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG)
+                (*m_log) << MSG::DEBUG  << "  Recording with offset energy" << endmsg;
+#endif
+            m_jet->setE(m_jets[i].e() - e_offset);
+        } else {
+            m_jet->setE(m_jets[i].e());
+        }
+        m_jet->setEta(m_jets[i].eta());
+        m_jet->setPhi(m_jets[i].phi_std());  
+        m_jet->setEem0(em_energy);
+        m_jet->setEhad0(had_energy);
+        // cleaning:
+        m_jet->setNLeadingCells(nLeadingCells);
+        m_jet->setHecf(hecf);
+        m_jet->setJetQuality(jetQuality);
+        m_jet->setEmf(emf);
+        m_jet->setJetTimeCells(jetTimeCells);     
+        // RoI word
+        m_jet->set_RoIword(m_t2l1_tools.BLANKWORD+m_t2l1_tools.SET_INPUT*m_inputType+m_t2l1_tools.SET_OUTPUT*m_outputType+i);
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG)
+            (*m_log) << MSG::DEBUG  << "  RoI word set to: " << m_jet->RoIword() << endmsg;
+#endif
+
+        // === calibration 
+        if(doTiming()) m_calibration_timer->start();
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+           (*m_log) << MSG::DEBUG  << "  " << m_tools.size() << " calibration tools to be run"<< endmsg;
+           
+        }
+#endif
+        // do loop over tools
+        ToolHandleArray< T2CaloJetBaseTool >::iterator it = m_tools.begin(),
+        itToolEnd = m_tools.end();
+        int current=1;
+        for (; it != itToolEnd; ++it) {
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG  << "  Executing tool [" << current << "]"<< endmsg;
+            }
+#endif
+            if ((*it)->execute(m_jet, TrigRoiDescriptor(true), caloDDENull ).isFailure()){    // the zeros are the unused eta phi coordinates used by many base tools to define the RoI region
+                msg() << MSG::WARNING << "T2CaloFastJet AlgToolJets returned Failure" << endmsg;
+                return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+            }
+            current++;
+        }
+        
+#ifndef NDEBUG
+        if( (m_tools.size()>0) && ((*m_log).level() <= MSG::DEBUG) ){
+           (*m_log) << MSG::DEBUG << "  calibrated jet [" << i 
+                    << "]: Et: "            << m_jet->et()
+                    << " MeV, eta: "        << m_jet->eta() 
+                    << ", phi: "            << m_jet->phi() 
+                    << endmsg;
+        }
+#endif
+        if(doTiming()) m_calibration_timer->stop();
+        // === monitor
+        m_et.push_back( m_jet->et()); 
+        m_et_em.push_back( (m_jet->eem0()/cosh(m_jet->eta()))); 
+        m_et_had.push_back( (m_jet->ehad0()/cosh(m_jet->eta()))); 
+        m_e.push_back( m_jet->e()); 
+        m_e_em.push_back( m_jet->eem0()); 
+        m_e_had.push_back( m_jet->ehad0()); 
+        m_eta.push_back( m_jet->eta() ); 
+        m_phi.push_back( m_jet->phi() );
+        m_em_frac.push_back( m_jet->emf() ); 
+        m_nLeadingTowers.push_back( m_jet->nLeadingCells() );
+          
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "  recording T2CaloJet["<<recorded_jet_counter<<"]"<<endmsg;
+        }
+#endif
+        if (m_writeMultipleOutputTEs){
+            unsigned int secondary_roi_word = m_jet->RoIword();
+            if (m_secondOutputType != 0){
+                secondary_roi_word = m_t2l1_tools.BLANKWORD+m_t2l1_tools.SET_INPUT*m_outputType+m_t2l1_tools.SET_OUTPUT*m_secondOutputType+i;
+            } 
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG << "  preparing an output TE, using RoI word: " << secondary_roi_word <<endmsg;
+            }
+#endif
+            // addRoI implementation
+            //outputTE = addRoI(type_out, m_jet->eta(), m_jet->phi()); // make an output TE
+            // alternative implementation
+            //outputTE = config()->getNavigation()->addNode(seednode,type_out);
+            //outputTE->setActiveState(true);
+            HLT::TriggerElement* initialTE = config()->getNavigation()->getInitialNode();
+            outputTE = config()->getNavigation()->addNode(initialTE,type_out);
+            outputTE->setActiveState(true);
+            
+            // setup a trig RoI descriptor
+            unsigned int dummy_l1id = -9; // NO NO!!! THE L1ID IS AN UNSIGNED INT!!!!
+            int dummy_id = -9;            // NO NO!!! THE ID IS AN UNSIGNED INT!!!!
+            TrigRoiDescriptor* newRoiDescriptor = 
+	      new TrigRoiDescriptor(unsigned(secondary_roi_word), unsigned(dummy_l1id), unsigned(dummy_id), 
+				    m_jet->eta(), m_jet->eta(), m_jet->eta(),
+				    m_jet->phi(), m_jet->phi(), m_jet->phi()
+				    );
+	    /// HOW BIG IS THE ROI ???
+            HLT::ErrorCode hltStatus = attachFeature(outputTE, newRoiDescriptor, m_jetOutputKey);            
+            if ( hltStatus != HLT::OK ) {
+                (*m_log) << MSG::ERROR << "recording of RoiDescriptor into StoreGate failed" << endmsg;
+                return hltStatus;
+            }
+
+            
+            hltStatus = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+            if (hltStatus != HLT::OK){
+                (*m_log) << MSG::ERROR << "recording of TrigT2Jet into StoreGate failed" << endmsg;
+                return hltStatus;
+            }
+        } else {
+            HLT::ErrorCode hltStatus = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+            if (hltStatus != HLT::OK){
+                (*m_log) << MSG::ERROR << "recording of TrigT2Jet into StoreGate failed" << endmsg;
+                return hltStatus;
+            }
+        }
+        
+  
+        recorded_jet_counter++;
+    }        
+  
+    m_RoI_timer->stop();
+    
+    
+    // === post-execute admin
+    if (m_doPileupSubtraction){
+        delete m_pu_cluster_sequence; 
+        delete m_pu_area_cluster_sequence; 
+    } else {
+        delete m_cluster_sequence; 
+    }
+    if(doTiming()) {
+        //m_total_timer->stop();
+        m_UnpackTime = m_unpack_timer->elapsed();
+        m_FastJetTime = m_fastjet_timer->elapsed();
+        m_puSubTime = m_pu_subtraction_timer->elapsed();
+        m_CleaningTime = m_cleaning_timer->elapsed();
+        m_CalibrationTime = m_calibration_timer->elapsed();
+        m_RoITime = m_RoI_timer->elapsed();
+        //m_TotalTime = m_total_timer->elapsed();    
+    
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Unpacking completed in      "     << m_unpack_timer->elapsed()         << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "FastJet completed in        "     << m_fastjet_timer->elapsed()        << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "PU subtraction completed in "     << m_pu_subtraction_timer->elapsed() << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "Cleaning completed in       "     << m_cleaning_timer->elapsed()       << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "Calibration completed in    "     << m_calibration_timer->elapsed()    << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "RoI making completed in     "     << m_RoI_timer->elapsed()            << " ms " << endmsg;
+            //(*m_log) << MSG::DEBUG << "T2CaloFastJet completed in  "     << m_total_timer->elapsed()          << " ms " << endmsg;
+        }
+#endif
+    }
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG) (*m_log) << MSG::DEBUG << "================= Finished T2CaloFastJet " << name() << endmsg;
+#endif
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    afterExecMonitors().ignore();
+    
+    return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloFastJet::hltFinalize()
+{
+    if ( (*m_log).level() <= MSG::DEBUG )
+        (*m_log) << MSG::DEBUG << "Finalizing T2CaloFastJet FEX " << name() << endmsg;
+    
+    delete m_log;
+    m_particles.clear();
+    m_jets.clear();
+    m_constituents.clear();
+    m_et.clear();
+    m_et_em.clear();
+    m_et_had.clear();
+    m_e.clear();
+    m_e_em.clear();
+    m_e_had.clear();
+    m_eta.clear();
+    m_phi.clear();
+    m_em_frac.clear();
+    m_nLeadingTowers.clear();
+    
+    if ( bool(m_jet_def) ){
+        delete m_jet_def;
+    }
+    
+    if (m_doPileupSubtraction){
+        delete m_pu_jet_def;
+        delete m_pu_area_def;
+    }
+    
+          
+    return HLT::OK;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJet.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJet.cxx
new file mode 100755
index 000000000000..7185627e56ea
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJet.cxx
@@ -0,0 +1,491 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloJet.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Kyle Cranmer
+// ********************************************************************
+
+
+#include "GaudiKernel/IToolSvc.h"
+//#include "GaudiKernel/StatusCode.h"
+
+//#include "TrigT1Interfaces/RecEmTauRoI.h"
+#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "TrigT2CaloJet/T2CaloJet.h"
+
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigCaloEvent/TrigT2JetContainer.h"
+
+#include "CaloGeoHelpers/CaloSampling.h"
+
+#include "TrigT2CaloCommon/phiutils.h"
+
+#include <math.h>
+
+class ISvcLocator;
+
+T2CaloJet::T2CaloJet(const std::string & name, ISvcLocator* pSvcLocator)
+  : T2CaloBase(name, pSvcLocator),
+    m_jet(0),
+    m_layerInfo(0),
+    m_tools(this),
+    m_clearJetGrid(true),
+    m_fillLayerInfo(false),
+    m_timeLArUnpck(0),
+    m_timeTileUnpck(0),
+    m_timeHECUnpck(0)
+
+{
+  declareProperty("jetOutputKey",m_jetOutputKey = "TrigT2CaloJet");
+  declareProperty("clusterOutputKey",m_clusterOutputKey = "TrigT2Calo");
+  //  declareProperty("T2JetTools", m_toolNames);
+  declareProperty("T2JetTools", m_tools, "list of Jet tools");
+  declareProperty("clearJetGrid",m_clearJetGrid = true);
+  declareProperty("fillLayerInfo",m_fillLayerInfo = false);
+  declareProperty("PhiIDWidth", m_phiIDWidth);
+  declareProperty("EtaIDWidth", m_etaIDWidth);
+
+  declareMonitoredVariable("dR",  m_dR);
+  declareMonitoredVariable("E",   m_e);
+  declareMonitoredVariable("Et",  m_et);
+  declareMonitoredVariable("Eem", m_eem0);
+  declareMonitoredVariable("Ehad",m_ehad0);
+  declareMonitoredVariable("Etem", m_etem0);
+  declareMonitoredVariable("Ethad",m_ethad0);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+  declareMonitoredVariable("ConversionErrors", m_conversionError);
+  declareMonitoredVariable("AlgorithmErrors", m_algorithmError);
+  m_roiEtaLimit = 4.8;
+}
+
+HLT::ErrorCode T2CaloJet::hltInitialize()
+{
+
+  if (timerSvc()) {
+    m_timer.push_back(addTimer("TimeTot"));
+  }
+
+  // Create helper tools
+  if ( m_tools.retrieve().isFailure() ) {
+    msg() << MSG::ERROR << "Failed to retreive helper tools: " << m_tools << endmsg;
+  } else {
+    msg() << MSG::INFO << "Retrieved " << m_tools << endmsg;
+  }
+
+  if (timerSvc()) {
+    ToolHandleArray< T2CaloJetBaseTool >::iterator itTool = m_tools.begin(),
+      itToolEnd = m_tools.end();
+    for (  ; itTool != itToolEnd; ++itTool ) {
+
+      if(msgLvl() <= MSG::DEBUG)
+	msg() << MSG::DEBUG <<"Tool with name " << (*itTool).name()<< endmsg;
+
+      m_timer.push_back(addTimer((*itTool).name()));
+
+      if(((*itTool).name() == "T2CaloJetGridFromCells")||((*itTool).name() == "T2CaloJetGridFromFEBHeader")){
+
+	m_timeLArUnpck = (*itTool)->getTimer("LArUnpck");
+	if(m_timeLArUnpck !=0){
+	  declareMonitoredObject("LArUnpck",m_timeLArUnpck, 
+				 &TrigTimer::lastElapsed);
+	  if(msgLvl() <= MSG::DEBUG)
+	    msg() << MSG::DEBUG << "Found LArUnpck timer. Added to monitoring "
+		  << endmsg;
+	}
+	
+	m_timeHECUnpck = (*itTool)->getTimer("HECUnpck");
+	if(m_timeHECUnpck !=0){
+	  declareMonitoredObject("HECUnpck",m_timeHECUnpck, 
+				 &TrigTimer::lastElapsed);
+	  if(msgLvl() <= MSG::DEBUG)
+	    msg() << MSG::DEBUG << "Found HECUnpck timer. Added to monitoring "
+		  << endmsg;
+	}
+
+	m_timeTileUnpck = (*itTool)->getTimer("TileUnpck");
+	if(m_timeTileUnpck !=0){
+	  declareMonitoredObject("TileUnpck",m_timeTileUnpck, 
+				 &TrigTimer::lastElapsed);
+	  if(msgLvl() <= MSG::DEBUG)
+	    msg() << MSG::DEBUG << "Found HECUnpck timer. Added to monitoring "
+		  << endmsg;
+	}
+      }
+    }
+  }
+
+
+  return HLT::OK;
+}
+
+T2CaloJet::~T2CaloJet(){
+}
+
+HLT::ErrorCode T2CaloJet::hltExecute(const HLT::TriggerElement* inputTE,
+				     HLT::TriggerElement* outputTE)
+{
+
+  if(timerSvc()) m_timer[0]->start();
+
+  m_dR = -99;
+  m_e = -99;
+  m_et = -99;
+  m_eem0 = -99;
+  m_ehad0 = -99;
+  m_etem0 = -99;
+  m_ethad0 = -99;
+  m_eta = -99;
+  m_phi = -99;
+  m_conversionError=0;
+  m_algorithmError=0;
+
+  // Retrieve store.
+  // Very important!
+  //  m_storeGate = getStore(); // not needed anymore
+
+  if(msgLvl() <= MSG::DEBUG)
+     msg() << MSG::DEBUG << "in execute()" << endmsg;
+
+  // Some debug output:
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG
+	  << "outputTE->getId(): "
+	  << outputTE->getId()
+	  << endmsg;
+
+    msg() << MSG::DEBUG
+	  << "inputTE->getId(): "
+	  << inputTE->getId()
+	  << endmsg;
+  }
+  // Note: new TriggerElement has no label() anymore !
+
+
+  // =========================
+  //       retrieve RoI:
+  // =========================
+  const IRoiDescriptor* roiDescriptor = 0;
+  HLT::ErrorCode hltStatus;
+
+  const TrigRoiDescriptor* trigRoiDescriptor = 0;
+  hltStatus = getFeature(inputTE, trigRoiDescriptor);
+  roiDescriptor = trigRoiDescriptor;
+
+
+  if ( hltStatus == HLT::OK ) {
+    if(msgLvl() <= MSG::DEBUG)
+      msg() << MSG::DEBUG  << *roiDescriptor << endmsg;
+    
+  } else {
+    msg() <<  MSG::WARNING << " Failed to find RoiDescriptor " << endmsg;
+    return hltStatus;
+  }
+
+  // Some debug output:
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG  << "Message to count events. LVL1 phi="
+	  << roiDescriptor->phi()
+	  << " & LVL1 eta="
+	  << roiDescriptor->eta()
+	  << endmsg;
+  }
+
+  /*** obsolete 
+  // setup ROI bounds
+  double etamin = std::max(-1.0 * m_roiEtaLimit, roiDescriptor->eta0() - m_etaWidth);
+  double etamax = std::min( 1.0 * m_roiEtaLimit, roiDescriptor->eta0() + m_etaWidth);
+  double phimin = roiDescriptor->phi() - m_phiWidth;
+  double phimax = roiDescriptor->phi() + m_phiWidth;
+  while (phimin < 0) phimin += 2. * M_PI;
+  while (phimax > 2 * M_PI) phimax -= 2. * M_PI;
+
+
+
+  //Look at RoIs in FCal - to what end ??
+  if(fabs(roiDescriptor->eta())>3.2){
+    if(roiDescriptor->eta()<-3.2){
+      etamin = -m_fcalEtaMax;
+      etamax = -m_fcalEtaMin;
+    }
+    if(roiDescriptor->eta()>3.2){
+      etamin = m_fcalEtaMin;
+      etamax = m_fcalEtaMax;
+    }
+  }
+
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG  << " etamin = "<< etamin << endmsg;
+    msg() << MSG::DEBUG  << " etamax = "<< etamax << endmsg;
+    msg() << MSG::DEBUG  << " phimin = "<< phimin << endmsg;
+    msg() << MSG::DEBUG  << " phimax = "<< phimax << endmsg;
+  }
+
+  ***/
+
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG  << " roi = "<< *roiDescriptor << endmsg;
+  }
+
+  // =========================
+  //       make Jet
+  // =========================
+  //  if(status) status = makeJet(outputTE);
+
+  if(msgLvl() <= MSG::DEBUG)
+     msg() << MSG::DEBUG  << " Making TrigT2Jet "<< endmsg;
+
+  m_jet = new TrigT2Jet();
+
+  // jetContainer was only retrieved from StoreGate ... but never used
+  //TrigT2JetContainer* jetContainer;
+
+/*
+  StatusCode sc;
+
+  if(!getStore()->transientContains<TrigT2JetContainer>(m_jetOutputKey)) {
+    if(msgLvl() <= MSG::DEBUG){
+       msg() << MSG::DEBUG
+           <<" Create jetObjectMinimal container"
+           <<endmsg;
+    }
+    jetContainer = new TrigT2JetContainer();
+    sc = m_storeGate->record(jetContainer,m_jetOutputKey);
+
+    if (sc.isFailure())
+    {
+       msg() << MSG::ERROR
+           << "Could not record TrigT2JetContainer in TDS"
+           << endmsg;
+    }
+  }
+  else{
+      sc = m_storeGate->retrieve(jetContainer,m_jetOutputKey);
+      if(sc.isFailure()){
+       msg() << MSG::ERROR
+           << "Could not retrieve TrigT2JetContainer " << m_jetOutputKey
+           << "from SG. Exiting..."
+           << endmsg;
+       return false;
+      }
+  }
+*/
+  //jetContainer->push_back(m_jet);
+
+
+  // Add RoI word to Jet
+  m_jet->set_RoIword(roiDescriptor->roiWord());
+
+  // Set eta,phi
+  m_jet->setEta(roiDescriptor->eta());
+  m_jet->setPhi(roiDescriptor->phi());
+
+
+  // do loop over tools
+  ToolHandleArray< T2CaloJetBaseTool >::iterator it = m_tools.begin(),
+    itToolEnd = m_tools.end();
+  int courant=1;
+  uint32_t error = 0;
+  for (  ; it != itToolEnd; ++it ) {
+    if (timerSvc()) m_timer[courant]->start();
+    ///    if ((*it)->execute(m_jet, etamin, etamax, phimin, phimax).isFailure()){
+    if ((*it)->execute(m_jet, *roiDescriptor, caloDDENull ).isFailure()){
+      msg() << MSG::WARNING << "T2CaloJet AlgToolJets returned Failure" << endmsg;
+      return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+    }
+    uint32_t in_error = (*it)->report_error();
+    if ( 0x0FFFFFFF & in_error ) m_conversionError++;
+    if ( 0xF0000000 & in_error ) m_algorithmError++;
+    error|=in_error;
+    if (timerSvc()) m_timer[courant]->stop();
+    courant++;
+  }
+
+  if(msgLvl() <= MSG::DEBUG){
+     msg() << MSG::DEBUG << " Values of T2CaloJet produced: " << endmsg;
+     msg() << MSG::DEBUG << " REGTEST: Jet eta = " << m_jet->eta() << endmsg;
+     msg() << MSG::DEBUG << " REGTEST: Jet phi = " << m_jet->phi() << endmsg;
+     msg() << MSG::DEBUG << " REGTEST: Jet energy = " << m_jet->e() << endmsg;
+  }
+
+
+  double phia=roiDescriptor->phi();
+  if(phia>M_PI) phia=phia-2*M_PI;
+
+  double phib=m_jet->phi();
+  if(phib>M_PI) phib=phib-2*M_PI;
+
+  double dphi= phia-phib;
+  if(dphi>M_PI) dphi-=2*M_PI;
+  if(dphi<-M_PI) dphi+=2*M_PI;
+
+  m_dR = sqrt( (roiDescriptor->eta()-m_jet->eta())*(roiDescriptor->eta()-m_jet->eta()) + dphi*dphi );
+  
+  m_e = m_jet->e();
+  m_eta = m_jet->eta();
+  m_phi = m_jet->phi();
+  
+  m_ehad0 = m_jet->ehad0();
+  m_ethad0 = m_ehad0/cosh(m_eta);
+
+  m_eem0 = m_jet->eem0();
+  m_etem0 = m_eem0/cosh(m_eta);
+  
+  m_et = m_e/cosh(m_eta);
+
+  // should probably set the delete the jet's vector of Trig3Momentum
+  // here, and set pointer to 0.
+
+  //   std::string jetKey = key2keyStore::getKey(m_jet);
+  //   sc = m_storeGate->record( m_jet, jetKey, false, false );
+  //   if (sc.isFailure()){
+  //     msg() << MSG::ERROR << "Record of individual T2CaloJet into StoreGate failed" << endmsg;
+  //     return false;
+  //   };
+
+  std::string key = "";
+
+  hltStatus = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+  if (hltStatus != HLT::OK) {
+    if(msgLvl() <= MSG::DEBUG) {
+      msg() << MSG::ERROR << "Write of TrigT2Jet into outputTE failed"
+	    << endmsg;
+    }
+    return hltStatus;
+  }
+
+  // =========================
+  //   make TrigCaloCluster
+  // =========================
+
+  if(msgLvl() <= MSG::DEBUG){
+     msg() << MSG::DEBUG << "fillLayerInfo is set to "<< m_fillLayerInfo << endmsg;
+  }
+
+  if (m_fillLayerInfo) {
+    if(msgLvl() <= MSG::DEBUG){
+       msg() << MSG::DEBUG << "Making TrigCaloCluster "<< endmsg;
+    }
+    m_layerInfo = new TrigCaloCluster();
+
+    std::vector<Trig3Momentum>::iterator gridIt = m_jet->grid()->begin();
+    std::vector<Trig3Momentum>::iterator gridEnd = m_jet->grid()->end();
+    int nCells = 0;
+    double eLayer[CaloSampling::Unknown+1] = {0.0};//0 is CaloSampling::PreSamplerB, 24 is CaloSampling::Unknown
+
+    // Loop in the jet cells:
+    for (; gridIt != gridEnd; ++gridIt){
+      // consider only cells that are used in the cone:
+      if(! (*gridIt).inCone()) continue;
+      nCells++;
+      // get layer energy
+      const CaloSampling::CaloSample s = (*gridIt).caloSample();
+      double cellE = (*gridIt).e();  
+      eLayer[s] = eLayer[s] + cellE; 
+    }
+
+    // fill TrigCaloCluster
+    m_layerInfo->setRawEnergy(m_jet->eem0()+m_jet->ehad0());
+    m_layerInfo->setRawEt((m_jet->eem0()+m_jet->ehad0())/cosh(m_jet->eta()));
+    m_layerInfo->setRawEta(m_jet->eta());
+    m_layerInfo->setRawPhi(m_jet->phi());
+    m_layerInfo->setRoIword(m_jet->RoIword());
+    m_layerInfo->setNCells(nCells);
+    for (int iSample=CaloSampling::PreSamplerB; iSample<CaloSampling::Unknown; ++iSample){
+      const CaloSampling::CaloSample s = static_cast<CaloSampling::CaloSample> (iSample);
+      m_layerInfo->setRawEnergy(s,eLayer[s]);
+    }
+ 
+    if(msgLvl() <= MSG::DEBUG){
+      msg() << MSG::DEBUG << " Values of TrigCaloCluster produced: " << endmsg;
+      msg() << MSG::DEBUG << " REGTEST: Cluster raw eta = " << m_layerInfo->rawEta() << endmsg;
+      msg() << MSG::DEBUG << " REGTEST: Cluster raw phi = " << m_layerInfo->rawPhi() << endmsg;
+      msg() << MSG::DEBUG << " REGTEST: Cluster raw energy = " << m_layerInfo->rawEnergy() << endmsg;
+      msg() << MSG::DEBUG << " REGTEST: Cluster nb. of cells = " << m_layerInfo->nCells() << endmsg;
+      double totalE=0;
+      for (int iSample=CaloSampling::PreSamplerB; iSample<=CaloSampling::Unknown; ++iSample){
+        const CaloSampling::CaloSample s = static_cast<CaloSampling::CaloSample> (iSample);
+        double layerE=m_layerInfo->rawEnergy(s);
+        totalE=totalE+layerE;
+        msg() << MSG::DEBUG << " REGTEST: Layer = " << iSample << " raw energy = " << layerE;
+      }
+      msg() << MSG::DEBUG << " REGTEST: Total = " << totalE << endmsg;
+    }
+
+    // attach TrigCaloCluster
+    hltStatus = recordAndAttachFeature(outputTE, m_layerInfo, key, m_clusterOutputKey);
+    if (hltStatus != HLT::OK) {
+      if(msgLvl() <= MSG::DEBUG) {
+        msg() << MSG::ERROR << "Write of TrigCaloCluster into outputTE failed"
+	      << endmsg;
+      }
+      return hltStatus;
+    }
+  }
+
+  // =========================
+  //       make OutputTE
+  // =========================
+
+  // Create a new RoiDescriptor with updated eta and phi.
+  // Note that the steering will propagate l1Id and roiId automatically
+  // so no need to set them.
+  // How big is the RoI ?????
+  TrigRoiDescriptor* newRoiDescriptor =
+    //new TrigRoiDescriptor(roiDescriptor->l1Id(), roiDescriptor->roiId(),
+    //		      m_jet->eta(), m_jet->phi());
+    new TrigRoiDescriptor(roiDescriptor->roiWord(), roiDescriptor->l1Id(), roiDescriptor->roiId(),
+			  m_jet->eta(), m_jet->eta()-m_etaIDWidth, m_jet->eta()+m_etaIDWidth,
+			  m_jet->phi(), 
+			  HLT::wrap_phi(m_jet->phi()-m_phiIDWidth), 
+			  HLT::wrap_phi(m_jet->phi()+m_phiIDWidth) ); 
+			  // We forward the roiWord to the EF (??)
+
+
+  hltStatus = attachFeature(outputTE, newRoiDescriptor, m_jetOutputKey);
+
+  if ( hltStatus != HLT::OK ) {
+    msg() << MSG::ERROR << "Write of update TrigRoiDescriptor into outputTE failed"
+	  << endmsg;
+    return hltStatus;
+  }
+
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG  << "Recorded an RoiDescriptor " << *newRoiDescriptor << endmsg;
+  }
+
+  // Some debug output:
+  if(msgLvl() <= MSG::DEBUG) {
+    msg() << MSG::DEBUG
+	  << "We assume success, set TE with Id "
+	  << outputTE->getId()
+	  << " active to signal positive result."
+	  << endmsg;
+  }
+
+
+  if(m_clearJetGrid) m_jet->clearGrid();
+
+  if (timerSvc()) {
+    m_timer[0]->stop();
+  }  
+
+  return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloJet::hltFinalize()
+{
+  if ( msgLvl() <= MSG::INFO )
+    msg() << MSG::INFO << "in finalize()" << endmsg;
+
+  return HLT::OK;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetBaseTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetBaseTool.cxx
new file mode 100755
index 000000000000..3d1d006a8f64
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetBaseTool.cxx
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetBaseTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE:  Base Tool for all T2CaloJet tools that require
+          an T2CaloJet object as its input.  The derived
+          tool must implement an execute(T2CaloJet*) method.
+
+********************************************************************/
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+T2CaloJetBaseTool::T2CaloJetBaseTool(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  IAlgToolCalo(type, name, parent)
+{
+    declareInterface<T2CaloJetBaseTool>( this );
+}
+
+
+T2CaloJetBaseTool::~T2CaloJetBaseTool()
+{
+}
+
+StatusCode T2CaloJetBaseTool::initialize()
+{
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetBaseTool::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+//StatusCode T2CaloJetBaseTool::execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax)
+// StatusCode T2CaloJetBaseTool::execute(TrigT2Jet* /*jet*/,double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/)
+StatusCode T2CaloJetBaseTool::execute(TrigT2Jet* /* jet */, const IRoiDescriptor& /* roi */,
+			       const CaloDetDescrElement*& /*caloDDE*/ )
+{
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2CaloJetBaseTool::finalize()
+{
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetCalibTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetCalibTool.cxx
new file mode 100755
index 000000000000..837153a85eac
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetCalibTool.cxx
@@ -0,0 +1,422 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetCalibTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Patricia Conde Muino <Patricia.Conde.Muino@cern.ch>
+          Nuno Anjos <Nuno.Anjos@cern.ch>
+CREATED:  May 2006
+
+PURPOSE: Calibration tool for LVL2 jets.
+
+********************************************************************/
+#include "TrigT2CaloJet/T2CaloJetCalibTool.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "CaloGeoHelpers/CaloSampling.h"
+#include "AthenaKernel/Timeout.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+//-----------------------------------------------------------------
+//  Constructor
+//-----------------------------------------------------------------
+T2CaloJetCalibTool::T2CaloJetCalibTool(const std::string& type,
+				       const std::string& name,
+				       const IInterface* parent):
+  T2CaloJetBaseTool(type, name, parent),
+  m_log(NULL),
+  m_outputLevel(0),
+  m_t2JetCalibTool ("T2JetCalibTool",this),
+  m_t2JetCorrToolTile1  ("T2JetCorrToolTile1" ,this),
+  m_t2JetCorrToolFcal1  ("T2JetCorrToolFcal1" ,this),
+  m_t2JetCorrToolEm3Bar ("T2JetCorrToolEm3Bar",this),
+  m_t2JetCorrToolHec0   ("T2JetCorrToolHec0"  ,this),
+  m_t2JetCorrToolEm3Fwd ("T2JetCorrToolEm3Fwd",this),
+  m_t2JetCorrToolPsBar  ("T2JetCorrToolPsBar" ,this)//,m_layer_info(0)
+{  
+  declareProperty("useFebJets",          m_useFEBJets      = false);
+//declareProperty("fillLayerInfo",       m_fillLayerInfo   = false);
+  declareProperty("doJetCalib",          m_doJetCalib      = false);
+  declareProperty("doJetCorrTile1",      m_doJetCorrTile1  = false);
+  declareProperty("doJetCorrFcal1",      m_doJetCorrFcal1  = false);
+  declareProperty("doJetCorrEm3Bar",     m_doJetCorrEm3Bar = false);
+  declareProperty("doJetCorrHec0",       m_doJetCorrHec0   = false);
+  declareProperty("doJetCorrEm3Fwd",     m_doJetCorrEm3Fwd = false);
+  declareProperty("doJetCorrPsBar",      m_doJetCorrPsBar  = false);
+  declareProperty("T2JetCalibTool",      m_t2JetCalibTool, "Tool for L2 jet trigger Jet calibration");
+  declareProperty("T2JetCorrToolTile1",  m_t2JetCorrToolTile1 , "Tool for L2 jet trigger Tile1 corr");
+  declareProperty("T2JetCorrToolFcal1",  m_t2JetCorrToolFcal1 , "Tool for L2 jet trigger Fcal1 corr");
+  declareProperty("T2JetCorrToolEm3Bar", m_t2JetCorrToolEm3Bar, "Tool for L2 jet trigger Em3Bar corr");
+  declareProperty("T2JetCorrToolHec0",   m_t2JetCorrToolHec0  , "Tool for L2 jet trigger Hec0 corr");
+  declareProperty("T2JetCorrToolEm3Fwd", m_t2JetCorrToolEm3Fwd, "Tool for L2 jet trigger Em3Fwd corr");
+  declareProperty("T2JetCorrToolPsBar",  m_t2JetCorrToolPsBar , "Tool for L2 jet trigger PsBar corr");
+}
+
+//-----------------------------------------------------------------
+//  Destructor
+//-----------------------------------------------------------------
+T2CaloJetCalibTool::~T2CaloJetCalibTool() 
+{
+}
+
+//-----------------------------------------------------------------
+//  Initialize:
+//-----------------------------------------------------------------
+StatusCode T2CaloJetCalibTool::initialize() 
+{
+
+  m_log = new MsgStream (msgSvc(), name());
+  m_outputLevel = msgSvc()->outputLevel( name() );
+  if(m_outputLevel <= MSG::DEBUG)
+     (*m_log) << MSG::DEBUG << "  In initalize() " << endmsg;
+
+  StatusCode sc;
+  // Retrieve the jet calibration tool:
+  ATH_CHECK( m_t2JetCalibTool.retrieve(      DisableTool {!m_doJetCalib}  ));
+  
+  // Retrieve the layer correction tools:
+  ATH_CHECK( m_t2JetCorrToolTile1.retrieve(  DisableTool {!m_doJetCorrTile1} ));
+  ATH_CHECK( m_t2JetCorrToolFcal1.retrieve(  DisableTool {!m_doJetCorrFcal1} ));
+  ATH_CHECK( m_t2JetCorrToolEm3Bar.retrieve( DisableTool {!m_doJetCorrEm3Bar} ));
+  ATH_CHECK( m_t2JetCorrToolHec0.retrieve(   DisableTool {!m_doJetCorrHec0} ));
+  ATH_CHECK( m_t2JetCorrToolEm3Fwd.retrieve( DisableTool {!m_doJetCorrEm3Fwd} ));
+  ATH_CHECK( m_t2JetCorrToolPsBar.retrieve(  DisableTool {!m_doJetCorrPsBar} ));
+
+  // from IAlgToolCalo
+  m_geometryTool.disable();
+  m_data.disable();
+
+//  if (m_fillLayerInfo) {
+//    m_layer_info = new TrigCaloCluster(); 
+//  }
+
+  return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Execute
+//-----------------------------------------------------------------
+StatusCode T2CaloJetCalibTool::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+//-----------------------------------------------------------------
+//  Finalize:
+//-----------------------------------------------------------------
+StatusCode T2CaloJetCalibTool::finalize()
+{
+  delete m_log;
+
+//  if (m_fillLayerInfo) {
+//    delete m_layer_info;
+//  }
+
+  return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Execute method of the tool. Apply energy correction to the jet.
+//-----------------------------------------------------------------
+StatusCode T2CaloJetCalibTool::execute(TrigT2Jet* jet, double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/)
+{
+  // reset error
+  m_error = 0x0;
+
+
+  // Calculate Hadronic and Electromagnetic transverse energies:
+//  double HadEn = 0, EMEn = 0;
+  double EMEn = jet->eem0();
+  double HadEn = jet->ehad0();
+  double jeta=jet->eta();
+//  sc = calculateHadEMEnergy(jet, &HadEn, &EMEn);
+//  if(sc.isFailure()){
+//    (*m_log) << MSG::WARNING << "It seems that the Had/EM energy was not properly calculated!" << endmsg;
+//  }
+//
+//  if(m_outputLevel <= MSG::DEBUG){
+//    (*m_log) << MSG::DEBUG << " EM, Had energy components: " << EMEn << ", " 
+//             << HadEn << endmsg; 
+//  }
+
+  // Apply the calibration:
+  double corrEnergy=0;
+  if(m_doJetCalib){
+    if(!m_useFEBJets){
+      corrEnergy = m_t2JetCalibTool->c_energy(EMEn, HadEn, jeta);
+    } else {
+      corrEnergy = m_t2JetCalibTool->c_febenergy(EMEn, HadEn, jeta);
+    }
+
+    if(corrEnergy == 0 || corrEnergy!=corrEnergy){//corrEnergy!=corrEnergy checks for nan
+      if(m_outputLevel <= MSG::DEBUG){
+         (*m_log) << MSG::DEBUG 
+                  << " JES Calibration failed. Jet energy is left uncalibrated: "
+                  << endmsg;
+      }
+      corrEnergy = EMEn+HadEn ;
+    } 
+  } else {
+    if(m_outputLevel <= MSG::DEBUG){
+         (*m_log) << MSG::DEBUG 
+                  << " Calibration not applied. Jet energy is left uncalibrated: "
+                  << endmsg;
+    }
+    corrEnergy = EMEn+HadEn ;
+  } 
+
+  // Compute layer fractions:
+  double fTile1=0, fFcal1=0, fEm3=0, fHec0=0, fPs=0;
+  if( m_doJetCorrTile1  || 
+      m_doJetCorrHec0   || 
+      m_doJetCorrEm3Fwd || 
+      m_doJetCorrFcal1  || 
+      m_doJetCorrEm3Bar || 
+      m_doJetCorrPsBar//|| m_fillLayerInfo
+    ) {
+    if (calculateLayerFracs(jet, &fTile1, &fFcal1, &fEm3, &fHec0, &fPs).isFailure()){
+      (*m_log) << MSG::WARNING << "Layer Fractions not properly calculated!" << endmsg;
+    }
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << " Uncorr Jet E = " <<  EMEn+HadEn
+                             << " Tile1 fraction = " << fTile1 
+                             << " Fcal1 fraction = " << fFcal1
+                             << " Em3 fraction = " << fEm3 
+                             << " Hec0 fraction = " << fHec0
+                             << " Ps fraction = " << fPs   
+                             << " Jet E before layer corr = " << corrEnergy << endmsg; 
+    }
+  }
+
+  // Apply layer corrections:
+  double response=1;
+  if(m_doJetCorrTile1) {
+    response = m_t2JetCorrToolTile1->c_energy(fTile1, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "Tile1 response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+  if(m_doJetCorrHec0) {
+    response = m_t2JetCorrToolHec0->c_energy(fHec0, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "Hec0 response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+  if(m_doJetCorrEm3Fwd) {
+    response = m_t2JetCorrToolEm3Fwd->c_energy(fEm3, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "Em3Fwd response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+  if(m_doJetCorrFcal1) {
+    response = m_t2JetCorrToolFcal1->c_energy(fFcal1, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "Fcal1 response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+  if(m_doJetCorrEm3Bar) {
+    response = m_t2JetCorrToolEm3Bar->c_energy(fEm3, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "Em3Bar response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+  if(m_doJetCorrPsBar) {
+    response = m_t2JetCorrToolPsBar->c_energy(fPs, corrEnergy, jeta);
+    if(response != 0 && response != 1 && response==response) corrEnergy = corrEnergy/response;
+    if(m_outputLevel <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "PsBar response = " << response 
+                             << " corrected E = " << corrEnergy << endmsg; 
+    }
+  }
+
+
+  // Set jet energy:
+  jet->setE(corrEnergy);
+
+  if(m_outputLevel <= MSG::DEBUG){
+    (*m_log) << MSG::DEBUG << " Uncorrected E = " << EMEn+HadEn << ", Fully corrected E = " 
+             << corrEnergy << ", eta = " << jet->eta() << endmsg; 
+  }
+
+  if ( Athena::Timeout::instance().reached() ) {
+       (*m_log) << MSG::ERROR << "Timeout reached in T2CaloJetCalibTool" << endmsg;
+       return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+//---------------------------------------------------------------
+//  Calculate layer fractions of the jet energy:
+//---------------------------------------------------------------
+StatusCode T2CaloJetCalibTool::calculateLayerFracs(TrigT2Jet* jet, double *fTile1, double *fFcal1, double *fEm3, double *fHec0, double *fPs)
+{
+
+   // Loop in the jet cells:
+
+  std::vector<Trig3Momentum>::iterator gridIt = jet->grid()->begin();
+  std::vector<Trig3Momentum>::iterator gridEnd = jet->grid()->end();
+
+  double eTile1=0, eFcal1=0, eEm3=0, eHec0=0, ePs= 0;
+  int nCells = 0;
+
+  for (; gridIt != gridEnd; ++gridIt){
+
+     // consider only cells that are used in the cone:
+    if(! (*gridIt).inCone()) continue;
+    nCells++;
+
+    const CaloSampling::CaloSample s = (*gridIt).caloSample();
+    double cellE = (*gridIt).e();  
+
+//    if (m_fillLayerInfo) {
+//      m_layer_info->setRawEnergy(s,cellE);
+//    }
+
+    switch ( s ) {
+      case CaloSampling::PreSamplerB:
+      case CaloSampling::PreSamplerE:
+         ePs += cellE;
+         break;
+      case CaloSampling::EMB3:
+      case CaloSampling::EME3:
+         eEm3 += cellE;
+         break;
+      case CaloSampling::FCAL0:
+         eFcal1 += cellE;
+         break;
+      case CaloSampling::HEC0:
+         eHec0 += cellE;
+         break;
+      case CaloSampling::TileBar0:
+      case CaloSampling::TileExt0:
+         eTile1 += cellE;
+         break;
+      default:
+         /* do nothing */
+         break;
+
+      }// end switch - Jet Sampling Layers
+
+
+  } // End of loop in cells;
+
+//  if (m_fillLayerInfo) {
+//    m_layer_info->setRawEnergy(jet->eem0()+jet->ehad0());
+//    m_layer_info->setRawEt((jet->eem0()+jet->ehad0())/cosh(jet->eta()));
+//    m_layer_info->setRawEta(jet->eta());
+//    m_layer_info->setRawPhi(jet->phi());
+//    m_layer_info->setRoIword(jet->RoIword());
+//    m_layer_info->setNCells(nCells);
+//  }
+
+  if ((jet->eem0()+jet->ehad0())!=0){
+    (*fTile1) = eTile1/(jet->eem0()+jet->ehad0());
+    (*fFcal1) = eFcal1/(jet->eem0()+jet->ehad0());
+    (*fEm3)   = eEm3  /(jet->eem0()+jet->ehad0());
+    (*fHec0)  = eHec0 /(jet->eem0()+jet->ehad0());
+    (*fPs)    = ePs   /(jet->eem0()+jet->ehad0());
+  } else {
+    (*fTile1) = 0;
+    (*fFcal1) = 0;
+    (*fEm3)   = 0;
+    (*fHec0)  = 0;
+    (*fPs)    = 0;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+//---------------------------------------------------------------
+//  Calculate hadronic/Electromagnetic component of the jet energy:
+//---------------------------------------------------------------
+/*StatusCode T2CaloJetCalibTool::calculateHadEMEnergy(TrigT2Jet* jet, double *HadEnergy, double * EMEnergy)
+{
+
+   // Loop in the jet cells:
+
+  std::vector<Trig3Momentum>::iterator gridIt = jet->grid()->begin();
+  std::vector<Trig3Momentum>::iterator gridEnd = jet->grid()->end();
+
+  (*HadEnergy) = 0;
+  (*EMEnergy) = 0;
+  for (; gridIt != gridEnd; ++gridIt){
+
+     // consider only cells that are used in the cone:
+    if(! (*gridIt).inCone()) continue;
+
+    const CaloSampling::CaloSample s = (*gridIt).caloSample();
+    double cellE = (*gridIt).e();  
+
+    switch ( s ) {
+      case CaloSampling::PreSamplerB:
+      case CaloSampling::PreSamplerE:
+      case CaloSampling::EMB1:
+      case CaloSampling::EMB2:
+      case CaloSampling::EMB3:
+      case CaloSampling::EME1:
+      case CaloSampling::EME2:
+      case CaloSampling::EME3:
+         (*EMEnergy) += cellE;
+         break;
+      case CaloSampling::HEC0:
+      case CaloSampling::HEC1:
+      case CaloSampling::HEC2:
+      case CaloSampling::HEC3:
+      case CaloSampling::TileBar0:
+      case CaloSampling::TileBar1:
+      case CaloSampling::TileBar2:
+      case CaloSampling::TileExt0:
+      case CaloSampling::TileExt1:
+      case CaloSampling::TileExt2:
+      case CaloSampling::TileGap1:
+      case CaloSampling::TileGap2:
+      case CaloSampling::TileGap3:
+      case CaloSampling::FCAL0:
+      case CaloSampling::FCAL1:
+      case CaloSampling::FCAL2:
+         (*HadEnergy) += cellE;
+         break;
+      case CaloSampling::Unknown:
+        (*m_log) << MSG::WARNING
+             << "Unknown CaloCell type "
+             << s
+             << endmsg;
+        break;
+
+      }// end switch - Jet Sampling Layers
+
+
+  } // End of loop in cells;
+
+
+   // Cross check that everything went fine:
+//
+//  double eSum = (*HadEnergy)+(*EMEnergy);
+//  if( eSum != jet->e()){ 
+//
+//    (*m_log) << MSG::WARNING << " HadEnergy+EMEnergy != jet->e() !!! HadEnergy, EMEnergy, eSum, jetEnergy =" 
+//             << (*HadEnergy) << ", " << (*EMEnergy) << ", " << eSum << ", " << jet->e() << endmsg;
+//    std::cout << eSum << ", " << jet->e() << std::endl;
+//    return StatusCode::FAILURE;
+//  }
+//
+
+  return StatusCode::SUCCESS;
+}
+*/
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetConeTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetConeTool.cxx
new file mode 100755
index 000000000000..3970145a250c
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetConeTool.cxx
@@ -0,0 +1,352 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetConeTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Cone Tool for all T2CaloJet.  Does simple cone alg after data
+         preparation.
+
+********************************************************************/
+#include <math.h>
+#include "TrigT2CaloJet/T2CaloJetConeTool.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+#include "AthenaKernel/Timeout.h"
+
+#include <sstream>
+
+
+T2CaloJetConeTool::T2CaloJetConeTool(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  T2CaloJetBaseTool(type, name, parent),
+  m_inCone(0),
+  m_outCone(0),
+  m_totalCell(0),
+  m_pTimerService(NULL),
+  m_fcal_timer(NULL),
+  m_other_timer(NULL)
+{  
+  declareProperty("numberOfIterations", m_nIterations = 1);
+  declareProperty("coneRadius", m_coneRadius = 0.7);
+  declareProperty("coneFJRadius", m_fj_cone_sizes);
+  // cleaning:
+  declareProperty("cellQualityThresholdLAr", m_cellQualityThresholdLAr = 4000);   // for jet cleaning
+  declareProperty("leadingCellFraction", m_leadingCellFraction = 0.9);            // for jet cleaning, e.g.: n90 -> leadingCellFraction = 0.9
+}
+
+T2CaloJetConeTool::~T2CaloJetConeTool() 
+{
+}
+
+StatusCode T2CaloJetConeTool::initialize() 
+{
+  MsgStream log(msgSvc(), name());
+  // Initialize timing service
+  if( service( "TrigTimerSvc", m_pTimerService).isFailure() ) {
+    log << MSG::WARNING << name() << ": Unable to locate TrigTimer Service" 
+	<< endmsg;
+  } 
+
+  if (m_pTimerService){
+    //Add timers
+    m_fcal_timer = m_pTimerService->addItem("LVL2_FCal_Cone_Time");
+    m_other_timer = m_pTimerService->addItem("LVL2_Other_Cone_Time");
+  }
+  m_inCone=0;
+  m_outCone=0;
+  m_totalCell=0;
+  
+  // cleaning:
+  m_cellenergies.reserve(8192);
+
+  // from IAlgToolCalo
+  m_geometryTool.disable();
+  m_data.disable();
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetConeTool::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+//StatusCode T2CaloJetConeTool::execute(TrigT2Jet* jet,double etamin, double etamax, double phimin, double phimax)
+//StatusCode T2CaloJetConeTool::execute(TrigT2Jet* jet,double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/)
+StatusCode T2CaloJetConeTool::execute(TrigT2Jet* jet, const IRoiDescriptor& /*roi*/ )
+{
+
+  MsgStream mLog(msgSvc(), name());
+  int outputLevel = msgSvc()->outputLevel( name() );
+  if(outputLevel <= MSG::DEBUG)
+     mLog << MSG::DEBUG << " executing T2CaloJetConeTool " << endmsg;
+
+
+  // reset error
+  m_error = 0x0;
+
+  // do cone iterations on jet. 
+  bool isFCal = fabs(jet->eta())>3.2 ? true : false;
+  if(isFCal){m_fcal_timer->start(); }
+  else{ m_other_timer->start(); }
+  for(int i=0; i<m_nIterations; i++){
+    this->coneIteration(jet,i);
+    if ( Athena::Timeout::instance().reached() ) {
+       mLog << MSG::ERROR << "Timeout reached in coneIteration" << endmsg;
+       return StatusCode::FAILURE;
+    }
+  }
+  if(isFCal){m_fcal_timer->stop(); }
+  else{ m_other_timer->stop(); }
+  
+  if(m_fj_cone_sizes.size()==0||m_fj_cone_sizes.size()>3){
+    mLog << MSG::WARNING << "FJ cone sizes are incorrectly setup.  Using 1/7/4 technique." << endmsg;
+  }
+  return StatusCode::SUCCESS;
+}
+
+void T2CaloJetConeTool::coneIteration(TrigT2Jet* jet, int coneIter) 
+{
+  MsgStream mLog(msgSvc(), name());
+
+  std::vector<Trig3Momentum>* grid = jet->grid();
+  
+  std::vector<Trig3Momentum>::iterator gridItr = grid->begin();
+  std::vector<Trig3Momentum>::iterator gridEnd = grid->end();
+  
+  double coneR = m_coneRadius;
+
+  /////////////////////////
+  // FCal cone algorithm //
+  /////////////////////////
+  if(fabs(jet->eta())>3.2){
+    if(m_fj_cone_sizes.size()==0||m_fj_cone_sizes.size()>3){
+      mLog << MSG::DEBUG << "FJ cone sizes are incorrectly setup.  Using 1/7/4 technique." << endmsg;
+      // Cone 1.0/0.7/0.4 Technique
+      //  -Find inital seed looking at the full eta window
+      //  -Subsequent iterations reduce cone size to 0.7 then 0.4 (or default)
+      if(fabs(jet->eta())>3.2&&coneIter==0){
+	      coneR=1;
+      } else if(fabs(jet->eta())>3.2&&coneIter==1){
+	      coneR=0.7;
+      } 
+    } else {
+      coneR = m_fj_cone_sizes.at(coneIter);
+    }
+    mLog << MSG::DEBUG << "Iteration " << coneIter 
+	 << ", using cone size: " << coneR << endmsg;
+  }
+  double dEta = 0, dPhi=0;
+  
+  //Check if in FCal, if so find most energetic cell
+  //double max_e(-999);
+  double max_eta = jet->eta();
+  double max_phi = jet->phi();
+ 
+  //Set jet eta & phi
+  jet->setEta(max_eta);
+  jet->setPhi(max_phi);
+
+  // activate cells in cone
+  for(; gridItr!=gridEnd; gridItr++){
+    dEta = fabs(jet->eta() - (*gridItr).eta());
+    dPhi = fabs(jet->phi() - (*gridItr).phi());
+    if (dPhi > M_PI) dPhi = 2*M_PI - dPhi;
+    
+    if( dEta*dEta + dPhi*dPhi < coneR*coneR ) {
+      m_inCone++;
+      (*gridItr).setInCone(true);
+    } else {
+      (*gridItr).setInCone(false);
+      m_outCone++;
+    }
+    m_totalCell++;
+  }
+
+  // calculate e, eta, phi.
+  gridItr = grid->begin();
+  double eTot=0, eta=0, phi=0, tmpE=0, eThresh=0, tmpPhi=0;
+  double ehad=0, eem=0;
+  
+  double tmpdPhi=0, dphi=0;
+  
+  // cleaning:
+  // initialize cleaning variables
+  int nLeadingCells = 0;            // number of leading cells
+  float hecf = 0.;                  // fraction of jet energy in hec
+  float jetQuality = 0.;            // quality of the jet
+  float emf = 0.;                   // fraction of jet energy in emc
+  float jetTimeCells = 0.;          // jet time calculated from cells
+  
+  // helper functions / variables for cleaning:
+  m_cellenergies.clear();
+  float HECEnergy = 0.;
+  float EinBadCells = 0.;
+	bool isTile = false;
+	bool isLAr = false;
+	bool qualityTimeIsDefined = false;
+	float totaltime = 0.;
+	float norm = 0.;
+	float cellNorm = 0.;
+	float totCellE = 0.;     // sum of energy in LAr cells with quality defined
+  
+  for(; gridItr!=gridEnd; gridItr++){
+    if( !(gridItr->inCone()) ) continue;
+    
+    // reset flags:
+    isTile = false;
+		isLAr = false;
+		
+    tmpE = (*gridItr).e();    
+    eTot += tmpE;  // maybe this should be Et weighted  
+    
+    // Summ contribution to hadronic/EM energy:  
+    const CaloSampling::CaloSample s = (*gridItr).caloSample();
+    if( s == CaloSampling::PreSamplerB || s == CaloSampling::PreSamplerE || 
+	   s == CaloSampling::EMB1 || s == CaloSampling::EME1 || 
+	   s == CaloSampling::EMB2 || s == CaloSampling::EME2 || 
+	   s == CaloSampling::EMB3 || s == CaloSampling::EME3 ||
+	   s == CaloSampling::FCAL0){
+	    eem += tmpE;
+	    isLAr = true;  // for cleaning
+	  }
+    if( s == CaloSampling::HEC0 || s ==  CaloSampling::HEC1|| 
+	   s == CaloSampling::HEC2 || s == CaloSampling::HEC3 || 
+	   s == CaloSampling::TileBar0 || s == CaloSampling::TileExt0 || 
+	   s == CaloSampling::TileBar1 || s == CaloSampling::TileExt1 || 
+	   s == CaloSampling::TileBar2 || s == CaloSampling::TileExt2 || 
+	   s == CaloSampling::TileGap1 || s == CaloSampling::TileGap2 || 
+	   s == CaloSampling::TileGap3 || s == CaloSampling::FCAL1 || 
+	   s == CaloSampling::FCAL2)
+	    ehad += tmpE;
+    
+    if (tmpE>0){ // threshold from job options?
+      eThresh += tmpE;    
+      eta += tmpE*(*gridItr).eta();
+      tmpPhi = (*gridItr).phi();      
+
+      tmpdPhi = tmpPhi - jet->phi();   // w.r.t Jet
+      if (tmpdPhi > M_PI) tmpdPhi -= 2*M_PI;    
+      if (tmpdPhi < -1*M_PI) tmpdPhi += 2*M_PI; 
+
+      dphi += tmpE*tmpdPhi; // this needs the wrap-around check
+
+    }
+    
+    // cleaning:
+    m_cellenergies.push_back( tmpE );
+    if(	s == CaloSampling::HEC0 || s == CaloSampling::HEC1 || 
+				s == CaloSampling::HEC2 || s == CaloSampling::HEC3 ) {
+        HECEnergy += tmpE;
+        isLAr = true;
+		}
+    if( s == CaloSampling::FCAL1 || s == CaloSampling::FCAL2 ){
+			isLAr = true;
+	  }
+    if( s == CaloSampling::TileBar0 || s == CaloSampling::TileBar1 || 
+        s == CaloSampling::TileBar2 || s == CaloSampling::TileGap1 ||
+        s == CaloSampling::TileGap2 || s == CaloSampling::TileGap3 || 
+        s == CaloSampling::TileExt0 || s == CaloSampling::TileExt1 || 
+        s == CaloSampling::TileExt2 ) {
+          isTile = true;
+    }
+    
+    uint16_t cellprovenance = (*gridItr).provenance();
+    // grab cell quality and cell time.
+    uint16_t cellquality =  (*gridItr).quality();
+    float celltime = (*gridItr).time();
+    qualityTimeIsDefined = false;
+		
+    // check for tile
+    if(isTile){
+      // cells with bad quality are masked -> don't take tile into account
+      //   for jet quality calculation.
+      // provenance not set for tile cells. but time is defined.
+      // timing:
+      cellNorm = tmpE * tmpE;
+      totaltime += cellNorm * celltime;
+      norm += cellNorm;
+    }
+    // check for LAr. only take cells into accout which have time and quality defined
+    if( (isLAr) && (cellprovenance & 0x2000) ){
+      qualityTimeIsDefined = true;
+      totCellE += tmpE;
+      // timing:
+      cellNorm = tmpE * tmpE;
+      totaltime += cellNorm * celltime;
+      norm += cellNorm;
+    }
+				
+    if( (isLAr) && (qualityTimeIsDefined) && (cellquality > m_cellQualityThresholdLAr) ){
+      EinBadCells += tmpE;
+    }
+    
+  } // end loop over cells
+  
+  if(eThresh != 0) {
+    eta /= eThresh;
+    phi = dphi/eThresh + jet->phi(); // recover absolute value
+  
+    // phi must be between -pi and pi :
+    if(phi > M_PI) phi -= 2.0* M_PI;
+    if(phi < -1.0*M_PI) phi += 2.0*M_PI;
+  }
+
+  // calculate the jet cleaning variables:
+  // -------------------------------------
+
+	// sort cell-energy vector. (most energetic cell at end of vector)
+	std::sort(m_cellenergies.begin(), m_cellenergies.end());
+	float sumE = 0.;
+	for(int k = m_cellenergies.size()-1; k > -1; k--){
+		sumE += m_cellenergies[k];
+		nLeadingCells++;
+		if(sumE > m_leadingCellFraction*eTot){
+			break;
+		}
+	}
+
+	float DELTA = 0.001;     // distance to compare floats
+	if(fabs(eTot)>DELTA){
+		hecf = HECEnergy/eTot;
+		emf = eem/eTot;
+	}
+	if(fabs(totCellE)>DELTA){
+		jetQuality = EinBadCells/totCellE;
+	}
+	if(fabs(norm)>DELTA){
+		jetTimeCells = totaltime/norm;
+	}
+
+
+  jet->setE(eTot);
+  jet->setEem0(eem);
+  jet->setEhad0(ehad);
+  jet->setEta(eta);
+  jet->setPhi(phi);
+  
+  // cleaning:
+  jet -> setNLeadingCells(nLeadingCells);
+  jet -> setHecf(hecf);
+  jet -> setJetQuality(jetQuality);
+	jet -> setEmf(emf);
+	jet -> setJetTimeCells(jetTimeCells);
+}
+
+StatusCode T2CaloJetConeTool::finalize()
+{
+  m_cellenergies.clear();
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromCells.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromCells.cxx
new file mode 100644
index 000000000000..7a795861b106
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromCells.cxx
@@ -0,0 +1,443 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromCells.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Data preparation from Cells
+
+********************************************************************/
+#include "TrigT2CaloJet/T2CaloJetGridFromCells.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigT2CaloJet/T2AllRoiUnpacking.h"
+
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IToolSvc.h"
+
+// should use this, but needs fixes
+//#include "TrigT2CaloCommon/ITrigDataAccess.h" 
+// instead, use this one
+#include "TrigT2CaloCommon/TrigDataAccess.h"
+#include "AthenaKernel/Timeout.h"
+
+#include <algorithm>
+#include <sstream>
+
+T2CaloJetGridFromCells::T2CaloJetGridFromCells(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  T2CaloJetBaseTool(type, name, parent),
+  m_noiseCutValue(2.) ,
+  m_cablingSvc("LArCablingLegacyService"),
+  m_noiseTool("CaloNoiseTool/CaloNoiseToolDefault"),
+  m_forbiddenRegions(0),
+  m_timerSvc(0)
+{
+  declareProperty("doTiming", m_doTiming= false );
+  declareProperty("cablingSvc", m_cablingSvc, "cabling svc");
+  declareProperty("noiseTool", m_noiseTool, "handle for noise tool");
+  declareProperty("applyNoiseCut", m_applyNoiseCut = false);
+  declareProperty("noiseCutValue", m_noiseCutValue );
+  declareProperty("doHECcellQualityCleaning", m_doHECcellQualityCleaning = false); // switch for cell based jet cleaning
+  declareProperty("cellQualityThresholdHEC", m_cellQualityThresholdHEC = 65535);   // for cell based jet cleaning
+
+}
+
+T2CaloJetGridFromCells::~T2CaloJetGridFromCells() 
+{
+}
+
+
+StatusCode T2CaloJetGridFromCells::initialize() 
+{
+
+  ATH_MSG_VERBOSE("  In initalize() ");
+
+  ATH_CHECK(m_data.retrieve());
+
+/// noise suppression
+  if(m_applyNoiseCut!=0){
+    ATH_CHECK( m_noiseTool.retrieve() );
+
+    ATH_CHECK( m_cablingSvc.retrieve() );
+  } else {
+    m_noiseTool.disable();
+    m_cablingSvc.disable();
+  }
+
+  // Retrieve timing service
+
+  if (m_doTiming) {
+
+    StatusCode sc = service("TrigTimerSvc", m_timerSvc);
+    if (sc.isFailure()) {
+      ATH_MSG_ERROR( "unable to locate timing service TrigTimerSvc."
+                     << " Setting doTiming = false!!! " );
+      m_timerSvc = 0;
+      m_doTiming=false;
+      //return sc;
+    }
+    else{
+      
+      std::string prefix = name() + ":";
+
+     // Define now the timers:
+      std::string label = prefix+"LArUnpck";
+      TrigTimer *timer = m_timerSvc->addItem(label);
+      m_timers["LArUnpck"] = timer;
+
+      label =  prefix+"TileUnpck";
+      timer = m_timerSvc->addItem( label);
+      m_timers["TileUnpck"] = timer;
+
+      label =  prefix+"HECUnpck";
+      timer = m_timerSvc->addItem(label);
+      m_timers["HECUnpck"] = timer;
+
+    }
+  }
+
+  // from IAlgToolCalo
+  m_geometryTool.disable();
+
+  m_gridElement = new Trig3Momentum();
+
+  return StatusCode::SUCCESS;
+}
+
+TrigTimer* T2CaloJetGridFromCells::getTimer(const std::string& timerName){ 
+
+  if (!m_doTiming ) return 0;
+
+  std::map<std::string, TrigTimer*>::const_iterator t = m_timers.find(timerName);
+  if (t == m_timers.end()) {
+    ATH_MSG_DEBUG( " Timer " << timerName << " not found." );
+    return 0;
+  }
+    
+
+  return (*t).second;
+
+}
+
+
+StatusCode T2CaloJetGridFromCells::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+//StatusCode T2CaloJetGridFromCells::execute(TrigT2Jet
+//* jet,double etamin, double etamax, double phimin, double phimax)
+StatusCode T2CaloJetGridFromCells::execute(TrigT2Jet
+* jet,const IRoiDescriptor& roi  )
+{
+
+  // reset error
+  m_error = 0x0;
+
+  // this method should use region selector to get cells and fill grid
+  // of Trig3Momentum.
+
+  // reset error
+  m_error = 0x0;
+  std::vector<Trig3Momentum>* grid = new std::vector<Trig3Momentum>();
+  grid->reserve(8000);
+  
+
+  //m_gridElement = new Trig3Momentum();
+  // add all cells to grid
+
+  StatusCode sc = addAllCells(roi.etaMinus(),roi.etaPlus(), roi.phiMinus(), roi.phiPlus(), grid);
+  if(sc.isFailure()){
+    ATH_MSG_DEBUG( " Failure of addAllCells. Empty grid! " );
+  }
+  
+  //then set the grid in the jet.  do not delete anything.  Cleanup
+  //happens at the end of jet finding.
+  jet->setGrid(grid);
+
+  //delete m_gridElement;
+  //m_gridElement = 0;
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2CaloJetGridFromCells::addAllCells(double etamin, double etamax, 
+					    double phimin, double phimax,
+					    std::vector<Trig3Momentum>* grid)
+{
+
+  //This could check job options for a list of samplings to consider.
+  //We may not want to use presampler or strips.
+
+  if(m_doTiming) getTimer("LArUnpck")->start();
+
+  //Now EM
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTEM, 0, true).isFailure() ){
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTEM, 1, true).isFailure() ) {
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTEM, 2, true).isFailure() ) {
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTEM, 3, true).isFailure() ) {
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(m_doTiming){
+    getTimer("LArUnpck")->stop();
+    getTimer("HECUnpck")->start();
+  }
+
+  //Now HEC
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTHEC, 0, true).isFailure() ) {
+    if(m_doTiming) getTimer("HECUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTHEC, 1, true).isFailure() ) {
+    if(m_doTiming) getTimer("HECUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTHEC, 2, true).isFailure() ) {
+    if(m_doTiming) getTimer("HECUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, TTHEC, 3, true).isFailure() ) {
+    if(m_doTiming) getTimer("HECUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(m_doTiming){
+    getTimer("HECUnpck")->stop();
+    getTimer("TileUnpck")->start();
+  }
+
+  //Now Tile
+  // only prepare for first sampling, because containers created then.
+  if(addTileCells(etamin, etamax, phimin, phimax, grid, TILE, 0, true).isFailure() ){
+    if(m_doTiming) getTimer("TileUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+
+  //Now FCAL
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, FCALEM, 0, true).isFailure() )
+    return StatusCode::FAILURE;
+
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, FCALHAD, 0, true).isFailure() )
+    return StatusCode::FAILURE;
+
+  if(addLArCells(etamin, etamax, phimin, phimax, grid, FCALHAD, 1, true).isFailure() )
+    return StatusCode::FAILURE;
+
+/*  if(addTileCells(etamin, etamax, phimin, phimax, grid, TILE, 1, false).isFailure() )  {
+    if(m_doTiming) getTimer("TileUnpck")->stop();
+    return StatusCode::FAILURE;
+    }
+  if(addTileCells(etamin, etamax, phimin, phimax, grid, TILE, 2, false).isFailure() ) {
+    if(m_doTiming) getTimer("TileUnpck")->stop();
+    return StatusCode::FAILURE;
+    }*/
+
+  if(m_doTiming) getTimer("TileUnpck")->stop();
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromCells::addLArCells(double etamin, double etamax, 
+					    double phimin, double phimax,
+					    std::vector<Trig3Momentum>* grid,
+					    DETID detectorID, int sampling,
+					    bool prepare)
+{
+
+  // Get detector offline ID's for Collections
+  m_data->RegionSelector(sampling,etamin,etamax,phimin,phimax, detectorID);
+
+  // Prepare data, load collections
+  if ( m_data->LoadCollections(m_iBegin,m_iEnd, sampling, prepare).isFailure() ){
+    return StatusCode::FAILURE;
+  }
+  
+  m_error|=m_data->report_error();
+  
+  bool vetoRegions(m_forbiddenRegions.size() > 0);  
+  // Main Loop over cells
+  const LArCell* larcell;
+  for(m_it = m_iBegin;m_it != m_iEnd; ++m_it) {
+   
+    // possibly do some noise thresholding
+    larcell = *m_it;
+
+    // possibly do some calibration
+    // may want sampling.  example:
+    CaloSampling::CaloSample samp;
+    //samp = CaloSampling::getSampling(*larcell);
+    samp = larcell->caloDDE()->getSampling();
+    
+    // cell based cleaning:
+    // --------------------
+    // check if cell cleaning is requested and if the cell is in hec:
+    bool isHECandDoCleaning = false;
+    if(	m_doHECcellQualityCleaning && ( samp == CaloSampling::HEC0 || samp == CaloSampling::HEC1 || 
+				samp == CaloSampling::HEC2 || samp == CaloSampling::HEC3 ) ) {
+        isHECandDoCleaning = true;
+		}
+    // now test for cell quality
+    if( isHECandDoCleaning && larcell -> quality() >= m_cellQualityThresholdHEC ) {
+      continue;
+    }
+    // end (cell based) cleaning
+
+    // possibly do some tower building
+
+    double cellE = larcell->e();
+    if(m_applyNoiseCut){
+       double larnoise = m_noiseTool->getNoise(larcell,
+                                  ICalorimeterNoiseTool::TOTALNOISE);
+    //std::cout << "noise rms in LAr = " << larnoise << std::endl;
+       if(m_applyNoiseCut && fabs(cellE) < (m_noiseCutValue*larnoise)) continue;
+    }
+
+    double eta(larcell->eta());
+    double phi(larcell->phi());
+    if(vetoRegions && isInVetoRegion(eta, phi)) continue;
+    // for now fill grid elements like this
+//    gridElement =  new Trig3Momentum();
+    m_gridElement->setE(cellE);
+    m_gridElement->setEta(eta);
+    m_gridElement->setPhi(phi);
+    m_gridElement->setCaloSample(samp);
+    // jet cleaning:
+    m_gridElement->setProvenance( larcell -> provenance() );
+    m_gridElement->setQuality( larcell -> quality() );  
+    m_gridElement->setTime( larcell -> time() );
+    
+    //push them back into the grid
+    grid->push_back(*m_gridElement);
+
+  }
+
+  if ( Athena::Timeout::instance().reached() ) {
+    ATH_MSG_ERROR( "Timeout reached in addLArCells " );
+    return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2CaloJetGridFromCells::addTileCells(double etamin, double etamax, 
+					    double phimin, double phimax,
+					    std::vector<Trig3Momentum>* grid,
+					    DETID detectorID, int sampling,
+					    bool /*prepare*/)
+{
+
+  // Get detector offline ID's for Collections
+  m_data->RegionSelector(sampling,etamin,etamax,phimin,phimax, detectorID);
+
+  // Prepare data, load collections
+  
+  for( unsigned int iR=0; iR!=m_data->TileContSize();++iR ){
+    if ( m_data->LoadCollections(m_itBegin,m_itEnd, iR, !iR).isFailure() ){
+       return StatusCode::FAILURE;
+    }
+
+    m_error|=m_data->report_error();
+    
+    bool vetoRegions(m_forbiddenRegions.size() > 0);    
+
+//    std::cout << "No of cells in Tile = " << m_data->TileContSize() << std::endl;
+  // Main Loop over cells
+    const TileCell* tilecell;
+    for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) {
+    tilecell = *m_itt;
+   
+    // possibly do some noise thresholding
+
+    // possibly do some calibration
+    // may want sampling.  example:
+      CaloSampling::CaloSample samp;
+      //samp = CaloSampling::getSampling(*tilecell);
+      samp = tilecell->caloDDE()->getSampling();
+
+
+      double cellE = tilecell->e();
+//  do noise thresholding 
+
+      if(m_applyNoiseCut) {
+        double tilenoise = m_noiseTool->getNoise(tilecell,
+                                  ICalorimeterNoiseTool::TOTALNOISE);
+        if(m_applyNoiseCut && fabs(cellE) < (m_noiseCutValue*tilenoise)) continue;
+      }
+
+    // possibly do some tower building
+
+      double eta(tilecell->eta());
+      double phi(tilecell->phi());
+      if(vetoRegions && isInVetoRegion(eta, phi)) continue;
+
+    // for now fill grid elements like this
+//    gridElement =  new Trig3Momentum();
+      m_gridElement->setE(cellE);
+      m_gridElement->setEta(eta);
+      m_gridElement->setPhi(phi);
+      m_gridElement->setCaloSample(samp);
+      // jet cleaning:
+      m_gridElement->setProvenance( tilecell -> provenance() );
+      m_gridElement->setQuality( tilecell -> quality() );  
+      m_gridElement->setTime( tilecell -> time() );
+    
+      //push them back into the grid
+      grid->push_back(*m_gridElement);
+
+
+    }
+    if ( Athena::Timeout::instance().reached() ) {
+      ATH_MSG_ERROR( "Timeout reached in addTileCells " );
+      return StatusCode::FAILURE;
+    }
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromCells::finalize()
+{
+  delete m_gridElement;
+  m_gridElement = 0;
+  return StatusCode::SUCCESS;
+}
+
+// Just a functor so that I can use EtaPhiRectangle::contains within a std algorithm.
+struct EtaPhiRectInsideChecker : public std::unary_function<EtaPhiRectangle, bool> {
+  double eta_, phi_;
+  EtaPhiRectInsideChecker(const double &eta, const double &phi): eta_(eta), phi_(phi) {} ;
+  bool operator() (const EtaPhiRectangle &r) const {
+    return r.contains(eta_, phi_);
+  }
+};
+
+bool T2CaloJetGridFromCells::isInVetoRegion(const double &eta, const double &phi){
+  ATH_MSG_DEBUG("T2CaloJetGridFromCells::isInVetoRegion --DG-- checking"
+                <<" ("<<eta<<", "<<phi<<")"
+                <<" against "<<m_forbiddenRegions.size()<<" forbidden regions" );
+  return
+    m_forbiddenRegions.end() !=
+    std::find_if(m_forbiddenRegions.begin(),
+		 m_forbiddenRegions.end(),
+		 EtaPhiRectInsideChecker(eta,phi));
+}
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromFEBHeader.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromFEBHeader.cxx
new file mode 100755
index 000000000000..1039d73c23f2
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromFEBHeader.cxx
@@ -0,0 +1,381 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromFEBHeader.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+          Ignacio Aracena <ignacio.aracena@cern.ch>
+
+CREATED:  November, 2005
+
+PURPOSE: Data preparation from FEB Header (Ex,Ey,Ez)
+
+********************************************************************/
+#include "TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+#include "TrigT2CaloCommon/TrigDataAccess.h"
+#include "AthenaKernel/Timeout.h"
+
+T2CaloJetGridFromFEBHeader::T2CaloJetGridFromFEBHeader(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  T2CaloJetBaseTool(type, name, parent),
+  m_gridElement(NULL),
+  m_usedfeb(NULL),
+  m_timerSvc(0)
+{  
+  declareProperty("doTiming", m_doTiming= false );
+}
+
+T2CaloJetGridFromFEBHeader::~T2CaloJetGridFromFEBHeader() 
+{
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::initialize() 
+{
+
+  ATH_MSG_VERBOSE("  In initalize() ");
+
+  ATH_CHECK( m_data.retrieve() );
+
+  // Retrieve timing service
+  
+  if (m_doTiming) {
+  
+    StatusCode sc = service("TrigTimerSvc", m_timerSvc);
+    if (sc.isFailure()) {
+      ATH_MSG_ERROR( "unable to locate timing service TrigTimerSvc."
+                     << " Setting doTiming = false!!! " );
+      m_timerSvc = 0;
+      m_doTiming=false;
+      //return sc;
+    }
+    else{
+      
+      std::string prefix = name() + ":";
+
+     // Define now the timers:
+      std::string label = prefix+"LArUnpck";
+      TrigTimer *timer = m_timerSvc->addItem(label);
+      m_timers["LArUnpck"] = timer;
+
+      label =  prefix+"TileUnpck";
+      timer = m_timerSvc->addItem( label);
+      m_timers["TileUnpck"] = timer;
+
+      label =  prefix+"HECUnpck";
+      timer = m_timerSvc->addItem(label);
+      m_timers["HECUnpck"] = timer;
+
+    }
+  }
+
+  // from IAlgToolCalo
+  m_geometryTool.disable();
+
+  return StatusCode::SUCCESS;
+}
+
+TrigTimer* T2CaloJetGridFromFEBHeader::getTimer(const std::string& timerName){
+
+  if (!m_doTiming ) return 0;
+
+  std::map<std::string, TrigTimer*>::const_iterator t = m_timers.find(timerName);
+  if (t == m_timers.end()) {
+    ATH_MSG_DEBUG(" Timer " << timerName << " not found.");
+    return 0;
+  }
+
+
+  return (*t).second;
+
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2CaloJetGridFromFEBHeader::execute(TrigT2Jet
+* jet,double etamin, double etamax, double phimin, double phimax)
+{
+
+  // Time total AlgTool time
+//  if (m_timersvc) m_timer[0]->start();
+
+  // this method should use region selector to get RODs, retrieve FEB
+  // Header, find eta for each FEB, and fill grid of Trig3Momentum.
+
+  ATH_MSG_DEBUG(" executing T2CaloJetGridFromFEBHeader ");
+
+
+  std::vector<Trig3Momentum>* grid = new std::vector<Trig3Momentum>();
+
+  // now get ROD, FEB
+
+  // turn ex,ey to e,eta,phi
+
+  // possibly do some calibration
+
+  // possibly do some tower building
+
+  // now fill grid elements like this
+  m_gridElement =  new Trig3Momentum();
+
+  m_usedfeb = new std::vector<int>;
+/*  if (m_timersvc) m_timer[1]->start();
+  if (m_timersvc) m_timer[1]->pause();
+  if (m_timersvc) m_timer[2]->start();
+  if (m_timersvc) m_timer[2]->pause();
+  if (m_timersvc) m_timer[3]->start();
+  if (m_timersvc) m_timer[3]->pause();
+  if (m_timersvc) m_timer[4]->start();
+  if (m_timersvc) m_timer[4]->pause();
+
+  if (m_timersvc) m_timer[5]->start();*/
+
+  StatusCode sc = addFebEnergies(etamin, etamax, phimin, phimax, grid);
+  if(sc.isFailure()){
+    ATH_MSG_DEBUG(" Failure of addFebEnergies. Empty grid! ");
+  }
+
+//  gridElement->setE(10000.);
+//  gridElement->setEta(1.);
+//  gridElement->setPhi(0.);
+
+  //push them back into the grid
+//  grid->push_back(*gridElement);
+
+
+  //then set the grid in the jet.  do not delete anything.  Cleanup
+  //happens at the end of jet finding.
+  jet->setGrid(grid);
+
+  delete m_gridElement;
+  m_gridElement = 0;
+  delete m_usedfeb;
+  m_usedfeb = 0;
+
+/*  if (m_timersvc) m_timer[5]->stop();
+  if (m_timersvc) m_timer[0]->stop();
+  if (m_timersvc) m_timer[1]->stop();
+  if (m_timersvc) m_timer[2]->stop();
+  if (m_timersvc) m_timer[3]->stop();
+  if (m_timersvc) m_timer[4]->stop();
+*/
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::addFebEnergies(double etamin, double etamax,
+                                                    double phimin, double phimax,
+                                                    std::vector<Trig3Momentum>* grid)
+{
+
+
+  if(m_doTiming) getTimer("LArUnpck")->start();
+  if(addLArFebEnergy(etamin,etamax,phimin,phimax,grid,TTEM, 0, true).isFailure() ){
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArFebEnergy(etamin,etamax,phimin,phimax,grid,TTEM, 1, true).isFailure() ){
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArFebEnergy(etamin,etamax,phimin,phimax,grid,TTEM, 2, true).isFailure() ){
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+  if(addLArFebEnergy(etamin,etamax,phimin,phimax,grid,TTEM, 3, true).isFailure() ){
+    if(m_doTiming) getTimer("LArUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+
+  if(m_doTiming){
+    getTimer("LArUnpck")->stop();
+    getTimer("HECUnpck")->start();
+  }
+
+  //Now HEC
+  // Do not need to loop over all the samplings when reading HEC FEBs
+  if(addLArFebEnergy(etamin, etamax, phimin, phimax, grid, TTHEC, 0, true).isFailure() ){
+    if(m_doTiming) getTimer("HECUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+//  if(addLArFebEnergy(etamin, etamax, phimin, phimax, grid, TTHEC, 1, true).isFailure() )
+//    return StatusCode::FAILURE;
+//  if(addLArFebEnergy(etamin, etamax, phimin, phimax, grid, TTHEC, 2, true).isFailure() )
+//    return StatusCode::FAILURE;
+//Now FCAL
+  if(addLArFebEnergy(etamin, etamax, phimin, phimax, grid, FCALEM, 0, true).isFailure() )
+    return StatusCode::FAILURE;
+  //std::cout << "NOW TRY FCALHAD 0" << std::endl;
+  if(addLArFebEnergy(etamin, etamax, phimin, phimax, grid, FCALHAD, 0, true).isFailure() )
+    return StatusCode::FAILURE;
+  //std::cout << "NOW TRY FCALHAD 1" << std::endl;
+  if(addLArFebEnergy (etamin, etamax, phimin, phimax, grid, FCALHAD, 1, true).isFailure() )
+    return StatusCode::FAILURE;
+  if(m_doTiming){
+    getTimer("HECUnpck")->stop();
+    getTimer("TileUnpck")->start();
+  }
+
+
+
+  if(addTileCells(etamin, etamax, phimin, phimax, grid, TILE, 0, true).isFailure() ){
+    if(m_doTiming) getTimer("TileUnpck")->stop();
+    return StatusCode::FAILURE;
+  }
+
+    if(m_doTiming) getTimer("TileUnpck")->stop();
+
+    return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::addLArFebEnergy(double etamin, double etamax,
+                                                 double phimin, double phimax,
+                                                 std::vector<Trig3Momentum>* grid,
+                                                 DETID detectorID, int sampling,
+                                                 bool prepare)
+{
+
+  // Time to access RegionSelector
+//  if (m_timersvc) m_timer[1]->resume();
+
+  m_data->RegionSelector(sampling,etamin,etamax,phimin,phimax,detectorID);
+//  if (m_timersvc) m_timer[1]->pause();
+
+  // Time to access Collection
+//  if (m_timersvc) m_timer[2]->resume();
+
+  if ( m_data->LoadCollections(m_iFebBegin,m_iFebEnd, sampling , prepare).isFailure() )
+    return StatusCode::FAILURE;
+//  if (m_timersvc) m_timer[2]->pause();
+
+  // Algorithmic time
+//  if (m_timersvc) m_timer[4]->resume();
+
+  for(m_Febit=m_iFebBegin ;m_Febit!=m_iFebEnd; ++m_Febit){
+
+    bool used=false;
+    CaloSampling::CaloSample samp=CaloSampling::Unknown;
+    if(detectorID == TTHEC){
+//
+      samp = CaloSampling::HEC0;
+    }
+    if(detectorID == TTEM){
+      int febid = (*m_Febit)->getFebId();
+      int idit = 0;
+      int iditend = m_usedfeb->size();
+      /* avoid double-counting of EM FEBs */
+      for(;idit!=iditend; ++idit){
+        if(febid == (*m_usedfeb)[idit] ){ 
+          used = true;
+          idit++;
+          break;
+        }
+      }
+      m_usedfeb->push_back(febid);
+      samp = CaloSampling::EMB1;
+ //     std::cout << "In the TTEM; E_tot = " << FebEnergy << std::endl;
+    }
+
+    if(!used ){
+      double FebEnergy = sqrt( ((*m_Febit)->getFebEx())*((*m_Febit)->getFebEx()) +
+                           ((*m_Febit)->getFebEy())*((*m_Febit)->getFebEy()) + 
+                           ((*m_Febit)->getFebEz())*((*m_Febit)->getFebEz()) );
+
+      double phi = atan2((*m_Febit)->getFebEy(),(*m_Febit)->getFebEx());
+      double eta = atanh((*m_Febit)->getFebEz()/FebEnergy);
+      m_gridElement->setE(FebEnergy);
+      m_gridElement->setEta(eta);
+      m_gridElement->setPhi(phi);
+      m_gridElement->setCaloSample(samp);
+      grid->push_back(*m_gridElement);
+    }
+  }
+
+  if ( Athena::Timeout::instance().reached() ) {
+    ATH_MSG_ERROR("Timeout reached in addLArFebEnergy");
+    return StatusCode::FAILURE;
+  }
+//  if (m_timersvc) m_timer[4]->pause();
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::addTileCells(double etamin, double etamax,
+                                            double phimin, double phimax,
+                                            std::vector<Trig3Momentum>* grid,
+                                            DETID detectorID, int sampling,
+                                            bool /*prepare*/)
+{
+
+  // Time to access RegionSelector
+//  if (m_timersvc) m_timer[1]->resume();
+  // Get detector offline ID's for Collections
+  m_data->RegionSelector(sampling,etamin,etamax,phimin,phimax, detectorID);
+
+//  if (m_timersvc) m_timer[1]->pause();
+  // Prepare data, load collections
+
+  for( unsigned int iR=0; iR!=m_data->TileContSize();++iR ){
+    // Time to access Collection
+//    if (m_timersvc) m_timer[3]->resume();
+
+    if ( m_data->LoadCollections(m_itBegin,m_itEnd, iR, !iR).isFailure() )
+    return StatusCode::FAILURE;
+
+//    if (m_timersvc) m_timer[3]->pause();
+   // }
+
+
+    // Algorithmic time
+//    if (m_timersvc) m_timer[4]->resume();
+
+  // Main Loop over cells
+    for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) {
+
+    // possibly do some noise thresholding
+
+    // possibly do some calibration
+    // may want sampling.  example:
+    CaloSampling::CaloSample samp;
+    //samp = CaloSampling::getSampling(*(*m_itt));
+    samp = (*m_itt)->caloDDE()->getSampling();
+
+    // possibly do some tower building
+
+    // for now fill grid elements like this
+//    gridElement =  new Trig3Momentum();
+      m_gridElement->setE((*m_itt)->e());
+      m_gridElement->setEta((*m_itt)->eta());
+      m_gridElement->setPhi((*m_itt)->phi());
+      m_gridElement->setCaloSample(samp);
+    //push them back into the grid
+      grid->push_back(*m_gridElement);
+
+    }
+//    if (m_timersvc) m_timer[4]->pause();
+  }
+
+  if ( Athena::Timeout::instance().reached() ) {
+    ATH_MSG_ERROR( "Timeout reached in addTileCells " );
+    return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromFEBHeader::finalize()
+{
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromLvl1Ppr.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromLvl1Ppr.cxx
new file mode 100755
index 000000000000..0e89335a84d4
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2CaloJetGridFromLvl1Ppr.cxx
@@ -0,0 +1,92 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2CaloJetGridFromLvl1Ppr.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Kyle Cranmer <cranmer@cern.ch>
+CREATED:  November, 2005
+
+PURPOSE: Data preparation from Lvl1 Calo
+
+********************************************************************/
+#include "TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+T2CaloJetGridFromLvl1Ppr::T2CaloJetGridFromLvl1Ppr(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  T2CaloJetBaseTool(type, name, parent), m_gridElement(0)
+{  
+}
+
+T2CaloJetGridFromLvl1Ppr::~T2CaloJetGridFromLvl1Ppr() 
+{
+}
+
+StatusCode T2CaloJetGridFromLvl1Ppr::initialize() 
+{
+  if ( !m_gridElement ) m_gridElement = new Trig3Momentum();
+
+  // from IAlgToolCalo
+  m_geometryTool.disable();
+  m_data.disable();
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2CaloJetGridFromLvl1Ppr::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+
+//StatusCode T2CaloJetGridFromLvl1Ppr::execute(TrigT2Jet
+//* jet,double etamin, double etamax, double phimin, double phimax)
+StatusCode T2CaloJetGridFromLvl1Ppr::execute(TrigT2Jet* jet,
+                                             double /*etamin*/,
+                                             double /*etamax*/,
+                                             double /*phimin*/, 
+                                             double /*phimax*/)
+{
+
+  // this method should use region selector to get TriggerTowers from
+  // the Lvl1 PreProcessor.  Will require some chages to Region Selector
+
+  std::vector<Trig3Momentum>* grid = new std::vector<Trig3Momentum>();
+
+  // now get TT's
+
+  // possibly do some calibration
+
+  // now fill grid elements like this
+  Trig3Momentum* gridElement =  m_gridElement;
+  gridElement->setE(10000.);
+  gridElement->setEta(1.);
+  gridElement->setPhi(0.);
+
+  //push them back into the grid
+  grid->push_back(*gridElement);
+
+
+  //then set the grid in the jet.  do not delete anything.  Cleanup
+  //happens at the end of jet finding.
+  jet->setGrid(grid);
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2CaloJetGridFromLvl1Ppr::finalize()
+{
+  if ( m_gridElement ) delete m_gridElement;
+  m_gridElement = 0;
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloFullScanJet.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloFullScanJet.cxx
new file mode 100644
index 000000000000..750fde7e612c
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloFullScanJet.cxx
@@ -0,0 +1,322 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1CaloFullScanJet.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett
+// ********************************************************************
+
+
+#include "GaudiKernel/IToolSvc.h"
+
+
+#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigCaloEvent/TrigT2JetContainer.h"
+#include "TrigT2CaloJet/T2L1CaloFullScanJet.h"
+#include "TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h"
+#include "TrigTimeAlgs/TrigTimer.h"
+
+#include <sys/time.h>
+
+#include <math.h>
+
+class ISvcLocator;
+
+T2L1CaloFullScanJet::T2L1CaloFullScanJet(const std::string & name, ISvcLocator* pSvcLocator)
+  : HLT::AllTEAlgo(name, pSvcLocator),
+    m_jets(0),
+    m_tools(this)
+
+{   declareProperty("T2JetTools",   m_tools, "L1.5 Full Scan Tools");
+    declareProperty("jetOutputKey", m_jetOutputKey = "TrigT2CaloJet");
+    // debug
+    declareProperty("recordOutput", m_recordOutput = true);
+    
+    declareMonitoredVariable("nJets",          m_nJets);
+    declareMonitoredVariable("nTowers",        m_nTowers);
+    declareMonitoredVariable("UnpckTime",      m_UnpckTime);
+    declareMonitoredVariable("L1_UnpckTime",   m_L1_UnpckTime);
+    declareMonitoredVariable("FastJetTime",    m_FastJetTime);
+    declareMonitoredVariable("JetFindingTime", m_JetFindingTime);
+    declareMonitoredVariable("OverallTime",    m_TotalTime);
+    declareMonitoredVariable("RoITime",        m_RoITime);
+    declareMonitoredStdContainer("E",    m_e);
+    declareMonitoredStdContainer("Et",   m_et);
+    declareMonitoredStdContainer("Eem",  m_eem);
+    declareMonitoredStdContainer("Ehad", m_ehad);
+    declareMonitoredStdContainer("Etem", m_etem);
+    declareMonitoredStdContainer("Ethad",m_ethad);
+    declareMonitoredStdContainer("Eta",  m_eta);
+    declareMonitoredStdContainer("Phi",  m_phi);
+    declareMonitoredStdContainer("Emf",  m_emfrac);
+    declareMonitoredStdContainer("nLeadingTowers", m_nLeadingTowers);
+}
+
+HLT::ErrorCode T2L1CaloFullScanJet::hltInitialize()
+{
+    m_log = new MsgStream(msgSvc(), name());
+    
+    if((*m_log).level() <= MSG::INFO){
+        (*m_log) << MSG::INFO << " Initalizing FEX algorithm: " << name() << endmsg;
+        (*m_log) << MSG::DEBUG << "Options: " << endmsg;
+        (*m_log) << MSG::DEBUG << "   jetOutputKey:     " << m_jetOutputKey << endmsg;
+        (*m_log) << MSG::DEBUG << "   recordOutput:     " << m_recordOutput << endmsg;
+    }
+    
+    if (timerSvc()) {
+        m_timer.push_back(addTimer("TimeTot"));    
+        m_timer.push_back(addTimer("RoIMaking"));
+    }
+    
+    if ( m_tools.retrieve().isFailure() ) {
+        (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_tools << endmsg;
+    } else {
+        (*m_log) << MSG::DEBUG << "Retrieved l1.5 full scan tools: " << m_tools << endmsg;
+    }
+    
+    // add timers for the tools
+    if (timerSvc()) {
+        ToolHandleArray< T2L1CaloJetFullScanBaseTool >::iterator itTool = m_tools.begin(),
+        itToolEnd = m_tools.end();
+        for (  ; itTool != itToolEnd; ++itTool ) {
+            if((*m_log).level() <= MSG::DEBUG)
+                (*m_log) << MSG::DEBUG <<"Tool with name " << (*itTool).name()<< endmsg;
+            
+            m_timer.push_back(addTimer((*itTool).name()));
+        }
+    }
+    
+    m_jets = new DataVector<TrigT2Jet>(SG::VIEW_ELEMENTS);
+    m_jets->reserve(100);
+    
+    m_e.reserve(100);
+    m_et.reserve(100);
+    m_eem.reserve(100);
+    m_ehad.reserve(100);
+    m_etem.reserve(100);
+    m_ethad.reserve(100);
+    m_eta.reserve(100);
+    m_phi.reserve(100);
+    m_emfrac.reserve(100);
+    m_nLeadingTowers.reserve(100);
+    
+    return HLT::OK;
+}
+
+T2L1CaloFullScanJet::~T2L1CaloFullScanJet(){
+}
+
+HLT::ErrorCode T2L1CaloFullScanJet::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& /*tes_in*/,
+                                               unsigned int type_out)
+{
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    beforeExecMonitors().ignore();
+    
+    if(timerSvc()) m_timer[0]->start();      
+    
+    m_nJets = -99;
+    m_nTowers = -99;
+    m_UnpckTime = -99;
+    m_L1_UnpckTime = -99;
+    m_FastJetTime = -99;
+    m_JetFindingTime = -99;
+    m_TotalTime = -99;
+    m_RoITime = -99;
+    m_e.clear();
+    m_et.clear();
+    m_eem.clear();
+    m_ehad.clear();
+    m_etem.clear();
+    m_ethad.clear();
+    m_eta.clear();
+    m_phi.clear();
+    m_emfrac.clear();
+    m_nLeadingTowers.clear();
+    m_jets->clear();
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "================= Executing T2L1CaloFullScanJet FEX " << name() << endmsg;
+        //(*m_log) << MSG::DEBUG << "m_jetOutputKey: " << m_jetOutputKey << endmsg;
+    }
+#endif
+
+    DataVector<TrigT2Jet>::const_iterator begin_jet, end_jet; // iterators for the produced jets
+  
+    // ====== Run the tools
+    // do loop over tools
+    ToolHandleArray< T2L1CaloJetFullScanBaseTool >::iterator itTool = m_tools.begin(),
+                                                          itToolEnd = m_tools.end();
+    
+    int currant_tool=0;
+    //uint32_t error = 0;
+  
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "Looping over tools vector" << endmsg;
+    }
+#endif
+  
+    for (  ; itTool != itToolEnd; ++itTool ) {
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Running tool: [" << currant_tool+1 << "] of " << m_tools.size() << endmsg;
+            (*m_log) << MSG::DEBUG << "Alg name: " << (*itTool)->name() << endmsg;
+        } 
+#endif
+        
+        if (timerSvc()) m_timer[currant_tool+2]->start(); // offset = number of other timers
+    
+        if ((*itTool)->execute(m_jets,m_nTowers,m_L1_UnpckTime,m_UnpckTime,m_FastJetTime,m_JetFindingTime).isFailure()){
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::WARNING << "T2L1CaloJet AlgTool returned Failure" << endmsg;
+            }
+            return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+        }
+    
+        //uint32_t in_error = (*itTool)->report_error();
+        //error|=in_error;
+    
+        if (timerSvc()) m_timer[currant_tool+2]->stop();
+        currant_tool++;
+    }
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "=== Finished jet finding" << endmsg;
+        (*m_log) << MSG::DEBUG << " Towers unpacked:  " << m_nTowers << " in " << m_UnpckTime << " ms, of this L1 unpacking took "<< m_L1_UnpckTime << " ms" << endmsg;
+        (*m_log) << MSG::DEBUG << " T2CaloJets found: " << m_jets->size() << " in " << m_JetFindingTime << " ms, of this FastJet took " << m_FastJetTime << " ms" << endmsg; 
+        if (m_UnpckTime > 50){
+            (*m_log) << MSG::DEBUG << " That was a long time " << endmsg;
+        }
+        
+        begin_jet = m_jets->begin();
+        end_jet = m_jets->end();        
+        int jet_counter = 0;
+        for (; begin_jet != end_jet; ++begin_jet){
+            (*m_log) << MSG::DEBUG << " T2CaloJet["<<jet_counter
+                                   << "]: Et: " << (*begin_jet)->et() 
+                                   << " MeV, eta: " << (*begin_jet)->eta() 
+                                   << ", phi; " << (*begin_jet)->phi() << endmsg;
+            jet_counter++;
+        }
+    }
+#endif
+    // ====== now monitor record and attach features
+  
+    if(timerSvc()) m_timer[1]->start(); // start of RoI recording
+  
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "Monitoring, recording and attaching features" << endmsg;
+        (*m_log) << MSG::DEBUG << "Using L2 output jet key = " << m_jetOutputKey << endmsg;
+    }
+#endif
+  
+    m_nJets = m_jets->size();
+    
+    // store the final jets into an output TE. 
+    HLT::TriggerElement* outputTE = 0;
+    std::string key = "";
+    int recorded_jet_counter = 0;
+    if (m_recordOutput){        
+      outputTE = addRoI(type_out, new TrigRoiDescriptor(true));
+      outputTE->setActiveState(true);  
+                
+    } else {
+        //outputTE->setActiveState(false);
+    }
+    
+    begin_jet = m_jets->begin();
+    end_jet = m_jets->end();
+    for (; begin_jet != end_jet; ++begin_jet){
+        m_jet = (*begin_jet);
+        
+        // Monitor
+        m_e.push_back( m_jet->e()); 
+        m_et.push_back( m_jet->et()); 
+        m_eta.push_back( m_jet->eta() ); 
+        m_phi.push_back( m_jet->phi() ); 
+        m_eem.push_back( m_jet->eem0()); 
+        m_ehad.push_back( m_jet->ehad0()); 
+        m_etem.push_back( (m_jet->eem0()/cosh(m_jet->eta()))); 
+        m_ethad.push_back( (m_jet->ehad0()/cosh(m_jet->eta()))); 
+        m_emfrac.push_back( m_jet->emf() ); 
+        m_nLeadingTowers.push_back( m_jet->nLeadingCells() );
+      
+        if (m_recordOutput){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG << " recording T2CaloJet["<<recorded_jet_counter<<"]"<<endmsg;
+            }
+#endif
+            // store each jet as we go along so they're in the standard T2JetContainer
+          
+            HLT::ErrorCode hltStatus = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+            if (hltStatus != HLT::OK){
+                (*m_log) << MSG::ERROR << "recording of TrigT2Jet into StoreGate failed" << endmsg;
+                return hltStatus;
+            }
+      
+            recorded_jet_counter++;
+        }
+      
+        
+      
+    }
+  
+  
+    if(timerSvc()) m_timer[1]->stop(); // end of RoI recording
+    
+    if(timerSvc()) m_timer[0]->stop(); // end of execute    
+    
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "RoI making time: " << m_timer[1]->elapsed() << " ms " << endmsg;
+        (*m_log) << MSG::DEBUG << "Total time: " << m_timer[0]->elapsed() << " ms " << endmsg;
+        if (m_timer[0]->elapsed() > 50){
+            (*m_log) << MSG::DEBUG << "That was a long time " << endmsg;
+        }
+        (*m_log) << MSG::DEBUG << "================= Finished T2L1CaloFullScanJet FEX " << name() << endmsg;
+    }
+#endif
+  
+    m_TotalTime = m_timer[0]->elapsed();
+    m_RoITime = m_timer[1]->elapsed();
+    
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    afterExecMonitors().ignore();
+    
+    return HLT::OK;
+}
+
+
+HLT::ErrorCode T2L1CaloFullScanJet::hltFinalize()
+{
+    if ( (*m_log).level() <= MSG::DEBUG )
+        (*m_log) << MSG::DEBUG << "Finalizing T2L1CaloFullScanJet FEX " << name() << endmsg;
+    
+    m_jets->clear();
+    delete m_jets;
+    m_timer.clear();
+    m_e.clear();
+    m_et.clear();
+    m_eta.clear();
+    m_phi.clear();
+    m_eem.clear();
+    m_ehad.clear();
+    m_emfrac.clear();
+    m_nLeadingTowers.clear();
+    
+    delete m_log;
+      
+    return HLT::OK;
+}
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJet.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJet.cxx
new file mode 100755
index 000000000000..be69e0b9a97f
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJet.cxx
@@ -0,0 +1,371 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1CaloJet.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Denis Oliveira Damazio
+// ********************************************************************
+
+
+#include "GaudiKernel/IToolSvc.h"
+
+
+#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "TrigCaloEvent/TrigT2JetContainer.h"
+#include "TrigT2CaloJet/T2L1CaloJet.h"
+#include "TrigT1CaloByteStream/ITrigT1CaloDataAccess.h"
+#include "TrigT1CaloToolInterfaces/IL1JetTools.h"
+#include "TrigTimeAlgs/TrigTimer.h"
+#include <sys/time.h>
+
+#include <math.h>
+
+class ISvcLocator;
+
+T2L1CaloJet::T2L1CaloJet(const std::string & name, ISvcLocator* pSvcLocator)
+  : HLT::FexAlgo(name, pSvcLocator),
+    m_jet(0),
+    m_log(NULL),
+    m_dataL1("LVL1BS__TrigT1CaloDataAccess/TrigT1CaloDataAccess",0),
+    m_jetL1Tools("LVL1::L1JetTools/L1JetTools",this),m_storedJEs(0),
+    m_retrievedJetTool(false)
+{
+  declareProperty("TrigT1CaloDataAccess", m_dataL1, "L1 Calo Data Access");
+  declareProperty("L1JetTool", m_jetL1Tools, "L1 Calo Jet Algorithm");
+  declareProperty("jetOutputKey",m_jetOutputKey = "TrigT2L1CaloJet");
+  
+
+  declareMonitoredVariable("E",   m_e);
+  declareMonitoredVariable("Et",  m_et);
+  declareMonitoredVariable("Eta", m_eta);
+  declareMonitoredVariable("Phi", m_phi);
+}
+
+HLT::ErrorCode T2L1CaloJet::hltInitialize()
+{
+  m_log = new MsgStream(msgSvc(), name());
+  
+  if((*m_log).level() <= MSG::DEBUG){
+     (*m_log) << MSG::DEBUG << " Intializing: " << name() <<endmsg;
+  }
+
+  if (timerSvc()) {
+    m_timer.push_back(addTimer("TimeTot"));    
+    m_timer.push_back(addTimer("JEUnpacking"));
+    m_timer.push_back(addTimer("JEformsums"));    
+    m_timer.push_back(addTimer("RoIMaking"));
+  }
+
+  // Create helper tools
+  if ( m_dataL1.retrieve().isFailure() ) {
+    (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_dataL1 << endmsg;
+    m_retrievedJetTool = false;
+  } else {
+    m_retrievedJetTool = true;
+    (*m_log) << MSG::INFO << "Retrieved " << m_dataL1 << endmsg;
+  }
+
+  if ( m_jetL1Tools.retrieve().isFailure() ) {
+    (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_jetL1Tools << endmsg;
+  } else {
+    (*m_log) << MSG::INFO << "Retrieved " << m_jetL1Tools << endmsg;
+  }
+
+  m_storedJEs = new ConstDataVector<DataVector<LVL1::JetElement> >(SG::VIEW_ELEMENTS);
+  
+
+  return HLT::OK;
+}
+
+T2L1CaloJet::~T2L1CaloJet(){
+}
+
+HLT::ErrorCode T2L1CaloJet::hltExecute(const HLT::TriggerElement* inputTE,
+				     HLT::TriggerElement* outputTE)
+{
+
+  if(timerSvc()){
+      m_timer[0]->start();      
+  }
+
+  m_e = -99;
+  m_et = -99;
+  //m_eem0 = -99;
+  //m_ehad0 = -99;
+  m_eta = -99;
+  m_phi = -99;
+  
+  
+  
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+     (*m_log) << MSG::DEBUG << " Executing T2L1CaloJet FEX " << name() << endmsg;
+     (*m_log) << MSG::DEBUG << "m_jetOutputKey: " << m_jetOutputKey << endmsg;
+     (*m_log) << MSG::DEBUG
+              << "outputTE->getId(): "
+              << outputTE->getId() << endmsg;
+     (*m_log) << MSG::DEBUG
+              << "inputTE->getId(): "
+              << inputTE->getId() << endmsg;
+  }
+#endif
+
+  // Note: new TriggerElement has no label() anymore !
+
+
+  // =========================
+  //       retrieve RoI:
+  // =========================
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+     (*m_log) << MSG::DEBUG << "getting RoI" << endmsg;
+  }
+#endif
+
+  const TrigRoiDescriptor* roiDescriptor = 0;
+
+  HLT::ErrorCode hltStatus = getFeature(inputTE, roiDescriptor);
+
+  if ( hltStatus == HLT::OK ) {
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+      (*m_log) << "got the roi descriptor" << endmsg;
+      (*m_log) << MSG::DEBUG  << *roiDescriptor << endmsg;
+    }
+#endif
+
+  } else {
+    (*m_log) <<  MSG::WARNING << " Failed to find RoiDescriptor " << endmsg;
+    return hltStatus;
+  }
+
+  // Some debug output:
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG) {
+    (*m_log) << MSG::DEBUG  << "Inspect the LVL1 object; LVL1 phi="
+	  << roiDescriptor->phi()
+	  << ", LVL1 eta="
+	  << roiDescriptor->eta()
+	  << endmsg;
+  }
+#endif
+
+  // =========================
+  //       make Jet
+  // =========================
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+     (*m_log) << MSG::DEBUG  << " Making TrigT2Jet "<< endmsg;
+  }
+#endif
+  m_jet = new TrigT2Jet();
+
+  // Add RoI word to Jet
+  m_jet->set_RoIword(roiDescriptor->roiWord());
+
+  // Set eta,phi
+  m_jet->setEta(roiDescriptor->eta());
+  m_jet->setPhi(roiDescriptor->phi());
+  
+  if(timerSvc()) m_timer[1]->start(); // start of JE unpacking
+  int counter=0;
+  DataVector<LVL1::JetElement>::const_iterator begj, endj;
+
+  if ( m_retrievedJetTool ){
+#ifndef NDEBUG
+      if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "Loading the L1 data using ITrigT1CaloDataAccess tool, this loads the jet elements for the entire event"<< endmsg;
+      }
+#endif
+      (m_dataL1->loadCollection(begj,endj)).ignore();
+  }
+  
+  m_storedJEs->clear();
+  
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+    (*m_log) << MSG::DEBUG  << "Looping over the jet elements"<< endmsg;
+  }
+#endif
+
+  for(; begj!=endj;begj++){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG  << "JetElement["<<counter<<"]: ETs [GeV]: EM: "<< (*begj)->emEnergy()<<", HAD: "<< (*begj)->hadEnergy()<<", Total: "<<(*begj)->energy()<<", eta: "<<(*begj)->eta()<<", phi: "<<(*begj)->phi()<<endmsg;
+        }        
+#endif
+
+        m_storedJEs->push_back(*begj);
+        counter++;
+  }
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "Stored L1 data as DataVector<LVL1::JetElement>* m_storedJEs" << endmsg;
+        (*m_log) << MSG::DEBUG << "A total of " << counter << " elements were retreived" << endmsg;
+        (*m_log) << MSG::DEBUG << "These will now be mapped onto a map of ints and LVL1::JetInput[s]" << endmsg;
+  }
+#endif
+  
+  std::map<int, LVL1::JetInput*> jetInputs;  // This will have to be cleared after being used
+  if (m_retrievedJetTool) {
+      m_jetL1Tools->mapJetInputs(m_storedJEs->asDataVector(), &jetInputs);
+  }
+  
+  double roiPhi = (roiDescriptor)->phi();
+  if( roiPhi < 0 ) roiPhi += 2 * M_PI;
+  
+  
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+      (*m_log) << MSG::DEBUG << "RoI descriptor phi: "<<(roiDescriptor)->phi()<<", in L1 coordinates: "<<roiPhi<<endmsg;
+  }
+#endif
+  
+  if(timerSvc()) m_timer[1]->stop(); // end of JE unpacking
+  if(timerSvc()) m_timer[2]->start(); // start of jet finding
+  
+  if ( m_retrievedJetTool ) {
+#ifndef NDEBUG
+          if((*m_log).level() <= MSG::DEBUG){
+             (*m_log) << MSG::DEBUG << "Using m_jetL1Tools to 'formSums' at the roi descriptor coordinates, this reproduces the L1 Jet object"<<endmsg;
+          }
+#endif
+          m_jetL1Tools->formSums( (roiDescriptor)->eta(), roiPhi, & jetInputs );
+          // now we must clear the map of jet inputs
+          std::map<int, LVL1::JetInput*> ::const_iterator begin_JetInputMap,
+                                                          end_JetInputMap;
+          begin_JetInputMap = jetInputs.begin();
+          end_JetInputMap = jetInputs.end();
+          for(; begin_JetInputMap!=end_JetInputMap;begin_JetInputMap++){
+              delete begin_JetInputMap->second;
+          }
+            
+          m_jet->setEta( (roiDescriptor)->eta() );
+          // The L1 roiDescriptor phi0 can sometimes be == Pi which causes navigation errors
+          if ((roiDescriptor)->phi() >= M_PI){
+#ifndef NDEBUG
+              if((*m_log).level() <= MSG::DEBUG){
+                  (*m_log) << MSG::DEBUG << "RoI descriptor phi >= M_PI, this causes issues with the creation of RoI descriptors: therefore setting phi to M_PI-0.001"<<endmsg;
+              }
+#endif
+              m_jet->setPhi( M_PI-0.001 );
+              }
+          else{
+              m_jet->setPhi( (roiDescriptor)->phi() );
+          }
+          //m_jet->setPhi( (roiDescriptor)->phi() );
+          m_jet->setE ( m_jetL1Tools->ET8x8()*1e3*cosh((roiDescriptor)->eta()) );
+          //m_jet->setEem0 ( 0.0 );
+          //m_jet->setEhad0 ( 0.0 );
+  }
+
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+     (*m_log) << MSG::DEBUG << " Values of T2L1CaloJet produced: " << endmsg;
+     (*m_log) << MSG::DEBUG << " REGTEST: Jet eta = " << m_jet->eta() << endmsg;
+     (*m_log) << MSG::DEBUG << " REGTEST: Jet phi = " << m_jet->phi() << endmsg;
+     (*m_log) << MSG::DEBUG << " REGTEST: Jet energy = " << m_jet->e() << endmsg;
+     (*m_log) << MSG::DEBUG << " REGTEST: Jet et = " << m_jet->et() << endmsg;
+  }
+#endif
+
+  m_e = m_jet->e();
+  //m_ehad0 = m_jet->ehad0();
+  //m_eem0 = m_jet->eem0();
+  m_eta = m_jet->eta();
+  m_et = m_e/cosh(m_eta);
+  m_phi = m_jet->phi();
+  
+  if(timerSvc()) m_timer[2]->stop(); // end of jet finding
+  if(timerSvc()) m_timer[3]->start(); // start of RoI creation
+
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+    (*m_log) << MSG::DEBUG << "Recording created features"<<endmsg;
+  }
+#endif
+  
+  std::string key = "";
+
+  hltStatus = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+  if (hltStatus != HLT::OK) {
+    if((*m_log).level() <= MSG::DEBUG) {
+      (*m_log) << MSG::ERROR << "Write of TrigT2Jet into outputTE failed"
+	    << endmsg;
+    }
+    return hltStatus;
+  }
+
+
+  // =========================
+  //       make OutputTE
+  // =========================
+
+  // Create a new RoiDescriptor with updated eta and phi.
+  // Note that the steering will propagate l1Id and roiId automatically
+  // so no need to set them.
+  // How big is theis RoI ?????
+  TrigRoiDescriptor* newRoiDescriptor =
+    new TrigRoiDescriptor(roiDescriptor->roiWord(), roiDescriptor->l1Id(), roiDescriptor->roiId(),
+			  m_jet->eta(), m_jet->eta(), m_jet->eta(), 
+			  m_jet->phi(), m_jet->phi(), m_jet->phi()
+			  ); // We forward the roiWord to the EF
+
+
+  hltStatus = attachFeature(outputTE, newRoiDescriptor, m_jetOutputKey);
+
+  if ( hltStatus != HLT::OK ) {
+    (*m_log) << MSG::ERROR << "Write of update TrigRoiDescriptor into outputTE failed"
+	  << endmsg;
+    return hltStatus;
+  }
+
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG) {
+    (*m_log) << MSG::DEBUG  << "Recorded an RoiDescriptor "
+	  << " phi " <<  newRoiDescriptor->phi()
+	  << " eta " << newRoiDescriptor->eta() << endmsg;
+    (*m_log) << MSG::DEBUG
+	  << "We assume success, set TE with Id "
+	  << outputTE->getId()
+	  << " active to signal positive result."
+	  << endmsg;
+  }
+#endif
+  
+  if (timerSvc()) {
+    m_timer[3]->stop();// end of RoI creation
+    m_timer[0]->stop();// end of algorithm
+  }  
+
+#ifndef NDEBUG
+  if((*m_log).level() <= MSG::DEBUG){
+    (*m_log) << MSG::DEBUG << " Finished T2L1CaloJet FEX " << name() << endmsg;
+  }
+#endif
+  
+  return HLT::OK;
+}
+
+
+HLT::ErrorCode T2L1CaloJet::hltFinalize()
+{
+  m_storedJEs->clear();
+  delete m_storedJEs;
+ 
+  if ( (*m_log).level() <= MSG::INFO ){
+    (*m_log) << MSG::INFO << "Finalizing: " << name() << endmsg;
+    
+  }
+  delete m_log;
+  
+  return HLT::OK;
+}
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetCalibTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetCalibTool.cxx
new file mode 100644
index 000000000000..79d9f082ad60
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetCalibTool.cxx
@@ -0,0 +1,236 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2L1CaloJetCalibTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>
+CREATED:  June 2012
+
+
+PURPOSE: Calibration tool for L2FS jets. 
+         
+
+
+********************************************************************/
+#include "TrigT2CaloJet/T2L1CaloJetCalibTool.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "AthenaKernel/Timeout.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+//-----------------------------------------------------------------
+//  Constructor
+//-----------------------------------------------------------------
+T2L1CaloJetCalibTool::T2L1CaloJetCalibTool(const std::string& type,
+                                           const std::string& name,
+                                           const IInterface* parent):
+                                           T2CaloJetBaseTool(type, name, parent)
+{  
+    declareInterface<T2L1CaloJetCalibTool>( this );
+    // configurables
+    declareConstant("Calib_Factors", m_CalibConstants); 
+    //declareProperty("Et_bin_edges",  m_et_bin_lower_edges); 
+    declareProperty("Eta_bin_edges", m_eta_bin_lower_edges); 
+    //declareConstant("Phi_bin_edges", m_phi_bin_lower_edges); 
+    
+  
+}
+
+//-----------------------------------------------------------------
+//  Destructor
+//-----------------------------------------------------------------
+T2L1CaloJetCalibTool::~T2L1CaloJetCalibTool() 
+{
+}
+
+//-----------------------------------------------------------------
+//  Initialize:
+//-----------------------------------------------------------------
+StatusCode T2L1CaloJetCalibTool::initialize() 
+{
+    m_log = new MsgStream(msgSvc(), name());   
+    (*m_log) << MSG::INFO << " Initalizing Tool: " << name () << endmsg;
+    
+    if ( m_eta_bin_lower_edges.empty() ) { 
+        (*m_log) << MSG::ERROR << name() << ": No eta bin edges provided " << endmsg;
+        return StatusCode::FAILURE;        
+    } else { 
+        (*m_log) << MSG::INFO << " eta bin edges provided: " << m_eta_bin_lower_edges.size() << endmsg;
+        if((*m_log).level() <= MSG::DEBUG){
+            for  ( unsigned i=0 ; i<m_eta_bin_lower_edges.size() ; i++ ) {
+                (*m_log) << MSG::DEBUG   << "    - bin[" << i << "] lower edge: " << m_eta_bin_lower_edges[i] << endmsg;
+            }
+        }
+    }
+        
+
+    return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Execute
+//-----------------------------------------------------------------
+StatusCode T2L1CaloJetCalibTool::execute()
+{
+    return StatusCode::SUCCESS;
+}
+
+StatusCode T2L1CaloJetCalibTool::execute(TrigT2Jet* jet, double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/)
+{
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "===== Executing: T2L1CaloJetCalibTool " << name() << endmsg;
+    }
+#endif
+
+    // === get the input jet
+    
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){  
+        (*m_log) << MSG::DEBUG   << "  Initial TrigT2CaloJet Et: "  << jet->e()/cosh(jet->eta())
+                                 << " MeV, eta: "     << jet->eta() 
+                                 << ", phi: "         << jet->phi() 
+                                 << endmsg;
+        (*m_log) << MSG::DEBUG   << "    - EM Et: "    << jet->eem0()/cosh(jet->eta())
+                                 << " MeV, Had Et: "   << jet->ehad0()/cosh(jet->eta())
+                                 << " MeV, emf: "      << jet->emf() 
+                                 << endmsg;
+    }
+#endif
+    // calibrate the jet
+    int eta_bin = GetEtaBin(jet->eta());
+    double transverse_energy = jet->e()/cosh(jet->eta());
+    
+    double CalibFactor = GetCalibFactor(eta_bin,transverse_energy/1000.); 
+    double correction_factor = 1. / (1. + CalibFactor);
+    double em_correction_factor  = correction_factor;
+    double had_correction_factor = correction_factor;
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "    - Eta Bin:                   " << eta_bin << endmsg;
+        (*m_log) << MSG::DEBUG << "    - CalibFactor:               " << CalibFactor << endmsg;
+        (*m_log) << MSG::DEBUG << "    - Multiplicative correction: " << correction_factor << endmsg;
+        (*m_log) << MSG::DEBUG << "    - em correction: "             << em_correction_factor << endmsg;
+        (*m_log) << MSG::DEBUG << "    - had correction: "            << had_correction_factor << endmsg;
+        
+    }
+#endif
+    
+    double corrected_transverse_energy = (jet->e()/cosh(jet->eta()))*correction_factor;
+    double corrected_energy = corrected_transverse_energy*cosh(jet->eta() );      
+    jet->setE(corrected_energy);
+    
+    double corrected_em_transverse_energy = (jet->eem0()/cosh(jet->eta()))*em_correction_factor;
+    double corrected_em_energy = corrected_em_transverse_energy*cosh(jet->eta() );    
+    jet->setEem0(corrected_em_energy);
+    
+    double corrected_had_transverse_energy = (jet->ehad0()/cosh(jet->eta()))*had_correction_factor;
+    double corrected_had_energy = corrected_had_transverse_energy*cosh(jet->eta() );    
+    jet->setEhad0(corrected_had_energy);
+    
+    double emf = 0;
+    if (corrected_em_transverse_energy){
+        emf = jet->eem0() / jet->e();
+    }
+    jet->setEmf(emf);
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){  
+        (*m_log) << MSG::DEBUG << "  Calibrated TrigT2CaloJet: Et: "         << jet->e()/cosh(jet->eta())
+                               << " MeV, eta: "     << jet->eta() 
+                               << ", phi: "         << jet->phi()
+                               << endmsg;
+        (*m_log) << MSG::DEBUG   << "    - EM Et: "    << jet->eem0()/cosh(jet->eta())
+                                 << " MeV, Had Et: "   << jet->ehad0()/cosh(jet->eta())
+                                 << " MeV, emf: "      << jet->emf() 
+                                 << endmsg;
+    }
+#endif
+   
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "===== Finished: T2L1CaloJetCalibTool " << name() << endmsg;
+    }
+#endif
+    
+    return StatusCode::SUCCESS;
+}
+
+
+//-----------------------------------------------------------------
+//  Finalize:
+//-----------------------------------------------------------------
+StatusCode T2L1CaloJetCalibTool::finalize()
+{
+  delete m_log;
+  return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Calibration tools:
+//-----------------------------------------------------------------
+StatusCode T2L1CaloJetCalibTool::setProperty (const std::string& propname,
+                                                        const std::string& value)
+{
+    StatusCode sc = AlgTool::setProperty (propname, value);
+    if (sc.isFailure()) return sc;
+    
+    sc=CaloRec::ToolWithConstantsMixin::setProperty (propname, value);
+    if (sc.isFailure()) return sc;
+    
+    return StatusCode::SUCCESS;  
+}
+
+StatusCode T2L1CaloJetCalibTool::setProperty (const Property& p)
+{
+    StatusCode sc=AlgTool::setProperty (p);
+    if (sc.isFailure()) return sc;
+    
+    sc=CaloRec::ToolWithConstantsMixin::setProperty (p);
+    if (sc.isFailure()) return sc;
+    
+    return StatusCode::SUCCESS;
+  
+}
+
+int T2L1CaloJetCalibTool::GetEtaBin(double jet_eta)
+{
+    for  ( unsigned i=0 ; i<m_eta_bin_lower_edges.size(); i++ ) {
+        if (jet_eta < m_eta_bin_lower_edges[i]){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){  
+               (*m_log) << MSG::DEBUG << "      eta: "  << jet_eta
+                               << " < bin edge["   << i 
+                               << "]: "            << m_eta_bin_lower_edges[i]
+                               << endmsg;
+            }
+#endif
+            return i-1;
+        }
+    }
+    if (jet_eta < 0)  return 0; 
+    return m_eta_bin_lower_edges.size()-1;
+}
+
+
+double T2L1CaloJetCalibTool::GetCalibFactor(int etabin, double transverse_energy)
+{
+    //up to 7 parameter for the pol-fit
+    unsigned Npar=7;
+    double logET=1./log10(transverse_energy);
+    double y=0;
+    for (unsigned i=0;i<Npar;++i)
+        y += m_CalibConstants[etabin][i]*pow(logET,i);
+    return y;
+}
+
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanBaseTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanBaseTool.cxx
new file mode 100644
index 000000000000..b67bd030f110
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanBaseTool.cxx
@@ -0,0 +1,57 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2L1CaloJetFullScanBaseTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>
+CREATED:  July, 2011
+
+PURPOSE:  Base Tool for all T2L1CaloJetFullScan tools that require
+          a vector of T2CaloJet objects as its input.  The derived
+          tool must implement an execute(DataVector<T2CaloJet*>) method.
+
+********************************************************************/
+#include "TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+T2L1CaloJetFullScanBaseTool::T2L1CaloJetFullScanBaseTool(const std::string& type,
+				     const std::string& name,
+				     const IInterface* parent):
+  IAlgToolCalo(type, name, parent)
+{
+    declareInterface<T2L1CaloJetFullScanBaseTool>( this );
+}
+
+
+T2L1CaloJetFullScanBaseTool::~T2L1CaloJetFullScanBaseTool()
+{
+}
+
+StatusCode T2L1CaloJetFullScanBaseTool::initialize()
+{
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2L1CaloJetFullScanBaseTool::execute()
+{
+  return StatusCode::SUCCESS;
+}
+
+StatusCode T2L1CaloJetFullScanBaseTool::execute(DataVector<TrigT2Jet>* /*output jets*/,int& /*n_towers*/,float& /*L1 unpack time*/, float& /*all unpack time*/,float& /*fastjet time*/,float& /*all jet finding time*/)
+{
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2L1CaloJetFullScanBaseTool::finalize()
+{
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanFastJetTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanFastJetTool.cxx
new file mode 100644
index 000000000000..8bba44d7f6b7
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1CaloJetFullScanFastJetTool.cxx
@@ -0,0 +1,568 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2L1CaloJetFullScanFastJetTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>
+CREATED:  July, 2011
+
+PURPOSE:  FastJet Tool for full scan reconstruction of jets from Lvl-1
+          inputs.
+
+********************************************************************/
+#include "TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+
+#include "TrigT1CaloByteStream/ITrigT1CaloDataAccess.h"
+#include "TrigT1CaloToolInterfaces/IL1JetTools.h"
+#include "TrigT1CaloEvent/TriggerTower.h"
+
+#include "fastjet/ClusterSequence.hh"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+
+T2L1CaloJetFullScanFastJetTool::T2L1CaloJetFullScanFastJetTool(const std::string& type,
+                    const std::string& name,
+                    const IInterface* parent):
+    T2L1CaloJetFullScanBaseTool(type, name, parent),
+    m_dataL1("LVL1BS__TrigT1CaloDataAccess/TrigT1CaloDataAccess",0),
+    m_jet(0),
+    m_total_timer(0),
+    m_unpacking_timer(0),
+    m_load_collection_timer(0),
+    m_jet_finding_timer(0),
+    m_jet_def(0)
+  
+{
+    declareInterface<T2L1CaloJetFullScanFastJetTool>( this );
+    // configurables
+    declareProperty("TrigT1CaloDataAccess", m_dataL1, "L1 Calo Data Access");
+    declareProperty("doTriggerTowers",      m_doTriggerTowers = false);      
+    declareProperty("coneRadius",           m_coneRadius = 0.4);
+    declareProperty("pTmin",                m_pTmin = 5000.);
+    declareProperty("inputType",            m_inputType = T2L1::NONE);
+    // cleaning:
+    declareProperty("doCleaning",           m_doCleaning = true);
+    declareProperty("leadingCellFraction",  m_leadingCellFraction = 0.9);  // for jet cleaning, e.g.: n90 -> leadingCellFraction = 0.9
+    // debug
+    declareProperty("doJetFinding",         m_doJetFinding = true);
+}
+
+
+T2L1CaloJetFullScanFastJetTool::~T2L1CaloJetFullScanFastJetTool()
+{
+}
+
+StatusCode T2L1CaloJetFullScanFastJetTool::initialize()
+{ 
+    m_log = new MsgStream(msgSvc(), name());
+    
+    
+    (*m_log) << MSG::INFO << " Initalizing Tool: " << name () << endmsg;
+    (*m_log) << MSG::DEBUG << "Options: " << endmsg;
+    (*m_log) << MSG::DEBUG << "   doTriggerTowers:     " << m_doTriggerTowers << endmsg;
+    (*m_log) << MSG::DEBUG << "   coneRadius:          " << m_coneRadius << endmsg;
+    (*m_log) << MSG::DEBUG << "   pTmin:               " << m_pTmin << endmsg;
+    (*m_log) << MSG::DEBUG << "   inputType (hex):     " << std::hex << m_inputType << std::dec << endmsg;
+    (*m_log) << MSG::DEBUG << "   doCleaning:          " << m_doCleaning << endmsg;
+    (*m_log) << MSG::DEBUG << "   leadingCellFraction: " << m_leadingCellFraction << endmsg;
+    (*m_log) << MSG::DEBUG << "   doJetFinding:        " << m_doJetFinding << endmsg;
+    
+    // Initialize timing service
+    if( service( "TrigTimerSvc", m_pTimerService).isFailure() ) {
+        (*m_log) << MSG::WARNING << name() << ": Unable to locate TrigTimer Service" << endmsg;
+    } 
+    
+    if (m_pTimerService){
+        (*m_log) << MSG::DEBUG << " Adding timers" << endmsg;
+        //Add timers
+        m_total_timer            = m_pTimerService->addItem("LVL1_5_total_time");
+        m_unpacking_timer        = m_pTimerService->addItem("LVL1_5_FS_unpacking_time");
+        m_load_collection_timer  = m_pTimerService->addItem("LVL1_5_FS_load_collection_time");
+        m_jet_finding_timer      = m_pTimerService->addItem("LVL1_5_FS_jet_finding_time");
+        m_fastjet_timer          = m_pTimerService->addItem("LVL1_5_FS_fastjet_time");
+    }
+    
+    // Create helper tools
+    if ( m_dataL1.retrieve().isFailure() ) {
+        (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_dataL1 << endmsg;
+        m_retrievedJetTool = false;
+    } else {
+        m_retrievedJetTool = true;
+        (*m_log) << MSG::DEBUG << "Retrieved " << m_dataL1 << endmsg;
+    }
+    
+    // settings for Trigger tower retrieval
+    m_etaMin = -5.;
+    m_etaMax = 5.;
+    m_phiMin = 0.;
+    m_phiMax = 2 * M_PI;
+    m_fullScan = true; 
+    
+    // initialise storage for l1 towers
+    m_l1_tower_information.reserve(1000);
+    m_cellenergies.reserve(100);
+    
+    // initialise fast jet
+    m_particles.reserve(100);
+    m_constituents.reserve(100);
+    m_jets.reserve(100);
+    
+    if (m_doJetFinding){
+        (*m_log) << MSG::INFO << " Setting up fastjet jet definition" << endmsg;
+        m_jet_def = new fastjet::JetDefinition(fastjet::antikt_algorithm, m_coneRadius);
+        // dummy call to fast jet so it's internal initalize methods are set (and we don't print the banner during execute)
+        (*m_log) << MSG::INFO << " Making dummy call to fast jet cluster sequence" << endmsg;
+        m_particles.clear();
+        fastjet::ClusterSequence* cs(0);
+        cs = new fastjet::ClusterSequence(m_particles, *m_jet_def);
+        delete cs;
+    }
+    
+    
+    
+    return StatusCode::SUCCESS;
+}
+
+StatusCode T2L1CaloJetFullScanFastJetTool::execute()
+{
+    return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2L1CaloJetFullScanFastJetTool::execute(DataVector<TrigT2Jet>* output_t2_jets,int& n_towers,float& l1_unpack_time, float& all_unpack_time, float& fastjet_time, float& all_jet_finding_time)
+{ 
+    m_total_timer->reset();
+    m_unpacking_timer->reset();
+    m_load_collection_timer->reset();
+    m_jet_finding_timer->reset();
+    m_fastjet_timer->reset();
+    m_total_timer->start();
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "===== Executing: T2L1CaloJetFullScanFastJetTool " << name() << endmsg;
+    }
+#endif
+    
+    // output_t2_jets->clear(); // this should be cleared when it arrives
+    m_particles.clear();
+    m_constituents.clear();
+    m_jets.clear();
+    m_l1_tower_information.clear(); 
+    m_cellenergies.clear();
+    
+    n_towers = -9;
+    all_unpack_time = -9;
+    l1_unpack_time = -9;
+    fastjet_time = -9;
+    all_jet_finding_time = -9;
+    // === now fill the particles vector, this is different for jet elements and trigger towers
+    // eventually this could be split off into a seperate FEX to be reused by this, vl1 etc.
+    m_unpacking_timer->start();
+    
+    int counter = 0;
+    if ( m_doTriggerTowers ){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Trigger tower version" <<endmsg;
+        }
+#endif
+
+        DataVector<LVL1::TriggerTower>::const_iterator tt_begj, tt_endj;
+        
+        // now get TT's    
+        if ( m_retrievedJetTool ){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG   << "Loading the L1 data using ITrigT1CaloDataAccess tool"<< endmsg;
+                (*m_log) << MSG::DEBUG   << "Getting trigger towers using m_etaMin: " << m_etaMin 
+                         << ", etaMax: " << m_etaMax
+                         << ", phiMin: " << m_phiMin
+                         << ", phiMax: " << m_phiMax
+                         << ", full: "   << m_fullScan << endmsg;
+            }
+#endif
+            m_load_collection_timer->start();
+            StatusCode sc = m_dataL1->loadCollection(tt_begj,tt_endj,m_etaMin,m_etaMax,m_phiMin,m_phiMax,m_fullScan);
+            if (sc.isFailure()) {
+                (*m_log) << MSG::WARNING << "Error accessing trigger tower data" << endmsg;
+                return sc;
+            }
+            m_load_collection_timer->stop();
+        }
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG  << "Loaded trigger towers in "<< m_load_collection_timer->elapsed() << " ms" << endmsg;
+            (*m_log) << MSG::DEBUG  << "Looping over trigger towers"<< endmsg;
+        }
+#endif
+
+        for(; tt_begj!=tt_endj;++tt_begj){
+            const LVL1::TriggerTower* TT = (*tt_begj);
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "TriggerTower[" << counter
+                         << "]: ETs [GeV]: EM: " << TT->emEnergy()
+                         << ", HAD: "            << TT->hadEnergy()
+                         << ", eta: "            << TT->eta()
+                         << ", phi: "            << TT->phi() << endmsg;
+            }
+#endif
+            // change to a more standard phi definition
+            float tt_phi = TT->phi();
+            if( tt_phi >= M_PI ) tt_phi -= 2 * M_PI;
+            float transverse_energy = (TT->emEnergy() + TT->hadEnergy())*1000.;
+            float cosh_eta = cosh(TT->eta());
+            float energy = transverse_energy*cosh_eta;
+            // possibly do some calibration
+        
+            // now fill fast jet particles
+            float px = transverse_energy*cos(tt_phi);
+            float py = transverse_energy*sin(tt_phi);
+            float pz = transverse_energy*sinh(TT->eta());
+        
+            if (m_doJetFinding){
+                if (transverse_energy > 0.99){ // some Jet Elements have zero energy (this may also be true for trigger towers), there is no need to give these to fastjet
+                    fastjet::PseudoJet pseudo_jet( px, py, pz, energy);
+                    pseudo_jet.set_user_index(counter);
+                    m_particles.push_back( pseudo_jet );
+                }
+        
+                // now fill these into a vector of floats so we can construct cleaning variables later
+                if (m_doCleaning) {
+                    m_l1_tower_information.push_back(energy);
+                    m_l1_tower_information.push_back(TT->eta());
+                    m_l1_tower_information.push_back(TT->phi());
+                    m_l1_tower_information.push_back(TT->emEnergy()*cosh_eta*1000.);
+                    m_l1_tower_information.push_back(TT->hadEnergy()*cosh_eta*1000.);
+                }
+            }
+        
+            counter++;
+        }
+    } else { // if we aren't running on trigger towers we use jet elements instead
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Jet element version" <<endmsg;
+        }
+#endif
+        DataVector<LVL1::JetElement>::const_iterator je_begj, je_endj;
+    
+        if ( m_retrievedJetTool ){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "Loading the L1 data using ITrigT1CaloDataAccess tool, this loads the jet elements for the entire event"<< endmsg;
+            }
+#endif
+            m_load_collection_timer->start();
+            StatusCode sc = m_dataL1->loadCollection(je_begj,je_endj);
+            if (sc.isFailure()) {
+                (*m_log) << MSG::WARNING << "Error accessing jet element data" << endmsg;
+                return sc;
+            }
+            m_load_collection_timer->stop();
+        }
+
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG  << "Loaded jet elements in "<< m_load_collection_timer->elapsed() << " ms" << endmsg;
+            (*m_log) << MSG::DEBUG  << "Looping over the jet elements"<< endmsg;
+        }
+#endif
+
+        for(; je_begj!=je_endj;++je_begj){
+            const LVL1::JetElement* JE = (*je_begj); 
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG  << "JetElement[" << counter
+                        << "]: ETs [GeV]: EM: " << JE->emEnergy()
+                        << ", HAD: "            << JE->hadEnergy()
+                        << ", Total: "          << JE->energy()
+                        << ", eta: "            << JE->eta()
+                        << ", phi: "            << JE->phi() << endmsg;
+            }        
+#endif
+            
+            // change to a more standard phi definition
+            float je_phi = JE->phi();
+            if( je_phi >= M_PI ) je_phi -= 2 * M_PI;
+            float transverse_energy = JE->energy()*1000.;
+            float cosh_eta = cosh(JE->eta());
+            float energy = transverse_energy*cosh_eta;
+            // possibly do some calibration
+        
+            // now fill fast jet particles
+            float px = transverse_energy*cos(je_phi);
+            float py = transverse_energy*sin(je_phi);
+            float pz = transverse_energy*sinh(JE->eta());
+            
+            if (m_doJetFinding){
+                if (JE->energy() > 0.99){ // some Jet Elements have zero energy, there is no need to give these to fastjet
+                    fastjet::PseudoJet pseudo_jet( px, py, pz, energy);
+                    pseudo_jet.set_user_index(counter);
+                    m_particles.push_back( pseudo_jet );
+                }                   
+                // now fill these into a vector of floats so we can construct cleaning variables later
+                if (m_doCleaning) {
+                    m_l1_tower_information.push_back(energy);
+                    m_l1_tower_information.push_back(JE->eta());
+                    m_l1_tower_information.push_back(JE->phi());
+                    m_l1_tower_information.push_back(JE->emEnergy()*cosh_eta*1000.);
+                    m_l1_tower_information.push_back(JE->hadEnergy()*cosh_eta*1000.);
+                }
+            }
+            counter++;
+        }
+    } // end of particle creation step
+    m_unpacking_timer->stop();
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "A total of " << m_particles.size()  << " L1 particles are to be clustered" << endmsg;
+        if (m_doCleaning) { (*m_log) << MSG::DEBUG  << "A total of " << m_l1_tower_information.size()/5. << " are saved as L1 towers for the cleaning" << endmsg; }
+    }
+#endif
+    // ===== now find the jets
+    m_jet_finding_timer->start();
+    if (m_doJetFinding){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG <<  "Performing jet finding " << endmsg;
+        }
+#endif        
+        // run the clustering, extract the jets
+        m_fastjet_timer->start();
+        fastjet::ClusterSequence* cs(0);
+        cs = new fastjet::ClusterSequence(m_particles, *m_jet_def);
+          
+        m_jets = fastjet::sorted_by_pt(cs->inclusive_jets(m_pTmin)); // sorted by increasing pt
+        m_fastjet_timer->stop();
+        std::reverse(m_jets.begin(),m_jets.end());  // sorted by decreasing pt
+          
+        // inspect the output jets and make some cleaning variables
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG <<  "== Resultant jets " << endmsg;
+        }
+#endif
+        for (unsigned i = 0; i < m_jets.size(); ++i) {
+            m_constituents = fastjet::sorted_by_pt(cs->constituents(m_jets[i]));
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG << " fastjet jet " << i 
+                        << ": Et: "             << m_jets[i].e()/cosh(m_jets[i].eta()) 
+                        << " MeV, eta: "        << m_jets[i].eta() 
+                        << ", phi: "            << m_jets[i].phi_std() 
+                        << ", rapidity: "       << m_jets[i].rapidity() 
+                        << ", n constituents: "  << m_constituents.size() << endmsg;
+            }
+#endif
+            int nLeadingCells = -9;
+            float em_energy = -9;
+            float em_frac = -9;
+            float had_energy = -9;
+            
+            if (m_doCleaning) {
+#ifndef NDEBUG
+                if((*m_log).level() <= MSG::DEBUG){
+                   (*m_log) << MSG::DEBUG  << "Computing cleaning variables "<< endmsg;
+                }
+#endif
+                float total_energy = 0.;
+                //float had_frac = 0.;
+                em_energy = 0.;
+                em_frac = 0.;
+                had_energy = 0.;
+                //had_frac = 0.;
+                for (unsigned ii = 0; ii < m_constituents.size(); ++ii){
+                    int l1_id = m_constituents[ii].user_index();
+                    float energy = m_l1_tower_information.at((l1_id*5));
+                    float emEnergy = m_l1_tower_information.at((l1_id*5)+3);
+                    float hadEnergy = m_l1_tower_information.at((l1_id*5)+4);
+        
+#ifndef NDEBUG
+                    float eta = m_l1_tower_information.at((l1_id*5)+1);      
+                    float phi = m_l1_tower_information.at((l1_id*5)+2);
+                    float transverse_energy = energy / cosh(eta);
+                    
+                    if((*m_log).level() <= MSG::DEBUG){
+                       (*m_log) << MSG::DEBUG << "      constituent[" << std::setw(3) << ii 
+                         << "]: Et: "         << std::setw(8) << m_constituents[ii].e()/cosh(m_constituents[ii].eta()) 
+                         //<< " MeV (em,had) (" << std::setw(8) << emEnergy/cosh(eta)
+                         //<<","                << std::setw(8) << hadEnergy/cosh(eta)
+                         << ", eta: "         << std::setw(8) << m_constituents[ii].eta() 
+                         << ", phi: "         << std::setw(8) << m_constituents[ii].phi_std() 
+                         << ", rapidity: "    << std::setw(6) << m_constituents[ii].rapidity() 
+                         << ", user index: "  << std::setw(5) << m_constituents[ii].user_index() << endmsg;
+                         
+                       (*m_log) << MSG::VERBOSE << "  L1 tower[" << l1_id 
+                         << "]: Et: "          << transverse_energy
+                         << " GeV (em,had) ("  << emEnergy / cosh(eta)
+                         << ","                << hadEnergy / cosh(eta)
+                         << "), energy: "      << energy
+                         << ", eta: "          << eta 
+                         << ", phi: "          << phi << endmsg;
+                    }
+#endif
+            
+                    // cleaning:        
+                    total_energy+=energy;
+                    em_energy+=emEnergy;
+                    had_energy+=hadEnergy;      
+                    m_cellenergies.push_back( energy );  
+            
+                }
+            
+                if (total_energy > 0.){
+                    em_frac = em_energy / total_energy;
+                    //had_frac= had_energy / total_energy;
+                } 
+                
+                // sort cell-energy vector. (most energetic cell at end of vector)
+                nLeadingCells = 0;
+                std::sort(m_cellenergies.begin(), m_cellenergies.end());
+                float running_energy_sum = 0.;
+                for(int k = m_cellenergies.size()-1; k > -1; --k){
+                    running_energy_sum += m_cellenergies[k];
+                    nLeadingCells++;
+                    if(running_energy_sum > m_leadingCellFraction*total_energy){
+                        break;
+                    }
+                }
+#ifndef NDEBUG
+                if((*m_log).level() <= MSG::DEBUG){
+                   (*m_log) << MSG::DEBUG << " total Et: " << total_energy/cosh(m_jets[i].eta()) 
+                     << " MeV (em,had) ("   << em_energy/cosh(m_jets[i].eta()) 
+                     << ","                 << had_energy/cosh(m_jets[i].eta()) 
+                     << "), em frac: "      << em_frac 
+                     << ", had frac: "      << (total_energy ? had_energy / total_energy : 0)
+                     << ", nLeadingCells: " << nLeadingCells
+                     << endmsg;
+                }
+#endif
+            }
+
+            // =========================
+            //  Record the final jet
+            // =========================
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                 (*m_log) << MSG::DEBUG  << " making TrigT2Jet "<< endmsg;
+            }
+#endif
+    
+            m_jet = new TrigT2Jet();
+                
+            // Add RoI word to Jet
+            int outputType = T2L1::UNKNOWN;
+            if (m_doTriggerTowers){
+                if (m_coneRadius==0.4){ 
+                    outputType = T2L1::A4TT; 
+                } else if (m_coneRadius==1.0){
+                    outputType = T2L1::A10TT; 
+                } else {
+#ifndef NDEBUG
+                    if((*m_log).level() <= MSG::DEBUG)
+                        (*m_log) << MSG::DEBUG  << " unable to determine RoI type from m_coneRadius = " << m_coneRadius << ", setting output RoI type to UNKNOWN" << endmsg;
+#endif
+                    outputType = T2L1::UNKNOWN;
+                }
+            } else {
+                if (m_coneRadius==0.4){ 
+                    outputType = T2L1::A4JE; 
+                } else if (m_coneRadius==1.0){
+                    outputType = T2L1::A10JE; 
+                } else {
+#ifndef NDEBUG
+                    if((*m_log).level() <= MSG::DEBUG)
+                        (*m_log) << MSG::DEBUG  << " unable to determine RoI type from m_coneRadius = " << m_coneRadius << ", setting output RoI type to UNKNOWN" << endmsg;
+#endif
+                    outputType = T2L1::UNKNOWN;
+                }
+            }
+                
+            m_jet->set_RoIword(T2L1::BLANKWORD+T2L1::INPUT*m_inputType+T2L1::OUTPUT*outputType+i);
+        
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG)
+                (*m_log) << MSG::DEBUG  << " RoI word set to: " << std::hex << m_jet->RoIword() << std::dec << endmsg;
+#endif
+         
+            // Set properties
+            m_jet->setE(m_jets[i].e());
+            m_jet->setEta(m_jets[i].eta());
+            m_jet->setPhi(m_jets[i].phi_std());    
+            m_jet->setEem0(em_energy);
+            m_jet->setEhad0(had_energy);
+            m_jet->setEmf(em_frac);
+            m_jet->setNLeadingCells(nLeadingCells);
+            
+            // look at the jet produced
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::VERBOSE){
+               (*m_log) << MSG::VERBOSE << " Values of T2CaloJet produced: " << endmsg;
+               (*m_log) << MSG::VERBOSE << " REGTEST: Jet eta = " << m_jet->eta() << endmsg;
+               (*m_log) << MSG::VERBOSE << " REGTEST: Jet phi = " << m_jet->phi() << endmsg;
+               (*m_log) << MSG::VERBOSE << " REGTEST: Jet energy = " << m_jet->e() << endmsg;
+               (*m_log) << MSG::VERBOSE << " REGTEST: Jet et = " << m_jet->et() << endmsg;
+            }
+#endif
+            output_t2_jets->push_back(m_jet);
+        } // end of loop on found jets
+        
+        // delete the fast jet cluster sequence
+        delete cs;
+    }
+    m_jet_finding_timer->stop();
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG <<  "FastJet completed in "  << m_fastjet_timer->elapsed() << " ms " << endmsg;
+        (*m_log) << MSG::DEBUG <<  "Jet finding completed in "  << m_jet_finding_timer->elapsed() << " ms " << endmsg;
+    }
+#endif
+    m_total_timer->stop();
+    // fill monitoring variables
+    n_towers = counter;
+    l1_unpack_time = m_load_collection_timer->elapsed();
+    all_unpack_time = m_unpacking_timer->elapsed();
+    fastjet_time = m_fastjet_timer->elapsed();
+    all_jet_finding_time = m_jet_finding_timer->elapsed();
+  
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "================= Finished T2L1CaloFullScanFastJetTool " << name() << " in " << m_total_timer->elapsed() << " ms " << endmsg;
+    }
+#endif
+
+    return StatusCode::SUCCESS;
+}
+
+
+StatusCode T2L1CaloJetFullScanFastJetTool::finalize()
+{
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << " Finalising: T2L1CaloJetFullScanFastJetTool " << name() << endmsg;
+    }
+    delete m_log;
+    m_particles.clear();
+    m_jets.clear();
+    m_constituents.clear();
+    m_l1_tower_information.clear();
+    m_cellenergies.clear();
+    
+    if ( bool(m_jet_def) ){
+        delete m_jet_def;
+    }
+    return StatusCode::SUCCESS;
+}
+
+
+
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1TowerCalibTool.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1TowerCalibTool.cxx
new file mode 100644
index 000000000000..4ba90e3381a9
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1TowerCalibTool.cxx
@@ -0,0 +1,255 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     T2L1TowerCalibTool.cxx
+PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+
+AUTHORS:  Matthew Tamsett <tamsett@cern.ch>, Carlos Sandoval <csandova@mail.cern.ch>
+CREATED:  December 2011
+
+
+PURPOSE: Calibration tool for L1 towers. 
+         
+
+
+********************************************************************/
+#include "TrigT2CaloJet/T2L1TowerCalibTool.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+#include "AthenaKernel/Timeout.h"
+
+#include "GaudiKernel/IToolSvc.h"
+
+//-----------------------------------------------------------------
+//  Constructor
+//-----------------------------------------------------------------
+T2L1TowerCalibTool::T2L1TowerCalibTool(const std::string& type,
+                                       const std::string& name,
+                                       const IInterface* parent):
+                                       T2CaloJetBaseTool(type, name, parent),
+                                       m_grid_element(0)
+{  
+    declareInterface<T2L1TowerCalibTool>( this );
+    // configurables
+    declareConstant("Calib_Factors", m_CalibConstants); 
+    
+  
+}
+
+//-----------------------------------------------------------------
+//  Destructor
+//-----------------------------------------------------------------
+T2L1TowerCalibTool::~T2L1TowerCalibTool() 
+{
+}
+
+//-----------------------------------------------------------------
+//  Initialize:
+//-----------------------------------------------------------------
+StatusCode T2L1TowerCalibTool::initialize() 
+{
+    m_log = new MsgStream(msgSvc(), name());   
+    (*m_log) << MSG::INFO << " Initalizing Tool: " << name () << endmsg;
+    
+    // output
+    m_grid_element = new Trig3Momentum();
+
+    return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Execute
+//-----------------------------------------------------------------
+StatusCode T2L1TowerCalibTool::execute()
+{
+    return StatusCode::SUCCESS;
+}
+
+StatusCode T2L1TowerCalibTool::execute(TrigT2Jet* jet, double /*etamin*/, double /*etamax*/, double /*phimin*/, double /*phimax*/)
+{
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "===== Executing: T2L1TowerCalibTool " << name() << endmsg;
+    }
+#endif
+
+    // === get the input particles
+    
+    std::vector<Trig3Momentum>* old_grid = jet->grid();
+    std::vector<Trig3Momentum>* new_grid = new std::vector<Trig3Momentum>();
+    new_grid->reserve(8000);
+
+#ifndef NDEBUG
+   if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "A total of " << old_grid->size()  << " particles are to be calibrated" << endmsg;
+    }
+#endif
+    
+    // === Unpack the grid
+    std::vector<Trig3Momentum>::const_iterator begin_grid, end_grid; 
+    begin_grid = old_grid->begin();
+    end_grid = old_grid->end();  
+    int jet_counter = 0; 
+    for (; begin_grid != end_grid; ++begin_grid){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::VERBOSE){  
+            (*m_log) << MSG::VERBOSE << "  Initial Trig3Momentum["  << jet_counter
+                                   << "]: Et: "         << begin_grid->e()/cosh(begin_grid->eta())
+                                   << " MeV, eta: "     << begin_grid->eta() 
+                                   << ", phi: "         << begin_grid->phi() 
+                                   << ", sampling: "    << std::hex << begin_grid->caloSample() << std::dec
+                                   << ", provenance: "  << begin_grid->provenance() << endmsg;
+        }
+#endif
+        // calibrate the towers
+        double transverse_energy_uncorrected = begin_grid->e()/cosh(begin_grid->eta());
+        if (begin_grid->provenance()!=9999){
+            // If provenance is set then this tower has been split into its EM and HAD components for clustering.
+            // Calibration is currently based on the sum of energy, therefore we must recover the sum energy before 
+            // obtaining the calibration factor
+            double extra_energy = old_grid->at(begin_grid->provenance()).e()/cosh(begin_grid->eta());
+            transverse_energy_uncorrected = transverse_energy_uncorrected + extra_energy;
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::VERBOSE){  
+                (*m_log) << MSG::VERBOSE << "    - EM + HAD ET:  "  << transverse_energy_uncorrected << endmsg;
+            }
+#endif
+        }
+        
+        int eta_bin = GetEtaBin(begin_grid->eta() );
+        int phi_bin = GetPhiBin(begin_grid->phi());
+        int et_bin = GetEtBin(transverse_energy_uncorrected);
+        double CalibFactor = GetEtaCalibFactor(eta_bin,phi_bin,et_bin); 
+        
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::VERBOSE){
+            (*m_log) << MSG::VERBOSE << "    - Eta Bin:     " << eta_bin << endmsg;
+            (*m_log) << MSG::VERBOSE << "    - Phi Bin:     " << phi_bin << endmsg;
+            (*m_log) << MSG::VERBOSE << "    - Et Bin:      " << et_bin  << endmsg;
+            (*m_log) << MSG::VERBOSE << "    - CalibFactor: " << CalibFactor << endmsg;
+        }
+#endif
+        
+        double corrected_transverse_energy = (begin_grid->e()/cosh(begin_grid->eta()))*CalibFactor;
+        double corrected_energy = corrected_transverse_energy*cosh(begin_grid->eta() );
+          
+        m_grid_element->setE(corrected_energy);
+        m_grid_element->setEta(begin_grid->eta());
+        m_grid_element->setPhi(begin_grid->phi());   
+        m_grid_element->setCaloSample(begin_grid->caloSample()); 
+        
+        new_grid->push_back(*m_grid_element);     
+        
+
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){  
+            (*m_log) << MSG::DEBUG << "  Calibrated Trig3Momentum["  << jet_counter
+                                   << "]: Et: "         << m_grid_element->e()/cosh(m_grid_element->eta())
+                                   << " MeV, eta: "     << m_grid_element->eta() 
+                                   << ", phi: "         << m_grid_element->phi() 
+                                   << ", sampling: "    << std::hex << m_grid_element->caloSample() << std::dec << endmsg;
+        }
+#endif
+        jet_counter++;
+
+    }
+
+#ifndef NDEBUG
+   if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "A total of " << new_grid->size()  << " particles were calibrated" << endmsg;
+    }
+#endif
+
+    jet->setGrid(new_grid);
+    delete old_grid;
+
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "===== Finished: T2L1TowerCalibTool " << name() << endmsg;
+    }
+#endif
+    
+    return StatusCode::SUCCESS;
+}
+
+
+//-----------------------------------------------------------------
+//  Finalize:
+//-----------------------------------------------------------------
+StatusCode T2L1TowerCalibTool::finalize()
+{
+  delete m_log;
+  delete m_grid_element;
+  return StatusCode::SUCCESS;
+}
+
+//-----------------------------------------------------------------
+//  Calibration tools:
+//-----------------------------------------------------------------
+StatusCode T2L1TowerCalibTool::setProperty (const std::string& propname,
+                                                        const std::string& value)
+{
+    StatusCode sc = AlgTool::setProperty (propname, value);
+    if (sc.isFailure()) return sc;
+    
+    sc=CaloRec::ToolWithConstantsMixin::setProperty (propname, value);
+    if (sc.isFailure()) return sc;
+    
+    return StatusCode::SUCCESS;  
+}
+
+StatusCode T2L1TowerCalibTool::setProperty (const Property& p)
+{
+    StatusCode sc=AlgTool::setProperty (p);
+    if (sc.isFailure()) return sc;
+    
+    sc=CaloRec::ToolWithConstantsMixin::setProperty (p);
+    if (sc.isFailure()) return sc;
+    
+    return StatusCode::SUCCESS;
+  
+}
+
+int T2L1TowerCalibTool::GetEtaBin(double jet_eta)
+{
+    //45 eta bins
+    int ieta=int(((jet_eta*10)+45)/2);
+    // if (jet_eta<0) ieta-=1;
+    if ( ieta <  0 ) return 0;
+    if ( ieta > 43 ) return 44;
+    return ieta;
+}
+
+
+int T2L1TowerCalibTool::GetPhiBin(double jet_phi)
+{
+    //32 eta bins
+    int iphi=int(((jet_phi*10)+M_PI*10)/2);
+    // if (jet_eta<0) ieta-=1;
+    if ( iphi <  0 ) return 0;
+    if ( iphi > 31 ) return 31;
+    return iphi;
+}
+
+
+
+int T2L1TowerCalibTool::GetEtBin(double jet_et)
+{
+    //21 Et bins
+    int iet = int(log10(jet_et/1000.)*10-10);
+    if ( iet <  0 ) return 0;
+    if ( iet > 19 ) return 20;
+    return iet;
+}
+
+
+double T2L1TowerCalibTool::GetEtaCalibFactor(int etabin, int /* phibin */, int etbin)
+{
+    return m_CalibConstants[etabin][etbin];
+}
+
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1Unpacking.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1Unpacking.cxx
new file mode 100644
index 000000000000..008cfa2e914a
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/T2L1Unpacking.cxx
@@ -0,0 +1,649 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2L1Unpacking.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloJet
+//
+// AUTHOR:   Matthew Tamsett, tamsett@cern.ch
+//
+// Description: Level 1.5 unpacking FEX algorithm
+// ********************************************************************
+
+#include "TrigT2CaloJet/T2L1Unpacking.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+#include "TrigCaloEvent/TrigT2Jet.h"
+//#include "TrigCaloEvent/TrigT2JetContainer.h"
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+
+#include "TrigT1CaloByteStream/ITrigT1CaloDataAccess.h"
+#include "TrigT1CaloToolInterfaces/IL1JetTools.h"
+#include "TrigT1CaloEvent/TriggerTower.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+
+
+
+T2L1Unpacking::T2L1Unpacking(const std::string & name, ISvcLocator* pSvcLocator)
+  : HLT::AllTEAlgo(name, pSvcLocator),
+  m_tools(this),
+  //m_total_timer(0),
+  m_l1_unpacking_timer(0),
+  m_unpacking_timer(0),
+  m_calibration_timer(0),
+  m_RoI_timer(0),
+  m_dataL1("LVL1BS__TrigT1CaloDataAccess/TrigT1CaloDataAccess",0),
+  m_jet(0),
+  m_grid_element(0)
+{   
+    // configurables
+    declareProperty("TrigT1CaloDataAccess", m_dataL1, "L1 Calo Data Access");
+    declareProperty("jetOutputKey",         m_jetOutputKey = "T2L1Towers");
+    declareProperty("doTriggerTowers",      m_doTriggerTowers = false); 
+    declareProperty("T2JetTools",           m_tools, "list of Jet tools");
+        
+    // monitoring
+    declareMonitoredVariable("L1UnpckTime",    m_L1UnpckTime);
+    declareMonitoredVariable("UnpckTime",      m_UnpckTime);
+    declareMonitoredVariable("CalibrationTime",m_CalibrationTime);
+    declareMonitoredVariable("RoITime",        m_RoITime);
+    //declareMonitoredVariable("OverallTime",    m_TotalTime);
+    declareMonitoredVariable("nTowers",        m_nTowers);
+    declareMonitoredVariable("nEMTowers",      m_nEMTowers);
+    declareMonitoredVariable("nHADTowers",     m_nHADTowers);
+    declareMonitoredVariable("nTowers_zoom",   m_nTowers);
+    declareMonitoredVariable("nEMTowers_zoom", m_nEMTowers);
+    declareMonitoredVariable("nHADTowers_zoom",m_nHADTowers);
+    declareMonitoredStdContainer("Et",         m_et);
+    declareMonitoredStdContainer("EtEM",       m_et_em);
+    declareMonitoredStdContainer("EtHAD",      m_et_had);
+    declareMonitoredStdContainer("Eta",        m_eta);
+    declareMonitoredStdContainer("EtaEM",      m_eta_em);
+    declareMonitoredStdContainer("EtaHAD",     m_eta_had);
+    declareMonitoredStdContainer("Phi",        m_phi);
+    declareMonitoredStdContainer("PhiEM",      m_phi_em);
+    declareMonitoredStdContainer("PhiHAD",     m_phi_had);
+    
+}
+
+HLT::ErrorCode T2L1Unpacking::hltInitialize()
+{
+    m_log = new MsgStream(msgSvc(), name());
+    
+    if((*m_log).level() <= MSG::INFO){
+        (*m_log) << MSG::INFO << " Initalizing FEX algorithm: " << name() << endmsg;
+        //(*m_log) << MSG::DEBUG << "Options: " << endmsg;
+    }
+    
+   // Initialize timing service
+    if( service( "TrigTimerSvc", m_pTimerService).isFailure() ) {
+        (*m_log) << MSG::WARNING << name() << ": Unable to locate TrigTimer Service" << endmsg;
+    } 
+    
+    if (m_pTimerService){
+        (*m_log) << MSG::DEBUG << " Adding timers" << endmsg;
+        //Add timers
+        //m_total_timer        = addTimer("total_time");
+        m_l1_unpacking_timer = addTimer("l1_unpacking_time");
+        m_unpacking_timer    = addTimer("unpacking_time");
+        m_calibration_timer  = addTimer("calibration_time");
+        m_RoI_timer          = addTimer("RoI_time");
+    }
+    
+    // Create helper tools
+    if ( m_dataL1.retrieve().isFailure() ) {
+        (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_dataL1 << endmsg;
+        m_retrievedJetTool = false;
+    } else {
+        m_retrievedJetTool = true;
+        (*m_log) << MSG::DEBUG << "Retrieved " << m_dataL1 << endmsg;
+    }
+    
+    if ( m_tools.retrieve().isFailure() ) {
+        (*m_log) << MSG::ERROR << "Failed to retreive helper tools: " << m_tools << endmsg;
+    } else {
+        (*m_log) << MSG::INFO << "Retrieved " << m_tools << endmsg;
+    }
+    
+    // settings for Trigger tower retrieval
+    m_etaMin = -5.;
+    m_etaMax = 5.;
+    m_phiMin = 0.;
+    m_phiMax = 2 * M_PI;
+    m_fullScan = true; 
+ 
+    /// aha! fullscan should be from -pi to pi
+   
+    // output
+    m_grid_element = new Trig3Momentum();
+    
+    
+    
+    return HLT::OK;
+}
+
+T2L1Unpacking::~T2L1Unpacking(){
+}
+
+HLT::ErrorCode T2L1Unpacking::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& /*tes_in*/,
+                                               unsigned int type_out)
+{
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    beforeExecMonitors().ignore();
+    
+    // ==== pre-execute setup
+    if(doTiming()) {
+        //m_total_timer->reset();
+        m_l1_unpacking_timer->reset();
+        m_unpacking_timer->reset();
+        m_calibration_timer->reset();
+        m_RoI_timer->reset();
+        //m_total_timer->start();
+    }
+    m_nTowers = -99;
+    m_nEMTowers = -99;
+    m_nHADTowers = -99;
+    m_UnpckTime = -99;
+    m_RoITime = -99;
+    //m_TotalTime = -99;
+    m_et.clear();
+    m_et_em.clear();
+    m_et_had.clear();
+    m_eta.clear();
+    m_eta_em.clear();
+    m_eta_had.clear();
+    m_phi.clear();
+    m_phi_em.clear();
+    m_phi_had.clear();
+    
+   
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "================= Executing T2L1Unpacking FEX " << name() << endmsg;
+        
+    }
+#endif
+    
+    // === setup the output trigger element
+    if(doTiming()) m_RoI_timer->start();
+    
+    TrigRoiDescriptor* roi = new TrigRoiDescriptor( true );
+
+    HLT::TriggerElement* outputTE = addRoI(type_out, roi  ); /// NB: a fullscan RoI !!!
+    outputTE->setActiveState(true); 
+    if(doTiming()) m_RoI_timer->stop();
+    
+    if(doTiming()) m_unpacking_timer->start();
+    std::vector<Trig3Momentum>* grid = new std::vector<Trig3Momentum>();
+    grid->reserve(8000);
+    
+    // === unpacking    
+    int counter = 0;
+    uint16_t tower_by_sampling_counter = 0;
+    int recorded_counter = 0;
+    int EM_recorded_counter = 0;
+    int HAD_recorded_counter = 0;
+    if ( m_doTriggerTowers ){
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Trigger tower version" <<endmsg;
+        }
+#endif
+        // now get TT's    
+        DataVector<LVL1::TriggerTower>::const_iterator tt_begj, tt_endj;
+        if ( m_retrievedJetTool ){        
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG   << "Loading the L1 data using ITrigT1CaloDataAccess tool"<< endmsg;
+		(*m_log) << MSG::DEBUG   << "Getting trigger towers using "
+			 << " roi: " << *roi 
+		   //         << "  etaMin: " << m_etaMin 
+		   //         << ", etaMax: " << m_etaMax
+		   //         << ", phiMin: " << m_phiMin
+		   //         << ", phiMax: " << m_phiMax
+                         << ", full: "   << m_fullScan << endmsg;
+            }
+#endif
+            if(doTiming()) m_l1_unpacking_timer->start();
+            StatusCode sc = m_dataL1->loadCollection( tt_begj, tt_endj, 
+						      roi->etaMinus(), roi->etaPlus(),
+						      roi->phiMinus(), roi->phiPlus(), roi->isFullscan() );
+            if(doTiming()) m_l1_unpacking_timer->stop();
+            if (sc.isFailure()) {
+                (*m_log) << MSG::WARNING << "Error accessing trigger tower data" << endmsg;
+                return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+            }
+            
+#ifndef NDEBUG     
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "Loaded trigger towers in "<< m_l1_unpacking_timer->elapsed() << " ms" << endmsg;
+                (*m_log) << MSG::DEBUG  << "Looping over trigger towers"<< endmsg;
+            }
+#endif
+        }
+        for(; tt_begj!=tt_endj;++tt_begj){
+            const LVL1::TriggerTower* TT = (*tt_begj);
+#ifndef NDEBUG   
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "TriggerTower[" << counter
+                         << "]: ETs [GeV]: EM: " << TT->emEnergy()
+                         << ", HAD: "            << TT->hadEnergy()
+                         << ", eta: "            << TT->eta()
+                         << ", phi: "            << TT->phi() << endmsg;
+            }
+#endif    
+            counter++;
+            // To remove ambiguities due to degenerate distance measures we deform the calorimeter: 
+            // low eta, low phi cells are marginally closer together than high eta, high phi cells.
+            //
+            // It's best to use slightly different deformations for eta and phi.
+            // taken from recomendation 5. from here: http://fastjet.fr/FAQ.html
+            double tt_eta = TT->eta() + 1.000000e-6 * pow(TT->eta(),2);
+            double tt_phi = TT->phi() + 1.047198e-6 * pow(TT->phi(),2);            
+            // change to a more standard phi definition
+            if( tt_phi >= M_PI ) tt_phi -= 2 * M_PI;
+            double transverse_energy = (TT->emEnergy() + TT->hadEnergy())*1000.;
+            //double cosh_eta = cosh(tt_eta);
+            //double energy = transverse_energy*cosh_eta;
+            // possibly do some calibration
+        
+            
+            if (transverse_energy > 0.99){ // some Jet Elements have zero energy (this may also be true for trigger towers), there is no need to give these to fastjet
+                // Set properties, EM and HAD seperately
+                // EM
+                if (TT->emEnergy()){                 
+                    tower_by_sampling_counter++;
+                    double this_eta = determineTriggerTowerEta(tt_eta,true);
+                    double this_cosh_eta = cosh(this_eta);
+                    m_grid_element->setE((TT->emEnergy()*1000.)*this_cosh_eta);
+                    m_grid_element->setEta(this_eta); // map this eta to a physical eta
+                    m_grid_element->setPhi(tt_phi);    
+                    CaloSampling::CaloSample sampling = determineCaloSampling(fabs(tt_eta), true);
+                    m_grid_element->setCaloSample(sampling);
+                    if (TT->hadEnergy()){
+                        // record provenance of this jet 
+                        // in this context this means that if the tower was split into two we keep the index of its other half
+                        m_grid_element->setProvenance(tower_by_sampling_counter);
+                    } else {
+                        m_grid_element->setProvenance(uint16_t(9999));
+                    }
+                    
+                    grid->push_back(*m_grid_element);      
+                    EM_recorded_counter++;
+                    // Monitor
+                    m_et_em.push_back( TT->emEnergy()*1000. ); 
+                    m_eta_em.push_back( m_grid_element->eta() ); 
+                    m_phi_em.push_back( m_grid_element->phi() ); 
+                    
+                }
+                // HAD
+                if (TT->hadEnergy()){
+                    tower_by_sampling_counter++;
+                    double this_eta = determineTriggerTowerEta(tt_eta,false);
+                    double this_cosh_eta = cosh(this_eta);
+                    m_grid_element->setE((TT->hadEnergy()*1000.)*this_cosh_eta);
+                    m_grid_element->setEta(this_eta); // map this eta to a physical eta
+                    m_grid_element->setPhi(tt_phi);    
+                    CaloSampling::CaloSample sampling = determineCaloSampling(fabs(tt_eta), false);
+                    m_grid_element->setCaloSample(sampling);
+                    if (TT->emEnergy()){
+                        // record provenance of this jet
+                        // in this context this means that if the tower was split into two we keep the index of its other half
+                        m_grid_element->setProvenance(tower_by_sampling_counter-2);
+                    } else {
+                        m_grid_element->setProvenance(uint16_t(9999));
+                    }
+                    
+                    grid->push_back(*m_grid_element);      
+                    HAD_recorded_counter++;
+                    // Monitor
+                    m_et_had.push_back( TT->hadEnergy()*1000. ); 
+                    m_eta_had.push_back( m_grid_element->eta() ); 
+                    m_phi_had.push_back( m_grid_element->phi() ); 
+                }
+                
+                // Monitor
+                recorded_counter++;
+                m_et.push_back( transverse_energy ); 
+                m_eta.push_back( tt_eta ); 
+                m_phi.push_back( tt_phi ); 
+                
+            }
+        }
+    } else { // if we aren't running on trigger towers we use jet elements instead    
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "Jet element version" <<endmsg;
+        }
+#endif
+        DataVector<LVL1::JetElement>::const_iterator je_begj, je_endj;
+    
+        if ( m_retrievedJetTool ){
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "Loading the L1 data using ITrigT1CaloDataAccess tool, this loads the jet elements for the entire event"<< endmsg;
+            }
+#endif
+            if(doTiming()) m_l1_unpacking_timer->start();
+            StatusCode sc = m_dataL1->loadCollection(je_begj,je_endj);
+            if(doTiming()) m_l1_unpacking_timer->stop();
+            if (sc.isFailure()) {
+                (*m_log) << MSG::WARNING << "Error accessing jet element data" << endmsg;
+                return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+            }
+            
+#ifndef NDEBUG     
+            if((*m_log).level() <= MSG::DEBUG){
+                (*m_log) << MSG::DEBUG  << "Loaded jet elements in "<< m_l1_unpacking_timer->elapsed() << " ms" << endmsg;
+                (*m_log) << MSG::DEBUG  << "Looping over jet elements"<< endmsg;
+            }
+#endif
+        }
+        
+        for(; je_begj!=je_endj;++je_begj){
+            const LVL1::JetElement* JE = (*je_begj); 
+#ifndef NDEBUG
+            if((*m_log).level() <= MSG::DEBUG){
+               (*m_log) << MSG::DEBUG  << "JetElement[" << counter
+                        << "]: ETs [GeV]: EM: " << JE->emEnergy()
+                        << ", HAD: "            << JE->hadEnergy()
+                        << ", Total: "          << JE->energy()
+                        << ", eta: "            << JE->eta()
+                        << ", phi: "            << JE->phi() << endmsg;
+            }        
+#endif
+            counter++;
+            // To remove ambiguities due to degenerate distance measures we deform the calorimeter: 
+            // low eta, low phi cells are marginally closer together than high eta, high phi cells.
+            //
+            // It's best to use slightly different deformations for eta and phi.
+            // taken from recomendation 5. from here: http://fastjet.fr/FAQ.html
+            double je_eta = JE->eta() + 1.000000e-6 * pow(JE->eta(),2);
+            double je_phi = JE->phi() + 1.047198e-6 * pow(JE->phi(),2);            
+            // change to a more standard phi definition
+            if( je_phi >= M_PI ) je_phi -= 2 * M_PI;
+            double transverse_energy = (JE->energy())*1000.;
+            double cosh_eta = cosh(je_eta);
+            //double energy = transverse_energy*cosh_eta;
+            // possibly do some calibration
+        
+            
+            if (transverse_energy > 0.99){ // some Jet Elements have zero energy, there is no need to give these to fastjet
+                // Set properties, EM and HAD seperately
+                // EM
+                if (JE->emEnergy()){
+                    tower_by_sampling_counter++;
+                    m_grid_element->setE((JE->emEnergy()*1000.)*cosh_eta);
+                    m_grid_element->setEta(je_eta);
+                    m_grid_element->setPhi(je_phi);    
+                    CaloSampling::CaloSample sampling = determineCaloSampling(fabs(je_eta), true);
+                    m_grid_element->setCaloSample(sampling);
+                    if (JE->hadEnergy()){
+                        // record provenance of this jet
+                        // in this context this means that if the tower was split into two we keep the index of its other half
+                        m_grid_element->setProvenance(tower_by_sampling_counter);
+                    } else {
+                        m_grid_element->setProvenance(uint16_t(9999));
+                    }
+                    
+                    grid->push_back(*m_grid_element);      
+                    EM_recorded_counter++;
+                    // Monitor
+                    m_et_em.push_back( JE->emEnergy()*1000. ); 
+                    m_eta_em.push_back( m_grid_element->eta() ); 
+                    m_phi_em.push_back( m_grid_element->phi() ); 
+                    
+                }
+                // HAD
+                if (JE->hadEnergy()){
+                    tower_by_sampling_counter++;
+                    m_grid_element->setE((JE->hadEnergy()*1000.)*cosh_eta);
+                    m_grid_element->setEta(je_eta);
+                    m_grid_element->setPhi(je_phi);   
+                    CaloSampling::CaloSample sampling = determineCaloSampling(fabs(je_eta), false);
+                    m_grid_element->setCaloSample(sampling); 
+                    if (JE->emEnergy()){
+                        // record provenance of this jet
+                        // in this context this means that if the tower was split into two we keep the index of its other half
+                        m_grid_element->setProvenance(tower_by_sampling_counter-2);
+                    } else {
+                        m_grid_element->setProvenance(uint16_t(9999));
+                    }
+                    
+                    grid->push_back(*m_grid_element);      
+                    HAD_recorded_counter++;
+                    // Monitor
+                    m_et_had.push_back( JE->hadEnergy()*1000. ); 
+                    m_eta_had.push_back( m_grid_element->eta() ); 
+                    m_phi_had.push_back( m_grid_element->phi() ); 
+                }
+                
+                // Monitor
+                recorded_counter++;
+                m_et.push_back( transverse_energy ); 
+                m_eta.push_back( je_eta ); 
+                m_phi.push_back( je_phi ); 
+            }
+        }
+    }
+            
+    // monitor
+    //m_nTowers = outJets->size();
+    m_nTowers = recorded_counter;
+    m_nEMTowers = EM_recorded_counter;
+    m_nHADTowers = HAD_recorded_counter;
+    if(doTiming()) m_unpacking_timer->stop();
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "A total of " << grid->size()  << " L1 particles are to be clustered" << endmsg;
+    }
+    
+    if((*m_log).level() <= MSG::VERBOSE){        
+        std::vector<Trig3Momentum>::const_iterator begin_jet, end_jet; // iterators for the produced jets
+        begin_jet = grid->begin();
+        end_jet = grid->end();        
+        int jet_counter = 0;
+        for (; begin_jet != end_jet; ++begin_jet){
+            (*m_log) << MSG::VERBOSE << "Trig3Momentum["  <<jet_counter
+                                     << "]: Et: "         << begin_jet->e()/cosh(begin_jet->eta())
+                                     << " MeV, "
+                                     << "eta: "           << begin_jet->eta() 
+                                     << ", phi: "         << begin_jet->phi() 
+                                     << ", sampling: "    << std::hex << begin_jet->caloSample() << std::dec 
+                                     << ", provenance: "  << begin_jet->provenance() << endmsg;
+            jet_counter++;
+        }
+    }
+#endif  
+     
+    if(doTiming()) m_RoI_timer->start();
+    m_jet = new TrigT2Jet();
+    m_jet->setGrid(grid);
+    //// RoI word
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG  << "Making TrigT2Jet to save" << endmsg;
+    }
+#endif  
+    if(doTiming()) m_RoI_timer->pause();
+    
+    // do loop over tools, e.g tower level correction tool
+    // === calibration 
+    if(doTiming()) m_calibration_timer->start();
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+       (*m_log) << MSG::DEBUG  << m_tools.size() << " calibration tools to be run"<< endmsg;
+       
+    }
+#endif
+
+    ToolHandleArray< T2CaloJetBaseTool >::iterator it = m_tools.begin(),
+    itToolEnd = m_tools.end();
+    int current=1;
+    for (; it != itToolEnd; ++it) {
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+           (*m_log) << MSG::DEBUG  << "Executing tool [" << current << "]"<< endmsg;
+        }
+#endif
+        if ((*it)->execute(m_jet, TrigRoiDescriptor(true), caloDDENull ).isFailure()){    // the zeros are the unused eta phi coordinates used by many base tools to define the RoI region
+            msg() << MSG::WARNING << "T2CaloFastJet AlgToolJets returned Failure" << endmsg;
+            return HLT::ErrorCode(HLT::Action::ABORT_CHAIN,HLT::Reason::USERDEF_1);
+        }
+        current++;
+    }
+    if(doTiming()) m_calibration_timer->stop();
+    
+    // === finaly recored the output jet
+    if(doTiming()) m_RoI_timer->resume();
+    std::string key = "";
+    HLT::ErrorCode stat = recordAndAttachFeature(outputTE, m_jet, key, m_jetOutputKey);
+    if (stat != HLT::OK){
+        (*m_log) << MSG::ERROR << "recording of TrigT2Jets into StoreGate failed" << endmsg;
+        return stat;
+    }
+    if(doTiming()) m_RoI_timer->stop();
+    
+    
+    // === post-execute admin
+    if(doTiming()) {
+        //m_total_timer->stop();
+        m_L1UnpckTime = m_l1_unpacking_timer->elapsed();
+        m_UnpckTime = m_unpacking_timer->elapsed();
+        m_RoITime = m_RoI_timer->elapsed();
+        //m_TotalTime = m_total_timer->elapsed();
+#ifndef NDEBUG
+        if((*m_log).level() <= MSG::DEBUG){
+            (*m_log) << MSG::DEBUG << "L1 unpacking completed in  " << m_l1_unpacking_timer->elapsed() << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "All unpacking completed in " << m_unpacking_timer->elapsed()    << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "Calibration completed in   " << m_calibration_timer->elapsed()  << " ms " << endmsg;
+            (*m_log) << MSG::DEBUG << "RoI making completed in    " << m_RoI_timer->elapsed()          << " ms " << endmsg;
+            //(*m_log) << MSG::DEBUG << "T2L1Unpacking completed in " << m_total_timer->elapsed()        << " ms " << endmsg;
+        }
+#endif
+    }
+    
+#ifndef NDEBUG
+    if((*m_log).level() <= MSG::DEBUG){
+        (*m_log) << MSG::DEBUG << "================= Finished T2L1Unpacking " << name() << endmsg;
+    }
+#endif
+    
+    // since this is an AllTEAlgo, we have to call the monitoring ourselves:
+    afterExecMonitors().ignore();
+    
+    return HLT::OK;
+}
+
+
+HLT::ErrorCode T2L1Unpacking::hltFinalize()
+{
+    if ( (*m_log).level() <= MSG::DEBUG )
+        (*m_log) << MSG::DEBUG << "Finalizing T2L1Unpacking FEX " << name() << endmsg;
+    
+    m_et.clear();
+    m_et_em.clear();
+    m_et_had.clear();
+    m_eta.clear();
+    m_eta_em.clear();
+    m_eta_had.clear();
+    m_phi.clear();
+    m_phi_em.clear();
+    m_phi_had.clear();
+    delete m_grid_element;
+    m_grid_element = 0;
+    
+    delete m_log;
+          
+    return HLT::OK;
+}
+
+double T2L1Unpacking::determineTriggerTowerEta(double eta, bool isEM)
+{
+    /* 
+    Determines a more realistic eta coordinate for the forward trigger towers
+    
+    The mapping used is:
+    * "EM"
+    ----
+    Tower "eta" :  -4.7  -4.3  -3.8  -3.4   3.4   3.8   4.3   4.7
+    Physical eta:  -4.45 -3.75 -3.35 -3.15  3.15  3.35  3.75  4.45
+    Module      :  FCAL1 FCAL1 FCAL1 FCAL1 FCAL1 FCAL1 FCAL1 FCAL1
+    
+    * "Had":
+    ------
+    Tower "eta" :  -4.7  -4.3  -3.8  -3.4   3.4   3.8  4.3   4.7
+    Physical eta:  -4.2  -4.2  -3.4  -3.4   3.4   3.4  4.2   4.2
+    Module      :  FCAL2 FCAL3 FCAL2 FCAL3 FCAL2 FCAL3 FCAL2 FCAL3
+    
+    You'll note that each L1 tower is either FCAL2 or FCAL3, not the sum of the two.
+    */
+    
+    double fabs_eta = fabs(eta);
+    
+    if (fabs_eta < 3.3) return eta; // for non-forward towers return eta
+    
+    double sign_eta = 1;
+    if (eta < 0.) sign_eta = -1;
+    
+    if (fabs_eta > 4.5){
+        if (isEM) return sign_eta*4.45;
+        return sign_eta*4.2;
+                  
+    } else if (fabs_eta > 4.1){
+        if (isEM) return sign_eta*3.75;
+        return sign_eta*4.2;
+                  
+    } else if (fabs_eta > 3.6){
+        if (isEM) return sign_eta*3.35;
+        return sign_eta*3.4;
+                  
+    } else {
+        if (isEM) return sign_eta*3.15;
+        return sign_eta*3.4;
+    }
+}
+
+CaloSampling::CaloSample T2L1Unpacking::determineCaloSampling(double fabs_eta, bool isEM)
+{
+    /*
+    Determine the calo sampling of trigger towers and jet elements based on their eta
+    
+    For Trigger towers this mapping is
+        EM layer:  |eta| =  0  - 1.5   LArg EM Barrel
+                   |eta| = 1.4 - 3.2   LArg EM Endcap: note the overlap here
+    
+        Had layer: |eta| =  0  - 0.9   Tile Long Barrel
+                   |eta| = 0.9 - 1.5   Tile Extended Barrel
+                   |eta| = 1.5 - 3.2   LArg Hadronic Endcap
+    
+        FCAL:      anything above |eta| = 3.2
+     
+    In addition, for jet elements:    
+        [em]  |eta| = 1.4-1.6 spans EMB+EMEC (1.5 in JE eta)
+        
+        [had] |eta| = 0.8-1.0 partly tile barrel, partly extended barrel (0.9 in JE eta)
+              |eta| = 1.4-1.6 Tile-HEC transition (1.5 in JE eta)
+        
+        [em?] |eta| =  2.4-2.7, i.e. the OW+IW boundary. (2.55 in JE eta)
+     
+    As these are summed over layers we'll return the middle sampling
+    */
+    
+    if (fabs_eta > 3.2) {                     // FCAL
+        if (isEM) return CaloSampling::FCAL0; // EM FCAL
+        return CaloSampling::FCAL1;           // HAD FCAL
+    } else if (isEM && (fabs_eta < 1.4)) {    // EM, cut at 1.4 assigns overlap region to the EME
+        return CaloSampling::EMB1;
+    } else if (isEM) {
+        return CaloSampling::EME1;
+    } else if (fabs_eta < 0.8) {              // HAD, cut at 0.8 assigns overlap region to TileExt
+        return CaloSampling::TileBar1;
+    } else if (fabs_eta < 1.4) {              // cut at 1.4 assigne overlap region to HEC
+        return CaloSampling::TileExt1;
+    } else {
+        return CaloSampling::HEC1;
+    }
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/Trig3MomentumMerger.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/Trig3MomentumMerger.cxx
new file mode 100644
index 000000000000..daa54180b57f
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/Trig3MomentumMerger.cxx
@@ -0,0 +1,140 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigT2CaloJet/Trig3MomentumMerger.h"
+
+#include <iostream>
+#include <algorithm>
+#include <cmath>    // M_PI, fabs
+
+//------------------------------------------------
+Trig3MomentumMerger::Trig3MomentumMerger() :
+m_hashMap(), m_gridsHandler()
+{
+}
+//------------------------------------------------
+void resetCell(HashedTrig3Momentum &c)
+{
+  c.reset();
+}
+//------------------------------------------------
+// match criterion to be used with find_if
+struct HashMatchCriterion
+{
+  HashMatchCriterion(const u_int value, const EtaPhiSampleHash &hm):
+    hash_(value), m_hashMap(hm) {};
+  bool operator() (const HashedTrig3Momentum &cell) {
+    return hash_ == cell.hash();
+  };
+  u_int hash_;
+  EtaPhiSampleHash m_hashMap;
+};
+
+//------------------------------------------------
+// functor to be used with for_each
+struct CellMerger
+{
+  CellMerger(const EtaPhiSampleHash &hm, GridsHandler &gridsHandler) :
+    hm_(hm), m_gridsHandler(gridsHandler) {}
+  void operator() (const Trig3Momentum &t3m) {
+    u_int hash(hm_.hash(t3m));
+    HashMatchCriterion hmc(hash, hm_);
+    Vmc &grid = m_gridsHandler.grid(t3m.caloSample());
+    Vmc::iterator mergeCell = find_if(grid.begin(), grid.end(), hmc);
+    if(mergeCell != grid.end()) mergeCell->addE(t3m);
+    else grid.push_back(HashedTrig3Momentum(t3m, hash));
+  }
+  EtaPhiSampleHash hm_;
+  GridsHandler &m_gridsHandler;
+};
+//------------------------------------------------
+bool Trig3MomentumMerger::mergeCells(const Vt3m &input, Vt3m &output)
+{
+  m_gridsHandler.clearAllGrids();
+  CellMerger merger(m_hashMap, m_gridsHandler);
+  std::for_each(input.begin(), input.end(), merger);
+  m_gridsHandler.appendAllGrids(output);
+  return true;
+}
+//------------------------------------------------
+unsigned int Trig3MomentumMerger::expectedLength(const Vt3m &input)
+{
+  // 4*4 b/c we should reduce the (eta,phi) granularity from 0.025x0.025 -> 0.1x0.1
+  unsigned int expectedRedFactor=4*4;
+  return input.size()/expectedRedFactor;
+}
+//------------------------------------------------
+void testEtaPhiSampleHash(){
+  using std::cout;
+  using std::endl;
+  double epsilon = 1.0e-9;
+  double eta = EtaPhiSampleHash::kMinEta + epsilon;
+  double phi = EtaPhiSampleHash::kMinPhi + epsilon;
+  double dEta(2.0*5.0/100.), dPhi(2.0*M_PI/64.);
+  const int nSamples = 25;
+  // drop this and use GridsHandler::allSamples_
+  CaloSampling::CaloSample samples[nSamples] = 
+    {
+       CaloSampling::PreSamplerB,
+       CaloSampling::EMB1,
+       CaloSampling::EMB2,
+       CaloSampling::EMB3,   
+       CaloSampling::PreSamplerE,
+       CaloSampling::EME1,
+       CaloSampling::EME2,
+       CaloSampling::EME3,     
+       CaloSampling::HEC0,
+       CaloSampling::HEC1,
+       CaloSampling::HEC2,
+       CaloSampling::HEC3,            
+       CaloSampling::TileBar0,
+       CaloSampling::TileBar1,
+       CaloSampling::TileBar2,      
+       CaloSampling::TileGap1,
+       CaloSampling::TileGap2,
+       CaloSampling::TileGap3,      
+       CaloSampling::TileExt0,
+       CaloSampling::TileExt1,
+       CaloSampling::TileExt2,      
+       CaloSampling::FCAL0,
+       CaloSampling::FCAL1,
+       CaloSampling::FCAL2,               
+       CaloSampling::Unknown
+    };
+
+  CaloSampling::CaloSample sample = CaloSampling::PreSamplerB;
+  EtaPhiSampleHash eph;
+  int iSample(0);
+  eta = EtaPhiSampleHash::kMinEta + epsilon;
+  while(eta<EtaPhiSampleHash::kMaxEta){
+    phi = EtaPhiSampleHash::kMinPhi + epsilon;
+    while(phi<EtaPhiSampleHash::kMaxPhi){
+      iSample = 0;
+      while(iSample<nSamples){
+	sample = samples[iSample];
+	u_int hash(eph.hash(eta,phi,sample));
+	cout<<"(eta, phi, sample) "
+	    <<"= ("<<eta<<", "<<phi<<", "<<sample<<")"
+	    <<" -> "<<hash<<endl;
+	double oEta(0.), oPhi(0.);
+	CaloSampling::CaloSample oSample(CaloSampling::Unknown);
+	eph.etaPhiSample(hash, oEta, oPhi, oSample);
+	if(fabs(eta-oEta)>dEta)
+	  cout<<"deltaEta("<<hash<<", "<<fabs(eta-oEta)<<")"
+	      <<" : in "<<eta<<" out "<<oEta<<endl;
+	if(fabs(phi-oPhi)>dPhi)
+	  cout<<"deltaPhi("<<hash<<", "<<fabs(phi-oPhi)<<")"
+	      <<" : in "<<phi<<" out "<<oPhi<<endl;
+	if(sample!=oSample)
+	  cout<<"sample("<<hash<<")"
+	      <<" : in "<<sample<<" out "<<oSample<<endl;
+	iSample++;
+      } // end while(iSample)
+      phi += dPhi;
+    } // end while(phi)
+    eta += dEta;
+  } // end while(eta)
+}
+//------------------------------------------------
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloJet/src/components/TrigT2CaloJet_entries.cxx b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/components/TrigT2CaloJet_entries.cxx
new file mode 100644
index 000000000000..3fb3d02c56c9
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloJet/src/components/TrigT2CaloJet_entries.cxx
@@ -0,0 +1,35 @@
+#include "TrigT2CaloJet/T2CaloJet.h"
+#include "TrigT2CaloJet/T2L1CaloJet.h"
+#include "TrigT2CaloJet/T2L1CaloFullScanJet.h"
+#include "TrigT2CaloJet/T2L1Unpacking.h"
+#include "TrigT2CaloJet/Trig3MomentumMerger.h"
+#include "TrigT2CaloJet/T2AllRoiUnpacking.h"
+#include "TrigT2CaloJet/T2CaloFastJet.h"
+#include "TrigT2CaloJet/T2CaloJetBaseTool.h"
+#include "TrigT2CaloJet/T2CaloJetConeTool.h"
+#include "TrigT2CaloJet/T2CaloJetCalibTool.h"
+#include "TrigT2CaloJet/T2CaloJetGridFromCells.h"
+#include "TrigT2CaloJet/T2CaloJetGridFromFEBHeader.h"
+#include "TrigT2CaloJet/T2CaloJetGridFromLvl1Ppr.h"
+#include "TrigT2CaloJet/T2L1CaloJetFullScanBaseTool.h"
+#include "TrigT2CaloJet/T2L1CaloJetFullScanFastJetTool.h"
+#include "TrigT2CaloJet/T2L1TowerCalibTool.h"
+#include "TrigT2CaloJet/T2L1CaloJetCalibTool.h"
+
+DECLARE_COMPONENT( T2CaloJet )
+DECLARE_COMPONENT( T2L1CaloJet )
+DECLARE_COMPONENT( T2L1CaloFullScanJet )
+DECLARE_COMPONENT( T2CaloFastJet )
+DECLARE_COMPONENT( T2L1Unpacking )
+DECLARE_COMPONENT( T2AllRoiUnpacking )
+DECLARE_COMPONENT( T2CaloJetBaseTool )
+DECLARE_COMPONENT( T2CaloJetConeTool )
+DECLARE_COMPONENT( T2CaloJetCalibTool )
+DECLARE_COMPONENT( T2CaloJetGridFromCells )
+DECLARE_COMPONENT( T2CaloJetGridFromFEBHeader )
+DECLARE_COMPONENT( T2CaloJetGridFromLvl1Ppr )
+DECLARE_COMPONENT( T2L1CaloJetFullScanBaseTool )
+DECLARE_COMPONENT( T2L1CaloJetFullScanFastJetTool )
+DECLARE_COMPONENT( T2L1TowerCalibTool )
+DECLARE_COMPONENT( T2L1CaloJetCalibTool )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigT2CaloTau/CMakeLists.txt
new file mode 100644
index 000000000000..3c3d84b5f7eb
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/CMakeLists.txt
@@ -0,0 +1,42 @@
+################################################################################
+# Package: TrigT2CaloTau
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrigT2CaloTau )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Calorimeter/CaloInterface
+                          GaudiKernel
+                          Trigger/TrigAlgorithms/TrigT2CaloCommon
+                          Trigger/TrigEvent/TrigCaloEvent
+                          Trigger/TrigEvent/TrigSteeringEvent
+                          Trigger/TrigSteer/TrigInterfaces
+                          Trigger/TrigTools/TrigT2CaloCalibration
+                          PRIVATE
+                          Calorimeter/CaloEvent
+                          Calorimeter/CaloGeoHelpers
+                          Calorimeter/CaloIdentifier
+                          Control/AthenaKernel
+                          Trigger/TrigT1/TrigT1Interfaces )
+
+# External dependencies:
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_library( TrigT2CaloTauLib
+                   src/*.cxx
+                   PUBLIC_HEADERS TrigT2CaloTau
+                   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel TrigCaloEvent TrigSteeringEvent TrigT2CaloCommonLib TrigInterfacesLib TrigT2CaloCalibrationLib
+                   PRIVATE_LINK_LIBRARIES CaloEvent CaloGeoHelpers CaloIdentifier AthenaKernel TrigT1Interfaces )
+
+atlas_add_component( TrigT2CaloTau
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel TrigT2CaloCommonLib TrigCaloEvent TrigSteeringEvent TrigInterfacesLib TrigT2CaloCalibrationLib CaloEvent CaloGeoHelpers CaloIdentifier AthenaKernel TrigT1Interfaces TrigT2CaloTauLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CalibrationTau.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CalibrationTau.h
new file mode 100755
index 000000000000..8bad3b2b7a67
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CalibrationTau.h
@@ -0,0 +1,52 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CalibrationTau.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTau
+//
+// AUTHOR:   D.O. Damazio
+//
+// Object only designed to understand cluster calibration
+// Should be used by EM and Tau people in the near future
+// It should be possible to introduce the calibration configuration
+// from a jobOption file. Not possible now.
+//
+// ********************************************************************
+
+#ifndef TRIGT2CALOTAU_T2CALIBRATIONTAU
+#define TRIGT2CALOTAU_T2CALIBRATIONTAU
+#include <vector>
+#include <math.h>
+#include "TrigT2CaloCommon/T2Calibration.h"
+
+class T2CalibrationTau : public T2Calibration {
+public:
+
+/** Constructor */
+	T2CalibrationTau() : T2Calibration(){}
+/** Destructor */
+	~T2CalibrationTau(){}
+
+        // The two methods of this class, initialize and Calib, are virtual 
+        // in the base class T2Calibration and implemented there as for the 
+        // moment calibration is the same for egamma/tau. For an specific 
+        // calibration override these methods.        
+ 
+	// In the initialize, one should provide a vector with the
+	// Eta limits (eg.: 0-2.5), the dimensions of the correction
+	// vector (eg: 2 100 - for 2 lines of one hundred constants - the
+	// first line is the eta of that bin and the second brings
+	// the calibration constant for that bin
+//	void initialize(const std::vector<float>& limit, const std::vector<int>&
+//		dimension, const std::vector<float>& correction);
+
+	// This, for a given cluster eta and energy (not being used yet),
+	// provides the calibration constant
+//	double Calib( const double ClusterEta, const double EnergyCluster);
+
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTau.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTau.h
new file mode 100755
index 000000000000..f9dad2ab7200
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTau.h
@@ -0,0 +1,144 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+// 
+// NAME:     T2Calo.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTau
+// 
+// AUTHORS:   M.P. Casado
+// 	      C. Osuna
+// updates: 3/3/11 ccuenca, added new vars for monitoring
+// 
+// - Add new variables to allow job option control of eta/phi regions 
+//   used in each tool.  Also hardcode in eta ranges and granularities
+//   for all layers and add a new function so that tools can adjust the
+//   number of strips used in energy sums for changes in granularity.
+//   The goal is to try to sample a constant eta/phi area.   - R. Soluk 
+// ********************************************************************
+
+#ifndef TRIGT2CALOTAU_T2CALOTAU_H 
+#define TRIGT2CALOTAU_T2CALOTAU_H
+
+#include <string>
+#include "GaudiKernel/ToolHandle.h"
+#include "TrigInterfaces/FexAlgo.h"
+#include "TrigT2CaloCommon/T2CaloBase.h"
+#include "TrigT2CaloCalibration/IT2HadCalibTool.h"
+#include "TrigT2CaloTau/T2CaloTauErrorMon.h"
+#include "TrigCaloEvent/TrigTauCluster.h"
+
+class StoreGateSvc;
+namespace HLT
+{
+    class TriggerElement;
+}
+class IAlgToolCalo;
+
+class T2CaloTau : public T2CaloBase
+{
+public:
+    /** Constructor */
+    T2CaloTau(const std::string & name, ISvcLocator* pSvcLocator);
+    /** Destructor */
+    ~T2CaloTau();
+    /** HLT method to execute */
+    HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE);
+
+    /** HLT method to initialize */
+    HLT::ErrorCode hltInitialize();
+    /** HLT method to finalize */
+    HLT::ErrorCode hltFinalize();
+
+private:
+    // Properties:
+
+    /** SG key for TrigTauCluster*/
+    std::string m_trigTauClusterKey;
+
+    /** EMRadius variable for monitoring */
+    double m_EMRadius;
+    /** EMRadius3S variable for monitoring */
+    double m_EMRadius3S;
+    /** CaloRadius variable for monitoring */
+    double m_CaloRadius;
+
+    /** HadRad variable for monitoring */
+    double m_HadRad;
+
+    /** Isofrac variable for monitoring */
+    double m_IsoFrac    ;
+    /** stripWidth variable for monitoring*/
+    double m_StripWidth ;
+
+    /** Fraction of EM energy over total energy in a normal (dR<0.3) cone for monitoring */
+    double m_EMFraction;
+
+    /** Raw Et in wide 0.3 cone for monitoring */
+    double m_EtRawWide;
+
+    /** EM Energy in (dR<0.2) cone for monitoring */
+    double m_EMEnMedium;
+    /** HAD Energy in (dR<0.2) cone for monitoring */
+    double m_HADEnMedium;
+
+    /** EM Energy in (dR<0.1) cone for monitoring */
+    double m_EMEnNarrow;
+    /** HAD Energy in (dR<0.1) cone for monitoring */
+    double m_HADEnNarrow;
+    /** Raw Et in medium cone for monitoring */
+    double m_EtRawMedium;
+    /** Raw Et in medium cone for monitoring (EM Sampling 0) */
+    double m_EtRawMediumEM0;
+    /** Raw Et in medium cone for monitoring (EM Sampling 1) */
+    double m_EtRawMediumEM1;
+    /** Raw Et in medium cone for monitoring (EM Sampling 2) */
+    double m_EtRawMediumEM2;
+    /** Raw Et in medium cone for monitoring (EM Sampling 3) */
+    double m_EtRawMediumEM3;
+    /** Raw Et in medium cone for monitoring (Had Sampling 0) */
+    double m_EtRawMediumHad0;
+    /** Raw Et in medium cone for monitoring (Had Sampling 1) */
+    double m_EtRawMediumHad1;
+    /** Raw Et in medium cone for monitoring (Had Sampling 2) */
+    double m_EtRawMediumHad2;
+
+    /** EtRawNarrow/EtRawMedium */
+    double m_CoreFraction;
+
+    /** eta of seed of L1 ROI */
+    double m_EtaL1        ;
+    /** phi of seed of L1 ROI */
+    double m_PhiL1        ;
+
+    /** eta of seed of calo Cluster */
+    double m_Eta        ;
+    /** phi of seed of calo Cluster */
+    double m_Phi        ;
+    /** Difference in Eta at L2 and L1 for monitoring */
+    double m_dEtaL2Tau_RoI   ;
+    /** Difference in Phi at L2 and L1 for monitoring */
+    double m_dPhiL2Tau_RoI   ;
+
+    /** counter for conversion error */
+    unsigned int m_conversionError;
+    /** counter for algorithm error */
+    unsigned int m_algorithmError;
+    /** error monitoring of cluster quality */
+    std::vector<unsigned char> m_quality;
+
+    /** Should or not storeCells into a cell container attached to output RoI */
+    bool m_storeCells;
+    /** container pointer */
+    CaloCellContainer* m_Container;
+
+    /** option to update RoiDescriptor after execution (important for following trigger chain steps) */
+    bool        m_updateRoiDescriptor;
+
+    /** phi, eta EM width */
+    double m_phiWidthEM;
+    double m_etaWidthEM;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorHandler.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorHandler.h
new file mode 100755
index 000000000000..8fde34fa3a70
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorHandler.h
@@ -0,0 +1,25 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOTAU_T2CALOTAUERRORHANDLER_H 
+#define TRIGT2CALOTAU_T2CALOTAUERRORHANDLER_H
+
+namespace TAUCLUSTERROR {
+
+    /** enumerate tau-specific errors */
+    enum TAUCLUSTERROR{
+      FAILPRESEED=31,
+      FAILSEED=30,
+      HADS1E0=11,
+      HADS2E0=10,
+      HADS3E0=9,
+      EMS0E0=15,
+      EMS1E0=14,
+      EMS2E0=13,
+      EMS3E0=12
+    };
+
+
+}
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorMon.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorMon.h
new file mode 100755
index 000000000000..9288f4befa15
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/T2CaloTauErrorMon.h
@@ -0,0 +1,53 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGT2CALOTAU_T2CALOTAUERRORMON_H 
+#define TRIGT2CALOTAU_T2CALOTAUERRORMON_H
+#include "TrigT2CaloTau/T2CaloTauErrorHandler.h"
+
+namespace TAUCLUSTMON {
+
+    /** enumerate tau-specific errors for monitoring */
+    enum TAUCLUSTMON{
+      LARPROB=0,
+      TILEPROB=1,
+      ROBPROB=2,
+      RODPROB=3,
+      FAILSEED=4,
+      FAILPRESEED=5,
+      EMS0E0=6,
+      EMS1E0=7,
+      EMS2E0=8,
+      EMS3E0=9,
+      HADS1E0=10,
+      HADS2E0=11,
+      HADS3E0=12,
+      OTHERERRORS=13,
+      GOODCLUST=14,
+      ALLCLUST=15
+    };
+
+    bool GetClusterError(unsigned int bit,uint32_t error ) { return ((error >> bit)&0x1)!=0 ;}
+
+    void FillErrorMonitoring(uint32_t error, std::vector<unsigned char> * quality){
+      bool isError=false;
+      if ( 0x000000FF & error ) {isError=true; quality->push_back(LARPROB); }
+      if ( 0x0FFF0000 & error ) {isError=true; quality->push_back(TILEPROB); }
+      if ( 0x10000000 & error ) {isError=true; quality->push_back(ROBPROB); }
+      if ( 0x20000000 & error ) {isError=true; quality->push_back(RODPROB); }
+      if ( GetClusterError( TAUCLUSTERROR::FAILSEED    , error) ) {isError=true; quality->push_back(FAILSEED); }
+      if ( GetClusterError( TAUCLUSTERROR::FAILPRESEED , error) ) {isError=true; quality->push_back(FAILPRESEED); }
+      if ( GetClusterError( TAUCLUSTERROR::EMS0E0      , error) ) {isError=true; quality->push_back(EMS0E0); }
+      if ( GetClusterError( TAUCLUSTERROR::EMS1E0      , error) ) {isError=true; quality->push_back(EMS1E0); }
+      if ( GetClusterError( TAUCLUSTERROR::EMS2E0      , error) ) {isError=true; quality->push_back(EMS2E0); }
+      if ( GetClusterError( TAUCLUSTERROR::EMS3E0      , error) ) {isError=true; quality->push_back(EMS3E0); }
+      if ( GetClusterError( TAUCLUSTERROR::HADS1E0     , error) ) {isError=true; quality->push_back(HADS1E0); }
+      if ( GetClusterError( TAUCLUSTERROR::HADS2E0     , error) ) {isError=true; quality->push_back(HADS2E0); }
+      if ( GetClusterError( TAUCLUSTERROR::HADS3E0     , error) ) {isError=true; quality->push_back(HADS3E0); }
+      if (isError==false && error>0 ) {quality->push_back(OTHERERRORS); }
+    }
+
+}
+#endif
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/TauAllCaloDRFex.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/TauAllCaloDRFex.h
new file mode 100644
index 000000000000..8e3b993182ee
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/TrigT2CaloTau/TauAllCaloDRFex.h
@@ -0,0 +1,90 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+// 
+// NAME:     TauAllCaloDRFex.h
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTau
+// 
+// AUTHOR:   Olga Igonkina (Nikhef), Pilar Casado (IFAE), Mogens Dam (NBI)
+// 
+// CREATED: June-09
+//
+// DESCRIPTION: Tool to compute calorimeter tau variables in EM and HAD
+// ********************************************************************
+
+#ifndef TRIGT2CALOTAU_TAUALLCALODRFEX_H 
+#define TRIGT2CALOTAU_TAUALLCALODRFEX_H
+
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "GaudiKernel/AlgTool.h"
+#include "TrigCaloEvent/TrigTauCluster.h"
+#include "TrigT2CaloTau/T2CaloTauErrorHandler.h"
+#include "CaloInterface/ICalorimeterNoiseTool.h"
+
+class TauAllCaloDRFex : public IAlgToolCalo
+{
+public:
+    /** Constructor */
+    TauAllCaloDRFex(const std::string& type, const std::string& name, const IInterface* parent);
+    /** virtual Destructor */
+    virtual ~TauAllCaloDRFex();
+    /** execute method of IAlgToolCalo */
+    using IAlgToolCalo::execute;
+    /** execute method */
+
+    /// take two roi descriptors into the shower
+    HLT::ErrorCode execute(TrigTauCluster &rtrigTauCluster, const IRoiDescriptor& roi,
+				const CaloDetDescrElement*& /*caloDDE*/);
+
+    //    HLT::ErrorCode execute(TrigTauCluster &rtrigTauCluster, double phiWidth, 
+    //                           double etaWidth, double phiWidthEM,
+    //                           double etaWidthEM, double RoIeta, double RoIphi);
+
+    //    HLT::ErrorCode execute(TrigTauCluster &rtrigTauCluster,double phiWidth, 
+    //         double etaWidth, double RoIeta, double RoIphi);
+
+    /** initialize function **/
+    StatusCode initialize();
+    
+private:
+    /** Energy threshold for numStrips counting */
+    double m_stripEthr;  
+
+    /** dR cut for reconstruction of the seed */
+    double m_dRSeed;  
+    /** dR cut for full region, Wide (previously called Normal)  */
+    double m_dRConeWide;  
+    /** dR cut for Medium region (previously called Med)  */
+    double m_dRConeMedium;
+    /** dR cut for Narrow region (previously called Nar)  */
+    double m_dRConeNarrow;
+
+    /** Variable to control noise substraction  */
+    bool m_applyNoiseCut;
+    /** Number of sigmas for noise cut  */
+    double m_noiseNSigmaCut;
+    /** int for hecQualityCut */
+    int m_hecQualityCut;
+
+  /** choose default width: 0 Narrow, 1 Medium, 2 Wide (Normal) */
+    int m_defaultWidth;
+
+
+    /** Tool for noise substraction  */
+    ToolHandle<ICalorimeterNoiseTool> m_noiseTool;
+
+    double emRadiusAllSampl(const TrigTauClusterDetails* clusterDetails, int maxEmSamp=100);
+    double caloRadius(const TrigTauClusterDetails* clusterDetails);
+    double coreFraction(const TrigTauClusterDetails* clusterDetails);
+    double emFraction(const TrigTauCluster* ptrigTauCluster);
+    double hadRadius(const TrigTauClusterDetails* clusterDetails);
+    double calcEnergyPhi(double energyNegPhi, double energyPosPhi, double EnergyWidNegPhi, double EnergyWidPosPhi, double energyNegPhiConv);
+    bool getdR(double compPhi, double compEta, double etaCell, double phiCell, double dRCut, double& dR);
+    double getEMEnergy(const TrigTauClusterDetails* clusterDetails, int widthChoice);
+    double getHADEnergy(const TrigTauClusterDetails* clusterDetails, int widthChoice);
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/doc/packagedoc.h b/Trigger/TrigAlgorithms/TrigT2CaloTau/doc/packagedoc.h
new file mode 100644
index 000000000000..2f753fb3ea30
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/doc/packagedoc.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+
+@page TrigT2CaloTau_page 
+@author Carlos Osuna
+@author Stefania Xella
+@author M. Pilar Casado
+@author Olga Igonkina
+
+@section TrigT2CaloTau_TrigT2CaloTauOverview Overview
+This package is in charge of the calorimeter reconstruction in
+the trigger LVL2 for taus. It builds a set of shower shape variables
+to discriminate jet and taus.
+Deposited energy is available in 3 different window sizes for all sampling.
+
+
+
+*/
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauConfig.py
new file mode 100755
index 000000000000..a53ce9b16fd7
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauConfig.py
@@ -0,0 +1,104 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+#------------------------------------------------
+# T2CaloTau Calibration Options
+#------------------------------------------------
+
+from TrigT2CaloTau.TrigT2CaloTauConf import T2CaloTau, TauAllCaloDRFex
+
+from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+theCaloNoiseTool=CaloNoiseToolDefault()
+
+from AthenaCommon.AppMgr import ToolSvc
+ToolSvc+=theCaloNoiseTool
+
+from AthenaCommon.Constants import VERBOSE,DEBUG,INFO
+
+#Make changes to TauAllCaloDRFex parameters here:
+
+class TauAllCaloDRFexConfig (TauAllCaloDRFex):
+   __slots__ = []
+   def __init__ (self, name="TauAllCaloDRFexConfig",tdRNar=0.1,tdRMed=0.2,tdRWid=0.4,tdefWidth=2):
+       super(TauAllCaloDRFexConfig, self).__init__(name)
+       # here put your customizations
+       self.CaloNoiseTool  = theCaloNoiseTool
+       self.applyNoiseCut  = True
+       self.noiseNSigmaCut = 2.
+       self.hecQualityCut  = 0              
+       self.dRSeed         = 0.15
+       self.StripEthr      = 200.
+       self.defaultWidth   = tdefWidth #Sets which width size is saved for EMEnergy (0:Narrow,1:Medium,2:Wide)
+       self.dRConeNarrow   = tdRNar
+       self.dRConeMedium   = tdRMed
+       self.dRConeWide     = tdRWid
+
+
+## configurable class
+class T2CaloTau_Tau_custom (T2CaloTau):
+   __slots__ = []
+   def __init__ (self, name="T2CaloTau_Tau_custom"): 
+       super(T2CaloTau_Tau_custom, self).__init__(name)
+       self.EtaWidth = 0.4
+       self.PhiWidth = 0.4
+       self.EtaWidthForID = 0.3
+       self.PhiWidthForID = 0.3
+     
+       tauAllCaloDRFex = TauAllCaloDRFexConfig()
+
+       self.IAlgToolList=[tauAllCaloDRFex]
+       self.TimerNtuple="T2CaloTau.T2CaTautTot"
+       self.TrigTauClusterKey = "T2CaloTrigTauCluster"
+
+#       monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+       from TrigT2CaloTau.TrigT2CaloTauMonitoring import T2CaloTauValidationMonitoring, T2CaloTauOnlineMonitoring, T2CaloTauCosmicMonitoring 
+       validation = T2CaloTauValidationMonitoring()        
+       online     = T2CaloTauOnlineMonitoring()
+       cosmic     = T2CaloTauCosmicMonitoring()
+
+       from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+       time = TrigTimeHistToolConfig("Time")
+
+       self.AthenaMonTools = [ time, validation, online, cosmic ]
+
+
+## calo monitoring class
+class T2CaloTau_cells (T2CaloTau_Tau_custom):
+   __slots__ = []
+   def __init__ (self, name="T2CaloTau_cells"): 
+       super(T2CaloTau_cells, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [TauAllCaloDRFexConfig('tauAllCaloDRFexCells')]
+       # Save cells
+       for item in self.IAlgToolList:
+         item.SaveCellsInContainer=True
+         item.ThresholdKeepCells=-100000.
+         item.hecQualityCut=0
+         item.CaloNoiseTool=theCaloNoiseTool
+         item.applyNoiseCut=False
+         item.noiseNSigmaCut=2.
+
+       self.StoreCells=True
+       self.EtaWidth = 0.4
+       self.PhiWidth = 0.4
+       self.TimerNtuple="T2CaloTau.T2CaTautTot"
+       self.TrigTauClusterKey = "T2CaloTrigTauCluster"
+
+
+############### to be imported by the menu ###############
+
+# default class (2011)
+class T2CaloTau_Tau (T2CaloTau_Tau_custom):
+   __slots__ = []
+   #def __init__ (self, name="T2CaloTau_Tau"):
+   def __init__ (self, name="T2CaloTau_Tau"):
+      T2CaloTau_Tau_custom.__init__(self,name)
+      tauAllCaloDRFex = TauAllCaloDRFexConfig(tdRNar=0.1,tdRMed=0.2,tdRWid=0.4,tdefWidth=2) # use Wide (Nor in 2011), cone size 0.4
+      self.IAlgToolList=[tauAllCaloDRFex]
+      
+# class for 2012: uses Medium cone size as default
+class T2CaloTau_Tau_Med (T2CaloTau_Tau_custom):
+   __slots__ = []
+   def __init__ (self, name="T2CaloTau_Tau_Med"):
+      T2CaloTau_Tau_custom.__init__(self,name)
+      tauAllCaloDRFex = TauAllCaloDRFexConfig(tdRNar=0.1,tdRMed=0.2,tdRWid=0.4,tdefWidth=1) # use Medium cone size (0.2) variables
+      self.IAlgToolList=[tauAllCaloDRFex]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauMonitoring.py b/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauMonitoring.py
new file mode 100755
index 000000000000..2d831bbe61fd
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/python/TrigT2CaloTauMonitoring.py
@@ -0,0 +1,109 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+################# Validation, DQ checks
+from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig 
+
+# Set labels for error monitoring histogram. The order has to match with T2CaloTauErrorMon.h file! Number has to match with histo definition.
+errorlabels = 'LAr_Problem:Tile_Problem:N_ROBs<requested:empty_ROD_block:Fail_Seed:Fail_PreSeed:EM_S0_E0:EM_S1_E0:EM_S2_E0:EM_S3_E0:HAD_S1_E0:HAD_S2_E0:HAD_S3_E0:Other_Errors:Good_Clusters:All_Clusters'
+
+class T2CaloTauOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="T2CaloTauOnlineMonitoring"):
+        super(T2CaloTauOnlineMonitoring, self).__init__(name)
+        self.defineTarget("Online")
+        
+        self.Histograms += [ defineHistogram('EMRadius',     type='TH1F', title="L2CaloTau FEX EMRadius;EMRadius; nevents",                                                   xbins=100, xmin=-0.5, xmax=1.5) ]
+        self.Histograms += [ defineHistogram('EMRadius3S',   type='TH1F', title="L2CaloTau FEX EMRadius3S;EMRadius3S; nevents",                                               xbins=100, xmin=-0.5, xmax=1.5) ]
+        self.Histograms += [ defineHistogram('HadRad',       type='TH1F', title="L2CaloTau FEX HadRad;HadRad; nevents",                                                       xbins=100, xmin=-0.5, xmax=1.5) ]
+        self.Histograms += [ defineHistogram('CaloRadius',   type='TH1F', title="L2CaloTau FEX CaloRadius;CaloRadius; nevents",                                               xbins=100, xmin=-0.5, xmax=1.5) ]
+
+        self.Histograms += [ defineHistogram('IsoFrac',      type='TH1F', title="L2CaloTau FEX IsoFrac;IsoFrac; nevents",                                                     xbins=80, xmin=-1.0, xmax=3.0) ]
+        self.Histograms += [ defineHistogram('StripWidth',   type='TH1F', title="L2CaloTau FEX StripWidth;StripWidth; nevents",                                               xbins=70, xmin=-0.1, xmax=0.6) ]
+
+        self.Histograms += [ defineHistogram('EMFraction',   type='TH1F', title="L2CaloTau FEX EM Energy Fraction;EMFraction; nevents",                                       xbins=90, xmin=-0.6, xmax=1.2) ]
+
+        ##Medium: cone 0.2
+        self.Histograms += [ defineHistogram('EMEnMedium',     type='TH1F', title="L2CaloTau FEX EMEnMedium in (dR<0.2) cone;EMEnMedium [MeV]; nevents",                            xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('HADEnMedium',    type='TH1F', title="L2CaloTau FEX HADEnMedium in (dR<0.2) cone;HADEnMedium [MeV]; nevents",                          xbins=171, xmin=-13000, xmax=500000) ]
+
+        ##Narrow: cone 0.1
+        self.Histograms += [ defineHistogram('EMEnNarrow',   type='TH1F', title="L2CaloTau FEX EMEnNarrow in (dR<0.1) cone;EMEnNarrow [MeV]; nevents",                        xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('HADEnNarrow',  type='TH1F', title="L2CaloTau FEX HADEnNarrow in (dR<0.1) cone;HADEnNarrow [MeV]; nevents",                      xbins=171, xmin=-13000, xmax=500000) ]
+
+        self.Histograms += [ defineHistogram('EtRawMedium',     type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone;EtRawMedium [MeV]; nevents",                      xbins=171, xmin=-13000, xmax=500000) ] 
+        self.Histograms += [ defineHistogram('EtRawMediumEM0',  type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 0 of EM;EtRawMediumEM0 [MeV]; nevents",   xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumEM1',  type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 1 of EM;EtRawMediumEM1 [MeV]; nevents",   xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumEM2',  type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 2 of EM;EtRawMediumEM2 [MeV]; nevents",   xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumEM3',  type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 3 of EM;EtRawMediumEM3 [MeV]; nevents",   xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumHad0', type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 0 of Had;EtRawMediumHad0 [MeV]; nevents", xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumHad1', type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 1 of Had;EtRawMediumHad1 [MeV]; nevents", xbins=171, xmin=-13000, xmax=500000) ]
+        self.Histograms += [ defineHistogram('EtRawMediumHad2', type='TH1F', title="L2CaloTau FEX EtRaw in a medium (dR<0.2) cone - Layer 2 of Had;EtRawMediumHad2 [MeV]; nevents", xbins=171, xmin=-13000, xmax=500000) ]
+
+        self.Histograms += [ defineHistogram('CoreFraction', type='TH1F', title="EtRawNarrow/EtRawMedium; Core Fraction; nevents",  xbins=70, xmin=-0.2, xmax=1.2) ]
+
+        self.Histograms += [ defineHistogram('EtaL1, PhiL1', type='TH2F', title="L1 ROI Eta vs Phi in T2CaloTau FEX; #eta; #varphi; nevents",                                 xbins=51, xmin=-2.55, xmax=2.55,
+                                                                                                                                                                              ybins=65, ymin=-3.1415936-0.098174/2., ymax=3.1415936+0.098174/2.)]
+
+        self.Histograms += [ defineHistogram('EtaL1',        type='TH1F', title="T2CaloTau L1 Eta; Eta; nevents",                                                             xbins=80, xmin=-4, xmax=4) ]
+        self.Histograms += [ defineHistogram('PhiL1',        type='TH1F', title="T2CaloTau L1 Phi; Phi; nevents",                                                             xbins=65, xmin=-3.1415936-0.098174/2., xmax=3.1415936+0.098174/2.)]
+
+        self.Histograms += [ defineHistogram('Eta',          type='TH1F', title="T2CaloTau FEX Eta; Eta; nevents",                                                            xbins=80, xmin=-4, xmax=4) ]
+        self.Histograms += [ defineHistogram('Phi',          type='TH1F', title="T2CaloTau FEX Phi; Phi; nevents",                                                            xbins=65, xmin=-3.1415936-0.098174/2., xmax=3.1415936+0.098174/2.)]
+
+        self.Histograms += [ defineHistogram('dEtaL2Tau_RoI, dPhiL2Tau_RoI', type='TH2F', title="dEta vs dPhi in L2CaloTau FEX; Delta-eta; Delta-phi",                        xbins=40 , xmin=-0.2, xmax=0.2,
+                                                                                                                                                                              ybins=40 , ymin=-0.2, ymax=0.2) ]
+
+        self.Histograms += [ defineHistogram('ConversionErrors',type='TH1F',title='L2CaloTau Conversion Errors; # Errors; # Clusters',xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram('AlgorithmErrors', type='TH1F',title='L2CaloTau Algorithm Errors; # Errors; # Clusters', xbins=10,xmin=0,xmax=10)]
+        self.Histograms += [ defineHistogram('Quality',         type='TH1I',title='L2CaloTau FEX Error bit mask; Error; # Clusters',  xbins=16,xmin=0,xmax=16,labels=errorlabels )]
+
+########## ##############################################################
+#  add validation specific histograms. 
+#  If you ever remove histograms from Online - move them into Validation
+#
+#########################################################################
+class T2CaloTauValidationMonitoring(T2CaloTauOnlineMonitoring):
+    def __init__ (self, name="T2CaloTauValidationMonitoring"):
+        super(T2CaloTauValidationMonitoring, self).__init__(name)
+        self.defineTarget("Validation")
+
+########## ##############################################################
+#  add cosmic specific histograms. 
+#
+#########################################################################
+class T2CaloTauCosmicMonitoring(T2CaloTauOnlineMonitoring):
+    def __init__ (self, name="T2CaloTauCosmicMonitoring"):
+        super(T2CaloTauCosmicMonitoring, self).__init__(name)
+        self.defineTarget("Cosmic")
+
+        self.Histograms += [ defineHistogram('EtaL2vsL1', type='TH1F', title="L2CaloTau FEX Eta_L2 - Eta_L1; dEta; nevents", xbins=40, xmin=-0.4, xmax=0.4) ]
+        self.Histograms += [ defineHistogram('PhiL2vsL1', type='TH1F', title="L2CaloTau FEX Phi_L2 - Phi_L1; dPhi; nevents", xbins=40, xmin=-0.4, xmax=0.4) ]
+        self.Histograms += [ defineHistogram('EMFraction', type='TH1F', title="L2CaloTau FEX EM Energy Fraction;EMFraction; nevents",xbins=90, xmin=-0.6, xmax=1.2) ]
+        self.Histograms += [ defineHistogram('EMEnMedium', type='TH1F', title="L2CaloTau FEX EMEnMedium in (dR<0.3) cone;EMEnMedium [MeV]; nevents", xbins=54, xmin=-12000, xmax=150000) ]
+        self.Histograms += [ defineHistogram('HADEnMedium', type='TH1F', title="L2CaloTau FEX HADEnMedium in (dR<0.3) cone;HADEnMedium [MeV]; nevents", xbins=54, xmin=-12000, xmax=150000) ]
+        self.Histograms += [ defineHistogram('EMEnNarrow', type='TH1F', title="L2CaloTau FEX EMEnNarrow in (dR<0.1) cone;EMEnNarrow [MeV]; nevents", xbins=54, xmin=-12000, xmax=150000) ]
+        self.Histograms += [ defineHistogram('HADEnNarrow', type='TH1F', title="L2CaloTau FEX HADEnNarrow in (dR<0.1) cone;HADEnNarrow [MeV]; nevents", xbins=54, xmin=-12000, xmax=150000) ]
+
+class TrigT2CaloTauTimeMonitoring(TrigGenericMonitoringToolConfig) :
+	   def __init__ (self, name="TrigT2CaloTauTimeMonitoring"):
+	      super(TrigT2CaloTauTimeMonitoring,self).__init__(name)
+	      self.defineTarget("Time")
+	     
+	      types_list=['Total','RegSel','BSCnv','Algor','SaveEM']
+	      tools_list=['ESamp2','ESamp1','EaEmEn','EHadEn']
+	      for tool in tools_list:
+	         for type in types_list:
+	             hist_title=tool+type
+	             thismax=1.0
+	             if ( (type.find("RegSel")>-1) or (type.find("SaveEM")>-1) ):
+	                thismax=0.2
+	             if ( (type.find("Algor")>-1) ):
+	                thismax=0.5
+	             self.Histograms+= [defineHistogram (hist_title,
+	                                            type='TH1F',title=hist_title
+	                                            ,xbins=40,xmin=0.0,xmax=thismax)]
+	      self.Histograms+= [defineHistogram ('TotalTime',
+	                                            type='TH1F',title=hist_title
+	                                            ,xbins=50,xmin=0.0,xmax=5)]
+	      self.Histograms += [ defineHistogram('Eta, TotalTime',
+	                type='TH2F', title="#eta vs. time", xbins=50, xmin=-2.5,
+	                xmax=2.5, ybins=50, ymin=0, ymax=5) ]
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/src/T2CaloTau.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/T2CaloTau.cxx
new file mode 100755
index 000000000000..cc794e7f57c4
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/T2CaloTau.cxx
@@ -0,0 +1,663 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+// 
+// NAME:     T2CaloTau.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTau
+// 
+// AUTHOR:   M.P. Casado
+//           S.R. Armstrong
+// updates: 3/3/11 ccuenca, added new vars for monitoring
+// 
+// - Add variables for job option controlled region limits, set defaults
+//   to most likely values.
+// - Add function EtaPhiRange to return the maximum and minimum eta or phi
+//   values to use when calculating energy sums over a region  - R. Soluk
+// ********************************************************************
+
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IToolSvc.h"
+#include "GaudiKernel/StatusCode.h"
+#include "GaudiKernel/ITHistSvc.h"
+
+#include "TrigT1Interfaces/RecEmTauRoI.h"
+#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"                               
+
+#include "CaloEvent/CaloCluster.h"
+#include "CaloEvent/CaloClusterContainer.h"
+#include "TrigCaloEvent/TrigTauCluster.h"
+#include "TrigCaloEvent/TrigTauClusterDetails.h"
+#include "TrigCaloEvent/TrigTauClusterDetailsContainer.h"
+
+#include "TrigT2CaloCommon/T2CaloBase.h"
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "TrigT2CaloCommon/phiutils.h"
+#include "TrigT2CaloTau/T2CaloTau.h"
+
+//#include <TH1F.h>
+#include "AthenaKernel/errorcheck.h"
+
+#define NEG_ENERGY_CLUSTER HLT::Reason::USERDEF_1
+#define NULL_ENERGY_SAMPLING HLT::Reason::USERDEF_2
+
+class ISvcLocator;
+
+T2CaloTau::T2CaloTau(const std::string & name, ISvcLocator* pSvcLocator) : T2CaloBase(name, pSvcLocator),
+    m_storeCells(false),
+    m_updateRoiDescriptor(false),
+    m_phiWidthEM(0.4), 
+    m_etaWidthEM(0.4)
+{
+
+    //properties
+    declareProperty("TrigTauClusterKey",   m_trigTauClusterKey = "T2CaloTrigTauCluster");
+
+    declareProperty("StoreCells",          m_storeCells,"store cells in container attached to RoI");
+    declareProperty("updateRoiDescriptor", m_updateRoiDescriptor, "option to update RoiDescriptor after execution");
+    declareProperty("PhiWidthEM",          m_phiWidthEM, "phi width EM calo");
+    declareProperty("EtaWidthEM",          m_etaWidthEM, "eta width EM calo");
+
+    //Monitored variables
+    declareMonitoredVariable("EMRadius", m_EMRadius);
+    declareMonitoredVariable("EMRadius3S", m_EMRadius3S);
+    declareMonitoredVariable("CaloRadius", m_CaloRadius);
+    declareMonitoredVariable("HadRad", m_HadRad);
+    
+    declareMonitoredVariable("IsoFrac", m_IsoFrac);
+    declareMonitoredVariable("StripWidth", m_StripWidth);
+    
+    declareMonitoredVariable("EMFraction", m_EMFraction);
+    
+    //Wide, cone 0.3 (Wide in TrigTauClusterDetails)
+    declareMonitoredVariable("EtRawWide", m_EtRawWide);
+    
+    //Medium, cone 0.2 (Medium in TrigTauClusterDetails)
+    declareMonitoredVariable("EMEnMedium", m_EMEnMedium);
+    declareMonitoredVariable("HADEnMedium", m_HADEnMedium);
+    
+    //Narrow, cone 0.1 (Narrow in TrigTauClusterDetails)
+    declareMonitoredVariable("EMEnNarrow", m_EMEnNarrow);
+    declareMonitoredVariable("HADEnNarrow", m_HADEnNarrow);
+    
+    declareMonitoredVariable("EtRawMedium",     m_EtRawMedium);
+    declareMonitoredVariable("EtRawMediumEM0",  m_EtRawMediumEM0);
+    declareMonitoredVariable("EtRawMediumEM1",  m_EtRawMediumEM1);
+    declareMonitoredVariable("EtRawMediumEM2",  m_EtRawMediumEM2);
+    declareMonitoredVariable("EtRawMediumEM3",  m_EtRawMediumEM3);
+    declareMonitoredVariable("EtRawMediumHad0", m_EtRawMediumHad0);
+    declareMonitoredVariable("EtRawMediumHad1", m_EtRawMediumHad1);
+    declareMonitoredVariable("EtRawMediumHad2", m_EtRawMediumHad2);
+
+
+    //EtNarrow/EtWide ratio
+    declareMonitoredVariable("CoreFraction",     m_CoreFraction);
+
+    declareMonitoredVariable("EtaL1",            m_EtaL1);
+    declareMonitoredVariable("PhiL1",            m_PhiL1);
+    declareMonitoredVariable("Eta",              m_Eta);
+    declareMonitoredVariable("Phi",              m_Phi);
+    declareMonitoredVariable("dEtaL2Tau_RoI",    m_dEtaL2Tau_RoI);
+    declareMonitoredVariable("dPhiL2Tau_RoI",    m_dPhiL2Tau_RoI);
+
+    declareMonitoredVariable("ConversionErrors", m_conversionError);
+    declareMonitoredVariable("AlgorithmErrors",  m_algorithmError);
+
+    declareMonitoredStdContainer("Quality", m_quality);
+
+    m_Container = 0;
+
+}
+
+T2CaloTau::~T2CaloTau()
+{
+}
+
+HLT::ErrorCode T2CaloTau::hltInitialize()
+{
+    //  MsgStream log(msgSvc(), name());
+
+    //  IToolSvc* toolSvc;
+    //  service("ToolSvc",toolSvc);
+
+    ToolHandleArray<IAlgToolCalo>::iterator it = m_emAlgTools.begin();
+    for(; it != m_emAlgTools.end(); ++it)
+    {
+        StatusCode sc = it->retrieve();
+        if(sc.isFailure())
+        {
+            msg() << MSG::ERROR << "Unable to initialize tool " << *it << endmsg;
+            return HLT::BAD_ALGO_CONFIG ;
+        }
+        if(msgLvl() <= MSG::DEBUG)
+        {
+            msg() << MSG::DEBUG << "REGTEST: Created " << *it << " AlgTool" << endmsg;
+        }
+        (*it)->setCellContainerPointer(&m_Container);
+    }
+
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        if(m_updateRoiDescriptor)
+        {
+            msg() << MSG::DEBUG << "REGTEST: TrigRoiDescriptor will be updated " << endmsg;
+        }
+        else
+        {
+            msg() << MSG::DEBUG << "REGTEST: TrigRoiDescriptor will NOT be updated " << endmsg;
+        }
+    }
+
+    if(m_storeCells && msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG << "REGTEST: will store cells in output " << endmsg;
+    }
+
+    return HLT::OK;
+}
+
+HLT::ErrorCode T2CaloTau::hltFinalize()
+{
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG << " hltFinalize is done" << endmsg;
+    }
+    return HLT::OK;
+}
+
+HLT::ErrorCode T2CaloTau::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE)
+{
+    // Time total T2Calo execution time.
+    if(timerSvc()) m_timer[0]->start();      
+
+    m_conversionError = 0;
+    m_algorithmError = 0;
+    // reset quality vector for monitoring
+    m_quality.clear();
+
+    m_EMRadius = -99.0;
+    m_EMRadius3S = -99.0;
+    m_CaloRadius = -99.0;
+    m_HadRad = -99.0;
+
+    m_IsoFrac = -99.0;
+    m_StripWidth = -99.0;
+
+    m_EMFraction = -99.0;
+
+    m_EtRawWide = -99.0;
+
+    m_EMEnMedium = -99.0;
+    m_HADEnMedium = -99.0;
+
+    m_EMEnNarrow = -99.0;
+    m_HADEnNarrow = -99.0;
+
+    m_EtRawMedium = -99.0;
+    m_EtRawMediumEM0 = -99.0;
+    m_EtRawMediumEM1 = -99.0;
+    m_EtRawMediumEM2 = -99.0;
+    m_EtRawMediumEM3 = -99.0;
+    m_EtRawMediumHad0 = -99.0;
+    m_EtRawMediumHad1 = -99.0;
+    m_EtRawMediumHad2 = -99.0;
+
+    m_CoreFraction = -99.0;
+
+    m_EtaL1 = -99.0;
+    m_PhiL1 = -99.0;
+    m_Eta = -99.0;
+    m_Phi = -99.0;
+    m_dEtaL2Tau_RoI = -99.0;
+    m_dPhiL2Tau_RoI = -99.0;  
+
+
+#ifndef NDEBUG
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::INFO << "in execute()" << endmsg;
+    }
+#endif
+
+    // Some debug output:
+#ifndef NDEBUG
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG << "output TE ID: " << outputTE->getId() << endmsg;
+    }
+#endif
+
+    // Some debug output:
+#ifndef NDEBUG
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG << "input TE ID: " << inputTE->getId() << endmsg;
+    }
+#endif
+    const TrigRoiDescriptor* roiDescriptor = 0;
+    HLT::ErrorCode st = getFeature(inputTE, roiDescriptor);  
+
+    if(st == HLT::OK && roiDescriptor)
+    {
+#ifndef NDEBUG // Will not be executed in optimised build                               
+        if(msgLvl() <= MSG::DEBUG)
+        {        
+            msg() << MSG::DEBUG  << " RoI id " << roiDescriptor->roiId() 
+                  << " LVL1 id " << roiDescriptor->l1Id() 
+		  << *roiDescriptor << endmsg;
+	    //                  << " located at   phi = " <<  roiDescriptor->phi0() 
+            //      << ", eta = " << roiDescriptor->eta0() << endmsg;
+        }
+#endif
+    }
+    else
+    {
+        msg() <<  MSG::WARNING << " Failed to find RoiDescriptor " << endmsg;
+        return HLT::ERROR;
+    }
+
+    // Some debug output:
+
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG  << "Message to count events. LVL1 phi="
+              << roiDescriptor->phi()
+              << " & LVL1 eta="
+              << roiDescriptor->eta() << " " << roiDescriptor
+              << endmsg;
+    }
+
+
+    // End LVL1 part
+    //    double RoIeta = roiDescriptor->eta();
+    //    double RoIphi = roiDescriptor->phi();
+
+    const TrigTauClusterDetails * pDetails= new TrigTauClusterDetails();
+
+    std::string key = "";  
+    HLT::ErrorCode  hltstatusD = recordAndAttachFeature(outputTE, pDetails, key, "TrigT2CaloTauDetails");
+    if(hltstatusD != HLT::OK)
+    {
+        if (msgLvl() <= MSG::DEBUG)
+        {
+            msg() << MSG::ERROR << "Write of TrigTauClusterDetails into outputTE failed" << endmsg;
+        }
+        return hltstatusD;
+    }
+
+    // retrieve TrigTauClusterDetails from the TE
+    ElementLink< TrigTauClusterDetailsContainer > ELDetails;
+    HLT::ErrorCode stat = getFeatureLink< TrigTauClusterDetailsContainer, TrigTauClusterDetails >( outputTE, ELDetails );
+
+    if(stat == HLT::OK && ELDetails.isValid())
+    {
+        if(msgLvl() <= MSG::DEBUG)
+        { 
+            (*ELDetails)->print(msg()); 
+        }
+    }
+    else
+    {
+        if(msgLvl() <= MSG::DEBUG)
+        { 
+            msg() << MSG::DEBUG << "Failed to get TrigTauClusterDetails" << endmsg; 
+        }
+        return HLT::MISSING_FEATURE;
+    }
+
+    TrigTauCluster* ptrigTauCluster = new TrigTauCluster(ELDetails.getStorableObjectPointer(), ELDetails.index(), 0.0, -10.0, -10.0, 0);
+    // Energies, EMRadius and other variables are initialized at the 
+    // TrigTauCluster creation time.
+
+    // Add RoI word to TrigTauCluster
+    ptrigTauCluster->setRoIword(roiDescriptor->roiWord());
+
+    // zeros the container per RoI
+    m_Container = 0;
+
+    HLT::ErrorCode ToolStat = HLT::OK; // define flag to monitor problems with tools without stopping the sequence.
+
+
+    /// generate the new roiDescriptor with the correct sizes
+
+    const TrigRoiDescriptor* roitmp = roiDescriptor; 
+
+    TrigRoiDescriptor roi( roitmp->eta(), roitmp->eta()-m_etaWidth, roitmp->eta()+m_etaWidth,
+			   roitmp->phi(), HLT::wrap_phi(roitmp->phi()-m_phiWidth), HLT::wrap_phi(roitmp->phi()+m_phiWidth) );
+
+    /// this isn't needed 
+    //  TrigRoiDescriptor* roiEM = new TrigRoiDescriptor( roitmp->eta(), roitmp->eta()-m_etaWidthEM, roitmp->eta()+m_etaWidthE<,
+    //	  					          roitmp->phi(), HLT::wrap_phi(roitmp->phi()-m_phiWidthEM), HLT::wrap_phi(roitmp->phi()+m_phiWidthEM) );
+
+    msg() << MSG::DEBUG << "Using RoIs " << roi << endmsg;
+
+    ToolHandleArray<IAlgToolCalo>::iterator it = m_emAlgTools.begin();
+    if(timerSvc()) m_timer[1]->start();
+    uint32_t error = 0;
+    for(; it < m_emAlgTools.end(); it++)
+    {
+        //        HLT::ErrorCode stat = (*it)->execute(*ptrigTauCluster, m_phiWidth, m_etaWidth, m_phiWidthEM, m_etaWidthEM, RoIeta, RoIphi);
+        //       HLT::ErrorCode stat = (*it)->execute(*ptrigTauCluster, *roi, *roiEM );
+        HLT::ErrorCode stat = (*it)->execute(*ptrigTauCluster, roi, caloDDENull );
+        if(stat.reason() == NEG_ENERGY_CLUSTER)
+        {
+            msg() << MSG::DEBUG << (*it)->name() << " Found a cluster with E~<=0. CONTINUE execution. " << endmsg;
+            // do not forget to delete trigTauCluster of attach it to storegate if return
+            // return  stat; // uncomment to avaid running on the remaining tools.
+            ToolStat = stat;
+        }
+        if(stat.reason() == NULL_ENERGY_SAMPLING)
+        {
+            msg() << MSG::DEBUG << (*it)->name() << " Found E==0 in this sampling. CONTINUE execution. " << endmsg;
+            // do not forget to delete trigTauCluster of attach it to storegate if return
+            // return  stat; // uncomment to avaid running on the remaining tools.
+            ToolStat = stat;
+            // since userdefined errors are not monitored (reason=continue)
+            // fill our own variable with T2CaloTau related errors
+        }
+        if(stat == HLT::TOOL_FAILURE)
+        {
+            msg() << MSG::WARNING << "T2CaloTau AlgTool " << (*it)->name() << "  returned Failure" << endmsg;
+            // if tool has returned this failure, then loadingCollection has failed and it
+            // does not make sense to keep this TrigTauCluster - we would not learn anything from it
+            delete ptrigTauCluster;
+            delete pDetails;	
+            return  stat;
+        }
+        uint32_t in_error = (*it)->report_error();
+        if(0x0FFF00FF & in_error) m_conversionError++;
+        if(0xF0000000 & in_error) m_algorithmError++;
+
+        error |= in_error;
+    }
+
+    // convert bits into fixed-size vector variable for error monitoring
+    TAUCLUSTMON::FillErrorMonitoring(error, &m_quality);
+    // Fill ALLCLUST bin for all clusters, so we can know the relative importance of each error with this normalization.
+    m_quality.push_back(TAUCLUSTMON::ALLCLUST);
+    // Fill GOODCLUST for clusters without errors
+    if(!error) m_quality.push_back(TAUCLUSTMON::GOODCLUST);
+
+    // OI  Now, ensure that phi is [-pi,pi] indepedent on what tools do...
+    while(ptrigTauCluster->phi() < -M_PI) ptrigTauCluster->setPhi(ptrigTauCluster->phi() + 2.0 * M_PI);
+    while(ptrigTauCluster->phi() >  M_PI) ptrigTauCluster->setPhi(ptrigTauCluster->phi() - 2.0 * M_PI);
+
+    // 
+    // Get L1 RoiDescriptor
+    const TrigRoiDescriptor* roiL1Descriptor = 0;
+    HLT::ErrorCode tmpStatus = getFeature( inputTE, roiL1Descriptor, "initialRoI" );
+
+    if(tmpStatus == HLT::OK && roiDescriptor){
+      if(msgLvl() <= MSG::DEBUG) {        
+	msg() << MSG::DEBUG  << " RoI id " << roiL1Descriptor->roiId() 
+	      << " LVL1 id " << roiL1Descriptor->l1Id() 
+	      << *roiL1Descriptor << endmsg;
+      }
+    } else {
+      msg() <<  MSG::WARNING << " Failed to find RoiDescriptor " << endmsg;
+      return HLT::ERROR;
+    }
+
+
+    //Fill monitored variables
+    const TrigTauClusterDetails* clusterDetails = ptrigTauCluster->clusterDetails();
+    const double coshEta = cosh(ptrigTauCluster->eta());
+    const double inv_coshEta = 1. / coshEta;
+
+    m_EMRadius    = clusterDetails->EMRadius(2);
+    m_EMRadius3S  = ptrigTauCluster->EMRadius3S();
+    m_CaloRadius  = ptrigTauCluster->CaloRadius();
+    m_HadRad      = ptrigTauCluster->HadRadius();
+    m_IsoFrac     = ptrigTauCluster->IsoFrac();
+    m_StripWidth  = ptrigTauCluster->stripWidth();
+    m_EMFraction  = ptrigTauCluster->EMFrac();
+
+    //wide: cone 0.3 -> wide at TrigTauClusterDetails
+    m_EtRawWide = (clusterDetails->EMenergyWide(0)
+                + clusterDetails->EMenergyWide(1)
+                + clusterDetails->EMenergyWide(2)
+                + clusterDetails->EMenergyWide(3)
+                + clusterDetails->HADenergyWide(0)
+                + clusterDetails->HADenergyWide(1)
+                + clusterDetails->HADenergyWide(2)) * inv_coshEta;
+
+    //medium: cone 0.2 -> medium at TrigTauClusterDetails. In previus version of the code, Wide instead of Medium
+    m_EMEnMedium = clusterDetails->EMenergyMedium(0)
+               + clusterDetails->EMenergyMedium(1)
+               + clusterDetails->EMenergyMedium(2)
+               + clusterDetails->EMenergyMedium(3); 
+    m_HADEnMedium = clusterDetails->HADenergyMedium(0)
+                + clusterDetails->HADenergyMedium(1)
+                + clusterDetails->HADenergyMedium(2);
+
+    //narrow: cone 0.1 -> narrow at TrigTauClusterDetails
+    m_EMEnNarrow = clusterDetails->EMenergyNarrow(0)
+                 + clusterDetails->EMenergyNarrow(1)
+                 + clusterDetails->EMenergyNarrow(2)
+                 + clusterDetails->EMenergyNarrow(3);
+    m_HADEnNarrow = clusterDetails->HADenergyNarrow(0)
+                  + clusterDetails->HADenergyNarrow(1)
+                  + clusterDetails->HADenergyNarrow(2);
+
+    m_EtRawMediumEM0 = clusterDetails->EMenergyMedium(0) * inv_coshEta;
+    m_EtRawMediumEM1 = clusterDetails->EMenergyMedium(1) * inv_coshEta;
+    m_EtRawMediumEM2 = clusterDetails->EMenergyMedium(2) * inv_coshEta;
+    m_EtRawMediumEM3 = clusterDetails->EMenergyMedium(3) * inv_coshEta;
+    m_EtRawMediumHad0 = clusterDetails->HADenergyMedium(0) * inv_coshEta;
+    m_EtRawMediumHad1 = clusterDetails->HADenergyMedium(1) * inv_coshEta;
+    m_EtRawMediumHad2 = clusterDetails->HADenergyMedium(2) * inv_coshEta;
+
+    m_EtRawMedium = m_EtRawMediumEM0 + m_EtRawMediumEM1 + m_EtRawMediumEM2 + m_EtRawMediumEM3 + m_EtRawMediumHad0 + m_EtRawMediumHad1 + m_EtRawMediumHad2;
+
+    m_CoreFraction = ptrigTauCluster->CoreFrac();
+
+    m_Eta = ptrigTauCluster->eta();
+    m_Phi = ptrigTauCluster->phi();
+    if(roiL1Descriptor)
+    {
+        m_EtaL1 = roiL1Descriptor->eta();
+        m_PhiL1 = roiL1Descriptor->phi();
+    }
+
+    m_dEtaL2Tau_RoI = m_Eta - m_EtaL1;
+    m_dPhiL2Tau_RoI = m_Phi - m_PhiL1;
+    //   m_dEtaL2Tau_RoI = ptrigTauCluster->eta() - roiL1Descriptor->eta0();
+    //   m_dPhiL2Tau_RoI = ptrigTauCluster->phi() - roiL1Descriptor->phi0();
+
+    if(m_dPhiL2Tau_RoI > M_PI)  m_dPhiL2Tau_RoI -= 2 * M_PI;
+    if(m_dPhiL2Tau_RoI < -M_PI) m_dPhiL2Tau_RoI += 2 * M_PI;
+
+
+    if(m_EtRawWide > 495000.) m_EtRawWide = 499000.;
+
+    if(m_EMEnMedium > 495000.) m_EMEnMedium = 499000.;
+    if(m_HADEnMedium > 495000.) m_HADEnMedium = 499000.;
+
+    if(m_EMEnNarrow > 495000.) m_EMEnNarrow = 499000.;
+    if(m_HADEnNarrow > 495000.) m_HADEnNarrow = 499000.;
+
+    if(m_EtRawMedium > 495000.) m_EtRawMedium = 499000.;
+    if(m_EtRawMediumEM0 > 495000.) m_EtRawMediumEM0 = 499000.;
+    if(m_EtRawMediumEM1 > 495000.) m_EtRawMediumEM1 = 499000.;
+    if(m_EtRawMediumEM2 > 495000.) m_EtRawMediumEM2 = 499000.;
+    if(m_EtRawMediumEM3 > 495000.) m_EtRawMediumEM3 = 499000.;
+    if(m_EtRawMediumHad0 > 495000.) m_EtRawMediumHad0 = 499000.;
+    if(m_EtRawMediumHad1 > 495000.) m_EtRawMediumHad1 = 499000.;
+    if(m_EtRawMediumHad2 > 495000.) m_EtRawMediumHad2 = 499000.;
+
+    // Cluster quality is a collection of possible errors
+    // No error => quality=0
+    ptrigTauCluster->setquality(error);
+
+    if(timerSvc()) m_timer[1]->stop();
+
+
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        // Print out Cluster produced
+        //    msg() << MSG::DEBUG << "TEST-TEST-TEST-TEST" << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: eta/phi = "<< m_Eta << "/" << m_Phi << endmsg;
+        //msg() << MSG::DEBUG << " REGTEST: etaL1/phiL1 = "<< m_EtaL1 << "/" << m_PhiL1 << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: EMenergy0Narrow/Medium/Wide = "<< (*ptrigTauCluster).clusterDetails()->EMenergyNarrow(0) 
+              << "/" << (*ptrigTauCluster).clusterDetails()->EMenergyMedium(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWide(0) << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: EMenergy1Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->EMenergyNarrow(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyMedium(1) << "/"
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWide(1) << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: EMenergy2Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->EMenergyNarrow(2) << "/"
+              << (*ptrigTauCluster).clusterDetails()->EMenergyMedium(2) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWide(2) <<  endmsg;
+        msg() << MSG::DEBUG << " REGTEST: EMenergy3Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->EMenergyNarrow(3) << "/"
+              << (*ptrigTauCluster).clusterDetails()->EMenergyMedium(3) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWide(3) << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: HADenergy0Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->HADenergyNarrow(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyMedium(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyWide(0) << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: HADenergy1Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->HADenergyNarrow(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyMedium(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyWide(1) << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: HADenergy2Narrow/Medium/Wide = "
+              << (*ptrigTauCluster).clusterDetails()->HADenergyNarrow(2) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyMedium(2) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADenergyWide(2) << endmsg;
+
+        msg() << MSG::DEBUG << " REGTEST: EMRadius0/1/2/3 = "
+              << (*ptrigTauCluster).clusterDetails()->EMRadius(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMRadius(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMRadius(2) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMRadius(3) << endmsg;
+
+        msg() << MSG::DEBUG << " REGTEST: HADRadius0/1/2 = "
+              << (*ptrigTauCluster).clusterDetails()->HADRadius(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADRadius(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->HADRadius(2) << endmsg;
+
+        msg() << MSG::DEBUG << " REGTEST: EMenergyWidth0/1/2/3 = "
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWidth(0) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWidth(1) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWidth(2) << "/" 
+              << (*ptrigTauCluster).clusterDetails()->EMenergyWidth(3) << endmsg;
+
+        msg() << MSG::DEBUG << " REGTEST: EMenergy/Hadenergy =  "
+              << (*ptrigTauCluster).EMenergy() << "/" 
+              << (*ptrigTauCluster).HADenergy() << "/" 
+              <<  endmsg;
+        msg() << MSG::DEBUG << " REGTEST: numStripCells/stripWidth/IsoFrac = "
+              << (*ptrigTauCluster).numStripCells() << "/" 
+              << (*ptrigTauCluster).stripWidth() << "/"
+              << m_IsoFrac << endmsg;
+        msg() << MSG::DEBUG << " REGTEST: RoIWord = "
+              << (*ptrigTauCluster).RoIword() << endmsg;
+    }  
+
+    //// From egamma. This is already done inside the tools for tau! but maybe would like to change at some point...
+    //  if ( error ) {
+    //    // Clustering failed. Transmit ahead L1
+    //    ptrigTauCluster->setEta(etaL1);
+    //    ptrigTauCluster->setPhi(phiL1);
+    //    ptrigTauCluster->setEnergy(0.0);
+    //  }
+
+    key = "";
+    HLT::ErrorCode hltstatus = recordAndAttachFeature(outputTE, ptrigTauCluster, key, "TrigT2CaloTau");
+    if(hltstatus != HLT::OK)
+    {
+        if (msgLvl() <= MSG::DEBUG)
+        {
+            msg() << MSG::ERROR << "Write of TrigTauCluster into outputTE failed" << endmsg;
+        }
+        return hltstatus;
+    }
+
+    if(m_storeCells)
+    {
+        if(m_Container != 0)
+        {
+            HLT::ErrorCode hltstatus = recordAndAttachFeature(outputTE, m_Container, key, "TrigT2CaloTauCells");
+            if(msgLvl() <= MSG::DEBUG)
+            {
+                msg() << MSG::DEBUG << " recorded " <<  m_Container->size() << " cells "<< endmsg;
+            }
+            if(hltstatus != HLT::OK)
+            {
+#ifndef NDEBUG
+                if(msgLvl() <= MSG::DEBUG)
+                {
+                    msg() << MSG::ERROR << "Write of TrigTauClusterCells into outputTE failed" << endmsg;
+                }
+#endif
+                if(m_timersvc) m_timer[0]->stop();
+                return hltstatus;
+            }
+        } // End of if to check whether there is a container
+    } // End of if to check the option is ok
+
+    // Create a new RoiDescriptor with updated eta and phi.
+    // Note that the steering will propagate l1Id and roiId automatically
+    // so no need to set them.
+
+    if(m_updateRoiDescriptor)
+    {
+
+      /// what size should we create this roi with ??? 
+      /// use some new parameters
+      
+      double eta = ptrigTauCluster->eta();
+      double phi = ptrigTauCluster->phi();
+      
+      TrigRoiDescriptor* newRoiDescriptor   = new TrigRoiDescriptor( roiDescriptor->roiWord(), 
+								     roiDescriptor->l1Id(), 
+								     roiDescriptor->roiId(), 
+								     eta, eta-m_etaWidthForID, eta+m_etaWidthForID,
+								     phi, HLT::wrap_phi(phi-m_phiWidthForID), HLT::wrap_phi(phi+m_phiWidthForID) );
+    
+      /// obsolete constructor 
+      //      TrigRoiDescriptor* newRoiDescriptor = new TrigRoiDescriptor(roiDescriptor->roiWord(), 
+      //								  roiDescriptor->l1Id(), 
+      //								  roiDescriptor->roiId(), 
+      //								  ptrigTauCluster->eta(), 
+      //								  ptrigTauCluster->phi());
+
+        if(msgLvl() <= MSG::DEBUG)
+        {
+            msg() << MSG::DEBUG  << "Recorded an RoiDescriptor "
+                  << " phi " << newRoiDescriptor->phi()
+                  << " eta " << newRoiDescriptor->eta() << "  " << *newRoiDescriptor << endmsg;
+        }
+
+        hltstatus = attachFeature(outputTE, newRoiDescriptor, "TrigT2CaloTau"); 
+
+        if(hltstatus != HLT::OK)
+        {
+            if(msgLvl() <= MSG::DEBUG)
+            {
+                msg() << MSG::ERROR << "Write of newRoiDescriptor into outputTE failed" << endmsg;
+            }
+            return hltstatus;
+        }
+    }
+    // Some debug output:
+#ifndef NDEBUG
+    if(msgLvl() <= MSG::DEBUG)
+    {
+        msg() << MSG::DEBUG
+              << "We assume success, set TE with id "
+              << outputTE->getId()
+              << " active to signal positive result."
+              << endmsg;
+    }
+#endif
+
+    // Time total T2CaloT2Calo execution time.
+    if(timerSvc()) m_timer[0]->stop();      
+
+    //return HLT::OK;
+    return ToolStat;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/src/TauAllCaloDRFex.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/TauAllCaloDRFex.cxx
new file mode 100644
index 000000000000..460a3a0bb94c
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/TauAllCaloDRFex.cxx
@@ -0,0 +1,1186 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TauAllCaloDRFex.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTau
+//
+// AUTHOR:   Olga Igonkina (Nikhef), M. Pilar Casado (IFAE), Mogens Dam (NBI)
+//           based on TauEmEnFex.cxx
+//
+// CREATED: Jun-09
+//
+// DESCRIPTION: Tool to compute LVL2 Calo tau variables at
+//              EM sampling 2
+// ********************************************************************
+
+#include "CaloIdentifier/LArEM_ID.h"
+
+#include "CaloEvent/CaloCluster.h"
+#include "TrigCaloEvent/TrigTauCluster.h"
+#include "TrigCaloEvent/TrigTauClusterDetails.h"
+#include "CaloGeoHelpers/CaloSampling.h"
+
+#include "TrigT2CaloTau/TauAllCaloDRFex.h"
+#include "TrigT2CaloCommon/Calo_Def.h"
+#include "TrigSteeringEvent/Enums.h"
+
+#define NEG_ENERGY_CLUSTER HLT::Reason::USERDEF_1
+#define NULL_ENERGY_SAMPLING HLT::Reason::USERDEF_2
+
+TauAllCaloDRFex::TauAllCaloDRFex(const std::string& type, const std::string& name, const IInterface* parent) : IAlgToolCalo(type, name, parent)
+{
+    declareProperty("StripEthr",      m_stripEthr);
+    declareProperty("dRSeed",         m_dRSeed,         "dR cut for reconstruction of the seed ");    
+    declareProperty("CaloNoiseTool",  m_noiseTool,      "Tool Handle for noise tool");
+    declareProperty("applyNoiseCut",  m_applyNoiseCut,  "swithch on/off noise suppression");
+    declareProperty("noiseNSigmaCut", m_noiseNSigmaCut, "number of sigmas for 2 sided noise substraction");
+    declareProperty("hecQualityCut",  m_hecQualityCut,  "Control for HEC Quality");
+    declareProperty("defaultWidth",   m_defaultWidth,   "default width to be saved");
+    declareProperty("dRConeNarrow",   m_dRConeNarrow,   "dR cut for full region (Narrow) ");
+    declareProperty("dRConeMedium",   m_dRConeMedium,   "dR cut for full region (Medium) ");
+    declareProperty("dRConeWide",     m_dRConeWide,     "dR cut for full region (Wide) ");
+    m_saveCells = false;
+}
+
+TauAllCaloDRFex::~TauAllCaloDRFex()
+{
+}
+
+StatusCode TauAllCaloDRFex::initialize()
+{
+  StatusCode sc = IAlgToolCalo::initialize();
+  if( sc.isFailure() ) return sc;
+  msg()  << MSG::INFO << "REGTEST initialized with:" << endmsg;
+  msg()  << MSG::INFO << "REGTEST dRSeed="           << m_dRSeed         << endmsg;
+  msg()  << MSG::INFO << "REGTEST StripEthr="        << m_stripEthr      << endmsg;
+  msg()  << MSG::INFO << "REGTEST CaloNoiseTool="    << m_noiseTool      << endmsg;
+  msg()  << MSG::INFO << "REGTEST applyNoiseCut="    << m_applyNoiseCut  << endmsg;
+  msg()  << MSG::INFO << "REGTEST noiseNSigmaCut="   << m_noiseNSigmaCut << endmsg;
+  msg()  << MSG::INFO << "REGTEST hecQualityCut="    << m_hecQualityCut  << endmsg;
+  msg()  << MSG::INFO << "REGTEST defaultWidth="     << m_defaultWidth   << endmsg;
+  msg()  << MSG::INFO << "REGTEST dRConeNarrow="     << m_dRConeNarrow   << endmsg;
+  msg()  << MSG::INFO << "REGTEST dRConeMedium="     << m_dRConeMedium   << endmsg;
+  msg()  << MSG::INFO << "REGTEST dRConeWide="       << m_dRConeWide     << endmsg;
+  
+  if(   m_saveCells && msg().level() <= MSG::DEBUG )
+    msg() << MSG::DEBUG << "REGTEST: store cells with Et> " << m_cellkeepthr << endmsg;
+  
+  if ( !m_timersvc.empty() )
+    {     
+      m_timer[0] = m_timersvc->addItem("T2CaloTau.Tools.Total");
+      m_timer[1] = m_timersvc->addItem("T2CaloTau.Tools.RegSel");
+      m_timer[2] = m_timersvc->addItem("T2CaloTau.Tools.DataPrep");
+      m_timer[3] = m_timersvc->addItem("T2CaloTau.Tools.Algorithmic");
+      m_timer[4] = m_timersvc->addItem("T2CaloTau.Tools.Saving");
+    }
+  
+  // noise suppression
+  if(m_applyNoiseCut!=0)
+    {
+      if(m_noiseTool.retrieve().isFailure())
+        {
+          msg() << MSG::FATAL << "Unable to find CaloNoiseTool" << endmsg;
+          return StatusCode::FAILURE;
+        }
+    }
+  
+  return sc;
+}
+
+
+HLT::ErrorCode TauAllCaloDRFex::execute( TrigTauCluster &rtrigTauCluster,
+					 const IRoiDescriptor& roi,
+					 const CaloDetDescrElement*& /*caloDDE*/)
+{
+  
+  // Time total AlgTool time 
+  if (!m_timersvc.empty()) m_timer[0]->start();      
+  // reset error
+  m_error = 0x0;
+  
+  //these aren't used:
+  //  phiWidthEM = 0.;
+  //  etaWidthEM = 0.;
+
+  //samplings
+  const unsigned int NSamplings = 7;
+  int samplings[NSamplings]     = {0,1,2,3,0,1,2};
+  DETID detectorID[NSamplings]  = {TTEM,TTEM,TTEM,TTEM,TTHEC,TTHEC,TTHEC};
+  
+
+  // Time to access RegionSelector
+  if (!m_timersvc.empty()) m_timer[1]->start();      
+  if (!m_timersvc.empty()) m_timer[1]->pause();      
+  // Time to access Collection (and ByteStreamCnv ROBs)
+  if (!m_timersvc.empty()) m_timer[2]->start();      
+  if (!m_timersvc.empty()) m_timer[2]->pause();    
+
+  
+  // Algorithmic time
+  if (!m_timersvc.empty()) m_timer[3]->start();      
+  double seedPhi = roi.phi();
+  double seedEta = roi.eta();
+  
+  if (msg().level()<=MSG::DEBUG)
+    msg() << MSG::DEBUG << " Seed position (L1) eta/phi=" << seedEta << "/" << seedPhi << endmsg;
+  
+
+  double energyEta = 0.;
+  double energyPhi = 0.;
+  
+  // Variables to take care of phi wrap-around
+  double energyNegPhi     = 0.; 
+  double energyNegPhiConv = 0.; 
+  double energyPosPhi     = 0.; 
+  
+  double EnergyMediumPosPhi = 0;
+  double EnergyMediumNegPhi = 0;
+  
+  //  double etamin = std::max(-2.5,RoIeta - etaWidth);
+  //  double etamax = std::min( 2.5,RoIeta + etaWidth);
+    
+  //  double phimin = RoIphi - phiWidth;
+  //  double phimax = RoIphi + phiWidth;
+
+  //  while (phimin < 0) phimin += 2. * M_PI;
+  //  while (phimax > 2*M_PI) phimax -= 2. * M_PI;
+
+
+  //------------------ step 1 : clusterization -----------------------------------
+  // loop over all samplings 
+  if (msg().level()<=MSG::DEBUG)
+    msg() << MSG::DEBUG << " Start clusterization "<< endmsg;
+
+  for(unsigned int is=0; is<NSamplings;++is)
+    {
+      if (msg().level()<=MSG::DEBUG)
+	msg() << MSG::DEBUG << "LAr sampling "<< samplings[is]<< endmsg;
+
+      if (!m_timersvc.empty()) { m_timer[3]->pause();  m_timer[1]->resume();}
+      //      m_data->RegionSelector(samplings[is], etamin, etamax, phimin, phimax, detectorID[is]);
+      m_data->RegionSelector(samplings[is], roi, detectorID[is]);
+      if (!m_timersvc.empty()) {m_timer[1]->pause();  m_timer[2]->resume(); }
+      if ( m_data->LoadCollections(m_iBegin,m_iEnd).isFailure() ){
+	if (msg().level()<=MSG::DEBUG)
+	  msg() << MSG::DEBUG << " can not LoadCollections " << *m_iBegin << " " << *m_iEnd << endmsg;
+	return  HLT::TOOL_FAILURE; 
+      }
+      m_error|=m_data->report_error(); 
+      if (!m_timersvc.empty()){ m_timer[2]->pause();  m_timer[3]->resume(); }
+      
+      for(m_it = m_iBegin;m_it != m_iEnd; ++m_it)
+	{
+	  const LArCell*  cell = *m_it;
+	  double etaCell = cell->eta();
+	  double phiCell = cell->phi();
+          double dR;
+          if( ! getdR(seedPhi, seedEta, etaCell, phiCell, m_dRSeed, dR) )
+              continue;
+
+	  float energyCell = cell->energy();
+	  if (m_applyNoiseCut) {
+	    double rms = m_noiseTool->getNoise(cell, ICalorimeterNoiseTool::TOTALNOISE);
+	    if ( fabs(energyCell) < m_noiseNSigmaCut * rms) 
+	      continue;
+	  }
+
+	  if (detectorID[is]==TTHEC) { 
+	    if (energyCell < -5e3) continue;
+	    if ((m_hecQualityCut!=0) && (((cell->quality())&0xffff) > m_hecQualityCut) ) continue;
+	  }
+	  energyEta += energyCell * etaCell ;
+	  
+	  if (phiCell > 0.){
+	    EnergyMediumPosPhi += energyCell;
+	    energyPosPhi       += energyCell * phiCell;
+	  } else {
+	    energyNegPhi       += energyCell * phiCell;
+	    energyNegPhiConv   += energyCell * (phiCell+2.0*M_PI);
+	    EnergyMediumNegPhi += energyCell;
+	  }
+	  
+	} // end of loop over EM sampling   
+    } // end loop over EM LAr
+  
+  // Region Selector, no sample needed
+  // Get detector offline ID's for Collections
+  
+  //  m_data->RegionSelector(0,etamin,etamax,phimin,phimax,TILE);
+  m_data->RegionSelector( 0, roi, TILE );
+  if (!m_timersvc.empty()) m_timer[1]->pause();
+
+  for (unsigned int iR=0;iR< m_data->TileContSize();iR++)
+    {
+      if (!m_timersvc.empty()) m_timer[2]->resume();
+      // For the first sample you will create the containers
+      // For the others no
+      if ( m_data->LoadCollections(m_itBegin,m_itEnd,iR,!iR).isFailure() ){
+	return  HLT::TOOL_FAILURE;
+      }
+      m_error|=m_data->report_error(); 
+      // Finished to access Collection
+      if (!m_timersvc.empty()) { m_timer[2]->pause(); m_timer[3]->resume(); }
+      
+      
+      for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt)
+	{
+	  const CaloCell* cell = (*m_itt);
+
+	  double etaCell = cell->eta();
+	  double phiCell = cell->phi();
+          double dR;
+          if (! getdR(seedPhi, seedEta, etaCell, phiCell, m_dRSeed, dR) )
+              continue;
+
+	  float energyCell = cell->energy();
+	  
+	  if (m_applyNoiseCut) {
+	      if (! m_noiseTool->isEOverNSigma( cell, m_noiseNSigmaCut, 
+						ICalorimeterNoiseTool::MAXSYMMETRYHANDLING, 
+						ICalorimeterNoiseTool::TOTALNOISE) )
+                  continue;
+          }
+	  
+	  energyEta += energyCell * etaCell ;
+	  
+	  if (msg().level()<=MSG::DEBUG)
+	    msg() << MSG::DEBUG << "take cell E="<<energyCell << " Eta/Phi="<<etaCell << "/"<<phiCell<< endmsg;
+	  
+	  if (phiCell > 0.){
+	    EnergyMediumPosPhi += energyCell;
+	    energyPosPhi +=energyCell * phiCell;
+	  } else {
+	    energyNegPhi +=energyCell * phiCell;
+	    energyNegPhiConv += energyCell * ( phiCell+2.0*M_PI);
+	    EnergyMediumNegPhi += energyCell;
+	  }
+	  
+	} // end of loop over Tile cells
+    } // end loop over Tile samplings
+  
+
+  
+
+
+  // End options for cluster position
+  //---------------- step 2 calculation of variables
+  
+  HLT::ErrorCode StatError = HLT::OK; // define flag for cluster with negative energy or sampling with 0 energy.
+  
+  // Phi wrap-around
+  if ( (EnergyMediumNegPhi + EnergyMediumPosPhi) > 0. ){           // dont divide by zero
+    energyEta /= (EnergyMediumNegPhi + EnergyMediumPosPhi) ;
+    energyPhi = calcEnergyPhi(energyNegPhi, energyPosPhi, EnergyMediumNegPhi, EnergyMediumPosPhi, energyNegPhiConv);
+  } else {
+    if (msg().level()<=MSG::DEBUG)
+      msg() << MSG::DEBUG <<"REGTEST problems finding seed: negative energy = "<< EnergyMediumNegPhi + EnergyMediumPosPhi 
+	       <<" eta/phi = "<< energyEta<<" / "<<energyPhi <<" . Seed set to L1 direction: eta/phi = "
+	       <<roi.eta()<<" / "<<roi.phi()<<  endmsg;
+    energyEta = roi.eta() ; // if Cluster energy is null or negative, set L1 position
+    energyPhi = roi.phi() ;
+    SetClusterError(TAUCLUSTERROR::FAILSEED);
+
+    StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NEG_ENERGY_CLUSTER);
+  }
+  
+  if (msg().level()<=MSG::DEBUG)
+    msg() << MSG::DEBUG <<"REGTEST Pre-seed eta/phi " << seedEta<<"/"<<seedPhi << " => Cluster eta/phi = "<< energyEta << "/"<< energyPhi << endmsg;
+  
+  while (energyPhi < -M_PI) energyPhi= energyPhi + 2. * M_PI;
+  while (energyPhi > M_PI)  energyPhi= energyPhi - 2. * M_PI;
+  
+  float dPhiL1 = fabs(energyPhi - seedPhi);
+  if( dPhiL1 > M_PI ) dPhiL1 = 2*M_PI - dPhiL1;  
+  
+  // If seed is too far from pre seed, means that something has happened, probably too small energy deposition
+  if ( fabs(energyEta - seedEta)> m_dRSeed || fabs(dPhiL1)> m_dRSeed){
+    if (msg().level()<=MSG::DEBUG)
+      msg() << MSG::DEBUG <<"REGTEST problems finding seed: eta/phi = "<<energyEta<<" / "<<energyPhi
+	       <<" too far from L1 eta/phi = "<< seedEta<<" / "<<seedPhi 
+	       <<" . Energy = "<< EnergyMediumNegPhi + EnergyMediumPosPhi<<  endmsg;
+    energyEta=roi.eta();
+    energyPhi=roi.phi();
+    // this a similar case as above: energy is too small to calculate a good seed position. they should be monitored together.
+    SetClusterError(TAUCLUSTERROR::FAILSEED);
+    StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NEG_ENERGY_CLUSTER); 
+  }
+  
+  const TrigTauClusterDetails* pDetailsConst = rtrigTauCluster.clusterDetails();
+  TrigTauClusterDetails* pDetails = const_cast<TrigTauClusterDetails*> (pDetailsConst); // why do not we have function for that, if needed?
+  
+  if (!m_timersvc.empty()) m_timer[3]->pause();      
+  // Time to store cluster quantities
+  if (!m_timersvc.empty()) m_timer[4]->start();      
+  rtrigTauCluster.setEta(energyEta);
+  rtrigTauCluster.setPhi(energyPhi);
+  if (!m_timersvc.empty()) m_timer[4]->pause();      
+  if (!m_timersvc.empty()) m_timer[3]->resume();      
+  
+  ClearClusterError(TAUCLUSTERROR::EMS0E0); // this bit might at some point be set by the common data access
+  ClearClusterError(TAUCLUSTERROR::EMS1E0); // this bit might at some point be set by the common data access
+  ClearClusterError(TAUCLUSTERROR::EMS2E0); // this bit might at some point be set by the common data access
+  ClearClusterError(TAUCLUSTERROR::EMS3E0); // this bit might at some point be set by the common data access
+  
+  ClearClusterError(TAUCLUSTERROR::HADS1E0);  
+  ClearClusterError(TAUCLUSTERROR::HADS2E0);  
+  ClearClusterError(TAUCLUSTERROR::HADS3E0);  
+  
+  if (msg().level()<=MSG::DEBUG)
+	msg() << MSG::DEBUG << " Start shape calculation "<< endmsg;
+  
+
+  int    numStripCell           = 0;
+  int    numTotalCells          = 0;
+                                
+  int    nEmCellsNarrow         = 0;
+  int    nEmCellsMed            = 0;
+  int    nEmCellsWide           = 0;
+
+  int    nHadCellsNarrow[3]     = {0,0,0};
+  int    nHadCellsMed[3]        = {0,0,0};
+  int    nHadCellsWide [3]      = {0,0,0};
+  
+  
+  double emRadiusNarrow         = 0;
+  double emRadiusMed            = 0;
+  double emRadiusWide           = 0;
+
+  double hadRadiusNarrow[3]     = {0.0,0.0,0.0};
+  double hadRadiusMed[3]        = {0.0,0.0,0.0};
+  double hadRadiusWide[3]       = {0.0,0.0,0.0};
+
+
+  double emEnergyNarrow         = 0;
+  double emEnergyMed            = 0;
+  double emEnergyWide           = 0;
+
+  double hadEnergyNarrow[3]     = {0.0,0.0,0.0};
+  double hadEnergyMed[3]        = {0.0,0.0,0.0};
+  double hadEnergyWide[3]       = {0.0,0.0,0.0};
+
+
+  double emWeightEtaNarrow      = 0.0;
+  double emWeightEtaMed         = 0.0;
+  double emWeightEtaWide        = 0.0;
+
+  double hadWeightEtaNarrow[3]  = {0.0,0.0,0.0};
+  double hadWeightEtaMed[3]     = {0.0,0.0,0.0};
+  double hadWeightEtaWide[3]    = {0.0,0.0,0.0};
+
+
+  double emWeightEta2Narrow     = 0.0;
+  double emWeightEta2Med        = 0.0;
+  double emWeightEta2Wide       = 0.0;
+
+  double hadWeightEta2Narrow[3] = {0.0,0.0,0.0};
+  double hadWeightEta2Med[3]    = {0.0,0.0,0.0};
+  double hadWeightEta2Wide[3]   = {0.0,0.0,0.0};
+
+
+  
+  
+
+
+
+  //loop over LAr samplings
+  for(unsigned int is=0; is<NSamplings;++is){
+    
+    emRadiusNarrow     = 0.;
+    emRadiusMed        = 0.;
+    emRadiusWide       = 0.;
+                       
+    nEmCellsNarrow     = 0;
+    nEmCellsMed        = 0;
+    nEmCellsWide       = 0;
+                       
+    emRadiusNarrow     = 0.;
+    emRadiusMed        = 0.;
+    emRadiusWide       = 0.;
+                       
+    emEnergyNarrow     = 0.;
+    emEnergyMed        = 0.;
+    emEnergyWide       = 0.;
+
+    emWeightEtaNarrow  = 0.;
+    emWeightEtaMed     = 0.;
+    emWeightEtaWide    = 0.;
+
+    emWeightEta2Narrow = 0.;
+    emWeightEta2Med    = 0.;
+    emWeightEta2Wide   = 0.;
+
+    
+    //get data
+    if (!m_timersvc.empty()){ m_timer[3]->pause();  m_timer[1]->resume(); }
+
+    // m_data->RegionSelector(samplings[is],etamin,etamax,phimin,phimax,detectorID[is]);
+    m_data->RegionSelector( samplings[is], roi, detectorID[is] );
+
+    if (!m_timersvc.empty()) { m_timer[1]->pause(); m_timer[2]->resume(); }
+
+    if ( m_data->LoadCollections(m_iBegin,m_iEnd).isFailure() ){
+      if (msg().level()<=MSG::DEBUG)
+          msg() << MSG::DEBUG << " can not LoadCollections " << *m_iBegin << " " << *m_iEnd << endmsg;
+      return  HLT::TOOL_FAILURE; 
+    }
+    m_error|=m_data->report_error(); 
+    if (!m_timersvc.empty()){ m_timer[2]->pause();   m_timer[3]->resume(); }
+    
+    if ( m_saveCells ){ 
+      m_data->storeCells(m_iBegin,m_iEnd,*m_CaloCellContPoint,m_cellkeepthr,100000);
+    } 
+  
+
+    //loop over cells per sampling
+    for(m_it = m_iBegin;m_it != m_iEnd; ++m_it) {
+      const LArCell*  cell = *m_it;
+      double etaCell = cell->eta();
+      double phiCell = cell->phi();          
+      double dR      = 0.0;
+      //effectively applying the dR<m_dRConeWide cut
+      if ( !getdR(energyPhi, energyEta, etaCell, phiCell,m_dRConeWide , dR) ) continue;
+
+      float energyCell = cell->energy();
+      
+      
+      // Count cells
+      if ( is < 4 ) {
+        nEmCellsWide += 1;
+        if( dR < m_dRConeMedium ) {
+          nEmCellsMed += 1;
+          if( dR < m_dRConeNarrow )
+              nEmCellsNarrow += 1;
+        }
+      } else {
+        nHadCellsWide[samplings[is]] += 1;
+        if( dR < m_dRConeMedium ) {
+          nHadCellsMed[samplings[is]] += 1;
+          if( dR < m_dRConeNarrow )
+              nHadCellsNarrow[samplings[is]] += 1;
+        }
+      }        
+
+      //count n cells
+      numTotalCells = rtrigTauCluster.numTotCells();
+      numTotalCells = numTotalCells + 1;
+      rtrigTauCluster.setNumTotCells(numTotalCells);
+      
+      //Noise subtraction
+      if (m_applyNoiseCut) {
+        double rms = m_noiseTool->getNoise(cell, ICalorimeterNoiseTool::TOTALNOISE);
+        if ( fabs(energyCell) < m_noiseNSigmaCut * rms) 
+          continue;
+      }
+      
+      if (detectorID[is]==TTHEC) {
+        if (energyCell < -5e3) continue;
+        if ((m_hecQualityCut!=0) && (((cell->quality())&0xffff) > m_hecQualityCut) ) continue;
+      }           
+
+      if ( is < 4 ) {
+        emRadiusWide     += energyCell * dR;
+        emEnergyWide     += energyCell; 
+        emWeightEta2Wide += energyCell * etaCell * etaCell;
+        emWeightEtaWide  += energyCell * etaCell;
+        
+      } else {
+        hadRadiusWide[samplings[is]]     += energyCell * dR;
+        hadEnergyWide[samplings[is]]     += energyCell; 
+        hadWeightEta2Wide[samplings[is]] += energyCell * etaCell * etaCell;
+        hadWeightEtaWide[samplings[is]]  += energyCell * etaCell;
+      }
+
+      if ( (is==1) && (energyCell > m_stripEthr ) ) numStripCell += 1;  
+
+      
+      if( dR < m_dRConeMedium ) {
+	if( is < 4 ) {
+          emRadiusMed     += energyCell * dR; 
+          emEnergyMed     += energyCell;
+          emWeightEta2Med += energyCell * etaCell * etaCell;
+          emWeightEtaMed  += energyCell * etaCell;
+        } else {
+          hadRadiusMed[samplings[is]]     += energyCell * dR;
+          hadEnergyMed[samplings[is]]     += energyCell;
+          hadWeightEta2Med[samplings[is]] += energyCell * etaCell * etaCell;
+          hadWeightEtaMed[samplings[is]]  += energyCell * etaCell;
+        }
+        
+        if( dR < m_dRConeNarrow ) {
+          if( is < 4 ) {
+            emRadiusNarrow     += energyCell * dR; 
+            emEnergyNarrow     += energyCell;
+            emWeightEta2Narrow += energyCell * etaCell * etaCell;
+            emWeightEtaNarrow  += energyCell * etaCell;
+          } else {
+            hadRadiusNarrow[samplings[is]]     += energyCell * dR;
+            hadEnergyNarrow[samplings[is]]     += energyCell;
+            hadWeightEta2Narrow[samplings[is]] += energyCell * etaCell * etaCell;
+            hadWeightEtaNarrow[samplings[is]]  += energyCell * etaCell;
+          }
+        }
+      }
+    } // end of loop over cells  
+
+    
+    //Set clusterWidth and emRadius for EM Samplings
+    if ( is < 4 ) {
+
+      double clusterWidthWide;
+      double clusterWidthMed;
+      double clusterWidthNarrow;
+      
+      //Wide
+      if ( (emEnergyWide > 0.) && (nEmCellsWide > 0) ) {
+        clusterWidthWide = 
+            (emWeightEta2Wide/emEnergyWide) -
+            (emWeightEtaWide/emEnergyWide)*
+            (emWeightEtaWide/emEnergyWide);
+        
+        clusterWidthWide > 0.? clusterWidthWide = 
+            sqrt(clusterWidthWide) : -99.;
+        
+        emRadiusWide = emRadiusWide / emEnergyWide ;
+      } else { 
+        if(nEmCellsWide == 0) {
+          clusterWidthWide = 0.;
+          emRadiusWide     = 0. ;
+
+	  /// What is this code for?? why is it hardcoded with values like eta=1.8 ???
+	  
+          // if E==0 in a dR<0.3 region, probably means problems with unpacking.
+          if ((is < 4) && 
+              (samplings[is]==0) && 
+              ((fabs(energyEta) - m_dRConeWide) < (1.8 - (0.025/2) - 0.05) ) &&
+              ((fabs(roi.etaMinus())<(1.8-1e-7)) || (fabs(roi.etaPlus())<(1.8-1e-7)) ) 
+              ) {
+            SetClusterError(TAUCLUSTERROR::EMS0E0);
+            StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NULL_ENERGY_SAMPLING);
+          }
+          if ((is < 4) && (samplings[is]==1)) {
+            SetClusterError(TAUCLUSTERROR::EMS1E0);
+            StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NULL_ENERGY_SAMPLING);
+          }
+          if ((is < 4) && (samplings[is]==2)) {
+            SetClusterError(TAUCLUSTERROR::EMS2E0);
+            StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NULL_ENERGY_SAMPLING);
+          } 
+          if ((is < 4) && (samplings[is]==3)) {
+            SetClusterError(TAUCLUSTERROR::EMS3E0);          
+            StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NULL_ENERGY_SAMPLING);
+          }
+        }
+        else {
+          clusterWidthWide = -99.;
+          emRadiusWide     = -99.;
+        }
+      }
+      
+      //Medium
+      if ( (emEnergyMed > 0.) && (nEmCellsMed > 0) ) {
+        clusterWidthMed = 
+	  (emWeightEta2Med/emEnergyMed) -
+	  (emWeightEtaMed/emEnergyMed)*
+	  (emWeightEtaMed/emEnergyMed);
+        
+        clusterWidthMed > 0.? clusterWidthMed = 
+            sqrt(clusterWidthMed) : -99.;
+        
+        emRadiusMed = emRadiusMed / emEnergyMed ;
+      } else { 
+        if( nEmCellsMed == 0 ) {
+          clusterWidthMed = 0.;
+          emRadiusMed     = 0. ;
+        } else {
+          clusterWidthMed = -99.;
+          emRadiusMed     = -99.;
+        }
+      }
+      
+    
+      //Narrow
+      if ( (emEnergyNarrow > 0.) && (nEmCellsNarrow > 0) ) {
+        clusterWidthNarrow = 
+	  (emWeightEta2Narrow/emEnergyNarrow) -
+	  (emWeightEtaNarrow /emEnergyNarrow)*
+	  (emWeightEtaNarrow /emEnergyNarrow);
+        
+        clusterWidthNarrow > 0.? clusterWidthNarrow = 
+	  sqrt(clusterWidthNarrow) : -99.;
+        
+        emRadiusNarrow = emRadiusNarrow / emEnergyNarrow ;
+      } else { 
+        if( nEmCellsNarrow == 0 ) {
+          clusterWidthNarrow = 0.;
+          emRadiusNarrow     = 0. ;
+	} else {
+          clusterWidthNarrow = -99.;
+          emRadiusNarrow     = -99.;
+        }
+      }
+      
+      if (!m_timersvc.empty()){ m_timer[3]->pause();  m_timer[4]->resume(); }
+      
+      float emRad     = -1.0;
+      float clusWidth = -1.0;
+      switch (m_defaultWidth) {
+      case 0:
+        emRad     = emRadiusNarrow;
+        clusWidth = clusterWidthNarrow;
+        break;
+      case 1:
+        emRad     = emRadiusMed;
+        clusWidth = clusterWidthMed;
+        break;
+      case 2:
+        emRad     = emRadiusWide;
+        clusWidth = clusterWidthWide;
+        break;
+      }
+      
+      pDetails->setEMRadius      (samplings[is],emRad);
+      pDetails->setEMenergyWidth (samplings[is],clusWidth);
+      
+      pDetails->setEMenergyNarrow(samplings[is],emEnergyNarrow);
+      pDetails->setEMenergyMedium(samplings[is],emEnergyMed);
+      pDetails->setEMenergyWide  (samplings[is],emEnergyWide);
+      
+      //if samplings==2 in the first 4 samples
+      if (samplings[is]==2) {
+	if(emEnergyMed != 0) rtrigTauCluster.setIsoFrac( (emEnergyMed - emEnergyNarrow) / emEnergyMed );
+        else rtrigTauCluster.setIsoFrac(-99. );
+      }
+    } 
+    if (!m_timersvc.empty()){ m_timer[4]->pause();   m_timer[3]->resume(); }
+  } 
+  
+  if (!m_timersvc.empty()) m_timer[3]->pause();      
+
+  if (!m_timersvc.empty()) m_timer[4]->resume();      
+  rtrigTauCluster.setNumStripCells    (numStripCell);
+  rtrigTauCluster.setStripWidthOffline(rtrigTauCluster.EMenergyWidth(1));
+  rtrigTauCluster.setStripWidth       (rtrigTauCluster.EMenergyWidth(2));
+  rtrigTauCluster.setEMRadius2        (rtrigTauCluster.EMRadius(2));
+  rtrigTauCluster.setEMenergy         (getEMEnergy(pDetails, m_defaultWidth) );
+
+  if (!m_timersvc.empty()){ m_timer[4]->pause(); m_timer[3]->resume(); }
+  if (!m_timersvc.empty()) { m_timer[3]->pause(); m_timer[1]->resume();}
+
+  //  m_data->RegionSelector(0,etamin,etamax,phimin,phimax,TILE);
+  m_data->RegionSelector( 0, roi, TILE );
+  if (!m_timersvc.empty()) m_timer[1]->pause();
+
+  
+
+  // Tile energy
+  for (unsigned int iR=0; iR<m_data->TileContSize(); iR++) {
+    
+    if (!m_timersvc.empty()) m_timer[2]->resume();
+    if ( m_data->LoadCollections(m_itBegin,m_itEnd,iR,!iR).isFailure() ){
+      return  HLT::TOOL_FAILURE;
+    }
+    m_error|=m_data->report_error(); 
+    if ( m_saveCells ){ 
+      m_data->storeCells(m_itBegin,m_itEnd,*m_CaloCellContPoint,m_cellkeepthr,100000); 
+    } 
+    if (!m_timersvc.empty()) { m_timer[2]->pause(); m_timer[3]->resume();}
+    
+    //loop over tile cells
+    for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) {
+      const CaloCell*  cell = (*m_itt);
+      double etaCell = cell->eta();
+      double phiCell = cell->phi();
+      double dR      = 0.0;
+      if (!getdR(energyPhi, energyEta, etaCell, phiCell, m_dRConeWide, dR) )
+          continue;
+
+      float energyCell = cell->energy();
+      
+      
+      //samp = CaloSampling::getSampling(*cell);
+      //CaloSampling::CaloSample samp = CaloSampling::getSampling(*(*m_itt));
+      CaloSampling::CaloSample samp = (*m_itt)->caloDDE()->getSampling();
+
+      int idxsamp = -99;
+      if (CaloSampling::TileBar0 == samp ||
+	  CaloSampling::TileExt0 == samp) {
+	idxsamp = 0; 
+      } else if (CaloSampling::TileBar1 == samp ||
+		 CaloSampling::TileExt1 == samp) {
+	idxsamp = 1;
+      } else if (CaloSampling::TileBar2 == samp ||
+		 CaloSampling::TileExt2 == samp) {
+	idxsamp = 2;
+      }else continue;
+      
+      // Count this cell
+      numTotalCells=rtrigTauCluster.numTotCells();
+      rtrigTauCluster.setNumTotCells(numTotalCells++);
+
+      // Count cells
+      nHadCellsWide[idxsamp] += 1;
+      if( dR < m_dRConeMedium ) {
+        nHadCellsMed[idxsamp] += 1;
+        if( dR < m_dRConeNarrow )
+            nHadCellsNarrow[idxsamp] += 1;
+      }
+
+      if (m_applyNoiseCut) {
+        if (! m_noiseTool->isEOverNSigma( cell, m_noiseNSigmaCut,
+                                          ICalorimeterNoiseTool::MAXSYMMETRYHANDLING,
+                                          ICalorimeterNoiseTool::TOTALNOISE) )
+            continue;
+      }
+      
+      hadRadiusWide[idxsamp]     += energyCell * dR;
+      hadEnergyWide[idxsamp]     += energyCell;          
+      hadWeightEta2Wide[idxsamp] += energyCell * etaCell * etaCell;
+      hadWeightEtaWide[idxsamp]  += energyCell * etaCell;
+
+      if( dR < m_dRConeMedium ) {
+        hadRadiusMed[idxsamp]     += energyCell * dR;
+        hadEnergyMed[idxsamp]     += energyCell;
+        hadWeightEta2Med[idxsamp] += energyCell * etaCell * etaCell;
+        hadWeightEtaMed[idxsamp]  += energyCell * etaCell;
+
+        if( dR < m_dRConeNarrow ) {
+          hadRadiusNarrow[idxsamp]     += energyCell * dR;
+          hadEnergyNarrow[idxsamp]     += energyCell;
+          hadWeightEta2Narrow[idxsamp] += energyCell * etaCell * etaCell;
+          hadWeightEtaNarrow[idxsamp]  += energyCell * etaCell;
+	}
+      }
+    } // end loop over cells
+  } // end loop over collections
+  
+  
+  //Fix had variables
+  for(int sampling=0; sampling<3;++sampling){
+    // calculate cluster width in a region (Eta/Phi)StripsEM2Nor from jobO
+    // ??? ClearClusterError(TAUCLUSTERROR::EMS2E0); // this bit might at some point be set by the common data access
+    
+    double clusterWidthWide;
+    double clusterWidthMed;
+    double clusterWidthNarrow;
+
+    //HadWide
+    if ( hadEnergyWide[sampling] > 0.  &&  nHadCellsWide[sampling] > 0 ) {
+      clusterWidthWide = 
+          (hadWeightEta2Wide[sampling]/hadEnergyWide[sampling]) -
+          (hadWeightEtaWide[sampling]/hadEnergyWide[sampling])*
+          (hadWeightEtaWide[sampling]/hadEnergyWide[sampling]);
+
+      clusterWidthWide > 0.? clusterWidthWide = 
+          sqrt(clusterWidthWide) : -99.;
+      
+      hadRadiusWide[sampling] = hadRadiusWide[sampling] / hadEnergyWide[sampling] ;
+    } else {
+      if(nHadCellsWide[sampling] == 0) {
+        clusterWidthWide         = 0.;
+        hadRadiusWide[sampling]  = 0. ;
+
+        // if E==0 in a dR<0.3 region, probably means problems with unpacking.
+	if ( sampling==0)  SetClusterError(TAUCLUSTERROR::HADS1E0);
+	if ( sampling==1)  SetClusterError(TAUCLUSTERROR::HADS2E0);
+	if ( sampling==2)  SetClusterError(TAUCLUSTERROR::HADS3E0);
+        StatError =  HLT::ErrorCode(HLT::Action::CONTINUE, NULL_ENERGY_SAMPLING);
+      } else {
+        clusterWidthWide         = -99.;
+        hadRadiusWide[sampling]  = -99.;
+      }
+    }
+
+    //HadMed
+    if ( hadEnergyMed[sampling] > 0.  &&  nHadCellsMed[sampling] > 0 ) {
+      clusterWidthMed = 
+          (hadWeightEta2Med[sampling]/hadEnergyMed[sampling]) -
+          (hadWeightEtaMed[sampling]/hadEnergyMed[sampling])*
+          (hadWeightEtaMed[sampling]/hadEnergyMed[sampling]);
+
+      clusterWidthMed > 0.? clusterWidthMed = 
+          sqrt(clusterWidthMed) : -99.;
+      
+      hadRadiusMed[sampling] = hadRadiusMed[sampling] / hadEnergyMed[sampling] ;
+    } else {
+      if(nHadCellsMed[sampling] == 0) {
+        clusterWidthMed         = 0.;
+        hadRadiusMed[sampling]  = 0. ;
+      } else {
+        clusterWidthMed         = -99.;
+        hadRadiusMed[sampling]  = -99.;
+      }
+    }
+
+
+    //HadNarrow
+    if ( hadEnergyNarrow[sampling] > 0.  &&  nHadCellsNarrow[sampling] > 0 ) {
+      clusterWidthNarrow = 
+          (hadWeightEta2Narrow[sampling]/hadEnergyNarrow[sampling]) -
+          (hadWeightEtaNarrow[sampling]/hadEnergyNarrow[sampling])*
+          (hadWeightEtaNarrow[sampling]/hadEnergyNarrow[sampling]);
+
+      clusterWidthNarrow > 0.? clusterWidthNarrow = 
+          sqrt(clusterWidthNarrow) : -99.;
+      
+      hadRadiusNarrow[sampling] = hadRadiusNarrow[sampling] / hadEnergyNarrow[sampling] ;
+    } else {
+      if(nHadCellsNarrow[sampling] == 0) {
+        clusterWidthNarrow         = 0.;
+        hadRadiusNarrow[sampling]  = 0. ;
+      } else {
+        clusterWidthNarrow         = -99.;
+        hadRadiusNarrow[sampling]  = -99.;
+      }
+    }
+
+    if (!m_timersvc.empty()) {m_timer[3]->pause();  m_timer[4]->resume(); }
+
+    //set values
+    float hadRad     = -1.0;
+    float clusWidth = -1.0;
+    switch (m_defaultWidth) {
+    case 0:
+      hadRad    = hadRadiusNarrow[sampling];
+      clusWidth = clusterWidthNarrow;
+      break;
+    case 1:
+      hadRad    = hadRadiusMed[sampling];
+      clusWidth = clusterWidthMed;
+      break;
+    case 2:
+      hadRad    = hadRadiusWide[sampling];
+      clusWidth = clusterWidthWide;
+      break;
+    }
+
+    pDetails->setHADRadius      (sampling,hadRad);
+    pDetails->setHADenergyWidth (sampling,clusWidth);
+
+    pDetails->setHADenergyNarrow(sampling,hadEnergyNarrow[sampling]);
+    pDetails->setHADenergyMedium(sampling,hadEnergyMed[sampling]);
+    pDetails->setHADenergyWide  (sampling,hadEnergyWide[sampling]);
+    
+    if (!m_timersvc.empty()){ m_timer[4]->pause();  m_timer[3]->resume(); }
+  }
+  
+  if (!m_timersvc.empty()){ m_timer[3]->pause();  m_timer[4]->resume();}
+  
+
+  //set Raw and Had energy
+  rtrigTauCluster.setHADenergy( getHADEnergy(pDetails, m_defaultWidth) );
+  rtrigTauCluster.setRawEnergy( rtrigTauCluster.rawEnergy() + rtrigTauCluster.EMenergy() + rtrigTauCluster.HADenergy() );
+
+  if ( msg().level() <= MSG::DEBUG)
+      msg()<<MSG::DEBUG 
+              << "REGTEST  Record energy RawE" << rtrigTauCluster.rawEnergy() 
+              << "Had " << rtrigTauCluster.HADenergy() << endmsg;
+  
+  if (!m_timersvc.empty()){ m_timer[4]->pause();  m_timer[3]->resume();}
+  
+
+  //set Radius
+  float caloRad    = caloRadius(pDetails);
+  float emRadius3S = emRadiusAllSampl(pDetails, 3);
+  float coreFrac   = coreFraction(pDetails);
+  float emFrac     = emFraction(&rtrigTauCluster);
+  float hadRad     = hadRadius(pDetails);
+  
+  if (!m_timersvc.empty()){ m_timer[3]->pause();  m_timer[4]->resume();}
+  
+  rtrigTauCluster.setCaloRadius(caloRad);
+  rtrigTauCluster.setEMRadius3S(emRadius3S);
+  rtrigTauCluster.setCoreFrac(coreFrac);
+  rtrigTauCluster.setEMFrac(emFrac);
+  rtrigTauCluster.setHadRadius(hadRad);
+  
+  if (!m_timersvc.empty()) {
+    m_timer[1]->stop(); 
+    m_timer[2]->stop(); 
+    m_timer[3]->stop();   
+    m_timer[4]->stop(); 
+    m_timer[0]->stop();      
+  }
+  
+  //  return HLT::OK;
+  return StatError;
+  
+}
+
+double TauAllCaloDRFex::emRadiusAllSampl(const TrigTauClusterDetails* clusterDetails, int maxEmSamp)
+{
+  double emRadAll = 0.0;
+  double totEn    = 0.0;
+  
+  double emEnergy[4] = {0.0, 0.0, 0.0, 0.0};
+  
+  for (int iS=0; iS<4 && iS < maxEmSamp; iS++) {
+    switch (m_defaultWidth) {
+    case 0:
+      emEnergy[iS] = clusterDetails->EMenergyNarrow(iS);
+      break;
+    case 1:
+      emEnergy[iS] = clusterDetails->EMenergyMedium(iS);
+      break;
+    case 2:
+      emEnergy[iS] = clusterDetails->EMenergyWide(iS);
+      break;
+    }
+  }
+
+  for(int emSamp = 0; emSamp <= 3 && emSamp < maxEmSamp; emSamp++) {
+    if( emEnergy[emSamp] > 0.0 && fabs(clusterDetails->EMRadius(emSamp)) < 90.0) {
+      emRadAll += emEnergy[emSamp] * clusterDetails->EMRadius(emSamp);
+      totEn    += emEnergy[emSamp];
+    }
+  }
+  
+  if (totEn > 0.0) {
+    return emRadAll / totEn;
+  }
+  return -99.0;
+}
+
+double TauAllCaloDRFex::caloRadius(const TrigTauClusterDetails* clusterDetails)
+{
+  double caloRad  = 0.0;
+  double totEn    = 0.0;
+
+  double emEnergy[4] = {0.0, 0.0, 0.0, 0.0};
+  double hadEnergy[3] = {0.0, 0.0, 0.0};
+
+  for (int iS=0; iS<4; iS++) {
+    switch (m_defaultWidth) {
+    case 0:
+      emEnergy[iS] = clusterDetails->EMenergyNarrow(iS);
+      if (iS<3) 
+          hadEnergy[iS] = clusterDetails->HADenergyNarrow(iS);
+      break;
+    case 1:
+      emEnergy[iS] = clusterDetails->EMenergyMedium(iS);
+      if (iS<3) 
+          hadEnergy[iS] = clusterDetails->HADenergyMedium(iS);
+      break;
+    case 2:
+      emEnergy[iS] = clusterDetails->EMenergyWide(iS);
+      if (iS<3) 
+          hadEnergy[iS] = clusterDetails->HADenergyWide(iS);
+      break;
+    }
+  }
+  
+  
+  for(int emSamp = 0; emSamp <= 3; emSamp++) {
+    if( emEnergy[emSamp] > 0.0  &&  fabs(clusterDetails->EMRadius(emSamp)) < 90.0) {
+      caloRad += emEnergy[emSamp] * clusterDetails->EMRadius(emSamp);
+      totEn   += emEnergy[emSamp];
+    }
+  }
+  for(int hadSamp = 0; hadSamp <= 2; hadSamp++) {
+    if( hadEnergy[hadSamp] > 0.0 && fabs(clusterDetails->HADRadius(hadSamp)) < 90.0) {
+      caloRad += hadEnergy[hadSamp] * clusterDetails->HADRadius(hadSamp);
+      totEn   += hadEnergy[hadSamp];
+    }
+  }
+  if(totEn > 0.0) {
+        return caloRad / totEn;
+  }
+  return -99.0;
+}
+
+double TauAllCaloDRFex::hadRadius(const TrigTauClusterDetails* clusterDetails)
+{
+  double hadRad = 0.0;
+  double totEn  = 0.0;
+  
+  double hadEnergy[3] = {0.0, 0.0, 0.0};
+  
+  for (int iS=0; iS<3; iS++) {
+    switch (m_defaultWidth) {
+    case 0:
+      hadEnergy[iS] = clusterDetails->HADenergyNarrow(iS);
+      break;
+    case 1:
+      hadEnergy[iS] = clusterDetails->HADenergyMedium(iS);
+      break;
+    case 2:
+      hadEnergy[iS] = clusterDetails->HADenergyWide(iS);
+      break;
+    }
+  }
+  
+  
+  for(int hadSamp = 0; hadSamp <= 2; hadSamp++) {
+    if(hadEnergy[hadSamp] > 0.0 && fabs(clusterDetails->HADRadius(hadSamp)) < 90.0) {
+      hadRad += hadEnergy[hadSamp] * clusterDetails->HADRadius(hadSamp);
+      totEn  += hadEnergy[hadSamp];
+    }
+  }
+
+  if(totEn > 0.0) {
+    return hadRad / totEn;
+  }
+  return -99.0;
+}
+
+
+
+double TauAllCaloDRFex::coreFraction(const TrigTauClusterDetails* clusterDetails)
+{
+    double ERawNarrow = (clusterDetails->EMenergyNarrow(0)
+                       + clusterDetails->EMenergyNarrow(1)
+                       + clusterDetails->EMenergyNarrow(2)
+                       + clusterDetails->EMenergyNarrow(3)
+                       + clusterDetails->HADenergyNarrow(0)
+                       + clusterDetails->HADenergyNarrow(1)
+                       + clusterDetails->HADenergyNarrow(2));
+    
+    double ERawMedium = (clusterDetails->EMenergyMedium(0)
+                     + clusterDetails->EMenergyMedium(1)
+                     + clusterDetails->EMenergyMedium(2)
+                     + clusterDetails->EMenergyMedium(3)
+                     + clusterDetails->HADenergyMedium(0)
+                     + clusterDetails->HADenergyMedium(1)
+                     + clusterDetails->HADenergyMedium(2));
+    
+    if(ERawMedium > 0.0) {
+      return ERawNarrow / ERawMedium;
+    }
+    return -99.0;  
+}
+
+double TauAllCaloDRFex::emFraction(const TrigTauCluster* ptrigTauCluster)
+{
+  float totEn = ptrigTauCluster->EMenergy() + ptrigTauCluster->HADenergy();
+  if(totEn != 0.0) {
+    return ptrigTauCluster->EMenergy() / totEn;
+  } 
+
+  return -99.0;
+}
+
+double TauAllCaloDRFex::calcEnergyPhi(double energyNegPhi, double energyPosPhi, double EnergyMediumNegPhi, double EnergyMediumPosPhi, double energyNegPhiConv)
+{
+  double AvgNegPhi = 0.;
+  double AvgPosPhi = 0.;
+  double energyPhi = 0.;
+
+    if (EnergyMediumNegPhi > 0. ){
+      AvgNegPhi = energyNegPhi / EnergyMediumNegPhi;
+    } else {
+      AvgNegPhi = -999.0;
+    }
+    
+    if (EnergyMediumPosPhi > 0. ){
+      AvgPosPhi = energyPosPhi / EnergyMediumPosPhi;
+    } else {
+      AvgPosPhi = -999.0;
+    }
+    
+    if (AvgPosPhi==-999.0) {
+      if (AvgNegPhi != -999.0) {
+        energyPhi = AvgNegPhi;
+      }
+    }
+    
+    if (AvgNegPhi==-999.0) {
+      if (AvgPosPhi != -999.0) {
+        energyPhi = AvgPosPhi;
+      }
+    }
+    
+    if (AvgNegPhi != -999.0 && AvgPosPhi != -999.0) {
+      if ( (AvgNegPhi > (-M_PI/2.0)) && (AvgPosPhi < (M_PI/2.0)) ) {
+        energyPhi = (energyNegPhi + energyPosPhi)/ 
+	  (EnergyMediumNegPhi + EnergyMediumPosPhi);
+      } else {
+        if ((AvgNegPhi < (-M_PI/2.0)) && (AvgPosPhi > (M_PI/2.0))) {
+          energyPhi = (energyNegPhiConv + energyPosPhi)/
+	    (EnergyMediumNegPhi + EnergyMediumPosPhi);
+          if (energyPhi > M_PI) {
+            energyPhi = energyPhi - 2*M_PI;
+          }
+        }
+      }
+    }
+  return energyPhi;
+}
+
+bool TauAllCaloDRFex::getdR(double compPhi, double compEta, double etaCell, double phiCell, double dRCut, double& dR)
+{
+
+  float dEta = fabs(etaCell - compEta);
+  if( dEta > dRCut ) return false;
+  float dPhi = fabs(phiCell - compPhi);
+  if( dPhi > M_PI ) dPhi = 2*M_PI - dPhi;
+  if( dPhi > dRCut ) return false;
+  dR = std::sqrt(dEta*dEta + dPhi*dPhi);
+  if( dR > dRCut )  return false;
+  return true;
+
+}
+
+double TauAllCaloDRFex::getEMEnergy(const TrigTauClusterDetails* clusterDetails, int widthChoice)
+{
+  double EMEnergy;
+  switch (widthChoice)
+  {
+    case 0:
+       EMEnergy = (clusterDetails->EMenergyNarrow(0)+
+                   clusterDetails->EMenergyNarrow(1)+
+                   clusterDetails->EMenergyNarrow(2)+
+                   clusterDetails->EMenergyNarrow(3));
+       break;
+    case 1:
+       EMEnergy = (clusterDetails->EMenergyMedium(0)+
+                   clusterDetails->EMenergyMedium(1)+
+                   clusterDetails->EMenergyMedium(2)+
+                   clusterDetails->EMenergyMedium(3));
+       break;
+    case 2:
+       EMEnergy = (clusterDetails->EMenergyWide(0)+
+                   clusterDetails->EMenergyWide(1)+
+                   clusterDetails->EMenergyWide(2)+
+                   clusterDetails->EMenergyWide(3));
+       break;       
+    default:
+       EMEnergy = (clusterDetails->EMenergyNarrow(0)+
+                   clusterDetails->EMenergyNarrow(1)+
+                   clusterDetails->EMenergyNarrow(2)+
+                   clusterDetails->EMenergyNarrow(3));
+
+  }  
+  return EMEnergy;
+}
+
+double TauAllCaloDRFex::getHADEnergy(const TrigTauClusterDetails* clusterDetails, int widthChoice)
+{
+  double HADEnergy;
+  switch (widthChoice)
+  {
+    case 0:
+       HADEnergy = (clusterDetails->HADenergyNarrow(0)+
+                    clusterDetails->HADenergyNarrow(1)+
+                    clusterDetails->HADenergyNarrow(2));
+       break;
+    case 1:
+       HADEnergy = (clusterDetails->HADenergyMedium(0)+
+                    clusterDetails->HADenergyMedium(1)+
+                    clusterDetails->HADenergyMedium(2));
+       break;
+    case 2:
+       HADEnergy = (clusterDetails->HADenergyWide(0)+
+                    clusterDetails->HADenergyWide(1)+
+                    clusterDetails->HADenergyWide(2));
+       break;       
+    default:
+       HADEnergy = (clusterDetails->HADenergyNarrow(0)+
+                    clusterDetails->HADenergyNarrow(1)+
+                    clusterDetails->HADenergyNarrow(2));
+
+  }  
+  
+  return HADEnergy;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTau/src/components/TrigT2CaloTau_entries.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/components/TrigT2CaloTau_entries.cxx
new file mode 100644
index 000000000000..4f403a0aa6ab
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTau/src/components/TrigT2CaloTau_entries.cxx
@@ -0,0 +1,7 @@
+#include "TrigT2CaloTau/T2CaloTau.h"
+#include "TrigT2CaloTau/TauAllCaloDRFex.h"
+
+DECLARE_COMPONENT( T2CaloTau )
+
+DECLARE_COMPONENT( TauAllCaloDRFex )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/CMakeLists.txt
new file mode 100644
index 000000000000..ccf23c25f80d
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/CMakeLists.txt
@@ -0,0 +1,36 @@
+################################################################################
+# Package: TrigT2CaloTileMon
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrigT2CaloTileMon )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          GaudiKernel
+                          Trigger/TrigAlgorithms/TrigT2CaloCommon
+                          Trigger/TrigEvent/TrigCaloEvent
+                          Trigger/TrigEvent/TrigSteeringEvent
+                          PRIVATE
+                          Calorimeter/CaloGeoHelpers
+                          Trigger/TrigT1/TrigT1Interfaces )
+
+# External dependencies:
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_library( TrigT2CaloTileMonLib
+                   src/*.cxx
+                   PUBLIC_HEADERS TrigT2CaloTileMon
+                   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel TrigCaloEvent TrigSteeringEvent TrigT2CaloCommonLib
+                   PRIVATE_LINK_LIBRARIES CaloGeoHelpers TrigT1Interfaces )
+
+atlas_add_component( TrigT2CaloTileMon
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel TrigT2CaloCommonLib TrigCaloEvent TrigSteeringEvent CaloGeoHelpers TrigT1Interfaces TrigT2CaloTileMonLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/T2CaloTileMon.h b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/T2CaloTileMon.h
new file mode 100755
index 000000000000..35564527824d
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/T2CaloTileMon.h
@@ -0,0 +1,76 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+ NAME:     T2CaloTileMon.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+
+ AUTHOR:   D.O. Damazion Jens Damaske
+
+ PURPOSE:  Based on T2CaloBase works as main driver for the LVL2
+      Calorimeter TileMon Algorithm. Receives and decodes LVL1
+      information (RoI position) and just makes some monitoring
+ *******************************************************************/
+
+#ifndef TRIGT2CALOTILEMON_T2CALOTILEMON_H
+#define TRIGT2CALOTILEMON_T2CALOTILEMON_H
+
+#include <string>
+#include "TrigT2CaloCommon/T2CaloBase.h"
+#include "GaudiKernel/ToolHandle.h"
+
+class IAlgToolCalo;
+class T2CaloEgammaMon;
+class MsgStream;
+class TrigEMCluster;
+class TrigT2TileJet;
+class TrigT2Tower;
+
+/** Main LVL2 Algorithm. Processes LVL1 information, call FEX
+    IAlgToolCalos and produces the TrigEMCluster output. */
+class T2CaloTileMon: public T2CaloBase {
+
+   public:
+      /** Constructor */
+      T2CaloTileMon(const std::string & name, ISvcLocator* pSvcLocator);
+      /** Destructor */
+      ~T2CaloTileMon();
+
+      /** hltExecute will call FEX IAlgToolCalo::execute() to process RoI.
+      called by the Steering per EMRoI. */
+      HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE,
+               HLT::TriggerElement* outputTE);
+      /** hltInitialize. Called by the Steering. */
+      HLT::ErrorCode hltInitialize();
+      /** hltFinalize. Called by the Steering. */
+      HLT::ErrorCode hltFinalize();
+
+   private:
+      /** To support new monitoring. Values must be copied to
+      this monitored Cluster for each RoI. */
+      //const TrigEMCluster* m_monitoredCluster;
+      /** To monitor rCore */
+      //float m_rCore;
+      /** To monitor eRatio */
+      //float m_eRatio;
+      /** Forced LVL1 eta */
+      float m_l1eta;
+      /** Forced LVL1 phi */
+      float m_l1phi;
+
+      //int m_index;
+
+      // Properties:
+      std::string m_trigEmClusterKey;
+      /** Will monitoring be used or not */
+      //bool m_mon;
+      /** Coordinates to be used by the tools (in order by tool) */
+      std::vector<float> m_etamin;
+      std::vector<float> m_etamax;
+      std::vector<float> m_phimin;
+      std::vector<float> m_phimax;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TileMonHadEnFex.h b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TileMonHadEnFex.h
new file mode 100755
index 000000000000..86b74bca0f6c
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TileMonHadEnFex.h
@@ -0,0 +1,80 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+ 
+ NAME:     TileMonHadEnFex.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+ 
+ AUTHOR:   D.O.Damazio
+ 
+ PURPOSE:  Based on Cluster position defined in the second
+           EM Calorimeter layer, calculates total Had cluster
+           energy.
+ *******************************************************************/
+
+#ifndef TRIGT2CALOTILEMON_TILEMONHADENFEX_H 
+#define TRIGT2CALOTILEMON_TILEMONHADENFEX_H
+
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+#include "GaudiKernel/AlgTool.h"
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/ITHistSvc.h"
+#include "GaudiKernel/IIncidentSvc.h"
+#include "GaudiKernel/IIncidentListener.h"
+#include "TH1.h"
+#include "TH2.h"
+
+
+/** Feature extraction Tool for LVL2 Calo. Hadronic EndCaps
+	and Tile Calorimeter. All Samples */
+class TileMonHadEnFex: public IAlgToolCalo, virtual public IIncidentListener
+{
+   public:
+      TileMonHadEnFex(const std::string & type, const std::string & name,
+                  const IInterface* parent);
+      virtual ~TileMonHadEnFex();
+      using IAlgToolCalo::execute;
+      /** @brief execute feature extraction for the EM Calorimeter
+      *   second layer
+      *   @param[out] rtrigEmCluster is the output cluster.
+      *   @param[in] eta/phi-min/max = RoI definition.
+      */
+      StatusCode execute(TrigEMCluster &rtrigEmCluster,double etamin,
+            double etamax, double phimin, double phimax);
+      StatusCode initialize();
+      StatusCode finalize();
+      TH1*** hists(){ return m_hists; }
+      /** handle to init a new event */
+      void handle (const Incident& );
+      double logEnergy(double energy);
+//       void BinLogY(TH2* h);
+
+   private:
+      ServiceHandle<ITHistSvc> m_thistSvc;
+      float m_THR_1;
+      float m_THR_2;
+      float m_end_detec_eta;
+      float m_end_detec_phi;
+      float m_eta_division;
+      float m_phi_division;
+      float m_energyCell_Thr;
+
+      //Monitoring
+      TH1*** m_hists;
+      //TH1*** m_hist_TB0; //TileBar0
+      //TH1*** m_hist_TB1; //TileBar1
+      //TH1*** m_hist_TB2; //TileBar2
+      TH2F** m_2dhists;
+      TH2F** m_2dhists_TB0; //TileBar0
+      TH2F** m_2dhists_TB1; //TileBar1
+      TH2F** m_2dhists_TB2; //TileBar2
+      //TH2* m_mainHist;
+      std::string m_histPath;
+      bool m_configured;
+
+};
+
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2TileJet.h b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2TileJet.h
new file mode 100755
index 000000000000..f2c2b311da41
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2TileJet.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+ 
+ NAME:     TrigT2TileJet.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+ 
+ AUTHOR:   Jens Damaske
+ 
+ *******************************************************************/
+
+#ifndef TRIGT2CALOTILEMON_TRIGTT2TILEJET_H
+#define TRIGT2CALOTILEMON_TRIGTT2TILEJET_H
+
+// #include "TrigCaloEvent/TrigEMCluster.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+/// #include "Trig3Momentum.h"
+
+#include "TrigT2CaloTileMon/TrigT2Tower.h"
+/// #include "TrigT2Tower.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include <vector>
+#include <iostream>
+
+/** LVL2 Trigger TileJet Class */
+class TrigT2TileJet /* : public TrigEMCluster */
+{
+  
+   public:
+      // Default ctor/dtor.
+
+      void insertCell(const Trig3Momentum& newCell, MsgStream& log);
+      void searchTowerAndInsert( const Trig3Momentum& cell,  MsgStream& log, double etaShift = 0.0 );
+
+      /** find hottest Tower */
+      bool findHottestTower(TrigT2Tower &tower) const;
+
+      /** debugging */
+      void print(MsgStream& log) const;
+
+   private:
+      /** vector of TrigT2Tower elements that compose Jet */
+      std::vector<TrigT2Tower> m_towercollection;
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2Tower.h b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2Tower.h
new file mode 100644
index 000000000000..45a087ad9188
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/TrigT2CaloTileMon/TrigT2Tower.h
@@ -0,0 +1,80 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+ NAME:     TrigT2Tower.h
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+
+ AUTHOR:   Jens Damaske
+ PURPOSE:  Compines 3 Trig3Momentum Objects to a Tower
+
+ *******************************************************************/
+
+#ifndef TRIGT2CALOTILEMON_TRIGTT2TOWER_H
+#define TRIGT2CALOTILEMON_TRIGTT2TOWER_H
+
+#include "TrigCaloEvent/Trig3Momentum.h"
+/// #include "Trig3Momentum.h"
+
+#include "GaudiKernel/MsgStream.h"
+
+#include <sstream>
+#include <iostream>
+#include <cmath>
+
+/**
+   3 cells of type Trig3Momentum per tower
+   "cell.inCone is used as cell.inTower"
+*/
+class TrigT2Tower{
+   
+   public:
+      /** Default Constructor */
+      TrigT2Tower();
+      TrigT2Tower(const Trig3Momentum& newCell, MsgStream& log, double etaShift=0.0);
+
+      // Get methods
+      /** Get the energy */
+      double e()      const {return m_e;  }
+      /** Get the eta position */
+      double eta()    const {return m_eta;  }
+      /** Get the phi position */
+      double phi()    const {return m_phi;  }
+      /** Return if tower consists of 3 cells */
+      bool isComplete() const {return m_full;  }
+      /** Check if newCell belongs to this tower */
+      bool isMember(const Trig3Momentum& newCell, MsgStream& log, double etaShift=0.0) const;
+      Trig3Momentum cell(int i) const {return m_cells[i];   }
+
+      // Set methods
+      /** Set energy */
+      void setE(double e)            {m_e = e;  }
+      /** Set eta */
+      void setEta(double eta)        {m_eta = eta;  }
+      /** Set phi */
+      void setPhi(double phi)        {m_phi = phi;  }
+      /** Flag if tower is full */
+      void setComplete(bool isComplete)    {m_full = isComplete;}
+      /** Insert cell */
+      bool insertCell(const Trig3Momentum& newCell, MsgStream& log);
+
+      // debugging
+      void print(MsgStream& log, MSG::Level level) const;
+
+   private:
+      /** Energy */
+      double m_e;
+      /** Eta */
+      double m_eta;
+      /** Phi */
+      double m_phi;
+      /** is full tower */
+      bool m_full;
+      /** tower cells one for each layer */
+      Trig3Momentum m_cells[3];
+      
+};
+
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/python/TrigT2CaloTileMonConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/python/TrigT2CaloTileMonConfig.py
new file mode 100755
index 000000000000..6b30ec851ceb
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/python/TrigT2CaloTileMonConfig.py
@@ -0,0 +1,36 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+from TrigT2CaloTileMon.TrigT2CaloTileMonConf import TileMonHadEnFex
+from TrigT2CaloTileMon.TrigT2CaloTileMonConf import T2CaloTileMon
+
+#from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram
+#from TrigMonitorBase.TrigGenericMonitoringToolConfig import TrigGenericMonitoringToolConfig
+
+#from AthenaCommon.Constants import VERBOSE,DEBUG
+
+class TileMonHadEnFex(TileMonHadEnFex):
+      __slots__ = []
+      def __init__ (self, name="TileMonHadEnFex"):
+        super(TileMonHadEnFex,self).__init__(name)
+        self.THR_1=100
+        self.HistogramsPath="/EXPERT/TileMonHadEnFex"
+
+
+class T2CaloCosmic_Cosmic (T2CaloTileMon):
+   __slots__ = []
+   def __init__ (self, name="T2CaloCosmic_Cosmic"): 
+       super(T2CaloTileMon, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [TileMonHadEnFex() ]
+       self.IAlgToolList[0].HistogramsPath= "/EXPERT/"
+       self.IAlgToolList[0].HistogramsPath+=name
+       self.doTiming=True
+
+class T2CaloTileMon_TileMon (T2CaloTileMon):
+   __slots__ = []
+   def __init__ (self, name="T2CaloTileMon_TileMon"): 
+       super(T2CaloTileMon, self).__init__(name)
+       # here put your customizations
+       self.IAlgToolList= [TileMonHadEnFex() ]
+       self.doTiming=True
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/T2CaloTileMon.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/T2CaloTileMon.cxx
new file mode 100755
index 000000000000..dcf3165a4109
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/T2CaloTileMon.cxx
@@ -0,0 +1,156 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     T2CaloTileMon.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+//
+// AUTHOR:   D.O. Damazio, Jens Damaske
+//
+// - Add variables for job option controlled region limits, set defaults
+//   to most likely values.
+// - Add function EtaPhiRange to return the maximum and minimum eta or phi
+//   values to use when calculating energy sums over a region  - R. Soluk
+// ********************************************************************
+
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IToolSvc.h"
+#include "GaudiKernel/StatusCode.h"
+
+#include "TrigT1Interfaces/RecEmTauRoI.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+#include "TrigSteeringEvent/PhiHelper.h"
+
+#include "TrigCaloEvent/TrigEMClusterContainer.h"
+#include "TrigT2CaloTileMon/TrigT2TileJet.h"
+#include "TrigT2CaloTileMon/TrigT2Tower.h"
+
+#include "TrigT2CaloTileMon/T2CaloTileMon.h"
+#include "TrigT2CaloCommon/IAlgToolCalo.h"
+
+class ISvcLocator;
+
+T2CaloTileMon::T2CaloTileMon(const std::string & name, ISvcLocator* pSvcLocator) :
+               T2CaloBase(name, pSvcLocator)
+{
+   declareProperty("TrigEMClusterKey",m_trigEmClusterKey = "T2CaloTrigEMCluster");
+   declareProperty("L1ForceEta",m_l1eta = -10.0);
+   declareProperty("L1ForcePhi",m_l1phi = -10.0);
+   declareProperty("EtaMin",m_etamin);
+   declareProperty("EtaMax",m_etamax);
+   declareProperty("PhiMin",m_phimin);
+   declareProperty("PhiMax",m_phimax);
+
+}
+
+T2CaloTileMon::~T2CaloTileMon()
+{
+}
+
+
+HLT::ErrorCode T2CaloTileMon::hltInitialize()
+{
+   return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloTileMon::hltExecute(const HLT::TriggerElement* inputTE,
+					HLT::TriggerElement* /*outputTE*/)
+{
+   // Time total T2CaloTileMon execution time.
+   if ( m_timersvc ) m_timer[0]->start();
+
+#ifndef NDEBUG
+   ATH_MSG_INFO( "in execute()"  );
+#endif
+
+   const TrigRoiDescriptor* roiDescriptor = 0;
+   HLT::ErrorCode hltStatus = getFeature(inputTE, roiDescriptor);
+
+   if ( hltStatus == HLT::OK ) {
+#ifndef NDEBUG
+     ATH_MSG_DEBUG( *roiDescriptor  );
+#endif
+   }
+   else
+   {
+      ATH_MSG_WARNING( " Failed to find RoiDescriptor "  );
+      return hltStatus;
+   }
+
+   // End LVL1 part
+   double etamin, etamax, phimin, phimax;
+   if ( (m_l1eta<-9.9)&&(m_l1phi<-9.9)){
+      etamin = std::max(-2.5,roiDescriptor->eta() - m_etaWidth);
+      etamax = std::min( 2.5,roiDescriptor->eta() + m_etaWidth);
+      phimin = HLT::wrapPhi(roiDescriptor->phi() - m_phiWidth);
+      phimax = HLT::wrapPhi(roiDescriptor->phi() + m_phiWidth);
+   } else {
+      etamin = std::max(-2.5,m_l1eta - m_etaWidth);
+      etamax = std::min( 2.5,m_l1eta + m_etaWidth);
+      phimin = HLT::wrapPhi(m_l1phi - m_phiWidth);
+      phimax = HLT::wrapPhi(m_l1phi + m_phiWidth);
+   }
+
+#ifndef NDEBUG
+   ATH_MSG_DEBUG( " etamin = "<< etamin  );
+   ATH_MSG_DEBUG( " etamax = "<< etamax  );
+   ATH_MSG_DEBUG( " phimin = "<< phimin  );
+   ATH_MSG_DEBUG( " phimax = "<< phimax  );
+#endif
+
+   ///   TrigRoiDescriptor* newroi = new TrigRoiDescriptor( roiDescriptor->eta(), etamin, etamax, 
+   ///			                                   roiDescriptor->phi(), phimin, phimax ); 
+
+   ///   attachFeature( outputTE, newroi, "T2CaloTimeMon");
+   /// Tile RS shoudl map to it's own requirements niw - we can 
+   ///still use d-pi .. pi wrapping
+ 
+   const TrigRoiDescriptor newroi( roiDescriptor->eta(), etamin, etamax, 
+				   roiDescriptor->phi(), phimin, phimax ); 
+
+
+#ifndef NDEBUG
+   ATH_MSG_DEBUG( " Making TrigEMCluster " );
+#endif
+
+
+   //std::vector<xAOD::TrigEMCluster*> vec_clus;
+   // Ok, ignoring LVL1 and forcing a position
+
+   ToolHandleArray<IAlgToolCalo>::iterator it = m_emAlgTools.begin();
+   if ( m_timersvc ) m_timer[1]->start();
+
+   //TrigEMCluster* ptrigEmCluster = new TrigT2TileJet();
+   xAOD::TrigEMCluster* ptrigEmCluster = new xAOD::TrigEMCluster();
+   for (; it < m_emAlgTools.end(); it++)
+   {
+
+     //      if ((*it)->execute(*ptrigEmCluster,etamin,etamax,phimin,phimax).isFailure() )
+     if ((*it)->execute(*ptrigEmCluster,newroi, caloDDENull).isFailure() )
+       {
+         ATH_MSG_WARNING( "T2Calo AlgToolTileMon returned Failure"  );
+         return HLT::TOOL_FAILURE;
+      }
+   }
+   delete ptrigEmCluster;  // in for loop will be destroyed automatically
+
+   if ( m_timersvc ) m_timer[1]->stop();
+
+   // Time total T2CaloTileMon execution time.
+   if ( m_timersvc ) m_timer[0]->stop();
+
+   return HLT::OK;
+}
+
+
+HLT::ErrorCode T2CaloTileMon::hltFinalize(){
+
+#ifndef NDEBUG
+    ATH_MSG_INFO( "in finalize()"  );
+#endif
+
+   return HLT::OK;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TileMonHadEnFex.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TileMonHadEnFex.cxx
new file mode 100755
index 000000000000..ec5551a799c1
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TileMonHadEnFex.cxx
@@ -0,0 +1,424 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// ********************************************************************
+//
+// NAME:     TileMonHadEnFex.cxx
+// PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+//
+// AUTHOR:   Jens Damaske
+//
+// ********************************************************************
+
+#include "TrigCaloEvent/TrigEMCluster.h"
+#include "TrigT2CaloTileMon/TrigT2TileJet.h"
+#include "TrigT2CaloTileMon/TrigT2Tower.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+#include "CaloGeoHelpers/CaloSampling.h"
+
+#include "TrigT2CaloTileMon/TileMonHadEnFex.h"
+#include "TrigT2CaloCommon/Calo_Def.h"
+
+#include <math.h>
+#include <TMath.h>
+#include <string>
+
+
+TileMonHadEnFex::TileMonHadEnFex(const std::string & type, const std::string & name,
+                                 const IInterface* parent) :
+               IAlgToolCalo(type, name, parent),
+               m_thistSvc("THistSvc/THistSvc","TileMonHadEnFex"),
+               m_THR_1(400),
+               m_THR_2(100),
+	       m_hists(NULL),
+	       //m_hist_TB0(NULL),
+	       //m_hist_TB1(NULL),
+	       //m_hist_TB2(NULL),
+	       m_2dhists(NULL),
+	       m_2dhists_TB0(NULL),
+	       m_2dhists_TB1(NULL),
+	       m_2dhists_TB2(NULL)
+	       //m_mainHist(NULL)
+{
+   declareProperty("THistSvc",m_thistSvc,"THistSvc output");
+   declareProperty("HistogramsPath",m_histPath="/EXPERT/T2CaloTileMon");
+   declareProperty("THR_1",m_THR_1);
+   declareProperty("THR_2",m_THR_2);
+   m_end_detec_eta = 1.6;
+   m_end_detec_phi = M_PI;
+   m_eta_division =  0.1;
+   m_phi_division =  M_PI/32.;
+   m_energyCell_Thr =  0.01; //Threshold in Gev
+   m_configured=false;
+}
+
+TileMonHadEnFex::~TileMonHadEnFex(){
+}
+
+StatusCode TileMonHadEnFex::initialize(){ 
+   if ( IAlgToolCalo::initialize().isFailure() )
+      return StatusCode::FAILURE;
+   if ( m_thistSvc.retrieve().isFailure() )
+      return StatusCode::FAILURE;
+   IIncidentSvc* p_incSvc;
+   if ( service("IncidentSvc",p_incSvc, true).isFailure() ) {
+      return StatusCode::FAILURE;
+   }
+   else
+   {
+      p_incSvc->addListener(this, "BeginRun",100);
+   }
+
+   return StatusCode::SUCCESS;
+}
+
+
+double TileMonHadEnFex::logEnergy(double energy)
+{
+   energy = energy/1.e3; // energy in GeV
+   energy = TMath::Log(energy);
+   return energy;
+}
+
+/**
+* @brief changes the Y-axis binning of a given histogram to a logarithmic scale
+* 
+* NOT SUPPORTED BY ONLINE HISTO GATHERER
+*
+* For a given histogram the Y-axis binning is changed form a linear to a logarithmic scale
+* Take care, that the axis minimum is > 0
+*
+* @param[in]   h  pointer to the histogram
+*/
+// void TileMonHadEnFex::BinLogY(TH2* h)
+// {
+//    TAxis *axis = h->GetYaxis();
+//    int bins = axis->GetNbins();
+//    Axis_t min = axis->GetXmin();
+//    Axis_t max = axis->GetXmax();
+//    Axis_t width = (max - min) / bins;
+//    Axis_t *new_bins = new Axis_t[bins + 1];
+//  
+//    double logWidth = ( TMath::Log(max)-TMath::Log(min) ) / bins;
+// 
+// //    cout << "min:" << min << " max:" << max << " bins:" << bins << " logWidth:" << logWidth << endl;
+//    
+//    for (int i = 0; i <= bins; i++) {
+// //      cout << min + i * width << "\t";
+//       new_bins[i] = min*TMath::Exp(i * logWidth);
+// //      cout << new_bins[i] << endl;
+//    }
+//    axis->Set(bins, new_bins);
+//    delete new_bins;
+// }
+
+void TileMonHadEnFex::handle( const Incident& )
+{
+   m_configured=false;
+
+   m_2dhists = new TH2F* [(int)floorf((2*m_end_detec_eta)/m_eta_division)];             //2D histo Et vs phi
+   m_2dhists_TB0 = new TH2F* [(int)floorf((2*m_end_detec_eta)/m_eta_division)];         //2D histo Et vs phi for TileBar0 and TileExt0
+   m_2dhists_TB1 = new TH2F* [(int)floorf((2*m_end_detec_eta)/m_eta_division)];         //2D histo Et vs phi for TileBar1 and TileExt1
+   m_2dhists_TB2 = new TH2F* [(int)floorf((2*m_end_detec_eta)/m_eta_division)];         //2D histo Et vs phi for TileBar2 and TileExt2
+
+   for(float eta=-m_end_detec_eta;eta<m_end_detec_eta;eta+=m_eta_division)
+   {
+      int hist_grid_eta=(int)floorf(((eta)+m_end_detec_eta)/m_eta_division);
+      char name_2dhist[60];
+      char name_2dhist_TB0[60];
+      char name_2dhist_TB1[60];
+      char name_2dhist_TB2[60];
+      char name_2dhist_toreg[100];
+      char name_2dhist_toreg_TB0[100];
+      char name_2dhist_toreg_TB1[100];
+      char name_2dhist_toreg_TB2[100];
+
+      float etaN = eta;
+      float epsilon = 0.00001;
+
+      sprintf(name_2dhist,"TowerMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division); //Tower
+      if (etaN <= (-1.1 + epsilon) || etaN >= (1.0 - epsilon) ) //Extended Barrel - Cell
+      {
+         sprintf(name_2dhist_TB0,"TE0_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+         sprintf(name_2dhist_TB1,"TE1_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+         sprintf(name_2dhist_TB2,"TE2_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+      }
+      else if( etaN > (-1.1 + epsilon) && etaN < (1.0 - epsilon) ) //Central Barrel - Cell
+      {
+         sprintf(name_2dhist_TB0,"TB0_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+         sprintf(name_2dhist_TB1,"TB1_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+         sprintf(name_2dhist_TB2,"TB2_CellMonitor_eta=%-2.1f_%-2.1f",etaN,etaN+m_eta_division);
+      }
+
+      sprintf(name_2dhist_toreg,"%s/TowerMonitor_n=%-2.1f",m_histPath.c_str(),etaN); //Tower
+      if (etaN <= (-1.1 + epsilon) || etaN >= (1.0 - epsilon) ) //Extended Barrel - Cell
+      {
+         sprintf(name_2dhist_toreg_TB0,"%s/TileExt0/TE0_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+         sprintf(name_2dhist_toreg_TB1,"%s/TileExt1/TE1_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+         sprintf(name_2dhist_toreg_TB2,"%s/TileExt2/TE2_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+      }
+      else if( etaN > (-1.1 + epsilon) && etaN < (1.0 - epsilon) ) //Central Barrel - Cell
+      {
+         sprintf(name_2dhist_toreg_TB0,"%s/TileBar0/TB0_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+         sprintf(name_2dhist_toreg_TB1,"%s/TileBar1/TB1_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+         sprintf(name_2dhist_toreg_TB2,"%s/TileBar2/TB2_CellMonitor_n=%-2.1f",m_histPath.c_str(),etaN);
+      }
+
+      std::string str1 =name_2dhist;
+      std::string str2=name_2dhist_TB0;
+      std::string str3=name_2dhist_TB1;
+      std::string str4=name_2dhist_TB2;
+      std::string str5=name_2dhist_toreg;
+      std::string str6=name_2dhist_toreg_TB0;
+      std::string str7=name_2dhist_toreg_TB1;
+      std::string str8=name_2dhist_toreg_TB2;
+
+      std::string dot(".");
+
+      if ( str1.find(".") != std::string::npos ) str1.replace(str1.find("."),dot.length(),"_");
+      if ( str1.find(".") != std::string::npos ) str1.replace(str1.find("."),dot.length(),"_");
+
+      if ( str2.find(".") != std::string::npos ) str2.replace(str2.find("."),dot.length(),"_");
+      if ( str2.find(".") != std::string::npos ) str2.replace(str2.find("."),dot.length(),"_");
+
+      if ( str3.find(".") != std::string::npos ) str3.replace(str3.find("."),dot.length(),"_");
+      if ( str3.find(".") != std::string::npos ) str3.replace(str3.find("."),dot.length(),"_");
+
+      if ( str4.find(".") != std::string::npos ) str4.replace(str4.find("."),dot.length(),"_");
+      if ( str4.find(".") != std::string::npos ) str4.replace(str4.find("."),dot.length(),"_");
+
+      if ( str5.find(".") != std::string::npos ) str5.replace(str5.find("."),dot.length(),"_");
+
+      if ( str6.find(".") != std::string::npos ) str6.replace(str6.find("."),dot.length(),"_");
+
+      if ( str7.find(".") != std::string::npos ) str7.replace(str7.find("."),dot.length(),"_");
+
+      if ( str8.find(".") != std::string::npos ) str8.replace(str8.find("."),dot.length(),"_");
+
+      strcpy(name_2dhist,str1.c_str());
+      strcpy(name_2dhist_TB0,str2.c_str());
+      strcpy(name_2dhist_TB1,str3.c_str());
+      strcpy(name_2dhist_TB2,str4.c_str());
+      strcpy(name_2dhist_toreg,str5.c_str());
+      strcpy(name_2dhist_toreg_TB0,str6.c_str());
+      strcpy(name_2dhist_toreg_TB1,str7.c_str());
+      strcpy(name_2dhist_toreg_TB2,str8.c_str());
+
+
+      /**
+      * Energy range should be from 0.02GeV - 50GeV with a precision of 1%
+      * we insert tower energy as ln(energy), so we need an energy axis from -4 to 4 with 800 bins
+      */
+      m_2dhists[hist_grid_eta] = new TH2F(name_2dhist,name_2dhist,(int)floorf(2*m_end_detec_phi/m_phi_division),-m_end_detec_phi,m_end_detec_phi,800,-4.,4.);
+      m_2dhists[hist_grid_eta]->SetXTitle("#phi[#circ]");
+      m_2dhists[hist_grid_eta]->SetYTitle("ln(E_{T}) [GeV]");
+
+      m_2dhists_TB0[hist_grid_eta] = new TH2F(name_2dhist_TB0,name_2dhist_TB0,(int)floorf(2*m_end_detec_phi/m_phi_division),-m_end_detec_phi,m_end_detec_phi,800,-4.,4.);
+      m_2dhists_TB0[hist_grid_eta]->SetXTitle("#phi[#circ]");
+      m_2dhists_TB0[hist_grid_eta]->SetYTitle("ln(E_{T}) [GeV]");
+
+      m_2dhists_TB1[hist_grid_eta] = new TH2F(name_2dhist_TB1,name_2dhist_TB1,(int)floorf(2*m_end_detec_phi/m_phi_division),-m_end_detec_phi,m_end_detec_phi,800,-4.,4.);
+      m_2dhists_TB1[hist_grid_eta]->SetXTitle("#phi[#circ]");
+      m_2dhists_TB1[hist_grid_eta]->SetYTitle("ln(E_{T}) [GeV]");
+
+      m_2dhists_TB2[hist_grid_eta] = new TH2F(name_2dhist_TB2,name_2dhist_TB2,(int)floorf(2*m_end_detec_phi/m_phi_division),-m_end_detec_phi,m_end_detec_phi,800,-4.,4.);
+      m_2dhists_TB2[hist_grid_eta]->SetXTitle("#phi[#circ]");
+      m_2dhists_TB2[hist_grid_eta]->SetYTitle("ln(E_{T}) [GeV]");
+
+      if ( m_thistSvc->regHist(name_2dhist_toreg,m_2dhists[hist_grid_eta]).isFailure() )         msg() << MSG::ERROR << "Did not register hists" << endmsg; //return StatusCode::FAILURE;
+      if ( m_thistSvc->regHist(name_2dhist_toreg_TB0,m_2dhists_TB0[hist_grid_eta]).isFailure() ) msg() << MSG::ERROR << "Did not register hists" << endmsg; //return StatusCode::FAILURE;
+      if ( m_thistSvc->regHist(name_2dhist_toreg_TB1,m_2dhists_TB1[hist_grid_eta]).isFailure() ) msg() << MSG::ERROR << "Did not register hists" << endmsg; //return StatusCode::FAILURE;
+      if ( m_thistSvc->regHist(name_2dhist_toreg_TB2,m_2dhists_TB2[hist_grid_eta]).isFailure() ) msg() << MSG::ERROR << "Did not register hists" << endmsg; //return StatusCode::FAILURE;
+   }
+
+   //    m_mainHist = new
+   //    TH2F("TT","TT",(int)floorf(2.*m_end_detec_eta/m_eta_division),-m_end_detec_eta,m_end_detec_eta,(int)floorf(2.*m_end_detec_phi/m_phi_division),-m_end_detec_phi,m_end_detec_phi);
+   //    if ( m_thistSvc->regHist("/NT/TT",m_mainHist).isFailure() ) {
+   // 	return StatusCode::FAILURE;
+   //    }
+
+
+   if ( msg().level() <= MSG::DEBUG )
+     msg() << MSG::DEBUG << "Histograms correctly allocated" << endmsg; //
+   m_configured=true;
+   //return StatusCode::SUCCESS;
+}
+
+StatusCode TileMonHadEnFex::finalize(){
+// Don't delete histograms. ROOT takes care of this.
+  if ( msg().level() <= MSG::DEBUG )
+    msg() << MSG::DEBUG << " REGTEST: HadEnFex:  call finalize()" << endmsg;
+//  for(float eta=-m_end_detec_eta;eta<m_end_detec_eta;eta+=m_eta_division){
+//    int hist_grid_eta=(int)floorf(((eta)+m_end_detec_eta)/m_eta_division);
+//    for(float phi=-m_end_detec_phi;phi<m_end_detec_phi;phi+=m_phi_division){
+//         int hist_grid_phi=(int)floorf(((phi)+m_end_detec_phi)/m_phi_division);
+//         if ( m_hists[hist_grid_eta][hist_grid_phi]->GetMean() != 0 )
+// 	std::cout << "eta : " << eta << " phi : " << phi << " " << 
+// 		hist_grid_eta << " " << hist_grid_phi << " " << 
+// 		m_hists[hist_grid_eta][hist_grid_phi]->GetMean() << std::endl;
+// 		m_mainHist->SetBinContent(hist_grid_eta,hist_grid_phi,
+// 			m_hists[hist_grid_eta][hist_grid_phi]->GetMean() );
+//    }
+//  }
+ 
+ return StatusCode::SUCCESS;
+}
+
+StatusCode TileMonHadEnFex::execute(TrigEMCluster &/*rtrigEmCluster*/,double etamin,
+		double etamax, double phimin, double phimax)
+{
+    if ( msg().level() <= MSG::DEBUG )
+      msg() << MSG::DEBUG << " REGTEST: HadEnFex:  call execute()" << endmsg;
+
+  // If there was a problem in configuration, stop now
+  if ( !m_configured ) return StatusCode::SUCCESS;
+        m_tiledecoded=false;
+        // Time total AlgTool time
+        if (!m_timersvc.empty()) m_timer[0]->start();
+
+        // MsgStream log(msgSvc(), name());
+#ifndef NDEBUG
+	if ( msg().level() <= MSG::DEBUG )
+	  msg() << MSG::DEBUG << "in execute(TrigEMCluster &)" << endmsg;
+#endif
+
+  CaloSampling::CaloSample samp;  
+
+  if (!m_timersvc.empty()) {
+	m_timer[1]->start();      
+	m_timer[1]->pause();      
+	m_timer[2]->start();      
+	m_timer[2]->pause();      
+	m_timer[3]->start();      
+	m_timer[3]->pause();      
+	m_timer[4]->start();      
+	m_timer[4]->pause();      
+  }
+
+  
+   // TILECAL Assuming no knowledge about first sample
+  
+   // Time to access RegionSelector
+   if (!m_timersvc.empty()) m_timer[1]->resume();
+
+   /**
+      ToolHandle<ITrigDataAccess> m_data is an object that provides data access in a Region of Interest.
+      is inherited from "/Trigger/TrigAlgorithms/TrigT2CaloCommon/IAlgToolCalo.h"! See TrigT2CaloCommon/ITrigDataAccess.h for more details.
+      Region Selector, no sample needed
+      Get detector offline ID's for Collections
+   */
+   m_data->RegionSelector(0,etamin,etamax,phimin,phimax,TILE);
+
+   if (!m_timersvc.empty()) m_timer[1]->pause();
+
+#ifndef NDEBUG
+   if ( msg().level() <= MSG::DEBUG )
+     msg() << MSG::DEBUG << " REGTEST:   TILE:  TileContSize()" << m_data->TileContSize() << endmsg;
+#endif
+
+   TrigT2TileJet jet;
+   
+   for (unsigned int iR=0;iR<m_data->TileContSize();iR++) { //loop over TileCal drawers
+        // Time to access Collection (and ByteStreamCnv ROBs)
+        if (!m_timersvc.empty()) m_timer[2]->resume();
+	// For the first sample you will create the containers
+	// For the others no
+        if ( m_data->LoadCollections(m_itBegin,m_itEnd,iR,!iR).isFailure() ) {
+	  return StatusCode::FAILURE;
+	}
+	// Finished to access Collection
+        if (!m_timersvc.empty()) m_timer[2]->pause();
+        // Algorithmic time
+        if (!m_timersvc.empty()) m_timer[3]->resume();
+
+   // Each cell must contribute to only one histogram
+   for(m_itt = m_itBegin;m_itt != m_itEnd; ++m_itt) { //loop over cells
+
+
+//       CaloSampling::CaloSample samp;
+//       samp = CaloSampling::getSampling(*(*m_itt));
+//       double cellE = (*m_itt)->e();
+
+
+      const TileCell* tilecell = (*m_itt);
+      double etaCell = tilecell->eta();
+      double phiCell = tilecell->phi();
+      double energyCell = tilecell->energy();
+      //samp = CaloSampling::getSampling(*tilecell);
+      samp = tilecell->caloDDE()->getSampling();
+
+      // BAD CELLS
+//       if ( tilecell->badcell() ) std::cout << "JENSONBUTTON:  e:" << energyCell/1.e3 << ", eta:" << etaCell << ", phi:" << phiCell << ", samp:" << samp << " bad:" << tilecell->badcell() << std::endl;
+
+      // possibly do some tower building
+      // Energy Eta Phi Layer
+      Trig3Momentum tile_cell(energyCell,etaCell,phiCell,samp);
+      jet.insertCell(tile_cell, msg());
+
+   } // end of loop over cells
+   
+   // Algorithmic time
+   if (!m_timersvc.empty()) m_timer[3]->pause();
+   
+  } // End of loop over TileCal drawers
+
+
+   if ( msg().level()<MSG::DEBUG )
+   jet.print(msg());
+   TrigT2Tower hottest_tower;
+   jet.findHottestTower(hottest_tower);
+
+   // FILL HISTOS if at least one cell is set. if not RoI is not in Tile Barrel or Ext, Barrel and in consequence Hottest_tower would be emtpy
+   // Will get bias because of check for > 0.0 but can't be avoided because we take log(e)
+   if ( (hottest_tower.cell(0).inCone() || hottest_tower.cell(1).inCone() || hottest_tower.cell(2).inCone()) && hottest_tower.e() > 0.0 )
+   {
+      
+   if ( msg().level() <= MSG::DEBUG ){
+      msg() << MSG::DEBUG << " REGTEST: HOTTEST_TOWER:  print:" << endmsg;
+      hottest_tower.print(msg(),MSG::DEBUG);
+   }
+
+      // TOWER
+      int hist_grid_eta = (int) floorf( ((hottest_tower.eta()) + m_end_detec_eta)/m_eta_division);
+      m_2dhists[hist_grid_eta]->Fill((float)hottest_tower.phi(), logEnergy(hottest_tower.e()) );
+      if ( msg().level() <= MSG::DEBUG )
+        msg() << MSG::DEBUG << " REGTEST: HOTTEST_TOWER:  fill in histo: eta:" << hottest_tower.eta() << " phi:"<< (float)hottest_tower.phi() << " log(e):" << logEnergy(hottest_tower.e()) << endmsg;
+
+      // CELLS
+      if ( hottest_tower.cell(0).inCone() && hottest_tower.cell(0).e() > 0.0 )
+      {
+         m_2dhists_TB0[hist_grid_eta]->Fill((float)hottest_tower.cell(0).phi(), logEnergy(hottest_tower.cell(0).e()) );
+   	 if ( msg().level() <= MSG::DEBUG )
+   	     msg() << MSG::DEBUG << " REGTEST: HOTTEST_CELL_0:  fill in histo: eta:" << hottest_tower.cell(0).eta() << " phi:"<< (float)hottest_tower.cell(0).phi() << " log(e):" << logEnergy(hottest_tower.cell(0).e()) << endmsg;
+      }
+      
+      if ( hottest_tower.cell(1).inCone() && hottest_tower.cell(1).e() > 0.0 )
+      {
+         m_2dhists_TB1[hist_grid_eta]->Fill((float)hottest_tower.cell(1).phi(), logEnergy(hottest_tower.cell(1).e()) );
+         if ( msg().level() <= MSG::DEBUG )
+  	     msg() << MSG::DEBUG << " REGTEST: HOTTEST_CELL_1:  fill in histo: eta:" << hottest_tower.cell(1).eta() << " phi:"<< (float)hottest_tower.cell(1).phi() << " log(e):" << logEnergy(hottest_tower.cell(1).e()) << endmsg;
+      }
+      
+      if ( hottest_tower.cell(2).inCone() && hottest_tower.cell(2).e() > 0.0 )
+      {
+         // eta is different for layer 2
+         hist_grid_eta=(int)floorf( ((hottest_tower.cell(2).eta()) + m_end_detec_eta)/m_eta_division);
+         m_2dhists_TB2[hist_grid_eta]->Fill((float)hottest_tower.cell(2).phi(), logEnergy(hottest_tower.cell(2).e()) );
+         if ( msg().level() <= MSG::DEBUG )
+  	    msg() << MSG::DEBUG << " REGTEST: HOTTEST_CELL_2:  fill in histo: eta:" << hottest_tower.cell(2).eta() << " phi:"<< (float)hottest_tower.cell(2).phi() << " log(e):" << logEnergy(hottest_tower.cell(2).e()) << endmsg;
+      }
+   }
+
+
+	// Stop all timers
+   if (!m_timersvc.empty()){ 
+		m_timer[4]->stop();
+		m_timer[3]->stop();
+		m_timer[2]->stop();
+		m_timer[1]->stop();
+		m_timer[0]->stop();
+	}
+	
+  return StatusCode::SUCCESS;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2TileJet.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2TileJet.cxx
new file mode 100755
index 000000000000..c173ee3da9c1
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2TileJet.cxx
@@ -0,0 +1,97 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigT2CaloTileMon/TrigT2TileJet.h"
+/// #include "TrigT2TileJet.h"
+#include "TrigCaloEvent/Trig3Momentum.h"
+/// #include "Trig3Momentum.h"
+
+void TrigT2TileJet::insertCell(const Trig3Momentum& newCell, MsgStream& log)
+{
+   if ( log.level() <= MSG::DEBUG ){
+   log << MSG::DEBUG << " REGTEST:     CELL: initial cell info:   eta:" << newCell.eta() << " phi:" << newCell.phi()
+             << " e:" << newCell.e() << " layer:" << newCell.caloSample() << endmsg;
+   }
+
+   // ONLY TILE BARREL AND EXTEND BARREL ALLOWED TO PASS HERE
+   if (
+         newCell.caloSample() == CaloSampling::TileBar0 ||
+         newCell.caloSample() == CaloSampling::TileBar1 ||
+         newCell.caloSample() == CaloSampling::TileBar2 ||
+         newCell.caloSample() == CaloSampling::TileExt0 ||
+         newCell.caloSample() == CaloSampling::TileExt1 ||
+         newCell.caloSample() == CaloSampling::TileExt2
+      )
+   {
+      // if cell in layer 2, cell size is 0.2 x 0.1
+      // make a copy of this cell and assign both two a tower
+      if (
+         newCell.caloSample() == CaloSampling::TileBar2 ||
+         newCell.caloSample() == CaloSampling::TileExt2
+         )
+      {
+         searchTowerAndInsert( newCell, log, -0.05 );
+         searchTowerAndInsert( newCell, log, +0.05 );
+      }
+      else
+      {
+         searchTowerAndInsert(newCell, log);
+      }
+
+   }
+}
+
+void TrigT2TileJet::searchTowerAndInsert( const Trig3Momentum& cell, MsgStream& log, double etaShift )
+{
+   bool flag = 0;
+   
+   // walk through tower collection and look for an appropriate tower
+   for (TrigT2Tower& tt : m_towercollection)
+   {
+      if( tt.isMember(cell, log, etaShift) )
+      {
+         if( tt.insertCell(cell, log) )
+         {
+            // insert new Cell and end loop immediately
+            flag = 1;
+            break; // stop loop
+         }
+         else
+         {
+            log << MSG::WARNING << " REGTEST:     CELL: tried to insert Cell twice in a tower!" << endmsg;
+            flag=1; // do not insert in new tower
+            break;
+         }
+      }
+   }
+   // tower not in collection yet, so create one
+   if ( !flag )
+   {
+     if ( log.level() <= MSG::DEBUG )
+     log << MSG::DEBUG << " REGTEST:     CELL:          insert in NEW tower" << endmsg;
+      m_towercollection.emplace_back( cell, log, etaShift );
+
+   }
+
+}
+
+void TrigT2TileJet::print(MsgStream& log) const
+{
+   log << MSG::DEBUG << " REGTEST: JET:  print jet:" << endmsg;
+   for (const TrigT2Tower& tt : m_towercollection)
+   {
+      tt.print(log,MSG::DEBUG);
+   }
+}
+
+bool TrigT2TileJet::findHottestTower(TrigT2Tower &tower) const
+{
+   tower.setE(0.);
+   for (const TrigT2Tower& tt : m_towercollection)
+   {
+      if ( tt.e() > tower.e() ) tower = tt;
+   }
+   if ( tower.e() > 0.0) return true;
+   else return false;
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2Tower.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2Tower.cxx
new file mode 100644
index 000000000000..fb9fa8129f47
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/TrigT2Tower.cxx
@@ -0,0 +1,131 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+ NAME:     TrigT2Tower.cxx
+ PACKAGE:  Trigger/TrigAlgorithms/TrigT2CaloTileMon
+
+ AUTHOR:   Jens Damaske
+ PURPOSE:  Combines 3 Trig3Momentum Objects to a Tower
+
+ *******************************************************************/
+
+#include "TrigT2CaloTileMon/TrigT2Tower.h"
+/// #include "TrigT2Tower.h"
+
+
+TrigT2Tower::TrigT2Tower(): m_eta(0.0), m_phi(0.0)
+{
+   // flush tower
+   setComplete( 0 );
+   setE( 0. );
+
+   // flush all 3 cells
+   for( int i=0; i<3; i++ )
+   {
+      m_cells[i] = Trig3Momentum( 0., 0., 0., CaloSampling::Unknown);
+      m_cells[i].setInCone(0);
+   }
+}
+
+/** insert first Cell everytime new tower is build */
+TrigT2Tower::TrigT2Tower(const Trig3Momentum& newCell, MsgStream& log, double etaShift): m_eta(0.0), m_phi(0.0)
+{
+   // flush tower
+   setComplete( 0 );
+   setE( 0. );
+   
+   // flush all 3 cells
+   for( int i=0; i<3; i++ )
+   {
+      m_cells[i] = Trig3Momentum( 0., 0., 0., CaloSampling::Unknown);
+      m_cells[i].setInCone(0);
+   }
+
+   // set tower position to first cell position
+   setEta( newCell.eta() + etaShift );
+   setPhi( newCell.phi() );
+
+   insertCell( newCell, log);
+}
+
+bool TrigT2Tower::insertCell(const Trig3Momentum& cell, MsgStream& log)
+{
+   if ( cell.caloSample() == CaloSampling::TileBar0 || cell.caloSample() == CaloSampling::TileExt0 )
+   {
+      if ( !m_cells[0].inCone() )
+      {
+         m_cells[0] = cell;
+         setE( e() + cell.e() );
+         m_cells[0].setInCone(1);
+      }
+      else return 0;
+   }
+   else if ( cell.caloSample() == CaloSampling::TileBar1 || cell.caloSample() == CaloSampling::TileExt1 )
+   {
+      if ( !m_cells[1].inCone() )
+      {
+         m_cells[1] = cell;
+         setE( e() + cell.e() );
+         m_cells[1].setInCone(1);
+      }
+      else return 0;
+   }
+   else if ( cell.caloSample() == CaloSampling::TileBar2 || cell.caloSample() == CaloSampling::TileExt2 )
+   {
+      if ( !m_cells[2].inCone() )
+      {
+         m_cells[2] = cell;
+         setE( e() + cell.e()/2. );
+         m_cells[2].setInCone(1);
+      }
+      else return 0;
+   }
+   else
+   {
+      log << MSG::WARNING << " REGTEST:     CELL: is not in TILE. caloSample ID is: " << cell.caloSample() << endmsg;
+      return 0;
+   }
+
+   // is tower full now ??
+   int sum = 0;
+   for( int i=0; i<3; i++ )
+   {
+      if ( m_cells[i].inCone() ) sum++;
+   }
+   if ( sum == 3 ) setComplete(1);
+   
+   return 1;
+}
+
+// phi and eta is known up to 3 decimal
+bool TrigT2Tower::isMember(const Trig3Momentum& cell, MsgStream& log, double etaShift) const
+{
+   double delta = 0.005;
+   if ( fabs(eta()-(cell.eta()+etaShift))<delta && fabs(phi()-cell.phi())<delta )
+   {
+     if ( log.level()<MSG::DEBUG )
+      log << MSG::DEBUG << " REGTEST:     CELL:          insert in EXISTING tower:   eta" << eta() << "   phi:" << phi() << endmsg;
+     return true;
+   }
+
+   return false;
+}
+
+void TrigT2Tower::print(MsgStream& log, MSG::Level level) const
+{
+   log << level << " REGTEST:   TOWER:  eta:" << eta() << " phi:" << phi() << " e:" << e() << endmsg;
+   
+   for( int i=0; i<3; i++ )
+   {
+      if ( m_cells[i].inCone() )
+      {
+         log << level << " REGTEST:     CELL " << i << " :  eta:" <<  m_cells[i].eta() << " phi:" << m_cells[i].phi()
+                  << " e:" << m_cells[i].e() << endmsg;
+      }
+      else log << level << " REGTEST:     CELL " << i << " :  is NOT SET" << endmsg;
+   }
+
+}
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/components/TrigT2CaloTileMon_entries.cxx b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/components/TrigT2CaloTileMon_entries.cxx
new file mode 100644
index 000000000000..9157c8f71a3a
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigT2CaloTileMon/src/components/TrigT2CaloTileMon_entries.cxx
@@ -0,0 +1,6 @@
+#include "TrigT2CaloTileMon/T2CaloTileMon.h"
+#include "TrigT2CaloTileMon/TileMonHadEnFex.h"
+
+DECLARE_COMPONENT( T2CaloTileMon )
+DECLARE_COMPONENT( TileMonHadEnFex )
+
-- 
GitLab


From 72bd0c323c6b8ab0f2e14daac3453a29225295b9 Mon Sep 17 00:00:00 2001
From: MihaMuskinja <miha.muskinja@gmail.com>
Date: Fri, 8 Mar 2019 14:51:20 +0100
Subject: [PATCH 064/163] Added more histograms as a function of initial step
 vol/process/material

---
 .../G4DebuggingTools/src/StepHistogram.cxx    | 50 ++++++++++++++++++-
 .../G4DebuggingTools/src/StepHistogram.h      | 18 ++++++-
 .../src/StepHistogramTool.cxx                 | 13 +++++
 3 files changed, 79 insertions(+), 2 deletions(-)

diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.cxx b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.cxx
index 31120d091e6c..c9daf81988e4 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.cxx
+++ b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.cxx
@@ -25,7 +25,10 @@ namespace G4UA{
   StepHistogram::StepHistogram(const Config& config):
     AthMessaging(Gaudi::svcLocator()->service<IMessageSvc>("MessageSvc"),"StepHistogram"),
     m_config(config),
-    m_initialKineticEnergyOfStep()
+    m_initialKineticEnergyOfStep(),
+    m_initialVolume(),
+    m_initialMaterial(),
+    m_initialProcess()
   {}
   
   void StepHistogram::UserSteppingAction(const G4Step * aStep){
@@ -150,6 +153,11 @@ namespace G4UA{
     if (tr->GetCurrentStepNumber()==1) {
       // initial kinetic energy
       m_initialKineticEnergyOfStep = stepKinetic;
+      
+      // initial volume/material/processes
+      m_initialVolume = volumeName;
+      m_initialMaterial = materialName;
+      m_initialProcess = processName;
 
       // save track ID for checking if we later have the same track
       m_trackID = tr->GetTrackID();
@@ -157,6 +165,12 @@ namespace G4UA{
       // initial energy
       InitializeFillHistogram(m_report.histoMapMap_InitialE, "InitialE", particleName, "AllATLAS",
                               1000, -9, 7, log10(m_initialKineticEnergyOfStep), 1.0);
+      InitializeFillHistogram(m_report.histoMapMap_vol_InitialE, "vol_InitialE", particleName, m_initialVolume,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), 1.0);
+      InitializeFillHistogram(m_report.histoMapMap_mat_InitialE, "mat_InitialE", particleName, m_initialMaterial,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), 1.0);
+      InitializeFillHistogram(m_report.histoMapMap_prc_InitialE, "prc_InitialE", particleName, m_initialProcess,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), 1.0);
     }
 
     // last step
@@ -170,9 +184,30 @@ namespace G4UA{
       int nSteps = tr->GetCurrentStepNumber() + 1;
       InitializeFillHistogram(m_report.histoMapMap_numberOfSteps, "numberOfSteps", particleName, "AllATLAS",
                               10000, 0.5, 10000.5, nSteps, 1.);
+      InitializeFillHistogram(m_report.histoMapMap_vol_numberOfSteps, "vol_numberOfSteps", particleName, m_initialVolume,
+                              10000, 0.5, 10000.5, nSteps, 1.);
+      InitializeFillHistogram(m_report.histoMapMap_mat_numberOfSteps, "mat_numberOfSteps", particleName, m_initialMaterial,
+                              10000, 0.5, 10000.5, nSteps, 1.);
+      InitializeFillHistogram(m_report.histoMapMap_prc_numberOfSteps, "prc_numberOfSteps", particleName, m_initialProcess,
+                              10000, 0.5, 10000.5, nSteps, 1.);
       // number of steps vs initial energy
       InitializeFillHistogram(m_report.histoMapMap_numberOfStepsPerInitialE, "numberOfStepsPerInitialE", particleName, "AllATLAS",
                               1000, -9, 7, log10(m_initialKineticEnergyOfStep), nSteps);
+      InitializeFillHistogram(m_report.histoMapMap_vol_numberOfStepsPerInitialE, "vol_numberOfStepsPerInitialE", particleName, m_initialVolume,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), nSteps);
+      InitializeFillHistogram(m_report.histoMapMap_mat_numberOfStepsPerInitialE, "mat_numberOfStepsPerInitialE", particleName, m_initialMaterial,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), nSteps);
+      InitializeFillHistogram(m_report.histoMapMap_prc_numberOfStepsPerInitialE, "prc_numberOfStepsPerInitialE", particleName, m_initialProcess,
+                              1000, -9, 7, log10(m_initialKineticEnergyOfStep), nSteps);
+      // track length vs initial energy
+      InitializeFillHistogram(m_report.histoMapMap_trackLengthPerInitialE, "trackLengthPerInitialE", particleName, "AllATLAS",
+                              1000, -9, 7, log10(tr->GetTrackLength()), 1.);
+      InitializeFillHistogram(m_report.histoMapMap_vol_trackLengthPerInitialE, "vol_trackLengthPerInitialE", particleName, m_initialVolume,
+                              1000, -9, 7, log10(tr->GetTrackLength()), 1.);
+      InitializeFillHistogram(m_report.histoMapMap_mat_trackLengthPerInitialE, "mat_trackLengthPerInitialE", particleName, m_initialMaterial,
+                              1000, -9, 7, log10(tr->GetTrackLength()), 1.);
+      InitializeFillHistogram(m_report.histoMapMap_prc_trackLengthPerInitialE, "prc_trackLengthPerInitialE", particleName, m_initialProcess,
+                              1000, -9, 7, log10(tr->GetTrackLength()), 1.);
     }
   }
 
@@ -282,8 +317,21 @@ namespace G4UA{
     mergeMaps(histoMapMap_prc_stepSecondaryKinetic, rep.histoMapMap_prc_stepSecondaryKinetic);
 
     mergeMaps(histoMapMap_numberOfSteps, rep.histoMapMap_numberOfSteps);
+    mergeMaps(histoMapMap_vol_numberOfSteps, rep.histoMapMap_vol_numberOfSteps);
+    mergeMaps(histoMapMap_mat_numberOfSteps, rep.histoMapMap_mat_numberOfSteps);
+    mergeMaps(histoMapMap_prc_numberOfSteps, rep.histoMapMap_prc_numberOfSteps);
     mergeMaps(histoMapMap_numberOfStepsPerInitialE, rep.histoMapMap_numberOfStepsPerInitialE);
+    mergeMaps(histoMapMap_vol_numberOfStepsPerInitialE, rep.histoMapMap_vol_numberOfStepsPerInitialE);
+    mergeMaps(histoMapMap_mat_numberOfStepsPerInitialE, rep.histoMapMap_mat_numberOfStepsPerInitialE);
+    mergeMaps(histoMapMap_prc_numberOfStepsPerInitialE, rep.histoMapMap_prc_numberOfStepsPerInitialE);
+    mergeMaps(histoMapMap_trackLengthPerInitialE, rep.histoMapMap_trackLengthPerInitialE);
+    mergeMaps(histoMapMap_vol_trackLengthPerInitialE, rep.histoMapMap_vol_trackLengthPerInitialE);
+    mergeMaps(histoMapMap_mat_trackLengthPerInitialE, rep.histoMapMap_mat_trackLengthPerInitialE);
+    mergeMaps(histoMapMap_prc_trackLengthPerInitialE, rep.histoMapMap_prc_trackLengthPerInitialE);
     mergeMaps(histoMapMap_InitialE, rep.histoMapMap_InitialE);
+    mergeMaps(histoMapMap_vol_InitialE, rep.histoMapMap_vol_InitialE);
+    mergeMaps(histoMapMap_mat_InitialE, rep.histoMapMap_mat_InitialE);
+    mergeMaps(histoMapMap_prc_InitialE, rep.histoMapMap_prc_InitialE);
     mergeMaps(histoMapMap_stepKinetic, rep.histoMapMap_stepKinetic);
     mergeMaps(histoMapMap_postStepKinetic, rep.histoMapMap_postStepKinetic);
 
diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
index 9c0206d131d8..ad72d7f90ccb 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
+++ b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
@@ -49,6 +49,10 @@ namespace G4UA{
       HistoMapMap_t histoMapMap_vol_stepEnergyDeposit;
       HistoMapMap_t histoMapMap_vol_stepEnergyNonIonDeposit;
       HistoMapMap_t histoMapMap_vol_stepSecondaryKinetic;
+      HistoMapMap_t histoMapMap_vol_numberOfSteps;
+      HistoMapMap_t histoMapMap_vol_numberOfStepsPerInitialE;
+      HistoMapMap_t histoMapMap_vol_trackLengthPerInitialE;
+      HistoMapMap_t histoMapMap_vol_InitialE;
 
       // distributions per material per particle type
       HistoMapMap_t histoMapMap_mat_stepSize;
@@ -58,6 +62,10 @@ namespace G4UA{
       HistoMapMap_t histoMapMap_mat_stepEnergyDeposit;
       HistoMapMap_t histoMapMap_mat_stepEnergyNonIonDeposit;
       HistoMapMap_t histoMapMap_mat_stepSecondaryKinetic;
+      HistoMapMap_t histoMapMap_mat_numberOfSteps;
+      HistoMapMap_t histoMapMap_mat_numberOfStepsPerInitialE;
+      HistoMapMap_t histoMapMap_mat_trackLengthPerInitialE;
+      HistoMapMap_t histoMapMap_mat_InitialE;
 
       // distributions per process per particle type
       HistoMapMap_t histoMapMap_prc_stepSize;
@@ -67,10 +75,15 @@ namespace G4UA{
       HistoMapMap_t histoMapMap_prc_stepEnergyDeposit;
       HistoMapMap_t histoMapMap_prc_stepEnergyNonIonDeposit;
       HistoMapMap_t histoMapMap_prc_stepSecondaryKinetic;
+      HistoMapMap_t histoMapMap_prc_numberOfSteps;
+      HistoMapMap_t histoMapMap_prc_numberOfStepsPerInitialE;
+      HistoMapMap_t histoMapMap_prc_trackLengthPerInitialE;
+      HistoMapMap_t histoMapMap_prc_InitialE;
 
-      // n steps
+      // all atlas
       HistoMapMap_t histoMapMap_numberOfSteps;
       HistoMapMap_t histoMapMap_numberOfStepsPerInitialE;
+      HistoMapMap_t histoMapMap_trackLengthPerInitialE;
       HistoMapMap_t histoMapMap_InitialE;
       HistoMapMap_t histoMapMap_stepKinetic;
       HistoMapMap_t histoMapMap_postStepKinetic;
@@ -122,6 +135,9 @@ namespace G4UA{
                                  int nbins, double *edges, double value, double weight);
 
     float m_initialKineticEnergyOfStep;
+    G4String m_initialVolume;
+    G4String m_initialMaterial;
+    G4String m_initialProcess;
     int m_trackID;
 
   }; // class StepHistogram
diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogramTool.cxx b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogramTool.cxx
index 2b31f9881bcc..16686662ad8f 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogramTool.cxx
+++ b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogramTool.cxx
@@ -66,6 +66,10 @@ namespace G4UA{
       BookHistograms(report.histoMapMap_vol_stepEnergyDeposit, "stepEnergyDeposit/", "volumes/");
       BookHistograms(report.histoMapMap_vol_stepEnergyNonIonDeposit, "stepEnergyNonIonDeposit/", "volumes/");
       BookHistograms(report.histoMapMap_vol_stepSecondaryKinetic, "stepSecondaryKinetic/", "volumes/");
+      BookHistograms(report.histoMapMap_vol_trackLengthPerInitialE, "trackLengthPerInitialE/", "volumes/");
+      BookHistograms(report.histoMapMap_vol_InitialE, "InitialE/", "volumes/");
+      BookHistograms(report.histoMapMap_vol_numberOfSteps, "numberOfSteps/", "volumes/");
+      BookHistograms(report.histoMapMap_vol_numberOfStepsPerInitialE, "numberOfStepsPerInitialE/", "volumes/");
 
       BookHistograms(report.histoMapMap_mat_stepSize, "stepLength/", "materials/");
       BookHistograms(report.histoMapMap_mat_stepKineticEnergy, "stepKineticEnergy/", "materials/");
@@ -74,6 +78,10 @@ namespace G4UA{
       BookHistograms(report.histoMapMap_mat_stepEnergyDeposit, "stepEnergyDeposit/", "materials/");
       BookHistograms(report.histoMapMap_mat_stepEnergyNonIonDeposit, "stepEnergyNonIonDeposit/", "materials/");
       BookHistograms(report.histoMapMap_mat_stepSecondaryKinetic, "stepSecondaryKinetic/", "materials/");
+      BookHistograms(report.histoMapMap_mat_trackLengthPerInitialE, "trackLengthPerInitialE/", "materials/");
+      BookHistograms(report.histoMapMap_mat_InitialE, "InitialE/", "materials/");
+      BookHistograms(report.histoMapMap_mat_numberOfSteps, "numberOfSteps/", "materials/");
+      BookHistograms(report.histoMapMap_mat_numberOfStepsPerInitialE, "numberOfStepsPerInitialE/", "materials/");
 
       BookHistograms(report.histoMapMap_prc_stepSize, "stepLength/", "processes/");
       BookHistograms(report.histoMapMap_prc_stepKineticEnergy, "stepKineticEnergy/", "processes/");
@@ -82,10 +90,15 @@ namespace G4UA{
       BookHistograms(report.histoMapMap_prc_stepEnergyDeposit, "stepEnergyDeposit/", "processes/");
       BookHistograms(report.histoMapMap_prc_stepEnergyNonIonDeposit, "stepEnergyNonIonDeposit/", "processes/");
       BookHistograms(report.histoMapMap_prc_stepSecondaryKinetic, "stepSecondaryKinetic/", "processes/");
+      BookHistograms(report.histoMapMap_prc_trackLengthPerInitialE, "trackLengthPerInitialE/", "processes/");
+      BookHistograms(report.histoMapMap_prc_InitialE, "InitialE/", "processes/");
+      BookHistograms(report.histoMapMap_prc_numberOfSteps, "numberOfSteps/", "processes/");
+      BookHistograms(report.histoMapMap_prc_numberOfStepsPerInitialE, "numberOfStepsPerInitialE/", "processes/");
 
       if (m_config.doGeneralHistograms) {
         BookHistograms(report.histoMapMap_numberOfSteps, "numberOfSteps/", "nSteps/");
         BookHistograms(report.histoMapMap_numberOfStepsPerInitialE, "numberOfStepsPerInitialE/", "nSteps/");
+        BookHistograms(report.histoMapMap_trackLengthPerInitialE, "trackLengthPerInitialE/", "nSteps/");
         BookHistograms(report.histoMapMap_InitialE, "InitialE/", "nSteps/");
         BookHistograms(report.histoMapMap_stepKinetic, "stepKineticEnergy/", "nSteps/");
         BookHistograms(report.histoMapMap_postStepKinetic, "postStepKineticEnergy/", "nSteps/");
-- 
GitLab


From 863364a04b5167929a8d6d4f20411a7166d6b0b2 Mon Sep 17 00:00:00 2001
From: Tim Martin <Tim.Martin@cern.ch>
Date: Mon, 18 Mar 2019 10:12:39 +0100
Subject: [PATCH 065/163] update references due to change in topoclustering.
 Change not yet understood and may need to be reverted

---
 .../TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref  | 6 +++---
 .../TrigUpgradeTest/share/egammaRunData.ref               | 8 ++++----
 .../TrigValidation/TrigUpgradeTest/share/electronMenu.ref | 6 +++---
 Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref | 4 ++--
 Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref  | 4 ++--
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
index 8373d8fc4fa8..4f755b1928c8 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
@@ -2,8 +2,8 @@ TrigSignatureMoniMT                                INFO Chains passing step (1st
 TrigSignatureMoniMT                                INFO Chain name                   L1,      AfterPS, [... steps ...], Output
 TrigSignatureMoniMT                                INFO All                           20        20        0         0         17        
 TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3            20        20        18        17        17        
-TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3 decisions                      54        342       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3 decisions                      54        343       
 TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3            20        20        17        16        16        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3 decisions                      50        329       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3 decisions                      50        330       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3            20        20        15        14        14        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3 decisions                      36        264       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3 decisions                      36        265       
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
index 0ae91dd2c159..beee65b37f97 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
@@ -156,10 +156,10 @@ HLTRMakerAlg.MKTool.Serialiser          19  0     DEBUG    Fragment size includi
 TrigSignatureMoniMT                                INFO HLT_2e3_etcut                 20        10        6         5         5         
 TrigSignatureMoniMT                                INFO HLT_2e3_etcut decisions                           16        100       
 TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut               20        20        12        11        11        
-TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut decisions                         46        279       
+TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut decisions                         46        280       
 TrigSignatureMoniMT                                INFO HLT_e3_etcut                  20        9         8         8         8         
-TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        140       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        141       
 TrigSignatureMoniMT                                INFO HLT_e5_etcut                  20        20        17        17        17        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            52        333       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            52        334       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut                  20        20        11        11        11        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            17        173       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            17        174       
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
index 9e7fb876f609..ae0457a796ae 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
@@ -94,10 +94,10 @@ TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#243
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TrigSignatureMoniMT                                INFO HLT_e3_etcut                  20        9         8         7         7         
-TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        137       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        138       
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step             20        20        18        0         18        
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step decisions                       54        0         
 TrigSignatureMoniMT                                INFO HLT_e5_etcut                  20        20        17        16        16        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        329       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        330       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut                  20        20        15        14        14        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        264       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        265       
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
index 055a86e7c8ef..9368387aab55 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
@@ -190,8 +190,8 @@ TrigSignatureMoniMT                                INFO HLT_e7_etcut
 TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        265       
 TrigSignatureMoniMT                                INFO HLT_g5_etcut                  20        20        17        17        17        
 TrigSignatureMoniMT                                INFO HLT_g5_etcut decisions                            50        50        
-TrigSignatureMoniMT                                INFO HLT_j45                       20        20        3         0         3         
-TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 3         0         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        4         0         4         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 4         0         
 TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         0         
 TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         0         
 TrigSignatureMoniMT                                INFO HLT_mu6                       20        20        3         0         3         
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
index f9072a28f116..e01e96a3e352 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
@@ -1,7 +1,7 @@
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j45 ID#3664574289
-TrigSignatureMoniMT                                INFO HLT_j45                       20        20        3         3         
-TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 3         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        4         4         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 4         
 TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         
 TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         
-- 
GitLab


From 8e1dd5a1a337b40e7d61a0ac29440323c31c18e2 Mon Sep 17 00:00:00 2001
From: MihaMuskinja <miha.muskinja@gmail.com>
Date: Fri, 25 Jan 2019 15:39:42 +0100
Subject: [PATCH 066/163] User action that dumps all volumes and classifies
 them.

---
 .../G4DebuggingTools/CMakeLists.txt           |  5 ++
 .../G4DebuggingHelper.h                       |  0
 .../src/G4DebuggingHelper.cxx                 |  2 +-
 .../G4DebuggingTools/src/StepHistogram.h      |  2 +-
 .../G4Utilities/G4UserActions/CMakeLists.txt  |  4 +-
 .../G4UserActions/VolumeDumper.h              | 30 +++++++++++
 .../G4UserActions/VolumeDumperTool.h          | 46 +++++++++++++++++
 .../python/G4UserActionsConfig.py             |  3 ++
 .../python/G4UserActionsConfigDb.py           |  1 +
 .../share/preInclude.VolumeDumper.py          | 11 ++++
 .../G4UserActions/src/VolumeDumper.cxx        | 50 +++++++++++++++++++
 .../G4UserActions/src/VolumeDumperTool.cxx    | 31 ++++++++++++
 .../src/components/G4UserActions_entries.cxx  |  2 +
 13 files changed, 184 insertions(+), 3 deletions(-)
 rename Simulation/G4Utilities/G4DebuggingTools/{src => G4DebuggingTools}/G4DebuggingHelper.h (100%)
 create mode 100644 Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumper.h
 create mode 100644 Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumperTool.h
 create mode 100644 Simulation/G4Utilities/G4UserActions/share/preInclude.VolumeDumper.py
 create mode 100644 Simulation/G4Utilities/G4UserActions/src/VolumeDumper.cxx
 create mode 100644 Simulation/G4Utilities/G4UserActions/src/VolumeDumperTool.cxx

diff --git a/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt b/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
index 6fa548c160e5..5dac3f8c875a 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
+++ b/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
@@ -26,6 +26,11 @@ find_package( TBB )
 find_package( XercesC )
 
 # Component(s) in the package:
+atlas_add_library( G4DebuggingHelperLib
+                   src/G4DebuggingHelper.cxx
+                   INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} )
+
 atlas_add_component( G4DebuggingTools
                      src/*.cxx
                      src/components/*.cxx
diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.h b/Simulation/G4Utilities/G4DebuggingTools/G4DebuggingTools/G4DebuggingHelper.h
similarity index 100%
rename from Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.h
rename to Simulation/G4Utilities/G4DebuggingTools/G4DebuggingTools/G4DebuggingHelper.h
diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.cxx b/Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.cxx
index 61c469262922..05bfd8b87c8e 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.cxx
+++ b/Simulation/G4Utilities/G4DebuggingTools/src/G4DebuggingHelper.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "StepHistogram.h"
+#include "G4DebuggingTools/G4DebuggingHelper.h"
 
 #include "G4Electron.hh"
 #include "G4Positron.hh"
diff --git a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
index 9c0206d131d8..711802c8cc41 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
+++ b/Simulation/G4Utilities/G4DebuggingTools/src/StepHistogram.h
@@ -21,7 +21,7 @@
 
 //Athena
 #include "AthenaBaseComps/AthMessaging.h"
-#include "G4DebuggingHelper.h"
+#include "G4DebuggingTools/G4DebuggingHelper.h"
 
 namespace G4UA{
   
diff --git a/Simulation/G4Utilities/G4UserActions/CMakeLists.txt b/Simulation/G4Utilities/G4UserActions/CMakeLists.txt
index eed69df36bbb..4847d6ba178c 100644
--- a/Simulation/G4Utilities/G4UserActions/CMakeLists.txt
+++ b/Simulation/G4Utilities/G4UserActions/CMakeLists.txt
@@ -23,6 +23,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Simulation/G4Sim/SimHelpers
                           Simulation/G4Utilities/TrackWriteFastSim
                           Control/AthToolSupport/AsgTools
+                          Simulation/G4Utilities/G4DebuggingTools
                           Tools/PathResolver )
 
 # External dependencies:
@@ -37,7 +38,8 @@ atlas_add_component( G4UserActions
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} ${TBB_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GaudiKernel G4AtlasInterfaces G4AtlasToolsLib CxxUtils EventInfo InDetSimEvent MuonSimEvent MCTruth SimHelpers TrackWriteFastSimLib PathResolver)
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} ${TBB_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GaudiKernel G4AtlasInterfaces G4AtlasToolsLib CxxUtils EventInfo InDetSimEvent MuonSimEvent MCTruth SimHelpers TrackWriteFastSimLib PathResolver G4DebuggingHelperLib)
+
 
 # Install files from the package:
 atlas_install_headers( G4UserActions )
diff --git a/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumper.h b/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumper.h
new file mode 100644
index 000000000000..417a491b2e21
--- /dev/null
+++ b/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumper.h
@@ -0,0 +1,30 @@
+/*
+   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+ */
+
+#ifndef G4USERACTIONS_VOLUMEDUMPER_H
+#define G4USERACTIONS_VOLUMEDUMPER_H
+
+#include "G4UserEventAction.hh"
+#include "G4Event.hh"
+
+#include "AthenaBaseComps/AthMessaging.h"
+
+
+namespace G4UA
+{
+
+class VolumeDumper final : public G4UserEventAction,
+                           public AthMessaging
+{
+
+public:
+
+VolumeDumper();
+virtual void BeginOfEventAction( const G4Event* ) override;
+
+}; // class VolumeDumper
+
+} // namespace G4UA
+
+#endif
diff --git a/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumperTool.h b/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumperTool.h
new file mode 100644
index 000000000000..67fa21bd4411
--- /dev/null
+++ b/Simulation/G4Utilities/G4UserActions/G4UserActions/VolumeDumperTool.h
@@ -0,0 +1,46 @@
+/*
+   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+ */
+
+#ifndef G4USERACTIONS_G4UA_VOLUMEDUMPERTOOL_H
+#define G4USERACTIONS_G4UA_VOLUMEDUMPERTOOL_H
+
+// System includes
+#include <string>
+
+// Infrastructure includes
+#include "G4AtlasTools/UserActionToolBase.h"
+
+// Local includes
+#include "G4UserActions/VolumeDumper.h"
+
+namespace G4UA
+{
+
+/// @class VolumeDumperTool
+/// @brief Tool which manages the volume dumper action.
+///
+///
+/// @author Miha Muskinja
+///
+class VolumeDumperTool : public UserActionToolBase<VolumeDumper>
+{
+
+public:
+
+/// Standard constructor
+VolumeDumperTool(const std::string& type,
+                 const std::string& name,
+                 const IInterface* parent);
+
+protected:
+
+/// creates the action instances
+virtual std::unique_ptr<VolumeDumper>
+makeAndFillAction(G4AtlasUserActions&) override final;
+
+}; // class VolumeDumperTool
+
+} // namespace G4UA
+
+#endif
diff --git a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfig.py b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfig.py
index 641db08c0fa5..8c88b8ac0ede 100644
--- a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfig.py
+++ b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfig.py
@@ -115,3 +115,6 @@ def getLooperThresholdSetTool(name="G4UA::LooperThresholdSetTool", **kwargs):
         for prop,value in simFlags.UserActionConfig.get_Value()[name].iteritems():
             kwargs.setdefault(prop,value)
     return CfgMgr.G4UA__LooperThresholdSetTool(name, **kwargs)
+
+def getVolumeDumperTool(name="G4UA::VolumeDumperTool", **kwargs):
+    return CfgMgr.G4UA__VolumeDumperTool(name, **kwargs)
diff --git a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigDb.py b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigDb.py
index cc35a37919f7..29f5b98b9bcf 100644
--- a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigDb.py
+++ b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigDb.py
@@ -26,3 +26,4 @@ addTool("G4UserActions.G4UserActionsConfig.getRadiationMapsMakerTool", "G4UA::Ra
 addTool("G4UserActions.G4UserActionsConfig.getStoppedParticleActionTool", "G4UA::StoppedParticleActionTool")
 addTool("G4UserActions.G4UserActionsConfig.getRadLengthActionTool", "G4UA::RadLengthActionTool")
 addTool("G4UserActions.G4UserActionsConfig.getLooperThresholdSetTool", "G4UA::LooperThresholdSetTool")
+addTool("G4UserActions.G4UserActionsConfig.getVolumeDumperTool", "G4UA::VolumeDumperTool")
diff --git a/Simulation/G4Utilities/G4UserActions/share/preInclude.VolumeDumper.py b/Simulation/G4Utilities/G4UserActions/share/preInclude.VolumeDumper.py
new file mode 100644
index 000000000000..0e9acee013bb
--- /dev/null
+++ b/Simulation/G4Utilities/G4UserActions/share/preInclude.VolumeDumper.py
@@ -0,0 +1,11 @@
+#########################################################
+#
+# G4UserActions/preInclude.VolumeDumper.py
+# @author Miha Muskinja
+#
+# Dumps all volume names and classifies them with G4DebuggingHelper
+#
+#########################################################
+
+from G4AtlasApps.SimFlags import simFlags
+simFlags.OptionalUserActionList.addAction('G4UA::VolumeDumperTool')
diff --git a/Simulation/G4Utilities/G4UserActions/src/VolumeDumper.cxx b/Simulation/G4Utilities/G4UserActions/src/VolumeDumper.cxx
new file mode 100644
index 000000000000..ac9416230497
--- /dev/null
+++ b/Simulation/G4Utilities/G4UserActions/src/VolumeDumper.cxx
@@ -0,0 +1,50 @@
+/*
+   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "G4UserActions/VolumeDumper.h"
+#include "G4DebuggingTools/G4DebuggingHelper.h"
+
+// Geant4
+#include "G4PhysicalVolumeStore.hh"
+
+// Gaudi
+#include "GaudiKernel/Bootstrap.h"
+#include "GaudiKernel/ISvcLocator.h"
+#include "GaudiKernel/IMessageSvc.h"
+
+namespace G4UA
+{
+
+//---------------------------------------------------------------------------
+VolumeDumper::VolumeDumper() :
+        AthMessaging(Gaudi::svcLocator()->service<IMessageSvc>("MessageSvc"),
+                     "VolumeDumper")
+{
+}
+
+//---------------------------------------------------------------------------
+void VolumeDumper::BeginOfEventAction(const G4Event*)
+{
+        ATH_MSG_INFO("Dumping G4PhysicalVolumeStore");
+        ATH_MSG_INFO("-----------------------------");
+
+        G4PhysicalVolumeStore* store = G4PhysicalVolumeStore::GetInstance();
+        std::set<G4String> volumes;
+
+        ATH_MSG_INFO("Size: " << store->size());
+
+        for (unsigned int i = 0; i < store->size(); i++) {
+                volumes.insert((*store)[i]->GetName());
+        }
+
+        for (auto& vol : volumes) {
+                std::cout << "short: " << G4DebuggingHelpers::ClassifyVolume(vol)
+                          << " full: " << vol << std::endl;
+        }
+
+        ATH_MSG_INFO("Finished dumbing G4PhysicalVolumeStore");
+        ATH_MSG_INFO("-----------------------------");
+}
+
+} // namespace G4UA
diff --git a/Simulation/G4Utilities/G4UserActions/src/VolumeDumperTool.cxx b/Simulation/G4Utilities/G4UserActions/src/VolumeDumperTool.cxx
new file mode 100644
index 000000000000..a7f3a4fc0bae
--- /dev/null
+++ b/Simulation/G4Utilities/G4UserActions/src/VolumeDumperTool.cxx
@@ -0,0 +1,31 @@
+/*
+   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "G4UserActions/VolumeDumperTool.h"
+
+namespace G4UA
+{
+
+//---------------------------------------------------------------------------
+// Constructor
+//---------------------------------------------------------------------------
+VolumeDumperTool::VolumeDumperTool(const std::string& type, const std::string& name,
+                                   const IInterface* parent) :
+        UserActionToolBase<VolumeDumper>(type, name, parent)
+{
+}
+
+//---------------------------------------------------------------------------
+// Create the action on request
+//---------------------------------------------------------------------------
+std::unique_ptr<VolumeDumper>
+VolumeDumperTool::makeAndFillAction(G4AtlasUserActions& actionList)
+{
+        ATH_MSG_DEBUG("Constructing a VolumeDumper action");
+        auto action = std::make_unique<VolumeDumper>();
+        actionList.eventActions.push_back( action.get() );
+        return action;
+}
+
+}
diff --git a/Simulation/G4Utilities/G4UserActions/src/components/G4UserActions_entries.cxx b/Simulation/G4Utilities/G4UserActions/src/components/G4UserActions_entries.cxx
index b8533db41f8b..572c3c1fef59 100644
--- a/Simulation/G4Utilities/G4UserActions/src/components/G4UserActions_entries.cxx
+++ b/Simulation/G4Utilities/G4UserActions/src/components/G4UserActions_entries.cxx
@@ -21,6 +21,7 @@
 #include "G4UserActions/RadiationMapsMakerTool.h"
 #include "G4UserActions/RadLengthActionTool.h"
 #include "G4UserActions/LooperThresholdSetTool.h"
+#include "G4UserActions/VolumeDumperTool.h"
 #include "../TestActionTool.h"
 
 DECLARE_COMPONENT( G4UA::G4SimTimerTool )
@@ -42,3 +43,4 @@ DECLARE_COMPONENT( G4UA::RadiationMapsMakerTool )
 DECLARE_COMPONENT( G4UA::RadLengthActionTool )
 DECLARE_COMPONENT( G4UA::LooperThresholdSetTool )
 DECLARE_COMPONENT( G4UA::TestActionTool )
+DECLARE_COMPONENT( G4UA::VolumeDumperTool )
-- 
GitLab


From 643f253fe898d503cd5ff6f24a778891b71e7e67 Mon Sep 17 00:00:00 2001
From: Daniel Noel <daniel.louis.noel@cern.ch>
Date: Thu, 7 Mar 2019 11:38:54 +0000
Subject: [PATCH 067/163] rewritten ActiveSensitveDetectorTool

---
 .../LArG4/LArG4SD/python/LArG4SDToolConfig.py  | 18 ++++++++++--------
 .../LArG4SD/test/LArG4SDToolConfig_test.py     |  6 +++++-
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
index 361aa1600d42..36b5bc449581 100644
--- a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
+++ b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
@@ -9,31 +9,33 @@ from LArG4SD.LArG4SDConf import LArG4__FCALSDTool
 from LArG4SD.LArG4SDConf import LArG4__HECSDTool
 from LArG4SD.LArG4SDConf import LArG4__MiniFCALSDTool
 from LArG4SD.LArG4SDConf import LArG4__DeadSDTool
+from LArG4SD.LArG4SDConf import LArG4__ActiveSDTool
 
-def getLArActiveSensitiveDetector(name="LArActiveSensitiveDetector", **kwargs):
+#todo - investigate old comments in the code
+
+def LArActiveSensitiveDetectorToolCfg(ConfigFlags, name="LArActiveSensitiveDetector", **kwargs):
     ## Main configuration
-    from G4AtlasApps.SimFlags import simFlags
-    if simFlags.SimLayout.get_Value() not in ["tb_LArH6_2003","tb_LArH6_2002"]:
+    if ConfigFlags.GeoModel.AtlasVersion not in ["tb_LArH6_2003","tb_LArH6_2002"]:
         kwargs.setdefault("StacVolumes",["LArMgr::LAr::EMB::STAC"])
         kwargs.setdefault("PresamplerVolumes",["LArMgr::LAr::Barrel::Presampler::Module"])
         kwargs.setdefault("NegIWVolumes",["LArMgr::LAr::EMEC::Neg::InnerWheel"])
         kwargs.setdefault("NegOWVolumes",["LArMgr::LAr::EMEC::Neg::OuterWheel"])
         kwargs.setdefault("BOBarretteVolumes",["LArMgr::LAr::EMEC::BackOuterBarrette::Module::Phidiv"])
         kwargs.setdefault("MiniVolumes",["LArMgr::MiniFCAL::Wafer"])
-    if simFlags.SimLayout.get_Value()!="tb_LArH6_2003":
+    if ConfigFlags.GeoModel.AtlasVersion!="tb_LArH6_2003":
         kwargs.setdefault("PosIWVolumes",["LArMgr::LAr::EMEC::Pos::InnerWheel"])
         kwargs.setdefault("PosOWVolumes",["LArMgr::LAr::EMEC::Pos::OuterWheel"])
         kwargs.setdefault("PresVolumes", ["LArMgr::LAr::Endcap::Presampler::LiquidArgon"])
         kwargs.setdefault("SliceVolumes",["LArMgr::LAr::HEC::Module::Depth::Slice"])
-    if simFlags.SimLayout.get_Value() not in ["tb_LArH6_2002"]:
+    if ConfigFlags.GeoModel.AtlasVersion not in ["tb_LArH6_2002"]:
         kwargs.setdefault("FCAL1Volumes",["LArMgr::LAr::FCAL::Module1::Gap"])
         kwargs.setdefault("FCAL2Volumes",["LArMgr::LAr::FCAL::Module2::Gap"])
-        kwargs.setdefault("FCAL3Volumes",["LArMgr::LAr::FCAL::Module3::Gap"])
+        kwargs.setdefault("FCAL3Volumes",["LArMgr::LAr::FCAL::Module3::Gap"])    
     # Running PID calibration hits?
-    kwargs.setdefault("ParticleID",simFlags.ParticleID())
+    kwargs.setdefault("ParticleID",ConfigFlags.Sim.ParticleID)
     # No effect currently
     kwargs.setdefault("OutputCollectionNames", ["LArCalibrationHitActive"])
-    return CfgMgr.LArG4__ActiveSDTool(name, **kwargs)
+    return LArG4__ActiveSDTool(name, **kwargs)
 
 def LArDeadSensitiveDetectorToolCfg(ConfigFlags, name="LArDeadSensitiveDetector", **kwargs):
     ## Main configuration
diff --git a/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py b/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
index c5f3a7f3ceb4..13527954494c 100755
--- a/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
+++ b/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
@@ -40,7 +40,8 @@ if __name__ == '__main__':
   from LArG4SD.LArG4SDToolConfig import LArHECSensitiveDetectorCfg
   from LArG4SD.LArG4SDToolConfig import LArMiniFCALSensitiveDetectorToolCfg
   from LArG4SD.LArG4SDToolConfig import LArDeadSensitiveDetectorToolCfg
-
+  from LArG4SD.LArG4SDToolConfig import LArActiveSensitiveDetectorToolCfg
+  
   acc1, tool1 = LArEMBSensitiveDetectorCfg(ConfigFlags)
   acc1.addPublicTool(tool1)
   cfg.merge(acc1)
@@ -63,6 +64,9 @@ if __name__ == '__main__':
 
   toolDeadSensitiveDetector = LArDeadSensitiveDetectorToolCfg(ConfigFlags)
   cfg.addPublicTool(toolDeadSensitiveDetector)
+
+  toolActiveSensitiveDetector = LArActiveSensitiveDetectorToolCfg(ConfigFlags)
+  cfg.addPublicTool(toolActiveSensitiveDetector)
   
 
 
-- 
GitLab


From 11756eefe702c354db16b83f8da485a843e4b344 Mon Sep 17 00:00:00 2001
From: Daniel Noel <daniel.louis.noel@cern.ch>
Date: Thu, 7 Mar 2019 11:44:33 +0000
Subject: [PATCH 068/163] Rewritten InactiveSensitiveDetector tool

---
 .../LArG4/LArG4SD/python/LArG4SDToolConfig.py     | 15 +++++++--------
 .../LArG4/LArG4SD/test/LArG4SDToolConfig_test.py  |  5 ++++-
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
index 36b5bc449581..46d03ac66b21 100644
--- a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
+++ b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
@@ -10,6 +10,7 @@ from LArG4SD.LArG4SDConf import LArG4__HECSDTool
 from LArG4SD.LArG4SDConf import LArG4__MiniFCALSDTool
 from LArG4SD.LArG4SDConf import LArG4__DeadSDTool
 from LArG4SD.LArG4SDConf import LArG4__ActiveSDTool
+from LArG4SD.LArG4SDConf import LArG4__InactiveSDTool
 
 #todo - investigate old comments in the code
 
@@ -220,10 +221,9 @@ def LArHECSensitiveDetectorCfg(ConfigFlags, name="LArHECSensitiveDetector", **kw
     result.merge(acc)
     return result, LArG4__HECSDTool(name, **kwargs)
 
-def getLArInactiveSensitiveDetector(name="LArInactiveSensitiveDetector", **kwargs):
+def LArInactiveSensitiveDetectorToolCfg(ConfigFlags, name="LArInactiveSensitiveDetector", **kwargs):
     ## Main configuration
-    from G4AtlasApps.SimFlags import simFlags
-    if simFlags.SimLayout.get_Value() not in ["tb_LArH6_2003","tb_LArH6_2002"]:
+    if ConfigFlags.GeoModel.AtlasVersion not in ["tb_LArH6_2003","tb_LArH6_2002"]:
         kwargs.setdefault("BarrelPreVolumes",["LArMgr::LAr::Barrel::Presampler::Cathode*",
                                               "LArMgr::LAr::Barrel::Presampler::Anode*",
                                               "LArMgr::LAr::Barrel::Presampler::Prep*"])
@@ -256,7 +256,7 @@ def getLArInactiveSensitiveDetector(name="LArInactiveSensitiveDetector", **kwarg
         kwargs.setdefault("MiniMomVolumes",["LArMgr::MiniFCALMother"])
         kwargs.setdefault("MiniVolumes",["LArMgr::MiniFCAL"])
         kwargs.setdefault("MiniLayVolumes",["LArMgr::MiniFCAL::Layer"])
-    if simFlags.SimLayout.get_Value()=="tb_LArH6_2002":
+    if ConfigFlags.GeoModel.AtlasVersion=="tb_LArH6_2002":
         kwargs.setdefault("ECPosInVolumes", ["LArMgr::LAr::EMEC::Pos::InnerWheel::Absorber",
                                              "LArMgr::LAr::EMEC::Pos::InnerWheel::Electrode"])
         kwargs.setdefault("ECPosOutVolumes",["LArMgr::LAr::EMEC::Pos::OuterWheel::Electrode",
@@ -265,7 +265,7 @@ def getLArInactiveSensitiveDetector(name="LArInactiveSensitiveDetector", **kwarg
                                              "LArMgr::LAr::HEC::Module::Depth::Slice::Electrode",
                                              "LArMgr::LAr::HEC::Module::Depth::Slice::Electrode::Copper",
                                              "LArMgr::LAr::HEC::Module::Depth::Slice::TieRod"])
-    if simFlags.SimLayout.get_Value()!="tb_LArH6_2002":
+    if ConfigFlags.GeoModel.AtlasVersion!="tb_LArH6_2002":
         kwargs.setdefault("FCAL1Volumes",["LArMgr::LAr::FCAL::Module1::CableTrough",
                                           "LArMgr::LAr::FCAL::Module1::Absorber"])
         kwargs.setdefault("FCAL2Volumes",["LArMgr::LAr::FCAL::Module2::CableTrough",
@@ -275,11 +275,10 @@ def getLArInactiveSensitiveDetector(name="LArInactiveSensitiveDetector", **kwarg
                                           "LArMgr::LAr::FCAL::Module3::Absorber",
                                           "LArMgr::LAr::FCAL::Module3::Rod"])
     # Running PID calibration hits?
-    from G4AtlasApps.SimFlags import simFlags
-    kwargs.setdefault("ParticleID",simFlags.ParticleID())
+    kwargs.setdefault("ParticleID",ConfigFlags.Sim.ParticleID)
     # No effect currently
     kwargs.setdefault("OutputCollectionNames", ["LArCalibrationHitInactive"])
-    return CfgMgr.LArG4__InactiveSDTool(name, **kwargs)
+    return LArG4__InactiveSDTool(name, **kwargs)
 
 def LArMiniFCALSensitiveDetectorToolCfg(ConfigFlags, name="LArMiniFCALSensitiveDetector", **kwargs):
     kwargs.setdefault("MiniVolumes",["LArMgr::MiniFCAL::Wafer"])
diff --git a/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py b/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
index 13527954494c..3480804f8006 100755
--- a/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
+++ b/LArCalorimeter/LArG4/LArG4SD/test/LArG4SDToolConfig_test.py
@@ -41,6 +41,7 @@ if __name__ == '__main__':
   from LArG4SD.LArG4SDToolConfig import LArMiniFCALSensitiveDetectorToolCfg
   from LArG4SD.LArG4SDToolConfig import LArDeadSensitiveDetectorToolCfg
   from LArG4SD.LArG4SDToolConfig import LArActiveSensitiveDetectorToolCfg
+  from LArG4SD.LArG4SDToolConfig import LArInactiveSensitiveDetectorToolCfg
   
   acc1, tool1 = LArEMBSensitiveDetectorCfg(ConfigFlags)
   acc1.addPublicTool(tool1)
@@ -67,7 +68,9 @@ if __name__ == '__main__':
 
   toolActiveSensitiveDetector = LArActiveSensitiveDetectorToolCfg(ConfigFlags)
   cfg.addPublicTool(toolActiveSensitiveDetector)
-  
+
+  toolInactiveSensitiveDetector = LArInactiveSensitiveDetectorToolCfg(ConfigFlags)
+  cfg.addPublicTool(toolInactiveSensitiveDetector)
 
 
   cfg.printConfig(withDetails=True, summariseProps = True)
-- 
GitLab


From c67198cba92eb8f81b991da8e6b1648a06677448 Mon Sep 17 00:00:00 2001
From: Daniel Noel <daniel.louis.noel@cern.ch>
Date: Mon, 18 Mar 2019 10:17:29 +0000
Subject: [PATCH 069/163] removed some comments

---
 LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
index 46d03ac66b21..df56481c747b 100644
--- a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
+++ b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py
@@ -12,8 +12,6 @@ from LArG4SD.LArG4SDConf import LArG4__DeadSDTool
 from LArG4SD.LArG4SDConf import LArG4__ActiveSDTool
 from LArG4SD.LArG4SDConf import LArG4__InactiveSDTool
 
-#todo - investigate old comments in the code
-
 def LArActiveSensitiveDetectorToolCfg(ConfigFlags, name="LArActiveSensitiveDetector", **kwargs):
     ## Main configuration
     if ConfigFlags.GeoModel.AtlasVersion not in ["tb_LArH6_2003","tb_LArH6_2002"]:
-- 
GitLab


From b500b02e17a714f6cbd600bdd0315a8a588a9e53 Mon Sep 17 00:00:00 2001
From: Charles Burton <cdb97@cornell.edu>
Date: Mon, 18 Mar 2019 08:40:42 -0500
Subject: [PATCH 070/163] Add code test for TEfficiency

---
 Control/AthenaMonitoring/test/test_defineHistogram.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Control/AthenaMonitoring/test/test_defineHistogram.py b/Control/AthenaMonitoring/test/test_defineHistogram.py
index ac5ad32b62a7..1b691a41f89f 100644
--- a/Control/AthenaMonitoring/test/test_defineHistogram.py
+++ b/Control/AthenaMonitoring/test/test_defineHistogram.py
@@ -35,5 +35,9 @@ class Test( unittest.TestCase ):
       with self.assertRaises(AssertionError):
          defineHistogram('var', 'TH1F', path='EXPERT', labels='l1:l2')
 
+   def test_efficiency( self ):
+      s = defineHistogram('var', 'TEfficiency', 'EXPERT', 'title', 10, 0.0, 10.0)
+      self.assertEqual(s, 'EXPERT, TEfficiency, var, title, 10, 0.000000, 10.000000')
+
 if __name__ == '__main__':
    unittest.main()
-- 
GitLab


From 83f798d79c4e8966bc3efe68edcde240bd3fd0d9 Mon Sep 17 00:00:00 2001
From: Pavol Strizenec <pavol.strizenec@cern.ch>
Date: Mon, 18 Mar 2019 13:56:37 +0000
Subject: [PATCH 071/163] Switch off L1CaloHVScalesMonTool

---
 .../share/TrigT1Monitoring_forRecExCommission_Run2.py           | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Trigger/TrigT1/TrigT1Monitoring/share/TrigT1Monitoring_forRecExCommission_Run2.py b/Trigger/TrigT1/TrigT1Monitoring/share/TrigT1Monitoring_forRecExCommission_Run2.py
index c8bd2f89a04f..5cc4a3969f95 100644
--- a/Trigger/TrigT1/TrigT1Monitoring/share/TrigT1Monitoring_forRecExCommission_Run2.py
+++ b/Trigger/TrigT1/TrigT1Monitoring/share/TrigT1Monitoring_forRecExCommission_Run2.py
@@ -96,7 +96,7 @@ if l1caloRawMon:
             PathInRootFile = "LVL1_Interfaces/Calorimeter",
             )
         #ToolSvc += L1CaloHVScalesMonTool
-        L1Man.AthenaMonTools += [ L1CaloHVScalesMonTool ]
+        #L1Man.AthenaMonTools += [ L1CaloHVScalesMonTool ]
         # PMT scores
         from TrigT1Monitoring.TrigT1MonitoringConf import LVL1__L1CaloPMTScoresMon
         L1CaloPMTScoresMonTool = LVL1__L1CaloPMTScoresMon(
-- 
GitLab


From 781437fe5decb178e0d486409e5f0173acc7b51d Mon Sep 17 00:00:00 2001
From: Jack Cameron Macdonald <jack.cameron.macdonald@cern.ch>
Date: Mon, 18 Mar 2019 14:01:26 +0000
Subject: [PATCH 072/163] PFO Electron links

---
 .../eflowRec/eflowRec/PFEGammaPFOAssoc.h      |  34 +++++
 .../eflowRec/python/eflowRecFlags.py          |  13 +-
 .../eflowRec/share/PFlowMTConfig.py           |   6 +
 .../eflowRec/src/PFEGammaPFOAssoc.cxx         | 123 ++++++++++++++++++
 .../src/components/eflowRec_entries.cxx       |   3 +-
 5 files changed, 175 insertions(+), 4 deletions(-)
 create mode 100644 Reconstruction/eflowRec/eflowRec/PFEGammaPFOAssoc.h
 create mode 100644 Reconstruction/eflowRec/src/PFEGammaPFOAssoc.cxx

diff --git a/Reconstruction/eflowRec/eflowRec/PFEGammaPFOAssoc.h b/Reconstruction/eflowRec/eflowRec/PFEGammaPFOAssoc.h
new file mode 100644
index 000000000000..7b6c516e45c2
--- /dev/null
+++ b/Reconstruction/eflowRec/eflowRec/PFEGammaPFOAssoc.h
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef PFEGAMMAPFOASSOC_H
+#define PFEGAMMAPFOASSOC_H
+
+#include "AthenaBaseComps/AthAlgorithm.h"
+#include "xAODEgamma/ElectronContainer.h"
+#include "xAODPFlow/PFOContainer.h"
+#include "StoreGate/WriteDecorHandle.h"
+
+class PFEGammaPFOAssoc : public AthAlgorithm {
+
+public:
+
+  PFEGammaPFOAssoc(const std::string& name, ISvcLocator* pSvcLocator);
+  
+  virtual ~PFEGammaPFOAssoc();
+
+  virtual StatusCode initialize() override final;
+  virtual StatusCode execute() override final;
+  virtual StatusCode finalize() override final;
+  
+private:
+ 
+  SG::WriteDecorHandleKey<xAOD::ElectronContainer> m_electronNeutralPFOWriteDecorKey;
+  SG::WriteDecorHandleKey<xAOD::ElectronContainer> m_electronChargedPFOWriteDecorKey;
+  SG::WriteDecorHandleKey<xAOD::PFOContainer> m_neutralpfoWriteDecorKey;
+  SG::WriteDecorHandleKey<xAOD::PFOContainer> m_chargedpfoWriteDecorKey;
+ 
+};
+
+#endif // PFEGAMMAPFOASSOC_H
diff --git a/Reconstruction/eflowRec/python/eflowRecFlags.py b/Reconstruction/eflowRec/python/eflowRecFlags.py
index 3ba8ad0477cb..1c667e90f8c2 100644
--- a/Reconstruction/eflowRec/python/eflowRecFlags.py
+++ b/Reconstruction/eflowRec/python/eflowRecFlags.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 
 from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
@@ -113,7 +113,14 @@ class useCalibHitTruth(JobProperty):
     statusOn = True
     allowedTypes = ['bool']
     StoredValue = False
-    
+
+class usePFEGammaPFOAssoc(JobProperty):
+    """ Flag to toggle use of linking between electrons and PFOs
+    """
+    statusOn = True
+    allowedTypes = ['bool']
+    StoredValue = False
+
 # Defines the container for the eflowRec flags
 
 class eflowRecFlags(JobPropertyContainer):
@@ -124,7 +131,7 @@ class eflowRecFlags(JobPropertyContainer):
 # add the flags container to the top container 
 jobproperties.add_Container(eflowRecFlags)
 
-eflowJobProperties = [eflowAlgType,CalType,useLocalHadWeightsOOCC,useOverLapShowerCells,useSplitShowers,useEEtaFirstInt,recoverIsolatedTracks,UseElectronHadronID,runTauMode, useLeptons,storeLeptonCells, useLCInput, useUpdated2015ChargedShowerSubtraction,useAODReductionClusterMomentList,useCalibHitTruth]
+eflowJobProperties = [eflowAlgType,CalType,useLocalHadWeightsOOCC,useOverLapShowerCells,useSplitShowers,useEEtaFirstInt,recoverIsolatedTracks,UseElectronHadronID,runTauMode, useLeptons,storeLeptonCells, useLCInput, useUpdated2015ChargedShowerSubtraction,useAODReductionClusterMomentList,useCalibHitTruth,usePFEGammaPFOAssoc]
 
 for i in eflowJobProperties :
     jobproperties.eflowRecFlags.add_JobProperty(i)
diff --git a/Reconstruction/eflowRec/share/PFlowMTConfig.py b/Reconstruction/eflowRec/share/PFlowMTConfig.py
index 3df674de3d76..950f5b5fe6da 100644
--- a/Reconstruction/eflowRec/share/PFlowMTConfig.py
+++ b/Reconstruction/eflowRec/share/PFlowMTConfig.py
@@ -233,3 +233,9 @@ if jobproperties.eflowRecFlags.useCalibHitTruth:
    PFONeutralCreatorAlgorithm.UseCalibHitTruth=True
    
 topSequence += PFONeutralCreatorAlgorithm
+
+if jobproperties.eflowRecFlags.usePFEGammaPFOAssoc:
+
+   from eflowRec.eflowRecConf import PFEGammaPFOAssoc
+   PFEGammaPFOAssoc=PFEGammaPFOAssoc("PFEGammaPFOAssoc")
+   topSequence += PFEGammaPFOAssoc
diff --git a/Reconstruction/eflowRec/src/PFEGammaPFOAssoc.cxx b/Reconstruction/eflowRec/src/PFEGammaPFOAssoc.cxx
new file mode 100644
index 000000000000..52b5d44186bd
--- /dev/null
+++ b/Reconstruction/eflowRec/src/PFEGammaPFOAssoc.cxx
@@ -0,0 +1,123 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "eflowRec/PFEGammaPFOAssoc.h"
+#include "StoreGate/StoreGateSvc.h"
+#include "StoreGate/WriteDecorHandle.h"
+#include "xAODEgamma/ElectronContainer.h"
+#include "xAODEgamma/Electron.h"
+#include "xAODEgamma/ElectronxAODHelpers.h"
+#include "xAODPFlow/PFOContainer.h"
+#include "xAODPFlow/PFO.h"
+
+typedef ElementLink<xAOD::ElectronContainer> ElectronLink_t;  
+typedef ElementLink<xAOD::PFOContainer> PFOLink_t;  
+  
+// =============================================================
+PFEGammaPFOAssoc::PFEGammaPFOAssoc(const std::string& name, 
+		   ISvcLocator* pSvcLocator): 
+  AthAlgorithm(name, pSvcLocator)
+{
+  // Declare the decoration keys
+  declareProperty ("ElectronNeutralPFODecorKey", m_electronNeutralPFOWriteDecorKey = "Electrons.neutralpfoLink");
+  declareProperty ("ElectronChargedPFODecorKey", m_electronChargedPFOWriteDecorKey = "Electrons.chargedpfoLink");
+  declareProperty ("NeutralPFODecorKey", m_neutralpfoWriteDecorKey = "JetETMissNeutralParticleFlowObjects.pfo_ElectronLinks");
+  declareProperty ("ChargedPFODecorKey", m_chargedpfoWriteDecorKey = "JetETMissChargedParticleFlowObjects.pfo_ElectronLinks");
+}
+
+PFEGammaPFOAssoc::~PFEGammaPFOAssoc() {}
+
+// =============================================================
+StatusCode PFEGammaPFOAssoc::initialize() {
+
+  ATH_MSG_DEBUG("Initializing " << name() << "...");
+
+  // Initialise the decoration keys
+  ATH_CHECK(m_electronNeutralPFOWriteDecorKey.initialize());
+  ATH_CHECK(m_electronChargedPFOWriteDecorKey.initialize());
+  ATH_CHECK(m_neutralpfoWriteDecorKey.initialize());
+  ATH_CHECK(m_chargedpfoWriteDecorKey.initialize());
+
+  ATH_MSG_DEBUG("Initialization completed successfully");
+  
+  return StatusCode::SUCCESS;
+}
+
+// =========================================================================
+StatusCode PFEGammaPFOAssoc::finalize() {
+  return StatusCode::SUCCESS;
+}
+
+// =========================================================================
+StatusCode PFEGammaPFOAssoc::execute() {  
+  
+  SG::WriteDecorHandle<xAOD::ElectronContainer, PFOLink_t> electronNeutralPFOWriteDecorHandle (m_electronNeutralPFOWriteDecorKey);
+  SG::WriteDecorHandle<xAOD::ElectronContainer, PFOLink_t> electronChargedPFOWriteDecorHandle (m_electronChargedPFOWriteDecorKey);
+  SG::WriteDecorHandle<xAOD::PFOContainer, std::vector<ElectronLink_t> > neutralpfoWriteDecorHandle (m_neutralpfoWriteDecorKey);
+  SG::WriteDecorHandle<xAOD::PFOContainer, std::vector<ElectronLink_t> > chargedpfoWriteDecorHandle (m_chargedpfoWriteDecorKey);
+
+  SG::ReadHandle<xAOD::ElectronContainer> electronReadHandle (m_electronNeutralPFOWriteDecorKey.contHandleKey());
+  SG::ReadHandle<xAOD::PFOContainer> neutralpfoReadHandle (m_neutralpfoWriteDecorKey.contHandleKey());
+  SG::ReadHandle<xAOD::PFOContainer> chargedpfoReadHandle (m_chargedpfoWriteDecorKey.contHandleKey());
+
+  PFOLink_t dummyPFOLink;
+
+  // Initialise to the default links for electrons
+  for (const xAOD::Electron* electron : *electronNeutralPFOWriteDecorHandle) {
+    electronNeutralPFOWriteDecorHandle (*electron) = dummyPFOLink;
+  }
+  for (const xAOD::Electron* electron : *electronChargedPFOWriteDecorHandle) {
+    electronChargedPFOWriteDecorHandle (*electron) = dummyPFOLink;
+  }
+
+  // Loop over neutral PFOs
+  for (const xAOD::PFO* pfo : *neutralpfoWriteDecorHandle) {
+    size_t pfoCaloIndex = pfo->cluster(0)->index();
+
+    std::vector<ElectronLink_t> pfoElectronLinks;
+   
+    // Loop over electrons
+    for (const xAOD::Electron* electron : *electronNeutralPFOWriteDecorHandle) {
+      size_t electronCaloIndex = electron->caloCluster(0)->index();
+
+      if (electronCaloIndex == pfoCaloIndex) {	
+	// Add pfo->electron element links to a vector
+	pfoElectronLinks.push_back( ElectronLink_t(*electronReadHandle, electron->index()) );
+	// Add electron->pfo link as decoration to electron container
+	electronNeutralPFOWriteDecorHandle (*electron) = PFOLink_t(*neutralpfoReadHandle, pfo->index());
+      }
+    }
+
+    // Add vector of pfo->electron element links as decoration to PFO container
+    neutralpfoWriteDecorHandle (*pfo) = pfoElectronLinks;
+  }
+
+  // Loop over charged PFOs
+  for (const xAOD::PFO* pfo : *chargedpfoWriteDecorHandle) {
+    size_t pfoTrackIndex = pfo->track(0)->index();
+
+    std::vector<ElectronLink_t> pfoElectronLinks;
+
+    // Loop over electrons
+    for (const xAOD::Electron* electron : *electronChargedPFOWriteDecorHandle) {
+      
+      const xAOD::TrackParticle* electronOrigTrack = xAOD::EgammaHelpers::getOriginalTrackParticle(electron);
+      size_t electronTrackIndex = electronOrigTrack->index();
+
+      if (electronTrackIndex == pfoTrackIndex) {
+	// Add pfo->electron element links to a vector
+	pfoElectronLinks.push_back( ElectronLink_t(*electronReadHandle, electron->index()) );
+	// Add electron->pfo link as decoration to electron container
+	electronChargedPFOWriteDecorHandle (*electron) = PFOLink_t(*chargedpfoReadHandle, pfo->index());
+      }
+    }
+
+    // Add vector of pfo->electron element links as decoration to PFO container
+    chargedpfoWriteDecorHandle (*pfo) = pfoElectronLinks;
+  }
+ 
+  ATH_MSG_DEBUG("Execute completed successfully");
+
+  return StatusCode::SUCCESS;
+}
diff --git a/Reconstruction/eflowRec/src/components/eflowRec_entries.cxx b/Reconstruction/eflowRec/src/components/eflowRec_entries.cxx
index 2c67c74c56d6..dd7b38133d68 100644
--- a/Reconstruction/eflowRec/src/components/eflowRec_entries.cxx
+++ b/Reconstruction/eflowRec/src/components/eflowRec_entries.cxx
@@ -16,10 +16,11 @@
 #include "eflowRec/PFLCCalibTool.h"
 #include "eflowRec/PFOChargedCreatorAlgorithm.h"
 #include "eflowRec/PFONeutralCreatorAlgorithm.h"
-
+#include "eflowRec/PFEGammaPFOAssoc.h"
 
 DECLARE_COMPONENT( eflowOverlapRemoval )
 DECLARE_COMPONENT( PFLeptonSelector )
+DECLARE_COMPONENT( PFEGammaPFOAssoc )
 DECLARE_COMPONENT( PFClusterSelectorTool )
 DECLARE_COMPONENT( PFTrackSelector )
 DECLARE_COMPONENT( PFAlgorithm )
-- 
GitLab


From 886e0fb5762cc8848d01ac5a955baa939b75f223 Mon Sep 17 00:00:00 2001
From: Stewart Martin-Haugh <stewart.martin-haugh@cern.ch>
Date: Mon, 18 Mar 2019 14:03:38 +0000
Subject: [PATCH 073/163] Move ConditionStore to default in
 ComponentAccumulator and standard Athena jobs, remove pycomps from pickle

---
 .../AthenaCommon/python/AtlasThreadedJob.py   |  3 --
 .../python/AtlasUnixStandardJob.py            |  1 +
 Control/AthenaCommon/share/bootstrap.pkl      | 47 ++++++++++++-------
 .../AthenaCommon/share/bootstrap_threaded.pkl |  2 +-
 .../python/MainServicesConfig.py              |  4 +-
 Database/IOVDbSvc/python/CondDB.py            |  2 -
 6 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/Control/AthenaCommon/python/AtlasThreadedJob.py b/Control/AthenaCommon/python/AtlasThreadedJob.py
index 0c5c38820fbe..6d9b05de7bf1 100644
--- a/Control/AthenaCommon/python/AtlasThreadedJob.py
+++ b/Control/AthenaCommon/python/AtlasThreadedJob.py
@@ -32,9 +32,6 @@ def _setupAtlasThreadedJob():
     svcMgr += SG__HiveMgrSvc("EventDataSvc")
     svcMgr.EventDataSvc.NSlots = numStores
 
-    import StoreGate.StoreGateConf as StoreGateConf
-    svcMgr += StoreGateConf.StoreGateSvc("ConditionStore")
-
 
     from GaudiHive.GaudiHiveConf import AlgResourcePool
     arp=AlgResourcePool( OutputLevel = Constants.INFO )
diff --git a/Control/AthenaCommon/python/AtlasUnixStandardJob.py b/Control/AthenaCommon/python/AtlasUnixStandardJob.py
index f7a680519f54..851ae390a9a5 100755
--- a/Control/AthenaCommon/python/AtlasUnixStandardJob.py
+++ b/Control/AthenaCommon/python/AtlasUnixStandardJob.py
@@ -46,6 +46,7 @@ def _setupAtlasUnixStandardJob():
     svcMgr += StoreGateConf.StoreGateSvc()
     svcMgr += StoreGateConf.StoreGateSvc("DetectorStore")
     svcMgr += StoreGateConf.StoreGateSvc("HistoryStore")
+    svcMgr += StoreGateConf.StoreGateSvc("ConditionStore")
 
     #ClassIDSvc configuration
     import CLIDComps.CLIDCompsConf as CLIDCompsConf
diff --git a/Control/AthenaCommon/share/bootstrap.pkl b/Control/AthenaCommon/share/bootstrap.pkl
index be2acce6a709..21a1776eaf13 100644
--- a/Control/AthenaCommon/share/bootstrap.pkl
+++ b/Control/AthenaCommon/share/bootstrap.pkl
@@ -475,43 +475,54 @@ sS'ProxyProviderSvc'
 p248
 S'ProxyProviderSvc'
 p249
-ssS'IncidentProcAlg1'
+ssS'ConditionStore'
 p250
 (dp251
-S'ExtraOutputs'
+S'IncidentSvc'
 p252
-S'[]'
+S'IncidentSvc'
 p253
-sS'NeededResources'
+sS'ProxyProviderSvc'
 p254
-S'[]'
+S'ProxyProviderSvc'
 p255
-sS'ExtraInputs'
+ssS'IncidentProcAlg1'
 p256
-S'[]'
-p257
-ssS'HistogramDataSvc'
+(dp257
+S'ExtraOutputs'
 p258
-(dp259
-S'Input'
+S'[]'
+p259
+sS'NeededResources'
 p260
 S'[]'
 p261
-sS'InhibitPathes'
+sS'ExtraInputs'
 p262
 S'[]'
 p263
-ssS'HistoryStore'
+ssS'HistogramDataSvc'
 p264
 (dp265
-S'IncidentSvc'
+S'Input'
 p266
-S'IncidentSvc'
+S'[]'
 p267
-sS'ProxyProviderSvc'
+sS'InhibitPathes'
 p268
-S'ProxyProviderSvc'
+S'[]'
 p269
+ssS'HistoryStore'
+p270
+(dp271
+S'IncidentSvc'
+p272
+S'IncidentSvc'
+p273
+sS'ProxyProviderSvc'
+p274
+S'ProxyProviderSvc'
+p275
 ss.ccollections
 defaultdict
 p1
@@ -950,7 +961,7 @@ p186
 g7
 sS'ExtSvc'
 p187
-S"['ToolSvc/ToolSvc', 'AuditorSvc/AuditorSvc', 'MessageSvc/MessageSvc', 'IncidentSvc/IncidentSvc', 'EvtPersistencySvc/EventPersistencySvc', 'HistogramSvc/HistogramDataSvc', 'NTupleSvc/NTupleSvc', 'RndmGenSvc/RndmGenSvc', 'ChronoStatSvc/ChronoStatSvc', 'StatusCodeSvc/StatusCodeSvc', 'StoreGateSvc/StoreGateSvc', 'StoreGateSvc/DetectorStore', 'StoreGateSvc/HistoryStore', 'ClassIDSvc/ClassIDSvc', 'AthDictLoaderSvc/AthDictLoaderSvc', 'AthenaSealSvc/AthenaSealSvc', 'CoreDumpSvc/CoreDumpSvc', 'JobOptionsSvc/JobOptionsSvc']"
+S"['ToolSvc/ToolSvc', 'AuditorSvc/AuditorSvc', 'MessageSvc/MessageSvc', 'IncidentSvc/IncidentSvc', 'EvtPersistencySvc/EventPersistencySvc', 'HistogramSvc/HistogramDataSvc', 'NTupleSvc/NTupleSvc', 'RndmGenSvc/RndmGenSvc', 'ChronoStatSvc/ChronoStatSvc', 'StatusCodeSvc/StatusCodeSvc', 'StoreGateSvc/StoreGateSvc', 'StoreGateSvc/DetectorStore', 'StoreGateSvc/HistoryStore', 'StoreGateSvc/ConditionStore', 'ClassIDSvc/ClassIDSvc', 'AthDictLoaderSvc/AthDictLoaderSvc', 'AthenaSealSvc/AthenaSealSvc', 'CoreDumpSvc/CoreDumpSvc', 'JobOptionsSvc/JobOptionsSvc']"
 p188
 sS'AuditAlgorithms'
 p189
diff --git a/Control/AthenaCommon/share/bootstrap_threaded.pkl b/Control/AthenaCommon/share/bootstrap_threaded.pkl
index 23052604a783..daf19bb6f231 100644
--- a/Control/AthenaCommon/share/bootstrap_threaded.pkl
+++ b/Control/AthenaCommon/share/bootstrap_threaded.pkl
@@ -1055,7 +1055,7 @@ p179
 g7
 sS'ExtSvc'
 p180
-S"['ToolSvc/ToolSvc', 'AuditorSvc/AuditorSvc', 'MessageSvc/MessageSvc', 'IncidentSvc/IncidentSvc', 'EvtPersistencySvc/EventPersistencySvc', 'HistogramSvc/HistogramDataSvc', 'NTupleSvc/NTupleSvc', 'RndmGenSvc/RndmGenSvc', 'ChronoStatSvc/ChronoStatSvc', 'StatusCodeSvc/StatusCodeSvc', 'StoreGateSvc/StoreGateSvc', 'StoreGateSvc/DetectorStore', 'StoreGateSvc/HistoryStore', 'ClassIDSvc/ClassIDSvc', 'AthDictLoaderSvc/AthDictLoaderSvc', 'AthenaSealSvc/AthenaSealSvc', 'CoreDumpSvc/CoreDumpSvc', 'SG::HiveMgrSvc/EventDataSvc', 'StoreGateSvc/ConditionStore', 'AlgResourcePool/AlgResourcePool', 'AvalancheSchedulerSvc/AvalancheSchedulerSvc', 'AthenaHiveEventLoopMgr/AthenaHiveEventLoopMgr', 'TimelineSvc/TimelineSvc', 'JobOptionsSvc/JobOptionsSvc']"
+S"['ToolSvc/ToolSvc', 'AuditorSvc/AuditorSvc', 'MessageSvc/MessageSvc', 'IncidentSvc/IncidentSvc', 'EvtPersistencySvc/EventPersistencySvc', 'HistogramSvc/HistogramDataSvc', 'NTupleSvc/NTupleSvc', 'RndmGenSvc/RndmGenSvc', 'ChronoStatSvc/ChronoStatSvc', 'StatusCodeSvc/StatusCodeSvc', 'StoreGateSvc/StoreGateSvc', 'StoreGateSvc/DetectorStore', 'StoreGateSvc/HistoryStore', 'StoreGateSvc/ConditionStore', 'ClassIDSvc/ClassIDSvc', 'AthDictLoaderSvc/AthDictLoaderSvc', 'AthenaSealSvc/AthenaSealSvc', 'CoreDumpSvc/CoreDumpSvc', 'SG::HiveMgrSvc/EventDataSvc', 'AlgResourcePool/AlgResourcePool', 'AvalancheSchedulerSvc/AvalancheSchedulerSvc', 'AthenaHiveEventLoopMgr/AthenaHiveEventLoopMgr', 'TimelineSvc/TimelineSvc', 'JobOptionsSvc/JobOptionsSvc']"
 p181
 sS'AuditAlgorithms'
 p182
diff --git a/Control/AthenaConfiguration/python/MainServicesConfig.py b/Control/AthenaConfiguration/python/MainServicesConfig.py
index b2f41bb14921..ddf71f7e40c3 100644
--- a/Control/AthenaConfiguration/python/MainServicesConfig.py
+++ b/Control/AthenaConfiguration/python/MainServicesConfig.py
@@ -81,6 +81,7 @@ def MainServicesThreadedCfg(cfgFlags):
     cfg.addService(StoreGateSvc())
     cfg.addService(StoreGateSvc("DetectorStore"))
     cfg.addService(StoreGateSvc("HistoryStore"))
+    cfg.addService( StoreGateSvc("ConditionStore") )
     
     cfg.setAppProperty('InitializationLoopCheck',False)
 
@@ -109,9 +110,6 @@ def MainServicesThreadedCfg(cfgFlags):
         hivesvc.NSlots = cfgFlags.Concurrency.NumConcurrentEvents
         cfg.addService( hivesvc )
 
-        from StoreGate.StoreGateConf import StoreGateSvc
-        cfg.addService( StoreGateSvc("ConditionStore") )
-
         from GaudiHive.GaudiHiveConf import AlgResourcePool
         from AthenaCommon.Constants import INFO
         arp=AlgResourcePool( OutputLevel = INFO )
diff --git a/Database/IOVDbSvc/python/CondDB.py b/Database/IOVDbSvc/python/CondDB.py
index e9d3d2e23714..a46eb72e0924 100644
--- a/Database/IOVDbSvc/python/CondDB.py
+++ b/Database/IOVDbSvc/python/CondDB.py
@@ -31,13 +31,11 @@ from IOVSvc.IOVSvcConf import CondInputLoader
 from AthenaServices.AthenaServicesConf import Athena__ConditionsCleanerSvc
 from AthenaServices.AthenaServicesConf import Athena__DelayedConditionsCleanerSvc
 from AthenaCommon.AlgSequence import AthSequencer
-import StoreGate.StoreGateConf as StoreGateConf
 
 condInputLoader = CondInputLoader( "CondInputLoader")
 condSeq = AthSequencer("AthCondSeq")
 
 svcMgr += CondSvc()
-svcMgr += StoreGateConf.StoreGateSvc("ConditionStore")
 condSeq += condInputLoader
 
 # Enable conditions garbage collection.
-- 
GitLab


From 0e6268367b1c947b92d27a3607e306593f9e2989 Mon Sep 17 00:00:00 2001
From: sherwood <peter.sherwood@cern.ch>
Date: Mon, 18 Mar 2019 17:42:32 +0100
Subject: [PATCH 074/163] Update ctest reference file
 TrigUpgradeTest/share/jetMenu.ref

An uinexplained  change in the calorimeter topocluster energies was observed
14/03/2019. This commit updates the ref file for this change.

Discussion at https://its.cern.ch/jira/browse/ATR-19550

https://its.cern.ch/jira/browse/ATR-19550
---
 Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
index f9072a28f116..c52fd3b9d84d 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/jetMenu.ref
@@ -1,7 +1,8 @@
 TriggerSummaryStep1                     1   0     DEBUG  +++ HLT_j45 ID#3664574289
+TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep1                     10  0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j45 ID#3664574289
-TrigSignatureMoniMT                                INFO HLT_j45                       20        20        3         3         
-TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 3         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        4         4         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 4         
 TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         
 TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         
-- 
GitLab


From aaf5bf8aefa827dbb137e108d5bcc6412c8e2328 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Mon, 18 Mar 2019 17:53:25 +0100
Subject: [PATCH 075/163] update of the ref. files, small change in tracknig

---
 .../TrigUpgradeTest/share/RunMenuTest.ref     |  6 +++---
 .../TrigUpgradeTest/share/egammaRunData.ref   | 20 +++++++++----------
 .../TrigUpgradeTest/share/electronMenu.ref    |  6 +++---
 3 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
index 8373d8fc4fa8..4f755b1928c8 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/RunMenuTest.ref
@@ -2,8 +2,8 @@ TrigSignatureMoniMT                                INFO Chains passing step (1st
 TrigSignatureMoniMT                                INFO Chain name                   L1,      AfterPS, [... steps ...], Output
 TrigSignatureMoniMT                                INFO All                           20        20        0         0         17        
 TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3            20        20        18        17        17        
-TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3 decisions                      54        342       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut_L1EM3 decisions                      54        343       
 TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3            20        20        17        16        16        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3 decisions                      50        329       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut_L1EM3 decisions                      50        330       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3            20        20        15        14        14        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3 decisions                      36        264       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut_L1EM3 decisions                      36        265       
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
index 0ae91dd2c159..215dc372db9f 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRunData.ref
@@ -4,8 +4,8 @@ HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG xAOD::TrigEMClusterConta
 HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG xAOD::TrigEMClusterAuxContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClustersAux. Fragment size :804 bytes
 HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG    Fragment size including 88 bytes from 1x DynAux : 892
 HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG xAOD::TrigElectronContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFex Fragment size :196 bytes
-HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :1116 bytes
-HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG    Fragment size including 1616 bytes from 14x DynAux : 2732
+HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :1024 bytes
+HLTRMakerAlg.MKTool.Serialiser          0   0     DEBUG    Fragment size including 1560 bytes from 14x DynAux : 2584
 HLTRMakerAlg.MKTool.Serialiser          1   0     DEBUG xAOD::TrigCompositeContainer#remap_EgammaCaloDecisions Fragment size :180 bytes
 HLTRMakerAlg.MKTool.Serialiser          1   0     DEBUG xAOD::TrigCompositeAuxContainer#remap_EgammaCaloDecisionsAux. Fragment size :740 bytes
 HLTRMakerAlg.MKTool.Serialiser          1   0     DEBUG xAOD::TrigEMClusterContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClusters Fragment size :204 bytes
@@ -52,8 +52,8 @@ HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG xAOD::TrigEMClusterConta
 HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG xAOD::TrigEMClusterAuxContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClustersAux. Fragment size :804 bytes
 HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG    Fragment size including 88 bytes from 1x DynAux : 892
 HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG xAOD::TrigElectronContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFex Fragment size :196 bytes
-HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :840 bytes
-HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG    Fragment size including 1448 bytes from 14x DynAux : 2288
+HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :748 bytes
+HLTRMakerAlg.MKTool.Serialiser          6   0     DEBUG    Fragment size including 1392 bytes from 14x DynAux : 2140
 HLTRMakerAlg.MKTool.Serialiser          7   0     DEBUG xAOD::TrigCompositeContainer#remap_EgammaCaloDecisions Fragment size :180 bytes
 HLTRMakerAlg.MKTool.Serialiser          7   0     DEBUG xAOD::TrigCompositeAuxContainer#remap_EgammaCaloDecisionsAux. Fragment size :620 bytes
 HLTRMakerAlg.MKTool.Serialiser          7   0     DEBUG xAOD::TrigEMClusterContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClusters Fragment size :204 bytes
@@ -98,8 +98,8 @@ HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG xAOD::TrigEMClusterConta
 HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG xAOD::TrigEMClusterAuxContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClustersAux. Fragment size :3044 bytes
 HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG    Fragment size including 116 bytes from 1x DynAux : 3160
 HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG xAOD::TrigElectronContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFex Fragment size :196 bytes
-HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :5440 bytes
-HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG    Fragment size including 4248 bytes from 14x DynAux : 9688
+HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG xAOD::TrigElectronAuxContainer#HLT_xAOD__TrigElectronContainer_L2ElectronFexAux. Fragment size :5532 bytes
+HLTRMakerAlg.MKTool.Serialiser          12  0     DEBUG    Fragment size including 4304 bytes from 14x DynAux : 9836
 HLTRMakerAlg.MKTool.Serialiser          13  0     DEBUG xAOD::TrigCompositeContainer#remap_EgammaCaloDecisions Fragment size :180 bytes
 HLTRMakerAlg.MKTool.Serialiser          13  0     DEBUG xAOD::TrigCompositeAuxContainer#remap_EgammaCaloDecisionsAux. Fragment size :528 bytes
 HLTRMakerAlg.MKTool.Serialiser          13  0     DEBUG xAOD::TrigEMClusterContainer#HLT_xAOD__TrigEMClusterContainer_L2CaloClusters Fragment size :204 bytes
@@ -156,10 +156,10 @@ HLTRMakerAlg.MKTool.Serialiser          19  0     DEBUG    Fragment size includi
 TrigSignatureMoniMT                                INFO HLT_2e3_etcut                 20        10        6         5         5         
 TrigSignatureMoniMT                                INFO HLT_2e3_etcut decisions                           16        100       
 TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut               20        20        12        11        11        
-TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut decisions                         46        279       
+TrigSignatureMoniMT                                INFO HLT_e3_e5_etcut decisions                         46        280       
 TrigSignatureMoniMT                                INFO HLT_e3_etcut                  20        9         8         8         8         
-TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        140       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        141       
 TrigSignatureMoniMT                                INFO HLT_e5_etcut                  20        20        17        17        17        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            52        333       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            52        334       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut                  20        20        11        11        11        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            17        173       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            17        174       
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
index 9e7fb876f609..ae0457a796ae 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/electronMenu.ref
@@ -94,10 +94,10 @@ TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#243
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TrigSignatureMoniMT                                INFO HLT_e3_etcut                  20        9         8         7         7         
-TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        137       
+TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            22        138       
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step             20        20        18        0         18        
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step decisions                       54        0         
 TrigSignatureMoniMT                                INFO HLT_e5_etcut                  20        20        17        16        16        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        329       
+TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        330       
 TrigSignatureMoniMT                                INFO HLT_e7_etcut                  20        20        15        14        14        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        264       
+TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        265       
-- 
GitLab


From 1dab4d13aa3d12b2c477ceff0321412169715830 Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Mon, 18 Mar 2019 10:43:30 -0700
Subject: [PATCH 076/163] Improve numerical stability of step-size calculation

---
 .../TrkVertexSeedFinderUtils/GaussianTrackDensity.h             | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h
index d61ef0f7570c..49586b4a06b0 100644
--- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h
+++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h
@@ -149,7 +149,7 @@ namespace Trk
 
       
     inline double stepSize(double y, double dy, double ddy) const
-    { return ( m_gaussStep ? 1/(dy/y-ddy/dy) : -dy/ddy ); }
+    { return ( m_gaussStep ? (y * dy)/(dy * dy - y * ddy) : -dy/ddy ); }
 
 
     //  Cache for track information
-- 
GitLab


From 13a139a50df746aa03a7bc650b32e3dbf7f67f7c Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Mon, 18 Mar 2019 18:44:16 +0100
Subject: [PATCH 077/163] removed use of obsolete RegSeConfig function

---
 DetectorDescription/RegionSelector/python/RegSelConfig.py | 8 +-------
 .../TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py   | 4 ++--
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/DetectorDescription/RegionSelector/python/RegSelConfig.py b/DetectorDescription/RegionSelector/python/RegSelConfig.py
index 40ffe7ebf526..a64dd0bdd909 100644
--- a/DetectorDescription/RegionSelector/python/RegSelConfig.py
+++ b/DetectorDescription/RegionSelector/python/RegSelConfig.py
@@ -2,14 +2,8 @@
 #  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
-
-def RegSelConfig( flags ):
-    from AthenaCommon.Logging import logging
-    log = logging.getLogger ('RegSelConfig')
-    log.warning("Please use regSeCfg - that name matches ComponentAccumulator generator functions naming convention ")
-    return regSelCfg( flags ) 
-
 def regSelCfg( flags ):
+    """ Configures Region Selector Svc according to the detector flags """
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
     from RegionSelector.RegionSelectorConf import RegSelSvc
     from AthenaCommon.SystemOfUnits import mm
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
index 79f5d951a4b9..aecf5ab81aaf 100644
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/TrigCaloDataAccessConfig.py
@@ -44,8 +44,8 @@ def trigCaloDataAccessSvcCfg( flags ):
     acc.merge( TileGMCfg( flags ) )
     acc.getService('GeoModelSvc').DetectorTools['TileDetectorTool'].GeometryConfig = 'RECO'
 
-    from RegionSelector.RegSelConfig import RegSelConfig
-    acc.mergeAll( RegSelConfig( flags ) )
+    from RegionSelector.RegSelConfig import regSelCfg
+    acc.mergeAll( regSelCfg( flags ) )
     
     acc.merge( createLArRoI_Map( flags ) )
 
-- 
GitLab


From f7044ca22bca9c717a1702f0e0a6f34c10f90bba Mon Sep 17 00:00:00 2001
From: Siarhei Harkusha <Siarhei.Harkusha@cern.ch>
Date: Mon, 18 Mar 2019 19:33:54 +0100
Subject: [PATCH 078/163] Fix const correctness in Tile containers

Some methods of Tile containers, which allow modifying
the contents of containers, violate the const correctness.

Tile convertors have been migrated to use mutable Tile containers.
Methods of Tile containers, which violate the const correctness
have been removed.
---
 .../TileEvent/TileBeamElemCollection.h        | 10 ++-
 .../TileEvent/TileDigitsCollection.h          | 15 +++-
 .../TileEvent/TileEvent/TileHitCollection.h   |  9 ++-
 .../TileEvent/TileRawChannelCollection.h      | 10 ++-
 .../TileEvent/TileRawDataCollection.h         |  5 +-
 .../TileEvent/TileRawDataContainer.h          |  6 +-
 .../TileEvent/TileRawDataContainer.icc        | 78 +-----------------
 .../share/TileDigitsThresholdFilter_test.ref  | 10 +--
 .../test/TileDigitsThresholdFilter_test.cxx   | 81 +++++++------------
 .../TileTPCnv/T_TilePoolContainerCnv.h        | 29 +++++--
 10 files changed, 98 insertions(+), 155 deletions(-)

diff --git a/TileCalorimeter/TileEvent/TileEvent/TileBeamElemCollection.h b/TileCalorimeter/TileEvent/TileEvent/TileBeamElemCollection.h
index 353d4998ba78..e828ce9b8c47 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileBeamElemCollection.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileBeamElemCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TileBeamElemCollection_H       
@@ -29,6 +29,14 @@ public:
    */
   TileBeamElemCollection (const TileBeamElemCollection& other);
 
+  /**
+   * @brief Move constructor.
+   * @param other Collection to move.
+   * Move the contents from other collection.
+   */
+  TileBeamElemCollection(TileBeamElemCollection&& other) = default;
+
+
   ~TileBeamElemCollection() { }
 };
 
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileDigitsCollection.h b/TileCalorimeter/TileEvent/TileEvent/TileDigitsCollection.h
index 438793223cde..302003f1df83 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileDigitsCollection.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileDigitsCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TileDigitsCollection_H
@@ -38,6 +38,13 @@ public:
    */
   TileDigitsCollection (const TileDigitsCollection& other);
 
+  /**
+   * @brief Move constructor.
+   * @param other Collection to move.
+   * Move the contents from other collection.
+   */
+  TileDigitsCollection(TileDigitsCollection&& other) = default;
+
   ~TileDigitsCollection() { }
 
   /**
@@ -66,10 +73,12 @@ public:
    */
   void setFragExtraWords(const std::vector<uint32_t> & extra) {
     m_FragExtraWords = extra;
-    if (extra.size() < 2) m_FragExtraWords.resize(2); }
+    if (extra.size() < 2) m_FragExtraWords.resize(2);
+  }
   void setFragExtraWords(std::vector<uint32_t> && extra) {
     m_FragExtraWords = std::move(extra);
-    if (extra.size() < 2) m_FragExtraWords.resize(2); }
+    if (m_FragExtraWords.size() < 2) m_FragExtraWords.resize(2);
+  }
   /**
    * Get Frag extra words for this collection
    * @return vector with all words
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileHitCollection.h b/TileCalorimeter/TileEvent/TileEvent/TileHitCollection.h
index 9411ad69dc61..66dd08838a27 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileHitCollection.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileHitCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TileHitCollection_H       
@@ -30,6 +30,13 @@ public:
    */
   TileHitCollection (const TileHitCollection& other);
 
+  /**
+   * @brief Move constructor.
+   * @param other Collection to move.
+   * Move the contents from other collection.
+   */
+  TileHitCollection(TileHitCollection&& other) = default;
+
   
   ~TileHitCollection() { }
 };
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileRawChannelCollection.h b/TileCalorimeter/TileEvent/TileEvent/TileRawChannelCollection.h
index 48880bda9653..f809980e2a2c 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileRawChannelCollection.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileRawChannelCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TileRawChannelCollection_H       
@@ -60,6 +60,14 @@ public:
    */
   TileRawChannelCollection (const TileRawChannelCollection& other);
 
+  /**
+   * @brief Move constructor.
+   * @param other Collection to move.
+   * Move the contents from other collection.
+   */
+  TileRawChannelCollection(TileRawChannelCollection&& other) = default;
+
+
   ~TileRawChannelCollection() { }
 
   /**
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileRawDataCollection.h b/TileCalorimeter/TileEvent/TileEvent/TileRawDataCollection.h
index 69bcb22ebd44..315c1af28cc6 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileRawDataCollection.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileRawDataCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //********************************************************************
@@ -53,6 +53,9 @@ template <typename TELEMENT> class TileRawDataCollection
       : DataVector < TELEMENT > (ownPolicy),
         m_id(0), m_lvl1Id(0), m_lvl1Type(0), m_detEvType(0), m_rodBCID(0) { this->reserve(48); }
 
+    TileRawDataCollection<TELEMENT> (const TileRawDataCollection<TELEMENT>& rhs) = default;
+    TileRawDataCollection<TELEMENT> (TileRawDataCollection<TELEMENT>&& rhs) = default;
+
     // destructor               
     virtual ~TileRawDataCollection<TELEMENT> () = default;
 
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.h b/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.h
index b24a91400d43..b342641de836 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //********************************************************************
@@ -59,10 +59,6 @@ public:
     // clear all collections
     void clear();
   
-    // insert a TileRawData element into a collection.
-    // this is only to be used by Algorithm-builder
-    void add (TElement* rc, bool createColl=false, SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS);
-    inline void push_back(TElement* rc) { add(rc,true); }
     inline TYPE get_hashType() const { return this->m_hashFunc.type(); }
     inline UNIT get_unit() const { return this->m_unit; }
     inline void set_unit(UNIT unit) { m_unit=unit; }
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.icc b/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.icc
index 9bd9a4088287..52d4b4a1c27c 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.icc
+++ b/TileCalorimeter/TileEvent/TileEvent/TileRawDataContainer.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // implementation of TileRawDataContainer 
@@ -90,82 +90,6 @@ void TileRawDataContainer<TCOLLECTION>::clear()
     return; 
 }
 
-template <typename TCOLLECTION> 
-void TileRawDataContainer<TCOLLECTION>::add(TElement* rc, bool createColl,
-                                             SG::OwnershipPolicy ownPolicy)
-{
-    if (this->m_hashFunc.max() == 0 && TileCablingService::getInstance()->getTileHWID() != 0) {
-        // not initialized yet - initialize hash function
-        initialize(false,m_type);
-    }
-
-    //if (isLocked()) {
-    //    std::cout << " Can not change TileRawDataContainer anymore, It is locked"<<std::endl;
-    //    return ; 
-    //}
-                                
-    TCOLLECTION * coll; 
-
-    int frag = rc->frag_ID();
-    IdentifierHash fragHash = static_cast<IdentifierHash>(m_hashFunc(frag));
-                              
-    TContainer_const_iterator it = MyBase::indexFind(fragHash);
-
-    if( it == MyBase::end() ){ // collection doesn't exist
-
-        // do not create collection, because it'll not work anyhow:
-        // the fact that collection doesn't exist cashed already
-        // waitng for update of core package
-        // createColl = false;
-
-        if (createColl) {
-
-            coll = new TCOLLECTION(frag,ownPolicy);
-            StatusCode sc = this->addCollection(coll,fragHash);
-            if (sc.isFailure() ) {
-
-                ISvcLocator* svcLoc = Gaudi::svcLocator( );
-                IMessageSvc*  msgSvc;
-                sc = svcLoc->service( "MessageSvc", msgSvc  );
-                if ( sc.isFailure() ) {
-                    std::cout << "TileRawDataContainer   ERROR Can not retrieve MessageSvc" << std::endl;
-                    std::cout << "TileRawDataContainer   ERROR Can not create collection for frag 0x" << std::hex << frag
-                              << " in container with CLID " << std::dec << this->clID() << std::endl;
-                } else {
-                    MsgStream log(msgSvc, "TileRawDataContainer");
-                    log << MSG::ERROR <<" Can not create collection for frag 0x" << MSG::hex << frag
-                        << " in container with CLID " << MSG::dec << this->clID() << endmsg;
-                }
-                return ;
-            }
-
-        } else {
-            
-            ISvcLocator* svcLoc = Gaudi::svcLocator( );
-            IMessageSvc*  msgSvc;
-            StatusCode sc = svcLoc->service( "MessageSvc", msgSvc  );
-            if ( sc.isFailure() ) {
-                std::cout << "TileRawDataContainer   ERROR Can not retrieve MessageSvc" << std::endl;
-                std::cout << "TileRawDataContainer   ERROR Collection for frag 0x" << std::hex << frag 
-                          << " in container with CLID " << std::dec << this->clID()
-                          << " does not exist " << std::endl; 
-            } else {
-                MsgStream log(msgSvc, "TileRawDataContainer");
-                log << MSG::ERROR <<" Collection for frag 0x" << MSG::hex << frag 
-                    << " in container with CLID " << MSG::dec << this->clID()
-                    << " does not exist " << endmsg; 
-            }
-            return ;
-          } 
-    } else { // collection exists
-
-        const TCOLLECTION * const_coll = *it; 
-        coll = const_cast<TCOLLECTION *>(const_coll);
-    }
-    
-    coll->push_back(rc);         
-    return ;
-}                             
                               
 template <typename TCOLLECTION> 
 void TileRawDataContainer<TCOLLECTION>::print() const
diff --git a/TileCalorimeter/TileRecAlgs/share/TileDigitsThresholdFilter_test.ref b/TileCalorimeter/TileRecAlgs/share/TileDigitsThresholdFilter_test.ref
index 4b32e718f1b4..06d5f0d24bd6 100644
--- a/TileCalorimeter/TileRecAlgs/share/TileDigitsThresholdFilter_test.ref
+++ b/TileCalorimeter/TileRecAlgs/share/TileDigitsThresholdFilter_test.ref
@@ -4,12 +4,12 @@ Initializing Gaudi ApplicationMgr using job opts ./TileDigitsThresholdFilter_tes
 JobOptionsSvc        INFO Job options successfully read in from ./TileDigitsThresholdFilter_test_generated.txt
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
-                                                   Welcome to ApplicationMgr (GaudiCoreSvc v27r1p99)
-                                          running on karma on Fri Jul 20 15:32:00 2018
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on pcatl12 on Mon Mar 18 19:21:10 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : StoreGate
 ApplicationMgr       INFO Application Manager Configured successfully
-ClassIDSvc           INFO  getRegistryEntries: read 8597 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 5499 CLIDRegistry entries for module ALL
 StoreGateSvc        DEBUG Property update for OutputLevel : new value = 2
 StoreGateSvc        DEBUG Service base class initialized successfully
 StoreGateSvc        DEBUG trying to create store SGImplSvc/StoreGateSvc_Impl
@@ -54,7 +54,3 @@ TILE => 5/0/1/2/1/1
 TILE => 5/0/1/2/2/1
 TILE => 5/0/1/2/3/1
 TILE => 5/0/1/2/4/1
-StoreGateSvc        DEBUG Recorded object @0x1c23240 with key TileDigitsCnt of type TileDigitsContainer(CLID 2925)
- in DataObject @0x16cea90
- object not modifiable when retrieved
-StoreGateSvc        DEBUG Retrieved const pointer to object TileDigitsFiltered  of type TileDigitsContainer(CLID 2925)
diff --git a/TileCalorimeter/TileRecAlgs/test/TileDigitsThresholdFilter_test.cxx b/TileCalorimeter/TileRecAlgs/test/TileDigitsThresholdFilter_test.cxx
index d8708224432e..4ceb5db626fd 100644
--- a/TileCalorimeter/TileRecAlgs/test/TileDigitsThresholdFilter_test.cxx
+++ b/TileCalorimeter/TileRecAlgs/test/TileDigitsThresholdFilter_test.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #undef NDEBUG
@@ -7,6 +7,7 @@
 #include "../src/TileDigitsThresholdFilter.h"
 #include "TileConditions/ITileCondToolDspThreshold.h"
 #include "TileEvent/TileDigitsContainer.h"
+#include "TileEvent/TileMutableDigitsContainer.h"
 #include "TileIdentifier/TileHWID.h"
 #include "TileConditions/TileCablingService.h"
 
@@ -19,6 +20,8 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "StoreGate/setupStoreGate.h"
+#include "StoreGate/WriteHandle.h"
+#include "StoreGate/ReadHandle.h"
 
 // ATLAS C++
 #include "CxxUtils/make_unique.h"
@@ -128,46 +131,37 @@ void test1() {
   assert( (alg->setProperty("TileCondToolDspThreshold", "TileCondToolDspThresholdMock/TileCondToolDspThresholdMock")).isSuccess() );
   assert( (alg->initialize()).isSuccess() );
 
-
-  TileDigitsContainer* inputContainer = new TileDigitsContainer(true);
-
-  inputContainer->set_unit(TileRawChannelUnit::OnlineADCcounts);
-  inputContainer->set_type(TileFragHash::Beam);
-  inputContainer->set_bsflags(3);
-
-  unsigned int ros = 1;
-  unsigned int drawer = 1;
-  for (unsigned int adc = 0; adc < 2; ++adc) {
-    unsigned int channel = 0;
-    for (const std::vector<float>& digits : TESTDIGITS) {
-      HWIdentifier id = tileHWID->adc_id(ros, drawer, channel, adc);
-      inputContainer->push_back(new TileDigits(id, digits));
-      ++channel;
-      std::cout << ((tileHWID->is_tile(id) ? "TILE" : "NOT TILE")) << " => " << tileHWID->to_string(id) << std::endl;
+  {
+    auto digitsContainer = std::make_unique<TileMutableDigitsContainer>(true);
+
+    digitsContainer->set_unit(TileRawChannelUnit::OnlineADCcounts);
+    digitsContainer->set_type(TileFragHash::Beam);
+    digitsContainer->set_bsflags(3);
+
+    unsigned int ros = 1;
+    unsigned int drawer = 1;
+    for (unsigned int adc = 0; adc < 2; ++adc) {
+      unsigned int channel = 0;
+      for (const std::vector<float>& digits : TESTDIGITS) {
+        HWIdentifier id = tileHWID->adc_id(ros, drawer, channel, adc);
+        digitsContainer->push_back(new TileDigits(id, digits));
+        ++channel;
+        std::cout << ((tileHWID->is_tile(id) ? "TILE" : "NOT TILE")) << " => " << tileHWID->to_string(id) << std::endl;
+      }
+      ++drawer;
     }
-    ++drawer;
-  }
 
-  /*
-  for (const TileDigitsCollection* constInputCollection : *inputContainer) {
-    if (constInputCollection->identify() == 0x101) {
-      TileDigitsCollection* inputCollection = const_cast<TileDigitsCollection*>(constInputCollection);
-      inputCollection->setLvl1Id(10100);
-      inputCollection->setLvl1Type(10101);
-      inputCollection->setDetEvType(10102);
-      inputCollection->setRODBCID(10103);
-    }
+    SG::WriteHandle<TileDigitsContainer> digitsCnt("TileDigitsCnt");
+    assert(digitsCnt.record(std::move(digitsContainer)).isSuccess());
   }
-  */
-
-  assert( evtStore->record(inputContainer, "TileDigitsCnt", false).isSuccess() );
-
 
   assert( (alg->execute()).isSuccess() );
 
+  SG::ReadHandle<TileDigitsContainer> inputContainer("TileDigitsCnt");
+  assert( inputContainer.isValid() );
 
-  const TileDigitsContainer* outputContainer;
-  assert( evtStore->retrieve(outputContainer, "TileDigitsFiltered").isSuccess() );
+  SG::ReadHandle<TileDigitsContainer> outputContainer("TileDigitsFiltered");
+  assert( outputContainer.isValid() );
 
   assert( inputContainer->get_unit() == outputContainer->get_unit() );
   assert( inputContainer->get_type() == outputContainer->get_type() );
@@ -180,25 +174,6 @@ void test1() {
     unsigned int drawer = (fragId & 0x3F);
     unsigned int ros = fragId >> 8;
 
-    /*
-    IdentifierHash fragHash = (inputContainer->hashFunc())(fragId);
-    const TileDigitsCollection* inputCollection = *(inputContainer->indexFind(fragHash));
-
-
-    assert( inputCollection->getLvl1Id() == outputCollection->getLvl1Id() );
-    assert( inputCollection->getLvl1Type() == outputCollection->getLvl1Type() );
-    assert( inputCollection->getDetEvType() == outputCollection->getDetEvType() );
-    assert( inputCollection->getRODBCID() == outputCollection->getRODBCID() );
-
-    assert( inputCollection->getFragSize() == outputCollection->getFragSize() );
-    assert( inputCollection->getFragExtraWords() == outputCollection->getFragExtraWords() );
-    assert( inputCollection->getFragBCID() == outputCollection->getFragBCID() );
-    assert( inputCollection->getFragChipHeaderWords() == outputCollection->getFragChipHeaderWords() );
-    assert( inputCollection->getFragChipHeaderWordsHigh() == outputCollection->getFragChipHeaderWordsHigh() );
-    assert( inputCollection->getFragChipCRCWords() == outputCollection->getFragChipCRCWords() );
-    assert( inputCollection->getFragChipCRCWordsHigh() == outputCollection->getFragChipCRCWordsHigh() );
-    */
-
     for (const TileDigits* digits : *outputCollection) {
       ++nTileDigitsPassedFitler;
       HWIdentifier adc_id = digits->adc_HWID();
diff --git a/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h b/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
index 983323716541..b763231e8d4f 100644
--- a/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
+++ b/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
@@ -1,7 +1,7 @@
 ///////////////////////// -*- C++ -*- /////////////////////////////
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // T_TilePoolContainerCnv.h 
@@ -15,6 +15,7 @@
 #include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
 #include "EventContainers/SelectAllObject.h"
 #include "TileEvent/TileRawDataContainer.h"
+#include "TileEvent/TileMutableDataContainer.h"
 
 #include <vector>
 #include <inttypes.h>
@@ -26,6 +27,7 @@ public:
   typedef typename PERS::ElemVector pers_ElemVector;
   typedef typename PERS::const_iterator pers_const_iterator;
   typedef typename SelectAllObject<TRANS>::const_iterator trans_const_iterator;
+  using Collection = typename TRANS::IDENTIFIABLE;
 
   T_TilePoolContainerCnv() : m_elementCnv()  {}
 
@@ -52,7 +54,6 @@ public:
         << " - " <<  bsflags << " " << unit << " " << type << " " << hashType
         << MSG::dec << " Nelements= " << vec.size() << endmsg;
 
-    //trans->clear(); // only remove elements
     trans->cleanup(); // remove all collections
 
     if ( abs(trans->get_hashType()-hashType) > 0xF) {
@@ -67,11 +68,27 @@ public:
     trans->set_type((TileFragHash::TYPE)type);
     trans->set_bsflags(bsflags);
 
-    for( pers_const_iterator it = vec.begin(),
-                           iEnd = vec.end();
-         it != iEnd; ++it) {
-      trans->push_back( m_elementCnv.createTransient(&(*it), log)  );
+
+    auto mutableContainer = std::make_unique<TileMutableDataContainer<TRANS>>();
+    if (mutableContainer->status().isFailure()) {
+      throw std::runtime_error("Failed to initialize Tile mutable Container");
+    }
+
+    for(const auto& element : vec) {
+      if (mutableContainer->push_back(m_elementCnv.createTransient(&element, log)).isFailure()) {
+        throw std::runtime_error("Failed to add Tile element to Collection");
+      }
     }
+
+    auto hashes = mutableContainer->GetAllCurrentHashes();
+    for (auto hash : hashes) {
+      Collection* coll = mutableContainer->indexFindPtr(hash);
+      auto newColl = std::make_unique<Collection>(std::move(*coll));
+      if (trans->addOrDelete(std::move(newColl), hash).isFailure()) {
+        throw std::runtime_error("Failed to add Tile collection to Identifiable Container");
+      }
+    }
+
   }
   
   /** Converts vector of TRANS::value_type objects to vector of PERS::value_type objects,
-- 
GitLab


From 4e14656fd83e55ef7e0fc06aff4819f43c723287 Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Mon, 18 Mar 2019 20:36:42 +0100
Subject: [PATCH 079/163] Fix for compilation failures in the master

Removed private variable redeclaration from LongLivedParticleDPDMaker/RPVLLTestRates.h and also
removed one duplicate line from RPVLLTestRates.cxx
---
 .../LongLivedParticleDPDMaker/RPVLLTestRates.h                  | 2 --
 .../SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx   | 2 --
 2 files changed, 4 deletions(-)

diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
index 341fdb250459..181e682df0af 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
@@ -54,8 +54,6 @@ class RPVLLTestRates : public AthAlgorithm  {
    int m_lumiBlock;
    int m_evtNum;
    std::vector<int>         m_filterPassed;   
-
-   SG::ReadHandleKey<xAOD::EventInfo>    m_evt  {this, "EvtInfo", "EventInfo", "EventInfo name"};
 };
 
 #endif 
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
index 387bcc155f32..cd083a3b9569 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
@@ -40,8 +40,6 @@ StatusCode RPVLLTestRates::initialize() {
   ATH_CHECK(m_tHistSvc.retrieve());
   ATH_CHECK( m_evt.initialize() );
 
-  ATH_CHECK( m_evt.initialize() );
-
   m_myTree= new TTree("myTree","myTree");
   StatusCode sc = m_tHistSvc->regTree("/AANT/myTree",m_myTree);
   if (sc.isFailure()) ATH_MSG_ERROR("Failed to book TTree");
-- 
GitLab


From ee499bcfc89bfe8e8d9db52676cbb9acaf8ef562 Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Mon, 7 Jan 2019 14:54:40 +0100
Subject: [PATCH 080/163] Fixed small typo

---
 .../InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
index 97795431a92d..7b5d96700da2 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
@@ -160,7 +160,7 @@ class SCT_RodEncoder : public extends<AthAlgTool, ISCT_RodEncoder>
 
   /** Add trailers with errors for ROB to the vector of 16 bit words. */
   void addTrailersWithErrors(const uint32_t& robID, const std::set<IdentifierHash>* errors, 
-                             const ErrorWords& errType, std::vector<uint16_t>& vec16dDta) const;
+                             const ErrorWords& errType, std::vector<uint16_t>& vec16Data) const;
 
   /** Add specific errors for ROB to the vector of 16 bit words. */
   void addSpecificErrors(const uint32_t& robID, const std::set<IdentifierHash>* errors, 
-- 
GitLab


From 1758cfb38b2a18e264edc3cce916f95b9a74ccad Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Mon, 14 Jan 2019 13:39:46 +0100
Subject: [PATCH 081/163] Updating naming according to ATLAS code guidelines

This commit contains changes related to:
- According to ATLAS Coding Guidelines one should use names that are English and self-descriptive [meaningful-names].
- According to ATLAS Coding Guidelines variables, members, and functions with a lowercase letter [variable-and-function-naming].
- According to ATLAS Coding Guidelines names consisting of more than one word should be written with words together and start each word that follow the first one with an uppercase letter [compound-names].
- According to ATLAS Coding Guidelines acronyms should be written as all uppercase [uppercase-acronyms].
---
 .../ISCT_RodDecoder.h                         |   2 +-
 .../src/SCT_RodDecoder.cxx                    | 751 +++++++++---------
 .../src/SCT_RodDecoder.h                      |  52 +-
 3 files changed, 403 insertions(+), 402 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
index 0fd05400e0f5..a33288c33331 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
@@ -42,7 +42,7 @@ class ISCT_RodDecoder : virtual public IAlgTool {
                                     ISCT_RDO_Container&,
                                     InDetBSErrContainer* errs,
                                     SCT_ByteStreamFractionContainer* bsFracCont,
-                                    const std::vector<IdentifierHash>* vec=nullptr) const = 0;
+                                    const std::vector<IdentifierHash>* vecHash = nullptr) const = 0;
 };
 
 #endif //SCT_RAWDATABYTESTREAM_ISCT_RODDECODER_H
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index e850106a7a65..d57d692f7dc2 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -25,36 +25,36 @@ union RawWord {
 SCT_RodDecoder::SCT_RodDecoder
 (const std::string& type, const std::string& name,const IInterface* parent) :
   base_class(type, name, parent),
-  m_sct_id{nullptr},
+  m_sctID{nullptr},
   m_singleCondHitNumber{0},
   m_pairedCondHitNumber{0},
   m_firstExpHitNumber{0},
   m_evenExpHitNumber{0},
   m_lastExpHitNumber{0},
-  m_headnumber{0},
-  m_trailnumber{0},
-  m_head_error_bcid{0},
-  m_head_error_lvl1id{0},
-  m_head_error_timeout{0},
-  m_head_error_formatter{0},
-  m_head_error_preamb{0},
-  m_trail_error_overflow{0},
-  m_trail_error_limit{0},
-  m_trail_error_bit{0},
-  m_config_data_bit{0},
-  m_flag_error_bit{0},
-  m_cond_hit1_error{0},
-  m_cond_hit2_error{0},
-  m_chip_number_error{0},
-  m_unknown_data_format{0},
+  m_headNumber{0},
+  m_trailerNumber{0},
+  m_headErrorBCID{0},
+  m_headErrorLvl1ID{0},
+  m_headErrorTimeout{0},
+  m_headErrorFormatter{0},
+  m_headErrorPreamble{0},
+  m_trailerErrorOverflow{0},
+  m_trailerErrorLimit{0},
+  m_trailerErrorBit{0},
+  m_configDataBit{0},
+  m_flagErrorBit{0},
+  m_condHit1Error{0},
+  m_condHit2Error{0},
+  m_chipNumberError{0},
+  m_unknownDataFormat{0},
   m_nHits{0},
   m_nRDOs{0},
   m_maskedLinkNumber{0},
   m_maskedRODNumber{0},
-  m_RODClockErrorNumber{0},
+  m_rodClockErrorNumber{0},
   m_truncatedRODNumber{0},
   m_numMissingLinkHeader{0},
-  m_numUnknownOfflineId{0},
+  m_numUnknownOfflineID{0},
   m_swapPhiReadoutDirection{}
 {
 }
@@ -66,9 +66,9 @@ StatusCode SCT_RodDecoder::initialize() {
   ATH_CHECK(m_cabling.retrieve());
   ATH_MSG_DEBUG("Retrieved tool " << m_cabling);
 
-  ATH_CHECK(detStore()->retrieve(m_sct_id,"SCT_ID"));
-  m_cntx_sct = m_sct_id->wafer_context();
-  m_swapPhiReadoutDirection.resize(m_sct_id->wafer_hash_max(), false);
+  ATH_CHECK(detStore()->retrieve(m_sctID,"SCT_ID"));
+  m_contextSCT = m_sctID->wafer_context();
+  m_swapPhiReadoutDirection.resize(m_sctID->wafer_hash_max(), false);
 
   ATH_CHECK(m_configTool.retrieve());
 
@@ -77,10 +77,11 @@ StatusCode SCT_RodDecoder::initialize() {
   // Since this is access to SiDetectorElement during initialization,
   // condition object of SiDetectorElementCollection is not accessible.
   // SCT_DetectorManager has to be used.
-  const InDetDD::SCT_DetectorManager* detManager{nullptr};
-  ATH_CHECK(detStore()->retrieve(detManager, "SCT"));
-  const InDetDD::SiDetectorElementCollection* elements{detManager->getDetectorElementCollection()};
-  for (const InDetDD::SiDetectorElement* element: *elements) {
+  const InDetDD::SCT_DetectorManager* sctDetManager{nullptr};
+  ATH_CHECK(detStore()->retrieve(sctDetManager, "SCT"));
+
+  const InDetDD::SiDetectorElementCollection* sctDetElementColl{sctDetManager->getDetectorElementCollection()};
+  for (const InDetDD::SiDetectorElement* element: *sctDetElementColl) {
     if (element->swapPhiReadoutDirection()) {
       m_swapPhiReadoutDirection[element->identifyHash()] = true;
     }
@@ -93,7 +94,7 @@ StatusCode
 SCT_RodDecoder::finalize() {
   
   /** print out summaries of data and errors decoded */
-  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_headnumber  <<" link headers found");
+  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_headNumber  <<" link headers found");
 
   ATH_MSG_INFO("SCT decoding bytestream summary: " << m_singleCondHitNumber << " single strips with hit in condensed mode");
   ATH_MSG_INFO("SCT decoding bytestream summary: " << m_pairedCondHitNumber << " paired strips with hit in condensed mode");
@@ -102,29 +103,29 @@ SCT_RodDecoder::finalize() {
   ATH_MSG_INFO("SCT decoding bytestream summary: " << m_evenExpHitNumber << " consecutive paired strips with hit in expanded mode");
   ATH_MSG_INFO("SCT decoding bytestream summary: " << m_lastExpHitNumber << " last consecutive strip with hit in expanded mode");
 
-  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_trailnumber << " link trailers found");
-  if (m_head_error_bcid > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_head_error_lvl1id << " LVL1d errors found");
-  if (m_head_error_timeout > 0)   ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_head_error_timeout << " timeout errors found");
-  if (m_head_error_formatter > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_head_error_formatter << " formatter errors found");
-  if (m_head_error_preamb > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_head_error_preamb << " preamble errors found");
+  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_trailerNumber << " link trailers found");
+  if (m_headErrorBCID > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorLvl1ID << " LVL1d errors found");
+  if (m_headErrorTimeout > 0)   ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorTimeout << " timeout errors found");
+  if (m_headErrorFormatter > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorFormatter << " formatter errors found");
+  if (m_headErrorPreamble > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorPreamble << " preamble errors found");
   if (m_maskedLinkNumber > 0)     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_maskedLinkNumber << " masked links found");
-  if (m_trail_error_overflow > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trail_error_overflow << " trailer data overflow errors found");
-  if (m_trail_error_limit > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trail_error_limit << " header trailer limit errors found");
-  if (m_trail_error_bit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trail_error_bit << " trailer bit errors found");
-  if (m_config_data_bit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: raw Data-> "     << m_config_data_bit << " raw data found: Config data mode");
-  if (m_flag_error_bit > 0)       ATH_MSG_INFO("SCT BytestreamCnv summary: flag-> "         << m_flag_error_bit << " module link flag bit errors found");
-  if (m_cond_hit1_error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_cond_hit1_error << " 1st hit error found in condensed mode");
-  if (m_cond_hit2_error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_cond_hit2_error << " 2nd hit error found in condensed mode");
-  if (m_chip_number_error > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_chip_number_error << " Chip number > 5 error found");
-  if (m_unknown_data_format > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: unknown data-> " << m_unknown_data_format << " Unknown data format found");
-  if (m_RODClockErrorNumber > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: ROD status word-> " << m_RODClockErrorNumber << " ROD clock errors found");
+  if (m_trailerErrorOverflow > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorOverflow << " trailer data overflow errors found");
+  if (m_trailerErrorLimit > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorLimit << " header trailer limit errors found");
+  if (m_trailerErrorBit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorBit << " trailer bit errors found");
+  if (m_configDataBit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: raw Data-> "     << m_configDataBit << " raw data found: Config data mode");
+  if (m_flagErrorBit > 0)       ATH_MSG_INFO("SCT BytestreamCnv summary: flag-> "         << m_flagErrorBit << " module link flag bit errors found");
+  if (m_condHit1Error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_condHit1Error << " 1st hit error found in condensed mode");
+  if (m_condHit2Error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_condHit2Error << " 2nd hit error found in condensed mode");
+  if (m_chipNumberError > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_chipNumberError << " Chip number > 5 error found");
+  if (m_unknownDataFormat > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: unknown data-> " << m_unknownDataFormat << " Unknown data format found");
+  if (m_rodClockErrorNumber > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: ROD status word-> " << m_rodClockErrorNumber << " ROD clock errors found");
   if (m_maskedRODNumber > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " << m_maskedRODNumber << " masked RODs found");
   if (m_truncatedRODNumber > 0)   ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " << m_truncatedRODNumber << " truncated ROBFragments");
   ATH_MSG_INFO("Number of SCT hits in ByteStream-> " << m_nHits);
   ATH_MSG_INFO("Number of SCT RDOs created->       " << m_nRDOs);
 
   if (m_numMissingLinkHeader > 0) ATH_MSG_WARNING("SCT Missing Link Headers found " << m_numMissingLinkHeader);
-  if (m_numUnknownOfflineId  > 0) ATH_MSG_WARNING("SCT unknown onlineId found " << m_numUnknownOfflineId);
+  if (m_numUnknownOfflineID  > 0) ATH_MSG_WARNING("SCT unknown onlineID found " << m_numUnknownOfflineID);
 
   ATH_CHECK(AlgTool::finalize());
   ATH_MSG_DEBUG("SCT_RodDecoder::finalize()");
@@ -135,42 +136,42 @@ SCT_RodDecoder::finalize() {
 
 StatusCode
 SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
-                               ISCT_RDO_Container& rdoIdc,
+                               ISCT_RDO_Container& rdoIDCont,
                                InDetBSErrContainer* errs,
                                SCT_ByteStreamFractionContainer* bsFracCont,
                                const std::vector<IdentifierHash>* vecHash) const
 {
-  const uint32_t robid{robFrag.rod_source_id()};
+  const uint32_t robID{robFrag.rod_source_id()};
   /**determine whether this data was generated using the ROD simulator */
-  const uint32_t rod_datatype{robFrag.rod_detev_type()};
-  const bool rodSimulatedData{static_cast<bool>((rod_datatype >> 20) & 1)};
-  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SimulatedData, robid, rodSimulatedData);
-  if (rodSimulatedData) addRODError(robid, SCT_ByteStreamErrors::RODSimulatedData, errs);
+  const uint32_t rodDataType{robFrag.rod_detev_type()};
+  const bool rodSimulatedData{static_cast<bool>((rodDataType >> 20) & 1)};
+  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SimulatedData, robID, rodSimulatedData);
+  if (rodSimulatedData) addRODError(robID, SCT_ByteStreamErrors::RODSimulatedData, errs);
 
   /** look for the bit that denotes "Super-condensed" mode.*/
-  const bool superCondensedMode{static_cast<bool>((rod_datatype >> 21) & 1)};
-  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SuperCondensedMode, robid, superCondensedMode);
+  const bool superCondensedMode{static_cast<bool>((rodDataType >> 21) & 1)};
+  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SuperCondensedMode, robID, superCondensedMode);
 
   bool condensedMode{true};
 
   int strip{0};
-  int oldstrip{-1};
-  int oldside{-1};
+  int oldStrip{-1};
+  int oldSide{-1};
   int chip{0};
   int side{0};
   int nStripsInWord{0};
-  int linkNb{0};
-  uint32_t onlineId{0};
-  int tbin{0};
+  int linkNumber{0};
+  uint32_t onlineID{0};
+  int timeBin{0};
   int groupSize{0};
 
   bool saved[768*2]{false};
-  int ABCerror{0};
-  int wordcount{-1};
+  int abcError{0};
+  int wordCount{-1};
   RawWord robData;
   robData.word32=0;
   int n;
-  int ERRORS{0}; /** encodes the errors on the header
+  int errors{0}; /** encodes the errors on the header
                   * bit 4: error in condensed mode 1st hit
                   * bit 5: error in condensed mode 2nd hit
                   */
@@ -179,7 +180,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   CacheHelper cache;
   cache.vecHash = vecHash;
   
-  IdentifierHash currentLinkIdHash;
+  IdentifierHash currentLinkIDHash;
 
   std::vector<int> errorHit;
 
@@ -188,23 +189,23 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   /// look at ROB status word ////////////////////////
 
   if (robFrag.nstatus()!=0) {
-    const uint32_t* rob_status;
-    robFrag.status(rob_status);
-    if ((*rob_status)!=0) {
-      ATH_MSG_DEBUG("ROB status word for robid " << std::hex << robid << " is non-zero " << (*rob_status) << std::dec);
+    const uint32_t* robStatus;
+    robFrag.status(robStatus);
+    if ((*robStatus)!=0) {
+      ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << " is non-zero " << (*robStatus) << std::dec);
       /// first store generic "ROBFragmentError" error type..
-      addRODError(robid, SCT_ByteStreamErrors::ROBFragmentError, errs);
+      addRODError(robID, SCT_ByteStreamErrors::ROBFragmentError, errs);
       sc = StatusCode::RECOVERABLE;
       /// now look for specific problems, e.g. truncated or masked-off RODs
-      if (((*rob_status) >> 27) & 0x1) {
-        ATH_MSG_DEBUG("ROB status word for robid " << std::hex << robid << std::dec << " indicates data truncation.");
-        addRODError(robid, SCT_ByteStreamErrors::TruncatedROD, errs);
+      if (((*robStatus) >> 27) & 0x1) {
+        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << std::dec << " indicates data truncation.");
+        addRODError(robID, SCT_ByteStreamErrors::TruncatedROD, errs);
         m_truncatedRODNumber++;
         return sc;
       }
-      if ((((*rob_status) >> 29) & 0x1) or (((*rob_status) >> 31) & 0x1)) {
-        ATH_MSG_DEBUG("ROB status word for robid " << std::hex << robid << std::dec << " indicates resource was masked off.");
-        addRODError(robid, SCT_ByteStreamErrors::MaskedROD, errs);
+      if ((((*robStatus) >> 29) & 0x1) or (((*robStatus) >> 31) & 0x1)) {
+        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << std::dec << " indicates resource was masked off.");
+        addRODError(robID, SCT_ByteStreamErrors::MaskedROD, errs);
         m_maskedRODNumber++;
         return sc;
       }
@@ -213,26 +214,26 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   
   /// look at ROD status words /////////
 
-  OFFLINE_FRAGMENTS_NAMESPACE::PointerType vRodStatus;
-  const long unsigned int vRodStatusSize{robFrag.rod_nstatus()};
+  OFFLINE_FRAGMENTS_NAMESPACE::PointerType vecRODStatus;
+  const long unsigned int vecRODStatusSize{robFrag.rod_nstatus()};
 
-  robFrag.rod_status(vRodStatus);
-  for (long unsigned int j{0}; j<vRodStatusSize; j++) {
-    const uint32_t statusWord{vRodStatus[j]};
+  robFrag.rod_status(vecRODStatus);
+  for (long unsigned int i{0}; i<vecRODStatusSize; i++) {
+    const uint32_t statusWord{vecRODStatus[i]};
     /** check for clock errors in second ROD status word */
-    if (j==1) {
+    if (i==1) {
       const int timClockError{static_cast<int>((statusWord >> 16) & 0x1)};
       const int bocClockError{static_cast<int>((statusWord >> 17) & 0x1)};
       if (timClockError or bocClockError) {
         ATH_MSG_DEBUG(" Clock error in ROD status word: " << timClockError << " " << bocClockError);
-        addRODError(robid, SCT_ByteStreamErrors::RODClockError, errs);
-        m_RODClockErrorNumber++;
+        addRODError(robID, SCT_ByteStreamErrors::RODClockError, errs);
+        m_rodClockErrorNumber++;
         sc=StatusCode::RECOVERABLE;
       }
       /** look at bits 20-23 for DCS HV */
       const int hvBits{static_cast<int>((statusWord >> 20) & 0xf)};
       const bool hvOn{hvBits==0xf};
-      if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::HVOn, robid, hvOn);
+      if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::HVOn, robID, hvOn);
     }
   }
   
@@ -240,26 +241,26 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
 
   bool foundHeader{false};
   
-  OFFLINE_FRAGMENTS_NAMESPACE::PointerType vRobData;
-  const unsigned long int vRobDataSize{robFrag.rod_ndata()};
-  robFrag.rod_data(vRobData);
+  OFFLINE_FRAGMENTS_NAMESPACE::PointerType vecROBData;
+  const unsigned long int vecROBDataSize{robFrag.rod_ndata()};
+  robFrag.rod_data(vecROBData);
   
-  for (unsigned long int i{0}; i<vRobDataSize; i++) {
-    wordcount++;
-    robData.word32 = vRobData[i];
+  for (unsigned long int i{0}; i<vecROBDataSize; i++) {
+    wordCount++;
+    robData.word32 = vecROBData[i];
     /** the data is 16-bits wide packed to a 32-bit word (rob_it1). So we unpack it here. */
-    uint16_t d[2];
-    d[1] = robData.word16[0];
-    d[0] = robData.word16[1];
+    uint16_t data16[2];
+    data16[1] = robData.word16[0];
+    data16[0] = robData.word16[1];
     
     for (n=0; n<2; n++) {
       ///---------------------------------------------------------------------
       /// hit element
       ///---------------------------------------------------------------------
-      if (d[n]&0x8000) {
+      if (data16[n]&0x8000) {
         if (not foundHeader) {
-          ATH_MSG_INFO(" Missing link header in ROD " << std::hex << robid << std::dec);
-          addRODError(robid, SCT_ByteStreamErrors::MissingLinkHeaderError, errs);
+          ATH_MSG_INFO(" Missing link header in ROD " << std::hex << robID << std::dec);
+          addRODError(robID, SCT_ByteStreamErrors::MissingLinkHeaderError, errs);
           m_numMissingLinkHeader++;
           sc = StatusCode::RECOVERABLE;
           continue;
@@ -269,75 +270,75 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         if (superCondensedMode) {
 
           /** super-condensed mode
-           *  chip info : 4 bits  d[n]>>11)0xF
-           *  chip number == (d[n]>>11)&0x7 and chip side == (d[n]>>14)&0x1
-           *  For example if d[n]>>11)0xF = 0101 => chip5 or chip5 on side0, d[n]>>11)0xF = 1101 => chip13 or chip5 on side1
+           *  chip info : 4 bits  data16[n]>>11)0xF
+           *  chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
+           *  For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
            */
-          chip = ((d[n]>>11)&0x7); 
-          side = ((d[n]>>14)&0x1);
-          strip = chip*128 + ((d[n]>>4)&0x7F);
-          tbin = 0x2; /** assuming tbin is 010 in super-condensed mode */
-          nStripsInWord = (d[n]&0xf)+1;
+          chip = ((data16[n]>>11)&0x7); 
+          side = ((data16[n]>>14)&0x1);
+          strip = chip*128 + ((data16[n]>>4)&0x7F);
+          timeBin = 0x2; /** assuming timeBin is 010 in super-condensed mode */
+          nStripsInWord = (data16[n]&0xf)+1;
           if (chip>5) {
-            ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << d[n]);
-            m_chip_number_error++;
-            addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << data16[n]);
+            m_chipNumberError++;
+            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             sc=StatusCode::RECOVERABLE;
             continue;
           }
 
           /**------------ Search for redundancy only for the master chip */
-          if ((side==1) and ((linkNb%2)==0)) {
-            if (((strip!=oldstrip) or (side!=oldside)) and (groupSize>0)) { /** if it is a new cluster,
+          if ((side==1) and ((linkNumber%2)==0)) {
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
                                                                              * make RDO with the previous cluster */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }
-            linkNb++;
+            linkNumber++;
           }
-          if ((side==0) and ((linkNb%2)!=0)) {
-            if (((strip!=oldstrip) or (side!=oldside)) and (groupSize>0)) { /** if it is a new cluster,
+          if ((side==0) and ((linkNumber%2)!=0)) {
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
                                                                              * make RDO with the previous cluster */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }
-            linkNb--;
+            linkNumber--;
           }
-          onlineId = ((robid & 0xFFFFFF)|(linkNb << 24));
+          onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));
      
           if (groupSize == 0)  {
-            oldstrip = strip; /** if it's the first super-condensed word */
-            oldside = side;
+            oldStrip = strip; /** if it's the first super-condensed word */
+            oldSide = side;
           }
           
-          if ((strip!=oldstrip) or (side!=oldside)) {
+          if ((strip!=oldStrip) or (side!=oldSide)) {
             /** if it is a new cluster,
              * make RDO with the previous cluster */
-            const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+            const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
-              addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             } else {
-              saved[oldside*768+oldstrip] = rdoMade; 
+              saved[oldSide*768+oldStrip] = rdoMade; 
             }
-            oldstrip = strip;
-            oldside = side;
+            oldStrip = strip;
+            oldSide = side;
             groupSize = 0;
           }
           groupSize+=nStripsInWord; // Split clusters have the same strip number.
@@ -345,88 +346,88 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         } else if (condensedMode) {
     
           /** condensed mode
-           *  chip info : 4 bits  d[n]>>11)0xF
-           *  chip number == (d[n]>>11)&0x7 and chip side == (d[n]>>14)&0x1
-           *  For example if d[n]>>11)0xF = 0101 => chip5 or chip5 on side0, d[n]>>11)0xF = 1101 => chip13 or chip5 on side1
+           *  chip info : 4 bits  data16[n]>>11)0xF
+           *  chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
+           *  For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
            */
-          chip = ((d[n]>>11)&0x7); 
-          side = ((d[n]>>14)&0x1);
-          strip = chip*128 + ((d[n]>>4)&0x7F);
-          tbin = 0x2; /** assuming tbin is 010 in condensed mode */
+          chip = ((data16[n]>>11)&0x7); 
+          side = ((data16[n]>>14)&0x1);
+          strip = chip*128 + ((data16[n]>>4)&0x7F);
+          timeBin = 0x2; /** assuming timeBin is 010 in condensed mode */
           if (chip>5) {
-            ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << d[n]);
-            m_chip_number_error++;
-            addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << data16[n]);
+            m_chipNumberError++;
+            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             sc=StatusCode::RECOVERABLE;
             continue;
           }
 
           /**------------ Search for redundancy only for the master chip */
-          if ((side==1) and ((linkNb%2)==0)) {
-            if (((strip!=oldstrip) or (side!=oldside)) and (groupSize>0)) { /** if it is a new cluster,
+          if ((side==1) and ((linkNumber%2)==0)) {
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
                                                                              * make RDO with the previous cluster */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }
-            linkNb++;
+            linkNumber++;
           }
-          if ((side==0) and ((linkNb%2)!=0)) {
-            if (((strip!=oldstrip) or (side!=oldside)) and (groupSize>0)) { /** if it is a new cluster,
+          if ((side==0) and ((linkNumber%2)!=0)) {
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
                                                                              * make RDO with the previous cluster */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }
-            linkNb--;
+            linkNumber--;
           }
-          onlineId = ((robid & 0xFFFFFF)|(linkNb << 24));
+          onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));
           if (groupSize == 0)  {
-            oldstrip = strip; /** if it's the first condensed word */
-            oldside = side;
+            oldStrip = strip; /** if it's the first condensed word */
+            oldSide = side;
           }
-          if (not (d[n]&0x1)) { /** 1-hit */
+          if (not (data16[n]&0x1)) { /** 1-hit */
             m_singleCondHitNumber++;
-            if ((strip!=oldstrip) or (side!=oldside)) {
+            if ((strip!=oldStrip) or (side!=oldSide)) {
               /** if it is a new cluster,
                * make RDO with the previous cluster */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }
       
-            if (d[n]&0x4) { /** Error in the hit */
-              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1-hit " << std::hex << d[n]);
+            if (data16[n]&0x4) { /** Error in the hit */
+              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1-hit " << std::hex << data16[n]);
               errorHit.push_back(groupSize);
-              ERRORS = (ERRORS | 0x10);
-              m_cond_hit1_error++;
+              errors = (errors | 0x10);
+              m_condHit1Error++;
               sc=StatusCode::RECOVERABLE;
             }
             groupSize = (groupSize>=2 ? groupSize : 1);
           } else { /** 2-hits */
             if (strip > 767) {
-              addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               sc=StatusCode::RECOVERABLE;
 
               ATH_MSG_DEBUG("Condensed mode - strip number out of range");
@@ -434,79 +435,79 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               continue;
             }
             m_pairedCondHitNumber++;
-            if ((strip!=oldstrip) or (side!=oldside)) { /** if it is a new cluster,
+            if ((strip!=oldStrip) or (side!=oldSide)) { /** if it is a new cluster,
                                                          * make RDO with the previous cluster 
                                                          */
-              const int rdoMade{makeRDO(oldstrip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
-                saved[oldside*768+oldstrip] = rdoMade; 
+                saved[oldSide*768+oldStrip] = rdoMade; 
               }
-              oldstrip = strip;
-              oldside = side;
+              oldStrip = strip;
+              oldSide = side;
               groupSize = 0;
             }    
-            if (d[n]&0x4) { /** Error in the first hit */
-              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1st hit" << std::hex << d[n]);
+            if (data16[n]&0x4) { /** Error in the first hit */
+              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1st hit" << std::hex << data16[n]);
               errorHit.push_back(groupSize);
-              m_cond_hit1_error++;
-              ERRORS = (ERRORS | 0x10);
+              m_condHit1Error++;
+              errors = (errors | 0x10);
               sc=StatusCode::RECOVERABLE;
             }
-            if (d[n]&0x8) { /** Error in the second hit */
-              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 2nd hit" << std::hex << d[n]);
+            if (data16[n]&0x8) { /** Error in the second hit */
+              ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 2nd hit" << std::hex << data16[n]);
               errorHit.push_back(groupSize);
-              m_cond_hit2_error++;
-              ERRORS = (ERRORS | 0x20);
+              m_condHit2Error++;
+              errors = (errors | 0x20);
               sc=StatusCode::RECOVERABLE;
             }
             groupSize = 2;
           }
         } else {
           /** Expanded mode
-           * chip info from the first word of expanded cluster : 4 bits  d[n]>>11)0xF
-           * chip number == (d[n]>>11)&0x7 and chip side == (d[n]>>14)&0x1
-           * For example if d[n]>>11)0xF = 0101 => chip5 or chip5 on side0, d[n]>>11)0xF = 1101 => chip13 or chip5 on side1
+           * chip info from the first word of expanded cluster : 4 bits  data16[n]>>11)0xF
+           * chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
+           * For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
            */
 
-          if (not (d[n]&0x8)) {  /** 1st hit cluster expanded */
+          if (not (data16[n]&0x8)) {  /** 1st hit cluster expanded */
             m_firstExpHitNumber++;
-            chip = ((d[n]>>11)&0x7);  
-            side = ((d[n]>>14)&0x1);
-            strip = chip*128 + ((d[n]>>4)&0x7F);
-            tbin = d[n]&0x7; /** Real way for obtaining tbin info */
+            chip = ((data16[n]>>11)&0x7);  
+            side = ((data16[n]>>14)&0x1);
+            strip = chip*128 + ((data16[n]>>4)&0x7F);
+            timeBin = data16[n]&0x7; /** Real way for obtaining timeBin info */
       
             if (chip>5) {
               ATH_MSG_DEBUG("Expanded hit: First hit xxx ERROR chip Nb = " << chip << " > 5");   
-              m_chip_number_error++;
-              addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              m_chipNumberError++;
+              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               continue;
             }
       
 
             /** -------------- Search for redundancy only for the master chip */
-            if ((side==1) and ((linkNb%2)==0))  {
-              linkNb++;
+            if ((side==1) and ((linkNumber%2)==0))  {
+              linkNumber++;
             }
-            if ((side==0) and ((linkNb%2)!=0)) {
-              linkNb--;
+            if ((side==0) and ((linkNumber%2)!=0)) {
+              linkNumber--;
             }
-            onlineId = ((robid & 0xFFFFFF) | (linkNb << 24)); 
+            onlineID = ((robID & 0xFFFFFF) | (linkNumber << 24)); 
             groupSize =  1;
-            const int rdoMade{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+            const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
-              addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             } else {
               saved[side*768+strip] = rdoMade; 
             }
             groupSize = 0;
           } else { /** next hits cluster expanded */
-            if (d[n]&0x80) { /** paired hits */
+            if (data16[n]&0x80) { /** paired hits */
               if (strip > 767) {
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
                 sc=StatusCode::RECOVERABLE;
                 ATH_MSG_DEBUG("Expanded mode - strip number out of range");
                 continue;
@@ -514,28 +515,28 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               m_evenExpHitNumber++;
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: paired hits xxx ERROR chip Nb = " << chip << " > 5");  
-                m_chip_number_error++;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                m_chipNumberError++;
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
                 continue;
               }
               /** first hit from the pair  */
               strip++;
-              tbin = d[n]&0x7;
+              timeBin = data16[n]&0x7;
               groupSize = 1;
-              const int rdoMade1{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade1{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade1 == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
                 saved[side*768+strip] = rdoMade1;
               }
               /** second hit from the pair */
               strip++;
-              tbin = ((d[n] >> 4) & 0x7);
-              const int rdoMade2{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              timeBin = ((data16[n] >> 4) & 0x7);
+              const int rdoMade2{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade2 == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
                 saved[side*768+strip] = rdoMade2;
               }
@@ -544,17 +545,17 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               m_lastExpHitNumber++;
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: last hit xxx ERROR chip Nb = " << chip << " > 5");  
-                m_chip_number_error++;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                m_chipNumberError++;
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
                 continue;
               }     
               strip++;
-              tbin = (d[n]&0x7);
+              timeBin = (data16[n]&0x7);
               groupSize = 1;
-              const int rdoMade{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+              const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               } else {
                 saved[side*768+strip] = rdoMade; 
               }
@@ -568,15 +569,15 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
       ///---------------------------------------------------------------------
       /// Header
       ///---------------------------------------------------------------------
-      else if (((d[n]>>13)&0x7) == 0x1) {
+      else if (((data16[n]>>13)&0x7) == 0x1) {
         foundHeader=true;
   
-        m_headnumber++;
-        if (saved[side*768+strip]==false and oldstrip>=0) {
-          const int rdoMade{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+        m_headNumber++;
+        if (saved[side*768+strip]==false and oldStrip>=0) {
+          const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
           if (rdoMade == -1) {
             sc=StatusCode::RECOVERABLE;
-            addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           } else {
             saved[side*768+strip] = rdoMade; 
           }
@@ -584,70 +585,70 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   
         /** Everything is set to default for a new hunt of RDO */
         strip =0;
-        oldstrip = -1;
-        oldside = -1;
+        oldStrip = -1;
+        oldSide = -1;
         groupSize = 0;
-        ERRORS = 0;
+        errors = 0;
         memset(saved,0,768*2);
         errorHit.clear();
 
         /** Link Number (or stream) in the ROD fragment */
-        const int rodlinkNb{static_cast<int>(d[n] & 0x7F)};
+        const int rodlinkNumber{static_cast<int>(data16[n] & 0x7F)};
 
         /** This is the real calculation for the offline  */
-        linkNb = (((rodlinkNb >>4)&0x7)*12+(rodlinkNb &0xF));
-        onlineId = ((robid & 0xFFFFFF)|(linkNb << 24));     
-        if ((onlineId ==0) or (linkNb > 95)) {
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+        linkNumber = (((rodlinkNumber >>4)&0x7)*12+(rodlinkNumber &0xF));
+        onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));     
+        if ((onlineID ==0) or (linkNumber > 95)) {
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           sc=StatusCode::RECOVERABLE;
-          ATH_MSG_DEBUG("Header: xxx Link nb out of range (skipping following data)" << std::dec << linkNb);
+          ATH_MSG_DEBUG("Header: xxx Link number out of range (skipping following data)" << std::dec << linkNumber);
           break;
         } else {
-          currentLinkIdHash = m_cabling->getHashFromOnlineId(onlineId);
+          currentLinkIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
         /// look for masked off links - bit 7
-        if (d[n] >> 7 & 0x1) {
-          ATH_MSG_DEBUG("Masked link " << onlineId << " " << currentLinkIdHash);
+        if (data16[n] >> 7 & 0x1) {
+          ATH_MSG_DEBUG("Masked link " << onlineID << " " << currentLinkIDHash);
           //no counter increment here, is that correct? (sar)
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::MaskedLink, errs);
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::MaskedLink, errs);
           sc=StatusCode::RECOVERABLE; 
         }
-        if (d[n]&0x800) {
-          ATH_MSG_DEBUG("    Header: xxx TimeOut Error " << currentLinkIdHash);
-          m_head_error_timeout++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::TimeOutError, errs);
+        if (data16[n]&0x800) {
+          ATH_MSG_DEBUG("    Header: xxx TimeOut Error " << currentLinkIDHash);
+          m_headErrorTimeout++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TimeOutError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if (d[n]&0x1000) {
-          ATH_MSG_DEBUG("    Header: xxx Preamble Error " << currentLinkIdHash);
-          m_head_error_preamb++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::PreambleError, errs);
+        if (data16[n]&0x1000) {
+          ATH_MSG_DEBUG("    Header: xxx Preamble Error " << currentLinkIDHash);
+          m_headErrorPreamble++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::PreambleError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if (d[n]&0x400) {
-          ATH_MSG_DEBUG("    Header: xxx LVL1 ID Error " << currentLinkIdHash);
-          m_head_error_lvl1id++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::LVL1IDError, errs);
+        if (data16[n]&0x400) {
+          ATH_MSG_DEBUG("    Header: xxx LVL1 ID Error " << currentLinkIDHash);
+          m_headErrorLvl1ID++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::LVL1IDError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if (d[n]&0x200) {
-          ATH_MSG_DEBUG("    Header: xxx BCID Error " << currentLinkIdHash);
-          m_head_error_bcid++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::BCIDError, errs);
+        if (data16[n]&0x200) {
+          ATH_MSG_DEBUG("    Header: xxx BCID Error " << currentLinkIDHash);
+          m_headErrorBCID++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::BCIDError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if ((d[n]&0xF) > 11) {
-          ATH_MSG_DEBUG("    Header: xxx Error in formatter " << currentLinkIdHash);
-          m_head_error_formatter++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::FormatterError, errs);
+        if ((data16[n]&0xF) > 11) {
+          ATH_MSG_DEBUG("    Header: xxx Error in formatter " << currentLinkIDHash);
+          m_headErrorFormatter++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::FormatterError, errs);
           sc=StatusCode::RECOVERABLE;
         }
 
-        condensedMode = static_cast<bool>(d[n]&0x100);
+        condensedMode = static_cast<bool>(data16[n]&0x100);
 
         continue;
   
@@ -656,39 +657,39 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
       ///---------------------------------------------------------------------
       /// trailer
       ///---------------------------------------------------------------------
-      else if (((d[n]>>13)&0x7) == 0x2) {
+      else if (((data16[n]>>13)&0x7) == 0x2) {
         foundHeader=false;
   
-        m_trailnumber++;
+        m_trailerNumber++;
         //ErrorTrailer = false;
   
-        if (d[n]&0x1000) {
+        if (data16[n]&0x1000) {
           //ErrorTrailer = true;
-          ATH_MSG_DEBUG("    Trailer: xxx Trailer ERROR " << std::hex << d[n]);
-          m_trail_error_bit++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::TrailerError, errs);
+          ATH_MSG_DEBUG("    Trailer: xxx Trailer ERROR " << std::hex << data16[n]);
+          m_trailerErrorBit++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if (d[n]&0x800) {
+        if (data16[n]&0x800) {
           //ErrorTrailer = true;
           /** no data should appear between header and trailer
               See 1.2.2 Formatter FPGA - Serial Data Decoding and Formatting of
               http://www-eng.lbl.gov/~jmjoseph/Atlas-SiROD/Manuals/usersManual-v164.pdf */
-          ATH_MSG_DEBUG("    Trailer: xxx Header-Trailer limit ERROR " << std::hex << d[n]);
-          m_trail_error_limit++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::HeaderTrailerLimitError, errs);
+          ATH_MSG_DEBUG("    Trailer: xxx Header-Trailer limit ERROR " << std::hex << data16[n]);
+          m_trailerErrorLimit++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::HeaderTrailerLimitError, errs);
           sc=StatusCode::RECOVERABLE;
         }
   
-        if (d[n]&0x400) {
+        if (data16[n]&0x400) {
           //ErrorTrailer = true; /** not sure if there are hit elements before (probably yes but in principle they are fine) */
-          ATH_MSG_DEBUG("    Trailer: xxx Data Overflow ERROR " << std::hex << d[n]);
-          m_trail_error_overflow++;
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::TrailerOverflowError, errs);
+          ATH_MSG_DEBUG("    Trailer: xxx Data Overflow ERROR " << std::hex << data16[n]);
+          m_trailerErrorOverflow++;
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerOverflowError, errs);
           sc=StatusCode::RECOVERABLE;
         }
-        if (d[n] & 0xF) {
+        if (data16[n] & 0xF) {
           // fisrt temporarily masked chip information
           // 0 means no masked chip (always has been 0 until April 2017)
           // 
@@ -709,7 +710,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           // 6 means chip 5 is temporarily masked. 
           // 7 means chips 6-11, 0-5 are temporarily masked. 
           // 12 means chips 11, 0-5 are temporarily masked. 
-          setFirstTempMaskedChip(currentLinkIdHash, (d[n] & 0xF), errs);
+          setFirstTempMaskedChip(currentLinkIDHash, (data16[n] & 0xF), errs);
         }
         continue; 
       }
@@ -719,97 +720,97 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
       /// 000xxxxxxFFFFEEE
       /// 000: FlaggedABCD error: xxxxxxx not used, FFFF: chip, EEE: error code
       ///---------------------------------------------------------------------
-      else if (((d[n]>>13)&0x7) == 0x0) {
-        chip = ((d[n]>>3)&0xF);
-        ABCerror = d[n]&0x7; 
+      else if (((data16[n]>>13)&0x7) == 0x0) {
+        chip = ((data16[n]>>3)&0xF);
+        abcError = data16[n]&0x7; 
         /** no data should appear for that chip but how do we 
          * want to transmit this information ? */
-        IdentifierHash flagIdHash{0};
-        if (onlineId == 0) {
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+        IdentifierHash flagIDHash{0};
+        if (onlineID == 0) {
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           continue;
         } else {
-          flagIdHash = m_cabling->getHashFromOnlineId(onlineId);
+          flagIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
-        ATH_MSG_DEBUG(" xxx Flagged ABCD ERROR in chip " << chip << " Error code ABCerror " << ABCerror << " Link Nb (or Stream) "<<linkNb);
-        m_flag_error_bit++;
+        ATH_MSG_DEBUG(" xxx Flagged ABCD ERROR in chip " << chip << " Error code abcError " << abcError << " Link Number (or Stream) "<<linkNumber);
+        m_flagErrorBit++;
         // Error code of ABCD error should be 1, 2, 4 or 7.
-        if (ABCerror!=0x1 and ABCerror!=0x2 and ABCerror!=0x4 and ABCerror!=0x7) {
-          ATH_MSG_DEBUG("ABCD error has an invalid error code " << ABCerror <<
-                        " the 16-bit word is 0x" << std::hex << d[n] << std::dec << " for hash " << flagIdHash);
-          addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
+        if (abcError!=0x1 and abcError!=0x2 and abcError!=0x4 and abcError!=0x7) {
+          ATH_MSG_DEBUG("ABCD error has an invalid error code " << abcError <<
+                        " the 16-bit word is 0x" << std::hex << data16[n] << std::dec << " for hash " << flagIDHash);
+          addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
         } else {
           // Chip is 4 bits. The highest bit 3 represents side. Chip 0-5 on side 0 and chip 8-13 on side 1.
-          const unsigned int side_ABCDError{static_cast<unsigned int>(chip/8)};
-          if (flagIdHash.value()%2!=side_ABCDError) {
+          const unsigned int sideABCDError{static_cast<unsigned int>(chip/8)};
+          if (flagIDHash.value()%2!=sideABCDError) {
             // If the sides from the ABCD error and online ID are different,
             // the module is expected to read side 0 via link 1 and side 1 and via link 0.
             // Hash Id is flipped.
-            ATH_MSG_DEBUG("ABCD error and online ID have different side information for hash " << flagIdHash << ". " <<
-                          side_ABCDError << " from ABCD error and " << flagIdHash.value()%2 << " from online ID");
-            flagIdHash = (flagIdHash.value()/2)*2+side_ABCDError;
+            ATH_MSG_DEBUG("ABCD error and online ID have different side information for hash " << flagIDHash << ". " <<
+                          sideABCDError << " from ABCD error and " << flagIDHash.value()%2 << " from online ID");
+            flagIDHash = (flagIDHash.value()/2)*2+sideABCDError;
           }
           // Chip should be 0-5 or 8-13.
           if (chip%8>=6) {
             ATH_MSG_DEBUG("ABCD error has an invalid chip 0x" << std::hex << chip << std::dec <<
-                          " the 16-bit word is 0x" << std::hex << d[n] << std::dec <<
-                          " for hash " << flagIdHash.value());
-            addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
+                          " the 16-bit word is 0x" << std::hex << data16[n] << std::dec <<
+                          " for hash " << flagIDHash.value());
+            addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
           } else {
-            if (     ABCerror==0x1) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Error1, errs);
-            else if (ABCerror==0x2) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Error2, errs);
-            else if (ABCerror==0x4) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Error4, errs);
-            else if (ABCerror==0x7) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Error7, errs);
-            if (     chip%8==0) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip0, errs);
-            else if (chip%8==1) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip1, errs);
-            else if (chip%8==2) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip2, errs);
-            else if (chip%8==3) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip3, errs);
-            else if (chip%8==4) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip4, errs);
-            else if (chip%8==5) addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError_Chip5, errs);
+            if (     abcError==0x1) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error1, errs);
+            else if (abcError==0x2) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error2, errs);
+            else if (abcError==0x4) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error4, errs);
+            else if (abcError==0x7) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error7, errs);
+            if (     chip%8==0) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip0, errs);
+            else if (chip%8==1) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip1, errs);
+            else if (chip%8==2) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip2, errs);
+            else if (chip%8==3) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip3, errs);
+            else if (chip%8==4) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip4, errs);
+            else if (chip%8==5) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip5, errs);
           }
         }
-        addSingleError(flagIdHash, SCT_ByteStreamErrors::ABCDError, errs);
+        addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError, errs);
         sc=StatusCode::RECOVERABLE;
         continue;
-      } else if (((d[n]>>13)&0x7) == 0x3) {
+      } else if (((data16[n]>>13)&0x7) == 0x3) {
         ///---------------------------------------------------------------------
         /// Raw Data
         ///---------------------------------------------------------------------
-        IdentifierHash rawIdHash{0};
-        if (onlineId == 0) {
-          addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+        IdentifierHash rawIDHash{0};
+        if (onlineID == 0) {
+          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           continue;
         } else {
-          rawIdHash = m_cabling->getHashFromOnlineId(onlineId);
+          rawIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
 
-        ATH_MSG_DEBUG(" xxx Raw Data Mode " << std::hex << d[n] << std::dec << ": Config Data Mode ");
+        ATH_MSG_DEBUG(" xxx Raw Data Mode " << std::hex << data16[n] << std::dec << ": Config Data Mode ");
         /** too many errors in the BS for the ROD to decode the data */
-        m_config_data_bit++;
-        addSingleError(rawIdHash, SCT_ByteStreamErrors::RawError, errs);
+        m_configDataBit++;
+        addSingleError(rawIDHash, SCT_ByteStreamErrors::RawError, errs);
         sc=StatusCode::RECOVERABLE;
         continue;
       } else {
         ATH_MSG_DEBUG("Data word format unknown ");
-        m_unknown_data_format++;
-        addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+        m_unknownDataFormat++;
+        addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
         sc=StatusCode::RECOVERABLE;
       }
     } //end of 16-bit word loop
   }   //end of 32-bit word loop
 
   /** create RDO of the last ink or stream of the event */
-  if (saved[side*768+strip]==false and oldstrip>=0) {
-    const int rdoMade{makeRDO(strip, groupSize, tbin, onlineId, ERRORS, rdoIdc, cache, errorHit)};
+  if (saved[side*768+strip]==false and oldStrip>=0) {
+    const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
     if (rdoMade == -1) {
       sc=StatusCode::RECOVERABLE;
-      addSingleError(currentLinkIdHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+      addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
     } else {
       saved[side*768+strip] = rdoMade; 
     }
   }
 
-  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::CondensedMode, robid, condensedMode);
+  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::CondensedMode, robID, condensedMode);
 
   if (sc.isFailure()) ATH_MSG_DEBUG("One or more ByteStream errors found ");
   return sc;
@@ -821,21 +822,21 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
  *            on as StatusCode::RECOVERABLE by fillCollection().
  */
 
-int SCT_RodDecoder::makeRDO(int strip, int groupSize, int tbin, uint32_t onlineId, int ERRORS,
-                            ISCT_RDO_Container& rdoIdc,
+int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onlineID, int errors,
+                            ISCT_RDO_Container& rdoIDCont,
                             CacheHelper& cache,
                             const std::vector<int>& errorHit) const
 {
-  if (onlineId == 0x0) {
+  if (onlineID == 0x0) {
     ATH_MSG_WARNING("No link header found, possibly corrupt ByteStream.  Will not try to make RDO");
     return -1;
   }
   /** get offlineId from the link number and ROB number */
-  const IdentifierHash idCollHash{m_cabling->getHashFromOnlineId(onlineId)};
+  const IdentifierHash idCollHash{m_cabling->getHashFromOnlineId(onlineID)};
   if (not idCollHash.is_valid()) {
-    m_numUnknownOfflineId++;
+    m_numUnknownOfflineID++;
     ATH_MSG_ERROR("Unknown OfflineId for OnlineId -> cannot create RDO");
-    ATH_MSG_WARNING("Unknown OfflineId for OnlineId " << std::hex << onlineId << " -> cannot create RDO" << std::dec);
+    ATH_MSG_WARNING("Unknown OfflineId for OnlineId " << std::hex << onlineID << " -> cannot create RDO" << std::dec);
     return -1;
   }
 
@@ -852,8 +853,8 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int tbin, uint32_t onlineI
     } else if (idCollHash != cache.lastHash) {
       cache.lastHash = idCollHash;
       /** maybe the new hash is not in the list, so test it */
-      std::vector<IdentifierHash>::const_iterator p{find(cache.vecHash->begin(), cache.vecHash->end(), idCollHash)};
-      if (p == cache.vecHash->end()) {
+      std::vector<IdentifierHash>::const_iterator idHashIterator{find(cache.vecHash->begin(), cache.vecHash->end(), idCollHash)};
+      if (idHashIterator == cache.vecHash->end()) {
         ATH_MSG_VERBOSE("Collection for Hash not to be decoded, skip");
         /** remember this one, so that we do not find(...) forever */
         cache.skipHash = idCollHash;
@@ -862,7 +863,7 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int tbin, uint32_t onlineI
     }
   }
 
-  if(rdoIdc.hasExternalCache() and rdoIdc.tryFetch(idCollHash)){
+  if(rdoIDCont.hasExternalCache() and rdoIDCont.tryFetch(idCollHash)){
     ATH_MSG_DEBUG("Hash already in collection - cache hit " << idCollHash);
     return 0;
   }
@@ -874,27 +875,27 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int tbin, uint32_t onlineI
   }
 
   /** get identifier from the hash, this is not nice */
-  const Identifier idColl{m_sct_id->wafer_id(idCollHash)};
-  const Identifier iddigit{m_sct_id->strip_id(idColl, strip)};
-  if (not m_sct_id->is_sct(iddigit)) {
+  const Identifier idColl{m_sctID->wafer_id(idCollHash)};
+  const Identifier idDigit{m_sctID->strip_id(idColl, strip)};
+  if (not m_sctID->is_sct(idDigit)) {
     ATH_MSG_WARNING("Cluster with invalid Identifier. Will not make RDO");
     return -1;
   }
-  const unsigned int rawDataWord{static_cast<unsigned int>(groupSize | (strip << 11) | (tbin <<22) | (ERRORS << 25))};
+  const unsigned int rawDataWord{static_cast<unsigned int>(groupSize | (strip << 11) | (timeBin <<22) | (errors << 25))};
 
-  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << idColl.getString() << ":-> " << m_sct_id->print_to_string(iddigit) << std::dec);
+  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << idColl.getString() << ":-> " << m_sctID->print_to_string(idDigit) << std::dec);
 
 
 
-  SCT_RDO_Collection* col{nullptr};
-  ATH_CHECK(rdoIdc.naughtyRetrieve(idCollHash, col), 0); // Returns null if not present
+  SCT_RDO_Collection* sctRDOColl{nullptr};
+  ATH_CHECK(rdoIDCont.naughtyRetrieve(idCollHash, sctRDOColl), 0); // Returns null if not present
 
-  if (col==nullptr) {
+  if (sctRDOColl==nullptr) {
     ATH_MSG_DEBUG(" Collection ID = " << idCollHash << " does not exist, create it ");
     /** create new collection */   
-    col = new SCT_RDO_Collection(idCollHash);
-    col->setIdentifier(idColl);
-    StatusCode sc{rdoIdc.addCollection(col, idCollHash)};
+    sctRDOColl = new SCT_RDO_Collection(idCollHash);
+    sctRDOColl->setIdentifier(idColl);
+    StatusCode sc{rdoIDCont.addCollection(sctRDOColl, idCollHash)};
     ATH_MSG_DEBUG("Adding " << idCollHash);
     if (sc.isFailure()){
       ATH_MSG_ERROR("failed to add SCT RDO collection to container");
@@ -905,16 +906,16 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int tbin, uint32_t onlineI
    * into Collection. 
    */
   m_nRDOs++;
-  col->push_back(std::make_unique<SCT3_RawData>(iddigit, rawDataWord, &errorHit));
+  sctRDOColl->push_back(std::make_unique<SCT3_RawData>(idDigit, rawDataWord, &errorHit));
   return 1;
 }
 
 void 
-SCT_RodDecoder::addRODError(uint32_t rodid, int errorType,
+SCT_RodDecoder::addRODError(uint32_t rodID, int errorType,
                             InDetBSErrContainer* errs) const
 {
   std::vector<IdentifierHash> idHashes;
-  m_cabling->getHashesForRod(idHashes, rodid);
+  m_cabling->getHashesForRod(idHashes, rodID);
   for (const IdentifierHash& hash: idHashes) {
     addSingleError(hash, errorType, errs);
   }
@@ -934,9 +935,9 @@ SCT_RodDecoder::addSingleError(const IdentifierHash& idHash,
 }
 
 void
-SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const {
-  if (not hashId.is_valid()) {
-    ATH_MSG_INFO("setFirstTempMaskedChip hashId " << hashId << " is invalid.");
+SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const {
+  if (not hashID.is_valid()) {
+    ATH_MSG_INFO("setFirstTempMaskedChip hashID " << hashID << " is invalid.");
     return;
   }
   if (firstTempMaskedChip==0) {
@@ -945,24 +946,24 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned in
   }
 
   // wafer hash -> wafer id -> module id -> wafer hash on side-0, wafer hash on side-1
-  const Identifier wafId{m_sct_id->wafer_id(hashId)};
-  const Identifier moduleId{m_sct_id->module_id(wafId)};
+  const Identifier waferID{m_sctID->wafer_id(hashID)};
+  const Identifier moduleID{m_sctID->module_id(waferID)};
 
   // Side 0
-  IdentifierHash hash_side0;
-  m_sct_id->get_hash(moduleId, hash_side0, &m_cntx_sct);
-  unsigned int firstTempMaskedChip_side0{0};
-  if (hashId==hash_side0) firstTempMaskedChip_side0 = firstTempMaskedChip;
+  IdentifierHash hashSide0;
+  m_sctID->get_hash(moduleID, hashSide0, &m_contextSCT);
+  unsigned int firstTempMaskedChipSide0{0};
+  if (hashID==hashSide0) firstTempMaskedChipSide0 = firstTempMaskedChip;
 
   // Side 1
-  IdentifierHash hash_side1;
-  m_sct_id->get_other_side(hash_side0, hash_side1);
-  unsigned int firstTempMaskedChip_side1{0};
-  if (hashId==hash_side1) firstTempMaskedChip_side1 = firstTempMaskedChip;
+  IdentifierHash hashSide1;
+  m_sctID->get_other_side(hashSide0, hashSide1);
+  unsigned int firstTempMaskedChipSide1{0};
+  if (hashID==hashSide1) firstTempMaskedChipSide1 = firstTempMaskedChip;
 
   int type{0};
   // Check if Rx redundancy is used or not in this module
-  const std::pair<bool, bool> badLinks{m_configTool->badLinks(hashId)};
+  const std::pair<bool, bool> badLinks{m_configTool->badLinks(hashID)};
   if (badLinks.first xor badLinks.second) {
     // Rx redundancy is used in this module.
     if (badLinks.first and not badLinks.second) {
@@ -987,7 +988,7 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned in
   // modified0 and modified1 functions of SCT_ReadoutTool.cxx and
   // Table 3.8 of CERN-THESIS-2008-001 https://cds.cern.ch/record/1078223
   // However, there are two exceptions of the exceptions.
-  const unsigned long long fullSerialNumber{m_cabling->getSerialNumberFromHash(hashId).to_ulonglong()};
+  const unsigned long long fullSerialNumber{m_cabling->getSerialNumberFromHash(hashID).to_ulonglong()};
   if (// Readout through link-0
       fullSerialNumber==20220170200183 or // hash=4662 bec=0 layer=2 eta= 6 phi=39
       fullSerialNumber==20220330200606 or // hash=5032 bec=0 layer=3 eta=-2 phi= 7
@@ -1044,21 +1045,21 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned in
     // side 1 via link-0. If the first masked chip value on side 1 (0) is
     // between 1 to 6 (7 to 12), it indicates the module is a special one.
     // In that case, information is swapped.
-    if ((6<firstTempMaskedChip_side0 and firstTempMaskedChip_side0<=12) or
-        (0<firstTempMaskedChip_side1 and firstTempMaskedChip_side1<= 6)) {
-      const unsigned int swapFirstTempMaskedChip_side0{firstTempMaskedChip_side0};
-      firstTempMaskedChip_side0 = firstTempMaskedChip_side1;
-      firstTempMaskedChip_side1 = swapFirstTempMaskedChip_side0;
+    if ((6<firstTempMaskedChipSide0 and firstTempMaskedChipSide0<=12) or
+        (0<firstTempMaskedChipSide1 and firstTempMaskedChipSide1<= 6)) {
+      const unsigned int swapFirstTempMaskedChipSide0{firstTempMaskedChipSide0};
+      firstTempMaskedChipSide0 = firstTempMaskedChipSide1;
+      firstTempMaskedChipSide1 = swapFirstTempMaskedChipSide0;
     }
 
-    if (firstTempMaskedChip_side0>0) {
-      for (unsigned int iChip{firstTempMaskedChip_side0-1}; iChip<6; iChip++) {
-        addSingleError(hash_side0, SCT_ByteStreamErrors::TempMaskedChip0+iChip, errs);
+    if (firstTempMaskedChipSide0>0) {
+      for (unsigned int iChip{firstTempMaskedChipSide0-1}; iChip<6; iChip++) {
+        addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+iChip, errs);
       }
     }
-    if (firstTempMaskedChip_side1>6) {
-      for (unsigned int iChip{firstTempMaskedChip_side1-1}; iChip<12; iChip++) {
-        addSingleError(hash_side1, SCT_ByteStreamErrors::TempMaskedChip0+iChip-6, errs);
+    if (firstTempMaskedChipSide1>6) {
+      for (unsigned int iChip{firstTempMaskedChipSide1-1}; iChip<12; iChip++) {
+        addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+iChip-6, errs);
       }
     }
   } else {
@@ -1068,19 +1069,19 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned in
       int jChip{chipOrder[type][iChip]};
       if (jChip==static_cast<int>(firstTempMaskedChip-1)) toBeMasked = true;
       if (toBeMasked) {
-        if (jChip<6) addSingleError(hash_side0, SCT_ByteStreamErrors::TempMaskedChip0+jChip, errs);
-        else         addSingleError(hash_side1, SCT_ByteStreamErrors::TempMaskedChip0+jChip-6, errs);
+        if (jChip<6) addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+jChip, errs);
+        else         addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+jChip-6, errs);
       }
     }
   }
 
-  ATH_MSG_VERBOSE("setFirstTempMaskedChip Hash " << hashId
-                  << " SerialNumber " << m_cabling->getSerialNumberFromHash(hashId).str()
-                  << " moduleId " << moduleId
-                  << " barrel_ec " << m_sct_id->barrel_ec(wafId)
-                  << " layer_disk " << m_sct_id->layer_disk(wafId)
-                  << " eta_module " << m_sct_id->eta_module(wafId)
-                  << " phi_module " << m_sct_id->phi_module(wafId)
-                  << " side " << m_sct_id->side(wafId)
+  ATH_MSG_VERBOSE("setFirstTempMaskedChip Hash " << hashID
+                  << " SerialNumber " << m_cabling->getSerialNumberFromHash(hashID).str()
+                  << " moduleID " << moduleID
+                  << " barrel_ec " << m_sctID->barrel_ec(waferID)
+                  << " layer_disk " << m_sctID->layer_disk(waferID)
+                  << " eta_module " << m_sctID->eta_module(waferID)
+                  << " phi_module " << m_sctID->phi_module(waferID)
+                  << " side " << m_sctID->side(waferID)
                   << " firstTempMaskedChip " << firstTempMaskedChip);
 }
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index 796dc65ff3b8..521b13ef67a4 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -66,7 +66,7 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
    * rdoIdc, errs, and bsFracCont are updated based on robFrag and vecHash.
    **/
   virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
-                                    ISCT_RDO_Container& rdoIdc,
+                                    ISCT_RDO_Container& rdoIDCont,
                                     InDetBSErrContainer* errs,
                                     SCT_ByteStreamFractionContainer* bsFracCont,
                                     const std::vector<IdentifierHash>* vecHash = nullptr) const override;
@@ -74,24 +74,24 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
  private:
   /// method that builds the RawData RDO and add it to the collection 
   /// rdoIdc and cache are updated based on other arguments
-  int makeRDO(int strip, int groupSize, int tbin,
-              uint32_t onlineId, int ERRORS,
-              ISCT_RDO_Container& rdoIdc,
+  int makeRDO(int strip, int groupSize, int timeBin,
+              uint32_t onlineID, int errors,
+              ISCT_RDO_Container& rdoIDCont,
               CacheHelper& cache,
               const std::vector<int>& errorHit) const;
 
   /// add an error for each wafer in a problematic ROD.
-  void addRODError(uint32_t rodid, int errorType,
+  void addRODError(uint32_t rodID, int errorType,
                    InDetBSErrContainer* errs) const;
   bool addSingleError(const IdentifierHash& idHash,
                       int bsErrorType,
                       InDetBSErrContainer* errs) const;
 
   /** Set first temporarily masked chip information from byte stream trailer */
-  void setFirstTempMaskedChip(const IdentifierHash& hashId, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const;
+  void setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const;
 
-  const SCT_ID* m_sct_id;
-  IdContext m_cntx_sct;
+  const SCT_ID* m_sctID;
+  IdContext m_contextSCT;
   ToolHandle<ISCT_CablingTool> m_cabling{this, "SCT_CablingTool", "SCT_CablingTool", "Tool to retrieve SCT Cabling"};
   ToolHandle<ISCT_ConfigurationConditionsTool> m_configTool{this, "ConfigTool",
       "SCT_ConfigurationConditionsTool/InDetSCT_ConfigurationConditionsTool", "Tool to retrieve SCT Configuration Tool"};
@@ -101,30 +101,30 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
   mutable std::atomic_uint m_firstExpHitNumber;     //!< Total number of first hit decoded in expanded mode
   mutable std::atomic_uint m_evenExpHitNumber;      //!< Total number of paired hit decoded in expanded mode
   mutable std::atomic_uint m_lastExpHitNumber;      //!< Total number of last hit decoded in expanded mode
-  mutable std::atomic_uint m_headnumber;            //!< Total number of decoded header data
-  mutable std::atomic_uint m_trailnumber;           //!< Total number of decoded trailer data
-  mutable std::atomic_uint m_head_error_bcid;       //!< Total number of bcid error in the header data
-  mutable std::atomic_uint m_head_error_lvl1id;     //!< Total number of lvl1id error in the header data
-  mutable std::atomic_uint m_head_error_timeout;    //!< Total number of timeout error in the header data
-  mutable std::atomic_uint m_head_error_formatter;  //!< Total number of formatter error in the header data
-  mutable std::atomic_uint m_head_error_preamb;     //!< Total number of preamble error in the header data
-  mutable std::atomic_uint m_trail_error_overflow;  //!< Total number of overflow error in the trailer data
-  mutable std::atomic_uint m_trail_error_limit;     //!< Total number of header trailer limit error in the trailer data
-  mutable std::atomic_uint m_trail_error_bit;       //!< Total number of trailer bit error
-  mutable std::atomic_uint m_config_data_bit;       //!< Total number of configuration data
-  mutable std::atomic_uint m_flag_error_bit;        //!< Total number of flag error data
-  mutable std::atomic_uint m_cond_hit1_error;       //!< Total number of first hit data error
-  mutable std::atomic_uint m_cond_hit2_error;       //!< Total number second hit data errors
-  mutable std::atomic_uint m_chip_number_error;     //!< Total number of chip number error
-  mutable std::atomic_uint m_unknown_data_format;   //!< Total number of unknown data format
+  mutable std::atomic_uint m_headNumber;            //!< Total number of decoded header data
+  mutable std::atomic_uint m_trailerNumber;           //!< Total number of decoded trailer data
+  mutable std::atomic_uint m_headErrorBCID;       //!< Total number of bcid error in the header data
+  mutable std::atomic_uint m_headErrorLvl1ID;     //!< Total number of lvl1id error in the header data
+  mutable std::atomic_uint m_headErrorTimeout;    //!< Total number of timeout error in the header data
+  mutable std::atomic_uint m_headErrorFormatter;  //!< Total number of formatter error in the header data
+  mutable std::atomic_uint m_headErrorPreamble;     //!< Total number of preamble error in the header data
+  mutable std::atomic_uint m_trailerErrorOverflow;  //!< Total number of overflow error in the trailer data
+  mutable std::atomic_uint m_trailerErrorLimit;     //!< Total number of header trailer limit error in the trailer data
+  mutable std::atomic_uint m_trailerErrorBit;       //!< Total number of trailer bit error
+  mutable std::atomic_uint m_configDataBit;       //!< Total number of configuration data
+  mutable std::atomic_uint m_flagErrorBit;        //!< Total number of flag error data
+  mutable std::atomic_uint m_condHit1Error;       //!< Total number of first hit data error
+  mutable std::atomic_uint m_condHit2Error;       //!< Total number second hit data errors
+  mutable std::atomic_uint m_chipNumberError;     //!< Total number of chip number error
+  mutable std::atomic_uint m_unknownDataFormat;   //!< Total number of unknown data format
   mutable std::atomic_uint m_nHits;
   mutable std::atomic_uint m_nRDOs;
   mutable std::atomic_uint m_maskedLinkNumber;
   mutable std::atomic_uint m_maskedRODNumber;
-  mutable std::atomic_uint m_RODClockErrorNumber;
+  mutable std::atomic_uint m_rodClockErrorNumber;
   mutable std::atomic_uint m_truncatedRODNumber;
   mutable std::atomic_uint m_numMissingLinkHeader;
-  mutable std::atomic_uint m_numUnknownOfflineId;
+  mutable std::atomic_uint m_numUnknownOfflineID;
   
   std::vector<bool> m_swapPhiReadoutDirection;
 };
-- 
GitLab


From 69fb4b3cb72b71077bcb982c828cebb15aee86ca Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Mon, 14 Jan 2019 15:16:57 +0100
Subject: [PATCH 082/163] Forward declaration instead of include where
 sufficient

According to ATLAS code guidelines about using forward declaration instead of including a header file [forward-declarations].
---
 .../SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h                  | 1 -
 .../SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx             | 2 ++
 .../InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
index a33288c33331..66c95f6ccb29 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
@@ -23,7 +23,6 @@
 #include "InDetByteStreamErrors/SCT_ByteStreamFractionContainer.h"
 
 class StatusCode;
-
 class IdentifierHash;
 
 class ISCT_RodDecoder : virtual public IAlgTool {
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index d57d692f7dc2..68f2b7dc479b 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -11,6 +11,8 @@
 #include "InDetReadoutGeometry/SiDetectorElement.h"
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 
+#include "Identifier/IdentifierHash.h"
+
 //STL
 #include <algorithm>
 #include <deque>
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index 521b13ef67a4..8e5c8648e15d 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -16,7 +16,6 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 
 #include "Identifier/IdContext.h"
-#include "Identifier/IdentifierHash.h"
 #include "InDetByteStreamErrors/InDetBSErrContainer.h"
 #include "SCT_Cabling/ISCT_CablingTool.h"
 #include "SCT_ConditionsData/SCT_ByteStreamErrors.h"
@@ -31,6 +30,7 @@
 #include <vector>
 
 class SCT_ID;
+class IdentifierHash;
 
 //using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
 /** @class SCT_RodDecoder
-- 
GitLab


From b8b40c9104e60caa4dcad46c8a56c4f6ca89facf Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Mon, 14 Jan 2019 15:32:29 +0100
Subject: [PATCH 083/163] Changed order of #include directives

According to ATLAS code guidelines about ordering of #include statements after dependency [include-ordering].
---
 .../SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h             | 7 +++----
 .../SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h          | 7 +++----
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
index 66c95f6ccb29..7538d0afd32c 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
@@ -11,17 +11,16 @@
 
 #ifndef INDETRAWDATABYTESTREAM_ISCT_RODDECODER_H 
 #define INDETRAWDATABYTESTREAM_ISCT_RODDECODER_H
-//STL
-#include <vector>
 
 #include "GaudiKernel/IAlgTool.h"
-//Cannot fwd declare SCT_RDO_Container due to typedef in that file 
+
 #include "InDetRawData/SCT_RDO_Container.h"
-//Cannot fwd declare RawEvent, due to typedef in the .h. Needed for OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment
 #include "ByteStreamData/RawEvent.h"
 #include "InDetByteStreamErrors/InDetBSErrContainer.h"
 #include "InDetByteStreamErrors/SCT_ByteStreamFractionContainer.h"
 
+#include <vector>
+
 class StatusCode;
 class IdentifierHash;
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index 8e5c8648e15d..f02c3989a728 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -15,22 +15,21 @@
 #include "SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h"
 #include "AthenaBaseComps/AthAlgTool.h"
 
-#include "Identifier/IdContext.h"
 #include "InDetByteStreamErrors/InDetBSErrContainer.h"
-#include "SCT_Cabling/ISCT_CablingTool.h"
 #include "SCT_ConditionsData/SCT_ByteStreamErrors.h"
+#include "SCT_Cabling/ISCT_CablingTool.h"
 #include "SCT_ConditionsTools/ISCT_ConfigurationConditionsTool.h"
+#include "Identifier/IdContext.h"
 
 #include "GaudiKernel/ToolHandle.h"
 
-//STL
 #include <atomic>
 #include <cstdint>
 #include <string>
 #include <vector>
 
-class SCT_ID;
 class IdentifierHash;
+class SCT_ID;
 
 //using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
 /** @class SCT_RodDecoder
-- 
GitLab


From 0912dfc5800c979bbd0377589af035a4f713292c Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Tue, 15 Jan 2019 14:57:57 +0100
Subject: [PATCH 084/163] Changed structure of if/else-tests for better
 readability

According to ATLAS code guidelines about if-statements [if-bracing].
---
 .../src/SCT_RodDecoder.cxx                    | 90 ++++++++++++-------
 1 file changed, 60 insertions(+), 30 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index 68f2b7dc479b..e03e31d3f334 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -297,7 +297,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -313,7 +314,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -336,7 +338,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
               addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-            } else {
+            } 
+            else {
               saved[oldSide*768+oldStrip] = rdoMade; 
             }
             oldStrip = strip;
@@ -345,7 +348,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           }
           groupSize+=nStripsInWord; // Split clusters have the same strip number.
      
-        } else if (condensedMode) {
+        } 
+        else if (condensedMode) {
     
           /** condensed mode
            *  chip info : 4 bits  data16[n]>>11)0xF
@@ -372,7 +376,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -388,7 +393,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -411,7 +417,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -427,7 +434,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               sc=StatusCode::RECOVERABLE;
             }
             groupSize = (groupSize>=2 ? groupSize : 1);
-          } else { /** 2-hits */
+          } 
+          else { /** 2-hits */
             if (strip > 767) {
               addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               sc=StatusCode::RECOVERABLE;
@@ -444,7 +452,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[oldSide*768+oldStrip] = rdoMade; 
               }
               oldStrip = strip;
@@ -467,7 +476,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             }
             groupSize = 2;
           }
-        } else {
+        } 
+        else {
           /** Expanded mode
            * chip info from the first word of expanded cluster : 4 bits  data16[n]>>11)0xF
            * chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
@@ -502,11 +512,13 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
               addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-            } else {
+            } 
+            else {
               saved[side*768+strip] = rdoMade; 
             }
             groupSize = 0;
-          } else { /** next hits cluster expanded */
+          } 
+          else { /** next hits cluster expanded */
             if (data16[n]&0x80) { /** paired hits */
               if (strip > 767) {
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
@@ -529,7 +541,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade1 == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[side*768+strip] = rdoMade1;
               }
               /** second hit from the pair */
@@ -539,11 +552,13 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade2 == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[side*768+strip] = rdoMade2;
               }
               groupSize = 0;
-            } else {  /** Last hit of the cluster */
+            } 
+            else {  /** Last hit of the cluster */
               m_lastExpHitNumber++;
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: last hit xxx ERROR chip Nb = " << chip << " > 5");  
@@ -558,7 +573,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-              } else {
+              } 
+              else {
                 saved[side*768+strip] = rdoMade; 
               }
               groupSize = 0; 
@@ -580,7 +596,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           if (rdoMade == -1) {
             sc=StatusCode::RECOVERABLE;
             addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-          } else {
+          } 
+          else {
             saved[side*768+strip] = rdoMade; 
           }
         }
@@ -605,7 +622,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           sc=StatusCode::RECOVERABLE;
           ATH_MSG_DEBUG("Header: xxx Link number out of range (skipping following data)" << std::dec << linkNumber);
           break;
-        } else {
+        } 
+        else {
           currentLinkIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
         /// look for masked off links - bit 7
@@ -731,7 +749,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         if (onlineID == 0) {
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           continue;
-        } else {
+        } 
+        else {
           flagIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
         ATH_MSG_DEBUG(" xxx Flagged ABCD ERROR in chip " << chip << " Error code abcError " << abcError << " Link Number (or Stream) "<<linkNumber);
@@ -741,7 +760,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           ATH_MSG_DEBUG("ABCD error has an invalid error code " << abcError <<
                         " the 16-bit word is 0x" << std::hex << data16[n] << std::dec << " for hash " << flagIDHash);
           addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
-        } else {
+        } 
+        else {
           // Chip is 4 bits. The highest bit 3 represents side. Chip 0-5 on side 0 and chip 8-13 on side 1.
           const unsigned int sideABCDError{static_cast<unsigned int>(chip/8)};
           if (flagIDHash.value()%2!=sideABCDError) {
@@ -758,7 +778,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
                           " the 16-bit word is 0x" << std::hex << data16[n] << std::dec <<
                           " for hash " << flagIDHash.value());
             addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
-          } else {
+          } 
+          else {
             if (     abcError==0x1) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error1, errs);
             else if (abcError==0x2) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error2, errs);
             else if (abcError==0x4) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error4, errs);
@@ -774,7 +795,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError, errs);
         sc=StatusCode::RECOVERABLE;
         continue;
-      } else if (((data16[n]>>13)&0x7) == 0x3) {
+      } 
+      else if (((data16[n]>>13)&0x7) == 0x3) {
         ///---------------------------------------------------------------------
         /// Raw Data
         ///---------------------------------------------------------------------
@@ -782,7 +804,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         if (onlineID == 0) {
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           continue;
-        } else {
+        } 
+        else {
           rawIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
 
@@ -792,7 +815,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         addSingleError(rawIDHash, SCT_ByteStreamErrors::RawError, errs);
         sc=StatusCode::RECOVERABLE;
         continue;
-      } else {
+      } 
+      else {
         ATH_MSG_DEBUG("Data word format unknown ");
         m_unknownDataFormat++;
         addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
@@ -807,7 +831,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
     if (rdoMade == -1) {
       sc=StatusCode::RECOVERABLE;
       addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
-    } else {
+    } 
+    else {
       saved[side*768+strip] = rdoMade; 
     }
   }
@@ -852,7 +877,8 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
     if (idCollHash == cache.skipHash) {
       ATH_MSG_VERBOSE("Collection for Hash not to be decoded, skip");
       return 0;
-    } else if (idCollHash != cache.lastHash) {
+    } 
+    else if (idCollHash != cache.lastHash) {
       cache.lastHash = idCollHash;
       /** maybe the new hash is not in the list, so test it */
       std::vector<IdentifierHash>::const_iterator idHashIterator{find(cache.vecHash->begin(), cache.vecHash->end(), idCollHash)};
@@ -971,14 +997,17 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned in
     if (badLinks.first and not badLinks.second) {
       // link-1 is broken
       type = 1;
-    } else if (badLinks.second and not badLinks.first) {
+    } 
+    else if (badLinks.second and not badLinks.first) {
       // link-0 is broken
       type = 2;
-    } else if (badLinks.first and badLinks.second) {
+    } 
+    else if (badLinks.first and badLinks.second) {
       // both link-0 and link-1 are working
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are working. But Rx redundancy is used... Why?");
       return;
-    } else {
+    } 
+    else {
       // both link-0 and link-1 are broken
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are broken. But data are coming... Why?");
       return;
@@ -1064,7 +1093,8 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned in
         addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+iChip-6, errs);
       }
     }
-  } else {
+  } 
+  else {
     // type=1, 2, 3, 4: cases using Rx redundancy
     bool toBeMasked{false};
     for (int iChip{0}; iChip<12; iChip++) {
-- 
GitLab


From 6072c2572c8696e4f3edde600d4cd672e5a4be2c Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Fri, 8 Feb 2019 15:34:08 +0100
Subject: [PATCH 085/163] Breaking up lines and statements that exceed
 character limits

According to ATLAS Coding Guidelines statements should not exceed
100 characters and lines should not exceed 120 characters.
If possible long lines or statements should be split up into
multiple ones [long-statements] [long-lines].
---
 .../src/SCT_RodDecoder.cxx                    | 172 +++++++++++++-----
 .../src/SCT_RodDecoder.h                      |  37 ++--
 2 files changed, 148 insertions(+), 61 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index e03e31d3f334..9388975e906c 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -97,37 +97,99 @@ SCT_RodDecoder::finalize() {
   
   /** print out summaries of data and errors decoded */
   ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_headNumber  <<" link headers found");
+  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_trailerNumber << " link trailers found");
 
-  ATH_MSG_INFO("SCT decoding bytestream summary: " << m_singleCondHitNumber << " single strips with hit in condensed mode");
-  ATH_MSG_INFO("SCT decoding bytestream summary: " << m_pairedCondHitNumber << " paired strips with hit in condensed mode");
+  ATH_MSG_INFO("SCT decoding bytestream summary: " 
+               << m_singleCondHitNumber << " single strips with hit in condensed mode");
+  ATH_MSG_INFO("SCT decoding bytestream summary: " 
+               << m_pairedCondHitNumber << " paired strips with hit in condensed mode");
+  ATH_MSG_INFO("SCT decoding bytestream summary: " 
+               << m_firstExpHitNumber   << " first strips with hit in expanded mode");
+  ATH_MSG_INFO("SCT decoding bytestream summary: " 
+               << m_evenExpHitNumber    << " consecutive paired strips with hit in expanded mode");
+  ATH_MSG_INFO("SCT decoding bytestream summary: " 
+               << m_lastExpHitNumber    << " last consecutive strip with hit in expanded mode");
+
+  if (m_headErrorBCID > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
+                  << m_headErrorLvl1ID    << " LVL1d errors found");
+  }
+  if (m_headErrorTimeout > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
+                  << m_headErrorTimeout   << " timeout errors found");
+  }
+  if (m_headErrorFormatter > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
+                  << m_headErrorFormatter << " formatter errors found");
+  }
+  if (m_headErrorPreamble > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
+                  << m_headErrorPreamble  << " preamble errors found");
+  }
+  if (m_maskedLinkNumber > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
+                  << m_maskedLinkNumber   << " masked links found");
+  }
 
-  ATH_MSG_INFO("SCT decoding bytestream summary: " << m_firstExpHitNumber << " first strips with hit in expanded mode");
-  ATH_MSG_INFO("SCT decoding bytestream summary: " << m_evenExpHitNumber << " consecutive paired strips with hit in expanded mode");
-  ATH_MSG_INFO("SCT decoding bytestream summary: " << m_lastExpHitNumber << " last consecutive strip with hit in expanded mode");
+  if (m_trailerErrorOverflow > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "         
+                  << m_trailerErrorOverflow << " trailer data overflow errors found");
+  }
+  if (m_trailerErrorLimit > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "         
+                  << m_trailerErrorLimit    << " header trailer limit errors found");
+  }
+  if (m_trailerErrorBit > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "         
+                  << m_trailerErrorBit      << " trailer bit errors found");
+  }
+
+  if (m_configDataBit > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: raw Data-> "        
+                  << m_configDataBit << " raw data found: Config data mode");
+  }
+
+  if (m_flagErrorBit > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: flag-> "              
+                  << m_flagErrorBit << " module link flag bit errors found");
+  }
+  
+  if (m_condHit1Error > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "             
+                  << m_condHit1Error   << " 1st hit error found in condensed mode");
+  }
+  if (m_condHit2Error > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "             
+                  << m_condHit2Error   << " 2nd hit error found in condensed mode");
+  }
+  if (m_chipNumberError > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "               
+                  << m_chipNumberError << " Chip number > 5 error found");
+  }
+
+  if (m_unknownDataFormat > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: unknown data-> "    
+                  << m_unknownDataFormat << " Unknown data format found");
+  }
+
+  if (m_rodClockErrorNumber > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: ROD status word-> " 
+                  << m_rodClockErrorNumber << " ROD clock errors found");
+  }
+  if (m_maskedRODNumber > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " 
+                  << m_maskedRODNumber     << " masked RODs found");
+  }
+  if (m_truncatedRODNumber > 0) {
+     ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " 
+                  << m_truncatedRODNumber  << " truncated ROBFragments");
+  }
 
-  ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_trailerNumber << " link trailers found");
-  if (m_headErrorBCID > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorLvl1ID << " LVL1d errors found");
-  if (m_headErrorTimeout > 0)   ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorTimeout << " timeout errors found");
-  if (m_headErrorFormatter > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorFormatter << " formatter errors found");
-  if (m_headErrorPreamble > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_headErrorPreamble << " preamble errors found");
-  if (m_maskedLinkNumber > 0)     ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "       << m_maskedLinkNumber << " masked links found");
-  if (m_trailerErrorOverflow > 0) ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorOverflow << " trailer data overflow errors found");
-  if (m_trailerErrorLimit > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorLimit << " header trailer limit errors found");
-  if (m_trailerErrorBit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: trailer-> "      << m_trailerErrorBit << " trailer bit errors found");
-  if (m_configDataBit > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: raw Data-> "     << m_configDataBit << " raw data found: Config data mode");
-  if (m_flagErrorBit > 0)       ATH_MSG_INFO("SCT BytestreamCnv summary: flag-> "         << m_flagErrorBit << " module link flag bit errors found");
-  if (m_condHit1Error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_condHit1Error << " 1st hit error found in condensed mode");
-  if (m_condHit2Error > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_condHit2Error << " 2nd hit error found in condensed mode");
-  if (m_chipNumberError > 0)    ATH_MSG_INFO("SCT BytestreamCnv summary: hit-> "          << m_chipNumberError << " Chip number > 5 error found");
-  if (m_unknownDataFormat > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: unknown data-> " << m_unknownDataFormat << " Unknown data format found");
-  if (m_rodClockErrorNumber > 0)  ATH_MSG_INFO("SCT BytestreamCnv summary: ROD status word-> " << m_rodClockErrorNumber << " ROD clock errors found");
-  if (m_maskedRODNumber > 0)      ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " << m_maskedRODNumber << " masked RODs found");
-  if (m_truncatedRODNumber > 0)   ATH_MSG_INFO("SCT BytestreamCnv summary: ROB status word-> " << m_truncatedRODNumber << " truncated ROBFragments");
   ATH_MSG_INFO("Number of SCT hits in ByteStream-> " << m_nHits);
   ATH_MSG_INFO("Number of SCT RDOs created->       " << m_nRDOs);
 
   if (m_numMissingLinkHeader > 0) ATH_MSG_WARNING("SCT Missing Link Headers found " << m_numMissingLinkHeader);
-  if (m_numUnknownOfflineID  > 0) ATH_MSG_WARNING("SCT unknown onlineID found " << m_numUnknownOfflineID);
+  if (m_numUnknownOfflineID  > 0) ATH_MSG_WARNING("SCT unknown onlineID found "     << m_numUnknownOfflineID);
 
   ATH_CHECK(AlgTool::finalize());
   ATH_MSG_DEBUG("SCT_RodDecoder::finalize()");
@@ -152,7 +214,9 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
 
   /** look for the bit that denotes "Super-condensed" mode.*/
   const bool superCondensedMode{static_cast<bool>((rodDataType >> 21) & 1)};
-  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SuperCondensedMode, robID, superCondensedMode);
+  if (bsFracCont) {
+     bsFracCont->insert(SCT_ByteStreamFractionContainer::SuperCondensedMode, robID, superCondensedMode);
+  }
 
   bool condensedMode{true};
 
@@ -194,19 +258,22 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
     const uint32_t* robStatus;
     robFrag.status(robStatus);
     if ((*robStatus)!=0) {
-      ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << " is non-zero " << (*robStatus) << std::dec);
+      ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
+                    << " is non-zero " << (*robStatus) << std::dec);
       /// first store generic "ROBFragmentError" error type..
       addRODError(robID, SCT_ByteStreamErrors::ROBFragmentError, errs);
       sc = StatusCode::RECOVERABLE;
       /// now look for specific problems, e.g. truncated or masked-off RODs
       if (((*robStatus) >> 27) & 0x1) {
-        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << std::dec << " indicates data truncation.");
+        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
+                      << std::dec << " indicates data truncation.");
         addRODError(robID, SCT_ByteStreamErrors::TruncatedROD, errs);
         m_truncatedRODNumber++;
         return sc;
       }
       if ((((*robStatus) >> 29) & 0x1) or (((*robStatus) >> 31) & 0x1)) {
-        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID << std::dec << " indicates resource was masked off.");
+        ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
+                      << std::dec << " indicates resource was masked off.");
         addRODError(robID, SCT_ByteStreamErrors::MaskedROD, errs);
         m_maskedRODNumber++;
         return sc;
@@ -282,7 +349,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           timeBin = 0x2; /** assuming timeBin is 010 in super-condensed mode */
           nStripsInWord = (data16[n]&0xf)+1;
           if (chip>5) {
-            ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << data16[n]);
+            ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
+                          << std::hex << data16[n]);
             m_chipNumberError++;
             addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             sc=StatusCode::RECOVERABLE;
@@ -361,7 +429,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           strip = chip*128 + ((data16[n]>>4)&0x7F);
           timeBin = 0x2; /** assuming timeBin is 010 in condensed mode */
           if (chip>5) {
-            ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " << std::hex << data16[n]);
+            ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
+                          << std::hex << data16[n]);
             m_chipNumberError++;
             addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
             sc=StatusCode::RECOVERABLE;
@@ -592,7 +661,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   
         m_headNumber++;
         if (saved[side*768+strip]==false and oldStrip>=0) {
-          const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
+          const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)}; 
           if (rdoMade == -1) {
             sc=StatusCode::RECOVERABLE;
             addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
@@ -620,7 +689,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         if ((onlineID ==0) or (linkNumber > 95)) {
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
           sc=StatusCode::RECOVERABLE;
-          ATH_MSG_DEBUG("Header: xxx Link number out of range (skipping following data)" << std::dec << linkNumber);
+          ATH_MSG_DEBUG("Header: xxx Link number out of range (skipping following data)" 
+                        << std::dec << linkNumber);
           break;
         } 
         else {
@@ -753,12 +823,14 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         else {
           flagIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
-        ATH_MSG_DEBUG(" xxx Flagged ABCD ERROR in chip " << chip << " Error code abcError " << abcError << " Link Number (or Stream) "<<linkNumber);
+        ATH_MSG_DEBUG(" xxx Flagged ABCD ERROR in chip " << chip
+                      << " Error code abcError " << abcError << " Link Number (or Stream) "<<linkNumber);
         m_flagErrorBit++;
         // Error code of ABCD error should be 1, 2, 4 or 7.
         if (abcError!=0x1 and abcError!=0x2 and abcError!=0x4 and abcError!=0x7) {
-          ATH_MSG_DEBUG("ABCD error has an invalid error code " << abcError <<
-                        " the 16-bit word is 0x" << std::hex << data16[n] << std::dec << " for hash " << flagIDHash);
+          ATH_MSG_DEBUG("ABCD error has an invalid error code " << abcError 
+                        << " the 16-bit word is 0x" << std::hex << data16[n] << std::dec 
+                        << " for hash " << flagIDHash);
           addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
         } 
         else {
@@ -768,15 +840,15 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             // If the sides from the ABCD error and online ID are different,
             // the module is expected to read side 0 via link 1 and side 1 and via link 0.
             // Hash Id is flipped.
-            ATH_MSG_DEBUG("ABCD error and online ID have different side information for hash " << flagIDHash << ". " <<
-                          sideABCDError << " from ABCD error and " << flagIDHash.value()%2 << " from online ID");
+            ATH_MSG_DEBUG("ABCD error and online ID have different side information for hash " << flagIDHash << ". "
+                          << sideABCDError << " from ABCD error and " << flagIDHash.value()%2 << " from online ID");
             flagIDHash = (flagIDHash.value()/2)*2+sideABCDError;
           }
           // Chip should be 0-5 or 8-13.
           if (chip%8>=6) {
-            ATH_MSG_DEBUG("ABCD error has an invalid chip 0x" << std::hex << chip << std::dec <<
-                          " the 16-bit word is 0x" << std::hex << data16[n] << std::dec <<
-                          " for hash " << flagIDHash.value());
+            ATH_MSG_DEBUG("ABCD error has an invalid chip 0x" << std::hex << chip << std::dec
+                          << " the 16-bit word is 0x" << std::hex << data16[n] << std::dec
+                          << " for hash " << flagIDHash.value());
             addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
           } 
           else {
@@ -863,12 +935,14 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
   if (not idCollHash.is_valid()) {
     m_numUnknownOfflineID++;
     ATH_MSG_ERROR("Unknown OfflineId for OnlineId -> cannot create RDO");
-    ATH_MSG_WARNING("Unknown OfflineId for OnlineId " << std::hex << onlineID << " -> cannot create RDO" << std::dec);
+    ATH_MSG_WARNING("Unknown OfflineId for OnlineId " << std::hex << onlineID  
+                    << " -> cannot create RDO" << std::dec);
     return -1;
   }
 
   if (((strip & 0x7f) + (groupSize-1) > 127) or (strip<0) or (strip>767)) {
-    ATH_MSG_WARNING("Cluster with " << groupSize << " strips, starting at strip " << strip << " in collection " << idCollHash << " out of range. Will not make RDO");
+    ATH_MSG_WARNING("Cluster with " << groupSize << " strips, starting at strip " << strip
+                    << " in collection " << idCollHash << " out of range. Will not make RDO");
     return -1;
   }
 
@@ -881,7 +955,9 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
     else if (idCollHash != cache.lastHash) {
       cache.lastHash = idCollHash;
       /** maybe the new hash is not in the list, so test it */
-      std::vector<IdentifierHash>::const_iterator idHashIterator{find(cache.vecHash->begin(), cache.vecHash->end(), idCollHash)};
+      std::vector<IdentifierHash>::const_iterator idHashIterator{find(cache.vecHash->begin(), 
+                                                                      cache.vecHash->end(), 
+                                                                      idCollHash)};
       if (idHashIterator == cache.vecHash->end()) {
         ATH_MSG_VERBOSE("Collection for Hash not to be decoded, skip");
         /** remember this one, so that we do not find(...) forever */
@@ -911,7 +987,8 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
   }
   const unsigned int rawDataWord{static_cast<unsigned int>(groupSize | (strip << 11) | (timeBin <<22) | (errors << 25))};
 
-  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << idColl.getString() << ":-> " << m_sctID->print_to_string(idDigit) << std::dec);
+  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << idColl.getString()
+                << ":-> " << m_sctID->print_to_string(idDigit) << std::dec);
 
 
 
@@ -963,13 +1040,16 @@ SCT_RodDecoder::addSingleError(const IdentifierHash& idHash,
 }
 
 void
-SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const {
+SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, 
+                                       unsigned int firstTempMaskedChip, 
+                                       InDetBSErrContainer* errs) const {
   if (not hashID.is_valid()) {
     ATH_MSG_INFO("setFirstTempMaskedChip hashID " << hashID << " is invalid.");
     return;
   }
   if (firstTempMaskedChip==0) {
-    ATH_MSG_WARNING("setFirstTempMaskedChip: firstTempMaskedChip should be greater than 0. firstTempMaskedChip is " << firstTempMaskedChip);
+    ATH_MSG_WARNING("setFirstTempMaskedChip: firstTempMaskedChip should be greater than 0. firstTempMaskedChip is " 
+                    << firstTempMaskedChip);
     return;
   }
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index f02c3989a728..4e4ca2886d3d 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -87,13 +87,20 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
                       InDetBSErrContainer* errs) const;
 
   /** Set first temporarily masked chip information from byte stream trailer */
-  void setFirstTempMaskedChip(const IdentifierHash& hashID, unsigned int firstTempMaskedChip, InDetBSErrContainer* errs) const;
+  void setFirstTempMaskedChip(const IdentifierHash& hashID, 
+                              unsigned int firstTempMaskedChip, 
+                              InDetBSErrContainer* errs) const;
 
   const SCT_ID* m_sctID;
   IdContext m_contextSCT;
-  ToolHandle<ISCT_CablingTool> m_cabling{this, "SCT_CablingTool", "SCT_CablingTool", "Tool to retrieve SCT Cabling"};
-  ToolHandle<ISCT_ConfigurationConditionsTool> m_configTool{this, "ConfigTool",
-      "SCT_ConfigurationConditionsTool/InDetSCT_ConfigurationConditionsTool", "Tool to retrieve SCT Configuration Tool"};
+  ToolHandle<ISCT_CablingTool> m_cabling{this, 
+                                         "SCT_CablingTool", 
+                                         "SCT_CablingTool", 
+                                         "Tool to retrieve SCT Cabling"};
+  ToolHandle<ISCT_ConfigurationConditionsTool> m_configTool{this, 
+                                                            "ConfigTool",
+                                                            "SCT_ConfigurationConditionsTool/InDetSCT_ConfigurationConditionsTool", 
+                                                            "Tool to retrieve SCT Configuration Tool"};
   /** Summary of the decoding process */
   mutable std::atomic_uint m_singleCondHitNumber;   //!< Total number of single hit decoded in condensed mode
   mutable std::atomic_uint m_pairedCondHitNumber;   //!< Total number of paired hit decoded in condensed mode
@@ -101,21 +108,21 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
   mutable std::atomic_uint m_evenExpHitNumber;      //!< Total number of paired hit decoded in expanded mode
   mutable std::atomic_uint m_lastExpHitNumber;      //!< Total number of last hit decoded in expanded mode
   mutable std::atomic_uint m_headNumber;            //!< Total number of decoded header data
-  mutable std::atomic_uint m_trailerNumber;           //!< Total number of decoded trailer data
-  mutable std::atomic_uint m_headErrorBCID;       //!< Total number of bcid error in the header data
-  mutable std::atomic_uint m_headErrorLvl1ID;     //!< Total number of lvl1id error in the header data
-  mutable std::atomic_uint m_headErrorTimeout;    //!< Total number of timeout error in the header data
-  mutable std::atomic_uint m_headErrorFormatter;  //!< Total number of formatter error in the header data
+  mutable std::atomic_uint m_trailerNumber;         //!< Total number of decoded trailer data
+  mutable std::atomic_uint m_headErrorBCID;         //!< Total number of bcid error in the header data
+  mutable std::atomic_uint m_headErrorLvl1ID;       //!< Total number of lvl1id error in the header data
+  mutable std::atomic_uint m_headErrorTimeout;      //!< Total number of timeout error in the header data
+  mutable std::atomic_uint m_headErrorFormatter;    //!< Total number of formatter error in the header data
   mutable std::atomic_uint m_headErrorPreamble;     //!< Total number of preamble error in the header data
   mutable std::atomic_uint m_trailerErrorOverflow;  //!< Total number of overflow error in the trailer data
   mutable std::atomic_uint m_trailerErrorLimit;     //!< Total number of header trailer limit error in the trailer data
   mutable std::atomic_uint m_trailerErrorBit;       //!< Total number of trailer bit error
-  mutable std::atomic_uint m_configDataBit;       //!< Total number of configuration data
-  mutable std::atomic_uint m_flagErrorBit;        //!< Total number of flag error data
-  mutable std::atomic_uint m_condHit1Error;       //!< Total number of first hit data error
-  mutable std::atomic_uint m_condHit2Error;       //!< Total number second hit data errors
-  mutable std::atomic_uint m_chipNumberError;     //!< Total number of chip number error
-  mutable std::atomic_uint m_unknownDataFormat;   //!< Total number of unknown data format
+  mutable std::atomic_uint m_configDataBit;         //!< Total number of configuration data
+  mutable std::atomic_uint m_flagErrorBit;          //!< Total number of flag error data
+  mutable std::atomic_uint m_condHit1Error;         //!< Total number of first hit data error
+  mutable std::atomic_uint m_condHit2Error;         //!< Total number second hit data errors
+  mutable std::atomic_uint m_chipNumberError;       //!< Total number of chip number error
+  mutable std::atomic_uint m_unknownDataFormat;     //!< Total number of unknown data format
   mutable std::atomic_uint m_nHits;
   mutable std::atomic_uint m_nRDOs;
   mutable std::atomic_uint m_maskedLinkNumber;
-- 
GitLab


From 5533c659f8d78b8f66273aae5aa0630770546bd4 Mon Sep 17 00:00:00 2001
From: Ben Nachman <benjamin.philip.nachman@cern.ch>
Date: Mon, 18 Mar 2019 13:40:45 -0700
Subject: [PATCH 086/163] updated with suggestions from ATLAS reviewers

---
 .../RadDamage/HamburgModel/README.md          |   2 +-
 .../HamburgModel/data_processing.cpp          |  34 +++++++++---------
 .../RadDamage/HamburgModel/output             | Bin 211600 -> 0 bytes
 .../{temp_rad_data => }/profile_combiner.cpp  |  23 ++++++++----
 .../HamburgModel/temp_rad_data/converter      | Bin 78624 -> 0 bytes
 .../temp_rad_data/temp_IBL_2015-jan2018.txt   |   0
 6 files changed, 35 insertions(+), 24 deletions(-)
 delete mode 100755 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output
 rename InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/{temp_rad_data => }/profile_combiner.cpp (92%)
 delete mode 100755 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter
 delete mode 100644 InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
index 6271ead6172e..ad836f2650e0 100644
--- a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/README.md
@@ -15,7 +15,7 @@ g++ data_processing.cpp -I /path/to/boost/boost_1_62_0 -Wall -std=c++11 -o outpu
 
 After compilation the program can be called with:
 
-./output temp_rad_data/my_profile.txt
+./output my_profile.txt
 
 By default, a variety of pdf files is generated and all corresponding root histograms are stored in a single root file. Furthermore, by default, the pdf files will be overwritten and the histograms will be added to the existing root file - this can be changed in the first lines of the code, a unique naming scheme based on the system clock is available!
 
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
index 80abb6405a80..2a414138dc92 100644
--- a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/data_processing.cpp
@@ -1,3 +1,7 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
 /*
 Compile Code with: g++ data_processing.cpp -I /path/to/boost/boost_1_62_0 -Wall -std=c++11 -o output `root-config --cflags` `root-config --libs`
 
@@ -23,9 +27,7 @@ Attention 3: to change from one detector type to another, change mainly 3 things
 #include <vector>
 #include <math.h>           		// for fabs()
 #include <sstream>         		// to get string into stream
-//#include <TH2F.h>           		// root stuff for file reading
 #include <TFile.h>          		// more root stuff
-//#include <TH2D.h>           		// root stuff for file reading
 #include <TCanvas.h>
 #include <TROOT.h>
 #include <TGraphErrors.h>
@@ -47,26 +49,26 @@ using namespace boost::gregorian;
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-bool use_CMS_paper_alpha0 = false; //if false: temperature averaging for leakage current calculation a la Moll (theta function for time scale change), if true: use CMS approach of temperature average (attention: constants can only be changed directly in the code in this case)
+const bool use_CMS_paper_alpha0 = false; //if false: temperature averaging for leakage current calculation a la Moll (theta function for time scale change), if true: use CMS approach of temperature average (attention: constants can only be changed directly in the code in this case)
 
-bool debug=false;                                    // additional debugging console outputs
-bool plot_pdf=true;                                  // plots are by default saved as root file, but can also be directly exported as pdf
-bool overwrite_files=true;                           // false = append internal clock identifier to file name, false = overwrite pdfs, append root files // files are by default created with a unique name depending on the internal clock and you can switch it of here such that pdf files are overwritten and the root file is extended (old plots will stay in the root file as well)
-double timestep=1;                                   // step size is 1 second, do not change this!
-double donorremovalfraction=0.99;                    // fraction of donors which can be removed by donor removal
-double userTref=273.15;                              // set a reference temperature for the volume corrected leakage current plot (it will only effect this one plot!) Now: implemented!
-double bandGap=1.21;                                 // eV used for scaling temperatures
+const bool debug=false;                                    // additional debugging console outputs
+const bool plot_pdf=true;                                  // plots are by default saved as root file, but can also be directly exported as pdf
+const bool overwrite_files=true;                           // false = append internal clock identifier to file name, false = overwrite pdfs, append root files // files are by default created with a unique name depending on the internal clock and you can switch it of here such that pdf files are overwritten and the root file is extended (old plots will stay in the root file as well)
+const double timestep=1;                                   // step size is 1 second, do not change this!
+const double donorremovalfraction=0.99;                    // fraction of donors which can be removed by donor removal
+const double userTref=273.15;                              // set a reference temperature for the volume corrected leakage current plot (it will only effect this one plot!) Now: implemented!
+const double bandGap=1.21;                                 // eV used for scaling temperatures
 
-string output_file_name = "simulation_results";      // set unique file name for each simulation
+const string output_file_name = "simulation_results";      // set unique file name for each simulation
 
-date d(2015,May,1);                                  // IBL     //set a date for the plots to begin (to be correct it has to be equal to the beginning of your (!) temp/irr profile)
+const date d(2015,May,1);                                  // IBL     //set a date for the plots to begin (to be correct it has to be equal to the beginning of your (!) temp/irr profile)
 //date d(2011,Feb,11);                               // PIXEL
 
 
 const double Ndonor_0 = 1.7e12;                      // IBL       // initial donor concentration (right now the code only works for originally n-type bulk material!)
 //const double Ndonor_0 = 1.4e12;                    // B-Layer Layer1/2 Disks
 
-double thickness=200;                                // IBL       // sensor thickness
+const double thickness=200;                                // IBL       // sensor thickness
 //double thickness=250;                              // B-Layer Layer1/2 Disks
 
 //double global_layer_conversion=0.92e12;            // Layer 1    //conversion factor from luminosity to neq (1fb-1=2.3e12neq/cm2) - is used only for computation of total luminosity, will be wrong if there are multiple conversion factor in the original profiles as for example due to different center of mass energies
@@ -74,12 +76,12 @@ double thickness=200;                                // IBL       // sensor thic
 //double global_layer_conversion=0.571e12;           // Layer 2
 //double global_layer_conversion=0.7e12;             // Layer 2 average
 //double global_layer_conversion=0.582e12;           // Disks
-double global_layer_conversion=6.262e12;             // IBL
+const double global_layer_conversion=6.262e12;             // IBL
 //double global_layer_conversion=2.8e12;//2.929e12;  // B-Layer
 
-int limit_file_size_input = 0;                       // how many lines should be read from the profile, 0 for everything
+const int limit_file_size_input = 0;                       // how many lines should be read from the profile, 0 for everything
 
-float DoseRateScaling=1.;                            // this parameter is multiplied to all fluence rates from the input profile
+const float DoseRateScaling=1.;                            // this parameter is multiplied to all fluence rates from the input profile
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Do not change things below this line without thinking carefully!
 
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/output
deleted file mode 100755
index 748d625712c48f0ff9381005ac7784701d7010d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 211600
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%0D|%{#zJ-Bh(++
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

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/profile_combiner.cpp
similarity index 92%
rename from InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp
rename to InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/profile_combiner.cpp
index 411eacd59027..5592ef1f8ef4 100644
--- a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/profile_combiner.cpp
+++ b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/profile_combiner.cpp
@@ -1,3 +1,7 @@
+/*                                                                                                                                                                                
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration                                                                                                         
+*/
+
 /*
 Compile Code with: g++ profile_combiner.cpp -Wall -std=c++11 -o converter
 
@@ -35,14 +39,14 @@ using namespace std;
 
 ///////////////////////////////////////////////////////
 
-string define_output_file_name = "profile_output.txt";
-long int conversion_factor1   = 0.582e9;                    //conversion factor from pb-1 to neq/cm2 for 7TeV
-long int conversion_factor2   = 0.839e9;                    //for 13TeV
-long int changeinenergy       = 2014;                       //year< since which there is 13TeV instead of 7TeV
-int time_spacing              = 4;                          //minimal required spacing between two data points in hours
-int replacement88             = 2200;                       //replace no temperature reading from DCS (eg during shutdown) (=-88 C) with this temperature
+const string define_output_file_name = "profile_output.txt";
+const long int conversion_factor1   = 0.582e9;                    //conversion factor from pb-1 to neq/cm2 for 7TeV
+const long int conversion_factor2   = 0.839e9;                    //for 13TeV
+const long int changeinenergy       = 2014;                       //year< since which there is 13TeV instead of 7TeV
+const int time_spacing              = 4;                          //minimal required spacing between two data points in hours
+const int replacement88             = 2200;                       //replace no temperature reading from DCS (eg during shutdown) (=-88 C) with this temperature
 
-bool debug            = false;                             //switch debugging information on/off
+const bool debug            = false;                             //switch debugging information on/off
 
 ///////////////////////////////////////////////////////
 
@@ -152,6 +156,11 @@ unsigned long long int BuildTimeStamp(data newpoint, data oldpoint)
 
 int main(int argc, char *argv[]) {
 
+  if (argc < 3){
+    cout<<"Sorry, we need more arguments"<<endl;
+    return 0;
+  }
+
       string temp_file_name = argv[1];
       string irr_file_name = argv[2];
 
diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/converter
deleted file mode 100755
index 8ff05b1700dc24f730ab6ebb9564f47dad1185a1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 78624
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
T&6pgm<ppIptXd13Ao~3u7`gUj

diff --git a/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt b/InnerDetector/InDetCalibAlgs/PixelCalibAlgs/RadDamage/HamburgModel/temp_rad_data/temp_IBL_2015-jan2018.txt
deleted file mode 100644
index e69de29bb2d1..000000000000
-- 
GitLab


From a2f11ef94cb715be9bc0a18f4d42639ea62bed45 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Mon, 18 Mar 2019 16:12:09 +0100
Subject: [PATCH 087/163] TBRec: Remove #include of ILArHVCorrTool.h.

Remove unneeded #include of ILArHVCorrTool.h.
---
 TestBeam/TBRec/src/TBECLArRawChannelBuilder.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/TestBeam/TBRec/src/TBECLArRawChannelBuilder.h b/TestBeam/TBRec/src/TBECLArRawChannelBuilder.h
index 71af529c7844..0d304e86e255 100644
--- a/TestBeam/TBRec/src/TBECLArRawChannelBuilder.h
+++ b/TestBeam/TBRec/src/TBECLArRawChannelBuilder.h
@@ -9,7 +9,6 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "LArElecCalib/ILArOFCTool.h"
 #include "LArElecCalib/ILArADC2MeVTool.h"
-#include "LArElecCalib/ILArHVCorrTool.h"
 
 // sandrine
 //#include "CaloIdentifier/LArEM_ID.h"
-- 
GitLab


From a70e48644a047a043b97baf752e8bc2772e5c05f Mon Sep 17 00:00:00 2001
From: scott snyder <scott.snyder@cern.ch>
Date: Mon, 18 Mar 2019 14:54:40 +0100
Subject: [PATCH 088/163] TileRawUtils: Fix gcc9 warnings.

In C++11, implicit declarations of copy and assignment are deprecated if the
class has a user defined destructor or copy or assignment.  gcc9 now warns
about this by default.
Adjust to avoid the warning.
---
 .../TileRawUtils/TileRawRoISelector.h         |  6 +++---
 .../TileRawUtils/src/TileRawRoISelector.cxx   | 19 +------------------
 2 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/TileCalorimeter/TileRawUtils/TileRawUtils/TileRawRoISelector.h b/TileCalorimeter/TileRawUtils/TileRawUtils/TileRawRoISelector.h
index f1b35a351adf..45043a9272e0 100755
--- a/TileCalorimeter/TileRawUtils/TileRawUtils/TileRawRoISelector.h
+++ b/TileCalorimeter/TileRawUtils/TileRawUtils/TileRawRoISelector.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILERAWUTILS_TILERAWROISELECTOR_H
@@ -57,7 +57,7 @@ class TileRawRoISelector
 	public:
 	const_iterator() ; 
 
-	const_iterator& operator = ( const const_iterator & it ) ; 
+        const_iterator& operator = ( const const_iterator & it ) = default;
 
 	const_iterator& operator ++ () ; 
 
@@ -86,7 +86,7 @@ class TileRawRoISelector
    TileRawRoISelector ( TileRoI_Map* map=NULL, 
 	    TileRawChannelContainer* c=NULL );
 
-   virtual ~TileRawRoISelector () {};
+   virtual ~TileRawRoISelector () = default;
 
    void setMap(TileRoI_Map* map) ; 
    void setContainer(TileRawChannelContainer* c) ;
diff --git a/TileCalorimeter/TileRawUtils/src/TileRawRoISelector.cxx b/TileCalorimeter/TileRawUtils/src/TileRawRoISelector.cxx
index 6172b33ce4fd..2f0a6aac33db 100755
--- a/TileCalorimeter/TileRawUtils/src/TileRawRoISelector.cxx
+++ b/TileCalorimeter/TileRawUtils/src/TileRawRoISelector.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "TileRawUtils/TileRawRoISelector.h" 
@@ -40,23 +40,6 @@ TileRawRoISelector::const_iterator::const_iterator
 }
 
 
-// = operator 
-TileRawRoISelector::const_iterator& 
-TileRawRoISelector::const_iterator:: operator = 
-	( const TileRawRoISelector::const_iterator & it ) 
-{
-    if (this != (&it) ) {
-        
-	  m_vec_itpair  = it.m_vec_itpair      ; 
-	  m_pair_it     = it.m_pair_it         ;
-	  m_obj_it      = it.m_obj_it          ;
-	  m_obj_it_end  = it.m_obj_it_end      ;
-    }
-    
-    return *this; 
-}
-
-
 // ++ operator 
 TileRawRoISelector::const_iterator& 
 TileRawRoISelector::const_iterator:: operator ++ ()
-- 
GitLab


From f4e7df2727c16922dbcc0783a49c64f947f39df3 Mon Sep 17 00:00:00 2001
From: scott snyder <scott.snyder@cern.ch>
Date: Mon, 18 Mar 2019 14:54:22 +0100
Subject: [PATCH 089/163] AthLinks: Fix gcc9 compilation in AssocationComps.

Have AssociationVectorIterator derive from std::iterator, so that its
traits are properly available.  Needed to use this type with two-iterator
ctors of STL containers.
---
 Control/AthLinks/AthLinks/tools/AssociationVectorIterator.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Control/AthLinks/AthLinks/tools/AssociationVectorIterator.h b/Control/AthLinks/AthLinks/tools/AssociationVectorIterator.h
index 9cdbeeba9af5..04dffafdcb8d 100644
--- a/Control/AthLinks/AthLinks/tools/AssociationVectorIterator.h
+++ b/Control/AthLinks/AthLinks/tools/AssociationVectorIterator.h
@@ -11,10 +11,10 @@
  * not be included directly into client code.
  */
 
- class AssociationVectorIterator 
+ class AssociationVectorIterator
+   : public std::iterator<std::bidirectional_iterator_tag, asso_type*>
  {
  public:
-
    /*! \brief alternate constructor
     *
     * The alternate constructor is the only meaningful constructor. It requires
-- 
GitLab


From a2dcee96ebc33107816b02fb142807eea4474f97 Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 18 Mar 2019 12:34:36 +0000
Subject: [PATCH 090/163] Merge branch 'PRW_fixPrecisionProblem' into '21.0'

Add protection for rounding errors

See merge request atlas/athena!21963

(cherry picked from commit ebf2f6fcf56371a5434f16d258abdad08b1a2dda)

8adaa12a Add protection for rounding errors
---
 .../SimuJobTransforms/python/SimBeamSpotShapeFilter.py       | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Simulation/SimuJobTransforms/python/SimBeamSpotShapeFilter.py b/Simulation/SimuJobTransforms/python/SimBeamSpotShapeFilter.py
index f03aae2d750a..dd1e2b11c459 100644
--- a/Simulation/SimuJobTransforms/python/SimBeamSpotShapeFilter.py
+++ b/Simulation/SimuJobTransforms/python/SimBeamSpotShapeFilter.py
@@ -79,8 +79,11 @@ class SimBeamSpotShapeFilter( PyAthena.AthFilterAlgorithm ):
 
     # Calculate the prob a event falling in the window given the original and target widths
     def calcScale(self, sigmaO, sigmaT, x):
+        #if the beamspot are the same to 1 nm don't reweight
+        if math.fabs( sigmaO - sigmaT ) < 1e-6:
+          return 1.
         if sigmaO < sigmaT:
-          self.msg.error( 'This will not work target width larger than original width: %f <  %f'  %(sigmaO, sigmaT) )
+          self.msg.error( 'This will not work target width larger than original width: %f <  %f '  %(sigmaO, sigmaT) )
           return 1.
         value =   math.exp( -0.5*(x*x)*(1./(sigmaT*sigmaT) - 1./(sigmaO*sigmaO)))
         #print 'Targetn Original Prob ',x, ' ', sigmaT, ' ',  sigmaO, ' ', value
-- 
GitLab


From f5c94ae0452aa5452c393d364b43a646b14cf777 Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 18 Mar 2019 12:44:09 +0000
Subject: [PATCH 091/163] Merge branch '21.0-FastCaloSimDev' into '21.0'

21.0-FastCaloSim: Adding function LoadFCalGeometryFromFiles to CaloGeometryFromFile

See merge request atlas/athena!21887

(cherry picked from commit 55648b8f7e385f47aebb6f375f1dd0fff0abe15e)

b8ec3a29 Adding function LoadFCalGeometryFromFiles to CaloGeometryFromFile
---
 .../tools/CaloGeometryFromFile.cxx            | 75 +++++++++++++++++++
 .../tools/CaloGeometryFromFile.h              |  1 +
 2 files changed, 76 insertions(+)

diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.cxx
index 96ecdd44d619..46bd5e55c63a 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.cxx
@@ -164,6 +164,81 @@ bool CaloGeometryFromFile::LoadGeometryFromFile(TString filename,TString treenam
   return ok;
 }
 
+bool CaloGeometryFromFile::LoadFCalGeometryFromFiles(TString filename1,TString filename2,TString filename3){
+
+  vector<ifstream*> electrodes(3);
+
+  electrodes[0]=new ifstream(filename1);
+  electrodes[1]=new ifstream(filename2);
+  electrodes[2]=new ifstream(filename3);
+
+
+  int    thisTubeId;
+  int    thisTubeI;
+  int    thisTubeJ;
+  //int    thisTubeID;
+  //int    thisTubeMod;
+  double thisTubeX;
+  double thisTubeY;
+  TString tubeName;
+
+  //int second_column;
+  string seventh_column;
+  string eight_column;
+  int ninth_column;
+
+
+
+
+
+  int i;
+  for(int imodule=1;imodule<=3;imodule++){
+
+    i=0;
+    while(1){
+
+      (*electrodes[imodule-1]) >> tubeName;
+      if(electrodes[imodule-1]->eof())break;
+      (*electrodes[imodule-1]) >> thisTubeId; // ?????
+      (*electrodes[imodule-1]) >> thisTubeI;
+      (*electrodes[imodule-1]) >> thisTubeJ;
+      (*electrodes[imodule-1]) >> thisTubeX;
+      (*electrodes[imodule-1]) >> thisTubeY;
+      (*electrodes[imodule-1]) >> seventh_column;
+      (*electrodes[imodule-1]) >> eight_column;
+      (*electrodes[imodule-1]) >> ninth_column;
+
+      tubeName.ReplaceAll("'","");
+      string tubeNamestring=tubeName.Data();
+
+      std::istringstream tileStream1(std::string(tubeNamestring,1,1));
+      std::istringstream tileStream2(std::string(tubeNamestring,3,2));
+      std::istringstream tileStream3(std::string(tubeNamestring,6,3));
+      int a1=0,a2=0,a3=0;
+      if (tileStream1) tileStream1 >> a1;
+      if (tileStream2) tileStream2 >> a2;
+      if (tileStream3) tileStream3 >> a3;
+
+      stringstream s;
+
+
+      m_FCal_ChannelMap.add_tube(tubeNamestring, imodule, thisTubeId, thisTubeI,thisTubeJ, thisTubeX, thisTubeY,seventh_column);
+      
+      i++;
+    }
+  }
+
+
+  m_FCal_ChannelMap.finish(); // Creates maps
+  
+  for(int imodule=1;imodule<=3;imodule++) delete electrodes[imodule-1];
+  electrodes.clear();
+
+  this->calculateFCalRminRmax();
+  return this->checkFCalGeometryConsistency();
+
+}
+
 void CaloGeometryFromFile::DrawFCalGraph(int isam,int color){
 	
 	stringstream ss;
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.h
index b9849222ce46..a71d30728d9b 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/CaloGeometryFromFile.h
@@ -14,6 +14,7 @@ public :
    virtual ~CaloGeometryFromFile();
    
    virtual bool LoadGeometryFromFile(TString filename,TString treename,TString hashfile="/afs/cern.ch/atlas/groups/Simulation/FastCaloSimV2/cellId_vs_cellHashId_map.txt");
+   virtual bool LoadFCalGeometryFromFiles(TString filename1,TString filename2,TString filename3); // Initialize m_FCal_ChannelMap
    void DrawFCalGraph(int isam,int color);
 };
 
-- 
GitLab


From 3feca3e02473bf205c24142a538e02f1cf135b89 Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 18 Mar 2019 12:36:14 +0000
Subject: [PATCH 092/163] Merge branch 'update_FCSV2_parametrization' into
 '21.0'

Updating to the latest version of FastCaloSimV2 parametrization file

See merge request atlas/athena!21917

(cherry picked from commit 3bb81cc163c752e20c8e9fdb88f5aa3df997357a)

10308335 updating to the latest version of FastCaloSimV2 parametrization file
---
 .../python/ISF_FastCaloSimJobProperties.py                      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimJobProperties.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimJobProperties.py
index a2c838fc9302..450c9152236c 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimJobProperties.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimJobProperties.py
@@ -60,7 +60,7 @@ class ParamsInputFilename(JobProperty):
     """ Filename of the input parametrizations file. """
     statusOn     = True
     allowedTypes = ['str']
-    StoredValue  = 'FastCaloSim/MC16/TFCSparam_v009.root'
+    StoredValue  = 'FastCaloSim/MC16/TFCSparam_v010.root'
 
 ##-----------------------------------------------------------------------------
 ## 2nd step
-- 
GitLab


From 1de0d9fbe6731f4c917c983475cafe996fdb407d Mon Sep 17 00:00:00 2001
From: joaoVictorPinto <jodafons@cern.ch>
Date: Tue, 19 Mar 2019 03:09:05 +0100
Subject: [PATCH 093/163] string reference to avoid copying in all book
 methods.

---
 .../Root/TrigEgammaDistTool.cxx               | 22 ++----
 .../Root/TrigEgammaPhysValBase.cxx            | 45 +-----------
 .../Root/TrigEgammaPlotTool.cxx               | 73 ++++---------------
 .../TrigEgammaDistTool.h                      | 13 ++--
 .../TrigEgammaPlotTool.h                      | 32 ++++----
 .../testTrigEgammaAnalysisTools_emulator.py   |  1 +
 .../share/testTrigEgammaEventSelectionTool.py |  2 +
 7 files changed, 44 insertions(+), 144 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
index 93525c633b68..de83d7d794ca 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaDistTool.cxx
@@ -245,7 +245,7 @@ StatusCode TrigEgammaDistTool::toolExecute(const std::string basePath,TrigInfo i
     return StatusCode::SUCCESS;
 }
 
-void TrigEgammaDistTool::fillL1Calo(const std::string dir, const xAOD::EmTauRoI *l1){
+void TrigEgammaDistTool::fillL1Calo(const std::string &dir, const xAOD::EmTauRoI *l1){
     cd(dir);
     ATH_MSG_DEBUG("Fill L1Calo distributions" << dir);
     hist1("eta")->Fill(l1->eta());
@@ -259,7 +259,7 @@ void TrigEgammaDistTool::fillL1Calo(const std::string dir, const xAOD::EmTauRoI
     hist2("emClusVsHadCore")->Fill(l1->hadCore()*0.001, l1->emClus()*0.001);
 }
 
-void TrigEgammaDistTool::fillEFCalo(const std::string dir, const xAOD::CaloCluster *clus){
+void TrigEgammaDistTool::fillEFCalo(const std::string &dir, const xAOD::CaloCluster *clus){
     cd(dir);
     ATH_MSG_DEBUG("Fill EFCalo distributions" << dir);
     ATH_MSG_DEBUG("Energy " << clus->e()/1.e3);
@@ -287,7 +287,7 @@ void TrigEgammaDistTool::fillEFCalo(const std::string dir, const xAOD::CaloClust
     hist1("phi_calo")->Fill(tmpphi);
 }
 
-void TrigEgammaDistTool::fillL2Electron(const std::string dir, const xAOD::TrigElectron *el){
+void TrigEgammaDistTool::fillL2Electron(const std::string &dir, const xAOD::TrigElectron *el){
     cd(dir);
     if(!el) ATH_MSG_DEBUG("TrigElectron nullptr");
     else {
@@ -298,7 +298,7 @@ void TrigEgammaDistTool::fillL2Electron(const std::string dir, const xAOD::TrigE
 
 }
 
-void TrigEgammaDistTool::fillL2Calo(const std::string dir, const xAOD::TrigEMCluster *emCluster){
+void TrigEgammaDistTool::fillL2Calo(const std::string &dir, const xAOD::TrigEMCluster *emCluster){
     cd(dir);
     if(!emCluster) ATH_MSG_DEBUG("Online pointer fails"); 
     else{
@@ -310,19 +310,9 @@ void TrigEgammaDistTool::fillL2Calo(const std::string dir, const xAOD::TrigEMClu
     }
 }
 
-void TrigEgammaDistTool::fillRingerShapes(const std::string dir, const xAOD::TrigRingerRings *ringer){
-    cd(dir);
-    if(!ringer) ATH_MSG_DEBUG("Online pointer fails");  
-    else{
-      //for(unsigned r=0; r<ringer->rings().size(); ++r){
-      //  hist2("ringer_shapes")->Fill(r, ringer->rings()[r]);
-      // }
-      ATH_MSG_DEBUG("L2 Calo distributions.");
-    }
-}
 
 
-void TrigEgammaDistTool::fillShowerShapes(const std::string dir,const xAOD::Egamma *eg){
+void TrigEgammaDistTool::fillShowerShapes(const std::string &dir,const xAOD::Egamma *eg){
     cd(dir);
     ATH_MSG_DEBUG("Fill SS distributions " << dir);
     if(!eg) ATH_MSG_WARNING("Egamma pointer fails"); 
@@ -358,7 +348,7 @@ void TrigEgammaDistTool::fillShowerShapes(const std::string dir,const xAOD::Egam
     }
 }
 
-void TrigEgammaDistTool::fillTracking(const std::string dir, const xAOD::Electron *eg){
+void TrigEgammaDistTool::fillTracking(const std::string &dir, const xAOD::Electron *eg){
     cd(dir);  
     ATH_MSG_DEBUG("Fill tracking");
     if(!eg) ATH_MSG_WARNING("Electron pointer fails");
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
index 2b6fe03aa69a..c5c99d9f982b 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPhysValBase.cxx
@@ -390,8 +390,7 @@ void TrigEgammaPhysValBase::linkElectronBranches( TTree *t ){
     InitBranch( t, "el_trk_d0significance"            , &m_el_trk_d0significance            );
     InitBranch( t, "el_trk_summaryValues"             , &m_el_trk_summaryValues         );
  
-
-  
+ 
   }
   
   InitBranch( t, "el_nGoodVtx",              &m_el_nGoodVtx);
@@ -412,7 +411,6 @@ void TrigEgammaPhysValBase::linkElectronBranches( TTree *t ){
 
 void TrigEgammaPhysValBase::linkTriggerBranches( TTree *t ){
 
-  //InitBranch(t, "trig_isPrescaled",        &m_trig_isPrescaled);
   InitBranch(t, "trig_L1_eta",             &m_trig_L1_eta);
   InitBranch(t, "trig_L1_phi",             &m_trig_L1_phi);
   InitBranch(t, "trig_L1_emClus",          &m_trig_L1_emClus);
@@ -420,7 +418,6 @@ void TrigEgammaPhysValBase::linkTriggerBranches( TTree *t ){
   InitBranch(t, "trig_L1_emIsol",          &m_trig_L1_emIsol);
   InitBranch(t, "trig_L1_hadIsol",         &m_trig_L1_hadIsol);
   InitBranch(t, "trig_L1_hadCore",         &m_trig_L1_hadCore);
-  //InitBranch(t, "trig_L1_thrNames",        &m_trig_L1_thrNames);
   InitBranch(t, "trig_L2_calo_et",         &m_trig_L2_calo_et);
   InitBranch(t, "trig_L2_calo_eta",        &m_trig_L2_calo_eta);
   InitBranch(t, "trig_L2_calo_phi",        &m_trig_L2_calo_phi);
@@ -779,46 +776,6 @@ void TrigEgammaPhysValBase::clear(){
   m_mc_hasZMother         = false;
   m_mc_hasWMother         = false;
 
-  /*
-  m_el_nblayerhits        =  0;
-  m_el_nblayerolhits      =  0;
-  m_el_npixhits           =  0;
-  m_el_npixolhits         =  0;
-  m_el_nscthits           =  0;
-  m_el_nsctolhits         =  0;
-  m_el_ntrthightreshits   =  0;
-  m_el_ntrthits           =  0;
-  m_el_ntrthighthresolhits=  0;
-  m_el_ntrtolhits         =  0;
-  m_el_ntrtxenonhits      =  0;
-  m_el_expectblayerhit    =  0;
-  m_el_nsihits            =  0;
-  m_el_nsideadsensors     =  0;
-  m_el_npixdeadsensors    =  0;
-  m_el_nsctdeadsensors    =  0;
-  */
-
-
-  /*  
-  m_trig_EF_el_nblayerhits                   ->clear();  
-  m_trig_EF_el_nblayerolhits                 ->clear(); 
-  m_trig_EF_el_npixhits                      ->clear();  
-  m_trig_EF_el_npixolhits                    ->clear();  
-  m_trig_EF_el_nscthits                      ->clear();  
-  m_trig_EF_el_nsctolhits                    ->clear();  
-  m_trig_EF_el_ntrthightreshits              ->clear();  
-  m_trig_EF_el_ntrthits                      ->clear();  
-  m_trig_EF_el_ntrthighthresolhits           ->clear();   
-  m_trig_EF_el_ntrtolhits                    ->clear();   
-  m_trig_EF_el_ntrtxenonhits                 ->clear(); 
-  m_trig_EF_el_expectblayerhit               ->clear(); 
-  m_trig_EF_el_npixdeadsensors               ->clear(); 
-  m_trig_EF_el_nsctdeadsensors               ->clear(); 
-  m_trig_EF_el_expectNextToInnerMostLayer    ->clear(); 
-  m_trig_EF_el_nNextToInnerMostLayerHits     ->clear(); 
-  m_trig_EF_el_nNextToInnerMostLayerOutliers ->clear(); 
-  */
-
 
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
index 776849479e81..f384b20e2344 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
@@ -135,8 +135,6 @@ void TrigEgammaPlotTool::setBinning(){
     m_defaultEtabins.clear();
     m_coarseEtbins.clear();
     m_coarseEtabins.clear();
-    m_ringerEtbins.clear();
-    m_ringerEtabins.clear();
 
     // Binning as defined in TP framework
     double coarse_eta_bins[9] ={-2.47,-1.52,-1.37,-0.60,0.00,0.60,1.37,1.52,2.47};
@@ -163,10 +161,6 @@ void TrigEgammaPlotTool::setBinning(){
         20,20.5,21,21.5,22,22.5,23,23.5,24,24.5,
         25,25.5};
 
-    //float ringer_eta_bins[10]={0.00, 0.60, 0.80, 1.15, 1.37, 1.54, 1.81, 2.01, 2.37, 2.47};
-    //float ringer_et_bins[9]  ={4.00,7.00,10.0,15.0,20.0,30.0,40.0,50.0,50000.};
-    float ringer_thres_et_bins[6]={15.,20.,30.,40.,50.,50000.};
-    float ringer_thres_eta_bins[6]={0.,0.8,1.37,1.54,2.37,2.5};
 
     if(m_doJpsiee){
         m_nEtbins=51;
@@ -193,8 +187,6 @@ void TrigEgammaPlotTool::setBinning(){
     m_defaultEtabins.insert(m_defaultEtabins.end(), &default_eta_bins[0], &default_eta_bins[m_ndefaultEtabins+1]);
     m_coarseEtbins.insert(m_coarseEtbins.end(), &coarse_et_bins[0], &coarse_et_bins[m_ncoarseEtbins+1]);
     m_coarseEtabins.insert(m_coarseEtabins.end(), &coarse_eta_bins[0], &coarse_eta_bins[m_ncoarseEtabins+1]);
-    m_ringerEtbins.insert(m_ringerEtbins.end(), &ringer_thres_et_bins[0], &ringer_thres_et_bins[6]);
-    m_ringerEtabins.insert(m_ringerEtabins.end(), &ringer_thres_eta_bins[0], &ringer_thres_eta_bins[6]);
 }
 
 StatusCode TrigEgammaPlotTool::book(std::map<std::string,TrigInfo> trigInfo){
@@ -599,19 +591,8 @@ TTree *TrigEgammaPlotTool::tree(const std::string &treeName, const std::string &
     return treeItr->second;
 }
 
-void TrigEgammaPlotTool::parseCaloRingsLayers( unsigned layer, unsigned &minRing, 
-                                                                       unsigned &maxRing, std::string &caloLayerName)
-{
-  if(layer == 0){minRing = 0;   maxRing = 7 ; caloLayerName = "PreSampler";}
-  if(layer == 1){minRing = 8;   maxRing = 71; caloLayerName = "EM1";}
-  if(layer == 2){minRing = 72;  maxRing = 79; caloLayerName = "EM2";}
-  if(layer == 3){minRing = 80;  maxRing = 87; caloLayerName = "EM3";}
-  if(layer == 4){minRing = 88;  maxRing = 91; caloLayerName = "HAD1";}
-  if(layer == 5){minRing = 92;  maxRing = 95; caloLayerName = "HAD2";}
-  if(layer == 6){minRing = 96;  maxRing = 99; caloLayerName = "HAD3";}
-}
 
-void TrigEgammaPlotTool::bookAbsResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookAbsResolutionHistos(const std::string &directory){
     cd(directory);    
     addHistogram(new TH1F("res_pt", "HLT p_{T} resolution; (p_{T}(on)-p_{T}(off)) ; Count", 200, -1.5, 1.5));
     addHistogram(new TH1F("res_et", "HLT E_{T} resolution; (E_{T}(on)-E_{T}(off)) ; Count", 200, -0.5, 0.5));
@@ -687,7 +668,7 @@ void TrigEgammaPlotTool::bookAbsResolutionHistos(const std::string directory){
 
 }
 
-void TrigEgammaPlotTool::bookResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookResolutionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1));
     addHistogram(new TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off))/#eta(off) ; Count", 40, -0.001, 0.001));
@@ -712,7 +693,7 @@ void TrigEgammaPlotTool::bookResolutionHistos(const std::string directory){
 
 }
 
-void TrigEgammaPlotTool::bookElectronResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookElectronResolutionHistos(const std::string &directory){
     cd(directory);    
     //Electron
     addHistogram(new TH1F("res_pt", "p_{T} resolution; (p_{T}(on)-p_{T}(off))/p_{T}(off) ; Count", 120, -1.5, 1.5));
@@ -734,7 +715,7 @@ void TrigEgammaPlotTool::bookElectronResolutionHistos(const std::string director
                 50, 0., 1.));
 }
 
-void TrigEgammaPlotTool::bookElectronIsoResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookElectronIsoResolutionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("res_ptcone20", "resolution ptcone20; ptcone20 (on-off)/off; Count", 200, -0.1, 0.1));
     addHistogram(new TH1F("res_ptcone20_rel", "resolution ptcone20/pt; ptcone20/pt (on-off)/off; Count", 100, -0.1, 0.1));
@@ -780,7 +761,7 @@ void TrigEgammaPlotTool::bookElectronIsoResolutionHistos(const std::string direc
 
 }
 
-void TrigEgammaPlotTool::bookPhotonResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookPhotonResolutionHistos(const std::string &directory){
     cd(directory);    
     addHistogram(new TH1F("res_et_cnv", "HLT E_{T} resolution for converted Photons; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1));
     addHistogram(new TH1F("res_et_uncnv", "HLT E_{T} resolution for unconverted Photons; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1));
@@ -809,7 +790,7 @@ void TrigEgammaPlotTool::bookPhotonResolutionHistos(const std::string directory)
     addHistogram(new TH1F("res_uncnv_etInEta3", "HLT E_{T} resolution in #eta = [1.8,2.45]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1));
 
 }
-void TrigEgammaPlotTool::bookPhotonIsoResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookPhotonIsoResolutionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("res_topoetcone20", "resolution topoetcone20; ptcone20 (on-off)/off; Count", 200, -0.1, 0.1));
     addHistogram(new TH1F("res_topoetcone20_rel", "resolution topoetcone20/pt; ptcone20/pt (on-off)/off; Count", 100, -0.1, 0.1));
@@ -839,7 +820,7 @@ void TrigEgammaPlotTool::bookPhotonIsoResolutionHistos(const std::string directo
                 100, -0.5, 0.5));
 }
 
-void TrigEgammaPlotTool::bookExpertResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookExpertResolutionHistos(const std::string &directory){
     cd(directory);    
     
     addHistogram(new TH1F("res_etInEta0", "HLT E_{T} resolution in #eta = [0,1.37]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1));
@@ -940,7 +921,7 @@ void TrigEgammaPlotTool::bookExpertResolutionHistos(const std::string directory)
     }
 }
 
-void TrigEgammaPlotTool::bookExpertL2CaloResolutionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookExpertL2CaloResolutionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH2F("res_f3VsEta", "L2Calo f3 resolution as function of #eta; #eta; (f3(on)-f3(off))/f3(off); Count",
                 50, -2.47, 2.47,
@@ -1004,14 +985,14 @@ void TrigEgammaPlotTool::bookExpertL2CaloResolutionHistos(const std::string dire
                 50, -0.001, 0.001));
 }
 
-void TrigEgammaPlotTool::bookDistributionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookDistributionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("et", "ET; ET [GeV] ; Count", 100, 0., 100.));
     addHistogram(new TH1F("eta", "eta; eta ; Count", m_nEtabins,m_etabins.data())); 
     addHistogram(new TH1F("phi", "phi; phi ; Count", 20, -3.2, 3.2));
 }
 
-void TrigEgammaPlotTool::bookEgammaDistributionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookEgammaDistributionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("highet", "Offline E_{T}; E_{T} [GeV] ; Count", 100, 0., 2000.));
     //addHistogram(new TH1F("e011", "e011; e011 ; Count", 165, -15., 150.));
@@ -1036,7 +1017,7 @@ void TrigEgammaPlotTool::bookEgammaDistributionHistos(const std::string director
     addHistogram(new TH1F("topoetcone40_shift_rel", "(topoetcone40-2.45 GeV)/pt; (topoetcone40-2.45 GeV)/pt ; Count", 100, -0.5, 0.5));
 }
 
-void TrigEgammaPlotTool::bookElectronDistributionHistos(const std::string directory){
+void TrigEgammaPlotTool::bookElectronDistributionHistos(const std::string &directory){
     cd(directory);
     addHistogram(new TH1F("pt", "p_{T}; p_{T} [GeV] ; Count", 100,0.,100.)); 
     addHistogram(new TH1F("deta1", "deta1; deta1 ; Count", 40, -0.01, 0.01));
@@ -1066,7 +1047,7 @@ void TrigEgammaPlotTool::bookElectronDistributionHistos(const std::string direct
 
 }
 
-void TrigEgammaPlotTool::bookEfficiency2DHistos(const std::string directory){
+void TrigEgammaPlotTool::bookEfficiency2DHistos(const std::string &directory){
     cd(directory);
     
     addHistogram(new TH2F("match_coarse_et_eta","Trigger Matched Offline #eta vs et; E_{T} GeV ;#eta; Count",
@@ -1087,7 +1068,7 @@ void TrigEgammaPlotTool::bookEfficiency2DHistos(const std::string directory){
 
 }
 
-void TrigEgammaPlotTool::bookEfficiencyTProfile(const std::string directory){
+void TrigEgammaPlotTool::bookEfficiencyTProfile(const std::string &directory){
     cd(directory);
     addHistogram(new TProfile("eff_pt", "#epsilon(p_T); p_{T} ; Efficiency",m_nEtbins,m_etbins.data())); 
     addHistogram(new TProfile("eff_et", "#epsilon(E_T); E_{T} [GeV] ; Efficiency", m_nEtbins,m_etbins.data())); 
@@ -1100,7 +1081,7 @@ void TrigEgammaPlotTool::bookEfficiencyTProfile(const std::string directory){
       addHistogram(new TProfile("eff_npvtx", "#epsilon(npvtx); npvtx ; Efficiency", 16, 0, 80));
 }
 
-void TrigEgammaPlotTool::bookEfficiencyHistos(const std::string directory){ 
+void TrigEgammaPlotTool::bookEfficiencyHistos(const std::string &directory){ 
     cd(directory);
     bookEfficiencyTProfile(directory);
     // Numerator
@@ -1184,31 +1165,6 @@ void TrigEgammaPlotTool::bookL1Histos(TrigInfo trigInfo){
 
 }
 
-void TrigEgammaPlotTool::bookRnnDistributionHistos(const std::string dir)
-{
-    cd(dir);
-    //addHistogram(new TH2F("RingerShapes","RingerShapes;E_{t};#rings;Count",21000,-1000,20000,100,0,100));
-    addHistogram(new TH1F("discriminant","discriminant(integrated);discriminant(ringer);Count",95,-12,7));
-    addHistogram(new TH2F("discriminantVsMu","discriminantVsMu(integrated);discriminant(ringer);avgmu;Count",95,-12,7,16,0,70));
-    addDirectory(dir+"/discriminant_binned");
-    for(unsigned etBinIdx=0; etBinIdx<m_ringerEtbins.size()-1; ++etBinIdx){
-      for(unsigned etaBinIdx=0; etaBinIdx<m_ringerEtabins.size()-1; ++etaBinIdx){
-        std::stringstream ss1,ss2,ss3,ss4;
-        ss1 << "discriminant_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
-        ss2       << m_ringerEtabins[etaBinIdx]<<"<=|#eta|<"<< m_ringerEtabins[etaBinIdx+1] <<
-          " and " << m_ringerEtbins[etBinIdx]<< "<=E_{t}<"<< m_ringerEtbins[etBinIdx+1] <<
-          ";discriminant(ringer);Count";
-        
-        addHistogram(new TH1F(ss1.str().c_str(),ss2.str().c_str(),95,-12.,7.));
-        ss3 << "discriminantVsMu_et_"<<etBinIdx<<"_eta_"<<etaBinIdx;
-        ss4       << m_ringerEtabins[etaBinIdx]<<"<=|#eta|<"<< m_ringerEtabins[etaBinIdx+1] <<
-          " and " << m_ringerEtbins[etBinIdx]<< "<=E_{t}<"<< m_ringerEtbins[etBinIdx+1] <<
-          ";discriminant(ringer);Avgmu;Count";
-        addHistogram(new TH2F(ss3.str().c_str(),ss4.str().c_str(),95,-12.,7.,16,0.,70.));
-      }
-    }
-
-}
 
 void TrigEgammaPlotTool::bookExpertHistos(TrigInfo trigInfo){
     
@@ -1362,7 +1318,6 @@ void TrigEgammaPlotTool::bookExpertHistos(TrigInfo trigInfo){
     dirname=basePath + "/Distributions/L2Calo";
     dirnames.push_back(dirname);
     addDirectory(dirname);
-    bookRnnDistributionHistos(dirname);
 
     //Book the kinematic plots for each trigger level
     for(const auto dir:dirnames) 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
index 15f403b7845b..24d996c39876 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaDistTool.h
@@ -27,13 +27,12 @@ public:
 protected:
 private:
   /*! fill kinematic histograms, et,eta,phi,lumi and efficiency */
-  void fillShowerShapes(const std::string, const xAOD::Egamma *); // Online and Offline fillers
-  void fillTracking(const std::string, const xAOD::Electron *); // Online and Offline fillers
-  void fillEFCalo(const std::string,const xAOD::CaloCluster *);
-  void fillL2Electron(const std::string,const xAOD::TrigElectron *);
-  void fillL2Calo(const std::string,const xAOD::TrigEMCluster *);
-  void fillRingerShapes(const std::string,const xAOD::TrigRingerRings *);
-  void fillL1Calo(const std::string,const xAOD::EmTauRoI *);
+  void fillShowerShapes(const std::string &, const xAOD::Egamma *); // Online and Offline fillers
+  void fillTracking(const std::string &, const xAOD::Electron *); // Online and Offline fillers
+  void fillEFCalo(const std::string &,const xAOD::CaloCluster *);
+  void fillL2Electron(const std::string &,const xAOD::TrigElectron *);
+  void fillL2Calo(const std::string &,const xAOD::TrigEMCluster *);
+  void fillL1Calo(const std::string &,const xAOD::EmTauRoI *);
    /*! Include more detailed histograms */
   bool m_detailedHists;
 };
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
index 7d141d4e1575..fd45b130a139 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaPlotTool.h
@@ -73,8 +73,6 @@ class TrigEgammaPlotTool
           int m_ncoarseEtabins; //2D
           std::vector<float>  m_etbins;
           std::vector<float>  m_etabins;
-          std::vector<float>  m_ringerEtbins;
-          std::vector<float>  m_ringerEtabins;
           std::vector<double> m_defaultEtbins;
           std::vector<double> m_defaultEtabins;
           std::vector<double> m_coarseEtbins;
@@ -117,22 +115,20 @@ class TrigEgammaPlotTool
           void bookL1Histos(TrigInfo);
           void bookShifterHistos();
           //void bookAnalysisHistos(const std::string dir);
-          void bookEfficiencyTProfile(const std::string dir);
-          void bookEfficiencyHistos(const std::string dir);
-          void bookEfficiency2DHistos(const std::string dir);
-          void bookEgammaDistributionHistos(const std::string dir);
-          void bookElectronDistributionHistos(const std::string dir);
-          void bookDistributionHistos(const std::string dir);
-          void bookResolutionHistos(const std::string dir);
-          void bookElectronResolutionHistos(const std::string dir);
-          void bookElectronIsoResolutionHistos(const std::string dir);
-          void bookPhotonResolutionHistos(const std::string dir);
-          void bookPhotonIsoResolutionHistos(const std::string dir);
-          void bookExpertResolutionHistos(const std::string dir);
-          void bookExpertL2CaloResolutionHistos(const std::string dir);
-          void bookAbsResolutionHistos(const std::string dir);
-          void bookRnnDistributionHistos(const std::string dir);
-          void parseCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, std::string &caloLayerName);
+          void bookEfficiencyTProfile(const std::string &dir);
+          void bookEfficiencyHistos(const std::string &dir);
+          void bookEfficiency2DHistos(const std::string &dir);
+          void bookEgammaDistributionHistos(const std::string &dir);
+          void bookElectronDistributionHistos(const std::string &dir);
+          void bookDistributionHistos(const std::string &dir);
+          void bookResolutionHistos(const std::string &dir);
+          void bookElectronResolutionHistos(const std::string &dir);
+          void bookElectronIsoResolutionHistos(const std::string &dir);
+          void bookPhotonResolutionHistos(const std::string &dir);
+          void bookPhotonIsoResolutionHistos(const std::string &dir);
+          void bookExpertResolutionHistos(const std::string &dir);
+          void bookExpertL2CaloResolutionHistos(const std::string &dir);
+          void bookAbsResolutionHistos(const std::string &dir);
   };
 #endif
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
index 740c69cdd444..8dc82ce612d5 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaAnalysisTools_emulator.py
@@ -1,3 +1,4 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 ####################################################################################################
 # Job options for standalone and Tier0 running of AnalysisTools 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py
index bc80bef8197f..ba72df178c83 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/share/testTrigEgammaEventSelectionTool.py
@@ -1,3 +1,5 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
 # Job options for standalone and Tier0 running of AnalysisTools 
 # Authors: 
 # Ryan Mackenzie White <ryan.white@cern.ch>
-- 
GitLab


From 040fa8616078d7e069167ff4c0474fd0646b6579 Mon Sep 17 00:00:00 2001
From: Kristian Bjoerke <krbjeork@cern.ch>
Date: Mon, 18 Mar 2019 22:24:07 +0100
Subject: [PATCH 094/163] Doxygen comments and consistent style

According to ATLAS Coding Guidelines comments are to follow the
Doxygen style commenting [doxygen-comments], written in complete
English sentences [english-comments]. In a header file comments
describing functions and attributes is to be included
[comment-functions].

According to ATLAS Coding Guidelines the style of each file
should be consistent with itself [style-consistency].
---
 .../ISCTRawDataProviderTool.h                 |   6 +
 .../ISCT_RodDecoder.h                         |  23 +-
 .../ISCT_RodEncoder.h                         |   2 +-
 .../src/SCTRawContByteStreamCnv.h             |   4 +-
 .../src/SCTRawContByteStreamTool.h            |   6 -
 .../src/SCT_RodDecoder.cxx                    | 357 ++++++++----------
 .../src/SCT_RodDecoder.h                      | 209 +++++++---
 .../src/SCT_RodEncoder.cxx                    |   3 +-
 .../src/SCT_RodEncoder.h                      |  18 +-
 9 files changed, 351 insertions(+), 277 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
index a3c7486deca0..8bb1f460072f 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
@@ -2,6 +2,12 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
+/**
+ * @file SCT_RawDataByteStreamCnv/ISCTRawContByteStreamTool.h
+ * 
+ * Athena Algorithm Tool to fill Collections of SCT RDO Containers.
+ */
+
 #ifndef SCT_RAWDATABYTESTREAMCNV_ISCTRAWDATAPROVIDERTOOL_H
 #define SCT_RAWDATABYTESTREAMCNV_ISCTRAWDATAPROVIDERTOOL_H
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
index 7538d0afd32c..7bfc875ad40f 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
@@ -3,10 +3,10 @@
 */
 
 /**
- *      @file header for SCT_RodDecoder Class
- *      AlgTool class to decode ROB bytestream data into RDO
- *      @author: Kondo.Gnanvo@cern.ch, Maria.Jose.Costa@cern.ch
- *      @current developer: Kondo Gnanvo, QMUL (London), august 2005
+ * @file SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+ * @author Kondo.Gnanvo@cern.ch, Maria.Jose.Costa@cern.ch
+ *
+ * AlgTool class to decode ROB bytestream data into RDO
  */
 
 #ifndef INDETRAWDATABYTESTREAM_ISCT_RODDECODER_H 
@@ -24,18 +24,17 @@
 class StatusCode;
 class IdentifierHash;
 
-class ISCT_RodDecoder : virtual public IAlgTool {
+class ISCT_RodDecoder : virtual public IAlgTool 
+{
  public: 
 
-  /** destructor  */
-  virtual ~ISCT_RodDecoder() = default;
-
-  /// Creates the InterfaceID and interfaceID() method
+  /** Creates the InterfaceID and interfaceID() method */
   DeclareInterfaceID(ISCT_RodDecoder, 1, 0);
 
-  /** @brief Decode the rob data fragment and fill the collection SCT_RDO_Collection 
-   *  with the RDO built by the makeRDO(..) method
-   **/
+  /** Destructor */
+  virtual ~ISCT_RodDecoder() = default;
+
+  /** Fill Collection method */
   virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment&,
                                     ISCT_RDO_Container&,
                                     InDetBSErrContainer* errs,
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodEncoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodEncoder.h
index 82753ac509fe..6af6148e4d06 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodEncoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodEncoder.h
@@ -4,7 +4,7 @@
 
 /**
  * @file SCT_RawDataByteStreamCnv/ISCT_RodEncoder.h
- * @author: Nick Barlow (nbarlow@mail.cern.ch, Kondo.Gnanvo@cern.ch)
+ * @author Nick Barlow (nbarlow@mail.cern.ch, Kondo.Gnanvo@cern.ch)
  * @date 21 June 2007 (SCT_RodEncoder turned into An AlgTool)
  * 
  * This class provides conversion from SCT RDO to ROD format ByteStream.
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamCnv.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamCnv.h
index e76034ace697..647193cfb1ea 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamCnv.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamCnv.h
@@ -55,8 +55,8 @@ class SCTRawContByteStreamCnv : public Converter
    *
    * Uses SCT RawContByteStreamTool to convert Raw Data to ByteStream.
    *
-   * @param pDataObject Pointer to data object
-   * @param pOpaqueAddress Opaque address to object
+   * @param pDataObject Pointer to data object.
+   * @param pOpaqueAddress Opaque address to object.
    */
   virtual StatusCode createRep(DataObject* pDataObject, IOpaqueAddress*& pOpaqueAddress) override;
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamTool.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamTool.h
index 130a2a5ae1ea..b667e3b37b94 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamTool.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawContByteStreamTool.h
@@ -2,12 +2,6 @@
   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-/**
- * @file SCT_RawDataByteStreamCnv/SCTRawContByteStreamTool.h
- * @author Hong Ma
- * @date October 2002
- */
-
 #ifndef SCT_RAWDATABYTESTREAMCNV_SCTRAWCONTBYTESTREAMTOOL_H
 #define SCT_RAWDATABYTESTREAMCNV_SCTRAWCONTBYTESTREAMTOOL_H
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index 9388975e906c..82cf6390393c 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -4,7 +4,6 @@
 
 #include "SCT_RodDecoder.h"
 
-//Athena
 #include "ByteStreamData/RawEvent.h"
 #include "InDetIdentifier/SCT_ID.h"
 #include "InDetReadoutGeometry/SCT_DetectorManager.h"
@@ -13,7 +12,6 @@
 
 #include "Identifier/IdentifierHash.h"
 
-//STL
 #include <algorithm>
 #include <deque>
 #include <utility>
@@ -23,9 +21,10 @@ union RawWord {
   uint16_t word16[2];
 };
 
-//constructor
-SCT_RodDecoder::SCT_RodDecoder
-(const std::string& type, const std::string& name,const IInterface* parent) :
+// Constructor
+
+SCT_RodDecoder::SCT_RodDecoder(const std::string& type, const std::string& name,
+                               const IInterface* parent) :
   base_class(type, name, parent),
   m_sctID{nullptr},
   m_singleCondHitNumber{0},
@@ -61,10 +60,13 @@ SCT_RodDecoder::SCT_RodDecoder
 {
 }
 
-StatusCode SCT_RodDecoder::initialize() {
+// Initialize
+
+StatusCode SCT_RodDecoder::initialize() 
+{
   ATH_CHECK(AlgTool::initialize());
 
-  /** Retrieve cabling tool */
+  // Retrieve cabling tool
   ATH_CHECK(m_cabling.retrieve());
   ATH_MSG_DEBUG("Retrieved tool " << m_cabling);
 
@@ -92,10 +94,11 @@ StatusCode SCT_RodDecoder::initialize() {
   return StatusCode::SUCCESS;
 }
 
-StatusCode 
-SCT_RodDecoder::finalize() {
-  
-  /** print out summaries of data and errors decoded */
+// Finalize
+
+StatusCode SCT_RodDecoder::finalize() 
+{
+  // Print out summaries of data and errors decoded
   ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_headNumber  <<" link headers found");
   ATH_MSG_INFO("SCT BytestreamCnv summary: " << m_trailerNumber << " link trailers found");
 
@@ -108,7 +111,7 @@ SCT_RodDecoder::finalize() {
   ATH_MSG_INFO("SCT decoding bytestream summary: " 
                << m_evenExpHitNumber    << " consecutive paired strips with hit in expanded mode");
   ATH_MSG_INFO("SCT decoding bytestream summary: " 
-               << m_lastExpHitNumber    << " last consecutive strip with hit in expanded mode");
+               << m_lastExpHitNumber    << " last consecutive strips with hit in expanded mode");
 
   if (m_headErrorBCID > 0) {
      ATH_MSG_INFO("SCT BytestreamCnv summary: header-> "          
@@ -189,7 +192,7 @@ SCT_RodDecoder::finalize() {
   ATH_MSG_INFO("Number of SCT RDOs created->       " << m_nRDOs);
 
   if (m_numMissingLinkHeader > 0) ATH_MSG_WARNING("SCT Missing Link Headers found " << m_numMissingLinkHeader);
-  if (m_numUnknownOfflineID  > 0) ATH_MSG_WARNING("SCT unknown onlineID found "     << m_numUnknownOfflineID);
+  if (m_numUnknownOfflineID  > 0) ATH_MSG_WARNING("SCT unknown onlineIDs found "     << m_numUnknownOfflineID);
 
   ATH_CHECK(AlgTool::finalize());
   ATH_MSG_DEBUG("SCT_RodDecoder::finalize()");
@@ -197,22 +200,24 @@ SCT_RodDecoder::finalize() {
   return StatusCode::SUCCESS;
 }
 
+// fillCollection method
 
-StatusCode
-SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
-                               ISCT_RDO_Container& rdoIDCont,
-                               InDetBSErrContainer* errs,
-                               SCT_ByteStreamFractionContainer* bsFracCont,
-                               const std::vector<IdentifierHash>* vecHash) const
+StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
+                                          ISCT_RDO_Container& rdoIDCont,
+                                          InDetBSErrContainer* errs,
+                                          SCT_ByteStreamFractionContainer* bsFracCont,
+                                          const std::vector<IdentifierHash>* vecHash) const
 {
   const uint32_t robID{robFrag.rod_source_id()};
-  /**determine whether this data was generated using the ROD simulator */
+  // Determine whether this data was generated using the ROD simulator
   const uint32_t rodDataType{robFrag.rod_detev_type()};
   const bool rodSimulatedData{static_cast<bool>((rodDataType >> 20) & 1)};
-  if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::SimulatedData, robID, rodSimulatedData);
+  if (bsFracCont) {
+     bsFracCont->insert(SCT_ByteStreamFractionContainer::SimulatedData, robID, rodSimulatedData);
+  }
   if (rodSimulatedData) addRODError(robID, SCT_ByteStreamErrors::RODSimulatedData, errs);
 
-  /** look for the bit that denotes "Super-condensed" mode.*/
+  // Look for the bit that denotes "Super-condensed" mode
   const bool superCondensedMode{static_cast<bool>((rodDataType >> 21) & 1)};
   if (bsFracCont) {
      bsFracCont->insert(SCT_ByteStreamFractionContainer::SuperCondensedMode, robID, superCondensedMode);
@@ -237,12 +242,9 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   RawWord robData;
   robData.word32=0;
   int n;
-  int errors{0}; /** encodes the errors on the header
-                  * bit 4: error in condensed mode 1st hit
-                  * bit 5: error in condensed mode 2nd hit
-                  */
+  int errors{0}; // Encodes the errors on the header (bit 4: error in condensed mode 1st hit, bit 5: error in condensed mode 2nd hit)
 
-  /** These are for the trigger */
+  // These are for the trigger
   CacheHelper cache;
   cache.vecHash = vecHash;
   
@@ -252,18 +254,17 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
 
   StatusCode sc{StatusCode::SUCCESS};
 
-  /// look at ROB status word ////////////////////////
-
+  // Look at ROB status word
   if (robFrag.nstatus()!=0) {
     const uint32_t* robStatus;
     robFrag.status(robStatus);
     if ((*robStatus)!=0) {
       ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
                     << " is non-zero " << (*robStatus) << std::dec);
-      /// first store generic "ROBFragmentError" error type..
+      // First store generic "ROBFragmentError" error type.
       addRODError(robID, SCT_ByteStreamErrors::ROBFragmentError, errs);
       sc = StatusCode::RECOVERABLE;
-      /// now look for specific problems, e.g. truncated or masked-off RODs
+      // Now look for specific problems, e.g. truncated or masked-off RODs
       if (((*robStatus) >> 27) & 0x1) {
         ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
                       << std::dec << " indicates data truncation.");
@@ -281,15 +282,14 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
     }
   }
   
-  /// look at ROD status words /////////
-
+  // Look at ROD status words
   OFFLINE_FRAGMENTS_NAMESPACE::PointerType vecRODStatus;
   const long unsigned int vecRODStatusSize{robFrag.rod_nstatus()};
 
   robFrag.rod_status(vecRODStatus);
   for (long unsigned int i{0}; i<vecRODStatusSize; i++) {
     const uint32_t statusWord{vecRODStatus[i]};
-    /** check for clock errors in second ROD status word */
+    // Check for clock errors in second ROD status word
     if (i==1) {
       const int timClockError{static_cast<int>((statusWord >> 16) & 0x1)};
       const int bocClockError{static_cast<int>((statusWord >> 17) & 0x1)};
@@ -299,15 +299,14 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         m_rodClockErrorNumber++;
         sc=StatusCode::RECOVERABLE;
       }
-      /** look at bits 20-23 for DCS HV */
+      // Look at bits 20-23 for DCS HV
       const int hvBits{static_cast<int>((statusWord >> 20) & 0xf)};
       const bool hvOn{hvBits==0xf};
       if (bsFracCont) bsFracCont->insert(SCT_ByteStreamFractionContainer::HVOn, robID, hvOn);
     }
   }
   
-  /** now look at the data words */
-
+  // Now look at the data words
   bool foundHeader{false};
   
   OFFLINE_FRAGMENTS_NAMESPACE::PointerType vecROBData;
@@ -317,15 +316,13 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   for (unsigned long int i{0}; i<vecROBDataSize; i++) {
     wordCount++;
     robData.word32 = vecROBData[i];
-    /** the data is 16-bits wide packed to a 32-bit word (rob_it1). So we unpack it here. */
+    // The data is 16-bits wide packed to a 32-bit word (rob_it1). So we unpack it here.
     uint16_t data16[2];
     data16[1] = robData.word16[0];
     data16[0] = robData.word16[1];
     
     for (n=0; n<2; n++) {
-      ///---------------------------------------------------------------------
-      /// hit element
-      ///---------------------------------------------------------------------
+      // Hit element
       if (data16[n]&0x8000) {
         if (not foundHeader) {
           ATH_MSG_INFO(" Missing link header in ROD " << std::hex << robID << std::dec);
@@ -337,16 +334,15 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
 
         m_nHits++;
         if (superCondensedMode) {
-
-          /** super-condensed mode
-           *  chip info : 4 bits  data16[n]>>11)0xF
-           *  chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
-           *  For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
-           */
+          // Super-condensed mode:
+          // Chip info: 4 bits  data16[n]>>11)0xF
+          // Chip number == (data16[n]>>11)&0x7
+          // Chip side == (data16[n]>>14)&0x1
+          // For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
           chip = ((data16[n]>>11)&0x7); 
           side = ((data16[n]>>14)&0x1);
           strip = chip*128 + ((data16[n]>>4)&0x7F);
-          timeBin = 0x2; /** assuming timeBin is 010 in super-condensed mode */
+          timeBin = 0x2; // Assuming timeBin is 010 in super-condensed mode
           nStripsInWord = (data16[n]&0xf)+1;
           if (chip>5) {
             ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
@@ -357,10 +353,10 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             continue;
           }
 
-          /**------------ Search for redundancy only for the master chip */
+          // Search for redundancy only for the master chip
           if ((side==1) and ((linkNumber%2)==0)) {
-            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
-                                                                             * make RDO with the previous cluster */
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { 
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -376,8 +372,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             linkNumber++;
           }
           if ((side==0) and ((linkNumber%2)!=0)) {
-            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
-                                                                             * make RDO with the previous cluster */
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { 
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -395,13 +391,12 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));
      
           if (groupSize == 0)  {
-            oldStrip = strip; /** if it's the first super-condensed word */
+            oldStrip = strip; // If it's the first super-condensed word
             oldSide = side;
           }
           
           if ((strip!=oldStrip) or (side!=oldSide)) {
-            /** if it is a new cluster,
-             * make RDO with the previous cluster */
+            // If it is a new cluster, make RDO with the previous cluster
             const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
@@ -418,16 +413,15 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
      
         } 
         else if (condensedMode) {
-    
-          /** condensed mode
-           *  chip info : 4 bits  data16[n]>>11)0xF
-           *  chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
-           *  For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
-           */
+          // Super-condensed mode:
+          // Chip info: 4 bits  data16[n]>>11)0xF
+          // Chip number == (data16[n]>>11)&0x7
+          // Chip side == (data16[n]>>14)&0x1
+          // For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
           chip = ((data16[n]>>11)&0x7); 
           side = ((data16[n]>>14)&0x1);
           strip = chip*128 + ((data16[n]>>4)&0x7F);
-          timeBin = 0x2; /** assuming timeBin is 010 in condensed mode */
+          timeBin = 0x2; // Assuming timeBin is 010 in condensed mode
           if (chip>5) {
             ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
                           << std::hex << data16[n]);
@@ -437,10 +431,10 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             continue;
           }
 
-          /**------------ Search for redundancy only for the master chip */
+          // Search for redundancy only for the master chip
           if ((side==1) and ((linkNumber%2)==0)) {
-            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
-                                                                             * make RDO with the previous cluster */
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) {
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -456,8 +450,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             linkNumber++;
           }
           if ((side==0) and ((linkNumber%2)!=0)) {
-            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { /** if it is a new cluster,
-                                                                             * make RDO with the previous cluster */
+            if (((strip!=oldStrip) or (side!=oldSide)) and (groupSize>0)) { 
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -474,14 +468,13 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           }
           onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));
           if (groupSize == 0)  {
-            oldStrip = strip; /** if it's the first condensed word */
+            oldStrip = strip; // If it's the first condensed word
             oldSide = side;
           }
-          if (not (data16[n]&0x1)) { /** 1-hit */
+          if (not (data16[n]&0x1)) { // 1-hit
             m_singleCondHitNumber++;
             if ((strip!=oldStrip) or (side!=oldSide)) {
-              /** if it is a new cluster,
-               * make RDO with the previous cluster */
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -495,7 +488,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               groupSize = 0;
             }
       
-            if (data16[n]&0x4) { /** Error in the hit */
+            if (data16[n]&0x4) { // Error in the hit
               ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1-hit " << std::hex << data16[n]);
               errorHit.push_back(groupSize);
               errors = (errors | 0x10);
@@ -504,7 +497,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             }
             groupSize = (groupSize>=2 ? groupSize : 1);
           } 
-          else { /** 2-hits */
+          else { // 2-hits
             if (strip > 767) {
               addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
               sc=StatusCode::RECOVERABLE;
@@ -514,9 +507,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               continue;
             }
             m_pairedCondHitNumber++;
-            if ((strip!=oldStrip) or (side!=oldSide)) { /** if it is a new cluster,
-                                                         * make RDO with the previous cluster 
-                                                         */
+            if ((strip!=oldStrip) or (side!=oldSide)) {
+              // If it is a new cluster, make RDO with the previous cluster
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
@@ -529,14 +521,14 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               oldSide = side;
               groupSize = 0;
             }    
-            if (data16[n]&0x4) { /** Error in the first hit */
+            if (data16[n]&0x4) { // Error in the first hit
               ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 1st hit" << std::hex << data16[n]);
               errorHit.push_back(groupSize);
               m_condHit1Error++;
               errors = (errors | 0x10);
               sc=StatusCode::RECOVERABLE;
             }
-            if (data16[n]&0x8) { /** Error in the second hit */
+            if (data16[n]&0x8) { // Error in the second hit
               ATH_MSG_DEBUG("    Hit condensed : xxx ERROR in 2nd hit" << std::hex << data16[n]);
               errorHit.push_back(groupSize);
               m_condHit2Error++;
@@ -547,18 +539,17 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           }
         } 
         else {
-          /** Expanded mode
-           * chip info from the first word of expanded cluster : 4 bits  data16[n]>>11)0xF
-           * chip number == (data16[n]>>11)&0x7 and chip side == (data16[n]>>14)&0x1
-           * For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
-           */
-
-          if (not (data16[n]&0x8)) {  /** 1st hit cluster expanded */
+          // Expanded mode:
+          // Chip info from the first word of expanded cluster : 4 bits  data16[n]>>11)0xF
+          // Chip number == (data16[n]>>11)&0x7 
+          // Chip side == (data16[n]>>14)&0x1
+          // For example if data16[n]>>11)0xF = 0101 => chip5 or chip5 on side0, data16[n]>>11)0xF = 1101 => chip13 or chip5 on side1
+          if (not (data16[n]&0x8)) {  // 1st hit cluster expanded
             m_firstExpHitNumber++;
             chip = ((data16[n]>>11)&0x7);  
             side = ((data16[n]>>14)&0x1);
             strip = chip*128 + ((data16[n]>>4)&0x7F);
-            timeBin = data16[n]&0x7; /** Real way for obtaining timeBin info */
+            timeBin = data16[n]&0x7; // Real way for obtaining timeBin info
       
             if (chip>5) {
               ATH_MSG_DEBUG("Expanded hit: First hit xxx ERROR chip Nb = " << chip << " > 5");   
@@ -568,7 +559,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             }
       
 
-            /** -------------- Search for redundancy only for the master chip */
+            // Search for redundancy only for the master chip
             if ((side==1) and ((linkNumber%2)==0))  {
               linkNumber++;
             }
@@ -587,8 +578,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
             }
             groupSize = 0;
           } 
-          else { /** next hits cluster expanded */
-            if (data16[n]&0x80) { /** paired hits */
+          else { // Next hits cluster expanded
+            if (data16[n]&0x80) { // Paired hits
               if (strip > 767) {
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
                 sc=StatusCode::RECOVERABLE;
@@ -602,7 +593,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
                 addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
                 continue;
               }
-              /** first hit from the pair  */
+              // First hit from the pair
               strip++;
               timeBin = data16[n]&0x7;
               groupSize = 1;
@@ -614,7 +605,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               else {
                 saved[side*768+strip] = rdoMade1;
               }
-              /** second hit from the pair */
+              // Second hit from the pair
               strip++;
               timeBin = ((data16[n] >> 4) & 0x7);
               const int rdoMade2{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
@@ -627,7 +618,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               }
               groupSize = 0;
             } 
-            else {  /** Last hit of the cluster */
+            else { // Last hit of the cluster
               m_lastExpHitNumber++;
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: last hit xxx ERROR chip Nb = " << chip << " > 5");  
@@ -649,13 +640,11 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
               groupSize = 0; 
             }
           }
-        } // end expanded mode
-      }// end of hit element
+        } // End expanded mode
+      } // End of hit element
       
       
-      ///---------------------------------------------------------------------
-      /// Header
-      ///---------------------------------------------------------------------
+      // Header
       else if (((data16[n]>>13)&0x7) == 0x1) {
         foundHeader=true;
   
@@ -671,7 +660,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
           }
         }
   
-        /** Everything is set to default for a new hunt of RDO */
+        // Everything is set to default for a new hunt of RDO
         strip =0;
         oldStrip = -1;
         oldSide = -1;
@@ -680,10 +669,10 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         memset(saved,0,768*2);
         errorHit.clear();
 
-        /** Link Number (or stream) in the ROD fragment */
+        // Link Number (or stream) in the ROD fragment
         const int rodlinkNumber{static_cast<int>(data16[n] & 0x7F)};
 
-        /** This is the real calculation for the offline  */
+        // This is the real calculation for the offline
         linkNumber = (((rodlinkNumber >>4)&0x7)*12+(rodlinkNumber &0xF));
         onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));     
         if ((onlineID ==0) or (linkNumber > 95)) {
@@ -696,10 +685,9 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         else {
           currentLinkIDHash = m_cabling->getHashFromOnlineId(onlineID);
         }
-        /// look for masked off links - bit 7
+        // Look for masked off links - bit 7
         if (data16[n] >> 7 & 0x1) {
           ATH_MSG_DEBUG("Masked link " << onlineID << " " << currentLinkIDHash);
-          //no counter increment here, is that correct? (sar)
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::MaskedLink, errs);
           sc=StatusCode::RECOVERABLE; 
         }
@@ -742,19 +730,15 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
 
         continue;
   
-      } // end header
+      } // End header
       
-      ///---------------------------------------------------------------------
-      /// trailer
-      ///---------------------------------------------------------------------
+      // Trailer
       else if (((data16[n]>>13)&0x7) == 0x2) {
         foundHeader=false;
   
         m_trailerNumber++;
-        //ErrorTrailer = false;
   
         if (data16[n]&0x1000) {
-          //ErrorTrailer = true;
           ATH_MSG_DEBUG("    Trailer: xxx Trailer ERROR " << std::hex << data16[n]);
           m_trailerErrorBit++;
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerError, errs);
@@ -762,10 +746,9 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         }
   
         if (data16[n]&0x800) {
-          //ErrorTrailer = true;
-          /** no data should appear between header and trailer
-              See 1.2.2 Formatter FPGA - Serial Data Decoding and Formatting of
-              http://www-eng.lbl.gov/~jmjoseph/Atlas-SiROD/Manuals/usersManual-v164.pdf */
+          // No data should appear between header and trailer
+          // See 1.2.2 Formatter FPGA - Serial Data Decoding and Formatting of
+          // http://www-eng.lbl.gov/~jmjoseph/Atlas-SiROD/Manuals/usersManual-v164.pdf
           ATH_MSG_DEBUG("    Trailer: xxx Header-Trailer limit ERROR " << std::hex << data16[n]);
           m_trailerErrorLimit++;
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::HeaderTrailerLimitError, errs);
@@ -773,14 +756,14 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         }
   
         if (data16[n]&0x400) {
-          //ErrorTrailer = true; /** not sure if there are hit elements before (probably yes but in principle they are fine) */
+          // Not sure if there are hit elements before (probably yes but in principle they are fine)
           ATH_MSG_DEBUG("    Trailer: xxx Data Overflow ERROR " << std::hex << data16[n]);
           m_trailerErrorOverflow++;
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerOverflowError, errs);
           sc=StatusCode::RECOVERABLE;
         }
         if (data16[n] & 0xF) {
-          // fisrt temporarily masked chip information
+          // First temporarily masked chip information
           // 0 means no masked chip (always has been 0 until April 2017)
           // 
           // If Rx redundacy is not used, 
@@ -805,16 +788,13 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         continue; 
       }
       
-      ///---------------------------------------------------------------------
-      /// FlaggedABCD error
-      /// 000xxxxxxFFFFEEE
-      /// 000: FlaggedABCD error: xxxxxxx not used, FFFF: chip, EEE: error code
-      ///---------------------------------------------------------------------
+      // FlaggedABCD error
+      // 000xxxxxxFFFFEEE
+      // 000: FlaggedABCD error: xxxxxxx not used, FFFF: chip, EEE: error code
       else if (((data16[n]>>13)&0x7) == 0x0) {
         chip = ((data16[n]>>3)&0xF);
         abcError = data16[n]&0x7; 
-        /** no data should appear for that chip but how do we 
-         * want to transmit this information ? */
+        // No data should appear for that chip but how do we want to transmit this information?
         IdentifierHash flagIDHash{0};
         if (onlineID == 0) {
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
@@ -869,9 +849,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         continue;
       } 
       else if (((data16[n]>>13)&0x7) == 0x3) {
-        ///---------------------------------------------------------------------
-        /// Raw Data
-        ///---------------------------------------------------------------------
+        // Raw Data
         IdentifierHash rawIDHash{0};
         if (onlineID == 0) {
           addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
@@ -882,7 +860,7 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         }
 
         ATH_MSG_DEBUG(" xxx Raw Data Mode " << std::hex << data16[n] << std::dec << ": Config Data Mode ");
-        /** too many errors in the BS for the ROD to decode the data */
+        // Too many errors in the BS for the ROD to decode the data
         m_configDataBit++;
         addSingleError(rawIDHash, SCT_ByteStreamErrors::RawError, errs);
         sc=StatusCode::RECOVERABLE;
@@ -894,10 +872,10 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
         addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
         sc=StatusCode::RECOVERABLE;
       }
-    } //end of 16-bit word loop
-  }   //end of 32-bit word loop
+    } // End of 16-bit word loop
+  } // End of 32-bit word loop
 
-  /** create RDO of the last ink or stream of the event */
+  // Create RDO of the last ink or stream of the event
   if (saved[side*768+strip]==false and oldStrip>=0) {
     const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
     if (rdoMade == -1) {
@@ -914,12 +892,8 @@ SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& r
   if (sc.isFailure()) ATH_MSG_DEBUG("One or more ByteStream errors found ");
   return sc;
 }
-/** makeRDO has 3 possible return values: 
- *          1 if RDO was successfully created,
- *          0 if collection was deliberately skipped (for trigger)
- *         -1 if there was an error in the decoding - will be passed
- *            on as StatusCode::RECOVERABLE by fillCollection().
- */
+
+// makeRDO method
 
 int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onlineID, int errors,
                             ISCT_RDO_Container& rdoIDCont,
@@ -930,9 +904,9 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
     ATH_MSG_WARNING("No link header found, possibly corrupt ByteStream.  Will not try to make RDO");
     return -1;
   }
-  /** get offlineId from the link number and ROB number */
-  const IdentifierHash idCollHash{m_cabling->getHashFromOnlineId(onlineID)};
-  if (not idCollHash.is_valid()) {
+  // Get offlineId from the link number and ROB number
+  const IdentifierHash collIDHash{m_cabling->getHashFromOnlineId(onlineID)};
+  if (not collIDHash.is_valid()) {
     m_numUnknownOfflineID++;
     ATH_MSG_ERROR("Unknown OfflineId for OnlineId -> cannot create RDO");
     ATH_MSG_WARNING("Unknown OfflineId for OnlineId " << std::hex << onlineID  
@@ -942,107 +916,110 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
 
   if (((strip & 0x7f) + (groupSize-1) > 127) or (strip<0) or (strip>767)) {
     ATH_MSG_WARNING("Cluster with " << groupSize << " strips, starting at strip " << strip
-                    << " in collection " << idCollHash << " out of range. Will not make RDO");
+                    << " in collection " << collIDHash << " out of range. Will not make RDO");
     return -1;
   }
 
-  /** this option is for the trigger, if there is a vecHash* given, test it ! */
+  // This option is for the trigger, if there is a vecHash* given, test it!
   if (cache.vecHash) {
-    if (idCollHash == cache.skipHash) {
+    if (collIDHash == cache.skipHash) {
       ATH_MSG_VERBOSE("Collection for Hash not to be decoded, skip");
       return 0;
     } 
-    else if (idCollHash != cache.lastHash) {
-      cache.lastHash = idCollHash;
-      /** maybe the new hash is not in the list, so test it */
-      std::vector<IdentifierHash>::const_iterator idHashIterator{find(cache.vecHash->begin(), 
+    else if (collIDHash != cache.lastHash) {
+      cache.lastHash = collIDHash;
+      // Maybe the new hash is not in the list, so test it
+      std::vector<IdentifierHash>::const_iterator hashIDIterator{find(cache.vecHash->begin(), 
                                                                       cache.vecHash->end(), 
-                                                                      idCollHash)};
-      if (idHashIterator == cache.vecHash->end()) {
+                                                                      collIDHash)};
+      if (hashIDIterator == cache.vecHash->end()) {
         ATH_MSG_VERBOSE("Collection for Hash not to be decoded, skip");
-        /** remember this one, so that we do not find(...) forever */
-        cache.skipHash = idCollHash;
+        // Remember this one, so that we do not find(...) forever
+        cache.skipHash = collIDHash;
         return 0;
       }
     }
   }
 
-  if(rdoIDCont.hasExternalCache() and rdoIDCont.tryFetch(idCollHash)){
-    ATH_MSG_DEBUG("Hash already in collection - cache hit " << idCollHash);
+  if(rdoIDCont.hasExternalCache() and rdoIDCont.tryFetch(collIDHash)){
+    ATH_MSG_DEBUG("Hash already in collection - cache hit " << collIDHash);
     return 0;
   }
 
-  /** see if strips go from 0 to 767 or vice versa */
-  if (m_swapPhiReadoutDirection[idCollHash]) {
+  // See if strips go from 0 to 767 or vice versa
+  if (m_swapPhiReadoutDirection[collIDHash]) {
     strip = 767 - strip;
     strip = strip-(groupSize-1);
   }
 
-  /** get identifier from the hash, this is not nice */
-  const Identifier idColl{m_sctID->wafer_id(idCollHash)};
-  const Identifier idDigit{m_sctID->strip_id(idColl, strip)};
-  if (not m_sctID->is_sct(idDigit)) {
+  // Get identifier from the hash, this is not nice
+  const Identifier collID{m_sctID->wafer_id(collIDHash)};
+  const Identifier digitID{m_sctID->strip_id(collID, strip)};
+  if (not m_sctID->is_sct(digitID)) {
     ATH_MSG_WARNING("Cluster with invalid Identifier. Will not make RDO");
     return -1;
   }
+
   const unsigned int rawDataWord{static_cast<unsigned int>(groupSize | (strip << 11) | (timeBin <<22) | (errors << 25))};
 
-  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << idColl.getString()
-                << ":-> " << m_sctID->print_to_string(idDigit) << std::dec);
+  ATH_MSG_DEBUG("Output Raw Data " << std::hex << " Coll " << collID.getString()
+                << ":-> " << m_sctID->print_to_string(digitID) << std::dec);
 
 
 
   SCT_RDO_Collection* sctRDOColl{nullptr};
-  ATH_CHECK(rdoIDCont.naughtyRetrieve(idCollHash, sctRDOColl), 0); // Returns null if not present
+  ATH_CHECK(rdoIDCont.naughtyRetrieve(collIDHash, sctRDOColl), 0); // Returns null if not present
 
   if (sctRDOColl==nullptr) {
-    ATH_MSG_DEBUG(" Collection ID = " << idCollHash << " does not exist, create it ");
-    /** create new collection */   
-    sctRDOColl = new SCT_RDO_Collection(idCollHash);
-    sctRDOColl->setIdentifier(idColl);
-    StatusCode sc{rdoIDCont.addCollection(sctRDOColl, idCollHash)};
-    ATH_MSG_DEBUG("Adding " << idCollHash);
+    ATH_MSG_DEBUG(" Collection ID = " << collIDHash << " does not exist, create it ");
+    // Create new collection
+    sctRDOColl = new SCT_RDO_Collection(collIDHash);
+    sctRDOColl->setIdentifier(collID);
+    StatusCode sc{rdoIDCont.addCollection(sctRDOColl, collIDHash)};
+    ATH_MSG_DEBUG("Adding " << collIDHash);
     if (sc.isFailure()){
       ATH_MSG_ERROR("failed to add SCT RDO collection to container");
     }
   }
-  
-  /** Now the Collection is there for sure. Create RDO and push it
-   * into Collection. 
-   */
+ 
+  // Now the Collection is there for sure. Create RDO and push it into Collection.  
   m_nRDOs++;
-  sctRDOColl->push_back(std::make_unique<SCT3_RawData>(idDigit, rawDataWord, &errorHit));
+  sctRDOColl->push_back(std::make_unique<SCT3_RawData>(digitID, rawDataWord, &errorHit));
   return 1;
 }
 
-void 
-SCT_RodDecoder::addRODError(uint32_t rodID, int errorType,
-                            InDetBSErrContainer* errs) const
+// addRODError method
+
+void SCT_RodDecoder::addRODError(uint32_t rodID, int errorType,
+                                 InDetBSErrContainer* errs) const
 {
-  std::vector<IdentifierHash> idHashes;
-  m_cabling->getHashesForRod(idHashes, rodID);
-  for (const IdentifierHash& hash: idHashes) {
+  std::vector<IdentifierHash> hashIDs;
+  m_cabling->getHashesForRod(hashIDs, rodID);
+  for (const IdentifierHash& hash: hashIDs) {
     addSingleError(hash, errorType, errs);
   }
   return;
 }
 
-bool 
-SCT_RodDecoder::addSingleError(const IdentifierHash& idHash,
-                               int bsErrorType,
-                               InDetBSErrContainer* errs) const
+// addSingleError method
+
+bool SCT_RodDecoder::addSingleError(const IdentifierHash& hashID,
+                                    int bsErrorType,
+                                    InDetBSErrContainer* errs) const
 {
-  const bool ok{idHash.is_valid() and errs!=nullptr};
+  const bool ok{hashID.is_valid() and errs!=nullptr};
   if (ok) {
-    errs->push_back(std::make_unique<std::pair<IdentifierHash, int> >(idHash, bsErrorType));
+    errs->push_back(std::make_unique<std::pair<IdentifierHash, int> >(hashID, bsErrorType));
   }
   return ok;
 }
 
-void
-SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, 
-                                       unsigned int firstTempMaskedChip, 
-                                       InDetBSErrContainer* errs) const {
+// setFirstTempMaskedChip method
+
+void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, 
+                                            unsigned int firstTempMaskedChip, 
+                                            InDetBSErrContainer* errs) const 
+{
   if (not hashID.is_valid()) {
     ATH_MSG_INFO("setFirstTempMaskedChip hashID " << hashID << " is invalid.");
     return;
@@ -1083,12 +1060,12 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
       type = 2;
     } 
     else if (badLinks.first and badLinks.second) {
-      // both link-0 and link-1 are working
+      // Both link-0 and link-1 are working
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are working. But Rx redundancy is used... Why?");
       return;
     } 
     else {
-      // both link-0 and link-1 are broken
+      // Both link-0 and link-1 are broken
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are broken. But data are coming... Why?");
       return;
     }
@@ -1144,7 +1121,7 @@ SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
   };
 
   if (type==0) {
-    // both link-0 and link-1 are working
+    // Both link-0 and link-1 are working
 
     // Chips 0-5 are on side 0 and chips 6-11 are on side 1.
     // Normally, modules send hits on side 0 via link-0 and side 1 via link-1.
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index 4e4ca2886d3d..4d9b6b1ce53e 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -2,13 +2,6 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-/**
- *      @file header for SCT_RodDecoder Class
- *      AlgTool class to decode ROB bytestream data into RDO
- *      @author: Kondo.Gnanvo@cern.ch, Maria.Jose.Costa@cern.ch
- *      @current developer: Kondo Gnanvo, QMUL (London), august 2005
- */
-
 #ifndef INDETRAWDATABYTESTREAM_SCT_RODDECODER_H 
 #define INDETRAWDATABYTESTREAM_SCT_RODDECODER_H
 
@@ -31,39 +24,47 @@
 class IdentifierHash;
 class SCT_ID;
 
-//using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
-/** @class SCT_RodDecoder
- *  @brief AlgTool which decodes the SCT binary format to create RDOs
- *  also inserts them to the collection.
- *  This tool is used by the SCTRawCollByteStreamTool
- **/
+/** 
+ * @class SCT_RodDecoder
+ *
+ * @brief Athena Algorithm Tool to decode the SCT binary format to create RDOs and inserts them to the collection.
+ *
+ * This tool is used by the SCTRawCollByteStreamTool.
+ */
 class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
 {
-
-  struct CacheHelper{//temp object to help with trigger caching
+  /** Temp object to help with trigger caching. */
+  struct CacheHelper{
     IdentifierHash skipHash, lastHash;
     const std::vector<IdentifierHash>* vecHash;
   };
 
  public: 
-  //@name Usual AlgTool methods
-  //@{
-  /** constructor*/
+
+  /** Constructor */
   SCT_RodDecoder(const std::string& type, const std::string& name, const IInterface* parent);
   
-  /** destructor  */
+  /** Destructor */
   virtual ~SCT_RodDecoder() = default;
 
-  /** AlgTool initialize */
+  /** Initialize */
   virtual StatusCode initialize() override;
 
-  /** AlgTool finalize*/
+  /** Finalize */
   virtual StatusCode finalize() override;
-  
-  /** @brief Decode the rob data fragment and fill the collection SCT_RDO_Collection 
-   *  with the RDO built by the makeRDO(..) method
+ 
+  /** 
+   * @brief Fill SCT RDO Collection with decoded ROB data
+   *
+   * Decode the rob data fragment and fill the collection SCT_RDO_Collection with the RDO built by the makeRDO(..) method.
    * rdoIdc, errs, and bsFracCont are updated based on robFrag and vecHash.
-   **/
+   *
+   * @param robFrag ROB fragment.
+   * @param rdoIDCont RDO ID Container to be filled.
+   * @param errs Byte stream error container.
+   * @param bsFracCont Byte stream fraction container.
+   * @param vecHash Vector of hashes.
+   */
   virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
                                     ISCT_RDO_Container& rdoIDCont,
                                     InDetBSErrContainer* errs,
@@ -71,67 +72,171 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
                                     const std::vector<IdentifierHash>* vecHash = nullptr) const override;
 
  private:
-  /// method that builds the RawData RDO and add it to the collection 
-  /// rdoIdc and cache are updated based on other arguments
+
+  /**
+   * @brief Builds RawData RDO and adds to RDO container
+   *
+   * Method that builds the RawData RDO and add it to the collection rdoIdc and cache are 
+   * updated based on other arguments. 
+   * Method has 3 possible return values:
+   *   1 if RDO was successfully created
+   *   0 if collection was deliberately skipped (for trigger)
+   *  -1 if there was an error in the decoding - will be passed on as StatusCode::RECOVERABLE by fillCollection()
+   *
+   * @param strip Strip number info from the RDO.
+   * @param groupSize Group size info from the RDO.
+   * @param timeBin Time bin info for RDO.
+   * @param onlineID Online Identifier from the RDO.
+   * @param errors Error info.
+   * @param rdoIDCont RDO ID Container to be filled.
+   * @param cache Cache.
+   * @param errorHit Hit error info.
+   */
   int makeRDO(int strip, int groupSize, int timeBin,
               uint32_t onlineID, int errors,
               ISCT_RDO_Container& rdoIDCont,
               CacheHelper& cache,
               const std::vector<int>& errorHit) const;
 
-  /// add an error for each wafer in a problematic ROD.
+  /**
+   * @brief Add an error for each wafer in the problematic ROD
+   *
+   * @param rodID Identifer of ROD.
+   * @param errorType Error type info.
+   * @param errs Byte stream error container.
+   */
   void addRODError(uint32_t rodID, int errorType,
                    InDetBSErrContainer* errs) const;
-  bool addSingleError(const IdentifierHash& idHash,
+  /**
+   * @brief Add single eror
+   *
+   * @param hashID Identifier for hash.
+   * @param bsErrorType Byte Stream error type info.
+   * @param errs Byte stream error container.
+   */
+  bool addSingleError(const IdentifierHash& hashID,
                       int bsErrorType,
                       InDetBSErrContainer* errs) const;
 
-  /** Set first temporarily masked chip information from byte stream trailer */
+  /**
+   * @brief Set first temporarily masked chip information from byte stream trailer
+   *
+   * @param hashID Identifier for hash.
+   * @param firstTempMaskedChip  Firt temporarily masked chip info.
+   * @param errs Byte stream error container.
+   */
   void setFirstTempMaskedChip(const IdentifierHash& hashID, 
                               unsigned int firstTempMaskedChip, 
                               InDetBSErrContainer* errs) const;
 
+  /** Identifier helper class for the SCT subdetector that creates compact Identifier objects and 
+      IdentifierHash or hash IDs. Also allows decoding of these IDs. */
   const SCT_ID* m_sctID;
+
+  /** "Context" of an expanded identifier (ExpandedIdentifier) for compact or 
+      hash versions (Identifier32 or IdentifierHash) */
   IdContext m_contextSCT;
+
+  /** Providing mappings of online and offline identifiers and also serial numbers. */
   ToolHandle<ISCT_CablingTool> m_cabling{this, 
                                          "SCT_CablingTool", 
                                          "SCT_CablingTool", 
                                          "Tool to retrieve SCT Cabling"};
+
+  /** Service that keeps track of configuration conditions. */
   ToolHandle<ISCT_ConfigurationConditionsTool> m_configTool{this, 
                                                             "ConfigTool",
                                                             "SCT_ConfigurationConditionsTool/InDetSCT_ConfigurationConditionsTool", 
                                                             "Tool to retrieve SCT Configuration Tool"};
-  /** Summary of the decoding process */
-  mutable std::atomic_uint m_singleCondHitNumber;   //!< Total number of single hit decoded in condensed mode
-  mutable std::atomic_uint m_pairedCondHitNumber;   //!< Total number of paired hit decoded in condensed mode
-  mutable std::atomic_uint m_firstExpHitNumber;     //!< Total number of first hit decoded in expanded mode
-  mutable std::atomic_uint m_evenExpHitNumber;      //!< Total number of paired hit decoded in expanded mode
-  mutable std::atomic_uint m_lastExpHitNumber;      //!< Total number of last hit decoded in expanded mode
-  mutable std::atomic_uint m_headNumber;            //!< Total number of decoded header data
-  mutable std::atomic_uint m_trailerNumber;         //!< Total number of decoded trailer data
-  mutable std::atomic_uint m_headErrorBCID;         //!< Total number of bcid error in the header data
-  mutable std::atomic_uint m_headErrorLvl1ID;       //!< Total number of lvl1id error in the header data
-  mutable std::atomic_uint m_headErrorTimeout;      //!< Total number of timeout error in the header data
-  mutable std::atomic_uint m_headErrorFormatter;    //!< Total number of formatter error in the header data
-  mutable std::atomic_uint m_headErrorPreamble;     //!< Total number of preamble error in the header data
-  mutable std::atomic_uint m_trailerErrorOverflow;  //!< Total number of overflow error in the trailer data
-  mutable std::atomic_uint m_trailerErrorLimit;     //!< Total number of header trailer limit error in the trailer data
-  mutable std::atomic_uint m_trailerErrorBit;       //!< Total number of trailer bit error
-  mutable std::atomic_uint m_configDataBit;         //!< Total number of configuration data
-  mutable std::atomic_uint m_flagErrorBit;          //!< Total number of flag error data
-  mutable std::atomic_uint m_condHit1Error;         //!< Total number of first hit data error
-  mutable std::atomic_uint m_condHit2Error;         //!< Total number second hit data errors
-  mutable std::atomic_uint m_chipNumberError;       //!< Total number of chip number error
-  mutable std::atomic_uint m_unknownDataFormat;     //!< Total number of unknown data format
+
+  /** Total number of single strips with hit decoded in condensed mode */
+  mutable std::atomic_uint m_singleCondHitNumber;   
+
+  /** Total number of paired strips with hit decoded in condensed mode */
+  mutable std::atomic_uint m_pairedCondHitNumber;  
+  
+  /** Total number of first strips with hit decoded in expanded mode */
+  mutable std::atomic_uint m_firstExpHitNumber;   
+  
+  /** Total number of consecutive paired strips with hit decoded in expanded mode */
+  mutable std::atomic_uint m_evenExpHitNumber;   
+  
+  /** Total number of last consecutive strips with hit decoded in expanded mode */
+  mutable std::atomic_uint m_lastExpHitNumber;  
+  
+  /** Total number of decoded header data */
+  mutable std::atomic_uint m_headNumber;       
+  
+  /** Total number of decoded trailer data */
+  mutable std::atomic_uint m_trailerNumber;   
+  
+  /** Total number of BCID errors in the header data */
+  mutable std::atomic_uint m_headErrorBCID;  
+  
+  /** Total number of Lvl1ID errors in the header data */
+  mutable std::atomic_uint m_headErrorLvl1ID; 
+  
+  /** Total number of timeout errors in the header data */
+  mutable std::atomic_uint m_headErrorTimeout;    
+  
+  /** Total number of formatter errors in the header data */
+  mutable std::atomic_uint m_headErrorFormatter;  
+  
+  /** Total number of preamble errors in the header data */
+  mutable std::atomic_uint m_headErrorPreamble;  
+  
+  /** Total number of overflow errors in the trailer data */
+  mutable std::atomic_uint m_trailerErrorOverflow; 
+  
+  /** Total number of header trailer limit errors in the trailer data */
+  mutable std::atomic_uint m_trailerErrorLimit;   
+  
+  /** Total number of trailer bit errors */
+  mutable std::atomic_uint m_trailerErrorBit;    
+  
+  /** Total number of configuration data for raw data */
+  mutable std::atomic_uint m_configDataBit;     
+  
+  /** Total number of flag error data */
+  mutable std::atomic_uint m_flagErrorBit;     
+  
+  /** Total number of first hit data errors */
+  mutable std::atomic_uint m_condHit1Error;   
+  
+  /** Total number second hit data errors */
+  mutable std::atomic_uint m_condHit2Error;  
+  
+  /** Total number of chip number errors */
+  mutable std::atomic_uint m_chipNumberError;  
+  
+  /** Total number of unknown data formats */
+  mutable std::atomic_uint m_unknownDataFormat; 
+  
+  /** Total number of SCT hits in ByteStream */
   mutable std::atomic_uint m_nHits;
+  
+  /** Total number of SCT RDOs created */
   mutable std::atomic_uint m_nRDOs;
+  
+  /** Total number of masked links in the header data */
   mutable std::atomic_uint m_maskedLinkNumber;
+  
+  /** Total number of masked RDOs */
   mutable std::atomic_uint m_maskedRODNumber;
+  
+  /** Total number of ROD clock errors */
   mutable std::atomic_uint m_rodClockErrorNumber;
+  
+  /** Total number of truncated ROBFragments */
   mutable std::atomic_uint m_truncatedRODNumber;
+  
+  /** Total number of missing link headers */
   mutable std::atomic_uint m_numMissingLinkHeader;
+  
+  /** Total number of SCT unknown online IDs */
   mutable std::atomic_uint m_numUnknownOfflineID;
   
+  /** Swap phi readout direction */
   std::vector<bool> m_swapPhiReadoutDirection;
 };
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.cxx
index 72d88f327122..88b7b1105148 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.cxx
@@ -42,7 +42,8 @@ namespace { // Anonymous namespace
 
 // Constructor
 
-SCT_RodEncoder::SCT_RodEncoder(const std::string& type, const std::string& name, const IInterface* parent) : 
+SCT_RodEncoder::SCT_RodEncoder(const std::string& type, const std::string& name, 
+                               const IInterface* parent) : 
   base_class(type, name, parent),
   m_sctID{nullptr},
   m_swapModuleID{} 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
index 7b5d96700da2..1d9896fb44b2 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodEncoder.h
@@ -1,14 +1,6 @@
 /*
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
-
-/**
- * @file SCT_RodEncoder.h
- * @author: Nick Barlow (nbarlow@mail.cern.ch, Kondo.Gnanvo@cern.ch)
- * @date 21 June 2007 (SCT_RodEncoder turned into An AlgTool)
- * 
- * This class provides conversion from SCT RDO to ROD format ByteStream.
- */
  
 #ifndef SCT_RAWDATABYTESTREAMCNV_SCT_RODENCODER_H
 #define SCT_RAWDATABYTESTREAMCNV_SCT_RODENCODER_H
@@ -96,9 +88,9 @@ class SCT_RodEncoder : public extends<AthAlgTool, ISCT_RodEncoder>
    *
    * @param vecTimeBins Vector of time bins for RDOs.
    * @param vec16Words Vector of 16 bit words to filled from encoded RDO data.
-   * @param rdo RDO raw data object to be encoded
-   * @param groupSize Group size info from the RDO
-   * @param strip Strip number info from the RDO
+   * @param rdo RDO raw data object to be encoded.
+   * @param groupSize Group size info from the RDO.
+   * @param strip Strip number info from the RDO.
    */
   void encodeData(const std::vector<int>& vecTimeBins, std::vector<uint16_t>& vec16Words, 
                   const SCT_RDORawData* rdo, const int& groupSize, const int& strip) const;
@@ -109,11 +101,10 @@ class SCT_RodEncoder : public extends<AthAlgTool, ISCT_RodEncoder>
    * Method us used by private method encodeData(...).
    *
    * @param vec16Words Vector containing 16 bit words.
-   * @param vec32Words Vector for 32 bit words to be packed
+   * @param vec32Words Vector for 32 bit words to be packed.
    */
   void packFragments(std::vector<uint16_t>& vec16Words, std::vector<uint32_t>& vec32Words) const;
 
-  /// from 16 bits array to 32 bit array   
   /**
    * @breif Method to set pairs of 16 bit words to a 32 bit word.
    *
@@ -177,6 +168,7 @@ class SCT_RodEncoder : public extends<AthAlgTool, ISCT_RodEncoder>
                                          "SCT_CablingTool", 
                                          "SCT_CablingTool", 
                                          "Tool to retrieve SCT Cabling"};
+
   /** Identifier helper class for the SCT subdetector that creates compact Identifier objects and 
       IdentifierHash or hash IDs. Also allows decoding of these IDs. */
   const SCT_ID* m_sctID;
-- 
GitLab


From 0b41bca972534be4d19ef31ee86a78df8cb73e88 Mon Sep 17 00:00:00 2001
From: Tim Martin <Tim.Martin@cern.ch>
Date: Tue, 19 Mar 2019 10:29:35 +0100
Subject: [PATCH 095/163] one more reference update for new j45 count

---
 Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
index 9368387aab55..5aef1caca675 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
@@ -34,6 +34,7 @@ TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_g5_etcut ID#140
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
+TriggerSummaryStep1                     3   0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     3   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
-- 
GitLab


From 30545924115bf9d9f21d9f0b42783c60216c9604 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Mon, 18 Mar 2019 15:40:46 +0100
Subject: [PATCH 096/163] Some trivial fixes for static thread checker

---
 HLT/Trigger/TrigControl/TrigServices/CMakeLists.txt          | 1 +
 HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.cxx     | 4 +++-
 HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.h       | 5 ++++-
 HLT/Trigger/TrigControl/TrigServices/src/TrigMonTHistSvc.cxx | 5 +++--
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/HLT/Trigger/TrigControl/TrigServices/CMakeLists.txt b/HLT/Trigger/TrigControl/TrigServices/CMakeLists.txt
index e778a7736a98..dbc97d83ec1c 100644
--- a/HLT/Trigger/TrigControl/TrigServices/CMakeLists.txt
+++ b/HLT/Trigger/TrigControl/TrigServices/CMakeLists.txt
@@ -22,6 +22,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Trigger/TrigDataAccess/TrigROBDataProviderSvc
                           Trigger/TrigEvent/TrigSteeringEvent
                           PRIVATE
+                          Control/CxxUtils
                           Database/AthenaPOOL/AthenaPoolUtilities
                           Trigger/TrigConfiguration/TrigConfInterfaces
                           Trigger/TrigSteer/TrigOutputHandling )
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.cxx b/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.cxx
index e253e0663f73..7e8cc47879fe 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /*
  * This is a copy of GaudiSvc/src/THistSvc with THistSvc renamed to THistSvcHLT
@@ -36,6 +36,8 @@
 // local headers
 #include "THistSvcHLT.h"
 
+ATLAS_NO_CHECK_FILE_THREAD_SAFETY;  // copied from Gaudi, no checking
+
 namespace
 {
   template <typename InputIterator, typename OutputIterator, typename UnaryOperation, typename UnaryPredicate>
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.h b/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.h
index 5832fc6f574f..4623886d31fd 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.h
+++ b/HLT/Trigger/TrigControl/TrigServices/src/THistSvcHLT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /*
  * This is a copy of GaudiSvc/src/THistSvc with THistSvc renamed to THistSvcHLT
@@ -33,6 +33,9 @@
 
 #include "AthenaBaseComps/AthService.h"
 
+#include "CxxUtils/checker_macros.h"
+ATLAS_NO_CHECK_FILE_THREAD_SAFETY;  // copied from Gaudi, no checking
+
 class IIncidentSvc;
 
 class THistSvcHLT : public extends<AthService, ITHistSvc, IIncidentListener, IIoComponent>
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/TrigMonTHistSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/TrigMonTHistSvc.cxx
index 85a1766f21a1..cf57b1ea4704 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/TrigMonTHistSvc.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/TrigMonTHistSvc.cxx
@@ -1,11 +1,12 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
 #include "GaudiKernel/ISvcLocator.h"
 
 #include "AthenaKernel/errorcheck.h"
+#include "CxxUtils/checker_macros.h"
 #include "TrigMonTHistSvc.h"
 #include "TrigMonitorBase/TrigLockedHist.h"
 
@@ -52,7 +53,7 @@ StatusCode TrigMonTHistSvc::queryInterface(const InterfaceID & riid,
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-StatusCode TrigMonTHistSvc::initialize() {
+StatusCode TrigMonTHistSvc::initialize ATLAS_NOT_THREAD_SAFE() {
 
   CHECK(THistSvcHLT::initialize());
   CHECK(setProperties());
-- 
GitLab


From 92b1e4034e299c46ecb5d40f156229bd437613a3 Mon Sep 17 00:00:00 2001
From: Tim Martin <Tim.Martin@cern.ch>
Date: Tue, 19 Mar 2019 11:13:10 +0100
Subject: [PATCH 097/163] Allow for missing inputs in RoIBResultToxAOD for L1C

---
 .../AnalysisTriggerAlgs/src/RoIBResultToxAOD.cxx     | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/src/RoIBResultToxAOD.cxx b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/src/RoIBResultToxAOD.cxx
index b840fc19287f..37e317f134be 100644
--- a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/src/RoIBResultToxAOD.cxx
+++ b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/src/RoIBResultToxAOD.cxx
@@ -173,7 +173,11 @@ StatusCode RoIBResultToxAOD::createEmTauRoI( const ROIB::RoIBResult& result,
    xAOD::CPMTowerMap_t cpmtowers;
    if( m_emTauTool.isEnabled() && ( ! m_cpmTowerKey.key().empty() ) ) {
       auto cpmTower = SG::makeHandle( m_cpmTowerKey, ctx );
-      m_emTauTool->mapTowers( cpmTower.cptr(), &cpmtowers );
+      if (cpmTower.isValid()) {
+         m_emTauTool->mapTowers( cpmTower.cptr(), &cpmtowers );
+      } else {
+        ATH_MSG_DEBUG( "No CPMTowerCollection found at " << m_cpmTowerKey.key() );
+      }
    }
 
    // reconstruct ROI
@@ -324,7 +328,11 @@ RoIBResultToxAOD::createJetEnergyRoI( const ROIB::RoIBResult& result,
    std::map< int, LVL1::JetInput* > jetInputs;
    if( m_jetTool.isEnabled() && ( ! m_jetElementKey.key().empty() ) ) {
       auto jetElement = SG::makeHandle( m_jetElementKey, ctx );
-      m_jetTool->mapJetInputs( jetElement.cptr(), &jetInputs );
+      if (jetElement.isValid()) {
+         m_jetTool->mapJetInputs( jetElement.cptr(), &jetInputs );
+      } else {
+         ATH_MSG_DEBUG( "No JetElementContainer found at " << m_jetElementKey.key() );
+      }
    }
    std::vector< std::unique_ptr< LVL1::JetInput > > jetInputsHolder;
    for( auto pair : jetInputs ) {
-- 
GitLab


From ceca7c43840b5ebb748e279444954b41fc77a70e Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Tue, 19 Mar 2019 11:41:42 +0100
Subject: [PATCH 098/163] TrigTauRecMerged: const fixes

`const` fixes to avoid static thread checker warnings
---
 .../TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx    | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
index 0be526b23a84..eec555821d96 100755
--- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
+++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
@@ -1036,15 +1036,15 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE,
 	if(pContainer->size()==0)
 	  return HLT::OK;
 
-	static SG::AuxElement::Accessor< xAOD::TauJet::JetLink_t > jetAcc( "jetLink" );
+	static const SG::AuxElement::Accessor< xAOD::TauJet::JetLink_t > jetAcc( "jetLink" );
 	jetAcc( *p_tau ).toPersistent();
 
-	static SG::AuxElement::Accessor< xAOD::TauJet::VertexLink_t > vertexAcc( "vertexLink" );
+	static const SG::AuxElement::Accessor< xAOD::TauJet::VertexLink_t > vertexAcc( "vertexLink" );
 	vertexAcc( *p_tau ).toPersistent();
 
 	xAOD::TauJet::TauTrackLinks_t new_tauTrackLinks;
-	static SG::AuxElement::Accessor< xAOD::TauJet::TauTrackLinks_t > tauTrackAcc( "tauTrackLinks" );
-	static SG::AuxElement::Accessor< xAOD::TauTrack::TrackParticleLinks_t > trackAcc( "trackLinks" );
+	static const SG::AuxElement::Accessor< xAOD::TauJet::TauTrackLinks_t > tauTrackAcc( "tauTrackLinks" );
+	static const SG::AuxElement::Accessor< xAOD::TauTrack::TrackParticleLinks_t > trackAcc( "trackLinks" );
 
 	for( ElementLink< xAOD::TauTrackContainer > tautrack_link : tauTrackAcc( *p_tau ) ) {
 
-- 
GitLab


From 545d53dddc69f37a1d558be85ebe713f623567e5 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Fri, 15 Mar 2019 15:00:24 +0100
Subject: [PATCH 099/163] Add NewMergeMcEventCollTool and
 SimpleMergeMcEventCollTool

The `NewMergeMcEventCollTool` is intended to replace the `MergeMcEventCollTool`
eventually. This initial commit adds the option to run with the
`NewMergeMcEventCollTool`, but does not enable it by default.
---
 .../G4Utilities/MCTruthSimAlgs/CMakeLists.txt |   4 +-
 .../python/MCTruthSimAlgsConfig.py            | 182 +++++++++++++++---
 .../python/MCTruthSimAlgsConfigDb.py          |  12 +-
 .../src/NewMergeMcEventCollTool.cxx           | 177 +++++++++++++++++
 .../src/NewMergeMcEventCollTool.h             |  61 ++++++
 .../src/SimpleMergeMcEventCollTool.cxx        | 182 ++++++++++++++++++
 .../src/SimpleMergeMcEventCollTool.h          |  74 +++++++
 .../src/components/MCTruthSimAlgs_entries.cxx |   5 +-
 8 files changed, 667 insertions(+), 30 deletions(-)
 create mode 100644 Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.cxx
 create mode 100644 Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.h
 create mode 100644 Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
 create mode 100644 Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.h

diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/CMakeLists.txt b/Simulation/G4Utilities/MCTruthSimAlgs/CMakeLists.txt
index 8060abe339f5..236ea6973b55 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/CMakeLists.txt
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/CMakeLists.txt
@@ -10,9 +10,9 @@ atlas_depends_on_subdirs( PRIVATE
                           Calorimeter/CaloSimEvent
                           Control/AthenaBaseComps
                           Control/AthenaKernel
-                          Control/CxxUtils
                           Control/PileUpTools
                           Control/StoreGate
+                          Event/EventInfo
                           Event/xAOD/xAODJet
                           GaudiKernel
                           Generators/GeneratorObjects
@@ -25,7 +25,7 @@ atlas_depends_on_subdirs( PRIVATE
 atlas_add_component( MCTruthSimAlgs
                      src/*.cxx
                      src/components/MCTruthSimAlgs_entries.cxx
-                     LINK_LIBRARIES CaloSimEvent AthenaBaseComps AthenaKernel CxxUtils PileUpToolsLib StoreGateLib SGtests xAODJet GaudiKernel GeneratorObjects TruthUtils MuonSimEvent RecEvent )
+                     LINK_LIBRARIES CaloSimEvent AthenaBaseComps AthenaKernel PileUpToolsLib StoreGateLib SGtests xAODJet GaudiKernel GeneratorObjects TruthUtils MuonSimEvent RecEvent EventInfo)
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
index 3a212e7483e9..fa0b3a1732e8 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from Digitization.DigitizationFlags import digitizationFlags
 from AthenaCommon import CfgMgr
@@ -12,46 +12,66 @@ def genericMergeMcEventCollTool(name="MergeMcEventCollTool", **kwargs):
     else:
         kwargs.setdefault("TruthCollOutputKey", "TruthEvent")
     kwargs.setdefault("TruthCollInputKey", "TruthEvent")
-    
-    kwargs.setdefault("LowTimeToKeep", -50.5)
-    kwargs.setdefault("HighTimeToKeep", 50.5)
-    kwargs.setdefault("KeepUnstable", False)
-    kwargs.setdefault("AbsEtaMax", 5.0)
-    kwargs.setdefault("OutOfTimeAbsEtaMax", 3.0)
-    kwargs.setdefault("rRange", 20.0)
-    kwargs.setdefault("zRange", 200.0)
-    #kwargs.setdefault("ptMin", 0.4*GeV)
-    #kwargs.setdefault("EKinMin", 1.0*MeV)
-    kwargs.setdefault("SaveCavernBackground", True)
-    kwargs.setdefault("SaveInTimeMinBias", True)
-    kwargs.setdefault("SaveOutOfTimeMinBias", True)
-    kwargs.setdefault("SaveRestOfMinBias", False)
-    kwargs.setdefault("AddBackgroundCollisionVertices", True)
-    kwargs.setdefault("CompressOutputCollection", False)
-
-    return CfgMgr.MergeMcEventCollTool(name, **kwargs)
+    if 'SimpleMerge' in digitizationFlags.experimentalDigi():
+        if not digitizationFlags.doXingByXingPileUp(): # Algorithm approach
+            kwargs.setdefault("PileUpMergeSvc", "PileUpMergeSvc")
+        return CfgMgr.SimpleMergeMcEventCollTool(name, **kwargs)
+    elif 'NewMerge' in digitizationFlags.experimentalDigi():
+        if not digitizationFlags.doXingByXingPileUp(): # Algorithm approach
+            kwargs.setdefault("PileUpMergeSvc", "PileUpMergeSvc")
+        if digitizationFlags.doLowPtMinBias:
+            kwargs.setdefault("ExpectLowPtMinBiasBackgroundCollection", True)
+        if digitizationFlags.doHighPtMinBias:
+            kwargs.setdefault("ExpectHighPtMinBiasBackgroundCollection", True)
+        # Default `PileUpType` to "Unknown"
+        kwargs.setdefault("PileUpType", -1)
+        return CfgMgr.NewMergeMcEventCollTool(name, **kwargs)
+    else:
+        kwargs.setdefault("LowTimeToKeep", -50.5)
+        kwargs.setdefault("HighTimeToKeep", 50.5)
+        kwargs.setdefault("KeepUnstable", False)
+        kwargs.setdefault("AbsEtaMax", 5.0)
+        kwargs.setdefault("OutOfTimeAbsEtaMax", 3.0)
+        kwargs.setdefault("rRange", 20.0)
+        kwargs.setdefault("zRange", 200.0)
+        #kwargs.setdefault("ptMin", 0.4*GeV)
+        #kwargs.setdefault("EKinMin", 1.0*MeV)
+        kwargs.setdefault("SaveCavernBackground", True)
+        kwargs.setdefault("SaveInTimeMinBias", True)
+        kwargs.setdefault("SaveOutOfTimeMinBias", True)
+        kwargs.setdefault("SaveRestOfMinBias", False)
+        kwargs.setdefault("AddBackgroundCollisionVertices", True)
+        kwargs.setdefault("CompressOutputCollection", False)
+        #kwargs.setdefault("CopyCompleteGenEvents", True)
+        return CfgMgr.MergeMcEventCollTool(name, **kwargs)
 
 def MergeMcEventCollTool(name="MergeMcEventCollTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", -30000)
         kwargs.setdefault("LastXing",   30000)
-    kwargs.setdefault("DoSlimming", True)
-    kwargs.setdefault("OnlySaveSignalTruth", False)
+    keys =['SimpleMerge', 'NewMerge']
+    if set(keys).isdisjoint(set(digitizationFlags.experimentalDigi())):
+        kwargs.setdefault("DoSlimming", False)
+        kwargs.setdefault("OnlySaveSignalTruth", False)
     return genericMergeMcEventCollTool(name, **kwargs)
 
 def SignalOnlyMcEventCollTool(name="SignalOnlyMcEventCollTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", 0)
         kwargs.setdefault("LastXing",  0)
-    kwargs.setdefault("OnlySaveSignalTruth", True)
+    keys =['SimpleMerge', 'NewMerge']
+    if set(keys).isdisjoint(set(digitizationFlags.experimentalDigi())):
+        kwargs.setdefault("OnlySaveSignalTruth", True)
     return genericMergeMcEventCollTool(name, **kwargs)
 
 def InTimeOnlyMcEventCollTool(name="InTimeOnlyMcEventCollTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", 0)
         kwargs.setdefault("LastXing",  0)
-    kwargs.setdefault("DoSlimming", False)
-    kwargs.setdefault("OnlySaveSignalTruth", False)
+    keys =['SimpleMerge', 'NewMerge']
+    if set(keys).isdisjoint(set(digitizationFlags.experimentalDigi())):
+        kwargs.setdefault("DoSlimming", False)
+        kwargs.setdefault("OnlySaveSignalTruth", False)
     return genericMergeMcEventCollTool(name, **kwargs)
 
 ############################################################################
@@ -79,12 +99,125 @@ def getMergeTruthJetsTool(name="MergeTruthJetsTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", TruthJet_FirstXing() )
         kwargs.setdefault("LastXing",  TruthJet_LastXing() )
+    #kwargs.setdefault("OutputLevel",  1 )
+
     return CfgMgr.MergeTruthJetsTool(name, **kwargs)
 
 def getMergeTruthJetsFilterTool(name="MergeTruthJetsFilterTool", **kwargs):
     kwargs.setdefault("ActivateFilter", True )
     return getMergeTruthJetsTool(name, **kwargs)
 
+def getNewMergeMcEventCollTool_Base(name="NewMergeMcEventCollTool_Base", **kwargs):
+    if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
+        kwargs.setdefault("FirstXing", -30000)
+        kwargs.setdefault("LastXing",   30000)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent")
+    kwargs.setdefault("TruthCollInputKey", "TruthEvent")
+    if not digitizationFlags.doXingByXingPileUp(): # Algorithm approach
+        kwargs.setdefault("PileUpMergeSvc", "PileUpMergeSvc")
+    # Default `PileUpType` to "Unknown"
+    kwargs.setdefault("PileUpType", -1)
+    return CfgMgr.NewMergeMcEventCollTool(name, **kwargs)
+
+def getNewMergeMcEventCollTool_Signal(name="NewMergeMcEventCollTool_Signal", **kwargs):
+    if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
+        kwargs.setdefault("FirstXing", 0)
+        kwargs.setdefault("LastXing",  0)
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.Signal)
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+### All bunch-crossing pileup `NewMergeMcEventCollTool`s
+def getNewMergeMcEventCollTool_MinBias(name="NewMergeMcEventCollTool_MinBias", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.MinimumBias)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_PU")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_PU")
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getNewMergeMcEventCollTool_HighPtMinBias(name="NewMergeMcEventCollTool_HighPtMinBias", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.HighPtMinimumBias)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HighPtPU")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_HighPtPU")
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getNewMergeMcEventCollTool_Cavern(name="NewMergeMcEventCollTool_Cavern", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.Cavern)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_Cavern")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_Cavern")
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getNewMergeMcEventCollTool_HaloGas(name="NewMergeMcEventCollTool_HaloGas", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.HaloGas)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HaloGas")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_HaloGas")
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+### InTimeOnly pileup `NewMergeMcEventCollTool`s
+def getInTimeOnlyNewMergeMcEventCollTool_Base(name="InTimeOnlyNewMergeMcEventCollTool_Base", **kwargs):
+    if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
+        kwargs.setdefault("FirstXing", 0)
+        kwargs.setdefault("LastXing",  0)
+    return getNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getInTimeOnlyNewMergeMcEventCollTool_MinBias(name="InTimeOnlyNewMergeMcEventCollTool_MinBias", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.MinimumBias)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_PU")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_PU")
+    return getInTimeOnlyNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getInTimeOnlyNewMergeMcEventCollTool_HighPtMinBias(name="InTimeOnlyNewMergeMcEventCollTool_HighPtMinBias", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.HighPtMinimumBias)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HighPtPU")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_HighPtPU")
+    return getInTimeOnlyNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getInTimeOnlyNewMergeMcEventCollTool_Cavern(name="InTimeOnlyNewMergeMcEventCollTool_Cavern", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.Cavern)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_Cavern")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_Cavern")
+    return getInTimeOnlyNewMergeMcEventCollTool_Base(name, **kwargs)
+
+def getInTimeOnlyNewMergeMcEventCollTool_HaloGas(name="InTimeOnlyNewMergeMcEventCollTool_HaloGas", **kwargs):
+    from Digitization import PileUpEventType
+    kwargs.setdefault("PileUpType", PileUpEventType.HaloGas)
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HaloGas")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent_HaloGas")
+    return getInTimeOnlyNewMergeMcEventCollTool_Base(name, **kwargs)
 
 ############################################################################
 
@@ -107,7 +240,6 @@ def getTrackRange(name="TrackRange" , **kwargs):
     #"TrackRecordCollection#CaloEntryLayer"
     return CfgMgr.PileUpXingFolder(name, **kwargs)
 
-
 def MergeTrackRecordCollTool(name="MergeTrackRecordCollTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", TrackRecord_FirstXing() )
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfigDb.py b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfigDb.py
index a791a0aa7b93..0b24e4925f62 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfigDb.py
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfigDb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon.CfgGetter import addTool
 
@@ -21,10 +21,18 @@ addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeRecoTimingObjTool"         , "
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeHijingParsTool"            , "MergeHijingParsTool")
 
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeMcEventCollTool"           , "MergeMcEventCollTool")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.getNewMergeMcEventCollTool_Signal"        , "NewMergeMcEventCollTool_Signal")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.getNewMergeMcEventCollTool_MinBias"        , "NewMergeMcEventCollTool_MinBias")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.getNewMergeMcEventCollTool_HighPtMinBias"        , "NewMergeMcEventCollTool_HighPtMinBias")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.getNewMergeMcEventCollTool_Cavern"        , "NewMergeMcEventCollTool_Cavern")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.getNewMergeMcEventCollTool_HaloGas"        , "NewMergeMcEventCollTool_HaloGas")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.NewMergeMcEventCollTool"        , "InTimeOnlyNewMergeMcEventCollTool_MinBias")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.NewMergeMcEventCollTool"        , "InTimeOnlyNewMergeMcEventCollTool_HighPtMinBias")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.NewMergeMcEventCollTool"        , "InTimeOnlyNewMergeMcEventCollTool_Cavern")
+addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.NewMergeMcEventCollTool"        , "InTimeOnlyNewMergeMcEventCollTool_HaloGas")
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.SignalOnlyMcEventCollTool"      , "SignalOnlyMcEventCollTool")
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.InTimeOnlyMcEventCollTool"      , "InTimeOnlyMcEventCollTool")
 
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeGenericMuonSimHitCollTool" , "MergeGenericMuonSimHitCollTool")
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeMicromegasSimHitCollTool"  , "MergeMicromegasSimHitCollTool")
 addTool("MCTruthSimAlgs.MCTruthSimAlgsConfig.MergeSTGCSimHitCollTool"        , "MergeSTGCSimHitCollTool")
-
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.cxx
new file mode 100644
index 000000000000..b9009cb48038
--- /dev/null
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.cxx
@@ -0,0 +1,177 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "NewMergeMcEventCollTool.h"
+#include "EventInfo/EventType.h"
+#include "EventInfo/PileUpTimeEventIndex.h"
+#include <fstream>
+
+NewMergeMcEventCollTool::NewMergeMcEventCollTool(const std::string& type,
+                                                 const std::string& name,
+                                                 const IInterface *parent) :
+  PileUpToolBase(type, name, parent)
+{
+  declareProperty("TruthCollInputKey",   m_truthCollInputKey);
+  declareProperty("PileUpType", m_pileUpType);
+}
+
+StatusCode NewMergeMcEventCollTool::initialize()
+{
+  if(!m_pMergeSvc.empty())
+    {
+      ATH_CHECK(m_pMergeSvc.retrieve());
+    }
+
+  ATH_CHECK( m_truthCollOutputKey.initialize() );
+  return StatusCode::SUCCESS;
+}
+
+/// PileUpTools Approach
+StatusCode NewMergeMcEventCollTool::prepareEvent(unsigned int nInputEvents)
+{
+  ATH_MSG_VERBOSE( this->name()<<"::prepareEvent()" );
+
+  //Check we are getting at least one event
+  if (0 == nInputEvents)
+    {
+      ATH_MSG_ERROR("prepareEvent: TimedTruthList with key "
+                    << m_truthCollInputKey.value() << " is empty");
+      return StatusCode::RECOVERABLE;
+    }
+  ATH_MSG_VERBOSE(  this->name()<<"::prepareEvent: there are " << nInputEvents << " subevents in this event.");
+
+  if (!m_outputMcEventCollection.isValid()) {
+    // Would be nice to avoid having the WriteHandle as a member
+    // variable, but this is the only way to allow multiple function
+    // calls to add information to the version of the
+    // McEventCollection in the output StoreGate
+    m_outputMcEventCollection = SG::makeHandle(m_truthCollOutputKey);
+    ATH_CHECK(m_outputMcEventCollection.record(std::make_unique<McEventCollection>()));
+  }
+  else {
+    ATH_MSG_ERROR("WriteHandle already valid??");
+    return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode NewMergeMcEventCollTool::processBunchXing(int /*bunchXing*/,
+                                                     SubEventIterator bSubEvents,
+                                                     SubEventIterator eSubEvents)
+{
+  SubEventIterator iEvt(bSubEvents);
+  //loop over the McEventCollections (each one assumed to containing exactly one GenEvent) of the various input events
+  while (iEvt != eSubEvents)
+    {
+      StoreGateSvc& seStore(*iEvt->ptr()->evtStore());
+      const McEventCollection *pMEC(nullptr);
+      ATH_CHECK(seStore.retrieve(pMEC, m_truthCollInputKey.value()));
+      ATH_MSG_VERBOSE( this->name()<<"::processBunchXing: SubEvt McEventCollection from StoreGate " << seStore.name() << " of PileUpType " << iEvt->type() );
+      if(m_pileUpType==iEvt->type()) {
+        ATH_CHECK(this->processEvent(pMEC, m_outputMcEventCollection.ptr(), iEvt->time()));
+      }
+      ++iEvt;
+    }
+  return StatusCode::SUCCESS;
+}
+
+StatusCode NewMergeMcEventCollTool::mergeEvent()
+{
+  ATH_MSG_VERBOSE(  this->name()<<"::mergeEvent()" );
+  if(msgLvl(MSG::VERBOSE)) { this->printDetailsOfMergedMcEventCollection(m_outputMcEventCollection.ptr()); }
+  return StatusCode::SUCCESS;
+}
+
+/// Algorithm Approach
+StatusCode NewMergeMcEventCollTool::processAllSubEvents()
+{
+  ATH_MSG_VERBOSE ( this->name()<<"::processAllSubEvents()" );
+  SG::WriteHandle<McEventCollection> outputMcEventCollection(m_truthCollOutputKey);
+  ATH_CHECK(outputMcEventCollection.record(std::make_unique<McEventCollection>()));
+
+  //first get the list of McEventCollections
+  typedef PileUpMergeSvc::TimedList<McEventCollection>::type TimedTruthList;
+  TimedTruthList truthList;
+  ATH_CHECK(m_pMergeSvc->retrieveSubEvtsData(m_truthCollInputKey.value(), truthList));
+
+  //Check we are getting at least one event
+  const unsigned int nInputMcEventColls=truthList.size();
+  if (0 == nInputMcEventColls)
+    {
+      ATH_MSG_WARNING("TimedTruthList with key " << m_truthCollInputKey.value() << " is empty.");
+      return StatusCode::SUCCESS;
+    }
+
+  ATH_MSG_DEBUG( "execute: there are " << nInputMcEventColls << " subevents in this event.");
+  //TODO can we make this into an auto for loop?
+  TimedTruthList::iterator timedTruthListIter(truthList.begin()), endOfTimedTruthList(truthList.end());
+  //loop over the McEventCollections (each one assumed to containing exactly one GenEvent) of the various input events
+  while (timedTruthListIter != endOfTimedTruthList)
+    {
+      ATH_MSG_VERBOSE( this->name()<<"::processBunchXing: SubEvt McEventCollection of PileUpType " << timedTruthListIter->first.type() );
+      if(m_pileUpType==timedTruthListIter->first.type()) {
+        const McEventCollection *pBackgroundMcEvtColl(&*(timedTruthListIter->second));
+        ATH_CHECK(this->processEvent(pBackgroundMcEvtColl,outputMcEventCollection.ptr(),timedTruthListIter->first.time()));
+      }
+      ++timedTruthListIter;
+    } //timed colls
+
+  if(msgLvl(MSG::VERBOSE)) { this->printDetailsOfMergedMcEventCollection(outputMcEventCollection.ptr()); }
+  return StatusCode::SUCCESS;
+}
+
+StatusCode NewMergeMcEventCollTool::processEvent(const McEventCollection *pMcEvtColl, McEventCollection *outputMcEventCollection, PileUpTimeEventIndex::time_type timeOffset)
+{
+  ATH_MSG_VERBOSE(  this->name()<<"::processEvent()" );
+  if (!outputMcEventCollection) {
+    ATH_MSG_ERROR( this->name()<<"::processEvent() was passed an null output McEventCollection pointer." );
+    return StatusCode::FAILURE;
+  }
+  if (!pMcEvtColl) {
+    ATH_MSG_ERROR( this->name()<<"::processEvent() was passed an null input McEventCollection pointer." );
+    return StatusCode::FAILURE;
+  }
+  if (!pMcEvtColl->empty()) {
+    for (unsigned int iEv=0; iEv<pMcEvtColl->size(); iEv++) {
+      const HepMC::GenEvent& c_evt(*((*pMcEvtColl)[iEv]));
+      HepMC::GenEvent * evt = new HepMC::GenEvent(c_evt);
+      for (HepMC::GenEvent::vertex_iterator itVer=evt->vertices_begin(); itVer!=evt->vertices_end(); ++itVer) {
+        HepMC::FourVector newPos((*itVer)->position().x(),(*itVer)->position().y(),(*itVer)->position().z(),(*itVer)->position().t()+timeOffset);
+        (*itVer)->set_position(newPos);
+      }
+      outputMcEventCollection->push_back(evt);
+    }
+  }
+  return StatusCode::SUCCESS;
+}
+
+void NewMergeMcEventCollTool::printDetailsOfMergedMcEventCollection(McEventCollection* outputMcEventCollection) const
+{
+  DataVector<HepMC::GenEvent>::const_iterator outputEventItr(outputMcEventCollection->begin());
+  const DataVector<HepMC::GenEvent>::const_iterator endOfEvents(outputMcEventCollection->end());
+  ATH_MSG_INFO ( "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" );
+  ATH_MSG_INFO ( "pileUpType: " << m_pileUpType);
+  ATH_MSG_INFO ( "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" );
+  ATH_MSG_INFO ( "Current OUTPUT GenEvent: " );
+  while(outputEventItr!=endOfEvents)
+    {
+      const int signal_process_id((*outputEventItr)->signal_process_id());
+      const int event_number((*outputEventItr)->event_number());
+      ATH_MSG_INFO ( "GenEvent #"<<event_number<<", signal_process_id="<<signal_process_id<</*", category="<<event->second<<*/", number of Vertices="<<(*outputEventItr)->vertices_size() );
+      char fname[80];
+      sprintf(fname,"%s.event%d.txt",m_truthCollInputKey.value().c_str(),event_number);
+      std::ofstream of(fname);
+      (*outputEventItr)->print(of); // verbose output
+      of.close();
+      //      HepMC::GenEvent& currentSignalEvent(**(outputEventItr));
+      //      currentSignalEvent.print();
+      //      ATH_MSG_INFO ( "Current signal_process_vertex: " );
+      //      if(0!=currentSignalEvent.signal_process_vertex()) currentSignalEvent.signal_process_vertex()->print();
+      //      else ATH_MSG_INFO ( "signal_process_vertex is NULL" );
+      ++outputEventItr;
+    }
+  ATH_MSG_INFO ( "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" );
+  return;
+}
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.h b/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.h
new file mode 100644
index 000000000000..e79bea3abe1c
--- /dev/null
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/NewMergeMcEventCollTool.h
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MCTRUTHSIMALGS_NEWMERGEMCEVENTCOLLTOOL_H
+#define MCTRUTHSIMALGS_NEWMERGEMCEVENTCOLLTOOL_H
+
+#include "GaudiKernel/Property.h"
+#include "GaudiKernel/ServiceHandle.h"
+
+#include "StoreGate/WriteHandle.h"
+#include "StoreGate/WriteHandleKey.h"
+
+#include "GeneratorObjects/McEventCollection.h"
+
+#include "PileUpTools/PileUpMergeSvc.h"
+
+#include "PileUpTools/PileUpToolBase.h"
+
+/** @class NewMergeMcEventCollTool
+ *  @brief a PileUpTool to merge MC truth collection in the overlay store
+ *
+ */
+class NewMergeMcEventCollTool : public PileUpToolBase {
+public:
+  NewMergeMcEventCollTool(const std::string& type,
+                 const std::string& name,
+                 const IInterface* parent);
+  virtual StatusCode initialize() override final;
+  ///called before the subevts loop. Not (necessarily) able to access
+  ///SubEvents
+  virtual StatusCode prepareEvent(unsigned int nInputEvents) override final;
+  ///called at the end of the subevts loop. Not (necessarily) able to access
+  ///SubEvents
+  virtual StatusCode mergeEvent() override final;
+  ///called for each active bunch-crossing to process current SubEvents
+  /// bunchXing is in ns
+  virtual StatusCode
+    processBunchXing(int /*bunchXing*/,
+                     SubEventIterator bSubEvents,
+                     SubEventIterator eSubEvents) override final;
+
+  virtual StatusCode processAllSubEvents() override final;
+
+private:
+  //** Add the required information from the current GenEvent to the output McEventCollection
+  StatusCode processEvent(const McEventCollection *pMcEvtColl, McEventCollection *outputMcEventCollection, PileUpTimeEventIndex::time_type timeOffset=0);
+  //** Print out detailed debug info if required.
+  void printDetailsOfMergedMcEventCollection(McEventCollection *outputMcEventCollection) const;
+  //** Handle for the PileUpMergeSvc (provides input McEventCollections)
+  ServiceHandle<PileUpMergeSvc> m_pMergeSvc{this, "PileUpMergeSvc", "PileUpMergeSvc", ""};
+  //** Name of input McEventCollection
+  StringProperty m_truthCollInputKey{"TruthEvent"};
+  //** Depends on PileUpTimeEventIndex::PileUpType; provide one instance of this tool for each type
+  int m_pileUpType{-1}; // initialise to PileUpTimeEventIndex::PileUpType::Unknown
+  //** Writing to StoreGate safely in MT
+  SG::WriteHandle<McEventCollection> m_outputMcEventCollection{};
+  //** Writing to StoreGate safely in MT
+  SG::WriteHandleKey<McEventCollection> m_truthCollOutputKey{this, "TruthCollOutputKey","TruthEvent",""};
+};
+#endif //MCTRUTHSIMALGS_NEWMERGEMCEVENTCOLLTOOL_H
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
new file mode 100644
index 000000000000..37e3a3edc75e
--- /dev/null
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
@@ -0,0 +1,182 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "SimpleMergeMcEventCollTool.h"
+#include "GeneratorObjects/McEventCollection.h"
+#include "PileUpTools/PileUpMergeSvc.h"
+#include "StoreGate/StoreGateSvc.h"
+#include <fstream>
+
+SimpleMergeMcEventCollTool::SimpleMergeMcEventCollTool(const std::string& type,
+                                                       const std::string& name,
+                                                       const IInterface *parent) :
+  PileUpToolBase(type, name, parent)
+{
+  declareProperty("TruthCollInputKey",   m_truthCollInputKey);
+}
+
+StatusCode SimpleMergeMcEventCollTool::initialize()
+{
+  if(!m_pMergeSvc.empty())
+    {
+       ATH_CHECK(m_pMergeSvc.retrieve());
+    }
+  return StatusCode::SUCCESS;
+}
+
+/// PileUpTools Approach
+StatusCode SimpleMergeMcEventCollTool::prepareEvent(unsigned int nInputEvents)
+{
+  ATH_MSG_VERBOSE ( "prepareEvent()" );
+  m_nBkgEventsReadSoFar=0;
+
+  //Check we are getting at least one event
+  m_nInputMcEventColls = nInputEvents;
+  if (0 == m_nInputMcEventColls)
+     {
+      ATH_MSG_ERROR("prepareEvent: TimedTruthList with key "
+                    << m_truthCollInputKey.value() << " is empty");
+      return StatusCode::RECOVERABLE;
+    }
+  ATH_MSG_DEBUG( "prepareEvent: there are " << m_nInputMcEventColls << " subevents in this event.");
+
+  if (!m_outputMcEventCollection.isValid()) {
+    // Would be nice to avoid having the WriteHandle as a member
+    // variable, but this is the only way to allow multiple function
+    // calls to add information to the version of the
+    // McEventCollection in the output StoreGate
+    m_outputMcEventCollection = SG::makeHandle(m_truthCollOutputKey);
+    ATH_CHECK(m_outputMcEventCollection.record(std::make_unique<McEventCollection>()));
+  }
+  else {
+    ATH_MSG_ERROR("WriteHandle already valid??");
+    return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode SimpleMergeMcEventCollTool::processBunchXing(int /*bunchXing*/,
+                                                        SubEventIterator bSubEvents,
+                                                        SubEventIterator eSubEvents)
+{
+  SubEventIterator iEvt(bSubEvents);
+  //loop over the McEventCollections (each one assumed to containing exactly one GenEvent) of the various input events
+  while (iEvt != eSubEvents)
+    {
+      StoreGateSvc& seStore(*iEvt->ptr()->evtStore());
+      const McEventCollection *pMEC(nullptr);
+      ATH_CHECK(seStore.retrieve(pMEC, m_truthCollInputKey.value()));
+      ATH_MSG_DEBUG ("processBunchXing: SubEvt McEventCollection from StoreGate " << seStore.name() );
+      ATH_CHECK(this->processEvent(pMEC, m_outputMcEventCollection.ptr()));
+      ++iEvt;
+    }
+  return StatusCode::SUCCESS;
+}
+
+StatusCode SimpleMergeMcEventCollTool::mergeEvent()
+{
+  ATH_MSG_DEBUG( "mergeEvent()" );
+  if(m_nBkgEventsReadSoFar+1<m_nInputMcEventColls)
+    {
+      ATH_MSG_WARNING( "mergeEvent: Expected " << m_nInputMcEventColls << " subevents, but only saw " << m_nBkgEventsReadSoFar+1 << "! The job will probably crash now..." );
+      return StatusCode::FAILURE;
+    }
+  if(msgLvl(MSG::VERBOSE)) { this->printDetailsOfMergedMcEventCollection(m_outputMcEventCollection.ptr()); }
+  return StatusCode::SUCCESS;
+}
+
+/// Algorithm Approach
+StatusCode SimpleMergeMcEventCollTool::processAllSubEvents()
+{
+  ATH_MSG_VERBOSE ( "processAllSubEvents()" );
+  SG::WriteHandle<McEventCollection> outputMcEventCollection(m_truthCollOutputKey);
+  ATH_CHECK(outputMcEventCollection.record(std::make_unique<McEventCollection>()));
+
+  //first get the list of McEventCollections
+  typedef PileUpMergeSvc::TimedList<McEventCollection>::type TimedTruthList;
+  TimedTruthList truthList;
+  ATH_CHECK(m_pMergeSvc->retrieveSubEvtsData(m_truthCollInputKey.value(), truthList));
+
+  m_nBkgEventsReadSoFar=0;
+
+  //Check we are getting at least one event
+  m_nInputMcEventColls=truthList.size();
+  if (0 == m_nInputMcEventColls)
+    {
+      ATH_MSG_ERROR("TimedTruthList with key " << m_truthCollInputKey.value() << " is empty.");
+      return StatusCode::RECOVERABLE;
+    }
+
+  ATH_MSG_DEBUG( "execute: there are " << m_nInputMcEventColls << " subevents in this event.");
+  //TODO can we make this into an auto for loop?
+  TimedTruthList::iterator timedTruthListIter(truthList.begin()), endOfTimedTruthList(truthList.end());
+  //loop over the McEventCollections (each one assumed to containing exactly one GenEvent) of the various input events
+  while (timedTruthListIter != endOfTimedTruthList)
+    {
+      const McEventCollection *pBackgroundMcEvtColl(&*(timedTruthListIter->second));
+      ATH_CHECK(this->processEvent(pBackgroundMcEvtColl,outputMcEventCollection.ptr()));
+      ++timedTruthListIter;
+    } //timed colls
+
+  if(msgLvl(MSG::VERBOSE)) { this->printDetailsOfMergedMcEventCollection(outputMcEventCollection.ptr()); }
+  return StatusCode::SUCCESS;
+}
+
+/// Common methods
+
+StatusCode SimpleMergeMcEventCollTool::processEvent(const McEventCollection *pMcEvtColl, McEventCollection *outputMcEventCollection)
+{
+  ATH_MSG_VERBOSE ( "processEvent()" );
+  if (!outputMcEventCollection) {
+    ATH_MSG_ERROR( this->name()<<"::processEvent() was passed an null output McEventCollection pointer." );
+    return StatusCode::FAILURE;
+  }
+  if (!pMcEvtColl) {
+    ATH_MSG_ERROR( this->name()<<"::processEvent() was passed an null input McEventCollection pointer." );
+    return StatusCode::FAILURE;
+  }
+
+  if (pMcEvtColl->empty())
+    {
+      ++m_nBkgEventsReadSoFar;
+      return StatusCode::SUCCESS;
+    }
+  //GenEvt is there
+
+  const HepMC::GenEvent& currentBackgroundEvent(**(pMcEvtColl->begin()));
+  // FIXME no protection against multiple GenEvents having the same event number
+  outputMcEventCollection->push_back(new HepMC::GenEvent(currentBackgroundEvent));
+  ++m_nBkgEventsReadSoFar;
+  return StatusCode::SUCCESS;
+}
+
+void SimpleMergeMcEventCollTool::printDetailsOfMergedMcEventCollection(McEventCollection *outputMcEventCollection) const
+{
+  if (outputMcEventCollection->empty()) { return; }
+  DataVector<HepMC::GenEvent>::const_iterator outputEventItr(outputMcEventCollection->begin());
+  const DataVector<HepMC::GenEvent>::const_iterator endOfEvents(outputMcEventCollection->end());
+  ATH_MSG_INFO ( "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" );
+  ATH_MSG_INFO ( "Current OUTPUT GenEvent: " );
+  while(outputEventItr!=endOfEvents)
+    {
+      const int signal_process_id((*outputEventItr)->signal_process_id());
+      const int event_number((*outputEventItr)->event_number());
+      ATH_MSG_INFO ( "GenEvent #"<<event_number<<", signal_process_id="<<signal_process_id<</*", category="<<event->second<<*/", number of Vertices="<<(*outputEventItr)->vertices_size() );
+      char fname[80];
+      sprintf(fname,"%s.event%d.txt",m_truthCollInputKey.value().c_str(),event_number);
+      std::ofstream of(fname);
+      (*outputEventItr)->print(of); // verbose output
+      of.close();
+      //      HepMC::GenEvent& currentSignalEvent(**(outputEventItr));
+      //      currentSignalEvent.print();
+      //      ATH_MSG_INFO ( "Current signal_process_vertex: " );
+      //      if(0!=currentSignalEvent.signal_process_vertex()) currentSignalEvent.signal_process_vertex()->print();
+      //      else ATH_MSG_INFO ( "signal_process_vertex is NULL" );
+      ++outputEventItr;
+    }
+  ATH_MSG_INFO ( "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" );
+  return;
+}
+
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.h b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.h
new file mode 100644
index 000000000000..aed3d18c1d36
--- /dev/null
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.h
@@ -0,0 +1,74 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MCTRUTHSIMALGS_SIMPLEMERGEMCEVENTCOLLTOOL_H
+#define MCTRUTHSIMALGS_SIMPLEMERGEMCEVENTCOLLTOOL_H
+
+#include "PileUpTools/PileUpToolBase.h"
+
+#include "GaudiKernel/Property.h"
+#include "GaudiKernel/ServiceHandle.h"
+
+#include <utility> /* pair */
+
+class McEventCollection;
+class StoreGateSvc;
+class PileUpMergeSvc;
+
+namespace HepMC {
+  class GenParticle;
+  class GenVertex;
+}
+/** @class SimpleMergeMcEventCollTool
+ *  @brief a PileUpTool to merge MC truth collection in the overlay store
+ *
+ *  $Id:
+ *  @author jchapman@cern.ch
+ *
+ */
+class SimpleMergeMcEventCollTool : public PileUpToolBase {
+public:
+  SimpleMergeMcEventCollTool(const std::string& type,
+                 const std::string& name,
+                 const IInterface* parent);
+  virtual StatusCode initialize() override final;
+  ///called before the subevts loop. Not (necessarily) able to access
+  ///SubEvents
+  virtual StatusCode prepareEvent(unsigned int nInputEvents) override final;
+  ///called at the end of the subevts loop. Not (necessarily) able to access
+  ///SubEvents
+  virtual StatusCode mergeEvent() override final;
+  ///called for each active bunch-crossing to process current SubEvents
+  /// bunchXing is in ns
+  virtual StatusCode
+    processBunchXing(int /*bunchXing*/,
+                     SubEventIterator bSubEvents,
+                     SubEventIterator eSubEvents) override final;
+  /// return false if not interested in  certain xing times (in ns)
+  /// implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
+  //  virtual bool toProcess(int bunchXing) const;
+
+  virtual StatusCode processAllSubEvents() override final;
+
+private:
+  //** Add the required information from the current GenEvent to the output McEventCollection
+  StatusCode processEvent(const McEventCollection *pMcEvtColl, McEventCollection *outputMcEventCollection);
+  //** Special case of processEvent for the first (signal) GenEvent
+  StatusCode processFirstSubEvent(const McEventCollection *pMcEvtColl, McEventCollection *outputMcEventCollection);
+  //** Print out detailed debug info if required.
+  void printDetailsOfMergedMcEventCollection(McEventCollection *outputMcEventCollection) const;
+  //** Handle for the PileUpMergeSvc (provides input McEventCollections)
+  ServiceHandle<PileUpMergeSvc> m_pMergeSvc{this, "PileUpMergeSvc", "PileUpMergeSvc", ""};
+  //** Writing to StoreGate safely in MT
+  SG::WriteHandle<McEventCollection> m_outputMcEventCollection{};
+  //** Writing to StoreGate safely in MT
+  SG::WriteHandleKey<McEventCollection> m_truthCollOutputKey{this, "TruthCollOutputKey","TruthEvent",""};
+  //** Name of input McEventCollection
+  StringProperty m_truthCollInputKey{"TruthEvent"};
+  //** The total number of GenEvents that will be passed for the current signal event
+  unsigned int m_nInputMcEventColls{0};
+  //** How many background events have been read so far for this signal event
+  unsigned int m_nBkgEventsReadSoFar{0};
+};
+#endif //MCTRUTHSIMALGS_SIMPLEMERGEMCEVENTCOLLTOOL_H
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/components/MCTruthSimAlgs_entries.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/components/MCTruthSimAlgs_entries.cxx
index 6e9a08f92fbd..e21397782941 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/components/MCTruthSimAlgs_entries.cxx
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/components/MCTruthSimAlgs_entries.cxx
@@ -1,5 +1,7 @@
 #include "../MergeMcEventCollection.h"
 #include "../MergeMcEventCollTool.h"
+#include "../NewMergeMcEventCollTool.h"
+#include "../SimpleMergeMcEventCollTool.h"
 #include "../MergeTrackRecordCollection.h"
 #include "../MergeTrackRecordCollTool.h"
 #include "../MergeCalibHits.h"
@@ -22,10 +24,11 @@ DECLARE_COMPONENT( MergeTruthJets )
 DECLARE_COMPONENT( MergeRecoTimingObj )
 DECLARE_COMPONENT( MergeGenericMuonSimHitColl )
 DECLARE_COMPONENT( MergeMcEventCollTool )
+DECLARE_COMPONENT( NewMergeMcEventCollTool )
+DECLARE_COMPONENT( SimpleMergeMcEventCollTool )
 DECLARE_COMPONENT( MergeTrackRecordCollTool )
 DECLARE_COMPONENT( MergeCalibHitsTool )
 DECLARE_COMPONENT( MergeHijingParsTool )
 DECLARE_COMPONENT( MergeTruthJetsTool )
 DECLARE_COMPONENT( MergeRecoTimingObjTool )
 DECLARE_COMPONENT( MergeGenericMuonSimHitCollTool )
-
-- 
GitLab


From b554516739fe2f09fccc49ea5a9d969f7ad49ad8 Mon Sep 17 00:00:00 2001
From: "Vincent R. Pascuzzi" <vpascuzz@cern.ch>
Date: Tue, 2 Oct 2018 15:27:13 -0400
Subject: [PATCH 100/163] Update DigiAlgConfig.py: add configurations based on
 pileup type

Former-commit-id: bde434e6f113528ee788292e4de991df5cf29a4a
---
 .../Digitization/python/DigiAlgConfig.py      | 42 ++++++++++++++++---
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py
index 3c7d396f3460..ae61ae9f9683 100644
--- a/Simulation/Digitization/python/DigiAlgConfig.py
+++ b/Simulation/Digitization/python/DigiAlgConfig.py
@@ -1,6 +1,7 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon import CfgMgr
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 
 #####################################
 ##     Test PileUpTool methods     ##
@@ -27,7 +28,20 @@ def getStandardTruthPileUpTools():
     from AthenaCommon.DetFlags import DetFlags
     PileUpToolsList = []
     if DetFlags.pileup.Truth_on():
-        PileUpToolsList += [ "MergeMcEventCollTool" ]
+        from Digitization.DigitizationFlags import digitizationFlags
+        if 'NewMerge' in digitizationFlags.experimentalDigi():
+            if not athenaCommonFlags.DoFullChain():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_Signal" ]
+            if digitizationFlags.doLowPtMinBias.get_Value():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_MinBias" ]
+            if digitizationFlags.doHighPtMinBias.get_Value():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_HighPtMinBias" ]
+            if digitizationFlags.doCavern.get_Value():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_Cavern" ]
+            if digitizationFlags.doBeamGas.get_Value() or digitizationFlags.doBeamHalo.get_Value():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_HaloGas" ]
+        else:
+            PileUpToolsList += [ "MergeMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
         if DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
             PileUpToolsList += [ "MergeTrackRecordCollTool" ]
@@ -39,9 +53,14 @@ def getStandardSignalOnlyTruthPileUpTools():
     from AthenaCommon.DetFlags import DetFlags
     PileUpToolsList = []
     if DetFlags.pileup.Truth_on():
-        PileUpToolsList += [ "SignalOnlyMcEventCollTool" ]
+        from Digitization.DigitizationFlags import digitizationFlags
+        if 'NewMerge' in digitizationFlags.experimentalDigi():
+            if not athenaCommonFlags.DoFullChain():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_Signal" ]
+        else:
+            PileUpToolsList += [ "SignalOnlyMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
-        if DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
+        if not athenaCommonFlags.DoFullChain() and DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
             PileUpToolsList += [ "MergeTrackRecordCollTool" ]
         if DetFlags.writeRDOPool.Calo_on(): #possibly this should be digitize.Calo_on()
             PileUpToolsList += [ "MergeCalibHitsTool" ]
@@ -51,9 +70,22 @@ def getStandardInTimeOnlyTruthPileUpTools():
     from AthenaCommon.DetFlags import DetFlags
     PileUpToolsList = []
     if DetFlags.pileup.Truth_on():
-        PileUpToolsList += [ "InTimeOnlyMcEventCollTool" ]
+        from Digitization.DigitizationFlags import digitizationFlags
+        if 'NewMerge' in digitizationFlags.experimentalDigi():
+            if not athenaCommonFlags.DoFullChain():
+                PileUpToolsList += [ "NewMergeMcEventCollTool_Signal" ]
+            if digitizationFlags.doLowPtMinBias.get_Value():
+                PileUpToolsList += [ "InTimeOnlyNewMergeMcEventCollTool_MinBias" ]
+            if digitizationFlags.doHighPtMinBias.get_Value():
+                PileUpToolsList += [ "InTimeOnlyNewMergeMcEventCollTool_HighPtMinBias" ]
+            if digitizationFlags.doCavern.get_Value():
+                PileUpToolsList += [ "InTimeOnlyNewMergeMcEventCollTool_Cavern" ]
+            if digitizationFlags.doBeamGas.get_Value() or digitizationFlags.doBeamHalo.get_Value():
+                PileUpToolsList += [ "InTimeOnlyNewMergeMcEventCollTool_HaloGas" ]
+        else:
+            PileUpToolsList += [ "InTimeOnlyMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
-        if DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
+        if not athenaCommonFlags.DoFullChain() and DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
             PileUpToolsList += [ "MergeTrackRecordCollTool" ]
         if DetFlags.writeRDOPool.Calo_on(): #possibly this should be digitize.Calo_on()
             PileUpToolsList += [ "MergeCalibHitsTool" ]
-- 
GitLab


From cb7ab0b458aef3ccf655b2fce600a1a476654f96 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Wed, 20 Jun 2018 14:30:30 +0200
Subject: [PATCH 101/163] Fix SplitPileUpToolsAlg and add SplitSFPileUpToolsAlg

Adding the missing conditions folder configuration to the
`PixelDigitizationToolHS` `CfgGetter` method. This fixes
running digitization with the `SplitPileUpToolsAlg`.
This runs full digitization for both pile-up and hard-scatter.
Then added a new configuration called `SplitSFPileUpToolsAlg`
which runs full digitization for hard-scatter and fast digitization
for pile-up.

These changes are part of the work for ATLASSIM-3737.

Former-commit-id: 86cde12241b0399c48762844a0a86dde93e6b5be
---
 .../Digitization/python/DigiAlgConfig.py      | 36 +++++++++++++++++++
 Simulation/Digitization/python/DigiOutput.py  |  2 +-
 .../python/DigitizationConfigDb.py            |  1 +
 3 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py
index ae61ae9f9683..cbac1ef3a7fc 100644
--- a/Simulation/Digitization/python/DigiAlgConfig.py
+++ b/Simulation/Digitization/python/DigiAlgConfig.py
@@ -179,6 +179,22 @@ def getSplitInDetPileUpTools():
         PileUpToolsList += [ "TRTDigitizationToolPU" ]
     return PileUpToolsList
 
+def getSplitSFInDetPileUpTools():
+    from AthenaCommon.DetFlags import DetFlags
+    PileUpToolsList = []
+    if DetFlags.digitize.BCM_on():
+        PileUpToolsList += [ "BCM_DigitizationTool" ]
+    if DetFlags.digitize.pixel_on():
+        PileUpToolsList += [ "PixelDigitizationToolHS" ]
+        PileUpToolsList += [ "PixelFastDigitizationToolPU" ]
+    if DetFlags.digitize.SCT_on():
+        PileUpToolsList += [ "SCT_DigitizationToolHS" ]
+        PileUpToolsList += [ "SCT_FastDigitizationToolPU" ]
+    if DetFlags.digitize.TRT_on():
+        PileUpToolsList += [ "TRTDigitizationToolHS" ]
+        PileUpToolsList += [ "TRTFastDigitizationToolPU" ]
+    return PileUpToolsList
+
 def getSplitNoMergeInDetPileUpTools():
     """ This is for testing the fast chain with full digitization in split PU mode without
 merging pileup
@@ -379,6 +395,22 @@ def getSplitPileUpToolsList():
     PileUpToolsList += [ "MergeRecoTimingObjTool" ]
     return PileUpToolsList
 
+def getSplitSFPileUpToolsList():
+    PileUpToolsList = []
+    ## Truth information
+    PileUpToolsList += getStandardTruthPileUpTools()
+    ## Forward Detector Digitization
+    PileUpToolsList += getStandardForwardPileUpTools()
+    ## Inner Detector Digitization - non-standard
+    PileUpToolsList += getSplitSFInDetPileUpTools()
+    ## Calo Digitization
+    PileUpToolsList += getStandardCaloPileUpTools()
+    ## Muon System Digitization
+    PileUpToolsList += getStandardMuonPileUpTools()
+    ## RecoTimingObj
+    PileUpToolsList += [ "MergeRecoTimingObjTool" ]
+    return PileUpToolsList
+
 def getSplitNoMergePileUpToolsList():
     PileUpToolsList = []
     ## Truth information
@@ -459,6 +491,10 @@ def getSplitPileUpToolsAlg(name="SplitPileUpToolsAlg", **kwargs):
     kwargs.setdefault('PileUpTools', getSplitPileUpToolsList() )
     return getStandardPileUpToolsAlg(name, **kwargs)
 
+def getSplitSFPileUpToolsAlg(name="SplitSFPileUpToolsAlg", **kwargs):
+    kwargs.setdefault('PileUpTools', getSplitSFPileUpToolsList() )
+    return getStandardPileUpToolsAlg(name, **kwargs)
+
 def getStandardSignalOnlyTruthPileUpToolsAlg(name="StandardSignalOnlyTruthPileUpToolsAlg", **kwargs):
     kwargs.setdefault('PileUpTools', getStandardSignalOnlyTruthPileUpToolsList() )
     return getStandardPileUpToolsAlg(name, **kwargs)
diff --git a/Simulation/Digitization/python/DigiOutput.py b/Simulation/Digitization/python/DigiOutput.py
index 0b4f1521e7f7..08e7afa17666 100644
--- a/Simulation/Digitization/python/DigiOutput.py
+++ b/Simulation/Digitization/python/DigiOutput.py
@@ -34,7 +34,7 @@ def getStreamRDO_ItemList(log):
         if standardDigiConfig():
             noFastDigi = set(keys).isdisjoint(set(digitizationFlags.experimentalDigi()))
         else:
-            noFastDigi = set(['SplitNoMergeFFPileUpToolsAlg', 'SplitNoMergeSFPileUpToolsAlg', 'SplitNoMergeFSPileUpToolsAlg', 'FastPileUpToolsAlg']).isdisjoint(set([digitizationFlags.digiSteeringConf.get_Value()]))
+            noFastDigi = set(['SplitNoMergeFFPileUpToolsAlg', 'SplitNoMergeSFPileUpToolsAlg', 'SplitNoMergeFSPileUpToolsAlg', 'FastPileUpToolsAlg', 'SplitSFPileUpToolsAlg']).isdisjoint(set([digitizationFlags.digiSteeringConf.get_Value()]))
         return not noFastDigi
 
     def fastPixelDigiOutputExpected():
diff --git a/Simulation/Digitization/python/DigitizationConfigDb.py b/Simulation/Digitization/python/DigitizationConfigDb.py
index a791db8ec485..e95e5364e89d 100644
--- a/Simulation/Digitization/python/DigitizationConfigDb.py
+++ b/Simulation/Digitization/python/DigitizationConfigDb.py
@@ -30,6 +30,7 @@ addService("Digitization.PileUpConfig.getPileUpEventLoopMgr"         , "PileUpEv
 addAlgorithm("Digitization.DigiAlgConfig.getStandardPileUpToolsAlg"  , "StandardPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getFastPileUpToolsAlg"      , "FastPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getSplitPileUpToolsAlg"     , "SplitPileUpToolsAlg")
+addAlgorithm("Digitization.DigiAlgConfig.getSplitSFPileUpToolsAlg"  , "SplitSFPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getStandardSignalOnlyTruthPileUpToolsAlg"  , "StandardSignalOnlyTruthPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getStandardInTimeOnlyTruthPileUpToolsAlg"  , "StandardInTimeOnlyTruthPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getStandardInTimeOnlyGeantinoTruthPileUpToolsAlg"  , "StandardInTimeOnlyGeantinoTruthPileUpToolsAlg")
-- 
GitLab


From cbb5ae439b0613907826301db04b1892748f0411 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Fri, 26 Oct 2018 17:31:20 +0200
Subject: [PATCH 102/163] Ensure Simulation outputs are written to expected
 StoreGateSvc instances

When running simulation in the same job as pile-up digitization, some
simulation outputs have to be written to different StoreGateSvc instances
in order to be found by the digitization code.

Former-commit-id: e34b54cc22028d5e81a88e503023951b9d1827b5
---
 .../BeamEffects/python/BeamEffectsConfig.py   |  7 ++-
 .../python/ISF_AlgorithmsConfig.py            | 44 ++++++++++---------
 .../python/collection_merger_helpers.py       |  6 ++-
 .../python/ISF_Geant4CommonToolsConfig.py     | 10 ++---
 .../share/FastChainSkeleton.EVGENtoRDO.py     |  2 -
 5 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/Simulation/BeamEffects/python/BeamEffectsConfig.py b/Simulation/BeamEffects/python/BeamEffectsConfig.py
index 4a3fe4346930..747ac625bf48 100644
--- a/Simulation/BeamEffects/python/BeamEffectsConfig.py
+++ b/Simulation/BeamEffects/python/BeamEffectsConfig.py
@@ -107,7 +107,12 @@ def getGenEventRotator(name="GenEventRotator", **kwargs):
 #--------------------------------------------------------------------------------------------------
 ## Algorithms
 def getBeamEffectsAlg(name="BeamEffectsAlg", **kwargs):
-    kwargs.setdefault('InputMcEventCollection', 'GEN_EVENT')
+    from AthenaCommon.DetFlags import DetFlags
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    if athenaCommonFlags.DoFullChain() and DetFlags.pileup.any_on():
+        kwargs.setdefault('InputMcEventCollection', 'OriginalEvent_SG+GEN_EVENT') # For Fast Chain
+    else:
+        kwargs.setdefault('InputMcEventCollection', 'GEN_EVENT')
     kwargs.setdefault('OutputMcEventCollection', 'BeamTruthEvent')
     from G4AtlasApps.SimFlags import simFlags
     kwargs.setdefault("ISFRun", simFlags.ISFRun()) #FIXME Temporary property so that we don't change the output in the initial switch to this code.
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/ISF_AlgorithmsConfig.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/ISF_AlgorithmsConfig.py
index dbbc0dca66e1..c7779981e4d6 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/ISF_AlgorithmsConfig.py
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/ISF_AlgorithmsConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon import CfgMgr
 
@@ -21,25 +21,29 @@ def getCollectionMerger(name="ISF_CollectionMerger", **kwargs):
     kwargs.setdefault( "InputMDTHits",              [ ] )
     kwargs.setdefault( "InputRPCHits",              [ ] )
     kwargs.setdefault( "InputTGCHits",              [ ] )
-
-    kwargs.setdefault( "OutputBCMHits",             "BCMHits"             )
-    kwargs.setdefault( "OutputBLMHits",             "BLMHits"             )
-    kwargs.setdefault( "OutputPixelHits",           "PixelHits"           )
-    kwargs.setdefault( "OutputSCTHits",             "SCT_Hits"            )
-    kwargs.setdefault( "OutputTRTUncompressedHits", "TRTUncompressedHits" )
-
-    kwargs.setdefault( "OutputLArEMBHits",          "LArHitEMB"           )
-    kwargs.setdefault( "OutputLArEMECHits",         "LArHitEMEC"          )
-    kwargs.setdefault( "OutputLArFCALHits",         "LArHitFCAL"          )
-    kwargs.setdefault( "OutputLArHECHits",          "LArHitHEC"           )
-
-    kwargs.setdefault( "OutputTileHits",            "TileHitVec"          )
-    kwargs.setdefault( "OutputMBTSHits",            "MBTSHits"            )
-
-    kwargs.setdefault( "OutputCSCHits",             "CSC_Hits"            )
-    kwargs.setdefault( "OutputMDTHits",             "MDT_Hits"            )
-    kwargs.setdefault( "OutputRPCHits",             "RPC_Hits"            )
-    kwargs.setdefault( "OutputTGCHits",             "TGC_Hits"            )
+    from AthenaCommon.DetFlags import DetFlags
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    hardscatterSG = ""
+    if athenaCommonFlags.DoFullChain() and DetFlags.pileup.any_on():
+        hardscatterSG = "OriginalEvent_SG+"
+    kwargs.setdefault( "OutputBCMHits",             hardscatterSG+"BCMHits"             )
+    kwargs.setdefault( "OutputBLMHits",             hardscatterSG+"BLMHits"             )
+    kwargs.setdefault( "OutputPixelHits",           hardscatterSG+"PixelHits"           )
+    kwargs.setdefault( "OutputSCTHits",             hardscatterSG+"SCT_Hits"            )
+    kwargs.setdefault( "OutputTRTUncompressedHits", hardscatterSG+"TRTUncompressedHits" )
+
+    kwargs.setdefault( "OutputLArEMBHits",          hardscatterSG+"LArHitEMB"           )
+    kwargs.setdefault( "OutputLArEMECHits",         hardscatterSG+"LArHitEMEC"          )
+    kwargs.setdefault( "OutputLArFCALHits",         hardscatterSG+"LArHitFCAL"          )
+    kwargs.setdefault( "OutputLArHECHits",          hardscatterSG+"LArHitHEC"           )
+
+    kwargs.setdefault( "OutputTileHits",            hardscatterSG+"TileHitVec"          )
+    kwargs.setdefault( "OutputMBTSHits",            hardscatterSG+"MBTSHits"            )
+
+    kwargs.setdefault( "OutputCSCHits",             hardscatterSG+"CSC_Hits"            )
+    kwargs.setdefault( "OutputMDTHits",             hardscatterSG+"MDT_Hits"            )
+    kwargs.setdefault( "OutputRPCHits",             hardscatterSG+"RPC_Hits"            )
+    kwargs.setdefault( "OutputTGCHits",             hardscatterSG+"TGC_Hits"            )
     return CfgMgr.ISF__CollectionMerger(name, **kwargs)
 
 def getSimHitTreeCreator(name="ISF_SimHitTreeCreator", **kwargs):
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py
index c90af2b8cdc1..7335385ccf14 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py
@@ -1,7 +1,8 @@
 from AthenaCommon.CfgGetter import getAlgorithm
 from G4AtlasApps.SimFlags import simFlags
 from ISF_Config.ISF_jobProperties import ISF_Flags
-
+from AthenaCommon.DetFlags import DetFlags
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 
 def generate_mergeable_collection_name(bare_collection_name,
                                        mergeable_collection_suffix,
@@ -17,6 +18,7 @@ def generate_mergeable_collection_name(bare_collection_name,
     :param merger_input_property: name of the Input* property in the
         CollectionMerger algorithm to add the mergeable collection to.
     """
+    hardscatterSG = "OriginalEvent_SG+"
     if simFlags.ISFRun() and ISF_Flags.HITSMergingRequired():
         mergeable_collection = '{bare}{suffix}'.format(
             bare=bare_collection_name,
@@ -29,6 +31,8 @@ def generate_mergeable_collection_name(bare_collection_name,
         merger_input_collections = getattr(collection_merger,
                                            input_attribute_name)
         merger_input_collections.append(mergeable_collection)
+    elif athenaCommonFlags.DoFullChain() and DetFlags.pileup.any_on():
+        mergeable_collection = hardscatterSG+bare_collection_name
     else:
         mergeable_collection = bare_collection_name
 
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfig.py b/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfig.py
index dfcbc352f394..c5628992a940 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfig.py
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfig.py
@@ -1,13 +1,10 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 """
 Tools configurations for ISF
 KG Tan, 17/06/2012
 """
 
-from AthenaCommon.CfgGetter import getPrivateTool,getPrivateToolClone,getPublicTool,getPublicToolClone,\
-        getService,getServiceClone,getAlgorithm,getAlgorithmClone
-
 from AthenaCommon.Constants import *  # FATAL,ERROR etc.
 from AthenaCommon.SystemOfUnits import *
 from AthenaCommon.DetFlags import DetFlags
@@ -19,7 +16,10 @@ def getEntryLayerTool(name="ISF_EntryLayerTool", **kwargs):
     kwargs.setdefault('GeoIDSvc'        , 'ISF_GeoIDSvc')
     from G4AtlasApps.SimFlags import simFlags
     kwargs.setdefault('ParticleFilters' , [ simFlags.TruthStrategy.EntryLayerFilterName() ] )
-
+    from AthenaCommon.DetFlags import DetFlags
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    if athenaCommonFlags.DoFullChain() and DetFlags.pileup.any_on():
+        kwargs.setdefault('EvtStore', 'OriginalEvent_SG') # For Fast Chain
     from ISF_Geant4CommonTools.ISF_Geant4CommonToolsConf import ISF__EntryLayerTool
     return ISF__EntryLayerTool(name, **kwargs)
 
diff --git a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
index c462bd0bc105..6b787faff202 100644
--- a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
+++ b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
@@ -26,8 +26,6 @@
 #####################CommonSkeletonJobOptions.py##########################
 
 
-
-
 ######################################################################
 #                                                                    #
 # Place holder for numerous common job options of skeleton.XXX files #
-- 
GitLab


From 46ff659954a0da9ff418a04133bef288913d468e Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Mon, 18 Mar 2019 12:11:15 +0100
Subject: [PATCH 103/163] Sweep athenaprivate1/!15663 and athenaprivate1/!15680
 from 21.3 into master.

This commit tidies the syntax of the `FastChain_tf.py` transform skeleton which is a merge
of the simulation and digitization configuration and therefore does a lot of things twice
(or more).

The eventual goal of this is to be able to refactor the skeleton, such that we set all the
required flags, then create the Algorithms, Tools and Services afterwards.
---
 .../share/FastChainSkeleton.EVGENtoRDO.py     | 1406 +++++++----------
 1 file changed, 613 insertions(+), 793 deletions(-)

diff --git a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
index 6b787faff202..cc1272fa2a72 100644
--- a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
+++ b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
@@ -6,13 +6,21 @@
 # removed cosmics, beam gas/halo and pileup configuration
 # trigger will not be run
 
+from AthenaCommon.Logging import *
+#from AthenaCommon.Logging import logging
+fast_chain_log = logging.getLogger('FastChainSkeleton')
+digilog = fast_chain_log
+#logDigitization_flags = logging.getLogger( 'Digitization' )
+#digilog = logging.getLogger('Digi_trf')
+#logConfigDigitization = logging.getLogger( 'ConfigDigitization' )
 
+fast_chain_log.info( '****************** STARTING EVNTtoRDO *****************' )
 
+fast_chain_log.info( '**** Transformation run arguments' )
+fast_chain_log.info( str(runArgs) )
 
-
-
-
-
+from AthenaCommon import CfgGetter
+import AthenaCommon.SystemOfUnits as Units
 
 
 ### Start of Sim
@@ -25,6 +33,9 @@
 
 #####################CommonSkeletonJobOptions.py##########################
 
+from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties
+pmon_properties.PerfMonFlags.doMonitoring=True
+pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True
 
 ######################################################################
 #                                                                    #
@@ -35,61 +46,44 @@
 from AthenaCommon.GlobalFlags import globalflags
 from AthenaCommon.BeamFlags import jobproperties
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from G4AtlasApps.SimFlags import simFlags
+from ISF_Config.ISF_jobProperties import ISF_Flags
+from Digitization.DigitizationFlags import digitizationFlags
 #from AthenaCommon.BFieldFlags import jobproperties ##Not sure if this is appropriate for G4 sim
 
 ## Max/skip events
 if hasattr(runArgs,"skipEvents"):
     athenaCommonFlags.SkipEvents.set_Value_and_Lock( runArgs.skipEvents )
+
+
 if hasattr(runArgs,"maxEvents"):
     athenaCommonFlags.EvtMax.set_Value_and_Lock( runArgs.maxEvents )
 else:
     athenaCommonFlags.EvtMax=-1
 
+
 if hasattr(runArgs,"conditionsTag"):
     if runArgs.conditionsTag != 'NONE':
         globalflags.ConditionsTag.set_Value_and_Lock( runArgs.conditionsTag ) #make this one compulsory?
+        digitizationFlags.IOVDbGlobalTag = runArgs.conditionsTag
+
+
 if hasattr(runArgs,"beamType"):
     if runArgs.beamType != 'NONE':
         # Setting beamType='cosmics' keeps cavern in world volume for g4sim also with non-commissioning geometries
         jobproperties.Beam.beamType.set_Value_and_Lock( runArgs.beamType )
-## if hasattr(runArgs,"AMITag"): rec.AMITag=runArgs.AMITag
-## if hasattr(runArgs,"userExec"): rec.UserExecs=runArgs.userExec
-## if hasattr(runArgs,"RunNumber"): rec.RunNumber=runArgs.RunNumber
-## if hasattr(runArgs,"projectName"): rec.projectName=runArgs.projectName
-## if hasattr(runArgs,"trigStream"): rec.triggerStream=runArgs.trigStream
-## if hasattr(runArgs,"triggerConfig"):
-##     from TriggerJobOpts.TriggerFlags import TriggerFlags as tf
-##     tf.triggerConfig=runArgs.triggerConfig
+
 
 # Avoid command line preInclude for event service
 if hasattr(runArgs, "eventService") and runArgs.eventService:
     include('AthenaMP/AthenaMP_EventService.py')
 
-## autoConfiguration keywords triggering pre-defined functions
-## if hasattr(runArgs,"autoConfiguration"):
-##     for key in runArgs.autoConfiguration:
-##         rec.AutoConfiguration.append(key)
-
-from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties
-pmon_properties.PerfMonFlags.doMonitoring=True
-pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True
-
-
-# Conditions sequence for Athena MT
-from AthenaCommon.AlgSequence import AthSequencer
-condSeq = AthSequencer("AthCondSeq")
-if not hasattr(condSeq, "BeamSpotCondAlg"):
-   from BeamSpotConditions.BeamSpotConditionsConf import BeamSpotCondAlg
-   condSeq += BeamSpotCondAlg( "BeamSpotCondAlg" )
-
 
 #####################Back to Skeleton.EVGENtoHIT.py######################
 if hasattr(runArgs, "jobNumber"):
     if runArgs.jobNumber < 1:
         raise ValueError('jobNumber must be a postive integer. %s lies outside this range', str(runArgs.jobNumber))
 
-
-from G4AtlasApps.SimFlags import simFlags
 if hasattr(runArgs, "inputTXT_EVENTIDFile"):
     from OverlayCommonAlgs.OverlayFlags import overlayFlags
     overlayFlags.EventIDTextFile = runArgs.inputTXT_EVENTIDFile[0]
@@ -119,12 +113,8 @@ else:
 
 
 ##############################Back to MyCustomSkeleton########################
-if hasattr(runArgs, 'useISF') and not runArgs.useISF:
-    raise RuntimeError("Unsupported configuration! If you want to run with useISF=False, please use AtlasG4_tf.py!")
 
 ## Get the logger
-from AthenaCommon.Logging import *
-fast_chain_log = logging.getLogger('ISF')
 fast_chain_log.info('****************** STARTING ISF ******************')
 
 ### Force trigger to be off
@@ -133,21 +123,26 @@ rec.doTrigger.set_Value_and_Lock(False)
 
 
 ## Simulation flags need to be imported first
-from G4AtlasApps.SimFlags import simFlags
 simFlags.load_atlas_flags()
+if hasattr(runArgs, 'useISF') and not runArgs.useISF:
+    raise RuntimeError("Unsupported configuration! If you want to run with useISF=False, please use AtlasG4_tf.py!")
 simFlags.ISFRun=True
-from ISF_Config.ISF_jobProperties import ISF_Flags
 
 ## Set simulation geometry tag
 if hasattr(runArgs, 'geometryVersion'):
     simFlags.SimLayout.set_Value_and_Lock(runArgs.geometryVersion)
-    globalflags.DetDescrVersion = simFlags.SimLayout.get_Value()
     fast_chain_log.debug('SimLayout set to %s' % simFlags.SimLayout)
+    if runArgs.geometryVersion.endswith("_VALIDATION"):
+        pos=runArgs.geometryVersion.find("_VALIDATION")
+        globalflags.DetDescrVersion.set_Value_and_Lock( runArgs.geometryVersion[:pos] )
+    else:
+        globalflags.DetDescrVersion.set_Value_and_Lock( runArgs.geometryVersion )
+    fast_chain_log.debug('DetDescrVersion set to %s' % globalflags.DetDescrVersion)
 else:
     raise RuntimeError("No geometryVersion provided.")
 
+
 ## AthenaCommon flags
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 # Jobs should stop if an include fails.
 if hasattr(runArgs, "IgnoreConfigError"):
     athenaCommonFlags.AllowIgnoreConfigError = runArgs.IgnoreConfigError
@@ -156,8 +151,6 @@ else:
 
 athenaCommonFlags.DoFullChain=True
 
-from AthenaCommon.BeamFlags import jobproperties
-
 ## Input Files
 def setInputEvgenFileJobProperties(InputEvgenFile):
     from AthenaCommon.GlobalFlags import globalflags
@@ -211,22 +204,21 @@ if hasattr(runArgs, "inputEVNT_TRFile"):
     if hasattr(runArgs,"trackRecordType") and runArgs.trackRecordType=="stopped":
         include('SimulationJobOptions/preInclude.ReadStoppedParticles.py')
 
+# get top sequence
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
 # Avoid command line preInclude for cavern background
 if jobproperties.Beam.beamType.get_Value() != 'cosmics':
     # If it was already there, then we have a stopped particle file
     if hasattr(runArgs, "inputEVNT_TRFile") and\
-        not hasattr(topSeq,'TrackRecordGenerator'):
+        not hasattr(topSequence,'TrackRecordGenerator'):
         include('SimulationJobOptions/preInclude.G4ReadCavern.py')
     # If there's a stopped particle file, don't do all the cavern stuff
     if hasattr(runArgs, "outputEVNT_TRFile") and\
         not (hasattr(simFlags,'StoppedParticleFile') and simFlags.StoppedParticleFile.statusOn and simFlags.StoppedParticleFile.get_Value()!=''):
         include('SimulationJobOptions/preInclude.G4WriteCavern.py')
 
-# Avoid command line preInclude for event service
-if hasattr(runArgs, "eventService") and runArgs.eventService:
-    include('AthenaMP/AthenaMP_EventService.py')
-
-from ISF_Config.ISF_jobProperties import ISF_Flags
 if jobproperties.Beam.beamType.get_Value() == 'cosmics':
     ISF_Flags.Simulator.set_Value_and_Lock('CosmicsG4')
 elif hasattr(runArgs, 'simulator'):
@@ -234,38 +226,60 @@ elif hasattr(runArgs, 'simulator'):
 else:
     ISF_Flags.Simulator.set_Value_and_Lock('MC12G4')
 
-# temporary fix to ensure TRT will record hits if using FATRAS
-# this should eventually be removed when it is configured properly in ISF
-if hasattr(runArgs, 'simulator') and runArgs.simulator.find('ATLFASTIIF')>=0:
-    from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags
-    TrkDetFlags.TRT_BuildStrawLayers=True
-    fast_chain_log.info('Enabled TRT_BuildStrawLayers to get hits in ATLFASTIIF')
+from AthenaCommon.DetFlags import DetFlags
+
+#Trial block: Set off tasks at start
+## Switch off tasks
+#    DetFlags.pileup.all_setOff()
+#    DetFlags.simulateLVL1.all_setOff()
+#    DetFlags.digitize.all_setOff()
+#if not simFlags.IsEventOverlayInputSim():
+#DetFlags.overlay.all_setOff()
+
+#    DetFlags.readRDOPool.all_setOff()
+#    DetFlags.makeRIO.all_setOff()
+#    DetFlags.writeBS.all_setOff()
+#    DetFlags.readRDOBS.all_setOff()
+#    DetFlags.readRIOBS.all_setOff()
+#    DetFlags.readRIOPool.all_setOff()
+#    DetFlags.writeRIOPool.all_setOff()
+#    DetFlags.writeRDOPool.all_setOff()
 
+
+#set flags ON:
+
+#Tasks we want switched ON (write RDOPool) - want this for all detectors that we want ON:
+#DetFlags.writeRDOPool.all_setOn()
+
+#### this flag turns all the detectors ON that we want for simulation.
 try:
     from ISF_Config import FlagSetters
     FlagSetters.configureFlagsBase()
-## Check for any simulator-specific configuration
+    ## Check for any simulator-specific configuration
     configureFlags = getattr(FlagSetters, ISF_Flags.Simulator.configFlagsMethodName(), None)
     if configureFlags is not None:
         configureFlags()
     possibleSubDetectors=['pixel','SCT','TRT','BCM','Lucid','ZDC','ALFA','AFP','FwdRegion','LAr','HGTD','Tile','MDT','CSC','TGC','RPC','Micromegas','sTGC','Truth']
     for subdet in possibleSubDetectors:
-        simattr = "simulate."+subdet+"_on"
-        simcheck = getattr(DetFlags, simattr, None)
+        simattr = subdet+"_on"
+        simcheck = getattr(DetFlags.simulate, simattr, None)
         if simcheck is not None and simcheck():
             attrname = subdet+"_setOn"
             checkfn = getattr(DetFlags, attrname, None)
             if checkfn is not None:
                 checkfn()
+
 except:
     ## Select detectors
     if 'DetFlags' not in dir():
-        from AthenaCommon.DetFlags import DetFlags
+        # from AthenaCommon.DetFlags import DetFlags
         ## If you configure one det flag, you're responsible for configuring them all!
         DetFlags.all_setOn()
-    DetFlags.LVL1_setOff() # LVL1 is not part of G4 sim
-    DetFlags.Truth_setOn()
 
+
+#DetFlags.all_setOn()
+DetFlags.LVL1_setOff()
+DetFlags.Truth_setOn()
 DetFlags.Forward_setOff() # Forward dets are off by default
 DetFlags.Micromegas_setOff()
 DetFlags.sTGC_setOff()
@@ -274,7 +288,69 @@ checkHGTDOff = getattr(DetFlags, 'HGTD_setOff', None)
 if checkHGTDOff is not None:
     checkHGTDOff() #Default for now
 
-from AthenaCommon.DetFlags import DetFlags
+# from AthenaCommon.DetFlags import DetFlags
+
+# from AthenaCommon.DetFlags import DetFlags
+    ## Tidy up DBM DetFlags: temporary measure
+DetFlags.DBM_setOff()
+
+if hasattr(simFlags, 'SimulateNewSmallWheel'):
+    if simFlags.SimulateNewSmallWheel():
+        DetFlags.sTGC_setOn()
+        DetFlags.Micromegas_setOn()
+
+#if simFlags.ForwardDetectors.statusOn:
+#    if DetFlags.geometry.FwdRegion_on():
+#        from AthenaCommon.AppMgr import ToolSvc
+#        ToolSvc += CfgGetter.getPublicTool("ForwardRegionProperties")
+
+### Set digitize all except forward detectors
+DetFlags.digitize.all_setOn()
+DetFlags.digitize.LVL1_setOff()
+DetFlags.digitize.ZDC_setOff()
+DetFlags.digitize.Micromegas_setOff()
+DetFlags.digitize.sTGC_setOff()
+DetFlags.digitize.Forward_setOff()
+DetFlags.digitize.Lucid_setOff()
+DetFlags.digitize.AFP_setOff()
+DetFlags.digitize.ALFA_setOff()
+
+#set all detdescr on except fwd.
+#DetFlags.detdescr.all_setOn()
+#DetFlags.detdescr.LVL1_setOff()
+#DetFlags.detdescr.ZDC_setOff()
+#DetFlags.detdescr.Micromegas_setOff()
+#DetFlags.detdescr.sTGC_setOff()
+#DetFlags.detdescr.Forward_setOff()
+#DetFlags.detdescr.Lucid_setOff()
+#DetFlags.detdescr.AFP_setOff()
+#DetFlags.detdescr.ALFA_setOff()
+
+#--------------------------------------------------------------
+# Set Detector flags for this run
+#--------------------------------------------------------------
+if 'DetFlags' in dir():
+
+    DetFlags.Print()
+    #DetFlags.overlay.all_setOff()
+
+#DetFlags.simulate.all_setOff()
+DetFlags.makeRIO.all_setOff()
+DetFlags.writeBS.all_setOff()
+DetFlags.readRDOBS.all_setOff()
+DetFlags.readRIOBS.all_setOff()
+DetFlags.readRIOPool.all_setOff()
+DetFlags.writeRIOPool.all_setOff()
+
+
+# temporary fix to ensure TRT will record hits if using FATRAS
+# this should eventually be removed when it is configured properly in ISF
+if hasattr(runArgs, 'simulator') and runArgs.simulator.find('ATLFASTIIF')>=0:
+    from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags
+    TrkDetFlags.TRT_BuildStrawLayers=True
+    fast_chain_log.info('Enabled TRT_BuildStrawLayers to get hits in ATLFASTIIF')
+
+
 DetFlags.Print()
 
 # removed configuration of forward detectors from standard simulation config
@@ -304,6 +380,7 @@ if hasattr(runArgs,"DataRunNumber"):
     if runArgs.DataRunNumber>0:
         fast_chain_log.info( 'Overriding run number to be: %s ', runArgs.DataRunNumber )
         simFlags.RunNumber=runArgs.DataRunNumber
+        digitizationFlags.dataRunNumber=runArgs.DataRunNumber
 elif hasattr(runArgs,'jobNumber'):
     if runArgs.jobNumber>=0:
         fast_chain_log.info( 'Using job number '+str(runArgs.jobNumber)+' to derive run number.' )
@@ -312,62 +389,248 @@ elif hasattr(runArgs,'jobNumber'):
 
 ## removed code block for handling cosmics track record
 
-# get top sequence
-from AthenaCommon.AlgSequence import AlgSequence
-topSeq = AlgSequence()
+#--------------------------------------------------------------
+# Override pile-up configuration on the command-line
+#--------------------------------------------------------------
 
-## Set Overall per-Algorithm time-limit on the AlgSequence
-topSeq.TimeOut = 43200 * Units.s
+PileUpConfigOverride=False
+import math
 
-try:
-    from RecAlgs.RecAlgsConf import TimingAlg
-    topSeq+=TimingAlg("SimTimerBegin", TimingObjOutputName = "EVNTtoHITS_timings")
-except:
-    fast_chain_log.warning('Could not add TimingAlg, no timing info will be written out.')
+## First check for depreacted command-line options
+if hasattr(runArgs,"numberOfLowPtMinBias"):
+    if not math.fabs(digitizationFlags.numberOfLowPtMinBias.get_Value()-runArgs.numberOfLowPtMinBias)<0.00000001: #FIXME comparing two floats
+        fast_chain_log.info( "Changing digitizationFlags.numberOfLowPtMinBias from %s to %s", digitizationFlags.numberOfLowPtMinBias.get_Value(),runArgs.numberOfLowPtMinBias)
+        digitizationFlags.numberOfLowPtMinBias=float(runArgs.numberOfLowPtMinBias)
+        PileUpConfigOverride=True
+if hasattr(runArgs,"numberOfHighPtMinBias"):
+    if not math.fabs(digitizationFlags.numberOfHighPtMinBias.get_Value()-runArgs.numberOfHighPtMinBias)<0.00000001: #FIXME comparing two floats
+        fast_chain_log.info( "Changing digitizationFlags.numberOfHighPtMinBias from %s to %s", digitizationFlags.numberOfHighPtMinBias.get_Value(),runArgs.numberOfHighPtMinBias)
+        digitizationFlags.numberOfHighPtMinBias=float(runArgs.numberOfHighPtMinBias)
+        PileUpConfigOverride=True
+if hasattr(runArgs,"numberOfBeamHalo"):
+    if not math.fabs(digitizationFlags.numberOfBeamHalo.get_Value()-runArgs.numberOfBeamHalo)<0.00000001: #FIXME comparing two floats
+        fast_chain_log.info( "Changing digitizationFlags.numberOfBeamHalo from %s to %s", digitizationFlags.numberOfBeamHalo.get_Value(),runArgs.numberOfBeamHalo)
+        digitizationFlags.numberOfBeamHalo=float(runArgs.numberOfBeamHalo)
+        PileUpConfigOverride=True
+if hasattr(runArgs,"numberOfBeamGas"):
+    if not math.fabs(digitizationFlags.numberOfBeamGas.get_Value()-runArgs.numberOfBeamGas)<0.00000001: #FIXME comparing two floats
+        fast_chain_log.info( "Changing digitizationFlags.numberOfBeamGas from %s to %s", digitizationFlags.numberOfBeamGas.get_Value(),runArgs.numberOfBeamGas)
+        digitizationFlags.numberOfBeamGas=float(runArgs.numberOfBeamGas)
+        PileUpConfigOverride=True
+if hasattr(runArgs,"numberOfCavernBkg"):
+    if not digitizationFlags.numberOfCavern.get_Value()==runArgs.numberOfCavernBkg:
+        fast_chain_log.info( "Changing digitizationFlags.cavernEvents from %s to %s", digitizationFlags.numberOfCavern.get_Value(),runArgs.numberOfCavernBkg)
+        digitizationFlags.numberOfCavern=runArgs.numberOfCavernBkg
+        PileUpConfigOverride=True
+if hasattr(runArgs,"bunchSpacing"):
+    if  digitizationFlags.BeamIntensityPattern.statusOn:
+        fast_chain_log.warning("Redefine bunch-structure with a fixed %s ns bunchSpacing. Overwriting the previous setting of %s", runArgs.bunchSpacing,digitizationFlags.BeamIntensityPattern.get_Value())
+    else:
+        fast_chain_log.info( "Setting up job to run with a fixed %s ns bunchSpacing.", runArgs.bunchSpacing)
+    digitizationFlags.bunchSpacing = 25
+    digitizationFlags.BeamIntensityPattern.createConstBunchSpacingPattern(int(runArgs.bunchSpacing)) #FIXME This runArg should probably inherit from argInt rather than argFloat
+    fast_chain_log.info( "New bunch-structure = %s", digitizationFlags.BeamIntensityPattern.get_Value())
+    jobproperties.Beam.bunchSpacing = int(runArgs.bunchSpacing) #FIXME This runArg should probably inherit from argInt rather than argFloat
+    PileUpConfigOverride=True
+if hasattr(runArgs,"pileupInitialBunch"):
+    if not (digitizationFlags.initialBunchCrossing.get_Value()==runArgs.pileupInitialBunch):
+        fast_chain_log.info( "Changing digitizationFlags.initialBunchCrossing from %s to %s", digitizationFlags.initialBunchCrossing.get_Value(),runArgs.pileupInitialBunch)
+        digitizationFlags.initialBunchCrossing=runArgs.pileupInitialBunch
+        PileUpConfigOverride=True
+if hasattr(runArgs,"pileupFinalBunch"):
+    if not (digitizationFlags.finalBunchCrossing.get_Value()==runArgs.pileupFinalBunch):
+        fast_chain_log.info( "Changing digitizationFlags.finalBunchCrossing from %s to %s", digitizationFlags.finalBunchCrossing.get_Value(),runArgs.pileupFinalBunch)
+        digitizationFlags.finalBunchCrossing=runArgs.pileupFinalBunch
+        PileUpConfigOverride=True
+if hasattr(runArgs,"digiSteeringConf"):
+    if not (digitizationFlags.digiSteeringConf.get_Value()==runArgs.digiSteeringConf+"PileUpToolsAlg"):
+        fast_chain_log.info( "Changing digitizationFlags.digiSteeringConf from %s to %s", digitizationFlags.digiSteeringConf.get_Value(),runArgs.digiSteeringConf)
+        digitizationFlags.digiSteeringConf=runArgs.digiSteeringConf+"PileUpToolsAlg"
+        PileUpConfigOverride=True
+if PileUpConfigOverride:
+    fast_chain_log.info( "NB Some pile-up (re-)configuration was done on the command-line.")
+del PileUpConfigOverride
 
-from ISF_Config.ISF_jobProperties import ISF_Flags
-if hasattr(runArgs, 'simulator'):
-    ISF_Flags.Simulator = runArgs.simulator
+
+#--------------------------------------------------------------
+# Get the flags
+#--------------------------------------------------------------
+if hasattr(runArgs,"digiSeedOffset1"):
+    digitizationFlags.rndmSeedOffset1=int(runArgs.digiSeedOffset1)
 else:
-    ISF_Flags.Simulator = 'MC12G4'
+    fast_chain_log.warning( 'digiSeedOffset1 not set' )
+    digitizationFlags.rndmSeedOffset1=1
 
-#### *********** import ISF_Example code here **************** ####
+if hasattr(runArgs,"digiSeedOffset2"):
+    digitizationFlags.rndmSeedOffset2=int(runArgs.digiSeedOffset2)
+else:
+    fast_chain_log.warning( 'digiSeedOffset2 not set' )
+    digitizationFlags.rndmSeedOffset2=2
 
-#include("ISF_Config/ISF_ConfigJobInclude.py")
+if hasattr(runArgs,"samplingFractionDbTag"): #FIXME change this to PhysicsList?
+    digitizationFlags.physicsList=runArgs.samplingFractionDbTag
 
+if hasattr(runArgs,"digiRndmSvc"):
+    digitizationFlags.rndmSvc=runArgs.digiRndmSvc
 
+if hasattr(runArgs,"PileUpPremixing"):
+    fast_chain_log.info("Doing pile-up premixing")
+    digitizationFlags.PileUpPremixing = runArgs.PileUpPremixing
 
+#--------------------------------------------------------------
+# Pileup configuration
+#--------------------------------------------------------------
+from SimuJobTransforms.SimTransformUtils import makeBkgInputCol
+def HasInputFiles(runArgs, key):
+    if hasattr(runArgs, key):
+        cmd='runArgs.%s' % key
+        if eval(cmd):
+            return True
+    return False
 
-########## ISF_ConfigJobInclude.py #################
+## Low Pt minbias set-up
+bkgArgName="LowPtMinbiasHitsFile"
+if hasattr(runArgs, "inputLowPtMinbiasHitsFile"):
+    bkgArgName="inputLowPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.LowPtMinBiasInputCols.statusOn:
+    digitizationFlags.doLowPtMinBias = True
+else:
+    digitizationFlags.doLowPtMinBias = False
 
+## High Pt minbias set-up
+bkgArgName="HighPtMinbiasHitsFile"
+if hasattr(runArgs, "inputHighPtMinbiasHitsFile"):
+    bkgArgName="inputHighPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.HighPtMinBiasInputCols.statusOn:
+    digitizationFlags.doHighPtMinBias = True
+else:
+    digitizationFlags.doHighPtMinBias = False
 
+## Cavern Background set-up
+bkgArgName="cavernHitsFile"
+if hasattr(runArgs, "inputCavernHitsFile"):
+    bkgArgName="inputCavernHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg,
+                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log)
+if digitizationFlags.cavernInputCols.statusOn:
+    digitizationFlags.doCavern = True
+else:
+    digitizationFlags.doCavern = False
 
+## Beam Halo set-up
+bkgArgName="beamHaloHitsFile"
+if hasattr(runArgs, "inputBeamHaloHitsFile"):
+    bkgArgName="inputBeamHaloHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg,
+                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamHaloInputCols.statusOn:
+    digitizationFlags.doBeamHalo = True
+else:
+    digitizationFlags.doBeamHalo = False
 
-"""
-Common configurations for ISF
-KG Tan, 17/06/2012
-"""
+## Beam Gas set-up
+bkgArgName="beamGasHitsFile"
+if hasattr(runArgs, "inputBeamGasHitsFile"):
+    bkgArgName="inputBeamGasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg,
+                                                         digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamGasInputCols.statusOn:
+    digitizationFlags.doBeamGas = True
+else:
+    digitizationFlags.doBeamGas = False
 
-include.block('ISF_Config/ISF_ConfigJobInclude.py')
-from AthenaCommon.CfgGetter import getPrivateTool,getPrivateToolClone,getPublicTool,getPublicToolClone,\
-        getService,getServiceClone,getAlgorithm,getAlgorithmClone
 
 #--------------------------------------------------------------
-# Set to monte carlo
+# Other configuration: LVL1, turn off sub detectors, calo noise
 #--------------------------------------------------------------
-import AthenaCommon.AtlasUnixStandardJob
-from AthenaCommon import AthenaCommonFlags
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-from AthenaCommon.AppMgr import theApp
-from AthenaCommon.AppMgr import ServiceMgr
-from AthenaCommon.AlgSequence import AlgSequence
-topSequence = AlgSequence()
 
-# TODO: ELLI: remove this once the envelopes are stored in the DDDB
-#             -> currently a fallback python definition is used
-#import shutil
-#import os.path
-#if os.path.exists('geomDB') and os.path.islink('geomDB'):
+if hasattr(runArgs,"doAllNoise"):
+    if runArgs.doAllNoise!="NONE":
+        fast_chain_log.info('doAllNoise = %s: Overriding doInDetNoise, doCaloNoise and doMuonNoise', runArgs.doAllNoise)
+        if runArgs.doAllNoise=="True":
+            digitizationFlags.doInDetNoise=True
+            digitizationFlags.doCaloNoise=True
+            digitizationFlags.doMuonNoise=True
+        else:
+            digitizationFlags.doInDetNoise=False
+            digitizationFlags.doCaloNoise=False
+            digitizationFlags.doMuonNoise=False
+
+
+
+### No RDO output
+## Output RDO File
+if hasattr(runArgs,"outputRDOFile") or hasattr(runArgs,"tmpRDO"):
+    if hasattr(runArgs,"outputRDOFile"):
+        if hasattr(runArgs,"tmpRDO"):
+            fast_chain_log.fatal("Both outputRDOFile and tmpRDO specified - this configuration should not be used!")
+            raise SystemError
+        athenaCommonFlags.PoolRDOOutput.set_Value_and_Lock( runArgs.outputRDOFile )
+    if hasattr(runArgs,"tmpRDO"):
+        athenaCommonFlags.PoolRDOOutput.set_Value_and_Lock( runArgs.tmpRDO )
+    if hasattr(runArgs, "AddCaloDigi"):
+        AddCaloDigi = runArgs.AddCaloDigi
+        if AddCaloDigi:
+            fast_chain_log.info("Will write out all LArDigitContainers and TileDigitsContainers to RDO file.")
+            digitizationFlags.experimentalDigi+=["AddCaloDigi"]
+else:
+    fast_chain_log.info("no output file (outputRDOFile or tmpRDO) specified - switching off output StreamRDO")
+
+## Set Overall per-Algorithm time-limit on the AlgSequence
+topSequence.TimeOut = 43200 * Units.s
+
+try:
+    from RecAlgs.RecAlgsConf import TimingAlg
+    topSequence+=TimingAlg("SimTimerBegin", TimingObjOutputName = "EVNTtoHITS_timings")
+except:
+    fast_chain_log.warning('Could not add TimingAlg, no timing info will be written out.')
+
+#### *********** import ISF_Example code here **************** ####
+
+#include("ISF_Config/ISF_ConfigJobInclude.py")
+
+
+
+
+########## ISF_ConfigJobInclude.py #################
+
+
+
+
+"""
+Common configurations for ISF
+KG Tan, 17/06/2012
+"""
+
+#include.block('ISF_Config/ISF_ConfigJobInclude.py')
+
+#--------------------------------------------------------------
+# Set to monte carlo
+#--------------------------------------------------------------
+import AthenaCommon.AtlasUnixStandardJob
+from AthenaCommon.AppMgr import theApp
+from AthenaCommon.AppMgr import ServiceMgr
+from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+
+# TODO: ELLI: remove this once the envelopes are stored in the DDDB
+#             -> currently a fallback python definition is used
+#import shutil
+#import os.path
+#if os.path.exists('geomDB') and os.path.islink('geomDB'):
     #os.unlink('geomDB')
 #os.symlink('/afs/cern.ch/atlas/groups/Simulation/ISF/Envelopes_geomDB', 'geomDB')
 
@@ -376,19 +639,16 @@ topSequence = AlgSequence()
 # Set the flags automatically here
 # (move it to the job options if not meant to be automatic!)
 #--------------------------------------------------------------
-import AthenaCommon.SystemOfUnits as Units
-
-from ISF_Config.ISF_jobProperties import ISF_Flags # IMPORTANT: Flags must be finalised before these functons are called
 
-from AthenaCommon.GlobalFlags import globalflags
 # --- set globalflags
 globalflags.DataSource.set_Value_and_Lock('geant4')
-globalflags.InputFormat.set_Value_and_Lock('pool')
-globalflags.DetGeo.set_Value_and_Lock('atlas')
+if jobproperties.Beam.beamType == "cosmics" :
+    globalflags.DetGeo.set_Value_and_Lock('commis')
+else:
+    globalflags.DetGeo.set_Value_and_Lock('atlas')
 globalflags.Luminosity.set_Off()
 
 # --- set SimLayout (synchronised to globalflags)
-from G4AtlasApps.SimFlags import simFlags
 if globalflags.DetDescrVersion() not in simFlags.SimLayout.get_Value():
     print "ERROR globalFlags.DetDescrVersion and simFlags.SimLayout do not match!"
     print "Please correct your job options."
@@ -402,20 +662,48 @@ simFlags.EventFilter.set_Off()
 # --- metadata passed by the evgen stage (move earlier?)
 from ISF_Example.ISF_Metadata import checkForSpecialConfigurationMetadata
 checkForSpecialConfigurationMetadata()
-
 #--------------------------------------------------------------
-# Job setup
+# Read Simulation MetaData (unless override flag set to True)
 #--------------------------------------------------------------
-theApp.EvtMax = athenaCommonFlags.EvtMax()
+#if 'ALL' in digitizationFlags.overrideMetadata.get_Value():
+#    fast_chain_log.info("Skipping input file MetaData check.")
+#else :
+#    from Digitization.DigitizationReadMetaData import readHITSFileMetadata
+#    readHITSFileMetadata()
+
 
 # all det description
 include('ISF_Config/AllDet_detDescr.py')
+
+DetFlags.Print()
+
+#check job configuration
+from Digitization.DigiConfigCheckers import checkDetFlagConfiguration
+checkDetFlagConfiguration()
+
+from FullChainTransforms.FastChainConfigCheckers import syncDigitizationAndSimulationJobProperties
+syncDigitizationAndSimulationJobProperties()
+
+#--------------------------------------------------------------
+# Pileup configuration
+#--------------------------------------------------------------
+from Digitization.DigiConfigCheckers import syncDetFlagsAndDigitizationJobProperties
+syncDetFlagsAndDigitizationJobProperties()
 DetFlags.Print()
 
 if len(globalflags.ConditionsTag()):
     from IOVDbSvc.CondDB import conddb
     conddb.setGlobalTag(globalflags.ConditionsTag())
 
+## Translate conditions tag into IOVDbSvc global tag: must be done before job properties are locked!!!
+if not hasattr(ServiceMgr, 'IOVDbSvc'):
+    from IOVDbSvc.IOVDbSvcConf import IOVDbSvc
+    ServiceMgr += IOVDbSvc()
+if not hasattr(globalflags, "ConditionsTag") or not globalflags.ConditionsTag.get_Value():
+    raise SystemExit("AtlasSimSkeleton._do_jobproperties :: Global ConditionsTag not set")
+if not hasattr(ServiceMgr.IOVDbSvc, 'GlobalTag') or not ServiceMgr.IOVDbSvc.GlobalTag:
+        ServiceMgr.IOVDbSvc.GlobalTag = globalflags.ConditionsTag.get_Value()
+
 # Temporary work-around - see ATLASSIM-2351
 if ISF_Flags.UsingGeant4():
     #include("G4AtlasApps/G4Atlas.flat.configuration.py") #HACK
@@ -425,88 +713,32 @@ if ISF_Flags.UsingGeant4():
 
     ## _PyG4AtlasComp.__init__
     ## If the random number service hasn't been set up already, do it now.
-    from G4AtlasApps.SimFlags import simFlags
     simFlags.RandomSeedList.useDefaultSeeds()
 
     ## AtlasSimSkeleton._do_jobproperties
     ## Import extra flags if it hasn't already been done
-    from G4AtlasApps.SimFlags import simFlags
     if "atlas_flags" not in simFlags.extra_flags:
         simFlags.load_atlas_flags()
-    from AthenaCommon.BeamFlags import jobproperties
     if jobproperties.Beam.beamType() == "cosmics" and "cosmics_flags" not in simFlags.extra_flags:
         simFlags.load_cosmics_flags()
 
-    from AthenaCommon.DetFlags import DetFlags
-    ## Tidy up DBM DetFlags: temporary measure
-    DetFlags.DBM_setOff()
-
-    ## Tidy up NSW DetFlags: temporary measure
-    DetFlags.sTGC_setOff()
-    DetFlags.Micromegas_setOff()
-    if hasattr(simFlags, 'SimulateNewSmallWheel'):
-        if simFlags.SimulateNewSmallWheel():
-            DetFlags.sTGC_setOn()
-            DetFlags.Micromegas_setOn()
-
-    ## Switch off tasks
-#    DetFlags.pileup.all_setOff()
-#    DetFlags.simulateLVL1.all_setOff()
-#    DetFlags.digitize.all_setOff()
-    if not simFlags.IsEventOverlayInputSim():
-        DetFlags.overlay.all_setOff()
-#    DetFlags.readRDOPool.all_setOff()
-#    DetFlags.makeRIO.all_setOff()
-#    DetFlags.writeBS.all_setOff()
-#    DetFlags.readRDOBS.all_setOff()
-#    DetFlags.readRIOBS.all_setOff()
-#    DetFlags.readRIOPool.all_setOff()
-#    DetFlags.writeRIOPool.all_setOff()
-#    DetFlags.writeRDOPool.all_setOff()
-
-    ## Global flags needed by externals
-    from AthenaCommon.GlobalFlags import globalflags
-    globalflags.DataSource = 'geant4'
-    if jobproperties.Beam.beamType() == 'cosmics':
-        globalflags.DetGeo = 'commis'
-    else:
-        globalflags.DetGeo = 'atlas'
-
-    ## At this point we can set the global job properties flag
-    globalflags.DetDescrVersion = simFlags.SimLayout.get_Value()
-
     # Switch off GeoModel Release in the case of parameterization
     if simFlags.LArParameterization.get_Value()>0 and simFlags.ReleaseGeoModel():
         simFlags.ReleaseGeoModel = False
 
-    ## Translate conditions tag into IOVDbSvc global tag: must be done before job properties are locked!!!
-    from AthenaCommon.AppMgr import ServiceMgr
-    from IOVDbSvc.IOVDbSvcConf import IOVDbSvc
-    ServiceMgr += IOVDbSvc()
-    if not hasattr(globalflags, "ConditionsTag") or not globalflags.ConditionsTag.get_Value():
-        raise SystemExit("AtlasSimSkeleton._do_jobproperties :: Global ConditionsTag not set")
-    if not hasattr(ServiceMgr.IOVDbSvc, 'GlobalTag') or not ServiceMgr.IOVDbSvc.GlobalTag:
-        ServiceMgr.IOVDbSvc.GlobalTag = globalflags.ConditionsTag.get_Value()
-
     ## Enable floating point exception handling
     ## FIXME! This seems to cause the jobs to crash in the FpeControlSvc, so commenting this out for now...
-    #from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
     #athenaCommonFlags.RuntimeStrictness = 'abort'
 
-    if not simFlags.ISFRun:
-        from G4AtlasApps.G4Atlas_Metadata import checkForSpecialConfigurationMetadata
-        checkForSpecialConfigurationMetadata()
-
     from AthenaCommon.JobProperties import jobproperties
+
     DetFlags.Print()
-    jobproperties.print_JobProperties('tree&value')
 
-    # Lock the job properties if not running ISF.
-    if not simFlags.ISFRun:
-        jobproperties.lock_JobProperties()
+
+    jobproperties.print_JobProperties('tree&value')
 
     ## AtlasSimSkeleton._do_external
-    from AthenaCommon.AppMgr import ToolSvc,ServiceMgr
+    from AthenaCommon.AppMgr import ToolSvc
     from Geo2G4.Geo2G4Conf import Geo2G4Svc
     geo2G4Svc = Geo2G4Svc()
     theApp.CreateSvc += ["Geo2G4Svc"]
@@ -517,20 +749,18 @@ if ISF_Flags.UsingGeant4():
     ## GeoModel stuff
     ## TODO: Tidy imports etc.
     from GeoModelSvc.GeoModelSvcConf import GeoModelSvc
-    from AthenaCommon.GlobalFlags import jobproperties
     from AtlasGeoModel import SetGeometryVersion
 
     ## Forward Region Twiss files - needed before geometry setup!
-    from G4AtlasApps.SimFlags import simFlags
+
     if simFlags.ForwardDetectors.statusOn:
         if DetFlags.geometry.FwdRegion_on():
-            from AthenaCommon.CfgGetter import getPublicTool
             from AthenaCommon.AppMgr import ToolSvc
-            ToolSvc += getPublicTool("ForwardRegionProperties")
+            ToolSvc += CfgGetter.getPublicTool("ForwardRegionProperties")
+
 
     from AtlasGeoModel import GeoModelInit
     from AtlasGeoModel import SimEnvelopes
-    from GeoModelSvc.GeoModelSvcConf import GeoModelSvc
     gms = GeoModelSvc()
     ## Cosmics GeoModel tweaks
     if jobproperties.Beam.beamType() == 'cosmics' or \
@@ -565,7 +795,6 @@ if ISF_Flags.UsingGeant4():
         ## Additional material in the muon system
         from AGDD2GeoSvc.AGDD2GeoSvcConf import AGDDtoGeoSvc
         AGDD2Geo = AGDDtoGeoSvc()
-        from AthenaCommon import CfgGetter
         if not "MuonAGDDTool/MuonSpectrometer" in AGDD2Geo.Builders:
             ToolSvc += CfgGetter.getPublicTool("MuonSpectrometer", checkType=True)
             AGDD2Geo.Builders += ["MuonAGDDTool/MuonSpectrometer"]
@@ -580,285 +809,28 @@ if ISF_Flags.UsingGeant4():
     ## Add configured GeoModelSvc to service manager
     ServiceMgr += gms
 
-    ## AtlasSimSkeleton._do_metadata
-    from G4AtlasApps.SimFlags import simFlags
-    if not simFlags.ISFRun:
-        from G4AtlasApps.G4Atlas_Metadata import createSimulationParametersMetadata
-        createSimulationParametersMetadata()
-        from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-        if not athenaCommonFlags.PoolHitsOutput.statusOn:
-            print 'AtlasSimSkeleton._do_metadata :: no output HITS file, so no metadata writing required.'
-        else:
-            from AthenaServices.AthenaServicesConf import AthenaOutputStream
-            stream1_SimMetaData = AthenaOutputStream("StreamHITS_SimMetaData")
-            stream1_SimMetaData.ItemList += [ "IOVMetaDataContainer#*" ]
-
-    if not simFlags.ISFRun:
-        def hits_persistency():
-            """ HITS POOL file persistency
-            """
-            from G4AtlasApps.SimFlags import simFlags
-            from AthenaCommon.DetFlags import DetFlags
-            from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-            from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
-
-            ## Not yet understood, but need to treat StreamHITS as alg in Hive.
-            ## Seems to also work fine outside of Hive, but to be extra safe I'm
-            ## only changing it in Hive.
-            from AthenaCommon.ConcurrencyFlags import jobproperties as concurrencyProps
-            if concurrencyProps.ConcurrencyFlags.NumThreads() > 0:
-                as_alg = True
-            else:
-                as_alg = False
-            ## NB. Two-arg constructor is needed, since otherwise metadata writing fails!
-            stream1 = AthenaPoolOutputStream("StreamHITS", athenaCommonFlags.PoolHitsOutput(), asAlg=as_alg)
-
-            ## Write geometry tag info - move to main method
-            #import EventInfoMgt.EventInfoMgtInit
-
-            ## EventInfo & TruthEvent always written by default
-            stream1.ForceRead=True
-            stream1.ItemList = ["EventInfo#*",
-                                "McEventCollection#TruthEvent",
-                                "JetCollection#*"]
-
-            ## If we are running quasi-stable particle simulation, include the original event record
-            if hasattr(simFlags,'IncludeParentsInG4Event') and simFlags.IncludeParentsInG4Event.statusOn and simFlags.IncludeParentsInG4Event():
-                stream1.ItemList += ["McEventCollection#GEN_EVENT"]
-
-            stream1.ItemList += ["xAOD::JetContainer#*",
-                                 "xAOD::JetAuxContainer#*"]
-
-            ## Make stream aware of aborted events
-            stream1.AcceptAlgs = ["G4AtlasAlg"]
-
-            ## Detectors
-
-            ## Inner Detector
-            if DetFlags.ID_on():
-                stream1.ItemList += ["SiHitCollection#*",
-                                     "TRTUncompressedHitCollection#*",
-                                     "TrackRecordCollection#CaloEntryLayer"]
-            ## Calo
-            if DetFlags.Calo_on():
-                stream1.ItemList += ["CaloCalibrationHitContainer#*",
-                                     "LArHitContainer#*",
-                                     "TileHitVector#*",
-                                     #"SimpleScintillatorHitCollection#*",
-                                     "TrackRecordCollection#MuonEntryLayer"]
-            ## Muon
-            if DetFlags.Muon_on():
-                stream1.ItemList += ["RPCSimHitCollection#*",
-                                     "TGCSimHitCollection#*",
-                                     "CSCSimHitCollection#*",
-                                     "MDTSimHitCollection#*",
-                                     "TrackRecordCollection#MuonExitLayer"]
-                if hasattr(simFlags, 'SimulateNewSmallWheel'):
-                    if simFlags.SimulateNewSmallWheel():
-                        stream1.ItemList += ["GenericMuonSimHitCollection#*"]
-            ## Lucid
-            if DetFlags.Lucid_on():
-                stream1.ItemList += ["LUCID_SimHitCollection#*"]
-
-            ## FwdRegion
-            if DetFlags.FwdRegion_on():
-                stream1.ItemList += ["SimulationHitCollection#*"]
-
-            ## ZDC
-            if DetFlags.ZDC_on():
-                stream1.ItemList += ["ZDC_SimPixelHit_Collection#*",
-                                     "ZDC_SimStripHit_Collection#*"]
-            ## ALFA
-            if DetFlags.ALFA_on():
-                stream1.ItemList += ["ALFA_HitCollection#*",
-                                     "ALFA_ODHitCollection#*"]
-
-            ## AFP
-            if DetFlags.AFP_on():
-                stream1.ItemList += ["AFP_TDSimHitCollection#*",
-                                     "AFP_SIDSimHitCollection#*"]
-
-            ### Ancillary scintillators
-            #stream1.ItemList += ["ScintillatorHitCollection#*"]
-
-            ## TimingAlg
-            stream1.ItemList +=["RecoTimingObj#EVNTtoHITS_timings"]
-
-            ## Add cosmics and test beam configuration hit persistency if required cf. geom tag
-            layout = simFlags.SimLayout.get_Value()
-            if "tb" not in layout:
-                from AthenaCommon.BeamFlags import jobproperties
-                if jobproperties.Beam.beamType() == 'cosmics' or \
-                        (hasattr(simFlags, "WriteTR") and simFlags.WriteTR.statusOn) or \
-                        (hasattr(simFlags, "ReadTR") and simFlags.ReadTR.statusOn):
-                    stream1.ItemList += ["TrackRecordCollection#CosmicRecord", "TrackRecordCollection#CosmicPerigee"]
-            else:
-                ## CTB-specific
-                if layout.startswith("ctb"):
-                    if simFlags.LArFarUpstreamMaterial.statusOn and simFlags.LArFarUpstreamMaterial.get_Value():
-                        stream1.ItemList.append("TrackRecordCollection#LArFarUpstreamMaterialExitLayer")
-                ## Persistency of test-beam layout
-                if layout.startswith('ctb') or layout.startswith('tb_Tile2000_'):
-                    stream1.ItemList += ["TBElementContainer#*"]
-
-
-        def evgen_persistency():
-            """ EVGEN POOL file persistency
-            """
-            from G4AtlasApps.SimFlags import simFlags
-            from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
-            ## NB. Two-arg constructor is needed, since otherwise metadata writing fails!
-            if hasattr(simFlags, "WriteTR") and simFlags.WriteTR.statusOn:
-                stream2 = AthenaPoolOutputStream("StreamEVGEN", simFlags.WriteTR.get_Value())
-                stream2.ItemList += ["IOVMetaDataContainer#*",
-                                     "EventInfo#*"]
-                if simFlags.CavernBG.statusOn and 'Write' in simFlags.CavernBG.get_Value():
-                    stream2.ItemList += ["TrackRecordCollection#NeutronBG"]
-                else:
-                    stream2.ItemList += ["TrackRecordCollection#CosmicRecord"]
-                stream2.AcceptAlgs = ["G4AtlasAlg"]
-            if hasattr(simFlags,'StoppedParticleFile') and simFlags.StoppedParticleFile.statusOn:
-                stream2 = AthenaPoolOutputStream("StreamEVGEN", simFlags.StoppedParticleFile.get_Value())
-                stream2.ItemList += ["IOVMetaDataContainer#*",
-                                     "EventInfo#*"]
-                stream2.ItemList += ["TrackRecordCollection#StoppingPositions"]
-                stream2.AcceptAlgs = ["G4AtlasAlg"]
-
-
-        def will_write_output_files():
-            """ Check if any POOL files will be written by this job
-            """
-            from G4AtlasApps.SimFlags import simFlags
-            from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-            if athenaCommonFlags.PoolHitsOutput.statusOn:
-                return True
-            elif ("tb" not in simFlags.SimLayout.get_Value()):
-                if hasattr(simFlags, "WriteTR") and simFlags.WriteTR.statusOn:
-                    return True
-                elif hasattr(simFlags,'StoppedParticleFile') and simFlags.StoppedParticleFile.statusOn:
-                    return True
-            return False
-
-
-        def do_run_number_modifications():
-            """ Set the run number in the simulation.  In order of priority, use:
-            - The RunNumber flag
-            - The input file run number """
-            # FIXME This method is called from both _do_persistency and _do_All for AtlasG4 jobs!
-            from G4AtlasApps.G4Atlas_Metadata import configureRunNumberOverrides
-            configureRunNumberOverrides()
-
-
-        ## SimSkeleton._do_readevgen
-        from G4AtlasApps.SimFlags import simFlags
-        from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-        from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-        ## ReadTR is only present in simFlags for ATLAS geometries with cosmics switched on
-        if (not simFlags.ISFRun) and hasattr(simFlags, "ReadTR") and simFlags.ReadTR.statusOn:
-            include("CosmicGenerator/SetCosmicGenerator.py")
-
-        if athenaCommonFlags.PoolEvgenInput.statusOn:
-            ## Tell the event selector about the evgen input files and event skipping
-            if not hasattr(svcMgr, 'EventSelector'):
-                import AthenaPoolCnvSvc.ReadAthenaPool
-            svcMgr.EventSelector.InputCollections = athenaCommonFlags.PoolEvgenInput()
-            if athenaCommonFlags.SkipEvents.statusOn:
-                svcMgr.EventSelector.SkipEvents = athenaCommonFlags.SkipEvents()
-            from G4AtlasApps.G4Atlas_Metadata import inputFileValidityCheck
-            inputFileValidityCheck()
-        else:
-            ## No input file so assume that we are running a Generator in the same job
-            if not hasattr(svcMgr, 'EventSelector'):
-                import AthenaCommon.AtlasUnixGeneratorJob
-            # TODO: Check that there is at least one algorithm already in the AlgSequence?
-            ## Warn if attempting to skip events in a generator job
-            if athenaCommonFlags.SkipEvents.statusOn and athenaCommonFlags.SkipEvents()!=0:
-                msg = "SimSkeleton._do_readevgen :: athenaCommonFlags.SkipEvents set in a job without an active "
-                msg += "athenaCommonFlags.PoolEvgenInput flag: ignoring event skip request"
-                print msg
-
-        ## SimSkeleton._do_persistency
-        from G4AtlasApps.SimFlags import simFlags
-        from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-        if will_write_output_files():
-            ## Write hits in POOL
-            ## The following used to be in G4AtlasApps/HitAthenaPoolWriteOptions
-            from AthenaCommon.DetFlags import DetFlags
-            from AthenaCommon.Configurable import Configurable
-            from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
-
-            ## Default setting for one output stream
-            from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-            svcMgr.AthenaPoolCnvSvc.PoolAttributes += ["TREE_BRANCH_OFFSETTAB_LEN = '100'"]
-            # Recommendations from Peter vG 16.08.25
-            svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolHitsOutput() + "'; ContainerName = 'TTree=CollectionTree'; TREE_AUTO_FLUSH = '1'" ]
-
-            ## Write geometry tag info
-            import EventInfoMgt.EventInfoMgtInit
-
-            ## Patch metadata if required
-            from G4AtlasApps.G4Atlas_Metadata import patch_mc_channel_numberMetadata
-            patch_mc_channel_numberMetadata()
-
-            ## Instantiate StreamHITS
-            if athenaCommonFlags.PoolHitsOutput.statusOn:
-                hits_persistency()
-
-            ## StreamEVGEN: needed for cosmic simulations and cavern BG
-            ## Separate stream of track record (TR) info -- it does not apply to the CTB simulations.
-            # TODO: Can this be merged into the cosmics sec above, or do the AthenaPool includes *need* to be in-between?
-            if "tb" not in simFlags.SimLayout.get_Value():
-                evgen_persistency()
-
-        # Check on run numbers and update them if necessary
-        do_run_number_modifications()
-
-
-    ## _PyG4AtlasComp.initialize
-    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-    if athenaCommonFlags.EvtMax.statusOn:# and theApp.EvtMax == -1:
-        theApp.EvtMax = athenaCommonFlags.EvtMax()
-
-
-
 
     ###################Back to ISF_ConfigJobInclude.py################
 
 #--------------------------------------------------------------
 # Setup the ISF Services
 #--------------------------------------------------------------
-# --- load AuditorSvc
-from AthenaCommon.ConfigurableDb import getConfigurable
-# --- write out summary of the memory usage
-#   | number of events to be skip to detect memory leak
-#   | 20 is default. May need to be made larger for complete jobs.
-ServiceMgr.AuditorSvc += getConfigurable("ChronoAuditor")()
-# --- write out a short message upon entering or leaving each algorithm
-# ServiceMgr.AuditorSvc += getConfigurable("NameAuditor")()
-#
-theApp.AuditAlgorithms = True
-theApp.AuditServices   = True
-#
-# --- Display detailed size and timing statistics for writing and reading
-ServiceMgr.AthenaPoolCnvSvc.UseDetailChronoStat = True
 
 #--------------------------------------------------------------
 # ISF input
 #--------------------------------------------------------------
 
 # Note: automatically adds generator to TopSequence if applicable
-from AthenaCommon.BeamFlags import jobproperties
 # if an input sting identifier was given, use ISF input definitions
 if ISF_Flags.Input()!="NONE":
-    getAlgorithm('ISF_Input_' + ISF_Flags.Input())
+    CfgGetter.getAlgorithm('ISF_Input_' + ISF_Flags.Input())
 # cosmics input
 elif jobproperties.Beam.beamType.get_Value() == 'cosmics':
-    from G4AtlasApps.SimFlags import simFlags
     simFlags.load_cosmics_flags()
     if simFlags.ReadTR.statusOn:
-        getAlgorithm('TrackRecordCosmicGenerator')
+        CfgGetter.getAlgorithm('TrackRecordCosmicGenerator')
     else:
-        getAlgorithm('EvgenCosmicGenerator')
+        CfgGetter.getAlgorithm('EvgenCosmicGenerator')
 # non of the above
 
 elif not athenaCommonFlags.PoolEvgenInput.statusOn:
@@ -867,12 +839,11 @@ elif not athenaCommonFlags.PoolEvgenInput.statusOn:
 else :
     if ISF_Flags.OverrideInputFiles():
         athenaCommonFlags.PoolEvgenInput = ISF_Flags.OverrideInputFiles()
-    getAlgorithm('ISF_Input_GenericFiles')
+    CfgGetter.getAlgorithm('ISF_Input_GenericFiles')
 
 from ISF_Example.ISF_Input import ISF_Input
 
-from AthenaCommon.CfgGetter import getAlgorithm
-topSeq += getAlgorithm("BeamEffectsAlg")
+topSequence += CfgGetter.getAlgorithm("BeamEffectsAlg")
 
 #--------------------------------------------------------------
 # ISF kernel configuration
@@ -881,29 +852,9 @@ topSeq += getAlgorithm("BeamEffectsAlg")
 # keep reference to collection merger algorithm to guarantee that
 # any subsequent simulator configuration gets a reference to the same
 # instance when calling confgetter's getAlgorithm
-collection_merger_alg = getAlgorithm('ISF_CollectionMerger')
-
-SimKernel = getAlgorithm(ISF_Flags.Simulator.KernelName())
-
-#--------------------------------------------------------------
-# Setup the random number streams
-#--------------------------------------------------------------
-from G4AtlasApps.SimFlags import SimFlags,simFlags;
-if not athenaCommonFlags.PoolEvgenInput.statusOn:
-    if not simFlags.RandomSeedList.checkForExistingSeed('SINGLE'):
-        simFlags.RandomSeedList.addSeed( "SINGLE", 43657613, 78935670 )
-if not simFlags.RandomSeedList.checkForExistingSeed('VERTEX'):
-  simFlags.RandomSeedList.addSeed( 'VERTEX', 9123448, 829143 )
-simFlags.RandomSeedList.addtoService()
-simFlags.RandomSeedList.printSeeds()
+collection_merger_alg = CfgGetter.getAlgorithm('ISF_CollectionMerger')
 
-#--------------------------------------------------------------
-# Setup the ISF Output
-#--------------------------------------------------------------
-from ISF_Example.ISF_Output import ISF_HITSStream
-from ISF_Example.ISF_Metadata import createSimulationParametersMetadata, configureRunNumberOverrides
-createSimulationParametersMetadata()
-configureRunNumberOverrides()
+SimKernel = CfgGetter.getAlgorithm(ISF_Flags.Simulator.KernelName())
 
 if ISF_Flags.HITSMergingRequired():
     topSequence += collection_merger_alg
@@ -929,13 +880,14 @@ if ISF_Flags.RunVP1() :
     # VP1 part (better switch off PerMon when using VP1)
     from VP1Algs.VP1AlgsConf import VP1Alg
     topSequence += VP1Alg()
-
-elif ISF_Flags.DoPerfMonStats() :
     # Performance Monitoring (VP1 does not like this)
     # https://twiki.cern.ch/twiki/bin/viewauth/Atlas/PerfMonSD
-    from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties
-    pmon_properties.PerfMonFlags.doMonitoring=True
-    pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True
+    pmon_properties.PerfMonFlags.doMonitoring=False
+    pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=False
+
+if not ISF_Flags.DoPerfMonStats() :
+    pmon_properties.PerfMonFlags.doMonitoring=False
+    pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=False
 
 
 if ISF_Flags.DumpMcEvent() :
@@ -962,7 +914,7 @@ print topSequence
 
 ## check to see if  pileup emulation is being used, if so do post-ISF-config
 ## actions to enable simulation of pileup collection
-if 'AthSequencer/EvgenGenSeq' in topSeq.getSequence():
+if 'AthSequencer/EvgenGenSeq' in topSequence.getSequence():
     fast_chain_log.info("Pileup emulation enabled - setup GenEventStackFiller")
     #include("FastChainPileup/FastPileupSimConfig.py")
 
@@ -973,15 +925,17 @@ if 'AthSequencer/EvgenGenSeq' in topSeq.getSequence():
     OutputPileupTruthCollection='TruthEvent_PU'
     # ToolSvc.ISF_StackFiller.OutputLevel=DEBUG
 
-    
+
     ###############Back to MyCustomSkeleton######################
 
 ## Add AMITag MetaData to TagInfoMgr
 if hasattr(runArgs, 'AMITag'):
     if runArgs.AMITag != "NONE":
-        from AthenaCommon.AppMgr import ServiceMgr as svcMgr
         svcMgr.TagInfoMgr.ExtraTagValuePairs += ["AMITag", runArgs.AMITag]
 
+from ISF_Example.ISF_Metadata import patch_mc_channel_numberMetadata
+patch_mc_channel_numberMetadata()
+
 ### Changing to post-sim include/exec
 ## Post-include
 if hasattr(runArgs, "postSimInclude"):
@@ -1013,75 +967,15 @@ if hasattr(runArgs, "postSimExec"):
 # Creation: David Cote (September 2009)                              #
 #                                                                    #
 ######################################################################
-from AthenaCommon.GlobalFlags import globalflags
-from AthenaCommon.BeamFlags import jobproperties
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 #from AthenaCommon.BFieldFlags import jobproperties ##Not sure if this is appropriate for G4 sim
 
-## Max/skip events
-if hasattr(runArgs,"skipEvents"):
-    athenaCommonFlags.SkipEvents.set_Value_and_Lock( runArgs.skipEvents )
-if hasattr(runArgs,"maxEvents"):
-    athenaCommonFlags.EvtMax.set_Value_and_Lock( runArgs.maxEvents )
-else:
-    athenaCommonFlags.EvtMax=-1
-
-if hasattr(runArgs,"conditionsTag"):
-    if runArgs.conditionsTag != 'NONE':
-        globalflags.ConditionsTag.set_Value_and_Lock( runArgs.conditionsTag ) #make this one compulsory?
-if hasattr(runArgs,"beamType"):
-    if runArgs.beamType != 'NONE':
-        # Setting beamType='cosmics' keeps cavern in world volume for g4sim also with non-commissioning geometries
-        jobproperties.Beam.beamType.set_Value_and_Lock( runArgs.beamType )
-## if hasattr(runArgs,"AMITag"): rec.AMITag=runArgs.AMITag
-## if hasattr(runArgs,"userExec"): rec.UserExecs=runArgs.userExec
-## if hasattr(runArgs,"RunNumber"): rec.RunNumber=runArgs.RunNumber
-## if hasattr(runArgs,"projectName"): rec.projectName=runArgs.projectName
-## if hasattr(runArgs,"trigStream"): rec.triggerStream=runArgs.trigStream
-## if hasattr(runArgs,"triggerConfig"):
-##     from TriggerJobOpts.TriggerFlags import TriggerFlags as tf
-##     tf.triggerConfig=runArgs.triggerConfig
-
-# Avoid command line preInclude for event service
-if hasattr(runArgs, "eventService") and runArgs.eventService:
-    include('AthenaMP/AthenaMP_EventService.py')
-
 ## autoConfiguration keywords triggering pre-defined functions
 ## if hasattr(runArgs,"autoConfiguration"):
 ##     for key in runArgs.autoConfiguration:
 ##         rec.AutoConfiguration.append(key)
 
-from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties
-pmon_properties.PerfMonFlags.doMonitoring=True
-pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True
-
-
 #################Back to MyCustomSkeleton##################################
 
-if hasattr(runArgs, "jobNumber"):
-    if runArgs.jobNumber < 1:
-        raise ValueError('jobNumber must be a postive integer. %s lies outside this range', str(runArgs.jobNumber))
-
-from AthenaCommon.GlobalFlags import globalflags
-if hasattr(runArgs,"geometryVersion"):
-    # strip _VALIDATION
-    print "stripping _VALIDATION"
-    if runArgs.geometryVersion.endswith("_VALIDATION"):
-        pos=runArgs.geometryVersion.find("_VALIDATION")
-        globalflags.DetDescrVersion.set_Value_and_Lock( runArgs.geometryVersion[:pos] )
-    else:
-        globalflags.DetDescrVersion.set_Value_and_Lock( runArgs.geometryVersion )
-
-### Do not invoke another logger
-# get the logger
-#from AthenaCommon.Logging import logging
-digilog = logging.getLogger('Digi_trf')
-fast_chain_log.info( '****************** STARTING DIGITIZATION *****************' )
-
-
-fast_chain_log.info( '**** Transformation run arguments' )
-fast_chain_log.info( str(runArgs) )
-
 #==============================================================
 # Job Configuration parameters:
 #==============================================================
@@ -1099,298 +993,242 @@ if hasattr(runArgs,"preDigiInclude"):
         include(fragment)
 
 #--------------------------------------------------------------
-# Override pile-up configuration on the command-line
+# Go for it
 #--------------------------------------------------------------
+print "lvl1: -14... " + str(DetFlags.digitize.LVL1_on())
 
-from Digitization.DigitizationFlags import digitizationFlags
 
-#--------------------------------------------------------------
-# Get the flags
-#--------------------------------------------------------------
-if hasattr(runArgs,"digiSeedOffset1"):
-    digitizationFlags.rndmSeedOffset1=int(runArgs.digiSeedOffset1)
-else:
-    fast_chain_log.warning( 'digiSeedOffset1 not set' )
-    digitizationFlags.rndmSeedOffset1=1
 
-if hasattr(runArgs,"digiSeedOffset2"):
-    digitizationFlags.rndmSeedOffset2=int(runArgs.digiSeedOffset2)
-else:
-    fast_chain_log.warning( 'digiSeedOffset2 not set' )
-    digitizationFlags.rndmSeedOffset2=2
+#include ("Digitization/Digitization.py")
 
-if hasattr(runArgs,"samplingFractionDbTag"): #FIXME change this to PhysicsList?
-    digitizationFlags.physicsList=runArgs.samplingFractionDbTag
+########## Digitization.py ##########################
 
-if hasattr(runArgs,"digiRndmSvc"):
-    digitizationFlags.rndmSvc=runArgs.digiRndmSvc
 
-if hasattr(runArgs,"conditionsTag"):
-    if(runArgs.conditionsTag!='NONE'):
-        digitizationFlags.IOVDbGlobalTag = runArgs.conditionsTag
 
-### Avoid meta data reading
-digitizationFlags.overrideMetadata=['ALL']
 
-if hasattr(runArgs,"digiSteeringConf"):
-    if not (digitizationFlags.digiSteeringConf.get_Value()==runArgs.digiSteeringConf+"PileUpToolsAlg"):
-        digilog.info( "Changing digitizationFlags.digiSteeringConf from %s to %s", digitizationFlags.digiSteeringConf.get_Value(),runArgs.digiSteeringConf)
-        digitizationFlags.digiSteeringConf=runArgs.digiSteeringConf+"PileUpToolsAlg"
-        PileUpConfigOverride=True
+###############################################################
+#
+# Job options file to run:
+#        Digitization
+#        LVL1 Simulation
+#        ByteStream conversion
+#
+# Author: Sven Vahsen and John Chapman
+#==============================================================
 
 #--------------------------------------------------------------
-# Pileup configuration - removed as pileup will be handled on-the-fly
+# Get Digitization Flags (This sets Global and Det Flags)
 #--------------------------------------------------------------
-from SimuJobTransforms.SimTransformUtils import makeBkgInputCol
-def HasInputFiles(runArgs, key):
-    if hasattr(runArgs, key):
-        cmd='runArgs.%s' % key
-        if eval(cmd):
-            return True
-    return False
 
-## Low Pt minbias set-up
-bkgArgName="LowPtMinbiasHitsFile"
-if hasattr(runArgs, "inputLowPtMinbiasHitsFile"):
-    bkgArgName="inputLowPtMinbiasHitsFile"
-if HasInputFiles(runArgs, bkgArgName):
-    exec("bkgArg = runArgs."+bkgArgName)
-    digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg,
-                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log)
-if digitizationFlags.LowPtMinBiasInputCols.statusOn:
-    digitizationFlags.doLowPtMinBias = True
-else:
-    digitizationFlags.doLowPtMinBias = False
+#-------------------------------------------
+# Print Job Configuration
+#-------------------------------------------
+DetFlags.Print()
+fast_chain_log.info("Global jobProperties values:")
+globalflags.print_JobProperties()
+fast_chain_log.info("Digitization jobProperties values:")
+digitizationFlags.print_JobProperties()
 
-## High Pt minbias set-up
-bkgArgName="HighPtMinbiasHitsFile"
-if hasattr(runArgs, "inputHighPtMinbiasHitsFile"):
-    bkgArgName="inputHighPtMinbiasHitsFile"
-if HasInputFiles(runArgs, bkgArgName):
-    exec("bkgArg = runArgs."+bkgArgName)
-    digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg,
-                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log)
-if digitizationFlags.HighPtMinBiasInputCols.statusOn:
-    digitizationFlags.doHighPtMinBias = True
-else:
-    digitizationFlags.doHighPtMinBias = False
+#--------------------------------------------------------------
+# Configure the job using jobproperties
+#--------------------------------------------------------------
 
-## Cavern Background set-up
-bkgArgName="cavernHitsFile"
-if hasattr(runArgs, "inputCavernHitsFile"):
-    bkgArgName="inputCavernHitsFile"
-if HasInputFiles(runArgs, bkgArgName):
-    exec("bkgArg = runArgs."+bkgArgName)
-    digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg,
-                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log)
-if digitizationFlags.cavernInputCols.statusOn:
-    digitizationFlags.doCavern = True
-else:
-    digitizationFlags.doCavern = False
+#include("Digitization/ConfigDigitization.py")
 
-## Beam Halo set-up
-bkgArgName="beamHaloHitsFile"
-if hasattr(runArgs, "inputBeamHaloHitsFile"):
-    bkgArgName="inputBeamHaloHitsFile"
-if HasInputFiles(runArgs, bkgArgName):
-    exec("bkgArg = runArgs."+bkgArgName)
-    digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg,
-                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log)
-if digitizationFlags.beamHaloInputCols.statusOn:
-    digitizationFlags.doBeamHalo = True
-else:
-    digitizationFlags.doBeamHalo = False
+####### Digitization/ConfigDigitization.py
 
-## Beam Gas set-up
-bkgArgName="beamGasHitsFile"
-if hasattr(runArgs, "inputBeamGasHitsFile"):
-    bkgArgName="inputBeamGasHitsFile"
-if HasInputFiles(runArgs, bkgArgName):
-    exec("bkgArg = runArgs."+bkgArgName)
-    digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg,
-                                                         digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log)
-if digitizationFlags.beamGasInputCols.statusOn:
-    digitizationFlags.doBeamGas = True
-else:
-    digitizationFlags.doBeamGas = False
+#Pool input
+if not hasattr(ServiceMgr, 'EventSelector'):
+    import AthenaPoolCnvSvc.ReadAthenaPool
+if hasattr(ServiceMgr, 'PoolSvc'):
+    ServiceMgr.PoolSvc.MaxFilesOpen = 0 # Never close Input Files
+#Settings the following attributes reduces the job size slightly
+#ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [  "TREE_BRANCH_OFFSETTAB_LEN ='100'" ]
+#ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DEFAULT_BUFFERSIZE = '2048'" ]
 
+#--------------------------------------------------------------
+# GeoModel
+#--------------------------------------------------------------
+from AtlasGeoModel import SetGeometryVersion
+from AtlasGeoModel import GeoModelInit
+from AtlasGeoModel import SetupRecoGeometry
 
 #--------------------------------------------------------------
-# Other configuration: LVL1, turn off sub detectors, calo noise
+# Magnetic field service
 #--------------------------------------------------------------
+import MagFieldServices.SetupField
 
-if hasattr(runArgs,"doAllNoise"):
-    if runArgs.doAllNoise!="NONE":
-        fast_chain_log.info('doAllNoise = %s: Overriding doInDetNoise, doCaloNoise and doMuonNoise', runArgs.doAllNoise)
-        if runArgs.doAllNoise=="True":
-            digitizationFlags.doInDetNoise=True
-            digitizationFlags.doCaloNoise=True
-            digitizationFlags.doMuonNoise=True
-        else:
-            digitizationFlags.doInDetNoise=False
-            digitizationFlags.doCaloNoise=False
-            digitizationFlags.doMuonNoise=False
+#--------------------------------------------------------------
+# Configure Run and Lumi Block and Pile-Up Lumi overriding
+# (if required)
+#--------------------------------------------------------------
+if digitizationFlags.RunAndLumiOverrideList.statusOn:
+    if not(DetFlags.pileup.any_on()):
+        AthError( "This job will try to override pile-up luminosity configuration, but no pile-up will be set up!" )
+    include("Digitization/LumiBlockOverrides.py")
+    if digitizationFlags.dataRunNumber.statusOn:
+        fast_chain_log.warning('digitizationFlags.RunAndLumiOverrideList has been set! digitizationFlags.dataRunNumber (set to %s) will be ignored. ', digitizationFlags.dataRunNumber.get_Value() )
+else:
+    include("Digitization/RunNumberOverride.py")
 
+#-----------------------------------------------------------
+# Check Beam and Digitization jobproperties are synchronised
+#-----------------------------------------------------------
+from Digitization.DigiConfigCheckers import syncBeamAndDigitizationJobProperties
+syncBeamAndDigitizationJobProperties()
 
+digitizationFlags.lockMostFlags()
+#--------------------------------------------------------------
+# More Pileup configuration
+#--------------------------------------------------------------
+if DetFlags.pileup.any_on() or digitizationFlags.doXingByXingPileUp():
+    # protection for SteppingCache usage - currently incompatible with PileUpTools
+    if digitizationFlags.SignalPatternForSteppingCache.statusOn and digitizationFlags.doXingByXingPileUp():
+        raise RuntimeError("SteppingCache is incompatible with PileUpTools. Please switch off either digitizationFlags.SignalPatternForSteppingCache or digitizationFlags.doXingByXingPileUp.")
+    include( "Digitization/ConfigPileUpEventLoopMgr.py" )
+if DetFlags.pileup.any_on():
+    fast_chain_log.info("PILEUP CONFIGURATION:")
+    fast_chain_log.info(" -----> Luminosity = %s cm^-2 s^-1", jobproperties.Beam.estimatedLuminosity())
+    fast_chain_log.info(" -----> Bunch Spacing = %s ns", digitizationFlags.bunchSpacing.get_Value())
 
-### No RDO output
-## Output RDO File
-if hasattr(runArgs,"outputRDOFile") or hasattr(runArgs,"tmpRDO"):
-    if hasattr(runArgs,"outputRDOFile"):
-        if hasattr(runArgs,"tmpRDO"):
-            fast_chain_log.fatal("Both outputRDOFile and tmpRDO specified - this configuration should not be used!")
-            raise SystemError
-        athenaCommonFlags.PoolRDOOutput.set_Value_and_Lock( runArgs.outputRDOFile )
-    if hasattr(runArgs,"tmpRDO"):
-        athenaCommonFlags.PoolRDOOutput.set_Value_and_Lock( runArgs.tmpRDO )
-    if hasattr(runArgs, "AddCaloDigi"):
-        AddCaloDigi = runArgs.AddCaloDigi
-        if AddCaloDigi:
-            fast_chain_log.info("Will write out all LArDigitContainers and TileDigitsContainers to RDO file.")
-            digitizationFlags.experimentalDigi+=["AddCaloDigi"]
-else:
-    fast_chain_log.info("no output file (outputRDOFile or tmpRDO) specified - switching off output StreamRDO")
+# in any case we need the PileUpMergeSvc for the digitize algos
+if not hasattr(ServiceMgr, 'PileUpMergeSvc'):
+    ServiceMgr += CfgGetter.getService("PileUpMergeSvc")
 
 
 #--------------------------------------------------------------
-# Go for it
+# Subdetector-specific configuration
 #--------------------------------------------------------------
-if hasattr(runArgs,"DataRunNumber"):
-    if runArgs.DataRunNumber>0:
-        fast_chain_log.info( 'Overriding run number to be: %s ', runArgs.DataRunNumber )
-        digitizationFlags.dataRunNumber=runArgs.DataRunNumber
+#include( "Digitization/DetectorDigitization.py" )
+#########Digitization/DetectorDigitization.py
 
-print "lvl1: -14... " + str(DetFlags.digitize.LVL1_on())
+##############################################################
+#
+# Job options file to configure:
+#        Digitization
+#        LVL1 Simulation
+#        ByteStream conversion
+#
+# Author: Davide Costanzo
+# Contacts:
+#      Inner Detector:   Davide Costanzo
+#      LArCalorimeter:   Guillaume Unal
+#      TileCalorimter:   Sasha Solodkov
+#      MuonSpectrometer: Daniela Rebuzzi, Ketevi Assamagam
+#      LVL1 Simulation:  Tadashi Maeno
+#      ByteStream:       Hong Ma
+#
+#==============================================================
+#
 
-### Set digitize all except forward detectors
-DetFlags.digitize.all_setOn()
-DetFlags.digitize.LVL1_setOff()
-DetFlags.digitize.ZDC_setOff()
-DetFlags.digitize.Micromegas_setOff()
-DetFlags.digitize.sTGC_setOff()
-DetFlags.digitize.Forward_setOff()
-DetFlags.digitize.Lucid_setOff()
-DetFlags.digitize.AFP_setOff()
-DetFlags.digitize.ALFA_setOff()
+try:
+    from RecAlgs.RecAlgsConf import TimingAlg
+    topSequence+=TimingAlg("DigiTimerBegin", TimingObjOutputName = "HITStoRDO_timings")
+except:
+    fast_chain_log.warning('Could not add TimingAlg, no timing info will be written out.')
 
 
+# Set up PileupMergeSvc used by subdetectors
+#from AthenaCommon.DetFlags import DetFlags
 
+# Set up ComTimeRec for cosmics digitization
+if jobproperties.Beam.beamType == "cosmics" :
+    from CommissionRec.CommissionRecConf import ComTimeRec
+    comTimeRec = ComTimeRec("ComTimeRec")
+    topSequence += comTimeRec
 
+topSequence += CfgGetter.getAlgorithm(digitizationFlags.digiSteeringConf.get_Value(), tryDefaultConfigurable=True)
+if 'doFastPixelDigi' in digitizationFlags.experimentalDigi() or 'doFastSCT_Digi' in digitizationFlags.experimentalDigi() or 'doFastTRT_Digi' in digitizationFlags.experimentalDigi():
+    print "WARNING  Setting doFastPixelDigi ,doFastSCT_Digi or doFastTRT_Digi in digitizationFlags.experimentalDigi no longer overrides digitizationFlags.digiSteeringConf."
+elif 'doSplitDigi' in digitizationFlags.experimentalDigi():
+    print "WARNING  Setting doSplitDigi in digitizationFlags.experimentalDigi no longer overrides digitizationFlags.digiSteeringConf. Use --digiSteeringConf 'Split' on the command-line instead."
 
-from AthenaCommon.AlgSequence import AlgSequence
-topSeq = AlgSequence()
 
-## Set Overall per-Algorithm time-limit on the AlgSequence
-topSeq.TimeOut = 43200 * Units.s
+# MC Truth info
+#if DetFlags.Truth_on():
+#    include( "Digitization/TruthDigitization.py" )
 
-try:
-    from RecAlgs.RecAlgsConf import TimingAlg
-    topSeq+=TimingAlg("DigiTimerBegin", TimingObjOutputName = "HITStoRDO_timings")
-except:
-    fast_chain_log.warning('Could not add TimingAlg, no timing info will be written out.')
+# Forward Detectors
+#if DetFlags.Forward_on():
+#    include( "Digitization/FwdDetDigitization.py" )
 
-#include ("Digitization/Digitization.py")
+# Inner Detector
+if DetFlags.ID_on():
+    include( "Digitization/InDetDigitization.py" )
 
-########## Digitization.py ##########################
+# Calorimeters
+if DetFlags.Calo_on():
+    include( "Digitization/CaloDigitization.py" )
 
+# Muon Digitization
+if DetFlags.Muon_on():
+    include( "Digitization/MuonDigitization.py" )
 
+# LVL1 trigger simulation
+#if DetFlags.digitize.LVL1_on():
+include( "Digitization/LVL1Digitization.py" )
 
 
-###############################################################
-#
-# Job options file to run:
-#        Digitization
-#        LVL1 Simulation
-#        ByteStream conversion
-#
-# Author: Sven Vahsen and John Chapman
-#==============================================================
-from AthenaCommon.Logging import logging
-logDigitization_flags = logging.getLogger( 'Digitization' )
 
-#--------------------------------------------------------------
-# Get Digitization Flags (This sets Global and Det Flags)
-#--------------------------------------------------------------
-from Digitization.DigitizationFlags import digitizationFlags
-from AthenaCommon.BeamFlags import jobproperties
 
-#--------------------------------------------------------------
-# Set Global flags for this run
-#--------------------------------------------------------------
-from AthenaCommon.GlobalFlags import globalflags
-if jobproperties.Beam.beamType == "cosmics" :
-    globalflags.DetGeo = 'commis'
-#else:
-#    globalflags.DetGeo = 'atlas'
-# These should be set anyway, but just to make sure
-globalflags.DataSource = 'geant4'
-globalflags.InputFormat = 'pool'
+
+########## back to Digitization/ConfigDigitization.py
 
 #--------------------------------------------------------------
-# Set Detector flags for this run
+# Random Number Engine and Seeds
 #--------------------------------------------------------------
-if 'DetFlags' in dir():
-    logDigitization_flags.warning("DetFlags already defined! This means DetFlags should have been fully configured already..")
-    DetFlags.Print()
-else :
-    # include DetFlags
-    # by default everything is off
-    from AthenaCommon.DetFlags import DetFlags
-    DetFlags.ID_setOn()
-    DetFlags.Lucid_setOn()
-    #DetFlags.ZDC_setOn()
-    #DetFlags.ALFA_setOn()
-    #DetFlags.AFP_setOn()
-    #DetFlags.FwdRegion_setOn()
-    DetFlags.Calo_setOn()
-    if hasattr(DetFlags, 'HGTD_setOff'):
-        DetFlags.HGTD_setOff()
-    DetFlags.Muon_setOn()
-    DetFlags.Truth_setOn()
-    DetFlags.LVL1_setOn()
-
-checkOverlay = getattr(DetFlags, 'overlay', None)
-if checkOverlay is not None:
-    DetFlags.overlay.all_setOff()
-else:
-    logDigitization_flags.warning( 'DetFlags.overlay is not supported in this release' )
-DetFlags.simulate.all_setOff()
-DetFlags.makeRIO.all_setOff()
-DetFlags.writeBS.all_setOff()
-DetFlags.readRDOBS.all_setOff()
-DetFlags.readRIOBS.all_setOff()
-DetFlags.readRIOPool.all_setOff()
-DetFlags.writeRIOPool.all_setOff()
+if not athenaCommonFlags.PoolEvgenInput.statusOn:
+    if not simFlags.RandomSeedList.checkForExistingSeed('SINGLE'):
+        simFlags.RandomSeedList.addSeed( "SINGLE", 43657613, 78935670 )
+if not simFlags.RandomSeedList.checkForExistingSeed('VERTEX'):
+  simFlags.RandomSeedList.addSeed( 'VERTEX', 9123448, 829143 )
+simFlags.RandomSeedList.addtoService()
+simFlags.RandomSeedList.printSeeds()
 
-#-------------------------------------------
-# Print Job Configuration
-#-------------------------------------------
-DetFlags.Print()
-logDigitization_flags.info("Global jobProperties values:")
-globalflags.print_JobProperties()
-logDigitization_flags.info("Digitization jobProperties values:")
-digitizationFlags.print_JobProperties()
+# attach digi and pileup seeds to random number service configurable and print them out
+from AthenaCommon.ConfigurableDb import getConfigurable
+ServiceMgr += getConfigurable(digitizationFlags.rndmSvc.get_Value())()
+digitizationFlags.rndmSeedList.addtoService()
+digitizationFlags.rndmSeedList.printSeeds()
+rndmSvc = getConfigurable(digitizationFlags.rndmSvc.get_Value())()
+rndmSvc.OutputLevel = WARNING
+if digitizationFlags.readSeedsFromFile.get_Value():
+    rndmSvc.Seeds=[]
+    rndmSvc.ReadFromFile=True
+    rndmSvc.FileToRead=digitizationFlags.rndmSeedInputFile.get_Value()
+    fast_chain_log.info("Random seeds for Digitization will be read from the file %s",digitizationFlags.rndmSeedInputFile.get_Value())
+
+# write out a summary of the time spent
+from AthenaCommon.AppMgr import theAuditorSvc
+from GaudiAud.GaudiAudConf import ChronoAuditor, MemStatAuditor
+if not 'ChronoAuditor/ChronoAuditor' in theAuditorSvc.Auditors:
+    theAuditorSvc += ChronoAuditor()
+if not 'MemStatAuditor/MemStatAuditor' in theAuditorSvc.Auditors:
+    theAuditorSvc += MemStatAuditor()
+# --- load AuditorSvc
+# --- write out a short message upon entering or leaving each algorithm
+#from AthenaCommon.ConfigurableDb import getConfigurable
+# ServiceMgr.AuditorSvc += getConfigurable("NameAuditor")()
+#
+theApp.AuditAlgorithms = True
+theApp.AuditServices   = True
+#
+# --- Display detailed size and timing statistics for writing and reading
+ServiceMgr.AthenaPoolCnvSvc.UseDetailChronoStat = True
 
-#--------------------------------------------------------------
-# Ensure AthenaCommonFlags.FilesInput is set.
-#--------------------------------------------------------------
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-athenaCommonFlags.FilesInput=athenaCommonFlags.PoolHitsInput.get_Value()
+# LSFTimeLimi. Temporary disable
+# include( "LSFTimeKeeper/LSFTimeKeeperOptions.py" )
 
-#--------------------------------------------------------------
-# Read Simulation MetaData (unless override flag set to True)
-#--------------------------------------------------------------
-if 'ALL' in digitizationFlags.overrideMetadata.get_Value():
-    logDigitization_flags.info("Skipping input file MetaData check.")
-else :
-    from Digitization.DigitizationReadMetaData import readHITSFileMetadata
-    readHITSFileMetadata()
+# LSFTimeKeeperSvc = Service( "LSFTimeKeeperSvc" )
+# LSFTimeKeeperSvc.OutputLevel=2; # remaining CPU at each event
 
-#--------------------------------------------------------------
-# Configure the job using jobproperties
-#--------------------------------------------------------------
-include("Digitization/ConfigDigitization.py")
-logDigitization_flags.info("Digitization Configured Successfully.")
+#### BACK TO Digitization.py ###########
+
+#
+
+#include("Digitization/ConfigDigitization.py")
+
+fast_chain_log.info("Digitization Configured Successfully.")
 
 #--------------------------------------------------------------
 # jobproperties should not be changed after this point
@@ -1402,27 +1240,27 @@ if digitizationFlags.simRunNumber.statusOn or not digitizationFlags.dataRunNumbe
 #--------------------------------------------------------------
 # Write Digitization MetaData
 #--------------------------------------------------------------
-from Digitization.DigitizationWriteMetaData import writeDigitizationMetadata
+#--------------------------------------------------------------
+# Setup the ISF Output
+#--------------------------------------------------------------
+from ISF_Example.ISF_Output import ISF_HITSStream
+from FullChainTransforms.FastChainWriteMetadata import createSimulationParametersMetadata, writeDigitizationMetadata
+createSimulationParametersMetadata()
 writeDigitizationMetadata()
 
 #--------------------------------------------------------------
 # Pool Output (Change this to use a different file)
 #--------------------------------------------------------------
 if DetFlags.writeRDOPool.any_on():
-    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
     from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
     streamRDO = AthenaPoolOutputStream("StreamRDO", athenaCommonFlags.PoolRDOOutput.get_Value(), asAlg=True)
     streamRDO.ForceRead = True
     from Digitization.DigiOutput import getStreamRDO_ItemList
-    streamRDO.ItemList = getStreamRDO_ItemList(logDigitization_flags)
+    streamRDO.ItemList = getStreamRDO_ItemList(fast_chain_log)
     streamRDO.AcceptAlgs += [ digitizationFlags.digiSteeringConf.get_Value() ]
     streamRDO.OutputFile = athenaCommonFlags.PoolRDOOutput()
-    if athenaCommonFlags.UseLZMA():
-        ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_ALGORITHM = '2'" ]
-        ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_LEVEL = '1'" ]
-    else:
-        ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_ALGORITHM = '1'" ]
-        ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_LEVEL = '4'" ]
+    ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_ALGORITHM = '2'" ]
+    ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; COMPRESSION_LEVEL = '1'" ]
     ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; ContainerName = 'TTree=CollectionTree'; TREE_AUTO_FLUSH = '1'" ]
     # Switch on splitting for the 4 largest container (default off)
     ServiceMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + athenaCommonFlags.PoolRDOOutput() + "'; ContainerName = 'TTree=CollectionTree(InDetSimDataCollection_p1/PixelSDO_Map)'; CONTAINER_SPLITLEVEL = '99'" ]
@@ -1443,26 +1281,8 @@ theApp.EvtMax = athenaCommonFlags.EvtMax()
 ServiceMgr.EventSelector.SkipEvents = athenaCommonFlags.SkipEvents()
 
 
-
-
 ######## Back to MyCustomSkeleton#####################
 
-
-
-
-
-
-from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-if hasattr(runArgs,"AMITag"):
-    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-    svcMgr.TagInfoMgr.ExtraTagValuePairs += ["AMITag", runArgs.AMITag ]
-
-### No RDO output to increase file size of
-# Increase max RDO output file size to 10 GB
-
-#from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-#svcMgr.AthenaPoolCnvSvc.MaxFileSizes = [ "10000000000" ] #[ "15000000000" ] #Athena complains that 15GB files are not supported
-
 ## Post-include
 if hasattr(runArgs,"postInclude"):
     for fragment in runArgs.postInclude:
@@ -1476,6 +1296,6 @@ if hasattr(runArgs,"postExec"):
         exec(cmd)
 
 ### End of Digi
- 
+
 #from AthenaCommon.ConfigurationShelve import saveToAscii
 #saveToAscii('config.txt')
-- 
GitLab


From dc89146c5659026e78dcb995c49171ea75802c6a Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Thu, 25 Oct 2018 15:40:46 +0200
Subject: [PATCH 104/163] Initial changes to fix metadata writing in
 FastChainSkeleton.EVGENtoRDO.py

Add `FastChainWriteMetadata` module to `FullChainTransforms` package and make
accompanying fixes to `FastChainSkeleton.EVGENtoRDO.py`.

Former-commit-id: a2a0df2bbc9c920c6ee594e9b65842a5d6ea3996
---
 Tools/FullChainTransforms/CMakeLists.txt      |   1 +
 .../python/FastChainConfigCheckers.py         |  28 +++
 .../python/FastChainWriteMetadata.py          | 238 ++++++++++++++++++
 Tools/FullChainTransforms/python/__init__.py  |   2 +
 4 files changed, 269 insertions(+)
 create mode 100644 Tools/FullChainTransforms/python/FastChainConfigCheckers.py
 create mode 100644 Tools/FullChainTransforms/python/FastChainWriteMetadata.py
 create mode 100644 Tools/FullChainTransforms/python/__init__.py

diff --git a/Tools/FullChainTransforms/CMakeLists.txt b/Tools/FullChainTransforms/CMakeLists.txt
index 162b7d68a638..0260efdfd6c8 100644
--- a/Tools/FullChainTransforms/CMakeLists.txt
+++ b/Tools/FullChainTransforms/CMakeLists.txt
@@ -16,6 +16,7 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( PythonLibs )
 
 # Install files from the package:
+atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
 atlas_install_runtime( scripts/*.py )
 
diff --git a/Tools/FullChainTransforms/python/FastChainConfigCheckers.py b/Tools/FullChainTransforms/python/FastChainConfigCheckers.py
new file mode 100644
index 000000000000..3461c2ed64a7
--- /dev/null
+++ b/Tools/FullChainTransforms/python/FastChainConfigCheckers.py
@@ -0,0 +1,28 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+
+def syncDigitizationAndSimulationJobProperties():
+    from AthenaCommon.Logging import logging
+    logDigiConfigChecker = logging.getLogger( 'FastChainConfigChecker' )
+
+    from G4AtlasApps.SimFlags import simFlags
+    from Digitization.DigitizationFlags import digitizationFlags
+    logDigiConfigChecker.info("Digitization jobProperties values:")
+    digitizationFlags.print_JobProperties()
+
+    if digitizationFlags.TRTRangeCut.get_Value() != simFlags.TRTRangeCut.get_Value() :
+        logDigiConfigChecker.info("Setting digitizationFlags.TRTRangeCut equal to simFlags.TRTRangeCut.")
+        digitizationFlags.TRTRangeCut = simFlags.TRTRangeCut.get_Value()
+
+    import os
+    G4Version = str(os.environ['G4VERS'])
+    if digitizationFlags.SimG4VersionUsed.get_Value() != G4Version :
+        logDigiConfigChecker.info("Setting digitizationFlags.SimG4VersionUsed equal to G4VERS from environment. ")
+        digitizationFlags.SimG4VersionUsed = G4Version
+
+    if digitizationFlags.physicsList.get_Value() != simFlags.PhysicsList.get_Value() :
+        logDigiConfigChecker.info("Setting digitizationFlags.physicsList equal to simFlags.PhysicsList.")
+        digitizationFlags.physicsList = simFlags.PhysicsList.get_Value()
+
+    return
+
diff --git a/Tools/FullChainTransforms/python/FastChainWriteMetadata.py b/Tools/FullChainTransforms/python/FastChainWriteMetadata.py
new file mode 100644
index 000000000000..9e71a8d21a46
--- /dev/null
+++ b/Tools/FullChainTransforms/python/FastChainWriteMetadata.py
@@ -0,0 +1,238 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon.Logging import logging
+logFastChainWriteMetadata = logging.getLogger( 'FastChainWriteMetadata' )
+#-------------------------------------------------
+# Setup MetaData Stream
+#-------------------------------------------------
+#if not hasattr(ServiceMgr, 'MetaDataStore'):
+### In future should probably do a check here
+
+#from AthenaServices.AthenaServicesConf import AthenaOutputStream
+#StreamRDO_FH =  AthenaOutputStream( "StreamRDO_FH" )
+#StreamRDO_FH.ItemList += [ "IOVMetaDataContainer#*" ]
+
+
+myRunNumber = 0
+myEndRunNumber = 2147483647 # the max run number (32 bit integer)
+
+def ModifyingEventIdBySvc():
+    from Digitization.DigitizationFlags import digitizationFlags
+    if digitizationFlags.RunAndLumiOverrideList.statusOn or digitizationFlags.dataRunNumber.statusOn:
+        from AthenaCommon.AppMgr import ServiceMgr
+        if hasattr(ServiceMgr, 'EvtIdModifierSvc'):
+            if hasattr(ServiceMgr.ToolSvc, 'IOVDbMetaDataTool'):
+                return True
+            else:
+                logFastChainWriteMetadata.error('Found the EvtIdModifierSvc, but not the IOVDbMetaDataTool. \
+                It will not be possible to set the min and max run number of the job.')
+                raise SystemExit("Found the EvtIdModifierSvc, but not the IOVDbMetaDataTool.")
+        else:
+            raise SystemExit("jobProperties.Digitization.RunAndLumiOverrideList is set, but no EvtIdModifierSvc found!")
+    else :
+        logFastChainWriteMetadata.debug('digitizationFlags.RunAndLumiOverrideList not set, \
+        so not overriding min/max run numbers.')
+    return False
+
+def getRunNumberRangeForOutputMetadata():
+    myRunNumber = 0
+    myEndRunNumber = 2147483647 # the max run number
+    from Digitization.DigitizationFlags import digitizationFlags
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    if not digitizationFlags.simRunNumber.statusOn and not athenaCommonFlags.DoFullChain:
+        #---------------------------------------------------
+        # Always Check for RunNumber in the first Input file
+        #---------------------------------------------------
+        from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+        myRunNumber = digitizationFlags.getHitFileRunNumber(athenaCommonFlags.PoolHitsInput.get_Value()[0])
+
+    if ModifyingEventIdBySvc():
+        logFastChainWriteMetadata.info('Setting the  Digitization MetaData IOV from the IOVDbMetaDataTool')
+        from AthenaCommon.AppMgr import ServiceMgr
+        myRunNumber=ServiceMgr.ToolSvc.IOVDbMetaDataTool.MinMaxRunNumbers[0]
+        myEndRunNumber=ServiceMgr.ToolSvc.IOVDbMetaDataTool.MinMaxRunNumbers[1]
+    else :
+        if myRunNumber > 0 :
+            logFastChainWriteMetadata.info('Found Run Number %s in hits file metadata.', str(myRunNumber) )
+            myEndRunNumber = myRunNumber+1 # got a reasonable run number so set end run to be the next run after this one.
+        else :
+            logFastChainWriteMetadata.info('Found unexpected Run Number %s in hits file metadata. Not overriding RunNumber to match hits file for this job.', str(myRunNumber) )
+            myRunNumber = 0
+    return myRunNumber, myEndRunNumber
+
+def writeDigitizationMetadata():
+    from IOVDbMetaDataTools import ParameterDbFiller
+    dbFiller = ParameterDbFiller.ParameterDbFiller()
+    myRunNumber, myEndRunNumber = getRunNumberRangeForOutputMetadata()
+    logFastChainWriteMetadata.debug('ParameterDbFiller BeginRun = %s', str(myRunNumber) )
+    dbFiller.setBeginRun(myRunNumber)
+    logFastChainWriteMetadata.debug('ParameterDbFiller EndRun   = %s', str(myEndRunNumber) )
+    dbFiller.setEndRun(myEndRunNumber)
+    #-------------------------------------------------
+    # Adding jobproperties to the list of MetaData
+    #-------------------------------------------------
+    # Here list the digitization jobproperties we want to write out as MetaData.
+    digitMetaDataKeys = ["doInDetNoise", "doCaloNoise", "doMuonNoise", "bunchSpacing",
+                         "initialBunchCrossing", "finalBunchCrossing", "FixedT0BunchCrossing",
+                         "doLowPtMinimumBias", "doHighPtMinimumBias",
+                         "doCavern", "doBeamGas", "doBeamHalo",
+                         "rndmSvc", "physicsList", "overrideMetadata","pileupDSID","digiSteeringConf"]
+                         #"readSeedsFromFile", "rndmSeedInputFile",
+    from Digitization.DigitizationFlags import digitizationFlags
+    if (not ModifyingEventIdBySvc()):
+        # in run-dependent-conditions digitization jobs these values may vary between jobs with the same IOV
+        digitMetaDataKeys += ["numberOfCollisions", "numberOfLowPtMinBias", "numberOfHighPtMinBias",
+                              "numberOfCavern", "numberOfBeamGas", "numberOfBeamHalo",
+                              "rndmSeedOffset1", "rndmSeedOffset2", "rndmSeedList"]
+    digitPropertiesDict = digitizationFlags.__dict__
+    digitPropertiesDictKeys = digitPropertiesDict.keys()
+    logFastChainWriteMetadata.info('Filling Digitization MetaData')
+    from Digitization.DigitizationFlags import digitizationFlags
+    for o in [ o for o in digitMetaDataKeys if o in digitPropertiesDictKeys ]:
+        testProperty = digitPropertiesDict.get(o)
+        if testProperty.statusOn or 'bool' in testProperty.allowedTypes :
+            testValue = testProperty.get_Value()
+            if not isinstance(testValue, str):
+                testValue = str(testProperty.get_Value())
+            dbFiller.addDigitParam(o, testValue)
+            logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', o, testValue)
+        else :
+            logFastChainWriteMetadata.debug('DigitizationMetaData: Not using jobproperty "%s" as it is switched off.', o)
+    del digitMetaDataKeys
+
+    # Bunch Structure
+    testKey = "BeamIntensityPattern"
+    if digitizationFlags.BeamIntensityPattern.statusOn:
+        testValue = str(digitizationFlags.BeamIntensityPattern.get_Value())
+    else:
+        testValue = "None"
+    logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', testKey, testValue)
+    dbFiller.addDigitParam64(testKey, testValue)
+
+    # BeamFlags
+    testKey = "beamType"
+    from AthenaCommon.BeamFlags import jobproperties
+    testValue = jobproperties.Beam.beamType.get_Value()
+    logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', testKey, testValue)
+    dbFiller.addDigitParam(testKey, testValue)
+    # Use Beam.bunchSpacing to specify the most representative spacing (intra-train) between filled bunch-crossings.
+    testKey = "intraTrainBunchSpacing"
+    testValue = str(jobproperties.Beam.bunchSpacing.get_Value())
+    logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', testKey, testValue)
+    dbFiller.addDigitParam(testKey, testValue)
+
+    # IOVDbGlobalTag is a special case here:
+    testKey = "IOVDbGlobalTag"
+    testValue = "default"
+    if digitizationFlags.IOVDbGlobalTag.statusOn :
+        testValue = digitizationFlags.IOVDbGlobalTag.get_Value()
+        if testValue == "" :
+            testValue = "default"
+    logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', testKey, testValue)
+    dbFiller.addDigitParam(testKey, testValue)
+
+    ##these collections can get too large to write out in full, so instead we count the number of files.
+    colsMetaDataKeys = ["LowPtMinBiasInputCols", "HighPtMinBiasInputCols",
+                        "cavernInputCols", "beamGasInputCols", "beamHaloInputCols"]
+    for o in [ o for o in colsMetaDataKeys if o in digitPropertiesDictKeys ]:
+        testKey = 'N_' + o.replace('Cols','Files')
+        testValue = '0'
+        if digitPropertiesDict.get(o).statusOn :
+            testList = digitPropertiesDict.get(o).get_Value()
+            if isinstance(testList, list):
+                testValue = str(len(testList))
+            else :
+                logFastChainWriteMetadata.warning('DigitizationMetaData: Key %s did not return a list. Ignoring.', o)
+        logFastChainWriteMetadata.info('DigitizationMetaData: setting %s to be %s', testKey, testValue)
+        dbFiller.addDigitParam(testKey, testValue)
+    del colsMetaDataKeys
+
+    ##this is also too long to write out in full. Just set flag if run-dependent MC is on.
+    testKey = 'RunAndLumiAreOverriden'
+    testValue = 'False'
+    if digitPropertiesDict.get('RunAndLumiOverrideList').statusOn :
+        testValue = 'True'
+        logFastChainWriteMetadata.info('DigitizationMetaData: setting %s to be %s', testKey, testValue)
+    dbFiller.addDigitParam(testKey, testValue)
+
+    ##In case the value used for Digitization differs from that used for simulation.
+    globalMetaDataKeys = ["DetDescrVersion"]
+    from AthenaCommon.GlobalFlags import globalflags
+    globalPropertiesDict = globalflags.__dict__
+    for o in [ o for o in globalMetaDataKeys if o in globalPropertiesDict.keys() ]:
+        testProperty = globalPropertiesDict.get(o)
+        if testProperty.statusOn or 'bool' in testProperty.allowedTypes :
+            testValue = testProperty.get_Value()
+            if not isinstance(testValue, str):
+                testValue = str(testProperty.get_Value())
+            dbFiller.addDigitParam(o, testValue)
+            logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', o, testValue)
+        else :
+            logFastChainWriteMetadata.debug('DigitizationMetaData: Not using jobproperty "%s" as it is switched off.', o)
+    del globalMetaDataKeys
+
+    ##LVL1 Config Version
+    testKey = "lvl1TriggerMenu"
+    testValue = "NONE"
+    from AthenaCommon.DetFlags import DetFlags
+    if DetFlags.digitize.LVL1_on():
+        #Protection so that TriggerFlags are not accessed when they have not be configured
+        from TriggerJobOpts.TriggerFlags import TriggerFlags
+        testValue = TriggerFlags.triggerConfig.get_Value()
+    dbFiller.addDigitParam(testKey,testValue)
+    logFastChainWriteMetadata.info('DigitizationMetaData: setting "%s" to be %s', testKey, testValue)
+    del testKey
+    del testValue
+
+    ## Digitized detector flags: add each enabled detector to the DigitizedDetectors list
+    digiDets = []
+    for det in ['pixel','SCT','TRT','BCM','Lucid','ZDC','ALFA','AFP','FwdRegion','LAr','HGTD','Tile','MDT','CSC','TGC','RPC','Micromegas','sTGC','Truth','LVL1']:
+        attrname = det+"_on"
+        checkfn = getattr(DetFlags.digitize, attrname, None)
+        if checkfn is None:
+            logFastChainWriteMetadata.info("No attribute '%s' found on DetFlags.digitize" % attrname)
+            continue
+        if checkfn():
+            digiDets.append(det)
+    logFastChainWriteMetadata.info("Setting 'DigitizedDetectors' = %s" % repr(digiDets))
+    dbFiller.addDigitParam('DigitizedDetectors', repr(digiDets))
+
+    #-------------------------------------------------
+    # Make the MetaData Db
+    #-------------------------------------------------
+    dbFiller.genDigitDb()
+
+    folder = "/Digitization/Parameters"
+    dbConnection = "sqlite://;schema=DigitParams.db;dbname=DIGPARAM"
+    from AthenaCommon.AppMgr import ServiceMgr
+    ServiceMgr.IOVDbSvc.Folders += [ folder + "<dbConnection>" + dbConnection + "</dbConnection>" ]
+    ServiceMgr.IOVDbSvc.FoldersToMetaData += [ folder ]
+    ServiceMgr.IOVSvc.partialPreLoadData = True
+
+    #raise SystemExit("Testing")
+
+
+def createSimulationParametersMetadata():
+    from IOVDbMetaDataTools import ParameterDbFiller
+    dbFiller = ParameterDbFiller.ParameterDbFiller()
+    myRunNumber, myEndRunNumber = getRunNumberRangeForOutputMetadata()
+    logFastChainWriteMetadata.info("Using the following run number range for MetaData IOV: ("+str(myRunNumber)+","+str(myEndRunNumber)+").")
+    dbFiller.setBeginRun(myRunNumber)
+    dbFiller.setEndRun(myEndRunNumber)
+
+    from ISF_Example.ISF_Metadata import fillAtlasMetadata, fillISFMetadata
+    fillAtlasMetadata(dbFiller)
+    from G4AtlasApps.SimFlags import simFlags
+    if simFlags.ISFRun:
+        fillISFMetadata(dbFiller)
+
+    ## Write the db info
+    dbFiller.genSimDb()
+    folder = "/Simulation/Parameters"
+    dbConnection = "sqlite://;schema=SimParams.db;dbname=SIMPARAM"
+    import IOVDbSvc.IOVDb
+    from AthenaCommon.AppMgr import ServiceMgr
+    ServiceMgr.IOVDbSvc.Folders += [ folder + "<dbConnection>" + dbConnection + "</dbConnection>" ]
+    ServiceMgr.IOVDbSvc.FoldersToMetaData += [folder]
+    ServiceMgr.IOVSvc.partialPreLoadData = True
+
diff --git a/Tools/FullChainTransforms/python/__init__.py b/Tools/FullChainTransforms/python/__init__.py
new file mode 100644
index 000000000000..10eda52d2155
--- /dev/null
+++ b/Tools/FullChainTransforms/python/__init__.py
@@ -0,0 +1,2 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
-- 
GitLab


From 8670e0b831ba5eb3f8900da9514f60b2a544b3c1 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Fri, 26 Oct 2018 21:37:19 +0200
Subject: [PATCH 105/163] Add dummy ART job

Former-commit-id: 68b83d125e979658c76af3bcd3c2be462352139f
---
 .../test/test_FastChain_mc16a_ttbar.sh        | 45 +++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100755 Simulation/FastSimulation/FastChainPileup/test/test_FastChain_mc16a_ttbar.sh

diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_FastChain_mc16a_ttbar.sh b/Simulation/FastSimulation/FastChainPileup/test/test_FastChain_mc16a_ttbar.sh
new file mode 100755
index 000000000000..f0782d6be62f
--- /dev/null
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_FastChain_mc16a_ttbar.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+#
+# art-description: Run AFII simulation and full digitization of an MC16a ttbar sample with 2016a geometry and conditions, 25ns pile-up
+# art-type: grid
+# art-include: 21.3/Athena
+# art-output: mc16a_ttbar.RDO.pool.root
+# art-output: config.txt
+
+HighPtMinbiasHitsFiles="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/*"
+LowPtMinbiasHitsFiles="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/*"
+
+
+FastChain_tf.py \
+    --simulator ATLFASTII \
+    --digiSteeringConf "Split" \
+    --useISF True \
+    --randomSeed 123 \
+    --enableLooperKiller True \
+    --inputEVNTFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/ISF_Validation/mc12_valid.110401.PowhegPythia_P2012_ttbar_nonallhad.evgen.EVNT.e3099.01517252._000001.pool.root.1 \
+    --outputRDOFile RDO.pool.root \
+    --maxEvents 10 \
+    --skipEvents 0 \
+    --geometryVersion default:ATLAS-R2-2016-01-00-01 \
+    --conditionsTag default:OFLCOND-MC16-SDR-16 \
+    --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True;from Digitization.DigitizationFlags import digitizationFlags;digitizationFlags.experimentalDigi=["NewMerge"]' \
+    --preExec 'EVNTtoRDO:ToolSvc.NewMergeMcEventCollTool.OutputLevel=VERBOSE;' \
+    --postInclude='PyJobTransforms/UseFrontier.py' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt");ServiceMgr.MessageSvc.Format = "% F%32W%S%7W%R%T %0W%M"' \
+    --DataRunNumber '284500' \
+    --inputHighPtMinbiasHitsFile ${HighPtMinbiasHitsFiles} \
+    --inputLowPtMinbiasHitsFile ${LowPtMinbiasHitsFiles} \
+    --pileupFinalBunch '6' \
+    --numberOfHighPtMinBias '0.116075313' \
+    --numberOfLowPtMinBias '44.3839246425' \
+    --numberOfCavernBkg 0 \
+    --imf False
+echo "art-result: $? EVNTtoRDO step"
+
+# Add Reco step?
+
+ArtPackage=$1
+ArtJobName=$2
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
+echo  "art-result: $? regression"
+
-- 
GitLab


From 1c11c6927dde90eb572336d248db20681c40c75f Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Mon, 18 Mar 2019 12:33:45 +0100
Subject: [PATCH 106/163] Update FastChainPileup ART jobs to match
 configurations from 21.3

Currently the `FastChainPileup` ART jobs are not run for the ~master branch,
but prior to activating them, then we should get the syntax properly up-to-date.

In order to have reproducible output on all Intel architectures, the
`FastChainPileup` jobs should be run without the Intel Math library.
The `art.py compare` script does not require the `--imf False` option,
so removed this.
Cleaned up whitespace and made the `art-result` strings consistent between jobs.

Fixed `postExec` statements to ensure that the configuration of `FastChain_tf.py`
ART jobs is written out to `config.txt` which should then be saved by ART.
---
 .../test/test_stdReco_fastSim_fullDigi.sh     | 31 ++++++++--------
 .../test/test_stdReco_fullSim_fullDigi.sh     | 31 ++++++++--------
 .../test/test_ttFC_fastSim_fastDigi.sh        | 28 +++++++--------
 .../test/test_ttFC_fastSim_fullDigi.sh        | 23 ++++++------
 .../test/test_ttFC_fullHS_fastPU_simDigi.sh   | 26 ++++++--------
 .../test/test_ttFC_fullSim_fullDigi.sh        | 25 ++++++-------
 .../test_ttFC_reco_Split_fastSim_fastDigi.sh  | 35 +++++++++----------
 .../test_ttFC_reco_Split_fastSim_fullDigi.sh  | 30 ++++++++--------
 ...t_ttFC_reco_Split_fullHS_fastPU_simDigi.sh | 27 +++++++-------
 ...co_newTracking_PseudoT_fastSim_fastDigi.sh | 21 ++++++-----
 ...co_newTracking_PseudoT_fastSim_fullDigi.sh | 27 +++++++-------
 ...co_newTracking_PseudoT_fullSim_fullDigi.sh | 19 +++++-----
 ...C_reco_noSplit_PseudoT_fastSim_fastDigi.sh | 22 ++++++------
 ...C_reco_noSplit_PseudoT_fastSim_fullDigi.sh | 20 ++++++-----
 ...C_reco_noSplit_PseudoT_fullSim_fullDigi.sh | 22 ++++++------
 ...reco_noSplit_noPseudoT_fastSim_fastDigi.sh | 28 ++++++++-------
 ...reco_noSplit_noPseudoT_fastSim_fullDigi.sh | 28 +++++++--------
 ...reco_noSplit_noPseudoT_fullSim_fullDigi.sh | 28 +++++++--------
 ...C_reco_noSplit_noPseudoT_stdFullSimDigi.sh | 35 ++++++++++---------
 19 files changed, 250 insertions(+), 256 deletions(-)

diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fastSim_fullDigi.sh
index 33fdf9bca36e..63d071a82479 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fastSim_fullDigi.sh
@@ -5,8 +5,8 @@
 # specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" \
@@ -24,36 +24,35 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
-    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;'
+    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 Reco_tf.py --inputRDOFile='RDO_pileup_fastsim_fulldigi.pool.root'\
  --outputAODFile=AOD_fastSim_fullDigi.pool.root \
     --autoConfiguration=everything \
-    --maxEvents=500 \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --maxEvents 100 \
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? ESD step"
+echo "art-result: $? RDOtoAOD step"
 
 
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
 #Regression test
 
 ArtPackage=$1
 ArtJobName=$2
 
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 
 echo  "art-result: $? regression"
 
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_stdReco_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_stdReco_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_stdReco_fastSim_fullDigi_InDetStandardPlots.root
 
+# art-output: dcube/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php 
 echo "art-result: $? histcompArtPackage
-
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fullSim_fullDigi.sh
index 8a4a66a8599f..017455f5f84f 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fullSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_stdReco_fullSim_fullDigi.sh
@@ -3,12 +3,12 @@
 # art-description: test job ttFC_fullSim_fullDigi
 # art-type: grid
 
-# specify branches of athena that are being targeted:                                                               
+# specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
-# art-include: 21.3-hmpl/Athena
 FastChain_tf.py --simulator ATLFASTII \
     --digiSteeringConf "SplitNoMerge" \
     --useISF True \
@@ -23,28 +23,29 @@ FastChain_tf.py --simulator ATLFASTII \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
-    --DataRunNumber '284500'
+    --DataRunNumber '284500' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 Reco_tf.py --inputRDOFile=RDO_pileup_fullsim_fulldigi.pool.root \
     --outputAODFile=AOD_fullSim_fullDigi.pool.root \
     --autoConfiguration=everything \
     --maxEvents=500 \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? ESD step"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
+echo "art-result: $? RDOtoAOD step"
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --imf=False --entries 10 ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_stdReco_fullSim_fullDigi.sh InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_stdReco_fullSim_fullDigi.sh InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_stdReco_fullSim_fullDigi_InDetStandardPlots.root
 
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
+
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fastDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fastDigi.sh
index adf490505c80..28558f99123a 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fastDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fastDigi.sh
@@ -2,12 +2,11 @@
 # art-description: test ttFC_fastSim_fastDigi
 # art-type: grid
 
-# specify branches of athena that are being targeted:                                                               
+# specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
-
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl                                                                           
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMergeFF" \
     --useISF True \
@@ -21,23 +20,22 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
-    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py"
+    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? evgen to RDO step"
+echo "art-result: $? EVNTtoRDO step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: RDO_truth.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fastSim_fastDigi RDO_truth.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/RDOTruthCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/RDO_TruthPlots_Refs/test_ttFC_fastSim_fastDigi_RDO_Truth.root
+
 
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fullDigi.sh
index e7f4528d9ead..ff3ed5083f03 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fastSim_fullDigi.sh
@@ -6,9 +6,7 @@
 #
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-#
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" \
@@ -25,21 +23,20 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
-    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' 
+    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
-echo "art-result: $? evgen step"
+echo "art-result: $? EVNTtoRDO step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: RDO_truth.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fastSim_fullDigi RDO_truth.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/RDOTruthCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/RDO_TruthPlots_Refs/test_ttFC_fastSim_fullDigi.sh
+
 
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullHS_fastPU_simDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullHS_fastPU_simDigi.sh
index 5af40184fa23..a250d913c14c 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullHS_fastPU_simDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullHS_fastPU_simDigi.sh
@@ -5,12 +5,10 @@
 #
 # Run FastChain 'Fast PU, Full HS' and tests: G4HS_FastPileup sim (G4 for HS, Pythia on the fly + FastCaloSim for PU) + fast digi PU/full digi HS + Split reco (truth tracking PU, full HS)
 #
-# specify branches of athena that are being targeted: 
+# specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-#                                                                           
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
 
 FastChain_tf.py --simulator G4HS_FastPileup \
     --digiSteeringConf "SplitNoMergeSF" \
@@ -26,22 +24,20 @@ FastChain_tf.py --simulator G4HS_FastPileup \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
-    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py"
+    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? Job"
+echo "art-result: $? EVNTtoRDO step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --imf=False --entries 10 ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fullHS_fastPU InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: RDO_truth.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fullHS_fastPU RDO_truth.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/RDOTruthCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/RDO_TruthPlots_Refs/test_ttFC_fullHS_fastPU_simDigi_RDO_Truth.root
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullSim_fullDigi.sh
index 338444789eb5..d469555ae7ad 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_fullSim_fullDigi.sh
@@ -2,12 +2,11 @@
 # art-type: grid
 # art-description: test job ttFC_fullSim_fullDigi
 
-# specify branches of athena that are being targeted:                                                             
- 
+# specify branches of athena that are being targeted:
+
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
 
 FastChain_tf.py --simulator ATLFASTII \
     --digiSteeringConf "SplitNoMerge" \
@@ -22,20 +21,18 @@ FastChain_tf.py --simulator ATLFASTII \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
-    --DataRunNumber '284500'
+    --DataRunNumber '284500' \
+    --imf False
 
-echo "art-result: $? evgen step"
+echo "art-result: $? EVNTtoRDO step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fullSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: RDO_truth.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_fullSim_fullDigi RDO_truth.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/RDOTruthCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/RDO_truth_TEST.root
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fastDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fastDigi.sh
index 5960ca58ad64..b0b4b9860ecf 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fastDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fastDigi.sh
@@ -1,13 +1,12 @@
-B41;326;0c#!/usr/bin/env bash
+#!/usr/bin/env bash
 # art-description: test ttFC_fastSim_fastDigi + ttFC_reco_Split_fastSim_fastDigi
 # art-type: grid
 
-# specify branches of athena that are being targeted: 
+# specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMergeFF" \
@@ -22,12 +21,13 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
     --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 
 FastChain_tf.py --maxEvents 50 \
@@ -36,22 +36,21 @@ FastChain_tf.py --maxEvents 50 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile 'RDO_pileup_fastsim_fastdigi.pool.root' \
     --outputAODFile AOD_Split_fastSim_fastDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doSplitReco.set_Value_and_Lock(True);from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetFlags.doSplitReco.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);InDetKeys.PixelPUClustersTruth.set_Value_and_Lock('PRD_MultiTruthPixel_PU');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doSplitReco.set_Value_and_Lock(True);from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetFlags.doSplitReco.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);InDetKeys.PixelPUClustersTruth.set_Value_and_Lock('PRD_MultiTruthPixel_PU');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")'\
+    --imf False
 
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots.xml
- /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_Split_fastSim_fastDigi_InDetStandardPlots.root
+
 
+# art-output: dcube/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fullDigi.sh
index 29d2937510d1..78f0e9c82a2b 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fastSim_fullDigi.sh
@@ -5,8 +5,8 @@
 # specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena       
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" --useISF True \
@@ -20,12 +20,14 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
-    --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
 
-echo "art-result: $? AOD step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -33,21 +35,21 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31  \
     --inputRDOFile 'RDO_pileup_fastsim_fulldigi.pool.root' \
     --outputAODFile AOD_Split_fastSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doSplitReco.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True); from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetKeys.PixelPUClustersTruth.set_Value_and_Lock('PRD_MultiTruthPixel_PU');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);"
+    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doSplitReco.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True); from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetKeys.PixelPUClustersTruth.set_Value_and_Lock('PRD_MultiTruthPixel_PU');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName} 
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
 
 
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_Split_fastSim_fullDigi_InDetStandardPlots.root
+
+# art-output: dcube/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fullHS_fastPU_simDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fullHS_fastPU_simDigi.sh
index 34d1505b352a..05141804e572 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fullHS_fastPU_simDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_Split_fullHS_fastPU_simDigi.sh
@@ -5,9 +5,8 @@
 # specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
- 
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 # Run FastChain 'Fast PU, Full HS' and tests: G4HS_FastPileup sim (G4 for HS, Pythia on the fly + FastCaloSim for PU) + fast digi PU/full digi HS + Split reco (truth tracking PU, full HS)
 
 FastChain_tf.py --simulator G4HS_FastPileup \
@@ -23,12 +22,13 @@ FastChain_tf.py --simulator G4HS_FastPileup \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
-    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py"
+    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 10 \
     --skipEvents 0 \
@@ -37,22 +37,23 @@ FastChain_tf.py --maxEvents 10 \
     --inputRDOFile 'RDO_fullHS_fastPU_simdigi.pool.root' \
     --outputAODFile AOD_Split_fullHS_fastPU_simDigi.pool.root \
     --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);InDetFlags.doStatistics.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doSplitReco.set_Value_and_Lock(True);from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');InDetFlags.doSplitReco.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True); from InDetRecExample.InDetKeys import InDetKeys; InDetKeys.PixelPUClusters.set_Value_and_Lock('PixelFast_PU_Clusters');InDetKeys.PixelPUClustersTruth.set_Value_and_Lock('PRD_MultiTruthPixel_PU');InDetKeys.SCT_PU_ClustersTruth.set_Value_and_Lock('PRD_MultiTruthSCT_PU');InDetKeys.TRT_PU_DriftCirclesTruth.set_Value_and_Lock('PRD_MultiTruthTRT_PU');" \
-    --postExec 'RAWtoESD:import AthenaCommon.AlgSequence as acas;job = acas.AlgSequence();del job.InDetSCT_ClusterizationPU;del job.InDetPixelClusterizationPU;del job.InDetPRD_MultiTruthMakerSiPU;del job.InDetPRD_MultiTruthMakerTRTPU;'
+    --postExec 'RAWtoESD:import AthenaCommon.AlgSequence as acas;job = acas.AlgSequence();del job.InDetSCT_ClusterizationPU;del job.InDetPixelClusterizationPU;del job.InDetPRD_MultiTruthMakerSiPU;del job.InDetPRD_MultiTruthMakerTRTPU;from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName} 
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fullHS_fastPU_simDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_RDO_truth_pileup.xml_ttFC_reco_Split_fullHS_fastPU_simDigi /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_Split_fullHS_fastPU_simDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/RDOTruthCompare.xml_ttFC_reco_Split_fullHS_fastPU_simDigi /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_Split_fullHS_fastPU_simDigi_InDetStandardPlots.root
 
 
 
 
 # InDetStandardPlots.root -l dcube.log -p -r   -x dcube.xml -s /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/
 
-# art-output: dcube/ 
+# art-output: dcube/
 # dumps the entire dcube directory to output because we need all of it for plots
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fastDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fastDigi.sh
index 334f7515d01c..f4865d3828d1 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fastDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fastDigi.sh
@@ -2,11 +2,8 @@
 # art-description: test ttFC_fastSim_fastDigi + ttFC_reco_newTracking_PseudoT_fastSim_fastDigi
 # art-type: grid
 # specify branches of athena that are being targeted:
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
 
+# art-output: config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMergeFF" \
@@ -22,12 +19,13 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
-    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py"
+    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -35,17 +33,18 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile 'RDO_pileup_fastsim_fastdigi.pool.root' \
     --outputAODFile AOD_newTracking_pseudoTracking_fastSim_fastDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}  
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
 
-#add an additional payload from the job (corollary file).                                                           
+#add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
 
 /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_newTracking_PseudoT_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fullDigi.sh
index 40dc6e0e2d4f..fa369be97cd9 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fastSim_fullDigi.sh
@@ -1,12 +1,11 @@
-B41;326;0c#!/usr/bin/env bash
+#!/usr/bin/env bash
 # art-description: test for job configuration ttFC_fastSim_fulldigi then ttFC_reco_newTracking_PseudoT_fastSim_fullDigi
 # art-type: grid
 #
-# specify branches of athena that are being targeted:                                                               
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl                                                                           
-# art-include: 21.3-hmpl/Athena
+# specify branches of athena that are being targeted:
+
+# art-output: config.txt
+
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" \
     --useISF True \
@@ -23,10 +22,11 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
-    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' 
+    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -34,16 +34,17 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31  \
     --inputRDOFile 'RDO_pileup_fastsim_fulldigi.pool.root' \
     --outputAODFile AOD_newTracking_pseudoTracking_fastSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
 
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root 
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
 /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_newTracking_PseudoT_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube/config/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
 
 
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh
index b8ff769abc50..09d0f409fda3 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh
@@ -3,11 +3,8 @@
 # art-description: test job ttFC_fullSim_fullDigi + ttFC_reco_newTracking_PseudoT_fullSim_fullDigi
 
 # specify branches of athena that are being targeted:
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
 
+# art-output: config.txt
 
 FastChain_tf.py --simulator ATLFASTII \
     --digiSteeringConf "SplitNoMerge" \
@@ -23,9 +20,10 @@ FastChain_tf.py --simulator ATLFASTII \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
-    --DataRunNumber '284500'
+    --DataRunNumber '284500' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -33,15 +31,16 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31  \
     --inputRDOFile RDO_pileup_fullsim_fulldigi.pool.root \
     --outputAODFile AOD_newTracking_pseudoTracking_fullSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --imf False
 
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
+#add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
 /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
 
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fastDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fastDigi.sh
index a1df8650a377..e0af2c79b9a9 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fastDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fastDigi.sh
@@ -3,10 +3,7 @@
 # art-type: grid
 
 # specify branches of athena that are being targeted:
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMergeFF" \
@@ -22,12 +19,13 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
-    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py"
+    --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -35,14 +33,16 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile 'RDO_pileup_fastsim_fastdigi.pool.root' \
     --outputAODFile AOD_noSplit_pseudoTracking_fastSim_fastDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doPseudoTracking.set_Value_and_Lock(True);"
-echo "art-result: $? AOD step"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True);InDetFlags.doPseudoTracking.set_Value_and_Lock(True);" \
+    --imf False
+
+echo "art-result: $? RDOtoAOD step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
+#add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
 /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_PseudoT_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
 
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fullDigi.sh
index 2e8479731e7c..fb1ce5ed7938 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fastSim_fullDigi.sh
@@ -3,10 +3,9 @@
 # art-type: grid
 #
 # specify branches of athena that are being targeted:
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+
+# art-output: config.txt
+
 # Sim/Digi job
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" \
@@ -24,9 +23,10 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
-    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' 
+    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 
 FastChain_tf.py --maxEvents 500 \
@@ -35,12 +35,14 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31  \
     --inputRDOFile 'RDO_pileup_fastsim_fulldigi.pool.root' \
     --outputAODFile AOD_noSplit_pseudoTracking_fastSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
-echo "art-result: $? AOD step"
+    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --imf False
+
+echo "art-result: $? RDOtoAOD step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
 # add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fullSim_fullDigi.sh
index 4c8e166c683d..a22820c0bec3 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fullSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_PseudoT_fullSim_fullDigi.sh
@@ -3,10 +3,8 @@
 # art-description: test job ttFC_fullSim_fullDigi + ttFC_reco_noSplit_PseudoT_fullSim_fullDigi
 
 # specify branches of athena that are being targeted:
-# art-include: 21.0/Athena
-# art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena       
+
+# art-output: config.txt
 
 FastChain_tf.py --simulator ATLFASTII \
     --digiSteeringConf "SplitNoMerge" \
@@ -22,9 +20,10 @@ FastChain_tf.py --simulator ATLFASTII \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
-    --DataRunNumber '284500'
+    --DataRunNumber '284500' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 
 FastChain_tf.py --maxEvents 500 \
@@ -33,16 +32,17 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile RDO_pileup_fullsim_fulldigi.pool.root \
     --outputAODFile AOD_noSplit_pseudoTracking_fullSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? RDOtoAOD step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
 /cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_PseudoT_fullSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
 
 
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi.sh
index c73f55919d93..12d9edc168d3 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi.sh
@@ -5,8 +5,9 @@
 # specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
+
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMergeFF" \
     --useISF True \
@@ -20,12 +21,13 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --preSimInclude FastChainPileup/FastPileup.py \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
-    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
+    --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
     --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
     --preDigiInclude="FastTRT_Digitization/preInclude.FastTRT_Digi.Validation.py" \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 
 FastChain_tf.py --maxEvents 500 \
@@ -34,25 +36,25 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile 'RDO_pileup_fastsim_fastdigi.pool.root' \
     --outputAODFile AOD_noSplit_noPseudoT_fastSim_fastDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.pixelClusterSplittingType.set_Value_and_Lock(\"AnalogClus\");InDetFlags.doTIDE_Ambi.set_Value_and_Lock(False);InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
+#add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_noSplit_noPseudoT_fastSim_fastDigi_InDetStandardPlots.root
 
 
 
 
 # InDetStandardPlots.root -l dcube.log -p -r   -x dcube.xml -s /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
+
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi.sh
index fe32cb3bbfa4..8215988e4df5 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi.sh
@@ -1,12 +1,12 @@
-B41;326;0c#!/usr/bin/env bash
+#!/usr/bin/env bash
 # art-description: test for job configuration ttFC_fastSim_fulldigi _ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi
 # art-type: grid
 #
 # specify branches of athena that are being targeted:
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
 FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --digiSteeringConf "SplitNoMerge" \
@@ -24,9 +24,10 @@ FastChain_tf.py --simulator ATLFASTIIF_PileUp \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest_FCpileup.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
     --DataRunNumber '284500' \
-    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' 
+    --postSimExec='genSeq.Pythia8.NCollPerEvent=10;' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 
 FastChain_tf.py --maxEvents 500 \
@@ -35,21 +36,20 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile 'RDO_pileup_fastsim_fulldigi.pool.root' \
     --outputAODFile AOD_noSplit_noPseudoT_fastSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? RDOtoAOD step"
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
+#add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_noSplit_noPseudoT_fastSim_fullDigi_InDetStandardPlots.root
 
 
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi.sh
index 2b286a1f446c..c5bda866c792 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi.sh
@@ -6,8 +6,8 @@
 
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+# art-output: config.txt
+# art-output: RAWtoESD_config.txt
 
 FastChain_tf.py --simulator ATLFASTII \
     --digiSteeringConf "SplitNoMerge" \
@@ -23,9 +23,10 @@ FastChain_tf.py --simulator ATLFASTII \
     --preSimExec 'from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags;TrkDetFlags.TRT_BuildStrawLayers=True' \
     --postInclude='PyJobTransforms/UseFrontier.py,G4AtlasTests/postInclude.DCubeTest.py,DigitizationTests/postInclude.RDO_Plots.py' \
     --postExec 'from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("config.txt")' \
-    --DataRunNumber '284500'
+    --DataRunNumber '284500' \
+    --imf False
 
-echo "art-result: $? RDO step"
+echo "art-result: $? EVNTtoRDO step"
 
 FastChain_tf.py --maxEvents 500 \
     --skipEvents 0 \
@@ -33,25 +34,24 @@ FastChain_tf.py --maxEvents 500 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile RDO_pileup_fullsim_fulldigi.pool.root \
     --outputAODFile AOD_noSplit_noPseudoT_fullSim_fullDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" "InDetFlags.doStandardPlots.set_Value_and_Lock(True)" \
+    --postExec 'RAWtoESD:from AthenaCommon.ConfigurationShelve import saveToAscii;saveToAscii("RAWtoESD_config.txt")' \
+    --imf False
 
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
-#add an additional payload from the job (corollary file).                                                           
-# art-output: InDetStandardPlots.root  
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+#add an additional payload from the job (corollary file).
+# art-output: InDetStandardPlots.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/InDetStandardPlotCompare.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_noSplit_noPseudoT_fullSim_fullDigi_InDetStandardPlots.root
 
 
 
 
 # InDetStandardPlots.root -l dcube.log -p -r   -x dcube.xml -s /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 echo  "art-result: $? histcomp"
diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi.sh
index 9c86a3514aed..edcfdf7c0c51 100755
--- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi.sh
+++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi.sh
@@ -1,14 +1,13 @@
 #!/usr/bin/env bash
 # art-description: Job ttFC_stdFullSim + ttFC_stdFullSimMerge + ttFC_stdFullSimDigi + ttFC_reco_noSplit_noPseudoT_stdFullSimDigi
 # art-type: grid
-# 
+#
 
 # specify branches of athena that are being targeted:
 
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
-# Also include temporary branch 21.3-hmpl
-# art-include: 21.3-hmpl/Athena
+
 # job 1: Simulation from evgen
 
 Sim_tf.py --conditionsTag 'default:OFLCOND-RUN12-SDR-19' \
@@ -21,9 +20,10 @@ Sim_tf.py --conditionsTag 'default:OFLCOND-RUN12-SDR-19' \
     --geometryVersion 'default:ATLAS-R2-2015-03-01-00_VALIDATION' \
     --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/mc12_valid.110401.PowhegPythia_P2012_ttbar_nonallhad.evgen.EVNT.e3099.01517252._000001.pool.root.1" \
     --outputHITSFile "Hits.pool.root" \
-    --maxEvents 50
+    --maxEvents 50 \
+    --imf False
 
-echo "art-result: $? evgen step"
+echo "art-result: $? EVNTtoHITS step"
 
 #merging of hits file
 
@@ -32,9 +32,10 @@ HITSMerge_tf.py --inputHITSFile='Hits.pool.root' \
     --maxEvents=50 \
     --skipEvents='0' \
     --geometryVersion 'ATLAS-R2-2015-03-01-00' \
-    --conditionsTag 'OFLCOND-RUN12-SDR-19'
+    --conditionsTag 'OFLCOND-RUN12-SDR-19' \
+    --imf False
 
-echo "art-result: $? Merge step"
+echo "art-result: $? HITS Merge step"
 #digi
 Digi_tf.py --inputHITSFile 'Merge.pool.root' \
     --outputRDOFile 'RDO.pool.root' \
@@ -45,9 +46,10 @@ Digi_tf.py --inputHITSFile 'Merge.pool.root' \
     --digiSeedOffset2 '2345678' \
     --postInclude 'PyJobTransforms/UseFrontier.py' \
     --AddCaloDigi 'False' \
-    --conditionsTag 'OFLCOND-RUN12-SDR-31'
+    --conditionsTag 'OFLCOND-RUN12-SDR-31' \
+    --imf False
 
-echo "art-result: $? Digi step"
+echo "art-result: $? HITStoRDO step"
 
 FastChain_tf.py --maxEvents 50 \
     --skipEvents 0 \
@@ -55,28 +57,27 @@ FastChain_tf.py --maxEvents 50 \
     --conditionsTag OFLCOND-RUN12-SDR-31 \
     --inputRDOFile RDO.pool.root \
     --outputAODFile AOD_Split_stdFullSimDigi.pool.root \
-    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doStandardPlots.set_Value_and_Lock(True);"
+    --preExec "RAWtoESD:rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doStandardPlots.set_Value_and_Lock(True);" \
+    --imf False
+
 #end of job
-echo "art-result: $? AOD step"
+echo "art-result: $? RDOtoAOD step"
 #add an additional payload from the job (corollary file).
 # art-output: InDetStandardPlots.root
 
 ArtPackage=$1
 ArtJobName=$2
-art.py compare grid --entries 10 --imf=False ${ArtPackage} ${ArtJobName}
+art.py compare grid --entries 10 ${ArtPackage} ${ArtJobName}
 echo  "art-result: $? regression"
 
 
-/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_TEST.root
+/cvmfs/atlas.cern.ch/repo/sw/art/dcube/bin/art-dcube TEST_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi InDetStandardPlots.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/dcube_configs/config/dcube_indetplots_no_pseudotracks.xml /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/InDetStandardPlots_Refs/test_ttFC_reco_noSplit_noPseudoT_stdFullSimDigi_InDetStandardPlots.root
 
 
 
 
 # InDetStandardPlots.root -l dcube.log -p -r   -x dcube.xml -s /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/FastChainPileup/
 
-# art-output: dcube/dcube.xml
-# art-output: dcube/dcube.log
-# art-output: dcube/dcubelog.xml
-# art-output: dcube/dcube.xml.php
+# art-output: dcube/
 
 echo  "art-result: $? histcomp test"
-- 
GitLab


From ea16824e7f68643997832b69f776fc9269b46403 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Fri, 6 Jul 2018 11:20:31 +0200
Subject: [PATCH 107/163] Add arguments related to reading minbias HITS to
 FastChain_tf.py

This commit adds arguments related to reading minbias HITS into
`FastChain_tf.py`. Part of the work for ATLASSIM-3737. So far
these arguments are ignored by the skeleton file.


Former-commit-id: e67e20fbade1e1d1ff40466cc301ac2d63c42eb0
---
 .../scripts/FastChain_tf.py                   | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/Tools/FullChainTransforms/scripts/FastChain_tf.py b/Tools/FullChainTransforms/scripts/FastChain_tf.py
index ad95df40d354..dd907c3d8a7d 100755
--- a/Tools/FullChainTransforms/scripts/FastChain_tf.py
+++ b/Tools/FullChainTransforms/scripts/FastChain_tf.py
@@ -1,8 +1,8 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
-#  FastChain_tf.py 
+#  FastChain_tf.py
 #  One step transform to run SIM+DIGI as one job, then reco
 #  to ESD/AOD output
 #  Richard Hawkings, adapted from FullChain_tf.py by Graeme Stewart
@@ -21,14 +21,14 @@ from PyJobTransforms.trfExe import athenaExecutor
 from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments, addTriggerArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addRecoSubsteps, addAllRecoArgs
-from SimuJobTransforms.simTrfArgs import addForwardDetTrfArgs, addForwardDetTrfArgs, addCommonSimTrfArgs, addBasicDigiArgs, addCommonSimDigTrfArgs, addTrackRecordArgs, addSim_tfArgs
+from SimuJobTransforms.simTrfArgs import addForwardDetTrfArgs, addCommonSimTrfArgs, addBasicDigiArgs, addCommonSimDigTrfArgs, addTrackRecordArgs, addSim_tfArgs, addPileUpTrfArgs
 
 from PyJobTransforms.trfArgClasses import argFactory,argList
 
 @stdTrfExceptionHandler
 @sigUsrStackTrace
 def main():
-    
+
     msg.info('This is %s' % sys.argv[0])
 
     trf = getTransform()
@@ -41,12 +41,12 @@ def main():
 
 def getTransform():
     executorSet = set()
-    
+
     addRecoSubsteps(executorSet)
 
     # Sim + Digi - factor these out into an importable function in time
     executorSet.add(athenaExecutor(name = 'EVNTtoRDO', skeletonFile = 'FullChainTransforms/FastChainSkeleton.EVGENtoRDO.py',
-                                   substep = 'simdigi', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz', 
+                                   substep = 'simdigi', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
                                    inData=['NULL','EVNT'],
                                    outData=['RDO','NULL'] ))
 
@@ -58,20 +58,20 @@ def getTransform():
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
     addTriggerArguments(trf.parser)
-    
+
     # Reconstruction arguments and outputs (use the factorised 'do it all' function)
     addAllRecoArgs(trf)
-    
+
     # Simulation and digitisation options
     addCommonSimTrfArgs(trf.parser)
     addCommonSimDigTrfArgs(trf.parser)
     addBasicDigiArgs(trf.parser)
     addSim_tfArgs(trf.parser)
     # addForwardDetTrfArgs(trf.parser)
-    addCommonSimDigTrfArgs(trf.parser)
+    addPileUpTrfArgs(trf.parser)
     addTrackRecordArgs(trf.parser)
     addFastChainTrfArgs(trf.parser)
-    
+
     return trf
 
 def addFastChainTrfArgs(parser):
-- 
GitLab


From c3f5f1916b08200f33612103b30c98359f3f83bd Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 11 Mar 2019 10:26:15 +0000
Subject: [PATCH 108/163] Merge branch
 'PatchBeamEffectsAlgForEmptyGenEvents_21.0' into '21.0'

Protection for empty GenEvents in BeamEffectsAlg::patchSignalProcessVertex(...)

See merge request atlas/athena!21768
---
 .../BeamEffects/share/BeamEffectsAlg_test.ref   | 17 ++++++++++-------
 Simulation/BeamEffects/src/BeamEffectsAlg.cxx   | 15 ++++++++++-----
 .../BeamEffects/test/BeamEffectsAlg_test.cxx    |  6 ++++++
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref b/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
index 7ba79842529b..bb42b8c5d058 100644
--- a/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
+++ b/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
@@ -1,4 +1,4 @@
-[==========] Running 6 tests from 1 test case.
+[==========] Running 7 tests from 1 test case.
 [----------] Global test environment set-up.
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
@@ -11,14 +11,17 @@ EventLoopMgr      WARNING No events will be processed from external input.
 HistogramPersis...WARNING Histograms saving not required.
 ApplicationMgr       INFO Application Manager Initialized successfully
 ApplicationMgr Ready
-[----------] 6 tests from BeamEffectsAlg_test
+[----------] 7 tests from BeamEffectsAlg_test
 [ RUN      ] BeamEffectsAlg_test.empty_alg_execute
 ClassIDSvc           INFO  getRegistryEntries: read 1507 CLIDRegistry entries for module ALL
 BeamEffectsAlg      FATAL No input McEventCollection called GEN_EVENT in StoreGate.
 [       OK ] BeamEffectsAlg_test.empty_alg_execute (179 ms)
 [ RUN      ] BeamEffectsAlg_test.set_properties
 ClassIDSvc           INFO  getRegistryEntries: read 359 CLIDRegistry entries for module ALL
-[       OK ] BeamEffectsAlg_test.set_properties (2 ms)
+[       OK ] BeamEffectsAlg_test.set_properties (1 ms)
+[ RUN      ] BeamEffectsAlg_test.patchSignalProcessVertex_empty_GenEvent
+BeamEffectsAlg    WARNING No signal_process_vertex found. Empty GenEvent!
+[       OK ] BeamEffectsAlg_test.patchSignalProcessVertex_empty_GenEvent (0 ms)
 [ RUN      ] BeamEffectsAlg_test.signal_process_vertex_exists
 [       OK ] BeamEffectsAlg_test.signal_process_vertex_exists (1 ms)
 [ RUN      ] BeamEffectsAlg_test.add_signal_process_vertex_atlasG4
@@ -26,9 +29,9 @@ ClassIDSvc           INFO  getRegistryEntries: read 359 CLIDRegistry entries for
 [ RUN      ] BeamEffectsAlg_test.add_signal_process_vertex_isfG4
 [       OK ] BeamEffectsAlg_test.add_signal_process_vertex_isfG4 (0 ms)
 [ RUN      ] BeamEffectsAlg_test.execute_pass_through
-[       OK ] BeamEffectsAlg_test.execute_pass_through (1 ms)
-[----------] 6 tests from BeamEffectsAlg_test (183 ms total)
+[       OK ] BeamEffectsAlg_test.execute_pass_through (0 ms)
+[----------] 7 tests from BeamEffectsAlg_test (19 ms total)
 
 [----------] Global test environment tear-down
-[==========] 6 tests from 1 test case ran. (572 ms total)
-[  PASSED  ] 6 tests.
+[==========] 7 tests from 1 test case ran. (75 ms total)
+[  PASSED  ] 7 tests.
diff --git a/Simulation/BeamEffects/src/BeamEffectsAlg.cxx b/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
index 75648f1fd49b..7b5d6c38e748 100644
--- a/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
+++ b/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
@@ -101,13 +101,18 @@ namespace Simulation
         ge.set_signal_process_vertex( signalVertex );
       }
       else {
-        ATH_MSG_DEBUG("No signal_process_vertex found - using the first GenVertex in the event.");
-        HepMC::GenVertex *signalVertex = *(ge.vertices_begin());
-        ge.set_signal_process_vertex( signalVertex );
+        if (!ge.vertices_empty()) {
+          ATH_MSG_DEBUG("No signal_process_vertex found - using the first GenVertex in the event.");
+          HepMC::GenVertex *signalVertex = *(ge.vertices_begin());
+          ge.set_signal_process_vertex( signalVertex );
+        }
       }
       if( !ge.signal_process_vertex() ) { // Insanity check
-        ATH_MSG_ERROR("Failed to set signal_process_vertex for GenEvent!!");
-        return StatusCode::FAILURE;
+        if (!ge.vertices_empty()) {
+          ATH_MSG_ERROR("Failed to set signal_process_vertex for GenEvent!!");
+          return StatusCode::FAILURE;
+        }
+        ATH_MSG_WARNING("No signal_process_vertex found. Empty GenEvent!");
       }
     }
     else {
diff --git a/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx b/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
index afac3c679c15..42e2b0b50dd3 100644
--- a/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
+++ b/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
@@ -99,6 +99,12 @@ namespace SimTesting {
     ASSERT_TRUE( m_alg->setProperty( "ISFRun", true).isSuccess()  );
   }
 
+  TEST_F(BeamEffectsAlg_test, patchSignalProcessVertex_empty_GenEvent) {
+    HepMC::GenEvent ge;
+    ASSERT_TRUE( patchSignalProcessVertex(ge).isSuccess() );
+    ASSERT_TRUE( ge.signal_process_vertex()==nullptr );
+  }
+
   TEST_F(BeamEffectsAlg_test, signal_process_vertex_exists) {
     HepMC::GenEvent ge;
     CLHEP::HepLorentzVector myPos( 1.0, 1.0, 1.0, 1.0);
-- 
GitLab


From 9065609efb3191155a382677df1550f365761e0d Mon Sep 17 00:00:00 2001
From: Rupert Tombs <rt500@cam.ac.uk>
Date: Tue, 19 Mar 2019 10:56:14 +0000
Subject: [PATCH 109/163] Remove duplicate Random.Engine flags. Remove unused
 BCM digitization config flags script. Remove deprecated additions of the
 ConditionsStore service from the BCM digitization test.

---
 .../python/BCM_DigitizationConfigFlags.py     | 21 -------------------
 .../test/BCM_DigitizationConfigNew_test.py    |  2 --
 .../BeamEffects/python/SimulationFlags.py     |  4 ----
 3 files changed, 27 deletions(-)
 delete mode 100755 InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigFlags.py

diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigFlags.py b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigFlags.py
deleted file mode 100755
index baf5c4b5ef20..000000000000
--- a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigFlags.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""Construct ConfigFlags Beam Conditions Monitor Digitization
-
-Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-"""
-from AthenaConfiguration.AthConfigFlags import AthConfigFlags
-
-def createBCMCfgFlags():
-    """Return an AthConfigFlags object with required flags"""
-    flags = AthConfigFlags()
-    # Run Inner Detector noise simulation?
-    flags.addFlag("Digitization.DoInnerDetectorNoise", True)
-    # Should pile-up digitization be done one bunch crossing at a time?
-    # Else all bunch crossings are provided at once.
-    flags.addFlag("Digitization.DoXingByXingPileUp", False)
-    # Name of MC EvtStore to overlay
-    flags.addFlag("Overlay.EventStore", "BkgEvent_0_SG")
-    # Name of the random number service to use
-    # of ("dSFMT", "Ranlux64", "Ranecu",)
-    flags.addFlag("Random.Engine", "dSFMT")
-    return flags
-
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
index daf3af3ae99f..f79e4fb5b2df 100755
--- a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
@@ -28,8 +28,6 @@ ConfigFlags.join(createOverlayCfgFlags())
 ConfigFlags.lock()
 # Construct our accumulator to run
 acc = MainServicesSerialCfg()
-from StoreGate.StoreGateConf import StoreGateSvc # FIXME remove this once athena is fixed
-acc.addService(StoreGateSvc("ConditionStore"))
 acc.merge(PoolReadCfg(ConfigFlags))
 acc.merge(InDetGMConfig(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required for BCM
 # Add configuration to write HITS pool file
diff --git a/Simulation/BeamEffects/python/SimulationFlags.py b/Simulation/BeamEffects/python/SimulationFlags.py
index 0a3fef6231ff..ac6263f012fe 100644
--- a/Simulation/BeamEffects/python/SimulationFlags.py
+++ b/Simulation/BeamEffects/python/SimulationFlags.py
@@ -11,10 +11,6 @@ def _createCfgFlags():
     # e.g. 'CondDB', 'VertexOverrideEventFile.txt', 'VertexOverride.txt',"LongBeamspot" 
     acf.addFlag('Vertex.Source', 'CondDB' )
 
-    # Name of the random number service to use
-    # of ("dSFMT", "Ranlux64", "Ranecu",)
-    acf.addFlag("Random.Engine", "dSFMT")
-
     return acf
 
 
-- 
GitLab


From b864622219e52267811c4764bfef3588b2c0cf80 Mon Sep 17 00:00:00 2001
From: Jovan Mitrevski <Jovan.Mitrevski@cern.ch>
Date: Tue, 19 Mar 2019 14:02:59 +0100
Subject: [PATCH 110/163] migrate ConvVxSorter and TrackMatchSorter to C++17
 compatible style (and simplify)

---
 .../egamma/egammaTools/src/ConvVxSorter.h     | 52 -------------------
 .../egammaTools/src/EMConversionBuilder.cxx   | 46 ++++++++++++++--
 .../egammaTools/src/EMTrackMatchBuilder.cxx   | 27 +++++++++-
 .../egammaTools/src/EMTrackMatchBuilder.h     | 22 +++++++-
 .../egamma/egammaTools/src/TrackMatchSorter.h | 52 -------------------
 5 files changed, 88 insertions(+), 111 deletions(-)
 delete mode 100644 Reconstruction/egamma/egammaTools/src/ConvVxSorter.h
 delete mode 100644 Reconstruction/egamma/egammaTools/src/TrackMatchSorter.h

diff --git a/Reconstruction/egamma/egammaTools/src/ConvVxSorter.h b/Reconstruction/egamma/egammaTools/src/ConvVxSorter.h
deleted file mode 100644
index 5ebdd018edcb..000000000000
--- a/Reconstruction/egamma/egammaTools/src/ConvVxSorter.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EGAMMATOOLS_CONVVXSORTER_H
-#define EGAMMATOOLS_CONVVXSORTER_H
-
-#include "xAODTracking/Vertex.h"
-#include "xAODEgamma/EgammaxAODHelpers.h"
-
-/** Sort conversion vertices according to the following criteria:
-  - Vertices with more Si tracks have priority
-  - Vertices with more tracks have priority
-  - Vertices with smaller radii have priority
-  
-  OLD SCHEME:
-  - Vertices with 2 tracks have priority over the ones with 1 track
-  - Vertices with Si + Si tracks have priority (if m_preferSi > 0)
-  - Vertices with Si + TRT or TRT + TRT depending on m_preferSi
-  - Vertices with smaller radii have priority
-  **/ 
-class ConvVxSorter
-: public std::binary_function<xAOD::Vertex&, xAOD::Vertex&, bool> {
- public:
-  bool operator()(const xAOD::Vertex& vx1, const xAOD::Vertex& vx2) const
-  {
-    xAOD::EgammaParameters::ConversionType convType1, convType2;
-    convType1 = xAOD::EgammaHelpers::conversionType(&vx1);
-    convType2 = xAOD::EgammaHelpers::conversionType(&vx2);
-    
-    if (convType1 != convType2)
-    {
-      // Different conversion type, preference to vertices with Si tracks
-      int nSi1 = xAOD::EgammaHelpers::numberOfSiTracks(convType1);
-      int nSi2 = xAOD::EgammaHelpers::numberOfSiTracks(convType2);
-      if (nSi1 != nSi2) return nSi1 > nSi2;
-      
-      // Same number of Si tracks: either 0 or 1 (Si+TRT vs. Si single)
-      // For 1 Si track, preference to Si+TRT
-      if (nSi1 != 0) return convType1 == xAOD::EgammaParameters::doubleSiTRT;
-      
-      // No Si track, preference to doubleTRT over single TRT
-      return convType1 == xAOD::EgammaParameters::doubleTRT;
-    }
-    
-    // Same conversion type, preference to lower radius
-    return (vx1.position().perp() < vx2.position().perp());
-  }
-
-};
-
-#endif
diff --git a/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.cxx b/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.cxx
index 6c5b126f0567..1351946c5017 100644
--- a/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.cxx
+++ b/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /********************************************************************
@@ -18,17 +18,57 @@ PURPOSE:  subAlgorithm which creates an EMConversion object.
 // INCLUDE HEADER FILES:
 
 #include "EMConversionBuilder.h"
-#include "ConvVxSorter.h"
 #include "xAODTracking/VertexContainer.h"
 #include "egammaRecEvent/egammaRecContainer.h"
 #include "egammaRecEvent/egammaRec.h"
 #include "FourMomUtils/P4Helpers.h"
 #include "StoreGate/ReadHandle.h"
 #include "GaudiKernel/EventContext.h"
+#include "xAODTracking/Vertex.h"
+#include "xAODEgamma/EgammaxAODHelpers.h"
+
 //  END OF HEADER FILES INCLUDE
 
 /////////////////////////////////////////////////////////////////
 
+namespace {
+ /** Sort conversion vertices according to the following criteria:
+  - Vertices with more Si tracks have priority
+  - Vertices with more tracks have priority
+  - Vertices with smaller radii have priority
+
+  OLD SCHEME:
+  - Vertices with 2 tracks have priority over the ones with 1 track
+  - Vertices with Si + Si tracks have priority (if m_preferSi > 0)
+  - Vertices with Si + TRT or TRT + TRT depending on m_preferSi
+  - Vertices with smaller radii have priority
+  **/
+  bool ConvVxSorter (const xAOD::Vertex& vx1, const xAOD::Vertex& vx2)
+  {
+    xAOD::EgammaParameters::ConversionType convType1, convType2;
+    convType1 = xAOD::EgammaHelpers::conversionType(&vx1);
+    convType2 = xAOD::EgammaHelpers::conversionType(&vx2);
+
+    if (convType1 != convType2)
+      {
+	// Different conversion type, preference to vertices with Si tracks
+	int nSi1 = xAOD::EgammaHelpers::numberOfSiTracks(convType1);
+	int nSi2 = xAOD::EgammaHelpers::numberOfSiTracks(convType2);
+	if (nSi1 != nSi2) return nSi1 > nSi2;
+
+	// Same number of Si tracks: either 0 or 1 (Si+TRT vs. Si single)
+	// For 1 Si track, preference to Si+TRT
+	if (nSi1 != 0) return convType1 == xAOD::EgammaParameters::doubleSiTRT;
+
+	// No Si track, preference to doubleTRT over single TRT
+	return convType1 == xAOD::EgammaParameters::doubleTRT;
+      }
+
+    // Same conversion type, preference to lower radius
+    return (vx1.position().perp() < vx2.position().perp());
+  }
+} // end of namespace
+
 using namespace xAOD::EgammaParameters;
 
 EMConversionBuilder::EMConversionBuilder(const std::string& type,
@@ -125,7 +165,7 @@ StatusCode EMConversionBuilder::vertexExecute(egammaRec* egRec, const xAOD::Vert
     const ElementLink< xAOD::VertexContainer > vertexLink( *conversions, iVtx );
     
     // If this is the best (or the first) vertex, push front and keep deltaEta, deltaPhi
-    if (!egRec->getNumberOfVertices() || ConvVxSorter()(*vertex, *egRec->vertex())){
+    if (!egRec->getNumberOfVertices() || ConvVxSorter(*vertex, *egRec->vertex())){
       egRec->pushFrontVertex( vertexLink );
       egRec->setDeltaEtaVtx( cluster->etaBE(2) - etaAtCalo );
       egRec->setDeltaPhiVtx( P4Helpers::deltaPhi(cluster->phiBE(2), phiAtCalo) );
diff --git a/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.cxx b/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.cxx
index 0a6ed6213fc2..105114f834b2 100644
--- a/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.cxx
+++ b/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.cxx
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  */
 
 // INCLUDE HEADER FILES:
@@ -151,7 +151,7 @@ StatusCode EMTrackMatchBuilder::trackExecute(const EventContext& ctx, egammaRec*
   if(trkMatches.size()>0)
   {
     //sort the track matches
-    std::sort(trkMatches.begin(), trkMatches.end(), TrackMatchSorter());
+    std::sort(trkMatches.begin(), trkMatches.end(), TrackMatchSorter);
 
 
     //set the matching values
@@ -502,5 +502,28 @@ EMTrackMatchBuilder::isCandidateMatch(const xAOD::CaloCluster*        cluster,
   return true; 
 }
 
+bool EMTrackMatchBuilder::TrackMatchSorter(const EMTrackMatchBuilder::TrackMatch& match1,
+					   const EMTrackMatchBuilder::TrackMatch& match2)
+{
+
+  if(match1.score!= match2.score) {//Higher score
+    return match1.score>match2.score;
+  }
+  //sqrt(0.025**2)*sqrt(2)/sqrt(12) ~ 0.01
+  if(fabs(match1.dR-match2.dR)<1e-02) {
+
+    if(fabs(match1.seconddR-match2.seconddR)>1e-02 ){ //Can the second distance separate them?
+      return match1.seconddR < match2.seconddR	;
+    }
+
+    if((match1.hitsScore!= match2.hitsScore)){ //use the one with more pixel
+      return match1.hitsScore>match2.hitsScore;
+    }
+
+  }
+
+  //closest DR
+  return match1.dR < match2.dR	;
+}
 
 
diff --git a/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.h b/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.h
index 46fcd9c570fa..aeddafe3bcfd 100644
--- a/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.h
+++ b/Reconstruction/egamma/egammaTools/src/EMTrackMatchBuilder.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef EGAMMATOOLS_EMTRACKMATCHBUILDER_H
@@ -19,7 +19,6 @@ The matching of a track to a cluster is driven by the EMTrackMatchBuilder tool l
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "egammaInterfaces/IEMTrackMatchBuilder.h"
 #include "egammaInterfaces/IEMExtrapolationTools.h"
-#include "TrackMatchSorter.h"
 #include "GaudiKernel/ToolHandle.h" 
 #include "GaudiKernel/EventContext.h"
 
@@ -54,6 +53,25 @@ class EMTrackMatchBuilder : public AthAlgTool, virtual public IEMTrackMatchBuild
 
 private:
 
+  /** @brief A structure for keeping track match information */
+  struct TrackMatch
+  {
+  public:
+    int trackNumber;
+    double dR;
+    double seconddR;
+    bool isTRT;
+    int score;
+    int hitsScore;
+    double deltaPhiLast;
+    double deltaEta[4];
+    double deltaPhi[4];
+    double deltaPhiRescaled[4];
+  };
+
+  /** @brief function to sort track matches based on quality */
+  static bool TrackMatchSorter(const TrackMatch& match1, const TrackMatch& match2);
+
   /** @brief Compute for tracks passing the loose matching
    the distance between track extrapolated to 2nd sampling and cluster */
   bool inBroadWindow(const EventContext& ctx,
diff --git a/Reconstruction/egamma/egammaTools/src/TrackMatchSorter.h b/Reconstruction/egamma/egammaTools/src/TrackMatchSorter.h
deleted file mode 100644
index b4da016a9b0b..000000000000
--- a/Reconstruction/egamma/egammaTools/src/TrackMatchSorter.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EGAMMATOOLS_TRACKMATCHSORTER_H
-#define EGAMMATOOLS_TRACKMATCHSORTER_H
-class egammaRec;
-
-struct TrackMatch
-{
- public:
-  int trackNumber;
-  double dR;
-  double seconddR;
-  bool isTRT;
-  int score;
-  int hitsScore;
-  double deltaPhiLast;
-  double deltaEta[4];
-  double deltaPhi[4];
-  double deltaPhiRescaled[4];
-
-};
-
-class TrackMatchSorter
-: public std::binary_function<TrackMatch, TrackMatch, bool> {
- public:
-  bool operator()(const TrackMatch& match1, const TrackMatch& match2) const
-  {
-
-    if(match1.score!= match2.score) {//Higher score 
-      return match1.score>match2.score;
-    }
-    //sqrt(0.025**2)*sqrt(2)/sqrt(12) ~ 0.01
-    if(fabs(match1.dR-match2.dR)<1e-02) {
-      
-      if(fabs(match1.seconddR-match2.seconddR)>1e-02 ){ //Can the second distance separate them?
-	return match1.seconddR < match2.seconddR	;
-      }
-
-      if((match1.hitsScore!= match2.hitsScore)){ //use the one with more pixel
-	return match1.hitsScore>match2.hitsScore;
-      }
-
-    }
-
-    //closest DR
-    return match1.dR < match2.dR	;
-  }
-};
-
-#endif
-- 
GitLab


From 99b2711517da4c181af81e8182b80f9c310bd105 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Tue, 19 Mar 2019 14:38:35 +0100
Subject: [PATCH 111/163] athenaHLT: add option to debug fork and fix timeout

- Add `--debug-fork` option to print all open file descriptors and
  threads before/after fork
- Fix documentation of timeout units
- Use same timeout defaults as currently set at P1
---
 HLT/Trigger/TrigControl/TrigCommon/bin/athenaHLT.py        | 7 ++++---
 .../TrigControl/TrigCommon/share/athenaHLT_jo_allopts.ref  | 2 +-
 .../TrigControl/TrigCommon/share/athenaHLT_jo_noopts.ref   | 4 ++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/HLT/Trigger/TrigControl/TrigCommon/bin/athenaHLT.py b/HLT/Trigger/TrigControl/TrigCommon/bin/athenaHLT.py
index 70976eeeffbd..3d75e38967d6 100755
--- a/HLT/Trigger/TrigControl/TrigCommon/bin/athenaHLT.py
+++ b/HLT/Trigger/TrigControl/TrigCommon/bin/athenaHLT.py
@@ -147,7 +147,7 @@ def HLTMPPy_cfgdict(args):
    cdict = {}
    cdict['HLTMPPU'] = {
       'application_name' : 'athenaHLT-%d' % os.getpid(),  # unique name required to avoid interference
-      'extra_params' : None,
+      'extra_params' : ["dumpFDs=1", "dumpThreads=1"] if args.debug_fork else None,
       'interactive' : args.interactive,
       'log_root' : os.getcwd(),
       'log_name' : ('' if args.unique_log_files else 'athenaHLT:'),
@@ -157,7 +157,7 @@ def HLTMPPy_cfgdict(args):
       'num_slots' : args.concurrent_events,
       'partition_name' : args.partition,
       'hard_timeout' : args.timeout,
-      'soft_timeout_fraction' : 0.9
+      'soft_timeout_fraction' : 0.95
    }
 
    cdict['datasource'] = {
@@ -299,7 +299,7 @@ def main():
    g.add_argument('--stdcmath', action='store_true', help='use stdcmath library')
    g.add_argument('--imf', action='store_true', default=True, help='use Intel math library')
    g.add_argument('--show-includes', '-s', action='store_true', help='show printout of included files')
-   g.add_argument('--timeout', metavar='SEC', default=3600*10, help='timeout in seconds')
+   g.add_argument('--timeout', metavar='MSEC', default=60*1000, help='timeout in milliseconds')
 
    ## Database
    g = parser.add_argument_group('Database')
@@ -339,6 +339,7 @@ def main():
    g.add_argument('--no-ers-signal-handlers', action='store_true', help='disable ERS signal handlers')
    g.add_argument('--preloadlib', metavar='LIB', help='preload an arbitrary library')
    g.add_argument('--unique-log-files', '-ul', action='store_true', help='add pid/timestamp to worker log files')
+   g.add_argument('--debug-fork', action='store_true', help='Dump open files/threads during forking')
    g.add_argument('--extra-l1r-robs', metavar='ROBS', type=arg_eval, default=[],
                   help='List of additional ROB IDs that are considered part of the L1 result and passed to the HLT')
    g.add_argument('--ros2rob', metavar='DICT', type=arg_ros2rob, default={},
diff --git a/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_allopts.ref b/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_allopts.ref
index ad3e0dc196f7..eb0a84669509 100644
--- a/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_allopts.ref
+++ b/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_allopts.ref
@@ -3,7 +3,7 @@
     <childLogName>athenaHLT:</childLogName>
     <numForks>4</numForks>
     <InfoServiceLibrary>MonSvcInfoService</InfoServiceLibrary>
-    <softTimeoutFraction>0.9</softTimeoutFraction>
+    <softTimeoutFraction>0.95</softTimeoutFraction>
     <HLTImplementationLibraries>
       <library>TrigPSC</library>
     </HLTImplementationLibraries>
diff --git a/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_noopts.ref b/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_noopts.ref
index 6a9df1bf1532..7e3dfcd525cc 100644
--- a/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_noopts.ref
+++ b/HLT/Trigger/TrigControl/TrigCommon/share/athenaHLT_jo_noopts.ref
@@ -3,12 +3,12 @@
     <childLogName>athenaHLT:</childLogName>
     <numForks>1</numForks>
     <InfoServiceLibrary>MonSvcInfoService</InfoServiceLibrary>
-    <softTimeoutFraction>0.9</softTimeoutFraction>
+    <softTimeoutFraction>0.95</softTimeoutFraction>
     <HLTImplementationLibraries>
       <library>TrigPSC</library>
     </HLTImplementationLibraries>
     <UID>HLTMPPy</UID>
-    <HardTimeout>36000</HardTimeout>
+    <HardTimeout>60000</HardTimeout>
     <finalizeTimeout>120</finalizeTimeout>
     <numberOfEventSlots>1</numberOfEventSlots>
     <DataSourceLibrary>DFDcmEmuBackend</DataSourceLibrary>
-- 
GitLab


From 110587f36e67412543f09d2dbebd842b48b4a6ed Mon Sep 17 00:00:00 2001
From: abarton <Adam.Edward.Barton@cern.ch>
Date: Tue, 19 Mar 2019 13:54:33 +0000
Subject: [PATCH 112/163] Remove atomic property from items protected by mutex

---
 .../InDetReadoutGeometry/SiDetectorElement.h  | 24 +++++++++----------
 .../src/SiDetectorElement.cxx                 | 10 ++------
 2 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
index 3d080a519b12..ec8c48f06842 100644
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
@@ -616,15 +616,15 @@ namespace InDetDD {
 
       // Directions of axes. These are true if the hit/simulation and reconstruction local frames are
       // in the same direction and false if they are opposite.
-      mutable std::atomic_bool m_depthDirection; // Direction of depth axis. 
+      mutable bool m_depthDirection ATLAS_THREAD_SAFE; // Guarded by m_mutex // Direction of depth axis. 
                              // Also direction of readout implant (n+ for pixel, p+ for SCT).
-      mutable std::atomic_bool m_phiDirection;     //
-      mutable std::atomic_bool m_etaDirection;     //
-    
+      mutable bool m_phiDirection ATLAS_THREAD_SAFE;     //
+      mutable bool m_etaDirection ATLAS_THREAD_SAFE;     //
+
       mutable std::atomic_bool m_cacheValid; // Alignment associated quatities.
       mutable std::atomic_bool m_firstTime;
-      mutable std::atomic_bool m_isStereo;
-    
+      mutable bool m_isStereo ATLAS_THREAD_SAFE;
+
       mutable std::recursive_mutex m_mutex;
 
       mutable Amg::Transform3D m_transform ATLAS_THREAD_SAFE; // Guarded by m_mutex
@@ -638,12 +638,12 @@ namespace InDetDD {
       mutable Amg::Vector3D m_center ATLAS_THREAD_SAFE; // Guarded by m_mutex
       mutable HepGeom::Vector3D<double> m_centerCLHEP ATLAS_THREAD_SAFE; // Guarded by m_mutex
 
-      mutable std::atomic<double> m_minZ;
-      mutable std::atomic<double> m_maxZ;
-      mutable std::atomic<double> m_minR;
-      mutable std::atomic<double> m_maxR;
-      mutable std::atomic<double> m_minPhi;
-      mutable std::atomic<double> m_maxPhi;
+      mutable double m_minZ   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+      mutable double m_maxZ   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+      mutable double m_minR   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+      mutable double m_maxR   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+      mutable double m_minPhi ATLAS_THREAD_SAFE;// Guarded by m_mutex
+      mutable double m_maxPhi ATLAS_THREAD_SAFE;// Guarded by m_mutex
 
       CxxUtils::CachedUniquePtr<Trk::Surface> m_surface;
       mutable std::vector<const Trk::Surface*> m_surfaces ATLAS_THREAD_SAFE; // Guarded by m_mutex
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
index bb597d1be118..ded850688698 100644
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
@@ -331,14 +331,8 @@ SiDetectorElement::updateCache() const
   m_phiAxis = Amg::Vector3D(m_phiAxisCLHEP[0],m_phiAxisCLHEP[1],m_phiAxisCLHEP[2]);
   m_etaAxis = Amg::Vector3D(m_etaAxisCLHEP[0],m_etaAxisCLHEP[1],m_etaAxisCLHEP[2]);
 
-  double minR, maxR, minZ, maxZ, minPhi, maxPhi;
-  getExtent(minR, maxR, minZ, maxZ, minPhi, maxPhi);
-  m_minR = minR;
-  m_maxR = maxR;
-  m_minZ = minZ;
-  m_maxZ = maxZ;
-  m_minPhi = minPhi;
-  m_maxPhi = maxPhi;
+  getExtent(m_minR, m_maxR, m_minZ, m_maxZ, m_minPhi, m_maxPhi);
+
 
   // Determin isStereo
   if (firstTimeTmp) {
-- 
GitLab


From 2ed6760734e0c81c09759c30bb0919f9961b36fe Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Tue, 19 Mar 2019 14:46:18 +0100
Subject: [PATCH 113/163] Remove abstract virtual overrides in
 HypoBase/InputMakerBase

There is no need to force `execute`, `initialize` and `finalize` to be
pure virtual as the Algorithm base class already provides sensible defaults.
---
 .../DecisionHandling/DecisionHandling/HypoBase.h          | 4 ----
 .../DecisionHandling/DecisionHandling/InputMakerBase.h    | 8 ++------
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/HypoBase.h b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/HypoBase.h
index dfbb61fcbd84..e7d32cc93072 100644
--- a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/HypoBase.h
+++ b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/HypoBase.h
@@ -23,10 +23,6 @@ This is a base class for HLT Hypos to reduce boilerplate and enforce the common
   virtual ~HypoBase(); 
   /// initialise this base class and renounce input decision key handles
   virtual StatusCode sysInitialize() override;
-  /// execute to be implemented in derived clas
-  virtual StatusCode execute(const EventContext&) const override = 0;
-  virtual StatusCode finalize() override = 0;
-  virtual StatusCode initialize() override = 0;
 
  protected:
   /// methods for derived classes to access handles of the base class input and output decisions; other read/write handles may be implemented by derived classes
diff --git a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
index 10d56a39c905..a2192e627903 100644
--- a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
+++ b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef DECISIONHANDLING_INPUTMAKERBASE_H
@@ -24,11 +24,7 @@ This is a base class for HLT InputMakers to reduce boilerplate and enforce the c
   virtual ~InputMakerBase(); 
   /// initialise this base class and renounce input decision key handles
   virtual StatusCode sysInitialize() override;
-  /// execute to be implemented in derived clas
-  virtual StatusCode execute(const EventContext&) const override = 0;
-  virtual StatusCode finalize() override = 0;
-  virtual StatusCode initialize() override = 0;
-  
+
  protected:
   /// methods for derived classes to access handles of the base class input and output decisions; other read/write handles may be implemented by derived classes
   const SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer>& decisionInputs() const;
-- 
GitLab


From 5204c263d9c7f31270c64a3bb9e7611b1c0719e1 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Tue, 19 Mar 2019 15:06:37 +0100
Subject: [PATCH 114/163] DecisionHandling: cleanup CMakeLists file

---
 .../TrigSteer/DecisionHandling/CMakeLists.txt | 28 ++++++-------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/Trigger/TrigSteer/DecisionHandling/CMakeLists.txt b/Trigger/TrigSteer/DecisionHandling/CMakeLists.txt
index c2ce23558e92..10461fd4b06b 100644
--- a/Trigger/TrigSteer/DecisionHandling/CMakeLists.txt
+++ b/Trigger/TrigSteer/DecisionHandling/CMakeLists.txt
@@ -8,47 +8,37 @@ atlas_subdir( DecisionHandling )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Event/xAOD/xAODTrigger
-                          #GaudiKernel
+                          GaudiKernel
                           Control/AthContainers
                           Control/AthLinks 
                           PRIVATE
                           Control/AthViews
-                          #Control/StoreGate
+                          Control/StoreGate
                           Control/AthenaBaseComps
-                          #Control/CxxUtils
+                          Control/CxxUtils
                           Trigger/TrigConfiguration/TrigConfHLTData
-                          #Trigger/TrigEvent/TrigSteeringEvent
-                          #Trigger/TrigSteer/L1Decoder
                           AtlasTest/TestTools
                           Control/StoreGate
                           Trigger/TrigEvent/TrigSteeringEvent
                           Trigger/TrigTools/TrigTimeAlgs
                           Trigger/TrigMonitoring/TrigCostMonitorMT )
 
-find_package( ROOT )
-find_package( Boost )
-
 atlas_add_library( DecisionHandlingLib
                    src/*.cxx
                    PUBLIC_HEADERS DecisionHandling
-                   LINK_LIBRARIES xAODTrigger GaudiKernel
-                   PRIVATE_LINK_LIBRARIES AthenaBaseComps CxxUtils TrigConfHLTData TrigSteeringEvent TrigTimeAlgsLib )
+                   LINK_LIBRARIES xAODTrigger GaudiKernel TrigSteeringEvent
+                   PRIVATE_LINK_LIBRARIES AthenaBaseComps CxxUtils TrigConfHLTData TrigTimeAlgsLib )
 
 # Component(s) in the package:
 atlas_add_component( DecisionHandling
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES}
-                     ${ROOT_LIBRARIES} GaudiKernel AthViews  AthenaBaseComps CxxUtils xAODTrigger DecisionHandlingLib
-                     )
-
+                     LINK_LIBRARIES DecisionHandlingLib )
 
+# Unit tests:
 atlas_add_test( TrigCompositeUtils_test
                 SOURCES test/TrigCompositeUtils_test.cxx
-                LINK_LIBRARIES  TestTools xAODTrigger DecisionHandlingLib
-                AthContainers SGtests )
+                LINK_LIBRARIES TestTools xAODTrigger DecisionHandlingLib AthContainers SGtests )
 
 atlas_add_test( Combinators_test
                 SOURCES test/Combinators_test.cxx
-                LINK_LIBRARIES  TestTools xAODTrigger DecisionHandlingLib
-                AthContainers )
+                LINK_LIBRARIES TestTools xAODTrigger DecisionHandlingLib AthContainers )
-- 
GitLab


From 3b768443550c47f3d812b16601f09566e2609224 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Tue, 19 Mar 2019 14:12:21 +0000
Subject: [PATCH 115/163] Updating the for loops to use range based

---
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.cxx   | 65 ++++++++-----------
 .../MuonRPC_CnvTools/src/RpcROD_Decoder.h     | 42 ++++++------
 2 files changed, 48 insertions(+), 59 deletions(-)

diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
index ba82e4d2bc14..eedd0ab1794f 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.cxx
@@ -54,58 +54,49 @@ Muon::RpcROD_Decoder::~RpcROD_Decoder() {
 }
 
 StatusCode Muon::RpcROD_Decoder::initialize() {
- 
-
 
   ServiceHandle<IRPCcablingServerSvc> rpc_server("RPCcablingServerSvc", name());
   if (rpc_server.retrieve().isFailure()) {
-	msg(MSG::FATAL) << " Can't get RPCcablingServerSvc " << endmsg;
-	return StatusCode::FAILURE;
-    }
+    ATH_MSG_FATAL("Can't get RPCcablingServerSvc" );
+    return StatusCode::FAILURE;
+  }
   
-    if (StatusCode::SUCCESS != rpc_server->giveCabling(m_cabling)) {
-	msg(MSG::FATAL) << " Can't get RPCcablingSvc from Server" << endmsg;
-	return StatusCode::FAILURE; 
-    }
+  if (StatusCode::SUCCESS != rpc_server->giveCabling(m_cabling)) {
+    ATH_MSG_FATAL("Can't get RPCcablingSvc from Server");
+    return StatusCode::FAILURE; 
+  }
 
-    StatusCode status=StatusCode::SUCCESS;
+  StatusCode status=StatusCode::SUCCESS;
 
 
     // Get the RPC id helper from the detector store
-    status = detStore()->retrieve(m_pRpcIdHelper, "RPCIDHELPER");
-    if (status.isFailure()) {
-	msg(MSG::FATAL) << "Could not get RpcIdHelper !" << endmsg;
-	return StatusCode::FAILURE;
-    } 
-    else {
-	msg(MSG::VERBOSE) << " Found the RpcIdHelper. " << endmsg;
-    }
-  
-    //m_hashfunc = new RpcPadIdHash();
-  
-    if (m_specialROBNumber>0) {
-	msg(MSG::DEBUG) << "Setting the special ROB Number to: 0x" << MSG::hex << m_specialROBNumber
-			<< MSG::dec <<endmsg;
-    }
-
-    //==LBTAG initialize vector and variables for format failure check
-    for(int i=0; i<13; i++) m_RPCcheckfail[i]=0;
-    m_previous=0;
-    m_printerror=0;
-
-    return StatusCode::SUCCESS;
-
+  status = detStore()->retrieve(m_pRpcIdHelper, "RPCIDHELPER");
+  if (status.isFailure()) {
+    ATH_MSG_FATAL("Could not get RpcIdHelper !");
+    return StatusCode::FAILURE;
+  } 
+  else {
+    ATH_MSG_VERBOSE("Found the RpcIdHelper.");
+  }
+
+  if (m_specialROBNumber>0) {
+    ATH_MSG_DEBUG("Setting the special ROB Number to: 0x" << MSG::hex << m_specialROBNumber << MSG::dec );
+  }
+
+  //==LBTAG initialize vector and variables for format failure check
+  for(int i=0; i<13; i++) m_RPCcheckfail[i]=0;
+  m_previous=0;
+  m_printerror=0;
+
+  return StatusCode::SUCCESS;
 }
 
 
 
 StatusCode Muon::RpcROD_Decoder::finalize() {
-    //if(m_hashfunc) delete m_hashfunc;
-  
   //==LBTAG print format failure final statistics
   printcheckformat();
-
-    return StatusCode::SUCCESS;
+  return StatusCode::SUCCESS;
 } 
 
 
diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
index f882e79c570c..93842df2fa9a 100755
--- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
+++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcROD_Decoder.h
@@ -509,25 +509,24 @@ namespace Muon
     if (type==3)
     {
       std::map<Identifier,RpcPad*> mapOfCollections; 
-      std::vector<IdentifierHash>::const_iterator it = collections.begin();
-      for( ; it!=collections.end(); ++it)
-      {
+      // Request to update to range-based for-loop
+      for(const IdentifierHash& it : collections){
 
         // Normally, we would get a write handle and put a lock, but we do not process the decoding in this loop
         // Therefore, we just query the cache via the container and process the hashes which have not been decoded yet
         // Note that this means different threads may decode the same data if processing simultaneously
         // However, only one will be written to the cache using the lock
         
-        bool alreadyPresent = rdoIdc.tryFetch( *it );
+        bool alreadyPresent = rdoIdc.tryFetch( it );
         
         if(alreadyPresent){
-          ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
+          ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(it) << " converting is skipped!");
         }
         else{
-          ATH_MSG_DEBUG ( "Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+          ATH_MSG_DEBUG ( "Created new Pad Collection Hash ID = " << static_cast<unsigned int>(it) );
 
 		      // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
-          RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
+          RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(it), it);
           mapOfCollections[coll->identify()]=coll;
           
 	      }// endif collection not found in the container 
@@ -552,45 +551,44 @@ namespace Muon
 	    }
 
       // All un-decoded collections were decoded successfully, so they are passed back to the IDC
-      for (std::map<Identifier,RpcPad*>::const_iterator it=mapOfCollections.begin(); it!=mapOfCollections.end(); ++it)
-	    {
+      // Request to update to range-based for-loop
+      for(const std::map<Identifier, RpcPad*>::value_type& it : mapOfCollections){
 	      // Get the WriteHandle for this hash but we need to then check if it has already been decoded and
         // added to the event cache for this hash in a different view
-        RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( ((*it).second)->identifyHash() );
+        RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( (it.second)->identifyHash() );
         
         if(lock.alreadyPresent()){
-          ATH_MSG_DEBUG("RpcPad collection with hash " << (int)((*it).second)->identifyHash() << " was already decoded in a parallel view");
+          ATH_MSG_DEBUG("RpcPad collection with hash " << (int)(it.second)->identifyHash() << " was already decoded in a parallel view");
         }
         else{
           // Take the pointer and pass ownership to unique_ptr and pass to the IDC_WriteHandle
-          StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>((*it).second) ) );
+          StatusCode status_lock = lock.addOrDelete( std::move( std::unique_ptr<RpcPad>(it.second) ) );
 
           if(status_lock != StatusCode::SUCCESS)
           {
-            ATH_MSG_ERROR("Failed to add RPC PAD collection to container with hash " << (int)((*it).second)->identifyHash() );
+            ATH_MSG_ERROR("Failed to add RPC PAD collection to container with hash " << (int)(it.second)->identifyHash() );
           }
           else{
-            ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)((*it).second)->identifyHash()<<" to the RpcPad Container | size = "<<((*it).second)->size());
+            ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(it.second)->identifyHash()<<" to the RpcPad Container | size = "<<(it.second)->size());
           }
         }
       }
       return cnv_sc;
     }//endif (type==3)
     
-    std::vector<IdentifierHash>::const_iterator it = collections.begin();
-    for( ; it!=collections.end(); ++it)
-    {
+    // Request to update to range-based for-loop
+    for(const IdentifierHash& it : collections){
       // IDC_WriteHandle
-      RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( (*it) );
+      RpcPadContainer::IDC_WriteHandle lock = rdoIdc.getWriteHandle( it );
 
       if(lock.alreadyPresent() ){
-        ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(*it) << " converting is skipped!");
+        ATH_MSG_DEBUG ( "RPC RDO collection already exist with collection hash = " << static_cast<unsigned int>(it) << " converting is skipped!");
       }
       else{
-        ATH_MSG_VERBOSE(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(*it) );
+        ATH_MSG_VERBOSE(" Created new Pad Collection Hash ID = " << static_cast<unsigned int>(it) );
 
         // create new collection - I should be doing this with unique_ptr but it requires changing downstream functions
-        RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(*it), *it);
+        RpcPad* coll = new RpcPad((m_cabling->padHashFunction())->identifier(it), it);
         
         //convert collection - note case3 will never be used due to statement above
         switch(type)
@@ -620,7 +618,7 @@ namespace Muon
           //report the error condition
         }
         else
-          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(*it)<<" to the RpcPad Container | size = " << coll->size());
+          ATH_MSG_DEBUG("Adding RpcPad collection with hash "<<(int)(it)<<" to the RpcPad Container | size = " << coll->size());
       }
     }
     return cnv_sc;
-- 
GitLab


From 69770b5696db549cf5d10b1cb7f5959555e9bf77 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Wed, 28 Nov 2018 14:14:13 +0100
Subject: [PATCH 116/163] Add new ZeroLifetimePositioner Service

The `ZeroLifetimePositioner` works around the case where a neutral
particle oscillates into its anti-particle in one `GenVertex` then
immediately decays in a second `GenVertex` at the same position and
time. This is currently a problem seen when B0/B0bar (511/-511) particles
with pre-defined oscillations and decays are fed into Geant4, which cannot
currently handle the concept of a zero-lifetime particle.
As Geant4 does not implement any processes for these particles other than
the pre-defined decays currently and the particles are neutral, it is safe
to shift the point at which the particle oscillates into its anti-particle
back along the (straight-line) trajectory a bit. For simplicity halfway
between the production point and the oscillation/decay point has been used.
The decay position is left unchanged.

With this change Geant4 then successfully simulates the decay in the
required position.

After simulation is complete the `ZeroLifetimePositioner` can then be used
to move the oscillation vertex back to the decay vertex position.

Former-commit-id: 3abe0a79af1d016dc1776952305ff54786a9d756
---
 .../BeamEffects/python/BeamEffectsConfig.py   |   5 +
 .../BeamEffects/python/BeamEffectsConfigDb.py |   1 +
 .../src/ZeroLifetimePositioner.cxx            | 120 ++++++++++++++++++
 .../BeamEffects/src/ZeroLifetimePositioner.h  |  50 ++++++++
 .../src/components/BeamEffects_entries.cxx    |   2 +
 .../HepMC_Interfaces/IZeroLifetimePatcher.h   |  45 +++++++
 6 files changed, 223 insertions(+)
 create mode 100644 Simulation/BeamEffects/src/ZeroLifetimePositioner.cxx
 create mode 100644 Simulation/BeamEffects/src/ZeroLifetimePositioner.h
 create mode 100644 Simulation/Interfaces/HepMC_Interfaces/HepMC_Interfaces/IZeroLifetimePatcher.h

diff --git a/Simulation/BeamEffects/python/BeamEffectsConfig.py b/Simulation/BeamEffects/python/BeamEffectsConfig.py
index 4a3fe4346930..237f1a6750a6 100644
--- a/Simulation/BeamEffects/python/BeamEffectsConfig.py
+++ b/Simulation/BeamEffects/python/BeamEffectsConfig.py
@@ -79,6 +79,11 @@ def getCrabKissingVertexPositioner(name="CrabKissingVertexPositioner", **kwargs)
 def getGenEventValidityChecker(name="GenEventValidityChecker", **kwargs):
     return CfgMgr.Simulation__GenEventValidityChecker(name, **kwargs)
 
+def getZeroLifetimePositioner(name="ZeroLifetimePositioner", **kwargs):
+    kwargs.setdefault('ApplyPatch', True)
+    kwargs.setdefault('RemovePatch', True)
+    return CfgMgr.Simulation__ZeroLifetimePositioner(name, **kwargs)
+
 def getGenEventVertexPositioner(name="GenEventVertexPositioner", **kwargs):
     from G4AtlasApps.SimFlags import simFlags
     readVtxPosFromFile = simFlags.VertexOverrideFile.statusOn or simFlags.VertexOverrideEventFile.statusOn
diff --git a/Simulation/BeamEffects/python/BeamEffectsConfigDb.py b/Simulation/BeamEffects/python/BeamEffectsConfigDb.py
index 303491bc8269..5ccdb0682579 100644
--- a/Simulation/BeamEffects/python/BeamEffectsConfigDb.py
+++ b/Simulation/BeamEffects/python/BeamEffectsConfigDb.py
@@ -8,6 +8,7 @@ addTool("BeamEffects.BeamEffectsConfig.getLongBeamspotVertexPositioner",      "L
 addTool("BeamEffects.BeamEffectsConfig.getCrabKissingVertexPositioner",       "CrabKissingVertexPositioner")
 ## GenEvent Manipulators
 addTool("BeamEffects.BeamEffectsConfig.getGenEventValidityChecker",           "GenEventValidityChecker")
+addTool("BeamEffects.BeamEffectsConfig.getZeroLifetimePositioner",            "ZeroLifetimePositioner")
 addTool("BeamEffects.BeamEffectsConfig.getGenEventVertexPositioner",          "GenEventVertexPositioner")
 addTool("BeamEffects.BeamEffectsConfig.getGenEventBeamEffectBooster",         "GenEventBeamEffectBooster")
 addTool("BeamEffects.BeamEffectsConfig.getGenEventRotator",                   "GenEventRotator")
diff --git a/Simulation/BeamEffects/src/ZeroLifetimePositioner.cxx b/Simulation/BeamEffects/src/ZeroLifetimePositioner.cxx
new file mode 100644
index 000000000000..7833a05bfffc
--- /dev/null
+++ b/Simulation/BeamEffects/src/ZeroLifetimePositioner.cxx
@@ -0,0 +1,120 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+// class header include
+#include "ZeroLifetimePositioner.h"
+
+// HepMC includes
+#include "HepMC/GenEvent.h"
+
+// CLHEP includes
+#include "CLHEP/Vector/LorentzVector.h"
+
+#include <limits>
+#include <algorithm>
+
+/** Constructor **/
+Simulation::ZeroLifetimePositioner::ZeroLifetimePositioner( const std::string& name,
+                                                            ISvcLocator* pSvcLocator )
+  : base_class(name, pSvcLocator)
+{
+  declareProperty("ApplyPatch", m_applyPatch, "");
+  declareProperty("RemovePatch", m_removePatch, "");
+  declareProperty("PDGCodesToCheck", m_pdgCodesToCheck, "");
+}
+
+
+/** Athena algtool's Hooks */
+StatusCode  Simulation::ZeroLifetimePositioner::initialize()
+{
+  ATH_MSG_VERBOSE("Initializing ...");
+  for(auto& pdgcode : m_pdgCodesToCheck) {
+    pdgcode = std::abs(pdgcode);
+    ATH_MSG_DEBUG("Will look for verices where " << pdgcode <<
+                  " oscillates into -" << pdgcode << " (and vice versa).");
+  }
+  return StatusCode::SUCCESS;
+}
+
+
+/** Athena algtool's Hooks */
+StatusCode  Simulation::ZeroLifetimePositioner::finalize()
+{
+  ATH_MSG_VERBOSE("Finalizing ...");
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode Simulation::ZeroLifetimePositioner::applyWorkaround(HepMC::GenEvent& ge) const
+{
+  ATH_MSG_DEBUG("applyWorkaround");
+  return this->manipulate(ge, m_applyPatch, false);
+}
+
+
+StatusCode Simulation::ZeroLifetimePositioner::removeWorkaround(HepMC::GenEvent& ge) const
+{
+  ATH_MSG_DEBUG("removeWorkaround");
+  return this->manipulate(ge, false, m_removePatch);
+}
+
+
+/** modifies (displaces) the given GenEvent */
+StatusCode Simulation::ZeroLifetimePositioner::manipulate(HepMC::GenEvent& ge, bool applyPatch, bool removePatch) const
+{
+  // loop over the vertices in the event
+  HepMC::GenEvent::vertex_iterator vtxIt = ge.vertices_begin();
+  const HepMC::GenEvent::vertex_iterator vtxItEnd = ge.vertices_end();
+  const auto pdgCodesBegin = m_pdgCodesToCheck.begin();
+  const auto pdgCodesEnd = m_pdgCodesToCheck.end();
+  for (; vtxIt != vtxItEnd; ++vtxIt) {
+    // quick access:
+    HepMC::GenVertex *curVtx = (*vtxIt);
+    if (curVtx->particles_in_size()!=1 || curVtx->particles_out_size()!=1) { continue; }
+    const int pdgIn=(*(curVtx->particles_in_const_begin()))->pdg_id();
+    const int pdgOut=(*(curVtx->particles_out_const_begin()))->pdg_id();
+    if (pdgIn!=-pdgOut ||
+        std::find(pdgCodesBegin, pdgCodesEnd, std::abs(pdgIn))== pdgCodesEnd) {
+      continue;
+    }
+    HepMC::GenVertex* nextVtx = (*(curVtx->particles_out_const_begin()))->end_vertex();
+    if(!nextVtx) { continue; }
+    ATH_MSG_DEBUG("Found a vertex to correct with incoming PDG code = " << pdgIn);
+    ATH_MSG_VERBOSE("Next Vertex:");
+    if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
+      nextVtx->print();
+    }
+    const HepMC::FourVector &nextVec = nextVtx->position();
+    const CLHEP::HepLorentzVector nextPos( nextVec.x(), nextVec.y(), nextVec.z(), nextVec.t() );
+    ATH_MSG_VERBOSE("Current Vertex:");
+    if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
+      curVtx->print();
+    }
+    if (applyPatch) {
+      HepMC::GenVertex* prevVtx = (*(curVtx->particles_in_const_begin()))->production_vertex();
+      ATH_MSG_VERBOSE("Previous Vertex:");
+      if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
+        prevVtx->print();
+      }
+      const HepMC::FourVector &prevVec = prevVtx->position();
+      const CLHEP::HepLorentzVector prevPos( prevVec.x(), prevVec.y(), prevVec.z(), prevVec.t() );
+      CLHEP::HepLorentzVector newPos = 0.5*(prevPos+nextPos);
+      curVtx->set_position(newPos);
+      ATH_MSG_DEBUG("Revised current Vertex");
+      if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
+        curVtx->print();
+      }
+    }
+    if (removePatch) {
+      CLHEP::HepLorentzVector newPos = nextPos;
+      curVtx->set_position(newPos);
+      ATH_MSG_DEBUG("Revised current Vertex");
+      if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
+        curVtx->print();
+      }
+    }
+  }
+
+  return StatusCode::SUCCESS;
+}
diff --git a/Simulation/BeamEffects/src/ZeroLifetimePositioner.h b/Simulation/BeamEffects/src/ZeroLifetimePositioner.h
new file mode 100644
index 000000000000..cb99d37579e7
--- /dev/null
+++ b/Simulation/BeamEffects/src/ZeroLifetimePositioner.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// ZeroLifetimePositioner.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef BEAMEFFECTS_ZEROLIFETIMEPOSITIONER_H
+#define BEAMEFFECTS_ZEROLIFETIMEPOSITIONER_H 1
+
+// FrameWork includes
+#include "GaudiKernel/ToolHandle.h"
+#include "AthenaBaseComps/AthService.h"
+#include "HepMC_Interfaces/IZeroLifetimePatcher.h"
+#include <vector>
+
+namespace Simulation {
+
+  /** @class ZeroLifetimePositioner
+
+      This tool works around the issue of zero-lifetime particles in Geant4.
+
+     */
+  class ZeroLifetimePositioner : public extends<AthService, Simulation::IZeroLifetimePatcher> {
+
+    public:
+      /** Constructor with parameters */
+      ZeroLifetimePositioner( const std::string& name, ISvcLocator* pSvcLocator );
+
+      /** Athena algtool's Hooks */
+      StatusCode  initialize() override final;
+      StatusCode  finalize() override final;
+
+      /** Applies the workaround for zero-lifetime particles to the GenEvent */
+      virtual StatusCode applyWorkaround(HepMC::GenEvent& ge) const override final;
+
+      /** Removes the workaround for zero-lifetime particles from the GenEvent */
+      virtual StatusCode removeWorkaround(HepMC::GenEvent& ge) const override final;
+
+    private:
+      StatusCode manipulate(HepMC::GenEvent& ge, bool applyPatch, bool removePatch) const;
+      bool m_applyPatch{false};
+      bool m_removePatch{false};
+      std::vector<int> m_pdgCodesToCheck{511};
+  };
+
+}
+
+#endif //> !BEAMEFFECTS_ZEROLIFETIMEPOSITIONER_H
diff --git a/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx b/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx
index 1b960765bbaa..019e319d30a7 100644
--- a/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx
+++ b/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx
@@ -1,4 +1,5 @@
 #include "../GenEventValidityChecker.h"
+#include "../ZeroLifetimePositioner.h"
 #include "../GenEventVertexPositioner.h"
 #include "../VertexBeamCondPositioner.h"
 #include "../LongBeamspotVertexPositioner.h"
@@ -7,6 +8,7 @@
 #include "../GenEventBeamEffectBooster.h"
 #include "../GenEventRotator.h"
 #include "../BeamEffectsAlg.h"
+DECLARE_COMPONENT( Simulation::ZeroLifetimePositioner )
 DECLARE_COMPONENT( Simulation::GenEventValidityChecker )
 DECLARE_COMPONENT( Simulation::GenEventVertexPositioner )
 DECLARE_COMPONENT( Simulation::VertexBeamCondPositioner )
diff --git a/Simulation/Interfaces/HepMC_Interfaces/HepMC_Interfaces/IZeroLifetimePatcher.h b/Simulation/Interfaces/HepMC_Interfaces/HepMC_Interfaces/IZeroLifetimePatcher.h
new file mode 100644
index 000000000000..85d8416be6c6
--- /dev/null
+++ b/Simulation/Interfaces/HepMC_Interfaces/HepMC_Interfaces/IZeroLifetimePatcher.h
@@ -0,0 +1,45 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef HEPMC_INTERFACES_IZEROLIFETIMEPATCHER_H
+#define HEPMC_INTERFACES_IZEROLIFETIMEPATCHER_H 1
+
+// Gaudi
+// framework includes
+#include "GaudiKernel/IInterface.h"
+#include "GaudiKernel/StatusCode.h"
+
+namespace HepMC {
+    class GenEvent;
+}
+
+namespace Simulation {
+
+  /**
+   @class IZeroLifetimePatcher
+
+   Interface for a service which works around the issue of zero-lifetime particles in Geant4.
+
+   */
+
+  class IZeroLifetimePatcher : virtual public IInterface {
+     public:
+
+       /** Virtual destructor */
+       virtual ~IZeroLifetimePatcher(){}
+
+       /// Creates the InterfaceID and interfaceID() method
+       DeclareInterfaceID(IZeroLifetimePatcher, 1, 0);
+
+       /** Applies the workaround for zero-lifetime particles to the GenEvent */
+       virtual StatusCode applyWorkaround(HepMC::GenEvent& ge) const = 0;
+
+       /** Removes the workaround for zero-lifetime particles from the GenEvent */
+       virtual StatusCode removeWorkaround(HepMC::GenEvent& ge) const = 0;
+
+  };
+
+} // end of namespace
+
+#endif // HEPMC_INTERFACES_IZEROLIFETIMEPATCHER_H
-- 
GitLab


From 640709367fc2ba20ad3254690d4b95035f4ddbb5 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Wed, 28 Nov 2018 14:15:37 +0100
Subject: [PATCH 117/163] Update SimKernel to use ZeroLifetimePositioner

In QS sim jobs only, after the `TruthEvent` is created from
`BeamTruthEvent`, but before it is passed to the `InputConverter`,
`ZeroLifetimePositioner` is used to apply the work-around
for zero lifetime B0/B0bar particles.
After simulation is complete `ZeroLifetimePositioner` is used to remove
the work-around.

Former-commit-id: 343c3561f508fe6111ff22c8667de34ccf01eae2
---
 .../ISF/ISF_Config/python/ISF_MainConfig.py   |  1 +
 .../test/test_FullG4_Sim_tf_configuration.py  |  2 +-
 .../ISF_Core/ISF_Algorithms/CMakeLists.txt    |  1 +
 .../ISF_Core/ISF_Algorithms/src/SimKernel.cxx | 22 +++++++++++++++-
 .../ISF_Core/ISF_Algorithms/src/SimKernel.h   |  6 ++++-
 .../ISF_Algorithms/src/SimKernelMT.cxx        | 25 +++++++++++++++++--
 .../ISF_Core/ISF_Algorithms/src/SimKernelMT.h |  6 ++++-
 7 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
index 491be34fbd81..b54968a2e937 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
@@ -282,6 +282,7 @@ def getKernel_FullG4_LongLived(name="ISF_Kernel_FullG4_LongLived", **kwargs):
     kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultLongLivedGeant4Selector' ] )
     kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'  ] )
     kwargs.setdefault("InputConverter"              ,   'ISF_LongLivedInputConverter'          )
+    kwargs.setdefault("QuasiStablePatcher"          , 'ZeroLifetimePositioner')
     return getKernel_GenericG4Only(name, **kwargs)
 
 ############## Simulator: FullG4MT_longLived ###############
diff --git a/Simulation/ISF/ISF_Config/test/test_FullG4_Sim_tf_configuration.py b/Simulation/ISF/ISF_Config/test/test_FullG4_Sim_tf_configuration.py
index 99b8da866a5f..eb67c644ec2b 100755
--- a/Simulation/ISF/ISF_Config/test/test_FullG4_Sim_tf_configuration.py
+++ b/Simulation/ISF/ISF_Config/test/test_FullG4_Sim_tf_configuration.py
@@ -150,7 +150,7 @@ class TestFullG4(unittest.TestCase):
 
 
     def test___SimKernel_ListOfSetProperties(self):
-        expected_list = ['BeamPipeSimulationSelectors', 'CaloSimulationSelectors', 'CavernSimulationSelectors', 'DetStore', 'DoCPUMonitoring', 'DoMemoryMonitoring', 'EventFilterTools', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'IDSimulationSelectors', 'InputConverter', 'InputHardScatterCollection', 'MSSimulationSelectors', 'MemoryMonitoringTool', 'NeededResources', 'OutputHardScatterTruthCollection', 'ParticleBroker', 'TruthRecordService']
+        expected_list = ['BeamPipeSimulationSelectors', 'CaloSimulationSelectors', 'CavernSimulationSelectors', 'DetStore', 'DoCPUMonitoring', 'DoMemoryMonitoring', 'EventFilterTools', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'IDSimulationSelectors', 'InputConverter', 'InputHardScatterCollection', 'MSSimulationSelectors', 'MemoryMonitoringTool', 'NeededResources', 'OutputHardScatterTruthCollection', 'ParticleBroker', 'QuasiStablePatcher', 'TruthRecordService']
         simkernel = self._job_config_dict['ISF_Kernel_FullG4']
         actual_list = simkernel.keys()
         expected_property_value_sorted = sorted(expected_list)
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/CMakeLists.txt b/Simulation/ISF/ISF_Core/ISF_Algorithms/CMakeLists.txt
index 10a753b01328..ec6902ffea88 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/CMakeLists.txt
@@ -19,6 +19,7 @@ atlas_depends_on_subdirs(
    TileCalorimeter/TileSimEvent
    MuonSpectrometer/MuonSimEvent
    Generators/GeneratorObjects
+   Simulation/Interfaces/HepMC_Interfaces
    Simulation/ISF/ISF_Core/ISF_Event
    Simulation/ISF/ISF_Core/ISF_Interfaces
    Tools/PmbCxxUtils
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.cxx b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.cxx
index c101a89fb33e..fe67e031f7fd 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.cxx
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ISF_Algs includes
@@ -42,6 +42,7 @@ ISF::SimKernel::SimKernel( const std::string& name, ISvcLocator* pSvcLocator ) :
   m_inputConverter("",name),
   m_particleBroker("ISF_ParticleBroker", name),
   m_truthRecordSvc("ISF_TruthRecordSvc", name),
+  m_qspatcher("", name),
   m_doMemMon(true),
   m_memMon("MemMonitoringTool"),
   m_memUsageEvts(1000),
@@ -85,6 +86,8 @@ ISF::SimKernel::SimKernel( const std::string& name, ISvcLocator* pSvcLocator ) :
     declareProperty("CaloSimulationSelectors"    , m_simSelectors[AtlasDetDescr::fAtlasCalo]     );
     declareProperty("MSSimulationSelectors"      , m_simSelectors[AtlasDetDescr::fAtlasMS]       );
     declareProperty("CavernSimulationSelectors"  , m_simSelectors[AtlasDetDescr::fAtlasCavern]   );
+    // Quasi-stable particle sim
+    declareProperty("QuasiStablePatcher", m_qspatcher);
     // event filter
     declareProperty("EventFilterTools"           , m_eventFilters                      );
     // tuning parameters
@@ -138,6 +141,10 @@ StatusCode ISF::SimKernel::initialize()
     ATH_CHECK ( initSimSvcs(m_simSelectors[geoID]) );
   }
 
+  if(!m_qspatcher.empty()) {
+    ATH_CHECK(m_qspatcher.retrieve());
+  }
+
   // initialize all the EventFilterTools
   ATH_CHECK ( m_eventFilters.retrieve() );
   ATH_MSG_INFO( "The following Event Filters are defined:");
@@ -439,6 +446,13 @@ StatusCode ISF::SimKernel::execute()
       return StatusCode::FAILURE;
   }
 
+  // Step 4a: Remove QS patch if required
+  if(!m_qspatcher.empty()) {
+    for (const auto& currentGenEvent : *m_outputHardScatterTruth ) {
+      ATH_CHECK(m_qspatcher->removeWorkaround(*currentGenEvent));
+    }
+  }
+
   // Step 5: Check Any Filters
   ToolHandleArray<IEventFilterTool>::iterator eventFilter(m_eventFilters.begin());
   const ToolHandleArray<IEventFilterTool>::iterator endOfEventFilters(m_eventFilters.end());
@@ -489,6 +503,12 @@ StatusCode ISF::SimKernel::prepareInput(SG::ReadHandle<McEventCollection>& input
   // create copy
   outputTruth = CxxUtils::make_unique<McEventCollection>(*inputTruth);
 
+  // Apply QS patch if required
+  if(!m_qspatcher.empty()) {
+    for (const auto& currentGenEvent : *outputTruth ) {
+      ATH_CHECK(m_qspatcher->applyWorkaround(*currentGenEvent));
+    }
+  }
   ATH_CHECK( m_inputConverter->convert(*outputTruth, simParticles, HepMcParticleLink::find_enumFromKey(outputTruth.name())) );
 
   return StatusCode::SUCCESS;
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.h b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.h
index 3854d8a831ee..c69bc315dfad 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.h
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernel.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef ISF_ALGS_SIMKERNEL_H
@@ -25,6 +25,7 @@
 
 // McEventCollection
 #include "GeneratorObjects/McEventCollection.h"
+#include "HepMC_Interfaces/IZeroLifetimePatcher.h"
 
 // forward declarations
 namespace PMonUtils {
@@ -103,6 +104,9 @@ namespace ISF {
     /** The Simulation Selector Chains */
     ToolHandleArray<ISimulationSelector> m_simSelectors[AtlasDetDescr::fNumAtlasRegions];
 
+    /** Quasi-Stable Particle Simulation Patcher */
+    ServiceHandle<Simulation::IZeroLifetimePatcher> m_qspatcher;
+
     /** The Event Filters */
     ToolHandleArray<IEventFilterTool>    m_eventFilters;
 
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.cxx b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.cxx
index ff5f2eade0c8..f260f7507f37 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.cxx
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -25,6 +25,7 @@ ISF::SimKernelMT::SimKernelMT( const std::string& name, ISvcLocator* pSvcLocator
     m_inputEvgenKey(),
     m_outputTruthKey(),
     m_inputConverter("", name),
+    m_qspatcher("", name),
     m_simulationTools(), // FIXME make private
     m_particleKillerTool(""), // FIXME make private
     m_geoIDSvc("", name),
@@ -39,6 +40,8 @@ ISF::SimKernelMT::SimKernelMT( const std::string& name, ISvcLocator* pSvcLocator
     declareProperty("InputConverter",
                     m_inputConverter,
                     "Input McEventCollection->ISFParticleContainer conversion service.");
+    // Quasi-stable particle sim
+    declareProperty("QuasiStablePatcher", m_qspatcher);
 
     // routing tools
     declareProperty("BeamPipeSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasForward] );
@@ -123,6 +126,10 @@ StatusCode ISF::SimKernelMT::initialize() {
 
   ATH_CHECK( m_inputConverter.retrieve() );
 
+  if(!m_qspatcher.empty()) {
+    ATH_CHECK(m_qspatcher.retrieve());
+  }
+
   ATH_CHECK( m_geoIDSvc.retrieve() );
 
   return StatusCode::SUCCESS;
@@ -147,7 +154,14 @@ StatusCode ISF::SimKernelMT::execute() {
 
   // copy input Evgen collection to output Truth collection
   SG::WriteHandle<McEventCollection> outputTruth(m_outputTruthKey);
-  outputTruth = CxxUtils::make_unique<McEventCollection>(*inputEvgen);
+  outputTruth = std::make_unique<McEventCollection>(*inputEvgen);
+
+  // Apply QS patch if required
+  if(!m_qspatcher.empty()) {
+    for (const auto& currentGenEvent : *outputTruth ) {
+      ATH_CHECK(m_qspatcher->applyWorkaround(*currentGenEvent));
+    }
+  }
 
   // read and convert input
   ISFParticleContainer simParticles; // particles for ISF simulation
@@ -208,6 +222,13 @@ StatusCode ISF::SimKernelMT::execute() {
     }
   }
 
+  // Remove QS patch if required
+  if(!m_qspatcher.empty()) {
+    for (const auto& currentGenEvent : *outputTruth ) {
+      ATH_CHECK(m_qspatcher->removeWorkaround(*currentGenEvent));
+    }
+  }
+
   return StatusCode::SUCCESS;
 }
 
diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.h b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.h
index 371391711844..5ffabeec76d1 100644
--- a/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.h
+++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/src/SimKernelMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -23,6 +23,7 @@
 
 // McEventCollection
 #include "GeneratorObjects/McEventCollection.h"
+#include "HepMC_Interfaces/IZeroLifetimePatcher.h"
 
 // Framework includes
 #include "AthenaBaseComps/AthAlgorithm.h"
@@ -86,6 +87,9 @@ private:
   /// Input converter service (from Generator->ISF particle types)
   ServiceHandle<IInputConverter> m_inputConverter;
 
+  /// Quasi-Stable Particle Simulation Patcher
+  ServiceHandle<Simulation::IZeroLifetimePatcher> m_qspatcher;
+
   /// Simulation Tools
   ToolHandleArray<ISimulatorTool> m_simulationTools;
 
-- 
GitLab


From ef95584b6eef624151c0094a8edab60d10cbc8dd Mon Sep 17 00:00:00 2001
From: Siarhei Harkusha <Siarhei.Harkusha@cern.ch>
Date: Tue, 19 Mar 2019 16:48:14 +0100
Subject: [PATCH 118/163] TileTPCnv: Avoid using auto keyword

---
 .../TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h  | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h b/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
index b763231e8d4f..5a4e3c764fb4 100644
--- a/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
+++ b/TileCalorimeter/TileSvc/TileTPCnv/TileTPCnv/T_TilePoolContainerCnv.h
@@ -74,14 +74,14 @@ public:
       throw std::runtime_error("Failed to initialize Tile mutable Container");
     }
 
-    for(const auto& element : vec) {
-      if (mutableContainer->push_back(m_elementCnv.createTransient(&element, log)).isFailure()) {
+    for( pers_const_iterator it = vec.begin(), iEnd = vec.end(); it != iEnd; ++it) {
+      if (mutableContainer->push_back(m_elementCnv.createTransient(&(*it), log)).isFailure()) {
         throw std::runtime_error("Failed to add Tile element to Collection");
       }
     }
 
-    auto hashes = mutableContainer->GetAllCurrentHashes();
-    for (auto hash : hashes) {
+    std::vector<IdentifierHash> hashes = mutableContainer->GetAllCurrentHashes();
+    for (const IdentifierHash hash : hashes) {
       Collection* coll = mutableContainer->indexFindPtr(hash);
       auto newColl = std::make_unique<Collection>(std::move(*coll));
       if (trans->addOrDelete(std::move(newColl), hash).isFailure()) {
-- 
GitLab


From 943e2ab9be0781b19ab88cda6a5aa89871c9154d Mon Sep 17 00:00:00 2001
From: Teng Jian Khoo <teng.jian.khoo@cern.ch>
Date: Tue, 19 Mar 2019 18:07:45 +0000
Subject: [PATCH 119/163] Updates to JetRecConfig

---
 .../python/JetCalibToolsConfig.py             | 25 ++++---
 .../Root/JetConstitFourMomTool.cxx            | 22 ++++--
 .../JetMomentTools/Root/JetForwardJvtTool.cxx |  3 +
 .../Root/JetTrackSumMomentsTool.cxx           |  2 +-
 .../python/JetMomentToolsConfig.py            |  9 +--
 .../JetRecConfig/python/ConstModHelpers.py    |  7 +-
 .../Jet/JetRecConfig/python/JetDefinition.py  | 13 ++--
 .../Jet/JetRecConfig/python/JetRecConfig.py   | 67 ++++++++-----------
 .../JetRecConfig/python/StandardJetMods.py    |  4 +-
 .../Jet/JetRecConfig/share/JetRecTestCfg.py   | 65 +++++++++---------
 .../JetRecTools/python/JetRecToolsConfig.py   |  7 +-
 11 files changed, 117 insertions(+), 107 deletions(-)

diff --git a/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py b/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
index 727e82cd7699..464ba9a61381 100644
--- a/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
+++ b/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
@@ -24,23 +24,23 @@ all = ['getJetCalibTool']
 pflowcontexts = {
     "T0":("JES_MC15cRecommendation_PFlow_Aug2016_rel21.config","00-04-77","JetArea_Residual_EtaJES"),
     # Omit smearing, to avoid any efficiency loss
-    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_PFlow_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC"),
+    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_PFlow_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_InSitu"),
 }
 
 topocontexts = {
     "T0":("JES_MC15cRecommendation_May2016_rel21.config","00-04-77","JetArea_Residual_EtaJES"),
     # Placeholder from a vague approximation of the 2017 setup?
-    "Trigger":("JES_MC15cRecommendation_May2016_Trigger.config","00-04-77","JetArea_Residual_EtaJES"),
+    "Trigger":("JES_MC15cRecommendation_May2016_Trigger.config","00-04-77","JetArea_Residual_EtaJES_InSitu"),
     # Omit smearing, to avoid any efficiency loss
-    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_EMTopo_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC"),
+    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_EMTopo_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_InSitu"),
 }
 
 rscanlc2 = {
-    "RScanLatest":("JES_MC16Recommendation_Rscan2LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC")
+    "RScanLatest":("JES_MC16Recommendation_Rscan2LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_InSitu")
 }
 
 rscanlc6 = {
-    "RScanLatest":("JES_MC16Recommendation_Rscan6LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC")
+    "RScanLatest":("JES_MC16Recommendation_Rscan6LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_InSitu")
 }
 
 fatjetcontexts = {
@@ -95,12 +95,15 @@ def getJetCalibTool(jetcollection, context, data_type, calibseq = ""):
     try:
         configfile, calibarea, calibseq_def = jetcontexts[context]
         calibseq_tmp = calibseq if calibseq else calibseq_def
-        if data_type == 'data' and calibseq_tmp.endswith("GSC") and jetcollection in hasInSitu:
-            if calibseq_tmp == calibseq_def:
-                calibseq_tmp += "_InSitu"
-            # May not be strictly necessary if already checked in JCT
-            elif not calibseq_tmp.endswith("InSitu"):
-                jetcaliblog.warning("Calibration of jets requested in data without in situ calibration.")
+        # Check that the calib sequence requests something sensible for the in situ calibration
+        # Leave other checks for the tool code.
+        # Might need to specialise if we decide MC trigger jets should also have in situ.
+        if calibseq_tmp.endswith("InSitu"):
+            if data_type == 'data':
+                if not jetcollection in hasInSitu:
+                    raise ValueError("In situ calibration does not exist for {0}, context {1}".format(jetcollection,context))
+            else:
+                raise ValueError("In situ calibration requested for MC on {0}, context {1}".format(jetcollection,context))
         configfile_tmp = configfile
         if data_type == "afii" and jetcollection in af2configs.keys():
             configfile_tmp = af2configs[jetcollection]
diff --git a/Reconstruction/Jet/JetMomentTools/Root/JetConstitFourMomTool.cxx b/Reconstruction/Jet/JetMomentTools/Root/JetConstitFourMomTool.cxx
index 04bb13d1b49e..c34e88a44ca9 100644
--- a/Reconstruction/Jet/JetMomentTools/Root/JetConstitFourMomTool.cxx
+++ b/Reconstruction/Jet/JetMomentTools/Root/JetConstitFourMomTool.cxx
@@ -119,13 +119,15 @@ int JetConstitFourMomTool::modify(xAOD::JetContainer& jets) const {
 	 citer != constituents.end(constscale); ++citer) {
       for (size_t iScale=0; iScale<nScales; ++iScale) {
 	// If altJetScales is set, do nothing in the constituent loop.
-	if(m_altJetScales.empty()) {
+	if(m_altJetScales[iScale].empty()) {
 	  if(altCollections[iScale]) { // get the index-parallel alternative constituent
 	    const xAOD::CaloCluster* cluster = static_cast<const xAOD::CaloCluster*>((*altCollections[iScale])[(*citer)->rawConstituent()->index()]);
-      xAOD::CaloCluster::State currentState= static_cast<xAOD::CaloCluster::State> (m_altConstitScales[iScale]);
-      constitFourVecs[iScale] += xAOD::JetFourMom_t( cluster->pt(currentState), cluster->eta(currentState), 
-                                                     cluster->phi(currentState), cluster->m(currentState) );
+	    xAOD::CaloCluster::State currentState= static_cast<xAOD::CaloCluster::State> (m_altConstitScales[iScale]);
+	    constitFourVecs[iScale] += xAOD::JetFourMom_t( cluster->pt(currentState), cluster->eta(currentState), 
+							   cluster->phi(currentState), cluster->m(currentState) );
+	    ATH_MSG_VERBOSE("Add cluster with pt " << cluster->pt() << " to constit fourvec for scale " << m_jetScaleNames[iScale] );
 	  } else { // add the constituent 4-mom
+	    ATH_MSG_VERBOSE("Add raw constituent with pt " << (*citer)->pt() << " to constit fourvec for scale " << m_jetScaleNames[iScale] );
 	    constitFourVecs[iScale] += **citer;
 	  }
 	}
@@ -133,16 +135,26 @@ int JetConstitFourMomTool::modify(xAOD::JetContainer& jets) const {
     } // loop over clusters
 
     // Now we can set the scales from the various four-vecs we have calculated
+    ATH_MSG_VERBOSE("Jet has "
+		 << " pt: " << jet->pt()
+		 << ", eta: " << jet->eta()
+		 << ", phi: " << jet->phi());
     for (size_t iScale=0; iScale<nScales; ++iScale) {
-      if(m_altJetScales.empty()) {
+      if(!m_altJetScales[iScale].empty()) {
 	// Easy case first -- just copy the momentum state
 	constitFourVecs[iScale] = jet->jetP4(m_altJetScales[iScale]);
       }
+      ATH_MSG_VERBOSE("Scale " << m_jetScaleNames[iScale] << " has "
+		   << " pt: " << constitFourVecs[iScale].Pt()
+		   << ", eta: " << constitFourVecs[iScale].Eta()
+		   << ", phi: " << constitFourVecs[iScale].Phi());
       if(m_isDetectorEtaPhi[iScale]) {
 	const static SG::AuxElement::Accessor<float> acc_modEta("DetectorEta");
 	const static SG::AuxElement::Accessor<float> acc_modPhi("DetectorPhi");
 	acc_modEta(*jet) = constitFourVecs[iScale].Eta();
 	acc_modPhi(*jet) = constitFourVecs[iScale].Phi();
+      ATH_MSG_VERBOSE("Detector eta: " << constitFourVecs[iScale].Eta()
+		   << ", phi: " << constitFourVecs[iScale].Phi());
       } else {
 	jet->setJetP4(m_jetScaleNames[iScale], constitFourVecs[iScale]);
       }
diff --git a/Reconstruction/Jet/JetMomentTools/Root/JetForwardJvtTool.cxx b/Reconstruction/Jet/JetMomentTools/Root/JetForwardJvtTool.cxx
index db5038e06d11..26ec8189505f 100644
--- a/Reconstruction/Jet/JetMomentTools/Root/JetForwardJvtTool.cxx
+++ b/Reconstruction/Jet/JetMomentTools/Root/JetForwardJvtTool.cxx
@@ -20,6 +20,7 @@
 
     static SG::AuxElement::Decorator<char>  isHS("isJvtHS");
     static SG::AuxElement::Decorator<char>  isPU("isJvtPU");
+    static SG::AuxElement::Decorator<float>  fjvt_dec("fJvt");
 
   ///////////////////////////////////////////////////////////////////
   // Public methods:
@@ -84,10 +85,12 @@
     m_pileupMomenta.clear();
     for(const auto& jetF : jetCont) {
       (*m_Dec_out)(*jetF) = 1;
+      fjvt_dec(*jetF) = 0;
       if (!forwardJet(jetF)) continue;
       if (m_pileupMomenta.size()==0) calculateVertexMomenta(&jetCont);
       double fjvt = getFJVT(jetF)/jetF->pt();
       if (fjvt>m_fjvtThresh) (*m_Dec_out)(*jetF) = 0;
+      fjvt_dec(*jetF) = fjvt;
     }
     return 0;
   }
diff --git a/Reconstruction/Jet/JetMomentTools/Root/JetTrackSumMomentsTool.cxx b/Reconstruction/Jet/JetMomentTools/Root/JetTrackSumMomentsTool.cxx
index 7444edd38a6e..5b90d1afd215 100644
--- a/Reconstruction/Jet/JetMomentTools/Root/JetTrackSumMomentsTool.cxx
+++ b/Reconstruction/Jet/JetMomentTools/Root/JetTrackSumMomentsTool.cxx
@@ -19,7 +19,7 @@ JetTrackSumMomentsTool::JetTrackSumMomentsTool(const std::string& name)
     : JetModifierBase(name)
       // , m_vertexContainer("")
     , m_assocTracksName("")
-    , m_htsel("")
+    , m_htsel("",this)
     , m_vertexContainer_key("")
     , m_tva_key("")
 {
diff --git a/Reconstruction/Jet/JetMomentTools/python/JetMomentToolsConfig.py b/Reconstruction/Jet/JetMomentTools/python/JetMomentToolsConfig.py
index a30b13be9b97..67c2fab050e1 100644
--- a/Reconstruction/Jet/JetMomentTools/python/JetMomentToolsConfig.py
+++ b/Reconstruction/Jet/JetMomentTools/python/JetMomentToolsConfig.py
@@ -50,16 +50,13 @@ def getConstitFourMomTool(jetdef):
         pass
     ###
     cfourmom = JetMomentToolsConf.JetConstitFourMomTool("constitfourmom_{0}".format(jetdef.basename))
-    if "LCTopo" in jetdef.basename:
+    if "LCTopo" in jetdef.basename or "EMTopo" in jetdef.basename:
         cfourmom.JetScaleNames = ["DetectorEtaPhi"]
         cfourmom.AltConstitColls = ["CaloCalTopoClusters"]
         cfourmom.AltConstitScales = [CaloClusterStates["CALIBRATED"]]
         cfourmom.AltJetScales = [""]
-    elif "EMTopo" in jetdef.basename:
-        cfourmom.JetScaleNames = ["DetectorEtaPhi","JetLCScaleMomentum"]
-        cfourmom.AltConstitColls = ["CaloCalTopoClusters","LCOriginTopoClusters" if "Origin" in jetdef.inputdef.modifiers else "CaloCalTopoClusters"]
-        cfourmom.AltConstitScales = [CaloClusterStates["UNCALIBRATED"],CaloClusterStates["CALIBRATED"]]
-        cfourmom.AltJetScales = ["",""]
+    # Drop the LC-calibrated four-mom for EMTopo jets as we only wanted it as a possibility
+    # in MET CST calculations but never used it
     elif "EMPFlow" in jetdef.basename:
         cfourmom.JetScaleNames = ["DetectorEtaPhi"]
         cfourmom.AltConstitColls = [""]
diff --git a/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py b/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
index 11ff4959d654..109f9fdf622d 100644
--- a/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
+++ b/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
@@ -44,9 +44,7 @@ ConstModConfigs = {
     "SK":     {}
 }
 
-def ConstitModCfg(inputtype,sequence,suffix=""):
-    components = ComponentAccumulator()
-
+def ConstitModAlg(inputtype,sequence,suffix=""):
     # May wish to pass an empty sequence for regular PFlow
     modlist = []
     if inputtype == xAODType.ParticleFlow:
@@ -102,6 +100,5 @@ def ConstitModCfg(inputtype,sequence,suffix=""):
 
     constitmodalg = JetRecConf.JetAlgorithm("jetalg_{0}".format(modseq.getName()))
     constitmodalg.Tools = [modseq]
-    components.addEventAlgo( constitmodalg )
 
-    return components
+    return constitmodalg
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
index dfcb2b44acb4..978024c80eb4 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
@@ -178,7 +178,8 @@ class JetGhost(object):
 class JetDefinition(object):
     def __init__(self, algorithm, radius, inputdef,
                  ptmin=5000., ptminfilter=5000.,
-                 ghostdefs=[], modifiers=[]):
+                 ghostdefs=[], modifiers=[],
+                 extrainputs=[]):
 
         # Should add some type checking here
         # Could use JetContainerInfo conversion
@@ -192,11 +193,13 @@ class JetDefinition(object):
         self.defineName()
 
         self.ptmin = ptmin # The pt down to which FastJet is run
-        self.ptminfilter = ptminfilter # The pt above which xAOD::Jets are kept
+        self.ptminfilter = ptminfilter # The pt above which xAOD::Jets are kept, may include calibration
         if ptmin<1000. or ptminfilter<1000.:
             jetlog.warning("Very low filter threshold set: ptmin {0:.0f} MeV, ptminfilter {1:.0f} MeV. Are you sure?")
-        self.ghostdefs = ghostdefs
-        self.modifiers = modifiers
+
+        self.ghostdefs = ghostdefs     # Objects to ghost-associate
+        self.modifiers = modifiers     # Tools to modify the jet
+        self.extrainputs = extrainputs # Any extra input dependencies
 
         # Should this be a derived class?
         self.grooming = None
@@ -208,7 +211,7 @@ class JetDefinition(object):
         pass
 
     def __hash__(self):
-        return hash((self.__radius,self.__inputdef,self.ptmin,self.ptminfilter,str(self.ghostdefs),str(self.modifiers)))
+        return hash((self.__radius,self.__inputdef,self.ptmin,self.ptminfilter,str(self.ghostdefs),str(self.modifiers),str(extradeps)))
 
     def __eq__(self,rhs):
         return self.__hash__() == rhs.__hash__()
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
index 197b76c5e823..1d7904371b4a 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
@@ -41,11 +41,15 @@ __all__ = ["xAOD", "JetRecCfg", "resolveDependencies"]
 # peeking such that we don't attempt to reproduce stuff that's already
 # in the input file
 def JetRecCfg(jetdef, configFlags, jetnameprefix="",jetnamesuffix=""):
-    components = ComponentAccumulator()
-
     jetsfullname = jetnameprefix+jetdef.basename+jetnamesuffix+"Jets"
     jetlog.info("Setting up to find {0}".format(jetsfullname))
 
+    sequencename = jetsfullname
+
+    components = ComponentAccumulator()
+    from AthenaCommon.AlgSequence import AthSequencer
+    components.addSequence( AthSequencer(sequencename) )
+
     deps = resolveDependencies( jetdef )
     
     # Schedule the various input collections.
@@ -54,20 +58,21 @@ def JetRecCfg(jetdef, configFlags, jetnameprefix="",jetnamesuffix=""):
     # 
     # To facilitate running in serial mode, we also prepare
     # the constituent PseudoJetGetter here (needed for rho)
-    inputcomps, constitpjkey = JetInputCfgAndConstitPJName(deps["inputs"], configFlags)
+    inputcomps, constitpjkey = JetInputCfgAndConstitPJName(deps["inputs"], configFlags, sequenceName=jetsfullname)
     components.merge(inputcomps)
     pjs = [constitpjkey]
 
     # Schedule the ghost PseudoJetGetterAlgs
     for ghostdef in deps["ghosts"]:
-        ghostpjcomps, ghostpjkey = GhostPJGCfgAndOutputName( ghostdef )
-        components.merge( ghostpjcomps )
+        ghostpjalg = GhostPJGAlg( ghostdef )
+        components.addEventAlgo( ghostpjalg, sequencename )
+        ghostpjkey = ghostpjalg.PJGetter.OutputContainer
         pjs.append( ghostpjkey )
 
     # Generate a JetAlgorithm to run the jet finding and modifiers
     # (via a JetRecTool instance).
-    reccomps = JetAlgorithmCfg(jetsfullname, jetdef, pjs, deps["mods"])
-    components.merge(reccomps)
+    jetrecalg = getJetAlgorithm(jetsfullname, jetdef, pjs, deps["mods"])
+    components.addEventAlgo(jetrecalg, sequencename)
 
     jetlog.info("Scheduled JetAlgorithm instance \"jetalg_{0}\"".format(jetsfullname))
     return components
@@ -86,6 +91,7 @@ def resolveDependencies(jetdef):
     # We just collect everything and sort out the types later
     prereqs = set() # Resolve duplication as we go
     prereqs.update( getConstitPrereqs( jetdef.inputdef ) )
+    prereqs.update( set( ["input:"+dep for dep in jetdef.extrainputs] ) )
 
     # Add the Filter modifier if desired (usually it is)
     # It might be simpler to just eliminate ptminfilter
@@ -200,30 +206,18 @@ def expandPrereqs(reqtype,prereqs):
 #
 # This includes constituent modifications, track selection, copying of
 # input truth particles and event density calculations
-def JetInputCfgAndConstitPJName(inputdeps, configFlags):
+def JetInputCfgAndConstitPJName(inputdeps, configFlags, sequenceName):
     jetlog.info("Setting up jet inputs.")
-    components = ComponentAccumulator()
+    components = ComponentAccumulator(sequenceName)
 
     jetlog.info("Inspecting first input file")
     # Get the list of SG keys for the first input file
     # I consider it silly to run on a set of mixed file types
     firstinput = configFlags.Input.Files[0]
     import os, pickle
-    # Cache details in a pickle file
-    cachename = "fpcache.{0}.pkl".format(firstinput)
-    fileinfo = None
-    if os.path.isfile(cachename):
-        jetlog.debug("Reading file info from cache \"{0}\"".format(cachename))
-        fpcache = open(cachename)
-        fileinfo = pickle.load(fpcache)
-    else:
-        from FilePeeker.FilePeeker import PeekFiles
-        fileinfo = PeekFiles([firstinput])[firstinput]
-        fpcache = open(cachename,'w')
-        pickle.dump(fileinfo,fpcache)
-        jetlog.debug("Wrote file info to cache \"{0}\"".format(cachename))
+    from AthenaConfiguration.AutoConfigFlags import GetFileMD
     # PeekFiles returns a dict for each input file
-    filecontents = fileinfo["SGKeys"].split(' ')
+    filecontents = GetFileMD([firstinput])["SGKeys"].split(' ')
     
     constit = inputdeps[0]
     # Truth and track particle inputs are handled later
@@ -236,12 +230,13 @@ def JetInputCfgAndConstitPJName(inputdeps, configFlags):
             # May need to generate constituent modifier sequences to
             # produce the input collection
             import ConstModHelpers
-            constitcomps = ConstModHelpers.ConstitModCfg(constit.basetype,constit.modifiers)
-            components.merge( constitcomps )
+            constitalg = ConstModHelpers.ConstitModAlg(constit.basetype,constit.modifiers)
+            components.addEventAlgo(constitalg)
 
     # Schedule the constituent PseudoJetGetterAlg
-    constitpjcomps, constitpjkey = ConstitPJGCfgAndOutputName( constit )
-    components.merge( constitpjcomps )
+    constitpjalg = ConstitPJGAlg( constit )
+    constitpjkey = constitpjalg.PJGetter.OutputContainer
+    components.addEventAlgo( constitpjalg )
 
     # Track selection and vertex association kind of go hand in hand, though it's not
     # completely impossible that one might want one and not the other
@@ -340,8 +335,7 @@ def getGhostPrereqs(ghostdef):
         prereqs = ["input:JetInputTruthParticles"]
     return prereqs
 
-def ConstitPJGCfgAndOutputName(basedef):
-    ca = ComponentAccumulator()
+def ConstitPJGAlg(basedef):
     jetlog.debug("Getting PseudoJetAlg for label {0} from {1}".format(basedef.label,basedef.inputname))
     # 
     getter = JetRecConf.PseudoJetGetter("pjg_"+basedef.label,
@@ -356,11 +350,9 @@ def ConstitPJGCfgAndOutputName(basedef):
         "pjgalg_"+basedef.label,
         PJGetter = getter
         )
-    ca.addEventAlgo( pjgalg )
-    return ca, getter.OutputContainer
+    return pjgalg
 
-def GhostPJGCfgAndOutputName(ghostdef):
-    ca = ComponentAccumulator()
+def GhostPJGAlg(ghostdef):
     label = "Ghost"+ghostdef.inputtype
     kwargs = {
         "OutputContainer":    "PseudoJet"+label,
@@ -395,16 +387,14 @@ def GhostPJGCfgAndOutputName(ghostdef):
         "pjgalg_"+label,
         PJGetter = getter
         )
-    ca.addEventAlgo( pjgalg )
-    return ca, getter.OutputContainer
+    return pjgalg
 
 ########################################################################
 # Function for configuring the jet algorithm and builders, given the
 # set of dependencies
 #
-def JetAlgorithmCfg(jetname, jetdef, pjs, modlist):
+def getJetAlgorithm(jetname, jetdef, pjs, modlist):
     jetlog.debug("Configuring JetAlgorithm \"jetalg_{0}\"".format(jetname))
-    components = ComponentAccumulator()
 
     builder = getJetBuilder()
 
@@ -421,9 +411,8 @@ def JetAlgorithmCfg(jetname, jetdef, pjs, modlist):
 
     jetalg = JetRecConf.JetAlgorithm("jetalg_"+jetname)
     jetalg.Tools = [rectool]
-    components.addEventAlgo(jetalg)
 
-    return components
+    return jetalg
     
 
 ########################################################################
diff --git a/Reconstruction/Jet/JetRecConfig/python/StandardJetMods.py b/Reconstruction/Jet/JetRecConfig/python/StandardJetMods.py
index eeaf1f00e57a..f285cdf171ca 100644
--- a/Reconstruction/Jet/JetRecConfig/python/StandardJetMods.py
+++ b/Reconstruction/Jet/JetRecConfig/python/StandardJetMods.py
@@ -75,8 +75,8 @@ jetmomentmods = {
     "TrackMoments":    JetModifier("JetTrackMomentsTool", "trkmoms",
                                    helperfn=JetMomentToolsConfig.getTrackMomentsTool,
                                    prereqs = [ "input:JetSelectedTracks","input:JetTrackVtxAssoc","ghost:Track" ]),
-    "TrackSumMoments": JetModifier("JetTrackMomentsTool", "trksummoms",
-                                   helperfn=JetMomentToolsConfig.getTrackMomentsTool,
+    "TrackSumMoments": JetModifier("JetTrackSumMomentsTool", "trksummoms",
+                                   helperfn=JetMomentToolsConfig.getTrackSumMomentsTool,
                                    prereqs = [ "input:JetSelectedTracks","input:JetTrackVtxAssoc","ghost:Track" ]),
     }
 jetmoddict.update(jetmomentmods)
diff --git a/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py b/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
index fdbbdcb49bf2..e2e5b9f4572e 100644
--- a/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
+++ b/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
@@ -6,11 +6,10 @@ from pprint import pprint, pformat
 from AthenaCommon import Logging
 jetlog = Logging.logging.getLogger("testJetRecDeps")
 
-def JetRecTestCfg(configFlags,args):
+def JetRecTestCfg(jetdefs,configFlags,args):
 
-    jetlist = configFlags.JetRec.Definitions
     if args.printDependencies:
-        for jetdef in jetlist:
+        for jetdef in jetdefs:
             deps = JetRecConfig.resolveDependencies(jetdef)
             jetlog.info("Dumping dependency dict for {0}".format(jetdef))
             depstr = pformat(deps)
@@ -19,8 +18,8 @@ def JetRecTestCfg(configFlags,args):
     if args.printAccumulators:
         jetlog.info("Printing component accumulators for each jet collection")
     jetcas = []
-    for jetdef in jetlist:
-       jetcomps = JetRecConfig.JetRecCfg(jetdef,configFlags,jetnameprefix=configFlags.JetRec.Prefix)
+    for jetdef in jetdefs:
+       jetcomps = JetRecConfig.JetRecCfg(jetdef,configFlags,jetnameprefix="New")
        if args.printAccumulators:
            jetcomps.printConfig(withDetails=args.verboseAccumulators,summariseProps=True)
        jetcas.append(jetcomps)
@@ -33,14 +32,14 @@ def JetRecTestCfg(configFlags,args):
 
     return components
 
-def DefineJetCollections():
+def DefineJetCollections(configFlags):
 
     # Here we define the jet configurations we want to build
     # These mod and ghost lists should go in a common module
     standardrecomods = ["Width","TrackMoments","TrackSumMoments","JVF","JVT","OriginSetPV",
                         "CaloEnergies","LArHVCorr"]
     clustermods = ["ECPSFrac","ClusterMoments"]
-    truthmods = ["PartonTruthLabel","TruthPartonDR","JetDeltaRLabel:5000"]
+    truthmods = ["PartonTruthLabel","TruthPartonDR","JetDeltaRLabel:5000"] if configFlags.Input.isMC else []
 
     from JetRecConfig.JetDefinition import JetGhost
     ghostlist = ["Track","MuonSegment","Truth"]
@@ -56,32 +55,34 @@ def DefineJetCollections():
 
     ########################################################################
     # First a demonstration of just building jets using standard definitions
-    from JetRecConfig.StandardJetDefs import AntiKt4LCTopo, AntiKt4EMPFlow, AntiKt4Truth, AntiKt4TruthWZ
+    from JetRecConfig.StandardJetDefs import AntiKt4EMTopo, AntiKt4EMPFlow, AntiKt4Truth, AntiKt4TruthWZ
 
     # This updates the original jet definitions, so might be a little risky
     # in derivation code. Safer would be to always deepcopy into a local variable.
-    AntiKt4LCTopo.ptminfilter = 15e3
-    AntiKt4LCTopo.modifiers = ["Calib:T0:mc","Sort"] + standardrecomods + clustermods + truthmods
-    AntiKt4LCTopo.ghostdefs = standardghosts
-    #AntiKt4LCTopo.modifiers = ["Calib:AnalysisLatest:mc"]
+    AntiKt4EMTopo.ptminfilter = 15e3
+    AntiKt4EMTopo.modifiers = ["Calib:T0:mc","Sort"] + standardrecomods + clustermods + truthmods
+    AntiKt4EMTopo.ghostdefs = standardghosts
+    #AntiKt4EMTopo.modifiers = ["Calib:AnalysisLatest:mc"]
 
     AntiKt4EMPFlow.ptminfilter = 10e3
     AntiKt4EMPFlow.modifiers = ["Calib:T0:mc","Sort"] + standardrecomods + truthmods
     AntiKt4EMPFlow.ghostdefs = standardghosts
     #AntiKt4EMPFlow.modifiers = ["Calib:AnalysisLatest:mc"]
 
-    from copy import deepcopy
     AntiKt4Truth.ptminfilter = 2e3
+    AntiKt4Truth.extrainputs = ["EventDensity"]
 
     AntiKt4TruthWZ.ptminfilter = 2e3
+    AntiKt4TruthWZ.extrainputs = ["EventDensity"]
 
     ########################################################################
     # Now we define our own definitions
     from JetRecConfig.JetDefinition import JetConstit, JetDefinition, xAODType
-    LCTopoCSSK = JetConstit(xAODType.CaloCluster, ["LC","Origin","CS","SK"])
-    AntiKt4LCTopoCSSK = JetDefinition("AntiKt",0.4,LCTopoCSSK,ptmin=2e3,ptminfilter=2e3)
-    AntiKt4LCTopoCSSK.modifiers = ["ConstitFourMom"] + standardrecomods + clustermods + truthmods
-    AntiKt4LCTopoCSSK.ghostdefs = standardghosts
+    EMTopoCSSK = JetConstit(xAODType.CaloCluster, ["EM","Origin","CS","SK"])
+    AntiKt4EMTopoCSSK = JetDefinition("AntiKt",0.4,EMTopoCSSK,ptmin=2e3,ptminfilter=2e3)
+    AntiKt4EMTopoCSSK.modifiers = ["ConstitFourMom"] + standardrecomods + clustermods + truthmods
+    AntiKt4EMTopoCSSK.ghostdefs = standardghosts
+    AntiKt4EMTopoCSSK.extrainputs = ["EventDensity"]
 
     ########################################################################
     # We can also copy and modify the standard ones
@@ -96,13 +97,16 @@ def DefineJetCollections():
     AntiKt4EMPFlowCSSK.ptmin = 2e3
     AntiKt4EMPFlowCSSK.ptminfilter = 2e3
     AntiKt4EMPFlowCSSK.ghostdefs = standardghosts
+    AntiKt4EMPFlowCSSK.extrainputs = ["EventDensity"]
 
-    jetdefs = [#AntiKt4Truth,
-               #AntiKt4TruthWZ,
-               AntiKt4LCTopo,
+    jetdefs = [AntiKt4EMTopo,
                AntiKt4EMPFlow,
-               AntiKt4LCTopoCSSK,
+               AntiKt4EMTopoCSSK,
                AntiKt4EMPFlowCSSK]
+    if configFlags.Input.isMC:
+        jetdefs += [AntiKt4Truth,
+                    AntiKt4TruthWZ]
+    
     return jetdefs
 
 if __name__=="__main__":
@@ -152,15 +156,13 @@ if __name__=="__main__":
         ConfigFlags.Scheduler.ShowControlFlow = True
         ConfigFlags.Concurrency.NumConcurrentEvents = args.nThreads
 
-    ########################################################################
-    # Define flags steering the jet reco config
-    jetdefs = DefineJetCollections()
-    ConfigFlags.addFlag("JetRec.Definitions",jetdefs)
-    ConfigFlags.addFlag("JetRec.Prefix","New")
-
     # Prevent the flags from being modified
     ConfigFlags.lock()
 
+    ########################################################################
+    # Define flags steering the jet reco config
+    jetdefs = DefineJetCollections(ConfigFlags)
+
     # Get a ComponentAccumulator setting up the fundamental Athena job
     from AthenaConfiguration.MainServicesConfig import MainServicesThreadedCfg 
     cfg=MainServicesThreadedCfg(ConfigFlags) 
@@ -170,7 +172,7 @@ if __name__=="__main__":
     cfg.merge(PoolReadCfg(ConfigFlags))
 
     # Add the components from our jet reconstruction job
-    cfg.merge(JetRecTestCfg(ConfigFlags,args))
+    cfg.merge(JetRecTestCfg(jetdefs,ConfigFlags,args))
 
     # # build eventinfo attribute list
     # from OutputStreamAthenaPool.OutputStreamAthenaPoolConf import EventInfoAttListTool, EventInfoTagBuilder
@@ -180,12 +182,12 @@ if __name__=="__main__":
     # Write what we produced to AOD
     # First define the output list
     outputlist = ["EventInfo#*"]
-    originaljets = ["AntiKt4EMPFlowJets"]
+    originaljets = ["AntiKt4EMPFlowJets","AntiKt4EMTopoJets"]
     for jetcoll in originaljets:
         outputlist += ["xAOD::JetContainer#"+jetcoll,
                        "xAOD::JetAuxContainer#"+jetcoll+"Aux."]
-    for jetdef in ConfigFlags.JetRec.Definitions:
-        key = "{0}{1}Jets".format(ConfigFlags.JetRec.Prefix,jetdef.basename)
+    for jetdef in jetdefs:
+        key = "{0}{1}Jets".format("New",jetdef.basename)
         outputlist += ["xAOD::JetContainer#"+key,
                        "xAOD::JetAuxContainer#"+key+"Aux."]
 
@@ -193,6 +195,7 @@ if __name__=="__main__":
     from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
     cfg.merge(OutputStreamCfg(ConfigFlags,"xAOD",ItemList=outputlist))
     pprint( cfg.getEventAlgo("OutputStreamxAOD").ItemList )
+    cfg.getEventAlgo("OutputStreamxAOD").ForceRead = True
   
     # Optionally, print the contents of the store every event
     cfg.getService("StoreGateSvc").Dump = args.dumpSG
diff --git a/Reconstruction/Jet/JetRecTools/python/JetRecToolsConfig.py b/Reconstruction/Jet/JetRecTools/python/JetRecToolsConfig.py
index e52d62176e5b..eacd0f5521ba 100644
--- a/Reconstruction/Jet/JetRecTools/python/JetRecToolsConfig.py
+++ b/Reconstruction/Jet/JetRecTools/python/JetRecToolsConfig.py
@@ -22,8 +22,11 @@ def getTrackSelTool():
     # Track selector needs its own hierarchical config getter in JetRecTools?
     idtrackselloose = InDetTrackSelectionToolConf.InDet__InDetTrackSelectionTool(
         "idtrackselloose",
-        CutLevel = "Loose",
-        minPt    = 500
+        CutLevel         = "Loose",
+        minPt            = 500,
+        UseTrkTrackTools = False,
+        Extrapolator     = "",
+        TrackSummaryTool = ""
     )
     jettrackselloose = JetRecToolsConf.JetTrackSelectionTool(
         "jettrackselloose",
-- 
GitLab


From cb25088c46b5931c2b247b1893a96cd715f454c6 Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Tue, 19 Mar 2019 22:19:48 +0100
Subject: [PATCH 120/163] Importing external decay functionality to master

---
 .../G4ExternalDecay/CMakeLists.txt            |  23 +-
 .../G4ExternalDecay/Pythia8ForDecays.h        |  61 ++++
 .../G4ExternalDecay/PythiaForDecays.h         |   2 +-
 .../G4ExternalDecay/src/Pythia8ForDecays.cxx  | 313 ++++++++++++++++++
 .../G4ExternalDecay/src/PythiaForDecays.cxx   |   6 +-
 5 files changed, 399 insertions(+), 6 deletions(-)
 create mode 100644 Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/Pythia8ForDecays.h
 create mode 100644 Simulation/G4Extensions/G4ExternalDecay/src/Pythia8ForDecays.cxx

diff --git a/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt b/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
index 9d4f767e05b2..ec216d48fad2 100644
--- a/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
+++ b/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
@@ -15,15 +15,34 @@ find_package( Geant4 )
 find_package( HepMC )
 find_package( Lhapdf )
 find_package( Pythia6 )
+find_package( Pythia8 )
 find_package( XercesC )
+find_package( HEPUtils )
+find_package( MCUtils )
+
+set( extra_includes )
+set( extra_libs )
+if( HEPUTILS_FOUND )
+   list( APPEND extra_includes ${HEPUTILS_INCLUDE_DIRS} )
+   list( APPEND extra_libs ${HEPUTILS_LIBRARIES} )
+endif()
+if( MCUTILS_FOUND )
+   list( APPEND extra_includes ${MCUTILS_INCLUDE_DIRS} )
+   list( APPEND extra_libs ${MCUTILS_LIBRARIES} )
+endif()
+if( HEPMC_FOUND )
+   list( APPEND extra_includes ${HEPMC_INCLUDE_DIRS} )
+   list( APPEND extra_libs ${HEPMC_LIBRARIES} )
+endif()
+
 
 # Component(s) in the package:
 atlas_add_library( G4ExternalDecay
                    src/*.cxx
                    PUBLIC_HEADERS G4ExternalDecay
-                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${PYTHIA6_INCLUDE_DIRS} ${LHAPDF_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS}
+                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${PYTHIA6_INCLUDE_DIRS} ${LHAPDF_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${PYTHIA8_INCLUDE_DIRS} ${extra_includes}
                    PRIVATE_INCLUDE_DIRS ${HEPMC_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA6_LIBRARIES} ${LHAPDF_LIBRARIES} ${GEANT4_LIBRARIES} Pythia_iLib
+                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA6_LIBRARIES} ${PYTHIA8_LIBRARIES} ${LHAPDF_LIBRARIES} ${GEANT4_LIBRARIES} Pythia_iLib Pythia8_iLib ${extra_libs}
                    PRIVATE_LINK_LIBRARIES ${HEPMC_LIBRARIES} )
 
diff --git a/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/Pythia8ForDecays.h b/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/Pythia8ForDecays.h
new file mode 100644
index 000000000000..a782ed4ef76e
--- /dev/null
+++ b/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/Pythia8ForDecays.h
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Abused from Geant4 version of Pythai6.hh from extended examples
+
+#ifndef Pythia8ForDecays_H
+#define Pythia8ForDecays_H
+
+// For std::vector
+#include <vector>
+// G4 track function parameter
+#include "G4Track.hh"
+// For std::pair
+#include <utility>
+// For all the various Pythia8 classes used here
+#include "Pythia8_i/Pythia8_i.h"
+// For unique_ptr and once flag
+#include <memory>
+#include <mutex>
+
+class G4DynamicParticle;
+class G4ParticleDefinition;
+
+class Pythia8ForDecays
+{
+  public:
+
+   virtual ~Pythia8ForDecays() = default;
+
+   static Pythia8ForDecays *Instance();
+
+   /// Function that decays the RHadron; returns products in G4 format
+   void Py1ent(const G4Track&, std::vector<G4DynamicParticle*> &);
+
+  private:
+
+   /// Private constructor for singleton pattern
+   Pythia8ForDecays();
+
+   /// Helper for getting G4ParticleDefinition from PDG ID
+   G4ParticleDefinition* GetParticleDefinition(const int) const;
+
+   /// Fill a Pythia8 event with the information from a G4Track
+   void fillParticle(const G4Track&, Pythia8::Event& event) const;
+
+   /// Get the quarks from a gluino R-hadron.  From Pythia8 code.
+   std::pair<int,int> fromIdWithGluino( int idRHad, Pythia8::Rndm* rndmPtr) const;
+   std::pair<int,int> fromIdWithSquark( int idRHad) const;
+   bool isGluinoRHadron(int pdgId) const;
+
+   /// My own class; singleton pattern; thread safe for future-proofing
+   static std::unique_ptr<Pythia8ForDecays> s_instance;
+   static std::once_flag m_onceFlag;
+
+   /// The instance of Pythia8 that will do the work
+   std::unique_ptr<Pythia8::Pythia> m_pythia;
+};
+
+#endif
+
diff --git a/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h b/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
index 1bb31915b474..672bd88993c1 100644
--- a/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
+++ b/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
@@ -24,7 +24,7 @@ class PythiaForDecays
 
    void ImportParticles( std::vector<G4DynamicParticle*> &);
 
-   void DecayRhadrons(int pdgid);
+   void DecayRHadron(int pdgid);
 
   private:
 
diff --git a/Simulation/G4Extensions/G4ExternalDecay/src/Pythia8ForDecays.cxx b/Simulation/G4Extensions/G4ExternalDecay/src/Pythia8ForDecays.cxx
new file mode 100644
index 000000000000..1bac7b120da5
--- /dev/null
+++ b/Simulation/G4Extensions/G4ExternalDecay/src/Pythia8ForDecays.cxx
@@ -0,0 +1,313 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Abused from Pythia6.cc in Geant4 extended examples
+
+// My own class definition
+#include "G4ExternalDecay/Pythia8ForDecays.h"
+
+// Helper functions for Pythia8 and Pythia8 classes
+#include "Pythia8_i/Pythia8_i.h"
+
+// Pythia8 RHadrons code that we call into
+#include "Pythia8/RHadrons.h"
+
+// HepMC for translation into format Pythia likes
+#include "HepMC/IO_HEPEVT.h"
+#include "HepMC/GenEvent.h"
+#include "HepMC/GenParticle.h"
+
+// G4 classes for translation into G4 format
+#include "G4ParticleDefinition.hh"
+#include "G4ParticleTable.hh"
+#include "G4ThreeVector.hh"
+#include "TLorentzVector.h"
+#include "MCUtils/HepMCUtils.h"
+
+// STL includes
+#include <cstdlib>
+#include <cstring>
+#include <cmath>
+#include <fstream>
+
+std::unique_ptr<Pythia8ForDecays> Pythia8ForDecays::s_instance(nullptr);
+std::once_flag Pythia8ForDecays::m_onceFlag;
+
+Pythia8ForDecays* Pythia8ForDecays::Instance() {
+  std::call_once(m_onceFlag,
+        [] {
+            s_instance.reset(new Pythia8ForDecays);
+    });
+  return s_instance.get();
+}
+
+Pythia8ForDecays::Pythia8ForDecays()
+  {
+  // Pythia instance where RHadrons can decay
+  std::string docstring = Pythia8_i::xmlpath();
+  m_pythia = std::make_unique<Pythia8::Pythia>(docstring);
+  m_pythia->readString("SLHA:file = SLHA_INPUT.DAT");
+  m_pythia->readString("ProcessLevel:all = off");
+  m_pythia->readString("Init:showChangedSettings = off");
+  m_pythia->readString("RHadrons:allow = on");
+  m_pythia->readString("RHadrons:allowDecay = on");
+  m_pythia->readString("RHadrons:probGluinoball = 0.1");
+  m_pythia->readString("PartonLevel:FSR = off");
+  m_pythia->readString("Init:showAllParticleData = on");
+
+  // Process the file of commands left for us by the python layer
+  std::string line;
+  std::ifstream command_stream ("PYTHIA8_COMMANDS.TXT");
+  while(getline(command_stream,line)){
+    // Leaving it to the top-level to get this file right
+    m_pythia->readString(line);
+  }
+  command_stream.close();
+
+  m_pythia->init();
+
+}
+
+G4ParticleDefinition* Pythia8ForDecays::GetParticleDefinition(const int pdgEncoding) const
+{
+  G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
+  G4ParticleDefinition* particleDefinition(nullptr);
+  if (pdgEncoding != 0) particleDefinition = particleTable->FindParticle(pdgEncoding);
+  return particleDefinition;
+}
+
+
+std::pair<int,int> Pythia8ForDecays::fromIdWithSquark( int idRHad) const
+{
+
+  // Find squark flavour content.
+  int idRSb            = m_pythia->settings.mode("RHadrons:idSbottom");
+  int idRSt            = m_pythia->settings.mode("RHadrons:idStop");
+  int idLight = (abs(idRHad) - 1000000) / 10;
+  int idSq    = (idLight < 100) ? idLight/10 : idLight/100;
+  int id1     = (idSq == 6) ? idRSt : idRSb;
+  if (idRHad < 0) id1 = -id1;
+
+  // Find light (di)quark flavour content.
+  int id2     =  (idLight < 100) ? idLight%10 : idLight%100;
+  if (id2 > 10) id2 = 100 * id2 + abs(idRHad)%10;
+  if ((id2 < 10 && idRHad > 0) || (id2 > 10 && idRHad < 0)) id2 = -id2;
+
+  // Done.
+  return std::make_pair( id1, id2);
+
+}
+
+// TODO: Would be nice for this to be a public function in Pythia8::RHadrons.hh
+std::pair<int,int> Pythia8ForDecays::fromIdWithGluino( int idRHad, Pythia8::Rndm* rndmPtr) const
+{
+  // Find light flavour content of R-hadron.
+  int idLight = (abs(idRHad) - 1000000) / 10;
+  int id1, id2, idTmp, idA, idB, idC;
+  double diquarkSpin1RH = 0.5;
+
+  // Gluinoballs: split g into d dbar or u ubar.
+  if (idLight < 100) {
+    id1 = (rndmPtr->flat() < 0.5) ? 1 : 2;
+    id2 = -id1;
+
+  // Gluino-meson: split into q + qbar.
+  } else if (idLight < 1000) {
+    id1 = (idLight / 10) % 10;
+    id2 = -(idLight % 10);
+    // Flip signs when first quark of down-type.
+    if (id1%2 == 1) {
+      idTmp = id1;
+      id1   = -id2;
+      id2   = -idTmp;
+    }
+
+  // Gluino-baryon: split to q + qq (diquark).
+  // Pick diquark at random, except if c or b involved.
+  } else {
+    idA = (idLight / 100) % 10;
+    idB = (idLight / 10) % 10;
+    idC = idLight % 10;
+    double rndmQ = 3. * rndmPtr->flat();
+    if (idA > 3) rndmQ = 0.5;
+    if (rndmQ < 1.) {
+      id1 = idA;
+      id2 = 1000 * idB + 100 * idC + 3;
+      if (idB != idC && rndmPtr->flat() > diquarkSpin1RH) id2 -= 2;
+    } else if (rndmQ < 2.) {
+      id1 = idB;
+      id2 = 1000 * idA + 100 * idC + 3;
+      if (idA != idC && rndmPtr->flat() > diquarkSpin1RH) id2 -= 2;
+    } else {
+      id1 = idC;
+      id2 = 1000 * idA + 100 * idB +3;
+      if (idA != idB && rndmPtr->flat() > diquarkSpin1RH) id2 -= 2;
+    }
+  }
+  // Flip signs for anti-R-hadron.
+  if (idRHad < 0) {
+    idTmp = id1;
+    id1   = -id2;
+    id2   = -idTmp;
+  }
+
+  // Done.
+  return std::make_pair( id1, id2);
+
+}
+
+/// Add a G4Track to a Pythia8 event to make it a single-particle gun. The particle must be a colour singlet.
+/// Input: particle, Pythia8 event
+void Pythia8ForDecays::fillParticle(const G4Track& aTrack, Pythia8::Event& event) const
+{
+  // Reset event record to allow for new event.
+  event.reset();
+
+  // Select particle mass; where relevant according to Breit-Wigner.
+  double mm = aTrack.GetDynamicParticle()->GetMass();
+
+  // Store the particle in the event record.
+  event.append( aTrack.GetDefinition()->GetPDGEncoding(), 1, 0, 0, aTrack.GetMomentum().x()/CLHEP::GeV, aTrack.GetMomentum().y()/CLHEP::GeV,
+                aTrack.GetMomentum().z()/CLHEP::GeV, aTrack.GetDynamicParticle()->GetTotalEnergy()/CLHEP::GeV, mm/CLHEP::GeV);
+  // Note: this function returns an int, but we don't need or use its output
+}
+
+bool Pythia8ForDecays::isGluinoRHadron(int pdgId) const{
+  // Checking what kind of RHadron this is based on the digits in its PDGID
+  const unsigned short digitValue_q1 = MCUtils::PID::_digit(MCUtils::PID::Location::nq1,pdgId);
+  const unsigned short digitValue_l = MCUtils::PID::_digit(MCUtils::PID::Location::nl,pdgId);
+
+  // Gluino R-Hadrons have the form 109xxxx or 1009xxx
+  if (digitValue_l == 9 || (digitValue_l==0 && digitValue_q1 == 9) ){
+    // This is a gluino R-Hadron
+    return true;
+  }
+
+  // Special case : R-gluinoball
+  if (pdgId==1000993) return true;
+
+  // This is not a gluino R-Hadron (probably a squark R-Hadron)
+  return false;
+
+}
+
+void Pythia8ForDecays::Py1ent(const G4Track& aTrack, std::vector<G4DynamicParticle*> & particles)
+{
+
+  // Get members from Pythia8 instance where RHadrons can decay
+  Pythia8::Event& event      = m_pythia->event;
+  Pythia8::ParticleData& pdt = m_pythia->particleData;
+
+  // Use pythiaDecay information to fill event with the input particle
+  fillParticle(aTrack, event);
+
+  // Copy and paste of RHadron decay code
+  int    iRNow  = 1;
+  int    idRHad = event[iRNow].id();
+  double mRHad  = event[iRNow].m();
+  int    iR0    = 0;
+  int    iR2    = 0;
+
+  bool isTriplet = !isGluinoRHadron(idRHad);
+
+  // Find flavour content of squark or gluino R-hadron.
+  std::pair<int,int> idPair = (isTriplet) ? fromIdWithSquark( idRHad) : fromIdWithGluino( idRHad, &(m_pythia->rndm));
+  int id1 = idPair.first;
+  int id2 = idPair.second;
+
+  // Sharing of momentum: the squark/gluino should be restored
+  // to original mass, but error if negative-mass spectators.
+  int idRSb            = m_pythia->settings.mode("RHadrons:idSbottom");
+  int idRSt            = m_pythia->settings.mode("RHadrons:idStop");
+  int idRGo            = m_pythia->settings.mode("RHadrons:idGluino");
+  int idLight = (abs(idRHad) - 1000000) / 10;
+  int idSq    = (idLight < 100) ? idLight/10 : idLight/100;
+  int idRSq     = (idSq == 6) ? idRSt : idRSb;
+
+  // Handling R-Hadrons with anti-squarks
+  idRSq = idRSq * std::copysign(1, idRHad);
+
+  int idRBef = isTriplet ? idRSq : idRGo;
+
+  // Mass of the underlying sparticle
+  double mRBef = pdt.mSel(idRBef);
+
+  // Fraction of the RHadron mass given by the sparticle
+  double fracR = mRBef / mRHad;
+  int counter=0;
+  while (fracR>=1.){
+    if (counter==10){
+      G4cout << "Needed more than 10 attempts with constituent " << idRBef << " mass (" << mRBef << " above R-Hadron " << idRHad << " mass " << mRHad << G4endl;
+    } else if (counter>100){
+      G4cout << "Pythia8ForDecays::Py1ent ERROR   Failed >100 times. Constituent " << idRBef << " mass (" << mRBef << " above R-Hadron " << idRHad << " mass " << mRHad << G4endl;
+      return;
+    }
+    mRBef = pdt.mSel(idRBef);
+    fracR = mRBef / mRHad;
+    counter++;
+  }
+
+  // Squark case
+  if(isTriplet){
+    int col    = (event[idRBef].col() != 0) ? event.nextColTag() : 0;
+    int tmpSparticleColor = id1>0 ? col : 0;
+    int tmpSparticleAnticolor = id1>0 ? 0 : col;
+
+    // Store the constituents of a squark R-hadron.
+
+    // Sparticle
+    // (id, status, mother1, mother2, daughter1, daughter2, col, acol, px, py, pz, e, m=0., scaleIn=0., polIn=9.)
+    iR0 = event.append( id1, 106, iRNow, 0, 0, 0, tmpSparticleColor, tmpSparticleAnticolor, fracR * event[iRNow].p(), fracR * mRHad, 0.);
+    // Spectator quark
+    iR2 = event.append( id2, 106, iRNow, 0, 0, 0, tmpSparticleAnticolor, tmpSparticleColor, (1. - fracR) * event[iRNow].p(), (1. - fracR) * mRHad, 0.);
+  }
+  // Gluino case
+  else{
+    double mOffsetCloudRH = 0.2; // could be read from internal data?
+    double m1Eff  = pdt.constituentMass(id1) + mOffsetCloudRH;
+    double m2Eff  = pdt.constituentMass(id2) + mOffsetCloudRH;
+    double frac1 = (1. - fracR) * m1Eff / ( m1Eff + m2Eff);
+    double frac2 = (1. - fracR) * m2Eff / ( m1Eff + m2Eff);
+
+    // Two new colours needed in the breakups.
+    int col1 = event.nextColTag();
+    int col2 = event.nextColTag();
+
+    // Store the constituents of a gluino R-hadron.
+    iR0 = event.append( idRBef, 106, iRNow, 0, 0, 0, col2, col1, fracR * event[iRNow].p(), fracR * mRHad, 0.);
+    event.append( id1, 106, iRNow, 0, 0, 0, col1, 0, frac1 * event[iRNow].p(), frac1 * mRHad, 0.);
+    iR2 = event.append( id2, 106, iRNow, 0, 0, 0, 0, col2, frac2 * event[iRNow].p(), frac2 * mRHad, 0.);
+  }
+
+  // Mark R-hadron as decayed and update history.
+  event[iRNow].statusNeg();
+  event[iRNow].daughters( iR0, iR2);
+
+  // Generate events. Quit if failure.
+  if (!m_pythia->next()) {
+    m_pythia->forceRHadronDecays();
+  }
+
+  ///////////////////////////////////////////////////////////////////////////
+  // Add the particles from the Pythia event into the GEANT particle vector
+  ///////////////////////////////////////////////////////////////////////////
+  particles.clear();
+
+  for(int i=0; i<m_pythia->event.size(); i++){
+    if ( m_pythia->event[i].status()<0 ) continue; // stable only
+    G4ThreeVector momentum( m_pythia->event[i].px() , m_pythia->event[i].py() , m_pythia->event[i].pz() );
+    momentum*=1000.0;//GeV to MeV
+    const G4ParticleDefinition * particleDefinition = GetParticleDefinition( m_pythia->event[i].id() );
+
+    if (!particleDefinition){
+      G4cout << "I don't know a definition for pdgid "<<m_pythia->event[i].id()<<"! Skipping it..." << G4endl;
+      continue;
+    }
+
+    G4DynamicParticle* dynamicParticle = new G4DynamicParticle(particleDefinition, momentum);
+    particles.push_back( dynamicParticle );
+  }
+
+}
+
diff --git a/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx b/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
index e088a1a3d877..fa051d9b575a 100644
--- a/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
+++ b/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
@@ -94,8 +94,8 @@ void PythiaForDecays::Py1ent(int ip, int kf, double pe, double theta, double phi
   //int pyl=3; pylist_(&pyl);
 }
 
-void PythiaForDecays::DecayRhadrons(int pdgid){
-  //std::cout<<"ACH start DecayRhadrons for pdgid "<<pdgid<<std::endl;
+void PythiaForDecays::DecayRHadron(int pdgid){
+  //std::cout<<"ACH start DecayRHadron for pdgid "<<pdgid<<std::endl;
   int pyl=3;//level to list to output text
 
   //only decay daughter particles from the decay that are "near" the hadron
@@ -114,7 +114,7 @@ void PythiaForDecays::DecayRhadrons(int pdgid){
     return;
   }
 
-  //Real Rhadron stuff...
+  //Real RHadron stuff...
   pdgid=abs(pdgid);
   pyjets_.k[0][0]=6;
   Pydat3 pydat3;
-- 
GitLab


From 4b1b3b73d5101008301cc79714f826d0cfda55df Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Wed, 13 Mar 2019 10:55:19 +0000
Subject: [PATCH 121/163] Delete uneeded copies of pointers in sTGC
 Digitization (ATLASSIM-3832)

Manually sweep MR !21869 to master

See merge request atlas/athena!21869
---
 .../src/sTgcDigitizationTool.cxx              | 69 ++++++++-----------
 1 file changed, 28 insertions(+), 41 deletions(-)

diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
index b13fb68c4498..a98adacb1179 100644
--- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
@@ -528,15 +528,13 @@ StatusCode sTgcDigitizationTool::doDigitization() {
   sTgcDigitCollection* digitCollection = 0;  //output digits
 
   ATH_MSG_DEBUG("create PRD container of size " << m_idHelper->detectorElement_hash_max());
-
+  
   IdContext tgcContext = m_idHelper->module_context();
   
   float earliestEventTime = 9999;
 
   // nextDetectorElement-->sets an iterator range with the hits of current detector element , returns a bool when done
   while(m_thpcsTGC->nextDetectorElement(i, e)) {
-//	  std::map< Identifier, std::pair< std::pair<double, Amg::Vector3D>, const sTGCSimHit*> > merged_SimHit;
-      std::map< const sTGCSimHit*, int > SimHits;  //std::map container to associate if this hit came from the signal (0) or pileup (!0) simEvent
 	  int nhits = 0;
       ATH_MSG_VERBOSE("Next Detector Element");
 	  while(i != e){ //loop through the hits on this Detector Element
@@ -567,7 +565,6 @@ StatusCode sTgcDigitizationTool::doDigitization() {
           int eventId = phit.eventId();
           std::string stationName= m_idHelper->stationNameString(m_idHelper->stationName(layid));
 		  int isSmall = stationName[2] == 'S';
-//		  int multiPlet = m_idHelper->multilayer(layid);
 		  int gasGap = m_idHelper->gasGap(layid);
           ATH_MSG_VERBOSE("Gas Gap " << gasGap );
 
@@ -628,45 +625,24 @@ StatusCode sTgcDigitizationTool::doDigitization() {
           ATH_MSG_VERBOSE("Local Hit on Wire Surface " << HITONSURFACE_WIRE );
           ATH_MSG_VERBOSE("Global Hit on Wire Surface " << G_HITONSURFACE_WIRE );
           
-          sTGCSimHit* wireHit = new sTGCSimHit(idHit, (hit.globalTime() + eventTime), G_HITONSURFACE_WIRE, hit.particleEncoding(), hit.globalDirection(), hit.depositEnergy() , hit.trackNumber() );
-          SimHits[wireHit] = eventId;  //Associate the sub event the hit came from
-          ATH_MSG_VERBOSE("Put hit number " << nhits << " into the map with eventID " << eventId );
-	  } // end of while(i != e)
-
+        ATH_MSG_DEBUG("sTgcDigitizationTool::doDigitization hits mapped");
     
-	  ATH_MSG_DEBUG("sTgcDigitizationTool::doDigitization hits mapped");
-    
-    // Loop over the hits:
-    int hitNum = 0;
-    typedef std::map< const sTGCSimHit*, int >::iterator it_SimHits;
- 
-        ATH_MSG_VERBOSE("Digitizing " << SimHits.size() << " hits.");
-        
-    for(it_SimHits it_SimHit = SimHits.begin(); it_SimHit!=SimHits.end(); it_SimHit++ ) {
-    	hitNum++;
-    	double depositEnergy = it_SimHit->first->depositEnergy();
-    	if(depositEnergy<0) {
-    		msg(MSG::ERROR) << "Invalid depositEnergy value " << depositEnergy <<endmsg;
-    		continue;
-    	}
-    	const sTGCSimHit temp_hit = *(it_SimHit->first);
-
-    	const sTGCSimHit hit(temp_hit.sTGCId(), temp_hit.globalTime(), 
-    			 temp_hit.globalPosition(),
-			     temp_hit.particleEncoding(),
-			     temp_hit.globalDirection(),
-			     depositEnergy,
-			     temp_hit.particleLink()
+    	const sTGCSimHit temp_hit(hit.sTGCId(), hit.globalTime(), 
+    			 G_HITONSURFACE_WIRE,
+			     hit.particleEncoding(),
+			     hit.globalDirection(),
+			     hit.depositEnergy(),
+			     hit.particleLink()
 			     );
 
 
-    	float globalHitTime = hit.globalTime();
-    	float tof = hit.globalPosition().mag()/CLHEP::c_light;
+    	float globalHitTime = temp_hit.globalTime() + eventTime;
+    	float tof = temp_hit.globalPosition().mag()/CLHEP::c_light;
     	float bunchTime = globalHitTime - tof;
 
 		sTgcDigitCollection* digiHits = 0;
-
-		digiHits = m_digitizer->executeDigi(&hit, globalHitTime);  //Create all the digits for this particular Sim Hit
+        
+    	digiHits = m_digitizer->executeDigi(&temp_hit, globalHitTime);  //Create all the digits for this particular Sim Hit
 		if(!digiHits)
 			continue;
 
@@ -709,10 +685,11 @@ StatusCode sTgcDigitizationTool::doDigitization() {
 
 			bool isDead = 0;
 			bool isPileup = 0;
-            ATH_MSG_VERBOSE("SimHits map second: " << it_SimHit->second << " newTime: " << newTime);
-			if(it_SimHit->second!= 0)  //hit not from the main signal subevent
+            ATH_MSG_VERBOSE("Hit is from the main signal subevent if eventId is zero, eventId = " << eventId << " newTime: " << newTime);
+			if(eventId != 0)  //hit not from the main signal subevent
 				  isPileup = 1;
                   
+            ATH_MSG_VERBOSE("...Check time 5: " << newTime );
             // Create a new digit with updated time and BCTag
             sTgcDigit* newDigit = new sTgcDigit(newDigitId, newBcTag, newTime, newCharge, isDead, isPileup);  
 			IdentifierHash coll_hash;  //Hash defining the detector element
@@ -721,6 +698,17 @@ StatusCode sTgcDigitizationTool::doDigitization() {
 			ATH_MSG_VERBOSE(" digitTime = " << newDigit->time()) ;
 			ATH_MSG_VERBOSE(" charge = "    << newDigit->charge()) ;
 
+            // Update HepMcParticleLink required for making SDO
+            const int pileupType = phit.pileupType();
+            HepMcParticleLink trklink(hit.particleLink());
+            if (m_needsMcEventCollHelper) {
+              if(pileupType!=lastPileupType)        {
+                currentMcEventCollection = McEventCollectionHelper::getMcEventCollectionHMPLEnumFromPileUpType(pileupType);
+                lastPileupType=pileupType;
+              }
+              trklink.setEventCollection(currentMcEventCollection);
+            }
+
             // Create a MuonSimData (SDO) corresponding to the digit
             MuonSimData::Deposit deposit(hit.particleLink(), MuonMCData(hit.depositEnergy(), tof));
             std::vector<MuonSimData::Deposit> deposits;
@@ -750,9 +738,8 @@ StatusCode sTgcDigitizationTool::doDigitization() {
 		} // end of loop digiHits
 		delete digiHits;
 		digiHits = 0;
-    }// end of loop(merged_SimHit)
-    SimHits.clear();
-  }//while(m_thpcsTGC->nextDetectorElement(i, e))
+	  } // end of while(i != e)
+  } //end of while(m_thpcsTGC->nextDetectorElement(i, e))
   
        /*********************
        * Process Pad Digits *
-- 
GitLab


From 91dd7954eb26d40a062a503762e2f737de5f3585 Mon Sep 17 00:00:00 2001
From: Chav Chhiv Chau <chav.chhiv.chau@cern.ch>
Date: Tue, 19 Mar 2019 23:18:28 +0100
Subject: [PATCH 122/163] Remove HepMcParticleLink lines not yet in master

Deleting lines forgotten to be removed when resolving merge conflict.
---
 .../sTGC_Digitization/src/sTgcDigitizationTool.cxx    | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
index a98adacb1179..23dcd75650eb 100644
--- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx
@@ -698,17 +698,6 @@ StatusCode sTgcDigitizationTool::doDigitization() {
 			ATH_MSG_VERBOSE(" digitTime = " << newDigit->time()) ;
 			ATH_MSG_VERBOSE(" charge = "    << newDigit->charge()) ;
 
-            // Update HepMcParticleLink required for making SDO
-            const int pileupType = phit.pileupType();
-            HepMcParticleLink trklink(hit.particleLink());
-            if (m_needsMcEventCollHelper) {
-              if(pileupType!=lastPileupType)        {
-                currentMcEventCollection = McEventCollectionHelper::getMcEventCollectionHMPLEnumFromPileUpType(pileupType);
-                lastPileupType=pileupType;
-              }
-              trklink.setEventCollection(currentMcEventCollection);
-            }
-
             // Create a MuonSimData (SDO) corresponding to the digit
             MuonSimData::Deposit deposit(hit.particleLink(), MuonMCData(hit.depositEnergy(), tof));
             std::vector<MuonSimData::Deposit> deposits;
-- 
GitLab


From 2d3399e7223ee2f3881dc869c4b9cbba1ff5ee85 Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Tue, 19 Mar 2019 23:42:24 +0100
Subject: [PATCH 123/163] Large clean up of RHadrons package

---
 .../G4ExternalDecay/PythiaForDecays.h         |  37 --
 .../G4ExternalDecay/src/PythiaForDecays.cxx   | 211 --------
 .../G4Extensions/RHadrons/CMakeLists.txt      |  47 +-
 .../RHadrons/python/RHadronMasses.py          | 455 ++++++++++++++++
 .../RHadrons/python/RHadronsConfig.py         |  14 +
 .../RHadrons/python/RHadronsConfigDb.py       |   3 +-
 .../share/PhysicsConfiguration_generic.txt    |   9 -
 .../share/PhysicsConfiguration_regge.txt      |   9 -
 .../PhysicsConfiguration_regge_nomix.txt      |   9 -
 .../share/ProcessList_generic_gluino.txt      | 487 ------------------
 .../share/ProcessList_generic_stop.txt        | 283 ----------
 .../share/ProcessList_intermediate_gluino.txt | 251 ---------
 .../share/ProcessList_regge_gluino.txt        | 146 ------
 .../share/ProcessList_regge_sbottom.txt       |  66 ---
 .../RHadrons/share/ProcessList_regge_stop.txt |  66 ---
 .../RHadrons/share/SG_StepNtuple.py           |   4 +-
 .../G4Extensions/RHadrons/share/decays.txt    |   3 -
 .../RHadrons/share/jobOptions.R-hadron_Sim.py |  79 ---
 .../particles_generic_gluino_1000GeV.txt      |  32 --
 .../share/particles_generic_gluino_100GeV.txt |  32 --
 .../particles_generic_gluino_1300GeV.txt      |  32 --
 .../particles_generic_gluino_1600GeV.txt      |  32 --
 .../particles_generic_gluino_2000GeV.txt      |  32 --
 .../share/particles_generic_gluino_200GeV.txt |  32 --
 .../share/particles_generic_gluino_300GeV.txt |  32 --
 .../share/particles_generic_gluino_400GeV.txt |  32 --
 .../share/particles_generic_gluino_500GeV.txt |  32 --
 .../share/particles_generic_gluino_600GeV.txt |  32 --
 .../share/particles_generic_gluino_700GeV.txt |  32 --
 .../share/particles_generic_gluino_800GeV.txt |  32 --
 .../share/particles_generic_gluino_900GeV.txt |  32 --
 .../share/particles_generic_stop_1000GeV.txt  |  30 --
 .../share/particles_generic_stop_100GeV.txt   |  31 --
 .../share/particles_generic_stop_200GeV.txt   |  31 --
 .../share/particles_generic_stop_300GeV.txt   |  31 --
 .../share/particles_generic_stop_400GeV.txt   |  31 --
 .../share/particles_generic_stop_500GeV.txt   |  31 --
 .../share/particles_generic_stop_600GeV.txt   |  31 --
 .../share/particles_generic_stop_700GeV.txt   |  31 --
 .../share/particles_generic_stop_800GeV.txt   |  31 --
 .../share/particles_generic_stop_900GeV.txt   |  31 --
 .../particles_intermediate_gluino_1000GeV.txt |  15 -
 .../particles_intermediate_gluino_100GeV.txt  |  15 -
 .../particles_intermediate_gluino_200GeV.txt  |  15 -
 .../particles_intermediate_gluino_300GeV.txt  |  15 -
 .../particles_intermediate_gluino_400GeV.txt  |  15 -
 .../particles_intermediate_gluino_500GeV.txt  |  15 -
 .../particles_intermediate_gluino_600GeV.txt  |  15 -
 .../particles_intermediate_gluino_700GeV.txt  |  15 -
 .../particles_intermediate_gluino_800GeV.txt  |  15 -
 .../particles_intermediate_gluino_900GeV.txt  |  15 -
 .../share/particles_regge_gluino_1000GeV.txt  |  10 -
 .../share/particles_regge_gluino_100GeV.txt   |  10 -
 .../share/particles_regge_gluino_200GeV.txt   |  10 -
 .../share/particles_regge_gluino_300GeV.txt   |  10 -
 .../share/particles_regge_gluino_400GeV.txt   |  10 -
 .../share/particles_regge_gluino_500GeV.txt   |  10 -
 .../share/particles_regge_gluino_600GeV.txt   |  10 -
 .../share/particles_regge_gluino_700GeV.txt   |  10 -
 .../share/particles_regge_gluino_800GeV.txt   |  10 -
 .../share/particles_regge_gluino_900GeV.txt   |  10 -
 .../share/particles_regge_sbottom_1000GeV.txt |   8 -
 .../share/particles_regge_sbottom_100GeV.txt  |   8 -
 .../share/particles_regge_sbottom_200GeV.txt  |   8 -
 .../share/particles_regge_sbottom_300GeV.txt  |   8 -
 .../share/particles_regge_sbottom_400GeV.txt  |   8 -
 .../share/particles_regge_sbottom_500GeV.txt  |   8 -
 .../share/particles_regge_sbottom_600GeV.txt  |   8 -
 .../share/particles_regge_sbottom_700GeV.txt  |   8 -
 .../share/particles_regge_sbottom_800GeV.txt  |   8 -
 .../share/particles_regge_sbottom_900GeV.txt  |   8 -
 .../share/particles_regge_stop_1000GeV.txt    |   9 -
 .../share/particles_regge_stop_100GeV.txt     |   9 -
 .../share/particles_regge_stop_200GeV.txt     |   9 -
 .../share/particles_regge_stop_300GeV.txt     |   9 -
 .../share/particles_regge_stop_400GeV.txt     |   9 -
 .../share/particles_regge_stop_500GeV.txt     |   9 -
 .../share/particles_regge_stop_600GeV.txt     |   9 -
 .../share/particles_regge_stop_700GeV.txt     |   9 -
 .../share/particles_regge_stop_800GeV.txt     |   9 -
 .../share/particles_regge_stop_900GeV.txt     |   9 -
 .../RHadrons/share/rhadrontruth.py            |  17 -
 .../RHadrons/src/CustomParticleFactory.cxx    | 248 ++++-----
 .../G4Extensions/RHadrons/src/Decay3Body.h    |  23 -
 .../RHadrons/src/FullModelHadronicProcess.cxx |   7 +-
 .../RHadrons/src/G4DecayProducts2.h           |  41 --
 .../RHadrons/src/G4ProcessHelper.cxx          |  35 +-
 .../RHadrons/src/RHadronPythiaDecayer.cxx     |  57 +-
 .../RHadrons/src/RHadronPythiaDecayer.h       |  14 +-
 .../RHadrons/src/RHadronsPhysicsTool.cxx      | 191 +++----
 .../RHadrons/src/RHadronsPhysicsTool.h        |   2 -
 .../RHadrons/src/SG_StepNtuple.cxx            |  63 +--
 .../G4Extensions/RHadrons/src/SG_StepNtuple.h |   4 +-
 .../RHadrons/src/SG_StepNtupleTool.cxx        |   6 +-
 .../RHadrons/src/SG_StepNtupleTool.h          |   7 +
 95 files changed, 764 insertions(+), 3275 deletions(-)
 delete mode 100644 Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
 delete mode 100644 Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
 create mode 100644 Simulation/G4Extensions/RHadrons/python/RHadronMasses.py
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_generic.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge_nomix.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_generic_gluino.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_generic_stop.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_intermediate_gluino.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_regge_gluino.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_regge_sbottom.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/ProcessList_regge_stop.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/decays.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/jobOptions.R-hadron_Sim.py
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_2000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_generic_stop_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_1000GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_100GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_200GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_300GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_400GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_500GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_600GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_700GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_800GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/particles_regge_stop_900GeV.txt
 delete mode 100644 Simulation/G4Extensions/RHadrons/share/rhadrontruth.py
 delete mode 100644 Simulation/G4Extensions/RHadrons/src/Decay3Body.h
 delete mode 100644 Simulation/G4Extensions/RHadrons/src/G4DecayProducts2.h

diff --git a/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h b/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
deleted file mode 100644
index 672bd88993c1..000000000000
--- a/Simulation/G4Extensions/G4ExternalDecay/G4ExternalDecay/PythiaForDecays.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// Abused from Geant4 version of Pythai6.hh from extended examples
-
-#ifndef PythiaForDecays_H
-#define PythiaForDecays_H
-
-#include <vector>
-#include "G4DynamicParticle.hh"
-
-class PythiaForDecays
-{
-  public:
-
-   PythiaForDecays();
-   virtual ~PythiaForDecays();
-
-   static PythiaForDecays *Instance();
-
-   int  Pycomp(int);
-   void Py1ent(int, int, double, double, double);
-
-   void ImportParticles( std::vector<G4DynamicParticle*> &);
-
-   void DecayRHadron(int pdgid);
-
-  private:
-
-   G4ParticleDefinition* GetParticleDefinition(const int) const;
-
-   static  PythiaForDecays* s_instance;
-};
-
-#endif
-
diff --git a/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx b/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
deleted file mode 100644
index fa051d9b575a..000000000000
--- a/Simulation/G4Extensions/G4ExternalDecay/src/PythiaForDecays.cxx
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// Abused from Pythia6.cc in Geant4 extended examples
-
-#include "G4ExternalDecay/PythiaForDecays.h"
-#include "Pythia_i/Pythia.h"
-#include "Pythia_i/Pydat3.h"
-#include "Pythia_i/Pydat2.h"
-#include "Pythia_i/Pydat1.h"
-#include "HepMC/IO_HEPEVT.h"
-#include "HepMC/GenEvent.h"
-#include "HepMC/GenParticle.h"
-
-#include "G4ParticleDefinition.hh"
-#include "G4ParticleTable.hh"
-#include "G4ThreeVector.hh"
-
-#include <iostream>
-#include <cstdlib>
-#include <cstring>
-#include <cmath>
-
-struct PPYJETS{
-  int   n;      
-  int npad;
-  int   k[5][4000];
-  double p[5][4000];
-  double v[5][4000];
-};
-
-extern "C" {
-  int  pycomp_(int*);
-  void py1ent_(int&, int&, double&, double&, double&);
-  void pyhepc_(int*);
-  PPYJETS pyjets_;
-  void pylist_(int*);
-  void pyexec_();
-}
-void pygldc_() {}//ACH for gluino decay
-void pysqdc_(int*) {}//ACH for stop/sbottom decay
-
-
-PythiaForDecays* PythiaForDecays::s_instance = 0;
-
-PythiaForDecays* PythiaForDecays::Instance() 
-{
-   if ( ! s_instance ) s_instance = new PythiaForDecays();
-   return s_instance;
-}
-
-PythiaForDecays::PythiaForDecays()  
-{
-   // Protect against multiple objects.   All access should be via the
-   // Instance member function. 
-   if ( s_instance ) {
-      std::cerr << "There's already an instance of PythiaForDecays" << std::endl;
-      exit (1);
-   }   
-}
-
-PythiaForDecays::~PythiaForDecays()
-{;} // It's ok little class, I never owned anything either...
-
-int PythiaForDecays::Pycomp(int kf) 
-{
-/// Interface with fortran routine pycomp
-   return pycomp_(&kf);
-}
-
-void PythiaForDecays::Py1ent(int ip, int kf, double pe, double theta, double phi)
-{
-/// Add one entry to the event record, i.e. either a parton or a
-/// particle. 
-///
-///  IP:   normally line number for the parton/particle. There are two
-///        exceptions:
-/// 
-///        If IP = 0: line number 1 is used and PYEXEC is called. 
-///        If IP < 0: line -IP is used, with status code K(-IP,2)=2
-///                   rather than 1; thus a parton system may be built
-///                   up by filling all but the last parton of the
-///                   system with IP < 0.   
-///  KF:   parton/particle flavour code (PDG code)
-///  PE:   parton/particle energy. If PE is smaller than the mass,
-///        the parton/particle is taken to be at rest.  
-///  THETA:
-///  PHI:  polar and azimuthal angle for the momentum vector of the
-///        parton/particle. 
-  
-  //std::cout<<"ACH start Py1ent 1"<<std::endl;
-  py1ent_(ip, kf, pe, theta, phi);
-  //int pyl=3; pylist_(&pyl);
-}
-
-void PythiaForDecays::DecayRHadron(int pdgid){
-  //std::cout<<"ACH start DecayRHadron for pdgid "<<pdgid<<std::endl;
-  int pyl=3;//level to list to output text
-
-  //only decay daughter particles from the decay that are "near" the hadron
-  Pydat1 pydat1;
-  pydat1.mstj(21)=2;
-  pydat1.mstj(22)=3;
-  pydat1.parj(72)=0.001;
-
-  //Deal with standard hadrons first...
-  if (abs(pdgid)<1000000){
-    //std::cout<<"ACH decay standard hadron for pdgid "<<pdgid<<std::endl;
-    pyjets_.k[0][0]=5;//make it decay right away!
-    //pylist_(&pyl);
-    pyexec_();
-    //pylist_(&pyl);
-    return;
-  }
-
-  //Real RHadron stuff...
-  pdgid=abs(pdgid);
-  pyjets_.k[0][0]=6;
-  Pydat3 pydat3;
-  Pydat2 pydat2;
-  //pylist_(&pyl);
-  if ( pdgid/10000==109 || pdgid/1000==1009 || pdgid/100==10009 ){
-    //std::cout<<"ACH decay gluino rhadron .."<<std::endl;
-    int kfgl = 1000021;//gluino
-    pydat3.mdcy(pycomp_(&kfgl),1)=1;// MDCY(PYCOMP(KFGL),1)=1 //unstable gluino
-    float oldl=pydat2.pmas(pycomp_(&kfgl),4);//remember lifetime
-    pydat2.pmas(pycomp_(&kfgl),4)=0;//decay it promptly!
-    pygldc_();//gluino DECAY
-    pydat2.pmas(pycomp_(&kfgl),4)=oldl;//set lifetime back to what it was
-    //pylist_(&pyl);
-  }
-  else if ( pdgid/1000==1006 || pdgid/100==10006 ){
-    //std::cout<<"ACH decay stop rhadron .."<<std::endl;
-    Pydat3 pydat3;
-    int kfgl = 1000006;//stop
-    pydat3.mdcy(pycomp_(&kfgl),1)=1;// MDCY(PYCOMP(KFGL),1)=1 //unstable stop
-    float oldl=pydat2.pmas(pycomp_(&kfgl),4);//remember lifetime
-    pydat2.pmas(pycomp_(&kfgl),4)=0;//decay it promptly!
-    pysqdc_(&kfgl);//stop DECAY!
-    pydat2.pmas(pycomp_(&kfgl),4)=oldl;//set lifetime back to what it was
-    //pylist_(&pyl);
-  }
-  else if ( pdgid/1000==1005 || pdgid/100==10005 ){
-    //std::cout<<"ACH decay sbottom rhadron .."<<std::endl;
-    Pydat3 pydat3;
-    int kfgl = 1000005;//sbottom
-    pydat3.mdcy(pycomp_(&kfgl),1)=1;// MDCY(PYCOMP(KFGL),1)=1 //unstable sbottom
-    float oldl=pydat2.pmas(pycomp_(&kfgl),4);//remember lifetime
-    pydat2.pmas(pycomp_(&kfgl),4)=0;//decay it promptly!    
-    pysqdc_(&kfgl);//sbottom DECAY!
-    pydat2.pmas(pycomp_(&kfgl),4)=oldl;//set lifetime back to what it was
-    //pylist_(&pyl);
-  }
-  else{
-    std::cout<<"ACH ERROR !!! Can't decay unknown particle with abspdgid="<<pdgid<<std::endl;
-    pylist_(&pyl);
-    //exit(-19);
-  }
-
-}
-
-//______________________________________________________________________________
-void PythiaForDecays::ImportParticles( std::vector<G4DynamicParticle*> & particles)
-{
-  particles.clear();
-
-  int mconv=1;
-  pyhepc_(&mconv);
-
-  // Fill up the HEP Event
-  HepMC::GenEvent* evt = new HepMC::GenEvent(1,1);
-  HepMC::IO_HEPEVT hepio;
-  hepio.set_print_inconsistency_errors(0);
-  hepio.fill_next_event(evt);
-
-  for (HepMC::GenEvent::particle_const_iterator p=evt->particles_begin(); p!=evt->particles_end(); ++p){
-    if (! (*p) ) continue;
-
-    /*
-    double r=0;
-    if ((*p)->production_vertex()) {
-      double x=(*p)->production_vertex()->position().x();
-      double y=(*p)->production_vertex()->position().y();
-      r=sqrt(x*x+y*y);
-    }
-    std::cout<<"ImportParticles: "<<(*p)->pdg_id()<<", vertex r "<<r<<", status "<<(*p)->status()<<std::endl;
-    */
-
-    if ( (*p)->status()!=1 ) continue; // stable only
-    //if ( std::abs((*p)->pdg_id())==12 || std::abs((*p)->pdg_id())==14 || std::abs((*p)->pdg_id())==16 ) continue; // skip neutrinos
-    G4ThreeVector momentum( (*p)->momentum().x() , (*p)->momentum().y() , (*p)->momentum().z() );
-    momentum*=1000.0;//GeV to MeV
-    const G4ParticleDefinition * particleDefinition = GetParticleDefinition( (*p)->pdg_id() );
-    if (!particleDefinition){
-      std::cout<<"WARNING: I don't know a definition for pdgid "<<(*p)->pdg_id()<<"! Skipping it..."<<std::endl;
-      continue;
-    }
-    G4DynamicParticle* dynamicParticle = new G4DynamicParticle(particleDefinition, momentum);
-    particles.push_back( dynamicParticle );
-  }
-}
-
-G4ParticleDefinition* PythiaForDecays::GetParticleDefinition(const int pdgEncoding) const
-{
-  G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
-  G4ParticleDefinition* particleDefinition = 0;
-  if (pdgEncoding != 0) particleDefinition = particleTable->FindParticle(pdgEncoding);
-  return particleDefinition;
-}
-
diff --git a/Simulation/G4Extensions/RHadrons/CMakeLists.txt b/Simulation/G4Extensions/RHadrons/CMakeLists.txt
index 2e77e4b457c1..11fca94a6c08 100644
--- a/Simulation/G4Extensions/RHadrons/CMakeLists.txt
+++ b/Simulation/G4Extensions/RHadrons/CMakeLists.txt
@@ -5,33 +5,32 @@
 # Declare the package name:
 atlas_subdir( RHadrons )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          GaudiKernel
-                          PRIVATE
-                          Control/AthenaBaseComps
-			  Control/CxxUtils
-                          Simulation/G4Atlas/G4AtlasInterfaces
-                          Simulation/G4Atlas/G4AtlasTools
-                          Simulation/G4Extensions/G4ExternalDecay
-                          Simulation/G4Sim/SimHelpers )
+if( NOT GENERATIONBASE )
+    # Declare the package's dependencies:
+    atlas_depends_on_subdirs( PUBLIC
+                              GaudiKernel
+                              PRIVATE
+                              Control/AthenaBaseComps
+                              Control/CxxUtils
+                              Simulation/G4Atlas/G4AtlasInterfaces
+                              Simulation/G4Atlas/G4AtlasTools
+                              Simulation/G4Extensions/G4ExternalDecay
+                              Simulation/G4Sim/SimHelpers )
 
-# External dependencies:
-find_package( CLHEP )
-find_package( Geant4 )
-find_package( XercesC )
+    # External dependencies:
+    find_package( CLHEP )
+    find_package( Geant4 )
+    find_package( XercesC )
+    find_package( Pythia8 )
 
-# Component(s) in the package:
-atlas_add_component( RHadrons
-                     src/*.cxx
-                     src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} GaudiKernel AthenaBaseComps G4AtlasInterfaces G4AtlasToolsLib G4ExternalDecay SimHelpers )
+    # Component(s) in the package:
+    atlas_add_component( RHadrons
+                         src/*.cxx
+                         src/components/*.cxx
+                         INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${PYTHIA8_INCLUDE_DIRS}
+                         LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA8_LIBRARIES} GaudiKernel AthenaBaseComps G4AtlasInterfaces G4AtlasToolsLib G4ExternalDecay SimHelpers Pythia8_iLib )
+endif()
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
-atlas_install_generic( share/*.txt
-                       DESTINATION share
-                       EXECUTABLE )
-
diff --git a/Simulation/G4Extensions/RHadrons/python/RHadronMasses.py b/Simulation/G4Extensions/RHadrons/python/RHadronMasses.py
new file mode 100644
index 000000000000..9b3bb8ca0f53
--- /dev/null
+++ b/Simulation/G4Extensions/RHadrons/python/RHadronMasses.py
@@ -0,0 +1,455 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# This file contains a number of helper functions for defining R-hadron mass spectra
+# A large data table at the top is then used in several of the helper functions
+
+"""
+The offset options.  Dictionary of PDG IDs with offsets.
+Anti-particles by definition have the same mass as standard particles.
+Columns are:
+   PDG ID
+   PDG ID of SUSY constituent
+   Has an anti-particle (i.e. need to define a particle with an opposite-signed PDG ID)
+   Name (for PDG table)
+   Charge (for PDG table)
+
+   Mass Offset in the Pythia6 simulation configuration
+   8 mass options documented in the INT note of the stopped particle analysis:
+   https://cds.cern.ch/record/2665511
+   First 3 are the meson fits; 4th is the first specrum shifted to make the gluino R-glueball heaver
+    than the lightest R-mesons, but with the same relative splitting otherwise.
+   Second set of four follow the same pattern, but for the baryon fits.
+
+The list of possible R-hadrons comes from the Pythia8 code, in src/RHadrons.cc (at the top)
+"""
+
+first_mass_set = 4
+offset_options = {
+# Fundamental SUSY particles
+        1000021 : [       0 , False , '~g          ' ,  0 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 ] ,
+        1000022 : [       0 , False , '~chi10      ' ,  0 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 ] ,
+        1000039 : [       0 , False , '~Gr         ' ,  0 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 , 0.000 ] ,
+# Gluino R-glueball
+        1000993 : [ 1000021 , False , '~g_glueball ' ,  0 , 0.700 , 0.700 , 0.700 , 0.700 , 0.700 , 0.700 , 0.700 , 0.700 , 0.700 ] ,
+# Gluino q-qbar R-mesons
+        1009113 : [ 1000021 , False , '~g_pi0      ' ,  0 , 0.650 , 0.682 , 0.551 , 0.770 , 0.000 , 0.770 , 0.551 , 0.770 , 0.000 ] ,
+        1009223 : [ 1000021 , False , '~g_omega    ' ,  0 , 0.650 , 0.609 , 0.402 , 0.716 , 0.000 , 0.716 , 0.402 , 0.716 , 0.000 ] ,
+        1009333 : [ 1000021 , False , '~g_phi      ' ,  0 , 1.800 , 0.923 , 0.827 , 1.073 , 0.000 , 1.053 , 0.827 , 1.073 , 0.000 ] ,
+        1009443 : [ 1000021 , False , '~g_eta_c    ' ,  0 , 3.400 , 3.262 , 3.102 , 3.421 , 0.000 , 3.401 , 3.102 , 3.421 , 0.000 ] ,
+        1009553 : [ 1000021 , False , '~g_eta_b    ' ,  0 , 9.460 , 9.460 ,11.000 ,10.000 ,10.000 , 9.460 , 9.460 ,11.000 ,10.000 ] ,
+# Light-flavor Gluino R-mesons
+        1009213 : [ 1000021 ,  True , '~g_pi+      ' ,  1 , 0.650 , 0.682 , 0.551 , 0.770 , 0.000 , 0.770 , 0.551 , 0.770 , 0.000 ] ,
+# Strange Gluino R-mesons
+        1009313 : [ 1000021 ,  True , '~g_K*0      ' ,  0 , 0.825 , 0.816 , 0.697 , 0.927 , 0.000 , 0.922 , 0.697 , 0.927 , 0.000 ] ,
+        1009323 : [ 1000021 ,  True , '~g_K*+      ' ,  1 , 0.825 , 0.816 , 0.697 , 0.927 , 0.000 , 0.922 , 0.697 , 0.927 , 0.000 ] ,
+# Charm Gluino R-mesons
+        1009413 : [ 1000021 ,  True , '~g_D+       ' ,  1 , 2.000 , 1.954 , 1.863 , 2.078 , 0.000 , 2.073 , 1.863 , 2.078 , 0.000 ] ,
+        1009423 : [ 1000021 ,  True , '~g_D0       ' ,  0 , 2.000 , 1.954 , 1.863 , 2.078 , 0.000 , 2.073 , 1.863 , 2.078 , 0.000 ] ,
+        1009433 : [ 1000021 ,  True , '~g_Ds+      ' ,  1 , 2.200 , 2.103 , 2.043 , 2.255 , 0.000 , 2.235 , 2.043 , 2.255 , 0.000 ] ,
+# Bottom Gluino R-mesons
+        1009513 : [ 1000021 ,  True , '~g_B0       ' ,  0 , 5.000 , 5.047 , 5.043 , 5.862 , 0.000 , 5.098 , 5.043 , 5.862 , 0.000 ] ,
+        1009523 : [ 1000021 ,  True , '~g_B+       ' ,  1 , 5.000 , 5.047 , 5.043 , 5.862 , 0.000 , 5.098 , 5.043 , 5.862 , 0.000 ] ,
+        1009533 : [ 1000021 ,  True , '~g_Bs0      ' ,  0 , 5.200 , 5.198 , 5.198 , 6.041 , 0.000 , 5.262 , 5.198 , 6.041 , 0.000 ] ,
+        1009543 : [ 1000021 ,  True , '~g_Bc+      ' ,  1 , 7.000 , 6.360 , 6.280 , 7.210 , 0.000 , 6.430 , 6.280 , 7.210 , 0.000 ] ,
+# Light-flavor singlet Gluino R-baryons
+        1093214 : [ 1000021 ,  True , '~g_Lambda0  ' ,  0 , 1.150 , 0.562 , 0.280 , 0.715 , 0.000 , 0.715 , 0.280 , 0.715 , 0.000 ] ,
+# Charm singlet Gluino R-baryons
+        1094214 : [ 1000021 ,  True , '~g_Sigmac*+ ' ,  1 , 2.300 , 1.726 , 1.489 , 1.885 , 0.000 , 1.885 , 1.489 , 1.885 , 0.000 ] ,
+        1094314 : [ 1000021 ,  True , '~g_Xic*0    ' ,  0 , 2.300 , 1.878 , 1.688 , 2.050 , 0.000 , 2.050 , 1.688 , 2.050 , 0.000 ] ,
+        1094324 : [ 1000021 ,  True , '~g_Xic*+    ' ,  1 , 2.300 , 1.878 , 1.688 , 2.050 , 0.000 , 2.050 , 1.688 , 2.050 , 0.000 ] ,
+# Bottom singlet Gluino R-baryons
+        1095214 : [ 1000021 ,  True , '~g_Sigmab*0 ' ,  0 , 5.600 , 4.826 , 4.796 , 5.660 , 0.000 , 4.915 , 4.796 , 5.660 , 0.000 ] ,
+        1095314 : [ 1000021 ,  True , '~g_Xib*-    ' , -1 , 5.750 , 4.978 , 4.970 , 5.840 , 0.000 , 5.080 , 4.970 , 5.840 , 0.000 ] ,
+        1095324 : [ 1000021 ,  True , '~g_Xib*0    ' ,  0 , 5.750 , 4.978 , 4.970 , 5.840 , 0.000 , 5.080 , 4.970 , 5.840 , 0.000 ] ,
+# Light flavor Gluino R-baryons
+        1091114 : [ 1000021 ,  True , '~g_Delta-   ' , -1 , 0.975 , 0.812 , 0.530 , 0.965 , 0.000 , 0.965 , 0.530 , 0.965 , 0.000 ] ,
+        1092114 : [ 1000021 ,  True , '~g_Delta0   ' ,  0 , 0.975 , 0.812 , 0.530 , 0.965 , 0.000 , 0.965 , 0.530 , 0.965 , 0.000 ] ,
+        1092214 : [ 1000021 ,  True , '~g_Delta+   ' ,  1 , 0.975 , 0.812 , 0.530 , 0.965 , 0.000 , 0.965 , 0.530 , 0.965 , 0.000 ] ,
+        1092224 : [ 1000021 ,  True , '~g_Delta++  ' ,  2 , 0.975 , 0.812 , 0.530 , 0.965 , 0.000 , 0.965 , 0.530 , 0.965 , 0.000 ] ,
+# Strange Gluino R-baryons
+        1093114 : [ 1000021 ,  True , '~g_Sigma*-  ' , -1 , 1.150 , 1.094 , 0.858 , 1.260 , 0.000 , 1.260 , 0.858 , 1.260 , 0.000 ] ,
+        1093224 : [ 1000021 ,  True , '~g_Sigma*+  ' ,  1 , 1.150 , 1.094 , 0.858 , 1.260 , 0.000 , 1.260 , 0.858 , 1.260 , 0.000 ] ,
+        1093314 : [ 1000021 ,  True , '~g_Xi*-     ' , -1 , 1.300 , 1.246 , 1.058 , 1.440 , 0.000 , 1.425 , 1.058 , 1.440 , 0.000 ] ,
+        1093324 : [ 1000021 ,  True , '~g_Xi*0     ' ,  0 , 1.300 , 1.246 , 1.058 , 1.440 , 0.000 , 1.425 , 1.058 , 1.440 , 0.000 ] ,
+        1093334 : [ 1000021 ,  True , '~g_Omega-   ' , -1 , 1.600 , 1.398 , 1.257 , 1.620 , 0.000 , 1.590 , 1.257 , 1.620 , 0.000 ] ,
+# Charm Gluino R-baryons
+        1094114 : [ 1000021 ,  True , '~g_Sigmac*0 ' ,  0 , 2.300 , 2.258 , 2.068 , 2.430 , 0.000 , 2.430 , 2.068 , 2.430 , 0.000 ] ,
+        1094224 : [ 1000021 ,  True , '~g_Sigmac*++' ,  2 , 2.300 , 2.258 , 2.068 , 2.430 , 0.000 , 2.430 , 2.068 , 2.430 , 0.000 ] ,
+        1094334 : [ 1000021 ,  True , '~g_Omegac*0 ' ,  0 , 2.300 , 2.562 , 2.466 , 2.790 , 0.000 , 2.760 , 2.466 , 2.790 , 0.000 ] ,
+# Bottom Gluino R-baryons
+        1095114 : [ 1000021 ,  True , '~g_Sigmab*- ' , -1 , 5.600 , 5.358 , 5.350 , 6.220 , 0.000 , 5.460 , 5.350 , 6.220 , 0.000 ] ,
+        1095224 : [ 1000021 ,  True , '~g_Sigmab*+ ' ,  1 , 5.600 , 5.358 , 5.350 , 6.220 , 0.000 , 5.460 , 5.350 , 6.220 , 0.000 ] ,
+        1095334 : [ 1000021 ,  True , '~g_Omegab*- ' , -1 , 5.900 , 5.662 , 5.662 , 6.580 , 0.000 , 5.790 , 5.662 , 6.580 , 0.000 ] ,
+
+# Sbottom R-mesons
+        1000512 : [ 1000005 , True , '~B0          ' ,  0 , 0.325 , 0.314 , 0.220 , 0.365 , 0.000 , 0.365 , 0.220 , 0.365 , 0.000 ] ,
+        1000522 : [ 1000005 , True , '~B-          ' , -1 , 0.325 , 0.314 , 0.220 , 0.365 , 0.000 , 0.365 , 0.220 , 0.365 , 0.000 ] ,
+        1000532 : [ 1000005 , True , '~Bs0         ' ,  0 , 0.500 , 0.466 , 0.419 , 0.540 , 0.000 , 0.530 , 0.419 , 0.540 , 0.000 ] ,
+        1000542 : [ 1000005 , True , '~Bc-         ' , -1 , 1.500 , 1.630 , 1.550 , 1.710 , 0.000 , 1.700 , 1.550 , 1.710 , 0.000 ] ,
+        1000552 : [ 1000005 , True , '~etab0       ' ,  0 , 4.800 , 4.730 , 4.730 , 5.500 , 0.000 , 4.730 , 4.730 , 5.500 , 0.000 ] ,
+# Sbottom R-baryons
+        1005113 : [ 1000005 , True , '~Sigmab-     ' , -1 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1005211 : [ 1000005 , True , '~Sigmab0     ' ,  0 , 0.650 , 0.496 , 0.171 , 0.632 , 0.000 , 0.632 , 0.171 , 0.632 , 0.000 ] ,
+        1005213 : [ 1000005 , True , '~Sigmab*0    ' ,  0 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1005223 : [ 1000005 , True , '~Sigmab+     ' ,  1 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1005311 : [ 1000005 , True , '~Xib-        ' , -1 , 0.825 , 0.691 , 0.497 , 0.833 , 0.000 , 0.827 , 0.497 , 0.833 , 0.000 ] ,
+        1005313 : [ 1000005 , True , '~Xib*-       ' , -1 , 0.809 , 0.686 , 0.922 , 0.365 , 0.000 , 0.917 , 0.686 , 0.922 , 0.000 ] ,
+        1005321 : [ 1000005 , True , '~Xib0        ' ,  0 , 0.825 , 0.691 , 0.497 , 0.833 , 0.000 , 0.827 , 0.497 , 0.833 , 0.000 ] ,
+        1005323 : [ 1000005 , True , '~Xib*0       ' ,  0 , 0.809 , 0.686 , 0.922 , 0.365 , 0.000 , 0.917 , 0.686 , 0.922 , 0.000 ] ,
+        1005333 : [ 1000005 , True , '~Omegab-     ' , -1 , 1.000 , 0.951 , 0.862 , 1.094 , 0.000 , 1.075 , 0.862 , 1.094 , 0.000 ] ,
+# Stop R-mesons
+        1000612 : [ 1000006 , True , '~T+          ' ,  1 , 0.325 , 0.314 , 0.220 , 0.365 , 0.000 , 0.365 , 0.220 , 0.365 , 0.000 ] ,
+        1000622 : [ 1000006 , True , '~T0          ' ,  0 , 0.325 , 0.314 , 0.220 , 0.365 , 0.000 , 0.365 , 0.220 , 0.365 , 0.000 ] ,
+        1000632 : [ 1000006 , True , '~Ts+         ' ,  1 , 0.500 , 0.466 , 0.419 , 0.540 , 0.000 , 0.530 , 0.419 , 0.540 , 0.000 ] ,
+        1000642 : [ 1000006 , True , '~Tc0         ' ,  0 , 1.500 , 1.630 , 1.550 , 1.710 , 0.000 , 1.700 , 1.550 , 1.710 , 0.000 ] ,
+        1000652 : [ 1000006 , True , '~etat+       ' ,  1 , 4.800 , 4.730 , 4.730 , 5.500 , 0.000 , 4.730 , 4.730 , 5.500 , 0.000 ] ,
+# Stop R-baryons
+        1006113 : [ 1000006 , True , '~Sigmat0     ' ,  0 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1006211 : [ 1000006 , True , '~Sigmat+     ' ,  1 , 0.650 , 0.496 , 0.171 , 0.632 , 0.000 , 0.632 , 0.171 , 0.632 , 0.000 ] ,
+        1006213 : [ 1000006 , True , '~Sigmat*+    ' ,  1 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1006223 : [ 1000006 , True , '~Sigmat++    ' ,  2 , 0.650 , 0.671 , 0.529 , 0.762 , 0.000 , 0.762 , 0.529 , 0.762 , 0.000 ] ,
+        1006311 : [ 1000006 , True , '~Xit0        ' ,  0 , 0.691 , 0.497 , 0.833 , 0.365 , 0.000 , 0.827 , 0.497 , 0.833 , 0.000 ] ,
+        1006313 : [ 1000006 , True , '~Xit*0       ' ,  0 , 0.809 , 0.686 , 0.922 , 0.365 , 0.000 , 0.917 , 0.686 , 0.922 , 0.000 ] ,
+        1006321 : [ 1000006 , True , '~Xit+        ' ,  1 , 0.691 , 0.497 , 0.833 , 0.365 , 0.000 , 0.827 , 0.497 , 0.833 , 0.000 ] ,
+        1006323 : [ 1000006 , True , '~Xit*+       ' ,  1 , 0.809 , 0.686 , 0.922 , 0.365 , 0.000 , 0.917 , 0.686 , 0.922 , 0.000 ] ,
+        1006333 : [ 1000006 , True , '~Omegat0     ' ,  0 , 1.000 , 0.951 , 0.862 , 1.094 , 0.000 , 1.075 , 0.862 , 1.094 , 0.000 ] ,
+   }
+
+# Now programmatically calculate the missing spectra
+for pid in offset_options:
+    # Skip fundamental SUSY particles and R-glueball
+    if offset_options[pid][0] == 0 or pid == 1000993: continue
+    # Setup #4 to be mass set #1 but with 1009113 matching mass set 5
+    offset_options[pid][first_mass_set+4] = offset_options[pid][first_mass_set+1]+0.088
+    # Setup #8 to be mass set #5 but with 1009113 matches mass set 2
+    offset_options[pid][first_mass_set+8] = offset_options[pid][first_mass_set+5]-0.088
+
+
+
+def charge( c ):
+    """ Function to return a PDG table formatted charge given an integer charge
+        Input is the charge either as a string or number
+    """
+    n = int(c)
+    if n==0: return ' 0'
+    if n==1: return ' +'
+    if n==2: return '++'
+    if n==-1: return ' -'
+    if n==-2: return '--'
+    raise RuntimeError('Unexpected charge: '+str(n))
+
+
+def get_quarks( x ):
+    """ Function to return a list of quarks in a hadron
+    """
+    # For mesons, just two quarks
+    if '00' in str(x): return str(x)[4:5]
+    # For baryons, three quarks
+    return str(x)[3:5]
+
+
+def is_baryon( x ):
+    if '009' in str(x): return 0 # gluino meson
+    elif '09' in str(x): return 1 # gluino baryon
+    elif '006' in str(x): return 1 # stop baryon
+    elif '005' in str(x): return 1 # sbottom baryon
+    # Otherwise it's a meson
+    return 0
+
+
+def anti_name( x ):
+    """ Function to turn a particle name into an anti-particle name (mostly charge issues)
+    """
+    # These look a little funny to get both + and ++
+    if '*+' in x: return x.replace('*','bar*').replace('+','-')
+    if '*-' in x: return x.replace('*','bar*').replace('-','+')
+    if '++' in x: return x.replace('++','bar--')
+    if '--' in x: return x.replace('--','bar++')
+    if '+' in x:  return x.replace('+','bar-')
+    if '-' in x:  return x.replace('-','bar+')
+    if '*0' in x: return x.replace('*0','bar*0')
+    return x.replace('0','bar0')
+
+
+def get_gluino_Rhadron_masses(input_file, mass_spectrum=1):
+    """ Function to return a dictionary of PDG IDs and masses based on an input param/SLHA/LHE file
+        First parameter: input file (string or file handle)
+        Second parameter: mass spectrum (enumeration value)
+    """
+    # Expect a string file name or file handle
+    if type(input_file) not in [str,file]:
+        raise RuntimeError('Incorrect input file type: '+str(type(input_file)))
+    in_file = input_file if type(input_file)==file else open(input_file,'r')
+
+    # Expect SLHA file format.  Read for mass block, then look for relevant masses, then exit
+    masses = {}
+    mass_block = False
+    for l in in_file.readlines():
+        # Are we entering the mass block?
+        if 'BLOCK' in l.upper().split('#')[0].split() and 'MASS' in l.upper().split('#')[0].split():
+            mass_block = True
+            continue
+        # Otherwise, if we've not yet entered the mass block, keep reading
+        elif not mass_block: continue
+        # If we're past the mass block, then stop reading
+        if 'BLOCK' in l.upper().split('#')[0].split(): break
+        # Skip empty lines, comments, etc
+        if len(l.split('#')[0].split())<2: continue
+        pdg_id = int(l.split('#')[0].split()[0])
+        # Set the input masses
+        if pdg_id in offset_options:
+            mass = float(l.split('#')[0].split()[1])
+            # If we have decoupled the thing, don't include it!
+            if mass > 7e3: continue
+            # Otherwise, it goes in the list
+            masses[pdg_id] = mass
+        # Not an ID we care about otherwise!  Skip!
+    # Done reading file; close if it's our responsibility
+    if type(input_file)==str: in_file.close()
+
+    # Set the remainder of the masses
+    had_rhadron=False
+    for pid in offset_options:
+        # Skip fundamental particles - they should be read from the input file!
+        if offset_options[pid][0] == 0: continue
+        # Check if the constituent is in there (e.g. skip stop R-hadrons for gluino production)
+        if offset_options[pid][0] not in masses: continue
+        # Check if the mass spectrum is available
+        if mass_spectrum<0 or first_mass_set+mass_spectrum>len(offset_options[pid]):
+            raise RuntimeError("Unknown mass set requested: "+str(mass_spectrum)+" > number of options ("+str(len(offset_options[pid])-first_mass_set+1)+") for PID "+str(pid))
+        # Add 'normal' R-hadron
+        masses[pid] = masses[ offset_options[pid][0] ] + offset_options[pid][first_mass_set+mass_spectrum]
+        # If needed, add anti-R-hadron
+        if offset_options[pid][1]:
+            masses[-pid] = masses[ offset_options[pid][0] ] + offset_options[pid][first_mass_set+mass_spectrum]
+        had_rhadron = True
+
+    # Make sure we generated some R-hadrons
+    if not had_rhadron:
+        raise RuntimeError('No R-hadrons generated!')
+
+    # Return the dictionary
+    return masses
+
+
+def update_PDG_table(input_file, pdg_table, mass_spectrum=1):
+    """ Function to update a PDG table with R-hadron masses
+        First input parameter: input file (string or file handle)
+        Second input parameter: output PDG table (string or file handle)
+        Third input parameter: mass spectrum (enumeration value)
+        Gets R-hadron masses based on get_gluino_Rhadron_masses()
+    """
+    # Check that we had the right output file type
+    if type(pdg_table) not in [str,file]:
+        raise RuntimeError('Incorrect output file type: '+str(type(pdg_table)))
+    # Get the masses that we need
+    masses = get_gluino_Rhadron_masses(input_file,mass_spectrum)
+    # Get the output file ready
+    # Open for appending (assume that's what was done if given a file handle)
+    out_file = pdg_table if type(pdg_table)==file else open(pdg_table,'a')
+    # Add all our R-hadrons to the table!
+    for pid in masses:
+        # For the PDG table, we only write positive-signed PDG ID particles
+        if pid<0: continue
+        # Note that we follow the Pythia6 convention of *including* fundamental SUSY particles
+        # The format is VERY specific; needs mass and width (we always set the width to 0)
+        # Mass is in MeV here, rather than GeV as in the dictionary
+        out_file.write('\nM %i                          %11.5E    +0.0E+00 -0.0E+00 %s       %s'%(pid,masses[pid]*1000.,offset_options[pid][2],charge(offset_options[pid][3])))
+        out_file.write('\nW %i                          %11.5E    +0.0E+00 -0.0E+00 %s       %s'%(pid,0.E+00,offset_options[pid][2],charge(offset_options[pid][3])))
+
+    # Done writing all the lines!  Clean up if necessary
+    if type(pdg_table) is str: out_file.close()
+
+    # Nothing to return
+
+
+def update_particle_table(input_file, particle_table='particles.txt', mass_spectrum=1):
+    """ Function to update a particle table with R-hadron masses
+        First input parameter: input file (string or file handle)
+        Second input parameter: output particle table (string or file handle)
+        Third input parameter: mass spectrum (enumeration value)
+        Gets R-hadron masses based on get_gluino_Rhadron_masses()
+    """
+    # Check that we had the right output file type
+    if type(particle_table) not in [str,file]:
+        raise RuntimeError('Incorrect output file type: '+str(type(particle_table)))
+    # Get the masses that we need
+    masses = get_gluino_Rhadron_masses(input_file,mass_spectrum)
+    # Get the output file ready
+    # Open for appending (assume that's what was done if given a file handle)
+    out_file = particle_table if type(particle_table)==file else open(particle_table,'a')
+    # Add all our R-hadrons to the table!
+    # Note that we MUST write the primary first, followed by the compound particles
+    primaries = []
+    extras = []
+    for pid in masses:
+        if offset_options[abs(pid)][0]==0: extras += [pid]
+        elif not offset_options[abs(pid)][0] in primaries: primaries += [ offset_options[abs(pid)][0] ]
+
+    # Rounds per primary
+    for p in primaries:
+        # Note that we follow the old convention of *including* fundamental SUSY particles
+        # The format is VERY specific; needs mass and width (we always set the width to 0)
+        # Mass is in MeV here, rather than GeV as in the dictionary
+        if p>0: out_file.write('     %i  %04.3f   # %s\n'%(p,masses[p],offset_options[abs(p)][2]))
+        # For the anti-particle, also need the anti-name
+        else:     out_file.write('    %i  %04.3f   # %s\n'%(p,masses[p],anti_name(offset_options[abs(p)][2])))
+        # Now include the secondaries
+        for pid in masses:
+            if offset_options[abs(pid)][0]!=p: continue
+            # Note that we follow the old convention of *including* fundamental SUSY particles
+            # The format is VERY specific; needs mass and width (we always set the width to 0)
+            # Mass is in MeV here, rather than GeV as in the dictionary
+            if pid>0: out_file.write('     %i  %04.3f   # %s\n'%(pid,masses[pid],offset_options[abs(pid)][2]))
+            # For the anti-particle, also need the anti-name
+            else:     out_file.write('    %i  %04.3f   # %s\n'%(pid,masses[pid],anti_name(offset_options[abs(pid)][2])))
+        # Done with secondaries for this primary
+
+    for p in extras:
+        if p in primaries: continue
+        if p>0: out_file.write('     %i  %04.3f   # %s\n'%(p,masses[p],offset_options[abs(p)][2]))
+        # For the anti-particle, also need the anti-name
+        else:   out_file.write('    %i  %04.3f   # %s\n'%(p,masses[p],anti_name(offset_options[abs(p)][2])))
+
+    # Done writing all the lines!  Clean up if necessary
+    if type(particle_table) is str: out_file.close()
+
+    # Nothing to return
+
+
+def get_Pythia8_commands(input_file, mass_spectrum=1):
+    """ Function to return a list of Pythia8 commands to set up an R-hadron mass spectrum.
+        First input parameter: input file (string or file handle)
+        Second input parameter: mass spectrum (enumeration value)
+    """
+    # Get the masses for this configuration
+    masses = get_gluino_Rhadron_masses(input_file,mass_spectrum)
+    # Tell Pythia8 we are going to use our own masses
+    commands = ['RHadrons:setMasses = off']
+    
+    # Add commands to set all the masses
+    for pid in masses:
+        # Only set masses for particles (not anti-particles)
+        if pid<0: continue
+        # Actual command takes the form PDGID:m0 = somemass
+        commands += [ str(pid)+':m0 = '+str(masses[pid]) ]
+
+    # All done!
+    return commands
+
+
+def get_interaction_list(input_file, interaction_file='ProcessList.txt', mass_spectrum=1):
+    """ Function to write all possible interactiosn that we need
+        First input parameter: input file (string or file handle)
+        Second input parameter: output PDG table (string or file handle)
+        Third input parameter: mass spectrum (enumeration value)
+        Gets R-hadron masses based on get_gluino_Rhadron_masses()
+    """
+    # Check that we had the right output file type
+    if type(interaction_file) not in [str,file]:
+        raise RuntimeError('Incorrect output file type: '+str(type(interaction_file)))
+    # Get the masses that we need. Note that we don't really need masses, just PDG IDs
+    masses = get_gluino_Rhadron_masses(input_file,mass_spectrum)
+    # Get the output file ready
+    # Open for appending (assume that's what was done if given a file handle)
+    out_file = interaction_file if type(interaction_file)==file else open(interaction_file,'a')
+
+    # Helpful lists to move us along
+    sm_particles = {
+      # Name  :  Charge , Baryon # , Strangeness
+        'pi0' : [  0 , 0 ,  0 ],
+        'pi+' : [  1 , 0 ,  0 ],
+        'pi-' : [ -1 , 0 ,  0 ],
+    'neutron' : [  0 , 1 ,  0 ],
+     'proton' : [  1 , 1 ,  0 ],
+      'kaon0' : [  0 , 0 ,  1 ],
+ 'anti_kaon0' : [  0 , 0 , -1 ],
+      'kaon+' : [  1 , 0 ,  1 ],
+      'kaon-' : [ -1 , 0 , -1 ]
+                   }
+    targets = [ 'proton' , 'neutron' ]
+
+    incoming_rhadrons = {}
+    outgoing_rhadrons = {}
+    for pid in masses:
+        # Only for bound states
+        if offset_options[abs(pid)][0]==0: continue
+        # All of them are on the list of incoming RHadrons
+        # Deal with strangeness
+        # Approximation! Bottom number -> -Charm number -> Strangeness
+        # Approximation needed because I don't know how outgoing SM charms are treated in G4 at the moment
+        s_number = 0
+        if '3' in get_quarks(pid) or '4' in get_quarks(pid) or '5' in get_quarks(pid):
+            if len(get_quarks(pid))>2:
+                s_number = -(get_quarks(pid).count('3')+get_quarks(pid).count('4')+get_quarks(pid).count('5')) if pid>0 else get_quarks(pid).count('3')+get_quarks(pid).count('4')+get_quarks(pid).count('5')
+            else:
+                if get_quarks(pid).count('3') + get_quarks(pid).count('4') + get_quarks(pid).count('5')>1: s_number=0
+                elif offset_options[abs(pid)][3]==0 and ('3' in get_quarks(pid) or '5' in get_quarks(pid)): s_number=1 if pid>0 else -1
+                elif offset_options[abs(pid)][3]==0 and '4' in get_quarks(pid): s_number=1 if pid<0 else -1
+                elif '3' in get_quarks(pid) or '5' in get_quarks(pid): s_number=offset_options[abs(pid)][3]
+                elif '4' in get_quarks(pid): s_number=-offset_options[abs(pid)][3]
+        else: s_number=0
+        # Build the dictionary
+        pid_name = offset_options[pid][2].strip() if pid>0 else anti_name(offset_options[abs(pid)][2]).strip()
+        incoming_rhadrons[pid_name] = [ offset_options[abs(pid)][3] , is_baryon(pid) , s_number ]
+        # Smaller list of outgoing rhadrons.
+        # No charm or bottom
+        if '4' in get_quarks(pid) or '5' in get_quarks(pid): continue
+        outgoing_rhadrons[pid_name] = [ offset_options[abs(pid)][3] , is_baryon(pid) , s_number ]
+
+    # Add all our R-hadrons to the table
+    for proj in incoming_rhadrons:
+        # Loop over targets
+        for t in targets:
+            # Loop over possible outgoing R-hadrons
+            for orhad in outgoing_rhadrons:
+                # Possible 2>2 reactions
+                for osm1 in sm_particles:
+                    # Check for charge conservation
+                    total_charge = incoming_rhadrons[proj][0]+sm_particles[t][0]-outgoing_rhadrons[orhad][0]-sm_particles[osm1][0]
+                    # Check for baryon number conservation
+                    total_bnumber = incoming_rhadrons[proj][1]+sm_particles[t][1]-outgoing_rhadrons[orhad][1]-sm_particles[osm1][1]
+                    # Check for strangeness conservation
+                    total_snumber = incoming_rhadrons[proj][2]+sm_particles[t][2]-outgoing_rhadrons[orhad][2]-sm_particles[osm1][2]
+                    # Check if it's an allowed reaction
+                    if total_charge==0 and total_bnumber==0 and total_snumber==0:
+                        out_file.write( ' # '.join([str(proj),str(t),str(orhad),str(osm1)])+'\n' )
+                    # Now loop over possible 2>3 reactions
+                    for osm2 in sm_particles:
+                        # Check for charge conservation
+                        total_charge = incoming_rhadrons[proj][0]+sm_particles[t][0]-outgoing_rhadrons[orhad][0]-sm_particles[osm1][0]-sm_particles[osm2][0]
+                        # Check for baryon number conservation
+                        total_bnumber = incoming_rhadrons[proj][1]+sm_particles[t][1]-outgoing_rhadrons[orhad][1]-sm_particles[osm1][1]-sm_particles[osm2][1]
+                        # Check for strangeness conservation
+                        total_snumber = incoming_rhadrons[proj][2]+sm_particles[t][2]-outgoing_rhadrons[orhad][2]-sm_particles[osm1][2]-sm_particles[osm2][2]
+                        # Check if it's an allowed reaction
+                        if total_charge==0 and total_bnumber==0 and total_snumber==0:
+                            out_file.write( ' # '.join([str(proj),str(t),str(orhad),str(osm1),str(osm2)])+'\n' )
+                        # Wrote out the reaction
+                    # Loop over 2>3
+                # Loop over 2>2
+            # Loop over outgoing RHadrons
+        # Loop over targets
+    # Loop over projectiles
+
+    # Done writing all the lines!  Clean up if necessary
+    if type(interaction_file) is str: out_file.close()
+
+    # Nothing to return
+
+
+def print_masses(spectrum=-1):
+    """ Print the mass spectra.
+    Input parameter: spectrum number.  If -1, print all spectra.
+    """
+    for i in sorted(offset_options.keys()):
+        s= str(offset_options[i][2])+' '+str(i)
+        if spectrum<0:
+            for j in xrange(first_mass_set,len(offset_options[i])): s+=' '+str(offset_options[i][j])
+        else:
+            if first_mass_set+spectrum>len(offset_options[i]):
+                raise RuntimeError('Spectrum #'+str(spectrum)+' not known for PID '+str(i))
+            else:
+                s+=' '+str(offset_options[i][spectrum+first_mass_set])
+        print s
+    # Done!
diff --git a/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py b/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
index 7836a5cd34fd..045f902fee1d 100644
--- a/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
+++ b/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
@@ -11,5 +11,19 @@ def getSG_StepNtupleTool(name="G4UA::SG_StepNtupleTool", **kwargs):
         #from AthenaCommon.AppMgr import theApp
         #theApp.exit(1)
         return False
+    # Get the PDG IDs for RHadrons
+    from RHadronMasses import offset_options
+    kwargs.setdefault('RHadronPDGIDList',offset_options.keys())
+    if name in simFlags.UserActionConfig.get_Value().keys():
+        for prop,value in simFlags.UserActionConfig.get_Value()[name].iteritems():
+            kwargs.setdefault(prop,value)
     from RHadrons.RHadronsConf import G4UA__SG_StepNtupleTool
     return G4UA__SG_StepNtupleTool(name, **kwargs)
+
+def getRHadronsPythiaPhysicsTool(name='RHadronsPythiaPhysicsTool', **kwargs):
+    kwargs.setdefault('UsePythia8',False)
+    return CfgMgr.RHadronsPhysicsTool(name,**kwargs)
+
+def getRHadronsPythia8PhysicsTool(name='RHadronsPythia8PhysicsTool', **kwargs):
+    kwargs.setdefault('UsePythia8',True)
+    return CfgMgr.RHadronsPhysicsTool(name,**kwargs)
diff --git a/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py b/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
index 9751a4f9f142..e215e5899b9e 100644
--- a/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
+++ b/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
@@ -3,4 +3,5 @@
 from AthenaCommon.CfgGetter import addTool
 
 addTool("RHadrons.RHadronsConfig.getSG_StepNtupleTool", "G4UA::SG_StepNtupleTool")
-
+addTool("RHadrons.RHadronsConfig.getRHadronsPythiaPhysicsTool", "RHadronsPythiaPhysicsTool")
+addTool("RHadrons.RHadronsConfig.getRHadronsPythia8PhysicsTool", "RHadronsPythia8PhysicsTool")
diff --git a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_generic.txt b/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_generic.txt
deleted file mode 100644
index 313551cf0c98..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_generic.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Resonant = 0.
-XsecMultiplier = 1.
-ResonanceEnergy = 200.
-Gamma = 0.1
-Amplitude = 100.
-ReggeSuppression = 0.
-HadronLifeTime = 100.
-ReggeModel = 0.
-Mixing = 0.
diff --git a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge.txt b/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge.txt
deleted file mode 100644
index 26a94d62713d..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Resonant = 0.
-XsecMultiplier = 1.
-ResonanceEnergy = 200.
-Gamma = 0.1
-Amplitude = 100.
-ReggeSuppression = 0.
-HadronLifeTime = 100.
-ReggeModel = 1.
-Mixing = 1.
diff --git a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge_nomix.txt b/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge_nomix.txt
deleted file mode 100644
index 816a0814bfc3..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/PhysicsConfiguration_regge_nomix.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Resonant = 0.
-XsecMultiplier = 1.
-ResonanceEnergy = 200.
-Gamma = 0.1
-Amplitude = 100.
-ReggeSuppression = 0.
-HadronLifeTime = 100.
-ReggeModel = 1.
-Mixing = 0.
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_gluino.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_gluino.txt
deleted file mode 100644
index c6ae15ef1abf..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_gluino.txt
+++ /dev/null
@@ -1,487 +0,0 @@
-~g_rho+ # proton # ~g_rho+ # proton 
-~g_rho0 # proton # ~g_rho0 # proton 
-~g_rho- # proton # ~g_rho- # proton 
-~g_rho+ # proton # ~g_Delta++ # pi0 
-~g_rho0 # proton # ~g_rho+ # neutron 
-~g_rho- # proton # ~g_rho0 # neutron 
-~g_rho+ # proton # ~g_Delta+ # pi+ 
-~g_rho0 # proton # ~g_Delta++ # pi- 
-~g_rho- # proton # ~g_Delta+ # pi- 
-~g_rho0 # proton # ~g_Delta+ # pi0 
-~g_rho- # proton # ~g_Delta0 # pi0 
-~g_rho0 # proton # ~g_Delta0 # pi+ 
-~g_rho+ # neutron # ~g_rho+ # neutron 
-~g_rho0 # neutron # ~g_rho0 # neutron 
-~g_rho- # neutron # ~g_rho- # neutron 
-~g_rho+ # neutron # ~g_rho0 # proton 
-~g_rho0 # neutron # ~g_rho- # proton 
-~g_rho- # neutron # ~g_rho0 # pi- 
-~g_rho+ # neutron # ~g_Delta++ # pi- 
-~g_rho0 # neutron # ~g_Delta+ # pi- 
-~g_rho- # neutron # ~g_Delta0 # pi- 
-~g_rho+ # neutron # ~g_Delta+ # pi0 
-~g_rho0 # neutron # ~g_Delta0 # pi0 
-~g_rho0 # neutron # ~g_Delta- # pi0 
-~g_rho+ # neutron # ~g_Delta0 # pi+ 
-~g_rho0 # neutron # ~g_Delta- # pi+ 
-~g_rho+ # proton # ~g_rho+ # proton # pi0 
-~g_rho0 # proton # ~g_rho0 # proton # pi0 
-~g_rho- # proton # ~g_rho- # proton # pi0 
-~g_rho0 # proton # ~g_rho+ # neutron # pi+ 
-~g_rho0 # proton # ~g_rho0 # neutron # pi+ 
-~g_rho- # proton # ~g_rho- # neutron # pi+ 
-~g_rho+ # proton # ~g_rho0 # proton # pi+ 
-~g_rho0 # proton # ~g_rho+ # proton # pi- 
-~g_rho- # proton # ~g_rho+ # neutron # pi- 
-~g_rho+ # proton # ~g_Delta++ # pi0 # pi0 
-~g_rho0 # proton # ~g_rho+ # neutron # pi0 
-~g_rho- # proton # ~g_rho0 # proton # pi- 
-~g_rho+ # proton # ~g_Delta++ # pi+ # pi- 
-~g_rho0 # proton # ~g_rho- # proton # pi+ 
-~g_rho- # proton # ~g_rho0 # neutron # pi0 
-~g_rho+ # proton # ~g_Delta+ # pi+ # pi0 
-~g_rho0 # proton # ~g_Delta++ # pi0 # pi- 
-~g_rho- # proton # ~g_Delta++ # pi- # pi- 
-~g_rho+ # proton # ~g_Delta0 # pi+ # pi+ 
-~g_rho0 # proton # ~g_Delta+ # pi0 # pi0 
-~g_rho- # proton # ~g_Delta+ # pi0 # pi- 
-~g_rho0 # proton # ~g_Delta+ # pi+ # pi- 
-~g_rho- # proton # ~g_Delta0 # pi0 # pi0 
-~g_rho0 # proton # ~g_Delta0 # pi+ # pi0 
-~g_rho- # proton # ~g_Delta0 # pi+ # pi- 
-~g_rho0 # proton # ~g_Delta- # pi+ # pi+ 
-~g_rho- # proton # ~g_Delta- # pi+ # pi0 
-~g_rho+ # neutron # ~g_rho+ # neutron # pi0 
-~g_rho0 # neutron # ~g_rho0 # neutron # pi0 
-~g_rho- # neutron # ~g_rho- # neutron # pi0 
-~g_rho+ # neutron # ~g_rho+ # proton # pi- 
-~g_rho0 # neutron # ~g_rho0 # proton # pi- 
-~g_rho- # neutron # ~g_rho- # proton # pi- 
-~g_rho+ # neutron # ~g_rho0 # proton # pi0 
-~g_rho0 # neutron # ~g_rho+ # neutron # pi- 
-~g_rho- # neutron # ~g_rho0 # neutron # pi- 
-~g_rho+ # neutron # ~g_rho0 # neutron # pi+ 
-~g_rho0 # neutron # ~g_rho- # proton # pi0 
-~g_rho- # neutron # ~g_Delta+ # pi- # pi- 
-~g_rho+ # neutron # ~g_rho- # proton # pi+ 
-~g_rho0 # neutron # ~g_rho- # neutron # pi+ 
-~g_rho- # neutron # ~g_Delta0 # pi- # pi0 
-~g_rho+ # neutron # ~g_Delta++ # pi0 # pi- 
-~g_rho0 # neutron # ~g_Delta++ # pi- # pi- 
-~g_rho- # neutron # ~g_Delta- # pi0 # pi0 
-~g_rho+ # neutron # ~g_Delta+ # pi0 # pi0 
-~g_rho0 # neutron # ~g_Delta+ # pi- # pi0 
-~g_rho- # neutron # ~g_Delta- # pi+ # pi- 
-~g_rho+ # neutron # ~g_Delta+ # pi+ # pi- 
-~g_rho0 # neutron # ~g_Delta0 # pi0 # pi0 
-~g_rho+ # neutron # ~g_Delta0 # pi+ # pi0 
-~g_rho0 # neutron # ~g_Delta0 # pi+ # pi- 
-~g_rho+ # neutron # ~g_Delta- # pi+ # pi+ 
-~g_rho0 # neutron # ~g_Delta- # pi+ # pi0 
-~g_Delta++ # proton # ~g_Delta++ # proton 
-~g_Delta+ # proton # ~g_Delta+ # proton 
-~g_Delta0 # proton # ~g_Delta0 # proton 
-~g_Delta- # proton # ~g_Delta- # proton 
-~g_Delta+ # proton # ~g_Delta++ # neutron 
-~g_Delta0 # proton # ~g_Delta+ # neutron 
-~g_Delta- # proton # ~g_Delta0 # neutron 
-~g_Delta++ # neutron # ~g_Delta++ # neutron 
-~g_Delta+ # neutron # ~g_Delta+ # neutron 
-~g_Delta0 # neutron # ~g_Delta0 # neutron 
-~g_Delta- # neutron # ~g_Delta- # neutron 
-~g_Delta++ # neutron # ~g_Delta+ # proton 
-~g_Delta+ # neutron # ~g_Delta0 # proton 
-~g_Delta0 # neutron # ~g_Delta- # proton 
-~g_Delta++ # proton # ~g_Delta++ # proton # pi0 
-~g_Delta+ # proton # ~g_Delta+ # proton # pi0 
-~g_Delta0 # proton # ~g_Delta0 # proton # pi0 
-~g_Delta- # proton # ~g_Delta- # proton # pi0 
-~g_Delta++ # proton # ~g_Delta++ # neutron # pi+ 
-~g_Delta+ # proton # ~g_Delta+ # neutron # pi+ 
-~g_Delta0 # proton # ~g_Delta0 # neutron # pi+ 
-~g_Delta- # proton # ~g_Delta- # neutron # pi+ 
-~g_Delta++ # proton # ~g_Delta+ # proton # pi+ 
-~g_Delta+ # proton # ~g_Delta++ # neutron # pi0 
-~g_Delta0 # proton # ~g_Delta+ # neutron # pi0 
-~g_Delta- # proton # ~g_Delta+ # proton # pi+ 
-~g_Delta+ # proton # ~g_Delta++ # proton # pi- 
-~g_Delta0 # proton # ~g_Delta+ # proton # pi- 
-~g_Delta- # proton # ~g_Delta0 # proton # pi- 
-~g_Delta+ # proton # ~g_Delta0 # proton # pi+ 
-~g_Delta0 # proton # ~g_Delta- # proton # pi+ 
-~g_Delta- # proton # ~g_Delta0 # neutron # pi0 
-~g_Delta++ # neutron # ~g_Delta++ # neutron # pi0 
-~g_Delta+ # neutron # ~g_Delta+ # neutron # pi0 
-~g_Delta0 # neutron # ~g_Delta0 # neutron # pi0 
-~g_Delta- # neutron # ~g_Delta- # neutron # pi0 
-~g_Delta++ # neutron # ~g_Delta++ # proton # pi- 
-~g_Delta+ # neutron # ~g_Delta+ # proton # pi- 
-~g_Delta0 # neutron # ~g_Delta0 # proton # pi- 
-~g_Delta- # neutron # ~g_Delta- # proton # pi- 
-~g_Delta++ # neutron # ~g_Delta+ # proton # pi0 
-~g_Delta+ # neutron # ~g_Delta++ # neutron # pi- 
-~g_Delta0 # neutron # ~g_Delta+ # neutron # pi- 
-~g_Delta- # neutron # ~g_Delta0 # neutron # pi- 
-~g_Delta++ # neutron # ~g_Delta+ # neutron # pi+ 
-~g_Delta+ # neutron # ~g_Delta0 # proton # pi0 
-~g_Delta0 # neutron # ~g_Delta- # neutron # pi+ 
-~g_Delta++ # neutron # ~g_Delta0 # proton # pi+ 
-~g_Delta+ # neutron # ~g_Delta0 # neutron # pi+ 
-~g_Delta+ # neutron # ~g_Delta- # proton # pi+ 
-~g_K*+ # proton # ~g_rho+ # proton 
-~g_K*+ # proton # ~g_Delta++ # pi0 
-~g_K*+ # proton # ~g_Delta+ # pi+ 
-~g_K*+ # neutron # ~g_rho+ # neutron 
-~g_K*+ # neutron # ~g_rho0 # proton 
-~g_K*+ # neutron # ~g_Delta++ # pi- 
-~g_K*+ # neutron # ~g_Delta+ # pi0 
-~g_K*+ # neutron # ~g_Delta0 # pi+ 
-~g_K*+ # proton # ~g_rho+ # proton # pi0 
-~g_K*+ # proton # ~g_rho0 # proton # pi+ 
-~g_K*+ # proton # ~g_Delta++ # pi0 # pi0 
-~g_K*+ # proton # ~g_Delta++ # pi+ # pi- 
-~g_K*+ # proton # ~g_Delta+ # pi+ # pi0 
-~g_K*+ # proton # ~g_Delta0 # pi+ # pi+ 
-~g_K*+ # neutron # ~g_rho+ # neutron # pi0 
-~g_K*+ # neutron # ~g_rho+ # proton # pi- 
-~g_K*+ # neutron # ~g_rho0 # proton # pi0 
-~g_K*+ # neutron # ~g_rho0 # neutron # pi+ 
-~g_K*+ # neutron # ~g_rho- # proton # pi+ 
-~g_K*+ # neutron # ~g_Delta++ # pi0 # pi- 
-~g_K*+ # neutron # ~g_Delta+ # pi0 # pi0 
-~g_K*+ # neutron # ~g_Delta+ # pi+ # pi- 
-~g_K*+ # neutron # ~g_Delta0 # pi+ # pi0 
-~g_K*+ # neutron # ~g_Delta- # pi+ # pi+ 
-~g_K*0 # proton # ~g_rho0 # proton 
-~g_K*0 # proton # ~g_rho+ # neutron 
-~g_K*0 # proton # ~g_Delta++ # pi- 
-~g_K*0 # proton # ~g_Delta+ # pi0 
-~g_K*0 # proton # ~g_Delta0 # pi+ 
-~g_K*0 # neutron # ~g_rho0 # neutron 
-~g_K*0 # neutron # ~g_rho- # proton 
-~g_K*0 # neutron # ~g_Delta+ # pi- 
-~g_K*0 # neutron # ~g_Delta0 # pi0 
-~g_K*0 # neutron # ~g_Delta- # pi0 
-~g_K*0 # neutron # ~g_Delta- # pi+ 
-~g_K*0 # proton # ~g_rho0 # proton # pi0 
-~g_K*0 # proton # ~g_rho+ # neutron # pi+ 
-~g_K*0 # proton # ~g_rho0 # neutron # pi+ 
-~g_K*0 # proton # ~g_rho+ # proton # pi- 
-~g_K*0 # proton # ~g_rho+ # neutron # pi0 
-~g_K*0 # proton # ~g_rho- # proton # pi+ 
-~g_K*0 # proton # ~g_Delta++ # pi0 # pi- 
-~g_K*0 # proton # ~g_Delta+ # pi0 # pi0 
-~g_K*0 # proton # ~g_Delta+ # pi+ # pi- 
-~g_K*0 # proton # ~g_Delta0 # pi+ # pi0 
-~g_K*0 # proton # ~g_Delta- # pi+ # pi+ 
-~g_K*0 # neutron # ~g_rho0 # neutron # pi0 
-~g_K*0 # neutron # ~g_rho0 # proton # pi- 
-~g_K*0 # neutron # ~g_rho+ # neutron # pi- 
-~g_K*0 # neutron # ~g_rho- # proton # pi0 
-~g_K*0 # neutron # ~g_rho- # neutron # pi+ 
-~g_K*0 # neutron # ~g_Delta++ # pi- # pi- 
-~g_K*0 # neutron # ~g_Delta+ # pi- # pi0 
-~g_K*0 # neutron # ~g_Delta0 # pi0 # pi0 
-~g_K*0 # neutron # ~g_Delta0 # pi+ # pi- 
-~g_K*0 # neutron # ~g_Delta- # pi+ # pi0 
-~g_omega # proton # ~g_rho0 # proton 
-~g_omega # proton # ~g_rho+ # neutron 
-~g_omega # proton # ~g_Delta++ # pi- 
-~g_omega # proton # ~g_Delta+ # pi0 
-~g_omega # proton # ~g_Delta0 # pi+ 
-~g_omega # neutron # ~g_rho0 # neutron 
-~g_omega # neutron # ~g_rho- # proton 
-~g_omega # neutron # ~g_Delta+ # pi- 
-~g_omega # neutron # ~g_Delta0 # pi0 
-~g_omega # neutron # ~g_Delta- # pi0 
-~g_omega # neutron # ~g_Delta- # pi+ 
-~g_omega # proton # ~g_rho0 # proton # pi0 
-~g_omega # proton # ~g_rho+ # neutron # pi+ 
-~g_omega # proton # ~g_rho0 # neutron # pi+ 
-~g_omega # proton # ~g_rho+ # proton # pi- 
-~g_omega # proton # ~g_rho+ # neutron # pi0 
-~g_omega # proton # ~g_rho- # proton # pi+ 
-~g_omega # proton # ~g_Delta++ # pi0 # pi- 
-~g_omega # proton # ~g_Delta+ # pi0 # pi0 
-~g_omega # proton # ~g_Delta+ # pi+ # pi- 
-~g_omega # proton # ~g_Delta0 # pi+ # pi0 
-~g_omega # proton # ~g_Delta- # pi+ # pi+ 
-~g_omega # neutron # ~g_rho0 # neutron # pi0 
-~g_omega # neutron # ~g_rho0 # proton # pi- 
-~g_omega # neutron # ~g_rho+ # neutron # pi- 
-~g_omega # neutron # ~g_rho- # proton # pi0 
-~g_omega # neutron # ~g_rho- # neutron # pi+ 
-~g_omega # neutron # ~g_Delta++ # pi- # pi- 
-~g_omega # neutron # ~g_Delta+ # pi- # pi0 
-~g_omega # neutron # ~g_Delta0 # pi0 # pi0 
-~g_omega # neutron # ~g_Delta0 # pi+ # pi- 
-~g_omega # neutron # ~g_Delta- # pi+ # pi0 
-~g_phi # proton # ~g_rho0 # proton 
-~g_phi # proton # ~g_rho+ # neutron 
-~g_phi # proton # ~g_Delta++ # pi- 
-~g_phi # proton # ~g_Delta+ # pi0 
-~g_phi # proton # ~g_Delta0 # pi+ 
-~g_phi # neutron # ~g_rho0 # neutron 
-~g_phi # neutron # ~g_rho- # proton 
-~g_phi # neutron # ~g_Delta+ # pi- 
-~g_phi # neutron # ~g_Delta0 # pi0 
-~g_phi # neutron # ~g_Delta- # pi0 
-~g_phi # neutron # ~g_Delta- # pi+ 
-~g_phi # proton # ~g_rho0 # proton # pi0 
-~g_phi # proton # ~g_rho+ # neutron # pi+ 
-~g_phi # proton # ~g_rho0 # neutron # pi+ 
-~g_phi # proton # ~g_rho+ # proton # pi- 
-~g_phi # proton # ~g_rho+ # neutron # pi0 
-~g_phi # proton # ~g_rho- # proton # pi+ 
-~g_phi # proton # ~g_Delta++ # pi0 # pi- 
-~g_phi # proton # ~g_Delta+ # pi0 # pi0 
-~g_phi # proton # ~g_Delta+ # pi+ # pi- 
-~g_phi # proton # ~g_Delta0 # pi+ # pi0 
-~g_phi # proton # ~g_Delta- # pi+ # pi+ 
-~g_phi # neutron # ~g_rho0 # neutron # pi0 
-~g_phi # neutron # ~g_rho0 # proton # pi- 
-~g_phi # neutron # ~g_rho+ # neutron # pi- 
-~g_phi # neutron # ~g_rho- # proton # pi0 
-~g_phi # neutron # ~g_rho- # neutron # pi+ 
-~g_phi # neutron # ~g_Delta++ # pi- # pi- 
-~g_phi # neutron # ~g_Delta+ # pi- # pi0 
-~g_phi # neutron # ~g_Delta0 # pi0 # pi0 
-~g_phi # neutron # ~g_Delta0 # pi+ # pi- 
-~g_phi # neutron # ~g_Delta- # pi+ # pi0 
-~g_Sigma*- # proton # ~g_Delta- # proton 
-~g_Sigma*- # proton # ~g_Delta0 # neutron 
-~g_Sigma*- # neutron # ~g_Delta- # neutron 
-~g_Sigma*- # proton # ~g_Delta- # proton # pi0 
-~g_Sigma*- # proton # ~g_Delta- # neutron # pi+ 
-~g_Sigma*- # proton # ~g_Delta+ # proton # pi+ 
-~g_Sigma*- # proton # ~g_Delta0 # proton # pi- 
-~g_Sigma*- # proton # ~g_Delta0 # neutron # pi0 
-~g_Sigma*- # neutron # ~g_Delta- # neutron # pi0 
-~g_Sigma*- # neutron # ~g_Delta- # proton # pi- 
-~g_Sigma*- # neutron # ~g_Delta0 # neutron # pi- 
-~g_Sigma*0 # proton # ~g_Delta0 # proton 
-~g_Sigma*0 # proton # ~g_Delta+ # neutron 
-~g_Sigma*0 # neutron # ~g_Delta0 # neutron 
-~g_Sigma*0 # neutron # ~g_Delta- # proton 
-~g_Sigma*0 # proton # ~g_Delta0 # proton # pi0 
-~g_Sigma*0 # proton # ~g_Delta0 # neutron # pi+ 
-~g_Sigma*0 # proton # ~g_Delta+ # neutron # pi0 
-~g_Sigma*0 # proton # ~g_Delta+ # proton # pi- 
-~g_Sigma*0 # proton # ~g_Delta- # proton # pi+ 
-~g_Sigma*0 # neutron # ~g_Delta0 # neutron # pi0 
-~g_Sigma*0 # neutron # ~g_Delta0 # proton # pi- 
-~g_Sigma*0 # neutron # ~g_Delta+ # neutron # pi- 
-~g_Sigma*0 # neutron # ~g_Delta- # neutron # pi+ 
-~g_Sigma*+ # proton # ~g_Delta+ # proton 
-~g_Sigma*+ # proton # ~g_Delta++ # neutron 
-~g_Sigma*+ # neutron # ~g_Delta+ # neutron 
-~g_Sigma*+ # neutron # ~g_Delta0 # proton 
-~g_Sigma*+ # proton # ~g_Delta+ # proton # pi0 
-~g_Sigma*+ # proton # ~g_Delta+ # neutron # pi+ 
-~g_Sigma*+ # proton # ~g_Delta++ # neutron # pi0 
-~g_Sigma*+ # proton # ~g_Delta++ # proton # pi- 
-~g_Sigma*+ # proton # ~g_Delta0 # proton # pi+ 
-~g_Sigma*+ # neutron # ~g_Delta+ # neutron # pi0 
-~g_Sigma*+ # neutron # ~g_Delta+ # proton # pi- 
-~g_Sigma*+ # neutron # ~g_Delta++ # neutron # pi- 
-~g_Sigma*+ # neutron # ~g_Delta0 # proton # pi0 
-~g_Sigma*+ # neutron # ~g_Delta0 # neutron # pi+ 
-~g_Sigma*+ # neutron # ~g_Delta- # proton # pi+ 
-~g_Xi*- # proton # ~g_Delta- # proton 
-~g_Xi*- # proton # ~g_Delta0 # neutron 
-~g_Xi*- # neutron # ~g_Delta- # neutron 
-~g_Xi*- # proton # ~g_Delta- # proton # pi0 
-~g_Xi*- # proton # ~g_Delta- # neutron # pi+ 
-~g_Xi*- # proton # ~g_Delta+ # proton # pi+ 
-~g_Xi*- # proton # ~g_Delta0 # proton # pi- 
-~g_Xi*- # proton # ~g_Delta0 # neutron # pi0 
-~g_Xi*- # neutron # ~g_Delta- # neutron # pi0 
-~g_Xi*- # neutron # ~g_Delta- # proton # pi- 
-~g_Xi*- # neutron # ~g_Delta0 # neutron # pi- 
-~g_Xi*0 # proton # ~g_Delta0 # proton 
-~g_Xi*0 # proton # ~g_Delta+ # neutron 
-~g_Xi*0 # neutron # ~g_Delta0 # neutron 
-~g_Xi*0 # neutron # ~g_Delta- # proton 
-~g_Xi*0 # proton # ~g_Delta0 # proton # pi0 
-~g_Xi*0 # proton # ~g_Delta0 # neutron # pi+ 
-~g_Xi*0 # proton # ~g_Delta+ # neutron # pi0 
-~g_Xi*0 # proton # ~g_Delta+ # proton # pi- 
-~g_Xi*0 # proton # ~g_Delta- # proton # pi+ 
-~g_Xi*0 # neutron # ~g_Delta0 # neutron # pi0 
-~g_Xi*0 # neutron # ~g_Delta0 # proton # pi- 
-~g_Xi*0 # neutron # ~g_Delta+ # neutron # pi- 
-~g_Xi*0 # neutron # ~g_Delta- # neutron # pi+ 
-~g_Omega- # proton # ~g_Delta- # proton 
-~g_Omega- # proton # ~g_Delta0 # neutron 
-~g_Omega- # neutron # ~g_Delta- # neutron 
-~g_Omega- # proton # ~g_Delta- # proton # pi0 
-~g_Omega- # proton # ~g_Delta- # neutron # pi+ 
-~g_Omega- # proton # ~g_Delta+ # proton # pi+ 
-~g_Omega- # proton # ~g_Delta0 # proton # pi- 
-~g_Omega- # proton # ~g_Delta0 # neutron # pi0 
-~g_Omega- # neutron # ~g_Delta- # neutron # pi0 
-~g_Omega- # neutron # ~g_Delta- # proton # pi- 
-~g_Omega- # neutron # ~g_Delta0 # neutron # pi- 
-~g_K*- # proton # ~g_rho- # proton 
-~g_K*- # proton # ~g_rho0 # neutron 
-~g_K*- # proton # ~g_Delta+ # pi- 
-~g_K*- # proton # ~g_Delta0 # pi0 
-~g_K*- # neutron # ~g_rho- # neutron 
-~g_K*- # neutron # ~g_rho0 # pi- 
-~g_K*- # neutron # ~g_Delta0 # pi- 
-~g_K*- # proton # ~g_rho- # proton # pi0 
-~g_K*- # proton # ~g_rho- # neutron # pi+ 
-~g_K*- # proton # ~g_rho+ # neutron # pi- 
-~g_K*- # proton # ~g_rho0 # proton # pi- 
-~g_K*- # proton # ~g_rho0 # neutron # pi0 
-~g_K*- # proton # ~g_Delta++ # pi- # pi- 
-~g_K*- # proton # ~g_Delta+ # pi0 # pi- 
-~g_K*- # proton # ~g_Delta0 # pi0 # pi0 
-~g_K*- # proton # ~g_Delta0 # pi+ # pi- 
-~g_K*- # proton # ~g_Delta- # pi+ # pi0 
-~g_K*- # neutron # ~g_rho- # neutron # pi0 
-~g_K*- # neutron # ~g_rho- # proton # pi- 
-~g_K*- # neutron # ~g_rho0 # neutron # pi- 
-~g_K*- # neutron # ~g_Delta+ # pi- # pi- 
-~g_K*- # neutron # ~g_Delta0 # pi- # pi0 
-~g_K*- # neutron # ~g_Delta- # pi0 # pi0 
-~g_K*- # neutron # ~g_Delta- # pi+ # pi- 
-~g_glueball # proton # ~g_rho0 # proton 
-~g_glueball # proton # ~g_rho+ # neutron 
-~g_glueball # proton # ~g_Delta++ # pi- 
-~g_glueball # proton # ~g_Delta+ # pi0 
-~g_glueball # proton # ~g_Delta0 # pi+ 
-~g_glueball # neutron # ~g_rho0 # neutron 
-~g_glueball # neutron # ~g_rho- # proton 
-~g_glueball # neutron # ~g_Delta+ # pi- 
-~g_glueball # neutron # ~g_Delta0 # pi0 
-~g_glueball # neutron # ~g_Delta- # pi0 
-~g_glueball # neutron # ~g_Delta- # pi+ 
-~g_glueball # proton # ~g_rho0 # proton # pi0 
-~g_glueball # proton # ~g_rho+ # neutron # pi+ 
-~g_glueball # proton # ~g_rho0 # neutron # pi+ 
-~g_glueball # proton # ~g_rho+ # proton # pi- 
-~g_glueball # proton # ~g_rho+ # neutron # pi0 
-~g_glueball # proton # ~g_rho- # proton # pi+ 
-~g_glueball # proton # ~g_Delta++ # pi0 # pi- 
-~g_glueball # proton # ~g_Delta+ # pi0 # pi0 
-~g_glueball # proton # ~g_Delta+ # pi+ # pi- 
-~g_glueball # proton # ~g_Delta0 # pi+ # pi0 
-~g_glueball # proton # ~g_Delta- # pi+ # pi+ 
-~g_glueball # neutron # ~g_rho0 # neutron # pi0 
-~g_glueball # neutron # ~g_rho0 # proton # pi- 
-~g_glueball # neutron # ~g_rho+ # neutron # pi- 
-~g_glueball # neutron # ~g_rho- # proton # pi0 
-~g_glueball # neutron # ~g_rho- # neutron # pi+ 
-~g_glueball # neutron # ~g_Delta++ # pi- # pi- 
-~g_glueball # neutron # ~g_Delta+ # pi- # pi0 
-~g_glueball # neutron # ~g_Delta0 # pi0 # pi0 
-~g_glueball # neutron # ~g_Delta0 # pi+ # pi- 
-~g_glueball # neutron # ~g_Delta- # pi+ # pi0 
-~g_K*bar0 # proton # ~g_rho0 # proton 
-~g_K*bar0 # proton # ~g_rho+ # neutron 
-~g_K*bar0 # proton # ~g_Delta++ # pi- 
-~g_K*bar0 # proton # ~g_Delta+ # pi0 
-~g_K*bar0 # proton # ~g_Delta0 # pi+ 
-~g_K*bar0 # neutron # ~g_rho0 # neutron 
-~g_K*bar0 # neutron # ~g_rho- # proton 
-~g_K*bar0 # neutron # ~g_Delta+ # pi- 
-~g_K*bar0 # neutron # ~g_Delta0 # pi0 
-~g_K*bar0 # neutron # ~g_Delta- # pi0 
-~g_K*bar0 # neutron # ~g_Delta- # pi+ 
-~g_K*bar0 # proton # ~g_rho0 # proton # pi0 
-~g_K*bar0 # proton # ~g_rho+ # neutron # pi+ 
-~g_K*bar0 # proton # ~g_rho0 # neutron # pi+ 
-~g_K*bar0 # proton # ~g_rho+ # proton # pi- 
-~g_K*bar0 # proton # ~g_rho+ # neutron # pi0 
-~g_K*bar0 # proton # ~g_rho- # proton # pi+ 
-~g_K*bar0 # proton # ~g_Delta++ # pi0 # pi- 
-~g_K*bar0 # proton # ~g_Delta+ # pi0 # pi0 
-~g_K*bar0 # proton # ~g_Delta+ # pi+ # pi- 
-~g_K*bar0 # proton # ~g_Delta0 # pi+ # pi0 
-~g_K*bar0 # proton # ~g_Delta- # pi+ # pi+ 
-~g_K*bar0 # neutron # ~g_rho0 # neutron # pi0 
-~g_K*bar0 # neutron # ~g_rho0 # proton # pi- 
-~g_K*bar0 # neutron # ~g_rho+ # neutron # pi- 
-~g_K*bar0 # neutron # ~g_rho- # proton # pi0 
-~g_K*bar0 # neutron # ~g_rho- # neutron # pi+ 
-~g_K*bar0 # neutron # ~g_Delta++ # pi- # pi- 
-~g_K*bar0 # neutron # ~g_Delta+ # pi- # pi0 
-~g_K*bar0 # neutron # ~g_Delta0 # pi0 # pi0 
-~g_K*bar0 # neutron # ~g_Delta0 # pi+ # pi- 
-~g_K*bar0 # neutron # ~g_Delta- # pi+ # pi0 
-~g_Deltabar-- # proton # ~g_Deltabar-- # proton
-~g_Deltabar-- # proton # ~g_rho0 # pi0 # pi-
-~g_Deltabar-- # proton # ~g_rho- # pi0 # pi0
-~g_Deltabar- # proton # ~g_Deltabar- # proton
-~g_Deltabar- # proton # ~g_rho0 # pi0 # pi0
-~g_Deltabar- # proton # ~g_rho+ # pi0 # pi-
-~g_Deltabar- # proton # ~g_rho- # pi0 # pi+
-~g_Deltabar0 # proton # ~g_Deltabar0 # proton
-~g_Deltabar0 # proton # ~g_rho0 # pi0 # pi+
-~g_Deltabar0 # proton # ~g_rho+ # pi0 # pi0
-~g_Deltabar0 # proton # ~g_rho+ # pi- # pi+
-~g_Deltabar0 # proton # ~g_rho- # pi+ # pi+
-~g_Deltabar+ # proton # ~g_Deltabar+ # proton
-~g_Deltabar+ # proton # ~g_rho0 # pi+ # pi+
-~g_Deltabar+ # proton # ~g_rho+ # pi0 # pi+
-~g_Deltabar-- # neutron # ~g_Deltabar-- # neutron
-~g_Deltabar-- # neutron # ~g_rho0 # pi- # pi-
-~g_Deltabar-- # neutron # ~g_rho- # pi0 # pi-
-~g_Deltabar- # neutron # ~g_Deltabar- # neutron
-~g_Deltabar- # neutron # ~g_rho0 # pi0 # pi-
-~g_Deltabar- # neutron # ~g_rho- # pi0 # pi0
-~g_Deltabar- # neutron # ~g_rho- # pi+ # pi-
-~g_Deltabar- # neutron # ~g_rho+ # pi- # pi-
-~g_Deltabar0 # neutron # ~g_Deltabar0 # neutron
-~g_Deltabar0 # neutron # ~g_rho0 # pi0 # pi0
-~g_Deltabar0 # neutron # ~g_rho+ # pi- # pi0
-~g_Deltabar0 # neutron # ~g_rho- # pi+ # pi0
-~g_Deltabar+ # neutron # ~g_Deltabar+ # neutron
-~g_Deltabar+ # neutron # ~g_rho+ # pi0 # pi0
-~g_Deltabar+ # neutron # ~g_rho0 # pi+ # pi0
-~g_Sigma*bar- # proton # ~g_Sigma*bar- # proton
-~g_Sigma*bar- # proton # ~g_rho0 # pi0 # pi0
-~g_Sigma*bar- # proton # ~g_rho+ # pi0 # pi-
-~g_Sigma*bar- # proton # ~g_rho- # pi0 # pi+
-~g_Sigma*bar0 # proton # ~g_Sigma*bar0 # proton
-~g_Sigma*bar0 # proton # ~g_rho0 # pi0 # pi+
-~g_Sigma*bar0 # proton # ~g_rho+ # pi0 # pi0
-~g_Sigma*bar0 # proton # ~g_rho+ # pi- # pi+
-~g_Sigma*bar0 # proton # ~g_rho- # pi+ # pi+
-~g_Sigma*bar+ # proton # ~g_Sigma*bar+ # proton
-~g_Sigma*bar+ # proton # ~g_rho0 # pi+ # pi+
-~g_Sigma*bar+ # proton # ~g_rho+ # pi0 # pi+
-~g_Sigma*bar- # neutron # ~g_Sigma*bar- # neutron
-~g_Sigma*bar- # neutron # ~g_rho0 # pi0 # pi-
-~g_Sigma*bar- # neutron # ~g_rho- # pi0 # pi0
-~g_Sigma*bar- # neutron # ~g_rho- # pi+ # pi-
-~g_Sigma*bar- # neutron # ~g_rho+ # pi- # pi-
-~g_Sigma*bar0 # neutron # ~g_Sigma*bar0 # neutron
-~g_Sigma*bar0 # neutron # ~g_rho0 # pi0 # pi0
-~g_Sigma*bar0 # neutron # ~g_rho+ # pi- # pi0
-~g_Sigma*bar0 # neutron # ~g_rho- # pi+ # pi0
-~g_Sigma*bar+ # neutron # ~g_Sigma*bar+ # neutron
-~g_Sigma*bar+ # neutron # ~g_rho+ # pi0 # pi0
-~g_Sigma*bar+ # neutron # ~g_rho0 # pi+ # pi0
-~g_Omegabar+ # proton # ~g_Omegabar+ # proton
-~g_Omegabar+ # proton # ~g_rho0 # pi+ # pi+
-~g_Omegabar+ # proton # ~g_rho+ # pi0 # pi+
-~g_Omegabar+ # neutron # ~g_Omegabar+ # neutron
-~g_Omegabar+ # neutron # ~g_rho+ # pi0 # pi0
-~g_Omegabar+ # neutron # ~g_rho0 # pi+ # pi0
-~g_Xi*bar+ # proton # ~g_Xi*bar+ # proton
-~g_Xi*bar+ # proton # ~g_rho0 # pi+ # pi+
-~g_Xi*bar+ # proton # ~g_rho+ # pi0 # pi+
-~g_Xi*bar+ # neutron # ~g_Xi*bar+ # neutron
-~g_Xi*bar+ # neutron # ~g_rho+ # pi0 # pi0
-~g_Xi*bar+ # neutron # ~g_rho0 # pi+ # pi0
-~g_Xi*bar0 # proton # ~g_Xi*bar0 # proton
-~g_Xi*bar0 # proton # ~g_rho0 # pi0 # pi+
-~g_Xi*bar0 # proton # ~g_rho+ # pi0 # pi0
-~g_Xi*bar0 # proton # ~g_rho+ # pi- # pi+
-~g_Xi*bar0 # proton # ~g_rho- # pi+ # pi+
-~g_Xi*bar0 # neutron # ~g_Xi*bar0 # neutron
-~g_Xi*bar0 # neutron # ~g_rho0 # pi0 # pi0
-~g_Xi*bar0 # neutron # ~g_rho+ # pi- # pi0
-~g_Xi*bar0 # neutron # ~g_rho- # pi+ # pi0
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_stop.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_stop.txt
deleted file mode 100644
index 3d92eb0bbbfd..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_generic_stop.txt
+++ /dev/null
@@ -1,283 +0,0 @@
-~T0 # neutron # ~T0 # neutron 
-~T0 # neutron # ~T0 # neutron # pi0
-~T0 # neutron # ~T0 # proton # pi-
-~T0 # neutron # ~T_dd10 # pi0
-~T0 # neutron # ~T_dd10 # pi0 # pi0
-~T0 # neutron # ~T_dd10 # pi- # pi+
-~T0 # neutron # ~T+ # neutron # pi-
-~T0 # neutron # ~T_ud0+ # pi-
-~T0 # neutron # ~T_ud0+ # pi- # pi0
-~T0 # proton # ~T0 # neutron # pi+
-~T0 # proton # ~T0 # proton 
-~T0 # proton # ~T0 # proton # pi0
-~T0 # proton # ~T+ # neutron 
-~T0 # proton # ~T+ # neutron # pi0
-~T0 # proton # ~T+ # proton # pi-
-~T0 # proton # ~T_ud0+ # pi0
-~T0 # proton # ~T_ud0+ # pi0 # pi0
-~T0 # proton # ~T_ud0+ # pi- # pi+
-~T0 # proton # ~T_uu1++ # pi-
-~T0 # proton # ~T_uu1++ # pi- # pi0
-~Tbar0 # neutron # ~Tbar0 # neutron
-~Tbar0 # neutron # ~Tbar0 # neutron # pi0
-~Tbar0 # neutron # ~Tbar0 # proton # pi-
-~Tbar0 # neutron # ~Tbar- # neutron # pi+
-~Tbar0 # neutron # ~Tbar- # proton
-~Tbar0 # neutron # ~Tbar- # proton # pi0
-~Tbar0 # proton # ~Tbar0 # neutron # pi+
-~Tbar0 # proton # ~Tbar0 # proton
-~Tbar0 # proton # ~Tbar0 # proton # pi0
-~Tbar0 # proton # ~Tbar- # proton # pi+
-~Tbar_dd10 # neutron # ~Tbar0 # pi0
-~Tbar_dd10 # neutron # ~Tbar_dd10 # neutron 
-~Tbar_dd10 # neutron # ~Tbar_dd10 # neutron # pi0 
-~Tbar_dd10 # neutron # ~Tbar- # pi0
-~Tbar_dd10 # neutron # ~Tbar_ud0- # proton
-~Tbar_dd10 # proton # ~Tbar0 # pi+
-~Tbar_dd10 # proton # ~Tbar_dd10 # proton 
-~Tbar_dd10 # proton # ~Tbar_dd10 # proton # pi0 
-~Tbar- # neutron # ~Tbar0 # neutron # pi-
-~Tbar- # neutron # ~Tbar- # neutron
-~Tbar- # neutron # ~Tbar- # neutron # pi0
-~Tbar- # neutron # ~Tbar- # proton # pi- 
-~Tbar- # proton # ~Tbar0 # neutron 
-~Tbar- # proton # ~Tbar0 # neutron # pi0
-~Tbar- # proton # ~Tbar0 # proton # pi-
-~Tbar- # proton # ~Tbar- # neutron # pi+
-~Tbar- # proton # ~Tbar- # proton
-~Tbar- # proton # ~Tbar- # proton # pi0
-~Tbar_ud0- # neutron # ~Tbar0 # pi-
-~Tbar_ud0- # neutron # ~Tbar_dd10 # neutron # pi-
-~Tbar_ud0- # neutron # ~Tbar- # pi0
-~Tbar_ud0- # neutron # ~Tbar_ud0- # neutron 
-~Tbar_ud0- # neutron # ~Tbar_ud0- # neutron # pi0 
-~Tbar_ud0- # neutron # ~Tbar_ud0- # proton # pi-
-~Tbar_ud0- # neutron # ~Tbar_uu1-- # neutron # pi+
-~Tbar_ud0- # neutron # ~Tbar_uu1-- # proton
-~Tbar_ud0- # neutron # ~Tbar_uu1-- # proton # pi0
-~Tbar_ud0- # proton # ~Tbar0 # pi0
-~Tbar_ud0- # proton # ~Tbar_dd10 # neutron
-~Tbar_ud0- # proton # ~Tbar_dd10 # neutron # pi0
-~Tbar_ud0- # proton # ~Tbar_dd10 # proton # pi-
-~Tbar_ud0- # proton # ~Tbar- # pi+
-~Tbar_ud0- # proton # ~Tbar_ud0- # neutron # pi+
-~Tbar_ud0- # proton # ~Tbar_ud0- # proton 
-~Tbar_ud0- # proton # ~Tbar_ud0- # proton # pi0 
-~Tbar_ud0- # proton # ~Tbar_uu1-- # proton # pi+
-~Tbar_uu1-- # neutron # ~Tbar- # pi-
-~Tbar_uu1-- # neutron # ~Tbar_ud0- # neutron # pi-
-~Tbar_uu1-- # neutron # ~Tbar_uu1-- # neutron 
-~Tbar_uu1-- # neutron # ~Tbar_uu1-- # neutron # pi0 
-~Tbar_uu1-- # neutron # ~Tbar_uu1-- # proton # pi-
-~Tbar_uu1-- # proton # ~Tbar0 # pi-
-~Tbar_uu1-- # proton # ~Tbar_dd10 # neutron # pi-
-~Tbar_uu1-- # proton # ~Tbar- # pi0
-~Tbar_uu1-- # proton # ~Tbar_ud0- # neutron
-~Tbar_uu1-- # proton # ~Tbar_ud0- # neutron # pi0
-~Tbar_uu1-- # proton # ~Tbar_ud0- # proton # pi-
-~Tbar_uu1-- # proton # ~Tbar_uu1-- # neutron # pi+
-~Tbar_uu1-- # proton # ~Tbar_uu1-- # proton 
-~Tbar_uu1-- # proton # ~Tbar_uu1-- # proton # pi0 
-~T_dd10 # neutron # ~T_dd10 # neutron
-~T_dd10 # neutron # ~T_dd10 # neutron # pi0
-~T_dd10 # neutron # ~T_dd10 # proton # pi-
-~T_dd10 # neutron # ~T_ud0+ # neutron # pi-
-~T_dd10 # proton # ~T_dd10 # neutron # pi+
-~T_dd10 # proton # ~T_dd10 # proton
-~T_dd10 # proton # ~T_dd10 # proton # pi0
-~T_dd10 # proton # ~T_ud0+ # neutron
-~T_dd10 # proton # ~T_ud0+ # neutron # pi0
-~T_dd10 # proton # ~T_ud0+ # proton # pi- 
-~T_dd10 # proton # ~T_uu1++ # neutron # pi-
-~T+ # neutron # ~T0 # neutron # pi-
-~T+ # neutron # ~T0 # proton 
-~T+ # neutron # ~T0 # proton # pi0
-~T+ # neutron # ~T_dd10 # pi+
-~T+ # neutron # ~T_dd10 # pi+ # pi0
-~T+ # neutron # ~T+ # neutron 
-~T+ # neutron # ~T+ # neutron # pi0
-~T+ # neutron # ~T+ # proton # pi-
-~T+ # neutron # ~T_ud0+ # pi0
-~T+ # neutron # ~T_ud0+ # pi0 # pi0
-~T+ # neutron # ~T_ud0+ # pi- # pi+
-~T+ # proton # ~T0 # proton # pi+
-~T+ # proton # ~T+ # neutron # pi+
-~T+ # proton # ~T+ # proton 
-~T+ # proton # ~T+ # proton # pi0
-~T+ # proton # ~T_ud0+ # pi+
-~T+ # proton # ~T_ud0+ # pi+ # pi0
-~T+ # proton # ~T_uu1++ # pi0
-~T+ # proton # ~T_uu1++ # pi0 # pi0
-~T+ # proton # ~T_uu1++ # pi+ # pi-
-~T_ud0+ # neutron # ~T_dd10 # neutron # pi+
-~T_ud0+ # neutron # ~T_dd10 # proton
-~T_ud0+ # neutron # ~T_dd10 # proton # pi0
-~T_ud0+ # neutron # ~T_ud0+ # neutron
-~T_ud0+ # neutron # ~T_ud0+ # neutron # pi0
-~T_ud0+ # neutron # ~T_ud0+ # proton # pi-
-~T_ud0+ # proton # ~T_dd10 # proton # pi+
-~T_ud0+ # proton # ~T_ud0+ # neutron # pi+
-~T_ud0+ # proton # ~T_ud0+ # proton
-~T_ud0+ # proton # ~T_ud0+ # proton # pi0
-~T_ud0+ # proton # ~T_uu1++ # neutron
-~T_ud0+ # proton # ~T_uu1++ # neutron # pi0
-~T_ud0+ # proton # ~T_uu1++ # proton # pi-
-~T_uu1++ # neutron # ~T_ud0+ # neutron # pi+
-~T_uu1++ # neutron # ~T_ud0+ # proton
-~T_uu1++ # neutron # ~T_ud0+ # proton # pi0
-~T_uu1++ # neutron # ~T_uu1++ # neutron
-~T_uu1++ # neutron # ~T_uu1++ # neutron # pi0
-~T_uu1++ # neutron # ~T_uu1++ # proton # pi-
-~T_uu1++ # proton # ~T_ud0+ # proton # pi+
-~T_uu1++ # proton # ~T_uu1++ # neutron # pi+
-~T_uu1++ # proton # ~T_uu1++ # proton
-~T_uu1++ # proton # ~T_uu1++ # proton # pi0
-~T_s+ # neutron # ~T0 # neutron # pi-
-~T_s+ # neutron # ~T0 # proton 
-~T_s+ # neutron # ~T0 # proton # pi0
-~T_s+ # neutron # ~T_dd10 # pi+
-~T_s+ # neutron # ~T_dd10 # pi+ # pi0
-~T_s+ # neutron # ~T+ # neutron 
-~T_s+ # neutron # ~T+ # neutron # pi0
-~T_s+ # neutron # ~T+ # proton # pi-
-~T_s+ # neutron # ~T_ud0+ # pi0
-~T_s+ # neutron # ~T_ud0+ # pi0 # pi0
-~T_s+ # neutron # ~T_ud0+ # pi- # pi+
-~T_s+ # proton # ~T0 # proton # pi+
-~T_s+ # proton # ~T+ # neutron # pi+
-~T_s+ # proton # ~T+ # proton 
-~T_s+ # proton # ~T+ # proton # pi0
-~T_s+ # proton # ~T_ud0+ # pi+
-~T_s+ # proton # ~T_ud0+ # pi+ # pi0
-~T_s+ # proton # ~T_uu1++ # pi0
-~T_s+ # proton # ~T_uu1++ # pi0 # pi0
-~T_s+ # proton # ~T_uu1++ # pi+ # pi-
-~T_sd00 # neutron # ~T_dd10 # neutron
-~T_sd00 # neutron # ~T_dd10 # neutron # pi0
-~T_sd00 # neutron # ~T_dd10 # proton # pi-
-~T_sd00 # neutron # ~T_ud0+ # neutron # pi-
-~T_sd00 # proton # ~T_dd10 # neutron # pi+
-~T_sd00 # proton # ~T_dd10 # proton
-~T_sd00 # proton # ~T_dd10 # proton # pi0
-~T_sd00 # proton # ~T_ud0+ # neutron
-~T_sd00 # proton # ~T_ud0+ # neutron # pi0
-~T_sd00 # proton # ~T_ud0+ # proton # pi- 
-~T_sd00 # proton # ~T_uu1++ # neutron # pi-
-~T_sd10 # neutron # ~T_dd10 # neutron
-~T_sd10 # neutron # ~T_dd10 # neutron # pi0
-~T_sd10 # neutron # ~T_dd10 # proton # pi-
-~T_sd10 # neutron # ~T_ud0+ # neutron # pi-
-~T_sd10 # proton # ~T_dd10 # neutron # pi+
-~T_sd10 # proton # ~T_dd10 # proton
-~T_sd10 # proton # ~T_dd10 # proton # pi0
-~T_sd10 # proton # ~T_ud0+ # neutron
-~T_sd10 # proton # ~T_ud0+ # neutron # pi0
-~T_sd10 # proton # ~T_ud0+ # proton # pi- 
-~T_sd10 # proton # ~T_uu1++ # neutron # pi-
-~T_su0+ # neutron # ~T_dd10 # neutron # pi+
-~T_su0+ # neutron # ~T_dd10 # proton
-~T_su0+ # neutron # ~T_dd10 # proton # pi0
-~T_su0+ # neutron # ~T_ud0+ # neutron
-~T_su0+ # neutron # ~T_ud0+ # neutron # pi0
-~T_su0+ # neutron # ~T_ud0+ # proton # pi-
-~T_su0+ # proton # ~T_dd10 # proton # pi+
-~T_su0+ # proton # ~T_ud0+ # neutron # pi+
-~T_su0+ # proton # ~T_ud0+ # proton
-~T_su0+ # proton # ~T_ud0+ # proton # pi0
-~T_su0+ # proton # ~T_uu1++ # neutron
-~T_su0+ # proton # ~T_uu1++ # neutron # pi0
-~T_su0+ # proton # ~T_uu1++ # proton # pi-
-~T_su1+ # neutron # ~T_dd10 # neutron # pi+
-~T_su1+ # neutron # ~T_dd10 # proton
-~T_su1+ # neutron # ~T_dd10 # proton # pi0
-~T_su1+ # neutron # ~T_ud0+ # neutron
-~T_su1+ # neutron # ~T_ud0+ # neutron # pi0
-~T_su1+ # neutron # ~T_ud0+ # proton # pi-
-~T_su1+ # proton # ~T_dd10 # proton # pi+
-~T_su1+ # proton # ~T_ud0+ # neutron # pi+
-~T_su1+ # proton # ~T_ud0+ # proton
-~T_su1+ # proton # ~T_ud0+ # proton # pi0
-~T_su1+ # proton # ~T_uu1++ # neutron
-~T_su1+ # proton # ~T_uu1++ # neutron # pi0
-~T_su1+ # proton # ~T_uu1++ # proton # pi-
-~T_ss10 # neutron # ~T_dd10 # neutron
-~T_ss10 # neutron # ~T_dd10 # neutron # pi0
-~T_ss10 # neutron # ~T_dd10 # proton # pi-
-~T_ss10 # neutron # ~T_ud0+ # neutron # pi-
-~T_ss10 # proton # ~T_dd10 # neutron # pi+
-~T_ss10 # proton # ~T_dd10 # proton
-~T_ss10 # proton # ~T_dd10 # proton # pi0
-~T_ss10 # proton # ~T_ud0+ # neutron
-~T_ss10 # proton # ~T_ud0+ # neutron # pi0
-~T_ss10 # proton # ~T_ud0+ # proton # pi- 
-~T_ss10 # proton # ~T_uu1++ # neutron # pi-
-~Tbar_s- # neutron # ~Tbar0 # neutron # pi-
-~Tbar_s- # neutron # ~Tbar- # neutron
-~Tbar_s- # neutron # ~Tbar- # neutron # pi0
-~Tbar_s- # neutron # ~Tbar- # proton # pi- 
-~Tbar_s- # proton # ~Tbar0 # neutron 
-~Tbar_s- # proton # ~Tbar0 # neutron # pi0
-~Tbar_s- # proton # ~Tbar0 # proton # pi-
-~Tbar_s- # proton # ~Tbar- # neutron # pi+
-~Tbar_s- # proton # ~Tbar- # proton
-~Tbar_s- # proton # ~Tbar- # proton # pi0
-~Tbar_sd00 # neutron # ~Tbar0 # pi0
-~Tbar_sd00 # neutron # ~Tbar_dd10 # neutron 
-~Tbar_sd00 # neutron # ~Tbar_dd10 # neutron # pi0 
-~Tbar_sd00 # neutron # ~Tbar- # pi0
-~Tbar_sd00 # neutron # ~Tbar_ud0- # proton
-~Tbar_sd00 # proton # ~Tbar0 # pi+
-~Tbar_sd00 # proton # ~Tbar_dd10 # proton 
-~Tbar_sd00 # proton # ~Tbar_dd10 # proton # pi0 
-~Tbar_sd10 # neutron # ~Tbar0 # pi0
-~Tbar_sd10 # neutron # ~Tbar_dd10 # neutron 
-~Tbar_sd10 # neutron # ~Tbar_dd10 # neutron # pi0 
-~Tbar_sd10 # neutron # ~Tbar- # pi0
-~Tbar_sd10 # neutron # ~Tbar_ud0- # proton
-~Tbar_sd10 # proton # ~Tbar0 # pi+
-~Tbar_sd10 # proton # ~Tbar_dd10 # proton 
-~Tbar_sd10 # proton # ~Tbar_dd10 # proton # pi0 
-~Tbar_su0- # neutron # ~Tbar0 # pi-
-~Tbar_su0- # neutron # ~Tbar_dd10 # neutron # pi-
-~Tbar_su0- # neutron # ~Tbar- # pi0
-~Tbar_su0- # neutron # ~Tbar_ud0- # neutron 
-~Tbar_su0- # neutron # ~Tbar_ud0- # neutron # pi0 
-~Tbar_su0- # neutron # ~Tbar_ud0- # proton # pi-
-~Tbar_su0- # neutron # ~Tbar_uu1-- # neutron # pi+
-~Tbar_su0- # neutron # ~Tbar_uu1-- # proton
-~Tbar_su0- # neutron # ~Tbar_uu1-- # proton # pi0
-~Tbar_su0- # proton # ~Tbar0 # pi0
-~Tbar_su0- # proton # ~Tbar_dd10 # neutron
-~Tbar_su0- # proton # ~Tbar_dd10 # neutron # pi0
-~Tbar_su0- # proton # ~Tbar_dd10 # proton # pi-
-~Tbar_su0- # proton # ~Tbar- # pi+
-~Tbar_su0- # proton # ~Tbar_ud0- # neutron # pi+
-~Tbar_su0- # proton # ~Tbar_ud0- # proton 
-~Tbar_su0- # proton # ~Tbar_ud0- # proton # pi0 
-~Tbar_su0- # proton # ~Tbar_uu1-- # proton # pi+
-~Tbar_su1- # neutron # ~Tbar0 # pi-
-~Tbar_su1- # neutron # ~Tbar_dd10 # neutron # pi-
-~Tbar_su1- # neutron # ~Tbar- # pi0
-~Tbar_su1- # neutron # ~Tbar_ud0- # neutron 
-~Tbar_su1- # neutron # ~Tbar_ud0- # neutron # pi0 
-~Tbar_su1- # neutron # ~Tbar_ud0- # proton # pi-
-~Tbar_su1- # neutron # ~Tbar_uu1-- # neutron # pi+
-~Tbar_su1- # neutron # ~Tbar_uu1-- # proton
-~Tbar_su1- # neutron # ~Tbar_uu1-- # proton # pi0
-~Tbar_su1- # proton # ~Tbar0 # pi0
-~Tbar_su1- # proton # ~Tbar_dd10 # neutron
-~Tbar_su1- # proton # ~Tbar_dd10 # neutron # pi0
-~Tbar_su1- # proton # ~Tbar_dd10 # proton # pi-
-~Tbar_su1- # proton # ~Tbar- # pi+
-~Tbar_su1- # proton # ~Tbar_ud0- # neutron # pi+
-~Tbar_su1- # proton # ~Tbar_ud0- # proton 
-~Tbar_su1- # proton # ~Tbar_ud0- # proton # pi0 
-~Tbar_su1- # proton # ~Tbar_uu1-- # proton # pi+
-~Tbar_ss10 # neutron # ~Tbar0 # pi0
-~Tbar_ss10 # neutron # ~Tbar_dd10 # neutron 
-~Tbar_ss10 # neutron # ~Tbar_dd10 # neutron # pi0 
-~Tbar_ss10 # neutron # ~Tbar- # pi0
-~Tbar_ss10 # neutron # ~Tbar_ud0- # proton
-~Tbar_ss10 # proton # ~Tbar0 # pi+
-~Tbar_ss10 # proton # ~Tbar_dd10 # proton 
-~Tbar_ss10 # proton # ~Tbar_dd10 # proton # pi0 
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_intermediate_gluino.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_intermediate_gluino.txt
deleted file mode 100644
index 860a4b31d2d6..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_intermediate_gluino.txt
+++ /dev/null
@@ -1,251 +0,0 @@
-~g_glueball # neutron # ~g_glueball # neutron
-~g_glueball # proton # ~g_glueball # proton
-~g_Lambda0 # neutron # ~g_Lambda0 # neutron
-~g_Lambda0 # proton # ~g_Lambda0 # proton
-~g_Lambda0 # neutron # ~g_Lambda0 # neutron # pi0
-~g_Lambda0 # neutron # ~g_Lambda0 # proton # pi-
-~g_Lambda0 # proton # ~g_Lambda0 # proton # pi0
-~g_Lambda0 # proton # ~g_Lambda0 # neutron # pi-
-~g_Lambda0 # neutron # ~g_neutron # kaon0 # neutron
-~g_Lambda0 # neutron # ~g_neutron # kaon- # proton
-~g_Lambda0 # neutron # ~g_proton # kaon- # neutron
-~g_Lambda0 # proton # ~g_proton # kaon0 # neutron
-~g_Lambda0 # proton # ~g_proton # kaon- # proton
-~g_Lambda0 # proton # ~g_neutron # kaon0 # proton
-~g_neutron # neutron # ~g_neutron # neutron
-~g_neutron # proton # ~g_neutron # proton
-~g_neutron # proton # ~g_proton # neutron
-~g_proton # neutron # ~g_proton # neutron
-~g_proton # neutron # ~g_neutron # proton
-~g_proton # proton # ~g_proton # proton
-~g_Delta0 # neutron # ~g_Delta0 # neutron
-~g_Delta0 # proton # ~g_Delta0 # proton
-~g_Delta0 # proton # ~g_Delta+ # neutron
-~g_Delta+ # neutron # ~g_Delta+ # neutron
-~g_Delta+ # neutron # ~g_Delta0 # proton
-~g_Delta+ # proton # ~g_Delta+ # proton
-~g_neutron # neutron # ~g_neutron # neutron # pi0
-~g_neutron # neutron # ~g_neutron # proton # pi-
-~g_neutron # neutron # ~g_proton # neutron # pi-
-~g_neutron # proton # ~g_neutron # proton # pi0
-~g_neutron # proton # ~g_neutron # neutron # pi+
-~g_neutron # proton # ~g_proton # neutron # pi0
-~g_neutron # proton # ~g_proton # proton # pi-
-~g_proton # neutron # ~g_proton # neutron # pi0
-~g_proton # neutron # ~g_neutron # proton # pi0
-~g_proton # neutron # ~g_neutron # neutron # pi+
-~g_proton # neutron # ~g_proton # proton # pi-
-~g_proton # proton # ~g_proton # proton # pi0
-~g_proton # proton # ~g_proton # neutron # pi+
-~g_proton # proton # ~g_neutron # proton # pi+
-~g_Delta0 # neutron # ~g_Delta0 # neutron # pi0
-~g_Delta0 # neutron # ~g_Delta0 # proton # pi-
-~g_Delta0 # neutron # ~g_Delta+ # neutron # pi-
-~g_Delta0 # proton # ~g_Delta0 # proton # pi0
-~g_Delta0 # proton # ~g_Delta0 # neutron # pi+
-~g_Delta0 # proton # ~g_Delta+ # neutron # pi0
-~g_Delta0 # proton # ~g_Delta+ # proton # pi-
-~g_Delta+ # neutron # ~g_Delta+ # neutron # pi0
-~g_Delta+ # neutron # ~g_Delta0 # proton # pi0
-~g_Delta+ # neutron # ~g_Delta0 # neutron # pi+
-~g_Delta+ # neutron # ~g_Delta+ # proton # pi-
-~g_Delta+ # proton # ~g_Delta+ # proton # pi0
-~g_Delta+ # proton # ~g_Delta+ # neutron # pi+
-~g_Delta+ # proton # ~g_Delta0 # proton # pi+
-~g_neutron # neutron # ~g_Delta0 # neutron
-~g_neutron # proton # ~g_Delta0 # proton
-~g_neutron # proton # ~g_Delta+ # neutron
-~g_proton # neutron # ~g_Delta+ # neutron
-~g_proton # neutron # ~g_Delta0 # proton
-~g_proton # proton # ~g_Delta+ # proton
-~g_Delta0 # neutron # ~g_neutron # neutron
-~g_Delta0 # proton # ~g_neutron # proton
-~g_Delta0 # proton # ~g_proton # neutron
-~g_Delta+ # neutron # ~g_proton # neutron
-~g_Delta+ # neutron # ~g_neutron # proton
-~g_Delta+ # proton # ~g_proton # proton
-~g_neutron # neutron # ~g_Delta0 # neutron # pi0
-~g_neutron # neutron # ~g_Delta0 # proton # pi-
-~g_neutron # neutron # ~g_Delta+ # neutron # pi-
-~g_neutron # proton # ~g_Delta0 # proton # pi0
-~g_neutron # proton # ~g_Delta0 # neutron # pi+
-~g_neutron # proton # ~g_Delta+ # neutron # pi0
-~g_neutron # proton # ~g_Delta+ # proton # pi-
-~g_proton # neutron # ~g_Delta+ # neutron # pi0
-~g_proton # neutron # ~g_Delta0 # proton # pi0
-~g_proton # neutron # ~g_Delta0 # neutron # pi+
-~g_proton # neutron # ~g_Delta+ # proton # pi-
-~g_proton # proton # ~g_Delta+ # proton # pi0
-~g_proton # proton # ~g_Delta+ # neutron # pi+
-~g_proton # proton # ~g_Delta0 # proton # pi+
-~g_Delta0 # neutron # ~g_neutron # neutron # pi0
-~g_Delta0 # neutron # ~g_neutron # proton # pi-
-~g_Delta0 # neutron # ~g_proton # neutron # pi-
-~g_Delta0 # proton # ~g_neutron # proton # pi0
-~g_Delta0 # proton # ~g_neutron # neutron # pi+
-~g_Delta0 # proton # ~g_proton # neutron # pi0
-~g_Delta0 # proton # ~g_proton # proton # pi-
-~g_Delta+ # neutron # ~g_proton # neutron # pi0
-~g_Delta+ # neutron # ~g_neutron # proton # pi0
-~g_Delta+ # neutron # ~g_neutron # neutron # pi+
-~g_Delta+ # neutron # ~g_proton # proton # pi-
-~g_Delta+ # proton # ~g_proton # proton # pi0
-~g_Delta+ # proton # ~g_proton # neutron # pi+
-~g_Delta+ # proton # ~g_neutron # proton # pi+
-~g_neutron # neutron # ~g_Lambda0 # kaon0 # neutron
-~g_neutron # proton # ~g_Lambda0 # kaon0 # proton
-~g_neutron # proton # ~g_Lambda0 # kaon+ # neutron
-~g_proton # neutron # ~g_Lambda0 # kaon0 # proton
-~g_proton # neutron # ~g_Lambda0 # kaon+ # neutron
-~g_proton # proton # ~g_Lambda0 # kaon+ # proton
-~g_pi0 # neutron # ~g_pi0 # neutron
-~g_pi0 # neutron # ~g_pi- # proton
-~g_pi0 # proton # ~g_pi0 # proton
-~g_pi0 # proton # ~g_pi+ # neutron
-~g_pi- # neutron # ~g_pi- # neutron
-~g_pi- # proton # ~g_pi- # proton
-~g_pi- # proton # ~g_pi0 # neutron
-~g_pi+ # neutron # ~g_pi+ # neutron
-~g_pi+ # neutron # ~g_pi0 # proton
-~g_pi+ # proton # ~g_pi+ # proton
-~g_pi0 # neutron # ~g_pi0 # neutron # pi0
-~g_pi0 # neutron # ~g_pi0 # proton # pi-
-~g_pi0 # neutron # ~g_pi+ # neutron # pi-
-~g_pi0 # neutron # ~g_pi- # proton # pi0
-~g_pi0 # neutron # ~g_pi- # neutron # pi+
-~g_pi0 # proton # ~g_pi0 # proton # pi0
-~g_pi0 # proton # ~g_pi0 # neutron # pi+
-~g_pi0 # proton # ~g_pi+ # neutron # pi0
-~g_pi0 # proton # ~g_pi+ # proton # pi-
-~g_pi0 # proton # ~g_pi- # proton # pi+
-~g_pi0 # neutron # ~g_neutron # pi0
-~g_pi0 # neutron # ~g_proton # pi-
-~g_pi0 # proton # ~g_neutron # pi+
-~g_pi0 # proton # ~g_proton # pi0
-~g_pi+ # neutron # ~g_proton # pi0
-~g_pi+ # neutron # ~g_neutron # pi+
-~g_pi+ # proton # ~g_proton # pi+
-~g_pi- # neutron # ~g_neutron # pi-
-~g_pi- # proton # ~g_neutron # pi0
-~g_pi- # proton # ~g_proton # pi-
-~g_pi0 # neutron # ~g_neutron # pi0 # pi0
-~g_pi0 # neutron # ~g_neutron # pi+ # pi-
-~g_pi0 # neutron # ~g_proton # pi- # pi0
-~g_pi0 # proton # ~g_neutron # pi+ # pi0
-~g_pi0 # proton # ~g_proton # pi0 # pi0
-~g_pi0 # proton # ~g_proton # pi+ # pi-
-~g_pi+ # neutron # ~g_proton # pi0 # pi0
-~g_pi+ # neutron # ~g_proton # pi+ # pi-
-~g_pi+ # neutron # ~g_neutron # pi+ # pi0
-~g_pi+ # proton # ~g_proton # pi+ # pi-
-~g_pi+ # proton # ~g_neutron # pi+ # pi+
-~g_pi- # neutron # ~g_neutron # pi- # pi0
-~g_pi- # neutron # ~g_proton # pi- # pi-
-~g_pi- # proton # ~g_neutron # pi0 # pi0
-~g_pi- # proton # ~g_neutron # pi+ # pi-
-~g_pi- # proton # ~g_proton # pi- # pi0
-~g_pi0 # neutron # ~g_Lambda0 # kaon0
-~g_pi0 # proton # ~g_Lambda0 # kaon+
-~g_pi+ # neutron # ~g_Lambda0 # kaon+
-~g_pi- # proton # ~g_Lambda0 # kaon0
-~g_pi0 # neutron # ~g_Lambda0 # kaon0 # pi0
-~g_pi0 # neutron # ~g_Lambda0 # kaon+ # pi-
-~g_pi0 # proton # ~g_Lambda0 # kaon+ # pi0
-~g_pi0 # proton # ~g_Lambda0 # kaon0 # pi+
-~g_pi+ # neutron # ~g_Lambda0 # kaon+ # pi0
-~g_pi+ # neutron # ~g_Lambda0 # kaon0 # pi+
-~g_pi+ # proton # ~g_Lambda0 # kaon+ # pi+
-~g_pi- # neutron # ~g_Lambda0 # kaon0 # pi-
-~g_pi- # proton # ~g_Lambda0 # kaon0 # pi0
-~g_pi- # proton # ~g_Lambda0 # kaon+ # pi-
-~g_K+ # neutron # ~g_K+ # neutron
-~g_K+ # neutron # ~g_K0 # proton
-~g_K+ # proton # ~g_K+ # proton
-~g_K- # neutron # ~g_K- # neutron
-~g_K- # proton # ~g_K- # proton
-~g_K- # proton # ~g_K0bar # neutron
-~g_K0 # neutron # ~g_K0 # neutron
-~g_K0 # proton # ~g_K0 # proton
-~g_K0 # proton # ~g_K+ # neutron
-~g_K0bar # neutron # ~g_K0bar # neutron
-~g_K0bar # neutron # ~g_K- # proton
-~g_K0bar # proton # ~g_K0bar # proton
-~g_K+ # neutron # ~g_K+ # neutron # pi0
-~g_K+ # neutron # ~g_K0 # proton # pi0
-~g_K+ # neutron # ~g_K0 # neutron # pi+
-~g_K+ # neutron # ~g_K+ # proton # pi-
-~g_K+ # proton # ~g_K+ # proton # pi0
-~g_K+ # proton # ~g_K+ # neutron # pi+
-~g_K+ # proton # ~g_K0 # proton # pi+
-~g_K- # neutron # ~g_K- # neutron # pi0
-~g_K- # neutron # ~g_K- # proton # pi-
-~g_K- # neutron # ~g_K0bar # neutron # pi-
-~g_K- # proton # ~g_K- # proton # pi0
-~g_K- # proton # ~g_K- # neutron # pi+
-~g_K- # proton # ~g_K0bar # neutron # pi0
-~g_K- # proton # ~g_K0bar # proton # pi-
-~g_K0 # neutron # ~g_K0 # neutron # pi0
-~g_K0 # neutron # ~g_K0 # proton # pi-
-~g_K0 # neutron # ~g_K+ # neutron # pi-
-~g_K0 # proton # ~g_K0 # proton # pi0
-~g_K0 # proton # ~g_K0 # neutron # pi+
-~g_K0 # proton # ~g_K+ # neutron # pi0
-~g_K0 # proton # ~g_K+ # proton # pi-
-~g_K0bar # neutron # ~g_K0bar # neutron # pi0
-~g_K0bar # neutron # ~g_K0bar # proton # pi-
-~g_K0bar # neutron # ~g_K- # proton # pi0
-~g_K0bar # neutron # ~g_K- # neutron # pi+
-~g_K0bar # proton # ~g_K0bar # proton # pi0
-~g_K0bar # proton # ~g_K0bar # neutron # pi+
-~g_K0bar # proton # ~g_K- # proton # pi+
-~g_K- # neutron # ~g_Lambda0 # pi-
-~g_K- # proton # ~g_Lambda0 # pi0
-~g_K0bar # neutron # ~g_Lambda0 # pi0
-~g_K0bar # proton # ~g_Lambda0 # pi+
-~g_K- # neutron # ~g_Lambda0 # pi- # pi0
-~g_K- # proton # ~g_Lambda0 # pi0 # pi0
-~g_K- # proton # ~g_Lambda0 # pi+ # pi-
-~g_K0bar # neutron # ~g_Lambda0 # pi0 # pi0
-~g_K0bar # neutron # ~g_Lambda0 # pi+ # pi-
-~g_K0bar # proton # ~g_Lambda0 # pi+ # pi0
-~g_K+ # neutron # ~g_neutron # kaon+
-~g_K+ # neutron # ~g_proton # kaon0
-~g_K+ # proton # ~g_proton # kaon+
-~g_K+ # proton # ~g_neutron # kaon0
-~g_K- # neutron # ~g_neutron # kaon-
-~g_K- # proton # ~g_proton # kaon-
-~g_K- # proton # ~g_neutron # kaon0
-~g_K0 # neutron # ~g_neutron # kaon0
-~g_K0 # proton # ~g_proton # kaon0
-~g_K0 # proton # ~g_neutron # kaon+
-~g_K0bar # neutron # ~g_neutron # kaon0
-~g_K0bar # neutron # ~g_proton # kaon-
-~g_K0bar # proton # ~g_proton # kaon0
-~g_K+ # neutron # ~g_neutron # kaon+ # pi0
-~g_K+ # neutron # ~g_neutron # kaon0 # pi+
-~g_K+ # neutron # ~g_proton # kaon0 # pi0
-~g_K+ # neutron # ~g_proton # kaon+ # pi-
-~g_K+ # proton # ~g_proton # kaon+ # pi0
-~g_K+ # proton # ~g_proton # kaon0 # pi+
-~g_K+ # proton # ~g_neutron # kaon+ # pi+
-~g_K- # neutron # ~g_neutron # kaon- # pi0
-~g_K- # neutron # ~g_neutron # kaon0 # pi-
-~g_K- # neutron # ~g_proton # kaon- # pi-
-~g_K- # proton # ~g_proton # kaon- # pi0
-~g_K- # proton # ~g_proton # kaon0 # pi-
-~g_K- # proton # ~g_neutron # kaon0 # pi0
-~g_K- # proton # ~g_neutron # kaon- # pi+
-~g_K0bar # neutron # ~g_neutron # kaon0 # pi0
-~g_K0bar # neutron # ~g_neutron # kaon- # pi+
-~g_K0bar # neutron # ~g_proton # kaon- # pi0
-~g_K0bar # neutron # ~g_proton # kaon0 # pi-
-~g_K0bar # proton # ~g_proton # kaon0 # pi0
-~g_K0bar # proton # ~g_proton # kaon- # pi+
-~g_K0bar # proton # ~g_neutron # kaon0 # pi+
-~g_K0 # neutron # ~g_neutron # kaon- # pi0
-~g_K0 # neutron # ~g_neutron # kaon0 # pi-
-~g_K0 # neutron # ~g_proton # kaon- # pi-
-~g_K0 # proton # ~g_proton # kaon- # pi0
-~g_K0 # proton # ~g_proton # kaon0 # pi-
-~g_K0 # proton # ~g_neutron # kaon0 # pi0
-~g_K0 # proton # ~g_neutron # kaon- # pi+
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_gluino.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_gluino.txt
deleted file mode 100644
index 34baacd1e268..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_gluino.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-~g_rho+ # proton # ~g_rho+ # proton 
-~g_rho0 # proton # ~g_rho0 # proton 
-~g_rho- # proton # ~g_rho- # proton 
-~g_rho0 # proton # ~g_rho+ # neutron 
-~g_rho- # proton # ~g_rho0 # neutron 
-~g_rho- # proton # ~g_Lambda0 # pi0 
-~g_rho0 # proton # ~g_Lambda0 # pi+ 
-~g_rho+ # neutron # ~g_rho+ # neutron 
-~g_rho0 # neutron # ~g_rho0 # neutron 
-~g_rho- # neutron # ~g_rho- # neutron 
-~g_rho+ # neutron # ~g_rho0 # proton 
-~g_rho0 # neutron # ~g_rho- # proton 
-~g_rho- # neutron # ~g_rho0 # pi- 
-~g_rho- # neutron # ~g_Lambda0 # pi- 
-~g_rho0 # neutron # ~g_Lambda0 # pi0 
-~g_rho+ # neutron # ~g_Lambda0 # pi+ 
-~g_rho+ # proton # ~g_rho+ # proton # pi0 
-~g_rho0 # proton # ~g_rho0 # proton # pi0 
-~g_rho- # proton # ~g_rho- # proton # pi0 
-~g_rho0 # proton # ~g_rho+ # neutron # pi+ 
-~g_rho0 # proton # ~g_rho0 # neutron # pi+ 
-~g_rho- # proton # ~g_rho- # neutron # pi+ 
-~g_rho+ # proton # ~g_rho0 # proton # pi+ 
-~g_rho0 # proton # ~g_rho+ # proton # pi- 
-~g_rho- # proton # ~g_rho+ # neutron # pi- 
-~g_rho0 # proton # ~g_rho+ # neutron # pi0 
-~g_rho- # proton # ~g_rho0 # proton # pi- 
-~g_rho0 # proton # ~g_rho- # proton # pi+ 
-~g_rho- # proton # ~g_rho0 # neutron # pi0 
-~g_rho+ # proton # ~g_Lambda0 # pi+ # pi+ 
-~g_rho- # proton # ~g_Lambda0 # pi0 # pi0 
-~g_rho0 # proton # ~g_Lambda0 # pi+ # pi0 
-~g_rho- # proton # ~g_Lambda0 # pi+ # pi- 
-~g_rho+ # neutron # ~g_rho+ # neutron # pi0 
-~g_rho0 # neutron # ~g_rho0 # neutron # pi0 
-~g_rho- # neutron # ~g_rho- # neutron # pi0 
-~g_rho+ # neutron # ~g_rho+ # proton # pi- 
-~g_rho0 # neutron # ~g_rho0 # proton # pi- 
-~g_rho- # neutron # ~g_rho- # proton # pi- 
-~g_rho+ # neutron # ~g_rho0 # proton # pi0 
-~g_rho0 # neutron # ~g_rho+ # neutron # pi- 
-~g_rho- # neutron # ~g_rho0 # neutron # pi- 
-~g_rho+ # neutron # ~g_rho0 # neutron # pi+ 
-~g_rho0 # neutron # ~g_rho- # proton # pi0 
-~g_rho+ # neutron # ~g_rho- # proton # pi+ 
-~g_rho0 # neutron # ~g_rho- # neutron # pi+ 
-~g_rho- # neutron # ~g_Lambda0 # pi- # pi0 
-~g_rho0 # neutron # ~g_Lambda0 # pi0 # pi0 
-~g_rho+ # neutron # ~g_Lambda0 # pi+ # pi0 
-~g_rho0 # neutron # ~g_Lambda0 # pi+ # pi- 
-~g_K+ # proton # ~g_rho+ # proton 
-~g_K0 # proton # ~g_rho0 # proton 
-~g_K0bar # proton # ~g_rho0 # proton 
-~g_K- # proton # ~g_rho- # proton 
-~g_K0 # proton # ~g_rho+ # neutron 
-~g_K0bar # proton # ~g_rho+ # neutron 
-~g_K- # proton # ~g_rho0 # neutron 
-~g_K- # proton # ~g_Lambda0 # pi0 
-~g_K0 # proton # ~g_Lambda0 # pi+ 
-~g_K0bar # proton # ~g_Lambda0 # pi+ 
-~g_K+ # neutron # ~g_rho+ # neutron 
-~g_K0 # neutron # ~g_rho0 # neutron 
-~g_K0bar # neutron # ~g_rho0 # neutron 
-~g_K- # neutron # ~g_rho- # neutron 
-~g_K+ # neutron # ~g_rho0 # proton 
-~g_K0 # neutron # ~g_rho- # proton 
-~g_K0bar # neutron # ~g_rho- # proton 
-~g_K- # neutron # ~g_rho0 # pi- 
-~g_K- # neutron # ~g_Lambda0 # pi- 
-~g_K0 # neutron # ~g_Lambda0 # pi0 
-~g_K0bar # neutron # ~g_Lambda0 # pi0 
-~g_K+ # neutron # ~g_Lambda0 # pi+ 
-~g_K+ # proton # ~g_rho+ # proton # pi0 
-~g_K0 # proton # ~g_rho0 # proton # pi0 
-~g_K0bar # proton # ~g_rho0 # proton # pi0 
-~g_K- # proton # ~g_rho- # proton # pi0 
-~g_K0 # proton # ~g_rho+ # neutron # pi+ 
-~g_K0 # proton # ~g_rho0 # neutron # pi+ 
-~g_K0bar # proton # ~g_rho+ # neutron # pi+ 
-~g_K0bar # proton # ~g_rho0 # neutron # pi+ 
-~g_K- # proton # ~g_rho- # neutron # pi+ 
-~g_K+ # proton # ~g_rho0 # proton # pi+ 
-~g_K0 # proton # ~g_rho+ # proton # pi- 
-~g_K0bar # proton # ~g_rho+ # proton # pi- 
-~g_K- # proton # ~g_rho+ # neutron # pi- 
-~g_K0 # proton # ~g_rho+ # neutron # pi0 
-~g_K0bar # proton # ~g_rho+ # neutron # pi0 
-~g_K- # proton # ~g_rho0 # proton # pi- 
-~g_K0 # proton # ~g_rho- # proton # pi+ 
-~g_K0bar # proton # ~g_rho- # proton # pi+ 
-~g_K- # proton # ~g_rho0 # neutron # pi0 
-~g_K+ # proton # ~g_Lambda0 # pi+ # pi+ 
-~g_K- # proton # ~g_Lambda0 # pi0 # pi0 
-~g_K0 # proton # ~g_Lambda0 # pi+ # pi0 
-~g_K0bar # proton # ~g_Lambda0 # pi+ # pi0 
-~g_K- # proton # ~g_Lambda0 # pi+ # pi- 
-~g_K+ # neutron # ~g_rho+ # neutron # pi0 
-~g_K0 # neutron # ~g_rho0 # neutron # pi0 
-~g_K0bar # neutron # ~g_rho0 # neutron # pi0 
-~g_K- # neutron # ~g_rho- # neutron # pi0 
-~g_K+ # neutron # ~g_rho+ # proton # pi- 
-~g_K0 # neutron # ~g_rho0 # proton # pi- 
-~g_K0bar # neutron # ~g_rho0 # proton # pi- 
-~g_K- # neutron # ~g_rho- # proton # pi- 
-~g_K+ # neutron # ~g_rho0 # proton # pi0 
-~g_K0 # neutron # ~g_rho+ # neutron # pi- 
-~g_K0bar # neutron # ~g_rho+ # neutron # pi- 
-~g_K- # neutron # ~g_rho0 # neutron # pi- 
-~g_K+ # neutron # ~g_rho0 # neutron # pi+ 
-~g_K0 # neutron # ~g_rho- # proton # pi0 
-~g_K0bar # neutron # ~g_rho- # proton # pi0 
-~g_K+ # neutron # ~g_rho- # proton # pi+ 
-~g_K0 # neutron # ~g_rho- # neutron # pi+ 
-~g_K0bar # neutron # ~g_rho- # neutron # pi+ 
-~g_K- # neutron # ~g_Lambda0 # pi- # pi0 
-~g_K0 # neutron # ~g_Lambda0 # pi0 # pi0 
-~g_K0bar # neutron # ~g_Lambda0 # pi0 # pi0 
-~g_K+ # neutron # ~g_Lambda0 # pi+ # pi0 
-~g_K0 # neutron # ~g_Lambda0 # pi+ # pi- 
-~g_K0bar # neutron # ~g_Lambda0 # pi+ # pi- 
-~g_Lambda0 # proton # ~g_Lambda0 # proton 
-~g_Lambda0 # neutron # ~g_Lambda0 # neutron 
-~g_Lambda0 # proton # ~g_Lambda0 # proton # pi0 
-~g_Lambda0 # proton # ~g_Lambda0 # neutron # pi+ 
-~g_Lambda0 # neutron # ~g_Lambda0 # neutron # pi0 
-~g_Lambda0 # neutron # ~g_Lambda0 # proton # pi- 
-~g_glueball # proton # ~g_rho0 # proton 
-~g_glueball # proton # ~g_rho+ # neutron 
-~g_glueball # proton # ~g_Lambda0 # pi+ 
-~g_glueball # neutron # ~g_rho0 # neutron 
-~g_glueball # neutron # ~g_rho- # proton 
-~g_glueball # neutron # ~g_Lambda0 # pi0 
-~g_glueball # proton # ~g_rho0 # proton # pi0 
-~g_glueball # proton # ~g_rho+ # neutron # pi+ 
-~g_glueball # proton # ~g_rho0 # neutron # pi+ 
-~g_glueball # proton # ~g_rho+ # proton # pi- 
-~g_glueball # proton # ~g_rho+ # neutron # pi0 
-~g_glueball # proton # ~g_rho- # proton # pi+ 
-~g_glueball # proton # ~g_Lambda0 # pi+ # pi0 
-~g_glueball # neutron # ~g_rho0 # neutron # pi0 
-~g_glueball # neutron # ~g_rho0 # proton # pi- 
-~g_glueball # neutron # ~g_rho+ # neutron # pi- 
-~g_glueball # neutron # ~g_rho- # proton # pi0 
-~g_glueball # neutron # ~g_rho- # neutron # pi+ 
-~g_glueball # neutron # ~g_Lambda0 # pi0 # pi0 
-~g_glueball # neutron # ~g_Lambda0 # pi+ # pi- 
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_sbottom.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_sbottom.txt
deleted file mode 100644
index ef296aefe06a..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_sbottom.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-~B- # neutron # ~B- # neutron 
-~B- # neutron # ~B- # neutron # pi0
-~B- # neutron # ~B- # proton # pi-
-~B- # neutron # ~B0 # neutron # pi-
-~B- # neutron # ~B_ud0 # pi-
-~B- # neutron # ~B_ud0 # pi- # pi0
-~B- # proton # ~B- # neutron # pi+
-~B- # proton # ~B- # proton 
-~B- # proton # ~B- # proton # pi0
-~B- # proton # ~B0 # neutron 
-~B- # proton # ~B0 # neutron # pi0
-~B- # proton # ~B0 # proton # pi-
-~B- # proton # ~B_ud0 # pi0
-~B- # proton # ~B_ud0 # pi0 # pi0
-~B- # proton # ~B_ud0 # pi- # pi+
-~Bbar+ # neutron # ~Bbar+ # neutron
-~Bbar+ # neutron # ~Bbar+ # neutron # pi0
-~Bbar+ # neutron # ~Bbar+ # proton # pi-
-~Bbar+ # neutron # ~Bbar0 # neutron # pi+
-~Bbar+ # neutron # ~Bbar0 # proton
-~Bbar+ # neutron # ~Bbar0 # proton # pi0
-~Bbar+ # proton # ~Bbar+ # neutron # pi+
-~Bbar+ # proton # ~Bbar+ # proton
-~Bbar+ # proton # ~Bbar+ # proton # pi0
-~Bbar+ # proton # ~Bbar0 # proton # pi+
-~Bbar0 # neutron # ~Bbar+ # neutron # pi-
-~Bbar0 # neutron # ~Bbar0 # neutron
-~Bbar0 # neutron # ~Bbar0 # neutron # pi0
-~Bbar0 # neutron # ~Bbar0 # proton # pi- 
-~Bbar0 # proton # ~Bbar+ # neutron 
-~Bbar0 # proton # ~Bbar+ # neutron # pi0
-~Bbar0 # proton # ~Bbar+ # proton # pi-
-~Bbar0 # proton # ~Bbar0 # neutron # pi+
-~Bbar0 # proton # ~Bbar0 # proton
-~Bbar0 # proton # ~Bbar0 # proton # pi0
-~Bbar_ud0 # neutron # ~Bbar+ # pi-
-~Bbar_ud0 # neutron # ~Bbar0 # pi0
-~Bbar_ud0 # neutron # ~Bbar_ud0 # neutron 
-~Bbar_ud0 # neutron # ~Bbar_ud0 # neutron # pi0 
-~Bbar_ud0 # neutron # ~Bbar_ud0 # proton # pi-
-~Bbar_ud0 # proton # ~Bbar+ # pi0
-~Bbar_ud0 # proton # ~Bbar0 # pi+
-~Bbar_ud0 # proton # ~Bbar_ud0 # neutron # pi+
-~Bbar_ud0 # proton # ~Bbar_ud0 # proton 
-~Bbar_ud0 # proton # ~Bbar_ud0 # proton # pi0 
-~B0 # neutron # ~B- # neutron # pi-
-~B0 # neutron # ~B- # proton 
-~B0 # neutron # ~B- # proton # pi0
-~B0 # neutron # ~B0 # neutron 
-~B0 # neutron # ~B0 # neutron # pi0
-~B0 # neutron # ~B0 # proton # pi-
-~B0 # neutron # ~B_ud0 # pi0
-~B0 # neutron # ~B_ud0 # pi0 # pi0
-~B0 # neutron # ~B_ud0 # pi- # pi+
-~B0 # proton # ~B- # proton # pi+
-~B0 # proton # ~B0 # neutron # pi+
-~B0 # proton # ~B0 # proton 
-~B0 # proton # ~B0 # proton # pi0
-~B0 # proton # ~B_ud0 # pi+
-~B0 # proton # ~B_ud0 # pi+ # pi0
-~B_ud0 # neutron # ~B_ud0 # neutron
-~B_ud0 # neutron # ~B_ud0 # neutron # pi0
-~B_ud0 # neutron # ~B_ud0 # proton # pi-
-~B_ud0 # proton # ~B_ud0 # neutron # pi+
-~B_ud0 # proton # ~B_ud0 # proton
-~B_ud0 # proton # ~B_ud0 # proton # pi0
diff --git a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_stop.txt b/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_stop.txt
deleted file mode 100644
index 47c0a518ef77..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/ProcessList_regge_stop.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-~T0 # neutron # ~T0 # neutron 
-~T0 # neutron # ~T0 # neutron # pi0
-~T0 # neutron # ~T0 # proton # pi-
-~T0 # neutron # ~T+ # neutron # pi-
-~T0 # neutron # ~T_ud0+ # pi-
-~T0 # neutron # ~T_ud0+ # pi- # pi0
-~T0 # proton # ~T0 # neutron # pi+
-~T0 # proton # ~T0 # proton 
-~T0 # proton # ~T0 # proton # pi0
-~T0 # proton # ~T+ # neutron 
-~T0 # proton # ~T+ # neutron # pi0
-~T0 # proton # ~T+ # proton # pi-
-~T0 # proton # ~T_ud0+ # pi0
-~T0 # proton # ~T_ud0+ # pi0 # pi0
-~T0 # proton # ~T_ud0+ # pi- # pi+
-~Tbar0 # neutron # ~Tbar0 # neutron
-~Tbar0 # neutron # ~Tbar0 # neutron # pi0
-~Tbar0 # neutron # ~Tbar0 # proton # pi-
-~Tbar0 # neutron # ~Tbar- # neutron # pi+
-~Tbar0 # neutron # ~Tbar- # proton
-~Tbar0 # neutron # ~Tbar- # proton # pi0
-~Tbar0 # proton # ~Tbar0 # neutron # pi+
-~Tbar0 # proton # ~Tbar0 # proton
-~Tbar0 # proton # ~Tbar0 # proton # pi0
-~Tbar0 # proton # ~Tbar- # proton # pi+
-~Tbar- # neutron # ~Tbar0 # neutron # pi-
-~Tbar- # neutron # ~Tbar- # neutron
-~Tbar- # neutron # ~Tbar- # neutron # pi0
-~Tbar- # neutron # ~Tbar- # proton # pi- 
-~Tbar- # proton # ~Tbar0 # neutron 
-~Tbar- # proton # ~Tbar0 # neutron # pi0
-~Tbar- # proton # ~Tbar0 # proton # pi-
-~Tbar- # proton # ~Tbar- # neutron # pi+
-~Tbar- # proton # ~Tbar- # proton
-~Tbar- # proton # ~Tbar- # proton # pi0
-~Tbar_ud0- # neutron # ~Tbar0 # pi-
-~Tbar_ud0- # neutron # ~Tbar- # pi0
-~Tbar_ud0- # neutron # ~Tbar_ud0- # neutron 
-~Tbar_ud0- # neutron # ~Tbar_ud0- # neutron # pi0 
-~Tbar_ud0- # neutron # ~Tbar_ud0- # proton # pi-
-~Tbar_ud0- # proton # ~Tbar0 # pi0
-~Tbar_ud0- # proton # ~Tbar- # pi+
-~Tbar_ud0- # proton # ~Tbar_ud0- # neutron # pi+
-~Tbar_ud0- # proton # ~Tbar_ud0- # proton 
-~Tbar_ud0- # proton # ~Tbar_ud0- # proton # pi0 
-~T+ # neutron # ~T0 # neutron # pi-
-~T+ # neutron # ~T0 # proton 
-~T+ # neutron # ~T0 # proton # pi0
-~T+ # neutron # ~T+ # neutron 
-~T+ # neutron # ~T+ # neutron # pi0
-~T+ # neutron # ~T+ # proton # pi-
-~T+ # neutron # ~T_ud0+ # pi0
-~T+ # neutron # ~T_ud0+ # pi0 # pi0
-~T+ # neutron # ~T_ud0+ # pi- # pi+
-~T+ # proton # ~T0 # proton # pi+
-~T+ # proton # ~T+ # neutron # pi+
-~T+ # proton # ~T+ # proton 
-~T+ # proton # ~T+ # proton # pi0
-~T+ # proton # ~T_ud0+ # pi+
-~T+ # proton # ~T_ud0+ # pi+ # pi0
-~T_ud0+ # neutron # ~T_ud0+ # neutron
-~T_ud0+ # neutron # ~T_ud0+ # neutron # pi0
-~T_ud0+ # neutron # ~T_ud0+ # proton # pi-
-~T_ud0+ # proton # ~T_ud0+ # neutron # pi+
-~T_ud0+ # proton # ~T_ud0+ # proton
-~T_ud0+ # proton # ~T_ud0+ # proton # pi0
diff --git a/Simulation/G4Extensions/RHadrons/share/SG_StepNtuple.py b/Simulation/G4Extensions/RHadrons/share/SG_StepNtuple.py
index 2b0cf17972cd..5fc5c1ec3701 100644
--- a/Simulation/G4Extensions/RHadrons/share/SG_StepNtuple.py
+++ b/Simulation/G4Extensions/RHadrons/share/SG_StepNtuple.py
@@ -1,5 +1,7 @@
+# Simple include for setting up SG Step Ntuple Tool
+
 from G4AtlasApps.SimFlags import simFlags
-simFlags.OptionalUserActionList.addAction('G4UA::SG_StepNtupleTool')
+simFlags.OptionalUserActionList.addAction('G4UA::SG_StepNtupleTool',['Run','Event','Step'])
 
 theApp.HistogramPersistency = "ROOT"
 NTupleSvc = Service( "NTupleSvc" )
diff --git a/Simulation/G4Extensions/RHadrons/share/decays.txt b/Simulation/G4Extensions/RHadrons/share/decays.txt
deleted file mode 100644
index 393e8cd38ad3..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/decays.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-~g_Delta+ proton s_chi_0_1 1
-~g_Delta0 neutron s_chi_0_1 0.5
-~g_Delta0 neutron pi0 s_chi_0_1 0.5
diff --git a/Simulation/G4Extensions/RHadrons/share/jobOptions.R-hadron_Sim.py b/Simulation/G4Extensions/RHadrons/share/jobOptions.R-hadron_Sim.py
deleted file mode 100644
index 7c2a60fac2a3..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/jobOptions.R-hadron_Sim.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#==============================================================
-#
-# Job options file for Geant4 Simulations of R-hadrons
-#
-# Models are :
-# "generic": Eur.Phys.J.C50:353-362,2007
-# "regge": arXiv:0909.5104arXiv:0909.5104
-#
-# Prerequisites for your run-dir:
-# - PhysicsConfiguration.txt:
-#   Three variations exist in this package:
-#    - PhysicsConfiguration_generic.txt
-#    - PhysicsConfiguration_regge.txt
-#    - PhysicsConfiguration_regge_nomix.txt
-# - particles.txt: Can be get_file'd from particles_<model>_<sparticle>_<mass>GeV.txt in this package
-# - PDGTABLE.MeV: Get as PDGTABLE_<model>_<sparticle>_<mass>GeV.MeV
-# - ProcessList.txt: Get as ProcessList_<model>_<sparticle>.txt
-#
-# For instructions on how to run with R-hadron decays see further down
-#==============================================================
-
-from AthenaCommon.DetFlags import DetFlags
-DetFlags.ID_setOn()
-DetFlags.Calo_setOn()
-DetFlags.Muon_setOn()
-DetFlags.simulate.Truth_setOn()
-
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-athenaCommonFlags.PoolHitsOutput = 'atlas_MyOutputFile.root'
-athenaCommonFlags.EvtMax = 3
-
-## Global conditions tag
-from AthenaCommon.GlobalFlags import globalflags
-globalflags.ConditionsTag = "OFLCOND-SDR-BS7T-04-03"
-
-from G4AtlasApps.SimFlags import SimFlags
-SimFlags.load_atlas_flags()
-SimFlags.SimLayout.set_On()
-SimFlags.EventFilter.set_On()
-
-## Run ParticleGenerator
-import AthenaCommon.AtlasUnixGeneratorJob
-print "Particle PDG code is ", PDGcode
-spgorders = ['pdgcode: constant 1009213',
-             'vertX: constant 0.0',
-             'vertY: constant 0.0',
-             'vertZ: constant 0.0',
-             't: constant 0.0',
-             'eta: constant 0.5',
-             'phi: flat  0 6.28318',
-             'energy: constant 1300975'] # 300975  # 301000
-
-## If you want decays, place decays.txt in your run-dir and uncomment this block
-## to define the neutralino and set the neutralino mass to something sensible
-#def enable_rhadron_decays():
-#    from G4AtlasApps import AtlasG4Eng
-#    AtlasG4Eng.G4Eng._ctrl.load("Gauginos")
-#    lsp = AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_chi_0_1")
-#    lsp.SetParticleMass(150*GeV)
-#    lsp.Stable(True)
-#SimFlags.initFunctions.add_function("preInitPhysics", enable_rhadron_decays)
-
-## Load RHadrons library in the sim init flow
-def load_rhadrons_lib():
-    from G4AtlasApps import AtlasG4Eng
-    AtlasG4Eng.G4Eng.load_Lib("RHadrons")
-SimFlags.initFunctions.add_function("preInitPhysics", load_rhadrons_lib)
-
-## Populate alg sequence
-from AthenaCommon.AlgSequence import AlgSequence
-topSeq = AlgSequence()
-from ParticleGenerator.ParticleGeneratorConf import ParticleGenerator
-topSeq += ParticleGenerator()
-topSeq.ParticleGenerator.orders = sorted(spgorders)
-
-include("G4AtlasApps/G4Atlas.flat.configuration.py")
-
-from AthenaCommon.CfgGetter import getAlgorithm
-topSeq += getAlgorithm("G4AtlasAlg",tryDefaultConfigurable=True)
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1000GeV.txt
deleted file mode 100644
index 7cfa435b76a6..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1000GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   1000.000   # ~g
-      1000993   1000.700   # ~g_glueball
-      1009213   1000.650   # ~g_rho+
-      1009313   1000.825   # ~g_K*0
-      1009323   1000.825   # ~g_K*+
-      1009113   1000.650   # ~g_rho0
-      1009223   1000.650   # ~g_omega
-      1009333   1001.800   # ~g_phi
-      1091114   1000.975   # ~g_Delta-
-      1092114   1000.975   # ~g_Delta0
-      1092214   1000.975   # ~g_Delta+
-      1092224   1000.975   # ~g_Delta++
-      1093114   1001.150   # ~g_Sigma*-
-      1093214   1001.150   # ~g_Sigma*0
-      1093224   1001.150   # ~g_Sigma*+
-      1093314   1001.300   # ~g_Xi*-
-      1093324   1001.300   # ~g_Xi*0
-      1093334   1001.600   # ~g_Omega-
-     -1009213   1000.650   # ~g_rho-
-     -1009313   1000.825   # ~g_K*bar0
-     -1009323   1000.825   # ~g_K*-
-     -1091114   1000.975   # ~g_Deltabar+
-     -1092114   1000.975   # ~g_Deltabar0
-     -1092214   1000.975   # ~g_Deltabar-
-     -1092224   1000.975   # ~g_Deltabar--
-     -1093114   1001.150   # ~g_Sigma*bar+
-     -1093214   1001.150   # ~g_Sigma*bar0
-     -1093224   1001.150   # ~g_Sigma*bar-
-     -1093314   1001.300   # ~g_Xi*bar+
-     -1093324   1001.300   # ~g_Xi*bar0
-     -1093334   1001.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_100GeV.txt
deleted file mode 100644
index 93353cb6cc62..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_100GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   100.000   # ~g
-      1000993   100.700   # ~g_glueball
-      1009213   100.650   # ~g_rho+
-      1009313   100.825   # ~g_K*0
-      1009323   100.825   # ~g_K*+
-      1009113   100.650   # ~g_rho0
-      1009223   100.650   # ~g_omega
-      1009333   101.800   # ~g_phi
-      1091114   100.975   # ~g_Delta-
-      1092114   100.975   # ~g_Delta0
-      1092214   100.975   # ~g_Delta+
-      1092224   100.975   # ~g_Delta++
-      1093114   101.150   # ~g_Sigma*-
-      1093214   101.150   # ~g_Sigma*0
-      1093224   101.150   # ~g_Sigma*+
-      1093314   101.300   # ~g_Xi*-
-      1093324   101.300   # ~g_Xi*0
-      1093334   101.600   # ~g_Omega-
-     -1009213   100.650   # ~g_rho-
-     -1009313   100.825   # ~g_K*bar0
-     -1009323   100.825   # ~g_K*-
-     -1091114   100.975   # ~g_Deltabar+
-     -1092114   100.975   # ~g_Deltabar0
-     -1092214   100.975   # ~g_Deltabar-
-     -1092224   100.975   # ~g_Deltabar--
-     -1093114   101.150   # ~g_Sigma*bar+
-     -1093214   101.150   # ~g_Sigma*bar0
-     -1093224   101.150   # ~g_Sigma*bar-
-     -1093314   101.300   # ~g_Xi*bar+
-     -1093324   101.300   # ~g_Xi*bar0
-     -1093334   101.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1300GeV.txt
deleted file mode 100644
index 092eb889e538..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1300GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   1300.000   # ~g
-      1000993   1300.700   # ~g_glueball
-      1009213   1300.650   # ~g_rho+
-      1009313   1300.825   # ~g_K*0
-      1009323   1300.825   # ~g_K*+
-      1009113   1300.650   # ~g_rho0
-      1009223   1300.650   # ~g_omega
-      1009333   1301.800   # ~g_phi
-      1091114   1300.975   # ~g_Delta-
-      1092114   1300.975   # ~g_Delta0
-      1092214   1300.975   # ~g_Delta+
-      1092224   1300.975   # ~g_Delta++
-      1093114   1301.150   # ~g_Sigma*-
-      1093214   1301.150   # ~g_Sigma*0
-      1093224   1301.150   # ~g_Sigma*+
-      1093314   1301.300   # ~g_Xi*-
-      1093324   1301.300   # ~g_Xi*0
-      1093334   1301.600   # ~g_Omega-
-     -1009213   1300.650   # ~g_rho-
-     -1009313   1300.825   # ~g_K*bar0
-     -1009323   1300.825   # ~g_K*-
-     -1091114   1300.975   # ~g_Deltabar+
-     -1092114   1300.975   # ~g_Deltabar0
-     -1092214   1300.975   # ~g_Deltabar-
-     -1092224   1300.975   # ~g_Deltabar--
-     -1093114   1301.150   # ~g_Sigma*bar+
-     -1093214   1301.150   # ~g_Sigma*bar0
-     -1093224   1301.150   # ~g_Sigma*bar-
-     -1093314   1301.300   # ~g_Xi*bar+
-     -1093324   1301.300   # ~g_Xi*bar0
-     -1093334   1301.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1600GeV.txt
deleted file mode 100644
index 650b3dc921fd..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_1600GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   1600.000   # ~g
-      1000993   1600.700   # ~g_glueball
-      1009213   1600.650   # ~g_rho+
-      1009313   1600.825   # ~g_K*0
-      1009323   1600.825   # ~g_K*+
-      1009113   1600.650   # ~g_rho0
-      1009223   1600.650   # ~g_omega
-      1009333   1601.800   # ~g_phi
-      1091114   1600.975   # ~g_Delta-
-      1092114   1600.975   # ~g_Delta0
-      1092214   1600.975   # ~g_Delta+
-      1092224   1600.975   # ~g_Delta++
-      1093114   1601.150   # ~g_Sigma*-
-      1093214   1601.150   # ~g_Sigma*0
-      1093224   1601.150   # ~g_Sigma*+
-      1093314   1601.300   # ~g_Xi*-
-      1093324   1601.300   # ~g_Xi*0
-      1093334   1601.600   # ~g_Omega-
-     -1009213   1600.650   # ~g_rho-
-     -1009313   1600.825   # ~g_K*bar0
-     -1009323   1600.825   # ~g_K*-
-     -1091114   1600.975   # ~g_Deltabar+
-     -1092114   1600.975   # ~g_Deltabar0
-     -1092214   1600.975   # ~g_Deltabar-
-     -1092224   1600.975   # ~g_Deltabar--
-     -1093114   1601.150   # ~g_Sigma*bar+
-     -1093214   1601.150   # ~g_Sigma*bar0
-     -1093224   1601.150   # ~g_Sigma*bar-
-     -1093314   1601.300   # ~g_Xi*bar+
-     -1093324   1601.300   # ~g_Xi*bar0
-     -1093334   1601.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_2000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_2000GeV.txt
deleted file mode 100644
index de1f890ee7be..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_2000GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   2000.000   # ~g
-      1000993   2000.700   # ~g_glueball
-      1009213   2000.650   # ~g_rho+
-      1009313   2000.825   # ~g_K*0
-      1009323   2000.825   # ~g_K*+
-      1009113   2000.650   # ~g_rho0
-      1009223   2000.650   # ~g_omega
-      1009333   2001.800   # ~g_phi
-      1091114   2000.975   # ~g_Delta-
-      1092114   2000.975   # ~g_Delta0
-      1092214   2000.975   # ~g_Delta+
-      1092224   2000.975   # ~g_Delta++
-      1093114   2001.150   # ~g_Sigma*-
-      1093214   2001.150   # ~g_Sigma*0
-      1093224   2001.150   # ~g_Sigma*+
-      1093314   2001.300   # ~g_Xi*-
-      1093324   2001.300   # ~g_Xi*0
-      1093334   2001.600   # ~g_Omega-
-     -1009213   2000.650   # ~g_rho-
-     -1009313   2000.825   # ~g_K*bar0
-     -1009323   2000.825   # ~g_K*-
-     -1091114   2000.975   # ~g_Deltabar+
-     -1092114   2000.975   # ~g_Deltabar0
-     -1092214   2000.975   # ~g_Deltabar-
-     -1092224   2000.975   # ~g_Deltabar--
-     -1093114   2001.150   # ~g_Sigma*bar+
-     -1093214   2001.150   # ~g_Sigma*bar0
-     -1093224   2001.150   # ~g_Sigma*bar-
-     -1093314   2001.300   # ~g_Xi*bar+
-     -1093324   2001.300   # ~g_Xi*bar0
-     -1093334   2001.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_200GeV.txt
deleted file mode 100644
index bf87feaa20ca..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_200GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   200.000   # ~g
-      1000993   200.700   # ~g_glueball
-      1009213   200.650   # ~g_rho+
-      1009313   200.825   # ~g_K*0
-      1009323   200.825   # ~g_K*+
-      1009113   200.650   # ~g_rho0
-      1009223   200.650   # ~g_omega
-      1009333   201.800   # ~g_phi
-      1091114   200.975   # ~g_Delta-
-      1092114   200.975   # ~g_Delta0
-      1092214   200.975   # ~g_Delta+
-      1092224   200.975   # ~g_Delta++
-      1093114   201.150   # ~g_Sigma*-
-      1093214   201.150   # ~g_Sigma*0
-      1093224   201.150   # ~g_Sigma*+
-      1093314   201.300   # ~g_Xi*-
-      1093324   201.300   # ~g_Xi*0
-      1093334   201.600   # ~g_Omega-
-     -1009213   200.650   # ~g_rho-
-     -1009313   200.825   # ~g_K*bar0
-     -1009323   200.825   # ~g_K*-
-     -1091114   200.975   # ~g_Deltabar+
-     -1092114   200.975   # ~g_Deltabar0
-     -1092214   200.975   # ~g_Deltabar-
-     -1092224   200.975   # ~g_Deltabar--
-     -1093114   201.150   # ~g_Sigma*bar+
-     -1093214   201.150   # ~g_Sigma*bar0
-     -1093224   201.150   # ~g_Sigma*bar-
-     -1093314   201.300   # ~g_Xi*bar+
-     -1093324   201.300   # ~g_Xi*bar0
-     -1093334   201.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_300GeV.txt
deleted file mode 100644
index 2883dbb7fb01..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_300GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   300.000   # ~g
-      1000993   300.700   # ~g_glueball
-      1009213   300.650   # ~g_rho+
-      1009313   300.825   # ~g_K*0
-      1009323   300.825   # ~g_K*+
-      1009113   300.650   # ~g_rho0
-      1009223   300.650   # ~g_omega
-      1009333   301.800   # ~g_phi
-      1091114   300.975   # ~g_Delta-
-      1092114   300.975   # ~g_Delta0
-      1092214   300.975   # ~g_Delta+
-      1092224   300.975   # ~g_Delta++
-      1093114   301.150   # ~g_Sigma*-
-      1093214   301.150   # ~g_Sigma*0
-      1093224   301.150   # ~g_Sigma*+
-      1093314   301.300   # ~g_Xi*-
-      1093324   301.300   # ~g_Xi*0
-      1093334   301.600   # ~g_Omega-
-     -1009213   300.650   # ~g_rho-
-     -1009313   300.825   # ~g_K*bar0
-     -1009323   300.825   # ~g_K*-
-     -1091114   300.975   # ~g_Deltabar+
-     -1092114   300.975   # ~g_Deltabar0
-     -1092214   300.975   # ~g_Deltabar-
-     -1092224   300.975   # ~g_Deltabar--
-     -1093114   301.150   # ~g_Sigma*bar+
-     -1093214   301.150   # ~g_Sigma*bar0
-     -1093224   301.150   # ~g_Sigma*bar-
-     -1093314   301.300   # ~g_Xi*bar+
-     -1093324   301.300   # ~g_Xi*bar0
-     -1093334   301.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_400GeV.txt
deleted file mode 100644
index e71cc8576f6c..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_400GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   400.000   # ~g
-      1000993   400.700   # ~g_glueball
-      1009213   400.650   # ~g_rho+
-      1009313   400.825   # ~g_K*0
-      1009323   400.825   # ~g_K*+
-      1009113   400.650   # ~g_rho0
-      1009223   400.650   # ~g_omega
-      1009333   401.800   # ~g_phi
-      1091114   400.975   # ~g_Delta-
-      1092114   400.975   # ~g_Delta0
-      1092214   400.975   # ~g_Delta+
-      1092224   400.975   # ~g_Delta++
-      1093114   401.150   # ~g_Sigma*-
-      1093214   401.150   # ~g_Sigma*0
-      1093224   401.150   # ~g_Sigma*+
-      1093314   401.300   # ~g_Xi*-
-      1093324   401.300   # ~g_Xi*0
-      1093334   401.600   # ~g_Omega-
-     -1009213   400.650   # ~g_rho-
-     -1009313   400.825   # ~g_K*bar0
-     -1009323   400.825   # ~g_K*-
-     -1091114   400.975   # ~g_Deltabar+
-     -1092114   400.975   # ~g_Deltabar0
-     -1092214   400.975   # ~g_Deltabar-
-     -1092224   400.975   # ~g_Deltabar--
-     -1093114   401.150   # ~g_Sigma*bar+
-     -1093214   401.150   # ~g_Sigma*bar0
-     -1093224   401.150   # ~g_Sigma*bar-
-     -1093314   401.300   # ~g_Xi*bar+
-     -1093324   401.300   # ~g_Xi*bar0
-     -1093334   401.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_500GeV.txt
deleted file mode 100644
index 1798ba20136f..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_500GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   500.000   # ~g
-      1000993   500.700   # ~g_glueball
-      1009213   500.650   # ~g_rho+
-      1009313   500.825   # ~g_K*0
-      1009323   500.825   # ~g_K*+
-      1009113   500.650   # ~g_rho0
-      1009223   500.650   # ~g_omega
-      1009333   501.800   # ~g_phi
-      1091114   500.975   # ~g_Delta-
-      1092114   500.975   # ~g_Delta0
-      1092214   500.975   # ~g_Delta+
-      1092224   500.975   # ~g_Delta++
-      1093114   501.150   # ~g_Sigma*-
-      1093214   501.150   # ~g_Sigma*0
-      1093224   501.150   # ~g_Sigma*+
-      1093314   501.300   # ~g_Xi*-
-      1093324   501.300   # ~g_Xi*0
-      1093334   501.600   # ~g_Omega-
-     -1009213   500.650   # ~g_rho-
-     -1009313   500.825   # ~g_K*bar0
-     -1009323   500.825   # ~g_K*-
-     -1091114   500.975   # ~g_Deltabar+
-     -1092114   500.975   # ~g_Deltabar0
-     -1092214   500.975   # ~g_Deltabar-
-     -1092224   500.975   # ~g_Deltabar--
-     -1093114   501.150   # ~g_Sigma*bar+
-     -1093214   501.150   # ~g_Sigma*bar0
-     -1093224   501.150   # ~g_Sigma*bar-
-     -1093314   501.300   # ~g_Xi*bar+
-     -1093324   501.300   # ~g_Xi*bar0
-     -1093334   501.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_600GeV.txt
deleted file mode 100644
index 26fca2b14721..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_600GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   600.000   # ~g
-      1000993   600.700   # ~g_glueball
-      1009213   600.650   # ~g_rho+
-      1009313   600.825   # ~g_K*0
-      1009323   600.825   # ~g_K*+
-      1009113   600.650   # ~g_rho0
-      1009223   600.650   # ~g_omega
-      1009333   601.800   # ~g_phi
-      1091114   600.975   # ~g_Delta-
-      1092114   600.975   # ~g_Delta0
-      1092214   600.975   # ~g_Delta+
-      1092224   600.975   # ~g_Delta++
-      1093114   601.150   # ~g_Sigma*-
-      1093214   601.150   # ~g_Sigma*0
-      1093224   601.150   # ~g_Sigma*+
-      1093314   601.300   # ~g_Xi*-
-      1093324   601.300   # ~g_Xi*0
-      1093334   601.600   # ~g_Omega-
-     -1009213   600.650   # ~g_rho-
-     -1009313   600.825   # ~g_K*bar0
-     -1009323   600.825   # ~g_K*-
-     -1091114   600.975   # ~g_Deltabar+
-     -1092114   600.975   # ~g_Deltabar0
-     -1092214   600.975   # ~g_Deltabar-
-     -1092224   600.975   # ~g_Deltabar--
-     -1093114   601.150   # ~g_Sigma*bar+
-     -1093214   601.150   # ~g_Sigma*bar0
-     -1093224   601.150   # ~g_Sigma*bar-
-     -1093314   601.300   # ~g_Xi*bar+
-     -1093324   601.300   # ~g_Xi*bar0
-     -1093334   601.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_700GeV.txt
deleted file mode 100644
index 13d3aecc5831..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_700GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   700.000   # ~g
-      1000993   700.700   # ~g_glueball
-      1009213   700.650   # ~g_rho+
-      1009313   700.825   # ~g_K*0
-      1009323   700.825   # ~g_K*+
-      1009113   700.650   # ~g_rho0
-      1009223   700.650   # ~g_omega
-      1009333   701.800   # ~g_phi
-      1091114   700.975   # ~g_Delta-
-      1092114   700.975   # ~g_Delta0
-      1092214   700.975   # ~g_Delta+
-      1092224   700.975   # ~g_Delta++
-      1093114   701.150   # ~g_Sigma*-
-      1093214   701.150   # ~g_Sigma*0
-      1093224   701.150   # ~g_Sigma*+
-      1093314   701.300   # ~g_Xi*-
-      1093324   701.300   # ~g_Xi*0
-      1093334   701.600   # ~g_Omega-
-     -1009213   700.650   # ~g_rho-
-     -1009313   700.825   # ~g_K*bar0
-     -1009323   700.825   # ~g_K*-
-     -1091114   700.975   # ~g_Deltabar+
-     -1092114   700.975   # ~g_Deltabar0
-     -1092214   700.975   # ~g_Deltabar-
-     -1092224   700.975   # ~g_Deltabar--
-     -1093114   701.150   # ~g_Sigma*bar+
-     -1093214   701.150   # ~g_Sigma*bar0
-     -1093224   701.150   # ~g_Sigma*bar-
-     -1093314   701.300   # ~g_Xi*bar+
-     -1093324   701.300   # ~g_Xi*bar0
-     -1093334   701.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_800GeV.txt
deleted file mode 100644
index 1c213e89fe2d..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_800GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   800.000   # ~g
-      1000993   800.700   # ~g_glueball
-      1009213   800.650   # ~g_rho+
-      1009313   800.825   # ~g_K*0
-      1009323   800.825   # ~g_K*+
-      1009113   800.650   # ~g_rho0
-      1009223   800.650   # ~g_omega
-      1009333   801.800   # ~g_phi
-      1091114   800.975   # ~g_Delta-
-      1092114   800.975   # ~g_Delta0
-      1092214   800.975   # ~g_Delta+
-      1092224   800.975   # ~g_Delta++
-      1093114   801.150   # ~g_Sigma*-
-      1093214   801.150   # ~g_Sigma*0
-      1093224   801.150   # ~g_Sigma*+
-      1093314   801.300   # ~g_Xi*-
-      1093324   801.300   # ~g_Xi*0
-      1093334   801.600   # ~g_Omega-
-     -1009213   800.650   # ~g_rho-
-     -1009313   800.825   # ~g_K*bar0
-     -1009323   800.825   # ~g_K*-
-     -1091114   800.975   # ~g_Deltabar+
-     -1092114   800.975   # ~g_Deltabar0
-     -1092214   800.975   # ~g_Deltabar-
-     -1092224   800.975   # ~g_Deltabar--
-     -1093114   801.150   # ~g_Sigma*bar+
-     -1093214   801.150   # ~g_Sigma*bar0
-     -1093224   801.150   # ~g_Sigma*bar-
-     -1093314   801.300   # ~g_Xi*bar+
-     -1093324   801.300   # ~g_Xi*bar0
-     -1093334   801.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_900GeV.txt
deleted file mode 100644
index b21f679dff01..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_gluino_900GeV.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-      1000021   900.000   # ~g
-      1000993   900.700   # ~g_glueball
-      1009213   900.650   # ~g_rho+
-      1009313   900.825   # ~g_K*0
-      1009323   900.825   # ~g_K*+
-      1009113   900.650   # ~g_rho0
-      1009223   900.650   # ~g_omega
-      1009333   901.800   # ~g_phi
-      1091114   900.975   # ~g_Delta-
-      1092114   900.975   # ~g_Delta0
-      1092214   900.975   # ~g_Delta+
-      1092224   900.975   # ~g_Delta++
-      1093114   901.150   # ~g_Sigma*-
-      1093214   901.150   # ~g_Sigma*0
-      1093224   901.150   # ~g_Sigma*+
-      1093314   901.300   # ~g_Xi*-
-      1093324   901.300   # ~g_Xi*0
-      1093334   901.600   # ~g_Omega-
-     -1009213   900.650   # ~g_rho-
-     -1009313   900.825   # ~g_K*bar0
-     -1009323   900.825   # ~g_K*-
-     -1091114   900.975   # ~g_Deltabar+
-     -1092114   900.975   # ~g_Deltabar0
-     -1092214   900.975   # ~g_Deltabar-
-     -1092224   900.975   # ~g_Deltabar--
-     -1093114   901.150   # ~g_Sigma*bar+
-     -1093214   901.150   # ~g_Sigma*bar0
-     -1093224   901.150   # ~g_Sigma*bar-
-     -1093314   901.300   # ~g_Xi*bar+
-     -1093324   901.300   # ~g_Xi*bar0
-     -1093334   901.600   # ~g_Omegabar+
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_1000GeV.txt
deleted file mode 100644
index ecb7229f77ef..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_1000GeV.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-        1000006 1000.000   # ~t_1
-	1000612 1000.325   # ~T+  
-	1000622 1000.325   # ~T0  
-	1000632 1000.500   # ~T_s+
-	1000642 1001.500   # ~T_c0
-	1000652 1004.800   # ~T_b+
-	1006113 1000.650   # ~T_dd10
-	1006211 1000.650   # ~T_ud0+
-	1006213 1000.650   # ~T_ud1+
-	1006223 1000.650   # ~T_uu1++ 
-	1006311 1000.825   # ~T_sd00  
-	1006313 1000.825   # ~T_sd10  
-	1006321 1000.825   # ~T_su0+  
-	1006323 1000.825   # ~T_su1+  
-	1006333 1001.000   # ~T_ss10  
-        -1000006 1000.000   # ~t_1bar
-	-1000612 1000.325   # ~Tbar-  
-	-1000622 1000.325   # ~Tbar0  
-	-1000632 1000.500   # ~Tbar_s-
-	-1000642 1001.500   # ~Tbar_c0
-	-1000652 1004.800   # ~Tbar_b-
-	-1006113 1000.650   # ~Tbar_dd10
-	-1006211 1000.650   # ~Tbar_ud0-
-	-1006213 1000.650   # ~Tbar_ud1-
-	-1006223 1000.650   # ~Tbar_uu1-- 
-	-1006311 1000.825   # ~Tbar_sd00  
-	-1006313 1000.825   # ~Tbar_sd10  
-	-1006321 1000.825   # ~Tbar_su0-  
-	-1006323 1000.825   # ~Tbar_su1-  
-	-1006333 1001.000   # ~Tbar_ss10
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_100GeV.txt
deleted file mode 100644
index 1429a7e43407..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_100GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 100.000   # ~t_1
-	1000612 100.325   # ~T+  
-	1000622 100.325   # ~T0  
-	1000632 100.500   # ~T_s+
-	1000642 101.500   # ~T_c0
-	1000652 104.800   # ~T_b+
-	1006113 100.650   # ~T_dd10
-	1006211 100.650   # ~T_ud0+
-	1006213 100.650   # ~T_ud1+
-	1006223 100.650   # ~T_uu1++ 
-	1006311 100.825   # ~T_sd00  
-	1006313 100.825   # ~T_sd10  
-	1006321 100.825   # ~T_su0+  
-	1006323 100.825   # ~T_su1+  
-	1006333 101.000   # ~T_ss10  
-        -1000006 100.000   # ~t_1bar
-	-1000612 100.325   # ~Tbar-  
-	-1000622 100.325   # ~Tbar0  
-	-1000632 100.500   # ~Tbar_s-
-	-1000642 101.500   # ~Tbar_c0
-	-1000652 104.800   # ~Tbar_b-
-	-1006113 100.650   # ~Tbar_dd10
-	-1006211 100.650   # ~Tbar_ud0-
-	-1006213 100.650   # ~Tbar_ud1-
-	-1006223 100.650   # ~Tbar_uu1-- 
-	-1006311 100.825   # ~Tbar_sd00  
-	-1006313 100.825   # ~Tbar_sd10  
-	-1006321 100.825   # ~Tbar_su0-  
-	-1006323 100.825   # ~Tbar_su1-  
-	-1006333 101.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_200GeV.txt
deleted file mode 100644
index 6b65bcab4fea..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_200GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 200.000   # ~t_1
-	1000612 200.325   # ~T+  
-	1000622 200.325   # ~T0  
-	1000632 200.500   # ~T_s+
-	1000642 201.500   # ~T_c0
-	1000652 204.800   # ~T_b+
-	1006113 200.650   # ~T_dd10
-	1006211 200.650   # ~T_ud0+
-	1006213 200.650   # ~T_ud1+
-	1006223 200.650   # ~T_uu1++ 
-	1006311 200.825   # ~T_sd00  
-	1006313 200.825   # ~T_sd10  
-	1006321 200.825   # ~T_su0+  
-	1006323 200.825   # ~T_su1+  
-	1006333 201.000   # ~T_ss10  
-        -1000006 200.000   # ~t_1bar
-	-1000612 200.325   # ~Tbar-  
-	-1000622 200.325   # ~Tbar0  
-	-1000632 200.500   # ~Tbar_s-
-	-1000642 201.500   # ~Tbar_c0
-	-1000652 204.800   # ~Tbar_b-
-	-1006113 200.650   # ~Tbar_dd10
-	-1006211 200.650   # ~Tbar_ud0-
-	-1006213 200.650   # ~Tbar_ud1-
-	-1006223 200.650   # ~Tbar_uu1-- 
-	-1006311 200.825   # ~Tbar_sd00  
-	-1006313 200.825   # ~Tbar_sd10  
-	-1006321 200.825   # ~Tbar_su0-  
-	-1006323 200.825   # ~Tbar_su1-  
-	-1006333 201.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_300GeV.txt
deleted file mode 100644
index 44be36d50cbb..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_300GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 300.000   # ~t_1
-	1000612 300.325   # ~T+  
-	1000622 300.325   # ~T0  
-	1000632 300.500   # ~T_s+
-	1000642 301.500   # ~T_c0
-	1000652 304.800   # ~T_b+
-	1006113 300.650   # ~T_dd10
-	1006211 300.650   # ~T_ud0+
-	1006213 300.650   # ~T_ud1+
-	1006223 300.650   # ~T_uu1++ 
-	1006311 300.825   # ~T_sd00  
-	1006313 300.825   # ~T_sd10  
-	1006321 300.825   # ~T_su0+  
-	1006323 300.825   # ~T_su1+  
-	1006333 301.000   # ~T_ss10  
-        -1000006 300.000   # ~t_1bar
-	-1000612 300.325   # ~Tbar-  
-	-1000622 300.325   # ~Tbar0  
-	-1000632 300.500   # ~Tbar_s-
-	-1000642 301.500   # ~Tbar_c0
-	-1000652 304.800   # ~Tbar_b-
-	-1006113 300.650   # ~Tbar_dd10
-	-1006211 300.650   # ~Tbar_ud0-
-	-1006213 300.650   # ~Tbar_ud1-
-	-1006223 300.650   # ~Tbar_uu1-- 
-	-1006311 300.825   # ~Tbar_sd00  
-	-1006313 300.825   # ~Tbar_sd10  
-	-1006321 300.825   # ~Tbar_su0-  
-	-1006323 300.825   # ~Tbar_su1-  
-	-1006333 301.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_400GeV.txt
deleted file mode 100644
index 1882ddba94c7..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_400GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 400.000   # ~t_1
-	1000612 400.325   # ~T+  
-	1000622 400.325   # ~T0  
-	1000632 400.500   # ~T_s+
-	1000642 401.500   # ~T_c0
-	1000652 404.800   # ~T_b+
-	1006113 400.650   # ~T_dd10
-	1006211 400.650   # ~T_ud0+
-	1006213 400.650   # ~T_ud1+
-	1006223 400.650   # ~T_uu1++ 
-	1006311 400.825   # ~T_sd00  
-	1006313 400.825   # ~T_sd10  
-	1006321 400.825   # ~T_su0+  
-	1006323 400.825   # ~T_su1+  
-	1006333 401.000   # ~T_ss10  
-        -1000006 400.000   # ~t_1bar
-	-1000612 400.325   # ~Tbar-  
-	-1000622 400.325   # ~Tbar0  
-	-1000632 400.500   # ~Tbar_s-
-	-1000642 401.500   # ~Tbar_c0
-	-1000652 404.800   # ~Tbar_b-
-	-1006113 400.650   # ~Tbar_dd10
-	-1006211 400.650   # ~Tbar_ud0-
-	-1006213 400.650   # ~Tbar_ud1-
-	-1006223 400.650   # ~Tbar_uu1-- 
-	-1006311 400.825   # ~Tbar_sd00  
-	-1006313 400.825   # ~Tbar_sd10  
-	-1006321 400.825   # ~Tbar_su0-  
-	-1006323 400.825   # ~Tbar_su1-  
-	-1006333 401.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_500GeV.txt
deleted file mode 100644
index c73b757d8147..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_500GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 500.000   # ~t_1
-	1000612 500.325   # ~T+  
-	1000622 500.325   # ~T0  
-	1000632 500.500   # ~T_s+
-	1000642 501.500   # ~T_c0
-	1000652 504.800   # ~T_b+
-	1006113 500.650   # ~T_dd10
-	1006211 500.650   # ~T_ud0+
-	1006213 500.650   # ~T_ud1+
-	1006223 500.650   # ~T_uu1++ 
-	1006311 500.825   # ~T_sd00  
-	1006313 500.825   # ~T_sd10  
-	1006321 500.825   # ~T_su0+  
-	1006323 500.825   # ~T_su1+  
-	1006333 501.000   # ~T_ss10  
-        -1000006 500.000   # ~t_1bar
-	-1000612 500.325   # ~Tbar-  
-	-1000622 500.325   # ~Tbar0  
-	-1000632 500.500   # ~Tbar_s-
-	-1000642 501.500   # ~Tbar_c0
-	-1000652 504.800   # ~Tbar_b-
-	-1006113 500.650   # ~Tbar_dd10
-	-1006211 500.650   # ~Tbar_ud0-
-	-1006213 500.650   # ~Tbar_ud1-
-	-1006223 500.650   # ~Tbar_uu1-- 
-	-1006311 500.825   # ~Tbar_sd00  
-	-1006313 500.825   # ~Tbar_sd10  
-	-1006321 500.825   # ~Tbar_su0-  
-	-1006323 500.825   # ~Tbar_su1-  
-	-1006333 501.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_600GeV.txt
deleted file mode 100644
index 32a46c4eab80..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_600GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 600.000   # ~t_1
-	1000612 600.325   # ~T+  
-	1000622 600.325   # ~T0  
-	1000632 600.500   # ~T_s+
-	1000642 601.500   # ~T_c0
-	1000652 604.800   # ~T_b+
-	1006113 600.650   # ~T_dd10
-	1006211 600.650   # ~T_ud0+
-	1006213 600.650   # ~T_ud1+
-	1006223 600.650   # ~T_uu1++ 
-	1006311 600.825   # ~T_sd00  
-	1006313 600.825   # ~T_sd10  
-	1006321 600.825   # ~T_su0+  
-	1006323 600.825   # ~T_su1+  
-	1006333 601.000   # ~T_ss10  
-        -1000006 600.000   # ~t_1bar
-	-1000612 600.325   # ~Tbar-  
-	-1000622 600.325   # ~Tbar0  
-	-1000632 600.500   # ~Tbar_s-
-	-1000642 601.500   # ~Tbar_c0
-	-1000652 604.800   # ~Tbar_b-
-	-1006113 600.650   # ~Tbar_dd10
-	-1006211 600.650   # ~Tbar_ud0-
-	-1006213 600.650   # ~Tbar_ud1-
-	-1006223 600.650   # ~Tbar_uu1-- 
-	-1006311 600.825   # ~Tbar_sd00  
-	-1006313 600.825   # ~Tbar_sd10  
-	-1006321 600.825   # ~Tbar_su0-  
-	-1006323 600.825   # ~Tbar_su1-  
-	-1006333 601.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_700GeV.txt
deleted file mode 100644
index 3028afffab5d..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_700GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 700.000   # ~t_1
-	1000612 700.325   # ~T+  
-	1000622 700.325   # ~T0  
-	1000632 700.500   # ~T_s+
-	1000642 701.500   # ~T_c0
-	1000652 704.800   # ~T_b+
-	1006113 700.650   # ~T_dd10
-	1006211 700.650   # ~T_ud0+
-	1006213 700.650   # ~T_ud1+
-	1006223 700.650   # ~T_uu1++ 
-	1006311 700.825   # ~T_sd00  
-	1006313 700.825   # ~T_sd10  
-	1006321 700.825   # ~T_su0+  
-	1006323 700.825   # ~T_su1+  
-	1006333 701.000   # ~T_ss10  
-        -1000006 700.000   # ~t_1bar
-	-1000612 700.325   # ~Tbar-  
-	-1000622 700.325   # ~Tbar0  
-	-1000632 700.500   # ~Tbar_s-
-	-1000642 701.500   # ~Tbar_c0
-	-1000652 704.800   # ~Tbar_b-
-	-1006113 700.650   # ~Tbar_dd10
-	-1006211 700.650   # ~Tbar_ud0-
-	-1006213 700.650   # ~Tbar_ud1-
-	-1006223 700.650   # ~Tbar_uu1-- 
-	-1006311 700.825   # ~Tbar_sd00  
-	-1006313 700.825   # ~Tbar_sd10  
-	-1006321 700.825   # ~Tbar_su0-  
-	-1006323 700.825   # ~Tbar_su1-  
-	-1006333 701.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_800GeV.txt
deleted file mode 100644
index a46a2ffe1546..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_800GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 800.000   # ~t_1
-	1000612 800.325   # ~T+  
-	1000622 800.325   # ~T0  
-	1000632 800.500   # ~T_s+
-	1000642 801.500   # ~T_c0
-	1000652 804.800   # ~T_b+
-	1006113 800.650   # ~T_dd10
-	1006211 800.650   # ~T_ud0+
-	1006213 800.650   # ~T_ud1+
-	1006223 800.650   # ~T_uu1++ 
-	1006311 800.825   # ~T_sd00  
-	1006313 800.825   # ~T_sd10  
-	1006321 800.825   # ~T_su0+  
-	1006323 800.825   # ~T_su1+  
-	1006333 801.000   # ~T_ss10  
-        -1000006 800.000   # ~t_1bar
-	-1000612 800.325   # ~Tbar-  
-	-1000622 800.325   # ~Tbar0  
-	-1000632 800.500   # ~Tbar_s-
-	-1000642 801.500   # ~Tbar_c0
-	-1000652 804.800   # ~Tbar_b-
-	-1006113 800.650   # ~Tbar_dd10
-	-1006211 800.650   # ~Tbar_ud0-
-	-1006213 800.650   # ~Tbar_ud1-
-	-1006223 800.650   # ~Tbar_uu1-- 
-	-1006311 800.825   # ~Tbar_sd00  
-	-1006313 800.825   # ~Tbar_sd10  
-	-1006321 800.825   # ~Tbar_su0-  
-	-1006323 800.825   # ~Tbar_su1-  
-	-1006333 801.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_900GeV.txt
deleted file mode 100644
index e4f891f0afed..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_generic_stop_900GeV.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-        1000006 900.000   # ~t_1
-	1000612 900.325   # ~T+  
-	1000622 900.325   # ~T0  
-	1000632 900.500   # ~T_s+
-	1000642 901.500   # ~T_c0
-	1000652 904.800   # ~T_b+
-	1006113 900.650   # ~T_dd10
-	1006211 900.650   # ~T_ud0+
-	1006213 900.650   # ~T_ud1+
-	1006223 900.650   # ~T_uu1++ 
-	1006311 900.825   # ~T_sd00  
-	1006313 900.825   # ~T_sd10  
-	1006321 900.825   # ~T_su0+  
-	1006323 900.825   # ~T_su1+  
-	1006333 901.000   # ~T_ss10  
-        -1000006 900.000   # ~t_1bar
-	-1000612 900.325   # ~Tbar-  
-	-1000622 900.325   # ~Tbar0  
-	-1000632 900.500   # ~Tbar_s-
-	-1000642 901.500   # ~Tbar_c0
-	-1000652 904.800   # ~Tbar_b-
-	-1006113 900.650   # ~Tbar_dd10
-	-1006211 900.650   # ~Tbar_ud0-
-	-1006213 900.650   # ~Tbar_ud1-
-	-1006223 900.650   # ~Tbar_uu1-- 
-	-1006311 900.825   # ~Tbar_sd00  
-	-1006313 900.825   # ~Tbar_sd10  
-	-1006321 900.825   # ~Tbar_su0-  
-	-1006323 900.825   # ~Tbar_su1-  
-	-1006333 901.000   # ~Tbar_ss10  
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_1000GeV.txt
deleted file mode 100644
index a899f7a6036b..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_1000GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   1000.0     # ~g
-      1000991   1000.330   # ~g_glueball
-      1009211   1000.330   # ~g_pi+
-     -1009211   1000.330   # ~g_pi-
-      1009111   1000.330   # ~g_pi0
-      1009311   1000.460   # ~g_K0
-     -1009311   1000.460   # ~g_K0bar
-      1009321   1000.460   # ~g_K+
-     -1009321   1000.460   # ~g_K-
-      1093122   1000.280   # ~g_Lambda0
-      1092212   1000.660   # ~g_proton
-      1092112   1000.660   # ~g_neutron
-      1092214   1000.530   # ~g_Delta+
-      1092114   1000.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_100GeV.txt
deleted file mode 100644
index 9da6e116ede3..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_100GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   100.0     # ~g
-      1000991   100.330   # ~g_glueball
-      1009211   100.330   # ~g_pi+
-     -1009211   100.330   # ~g_pi-
-      1009111   100.330   # ~g_pi0
-      1009311   100.460   # ~g_K0
-     -1009311   100.460   # ~g_K0bar
-      1009321   100.460   # ~g_K+
-     -1009321   100.460   # ~g_K-
-      1093122   100.280   # ~g_Lambda0
-      1092212   100.660   # ~g_proton
-      1092112   100.660   # ~g_neutron
-      1092214   100.530   # ~g_Delta+
-      1092114   100.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_200GeV.txt
deleted file mode 100644
index d235ed6f7981..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_200GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   200.0     # ~g
-      1000991   200.330   # ~g_glueball
-      1009211   200.330   # ~g_pi+
-     -1009211   200.330   # ~g_pi-
-      1009111   200.330   # ~g_pi0
-      1009311   200.460   # ~g_K0
-     -1009311   200.460   # ~g_K0bar
-      1009321   200.460   # ~g_K+
-     -1009321   200.460   # ~g_K-
-      1093122   200.280   # ~g_Lambda0
-      1092212   200.660   # ~g_proton
-      1092112   200.660   # ~g_neutron
-      1092214   200.530   # ~g_Delta+
-      1092114   200.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_300GeV.txt
deleted file mode 100644
index f6708ef4783f..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_300GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   300.0     # ~g
-      1000991   300.330   # ~g_glueball
-      1009211   300.330   # ~g_pi+
-     -1009211   300.330   # ~g_pi-
-      1009111   300.330   # ~g_pi0
-      1009311   300.460   # ~g_K0
-     -1009311   300.460   # ~g_K0bar
-      1009321   300.460   # ~g_K+
-     -1009321   300.460   # ~g_K-
-      1093122   300.280   # ~g_Lambda0
-      1092212   300.660   # ~g_proton
-      1092112   300.660   # ~g_neutron
-      1092214   300.530   # ~g_Delta+
-      1092114   300.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_400GeV.txt
deleted file mode 100644
index 986cde5281c5..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_400GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   400.0     # ~g
-      1000991   400.330   # ~g_glueball
-      1009211   400.330   # ~g_pi+
-     -1009211   400.330   # ~g_pi-
-      1009111   400.330   # ~g_pi0
-      1009311   400.460   # ~g_K0
-     -1009311   400.460   # ~g_K0bar
-      1009321   400.460   # ~g_K+
-     -1009321   400.460   # ~g_K-
-      1093122   400.280   # ~g_Lambda0
-      1092212   400.660   # ~g_proton
-      1092112   400.660   # ~g_neutron
-      1092214   400.530   # ~g_Delta+
-      1092114   400.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_500GeV.txt
deleted file mode 100644
index 1e093a8b28d6..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_500GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   500.0     # ~g
-      1000991   500.330   # ~g_glueball
-      1009211   500.330   # ~g_pi+
-     -1009211   500.330   # ~g_pi-
-      1009111   500.330   # ~g_pi0
-      1009311   500.460   # ~g_K0
-     -1009311   500.460   # ~g_K0bar
-      1009321   500.460   # ~g_K+
-     -1009321   500.460   # ~g_K-
-      1093122   500.280   # ~g_Lambda0
-      1092212   500.660   # ~g_proton
-      1092112   500.660   # ~g_neutron
-      1092214   500.530   # ~g_Delta+
-      1092114   500.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_600GeV.txt
deleted file mode 100644
index 09ce83e98b50..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_600GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   600.0     # ~g
-      1000991   600.330   # ~g_glueball
-      1009211   600.330   # ~g_pi+
-     -1009211   600.330   # ~g_pi-
-      1009111   600.330   # ~g_pi0
-      1009311   600.460   # ~g_K0
-     -1009311   600.460   # ~g_K0bar
-      1009321   600.460   # ~g_K+
-     -1009321   600.460   # ~g_K-
-      1093122   600.280   # ~g_Lambda0
-      1092212   600.660   # ~g_proton
-      1092112   600.660   # ~g_neutron
-      1092214   600.530   # ~g_Delta+
-      1092114   600.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_700GeV.txt
deleted file mode 100644
index 7f8c814d3a15..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_700GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   700.0     # ~g
-      1000991   700.330   # ~g_glueball
-      1009211   700.330   # ~g_pi+
-     -1009211   700.330   # ~g_pi-
-      1009111   700.330   # ~g_pi0
-      1009311   700.460   # ~g_K0
-     -1009311   700.460   # ~g_K0bar
-      1009321   700.460   # ~g_K+
-     -1009321   700.460   # ~g_K-
-      1093122   700.280   # ~g_Lambda0
-      1092212   700.660   # ~g_proton
-      1092112   700.660   # ~g_neutron
-      1092214   700.530   # ~g_Delta+
-      1092114   700.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_800GeV.txt
deleted file mode 100644
index 3cc264a709a7..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_800GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   800.0     # ~g
-      1000991   800.330   # ~g_glueball
-      1009211   800.330   # ~g_pi+
-     -1009211   800.330   # ~g_pi-
-      1009111   800.330   # ~g_pi0
-      1009311   800.460   # ~g_K0
-     -1009311   800.460   # ~g_K0bar
-      1009321   800.460   # ~g_K+
-     -1009321   800.460   # ~g_K-
-      1093122   800.280   # ~g_Lambda0
-      1092212   800.660   # ~g_proton
-      1092112   800.660   # ~g_neutron
-      1092214   800.530   # ~g_Delta+
-      1092114   800.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_900GeV.txt
deleted file mode 100644
index dd0d0bd41683..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_intermediate_gluino_900GeV.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-      1000021   900.0     # ~g
-      1000991   900.330   # ~g_glueball
-      1009211   900.330   # ~g_pi+
-     -1009211   900.330   # ~g_pi-
-      1009111   900.330   # ~g_pi0
-      1009311   900.460   # ~g_K0
-     -1009311   900.460   # ~g_K0bar
-      1009321   900.460   # ~g_K+
-     -1009321   900.460   # ~g_K-
-      1093122   900.280   # ~g_Lambda0
-      1092212   900.660   # ~g_proton
-      1092112   900.660   # ~g_neutron
-      1092214   900.530   # ~g_Delta+
-      1092114   900.530   # ~g_Delta0
-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_1000GeV.txt
deleted file mode 100644
index 3b7fd8a7325a..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_1000GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   1000.0     # ~g
-      1000993   1000.700   # ~g_glueball
-      1009213   1000.700   # ~g_rho+
-      1009113   1000.700   # ~g_rho0
-      1009313   1000.700   # ~g_K0
-      1009323   1000.700   # ~g_K+
-      1093122   1000.700   # ~g_Lambda0
-     -1009213   1000.700   # ~g_rho-
-     -1009313   1000.700   # ~g_K0bar
-     -1009323   1000.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_100GeV.txt
deleted file mode 100644
index 7cdb35973b48..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_100GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   100.0     # ~g
-      1000993   100.700   # ~g_glueball
-      1009213   100.700   # ~g_rho+
-      1009113   100.700   # ~g_rho0
-      1009313   100.700   # ~g_K0
-      1009323   100.700   # ~g_K+
-      1093122   100.700   # ~g_Lambda0
-     -1009213   100.700   # ~g_rho-
-     -1009313   100.700   # ~g_K0bar
-     -1009323   100.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_200GeV.txt
deleted file mode 100644
index aa80aa41a212..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_200GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   200.0     # ~g
-      1000993   200.700   # ~g_glueball
-      1009213   200.700   # ~g_rho+
-      1009113   200.700   # ~g_rho0
-      1009313   200.700   # ~g_K0
-      1009323   200.700   # ~g_K+
-      1093122   200.700   # ~g_Lambda0
-     -1009213   200.700   # ~g_rho-
-     -1009313   200.700   # ~g_K0bar
-     -1009323   200.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_300GeV.txt
deleted file mode 100644
index e1cd797fb2fc..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_300GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   300.0     # ~g
-      1000993   300.700   # ~g_glueball
-      1009213   300.700   # ~g_rho+
-      1009113   300.700   # ~g_rho0
-      1009313   300.700   # ~g_K0
-      1009323   300.700   # ~g_K+
-      1093122   300.700   # ~g_Lambda0
-     -1009213   300.700   # ~g_rho-
-     -1009313   300.700   # ~g_K0bar
-     -1009323   300.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_400GeV.txt
deleted file mode 100644
index 19af0254d6cf..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_400GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   400.0     # ~g
-      1000993   400.700   # ~g_glueball
-      1009213   400.700   # ~g_rho+
-      1009113   400.700   # ~g_rho0
-      1009313   400.700   # ~g_K0
-      1009323   400.700   # ~g_K+
-      1093122   400.700   # ~g_Lambda0
-     -1009213   400.700   # ~g_rho-
-     -1009313   400.700   # ~g_K0bar
-     -1009323   400.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_500GeV.txt
deleted file mode 100644
index 4a1c984a1258..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_500GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   500.0     # ~g
-      1000993   500.700   # ~g_glueball
-      1009213   500.700   # ~g_rho+
-      1009113   500.700   # ~g_rho0
-      1009313   500.700   # ~g_K0
-      1009323   500.700   # ~g_K+
-      1093122   500.700   # ~g_Lambda0
-     -1009213   500.700   # ~g_rho-
-     -1009313   500.700   # ~g_K0bar
-     -1009323   500.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_600GeV.txt
deleted file mode 100644
index 2d0c754ab38d..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_600GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   600.0     # ~g
-      1000993   600.700   # ~g_glueball
-      1009213   600.700   # ~g_rho+
-      1009113   600.700   # ~g_rho0
-      1009313   600.700   # ~g_K0
-      1009323   600.700   # ~g_K+
-      1093122   600.700   # ~g_Lambda0
-     -1009213   600.700   # ~g_rho-
-     -1009313   600.700   # ~g_K0bar
-     -1009323   600.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_700GeV.txt
deleted file mode 100644
index 3e8786af9d51..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_700GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   700.0     # ~g
-      1000993   700.700   # ~g_glueball
-      1009213   700.700   # ~g_rho+
-      1009113   700.700   # ~g_rho0
-      1009313   700.700   # ~g_K0
-      1009323   700.700   # ~g_K+
-      1093122   700.700   # ~g_Lambda0
-     -1009213   700.700   # ~g_rho-
-     -1009313   700.700   # ~g_K0bar
-     -1009323   700.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_800GeV.txt
deleted file mode 100644
index d434c131a674..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_800GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   800.0     # ~g
-      1000993   800.700   # ~g_glueball
-      1009213   800.700   # ~g_rho+
-      1009113   800.700   # ~g_rho0
-      1009313   800.700   # ~g_K0
-      1009323   800.700   # ~g_K+
-      1093122   800.700   # ~g_Lambda0
-     -1009213   800.700   # ~g_rho-
-     -1009313   800.700   # ~g_K0bar
-     -1009323   800.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_900GeV.txt
deleted file mode 100644
index 82b25cef5677..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_gluino_900GeV.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-      1000021   900.0     # ~g
-      1000993   900.700   # ~g_glueball
-      1009213   900.700   # ~g_rho+
-      1009113   900.700   # ~g_rho0
-      1009313   900.700   # ~g_K0
-      1009323   900.700   # ~g_K+
-      1093122   900.700   # ~g_Lambda0
-     -1009213   900.700   # ~g_rho-
-     -1009313   900.700   # ~g_K0bar
-     -1009323   900.700   # ~g_K-
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_1000GeV.txt
deleted file mode 100644
index 133aa3a1fdb3..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_1000GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 1000.000   # ~b
-	1000512 1000.325   # ~B0  
-	1000522 1000.325   # ~B-  
-	1005211 1000.650   # ~B_ud0
-        -1000005 1000.000   # ~bbar
-	-1000512 1000.325   # ~Bbar0  
-	-1000522 1000.325   # ~Bbar+  
-	-1005211 1000.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_100GeV.txt
deleted file mode 100644
index 39a725b681e1..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_100GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 100.000   # ~b
-	1000512 100.325   # ~B0  
-	1000522 100.325   # ~B-  
-	1005211 100.650   # ~B_ud0
-        -1000005 100.000   # ~bbar
-	-1000512 100.325   # ~Bbar0  
-	-1000522 100.325   # ~Bbar+  
-	-1005211 100.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_200GeV.txt
deleted file mode 100644
index ae8996331700..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_200GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 200.000   # ~b
-	1000512 200.325   # ~B0  
-	1000522 200.325   # ~B-  
-	1005211 200.650   # ~B_ud0
-        -1000005 200.000   # ~bbar
-	-1000512 200.325   # ~Bbar0  
-	-1000522 200.325   # ~Bbar+  
-	-1005211 200.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_300GeV.txt
deleted file mode 100644
index 29ad75c96831..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_300GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 300.000   # ~b
-	1000512 300.325   # ~B0  
-	1000522 300.325   # ~B-  
-	1005211 300.650   # ~B_ud0
-        -1000005 300.000   # ~bbar
-	-1000512 300.325   # ~Bbar0  
-	-1000522 300.325   # ~Bbar+  
-	-1005211 300.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_400GeV.txt
deleted file mode 100644
index b8ec985ce69b..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_400GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 400.000   # ~b
-	1000512 400.325   # ~B0  
-	1000522 400.325   # ~B-  
-	1005211 400.650   # ~B_ud0
-        -1000005 400.000   # ~bbar
-	-1000512 400.325   # ~Bbar0  
-	-1000522 400.325   # ~Bbar+  
-	-1005211 400.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_500GeV.txt
deleted file mode 100644
index 5ff4a6963648..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_500GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 500.000   # ~b
-	1000512 500.325   # ~B0  
-	1000522 500.325   # ~B-  
-	1005211 500.650   # ~B_ud0
-        -1000005 500.000   # ~bbar
-	-1000512 500.325   # ~Bbar0  
-	-1000522 500.325   # ~Bbar+  
-	-1005211 500.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_600GeV.txt
deleted file mode 100644
index d6f6226e50ca..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_600GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 600.000   # ~b
-	1000512 600.325   # ~B0  
-	1000522 600.325   # ~B-  
-	1005211 600.650   # ~B_ud0
-        -1000005 600.000   # ~bbar
-	-1000512 600.325   # ~Bbar0  
-	-1000522 600.325   # ~Bbar+  
-	-1005211 600.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_700GeV.txt
deleted file mode 100644
index 562b2c311283..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_700GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 700.000   # ~b
-	1000512 700.325   # ~B0  
-	1000522 700.325   # ~B-  
-	1005211 700.650   # ~B_ud0
-        -1000005 700.000   # ~bbar
-	-1000512 700.325   # ~Bbar0  
-	-1000522 700.325   # ~Bbar+  
-	-1005211 700.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_800GeV.txt
deleted file mode 100644
index 1c58aed0fd1f..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_800GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 800.000   # ~b
-	1000512 800.325   # ~B0  
-	1000522 800.325   # ~B-  
-	1005211 800.650   # ~B_ud0
-        -1000005 800.000   # ~bbar
-	-1000512 800.325   # ~Bbar0  
-	-1000522 800.325   # ~Bbar+  
-	-1005211 800.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_900GeV.txt
deleted file mode 100644
index d31ebd605ad8..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_sbottom_900GeV.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-        1000005 900.000   # ~b
-	1000512 900.325   # ~B0  
-	1000522 900.325   # ~B-  
-	1005211 900.650   # ~B_ud0
-        -1000005 900.000   # ~bbar
-	-1000512 900.325   # ~Bbar0  
-	-1000522 900.325   # ~Bbar+  
-	-1005211 900.650   # ~Bbar_ud0
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_1000GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_1000GeV.txt
deleted file mode 100644
index 0cb6c0681f2d..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_1000GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 1000.000   # ~t_1
-	1000612 1000.325   # ~T+  
-	1000622 1000.325   # ~T0  
-	1006211 1000.650   # ~T_ud0+
-        -1000006 1000.000   # ~t_1bar
-	-1000612 1000.325   # ~Tbar-  
-	-1000622 1000.325   # ~Tbar0  
-	-1006211 1000.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_100GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_100GeV.txt
deleted file mode 100644
index 0f4eb02c7c66..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_100GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 100.000   # ~t_1
-	1000612 100.325   # ~T+  
-	1000622 100.325   # ~T0  
-	1006211 100.650   # ~T_ud0+
-        -1000006 100.000   # ~t_1bar
-	-1000612 100.325   # ~Tbar-  
-	-1000622 100.325   # ~Tbar0  
-	-1006211 100.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_200GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_200GeV.txt
deleted file mode 100644
index ceddb4c24166..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_200GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 200.000   # ~t_1
-	1000612 200.325   # ~T+  
-	1000622 200.325   # ~T0  
-	1006211 200.650   # ~T_ud0+
-        -1000006 200.000   # ~t_1bar
-	-1000612 200.325   # ~Tbar-  
-	-1000622 200.325   # ~Tbar0  
-	-1006211 200.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_300GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_300GeV.txt
deleted file mode 100644
index 0d40c04b9e54..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_300GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 300.000   # ~t_1
-	1000612 300.325   # ~T+  
-	1000622 300.325   # ~T0  
-	1006211 300.650   # ~T_ud0+
-        -1000006 300.000   # ~t_1bar
-	-1000612 300.325   # ~Tbar-  
-	-1000622 300.325   # ~Tbar0  
-	-1006211 300.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_400GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_400GeV.txt
deleted file mode 100644
index a75991aef09a..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_400GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 400.000   # ~t_1
-	1000612 400.325   # ~T+  
-	1000622 400.325   # ~T0  
-	1006211 400.650   # ~T_ud0+
-        -1000006 400.000   # ~t_1bar
-	-1000612 400.325   # ~Tbar-  
-	-1000622 400.325   # ~Tbar0  
-	-1006211 400.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_500GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_500GeV.txt
deleted file mode 100644
index 9d41725e43d2..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_500GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 500.000   # ~t_1
-	1000612 500.325   # ~T+  
-	1000622 500.325   # ~T0  
-	1006211 500.650   # ~T_ud0+
-        -1000006 500.000   # ~t_1bar
-	-1000612 500.325   # ~Tbar-  
-	-1000622 500.325   # ~Tbar0  
-	-1006211 500.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_600GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_600GeV.txt
deleted file mode 100644
index ee77f559b371..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_600GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 600.000   # ~t_1
-	1000612 600.325   # ~T+  
-	1000622 600.325   # ~T0  
-	1006211 600.650   # ~T_ud0+
-        -1000006 600.000   # ~t_1bar
-	-1000612 600.325   # ~Tbar-  
-	-1000622 600.325   # ~Tbar0  
-	-1006211 600.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_700GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_700GeV.txt
deleted file mode 100644
index 756cc8088885..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_700GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 700.000   # ~t_1
-	1000612 700.325   # ~T+  
-	1000622 700.325   # ~T0  
-	1006211 700.650   # ~T_ud0+
-        -1000006 700.000   # ~t_1bar
-	-1000612 700.325   # ~Tbar-  
-	-1000622 700.325   # ~Tbar0  
-	-1006211 700.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_800GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_800GeV.txt
deleted file mode 100644
index 22e95d4064ba..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_800GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 800.000   # ~t_1
-	1000612 800.325   # ~T+  
-	1000622 800.325   # ~T0  
-	1006211 800.650   # ~T_ud0+
-        -1000006 800.000   # ~t_1bar
-	-1000612 800.325   # ~Tbar-  
-	-1000622 800.325   # ~Tbar0  
-	-1006211 800.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_900GeV.txt b/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_900GeV.txt
deleted file mode 100644
index 27aef79bb188..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/particles_regge_stop_900GeV.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-        1000006 900.000   # ~t_1
-	1000612 900.325   # ~T+  
-	1000622 900.325   # ~T0  
-	1006211 900.650   # ~T_ud0+
-        -1000006 900.000   # ~t_1bar
-	-1000612 900.325   # ~Tbar-  
-	-1000622 900.325   # ~Tbar0  
-	-1006211 900.650   # ~Tbar_ud0-
-	
diff --git a/Simulation/G4Extensions/RHadrons/share/rhadrontruth.py b/Simulation/G4Extensions/RHadrons/share/rhadrontruth.py
deleted file mode 100644
index f1092cc9c8e4..000000000000
--- a/Simulation/G4Extensions/RHadrons/share/rhadrontruth.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-def rhadron_modify_truth_strategies():
-    print "ERROR rhadron_modify_truth_strategies is obsolete"
-    print "Please request replacment configuration."
-    import sys
-    sys.exit(1)
-    ## from G4AtlasApps import AtlasG4Eng
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.activateStrategy('LLP', 'Muon::MuonSys',1)
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.activateStrategy('LLP', 'MUONQ02::MUONQ02',1)
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.activateStrategy('LLP', 'IDET::IDET',1)
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.activateStrategy('LLP', 'CALO::CALO',1)
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.activateStrategy('LLP', 'BeamPipe::BeamPipe',1)
-    ## AtlasG4Eng.G4Eng._ctrl.mctruthMenu.listStrategies()
-
-
-from G4AtlasApps.SimFlags import simFlags
-simFlags.InitFunctions.add_function("postInit", rhadron_modify_truth_strategies)
diff --git a/Simulation/G4Extensions/RHadrons/src/CustomParticleFactory.cxx b/Simulation/G4Extensions/RHadrons/src/CustomParticleFactory.cxx
index 2fe31d74495d..a8d21adaf462 100644
--- a/Simulation/G4Extensions/RHadrons/src/CustomParticleFactory.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/CustomParticleFactory.cxx
@@ -30,7 +30,6 @@ void CustomParticleFactory::loadCustomParticles()
   if(loaded) return;
   loaded = true;
   std::ifstream configFile("particles.txt");
-  //  std::ifstream configFile("stophadrons.txt");
   G4String pType="custom";
   G4String pSubType="";
   G4double spectatormass = 0;
@@ -40,154 +39,129 @@ void CustomParticleFactory::loadCustomParticles()
   int pdgCode;
   std::string name,line;
   // This should be compatible IMO to SLHA
-  while(getline(configFile,line))
-    {
-      std::string::size_type beg_idx,end_idx;
-
-      beg_idx = line.find_first_not_of("\t #");
-      if(beg_idx > 0 && line[beg_idx-1] == '#') continue;
-      end_idx = line.find_first_of( "\t ", beg_idx);
-      if (end_idx == std::string::npos) continue;
-      char *endptr;
-      pdgCode  = strtol(line.substr( beg_idx, end_idx - beg_idx ).c_str(), &endptr, 0);
-      if (endptr[0] != '\0') {
-	throw std::invalid_argument("Could not convert string to int: " + line.substr( beg_idx, end_idx - beg_idx ));	
-      }
-
-      beg_idx = line.find_first_not_of("\t ",end_idx);
-      end_idx = line.find_first_of( "\t #", beg_idx);
-      if (end_idx == std::string::npos) continue;
-      mass  = atof(line.substr( beg_idx, end_idx - beg_idx ).c_str());
-
-      beg_idx = line.find_first_not_of("\t# ",end_idx);
-      end_idx = line.length();
-      if (beg_idx==std::string::npos) beg_idx = end_idx;
-      name = line.substr( beg_idx, end_idx - beg_idx );
-      while(name.c_str()[0] == ' ') name.erase(0,1);
-      while(name[name.size()-1] == ' ') name.erase(name.size()-1,1);
-
-      //      std::cout << name << std::endl;
-
-      if(abs(pdgCode) / 1000000 == 0)
-        {
-          std::cout << "Pdg code too low " << pdgCode << " "<<abs(pdgCode) / 1000000  << std::endl;
-          continue;
-        }
-
-      pType="custom";
-      if(CustomPDGParser::s_isRHadron(pdgCode)) pType = "rhadron";
-      if(CustomPDGParser::s_isSLepton(pdgCode)) pType = "sLepton";
-      if(CustomPDGParser::s_isMesonino(pdgCode)) pType = "mesonino";
-      if(CustomPDGParser::s_isSbaryon(pdgCode)) pType = "sbaryon";
-
-
-      std::cout<<"pType: "<<pType<<std::endl;
-      std::cout<<"Charge of "<<name<<" is "<<CustomPDGParser::s_charge(pdgCode)<<std::endl;
-
-      CustomParticle *particle  = new CustomParticle(
-                                                     name,           mass * CLHEP::GeV ,        0.0*CLHEP::MeV,       CLHEP::eplus* CustomPDGParser::s_charge(pdgCode),
-                                                     (int)CustomPDGParser::s_spin(pdgCode)-1,              +1,             0,
-                                                     0,              0,             0,
-                                                     pType,               0,            +1, pdgCode,
-                                                     true,            -1.0,          NULL );
-      if (pType=="custom") {
-        spectatormass = mass;
-        spectator=particle;
-        particle->SetCloud(0);
-        particle->SetSpectator(0);
-      }
-      if(first){
-        first = false;
-        spectatormass = mass;
-        spectator=particle;
-        particle->SetCloud(0);
-        particle->SetSpectator(0);
-      } else {
-        G4String cloudname = name+"cloud";
-        G4String cloudtype = pType+"cloud";
-        G4double cloudmass = mass-spectatormass;
-        CustomParticle *tmpParticle  = new CustomParticle(
-                                                          cloudname,           cloudmass * CLHEP::GeV ,        0.0*CLHEP::MeV,  0 ,
-                                                          0,              +1,             0,
-                                                          0,              0,             0,
-                                                          cloudtype,               0,            +1, 0,
-                                                          true,            -1.0,          NULL );
-        particle->SetCloud(tmpParticle);
-        particle->SetSpectator(spectator);
-
-        G4cout<<name<<" being assigned "<<particle->GetCloud()->GetParticleName()<<" and "<<particle->GetSpectator()->GetParticleName()<<G4endl;
-        G4cout<<"Masses: "
-              <<particle->GetPDGMass()/CLHEP::GeV<<" Gev, "
-              <<particle->GetCloud()->GetPDGMass()/CLHEP::GeV<<" GeV and "
-              <<particle->GetSpectator()->GetPDGMass()/CLHEP::GeV<<" GeV."
-              <<G4endl;
-      }
-
-
-      /*
-        if(name=="~g_Delta+")
-        {
-        G4DecayTable* table = new G4DecayTable();
-        G4VDecayChannel** mode = new G4VDecayChannel*[2];
-        mode[0] = new G4PhaseSpaceDecayChannel("~g_Delta+",0.5,2,"proton","Neutralino");
-        mode[1] = new G4PhaseSpaceDecayChannel("~g_Delta+",0.5,2,"neutron","pi0","Neutralino");
-        for (G4int index=0; index <2; index++ ) table->Insert(mode[index]);
-        delete [] mode;
-        particle->SetPDGLifeTime(10*s);
-        particle->SetPDGStable(false);
-        particle->SetDecayTable(table);
+  while(getline(configFile,line)) {
+    std::string::size_type beg_idx,end_idx;
+
+    beg_idx = line.find_first_not_of("\t #");
+    if(beg_idx > 0 && line[beg_idx-1] == '#') continue;
+    end_idx = line.find_first_of( "\t ", beg_idx);
+    if (end_idx == std::string::npos) continue;
+    char *endptr;
+    pdgCode  = strtol(line.substr( beg_idx, end_idx - beg_idx ).c_str(), &endptr, 0);
+    if (endptr[0] != '\0') {
+      throw std::invalid_argument("Could not convert string to int: " + line.substr( beg_idx, end_idx - beg_idx ));
+    }
 
-        }
-      */
+    beg_idx = line.find_first_not_of("\t ",end_idx);
+    end_idx = line.find_first_of( "\t #", beg_idx);
+    if (end_idx == std::string::npos) continue;
+    mass  = atof(line.substr( beg_idx, end_idx - beg_idx ).c_str());
+
+    beg_idx = line.find_first_not_of("\t# ",end_idx);
+    end_idx = line.length();
+    if (beg_idx==std::string::npos) beg_idx = end_idx;
+    name = line.substr( beg_idx, end_idx - beg_idx );
+    while(name.c_str()[0] == ' ') name.erase(0,1);
+    while(name[name.size()-1] == ' ') name.erase(name.size()-1,1);
+
+    if(abs(pdgCode) / 1000000 == 0){
+      G4cout << "Pdg code too low " << pdgCode << " "<<abs(pdgCode) / 1000000  << std::endl;
+      continue;
+    }
 
-      m_particles.insert(particle);
+    pType="custom";
+    if(CustomPDGParser::s_isRHadron(pdgCode)) pType = "rhadron";
+    if(CustomPDGParser::s_isSLepton(pdgCode)) pType = "sLepton";
+    if(CustomPDGParser::s_isMesonino(pdgCode)) pType = "mesonino";
+    if(CustomPDGParser::s_isSbaryon(pdgCode)) pType = "sbaryon";
+
+    G4cout<<"pType: "<<pType<<G4endl;
+    G4cout<<"Charge of "<<name<<" is "<<CustomPDGParser::s_charge(pdgCode)<<G4endl;
+
+    CustomParticle *particle  = new CustomParticle(
+                                                   name,           mass * CLHEP::GeV ,        0.0*CLHEP::MeV,       CLHEP::eplus* CustomPDGParser::s_charge(pdgCode),
+                                                   (int)CustomPDGParser::s_spin(pdgCode)-1,              +1,             0,
+                                                   0,              0,             0,
+                                                   pType,               0,            +1, pdgCode,
+                                                   true,            -1.0,          NULL );
+    if (pType=="custom") {
+      spectatormass = mass;
+      spectator=particle;
+      particle->SetCloud(0);
+      particle->SetSpectator(0);
+    }
+    if(first){
+      first = false;
+      spectatormass = mass;
+      spectator=particle;
+      particle->SetCloud(0);
+      particle->SetSpectator(0);
+    } else {
+      G4String cloudname = name+"cloud";
+      G4String cloudtype = pType+"cloud";
+      G4double cloudmass = mass-spectatormass;
+      CustomParticle *tmpParticle  = new CustomParticle(
+                                                        cloudname,           cloudmass * CLHEP::GeV ,        0.0*CLHEP::MeV,  0 ,
+                                                        0,              +1,             0,
+                                                        0,              0,             0,
+                                                        cloudtype,               0,            +1, 0,
+                                                        true,            -1.0,          NULL );
+      particle->SetCloud(tmpParticle);
+      particle->SetSpectator(spectator);
+
+      G4cout<<name<<" being assigned "<<particle->GetCloud()->GetParticleName()<<" and "<<particle->GetSpectator()->GetParticleName()<<G4endl;
+      G4cout<<"Masses: "
+            <<particle->GetPDGMass()/CLHEP::GeV<<" Gev, "
+            <<particle->GetCloud()->GetPDGMass()/CLHEP::GeV<<" GeV and "
+            <<particle->GetSpectator()->GetPDGMass()/CLHEP::GeV<<" GeV."
+            <<G4endl;
     }
+
+    m_particles.insert(particle);
+  }
   configFile.close();
 
   // Reading decays from file
   std::vector<std::vector<std::string>* > decays;
   std::ifstream decayFile("decays.txt");
-  while(getline(decayFile,line))
-    {
-      std::istringstream is(line);
-      std::vector<std::string>* txtvec = new std::vector<std::string>(std::istream_iterator<std::string>(is),std::istream_iterator<std::string>());
-      decays.push_back(txtvec);
-    }
+  while(getline(decayFile,line)) {
+    std::istringstream is(line);
+    std::vector<std::string>* txtvec = new std::vector<std::string>(std::istream_iterator<std::string>(is),std::istream_iterator<std::string>());
+    decays.push_back(txtvec);
+  }
   decayFile.close();
 
   // Looping over custom particles to add decays
-  for (std::set<G4ParticleDefinition *>::iterator part=m_particles.begin();part!=m_particles.end();part++)
-    {
-      name=(*part)->GetParticleName();
-      std::vector<std::vector<std::string> > mydecays;
-      for (unsigned int i = 0; i!= decays.size(); i++)
-        if(name==(*(decays[i]))[0]) // Is this decay for me?
-          mydecays.push_back(*(decays[i]));
-
-      if (mydecays.size()>0) // Did I get any decays?
-        {
-          int ndec=mydecays.size();
-          G4DecayTable* table = new G4DecayTable();
-          G4VDecayChannel** mode = new G4VDecayChannel*[ndec];
-          for (int i=0;i!=ndec;i++)
-            {
-              std::vector<std::string> thisdec=mydecays[i];
-              double branch = atof(thisdec[thisdec.size()-1].c_str()); // Reading branching ratio
-              thisdec.pop_back(); // Removing the number from the vector
-              for (unsigned int j = 0;j!=thisdec.size();j++) std::cout<<thisdec[j]<<std::endl;
-              if(thisdec.size()==3)
-                mode[i] = new G4PhaseSpaceDecayChannel(thisdec[0],branch,2,thisdec[1],thisdec[2]);
-              else if(thisdec.size()==4)
-                mode[i] = new G4PhaseSpaceDecayChannel(thisdec[0],branch,3,thisdec[1],thisdec[2],thisdec[3]);
-              else
-                std::cout<<"Decay chain invalid!!!"<<std::endl;
-            }
-          for (G4int index=0; index <ndec; index++ ) table->Insert(mode[index]);
-          delete [] mode;
-          //      (*part)->SetPDGLifeTime(0.1*CLHEP::ns);
-          //      (*part)->SetPDGStable(false);
-          (*part)->SetDecayTable(table);
+  for (std::set<G4ParticleDefinition *>::iterator part=m_particles.begin();part!=m_particles.end();part++) {
+    name=(*part)->GetParticleName();
+    std::vector<std::vector<std::string> > mydecays;
+    for (unsigned int i = 0; i!= decays.size(); i++){
+      if(name==(*(decays[i]))[0]){
+        // Is this decay for me?
+        mydecays.push_back(*(decays[i]));
+      }
+    } // End of the for loop
+    if (mydecays.size()>0){ // Did I get any decays?
+      int ndec=mydecays.size();
+      G4DecayTable* table = new G4DecayTable();
+      G4VDecayChannel** mode = new G4VDecayChannel*[ndec];
+      for (int i=0;i!=ndec;i++){
+        std::vector<std::string> thisdec=mydecays[i];
+        double branch = atof(thisdec[thisdec.size()-1].c_str()); // Reading branching ratio
+        thisdec.pop_back(); // Removing the number from the vector
+        for (unsigned int j = 0;j!=thisdec.size();j++) G4cout<<thisdec[j]<<G4endl;
+        if(thisdec.size()==3){
+          mode[i] = new G4PhaseSpaceDecayChannel(thisdec[0],branch,2,thisdec[1],thisdec[2]);
+        } else if(thisdec.size()==4){
+          mode[i] = new G4PhaseSpaceDecayChannel(thisdec[0],branch,3,thisdec[1],thisdec[2],thisdec[3]);
+        } else {
+          G4cout<<"Decay chain invalid!!!"<<std::endl;
         }
+      }
+      for (G4int index=0; index <ndec; index++ ) table->Insert(mode[index]);
+      delete [] mode;
+      (*part)->SetDecayTable(table);
     }
+  }
   return;
 }
diff --git a/Simulation/G4Extensions/RHadrons/src/Decay3Body.h b/Simulation/G4Extensions/RHadrons/src/Decay3Body.h
deleted file mode 100644
index ac7999a9df2d..000000000000
--- a/Simulation/G4Extensions/RHadrons/src/Decay3Body.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef DECAY3BODY_H
-#define DECAY3BODY_H
-#include "CLHEP/Vector/LorentzVector.h"
-
-class Decay3Body {
-public:
-  Decay3Body();
-  ~Decay3Body();
-
-  void doDecay(const CLHEP::HepLorentzVector & mother,
-               CLHEP::HepLorentzVector & daughter1,
-               CLHEP::HepLorentzVector & daughter2,
-               CLHEP::HepLorentzVector & daughter3);
-
-private:
-  inline double sqr(double a);
-};
-
-#endif
diff --git a/Simulation/G4Extensions/RHadrons/src/FullModelHadronicProcess.cxx b/Simulation/G4Extensions/RHadrons/src/FullModelHadronicProcess.cxx
index 6548589f7745..997bd0806f2b 100644
--- a/Simulation/G4Extensions/RHadrons/src/FullModelHadronicProcess.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/FullModelHadronicProcess.cxx
@@ -216,7 +216,7 @@ G4VParticleChange* FullModelHadronicProcess::PostStepDoIt(const G4Track& aTrack,
           outgoingCloud=tempCust->GetCloud();
           if(outgoingCloud == 0)
             {
-              std::cout << "FullModelHadronicProcess::PostStepDoIt  Definition of outgoing particle cloud not available!!" << std::endl;
+              std::cout << "FullModelHadronicProcess::PostStepDoIt  Definition of outgoing particle cloud for " << tempDef->GetParticleName() << " not available!!" << std::endl;
             }
         }
 
@@ -356,7 +356,10 @@ G4VParticleChange* FullModelHadronicProcess::PostStepDoIt(const G4Track& aTrack,
                                     aPosition);
       aParticleChange.AddSecondary(Track0);
 
-      if(p0->GetKineticEnergy()>e_kin_0) {
+      // Because of the above calculations, and the use of mass, there's going to be a lot of squaring and
+      //  square rooting to get the total energy.  For that reason, we should allow a little buffer before
+      //  we freak out over energy non-conservation...
+      if(p0->GetKineticEnergy()>e_kin_0+1.e-9) { // Allow 1 meV of energy non-conservation in an interaction
         G4cout<<"ALAAAAARM!!! (incident changed from "
               <<IncidentRhadron->GetDefinition()->GetParticleName()
               <<" to "<<p0->GetDefinition()->GetParticleName()<<")"<<G4endl;
diff --git a/Simulation/G4Extensions/RHadrons/src/G4DecayProducts2.h b/Simulation/G4Extensions/RHadrons/src/G4DecayProducts2.h
deleted file mode 100644
index 6ec8963b2ab8..000000000000
--- a/Simulation/G4Extensions/RHadrons/src/G4DecayProducts2.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef G4DecayProducts2_H
-#define G4DecayProducts2_H
-
-//Copy of G4DecayProducts class, with up to 2000 entries
-#include "G4DecayProducts.hh"
-class G4DecayProducts2 : public G4DecayProducts{
-public:
-  enum {MaxNumberOfProducts=2000};
-
-  //So we can "access" the private members of G4DecayProducts! (Don't try this at home!!)
-  struct G4DecayProductsStruct{
-    enum {MaxNumberOfProducts = 64};
-    G4int                         numberOfProducts;
-    G4DynamicParticle*            theParentParticle;
-    G4DynamicParticle*            theProductVector[MaxNumberOfProducts];
-  };
-
-  G4int PushProducts(G4DynamicParticle *aParticle)
-  {
-    G4int & numberOfProducts2 = ((G4DecayProductsStruct*)this)->numberOfProducts;//number of products in G4DecayProducts
-    if ( numberOfProducts2 < MaxNumberOfProducts) {
-      G4DynamicParticle** theProductVector2 = ((G4DecayProductsStruct*)this)->theProductVector;//going to push the products onto the list in G4DecayProducts, even though it's only 64 long... fortunately, it's the last member variable of the class, and we allocated enough room past the end of the class in memory...
-      theProductVector2[numberOfProducts2]= aParticle;
-      numberOfProducts2 += 1;
-      G4cout << "G4DecayProducts2::PushProducts "
-             << " has numberOfProducts="
-             << numberOfProducts2 << G4endl;
-    } else {
-      G4cerr << "G4DecayProducts2::PushProducts "
-             << " exceeds MaxNumberOfProducts(="
-             << G4int(MaxNumberOfProducts) << ")" << G4endl;
-    }
-    return numberOfProducts2;
-  }
-
-};
-#endif // G4DecayProducts2_H
diff --git a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
index 858ac8ccc291..aa4f056c7e34 100644
--- a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
@@ -57,10 +57,9 @@ G4ProcessHelper::G4ProcessHelper()
                     "Initialization: The reaction product list contained an unknown particle");
       }
     }
-    if (target == "proton")
-      {
-        pReactionMap[incidentPDG].push_back(prod);
-      } else if (target == "neutron") {
+    if (target == "proton"){
+      pReactionMap[incidentPDG].push_back(prod);
+    } else if (target == "neutron") {
       nReactionMap[incidentPDG].push_back(prod);
     } else {
       G4Exception("G4ProcessHelper", "IllegalTarget", FatalException,
@@ -184,24 +183,26 @@ G4double G4ProcessHelper::GetInclusiveCrossSection(const G4DynamicParticle *aPar
   G4double theXsec = 0;
   G4String name = aParticle->GetDefinition()->GetParticleName();
 
-  if(!reggemodel)
-    {
+  if(!reggemodel){
       //Flat cross section
       if(CustomPDGParser::s_isRGlueball(thePDGCode)) {
         theXsec = 24 * CLHEP::millibarn;
       } else {
         std::vector<G4int> nq=CustomPDGParser::s_containedQuarks(thePDGCode);
-        //    G4cout<<"Number of quarks: "<<nq.size()<<G4endl;
         for (std::vector<G4int>::iterator it = nq.begin();
              it != nq.end();
              it++)
           {
-            //    G4cout<<"Quarkvector: "<<*it<<G4endl;
+            // 12 mb taken from asymptotic pion-nucleon scattering cross sections
             if (*it == 1 || *it == 2) theXsec += 12 * CLHEP::millibarn;
-            if (*it == 3) theXsec += 6 * CLHEP::millibarn;
+            // 6 mb taken from asymptotic kaon-nucleon scattering cross sections
+            // No data for D or B, so setting to behave like a kaon
+            if (*it == 3 || *it == 4 || *it == 5) theXsec += 6 * CLHEP::millibarn;
           }
       }
-    } else {
+  } else {
+    // From Eur. Phys. J. C (2010) 66: 493-501
+    // DOI 10.1140/epjc/s10052-010-1262-1
     double R = Regge(boost);
     double P = Pom(boost);
     if(thePDGCode>0)
@@ -226,6 +227,8 @@ G4double G4ProcessHelper::GetInclusiveCrossSection(const G4DynamicParticle *aPar
 
   if(resonant)
     {
+    // Described in Section 5.1 of http://r-hadrons.web.cern.ch/r-hadrons/download/mackeprang_thesis.pdf
+    // mentioned but dismissed in Section 3.3 of https://arxiv.org/pdf/hep-ex/0404001.pdf
       double e_0 = ek_0 + aParticle->GetDefinition()->GetPDGMass(); //Now total energy
 
       e_0 = sqrt(aParticle->GetDefinition()->GetPDGMass()*aParticle->GetDefinition()->GetPDGMass()
@@ -268,11 +271,10 @@ ReactionProduct G4ProcessHelper::GetFinalState(const G4Track& aTrack, G4Particle
       NumberOfNucleons += NbOfAtomsPerVolume[elm]*(*theElementVector)[elm]->GetN();
     }
 
-  if(CLHEP::RandFlat::shoot()<NumberOfProtons/NumberOfNucleons)
-    {
+  if(CLHEP::RandFlat::shoot()<NumberOfProtons/NumberOfNucleons){
       theReactionMap = &pReactionMap;
       theTarget = theProton;
-    } else {
+  } else {
     theReactionMap = &nReactionMap;
     theTarget = theNeutron;
   }
@@ -432,7 +434,6 @@ ReactionProduct G4ProcessHelper::GetFinalState(const G4Track& aTrack, G4Particle
     } else {
       // 2 -> 3 processes require a phase space lookup
       if (PhaseSpace(theReactionProductList[i],aDynamicParticle)>CLHEP::RandFlat::shoot()) selected = true;
-      //selected = true;
     }
     //    double suppressionfactor=0.5;
     if(selected&&particleTable->FindParticle(theReactionProductList[i][0])->GetPDGCharge()!=aDynamicParticle->GetDefinition()->GetPDGCharge())
@@ -500,7 +501,7 @@ G4bool G4ProcessHelper::ReactionGivesBaryon(const ReactionProduct& aReaction){
 
 G4double G4ProcessHelper::PhaseSpace(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle){
   G4double qValue = ReactionProductMass(aReaction,aDynamicParticle);
-
+  // Eq 4 of https://arxiv.org/pdf/hep-ex/0404001.pdf
   G4double phi = sqrt(1+qValue/(2*0.139*CLHEP::GeV))*pow(qValue/(1.1*CLHEP::GeV),3./2.);
   return (phi/(1+phi));
 }
@@ -537,6 +538,8 @@ void G4ProcessHelper::ReadAndParse(const G4String& str,
 
 double G4ProcessHelper::Regge(const double boost)
 {
+  // https://link.springer.com/content/pdf/10.1140%2Fepjc%2Fs10052-010-1262-1.pdf Eq 1
+  // Originally from https://arxiv.org/pdf/0710.3930.pdf
   double a=2.165635078566177;
   double b=0.1467453738547229;
   double c=-0.9607903711871166;
@@ -546,6 +549,8 @@ double G4ProcessHelper::Regge(const double boost)
 
 double G4ProcessHelper::Pom(const double boost)
 {
+  // https://link.springer.com/content/pdf/10.1140%2Fepjc%2Fs10052-010-1262-1.pdf Eq 2
+  // Originally from https://arxiv.org/pdf/0710.3930.pdf
   double a=4.138224000651535;
   double b=1.50377557581421;
   double c=-0.05449742257808247;
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.cxx
index 0386ef6ea2ff..fde98956feac 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.cxx
@@ -2,56 +2,55 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
+// Header for my class
 #include "RHadronPythiaDecayer.h"
+
+// The actual decayers.  Singleton classes, not toolhandles
+#include "G4ExternalDecay/Pythia8ForDecays.h"
+
+// For passing things around
+#include "CLHEP/Vector/LorentzVector.h"
 #include "G4Track.hh"
 #include "G4DynamicParticle.hh"
-#include "CLHEP/Vector/LorentzVector.h"
-#include "G4ExternalDecay/PythiaForDecays.h"
-#include <iostream>
+#include "G4DecayProducts.hh"
+
+RHadronPythiaDecayer::RHadronPythiaDecayer( const std::string s )
+ : G4VExtDecayer(s)
+{
+  // In the constructor, make a decayer instance, so that it's initialized here and not in the event loop
+  Pythia8ForDecays::Instance();
+}
 
 G4DecayProducts* RHadronPythiaDecayer::ImportDecayProducts(const G4Track& aTrack){
-#ifdef USEG4DECAYPRODUCTS2
-  G4DecayProducts2 * dp = new G4DecayProducts2[1000];//allocate enough space so we can store all the additional products
-#else
   G4DecayProducts * dp = new G4DecayProducts();
-#endif
   dp->SetParentParticle( *(aTrack.GetDynamicParticle()) );
 
-  // get particle momentum
-  G4ThreeVector momentum = aTrack.GetMomentum();
+  // get properties for later print outs
   G4double etot = aTrack.GetDynamicParticle()->GetTotalEnergy();
-  CLHEP::HepLorentzVector p;
-  p[0] = momentum.x() / CLHEP::GeV;
-  p[1] = momentum.y() / CLHEP::GeV;
-  p[2] = momentum.z() / CLHEP::GeV;
-  p[3] = etot         / CLHEP::GeV;
-
   G4int pdgEncoding = aTrack.GetDefinition()->GetPDGEncoding();
 
-  // let Pythia6Decayer decay the particle
-  // and import the decay products
-  PythiaForDecays::Instance()->Py1ent(0, pdgEncoding, p.e(), p.theta(), p.phi());
-  PythiaForDecays::Instance()->DecayRhadrons(pdgEncoding);
+  // Outgoing particle
   std::vector<G4DynamicParticle*> particles;
-  PythiaForDecays::Instance()->ImportParticles(particles);
 
-  std::cout << "Decayed an RHadron with ID " << pdgEncoding << " and momentum " << p << " in Pythia.  Decay products are:" << std::endl;
+  // Pythia8 decay the particle and import the decay products
+  Pythia8ForDecays::Instance()->Py1ent(aTrack, particles);
+
+  G4cout << "Decayed an RHadron with ID " << pdgEncoding << " and momentum " << aTrack.GetMomentum() << " in Pythia.  Decay products are:" << G4endl;
   double totalE=0.0;
   for (unsigned int i=0; i<particles.size(); ++i){
     if (particles[i]) {
-      std::cout<<i<<" "; dp->PushProducts(particles[i]);
+      dp->PushProducts(particles[i]);
       totalE += particles[i]->GetTotalEnergy();
     }
     else {
-      std::cout << i << " null pointer!" << std::endl;
+      G4cout << i << " null pointer!" << G4endl;
     }
   }
-  std::cout << std::endl;
-  //std::cout <<"\nSummary:" << std::endl;
-  std::cout<<" total energy in was "<<etot<<std::endl;
-  std::cout<<" total energy out is "<<totalE<<std::endl;
-  //std::cout << std::endl;
-  //dp->DumpInfo();
+
+  G4cout << "Total energy in was "<<etot   << G4endl;
+  G4cout << "Total energy out is "<<totalE << G4endl;
+
+  dp->DumpInfo();
 
   return dp;
 }
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.h b/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.h
index 21a25a94fbe9..deb7940264d9 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.h
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronPythiaDecayer.h
@@ -5,25 +5,17 @@
 #ifndef RHadronPythiaDecayer_H
 #define RHadronPythiaDecayer_H
 
-//Use this to override the G4DecayProducts class and use up to 2000 decay products
-//#define USEG4DECAYPRODUCTS2
-
-#ifdef USEG4DECAYPRODUCTS2
-#include "RHadrons/G4DecayProducts2.h"
-#else
-#include "G4DecayProducts.hh"
-#endif
-
 #include "G4VExtDecayer.hh"
 #include "G4Track.hh"
 #include <string>
 
+class G4DecayProducts;
+
 class RHadronPythiaDecayer: public G4VExtDecayer
 {
   public:
-   RHadronPythiaDecayer( const std::string s) : G4VExtDecayer(s) {}
+   RHadronPythiaDecayer( const std::string s );
    virtual G4DecayProducts* ImportDecayProducts(const G4Track&);
-  private:
 };
 
 #endif
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index f841633b3f56..5679703ba868 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -20,8 +20,14 @@
 #include "G4Decay.hh"
 #include "G4BaryonConstructor.hh"
 #include "G4ProcessManager.hh"
+
+//#include "Pythia8_i/Pythia8_i.h"
+//#include "Pythia8/UserHooks.h"
+//#include "Pythia8/RHadrons.h"
 // STL headers
-#include <iostream>
+//#include <iostream>
+//#include <fstream>
+#include <string>
 
 
 //-----------------------------------------------------------------------------
@@ -30,14 +36,6 @@
 // 2015-05-14 Edoardo Farina
 //-----------------------------------------------------------------------------
 
-#if G4VERSION_NUMBER > 1029
-#define PARTICLEITERATOR (this->GetParticleIterator())
-#elif G4VERSION_NUMBER > 1009
-#define PARTICLEITERATOR aParticleIterator
-#else
-#define PARTICLEITERATOR theParticleIterator
-#endif
-
 //=============================================================================
 // Standard constructor, initializes variables
 //=============================================================================
@@ -45,6 +43,8 @@ RHadronsPhysicsTool::RHadronsPhysicsTool( const std::string& type,
                                           const std::string& nam,const IInterface* parent )
   : base_class ( type, nam , parent )
 {
+  ATH_MSG_VERBOSE ( "RHadronsPhysicsTool "<<type<<" "<<nam );
+  declareInterface< IPhysicsOptionTool >( this ) ;
 }
 
 //=============================================================================
@@ -185,114 +185,81 @@ void RHadronsPhysicsTool::ConstructProcess()
 //  standardpdgidtodecay.push_back(551);
 //  standardpdgidtodecay.push_back(-551);
 
-  for (unsigned int i=0; i<standardpdgidtodecay.size(); ++i)
-    {
-      int pid=standardpdgidtodecay[i];
-      ATH_MSG_VERBOSE ( "ACH 3830 - Adding decay for "<<pid );
-      G4ParticleDefinition *particle = G4ParticleTable::GetParticleTable()->FindParticle( pid );
-      if (particle)
-        {
-          ATH_MSG_VERBOSE ( particle->GetParticleName()<<" is standard for Pythia6, lifetime is "<<particle->GetPDGLifeTime() );
-          G4ProcessManager *pmanager = particle->GetProcessManager();
-          if (!pmanager)
-            {
-
-              //ATH_MSG_VERBOSE ( "ACH: Adding process manager from 4122 (one we know works) to this lady" );
-              //particle->SetProcessManager(G4ParticleTable::GetParticleTable()->FindParticle(4122)->GetProcessManager());
-
-              ATH_MSG_VERBOSE ( "ACH: Copying process manager from 4122 (one we know works) to this lady" );
-              particle->SetProcessManager(new G4ProcessManager(*(G4ParticleTable::GetParticleTable()->FindParticle(4122)->GetProcessManager())));
-
-              //G4cout<<"ACH: Adding new process manager to this lady"<<G4endl;
-              //particle->SetProcessManager(new G4ProcessManager(particle));
-
-              pmanager = particle->GetProcessManager();
-            }
-          G4ProcessVector *pros = pmanager->GetProcessList();
-          for (int pi=0; pi<pros->size(); ++pi)
-            {
-              if ((*pros)[pi]->GetProcessType()==fDecay)
-                {
-                  pmanager->RemoveProcess(pi);
-                  break;
-                }
-            }
-          for (int pi=0; pi<pros->size(); ++pi)
-            {
-              if ((*pros)[pi]->GetProcessType()==fDecay)
-                {
-                  ATH_MSG_WARNING ( "there is still another decay process for this particle already defined!" );
-                  pmanager ->DumpInfo();
-                }
-            }
-          pmanager ->AddProcess(theDecayProcess);
-          pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
-          //pmanager ->DumpInfo();
+  for (unsigned int i=0; i<standardpdgidtodecay.size(); ++i) {
+    int pid=standardpdgidtodecay[i];
+    ATH_MSG_VERBOSE ( "Adding decay for "<<pid );
+    G4ParticleDefinition *particle = G4ParticleTable::GetParticleTable()->FindParticle( pid );
+    if (particle) {
+      ATH_MSG_VERBOSE ( particle->GetParticleName()<<" is standard for Pythia, lifetime is "<<particle->GetPDGLifeTime() );
+      G4ProcessManager *pmanager = particle->GetProcessManager();
+      if (!pmanager) {
+        ATH_MSG_VERBOSE ( "Copying process manager from 4122 (one we know works) to this particle" );
+        particle->SetProcessManager(new G4ProcessManager(*(G4ParticleTable::GetParticleTable()->FindParticle(4122)->GetProcessManager())));
+        pmanager = particle->GetProcessManager();
+      }
+      G4ProcessVector *pros = pmanager->GetProcessList();
+      for (int pi=0; pi<pros->size(); ++pi) {
+        if ((*pros)[pi]->GetProcessType()==fDecay) {
+          pmanager->RemoveProcess(pi);
+          break;
         }
-      else
-        {
-          ATH_MSG_WARNING ( "particle with pdgid "<<pid<<" has no definition in G4?" );
+      }
+      for (int pi=0; pi<pros->size(); ++pi) {
+        if ((*pros)[pi]->GetProcessType()==fDecay) {
+          ATH_MSG_WARNING ( "There is another decay process for this particle already defined!" );
+          pmanager ->DumpInfo();
         }
+      }
+      pmanager ->AddProcess(theDecayProcess);
+      pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
+      //pmanager ->DumpInfo();
+    } else {
+      ATH_MSG_WARNING ( "Particle with pdgid "<<pid<<" has no definition in G4?" );
     }
+  } // Loop over all particles that we need to define
 
-
-  //Now add Rhadrons...
-
+  // Now add RHadrons... Keep a vector of those we've already dealt with
   std::vector<int> handled;
-
-
-  while((*PARTICLEITERATOR)())
-    {
-      G4ParticleDefinition *particle = PARTICLEITERATOR->value();
-      if(CustomParticleFactory::isCustomParticle(particle))
-        {
-          if(find(handled.begin(),handled.end(),particle->GetPDGEncoding())==handled.end())
-            {
-              handled.push_back(particle->GetPDGEncoding());
-              ATH_MSG_VERBOSE ( particle->GetParticleName() << " is Custom" );
-              G4ProcessManager *pmanager = particle->GetProcessManager();
-              if(particle->GetParticleType()=="rhadron"  ||
-                 particle->GetParticleType()=="mesonino" ||
-                 particle->GetParticleType()=="sbaryon"  ) {
-                pmanager->AddDiscreteProcess(new FullModelHadronicProcess());
-                if (theDecayProcess->IsApplicable(*particle))
-                  {
-                    ATH_MSG_VERBOSE ( "Adding decay..." );
-                    pmanager ->AddProcess(theDecayProcess);
-                    // set ordering for PostStepDoIt and AtRestDoIt
-                    pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
-                    pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
-                  }
-                else
-                  {
-                    ATH_MSG_VERBOSE ( "No decay allowed for " << particle->GetParticleName() );
-                    if (!particle->GetPDGStable() && particle->GetPDGLifeTime()<0.1*CLHEP::ns)
-                      {
-                        ATH_MSG_VERBOSE ( "Gonna decay it anyway!!!" );
-                        pmanager ->AddProcess(theDecayProcess);
-                        // set ordering for PostStepDoIt and AtRestDoIt
-                        pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
-                        pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
-                      }
-                  }
-              }
-              if (particle->GetPDGCharge()/CLHEP::eplus != 0)
-                {
-                  pmanager->AddProcess(new G4hMultipleScattering,-1, 1,1);
-                  pmanager->AddProcess(new G4hIonisation,       -1, 2,2);
-                  ATH_MSG_VERBOSE ( "    Processes for charged particle added." );
-                }
-              else
-                {
-                  ATH_MSG_VERBOSE ( "   It is neutral!!" );
-                }
-              pmanager->DumpInfo();
-            }
-          else
-            {
-              ATH_MSG_VERBOSE ( "Skipping already handled particle: "<<particle->GetParticleName() );
+  // Use the G4 particle iterator
+  while((*PARTICLEITERATOR)()) {
+    G4ParticleDefinition *particle = PARTICLEITERATOR->value();
+    if(CustomParticleFactory::isCustomParticle(particle)) {
+      if(find(handled.begin(),handled.end(),particle->GetPDGEncoding())==handled.end()) {
+        handled.push_back(particle->GetPDGEncoding());
+        ATH_MSG_VERBOSE ( particle->GetParticleName() << " is Custom" );
+        G4ProcessManager *pmanager = particle->GetProcessManager();
+        if(particle->GetParticleType()=="rhadron"  ||
+           particle->GetParticleType()=="mesonino" ||
+           particle->GetParticleType()=="sbaryon"  ) {
+          pmanager->AddDiscreteProcess(new FullModelHadronicProcess());
+          if (theDecayProcess->IsApplicable(*particle)) {
+            ATH_MSG_VERBOSE ( "Adding decay..." );
+            pmanager ->AddProcess(theDecayProcess);
+            // set ordering for PostStepDoIt and AtRestDoIt
+            pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
+            pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
+          } else {
+            ATH_MSG_VERBOSE ( "No decay allowed for " << particle->GetParticleName() );
+            if (!particle->GetPDGStable() && particle->GetPDGLifeTime()<0.1*CLHEP::ns) {
+              ATH_MSG_VERBOSE ( "Gonna decay it anyway!!!" );
+              pmanager ->AddProcess(theDecayProcess);
+              // set ordering for PostStepDoIt and AtRestDoIt
+              pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
+              pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
             }
+          }
         }
-
-    }
+        if (particle->GetPDGCharge()/CLHEP::eplus != 0) {
+          pmanager->AddProcess(new G4hMultipleScattering,-1, 1,1);
+          pmanager->AddProcess(new G4hIonisation,       -1, 2,2);
+          ATH_MSG_VERBOSE ( "Processes for charged particle added." );
+        } else {
+          ATH_MSG_VERBOSE ( "It is neutral!!" );
+        }
+        pmanager->DumpInfo();
+      } else {
+        ATH_MSG_VERBOSE ( "Skipping already handled particle: "<<particle->GetParticleName() );
+      } // If it has not been handled yet
+    } // If this is one of our custom particles (RHadrons)
+  } // End of the particle iterator
 }
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.h b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.h
index 0612bd41f393..d18996849709 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.h
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.h
@@ -36,8 +36,6 @@ public:
 
   virtual RHadronsPhysicsTool* GetPhysicsOption();
 
-protected:
-
 };
 
 
diff --git a/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.cxx b/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.cxx
index a95e18797ef3..d98c74d81ca2 100644
--- a/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.cxx
@@ -23,10 +23,15 @@
 namespace G4UA
 {
 
-  SG_StepNtuple::SG_StepNtuple()
+  SG_StepNtuple::SG_StepNtuple(const std::vector<int>& pdgids)
     : AthMessaging(Gaudi::svcLocator()->service< IMessageSvc >( "MessageSvc" ),
                    "SG_StepNtuple")
-  {}
+  {
+    // Load up the PDG IDs
+    for (int i : pdgids ){
+      m_rhs.insert(i);
+    }
+  }
 
   void SG_StepNtuple::BeginOfRunAction(const G4Run*)
   {
@@ -81,58 +86,6 @@ namespace G4UA
     //set initial values
     m_nevents=0;
 
-    //These are the RHadron pdg_id
-
-    //newest codes for intermediate states
-    rhs.insert(1000991);
-    rhs.insert(1009211);
-    rhs.insert(1009111);
-    rhs.insert(1009311);
-    rhs.insert(1009321);
-    rhs.insert(1093122);
-    rhs.insert(1092212);
-    rhs.insert(1092112);
-    //All other Rhadron codes
-    rhs.insert(1000993);
-    rhs.insert(1009213);
-    rhs.insert(1009313);
-    rhs.insert(1009323);
-    rhs.insert(1009113);
-    rhs.insert(1009223);
-    rhs.insert(1009333);
-    rhs.insert(1091114);
-    rhs.insert(1092114);
-    rhs.insert(1092214);
-    rhs.insert(1092224);
-    rhs.insert(1093114);
-    rhs.insert(1093214);
-    rhs.insert(1093224);
-    rhs.insert(1093314);
-    rhs.insert(1093324);
-    rhs.insert(1093334);
-    //adding to stop rhadron values by pdg_id
-    rhs.insert(1000612);
-    rhs.insert(1000622);
-    rhs.insert(1000632);
-    rhs.insert(1000642);
-    rhs.insert(1000652);
-    rhs.insert(1006113);
-    rhs.insert(1006211);
-    rhs.insert(1006213);
-    rhs.insert(1006223);
-    rhs.insert(1006311);
-    rhs.insert(1006313);
-    rhs.insert(1006321);
-    rhs.insert(1006323);
-    rhs.insert(1006333);
-    //adding to sbottom rhadron values by pdg_id
-    rhs.insert(1000512);
-    rhs.insert(1000522);
-    rhs.insert(1005211);
-    //adding the stau by pdg_id
-    rhs.insert(1000015);
-    assert(rhs.size()==43);
-
   }
 
   void SG_StepNtuple::BeginOfEventAction(const G4Event*)
@@ -157,7 +110,7 @@ namespace G4UA
     if(m_nsteps<50000){
       int pdg = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
       bool rhad=false;
-      if (std::find(rhs.begin(),rhs.end(),std::abs(pdg))!=rhs.end()) {
+      if (std::find(m_rhs.begin(),m_rhs.end(),std::abs(pdg))!=m_rhs.end()) {
         rhad=true;
       }
 
diff --git a/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.h b/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.h
index 13771d19edc3..ed689844a28b 100644
--- a/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.h
+++ b/Simulation/G4Extensions/RHadrons/src/SG_StepNtuple.h
@@ -23,7 +23,7 @@ namespace G4UA
 
   public:
 
-    SG_StepNtuple();
+    SG_StepNtuple(const std::vector<int>&);
 
     virtual void BeginOfRunAction(const G4Run*) override;
     virtual void BeginOfEventAction(const G4Event*) override;
@@ -42,7 +42,7 @@ namespace G4UA
     NTuple::Array<float>   m_dep, m_mass;
     NTuple::Array<float>   m_ke1, m_ke2;
     NTuple::Array<int>   m_rh, m_rhid, m_step;
-    std::set<int> rhs;//rhadron pdgid's
+    std::set<int> m_rhs;//rhadron pdgid's
     long m_nevents = 0;
     long m_rhadronIndex = 0;
 
diff --git a/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.cxx b/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.cxx
index 642b6df54366..3bf63a424726 100644
--- a/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.cxx
@@ -12,13 +12,15 @@ namespace G4UA
                                        const std::string& name,
                                        const IInterface* parent)
     : UserActionToolBase<SG_StepNtuple>(type, name, parent)
-  {}
+  {
+    declareProperty("RHadronPDGIDList",m_pdgids,"List of R-Hadron PDG IDs");
+  }
 
   std::unique_ptr<SG_StepNtuple>
   SG_StepNtupleTool::makeAndFillAction(G4AtlasUserActions& actionList)
   {
     ATH_MSG_DEBUG("Constructing an SG_StepNtuple action");
-    auto action = CxxUtils::make_unique<SG_StepNtuple>();
+    auto action = CxxUtils::make_unique<SG_StepNtuple>(m_pdgids);
     actionList.runActions.push_back( action.get() );
     actionList.eventActions.push_back( action.get() );
     actionList.steppingActions.push_back( action.get() );
diff --git a/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.h b/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.h
index 627e3c15139f..af11c7d33c8a 100644
--- a/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.h
+++ b/Simulation/G4Extensions/RHadrons/src/SG_StepNtupleTool.h
@@ -5,10 +5,14 @@
 #ifndef RHADRONS_G4UA__SG_STEPNTUPLETOOL_H
 #define RHADRONS_G4UA__SG_STEPNTUPLETOOL_H
 
+// Base class
 #include "G4AtlasTools/UserActionToolBase.h"
 
+// UA to be constructed
 #include "SG_StepNtuple.h"
 
+#include <vector>
+
 namespace G4UA
 {
 
@@ -31,6 +35,9 @@ namespace G4UA
     virtual std::unique_ptr<SG_StepNtuple>
     makeAndFillAction(G4AtlasUserActions&) override final;
 
+  private:
+    std::vector<int> m_pdgids; /// List of PDG IDs for R-Hadrons
+
   }; // class SG_StepNtupleTool
 
 } // namespace G4UA
-- 
GitLab


From 83aabd9ee2a2820dc4ab5a78f37899c79a89d429 Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Tue, 19 Mar 2019 23:55:31 +0100
Subject: [PATCH 124/163] Last updates for compilation

---
 Generators/Pythia8_i/Pythia8_i/Pythia8_i.h                 | 6 +++---
 .../G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx      | 7 ++++---
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/Generators/Pythia8_i/Pythia8_i/Pythia8_i.h b/Generators/Pythia8_i/Pythia8_i/Pythia8_i.h
index 101697c36a2c..82982f907bb2 100644
--- a/Generators/Pythia8_i/Pythia8_i/Pythia8_i.h
+++ b/Generators/Pythia8_i/Pythia8_i/Pythia8_i.h
@@ -79,6 +79,8 @@ public:
   double pythiaVersion()const;
   
   static std::string    pythia_stream;
+
+  static std::string xmlpath();
     
 protected:
 
@@ -89,9 +91,7 @@ protected:
   HepMC::Pythia8ToHepMC m_pythiaToHepMC;
 
 private:
-  
-  static std::string xmlpath();
-  
+
   static std::string findValue(const std::string &command, const std::string &key);
   
   int m_internal_event_number;
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index 5679703ba868..b66fb96a3dea 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -82,7 +82,8 @@ void RHadronsPhysicsTool::ConstructProcess()
   ATH_MSG_DEBUG("RHadronProcessDefinition::ConstructProcess() called");
   G4Decay* theDecayProcess = new G4Decay();
   theDecayProcess->SetExtDecayer( new RHadronPythiaDecayer("RHadronPythiaDecayer") );
-  PARTICLEITERATOR->reset();
+  G4ParticleTable::G4PTblDicIterator* aParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator();
+  aParticleIterator->reset();
 
   //First deal with the standard particles that G4 doesn't know about...
   //G4Etac::Definition();
@@ -221,8 +222,8 @@ void RHadronsPhysicsTool::ConstructProcess()
   // Now add RHadrons... Keep a vector of those we've already dealt with
   std::vector<int> handled;
   // Use the G4 particle iterator
-  while((*PARTICLEITERATOR)()) {
-    G4ParticleDefinition *particle = PARTICLEITERATOR->value();
+  while((*aParticleIterator)()) {
+    G4ParticleDefinition *particle = aParticleIterator->value();
     if(CustomParticleFactory::isCustomParticle(particle)) {
       if(find(handled.begin(),handled.end(),particle->GetPDGEncoding())==handled.end()) {
         handled.push_back(particle->GetPDGEncoding());
-- 
GitLab


From a4f6e59e3b1a7a26344c7b18478038dc04c2b236 Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Wed, 20 Mar 2019 00:13:20 +0100
Subject: [PATCH 125/163] Cleanup of dependencies

---
 Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt     | 7 +++----
 .../G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx      | 5 -----
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt b/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
index ec216d48fad2..55cbfb63d861 100644
--- a/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
+++ b/Simulation/G4Extensions/G4ExternalDecay/CMakeLists.txt
@@ -7,14 +7,13 @@ atlas_subdir( G4ExternalDecay )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PRIVATE
-                          Generators/Pythia_i )
+                          Generators/Pythia8_i )
 
 # External dependencies:
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( HepMC )
 find_package( Lhapdf )
-find_package( Pythia6 )
 find_package( Pythia8 )
 find_package( XercesC )
 find_package( HEPUtils )
@@ -40,9 +39,9 @@ endif()
 atlas_add_library( G4ExternalDecay
                    src/*.cxx
                    PUBLIC_HEADERS G4ExternalDecay
-                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${PYTHIA6_INCLUDE_DIRS} ${LHAPDF_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${PYTHIA8_INCLUDE_DIRS} ${extra_includes}
+                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${LHAPDF_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${PYTHIA8_INCLUDE_DIRS} ${extra_includes}
                    PRIVATE_INCLUDE_DIRS ${HEPMC_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA6_LIBRARIES} ${PYTHIA8_LIBRARIES} ${LHAPDF_LIBRARIES} ${GEANT4_LIBRARIES} Pythia_iLib Pythia8_iLib ${extra_libs}
+                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA8_LIBRARIES} ${LHAPDF_LIBRARIES} ${GEANT4_LIBRARIES} Pythia_iLib Pythia8_iLib ${extra_libs}
                    PRIVATE_LINK_LIBRARIES ${HEPMC_LIBRARIES} )
 
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index b66fb96a3dea..138c82872cdd 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -21,12 +21,7 @@
 #include "G4BaryonConstructor.hh"
 #include "G4ProcessManager.hh"
 
-//#include "Pythia8_i/Pythia8_i.h"
-//#include "Pythia8/UserHooks.h"
-//#include "Pythia8/RHadrons.h"
 // STL headers
-//#include <iostream>
-//#include <fstream>
 #include <string>
 
 
-- 
GitLab


From 2aa57381994d531c5b39d3328c20e5891abda62a Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Wed, 20 Mar 2019 00:22:26 +0100
Subject: [PATCH 126/163] Updating preInclude fragments

---
 .../specialConfig/preInclude.RHadrons.py      | 195 +++++
 .../preInclude.RHadronsPythia8.py             | 195 +++++
 .../specialConfig/preInclude.Rhadrons.py      | 703 ------------------
 3 files changed, 390 insertions(+), 703 deletions(-)
 create mode 100644 Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
 create mode 100644 Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
 delete mode 100644 Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py

diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
new file mode 100644
index 000000000000..6e562dfcabcf
--- /dev/null
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
@@ -0,0 +1,195 @@
+#########################################################################
+#      preInclude.RHadronsPythia8.py
+#         Re-write of preInclude.RHadrons.py , relying on Pythia8 and
+#         new mass spectrum infrastructure and helper functions
+#########################################################################
+
+import os
+
+from AthenaCommon import Logging
+rhlog = Logging.logging.getLogger('RHadronConfig')
+
+def create_rhadron_particles_file(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """Create a list of particles for custom particle creation"""
+    # Just use our helper function
+    from RHadrons.RHadronMasses import update_particle_table
+    update_particle_table(input_param_card, 'particles.txt', mass_spectrum=spectrum)
+
+
+def create_rhadron_pdgtable(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """Add lines to the PDG table"""
+
+    # Download generic PDGTABLE (overwrite existing one if it exists)
+    os.system('get_files -remove -data PDGTABLE.MeV')
+
+    # Update the PDG table using our helper function
+    from RHadrons.RHadronMasses import update_PDG_table
+    update_PDG_table('SLHA_INPUT.DAT','PDGTABLE.MeV',spectrum)
+
+
+def addLineToPhysicsConfiguration(KEY, VALUE):
+    """Add lines to the physics configuration"""
+    os.system('touch PhysicsConfiguration.txt')
+    newphysconfig = "{key} = {value}".format(key=KEY, value=VALUE)
+    os.system('echo "%s" >> PhysicsConfiguration.txt' % newphysconfig)
+
+
+def load_files_for_rhadrons_scenario(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """ Load all the files needed for a given scenario"""
+    # Create custom PDGTABLE.MeV file
+    create_rhadron_pdgtable(input_param_card,spectrum)
+ 
+    # Create particles.txt file
+    create_rhadron_particles_file(input_param_card,spectrum)
+
+    from RHadrons.RHadronMasses import get_interaction_list
+    get_interaction_list(input_param_card, interaction_file='ProcessList.txt', mass_spectrum=spectrum)
+
+    # Remove existing physics configuration file ([MDJ]: FIXME: Is this happening earlier, or is it needed?)
+    if os.path.isfile('PhysicsConfiguration.txt'):
+        rhlog.warning("load_files_for_rhadrons_scenario() Found pre-existing PhysicsConfiguration.txt file - deleting.")
+        os.remove('PhysicsConfiguration.txt')
+
+  
+# Whether we're in sim or digi
+doG4SimConfig = True
+
+# Keep the run number, aka DSID
+runNumber = -1
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+import PyUtils.AthFile as af
+try:
+    f = af.fopen(athenaCommonFlags.FilesInput()[0])
+    if 'generators' in f.infos['tag_info']:
+        usePythia8 = 'Py8' in f.infos['tag_info']['generators'] or 'Pythia8' in f.infos['tag_info']['generators']
+        if not usePythia8: raise RuntimeError('Pythia8 not found in generator metadata - will abort')
+    # MC Channel Number.  Try the standard two spots, and fall back to the run number for evgen
+    if 'mc_channel_number' in f.infos and len(f.infos['mc_channel_number'])>0:
+        runNumber = f.infos['mc_channel_number'][0]
+    elif 'mc_channel_number' in f.infos['tag_info']:
+        runNumber = f.infos['tag_info']['mc_channel_number']
+    else:
+        runNumber = f.infos['run_number'][0]
+    # This is also used for digitization, so protect in case we're there
+    if "StreamHITS" in f.infos["stream_names"]:
+        from Digitization.DigitizationFlags import digitizationFlags
+        simdict = digitizationFlags.specialConfiguration.get_Value()
+        doG4SimConfig = False
+    else:
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
+except:
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
+
+# Add the appropriate physics tool
+from G4AtlasApps.SimFlags import simFlags
+simFlags.PhysicsOptions += ["RHadronsPythia8PhysicsTool"]
+
+
+# From the run number, load up the configuration.  Not the most beautiful thing, but this works.
+from glob import glob
+# Default position: look in cvmfs for job options
+cvmfs_mc15 = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest/'
+JO = glob(cvmfs_mc15+'/share/DSID'+str(runNumber/1000)+'xxx/MC15.'+str(runNumber)+'*.py')
+if len(JO)>0:
+    JO = JO[0]
+else:
+    # Miss.  Try local
+    JO = glob('MC15.'+str(runNumber)+'*.py')
+    if len(JO)>0: JO=JO[0]
+    else:
+        # Miss.  Try one directory deeper
+        JO = glob('*/MC15.'+str(runNumber)+'*.py')
+        if len(JO)>0: JO=JO[0]
+        else:
+            # Miss.  Fall back to datapath
+            for adir in os.environ['DATAPATH'].split(":"):
+                JO = glob(adir+'/MC15.'+str(runNumber)+'*.py')
+                if len(JO)>0:
+                    JO=JO[0]
+                    break
+if not JO:
+    raise RuntimeError('Could not locate job options for DSID '+str(runNumber))
+# add any necessary elements to the runArgs here!
+runArgs.jobConfig = [JO.split('/')[-1] if '/' in JO else JO]
+runArgs.runNumber = runNumber
+# Set up evgenLog logger - use this one
+evgenLog=rhlog
+# Set up evgenConfig just for a holder
+class dummyClass():
+    def __init(self):
+        pass
+    keywords = [] # So that they can be +='d in
+evgenConfig = dummyClass()
+evgenConfig.generators = []
+evgenConfig.auxfiles = []
+# Set up a fake pythia8...
+genSeq = dummyClass()
+genSeq.Pythia8 = dummyClass()
+# Standard list of commands stolen from the Pythia8 base fragment
+genSeq.Pythia8.Commands = [
+    "6:m0 = 172.5",
+    "23:m0 = 91.1876",
+    "23:mWidth = 2.4952",
+    "24:m0 = 80.399",
+    "24:mWidth = 2.085",
+    "StandardModel:sin2thetaW = 0.23113",
+    "StandardModel:sin2thetaWbar = 0.23146",
+    "ParticleDecays:limitTau0 = on",
+    "ParticleDecays:tau0Max = 10.0"]
+# Set up a fake TestHepMC
+testSeq = dummyClass()
+testSeq.TestHepMC = dummyClass()
+# Block includes that we don't want running
+include.block('MC15JobOptions/MadGraphControl_SimplifiedModelPostInclude.py')
+include.block('MC15JobOptions/Pythia8_Base_Fragment.py')
+include.block('MC15JobOptions/Pythia8_EvtGen.py')
+include.block('MC15JobOptions/Pythia8_LHEF.py')
+
+# Make sure all the files can be found
+from EvgenJobTransforms.jo_proxy import mk_jo_proxy
+mk_jo_proxy(cvmfs_mc15, "MC15JobOptions", "_joproxy15")
+
+# Updating JOBOPTSEARCHPATH env var on the athena side
+import re,os
+from AthenaCommon import Include
+Include.optionsPathEnv = os.environ[ 'JOBOPTSEARCHPATH' ]
+Include.optionsPath = re.split( ',|' + os.pathsep, Include.optionsPathEnv )
+
+# Include the job options themselves
+include(JO)
+
+# Build the param card, aka SLHA file
+from MadGraphControl.MadGraphUtils import build_param_card
+build_param_card(param_card_old='param_card.SM.%s.%s.dat'%(gentype,decaytype),param_card_new='SLHA_INPUT.DAT',masses=masses,decays=decays)
+
+# Get the spectrum number if it's in the metadata
+spectrum = 1 if 'SPECTRUM' not in simdict else simdict['SPECTRUM']
+
+# Last step, load up the files
+load_files_for_rhadrons_scenario('SLHA_INPUT.DAT',spectrum)
+
+
+# Add any lines that were missing
+# In case we want to use Pythia8 for decays during simulation
+lifetime = float(simdict['LIFETIME']) if simdict.has_key("LIFETIME") else -1.
+if lifetime<1. and hasattr(runArgs,'outputEVNT_TRFile'):
+    rhlog.warning('Lifetime specified at <1ns, but you are writing stopped particle positions.')
+    rhlog.warning('Assuming that you mean to use infinite lifetimes, and ignoring the setting')
+else:
+    addLineToPhysicsConfiguration("DoDecays","1")
+    addLineToPhysicsConfiguration("HadronLifeTime", str(lifetime))
+# If we reading particle records, and the lifetime is short, stop them as well
+if lifetime<1. and hasattr(runArgs,'inputEVNT_TRFile'):
+    addLineToPhysicsConfiguration("DoDecays","1")
+    addLineToPhysicsConfiguration("HadronLifeTime", 0.000001)
+
+# Capture Pythia8 commands
+# Set up R-hadron masses in Pythia8
+from RHadrons.RHadronMasses import get_Pythia8_commands
+genSeq.Pythia8.Commands += get_Pythia8_commands('SLHA_INPUT.DAT',spectrum)
+f = open('PYTHIA8_COMMANDS.TXT','w')
+f.write('\n'.join(genSeq.Pythia8.Commands))
+f.close()
+# Done with the Pythia8 setup
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
new file mode 100644
index 000000000000..6e562dfcabcf
--- /dev/null
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
@@ -0,0 +1,195 @@
+#########################################################################
+#      preInclude.RHadronsPythia8.py
+#         Re-write of preInclude.RHadrons.py , relying on Pythia8 and
+#         new mass spectrum infrastructure and helper functions
+#########################################################################
+
+import os
+
+from AthenaCommon import Logging
+rhlog = Logging.logging.getLogger('RHadronConfig')
+
+def create_rhadron_particles_file(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """Create a list of particles for custom particle creation"""
+    # Just use our helper function
+    from RHadrons.RHadronMasses import update_particle_table
+    update_particle_table(input_param_card, 'particles.txt', mass_spectrum=spectrum)
+
+
+def create_rhadron_pdgtable(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """Add lines to the PDG table"""
+
+    # Download generic PDGTABLE (overwrite existing one if it exists)
+    os.system('get_files -remove -data PDGTABLE.MeV')
+
+    # Update the PDG table using our helper function
+    from RHadrons.RHadronMasses import update_PDG_table
+    update_PDG_table('SLHA_INPUT.DAT','PDGTABLE.MeV',spectrum)
+
+
+def addLineToPhysicsConfiguration(KEY, VALUE):
+    """Add lines to the physics configuration"""
+    os.system('touch PhysicsConfiguration.txt')
+    newphysconfig = "{key} = {value}".format(key=KEY, value=VALUE)
+    os.system('echo "%s" >> PhysicsConfiguration.txt' % newphysconfig)
+
+
+def load_files_for_rhadrons_scenario(input_param_card='SLHA_INPUT.DAT',spectrum=1):
+    """ Load all the files needed for a given scenario"""
+    # Create custom PDGTABLE.MeV file
+    create_rhadron_pdgtable(input_param_card,spectrum)
+ 
+    # Create particles.txt file
+    create_rhadron_particles_file(input_param_card,spectrum)
+
+    from RHadrons.RHadronMasses import get_interaction_list
+    get_interaction_list(input_param_card, interaction_file='ProcessList.txt', mass_spectrum=spectrum)
+
+    # Remove existing physics configuration file ([MDJ]: FIXME: Is this happening earlier, or is it needed?)
+    if os.path.isfile('PhysicsConfiguration.txt'):
+        rhlog.warning("load_files_for_rhadrons_scenario() Found pre-existing PhysicsConfiguration.txt file - deleting.")
+        os.remove('PhysicsConfiguration.txt')
+
+  
+# Whether we're in sim or digi
+doG4SimConfig = True
+
+# Keep the run number, aka DSID
+runNumber = -1
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+import PyUtils.AthFile as af
+try:
+    f = af.fopen(athenaCommonFlags.FilesInput()[0])
+    if 'generators' in f.infos['tag_info']:
+        usePythia8 = 'Py8' in f.infos['tag_info']['generators'] or 'Pythia8' in f.infos['tag_info']['generators']
+        if not usePythia8: raise RuntimeError('Pythia8 not found in generator metadata - will abort')
+    # MC Channel Number.  Try the standard two spots, and fall back to the run number for evgen
+    if 'mc_channel_number' in f.infos and len(f.infos['mc_channel_number'])>0:
+        runNumber = f.infos['mc_channel_number'][0]
+    elif 'mc_channel_number' in f.infos['tag_info']:
+        runNumber = f.infos['tag_info']['mc_channel_number']
+    else:
+        runNumber = f.infos['run_number'][0]
+    # This is also used for digitization, so protect in case we're there
+    if "StreamHITS" in f.infos["stream_names"]:
+        from Digitization.DigitizationFlags import digitizationFlags
+        simdict = digitizationFlags.specialConfiguration.get_Value()
+        doG4SimConfig = False
+    else:
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
+except:
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
+
+# Add the appropriate physics tool
+from G4AtlasApps.SimFlags import simFlags
+simFlags.PhysicsOptions += ["RHadronsPythia8PhysicsTool"]
+
+
+# From the run number, load up the configuration.  Not the most beautiful thing, but this works.
+from glob import glob
+# Default position: look in cvmfs for job options
+cvmfs_mc15 = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest/'
+JO = glob(cvmfs_mc15+'/share/DSID'+str(runNumber/1000)+'xxx/MC15.'+str(runNumber)+'*.py')
+if len(JO)>0:
+    JO = JO[0]
+else:
+    # Miss.  Try local
+    JO = glob('MC15.'+str(runNumber)+'*.py')
+    if len(JO)>0: JO=JO[0]
+    else:
+        # Miss.  Try one directory deeper
+        JO = glob('*/MC15.'+str(runNumber)+'*.py')
+        if len(JO)>0: JO=JO[0]
+        else:
+            # Miss.  Fall back to datapath
+            for adir in os.environ['DATAPATH'].split(":"):
+                JO = glob(adir+'/MC15.'+str(runNumber)+'*.py')
+                if len(JO)>0:
+                    JO=JO[0]
+                    break
+if not JO:
+    raise RuntimeError('Could not locate job options for DSID '+str(runNumber))
+# add any necessary elements to the runArgs here!
+runArgs.jobConfig = [JO.split('/')[-1] if '/' in JO else JO]
+runArgs.runNumber = runNumber
+# Set up evgenLog logger - use this one
+evgenLog=rhlog
+# Set up evgenConfig just for a holder
+class dummyClass():
+    def __init(self):
+        pass
+    keywords = [] # So that they can be +='d in
+evgenConfig = dummyClass()
+evgenConfig.generators = []
+evgenConfig.auxfiles = []
+# Set up a fake pythia8...
+genSeq = dummyClass()
+genSeq.Pythia8 = dummyClass()
+# Standard list of commands stolen from the Pythia8 base fragment
+genSeq.Pythia8.Commands = [
+    "6:m0 = 172.5",
+    "23:m0 = 91.1876",
+    "23:mWidth = 2.4952",
+    "24:m0 = 80.399",
+    "24:mWidth = 2.085",
+    "StandardModel:sin2thetaW = 0.23113",
+    "StandardModel:sin2thetaWbar = 0.23146",
+    "ParticleDecays:limitTau0 = on",
+    "ParticleDecays:tau0Max = 10.0"]
+# Set up a fake TestHepMC
+testSeq = dummyClass()
+testSeq.TestHepMC = dummyClass()
+# Block includes that we don't want running
+include.block('MC15JobOptions/MadGraphControl_SimplifiedModelPostInclude.py')
+include.block('MC15JobOptions/Pythia8_Base_Fragment.py')
+include.block('MC15JobOptions/Pythia8_EvtGen.py')
+include.block('MC15JobOptions/Pythia8_LHEF.py')
+
+# Make sure all the files can be found
+from EvgenJobTransforms.jo_proxy import mk_jo_proxy
+mk_jo_proxy(cvmfs_mc15, "MC15JobOptions", "_joproxy15")
+
+# Updating JOBOPTSEARCHPATH env var on the athena side
+import re,os
+from AthenaCommon import Include
+Include.optionsPathEnv = os.environ[ 'JOBOPTSEARCHPATH' ]
+Include.optionsPath = re.split( ',|' + os.pathsep, Include.optionsPathEnv )
+
+# Include the job options themselves
+include(JO)
+
+# Build the param card, aka SLHA file
+from MadGraphControl.MadGraphUtils import build_param_card
+build_param_card(param_card_old='param_card.SM.%s.%s.dat'%(gentype,decaytype),param_card_new='SLHA_INPUT.DAT',masses=masses,decays=decays)
+
+# Get the spectrum number if it's in the metadata
+spectrum = 1 if 'SPECTRUM' not in simdict else simdict['SPECTRUM']
+
+# Last step, load up the files
+load_files_for_rhadrons_scenario('SLHA_INPUT.DAT',spectrum)
+
+
+# Add any lines that were missing
+# In case we want to use Pythia8 for decays during simulation
+lifetime = float(simdict['LIFETIME']) if simdict.has_key("LIFETIME") else -1.
+if lifetime<1. and hasattr(runArgs,'outputEVNT_TRFile'):
+    rhlog.warning('Lifetime specified at <1ns, but you are writing stopped particle positions.')
+    rhlog.warning('Assuming that you mean to use infinite lifetimes, and ignoring the setting')
+else:
+    addLineToPhysicsConfiguration("DoDecays","1")
+    addLineToPhysicsConfiguration("HadronLifeTime", str(lifetime))
+# If we reading particle records, and the lifetime is short, stop them as well
+if lifetime<1. and hasattr(runArgs,'inputEVNT_TRFile'):
+    addLineToPhysicsConfiguration("DoDecays","1")
+    addLineToPhysicsConfiguration("HadronLifeTime", 0.000001)
+
+# Capture Pythia8 commands
+# Set up R-hadron masses in Pythia8
+from RHadrons.RHadronMasses import get_Pythia8_commands
+genSeq.Pythia8.Commands += get_Pythia8_commands('SLHA_INPUT.DAT',spectrum)
+f = open('PYTHIA8_COMMANDS.TXT','w')
+f.write('\n'.join(genSeq.Pythia8.Commands))
+f.close()
+# Done with the Pythia8 setup
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py
deleted file mode 100644
index 8e2d9e3cdd87..000000000000
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py
+++ /dev/null
@@ -1,703 +0,0 @@
-#########################################################################
-#      preInclude.Rhadrons.py - Chiara Debenedetti, 3 Jun 2011 #
-#                              - Andy Haas, 4 Apr 2012
-#########################################################################
-
-import os
-import shutil
-import sys
-
-def create_rhadron_particles_file(CASE, MASS, MODEL, MASSX):
-  """particles.txt Templates"""
-
-  print 'INFO: MASSX is ',MASSX,' GeV'
-  MASS = (float(MASS)-100)  # The table masses are by default 100 GeV, so that part is subtracted
-
-  particles = {
-    "gluino" : {
-      "generic" : [
-        '       1000021   %3.3f   # ~g'            % ( MASS + 100.000 ),
-        '       1000993   %3.3f   # ~g_glueball'   % ( MASS + 100.700 ),
-        '       1009213   %3.3f   # ~g_rho+'       % ( MASS + 100.650 ),
-        '       1009313   %3.3f   # ~g_K*0'        % ( MASS + 100.825 ),
-        '       1009323   %3.3f   # ~g_K*+'        % ( MASS + 100.825 ),
-        '       1009113   %3.3f   # ~g_rho0'       % ( MASS + 100.650 ),
-        '       1009223   %3.3f   # ~g_omega'      % ( MASS + 100.650 ),
-        '       1009333   %3.3f   # ~g_phi'        % ( MASS + 101.800 ),
-        '       1091114   %3.3f   # ~g_Delta-'     % ( MASS + 100.975 ),
-        '       1092114   %3.3f   # ~g_Delta0'     % ( MASS + 100.975 ),
-        '       1092214   %3.3f   # ~g_Delta+'     % ( MASS + 100.975 ),
-        '       1092224   %3.3f   # ~g_Delta++'    % ( MASS + 100.975 ),
-        '       1093114   %3.3f   # ~g_Sigma*-'    % ( MASS + 101.150 ),
-        '       1093214   %3.3f   # ~g_Sigma*0'    % ( MASS + 101.150 ),
-        '       1093224   %3.3f   # ~g_Sigma*+'    % ( MASS + 101.150 ),
-        '       1093314   %3.3f   # ~g_Xi*-'       % ( MASS + 101.300 ),
-        '       1093324   %3.3f   # ~g_Xi*0'       % ( MASS + 101.300 ),
-        '       1093334   %3.3f   # ~g_Omega-'     % ( MASS + 101.600 ),
-        '      -1009213   %3.3f   # ~g_rho-'       % ( MASS + 100.650 ),
-        '      -1009313   %3.3f   # ~g_K*bar0'     % ( MASS + 100.825 ),
-        '      -1009323   %3.3f   # ~g_K*-'        % ( MASS + 100.825 ),
-        '      -1091114   %3.3f   # ~g_Deltabar+'  % ( MASS + 100.975 ),
-        '      -1092114   %3.3f   # ~g_Deltabar0'  % ( MASS + 100.975 ),
-        '      -1092214   %3.3f   # ~g_Deltabar-'  % ( MASS + 100.975 ),
-        '      -1092224   %3.3f   # ~g_Deltabar--' % ( MASS + 100.975 ),
-        '      -1093114   %3.3f   # ~g_Sigma*bar+' % ( MASS + 101.150 ),
-        '      -1093214   %3.3f   # ~g_Sigma*bar0' % ( MASS + 101.150 ),
-        '      -1093224   %3.3f   # ~g_Sigma*bar-' % ( MASS + 101.150 ),
-        '      -1093314   %3.3f   # ~g_Xi*bar+'    % ( MASS + 101.300 ),
-        '      -1093324   %3.3f   # ~g_Xi*bar0'    % ( MASS + 101.300 ),
-        '      -1093334   %3.3f   # ~g_Omegabar+'  % ( MASS + 101.600 ),
-        '       1000039   %3.3f   # ~Gravitino'    % ( MASSX ),
-        '       1000022   %3.3f   # ~chi_10'       % ( MASSX )
-      ],
-      "regge" : [
-        '       1000021   %3.3f   # ~g'          % (MASS + 100.0   ),
-        '       1000993   %3.3f   # ~g_glueball' % (MASS + 100.700 ),
-        '       1009213   %3.3f   # ~g_rho+'     % (MASS + 100.700 ),
-        '       1009113   %3.3f   # ~g_rho0'     % (MASS + 100.700 ),
-        '       1009313   %3.3f   # ~g_K0'       % (MASS + 100.700 ),
-        '       1009323   %3.3f   # ~g_K+'       % (MASS + 100.700 ),
-        '       1093122   %3.3f   # ~g_Lambda0'  % (MASS + 100.700 ),
-        '      -1009213   %3.3f   # ~g_rho-'     % (MASS + 100.700 ),
-        '      -1009313   %3.3f   # ~g_K0bar'    % (MASS + 100.700 ),
-        '      -1009323   %3.3f   # ~g_K-'       % (MASS + 100.700 ),
-        '      -1093212   %3.3f   # ~g_Sigma0'   % (MASS + 100.700 ), # guess
-        '       1093212   %3.3f   # ~g_aSigma0'  % (MASS + 100.700 ), # guess
-        '       1000039   %3.3f   # ~Gravitino'  % ( MASSX ),
-        '       1000022   %3.3f   # ~chi_10'     % ( MASSX )
-      ],
-      "intermediate" : [
-        '       1000021   %3.3f   # ~g'          % ( MASS + 100.0),
-        '       1000991   %3.3f   # ~g_glueball' % ( MASS + 100.330),
-        '       1009211   %3.3f   # ~g_pi+'      % ( MASS + 100.330),
-        '      -1009211   %3.3f   # ~g_pi-'      % ( MASS + 100.330),
-        '       1009111   %3.3f   # ~g_pi0'      % ( MASS + 100.330),
-        '       1009311   %3.3f   # ~g_K0'       % ( MASS + 100.460),
-        '      -1009311   %3.3f   # ~g_K0bar'    % ( MASS + 100.460),
-        '       1009321   %3.3f   # ~g_K+'       % ( MASS + 100.460),
-        '      -1009321   %3.3f   # ~g_K-'       % ( MASS + 100.460),
-        '       1093122   %3.3f   # ~g_Lambda0'  % ( MASS + 100.280),
-        '       1092212   %3.3f   # ~g_proton'   % ( MASS + 100.660),
-        '      -1092212   %3.3f   # ~g_aproton'  % ( MASS + 100.660),
-        '       1092112   %3.3f   # ~g_neutron'  % ( MASS + 100.660),
-        '      -1092112   %3.3f   # ~g_aneutron' % ( MASS + 100.660),
-        '       1092214   %3.3f   # ~g_Delta+'   % ( MASS + 100.530),
-        '      -1092214   %3.3f   # ~g_Delta-'   % ( MASS + 100.530),
-        '       1092114   %3.3f   # ~g_Delta0'   % ( MASS + 100.530),
-        '      -1092114   %3.3f   # ~g_aDelta0'  % ( MASS + 100.530),
-        '       1000039   %3.3f   # ~Gravitino'  % ( MASSX ),
-        '       1000022   %3.3f   # ~chi_10'     % ( MASSX )
-      ]
-    }, # end of gluino cases
-    "stop" : {
-      "generic" :[
-        '     1000006  %3.3f   # ~t_1'       % ( MASS + 100.000 ),
-        '     1000612  %3.3f   # ~T+  '      % ( MASS + 100.325 ),
-        '     1000622  %3.3f   # ~T0  '      % ( MASS + 100.325 ),
-        '     1000632  %3.3f   # ~T_s+'      % ( MASS + 100.500 ),
-        '     1000642  %3.3f   # ~T_c0'      % ( MASS + 101.500 ),
-        '     1000652  %3.3f   # ~T_b+'      % ( MASS + 104.800 ),
-        '     1006113  %3.3f   # ~T_dd10'    % ( MASS + 100.650 ),
-        '     1006211  %3.3f   # ~T_ud0+'    % ( MASS + 100.650 ),
-        '     1006213  %3.3f   # ~T_ud1+'    % ( MASS + 100.650 ),
-        '     1006223  %3.3f   # ~T_uu1++ '  % ( MASS + 100.650 ),
-        '     1006311  %3.3f   # ~T_sd00  '  % ( MASS + 100.825 ),
-        '     1006313  %3.3f   # ~T_sd10  '  % ( MASS + 100.825 ),
-        '     1006321  %3.3f   # ~T_su0+  '  % ( MASS + 100.825 ),
-        '     1006323  %3.3f   # ~T_su1+  '  % ( MASS + 100.825 ),
-        '     1006333  %3.3f   # ~T_ss10  '  % ( MASS + 101.000 ),
-        '    -1000006  %3.3f   # ~t_1bar'    % ( MASS + 100.000 ),
-        '    -1000612  %3.3f   # ~Tbar-  '   % ( MASS + 100.325 ),
-        '    -1000622  %3.3f   # ~Tbar0  '   % ( MASS + 100.325 ),
-        '    -1000632  %3.3f   # ~Tbar_s-'   % ( MASS + 100.500 ),
-        '    -1000642  %3.3f   # ~Tbar_c0'   % ( MASS + 101.500 ),
-        '    -1000652  %3.3f   # ~Tbar_b-'   % ( MASS + 104.800 ),
-        '    -1006113  %3.3f   # ~Tbar_dd10' % ( MASS + 100.650 ),
-        '    -1006211  %3.3f   # ~Tbar_ud0-' % ( MASS + 100.650 ),
-        '    -1006213  %3.3f   # ~Tbar_ud1-' % ( MASS + 100.650 ),
-        '    -1006223  %3.3f   # ~Tbar_uu1--'% ( MASS + 100.650 ),
-        '    -1006311  %3.3f   # ~Tbar_sd00 '% ( MASS + 100.825 ),
-        '    -1006313  %3.3f   # ~Tbar_sd10 '% ( MASS + 100.825 ),
-        '    -1006321  %3.3f   # ~Tbar_su0- '% ( MASS + 100.825 ),
-        '    -1006323  %3.3f   # ~Tbar_su1- '% ( MASS + 100.825 ),
-        '    -1006333  %3.3f   # ~Tbar_ss10 '% ( MASS + 101.000 ),
-        '     1000039  %3.3f   # ~Gravitino' % ( MASSX ),
-        '     1000022  %3.3f   # ~chi_10'    % ( MASSX )
-      ],
-      "regge" : [
-        '     1000006  %3.3f   # ~t_1'       % ( MASS +  100.000 ),
-        '     1000612  %3.3f   # ~T+  '      % ( MASS +  100.325 ),
-        '     1000622  %3.3f   # ~T0  '      % ( MASS +  100.325 ),
-        '     1006211  %3.3f   # ~T_ud0+'    % ( MASS +  100.650 ),
-        '    -1000006  %3.3f   # ~t_1bar'    % ( MASS +  100.000 ),
-        '    -1000612  %3.3f   # ~Tbar-  '   % ( MASS +  100.325 ),
-        '    -1000622  %3.3f   # ~Tbar0  '   % ( MASS +  100.325 ),
-        '    -1006211  %3.3f   # ~Tbar_ud0-' % ( MASS +  100.650 ),
-        '     1000039  %3.3f   # ~Gravitino' % ( MASSX ),
-        '     1000022  %3.3f   # ~chi_10'    % ( MASSX )
-      ],
-      "intermediate" : []
-    }, # end of stop cases
-    "sbottom" : {
-      "generic" : [],
-      "regge" : [
-        '     1000005  %3.3f   # ~b'         % ( MASS + 100.000 ),
-        '     1000512  %3.3f   # ~B0  '      % ( MASS + 100.325 ),
-        '     1000522  %3.3f   # ~B-  '      % ( MASS + 100.325 ),
-        '     1005211  %3.3f   # ~B_ud0'     % ( MASS + 100.650 ),
-        '    -1000005  %3.3f   # ~bbar'      % ( MASS + 100.000 ),
-        '    -1000512  %3.3f   # ~Bbar0  '   % ( MASS + 100.325 ),
-        '    -1000522  %3.3f   # ~Bbar+  '   % ( MASS + 100.325 ),
-        '    -1005211  %3.3f   # ~Bbar_ud0'  % ( MASS + 100.650 ),
-        '     1000039  %3.3f   # ~Gravitino' % ( MASSX ),
-        '     1000022  %3.3f   # ~chi_10'    % ( MASSX )
-        ],
-      "intermediate" : []
-    } # end of sbottom cases
-  } # end of pdgtable dict
-
-  # Write a new particle.txt file
-  with open('particles.txt','w') as f:
-    for line in particles[CASE][MODEL]:
-      f.writelines(line + "\n")
-
-def create_rhadron_pdgtable(CASE, MASS, MODEL):
-  """PDGTABLE Templates"""
-
-  MASS = (float(MASS)-100) * 1000.0 # Convert mass to MeV (the table masses are by default 100 GeV, so that part is subtracted)
-
-  pdgtable = {
-    "gluino" : {
-      "generic" : [
-        'M 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( MASS + 100.E+03   ),
-        'W 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( 0.E+00       ),
-        'M 1009213                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho+       +'  % ( MASS + 100.65E+03   ),
-        'W 1009213                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho+       +'  % ( 0.E+00      ),
-        'M 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho0       0'  % ( MASS + 100.65E+03   ),
-        'W 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho0       0'  % ( 0.E+00      ),
-        'M 1091114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta-     -'  % ( MASS + 100.975E+03  ),
-        'W 1091114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta-     -'  % ( 0.E+00      ),
-        'M 1092114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta0     0'  % ( MASS + 100.975E+03 ),
-        'W 1092114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta0     0'  % ( 0.E+00      ),
-        'M 1092214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta+     +'  % ( MASS + 100.975E+03 ),
-        'W 1092214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta+     +'  % ( 0.E+00      ),
-        'M 1092224                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta++    ++' % ( MASS + 100.975E+03 ),
-        'W 1092224                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta++    ++' % ( 0.E+00      ),
-        'M 1000993                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( MASS + 100.700E+03 ),
-        'W 1000993                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( 0.E+00        ),
-        'M 1009313                          %11.5E    +0.0E+00 -0.0E+00 ~g_K*0        0'  % ( MASS + 100.825E+03 ),
-        'W 1009313                          %11.5E    +0.0E+00 -0.0E+00 ~g_K*0        0'  % ( 0.E+00        ),
-        'M 1009323                          %11.5E    +0.0E+00 -0.0E+00 ~g_K*+        +'  % ( MASS + 100.825E+03 ),
-        'W 1009323                          %11.5E    +0.0E+00 -0.0E+00 ~g_K*+        +'  % ( 0.E+00        ),
-        'M 1009223                          %11.5E    +0.0E+00 -0.0E+00 ~g_omega      0'  % ( MASS + 100.650E+03 ),
-        'W 1009223                          %11.5E    +0.0E+00 -0.0E+00 ~g_omega      0'  % ( 0.E+00        ),
-        'M 1009333                          %11.5E    +0.0E+00 -0.0E+00 ~g_phi        0'  % ( MASS + 101.800E+03  ),
-        'W 1009333                          %11.5E    +0.0E+00 -0.0E+00 ~g_phi        0'  % ( 0.E+00        ),
-        'M 1093114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*-    -'  % ( MASS + 101.150E+03  ),
-        'W 1093114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*-    -'  % ( 0.E+00        ),
-        'M 1093214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*0    0'  % ( MASS + 101.150E+03  ),
-        'W 1093214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*0    0'  % ( 0.E+00        ),
-        'M 1093224                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*+    +'  % ( MASS + 101.150E+03  ),
-        'W 1093224                          %11.5E    +0.0E+00 -0.0E+00 ~g_Sigma*+    +'  % ( 0.E+00        ),
-        'M 1093314                          %11.5E    +0.0E+00 -0.0E+00 ~g_Xi*-       -'  % ( MASS + 101.300E+03  ),
-        'W 1093314                          %11.5E    +0.0E+00 -0.0E+00 ~g_Xi*-       -'  % ( 0.E+00        ),
-        'M 1093324                          %11.5E    +0.0E+00 -0.0E+00 ~g_Xi*0       0'  % ( MASS + 101.300E+03  ),
-        'W 1093324                          %11.5E    +0.0E+00 -0.0E+00 ~g_Xi*0       0'  % ( 0.E+00        ),
-        'M 1093334                          %11.5E    +0.0E+00 -0.0E+00 ~g_Omega-     -'  % ( MASS + 101.600E+03  ),
-        'W 1093334                          %11.5E    +0.0E+00 -0.0E+00 ~g_Omega-     -'  % ( 0.E+00        )
-      ],
-      "regge" : [
-        'M 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( MASS + 100.E+03     ),
-        'W 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( 0.E+00       ),
-        'M 1000993                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( MASS + 100.700E+03  ),
-        'W 1000993                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( 0.E+00       ),
-        'M 1009213                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho+       +'  % ( MASS + 100.700E+03  ),
-        'W 1009213                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho+       +'  % ( 0.E+00      ),
-        'M 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho0       0'  % ( MASS + 100.700E+03  ),
-        'W 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_rho0       0'  % ( 0.E+00      ),
-        'M 1009313                          %11.5E    +0.0E+00 -0.0E+00 ~g_K0         0'  % ( MASS + 100.700E+03  ),
-        'W 1009313                          %11.5E    +0.0E+00 -0.0E+00 ~g_K0         0'  % ( 0.E+00      ),
-        'M 1093122                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( MASS + 100.280E+03  ),
-        'W 1093122                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( 0.E+00       ),
-        'M 1009323                          %11.5E    +0.0E+00 -0.0E+00 ~g_K+         +'  % ( MASS + 100.700E+03  ),
-        'W 1009323                          %11.5E    +0.0E+00 -0.0E+00 ~g_K+         +'  % ( 0.E+00      ),
-        'M 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( MASS + 100.700E+03  ),
-        'W 1009113                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( 0.E+00      )
-      ],
-      "intermediate" : [
-        'M 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( MASS + 100.E+03     ),
-        'W 1000021                          %11.5E    +0.0E+00 -0.0E+00 ~g            0'  % ( 0.E+00       ),
-        'M 1000991                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( MASS + 100.330E+03  ),
-        'W 1000991                          %11.5E    +0.0E+00 -0.0E+00 ~g_glueball   0'  % ( 0.E+00       ),
-        'M 1009211                          %11.5E    +0.0E+00 -0.0E+00 ~g_pi+        +'  % ( MASS + 100.330E+03  ),
-        'W 1009211                          %11.5E    +0.0E+00 -0.0E+00 ~g_pi+        +'  % ( 0.E+00       ),
-        'M 1009111                          %11.5E    +0.0E+00 -0.0E+00 ~g_pi0        0'  % ( MASS + 100.330E+03  ),
-        'W 1009111                          %11.5E    +0.0E+00 -0.0E+00 ~g_pi0        0'  % ( 0.E+00       ),
-        'M 1009311                          %11.5E    +0.0E+00 -0.0E+00 ~g_K0         0'  % ( MASS + 100.460E+03  ),
-        'W 1009311                          %11.5E    +0.0E+00 -0.0E+00 ~g_K0         0'  % ( 0.E+00       ),
-        'M 1009321                          %11.5E    +0.0E+00 -0.0E+00 ~g_K+         +'  % ( MASS + 100.460E+03  ),
-        'W 1009321                          %11.5E    +0.0E+00 -0.0E+00 ~g_K+         +'  % ( 0.E+00       ),
-        'M 1093122                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( MASS + 100.280E+03  ),
-        'W 1093122                          %11.5E    +0.0E+00 -0.0E+00 ~g_Lambda0    0'  % ( 0.E+00       ),
-        'M 1092212                          %11.5E    +0.0E+00 -0.0E+00 ~g_proton     +'  % ( MASS + 100.660E+03  ),
-        'W 1092212                          %11.5E    +0.0E+00 -0.0E+00 ~g_proton     +'  % ( 0.E+00       ),
-        'M 1092112                          %11.5E    +0.0E+00 -0.0E+00 ~g_neutron    0'  % ( MASS + 100.660E+03  ),
-        'W 1092112                          %11.5E    +0.0E+00 -0.0E+00 ~g_neutron    0'  % ( 0.E+00       ),
-        'M 1092214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta+     +'  % ( MASS + 100.530E+03  ),
-        'W 1092214                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta+     +'  % ( 0.E+00       ),
-        'M 1092114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta0     0'  % ( MASS + 100.530E+03  ),
-        'W 1092114                          %11.5E    +0.0E+00 -0.0E+00 ~g_Delta0     0'  % ( 0.E+00       )
-      ]
-    }, # end of gluino cases
-    "stop" : {
-      "generic" : [
-        'M 1000006                          %11.5E    +0.0E+00 -0.0E+00 ~t_1          0'  % ( MASS + 100.000E+03  ),
-        'W 1000006                          %11.5E    +0.0E+00 -0.0E+00 ~t_1          0'  % ( 0.E+00       ),
-        'M 1000612                          %11.5E    +0.0E+00 -0.0E+00 ~T+           +'  % ( MASS + 100.325E+03  ),
-        'W 1000612                          %11.5E    +0.0E+00 -0.0E+00 ~T+           +'  % ( 0.E+00       ),
-        'M 1000622                          %11.5E    +0.0E+00 -0.0E+00 ~T0           0'  % ( MASS + 100.325E+03  ),
-        'W 1000622                          %11.5E    +0.0E+00 -0.0E+00 ~T0           0'  % ( 0.E+00       ),
-        'M 1000632                          %11.5E    +0.0E+00 -0.0E+00 ~T_s+         +'  % ( MASS + 100.500E+03  ),
-        'W 1000632                          %11.5E    +0.0E+00 -0.0E+00 ~T_s+         +'  % ( 0.E+00       ),
-        'M 1000642                          %11.5E    +0.0E+00 -0.0E+00 ~T_c0         0'  % ( MASS + 101.500E+03  ),
-        'W 1000642                          %11.5E    +0.0E+00 -0.0E+00 ~T_c0         0'  % ( 0.E+00       ),
-        'M 1000652                          %11.5E    +0.0E+00 -0.0E+00 ~T_b+         +'  % ( MASS + 104.800E+03  ),
-        'W 1000652                          %11.5E    +0.0E+00 -0.0E+00 ~T_b+         +'  % ( 0.E+00       ),
-        'M 1006113                          %11.5E    +0.0E+00 -0.0E+00 ~T_dd10       0'  % ( MASS + 100.650E+03  ),
-        'W 1006113                          %11.5E    +0.0E+00 -0.0E+00 ~T_dd10       0'  % ( 0.E+00       ),
-        'M 1006211                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud0+       +'  % ( MASS + 100.650E+03  ),
-        'W 1006211                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud0+       +'  % ( 0.E+00       ),
-        'M 1006213                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud1+       +'  % ( MASS + 100.650E+03  ),
-        'W 1006213                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud1+       +'  % ( 0.E+00       ),
-        'M 1006223                          %11.5E    +0.0E+00 -0.0E+00 ~T_uu1++      ++' % ( MASS + 100.650E+03  ),
-        'W 1006223                          %11.5E    +0.0E+00 -0.0E+00 ~T_uu1++      ++' % ( 0.E+00       ),
-        'M 1006311                          %11.5E    +0.0E+00 -0.0E+00 ~T_sd00       0'  % ( MASS + 100.825E+03  ),
-        'W 1006311                          %11.5E    +0.0E+00 -0.0E+00 ~T_sd00       0'  % ( 0.E+00       ),
-        'M 1006313                          %11.5E    +0.0E+00 -0.0E+00 ~T_sd10       0'  % ( MASS + 100.825E+03  ),
-        'W 1006313                          %11.5E    +0.0E+00 -0.0E+00 ~T_sd10       0'  % ( 0.E+00       ),
-        'M 1006321                          %11.5E    +0.0E+00 -0.0E+00 ~T_su0+       +'  % ( MASS + 100.825E+03  ),
-        'W 1006321                          %11.5E    +0.0E+00 -0.0E+00 ~T_su0+       +'  % ( 0.E+00       ),
-        'M 1006323                          %11.5E    +0.0E+00 -0.0E+00 ~T_su1+       +'  % ( MASS + 100.825E+03  ),
-        'W 1006323                          %11.5E    +0.0E+00 -0.0E+00 ~T_su1+       +'  % ( 0.E+00       ),
-        'M 1006333                          %11.5E    +0.0E+00 -0.0E+00 ~T_ss10       0'  % ( MASS + 101.000E+03  ),
-        'W 1006333                          %11.5E    +0.0E+00 -0.0E+00 ~T_ss10       0'  % ( 0.E+00       )
-      ],
-      "regge" : [
-        'M 1000006                          %11.5E    +0.0E+00 -0.0E+00 ~t_1          0' % ( MASS + 100.000E+03  ),
-        'W 1000006                          %11.5E    +0.0E+00 -0.0E+00 ~t_1          0' % ( 0.E+00       ),
-        'M 1000612                          %11.5E    +0.0E+00 -0.0E+00 ~T+           +' % ( MASS + 100.325E+03  ),
-        'W 1000612                          %11.5E    +0.0E+00 -0.0E+00 ~T+           +' % ( 0.E+00       ),
-        'M 1000622                          %11.5E    +0.0E+00 -0.0E+00 ~T0           0' % ( MASS + 100.325E+03  ),
-        'W 1000622                          %11.5E    +0.0E+00 -0.0E+00 ~T0           0' % ( 0.E+00       ),
-        'M 1006211                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud0+       +' % ( MASS + 100.650E+03  ),
-        'W 1006211                          %11.5E    +0.0E+00 -0.0E+00 ~T_ud0+       +' % ( 0.E+00       )
-      ],
-      "intermediate" : []
-    }, # end of stop cases
-    "sbottom" : {
-      "generic" : [],
-      "regge" : [
-        'M 1000005                          %11.5E    +0.0E+00 -0.0E+00 ~b            0' % ( MASS + 100.000E+03 ),
-        'W 1000005                          %11.5E    +0.0E+00 -0.0E+00 ~b            0' % ( 0.E+00      ),
-        'M 1000512                          %11.5E    +0.0E+00 -0.0E+00 ~B0           0' % ( MASS + 100.325E+03 ),
-        'W 1000512                          %11.5E    +0.0E+00 -0.0E+00 ~B0           0' % ( 0.E+00      ),
-        'M 1000522                          %11.5E    +0.0E+00 -0.0E+00 ~B-           -' % ( MASS + 100.325E+03 ),
-        'W 1000522                          %11.5E    +0.0E+00 -0.0E+00 ~B-           -' % ( 0.E+00      ),
-        'M 1005211                          %11.5E    +0.0E+00 -0.0E+00 ~B_ud0        0' % ( MASS + 100.650E+03 ),
-        'W 1005211                          %11.5E    +0.0E+00 -0.0E+00 ~B_ud0        0' % ( 0.E+00      )
-      ],
-      "intermediate" : []
-    } # end of sbottom cases
-  } # end of pdgtable dict
-
-  # Download generic PDGTABLE (overwrite existing one if it exists)
-  os.system('get_files -remove -data PDGTABLE.MeV')
-
-  # Append the R-Hadron particles to the PDGTABLE.MeV file
-  with open('PDGTABLE.MeV','a') as f:
-    f.writelines("* R-Hadron additions: Case=%s, Model=%s, Mass=%d MeV\n" % (CASE, MODEL, (MASS  + 100000)))
-    for line in pdgtable[CASE][MODEL]:
-      f.writelines(line + "\n")
-
-def addLineToPhysicsConfiguration(KEY, VALUE):
-  os.system('touch PhysicsConfiguration.txt')
-  newphysconfig = "{key} = {value}".format(key=KEY, value=VALUE)
-  os.system('echo "%s" >> PhysicsConfiguration.txt' % newphysconfig)
-
-def load_files_for_rhadrons_scenario(CASE, MASS, MODEL, MASSX):
-  print "MASS: "+str(MASS)
-  print "CASE: "+CASE
-  print "MODEL: "+MODEL
-  print "MASSX: "+str(MASSX)
-
-  # Create custom PDGTABLE.MeV file
-  create_rhadron_pdgtable(CASE, MASS, MODEL)
-
-  # Download the process list
-  proclistname = "ProcessList_{model}_{case}.txt".format(case=CASE, model=MODEL)
-  os.system('get_files -remove -data %s' % proclistname)
-  shutil.move(proclistname, 'ProcessList.txt')
-
-  # Create particles.txt file
-  create_rhadron_particles_file(CASE, MASS, MODEL, MASSX)
-
-  # Remove existing physics configuration file ([MDJ]: FIXME: Is this happening earlier, or is it needed?)
-  if os.path.isfile('PhysicsConfiguration.txt'):
-    print "SimulationJobOptions/preInclude.Rhadrons.py:load_files_for_rhadrons_scenario() WARNING Found pre-existing PhysicsConfiguration.txt file - deleting."
-    os.remove('PhysicsConfiguration.txt')
-
-  # Add additional physics configuration options
-  if MODEL == "regge":
-    addLineToPhysicsConfiguration("ReggeModel", "1.")
-
-
-doG4SimConfig = True
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-import PyUtils.AthFile as af
-try:
-  f = af.fopen(athenaCommonFlags.FilesInput()[0])
-
-  if "StreamHITS" in f.infos["stream_names"]:
-    from Digitization.DigitizationFlags import digitizationFlags
-    simdict = digitizationFlags.specialConfiguration.get_Value()
-    doG4SimConfig = False
-  else:
-    from G4AtlasApps.SimFlags import simFlags
-    simdict = simFlags.specialConfiguration.get_Value()
-except:
-  from G4AtlasApps.SimFlags import simFlags
-  simdict = simFlags.specialConfiguration.get_Value()
-
-## Compulsory keys
-assert "MASS" in simdict
-assert "MODEL" in simdict
-assert "CASE" in simdict
-MASSX=100.0
-if simdict.has_key("MASSX"):
-  MASSX = float(simdict["MASSX"])
-print 'INFO: MASSX (neutralino/gravitino mass) set to ',MASSX,' GeV'
-load_files_for_rhadrons_scenario(simdict["CASE"], simdict["MASS"], simdict["MODEL"], MASSX)
-## Optional keys
-if simdict.has_key("XsecMultiplier"):
-  addLineToPhysicsConfiguration("XsecMultiplier", simdict["XsecMultiplier"])
-if simdict.has_key("Mixing"):
-  addLineToPhysicsConfiguration("Mixing", simdict["Mixing"])
-
-if doG4SimConfig:
-  from G4AtlasApps.SimFlags import simFlags
-  simFlags.PhysicsOptions += ["RHadronsPhysicsTool"]
-
-# In case we want to use Pythia for decays in line...
-if simdict.has_key("DECAYS"):
-  addLineToPhysicsConfiguration("DoDecays","1")
-  if simdict.has_key("LIFETIME"):
-    addLineToPhysicsConfiguration("HadronLifeTime", simdict["LIFETIME"])
-  else:
-    addLineToPhysicsConfiguration("HadronLifeTime", "0.000001")
-
-  def rhad_applycalomctruthstrategy():
-    print "ERROR rhad_applycalomctruthstrategy is obsolete"
-    print "Please request replacment configuration."
-    import sys
-    sys.exit(1)
-    ## from G4AtlasApps import AtlasG4Eng
-    ## myDecay = AtlasG4Eng.G4Eng.Dict_MCTruthStrg.get('Decay')
-    ## myDecay.add_Volumes('CALO::CALO', 1)
-    ## AtlasG4Eng.G4Eng.menu_MCTruth.set_TruthStrategiesParameter("DecayPrimaryMinEnergy", -1)
-    ## AtlasG4Eng.G4Eng.menu_MCTruth.set_TruthStrategiesParameter("DecaySecondaryMinEnergy", -1)
-
-
-  simFlags.InitFunctions.add_function("preInitMCTruth", rhad_applycalomctruthstrategy)
-
-  from AthenaCommon.AlgSequence import AlgSequence
-  genSeq = AlgSequence()
-
-  from PythiaRhad_i.PythiaRhad_iConf import PythiaRhad
-  genSeq +=PythiaRhad()
-  genSeq.PythiaRhad.useAtlasPythiaTune09=False
-  genSeq.PythiaRhad.Tune_Name="PYTUNE_103"
-  #genSeq.PythiaRhad.Tune_Name="ATLAS_20110003"
-  genSeq.PythiaRhad.PythiaCommand += [
-    "pyinit pylisti 12",
-    "pyinit pylistf 1",
-    "pystat 1 3 4 5",
-    "pyinit dumpr 1 5",
-    "pydat2 pmas 6 1 172.5",    # TOP mass
-    "pydat2 pmas 24 1 80.399",  # PDG2010 W mass
-    "pydat2 pmas 23 1 91.1876", # PDG2010 Z0 mass
-  ]
-
-  #-------------------------#
-  # R-hadron commands below #
-  #-------------------------#
-
-  # Add some commands valid for both gluino and stop cases
-  genSeq.PythiaRhad.PythiaCommand += [
-    "pysubs ckin 3 18.",        # pT cut at 18 GeV
-    #"pypars mstp 81 1",        # Old shower/multiple-interaction model (new model is not compatible with R-hadron fragmentation)
-    #"pydat1 mstj 11 4",        # Set longitudinal fragmentation function to Pythia default
-    "pymssm imss 1 1",          # General MSSM simulation
-    "pymssm imss 3 1",          # Tell Pythia that rmss 3 below should be interpreted as the gluino pole mass
-    "pymssm imss 5 1",          # Set stop, sbottom and stau masses and mixing by hand (26-28 for mixing not set!)
-    #"pymssm rmss 1 4000.0",    # Photino mass
-    "pymssm rmss 2 8000.0",    # Wino/Zino mass
-    #"pymssm rmss 3 10000.0",    # Gluino  mass
-    "pymssm rmss 4 40000.0",    # Higgsino mass parameter
-    "pymssm rmss 6 1500.0",    # Left slepton mass
-    "pymssm rmss 7 1200.0",    # Right slepton mass
-    "pymssm rmss 8 4800.0",     # Left squark mass
-    "pymssm rmss 9 4200.0",     # Right squark mass
-    "pymssm rmss 10 4800.0",    # stop2 mass
-    #"pymssm rmss 11 8000.0",    # sbottom1 mass
-    #"pymssm rmss 12 8000.0",    # stop1 mass
-    "pymssm rmss 13 1500.0",    # Left stau mass
-    "pymssm rmss 14 1200.0",    # Right stau mass
-    #"pymssm rmss 21 10000.0e9",  # Gravitino mass
-    "pysubs msel 0",            # Turn off all processes
-    "pypars mstp 111 0",        # Turn off master switch for fragmentation and decay
-    #"pyinit pylisti 12",       # dumps the full decay table, etc.
-    "pyinit pylistf 3"         # dumps pythia event
-    #"pystat 2"
-  ]
-
-  pdg={}
-  q3={}
-  apflag={}
-  names={}
-  antinames={}
-  masses={}
-
-  # Gluino setups
-  pdg[("generic", "gluino")] = [1000993, 1009213, 1009313, 1009323, 1009113, 1009223, 1009333, 1091114, 1092114, 1092214, 1092224, 1093114, 1093214, 1093224, 1093314, 1093324, 1093334, 0, 0, 0]
-  q3[("generic", "gluino")] = [0, 3, 0, 3, 0, 0, 0, -3, 0, 3, 6, -3, 0, 3, -3, 0, -3, 0, 0, 0]
-  apflag[("generic", "gluino")] = [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]
-  names[("generic", "gluino")] = ["~g_ball", "~g_rho+", "~g_K*0", "~g_K*+", "~g_rho0", "~g_omega", "~g_phi", "~g_Dlt-", "~g_Dlt0", "~g_Dlt+", "~g_Dlt++", "~g_Sgm*-", "~g_Sgm*0", "~g_Sgm*+", "~g_Xi*-", "~g_Xi*0 ", "~g_Omg-", " ", " ", " "]
-  antinames[("generic", "gluino")] = [" ", "~g_rho-", "~g_K*br0", "~g_K*-", " ", " ", " ", "~g_Dltb+", "~g_Dltb0", "~g_Dltb-", "~g_Dlb--", "~g_Sgmb+", "~g_Sgmb0", "~g_Sgmb-", "~g_Xibr+", "~g_Xib0", "~g_Omgb+", " ", " ", " "]
-  masses[("generic", "gluino")] = [0.700, 0.650, 0.825, 0.825, 0.650, 0.650, 1.800, 0.975, 0.975, 0.975, 0.975, 1.150, 1.150, 1.150, 1.300, 1.300, 1.600, 0.650, 0.825, 0.825, 0.975, 0.975, 0.975, 0.975, 1.150, 1.150, 1.150, 1.300, 1.300, 1.600]
-
-  pdg[("regge", "gluino")] = [1000993, 1009213, 1009113, 1009313, 1009323, 1093122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  q3[("regge", "gluino")] = [0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  apflag[("regge", "gluino")] = [0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  names[("regge", "gluino")] = ["~g_gball", "~g_rho+", "~g_rho0", "~g_K0", "~g_K+", "~g_L0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  antinames[("regge", "gluino")] = [" ", "~g_rho-", " ", "~g_K0bar", "~g_K-", "~g_L0bar", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  masses[("regge", "gluino")] = [0.330, 0.330, 0.330, 0.460, 0.460, 0.280, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
-
-  pdg[("intermediate", "gluino")] = [1000991, 1009211, 1009111, 1009311, 1009321, 1093122, 1092212, 1092112, 1092214, 1092114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  q3[("intermediate", "gluino")] = [0, 3, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  apflag[("intermediate", "gluino")] = [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  names[("intermediate", "gluino")] = ["~g_gball", "~g_pi+", "~g_pi0", "~g_K0", "~g_K+", "~g_L0", "~g_prot", "~g_neutr", "~g_Delt+", "~g_Delt0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  antinames[("intermediate", "gluino")] = [" ", "~g_pi-", " ", "~g_K0bar", "~g_K-", "~g_L0bar", "~g_aprot", "~g_aneut", "~g_Dltb-", "~g_Dltb0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  masses[("intermediate", "gluino")] = [0.330, 0.330, 0.330, 0.460, 0.460, 0.280, 0.660, 0.660, 0.530, 0.530, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
-
-  # Stop setups
-  pdg[("generic", "stop")] = [1000612, 1000622, 1000632, 1000642, 1000652, 1006113, 1006211, 1006213, 1006223, 1006311, 1006313, 1006321, 1006323, 1006333, 0, 0, 0, 0, 0, 0]
-  q3[("generic", "stop")] = [3, 0, 3, 0, 3, 0, 3, 3, 6, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0]
-  apflag[("generic", "stop")] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
-  names[("generic", "stop")] = ["~T+", "~T0", "~T_s+", "~T_c0", "~T_b+", "~T_dd10", "~T_ud0+", "~T_ud1+", "~T_uu1++", "~T_sd00", "~T_sd10", "~T_su0+", "~T_su1+", "~T_ss10", " ", " ", " ", " ", " ", " "]
-  antinames[("generic", "stop")] = ["~Tb-", "~Tb0", "~Tb_s-", "~Tb_c0", "~Tb_b-", "~Tb_dd10", "~Tb_ud0-", "~Tb_ud1-", "~Tb_uu--", "~Tb_sd00", "~Tb_sd10", "~Tb_su0-", "~Tb_su1-", "~Tb_ss10", " ", " ", " ", " ", " ", " "]
-  masses[("generic", "stop")] = [0.330, 0.330, 0.330, 0.460, 0.460, 0.280, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
-
-  pdg[("regge", "stop")] = [1000612, 1000622, 1006211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  q3[("regge", "stop")] = [3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  apflag[("regge", "stop")] = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  names[("regge", "stop")] = ["~T+", "~T0", "~T_ud0+", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  antinames[("regge", "stop")] = ["~Tb-", "~Tb0", "~Tb_ud-", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  masses[("regge", "stop")] = [0.330, 0.330, 0.330, 0.460, 0.460, 0.280, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
-
-  # Sbottom
-  pdg[("regge", "sbottom")] = [1000512, 1000522, 1005211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  q3[("regge", "sbottom")] = [0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  apflag[("regge", "sbottom")] = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-  names[("regge", "sbottom")] = ["~B0", "~B-", "~B_ud0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  antinames[("regge", "sbottom")] = ["~Bb0", "~Bb+", "~Bb_ud0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
-  masses[("regge", "sbottom")] = [0.330, 0.330, 0.330, 0.460, 0.460, 0.280, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
-
-  genSeq.PythiaRhad.RHadronPDGids = pdg[(simdict["MODEL"],simdict["CASE"])]
-  genSeq.PythiaRhad.PygiveCommand = []
-  for i in range(1,20):
-    KC = str(400+i)
-    genSeq.PythiaRhad.PygiveCommand += [
-      "KCHG("+KC+",1)="+str(q3[(simdict["MODEL"],simdict["CASE"])][i-1]),
-      "KCHG("+KC+",2)=0",
-      "KCHG("+KC+",3)="+str(apflag[(simdict["MODEL"],simdict["CASE"])][i-1]),
-      "KCHG("+KC+",4)="+str(pdg[(simdict["MODEL"],simdict["CASE"])][i-1]),
-      "CHAF("+KC+",1)="+names[(simdict["MODEL"],simdict["CASE"])][i-1],
-      "CHAF("+KC+",2)="+antinames[(simdict["MODEL"],simdict["CASE"])][i-1],
-    ]
-    genSeq.PythiaRhad.PygiveCommand += [
-      "PMAS("+KC+",1)="+str(float(simdict["MASS"])+masses[(simdict["MODEL"],simdict["CASE"])][i-1])+"D0",
-      "PMAS("+KC+",2)="+str(float(simdict["MASS"])+masses[(simdict["MODEL"],simdict["CASE"])][i-1])+"D0"
-    ]
-  print "preInclude.Rhadrons PygiveCommand is:"
-  print genSeq.PythiaRhad.PygiveCommand
-
-  if (simdict["MODEL"]=='regge'):
-    genSeq.PythiaRhad.RunReggeModel=True
-    genSeq.PythiaRhad.RunIntermediateModel=False
-  if (simdict["MODEL"]=='intermediate'):
-    genSeq.PythiaRhad.RunReggeModel=False
-    genSeq.PythiaRhad.RunIntermediateModel=True
-
-  if (simdict["CASE"]=='gluino'):
-    genSeq.PythiaRhad.RunGluinoHadrons=True
-    genSeq.PythiaRhad.RunStopHadrons=False
-    genSeq.PythiaRhad.RunSbottomHadrons=False
-    genSeq.PythiaRhad.randomtshift=50 # +-X ns, overrides tshift if non-zero
-    genSeq.PythiaRhad.rh_decay=True
-    genSeq.PythiaRhad.strip_out_rh=True
-    genSeq.PythiaRhad.boost_rh_to_rest_frame=True
-    genSeq.PythiaRhad.rotate_rh=True
-    genSeq.PythiaRhad.translate_rh_to_stopping_position=True
-    genSeq.PythiaRhad.EnableAfterInitialize=False # added for PythiaRhad_i-00-04-02
-    genSeq.PythiaRhad.StoppingInput = [ [ 0,0,0,0,0,0 ] ]
-    try:
-      include("StoppingInput.txt")
-    except:
-      pass
-    genSeq.PythiaRhad.PythiaCommand += [
-      "pymssm imss 1 1",                          # General MSSM simulation
-      "pymssm imss 3 1",                          # Tell Pythia that rmss 3 below should be interpreted as the gluino pole mass
-      "pymssm imss 5 0",                          # allow pythia to calculate squark masses/mixings
-      "pymssm rmss 1 "+str(MASSX),                # # Photino mass
-      #"pymssm rmss 2 10000.0",                    # Wino/Zino mass
-      "pymssm rmss 3 "+str(simdict["MASS"])+".0", # Gluino  mass
-      #"pymssm rmss 4 10000.0",                    # Higgsino mass parameter
-      #"pymssm rmss 7 10000.0",                    # Right slepton mass
-      "pymssm rmss 8 4800.0",                     # Left squark mass
-      "pymssm rmss 9 4200.0",                     # Right squark mass
-      "pymssm rmss 10 4800.0",                    # stop2 mass
-      "pymssm rmss 11 4200.0",                    # sbottom1 mass
-      "pymssm rmss 12 4100.0",                    # stop1 mass
-      "pymssm rmss 21 "+str(MASSX)+"e9",          # Gravitino mass (was MASSX before)
-      "pymssm imss 11 1",                         # make N1 the LSP (1 would make N1 NLSP and gravitino LSP) (default is 0)
-      "pymssm rmss 29 7.0e5",                     # Planck mass, controls BR(g~ -> g+Gravitino), leave high to avoid gravitino production (default is 2.4e18)
-      "pydat3 mdcy 1000022 1 0",                  # kill neutralino decays
-      # "pydat1 mstj 45 6",                       # allow CMshower->ttbar in gluino decays
-      # "pydat1 mstj 43 1",                       # z definition in CM shower
-      "pysubs msel 0",                            # Turn off all processes
-      "pysubs msub 243 1",                        # turn on ffbar -> ~g~g
-      "pysubs msub 244 1",                        # turn on gg -> ~g~g
-      "pypars mstp 111 0",                        # Turn off master switch for fragmentation and decay
-      "pypars mstp 127 1",                        # allow to continue even if there's no processes with non-vanishing xs
-      "pyinit pylisti 12",                        # dumps the full decay table, etc.
-      # "pyinit pylistf 1",                       # dumps pythia event
-      "pyinit dumpr 0 100",                       # write out events 1 to 100
-      "pystat 2"
-    ]
-    if simdict.has_key("NOGLUINOGLUONDECAY"):
-      print "preInclude.Rhadrons: NOGLUINOGLUONDECAY"
-      genSeq.PythiaRhad.PythiaCommand += [
-        "pydat3 mdme 1975 1 0",
-        "pymssm imss 11 0"      # switch off gravitino, just to be sure we don't get gluon decay through it
-      ]
-      if simdict.has_key("NOGLUINOLIGHTSQUARKDECAY"):
-        print "preInclude.Rhadrons: NOGLUINOLIGHTSQUARKDECAY"
-        genSeq.PythiaRhad.PythiaCommand += [
-          "pydat3 mdme 2000 1 0",
-          "pydat3 mdme 2001 1 0",
-          "pydat3 mdme 2002 1 0",
-          "pydat3 mdme 2003 1 0",
-          "pydat3 mdme 2004 1 0"
-        ]
-      if simdict.has_key("NOGLUINOTTBARDECAY"):
-        print "preInclude.Rhadrons: NOGLUINOTTBARDECAY"
-        genSeq.PythiaRhad.PythiaCommand += [
-          "pydat3 mdme 2005 1 0"
-        ]
-      if ('GBALLPROB' in globals()):
-        genSeq.PythiaRhad.GluinoBallProbability=GBALLPROB
-  elif (simdict["CASE"]=='stop'):
-    genSeq.PythiaRhad.RunGluinoHadrons=False
-    genSeq.PythiaRhad.RunStopHadrons=True
-    genSeq.PythiaRhad.RunSbottomHadrons=False
-    genSeq.PythiaRhad.randomtshift=50 # +-X ns, overrides tshift if non-zero
-    genSeq.PythiaRhad.rh_decay=True
-    genSeq.PythiaRhad.strip_out_rh=True
-    genSeq.PythiaRhad.boost_rh_to_rest_frame=True
-    genSeq.PythiaRhad.rotate_rh=True
-    genSeq.PythiaRhad.translate_rh_to_stopping_position=True
-    genSeq.PythiaRhad.EnableAfterInitialize=False # added for PythiaRhad_i-00-04-02
-    genSeq.PythiaRhad.StoppingInput = [ [ 0,0,0,0,0,0 ] ]
-    try:
-      include("StoppingInput.txt")
-    except:
-      pass
-    genSeq.PythiaRhad.PythiaCommand += [
-      "pymssm imss 1 1",                           # General MSSM simulation
-      "pymssm imss 3 1",                           # Tell Pythia that rmss 3 below should be interpreted as the gluino pole mass
-      "pymssm imss 5 1",                           # Set stop, sbottom and stau masses and mixing by hand (26-28 for mixing not set!)
-      "pymssm rmss 1 "+str(MASSX),                 # Photino mass
-      #"pymssm rmss 2 10000.0",                     # Wino/Zino mass
-      "pymssm rmss 3 25000.0",                     # Gluino  mass
-      #"pymssm rmss 4 10000.0",                     # Higgsino mass parameter
-      #"pymssm rmss 7 10000.0",                     # Right slepton mass
-      "pymssm rmss 8 4800.0",                      # Left squark mass
-      "pymssm rmss 9 4200.0",                      # Right squark mass
-      "pymssm rmss 10 4800.0",                     # stop2 mass
-      "pymssm rmss 11 4200.0",                     # sbottom1 mass
-      "pymssm rmss 12 "+str(simdict["MASS"])+".0", # stop1 mass
-      "pymssm rmss 21 "+str(MASSX)+"e9",           # Gravitino mass
-      "pymssm imss 11 1",                          # make N1 the LSP (1 would make N1 NLSP and gravitino LSP)
-      "pymssm rmss 29 7.0e5",                      # Planck mass, controls BR(g~ -> g+Gravitino), leave high to avoid gravitino production
-      "pydat3 mdcy 1000022 1 0",                   # kill neutralino decays
-      # "pydat1 mstj 45 6",                        # allow CMshower->ttbar in gluino decays
-      # "pydat1 mstj 43 1",                        # z definition in CM shower
-      "pysubs msel 0",                             # Turn off all processes
-      "pysubs msub 261 1",                         # turn on ffbar -> stop1stop1bar
-      "pysubs msub 264 1",                         # turn on gg -> stop1stop1bar
-      "pypars mstp 111 0",                         # Turn off master switch for fragmentation and decay
-      "pyinit pylisti 12",                         # dumps the full decay table, etc.
-      # "pyinit pylistf 1",                        # dumps pythia event
-      "pyinit dumpr 0 100",                        # write out events 1 to 100
-      "pystat 2"
-    ]
-  elif (simdict["CASE"]=='sbottom'):
-    genSeq.PythiaRhad.RunGluinoHadrons=False
-    genSeq.PythiaRhad.RunStopHadrons=False
-    genSeq.PythiaRhad.RunSbottomHadrons=True
-    genSeq.PythiaRhad.randomtshift=50 # +-X ns, overrides tshift if non-zero
-    genSeq.PythiaRhad.rh_decay=True
-    genSeq.PythiaRhad.strip_out_rh=True
-    genSeq.PythiaRhad.boost_rh_to_rest_frame=True
-    genSeq.PythiaRhad.rotate_rh=True
-    genSeq.PythiaRhad.translate_rh_to_stopping_position=True
-    genSeq.PythiaRhad.EnableAfterInitialize=False # added for PythiaRhad_i-00-04-02
-    genSeq.PythiaRhad.StoppingInput = [ [ 0,0,0,0,0,0 ] ]
-    try:
-      include("StoppingInput.txt")
-    except:
-      pass
-    genSeq.PythiaRhad.PythiaCommand += [
-      "pymssm imss 1 1",                           # General MSSM simulation
-      "pymssm imss 3 1",                           # Tell Pythia that rmss 3 below should be interpreted as the gluino pole mass
-      "pymssm imss 5 1",                           # Set stop, sbottom and stau masses and mixing by hand (26-28 for mixing not set!)
-      "pymssm rmss 1 "+str(MASSX),                 # Photino mass
-      #"pymssm rmss 2 10000.0",                     # Wino/Zino mass
-      "pymssm rmss 3 25000.0",                     # Gluino  mass
-      #"pymssm rmss 4 10000.0",                     # Higgsino mass parameter
-      #"pymssm rmss 7 10000.0",                     # Right slepton mass
-      "pymssm rmss 8 4800.0",                      # Left squark mass
-      "pymssm rmss 9 4200.0",                      # Right squark mass
-      "pymssm rmss 10 4800.0",                     # stop2 mass
-      "pymssm rmss 11 "+str(simdict["MASS"])+".0", # sbottom1 mass
-      "pymssm rmss 12 4100.0",                     # stop1 mass
-      "pymssm rmss 21 "+str(MASSX)+"e9",           # Gravitino mass
-      "pymssm imss 11 1",                          # make N1 the LSP (1 would make N1 NLSP and gravitino LSP)
-      "pymssm rmss 29 7.0e5",                      # Planck mass, controls BR(g~ -> g+Gravitino), leave high to avoid gravitino production
-      "pydat3 mdcy 1000022 1 0",                   # kill neutralino decays
-      # "pydat1 parj 64 -10000000.0",
-      # "pydat3 mdcy 5 1 1",
-      # "pydat1 mstj 45 6",                        # allow CMshower->ttbar in gluino decays
-      # "pydat1 mstj 43 1",                        # z definition in CM shower
-      "pysubs msel 0",                             # Turn off all processes
-      "pysubs msub 287 1",                         # turn on ffbar -> sbottom1sbottom1bar
-      "pysubs msub 289 1",                         # turn on gg -> sbottom1sbottom1bar
-      "pysubs msub 291 1",                         # turn on bb -> sbottom1sbottom1
-      "pypars mstp 111 0",                         # Turn off master switch for fragmentation and decay
-      "pyinit pylisti 12",                         # dumps the full decay table, etc.
-      # "pyinit pylistf 1",                        # dumps pythia event
-      "pyinit dumpr 0 100",                        # write out events 1 to 100
-      "pystat 2"
-    ]
-
-del doG4SimConfig, simdict, MASSX
-- 
GitLab


From 64e7422c5b76fabd26d770b1c589aaface58fc65 Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Wed, 20 Mar 2019 02:56:44 +0100
Subject: [PATCH 127/163] GeneratorObjectsTPCnv: Adjust reading _p1 objects to
 avoid making invalid links.

When we read _p1 links, we need to determine which event collection to target.
The target was being set to TruthEvent unless there was a nonzero
event index, in which case it was being set to TruthEvent_PU.
However, in some of those cases, the events contains TruthEvent
but not TruthEvent_PU, the result being that we were making invalid
links that would trip an assertion when used.

Now, make sure that TruthEvent_PU exists before targeting it.
(Yeah, it's inefficient to do this for each link, but since this is only
for reading old data, it's probably not worth doing it differently.)
Fixes a crash seen in the MuonEventAthenaPool tests.
---
 .../src/HepMcParticleLinkCnv_p1.cxx                      | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/Generators/GeneratorObjectsTPCnv/src/HepMcParticleLinkCnv_p1.cxx b/Generators/GeneratorObjectsTPCnv/src/HepMcParticleLinkCnv_p1.cxx
index 322d8255909c..6672d035f778 100755
--- a/Generators/GeneratorObjectsTPCnv/src/HepMcParticleLinkCnv_p1.cxx
+++ b/Generators/GeneratorObjectsTPCnv/src/HepMcParticleLinkCnv_p1.cxx
@@ -9,6 +9,7 @@
 
 // GeneratorObjectsAthenaPool includes
 #include "GeneratorObjectsTPCnv/HepMcParticleLinkCnv_p1.h"
+#include "GeneratorObjects/McEventCollection.h"
 
 ///////////////////////////////////////////////////////////////////
 /// Public methods:
@@ -24,7 +25,13 @@ void HepMcParticleLinkCnv_p1::persToTrans( const HepMcParticleLink_p1* persObj,
                                            MsgStream &/*msg*/ )
 {
   EBC_EVCOLL evColl = EBC_MAINEVCOLL;
-  if (persObj->m_mcEvtIndex>0) evColl = EBC_FIRSTPUEVCOLL; // HACK
+  if (persObj->m_mcEvtIndex>0) {
+    // HACK
+    const CLID clid = ClassID_traits<McEventCollection>::ID();
+    if (SG::CurrentEventStore::store()->proxy (clid, "TruthEvent_PU") != nullptr) {
+      evColl = EBC_FIRSTPUEVCOLL;
+    }
+  }
   transObj->setExtendedBarCode
     ( HepMcParticleLink::ExtendedBarCode( persObj->m_barcode,
                                           persObj->m_mcEvtIndex,
-- 
GitLab


From 2d7c5f79995b2c22c55a7e030c289c9fd604df5a Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Tue, 19 Mar 2019 14:38:52 +0100
Subject: [PATCH 128/163] LArIdentifier: Fix cppcheck warnings.

cppcheck warnings: Pass std::string by reference.
---
 .../LArIdentifier/LArIdentifier/LArOnlID_Exception.h        | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/LArCalorimeter/LArIdentifier/LArIdentifier/LArOnlID_Exception.h b/LArCalorimeter/LArIdentifier/LArIdentifier/LArOnlID_Exception.h
index 30f467e4c843..b7dbe3cc109e 100755
--- a/LArCalorimeter/LArIdentifier/LArIdentifier/LArOnlID_Exception.h
+++ b/LArCalorimeter/LArIdentifier/LArIdentifier/LArOnlID_Exception.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARHARDWAREID_EXCEPTION_H
@@ -24,12 +24,12 @@ public:
     /**
      * constructor to be used 
      */
-    LArOnlID_Exception(std::string  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
+    LArOnlID_Exception(const std::string&  l_message , int l_code) : m_message ( l_message ) , m_code ( l_code ) { }
 
     /**
      * set error message 
      */
-    void message(std::string l_message) { m_message = l_message ;}
+    void message(const std::string& l_message) { m_message = l_message ;}
 
     /**
      * return error message <br> 
-- 
GitLab


From 14cdba25beb02ac37013e17ac8e9593e5c72f088 Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Wed, 20 Mar 2019 02:44:26 +0100
Subject: [PATCH 129/163] CaloTools: Remove no-op callback registration from
 CaloNoiseToolDB.

Remove callback registration for LoadCalibration, which is a no-op.
Needed as part of preparation for removing the obsolete LArHVCorrTool.
---
 Calorimeter/CaloTools/src/CaloNoiseToolDB.cxx | 2 --
 1 file changed, 2 deletions(-)

diff --git a/Calorimeter/CaloTools/src/CaloNoiseToolDB.cxx b/Calorimeter/CaloTools/src/CaloNoiseToolDB.cxx
index f6391b631fe8..135668e8c2b6 100644
--- a/Calorimeter/CaloTools/src/CaloNoiseToolDB.cxx
+++ b/Calorimeter/CaloTools/src/CaloNoiseToolDB.cxx
@@ -111,8 +111,6 @@ CaloNoiseToolDB::initialize()
   if (m_rescaleForHV) {
     ATH_CHECK( m_larHVCellCorrTool.retrieve() );
     ATH_MSG_INFO( "Retrieved " << m_larHVCellCorrTool << " for on-the-fly noise rescaling"  );
-    ATH_CHECK( detStore()->regFcn(&ILArCellHVCorrTool::LoadCalibration, &(*m_larHVCellCorrTool),&CaloNoiseToolDB::clearCache, this) );
-    ATH_MSG_INFO( "Regestered callback on ILArCellHVCorrTool::LoadCalibration"  );
   }
   else {
     m_larHVCellCorrTool.disable();
-- 
GitLab


From 27ee69a9aa43f9f12bd15fa5d2d6e3559bd348ce Mon Sep 17 00:00:00 2001
From: Xiaozhong Huang <xiaozhong.huang@cern.ch>
Date: Fri, 25 Jan 2019 19:04:14 +0100
Subject: [PATCH 130/163] Optimization of CPU time of FastCaloSimV2
 (ATLASSIM-3980)

To make sure the modifications do not affect apps other than FastCaloSim, we add a dedicated
CaloCellContainerFCSFinalizerTool for FastCaloSim, but leave the CaloRec/CaloCellContainerFinalizerTool
unchanged.
---
 .../CaloEvent/CaloEvent/CaloCellContainer.h   |  2 +
 .../FastShower/FastCaloSim/CMakeLists.txt     |  1 +
 .../CaloCellContainerFCSFinalizerTool.h       | 37 ++++++++++
 .../src/CaloCellContainerFCSFinalizerTool.cxx | 72 +++++++++++++++++++
 .../FastCaloSim/src/EmptyCellBuilderTool.cxx  | 37 +++++++++-
 .../src/components/FastCaloSim_entries.cxx    |  2 +
 .../python/AdditionalConfig.py                |  4 ++
 .../python/ISF_FastCaloSimServicesConfig.py   |  6 +-
 .../python/ISF_FastCaloSimServicesConfigDb.py |  1 +
 9 files changed, 158 insertions(+), 4 deletions(-)
 create mode 100644 Simulation/FastShower/FastCaloSim/FastCaloSim/CaloCellContainerFCSFinalizerTool.h
 create mode 100644 Simulation/FastShower/FastCaloSim/src/CaloCellContainerFCSFinalizerTool.cxx

diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
index 567abb83da5a..3adbd33280bb 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
@@ -63,6 +63,7 @@ class CaloCellContainer : public DataVector<CaloCell>
  friend class CaloCellContainerFinalizerTool;
  friend class CaloCompactCellTool; 
  friend class FullCaloCellContMaker;
+ friend class EmptyCellBuilderTool;
  public:
 
 
@@ -213,6 +214,7 @@ time this method of findCellVector is used */
 
   /** @brief If @ flag is true, then the container size equals the maximum hash.
    *         Only CaloCellContainerFinalizer tool is allowed to set this.
+   *         Now, set this in EmptyCellBuilderTool as it is always true.
    */
   void setHasTotalSize(const bool);
 
diff --git a/Simulation/FastShower/FastCaloSim/CMakeLists.txt b/Simulation/FastShower/FastCaloSim/CMakeLists.txt
index 1d727ea72394..e8da8b3bd1a9 100644
--- a/Simulation/FastShower/FastCaloSim/CMakeLists.txt
+++ b/Simulation/FastShower/FastCaloSim/CMakeLists.txt
@@ -64,6 +64,7 @@ atlas_add_root_dictionary( FastCaloSimLib
                            EXTERNAL_PACKAGES  ROOT HepPDT CLHEP HepMC Eigen )
 
 atlas_add_library( FastCaloSimLib
+                   src/CaloCellContainerFCSFinalizerTool.cxx
                    src/AddNoiseCellBuilderTool.cxx
                    src/BasicCellBuilderTool.cxx
                    src/EmptyCellBuilderTool.cxx
diff --git a/Simulation/FastShower/FastCaloSim/FastCaloSim/CaloCellContainerFCSFinalizerTool.h b/Simulation/FastShower/FastCaloSim/FastCaloSim/CaloCellContainerFCSFinalizerTool.h
new file mode 100644
index 000000000000..e5cfecc4f49d
--- /dev/null
+++ b/Simulation/FastShower/FastCaloSim/FastCaloSim/CaloCellContainerFCSFinalizerTool.h
@@ -0,0 +1,37 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#ifndef CALOCELLCONTAINERFCSFINALIZERTOOL_H
+#define CALOCELLCONTAINERFCSFINALIZERTOOL_H
+
+#include "AthenaBaseComps/AthAlgTool.h"
+
+#include "CaloInterface/ICaloCellMakerTool.h"
+#include "CaloInterface/ICaloConstCellMakerTool.h"
+
+class CaloCellContainerFCSFinalizerTool
+  : public extends<AthAlgTool, ICaloCellMakerTool, ICaloConstCellMakerTool>
+{
+public:    
+  CaloCellContainerFCSFinalizerTool(const std::string& type, 
+                                 const std::string& name, 
+				 const IInterface* parent) ;
+
+
+  // update theCellContainer
+  virtual StatusCode process (CaloCellContainer* theCellContainer,
+                              const EventContext& ctx) const override;
+  virtual StatusCode process (CaloConstCellContainer* theCellContainer,
+                              const EventContext& ctx) const  override;
+
+private:
+  template <class CONTAINER>
+  StatusCode doProcess (CONTAINER* theCellContainer) const;
+};
+
+#endif
+
diff --git a/Simulation/FastShower/FastCaloSim/src/CaloCellContainerFCSFinalizerTool.cxx b/Simulation/FastShower/FastCaloSim/src/CaloCellContainerFCSFinalizerTool.cxx
new file mode 100644
index 000000000000..2a9507522c56
--- /dev/null
+++ b/Simulation/FastShower/FastCaloSim/src/CaloCellContainerFCSFinalizerTool.cxx
@@ -0,0 +1,72 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+
+NAME:     CaloCellContainerFCSFinalizerTool
+PACKAGE:  athena/Simulation/FastShower/FastCaloSim
+
+AUTHORS:  David Rousseau (modified by Xiaozhong Huang)
+CREATED:  Jan 25,2019
+
+PURPOSE:  Apply necessary finalising operation to CaloCellContainer
+	  Remove any checks since the CaloCellContainer is complete 
+	  and ordered from the beginning
+********************************************************************/
+
+#include "FastCaloSim/CaloCellContainerFCSFinalizerTool.h"
+
+#include "GaudiKernel/Service.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/Property.h"
+#include "GaudiKernel/ListItem.h"
+
+#include "StoreGate/StoreGateSvc.h"
+
+
+#include "CaloEvent/CaloCellContainer.h"
+#include "CaloEvent/CaloConstCellContainer.h"
+#include "CaloDetDescr/CaloDetDescrManager.h"
+#include "CaloIdentifier/CaloCell_ID.h"
+
+
+/////////////////////////////////////////////////////////////////////
+// CONSTRUCTOR:
+/////////////////////////////////////////////////////////////////////
+
+CaloCellContainerFCSFinalizerTool::CaloCellContainerFCSFinalizerTool(
+			     const std::string& type, 
+			     const std::string& name, 
+			     const IInterface* parent)
+  :base_class(type, name, parent) 
+{
+}
+
+
+template <class CONTAINER>
+StatusCode CaloCellContainerFCSFinalizerTool::doProcess(CONTAINER* theCont ) const
+{
+  
+  theCont->updateCaloIterators();
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode
+CaloCellContainerFCSFinalizerTool::process (CaloCellContainer * theCont,
+                                         const EventContext& /*ctx*/) const
+{
+  CHECK( doProcess (theCont) );
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode
+CaloCellContainerFCSFinalizerTool::process (CaloConstCellContainer * theCont,
+                                         const EventContext& /*ctx*/) const
+{
+  // Container will automatically be locked when recorded.
+  return doProcess (theCont);
+}
diff --git a/Simulation/FastShower/FastCaloSim/src/EmptyCellBuilderTool.cxx b/Simulation/FastShower/FastCaloSim/src/EmptyCellBuilderTool.cxx
index 44d894db31e9..095d86fcb9f8 100755
--- a/Simulation/FastShower/FastCaloSim/src/EmptyCellBuilderTool.cxx
+++ b/Simulation/FastShower/FastCaloSim/src/EmptyCellBuilderTool.cxx
@@ -121,7 +121,42 @@ void EmptyCellBuilderTool::create_empty_calo(const EventContext& ctx,
   }
 
   log << MSG::DEBUG << ncreate<<" cells created, "<<nfound<<" cells already found: size="<<theCellContainer->size()<<" e="<<E_tot<<" ; et="<<Et_tot<<". Now initialize and order calo..." << endmsg;
-  theCellContainer->order();
+
+  // check whether has max hash id size
+  const CaloCell_ID * theCaloCCIDM   = m_caloDDM->getCaloCell_ID() ;
+  unsigned int hashMax=theCaloCCIDM->calo_cell_hash_max();
+  if (theCellContainer->size()<hashMax) {
+    ATH_MSG_DEBUG("CaloCellContainer size " << theCellContainer->size() << " smaller than hashMax: " << hashMax);
+  }
+  else if (theCellContainer->size()==hashMax)  {
+    ATH_MSG_DEBUG("CaloCellContainer size " << theCellContainer->size() << " correspond to hashMax : " << hashMax);
+    theCellContainer->setHasTotalSize(true);
+  } 	
+  else {
+    ATH_MSG_WARNING("CaloCellContainer size " << theCellContainer->size() 
+	<< " larger than hashMax ! Too many cells ! " << hashMax);
+
+  }
+
+  // check whether in order and complete
+  if (theCellContainer->checkOrderedAndComplete()){
+    ATH_MSG_DEBUG("CaloCellContainer ordered and complete");
+    theCellContainer->setIsOrderedAndComplete(true);
+    theCellContainer->setIsOrdered(true);
+  } else {	
+    ATH_MSG_DEBUG("CaloCellContainer not ordered or incomplete");
+    theCellContainer->setIsOrderedAndComplete(false);
+    // check whether in order
+    if (theCellContainer->checkOrdered()){
+      ATH_MSG_DEBUG("CaloCellContainer ordered");
+      theCellContainer->setIsOrdered(true);
+    } else {	
+      ATH_MSG_DEBUG("CaloCellContainer not ordered");
+      theCellContainer->setIsOrdered(false);
+    }
+  }
+
+  if (!theCellContainer->isOrdered()) theCellContainer->order();
 
   #if FastCaloSim_project_release_v1 == 12
   #else  
diff --git a/Simulation/FastShower/FastCaloSim/src/components/FastCaloSim_entries.cxx b/Simulation/FastShower/FastCaloSim/src/components/FastCaloSim_entries.cxx
index 777746598016..01ab2c3c2b9a 100644
--- a/Simulation/FastShower/FastCaloSim/src/components/FastCaloSim_entries.cxx
+++ b/Simulation/FastShower/FastCaloSim/src/components/FastCaloSim_entries.cxx
@@ -2,6 +2,7 @@
 #include "FastCaloSim/EmptyCellBuilderTool.h"
 #include "FastCaloSim/AddNoiseCellBuilderTool.h"
 #include "FastCaloSim/FSStoregateClean.h"
+#include "FastCaloSim/CaloCellContainerFCSFinalizerTool.h"
 //#include "FastCaloSim/FSRedoCBNT.h"
 //#include "FastCaloSim/CBNTAA_DetailedCellInfo.h"
 
@@ -11,5 +12,6 @@ DECLARE_COMPONENT( FastCaloSim::FSStoregateClean )
 DECLARE_COMPONENT( FastShowerCellBuilderTool )
 DECLARE_COMPONENT( EmptyCellBuilderTool )
 DECLARE_COMPONENT( AddNoiseCellBuilderTool )
+DECLARE_COMPONENT( CaloCellContainerFCSFinalizerTool )
 //DECLARE_COMPONENT( CBNTAA_DetailedCellInfo )
 
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py
index 99b8dd896dbf..7f6dfb730a4a 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py
@@ -860,6 +860,10 @@ def getCaloCellContainerFinalizerTool(name="ISF_CaloCellContainerFinalizerTool",
     from CaloRec.CaloRecConf import CaloCellContainerFinalizerTool
     return CaloCellContainerFinalizerTool(name, **kwargs )
 
+def getCaloCellContainerFCSFinalizerTool(name="ISF_CaloCellContainerFCSFinalizerTool", **kwargs):
+    from FastCaloSim.FastCaloSimConf import CaloCellContainerFCSFinalizerTool
+    return CaloCellContainerFCSFinalizerTool(name, **kwargs )
+
 def getFastHitConvAlg(name="ISF_FastHitConvAlg", **kwargs):
     from ISF_FastCaloSimServices.ISF_FastCaloSimJobProperties import ISF_FastCaloSimFlags
     kwargs.setdefault("CaloCellsInputName"  , ISF_FastCaloSimFlags.CaloCellsName() )
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
index 5c476d2d9a0f..2cfc640f05f4 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
@@ -27,7 +27,7 @@ def getLegacyAFIIFastCaloSimSvc(name="ISF_LegacyAFIIFastCaloSimSvc", **kwargs):
 def getFastHitConvAlgFastCaloSimSvc(name="ISF_FastHitConvAlgFastCaloSimSvc",**kwargs):
     kwargs.setdefault("CaloCellMakerTools_release", [
                                                            #'ISF_AddNoiseCellBuilderTool',
-                                                            'ISF_CaloCellContainerFinalizerTool'
+                                                            'ISF_CaloCellContainerFCSFinalizerTool'
                                                     ] )
     # setup FastCaloSim hit converter and add it to the alg sequence:
     # -> creates HITS from reco cells
@@ -57,7 +57,7 @@ def getFastCaloSimPileupOTSvc(name="ISF_FastCaloSimPileupOTSvc", **kwargs):
     kwargs.setdefault("CaloCellMakerTools_setup"         , [ 'ISF_EmptyCellBuilderTool' ] )
     kwargs.setdefault("CaloCellMakerTools_simulate"      , [ 'ISF_FastShowerCellBuilderTool' ])
     kwargs.setdefault("CaloCellMakerTools_release"       , [ #'ISF_AddNoiseCellBuilderTool',
-                                                             'ISF_CaloCellContainerFinalizerTool',
+                                                             'ISF_CaloCellContainerFCSFinalizerTool',
                                                              'ISF_FastHitConvertTool' ])
     kwargs.setdefault("Extrapolator"                     , 'ISF_NITimedExtrapolator')
     # register the FastCaloSim random number streams
@@ -72,7 +72,7 @@ def getFastCaloSimSvcV2(name="ISF_FastCaloSimSvcV2", **kwargs):
 
     kwargs.setdefault("CaloCellsOutputName"              , ISF_FastCaloSimFlags.CaloCellsName()   )
     kwargs.setdefault("CaloCellMakerTools_setup"         , [ 'ISF_EmptyCellBuilderTool' ] )
-    kwargs.setdefault("CaloCellMakerTools_release"       , [ 'ISF_CaloCellContainerFinalizerTool',
+    kwargs.setdefault("CaloCellMakerTools_release"       , [ 'ISF_CaloCellContainerFCSFinalizerTool',
                                                            'ISF_FastHitConvertTool' ])
     kwargs.setdefault("ParamsInputFilename"              , ISF_FastCaloSimFlags.ParamsInputFilename())
     kwargs.setdefault("ParamsInputObject"                , 'SelPDGID')
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
index ef876dd16d2e..a7300b00f6d7 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
@@ -19,6 +19,7 @@ addTool("ISF_FastCaloSimServices.AdditionalConfig.getPileupFastShowerCellBuilder
 addTool("ISF_FastCaloSimServices.AdditionalConfig.getCaloNoiseTool",                   "ISF_FCS_CaloNoiseTool")
 addTool("ISF_FastCaloSimServices.AdditionalConfig.getAddNoiseCellBuilderTool",         "ISF_AddNoiseCellBuilderTool")
 addTool("ISF_FastCaloSimServices.AdditionalConfig.getCaloCellContainerFinalizerTool",  "ISF_CaloCellContainerFinalizerTool")
+addTool("ISF_FastCaloSimServices.AdditionalConfig.getCaloCellContainerFCSFinalizerTool",  "ISF_CaloCellContainerFCSFinalizerTool")
 addTool("ISF_FastCaloSimServices.AdditionalConfig.getFastHitConvertTool",              "ISF_FastHitConvertTool")
 
 addTool("ISF_FastCaloSimServices.AdditionalConfig.getFastCaloTool",                    "ISF_FastCaloTool")
-- 
GitLab


From 469955863d8039f104c54ba26728594d9f34307b Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Wed, 20 Mar 2019 09:30:25 +0100
Subject: [PATCH 131/163] Modernize and update TrigMessageSvc

- Rewrite TrigMessageSvc based on the latest MessageSvc in Gaudi
- Remove unused features (e.g. colors)
- Add property for separate ERS message format

TODO:
- Message dispatch in separate thread (if needed)
- Add monitoring histograms
- Separate message statistics for each run
---
 .../TrigServices/python/TrigServicesConfig.py |   14 +-
 .../TrigServices/src/TrigHLTIssues.h          |   37 -
 .../TrigServices/src/TrigMessageSvc.cxx       | 1307 ++++-------------
 .../TrigServices/src/TrigMessageSvc.h         |  297 ++--
 4 files changed, 394 insertions(+), 1261 deletions(-)
 delete mode 100644 HLT/Trigger/TrigControl/TrigServices/src/TrigHLTIssues.h

diff --git a/HLT/Trigger/TrigControl/TrigServices/python/TrigServicesConfig.py b/HLT/Trigger/TrigControl/TrigServices/python/TrigServicesConfig.py
index 4f7f02252d2c..a50c90630b34 100644
--- a/HLT/Trigger/TrigControl/TrigServices/python/TrigServicesConfig.py
+++ b/HLT/Trigger/TrigControl/TrigServices/python/TrigServicesConfig.py
@@ -35,13 +35,15 @@ class TrigCOOLUpdateHelper(_TrigCOOLUpdateHelper):
 def setupMessageSvc():
    from AthenaCommon.AppMgr import theApp
    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-   from AthenaCommon.Constants import VERBOSE, DEBUG, INFO, WARNING
+   from AthenaCommon.Constants import VERBOSE, DEBUG, INFO, WARNING, ERROR
 
    svcMgr.MessageSvc = theApp.service( "MessageSvc" )     # already instantiated
    MessageSvc = svcMgr.MessageSvc
    MessageSvc.OutputLevel = theApp.OutputLevel
 
    MessageSvc.Format       = "% F%40W%S%4W%e%s%7W%R%T %0W%M"
+   MessageSvc.ErsFormat    = "%S: %M"
+   MessageSvc.printEventIDLevel = WARNING
 
    # Message suppression
    MessageSvc.enableSuppression    = False
@@ -63,20 +65,12 @@ def setupMessageSvc():
       MessageSvc.defaultLimit = 0
       MessageSvc.enableSuppression = False
 
-   # publish message counts during RUNNING in histogram
-   MessageSvc.publishStats = True
-   MessageSvc.publishLevel = INFO
-
    # show summary statistics of messages in finalize
    MessageSvc.showStats = True
    MessageSvc.statLevel = WARNING
    MessageSvc.statLevelRun = VERBOSE
 
-   # publish message counts during RUNNING in histogram
-   MessageSvc.publishStats = True
-   MessageSvc.publishLevel = INFO
-
-# online ROB data provider service 
+# online ROB data provider service
 from TrigServicesConf import HltROBDataProviderSvc as _HltROBDataProviderSvc
 class HltROBDataProviderSvc(_HltROBDataProviderSvc):
    __slots__ = ()
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/TrigHLTIssues.h b/HLT/Trigger/TrigControl/TrigServices/src/TrigHLTIssues.h
deleted file mode 100644
index 3e282bed7f22..000000000000
--- a/HLT/Trigger/TrigControl/TrigServices/src/TrigHLTIssues.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Dear emacs, this is -*- c++ -*-
-
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
- * @file TrigHLTIssues.h
- * @author <a href="mailto:Werner.Wiedenmann@cern.ch">Werner Wiedenmann</a>
- *
- * @brief ERS issue classes for HLT
- */
-
-#ifndef TRIG_HLT_ISSUES_H
-#define TRIG_HLT_ISSUES_H
-
-#include "ers/ers.h"
-
-ERS_DECLARE_ISSUE( ers, HLTMessage, , )
-ERS_DECLARE_ISSUE( ers, HLTAbort, "Fatal error during event processing", )
-  
-#define ERS_HLT_WARNING( message ) \
-{ \
-    ERS_REPORT_IMPL( ers::warning, ers::HLTMessage, message, ); \
-}
-
-#define ERS_HLT_ERROR( message ) \
-{ \
-    ERS_REPORT_IMPL( ers::error, ers::HLTMessage, message, ); \
-}
-
-#define ERS_HLT_FATAL( message ) \
-{ \
-    ERS_REPORT_IMPL( ers::fatal, ers::HLTMessage, message, ); \
-}
-  
-#endif /* TRIG_HLT_ISSUES_H */
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.cxx
index 6406101bbf0e..d13cc16ef6d8 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.cxx
@@ -1,1181 +1,380 @@
 /*
   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
-
+#include "TrigMessageSvc.h"
+#include "GaudiKernel/IAppMgrUI.h"
 #include "GaudiKernel/Kernel.h"
-#include "GaudiKernel/IIncidentSvc.h"
-#include "GaudiKernel/ITHistSvc.h"
-#include "GaudiKernel/StatusCode.h"
 #include "GaudiKernel/Message.h"
-#include "GaudiKernel/IJobOptionsSvc.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
-#include "TrigMessageSvc.h"
-#include "TrigHLTIssues.h"
-#include "TrigMonitorBase/TrigLockedHist.h"
+#include "GaudiKernel/StatusCode.h"
+#include "GaudiKernel/System.h"
 
-#include <TH1I.h>
-#include <TH2I.h>
+#include "ers/ers.h"
 
-#include <sstream>
+#include <fstream>
 #include <iostream>
+#include <sstream>
 
-#include <pthread.h>
-#include <boost/thread/recursive_mutex.hpp>
-
-
-static pthread_mutex_t msgsvcmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-
-using namespace std;
+// Declare ERS issue type
+ERS_DECLARE_ISSUE(ers, HLTMessage, , )
 
-static std::string levelNames[MSG::NUM_LEVELS];
+static const std::string levelNames[MSG::NUM_LEVELS] = {"NIL",     "VERBOSE", "DEBUG", "INFO",
+                                                        "WARNING", "ERROR",   "FATAL", "ALWAYS"};
 
-// ERS debug level for which to enforce DEBUG OutputLevel
-static int ersGaudiDebugOffset = 8;
+namespace {
+  /// Calculate message hash ignoring any digits
+  size_t msgHash(const Message& msg)
+  {
+    std::string s = msg.getSource() + msg.getMessage();
+    s.erase(std::remove_if(s.begin(), s.end(), [](char c) { return std::isdigit(c); }), s.end());
+    return std::hash<std::string>()(s);
+  }
+} // namespace
 
-// Constructor
-TrigMessageSvc::TrigMessageSvc( const std::string& name, ISvcLocator* svcloc )
-  : base_class(name, svcloc)
-  , m_doSuppress{false}
-  , m_running{false}
-  , m_canEnter{false}
-  , m_evtStore{"StoreGateSvc/StoreGateSvc", name}
-  , m_msgCountHist{nullptr}
-  , m_msgCountSrcHist{nullptr}
+TrigMessageSvc::TrigMessageSvc(const std::string& name, ISvcLocator* svcloc) :
+    base_class(name, svcloc)
 {
-  m_defaultStream = &std::cout;
-  m_outputLevel   = MSG::NIL;
-  declareProperty( "Format",      m_defaultFormat = "% F%18W%S%7W%R%T %0W%M" );
-  declareProperty( "timeFormat",  m_defaultTimeFormat = "%Y-%m-%d %H:%M:%S,%f" );
-
-  declareProperty( "showStats",    m_stats = false );
-  declareProperty( "statLevel",    m_statLevel = 0, "Show statistics for messages >= level" );
-  declareProperty( "statLevelRun", m_statLevelRun = 0, "Show per-run statistics for messages >= level" );
-  
-  declareProperty( "publishStats", m_publishStats = false,
-                   "Publish message statistics as histogram");
-  
-  declareProperty( "publishLevel", m_publishLevel = MSG::INFO,
-                   "Publish message statistics for this and higher message levels");
-  
-  declareProperty( "resetStatsAtBeginRun", m_resetStats = false );  
-
-  declareProperty( "printEventIDLevel", m_eventIDLevel = MSG::WARNING,
-                   "Print event ID for this and higher message levels");
-                   
-  // Special properties to control output level of individual sources
-  declareProperty( "setVerbose",  m_thresholdProp[MSG::VERBOSE] );
-  declareProperty( "setDebug",    m_thresholdProp[MSG::DEBUG] );
-  declareProperty( "setInfo",     m_thresholdProp[MSG::INFO] );
-  declareProperty( "setWarning",  m_thresholdProp[MSG::WARNING] );
-  declareProperty( "setError",    m_thresholdProp[MSG::ERROR] );
-  declareProperty( "setFatal",    m_thresholdProp[MSG::FATAL] );
-  declareProperty( "setAlways",   m_thresholdProp[MSG::ALWAYS] );
-
-  declareProperty( "useColors",        m_color=false);
-  m_color.declareUpdateHandler(&TrigMessageSvc::initColors, this);
-
-  declareProperty( "fatalColorCode",   m_logColors[MSG::FATAL] );
-  declareProperty( "errorColorCode",   m_logColors[MSG::ERROR] );
-  declareProperty( "warningColorCode", m_logColors[MSG::WARNING] );
-  declareProperty( "infoColorCode",    m_logColors[MSG::INFO] );
-  declareProperty( "debugColorCode",   m_logColors[MSG::DEBUG] );
-  declareProperty( "verboseColorCode", m_logColors[MSG::VERBOSE] );
-  declareProperty( "alwaysColorCode",  m_logColors[MSG::ALWAYS] );
-
-  m_defaultLimit = 500;
-  declareProperty( "fatalLimit",    m_msgLimit[MSG::FATAL]   = m_defaultLimit );
-  declareProperty( "errorLimit",    m_msgLimit[MSG::ERROR]   = m_defaultLimit );
-  declareProperty( "warningLimit",  m_msgLimit[MSG::WARNING] = m_defaultLimit );
-  declareProperty( "infoLimit",     m_msgLimit[MSG::INFO]    = m_defaultLimit );
-  declareProperty( "debugLimit",    m_msgLimit[MSG::DEBUG]   = m_defaultLimit );
-  declareProperty( "verboseLimit",  m_msgLimit[MSG::VERBOSE] = m_defaultLimit );
-  declareProperty( "alwaysLimit",   m_msgLimit[MSG::ALWAYS]  = 0 );
+  m_outputLevel.declareUpdateHandler([svcloc](Gaudi::Details::PropertyBase&) {
+    SmartIF<IAppMgrUI> app = svcloc;
+    if (app) app->outputLevelUpdate();
+  });
 
-  declareProperty( "defaultLimit",  m_msgLimit[MSG::NIL]     = m_defaultLimit );
-
-  declareProperty( "enableSuppression", m_suppress = false,
-                   "Enable message suppression");
-  
-  declareProperty( "suppressRunningOnly", m_suppressRunningOnly = true,
-                   "Use message suppression only during RUNNING state");
-
-  m_suppress.declareUpdateHandler(&TrigMessageSvc::setupSuppression, this);
-  m_suppressRunningOnly.declareUpdateHandler(&TrigMessageSvc::setupSuppression, this);
-  
-  /* Special properties to control output to ERS of individual sources.
-     The syntax is as follows (these are NOT regular expressions):
-     
-     useErsFatal = []                       # forward none (default)
-     useErsFatal = ['*']                    # forward all
-     useErsFatal = ['CoreDumpSvc','MyAlg']  # forward these sources
-     useErsFatal = ['*','!MyAlg']           # forward all except MyAlg
-  */
-    
-  const vector<string> defaultErsUse;
-  declareProperty( "useErsVerbose",  m_useERS[MSG::VERBOSE] = defaultErsUse );
-  declareProperty( "useErsDebug",    m_useERS[MSG::DEBUG]   = defaultErsUse );
-  declareProperty( "useErsInfo",     m_useERS[MSG::INFO]    = defaultErsUse );
-  declareProperty( "useErsWarning",  m_useERS[MSG::WARNING] = defaultErsUse );
-  declareProperty( "useErsError",    m_useERS[MSG::ERROR]   = defaultErsUse );
-  declareProperty( "useErsFatal",    m_useERS[MSG::FATAL]   = defaultErsUse );
-  declareProperty( "useErsAlways",   m_useERS[MSG::ALWAYS]  = defaultErsUse );
-
-  declareProperty( "alwaysUseMsgStream", m_alwaysUseMsgStream = true,
-                   "Print all messages to MsgStream, even if forwarded to ERS");
-  
-  declareProperty( "useErsRunningOnly", m_useErsRunningOnly = false,
-                   "Forward messages to ERS only during RUNNING state");  
-                   
-  declareProperty( "forceOutputLevel", m_forceOutputLevel = false,
-                   "Enforce the global OutputLevel for all sources");
-
-  for (int ic=0; ic<MSG::NUM_LEVELS; ++ic) {
-    m_logColors[ic].declareUpdateHandler(&TrigMessageSvc::setupColors, this);
+  for (int ic = 0; ic < MSG::NUM_LEVELS; ++ic) {
     m_msgLimit[ic].declareUpdateHandler(&TrigMessageSvc::setupLimits, this);
     m_thresholdProp[ic].declareUpdateHandler(&TrigMessageSvc::setupThreshold, this);
   }
 
-  levelNames[0] = "NIL";
-  levelNames[1] = "VERBOSE";
-  levelNames[2] = "DEBUG";
-  levelNames[3] = "INFO";
-  levelNames[4] = "WARNING";
-  levelNames[5] = "ERROR";
-  levelNames[6] = "FATAL";
-  levelNames[7] = "ALWAYS";
-
-}
-//#############################################################################
-// Destructor
-TrigMessageSvc::~TrigMessageSvc()
-{
-  pthread_mutex_destroy(&msgsvcmutex);
+  std::fill(std::begin(m_msgCount), std::end(m_msgCount), 0);
 }
 
-/// Initialize Service 
-StatusCode TrigMessageSvc::initialize() {
-
-  StatusCode sc;
-  sc = Service::initialize();
-  if( sc.isFailure() ) return sc;
-  
-  m_running = false;
-  m_canEnter = true;
-  
-#ifdef _WIN32
-  m_color = false;
-#endif  
-  
-  // Reset message counters
-  resetMsgStats();
-  m_sourceMapTotal.clear();
-
-  // Initialize message suppression
-  setupSuppression(m_suppress);
+StatusCode TrigMessageSvc::initialize()
+{
+  StatusCode sc = Service::initialize();
+  if (sc.isFailure()) return sc;
 
-  m_colMap["black"]  = MSG::BLACK;
-  m_colMap["red"]    = MSG::RED;
-  m_colMap["green"]  = MSG::GREEN;
-  m_colMap["yellow"] = MSG::YELLOW;
-  m_colMap["blue"]   = MSG::BLUE;
-  m_colMap["purple"] = MSG::PURPLE;
-  m_colMap["cyan"]   = MSG::CYAN;
-  m_colMap["white"]  = MSG::WHITE;
+  m_doSuppress = m_suppress;
 
-  /*
-   * m_state is set in the base class sysInitialize after initialize succeeded.
-   * However, we need to set it already here otherwise the following
-   * use of IncidentSvc/JobOptionsSvc creates a service initialization loop.
-   */
-  m_state = Gaudi::StateMachine::INITIALIZED;
-
-  /*
-   * This will force the OutputLevel of all components to be the global
-   * OutputLevel (m_outputLevel of this service). It should cover the use-cases:
-   *    1) 'MsgStream(msgSvc(),name())'
-   *    2) 'MsgStream::setLevel(m_outputLevel)'
-   * For 2) we rely on the fact that the MessageSvc is created/initialized after
-   * the JobOptionsSvc in ApplicationMgr::i_startup().
-   */
-  int ers_debug = ers::Configuration::instance().debug_level();
-  if ( ers_debug >= ersGaudiDebugOffset+1 ) {
-    setOutputLevel(MSG::VERBOSE);
-    m_forceOutputLevel.setValue(true);
+  if (m_color) {
+    std::cout << "TrigMessageSvc WARNING: Colors are not supported by TrigMessageSvc" << std::endl;
   }
-  else if ( ers_debug >= ersGaudiDebugOffset ) {
-    setOutputLevel(MSG::DEBUG);
-    m_forceOutputLevel.setValue(true);
-  }
-  
-  if ( m_forceOutputLevel.value() ) {
-    resetOutputLevels();             // Clear all individual OutputLevels (to cover use-case 1)
-    setOutputLevelViaJobOptSvc();    // Set 'OutputLevel' in JobOptionsSvc (to cover use-case 2)
-    reportMessage(name(), MSG::INFO, "Enforcing global OutputLevel = "+levelNames[m_outputLevel.value()]);
-  }
-  
-  // Register incident handlers
-  ServiceHandle<IIncidentSvc> incSvc("IncidentSvc",name());
-  sc = incSvc.retrieve();
-  if (sc.isFailure()) {
-    reportMessage(name(), MSG::WARNING, "Cannot find IncidentSvc");
-  }
-  else {
-    incSvc->addListener(this, "BeginRun", LONG_MAX);
-    incSvc->addListener(this, "EndOfBeginRun", LONG_MAX);
-    incSvc->addListener(this, "EndRun", LONG_MAX);
-  }
-
- return StatusCode::SUCCESS;
+  return StatusCode::SUCCESS;
 }
 
-//#############################################################################
-
-/// Reinitialize Service 
-StatusCode TrigMessageSvc::reinitialize() {
+StatusCode TrigMessageSvc::reinitialize()
+{
   m_state = Gaudi::StateMachine::OFFLINE;
   return initialize();
 }
 
-
-//#############################################################################
-void TrigMessageSvc::handle(const Incident& inc) {
-
-  // We cannot use start/stop for the MessageSvc due to bug #46216
-  if (inc.type()=="BeginRun") {
-    if (m_suppressRunningOnly.value()) {
-      m_doSuppress = m_suppress.value();
-    }
-    if (m_publishStats) bookHistograms();
-  }
-  else if (inc.type()=="EndOfBeginRun") {
-    if (m_resetStats) {
-      reportMessage(name(), MSG::INFO, "Resetting message counts");
-      resetMsgStats();
-    }
-    m_running = true;
-  }
-  else if (inc.type()=="EndRun") {
-    m_running = false;
-    if (m_resetStats) reportMsgStats(MSG::INFO);
-    if (m_suppressRunningOnly.value()) m_doSuppress = false;
-  }
-}
-
-
-//#############################################################################
-void TrigMessageSvc::resetMsgStats()
+void TrigMessageSvc::setupLimits(Gaudi::Details::PropertyBase& prop)
 {
-  // Copy current counts to total counts map
-  std::map<std::string,msgAry>::const_iterator itr;
-  std::map<std::string,msgAry>::iterator tot;
-  for (itr=m_sourceMap.begin(); itr!=m_sourceMap.end(); ++itr) {
-    tot = m_sourceMapTotal.find(itr->first);
-    if (tot==m_sourceMapTotal.end()) {  // new entry
-      for (int i=0; i<MSG::NUM_LEVELS; i++) m_sourceMapTotal[itr->first].msg[i] = itr->second.msg[i];
-    }
-    else {  // existing entry
-      for (int i=0; i<MSG::NUM_LEVELS; i++) tot->second.msg[i] += itr->second.msg[i];
-    }
-  }
-      
-  m_sourceMap.clear();
-  m_msgCountMap.clear();
-  for (int i=0; i<MSG::NUM_LEVELS; i++) m_msgCount[i] = 0;
-}
-
-
-// ---------------------------------------------------------------------------
-// Book the message stats histograms
-// ---------------------------------------------------------------------------
-void TrigMessageSvc::bookHistograms()
-{
-  ServiceHandle<ITHistSvc> histSvc("THistSvc",name());
-  if ( histSvc.retrieve().isFailure() ) {
-    reportMessage(name(), MSG::WARNING,
-                  "Cannot find THistSvc. Message stats will not be published.");
-    return;
-  }
-  
-  // monitoring information root directory
-  const string path = "/EXPERT/" + name() + "/";
-  const int nLevelBins = MSG::NUM_LEVELS - m_publishLevel;
-  m_msgCountHist = new TH1I("MessageCount", "Messages while RUNNING;Severity;Count",
-                            nLevelBins, 0, nLevelBins);
-
-  const int nSrcBins = 1;
-  m_msgCountSrcHist = new TH2I("MessageCountBySource", "Messages while RUNNING;Severity;Source",
-                               nLevelBins, 0, nLevelBins, nSrcBins, 0, nSrcBins);
-
-    
-  for (int i=m_publishLevel; i<MSG::NUM_LEVELS; i++) {
-    m_msgCountHist->GetXaxis()->SetBinLabel(i-m_publishLevel+1, levelNames[i].c_str());
-    m_msgCountSrcHist->GetXaxis()->SetBinLabel(i-m_publishLevel+1, levelNames[i].c_str());    
-  }
-  
-  if ( histSvc->regHist(path + m_msgCountHist->GetName(), m_msgCountHist).isFailure() ) {
-    reportMessage(name(), MSG::WARNING, "Cannot register monitoring histogram 'MessageCount'");
-  }  
-  if ( histSvc->regHist(path + m_msgCountSrcHist->GetName(), m_msgCountSrcHist).isFailure() ) {
-    reportMessage(name(), MSG::WARNING, "Cannot register monitoring histogram 'MessageCountBySource'");
-  }
-}
-
-void TrigMessageSvc::initColors(Property& /*prop*/) {
-
-  if (m_color == true) {
-
-    if (m_logColors[MSG::FATAL].value().size() == 0) {
-      vector<string> fatDef;
-      fatDef.push_back( "[94;101;1m" );
-      m_logColors[MSG::FATAL].set( fatDef );
-    } else {
-      TrigMessageSvc::setupColors( m_logColors[MSG::FATAL] );
-    }
-    
-    if (m_logColors[MSG::ERROR].value().size() == 0) {
-      vector<string> errDef;
-      errDef.push_back( "[97;101;1m" );
-      m_logColors[MSG::ERROR].set( errDef );
-    } else {
-      TrigMessageSvc::setupColors( m_logColors[MSG::ERROR] );
-    }
-    
-    if (m_logColors[MSG::WARNING].value().size() == 0) {
-      vector<string> warDef;
-      warDef.push_back( "[93;1m" );
-      m_logColors[MSG::WARNING].set( warDef );
-    } else {
-      TrigMessageSvc::setupColors( m_logColors[MSG::WARNING] );
-    }
-
-  } else {
-    
-    // reset all color codes;
-    for (int ic=0; ic<MSG::NUM_LEVELS; ++ic) {
-      vector<string> def;
-      m_logColors[ic].set( def );
-    }
-
-  }
-
-}
-
-//#############################################################################
-
-void TrigMessageSvc::setupColors(Property& prop) {
-
-  if (! m_color) return;
-
-  int ic;
-  if (prop.name() == "fatalColorCode") {
-    ic = MSG::FATAL;
-  } else if (prop.name() == "errorColorCode") {
-    ic = MSG::ERROR;
-  } else if (prop.name() == "warningColorCode") {
-    ic = MSG::WARNING;
-  } else if (prop.name() == "infoColorCode") {
-    ic = MSG::INFO;
-  } else if (prop.name() == "debugColorCode") {
-    ic = MSG::DEBUG;
-  } else if (prop.name() == "verboseColorCode") {
-    ic = MSG::VERBOSE;
-  } else if (prop.name() == "alwaysColorCode") {
-    ic = MSG::ALWAYS;
-  } else {
-    std::ostringstream internal_msg ;
-    internal_msg << "ERROR: Unknown message color parameter: " << prop.name();
-    if (passErsFilter(name(), m_useERS[MSG::ERROR])) {
-      ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-    } else {
-      std::cerr << internal_msg.str() << std::endl;
-    }
-    return;
-  }
-
-  string code;
-  vector<string>::const_iterator itr;
-  itr = m_logColors[ic].value().begin();
-
-  if ( m_logColors[ic].value().size() == 1 ) {
-
-    if (*itr == "") {
-      code = "";
-    } else if (itr->substr(0,1) == "[") {
-      code = "\033" + *itr;
-    } else {
-      code = "\033[" + colTrans(*itr, 90) + ";1m";
-    }
-
-  } else if (m_logColors[ic].value().size() == 2) {
-    vector<string>::const_iterator itr2 = itr + 1;
-
-    code =  "\033[" + colTrans(*itr, 90) + ";"
-      + colTrans(*itr2, 100) + ";1m";
-
-  }
-
-  m_logColorCodes[ic] = code; 
-
-}
-//#############################################################################
-
-void TrigMessageSvc::setupLimits(Property& prop) {
-  const auto& pname = prop.name();
-  if (pname == "alwaysLimit") {
-    IntegerProperty *p = dynamic_cast<IntegerProperty*>(&prop);
+  // Just report problems in the settings of the limits and unknown limit
+  // parameters
+  if (prop.name() == "alwaysLimit") {
+    Gaudi::Property<int>* p = dynamic_cast<Gaudi::Property<int>*>(&prop);
     if (p && p->value() != 0) {
-      std::ostringstream internal_msg ;
-      internal_msg << "TrigMessageSvc ERROR: cannot suppress ALWAYS messages" ;
-      if (passErsFilter(name(), m_useERS[MSG::ERROR])) {
-        ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-      } else {
-        std::cerr << internal_msg.str() << std::endl;
-      }
+      std::cout << "TrigMessageSvc ERROR: cannot suppress ALWAYS messages" << std::endl;
       p->setValue(0);
     }
-  } else if (pname == "defaultLimit") {
-    // Only change the limits that are still on the default value
-    for (int i = MSG::VERBOSE; i< MSG::NUM_LEVELS; ++i) {
-      if ( (i != MSG::ALWAYS) && (m_msgLimit[i].value() == m_defaultLimit) ) {
+  }
+  else if (prop.name() == "defaultLimit") {
+    for (int i = MSG::VERBOSE; i < MSG::NUM_LEVELS; ++i) {
+      if (i != MSG::ALWAYS) {
         m_msgLimit[i] = m_msgLimit[MSG::NIL].value();
       }
     }
-  } else if (pname != "fatalLimit" &&
-             pname != "errorLimit" &&
-             pname != "warningLimit" &&
-             pname != "infoLimit" &&
-             pname != "debugLimit" &&
-             pname != "verboseLimit") {
-    std::ostringstream internal_msg ;
-    internal_msg << "TrigMessageSvc ERROR: Unknown message limit parameter: " << prop.name() ;
-    if (passErsFilter(name(), m_useERS[MSG::ERROR])) {
-      ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-    } else {
-      std::cerr << internal_msg.str() << std::endl;
-    }
-    return;
   }
-}
-//#############################################################################
-
-void TrigMessageSvc::setupThreshold(Property& prop) {
-
-  int ic = 0;
-  if (prop.name() == "setFatal") {
-    ic = MSG::FATAL;
-  } else if (prop.name() == "setError") {
-    ic = MSG::ERROR;
-  } else if (prop.name() == "setWarning") {
-    ic = MSG::WARNING;
-  } else if (prop.name() == "setInfo") {
-    ic = MSG::INFO;
-  } else if (prop.name() == "setDebug") {
-    ic = MSG::DEBUG;
-  } else if (prop.name() == "setVerbose") {
-    ic = MSG::VERBOSE;
-  } else if (prop.name() == "setAlways") {
-    ic = MSG::ALWAYS;
-  } else {
-    std::ostringstream internal_msg ;
-    internal_msg << "TrigMessageSvc ERROR: Unknown message theshold parameter: " << prop.name();
-    if (passErsFilter(name(), m_useERS[MSG::ERROR])) {
-      ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-    } else {
-      std::cerr << internal_msg.str() << std::endl;
-    }
-    return;
-  }
-
-  StringArrayProperty *sap = dynamic_cast<StringArrayProperty*>( &prop);
-  if (sap == 0) {
-    std::ostringstream internal_msg ;
-    internal_msg << "could not dcast " << prop.name() 
-		 << " to a StringArrayProperty (which it should be!)";
-    if (passErsFilter(name(),m_useERS[MSG::ERROR])) {
-      ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-    } else {
-      std::cerr << internal_msg.str() << std::endl;
-    }
+  else if (prop.name() != "fatalLimit" && prop.name() != "errorLimit" &&
+           prop.name() != "warningLimit" && prop.name() == "infoLimit" &&
+           prop.name() == "debugLimit" && prop.name() == "verboseLimit") {
+    std::cout << "TrigMessageSvc ERROR: Unknown message limit parameter: " << prop.name()
+              << std::endl;
     return;
-  } else {
-    std::vector<std::string>::const_iterator itr;
-    for ( itr =  sap->value().begin();
-	  itr != sap->value().end(); 
-	  ++itr) {
-      setOutputLevel( *itr, ic );
-    }
   }
-
 }
 
-//#############################################################################
-
-bool TrigMessageSvc::passErsFilter(const std::string& source,
-                                   const std::vector<std::string>& filter)
+void TrigMessageSvc::setupThreshold(Gaudi::Details::PropertyBase& prop)
 {
-  if (m_useErsRunningOnly.value() and not m_running) return false;
-  if (filter.empty()) return false;   // forward none
-  vector<string>::const_iterator it = filter.begin();
-  if (filter.size()==1 && (*it)=="*") return true;   // forward all
-
-  bool pass(false);
-  for (; it!=filter.end(); ++it) {
-    if ((*it)=="*") pass=true;           // forward except if there is a veto later
-    if (source==(*it)) return true;      // forward specific source
-    if ("!"+source==(*it)) return false; // veto specific source
+  static const std::array<std::pair<const char*, MSG::Level>, 7> tbl{{{"setFatal", MSG::FATAL},
+                                                                      {"setError", MSG::ERROR},
+                                                                      {"setWarning", MSG::WARNING},
+                                                                      {"setInfo", MSG::INFO},
+                                                                      {"setDebug", MSG::DEBUG},
+                                                                      {"setVerbose", MSG::VERBOSE},
+                                                                      {"setAlways", MSG::ALWAYS}}};
+
+  auto i = std::find_if(
+      std::begin(tbl), std::end(tbl),
+      [&](const std::pair<const char*, MSG::Level>& t) { return prop.name() == t.first; });
+  if (i == std::end(tbl)) {
+    std::cerr << "TrigMessageSvc ERROR: Unknown message threshold parameter: " << prop.name()
+              << std::endl;
+    return;
   }
-  return pass;
-}
-
-  
-//#############################################################################
+  int ic = i->second;
 
-void TrigMessageSvc::setupSuppression(Property& /*prop*/) {
-  // (De)activate suppression
-  if ( m_suppressRunningOnly.value() ) {
-    m_doSuppress = (m_running && m_suppress.value());
+  Gaudi::Property<std::vector<std::string>>* sap =
+      dynamic_cast<Gaudi::Property<std::vector<std::string>>*>(&prop);
+  if (!sap) {
+    std::cerr << "could not dcast " << prop.name()
+              << " to a Gaudi::Property<std::vector<std::string>> (which it "
+                 "should be!)"
+              << std::endl;
   }
   else {
-    m_doSuppress = m_suppress.value();
+    for (auto& i : sap->value()) setOutputLevel(i, ic);
   }
 }
 
-//#############################################################################
-/// Finalize Service
-StatusCode TrigMessageSvc::finalize() {
-
-  m_running = false;
-  m_doSuppress = false;
-  resetMsgStats();  // to get the final total sum
-  reportMsgStats(m_statLevel.value(),true);
-  m_state = Gaudi::StateMachine::OFFLINE;
-  return StatusCode::SUCCESS;
-}
-
-
-//#############################################################################
-/// Report message counts
-void TrigMessageSvc::reportMsgStats(uint statLevel, bool total) {
-
+StatusCode TrigMessageSvc::finalize()
+{
+  m_suppress = false;
   std::ostringstream os;
 
   if (m_stats) {
-    os << "Summarizing all message counts";
-    if (!total){
-      const EventInfo* pEvent(0);
-      if ( m_evtStore->retrieve(pEvent).isSuccess() ) {
-        os  << " for run " << pEvent->event_ID()->run_number();
-      }
-    }	
-    os << " (severity >= " << levelNames[statLevel] << ")" << endl;
-  } else {
-    os << "Listing sources of suppressed message: " << endl;
+    os << "Summarizing all message counts"
+       << " (severity >= " << levelNames[m_statLevel] << ")" << std::endl;
+  }
+  else {
+    os << "Listing sources of suppressed message: " << std::endl;
   }
 
-  os << "==========================================================" << endl;
-  os << " Message Source                   |   Level |    Count" << endl;
-  os << "----------------------------------+---------+-------------" << endl;
+  os << "=====================================================" << std::endl;
+  os << " Message Source              |   Level |    Count" << std::endl;
+  os << "-----------------------------+---------+-------------" << std::endl;
 
   bool found(false);
 
-  std::map<std::string,msgAry>::const_iterator itr = m_sourceMap.begin();
-  std::map<std::string,msgAry>::const_iterator enditr = m_sourceMap.end();
-
-  if (total) {
-    itr = m_sourceMapTotal.begin();
-    enditr = m_sourceMapTotal.end();
-  }
-  
-  for (; itr!=enditr; ++itr) {
+  for (auto itr = m_sourceMap.begin(); itr != m_sourceMap.end(); ++itr) {
     for (unsigned int ic = 0; ic < MSG::NUM_LEVELS; ++ic) {
-      if ( (m_suppress.value() && itr->second.msg[ic] >= abs(m_msgLimit[ic]) && m_msgLimit[ic] != 0 ) || 
-	   (m_stats && itr->second.msg[ic] > 0 && ic >= statLevel) ) {
-	os << " ";
-	os.width(33);
-	os.setf(ios_base::left,ios_base::adjustfield);
-	os << itr->first;
-
-	os << "|";
-
-	os.width(8);
-	os.setf(ios_base::right,ios_base::adjustfield);
-	os << levelNames[ic];
-
-	os << " |";
-
-	os.width(9);
-	os << itr->second.msg[ic];	
-
-	os << endl;
-
-	found = true;
+      if ((m_suppress && itr->second.msg[ic] >= abs(m_msgLimit[ic]) && m_msgLimit[ic] != 0) ||
+          (m_stats && itr->second.msg[ic] > 0 && ic >= m_statLevel.value())) {
+        os << " ";
+        os.width(28);
+        os.setf(std::ios_base::left, std::ios_base::adjustfield);
+        os << itr->first;
+        os << "|";
+
+        os.width(8);
+        os.setf(std::ios_base::right, std::ios_base::adjustfield);
+        os << levelNames[ic];
+        os << " |";
+
+        os.width(9);
+        os << itr->second.msg[ic];
+        os << std::endl;
+
+        found = true;
       }
     }
   }
-  os << "==========================================================" << endl;
-
+  os << "=====================================================" << std::endl;
   if (found || m_stats) {
     reportMessage(name(), MSG::INFO, os.str());
   }
-}
-
-//#############################################################################
-std::string TrigMessageSvc::colTrans(std::string col, int offset) {
-  ColorMap::const_iterator itr = m_colMap.find(col);
-  int icol;
-  if (itr != m_colMap.end()) {
-    icol = offset + itr->second;
-  } else {
-    icol = offset + 8;
-  }
-  std::ostringstream os1;
-      
-  os1 << icol;
-
-  return os1.str();
 
+  return StatusCode::SUCCESS;
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: reportMessage
-// Purpose: dispatches a message to the relevant streams.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::reportMessage( const Message& msg, int outputLevel )    {
+void TrigMessageSvc::reportMessage(const Message& msg, int outputLevel)
+{
+  std::unique_lock<std::recursive_mutex> lock(m_reportMutex);
+  i_reportMessage(msg, outputLevel);
+}
 
-  pthread_mutex_lock(&msgsvcmutex);
-  int key = msg.getType();
+/**
+ *  Internal implementation of reportMessage(const Message&,int) without lock.
+ */
+void TrigMessageSvc::i_reportMessage(const Message& msg, int outputLevel)
+{
+  const int key = msg.getType();
   ++m_msgCount[key];
 
-  // Publish message statistics if enabled and only while RUNNING
-  if ( m_publishStats && m_running && key>=static_cast<int>(m_publishLevel) ) {
-    m_msgCountHist->Fill(key-m_publishLevel, 1);
-    { // Adding bins on the fly needs to be protected by mutex
-      scoped_lock_histogram lock;
-      m_msgCountSrcHist->Fill(key-m_publishLevel, msg.getSource().c_str(), 1);
-      m_msgCountSrcHist->LabelsDeflate("Y");
-    }
-  }
+  const Message* cmsg = &msg;
 
-  const Message *cmsg = &msg;
+  if (m_doSuppress || m_stats.value()) {
 
-  if ( m_doSuppress || m_stats.value() ) {
-    int nmsg;    
-    std::map<std::string,msgAry>::iterator itr = m_sourceMap.find(msg.getSource());
-    if ( itr != m_sourceMap.end() ) {
-      nmsg = ++(itr->second.msg[key]);
-    }
-    else {
-      msgAry A;
-      for (int i=0; i<MSG::NUM_LEVELS; ++i) A.msg[i] = 0;
-      A.msg[key] = 1;
-      m_sourceMap[msg.getSource()] = A;
-      nmsg = 1;
-    }
-    
+    // Increase the counter of 'key' type of messages for the source and
+    // get the new value.
+    int nmsg = ++(m_sourceMap[msg.getSource()].msg[key]);
+
+    const int msgLimit = m_msgLimit[key].value();
     if (m_doSuppress) {
-      const int msgLimit = m_msgLimit[key].value();
-      
-      if ( msgLimit > 0 ) {         // regular suppression
-	if (nmsg == msgLimit) {
-          std::ostringstream os;
-          os << levelNames[key] << " message limit (" << msgLimit << ") reached for "
-             << msg.getSource() + ". Suppressing further output.";
-	  cmsg = new Message(msg.getSource(), MSG::WARNING, os.str());
-	  cmsg->setFormat(msg.getFormat());
-          cmsg->setTimeFormat(msg.getTimeFormat());
-	}
-        else if (nmsg > msgLimit) {
-          pthread_mutex_unlock(&msgsvcmutex);
-          return;
+      if (msgLimit > 0) { // regular suppression
+        if (nmsg > msgLimit) return;
+        if (nmsg == msgLimit) {
+          std::string txt = levelNames[key] + " message limit (" + std::to_string(msgLimit) +
+                            ") reached for " + msg.getSource() + ". Suppressing further output.";
+          cmsg = new Message(msg.getSource(), MSG::WARNING, std::move(txt));
         }
       }
-      else if ( msgLimit < 0 ) {    // logarithmic suppression
-
-        // Use source/level/message as identifier and calculate hash
-        const unsigned int msgKey = msgHash(*cmsg);
-        MsgCountMap::iterator itr = m_msgCountMap.find(msgKey);
-        
-        // Check if we saw this message already and increase counter
-        if (itr != m_msgCountMap.end())
-          nmsg = ++itr->second;
-        else
-          nmsg = m_msgCountMap[msgKey] = 1;
-
-        if ( nmsg == abs(msgLimit) ) {
+    }
+    else if (msgLimit < 0) { // logarithmic suppression
+      // Calculate message hash
+      const unsigned int mh = msgHash(*cmsg);
+      // Check if we saw this message already and increase counter
+      auto m = m_msgHashCount.find(mh);
+      if (m != m_msgHashCount.end()) {
+        nmsg = ++m->second;
+      }
+      else {
+        nmsg = m_msgHashCount[mh] = 1;
+      }
+      if (nmsg == abs(msgLimit)) {
+        std::ostringstream os;
+        os << msg.getMessage() << " [Message limit (" << abs(msgLimit)
+           << ") reached. Log-suppression of further output.]";
+        cmsg = new Message(msg.getSource(), msg.getType(), os.str());
+      }
+      else if (nmsg > abs(msgLimit)) {
+        const int everyNth = (int)exp10((int)log10(nmsg));
+        if ((nmsg % everyNth) == 0) {
           std::ostringstream os;
-          os << msg.getMessage() << " [Message limit (" << abs(msgLimit)
-             << ") reached. Log-suppression of further output.]";
+          os << msg.getMessage() << " [suppressed " << everyNth << " similar messages]";
           cmsg = new Message(msg.getSource(), msg.getType(), os.str());
-          cmsg->setFormat(msg.getFormat());
-          cmsg->setTimeFormat(msg.getTimeFormat());
-        }
-        else if ( nmsg > abs(msgLimit) ) {          
-          const int everyNth = (int)exp10((int)log10(nmsg));
-          if ((nmsg % everyNth)==0) {
-            std::ostringstream os;
-            os << msg.getMessage() << " [suppressed " << everyNth << " similar messages]";
-            cmsg = new Message(msg.getSource(), msg.getType(), os.str());
-            cmsg->setFormat(msg.getFormat());
-            cmsg->setTimeFormat(msg.getTimeFormat());
-          }
-          else {
-            pthread_mutex_unlock(&msgsvcmutex);
-            return;
-          }
         }
       }
     }
-  }   // suppression
-
-  // Optional message trailer (ignored in hash)
-  std::ostringstream msgTrailer;
-
-  // Avoid recursion in case StoreGateSvc::retrieve prints a message
-  if ( m_canEnter ) {
-    m_canEnter = false;
-    if ( m_running &&
-         key >= static_cast<int>(m_eventIDLevel.value()) &&
-         m_evtStore.retrieve().isSuccess() ) {
-      const EventInfo* pEvent(0);
-      if ( m_evtStore->retrieve(pEvent).isSuccess() ) {
-        // Add EventID
-        msgTrailer << " " << *pEvent->event_ID();
-      }
-    }
-    m_canEnter = true;
   }
 
-  StreamMap::const_iterator first = m_streamMap.lower_bound( key );
-  if ( first != m_streamMap.end() ) {
-    StreamMap::const_iterator last = m_streamMap.upper_bound( key );
-    while( first != last ) {
-      std::ostream& stream = *( (*first).second.second );
-      stream << *cmsg << msgTrailer.str() << std::endl;
-      ++first;
+  // Print the message
+  if (key >= outputLevel) {
+    if (m_eventIDLevel != MSG::NIL && key >= static_cast<int>(m_eventIDLevel)) {
+      cmsg->setFormat(m_defaultFormat + " %E");
     }
-  }
-  else if ( key >= outputLevel )   {
-    cmsg->setFormat(m_defaultFormat);
-    cmsg->setTimeFormat(m_defaultTimeFormat);
-    std::ostringstream out_string_stream ;
-    if (!m_color) {
-      (out_string_stream) << *cmsg << msgTrailer.str();
-    } else {
-      (out_string_stream) <<  m_logColorCodes[key] << *cmsg << msgTrailer.str() << "\033[m" ;
+    else {
+      cmsg->setFormat(m_defaultFormat);
     }
+    cmsg->setTimeFormat(m_defaultTimeFormat);
+    (*m_defaultStream) << *cmsg << std::endl << std::flush;
 
-    bool useERS = passErsFilter(cmsg->getSource(), m_useERS[key]);
-    
-    if ( m_alwaysUseMsgStream.value() || !useERS ) {
-      // output to the default stream
-      (*m_defaultStream) << out_string_stream.str() << std::endl << std::flush;
+    // ERS forwarding
+    if (passErsFilter(cmsg->getSource(), m_useERS[key])) {
+      i_reportERS(*cmsg);
     }
+  }
 
-    // output to ERS
-    if (useERS) {
-      
-      /*
-       * Create ERS context object
-       *
-       * The (cross-node) MRS throttling is based on filename+line_number, i.e. ignoring
-       * the message text itself. We therefor use the message source as filename and the
-       * message hash as line_number. That way the same message from different nodes
-       * gets properly throttled by MRS.
-       */
-      const char* filename = cmsg->getSource().c_str();
-      unsigned int line_number = msgHash(*cmsg);
-      const char* function_name = filename;
-      const char* package_name = "HLT";
-      ers::LocalContext hlt_context_info(package_name, filename, line_number, function_name);
-
-      /*
-       * Create ERS issue object
-       *
-       * Add the source to the ERS message text. Otherwise the source is not visible
-       * in the MRS monitor, for example.
-       * The "HLT" qualifier can be used to filter ERS messages from the log file.
-       */
-      ers::HLTMessage ersMsg(hlt_context_info, cmsg->getSource() + ": " +  cmsg->getMessage() + msgTrailer.str());
-      ersMsg.add_qualifier("HLT");   // used for filtering
-      
-      // forward Gaudi message to ERS
-      switch (key) {
-        case MSG::NIL:      ers::debug( ersMsg, 3 ); break;
-        case MSG::VERBOSE:  ers::debug( ersMsg, 2 ); break;
-        case MSG::DEBUG:    ers::debug( ersMsg, 1 ); break;
-        case MSG::INFO:     ers::info( ersMsg );     break;
-        case MSG::WARNING:  ers::warning( ersMsg );  break;
-        case MSG::ERROR:    ers::error( ersMsg );    break;
-        case MSG::FATAL:    ers::fatal( ersMsg );    break;
-        default:
-          std::ostringstream internal_msg ;
-          internal_msg << "ERROR: Unknown message severity level: " << key ;
-          ers::error( ers::HLTMessage(ERS_HERE,internal_msg.str()) );
-      }
-    }
+  if (cmsg != &msg) {
+    delete cmsg;
   }
-  
-  if (cmsg != &msg) { delete cmsg; }
-  pthread_mutex_unlock(&msgsvcmutex);
 }
 
-
-void TrigMessageSvc::reportMessage( const Message& msg )
+/**
+ * Report message to online messaging system (ERS)
+ */
+void TrigMessageSvc::i_reportERS(const Message& msg) const
 {
-  reportMessage(msg, outputLevel(msg.getSource()));
-}
-
-void TrigMessageSvc::reportMessage (const char* source,
-                                int type,
-                                const char* message) {
-  Message msg( source, type, message);
-  reportMessage( msg );
-}
-
-
-void TrigMessageSvc::reportMessage (const std::string& source,
-                                int type,
-                                const std::string& message) {
-  Message msg( source, type, message);
-  reportMessage( msg );
-}
-
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: sendMessage
-// Purpose: finds a message for a given status code and dispatches it.
-// ---------------------------------------------------------------------------
-//
+  /*
+   * Create ERS context object
+   *
+   * The (cross-node) MRS throttling is based on filename+line_number, i.e.
+   * ignoring the message text itself. We therefor use the message source as
+   * filename and the message hash as line_number. That way the same message
+   * from different nodes gets properly throttled by MRS.
+   */
+  const char* filename = msg.getSource().c_str();
+  const char* function_name = "";
+  const int line_number = msgHash(msg);
+  const char* package_name = "HLT";
+  ers::LocalContext hlt_context_info(package_name, filename, line_number, function_name);
 
-void TrigMessageSvc::reportMessage (const StatusCode& key,
-                                const std::string& source)
-{  
-  pthread_mutex_lock(&msgsvcmutex);
-  MessageMap::const_iterator first = m_messageMap.lower_bound( key );
-  if ( first != m_messageMap.end() ) {
-    MessageMap::const_iterator last = m_messageMap.upper_bound( key );
-    while( first != last ) {
-      Message msg = (*first).second;
-      msg.setSource( source );
-      std::ostringstream os1;
-      os1 << "Status Code " << key.getCode() << std::ends;
-      Message stat_code1( source, msg.getType(), os1.str() );
-      reportMessage( stat_code1 );
-      reportMessage( msg );
-      ++first;
-    }
+  // Create ERS issue object
+  Message m(msg);
+  if (m_eventIDLevel != MSG::NIL && msg.getType() >= static_cast<int>(m_eventIDLevel)) {
+    m.setFormat(m_ersFormat + " %E");
   }
   else {
-    Message mesg = m_defaultMessage;
-    mesg.setSource( source );
-      std::ostringstream os2;
-    os2 << "Status Code " << key.getCode() << std::ends;
-    Message stat_code2( source,  mesg.getType(), os2.str() );
-    reportMessage( stat_code2 );
-    reportMessage( mesg );
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: insertStream
-// Purpose: inserts a stream for a message type.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::insertStream (int key,
-                               const std::string& name,
-                               std::ostream *stream)
+    m.setFormat(m_ersFormat);
+  }
+  std::ostringstream oss;
+  oss << m;
+  ers::HLTMessage ersMsg(hlt_context_info, oss.str());
+  ersMsg.add_qualifier("HLT"); // useful for filtering
+
+  // Forward Message to ERS
+  switch (msg.getType()) {
+  case MSG::NIL: break;
+  case MSG::VERBOSE: ers::debug(ersMsg, 2); break;
+  case MSG::DEBUG: ers::debug(ersMsg, 1); break;
+  case MSG::INFO: ers::info(ersMsg); break;
+  case MSG::WARNING: ers::warning(ersMsg); break;
+  case MSG::ERROR: ers::error(ersMsg); break;
+  case MSG::FATAL: ers::fatal(ersMsg); break;
+  default:
+    std::ostringstream oss;
+    oss << "Unknown message severity level: " << msg.getType() << " Original message was: " << m;
+    ers::error(ers::HLTMessage(ERS_HERE, oss.str()));
+  }
+}
+
+void TrigMessageSvc::reportMessage(const Message& msg)
 {
-  typedef StreamMap::value_type value_type;
-  pthread_mutex_lock(&msgsvcmutex);  
-  m_streamMap.insert( value_type( key, NamedStream(name,stream) ) );
-  pthread_mutex_unlock(&msgsvcmutex);
+  reportMessage(msg, outputLevel(msg.getSource()));
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseStream
-// Purpose: erases all the streams for all the message types.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseStream()
+void TrigMessageSvc::reportMessage(const char* source, int type, const char* message)
 {
-  pthread_mutex_lock(&msgsvcmutex);
-  m_streamMap.erase( m_streamMap.begin(), m_streamMap.end() );
-  pthread_mutex_unlock(&msgsvcmutex);
+  reportMessage(Message{source, type, message});
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseStream
-// Purpose: erases all the streams for a message type.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseStream( int message_type )
+void TrigMessageSvc::reportMessage(const std::string& source, int type, const std::string& message)
 {
-  pthread_mutex_lock(&msgsvcmutex);
-  m_streamMap.erase( message_type );
-  pthread_mutex_unlock(&msgsvcmutex);
+  reportMessage(Message{source, type, message});
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseStream
-// Purpose: erases one stream for a message type.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseStream( int key, std::ostream* stream )   {
-  pthread_mutex_lock(&msgsvcmutex);
-  if ( 0 != stream )    {
-    bool changed = true;
-    while( changed ) {
-      changed = false;
-      StreamMap::iterator first = m_streamMap.lower_bound( key );
-      StreamMap::iterator last = m_streamMap.upper_bound( key );
-      while( first != last ) {
-        if ( (*first).second.second == stream ) {
-          m_streamMap.erase( first );
-          changed = true;
-          break;
-        }
-      }
-    }      
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseStream
-// Purpose: erases one stream for all message types.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseStream( std::ostream* stream )    {
-  pthread_mutex_lock(&msgsvcmutex);
-  if ( 0 != stream )    {
-    bool changed = true;
-    while( changed ) {
-      changed = false;
-      StreamMap::iterator first = m_streamMap.begin();
-      while( first != m_streamMap.end() ) {
-        if ( (*first).second.second == stream ) {
-          m_streamMap.erase( first );
-          changed = true;
-          break;
-        }
-      }
-    }      
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: insertMessage
-// Purpose: inserts a message for a status code.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::insertMessage( const StatusCode& key, const Message& msg )
+int TrigMessageSvc::outputLevel() const
 {
-  typedef MessageMap::value_type value_type;
-  pthread_mutex_lock(&msgsvcmutex);  
-  m_messageMap.insert( value_type( key, msg ) );
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseMessage
-// Purpose: erases all the messages for all the status codes.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseMessage()
-{
-  pthread_mutex_lock(&msgsvcmutex);  
-  m_messageMap.erase( m_messageMap.begin(), m_messageMap.end() );
-  pthread_mutex_unlock(&msgsvcmutex);
+  return m_outputLevel;
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseMessage
-// Purpose: erases all the messages for a status code.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseMessage( const StatusCode& key )
+int TrigMessageSvc::outputLevel(const std::string& source) const
 {
-  pthread_mutex_lock(&msgsvcmutex);
-  m_messageMap.erase( key );
-  pthread_mutex_unlock(&msgsvcmutex);
+  std::unique_lock<std::recursive_mutex> lock(m_thresholdMapMutex);
+  auto it = m_thresholdMap.find(source);
+  return it != m_thresholdMap.end() ? it->second : m_outputLevel.value();
 }
 
-//#############################################################################
-// ---------------------------------------------------------------------------
-// Routine: eraseMessage
-// Purpose: erases one message for a status code.
-// ---------------------------------------------------------------------------
-//
-
-void TrigMessageSvc::eraseMessage( const StatusCode& key, const Message& msg )
+void TrigMessageSvc::setOutputLevel(int new_level)
 {
-  pthread_mutex_lock(&msgsvcmutex);
-  bool changed = true;
-  while( changed ) {
-    changed = false;
-    MessageMap::iterator first = m_messageMap.lower_bound( key );
-    MessageMap::iterator last = m_messageMap.upper_bound( key );
-    while( first != last ) {
-      const Message& message = (*first).second;
-      if ( message == msg ) {
-        m_messageMap.erase( first );
-        changed = true;
-        break;
-      }
-    }      
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-// ---------------------------------------------------------------------------
-int TrigMessageSvc::outputLevel()   const {
-// ---------------------------------------------------------------------------
-  return m_outputLevel;
-}
-// ---------------------------------------------------------------------------
-int TrigMessageSvc::outputLevel( const std::string& source )   const {
-// ---------------------------------------------------------------------------
-  ThresholdMap::const_iterator it;
-
-  pthread_mutex_lock(&msgsvcmutex);
-  it = m_thresholdMap.find( source );
-  int level;
-
-  if( it != m_thresholdMap.end() ) {
-    level = (*it).second;
-  }
-  else {
-    level = m_outputLevel;
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
-  return level;
-}
-
-// ---------------------------------------------------------------------------
-void TrigMessageSvc::setOutputLevel(int new_level)    {
-// ---------------------------------------------------------------------------
-  pthread_mutex_lock(&msgsvcmutex);  
   m_outputLevel = new_level;
-  pthread_mutex_unlock(&msgsvcmutex);
-}
-
-// ---------------------------------------------------------------------------
-void TrigMessageSvc::setOutputLevel(const std::string& source, int level)    {
-// ---------------------------------------------------------------------------
-  // Ignore in case we enforce the global OutputLevel
-  if (m_forceOutputLevel.value()) return;
-  
-  pthread_mutex_lock(&msgsvcmutex);
-  std::pair<ThresholdMap::iterator, bool> p;
-  p = m_thresholdMap.insert(ThresholdMap::value_type( source, level) );
-  if( p.second == false ) {
-    // Already existing an output level for that source. Erase and enter it again
-    m_thresholdMap.erase ( p.first );
-    m_thresholdMap.insert(ThresholdMap::value_type( source, level) );
-  }
-  pthread_mutex_unlock(&msgsvcmutex);
 }
 
+void TrigMessageSvc::setOutputLevel(const std::string& source, int level)
+{
+  std::unique_lock<std::recursive_mutex> lock(m_thresholdMapMutex);
 
-// ---------------------------------------------------------------------------
-void TrigMessageSvc::setOutputLevelViaJobOptSvc() {
-// ---------------------------------------------------------------------------
-  ServiceHandle<IJobOptionsSvc> jobOptSvc("JobOptionsSvc", name());    
-  if ( jobOptSvc.retrieve()==StatusCode::FAILURE ) {
-    reportMessage(name(), MSG::ERROR, "Cannot retrieve JobOptionsSvc");
-    return;
+  // only write if we really have to...
+  auto i = m_thresholdMap.find(source);
+  if (i == m_thresholdMap.end()) {
+    m_thresholdMap[source] = level;
   }
-
-  std::vector<std::string> clients = jobOptSvc->getClients();
-  std::vector<std::string>::iterator cl;
-  std::vector<const Property*>::const_iterator pr;
-  
-  // Loop over all clients/properties and set OutputLevel accordingly
-  for (cl=clients.begin(); cl!=clients.end(); ++cl) {
-    const std::vector<const Property*> *props = jobOptSvc->getProperties(*cl);
-    for (pr=props->begin(); pr!=props->end(); ++pr) {
-      if ( (*pr)->name()=="OutputLevel" ) {        
-        if ( jobOptSvc->addPropertyToCatalogue(*cl, m_outputLevel).isSuccess() ){
-          std::ostringstream msg;
-          msg << "Setting " << (*pr)->name() << ".OutputLevel = " << m_outputLevel.value();
-          reportMessage(name(), MSG::DEBUG, msg.str());
-        }
-        else {
-          std::ostringstream msg;
-          msg << "Cannot set " << (*pr)->name() << ".OutputLevel";
-          reportMessage(name(), MSG::WARNING, msg.str());
-        }
-      }
-    }
+  else if (i->second != level) {
+    i->second = level;
   }
 }
-                                                               
-// ---------------------------------------------------------------------------
-void TrigMessageSvc::resetOutputLevels()    {
-// ---------------------------------------------------------------------------
-  m_thresholdMap.clear();  
-}
 
-// ---------------------------------------------------------------------------
-std::string TrigMessageSvc::getLogColor(int logLevel) const   {
-// ---------------------------------------------------------------------------
-  if (logLevel < MSG::NUM_LEVELS) {
-    return m_logColorCodes[logLevel];
-  } else {
-    return "";
-  }
+void TrigMessageSvc::resetOutputLevels()
+{
+  std::unique_lock<std::recursive_mutex> lock(m_thresholdMapMutex);
+  m_thresholdMap.clear();
 }
 
-// ---------------------------------------------------------------------------
-int TrigMessageSvc::messageCount( MSG::Level level) const   {
+int TrigMessageSvc::messageCount(MSG::Level level) const
+{
   return m_msgCount[level];
 }
-// ---------------------------------------------------------------------------
 
-
-// ---------------------------------------------------------------------------
-// Calculate message hash (ignoring any numbers)
-// ---------------------------------------------------------------------------
-unsigned int TrigMessageSvc::msgHash(const Message& msg)
+bool TrigMessageSvc::passErsFilter(const std::string& source,
+                                   const std::vector<std::string>& filter) const
 {
-  // Message type is lowest decimal
-  unsigned int hash = msg.getType();
-  
-  // Add all characters of source
-  const std::string& src = msg.getSource();
-  for (size_t i=0; i<src.length(); ++i) {
-    hash += 10*(int)src[i];
-  }
+  if (filter.empty()) return false; // forward none
+  auto it = filter.begin();
+  if (filter.size() == 1 && (*it) == "*") return true; // forward all
 
-  // Add all letters of message
-  const std::string& str = msg.getMessage();
-  for (size_t i=0; i<str.length(); ++i) {
-    const char& ch = str[i];
-    if (ch<',' || ch>'9') hash += 10*(int)ch;
+  bool pass(false);
+  for (; it != filter.end(); ++it) {
+    if ((*it) == "*") pass = true;           // forward except if there is a veto later
+    if (source == (*it)) return true;        // forward specific source
+    if ("!" + source == (*it)) return false; // veto specific source
   }
-     
-  return hash;
+  return pass;
 }
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.h b/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.h
index b64914f57314..3791d6b1aeee 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.h
+++ b/HLT/Trigger/TrigControl/TrigServices/src/TrigMessageSvc.h
@@ -1,31 +1,33 @@
 /*
   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef TRIGSERVICES_TRIGMESSAGESVC_H
 #define TRIGSERVICES_TRIGMESSAGESVC_H
 
 // Include files
+#include <iosfwd>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <set>
 #include <string>
 #include <vector>
-#include <map>
 
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/Service.h"
-#include "GaudiKernel/ServiceHandle.h"
+#include "CxxUtils/checker_macros.h"
 #include "GaudiKernel/IMessageSvc.h"
-#include "GaudiKernel/IIncidentListener.h"
 #include "GaudiKernel/Message.h"
 #include "GaudiKernel/Property.h"
-
-#include "StoreGate/StoreGateSvc.h"
+#include "GaudiKernel/Service.h"
+#include "GaudiKernel/StatusCode.h"
 
 #include "TrigKernel/ITrigMessageSvc.h"
 
+// Helper to mark some virtual methods as not supported
+#define NOTSUPPORTED                                                                               \
+  throw std::logic_error(std::string(__func__) + " is not supported by TrigMessageSvc")
+
 // Forward declarations
 class ISvcLocator;
-class TH1I;
-class TH2I;
 
 /**@class TrigMessageSvc
  * @brief MessageSvc used by the HLT applications
@@ -44,172 +46,147 @@ class TH2I;
  *
  * @author    Iain Last, Werner Wiedenmann, Frank Winklmeier
  */
+class TrigMessageSvc : public extends<Service, IMessageSvc, ITrigMessageSvc> {
+public:
+  typedef std::map<std::string, int> ThresholdMap;
+
+  TrigMessageSvc(const std::string& name, ISvcLocator* svcloc);
 
-class TrigMessageSvc : public extends<Service,IMessageSvc,ITrigMessageSvc,IIncidentListener> {
-public:  
-  typedef std::pair< std::string, std::ostream* > NamedStream;
-  typedef std::multimap< int, NamedStream > StreamMap;
-  typedef std::multimap< StatusCode, Message > MessageMap;
-  typedef std::map< std::string, int > ThresholdMap;
-  
-  // Default constructor.
-  TrigMessageSvc( const std::string& name, ISvcLocator* svcloc );
-  // Destructor.
-  virtual ~TrigMessageSvc();
-
-  // Implementation of IService::reinitialize()
   virtual StatusCode reinitialize() override;
-  // Implementation of IService::initialize()
   virtual StatusCode initialize() override;
-  // Implementation of IService::finalize()
   virtual StatusCode finalize() override;
 
-  // Implementation of IMessageSvc::reportMessage()
-  virtual void reportMessage( const Message& message ) override;
-
-  // Implementation of IMessageSvc::reportMessage()
-  virtual void reportMessage( const Message& message, int outputLevel ) override;
-
-  // Implementation of IMessageSvc::reportMessage()
-  virtual void reportMessage( const StatusCode& code, const std::string& source = "") override;
-
-  // Implementation of IMessageSvc::reportMessage()
-  virtual void reportMessage( const char* source, int type, const char* message) override;
-
-  // Implementation of IMessageSvc::reportMessage()
-  virtual void reportMessage( const std::string& source, int type, const std::string& message) override;
-  
-  // Implementation of IMessageSvc::insertMessage()
-  virtual void insertMessage( const StatusCode& code, const Message& message ) override;
-
-  // Implementation of IMessageSvc::eraseMessage()
-  virtual void eraseMessage() override;
-
-  // Implementation of IMessageSvc::eraseMessage()
-  virtual void eraseMessage( const StatusCode& code ) override;
-
-  // Implementation of IMessageSvc::eraseMessage()
-  virtual void eraseMessage( const StatusCode& code, const Message& message ) override;
-
-  // Implementation of IMessageSvc::insertStream()
-  virtual void insertStream( int message_type, const std::string& name, std::ostream* stream ) override;
-  
-  // Implementation of IMessageSvc::eraseStream()
-  virtual void eraseStream() override;
-  
-  // Implementation of IMessageSvc::eraseStream()
-  virtual void eraseStream( int message_type ) override;
-  
-  // Implementation of IMessageSvc::eraseStream()
-  virtual void eraseStream( int message_type, std::ostream* stream ) override;
-
-  // Implementation of IMessageSvc::eraseStream()
-  virtual void eraseStream( std::ostream* stream ) override;
-
-  // Implementation of IMessageSvc::desaultStream()
-  virtual std::ostream* defaultStream() const override {
-    return m_defaultStream; 
+  virtual void reportMessage(const Message& message) override;
+  virtual void reportMessage(const Message& msg, int outputLevel) override;
+  virtual void reportMessage(const char* source, int type, const char* message) override;
+  virtual void reportMessage(const std::string& source, int type,
+                             const std::string& message) override;
+  virtual std::ostream* defaultStream ATLAS_NOT_THREAD_SAFE() const override
+  {
+    return m_defaultStream;
   }
 
-  // Implementation of IMessageSvc::setDefaultStream()
-  virtual void setDefaultStream( std::ostream* stream ) override {
+  virtual void setDefaultStream(std::ostream* stream) override
+  {
+    std::unique_lock<std::recursive_mutex> lock(m_reportMutex);
     m_defaultStream = stream;
   }
 
-  // Implementation of IMessageSvc::ouputLevel()
-  virtual int outputLevel()   const override;
-
-  // Implementation of IMessageSvc::ouputLevel()
-  virtual int outputLevel(const std::string& source)   const override;
-
-  // Implementation of IMessageSvc::setOuputLevel()
+  virtual int outputLevel() const override;
+  virtual int outputLevel(const std::string& source) const override;
   virtual void setOutputLevel(int new_level) override;
-
-  // Implementation of IMessageSvc::setOuputLevel()
   virtual void setOutputLevel(const std::string& source, int new_level) override;
-
-  // Implementation of IMessageSvc::useColor()
-  virtual bool useColor() const override { return m_color; }
-
-  // Implementation of IMessageSvc::getLogColor()
-  virtual std::string getLogColor(int logLevel) const override;
-
-  // Implementation of IMessageSvc::messageCount()
-  virtual int messageCount( MSG::Level logLevel ) const override;
- 
-  /// \name ITrigMessageSvc implementation
-  //@{
-  /// Reset all individual output levels
+  virtual int messageCount(MSG::Level logLevel) const override;
   virtual void resetOutputLevels() override;
-  //@}
 
-  // Implemenation of IIncidentListener::handle()
-  virtual void handle(const Incident& inc) override;
+  virtual bool useColor() const override { return m_color; }
+  virtual std::string getLogColor(int) const override { return ""; }
+
+  ///@{ Not supported by this implementation
+  virtual void reportMessage(const StatusCode&, const std::string&) override { NOTSUPPORTED; }
+  virtual void insertMessage(const StatusCode&, const Message&) override { NOTSUPPORTED; }
+  virtual void eraseMessage() override { NOTSUPPORTED; }
+  virtual void eraseMessage(const StatusCode&) override { NOTSUPPORTED; }
+  virtual void eraseMessage(const StatusCode&, const Message&) override { NOTSUPPORTED; }
+  virtual void insertStream(int, const std::string&, std::ostream*) override { NOTSUPPORTED; }
+  virtual void eraseStream() override { NOTSUPPORTED; }
+  virtual void eraseStream(int) override { NOTSUPPORTED; }
+  virtual void eraseStream(int, std::ostream*) override { NOTSUPPORTED; }
+  virtual void eraseStream(std::ostream*) override { NOTSUPPORTED; }
+  ///@}
 
 private:
-  typedef std::map<std::string, MSG::Color> ColorMap;
-  typedef std::map< unsigned int, unsigned int > MsgCountMap;
-  
-  std::ostream* m_defaultStream;      ///< Pointer to the output stream.
-  Message m_defaultMessage;           ///< Default Message
-  StreamMap m_streamMap;              ///< Stream map
-  MessageMap m_messageMap;            ///< Message map
-  ThresholdMap m_thresholdMap;        ///< Output level threshold map
-  std::string m_defaultFormat;        ///< Default format for the messages
-  std::string m_defaultTimeFormat;    ///< Default time format for the messages
-  int m_defaultLimit;                 ///< Original default message limit
-  bool m_doSuppress;                  ///< Message suppression currently active?
-  bool m_running;                     ///< In RUNNING state
-  bool m_canEnter;                    ///< used to avoid infinite recursions
-  
-  ServiceHandle<StoreGateSvc> m_evtStore;   ///< Event store
-  
-  /* Properties */
-  StringArrayProperty m_thresholdProp[MSG::NUM_LEVELS];
-  StringArrayProperty m_logColors[MSG::NUM_LEVELS];
-  UnsignedIntegerProperty m_statLevel;
-  UnsignedIntegerProperty m_statLevelRun;
-  UnsignedIntegerProperty m_publishLevel;
-  UnsignedIntegerProperty m_eventIDLevel;
-  IntegerProperty m_msgLimit[MSG::NUM_LEVELS];
-  BooleanProperty m_color;
-  BooleanProperty m_stats;
-  BooleanProperty m_publishStats;
-  BooleanProperty m_resetStats;
-  StringArrayProperty m_useERS[MSG::NUM_LEVELS];
-  BooleanProperty m_alwaysUseMsgStream;
-  BooleanProperty m_useErsRunningOnly;  
-  BooleanProperty m_suppress;
-  BooleanProperty m_suppressRunningOnly;
-  BooleanProperty m_forceOutputLevel;
-  
-  /* Message colors */
-  std::string m_logColorCodes[MSG::NUM_LEVELS];
-  std::string colTrans(std::string, int);
-  ColorMap m_colMap;
-
-  /* Message counting */
-  struct msgAry { int msg[MSG::NUM_LEVELS]; };
-  std::map<std::string, msgAry> m_sourceMap;      ///< Current message counting per source
-  std::map<std::string, msgAry> m_sourceMapTotal; ///< Total message counting per source
-  int m_msgCount[MSG::NUM_LEVELS];                ///< Message counting per level
-  MsgCountMap m_msgCountMap;                      ///< Message counting per message
-  TH1I* m_msgCountHist;                           ///< Message counting per level histogram
-  TH2I* m_msgCountSrcHist;                        ///< Message counting per message source
-
-  /* Update handlers */
-  void initColors(Property& prop);
-  void setupColors(Property& prop);
-  void setupLimits(Property& prop);
-  void setupThreshold(Property& prop);
-  void setupSuppression(Property& prop);
-  
-  unsigned int msgHash(const Message& msg);   ///< Hash of message (for log. suppression)
-  void resetMsgStats();                       ///< Reset message statistics
-  void reportMsgStats(uint statLevel, bool total=false);        ///< Report message statistics
-  void setOutputLevelViaJobOptSvc();          ///< Change OutputLevel properties in JobOptionsSvc
-  void bookHistograms();                      ///< Book histograms for message statistics
-  bool passErsFilter(const std::string& source, const std::vector<std::string>& filter);  ///< Source passes ERS filter?
+  //////////////////////////////////////////////////////////////////////
+  // Properties
+  //////////////////////////////////////////////////////////////////////
+  Gaudi::Property<std::string> m_defaultFormat{this, "Format", Message::getDefaultFormat(),
+                                               "Default message format"};
+  Gaudi::Property<std::string> m_ersFormat{this, "ErsFormat", Message::getDefaultFormat(),
+                                           "ERS message format"};
+  Gaudi::Property<std::string> m_defaultTimeFormat{
+      this, "timeFormat", Message::getDefaultTimeFormat(), "Message time format"};
+  Gaudi::Property<bool> m_stats{this, "showStats", false, "Show message statistics"};
+  Gaudi::Property<unsigned int> m_statLevel{this, "statLevel", 0,
+                                            "Show total message statistics for >= level"};
+  Gaudi::Property<unsigned int> m_statLevelRun{this, "statLevelRun", 0,
+                                               "Show per-run statistics for messages >= level"};
+  Gaudi::Property<bool> m_resetStats{this, "resetStatsAtBeginRun", false,
+                                     "Reset message statistics at BeginRun"};
+  Gaudi::Property<unsigned int> m_eventIDLevel{this, "printEventIDLevel", MSG::NIL,
+                                               "Print event ID for this and higher message levels"};
+  Gaudi::Property<bool> m_color{this, "useColors", false,
+                                "Colors are not supported by TrigMessageSvc"};
+  Gaudi::Property<bool> m_suppress{this, "enableSuppression", false, "Enable message suppression"};
+  Gaudi::Property<bool> m_suppressRunningOnly{this, "suppressRunningOnly", true,
+                                              "Use message suppression only during RUNNING state"};
+
+  std::array<Gaudi::Property<std::vector<std::string>>, MSG::NUM_LEVELS> m_thresholdProp{
+      {{/*ignored*/},
+       {this, "setVerbose"},
+       {this, "setDebug"},
+       {this, "setInfo"},
+       {this, "setWarning"},
+       {this, "setError"},
+       {this, "setFatal"},
+       {this, "setAlways"}}};
+
+  std::array<Gaudi::Property<int>, MSG::NUM_LEVELS> m_msgLimit{{{this, "defaultLimit", 500},
+                                                                {this, "verboseLimit", 500},
+                                                                {this, "debugLimit", 500},
+                                                                {this, "infoLimit", 500},
+                                                                {this, "warningLimit", 500},
+                                                                {this, "errorLimit", 500},
+                                                                {this, "fatalLimit", 500},
+                                                                {this, "alwaysLimit", 0}}};
+
+  /**
+   * Special properties to control output to ERS of individual sources.
+   * The syntax is as follows (these are NOT regular expressions):
+   *
+   * useErsFatal = []                       # forward none (default)
+   * useErsFatal = ['*']                    # forward all
+   * useErsFatal = ['CoreDumpSvc','MyAlg']  # forward these sources
+   * useErsFatal = ['*','!MyAlg']           # forward all except MyAlg
+   */
+  std::array<Gaudi::Property<std::vector<std::string>>, MSG::NUM_LEVELS> m_useERS{
+      {{/*ignored*/},
+       {this, "useErsVerbose", {}},
+       {this, "useErsDebug", {}},
+       {this, "useErsInfo", {}},
+       {this, "useErsWarning", {}},
+       {this, "useErsError", {}},
+       {this, "useErsFatal", {}},
+       {this, "useErsAlways", {}}}};
+
+  //////////////////////////////////////////////////////////////////////
+  // Private members
+  //////////////////////////////////////////////////////////////////////
+  std::ostream* m_defaultStream = &std::cout; ///< Pointer to the output stream.
+  ThresholdMap m_thresholdMap;                ///< Output level threshold map
+
+  /// Private helper class to keep the count of messages of a type (MSG::LEVEL).
+  struct MsgAry final {
+    /// Internal array of counters.
+    std::array<int, MSG::NUM_LEVELS> msg = {{0}};
+    /// Default constructor.
+    MsgAry() = default;
+  };
+
+  std::map<std::string, MsgAry> m_sourceMap;     ///< counts per source
+  std::array<int, MSG::NUM_LEVELS> m_msgCount;   ///< counts per level
+  std::map<size_t, unsigned int> m_msgHashCount; ///< counts per message hash
+
+  bool m_running{false};    ///< are we in running state?
+  bool m_doSuppress{false}; ///< is suppression currently enabled?
+
+  mutable std::recursive_mutex m_reportMutex;       ///< mutex for printing
+  mutable std::recursive_mutex m_thresholdMapMutex; /// (@see MsgStream::doOutput).
+
+  void setupLimits(Gaudi::Details::PropertyBase& prop);
+  void setupThreshold(Gaudi::Details::PropertyBase& prop);
+  bool passErsFilter(const std::string& source, const std::vector<std::string>& filter) const;
+  void i_reportMessage(const Message& msg, int outputLevel);
+  void i_reportERS(const Message& msg) const;
 };
 
 #endif
-- 
GitLab


From fd8a88b945361b1dddfbfa6eeb01933a9d1ebcd7 Mon Sep 17 00:00:00 2001
From: Shota Hayashida <hayashida@hepl.phys.nagoya-u.ac.jp>
Date: Wed, 20 Mar 2019 10:28:55 +0100
Subject: [PATCH 132/163] Change OutputLevel for debugging

---
 .../TrigL2MuonSA/src/MuFastSteering.cxx       | 44 +++++++++----------
 1 file changed, 20 insertions(+), 24 deletions(-)

diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
index 527a32046ae1..d84d1f18edaa 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
@@ -85,31 +85,31 @@ HLT::ErrorCode MuFastSteering::hltInitialize()
   }
   ATH_MSG_DEBUG("Retrieved the RegionSelector service ");
 
-  // 
+  // Locate DataPreparator
   if (m_dataPreparator.retrieve().isFailure()) {
     ATH_MSG_ERROR("Cannot retrieve Tool DataPreparator");
     return HLT::BAD_JOB_SETUP;
   }
   
-  // 
+  // Locate PatternFinder
   if (m_patternFinder.retrieve().isFailure()) {
     ATH_MSG_ERROR("Cannot retrieve Tool DataPreparator");
     return HLT::BAD_JOB_SETUP;
   }
 
-  // 
+  // Locate StationFitter
   if (m_stationFitter.retrieve().isFailure()) {
     ATH_MSG_ERROR("Cannot retrieve Tool StationFitter");
     return HLT::BAD_JOB_SETUP;
   }
 
-  // 
+  // Locate TrackFitter
   if (m_trackFitter.retrieve().isFailure()) {
     ATH_MSG_ERROR("Cannot retrieve Tool TrackFitter");
     return HLT::BAD_JOB_SETUP;
   }
 
-  // 
+  // Locate TrackExtrapolator
   if (m_trackExtrapolator.retrieve().isFailure()) {
     ATH_MSG_ERROR("Cannot retrieve Tool TrackExtrapolator");
     return HLT::BAD_JOB_SETUP;
@@ -197,7 +197,7 @@ HLT::ErrorCode MuFastSteering::hltInitialize()
     }
   } 
 
-  //adding a part of DataHandle for AThenaMT
+  // DataHandles for AthenaMT
   if (m_roiCollectionKey.initialize().isFailure() ) { 
     ATH_MSG_ERROR("ReadHandleKey for TrigRoiDescriptorCollection key:" << m_roiCollectionKey.key()  << " initialize Failure!");
     return HLT::BAD_JOB_SETUP;   
@@ -309,7 +309,6 @@ StatusCode MuFastSteering::execute()
     ATH_MSG_DEBUG("REGTEST: " << m_roiCollectionKey.key() << " zed = " << "(" << (*p_roids)->zedMinus() << ")" << (*p_roids)->zed() << "(" << (*p_roids)->zedPlus() << ")");
   }
   ATH_MSG_DEBUG("REGTEST: " << m_roiCollectionKey.key() << " size = " << internalRoI->size());
-  ATH_MSG_DEBUG("REGTEST: " << m_roiCollectionKey.key() << " DONE");
 
   // make RecMURoIs maching with MURoIs
   DataVector<const LVL1::RecMuonRoI> *recRoIVector = new DataVector<const LVL1::RecMuonRoI>;
@@ -321,7 +320,6 @@ StatusCode MuFastSteering::execute()
     ATH_MSG_DEBUG("REGTEST: " << m_recRoiCollectionKey.key() << " eta/phi = " << (recRoI)->eta() << "/" << (recRoI)->phi());
     ATH_MSG_DEBUG("REGTEST: " << m_recRoiCollectionKey.key() << " size = " << recRoIVector->size());
   }
-  ATH_MSG_DEBUG("REGTEST: " << m_recRoiCollectionKey.key() << " DONE");
 
   // record data objects with WriteHandle
   auto muFastContainer = SG::makeHandle(m_muFastContainerKey, ctx);
@@ -365,8 +363,6 @@ StatusCode MuFastSteering::execute()
     ATH_MSG_DEBUG("REGTEST: TrigRoiDescriptorCollection key:" << m_muMsContainerKey.key() << " eta/phi = " << (*p_muonMS)->eta() << "/" << (*p_muonMS)->phi());
   }
 
-  ATH_MSG_DEBUG("REGTEST: Recorded data objects DONE");
-
   totalTimer.stop();
  
   ATH_MSG_DEBUG("StatusCode MuFastSteering::execute() success");
@@ -417,7 +413,6 @@ HLT::ErrorCode MuFastSteering::hltExecute(const HLT::TriggerElement* /*inputTE*/
 
     p_roi++;
   }
-  ATH_MSG_DEBUG("REGTEST: DONE");
 
   // define objects to record output data
   // for xAOD::L2StandAloneMuonContainer
@@ -603,7 +598,6 @@ StatusCode MuFastSteering::findMuonSignature(const DataVector<const TrigRoiDescr
 
     m_muonRoad.Clear();
 
-    ATH_MSG_DEBUG("Start an algorithm of MuonSA");
     if ( m_recMuonRoIUtils.isBarrel(*p_roi) ) { // Barrel
       ATH_MSG_DEBUG("Barrel");
 
@@ -867,8 +861,8 @@ StatusCode MuFastSteering::findMuonSignature(const DataVector<const TrigRoiDescr
         
         if ( updateTriggerElement ) {
           
-          ATH_MSG_DEBUG("Updating the trigger element");
-          ATH_MSG_DEBUG(">> Retrieved the buffer, with size: " << m_calStreamer->getLocalBufferSize());
+          ATH_MSG_INFO("Updating the trigger element");
+          ATH_MSG_INFO(">> Retrieved the buffer, with size: " << m_calStreamer->getLocalBufferSize());
 	  // create the TrigCompositeContainer to store the calibration buffer
 	  // at StatusCode execute() and hltExecute().
 
@@ -1019,6 +1013,7 @@ bool MuFastSteering::storeMuonSA(const LVL1::RecMuonRoI*             roi,
     endcapinner  = xAOD::L2MuonParameters::Chamber::EndcapInner;
   }
 
+  ATH_MSG_DEBUG("### Hit patterns at the Muon Spectrometer ###");
   ATH_MSG_DEBUG("pattern#0: # of hits at inner  =" << pattern.mdtSegments[inner].size());
   ATH_MSG_DEBUG("pattern#0: # of hits at middle =" << pattern.mdtSegments[middle].size());
   ATH_MSG_DEBUG("pattern#0: # of hits at outer  =" << pattern.mdtSegments[outer].size());
@@ -1030,7 +1025,8 @@ bool MuFastSteering::storeMuonSA(const LVL1::RecMuonRoI*             roi,
     ATH_MSG_DEBUG("pattern#0: # of hits at BME  =" << pattern.mdtSegments[bme].size());
     ATH_MSG_DEBUG("pattern#0: # of hits at barrel endcap inner  =" << pattern.mdtSegments[endcapinner].size());
   }
-  ATH_MSG_DEBUG("pt=" << pattern.pt);
+  ATH_MSG_DEBUG("### ************************************* ###");
+  ATH_MSG_INFO("Estimated muon pt = " << pattern.pt << " GeV");
 
   // ---------
   // store xAOD
@@ -1164,7 +1160,7 @@ bool MuFastSteering::storeMuonSA(const LVL1::RecMuonRoI*             roi,
                           cscHits[i_hit].eta, cscHits[i_hit].phi, cscHits[i_hit].r, cscHits[i_hit].z,
                           cscHits[i_hit].charge, cscHits[i_hit].time, cscHits[i_hit].Residual);
 	cscResol.push_back(cscHits[i_hit].resolution);
-        ATH_MSG_DEBUG("CSC Hits stored in xAOD: "
+        ATH_MSG_VERBOSE("CSC Hits stored in xAOD: "
       		<< "OL=" << cscHits[i_hit].isOutlier << ","
       		<< "Ch=" << cscHits[i_hit].Chamber << ","
       		<< "StationName=" << cscHits[i_hit].StationName << ","
@@ -1195,7 +1191,7 @@ bool MuFastSteering::storeMuonSA(const LVL1::RecMuonRoI*             roi,
                       rpcHits[i_hit].x, rpcHits[i_hit].y, rpcHits[i_hit].z,
                       rpcHits[i_hit].time, rpcHits[i_hit].distToEtaReadout, rpcHits[i_hit].distToPhiReadout,
                       rpcHits[i_hit].stationName);
-    ATH_MSG_DEBUG("RPC hits stored in xAOD: "
+    ATH_MSG_VERBOSE("RPC hits stored in xAOD: "
       	    << "stationName=" << rpcHits[i_hit].stationName << ","
       	    << "layer=" << rpcHits[i_hit].layer << ","
       	    << "measuresPhi=" << rpcHits[i_hit].measuresPhi << ","
@@ -1225,7 +1221,7 @@ bool MuFastSteering::storeMuonSA(const LVL1::RecMuonRoI*             roi,
     muonSA->setTgcHit(tgcHits[i_hit].eta, tgcHits[i_hit].phi, tgcHits[i_hit].r, tgcHits[i_hit].z,
                       tgcHits[i_hit].width, tgcHits[i_hit].sta, tgcHits[i_hit].isStrip,
                       tgcHits[i_hit].bcTag, tgcHits[i_hit].inRoad);
-    ATH_MSG_DEBUG("TGC hits stored in xAOD: "
+    ATH_MSG_VERBOSE("TGC hits stored in xAOD: "
       	    << "eta=" << tgcHits[i_hit].eta << ","
       	    << "phi=" << tgcHits[i_hit].phi << ","
       	    << "r=" << tgcHits[i_hit].r << ","
@@ -1361,11 +1357,11 @@ bool MuFastSteering::storeMSRoiDescriptor(const TrigRoiDescriptor*
                                                                pattern.phiMS,
                                                                pattern.phiMS);
 
-    ATH_MSG_DEBUG("...TrigRoiDescriptor for MS "
+    ATH_MSG_VERBOSE("...TrigRoiDescriptor for MS "
       	    << "pattern.etaMap/pattern.phiMS="
       	    << pattern.etaMap << "/" << pattern.phiMS);
 
-    ATH_MSG_DEBUG("will Record an RoiDescriptor for TrigMoore:"
+    ATH_MSG_VERBOSE("will Record an RoiDescriptor for TrigMoore:"
       	    << " phi=" << MSroiDescriptor->phi()
       	    << ",  eta=" << MSroiDescriptor->eta());
 
@@ -1422,11 +1418,11 @@ bool MuFastSteering::storeIDRoiDescriptor(const TrigRoiDescriptor*
                                                                pattern.phiVtx - phiHalfWidth,
                                                                pattern.phiVtx + phiHalfWidth);
     
-    ATH_MSG_DEBUG("...TrigRoiDescriptor for ID "
+    ATH_MSG_VERBOSE("...TrigRoiDescriptor for ID "
       	    << "pattern.etaVtx/pattern.phiVtx="
       	    << pattern.etaVtx << "/" << pattern.phiVtx);
 
-    ATH_MSG_DEBUG("will Record an RoiDescriptor for Inner Detector:"
+    ATH_MSG_VERBOSE("will Record an RoiDescriptor for Inner Detector:"
                   << " phi=" << IDroiDescriptor->phi()
                   << ",  eta=" << IDroiDescriptor->eta());
 
@@ -1443,7 +1439,7 @@ bool MuFastSteering::storeIDRoiDescriptor(const TrigRoiDescriptor*
                                                                HLT::wrapPhi(roids->phi() - HLT::wrapPhi(roids->phiPlus() - roids->phiMinus())/2. * scaleRoIforZeroPt),
                                                                HLT::wrapPhi(roids->phi() + HLT::wrapPhi(roids->phiPlus() - roids->phiMinus())/2. * scaleRoIforZeroPt));
 
-    ATH_MSG_DEBUG ("will Record an RoiDescriptor for Inner Detector in case with zero pT:"
+    ATH_MSG_VERBOSE("will Record an RoiDescriptor for Inner Detector in case with zero pT:"
       	     << " phi=" << IDroiDescriptor->phi()
       	     << ", phi min=" << IDroiDescriptor->phiMinus()
       	     << ", phi max=" << IDroiDescriptor->phiPlus()
@@ -1831,7 +1827,7 @@ void MuFastSteering::handle(const Incident& incident) {
 	ATH_MSG_ERROR("Failed to open the connection to the circular buffer");
       }
       else {
-	ATH_MSG_DEBUG("Opened the connection to the circular buffer");
+	ATH_MSG_INFO("Opened the connection to the circular buffer");
       }
     }
   }
-- 
GitLab


From 5efa1ea3e1fba36e2ae3af50c59c10477c0ed5b0 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Wed, 20 Mar 2019 10:52:56 +0100
Subject: [PATCH 133/163] disabling ringer for the moment

---
 .../TrigUpgradeTest/share/egamma.withViews.py        | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
index 00c05345fad1..95e00f23213f 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
@@ -67,13 +67,15 @@ def createFastCaloSequence(rerun=False):
    clusterMaker.ClustersName=clustersKey
    svcMgr.ToolSvc.TrigDataAccess.ApplyOffsetCorrection=False
 
-   from TrigMultiVarHypo.TrigL2CaloRingerFexMTInit import init_ringer
-   trigL2CaloRingerFexMT = init_ringer()
-   trigL2CaloRingerFexMT.ClustersKey = clusterMaker.ClustersName
-   trigL2CaloRingerFexMT.OutputLevel = DEBUG    
    
+   #from TrigMultiVarHypo.TrigL2CaloRingerFexMTInit import init_ringer
+   #trigL2CaloRingerFexMT = init_ringer()
+   #trigL2CaloRingerFexMT.ClustersKey = clusterMaker.ClustersName
+   #trigL2CaloRingerFexMT.OutputLevel = DEBUG    
    
-   fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker, trigL2CaloRingerFexMT ])
+   
+   #fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker, trigL2CaloRingerFexMT ])
+   fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker ])
    
 
    filterL1RoIsAlg = RoRSeqFilter( __prefix+"filterL1RoIsAlg")
-- 
GitLab


From 65bcf6b528ad4022e0da36538b9ee212796c74b6 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Tue, 19 Mar 2019 19:00:53 +0100
Subject: [PATCH 134/163] LArMonTools: Use conditions handle to read hvcorr
 information.

Change from using ILArHVCorrTool to using a conditions handle.
---
 .../LArHVCorrectionMonTool_jobOptions.py      |  7 +-
 .../src/LArHVCorrectionMonTool.cxx            | 64 +++++--------------
 .../LArMonTools/src/LArHVCorrectionMonTool.h  | 11 ++--
 3 files changed, 25 insertions(+), 57 deletions(-)

diff --git a/LArCalorimeter/LArMonTools/share/LArHVCorrectionMonTool_jobOptions.py b/LArCalorimeter/LArMonTools/share/LArHVCorrectionMonTool_jobOptions.py
index fd59b161c941..1091d35d2cdc 100644
--- a/LArCalorimeter/LArMonTools/share/LArHVCorrectionMonTool_jobOptions.py
+++ b/LArCalorimeter/LArMonTools/share/LArHVCorrectionMonTool_jobOptions.py
@@ -7,11 +7,8 @@ from LArMonTools.LArMonToolsConf import LArHVCorrectionMonTool
 theLArHVCorrectionMonTool = LArHVCorrectionMonTool(name="LArHVCorrectionMonTool",
                                                    NumberOfLBs = 1000
                                                    )
-# include LAr HV Correction tool
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc+=theLArHVCorrTool
-theLArHVCorrectionMonTool.HVCorrTool = theLArHVCorrTool
+# include LAr HV Correction cond alg
+from LArConditionsCommon import LArHVDB
 
 #ToolSvc += theLArHVCorrectionMonTool
 LArMon.AthenaMonTools+=[ theLArHVCorrectionMonTool ]
diff --git a/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.cxx b/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.cxx
index 01e88fc4d2cc..0fecd13fa585 100644
--- a/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.cxx
+++ b/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.cxx
@@ -47,13 +47,9 @@ LArHVCorrectionMonTool::LArHVCorrectionMonTool(const std::string& type,
     m_strHelper(0),
     m_rootStore(0),
     m_larCablingService("LArCablingLegacyService"),
-    m_hvCorrTool("LArHVCorrTool"),
-    m_keyHVScaleCorr("LArHVScaleCorr"),
     m_eventsCounter(0)
 {
   declareProperty("LArRawChannelKey",m_channelKey="LArRawChannels");
-  declareProperty("HVCorrTool",m_hvCorrTool);
-  declareProperty("keyHVScaleCorr",m_keyHVScaleCorr);
   declareProperty("ErrorThreshold",m_threshold=0.02);
   declareProperty("EtaGranularity",m_delta_eta=0.01);
   declareProperty("PhiGranularity",m_delta_phi=0.01);
@@ -83,51 +79,21 @@ StatusCode LArHVCorrectionMonTool::initialize()
 {
   
   ATH_MSG_INFO( "Initialize LArHVCorrectionMonTool" );
-  StatusCode sc;
   
-  sc = detStore()->retrieve(m_LArOnlineIDHelper, "LArOnlineID");
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL( "Could not get LArOnlineIDHelper" );
-    return sc;
-  }
-  
-  // Retrieve HVCorrTool 
-  sc = m_hvCorrTool.retrieve();
-  if (sc.isFailure()) {
-    ATH_MSG_ERROR( "Unable to find tool for LArHVCorrTool" );
-    return StatusCode::FAILURE;
-  }
-  
-  // Retrieve HV Correction reference
-  sc = detStore()->regHandle(m_dd_HVScaleCorr,m_keyHVScaleCorr);
-  if (sc.isFailure()) {
-    ATH_MSG_ERROR( "Unable to register handle to HVScaleCorr " );
-    return StatusCode::FAILURE;
-  }
+  ATH_CHECK( detStore()->retrieve(m_LArOnlineIDHelper, "LArOnlineID") );
   
   // Retrieve ID helpers
-  sc =  detStore()->retrieve( m_caloIdMgr );
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL( "Could not get CaloIdMgr" );
-    return sc;
-  }
-  m_LArEM_IDHelper   = m_caloIdMgr->getEM_ID();
-  m_LArHEC_IDHelper  = m_caloIdMgr->getHEC_ID();
-  m_LArFCAL_IDHelper = m_caloIdMgr->getFCAL_ID();
+  const CaloCell_ID* idHelper = nullptr;
+  ATH_CHECK( detStore()->retrieve( idHelper, "CaloCell_ID" ) );
+  m_LArEM_IDHelper   = idHelper->em_idHelper();
+  m_LArHEC_IDHelper  = idHelper->hec_idHelper();
+  m_LArFCAL_IDHelper = idHelper->fcal_idHelper();
   
-  // CaloDetDescrMgr gives "detector description", including real positions of cells
-  sc = detStore()->retrieve(m_CaloDetDescrMgr);
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL( "Could not get CaloDetDescrMgr ");
-    return sc;
-  }
-  
-  // Get LAr Cabling Service
-  sc=m_larCablingService.retrieve();
-  if (sc.isFailure()) {
-    ATH_MSG_ERROR( "Could not retrieve LArCablingService" );
-    return StatusCode::FAILURE;
-  }
+  ATH_CHECK( detStore()->retrieve(m_CaloDetDescrMgr) );
+  ATH_CHECK( m_larCablingService.retrieve() );
+
+  ATH_CHECK( m_scaleCorrKey.initialize() );
+  ATH_CHECK( m_onlineScaleCorrKey.initialize() );
   
   // LArOnlineIDStrHelper
   m_strHelper = new  LArOnlineIDStrHelper(m_LArOnlineIDHelper);
@@ -272,6 +238,7 @@ StatusCode
 LArHVCorrectionMonTool::fillHistograms()
 {
   ATH_MSG_DEBUG( "in fillHists()" );
+  const EventContext& ctx = Gaudi::Hive::currentContext();
   
   m_eventsCounter++;
   
@@ -298,6 +265,9 @@ LArHVCorrectionMonTool::fillHistograms()
       ATH_MSG_WARNING( "Can't retrieve LArRawChannelContainer with key " << m_channelKey );
       return StatusCode::SUCCESS;
     }
+
+    SG::ReadCondHandle<ILArHVScaleCorr> scaleCorr (m_scaleCorrKey, ctx);
+    SG::ReadCondHandle<ILArHVScaleCorr> onlineScaleCorr (m_onlineScaleCorrKey, ctx);
     
     // Loop over LArRawChannels
     //SelectAllLArRawChannels AllRaw(pRawChannelsContainer);
@@ -329,9 +299,9 @@ LArHVCorrectionMonTool::fillHistograms()
       
       // Retrieve HV correction info
       float hvdev = 0;
-      float hvcorr = m_hvCorrTool->Scale(offlineID);
+      float hvcorr = scaleCorr->HVScaleCorr(id);
       //ATH_MSG_VERBOSE( "hvcorr" << hvcorr );
-      float hvonline = m_dd_HVScaleCorr->HVScaleCorr(id);
+      float hvonline = onlineScaleCorr->HVScaleCorr(id);
       if (hvonline<=0) continue; //No valid online correction
       //ATH_MSG_VERBOSE( "hvonline" << hvonline );
       if (hvcorr>hvonline) hvdev = hvonline-hvcorr; //Monitor only channels that get a higher correction from DCS (eg are at a lower voltage). 
diff --git a/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.h b/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.h
index 726fbd21d21a..48a6889588d6 100644
--- a/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.h
+++ b/LArCalorimeter/LArMonTools/src/LArHVCorrectionMonTool.h
@@ -21,6 +21,7 @@
 #include "CaloDetDescr/CaloDetDescriptor.h"
 #include "CaloDetDescr/CaloDetDescrElement.h"
 #include "CaloGeoHelpers/CaloPhiRange.h"
+#include "StoreGate/ReadCondHandleKey.h"
 
 #include "Identifier/HWIdentifier.h"
 #include "LArIdentifier/LArOnlineID.h"
@@ -28,7 +29,6 @@
 #include "LArRawEvent/LArRawChannelContainer.h"
 #include "EventContainers/SelectAllObject.h" 
 #include "LArCabling/LArCablingLegacyService.h"
-#include "LArElecCalib/ILArHVCorrTool.h"
 #include "LArElecCalib/ILArHVScaleCorr.h"
 
 #include <string>
@@ -83,9 +83,11 @@ class LArHVCorrectionMonTool: public ManagedMonitorToolBase
   ITHistSvc* m_rootStore;
   /** Handle to LArCablingService */
   ToolHandle<LArCablingLegacyService> m_larCablingService;  
-  /** Handle to hv tools */
-  ToolHandle<ILArHVCorrTool> m_hvCorrTool;
-  const DataHandle<ILArHVScaleCorr>  m_dd_HVScaleCorr;
+
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_scaleCorrKey
+  { this, "LArHVScaleCorr", "LArHVScaleCorrRecomputed", "" };
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_onlineScaleCorrKey
+  { this, "OnlineLArHVScaleCorr", "LArHVScaleCorr", "" };
 
  private:
 
@@ -98,7 +100,6 @@ class LArHVCorrectionMonTool: public ManagedMonitorToolBase
 
   // Properties
   std::string m_channelKey;
-  std::string m_keyHVScaleCorr;
   float m_threshold;
   float m_delta_eta;
   float m_delta_phi;
-- 
GitLab


From 52157683464b42f279fe9fa39e922a70381171b6 Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Wed, 20 Mar 2019 13:46:10 +0100
Subject: [PATCH 135/163] Ensuring metadata is read

---
 Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py      | 5 +++++
 .../share/specialConfig/preInclude.RHadrons.py               | 5 +++--
 .../share/specialConfig/preInclude.RHadronsPythia8.py        | 5 +++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
index dda72ad7952f..afd47de03688 100644
--- a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
+++ b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
@@ -53,6 +53,11 @@ if globalflags.DetDescrVersion() not in simFlags.SimLayout.get_Value():
 simFlags.load_atlas_flags()
 simFlags.EventFilter.set_Off()
 
+# --- Read in special simulation job option fragments based on
+# --- metadata passed by the evgen stage (move earlier?)
+from ISF_Example.ISF_Metadata import checkForSpecialConfigurationMetadata
+checkForSpecialConfigurationMetadata()
+
 #--------------------------------------------------------------
 # Job setup
 #--------------------------------------------------------------
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
index 6e562dfcabcf..364ce68b1b2c 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
@@ -66,10 +66,11 @@ try:
     # MC Channel Number.  Try the standard two spots, and fall back to the run number for evgen
     if 'mc_channel_number' in f.infos and len(f.infos['mc_channel_number'])>0:
         runNumber = f.infos['mc_channel_number'][0]
-    elif 'mc_channel_number' in f.infos['tag_info']:
+    if runNumber<=0 and 'mc_channel_number' in f.infos['tag_info']:
         runNumber = f.infos['tag_info']['mc_channel_number']
-    else:
+    if runNumber<=0:
         runNumber = f.infos['run_number'][0]
+    print 'ZLM:',f.infos
     # This is also used for digitization, so protect in case we're there
     if "StreamHITS" in f.infos["stream_names"]:
         from Digitization.DigitizationFlags import digitizationFlags
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
index 6e562dfcabcf..364ce68b1b2c 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
@@ -66,10 +66,11 @@ try:
     # MC Channel Number.  Try the standard two spots, and fall back to the run number for evgen
     if 'mc_channel_number' in f.infos and len(f.infos['mc_channel_number'])>0:
         runNumber = f.infos['mc_channel_number'][0]
-    elif 'mc_channel_number' in f.infos['tag_info']:
+    if runNumber<=0 and 'mc_channel_number' in f.infos['tag_info']:
         runNumber = f.infos['tag_info']['mc_channel_number']
-    else:
+    if runNumber<=0:
         runNumber = f.infos['run_number'][0]
+    print 'ZLM:',f.infos
     # This is also used for digitization, so protect in case we're there
     if "StreamHITS" in f.infos["stream_names"]:
         from Digitization.DigitizationFlags import digitizationFlags
-- 
GitLab


From 579b36a6f3488ca087b33fe412a2a588bf347d43 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Thu, 11 Oct 2018 08:16:32 +0200
Subject: [PATCH 136/163] Add simple PileUpMixtureID struct to xAOD::EventInfo

---
 .../Root/EventInfoAuxContainer_v1.cxx         |  4 +
 .../xAOD/xAODEventInfo/Root/EventInfo_v1.cxx  | 75 +++++++++++++++++++
 .../versions/EventInfoAuxContainer_v1.h       |  6 +-
 .../xAODEventInfo/versions/EventInfo_v1.h     | 26 ++++++-
 4 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx b/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx
index 22f8bbcbcbf8..095d6e07a61a 100644
--- a/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx
+++ b/Event/xAOD/xAODEventInfo/Root/EventInfoAuxContainer_v1.cxx
@@ -49,6 +49,10 @@ namespace xAOD {
       AUX_VARIABLE( mcChannelNumber );
       AUX_VARIABLE( mcEventNumber );
       AUX_VARIABLE( mcEventWeights );
+      
+      // Pileup information:
+      AUX_VARIABLE( pileUpMixtureIDLowBits );
+      AUX_VARIABLE( pileUpMixtureIDHighBits );
    }
 
    /**
diff --git a/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx b/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx
index dcf950f390e2..9fabf1a9c85a 100644
--- a/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx
+++ b/Event/xAOD/xAODEventInfo/Root/EventInfo_v1.cxx
@@ -350,6 +350,37 @@ namespace xAOD {
    AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, float,
                                          averageInteractionsPerCrossing,
                                          setAverageInteractionsPerCrossing )
+   
+   AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, unsigned long long,
+                                         pileUpMixtureIDLowBits,
+                                         setPileUpMixtureIDLowBits )
+   AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( EventInfo_v1, unsigned long long,
+                                         pileUpMixtureIDHighBits,
+                                         setPileUpMixtureIDHighBits )
+
+   EventInfo_v1::PileUpMixtureID EventInfo_v1::pileUpMixtureID() const {
+
+      static const Accessor< unsigned long long > accLow( "pileUpMixtureIDLowBits" );
+      static const Accessor< unsigned long long > accHigh( "pileUpMixtureIDHighBits" );
+
+      PileUpMixtureID id{};
+
+      // We need to check if the values are actually stored
+      if ( accLow.isAvailable( *this ) && accHigh.isAvailable( *this ) ) {
+         id.lowBits = pileUpMixtureIDLowBits();
+         id.highBits = pileUpMixtureIDHighBits();
+      }
+
+      return id;
+
+   }
+
+   void EventInfo_v1::setPileUpMixtureID( const PileUpMixtureID& value ) {
+
+      setPileUpMixtureIDLowBits( value.lowBits );
+      setPileUpMixtureIDHighBits( value.highBits );
+
+   }
 
    EventInfo_v1::SubEvent::
    SubEvent( int16_t time, uint16_t index, PileUpType type,
@@ -966,4 +997,48 @@ namespace xAOD {
       return out;
    }
 
+   /// This operator is provided to make it convenient to print debug messages
+   /// including information about the PileUpMixtureID in hex.
+   ///
+   /// @param out The output stream to write PileUpMixtureID information to
+   /// @param id The PileUpMixtureID object to print information about
+   /// @returns The same output stream that the operator received
+   ///
+   std::ostream& operator<<( std::ostream &out,
+                             const xAOD::EventInfo_v1::PileUpMixtureID& id ) {
+
+       // Get the current state of the stream:
+       const char fillChar = out.fill();
+       const std::ios_base::fmtflags flags = out.flags();
+       const std::streamsize width = out.width();
+
+       // Do the printout:
+       out << std::hex << std::setw( 16 ) << std::setfill( '0' );
+       out << id.lowBits;
+       out << id.highBits;
+
+       // Restore the original state of the stream:
+       out.fill( fillChar );
+       out.flags( flags );
+       out.width( width );
+
+
+       // Return the stream:
+       return out;  
+   }
+
+   /// This operator is provided to make it convenient to compare two
+   /// instances of PileUpMixtureID directly.
+   ///
+   /// @param a The PileUpMixtureID object to compare
+   /// @param b The PileUpMixtureID object to compare
+   /// @returns Comparison result
+   ///
+   bool operator== ( const xAOD::EventInfo_v1::PileUpMixtureID& a,
+                     const xAOD::EventInfo_v1::PileUpMixtureID& b ) {
+
+       return a.lowBits == b.lowBits && a.highBits == b.highBits;
+
+   }
+
 } // namespace xAOD
diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h
index d26545d105c7..cbae095f29c3 100644
--- a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h
+++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfoAuxContainer_v1.h
@@ -115,7 +115,11 @@ namespace xAOD {
       std::vector< std::vector< float > > mcEventWeights;
       /// @}
 
-
+      /// @name Pileup information
+      /// @{
+      std::vector< unsigned long long > pileUpMixtureIDLowBits;
+      std::vector< unsigned long long > pileUpMixtureIDHighBits;
+      /// @}
 
       /// Keep track of the event status flags.
       /// The set bits here correspond to the auxids of all unlocked
diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h
index fde9e62af7e9..dbc7ee3fa743 100644
--- a/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h
+++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/versions/EventInfo_v1.h
@@ -245,6 +245,27 @@ namespace xAOD {
       /// Set average interactions per crossing for all BCIDs
       void setAverageInteractionsPerCrossing( float value );
 
+      /// Unique pile-up mixture identifier definition
+      struct PileUpMixtureID {
+         unsigned long long lowBits{};
+         unsigned long long highBits{};
+      };
+
+      /// Unique pile-up mixture identifier
+      PileUpMixtureID pileUpMixtureID() const;
+      /// Set unique pile-up mixture identifier
+      void setPileUpMixtureID( const PileUpMixtureID &value );
+
+      /// Unique pile-up mixture identifier low bits
+      unsigned long long pileUpMixtureIDLowBits() const;
+      /// Set unique pile-up mixture identifier low bits
+      void setPileUpMixtureIDLowBits( unsigned long long value );
+
+      /// Unique pile-up mixture identifier high bits
+      unsigned long long pileUpMixtureIDHighBits() const;
+      /// Set unique pile-up mixture identifier high bits
+      void setPileUpMixtureIDHighBits( unsigned long long value );
+
       /// Enumerator describing the types of pileup events
       enum PileUpType {
          Unknown     = 99, ///< Type not known/specified
@@ -498,8 +519,11 @@ namespace xAOD {
 
    }; // class EventInfo_v1
 
-   /// A helper operator to be able to print debug messages easily
+   /// A helper operators to be able to print debug messages easily
    std::ostream& operator<< ( std::ostream& out, const xAOD::EventInfo_v1& ei );
+   std::ostream& operator<< ( std::ostream& out, const xAOD::EventInfo_v1::PileUpMixtureID& id );
+   /// PileUpMixtureID comparison helper operator
+   bool operator== ( const xAOD::EventInfo_v1::PileUpMixtureID& a, const xAOD::EventInfo_v1::PileUpMixtureID& b );
 
 } // namespace xAOD
 
-- 
GitLab


From 79f8aa4b44d2566a36f09b237544f720deea2d50 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Thu, 11 Oct 2018 08:18:17 +0200
Subject: [PATCH 137/163] Calculate pile-up hash in the PileUpEventLoopMgr

---
 Control/PileUpComps/CMakeLists.txt            |  5 ++
 .../PileUpComps/src/PileUpEventLoopMgr.cxx    | 30 ++++++++
 Control/PileUpComps/src/PileUpHashHelper.cxx  | 76 +++++++++++++++++++
 Control/PileUpComps/src/PileUpHashHelper.h    | 54 +++++++++++++
 .../test/PileUpHashHelper_test.cxx            | 59 ++++++++++++++
 5 files changed, 224 insertions(+)
 create mode 100644 Control/PileUpComps/src/PileUpHashHelper.cxx
 create mode 100644 Control/PileUpComps/src/PileUpHashHelper.h
 create mode 100644 Control/PileUpComps/test/PileUpHashHelper_test.cxx

diff --git a/Control/PileUpComps/CMakeLists.txt b/Control/PileUpComps/CMakeLists.txt
index 18d80ceba95e..01e7273ab197 100644
--- a/Control/PileUpComps/CMakeLists.txt
+++ b/Control/PileUpComps/CMakeLists.txt
@@ -20,6 +20,7 @@ atlas_depends_on_subdirs( PRIVATE
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CLHEP )
+find_package( GTest )
 
 # Component(s) in the package:
 atlas_add_component( PileUpComps
@@ -32,3 +33,7 @@ atlas_add_component( PileUpComps
                      EventInfoUtils xAODEventInfo GaudiKernel )
 
 
+atlas_add_test( PileUpHashHelper_test
+                SOURCES src/PileUpHashHelper.cxx test/PileUpHashHelper_test.cxx
+                INCLUDE_DIRS src ${GTEST_INCLUDE_DIRS}
+                LINK_LIBRARIES xAODEventInfo ${GTEST_LIBRARIES} )
diff --git a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx
index f1c4dad262bb..b89ee186d7f2 100644
--- a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx
+++ b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx
@@ -5,6 +5,8 @@
 
 // Class header
 #include "PileUpEventLoopMgr.h"
+// Helper header
+#include "PileUpHashHelper.h"
 
 // Athena includes
 #include "AthenaBaseComps/AthMsgStreamMacros.h"
@@ -497,6 +499,34 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt)
             }
         }  //loop over xings
 
+      // Calculate/copy pile-up hash
+      xAOD::EventInfo::PileUpMixtureID pileUpMixtureID;
+      if (m_isEventOverlayJob && m_isEventOverlayJobMC) {
+        // Just copy over the background PileUpMixtureID
+        pileUpMixtureID = pEvent->pileUpMixtureID();
+        if ( pileUpMixtureID.lowBits != 0 || pileUpMixtureID.highBits != 0 ) {
+          pOverEvent->setPileUpMixtureID( pileUpMixtureID );
+        }
+      } else {
+        PileUpHashHelper pileUpHashHelper;
+
+        if (m_isEventOverlayJob) {
+          pileUpHashHelper.addToHashSource(std::to_string(pEvent->eventNumber()));
+        } else {
+          pileUpHashHelper.addToHashSource(pOverEvent);
+        }
+
+        ATH_MSG_VERBOSE("Pile-up hash source:" << pileUpHashHelper.hashSource());
+
+        // Calculate and set hash
+        uuid_t pileUpHash;
+        pileUpHashHelper.calculateHash(pileUpHash);
+
+        pOverEvent->setPileUpMixtureID( PileUpHashHelper::uuidToPileUpMixtureId(pileUpHash) );
+      }
+
+      ATH_MSG_DEBUG("PileUpMixtureID = " << pOverEvent->pileUpMixtureID());
+
       //set active store back to the overlaid one
       pActiveStore->setStore(&(*m_evtStore));
 
diff --git a/Control/PileUpComps/src/PileUpHashHelper.cxx b/Control/PileUpComps/src/PileUpHashHelper.cxx
new file mode 100644
index 000000000000..d9e4c090123c
--- /dev/null
+++ b/Control/PileUpComps/src/PileUpHashHelper.cxx
@@ -0,0 +1,76 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/// @author Tadej Novak
+
+#include <CxxUtils/MD5.h>
+
+#include "PileUpHashHelper.h"
+
+void PileUpHashHelper::addToHashSource(const std::string &string)
+{
+  m_stream << string;
+}
+
+void PileUpHashHelper::addToHashSource(const xAOD::EventInfo *eventInfo)
+{
+  const std::vector<xAOD::EventInfo::SubEvent> &subEventsSource = eventInfo->subEvents();
+  std::vector<std::reference_wrapper<const xAOD::EventInfo::SubEvent>> subEvents(subEventsSource.begin(), subEventsSource.end());
+
+  std::stable_sort(subEvents.begin(), subEvents.end(), [](const xAOD::EventInfo::SubEvent &a, const xAOD::EventInfo::SubEvent &b) {
+    return (a.ptr()->bcid() < b.ptr()->bcid()) ||
+      ((a.ptr()->bcid() == b.ptr()->bcid()) && (a.type() < b.type())) ||
+      ((a.ptr()->bcid() == b.ptr()->bcid()) && (a.type() == b.type()) && (a.ptr()->eventNumber() < b.ptr()->eventNumber()));
+  });
+
+  // Generate subevents info string
+  bool first = true;
+  for (const xAOD::EventInfo::SubEvent &subevent : subEvents) {
+    if (subevent.type() == xAOD::EventInfo::Signal) {
+      continue;
+    }
+
+    if (first) {
+      first = false;
+    } else {
+      m_stream << ";";
+    }
+
+    m_stream << (static_cast<int32_t>(subevent.ptr()->bcid()) - static_cast<int32_t>(eventInfo->bcid())) << "_" << subevent.type() << "_" << subevent.ptr()->eventNumber();
+  }
+}
+
+void PileUpHashHelper::clearHashSource()
+{
+  m_stream.str(std::string());
+}
+
+void PileUpHashHelper::calculateHash(uuid_t &hash) const
+{
+  std::string sourceStr = m_stream.str();
+
+  MD5 md5Hash(sourceStr);
+  md5Hash.uuid_digest(hash);
+}
+
+xAOD::EventInfo::PileUpMixtureID PileUpHashHelper::uuidToPileUpMixtureId(const uuid_t &hash)
+{
+  xAOD::EventInfo::PileUpMixtureID mixture{};
+
+  for (uint16_t i = 0; i < PILEUP_SIZE_BYTES; i++) {
+    mixture.lowBits |= (static_cast<unsigned long long>(hash[i]) << (i * sizeof(unsigned char) * CHAR_BIT));
+    mixture.highBits |= (static_cast<unsigned long long>(hash[i + PILEUP_SIZE_BYTES]) << (i * sizeof(unsigned char) * CHAR_BIT));
+  }
+
+  return mixture;
+}
+
+void PileUpHashHelper::pileUpMixtureIdToUuid(const xAOD::EventInfo::PileUpMixtureID &mixture,
+                                             uuid_t &hash)
+{
+  for (uint16_t i = 0; i < PILEUP_SIZE_BYTES; i++) {
+    hash[i] |= (mixture.lowBits >> (i * sizeof(unsigned char) * CHAR_BIT));
+    hash[i + PILEUP_SIZE_BYTES] |= (mixture.highBits >> (i * sizeof(unsigned char) * CHAR_BIT));
+  }
+}
diff --git a/Control/PileUpComps/src/PileUpHashHelper.h b/Control/PileUpComps/src/PileUpHashHelper.h
new file mode 100644
index 000000000000..f20476ae8415
--- /dev/null
+++ b/Control/PileUpComps/src/PileUpHashHelper.h
@@ -0,0 +1,54 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef PILEUPCOMPS_PILEUPHASHHELPER_H
+#define PILEUPCOMPS_PILEUPHASHHELPER_H
+
+/**
+    @file PileUpHashHelper.h
+    @brief A helper class to compute a hash of pile-up events
+    @author Tadej Novak
+*/
+
+#include <sstream>
+
+#include <uuid/uuid.h>
+
+#include <xAODEventInfo/EventInfo.h>
+
+class PileUpHashHelper
+{
+public:
+  PileUpHashHelper() {}
+
+  /// Add a plain string to the stream
+  void addToHashSource(const std::string &string);
+
+  /// Add subevents to the stream
+  void addToHashSource(const xAOD::EventInfo *eventInfo);
+
+  /// Clear the stream
+  void clearHashSource();
+
+  /// Get the current hash base
+  std::string hashSource() const { return m_stream.str(); }
+
+  /// Calculate the hash
+  void calculateHash(uuid_t &hash) const;
+
+  /// Convert uuid_t to xAOD::EventInfo::PileUpMixtureID
+  static xAOD::EventInfo::PileUpMixtureID uuidToPileUpMixtureId(const uuid_t &hash);
+
+  /// xAOD::EventInfo::PileUpMixtureID to uuid_t
+  static void pileUpMixtureIdToUuid(const xAOD::EventInfo::PileUpMixtureID &mixture,
+                                    uuid_t &hash);
+
+  /// Size of individual low/high bits in bytes
+  static const uint16_t PILEUP_SIZE_BYTES = 8;
+
+private:
+  std::stringstream m_stream;
+};
+
+#endif // PILEUPCOMPS_PILEUPHASHHELPER_H
diff --git a/Control/PileUpComps/test/PileUpHashHelper_test.cxx b/Control/PileUpComps/test/PileUpHashHelper_test.cxx
new file mode 100644
index 000000000000..ec7b819a1b1f
--- /dev/null
+++ b/Control/PileUpComps/test/PileUpHashHelper_test.cxx
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/// @author Tadej Novak
+
+// Google Test
+#include <gtest/gtest.h>
+
+// The class to test
+#include "PileUpHashHelper.h"
+
+namespace PileUpTesting
+{
+
+class PileUpHashHelper_test : public ::testing::Test {};
+
+TEST_F(PileUpHashHelper_test, empty_mixture) {
+  unsigned long long reference = 0;
+  xAOD::EventInfo::PileUpMixtureID test{};
+
+  ASSERT_EQ(reference, test.lowBits);
+  ASSERT_EQ(reference, test.highBits);
+}
+
+TEST_F(PileUpHashHelper_test, uuid_to_long) {
+  uuid_t source{'a','a','a','a','a','a','a','b','1','0','0','0','0','0','0','0'};
+
+  xAOD::EventInfo::PileUpMixtureID reference;
+  reference.lowBits = 7089054359331365217;
+  reference.highBits = 3472328296227680305;
+
+  xAOD::EventInfo::PileUpMixtureID test = PileUpHashHelper::uuidToPileUpMixtureId(source);
+
+  ASSERT_EQ(reference, test);
+  ASSERT_EQ(reference.lowBits, test.lowBits);
+  ASSERT_EQ(reference.highBits, test.highBits);
+}
+
+TEST_F(PileUpHashHelper_test, long_to_uuid) {
+  uuid_t reference{'a','a','a','a','a','a','a','b','1','0','0','0','0','0','0','0'};
+  uuid_t test{};
+
+  xAOD::EventInfo::PileUpMixtureID source;
+  source.lowBits = 7089054359331365217;
+  source.highBits = 3472328296227680305;
+
+  PileUpHashHelper::pileUpMixtureIdToUuid(source, test);
+
+  ASSERT_EQ(uuid_compare(reference, test), 0);
+}
+
+} // namespace PileUpTesting
+
+int main(int argc, char *argv[]) {
+  ::testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
-- 
GitLab


From 9a548730d33315d7d420df70365cb21bd03ece3b Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Wed, 20 Mar 2019 14:44:00 +0100
Subject: [PATCH 138/163] Final touches and addressing some of John's comments

---
 .../EvgenJobTransforms/python/EvgenConfig.py  |   6 +-
 .../EvgenJobTransforms/python/evgenTrfArgs.py |  20 +-
 .../EvgenJobTransforms/python/jo_proxy.py     |  46 ++++
 .../scripts/AfterBurner_tf.py                 |  35 +---
 .../EvgenJobTransforms/scripts/Generate_tf.py | 136 +++++++-----
 .../RHadrons/python/RHadronsConfig.py         |   7 +-
 .../RHadrons/python/RHadronsConfigDb.py       |   3 +-
 .../RHadrons/src/G4ProcessHelper.cxx          |  14 +-
 .../RHadrons/src/G4ProcessHelper.hh           |  14 +-
 .../RHadrons/src/RHadronsPhysicsTool.cxx      |   2 -
 .../specialConfig/preInclude.RHadrons.py      | 196 ------------------
 .../preInclude.RHadronsPythia8.py             |   3 +-
 12 files changed, 174 insertions(+), 308 deletions(-)
 create mode 100644 Generators/EvgenJobTransforms/python/jo_proxy.py
 delete mode 100644 Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py

diff --git a/Generators/EvgenJobTransforms/python/EvgenConfig.py b/Generators/EvgenJobTransforms/python/EvgenConfig.py
index 8f420585d5cc..c2dbfc83d9db 100644
--- a/Generators/EvgenJobTransforms/python/EvgenConfig.py
+++ b/Generators/EvgenJobTransforms/python/EvgenConfig.py
@@ -1,11 +1,11 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
-## Generators providing input events via the LHEF format (MC\@NLO produces LHEF
+## Generators providing input events via the LHEF format (MC@NLO produces LHEF
 ## when used in connection with Herwig++, which is fine since this variable is
 ## just used to determine the input file dummy-naming strategy for C++ generators)
 lhefGenerators = ["Lhef", # generic name: prefer to use the names below
                   "aMcAtNlo", "McAtNlo", "Powheg", "PowHel", "MadGraph", "CompHep", "CalcHep",
-                  "Whizard", "MCFM", "JHU", "MEtop", "Charybdis", "Charybdis2",
+                  "Whizard", "MCFM", "JHU", "MEtop", "Charybdis", "Charybdis2","BCVEGPY", "Dire4Pythia8",
                   "BlackMax", "QBH", "gg2ww", "gg2zz", "gg2vv", "HvyN", "VBFNLO", "FPMC", "ProtosLHEF"]
 
 ## A more general list of generators which provide partonic input, including non-LHEF ones
diff --git a/Generators/EvgenJobTransforms/python/evgenTrfArgs.py b/Generators/EvgenJobTransforms/python/evgenTrfArgs.py
index f011371933a4..bacd77797510 100644
--- a/Generators/EvgenJobTransforms/python/evgenTrfArgs.py
+++ b/Generators/EvgenJobTransforms/python/evgenTrfArgs.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
@@ -83,7 +83,7 @@ def addStdEvgenArgs(parser):
 
     parser.add_argument("--outputTXTFile", group="Evgen",
                         help="optional output TXT file for LHEF events, default is None",
-                        type=trfArgClasses.argFactory(trfArgClasses.argFile))
+                        type=trfArgClasses.argFactory(trfArgClasses.argLHEFile, io='output', runarg=True))
     parser.add_argument("--generatorRunMode", group="Evgen",
                         help="Run mode to pass on to the event generator",
                         default=trfArgClasses.argString("run", runarg=True),
@@ -99,4 +99,20 @@ def addStdEvgenArgs(parser):
                         default=trfArgClasses.argInt(0, runarg=True),
                         type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True))
 
+    parser.add_argument('--lheOnly', '--lheOnly', group='Evgen',
+                        default=trfArgClasses.argInt(0, runarg=True),
+                        type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True),
+                        help='Set to 1 if Evgen file should be removed')
+
+    parser.add_argument("--localPath", group="Evgen",
+                        help="Name of local path to JOs",
+                        type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True))
 
+    parser.add_argument('--saveList', '--saveList', group='Evgen',
+                        help="a comma-separated list of files to be saved in output or a single digit if the whole output directory is to be saved",
+                        type=trfArgClasses.argFactory(trfArgClasses.argSubstepList, runarg=True))
+
+    parser.add_argument('--cleanOut', '--cleanOut', group='Evgen',
+                        default=trfArgClasses.argInt(0, runarg=True),
+                        type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True),
+                        help='Set to any digit !=0 if the output files should be cleaned up --saveList may help to save selected files')
diff --git a/Generators/EvgenJobTransforms/python/jo_proxy.py b/Generators/EvgenJobTransforms/python/jo_proxy.py
new file mode 100644
index 000000000000..fdbd2b3a75e1
--- /dev/null
+++ b/Generators/EvgenJobTransforms/python/jo_proxy.py
@@ -0,0 +1,46 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Helper functions for setting up a job options proxy
+import os,shutil
+
+def get_immediate_subdirectories(a_dir):
+    return [name for name in os.listdir(a_dir)
+            if os.path.isdir(os.path.join(a_dir, name))]
+
+def mk_jo_proxy(targetbasepath, pkgname, proxypath, addtosearch=True):
+    "Make a JO proxy dir such that the MCxxJobOptions/dddd dirs contents are found via include(MCxxJobOptions/yyyy)"
+    if proxypath:
+        if os.path.exists(proxypath):
+            shutil.rmtree(proxypath)
+        os.mkdir(proxypath)
+    os.environ['LOCAL_INSTALL_DIR'] = (os.environ['JOBOPTSEARCHPATH']).split(":")[0]
+    os.environ['LOCAL_DATA_DIR'] = (os.environ['DATAPATH']).split(":")[0]
+
+    dirlist =  get_immediate_subdirectories(targetbasepath)
+    subdirlist=dirlist;
+    for dd in (dirlist):
+      if (('.svn' not in dd) and ('cmt' not in dd) and ('_joproxy' not in dd)):
+        deepdir = os.path.join(targetbasepath, dd)
+        subdirlist1 = get_immediate_subdirectories(deepdir)
+        subdirlist = subdirlist+["%s" % dd+"/%s" % item for item in subdirlist1]
+    for d in (subdirlist):
+        # TODO: we could _maybe_ add the appropriate share/DSIDxxxx/ dir to the path based on the jobConfig arg... too much magic?
+        if (('.svn' not in d) and ('cmt' not in d) and ('_joproxy' not in d) and ('share/' not in d)):
+          dpath = os.path.join(proxypath, d)
+          if proxypath:
+                   os.mkdir(dpath)
+
+          if ('nonStandard' in dpath):
+                dpath_ex = os.path.join(dpath,pkgname)
+                if proxypath:
+                   os.mkdir(dpath_ex)
+
+                os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath_ex, "nonStandard"))
+          else :
+                os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath, pkgname))
+          if addtosearch:
+            os.environ["JOBOPTSEARCHPATH"] = dpath+":"+os.environ["JOBOPTSEARCHPATH"]
+            os.environ["DATAPATH"] =os.path.join(targetbasepath, d)+":"+os.environ["DATAPATH"]
+
+    os.environ["JOBOPTSEARCHPATH"] = os.environ['LOCAL_INSTALL_DIR']+":"+os.environ["JOBOPTSEARCHPATH"]
+    os.environ["DATAPATH"] = os.environ['LOCAL_DATA_DIR']+":"+os.environ["DATAPATH"]
\ No newline at end of file
diff --git a/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py b/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py
index 5880ed1849dd..232d15d40055 100755
--- a/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py
+++ b/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py
@@ -1,6 +1,6 @@
-#! /usr/bin/env python
+#  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+#! /usr/bin/env python
 
 """
 Run event simulation and produce an EVNT file.
@@ -14,6 +14,7 @@ from PyJobTransforms.trfArgs import addAthenaArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from EvgenJobTransforms.evgenTrfArgs import addStdEvgenArgs
 import PyJobTransforms.trfArgClasses as trfArgClasses
+from EvgenJobTransforms.jo_proxy import mk_jo_proxy
 
 
 ## Prodsys1 hack...
@@ -46,36 +47,6 @@ class EvgenExecutor(athenaExecutor):
                 zf.extractall()
                 zf.close()
 
-        def get_immediate_subdirectories(a_dir):
-            return [name for name in os.listdir(a_dir)
-                    if os.path.isdir(os.path.join(a_dir, name))]                
-
-        def mk_jo_proxy(targetbasepath, pkgname, proxypath, addtosearch=True):
-            "Make a JO proxy dir such that the MCxxJobOptions/dddd dirs contents are found via include(MCxxJobOptions/yyyy)"
-            if proxypath:
-                if os.path.exists(proxypath):
-                    shutil.rmtree(proxypath)
-                os.mkdir(proxypath)
-            os.environ['LOCAL_INSTALL_DIR'] = (os.environ['JOBOPTSEARCHPATH']).split(":")[0]
-            comdir = os.path.join(targetbasepath, "common")
-            subdirlist = get_immediate_subdirectories(comdir)
-            subdirlist1 = ['common/%s' % item for item in subdirlist]
-            dirlist = ['common','share','gencontrol','susycontrol']
-            for d in (dirlist+subdirlist1):
-                # TODO: we could _maybe_ add the appropriate share/DSIDxxxx/ dir to the path based on the jobConfig arg... too much magic?
-                if (d != 'common/.svn'):
-                  dpath = os.path.join(proxypath, d)
-
-                  if proxypath:
-                    os.mkdir(dpath)
-                    os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath, pkgname))
-                  if addtosearch:
-                    os.environ["JOBOPTSEARCHPATH"] = dpath+":"+os.environ["JOBOPTSEARCHPATH"]
-                    os.environ["DATAPATH"] =os.path.join(targetbasepath, d)+":"+os.environ["DATAPATH"]
-
-            os.environ["JOBOPTSEARCHPATH"] = os.environ['LOCAL_INSTALL_DIR']+":"+os.environ["JOBOPTSEARCHPATH"]
-        
-
         ## Handle locating of evgen job options / fragments, either from a tarball or CVMFS
         if "evgenJobOpts" in self._trf.argdict: ## Use a specified JO tarball
             tarball = self._trf.argdict["evgenJobOpts"].value
diff --git a/Generators/EvgenJobTransforms/scripts/Generate_tf.py b/Generators/EvgenJobTransforms/scripts/Generate_tf.py
index 5c8d5fe83546..3b2645e5aeea 100755
--- a/Generators/EvgenJobTransforms/scripts/Generate_tf.py
+++ b/Generators/EvgenJobTransforms/scripts/Generate_tf.py
@@ -1,8 +1,7 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
 """
+#  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 Run event simulation and produce an EVNT file.
 """
 
@@ -14,11 +13,11 @@ from PyJobTransforms.trfArgs import addAthenaArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from EvgenJobTransforms.evgenTrfArgs import addStdEvgenArgs
 import PyJobTransforms.trfArgClasses as trfArgClasses
-
+from EvgenJobTransforms.jo_proxy import mk_jo_proxy
 
 ## Prodsys1 hack...
 # TODO: Remove!
-ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--attempt', '--checkEventCount', '--command', '--dumpJSON', '--dumpPickle', '--ecmEnergy', '--env', '--eventAcceptanceEfficiency', '--evgenJobOpts', '--execOnly', '--fileValidation', '--firstEvent', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputEVNT_PreFile', '--inputFileValidation', '--inputGenConfFile', '--inputGeneratorFile', '--jobConfig', '--jobid', '--maxEvents', '--orphanKiller', '--outputEVNTFile', '--outputEVNT_PreFile', '--outputFileValidation', '--outputNTUP_TRUTHFile', '--outputTXTFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--printEvts', '--randomSeed', '--reportName', '--reportType', '--rivetAnas', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--taskid', '--tcmalloc', '--valgrind', '--valgrindbasicopts', '--valgrindextraopts']
+ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--attempt', '--checkEventCount', '--command', '--dumpJSON', '--dumpPickle', '--ecmEnergy', '--env', '--eventAcceptanceEfficiency', '--evgenJobOpts', '--execOnly', '--fileValidation', '--firstEvent', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputEVNT_PreFile', '--inputFileValidation', '--inputGenConfFile', '--inputGeneratorFile', '--jobConfig', '--jobid', '--maxEvents', '--orphanKiller', '--outputEVNTFile', '--outputEVNT_PreFile', '--outputFileValidation', '--outputNTUP_TRUTHFile', '--outputTXTFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--printEvts', '--randomSeed', '--reportName', '--reportType', '--rivetAnas', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--taskid', '--tcmalloc', '--valgrind', '--valgrindbasicopts', '--valgrindextraopts', '--lheOnly', '--localPath', '--cleanOut', '--saveList']
 
 class EvgenExecutor(athenaExecutor):
     "Specialised trf executor class for event generation jobs"
@@ -45,49 +44,6 @@ class EvgenExecutor(athenaExecutor):
                 zf.extractall()
                 zf.close()
 
-        def get_immediate_subdirectories(a_dir):
-            return [name for name in os.listdir(a_dir)
-                    if os.path.isdir(os.path.join(a_dir, name))]                
-
-        def mk_jo_proxy(targetbasepath, pkgname, proxypath, addtosearch=True):
-            "Make a JO proxy dir such that the MCxxJobOptions/dddd dirs contents are found via include(MCxxJobOptions/yyyy)"
-            if proxypath:
-                if os.path.exists(proxypath):
-                    shutil.rmtree(proxypath)
-                os.mkdir(proxypath)
-            os.environ['LOCAL_INSTALL_DIR'] = (os.environ['JOBOPTSEARCHPATH']).split(":")[0]
-            os.environ['LOCAL_DATA_DIR'] = (os.environ['DATAPATH']).split(":")[0]
-
-            dirlist =  get_immediate_subdirectories(targetbasepath)
-            subdirlist=dirlist;
-            for dd in (dirlist):
-              if (('.svn' not in dd) and ('cmt' not in dd) and ('_joproxy' not in dd)):
-                deepdir = os.path.join(targetbasepath, dd)
-                subdirlist1 = get_immediate_subdirectories(deepdir)
-                subdirlist = subdirlist+["%s" % dd+"/%s" % item for item in subdirlist1]
-            for d in (subdirlist):
-                # TODO: we could _maybe_ add the appropriate share/DSIDxxxx/ dir to the path based on the jobConfig arg... too much magic?
-                if (('.svn' not in d) and ('cmt' not in d) and ('_joproxy' not in d) and ('share/' not in d)):
-                  dpath = os.path.join(proxypath, d)
-                  if proxypath:
-                           os.mkdir(dpath)
-
-                  if ('nonStandard' in dpath):
-                        dpath_ex = os.path.join(dpath,pkgname)
-                        if proxypath:
-                           os.mkdir(dpath_ex)
-                            
-                        os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath_ex, "nonStandard"))
-                  else :      
-                        os.symlink(os.path.join(targetbasepath, d), os.path.join(dpath, pkgname))
-                  if addtosearch:
-                    os.environ["JOBOPTSEARCHPATH"] = dpath+":"+os.environ["JOBOPTSEARCHPATH"]
-                    os.environ["DATAPATH"] =os.path.join(targetbasepath, d)+":"+os.environ["DATAPATH"]
-
-            os.environ["JOBOPTSEARCHPATH"] = os.environ['LOCAL_INSTALL_DIR']+":"+os.environ["JOBOPTSEARCHPATH"]
-            os.environ["DATAPATH"] = os.environ['LOCAL_DATA_DIR']+":"+os.environ["DATAPATH"]
-        
-
         ## Handle locating of evgen job options / fragments, either from a tarball or CVMFS
         # read the JO used
         joparam = self._trf.argdict["jobConfig"].value
@@ -132,9 +88,16 @@ class EvgenExecutor(athenaExecutor):
             else:    
                 msg.info('ATLAS_SW_BASE path: %s' %sw_base)
 
+            local_path = None
+            if ("localPath" in self._trf.argdict ):
+                local_path = self._trf.argdict["localPath"].value
+                print("local path",local_path)
             cvmfs_path = os.path.join(sw_base, "atlas.cern.ch")
             
-            if os.path.exists(cvmfs_path):
+            if ((local_path is not None) and (os.path.exists(local_path))) :
+              mk_jo_proxy(local_path, "MC15JobOptions","_joproxy15")
+              print("JO fragments taken from local path i.e. ",local_path)             
+            elif os.path.exists(cvmfs_path):
                 # TODO: Make the package name configurable
                 if "MC14" in str(joparam):
                     cvmfs_mc14 = os.path.join(cvmfs_path, "repo/sw/Generators/MC14JobOptions/latest/")
@@ -154,10 +117,29 @@ class EvgenExecutor(athenaExecutor):
 
         ## Expand tarball input event and generator conf files, if provided
         if "inputGeneratorFile" in self._trf.argdict:
-            expand_if_archive(self._trf.argdict["inputGeneratorFile"].value)
+#            expand_if_archive(self._trf.argdict["inputGeneratorFile"].value)
+            myinputfiles = self._trf.argdict["inputGeneratorFile"].value
+            genInputFiles = myinputfiles.split(',')
+            for file in genInputFiles:
+               expand_if_archive(file)
         if "inputGenConfFile" in self._trf.argdict:
             expand_if_archive(self._trf.argdict["inputGenConfFile"].value)
 
+def move_files(main_dir,tmp_dir,whitelist):
+    files = os.listdir(tmp_dir)
+    print("list of files ",files)
+    print("white list ",whitelist)    
+    files.sort()
+    for f in files:
+       for i in whitelist:
+            if i in f:
+                src = tmp_dir+"/"+f
+                dest = main_dir+"/"+f
+#                print("src ",src)
+#                print("dest ",dest)
+                os.rename(src,dest)
+                break
+
 
 def getTransform():
     exeSet = set()
@@ -175,11 +157,67 @@ def getTransform():
 @sigUsrStackTrace
 def main():
     msg.info("This is %s" % sys.argv[0])
+    main_dir = os.getcwd()
     trf = getTransform()
     trf.parseCmdLineArgs(sys.argv[1:])
+#    print("main ",main_dir)
+    if (("cleanOut" in trf.argdict) and (trf.argdict["cleanOut"].value != 0)):
+      name_tmpdir = "tmprun"
+      tmp_dir = os.path.join(main_dir, name_tmpdir)
+#    print("tmpdir ",tmp_dir)
+      if os.path.isdir(tmp_dir):
+         shutil.rmtree(tmp_dir, ignore_errors=True)
+      os.mkdir("tmprun")
+      os.chdir("tmprun")
+      tmp_dir = os.getcwd()
+      whitelist_in = ['MC','group','TXT']
+      move_files(tmp_dir,main_dir,whitelist_in)
+      
+#    trf = getTransform()
+#    trf.parseCmdLineArgs(sys.argv[1:])
     trf.execute()
     trf.generateReport()
     msg.info("%s stopped at %s, trf exit code %d" % (sys.argv[0], time.asctime(), trf.exitCode))
+
+
+#    if "outputTXTFile" in trf.argdict:
+#      whitelist_out.append('TXT')
+
+# read files/dirs that should be saved and if present in cwd - remove
+
+    if (("cleanOut" in trf.argdict) and (trf.argdict["cleanOut"].value!=0)):
+#       print("mamy cleanOut !!!",trf.argdict["cleanOut"].value) 
+       whitelist_out = ['log.generate','.root']
+       if "outputTXTFile" in trf.argdict:
+          whitelist_out.append('TXT')
+       if "saveList" in trf.argdict:
+         saveList_dic= trf.argdict["saveList"].value
+         saveList_str= str(saveList_dic)
+         saveList_str=saveList_str[10:-3]
+         saveList= saveList_str.split(",")
+         for item in saveList:
+           test_ex = os.path.join(main_dir,str(item))
+           if os.path.isdir(test_ex):
+             shutil.rmtree(test_ex, ignore_errors=True)
+#           print("directory removed ", test_ex)
+           elif os.path.isfile(test_ex):
+             os.remove(test_ex)
+#           print("file removed ", test_ex)        
+#       new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit())
+         if not saveList[0].isdigit():
+             whitelist_out=whitelist_out+saveList 
+
+       move_files(main_dir,tmp_dir,whitelist_out)
+       os.chdir(main_dir)
+       if "saveList" not in trf.argdict:
+         shutil.rmtree(tmp_dir, ignore_errors=True)
+#    elif firstSaveList!=1:
+       elif not saveList[0].isdigit():
+         shutil.rmtree(tmp_dir, ignore_errors=True)  
+
+    if (("lheOnly" in trf.argdict ) and (trf.argdict["lheOnly"].value == 1)):
+          outputName = ''.join(trf.argdict["outputEVNTFile"].value)
+          os.remove(outputName)
     sys.exit(trf.exitCode)
 
 
diff --git a/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py b/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
index 045f902fee1d..e72e7c5a909b 100644
--- a/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
+++ b/Simulation/G4Extensions/RHadrons/python/RHadronsConfig.py
@@ -20,10 +20,5 @@ def getSG_StepNtupleTool(name="G4UA::SG_StepNtupleTool", **kwargs):
     from RHadrons.RHadronsConf import G4UA__SG_StepNtupleTool
     return G4UA__SG_StepNtupleTool(name, **kwargs)
 
-def getRHadronsPythiaPhysicsTool(name='RHadronsPythiaPhysicsTool', **kwargs):
-    kwargs.setdefault('UsePythia8',False)
-    return CfgMgr.RHadronsPhysicsTool(name,**kwargs)
-
-def getRHadronsPythia8PhysicsTool(name='RHadronsPythia8PhysicsTool', **kwargs):
-    kwargs.setdefault('UsePythia8',True)
+def getRHadronsPhysicsTool(name='RHadronsPhysicsTool', **kwargs):
     return CfgMgr.RHadronsPhysicsTool(name,**kwargs)
diff --git a/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py b/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
index e215e5899b9e..c8b300560fa9 100644
--- a/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
+++ b/Simulation/G4Extensions/RHadrons/python/RHadronsConfigDb.py
@@ -3,5 +3,4 @@
 from AthenaCommon.CfgGetter import addTool
 
 addTool("RHadrons.RHadronsConfig.getSG_StepNtupleTool", "G4UA::SG_StepNtupleTool")
-addTool("RHadrons.RHadronsConfig.getRHadronsPythiaPhysicsTool", "RHadronsPythiaPhysicsTool")
-addTool("RHadrons.RHadronsConfig.getRHadronsPythia8PhysicsTool", "RHadronsPythia8PhysicsTool")
+addTool("RHadrons.RHadronsConfig.getRHadronsPhysicsTool", "RHadronsPhysicsTool")
diff --git a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
index aa4f056c7e34..19ed5ca80e56 100644
--- a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.cxx
@@ -468,7 +468,7 @@ ReactionProduct G4ProcessHelper::GetFinalState(const G4Track& aTrack, G4Particle
   return theReactionProductList[i];
 }
 
-G4double G4ProcessHelper::ReactionProductMass(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle){
+G4double G4ProcessHelper::ReactionProductMass(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const {
   // Incident energy:
   G4double E_incident = aDynamicParticle->GetTotalEnergy();
   //G4cout<<"Total energy: "<<E_incident<<" Kinetic: "<<aDynamicParticle->GetKineticEnergy()<<G4endl;
@@ -488,18 +488,18 @@ G4double G4ProcessHelper::ReactionProductMass(const ReactionProduct& aReaction,c
   return sqrts - M_after;
 }
 
-G4bool G4ProcessHelper::ReactionIsPossible(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle){
+G4bool G4ProcessHelper::ReactionIsPossible(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const{
   if (ReactionProductMass(aReaction,aDynamicParticle)>0) return true;
   return false;
 }
 
-G4bool G4ProcessHelper::ReactionGivesBaryon(const ReactionProduct& aReaction){
+G4bool G4ProcessHelper::ReactionGivesBaryon(const ReactionProduct& aReaction) const{
   for (ReactionProduct::const_iterator it = aReaction.begin();it!=aReaction.end();it++)
     if(CustomPDGParser::s_isSbaryon(*it)||CustomPDGParser::s_isRBaryon(*it)) return true;
   return false;
 }
 
-G4double G4ProcessHelper::PhaseSpace(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle){
+G4double G4ProcessHelper::PhaseSpace(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const{
   G4double qValue = ReactionProductMass(aReaction,aDynamicParticle);
   // Eq 4 of https://arxiv.org/pdf/hep-ex/0404001.pdf
   G4double phi = sqrt(1+qValue/(2*0.139*CLHEP::GeV))*pow(qValue/(1.1*CLHEP::GeV),3./2.);
@@ -508,7 +508,7 @@ G4double G4ProcessHelper::PhaseSpace(const ReactionProduct& aReaction,const G4Dy
 
 void G4ProcessHelper::ReadAndParse(const G4String& str,
                                    std::vector<G4String>& tokens,
-                                   const G4String& delimiters)
+                                   const G4String& delimiters) const
 {
   // Skip delimiters at beginning.
   G4String::size_type lastPos = str.find_first_not_of(delimiters, 0);
@@ -536,7 +536,7 @@ void G4ProcessHelper::ReadAndParse(const G4String& str,
     }
 }
 
-double G4ProcessHelper::Regge(const double boost)
+double G4ProcessHelper::Regge(const double boost) const
 {
   // https://link.springer.com/content/pdf/10.1140%2Fepjc%2Fs10052-010-1262-1.pdf Eq 1
   // Originally from https://arxiv.org/pdf/0710.3930.pdf
@@ -547,7 +547,7 @@ double G4ProcessHelper::Regge(const double boost)
 }
 
 
-double G4ProcessHelper::Pom(const double boost)
+double G4ProcessHelper::Pom(const double boost) const
 {
   // https://link.springer.com/content/pdf/10.1140%2Fepjc%2Fs10052-010-1262-1.pdf Eq 2
   // Originally from https://arxiv.org/pdf/0710.3930.pdf
diff --git a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.hh b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.hh
index 897162d34604..f833bcf6cdfb 100644
--- a/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.hh
+++ b/Simulation/G4Extensions/RHadrons/src/G4ProcessHelper.hh
@@ -54,18 +54,18 @@ private:
 
   static G4ProcessHelper* pinstance;
 
-  G4double Regge(const double boost);
-  G4double Pom(const double boost);
+  G4double Regge(const double boost) const;
+  G4double Pom(const double boost) const;
 
-  G4double PhaseSpace(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle);
+  G4double PhaseSpace(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const;
 
-  G4double ReactionProductMass(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle);
+  G4double ReactionProductMass(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const;
 
-  G4bool ReactionIsPossible(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle);
-  G4bool ReactionGivesBaryon(const ReactionProduct& aReaction);
+  G4bool ReactionIsPossible(const ReactionProduct& aReaction,const G4DynamicParticle* aDynamicParticle) const;
+  G4bool ReactionGivesBaryon(const ReactionProduct& aReaction) const;
   void ReadAndParse(const G4String& str,
                     std::vector<G4String>& tokens,
-                    const G4String& delimiters = " ");
+                    const G4String& delimiters = " ") const;
 
   //Map of applicable particles
   std::map<const G4ParticleDefinition*,G4bool> known_particles;
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index 138c82872cdd..da8a93b21668 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -38,8 +38,6 @@ RHadronsPhysicsTool::RHadronsPhysicsTool( const std::string& type,
                                           const std::string& nam,const IInterface* parent )
   : base_class ( type, nam , parent )
 {
-  ATH_MSG_VERBOSE ( "RHadronsPhysicsTool "<<type<<" "<<nam );
-  declareInterface< IPhysicsOptionTool >( this ) ;
 }
 
 //=============================================================================
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
deleted file mode 100644
index 364ce68b1b2c..000000000000
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadrons.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#########################################################################
-#      preInclude.RHadronsPythia8.py
-#         Re-write of preInclude.RHadrons.py , relying on Pythia8 and
-#         new mass spectrum infrastructure and helper functions
-#########################################################################
-
-import os
-
-from AthenaCommon import Logging
-rhlog = Logging.logging.getLogger('RHadronConfig')
-
-def create_rhadron_particles_file(input_param_card='SLHA_INPUT.DAT',spectrum=1):
-    """Create a list of particles for custom particle creation"""
-    # Just use our helper function
-    from RHadrons.RHadronMasses import update_particle_table
-    update_particle_table(input_param_card, 'particles.txt', mass_spectrum=spectrum)
-
-
-def create_rhadron_pdgtable(input_param_card='SLHA_INPUT.DAT',spectrum=1):
-    """Add lines to the PDG table"""
-
-    # Download generic PDGTABLE (overwrite existing one if it exists)
-    os.system('get_files -remove -data PDGTABLE.MeV')
-
-    # Update the PDG table using our helper function
-    from RHadrons.RHadronMasses import update_PDG_table
-    update_PDG_table('SLHA_INPUT.DAT','PDGTABLE.MeV',spectrum)
-
-
-def addLineToPhysicsConfiguration(KEY, VALUE):
-    """Add lines to the physics configuration"""
-    os.system('touch PhysicsConfiguration.txt')
-    newphysconfig = "{key} = {value}".format(key=KEY, value=VALUE)
-    os.system('echo "%s" >> PhysicsConfiguration.txt' % newphysconfig)
-
-
-def load_files_for_rhadrons_scenario(input_param_card='SLHA_INPUT.DAT',spectrum=1):
-    """ Load all the files needed for a given scenario"""
-    # Create custom PDGTABLE.MeV file
-    create_rhadron_pdgtable(input_param_card,spectrum)
- 
-    # Create particles.txt file
-    create_rhadron_particles_file(input_param_card,spectrum)
-
-    from RHadrons.RHadronMasses import get_interaction_list
-    get_interaction_list(input_param_card, interaction_file='ProcessList.txt', mass_spectrum=spectrum)
-
-    # Remove existing physics configuration file ([MDJ]: FIXME: Is this happening earlier, or is it needed?)
-    if os.path.isfile('PhysicsConfiguration.txt'):
-        rhlog.warning("load_files_for_rhadrons_scenario() Found pre-existing PhysicsConfiguration.txt file - deleting.")
-        os.remove('PhysicsConfiguration.txt')
-
-  
-# Whether we're in sim or digi
-doG4SimConfig = True
-
-# Keep the run number, aka DSID
-runNumber = -1
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-import PyUtils.AthFile as af
-try:
-    f = af.fopen(athenaCommonFlags.FilesInput()[0])
-    if 'generators' in f.infos['tag_info']:
-        usePythia8 = 'Py8' in f.infos['tag_info']['generators'] or 'Pythia8' in f.infos['tag_info']['generators']
-        if not usePythia8: raise RuntimeError('Pythia8 not found in generator metadata - will abort')
-    # MC Channel Number.  Try the standard two spots, and fall back to the run number for evgen
-    if 'mc_channel_number' in f.infos and len(f.infos['mc_channel_number'])>0:
-        runNumber = f.infos['mc_channel_number'][0]
-    if runNumber<=0 and 'mc_channel_number' in f.infos['tag_info']:
-        runNumber = f.infos['tag_info']['mc_channel_number']
-    if runNumber<=0:
-        runNumber = f.infos['run_number'][0]
-    print 'ZLM:',f.infos
-    # This is also used for digitization, so protect in case we're there
-    if "StreamHITS" in f.infos["stream_names"]:
-        from Digitization.DigitizationFlags import digitizationFlags
-        simdict = digitizationFlags.specialConfiguration.get_Value()
-        doG4SimConfig = False
-    else:
-        from G4AtlasApps.SimFlags import simFlags
-        simdict = simFlags.specialConfiguration.get_Value()
-except:
-    from G4AtlasApps.SimFlags import simFlags
-    simdict = simFlags.specialConfiguration.get_Value()
-
-# Add the appropriate physics tool
-from G4AtlasApps.SimFlags import simFlags
-simFlags.PhysicsOptions += ["RHadronsPythia8PhysicsTool"]
-
-
-# From the run number, load up the configuration.  Not the most beautiful thing, but this works.
-from glob import glob
-# Default position: look in cvmfs for job options
-cvmfs_mc15 = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest/'
-JO = glob(cvmfs_mc15+'/share/DSID'+str(runNumber/1000)+'xxx/MC15.'+str(runNumber)+'*.py')
-if len(JO)>0:
-    JO = JO[0]
-else:
-    # Miss.  Try local
-    JO = glob('MC15.'+str(runNumber)+'*.py')
-    if len(JO)>0: JO=JO[0]
-    else:
-        # Miss.  Try one directory deeper
-        JO = glob('*/MC15.'+str(runNumber)+'*.py')
-        if len(JO)>0: JO=JO[0]
-        else:
-            # Miss.  Fall back to datapath
-            for adir in os.environ['DATAPATH'].split(":"):
-                JO = glob(adir+'/MC15.'+str(runNumber)+'*.py')
-                if len(JO)>0:
-                    JO=JO[0]
-                    break
-if not JO:
-    raise RuntimeError('Could not locate job options for DSID '+str(runNumber))
-# add any necessary elements to the runArgs here!
-runArgs.jobConfig = [JO.split('/')[-1] if '/' in JO else JO]
-runArgs.runNumber = runNumber
-# Set up evgenLog logger - use this one
-evgenLog=rhlog
-# Set up evgenConfig just for a holder
-class dummyClass():
-    def __init(self):
-        pass
-    keywords = [] # So that they can be +='d in
-evgenConfig = dummyClass()
-evgenConfig.generators = []
-evgenConfig.auxfiles = []
-# Set up a fake pythia8...
-genSeq = dummyClass()
-genSeq.Pythia8 = dummyClass()
-# Standard list of commands stolen from the Pythia8 base fragment
-genSeq.Pythia8.Commands = [
-    "6:m0 = 172.5",
-    "23:m0 = 91.1876",
-    "23:mWidth = 2.4952",
-    "24:m0 = 80.399",
-    "24:mWidth = 2.085",
-    "StandardModel:sin2thetaW = 0.23113",
-    "StandardModel:sin2thetaWbar = 0.23146",
-    "ParticleDecays:limitTau0 = on",
-    "ParticleDecays:tau0Max = 10.0"]
-# Set up a fake TestHepMC
-testSeq = dummyClass()
-testSeq.TestHepMC = dummyClass()
-# Block includes that we don't want running
-include.block('MC15JobOptions/MadGraphControl_SimplifiedModelPostInclude.py')
-include.block('MC15JobOptions/Pythia8_Base_Fragment.py')
-include.block('MC15JobOptions/Pythia8_EvtGen.py')
-include.block('MC15JobOptions/Pythia8_LHEF.py')
-
-# Make sure all the files can be found
-from EvgenJobTransforms.jo_proxy import mk_jo_proxy
-mk_jo_proxy(cvmfs_mc15, "MC15JobOptions", "_joproxy15")
-
-# Updating JOBOPTSEARCHPATH env var on the athena side
-import re,os
-from AthenaCommon import Include
-Include.optionsPathEnv = os.environ[ 'JOBOPTSEARCHPATH' ]
-Include.optionsPath = re.split( ',|' + os.pathsep, Include.optionsPathEnv )
-
-# Include the job options themselves
-include(JO)
-
-# Build the param card, aka SLHA file
-from MadGraphControl.MadGraphUtils import build_param_card
-build_param_card(param_card_old='param_card.SM.%s.%s.dat'%(gentype,decaytype),param_card_new='SLHA_INPUT.DAT',masses=masses,decays=decays)
-
-# Get the spectrum number if it's in the metadata
-spectrum = 1 if 'SPECTRUM' not in simdict else simdict['SPECTRUM']
-
-# Last step, load up the files
-load_files_for_rhadrons_scenario('SLHA_INPUT.DAT',spectrum)
-
-
-# Add any lines that were missing
-# In case we want to use Pythia8 for decays during simulation
-lifetime = float(simdict['LIFETIME']) if simdict.has_key("LIFETIME") else -1.
-if lifetime<1. and hasattr(runArgs,'outputEVNT_TRFile'):
-    rhlog.warning('Lifetime specified at <1ns, but you are writing stopped particle positions.')
-    rhlog.warning('Assuming that you mean to use infinite lifetimes, and ignoring the setting')
-else:
-    addLineToPhysicsConfiguration("DoDecays","1")
-    addLineToPhysicsConfiguration("HadronLifeTime", str(lifetime))
-# If we reading particle records, and the lifetime is short, stop them as well
-if lifetime<1. and hasattr(runArgs,'inputEVNT_TRFile'):
-    addLineToPhysicsConfiguration("DoDecays","1")
-    addLineToPhysicsConfiguration("HadronLifeTime", 0.000001)
-
-# Capture Pythia8 commands
-# Set up R-hadron masses in Pythia8
-from RHadrons.RHadronMasses import get_Pythia8_commands
-genSeq.Pythia8.Commands += get_Pythia8_commands('SLHA_INPUT.DAT',spectrum)
-f = open('PYTHIA8_COMMANDS.TXT','w')
-f.write('\n'.join(genSeq.Pythia8.Commands))
-f.close()
-# Done with the Pythia8 setup
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
index 364ce68b1b2c..a754539c66e1 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.RHadronsPythia8.py
@@ -70,7 +70,6 @@ try:
         runNumber = f.infos['tag_info']['mc_channel_number']
     if runNumber<=0:
         runNumber = f.infos['run_number'][0]
-    print 'ZLM:',f.infos
     # This is also used for digitization, so protect in case we're there
     if "StreamHITS" in f.infos["stream_names"]:
         from Digitization.DigitizationFlags import digitizationFlags
@@ -85,7 +84,7 @@ except:
 
 # Add the appropriate physics tool
 from G4AtlasApps.SimFlags import simFlags
-simFlags.PhysicsOptions += ["RHadronsPythia8PhysicsTool"]
+simFlags.PhysicsOptions += ["RHadronsPhysicsTool"]
 
 
 # From the run number, load up the configuration.  Not the most beautiful thing, but this works.
-- 
GitLab


From a269e8c87e552f7bc2c753f95616b8c0d3409b5e Mon Sep 17 00:00:00 2001
From: Zach Marshall <ZLMarshall@lbl.gov>
Date: Wed, 20 Mar 2019 15:26:21 +0100
Subject: [PATCH 139/163] Variable name change

---
 .../G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx     | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index da8a93b21668..5992cfda6466 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -75,8 +75,8 @@ void RHadronsPhysicsTool::ConstructProcess()
   ATH_MSG_DEBUG("RHadronProcessDefinition::ConstructProcess() called");
   G4Decay* theDecayProcess = new G4Decay();
   theDecayProcess->SetExtDecayer( new RHadronPythiaDecayer("RHadronPythiaDecayer") );
-  G4ParticleTable::G4PTblDicIterator* aParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator();
-  aParticleIterator->reset();
+  G4ParticleTable::G4PTblDicIterator* particleIterator = G4ParticleTable::GetParticleTable()->GetIterator();
+  particleIterator->reset();
 
   //First deal with the standard particles that G4 doesn't know about...
   //G4Etac::Definition();
@@ -215,8 +215,8 @@ void RHadronsPhysicsTool::ConstructProcess()
   // Now add RHadrons... Keep a vector of those we've already dealt with
   std::vector<int> handled;
   // Use the G4 particle iterator
-  while((*aParticleIterator)()) {
-    G4ParticleDefinition *particle = aParticleIterator->value();
+  while((*particleIterator)()) {
+    G4ParticleDefinition *particle = particleIterator->value();
     if(CustomParticleFactory::isCustomParticle(particle)) {
       if(find(handled.begin(),handled.end(),particle->GetPDGEncoding())==handled.end()) {
         handled.push_back(particle->GetPDGEncoding());
-- 
GitLab


From 35e2c1e2513770b7fb5c468e1cb0b3e016ed3369 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Wed, 20 Mar 2019 16:23:51 +0000
Subject: [PATCH 140/163] Cleanups of SCT_Monitoring package (ATLASDQ-679)

---
 .../share/InDetMonitoringSCT.py               |  85 +--
 .../SCT_Monitoring/SCTErrMonTool.h            |   9 +-
 .../SCT_Monitoring/SCTHitEffMonTool.h         |  18 +-
 .../SCT_Monitoring/SCTHitsNoiseMonTool.h      |  24 +-
 .../SCT_Monitoring/SCTLorentzMonTool.h        |   5 +-
 .../SCT_Monitoring/SCTMotherTrigMonTool.h     |   3 +-
 .../SCT_Monitoring/SCTRatioNoiseMonTool.h     |   6 +-
 .../SCT_Monitoring/SCTTracksMonTool.h         |   6 +-
 .../SCT_Monitoring/src/SCTErrMonTool.cxx      | 193 +++--
 .../SCT_Monitoring/src/SCTHitEffMonTool.cxx   | 673 ++++++++----------
 .../src/SCTHitsNoiseMonTool.cxx               | 234 ++----
 .../SCT_Monitoring/src/SCTLorentzMonTool.cxx  |  34 +-
 .../src/SCTMotherTrigMonTool.cxx              |   3 +-
 .../src/SCTRatioNoiseMonTool.cxx              |  60 +-
 .../SCT_Monitoring/src/SCTTracksMonTool.cxx   | 147 ++--
 .../SCT_Monitoring/src/cArrayUtilities.h      |  79 --
 16 files changed, 609 insertions(+), 970 deletions(-)
 delete mode 100644 InnerDetector/InDetMonitoring/SCT_Monitoring/src/cArrayUtilities.h

diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
index ccc641945747..79733958750a 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringSCT.py
@@ -6,45 +6,35 @@ from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 # These lines were previously in SCT_Monitoring_ConditionsAccess.py
 ########################################################################
 
-doTriggger_InDetSCTHitsTool = False
+tracksName = (InDetKeys.SCTTracks() if InDetFlags.doTrackSegmentsSCT() else InDetKeys.UnslimmedTracks())
+
+doTriggger = False
 TrigDecisionTool_InDetSCTHitsTool = ""
 if globalflags.DataSource == "data":
   from RecExConfig.RecFlags import rec
   if rec.doTrigger():
-    doTriggger_InDetSCTHitsTool = True
+    doTriggger = True
     TrigDecisionTool_InDetSCTHitsTool = DQMonFlags.nameTrigDecTool()
 from SCT_Monitoring.SCT_MonitoringConf import SCTHitsNoiseMonTool
-InDetSCTHitsTool = SCTHitsNoiseMonTool ( name                         = "InDetSCTHitsNoiseMonTool",
-                                         OutputLevel                  = 4,
-                                         doHitmapHistos               = False,
-                                         CheckRate                    = 1000,
-                                         doPositiveEndcap             = True,
-                                         doNegativeEndcap             = True,
-                                         doTrigger = doTriggger_InDetSCTHitsTool,
-                                         TrigDecisionTool = TrigDecisionTool_InDetSCTHitsTool)
-
-InDetSCTHitsTool.tracksName = InDetKeys.SCTTracks() if  InDetFlags.doTrackSegmentsSCT() else InDetKeys.UnslimmedTracks()
-
-#ToolSvc += InDetSCTHitsTool
+InDetSCTHitsTool = SCTHitsNoiseMonTool ( name = "InDetSCTHitsNoiseMonTool",
+                                         OutputLevel = 4,
+                                         doTrigger = doTriggger,
+                                         TrigDecisionTool = TrigDecisionTool_InDetSCTHitsTool,
+                                         tracksName = tracksName )
+
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTHitsTool
 
 from SCT_Monitoring.SCT_MonitoringConf import SCTTracksMonTool
 InDetSCTTracksMonTool = SCTTracksMonTool ( name             = "InDetSCTTracksMonTool",
                                            OutputLevel      = 4,
-                                           CheckRate        = 1000,
-                                           doPositiveEndcap = True,
-                                           doNegativeEndcap = True,
-                                           doUnbiasedCalc   = True,
-                                           doTrigger        = globalflags.DataSource == "data")
-
-InDetSCTTracksMonTool.tracksName = InDetKeys.SCTTracks() if  InDetFlags.doTrackSegmentsSCT() else InDetKeys.UnslimmedTracks()
+                                           doTrigger        = doTriggger,
+                                           tracksName       = tracksName )
 
 if jobproperties.Beam.beamType()=='collisions':
   from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool
   InDetSCTTracksMonTool.FilterTools += [GetFilledBunchFilterTool()]
 
-#ToolSvc += InDetSCTTracksMonTool
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTTracksMonTool
 
@@ -56,16 +46,12 @@ from SCT_Monitoring.SCT_MonitoringConf import SCTErrMonTool
 InDetSCTErrMonTool = SCTErrMonTool ( name             = "InDetSCTErrMonTool",
                                      OutputLevel      = 4,
                                      histoPathBase    = "/stat",
-                                     CheckRate        = 1000,
-                                     doPositiveEndcap = True,
-                                     doNegativeEndcap = True,
                                      SCT_DCSConditionsTool = sct_DCSConditionsToolSetup.getTool())
 
 if jobproperties.Beam.beamType()=='collisions':
   from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool
   InDetSCTErrMonTool.FilterTools += [GetFilledBunchFilterTool()]
   
-#ToolSvc += InDetSCTErrMonTool
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTErrMonTool
                
@@ -84,32 +70,21 @@ SCT_BunchCrossingTool = BunchCrossingTool()
 
 from SCT_Monitoring.SCT_MonitoringConf import SCTHitEffMonTool
 InDetSCTHitEffMonTool = SCTHitEffMonTool(name = "InDetSCTHitEffMonTool",
-                                         DetectorMode            = 3,
                                          OutputLevel             = 4,
                                          IsCosmic                = InDetFlags.doCosmics(),
-                                         UseMasks                = False,
-                                         LookAtDatabase          = False,
-                                         ChronoTime              = False,
                                          HoleSearch              = InDetHoleSearchTool,
-                                         IsSim                   = globalflags.DataSource != "data",
+                                         IsSim                   = (globalflags.DataSource != "data"),
                                          ROTCreator              = SCT_ClusterOnTrackTool,
-                                         BunchCrossingTool       = SCT_BunchCrossingTool)
-
-InDetSCTHitEffMonTool.TrackName = InDetKeys.SCTTracks() if  InDetFlags.doTrackSegmentsSCT() else InDetKeys.UnslimmedTracks()
+                                         BunchCrossingTool       = SCT_BunchCrossingTool,
+                                         TrackName               = tracksName)
 
 if jobproperties.Beam.beamType()=='collisions':
   from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool
   InDetSCTHitEffMonTool.FilterTools += [GetFilledBunchFilterTool()]
   
-#ToolSvc += InDetSCTHitEffMonTool
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTHitEffMonTool
 
-#from SCT_Monitoring.SCT_MonitoringConf import SCTTimeDependentMonTool
-#SCTTimeDependentMonTool = SCTTimeDependentMonTool("SCTTimeDependentMonTool")
-#ToolSvc+=SCTTimeDependentMonTool
-#InDetSCTMonMan.AthenaMonTools += [SCTTimeDependentMonTool]
-
 from SCT_Monitoring.SCT_MonitoringConf import SCTLorentzMonTool
 from BTagging.BTaggingConfiguration_CommonTools import toolAtlasExtrapolator
 atlasExtrapolator = toolAtlasExtrapolator('AtlasExtrapolator')
@@ -117,31 +92,24 @@ options = {}
 options.setdefault('Extrapolator', atlasExtrapolator)
 from TrackToVertex.TrackToVertexConf import Reco__TrackToVertex
 trackToVertex = Reco__TrackToVertex(**options)
-InDetSCTLorentzMonTool = SCTLorentzMonTool ( name             = "InDetSCTLorentzMonTool", TrackToVertexTool = trackToVertex,
-                                             OutputLevel      = 4)
-
-InDetSCTLorentzMonTool.tracksName = InDetKeys.SCTTracks() if  InDetFlags.doTrackSegmentsSCT() else InDetKeys.UnslimmedTracks()
+InDetSCTLorentzMonTool = SCTLorentzMonTool ( name             = "InDetSCTLorentzMonTool",
+                                             TrackToVertexTool = trackToVertex,
+                                             OutputLevel      = 4,
+                                             tracksName       = tracksName )
 
 if jobproperties.Beam.beamType()=='collisions':
   from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool
   InDetSCTLorentzMonTool.FilterTools += [GetFilledBunchFilterTool()]
   
-#ToolSvc += InDetSCTLorentzMonTool
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTLorentzMonTool
 
 
 from SCT_Monitoring.SCT_MonitoringConf import SCTRatioNoiseMonTool
-InDetSCTRatioNoiseMonTool = SCTRatioNoiseMonTool ( name             = "InDetSCTRatioNoiseMonTool",
-                                             OutputLevel      = 4,
-                                                   doTrigger = globalflags.DataSource == "data")
-
+InDetSCTRatioNoiseMonTool = SCTRatioNoiseMonTool ( name        = "InDetSCTRatioNoiseMonTool",
+                                                   OutputLevel = 4,
+                                                   doTrigger   = doTriggger )
 
-from RecExConfig.RecFlags import rec
-if not rec.doTrigger():
-  InDetSCTRatioNoiseMonTool.doTrigger=False
-
-#ToolSvc += InDetSCTRatioNoiseMonTool
 if (InDetFlags.doPrintConfigurables()):
   print InDetSCTRatioNoiseMonTool
            
@@ -156,9 +124,12 @@ InDetSCTMonMan = AthenaMonManager("InDetSCTMonManager",
                                   Environment         = DQMonFlags.monManEnvironment(),
                                   Run                 = DQMonFlags.monManRun(),
                                   LumiBlock           = DQMonFlags.monManLumiBlock(),
-
-
-AthenaMonTools      = [ InDetSCTTracksMonTool, InDetSCTRatioNoiseMonTool, InDetSCTLorentzMonTool, InDetSCTHitEffMonTool, InDetSCTHitsTool, InDetSCTErrMonTool ] )
+                                  AthenaMonTools      = [ InDetSCTTracksMonTool,
+                                                          InDetSCTRatioNoiseMonTool,
+                                                          InDetSCTLorentzMonTool,
+                                                          InDetSCTHitEffMonTool,
+                                                          InDetSCTHitsTool,
+                                                          InDetSCTErrMonTool ] )
 
 topSequence += InDetSCTMonMan
 if (InDetFlags.doPrintConfigurables()):
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
index 5a4a65a4c6c8..e9b4d03f0a6a 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
@@ -127,8 +127,8 @@ class SCTErrMonTool : public ManagedMonitorToolBase
 
   TH1I* m_nErrors;
   TH1I* m_nLinksWithErrors;
-  int* m_nErrors_buf;
-  int* m_nLinksWithErrors_buf;
+  std::vector<int> m_nErrors_buf;
+  std::vector<int> m_nLinksWithErrors_buf;
   int m_nErrors_pos;
 
   TH1I* m_MaskedAllLinks; // maskedLinks||maskedRODs
@@ -158,7 +158,6 @@ class SCTErrMonTool : public ManagedMonitorToolBase
   // NOTE: The following is not the usual index order, which goes C, Barrel, A
   enum {iECm=0, iBARREL=1, iECp=2, iGEN=3 }; //iECp==EA, iECm==EC
 
-  std::string m_stream;
   std::string m_path;
   /// CheckHists() frequency
   int m_checkrate;
@@ -187,7 +186,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase
   //@{
 
   /// Data object name: for the SCT this is "SCT_RDOs"
-  SG::ReadHandle<SCT_RDO_Container> m_dataObjectName;
+  SG::ReadHandleKey<SCT_RDO_Container> m_dataObjectName{this, "RDOKey", "SCT_RDOs"};
 
   ///SCT Helper class
   const SCT_ID* m_pSCTHelper;
@@ -289,7 +288,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase
 
   float m_PSTripModules;
 
-  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey;
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfoKey", "EventInfo"};
 };
 
 #endif
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitEffMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitEffMonTool.h
index 13a9801d673a..4ecddda09089 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitEffMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitEffMonTool.h
@@ -117,12 +117,12 @@ private:
                                                 Int_t nbinx, Double_t* xbins,
                                                 Int_t nbiny, Double_t* ybins);
 
-  SG::ReadHandle<TrackCollection> m_TrackName;
+  SG::ReadHandleKey<TrackCollection> m_TrackName{this, "TrackName", "CombinedInDetTracks"};
   IChronoStatSvc* m_chrono;
 
   const std::map < Identifier, unsigned int >* m_badChips;
   ServiceHandle<MagField::IMagFieldSvc>  m_fieldServiceHandle;
-  ToolHandle<Trig::IBunchCrossingTool> m_bunchCrossingTool;
+  ToolHandle<Trig::IBunchCrossingTool> m_bunchCrossingTool{this, "BunchCrossingTool", "Trig::BunchCrossingTool/BunchCrossingTool"};
 
 
   Int_t m_DetectorMode;
@@ -141,7 +141,7 @@ private:
   UInt_t m_maxTracks;
 
   std::string m_path;
-  SG::ReadHandleKey<InDet::SCT_ClusterContainer> m_sctContainerName;
+  SG::ReadHandleKey<InDet::SCT_ClusterContainer> m_sctContainerName{this, "SCT_ClusterContainer", "SCT_Clusters"};
 
 
   Bool_t m_insideOutOnly;
@@ -159,11 +159,11 @@ private:
   Bool_t m_chronotime;
   Bool_t m_useIDGlobal;
 
-  ToolHandle < Trk::IResidualPullCalculator >   m_residualPullCalculator;
-  ToolHandle < Trk::IRIO_OnTrackCreator > m_rotcreator; 
-  ToolHandle < Trk::ITrackHoleSearchTool >  m_holeSearchTool;  
+  ToolHandle<Trk::IResidualPullCalculator> m_residualPullCalculator{this, "ResPullCalc", "Trk::ResidualPullCalculator/ResidualPullCalculator"};
+  ToolHandle<Trk::IRIO_OnTrackCreator> m_rotcreator{this, "ROTCreator", "InDet::SCT_ClusterOnTrackTool/SCT_ClusterOnTrackTool"};
+  ToolHandle<Trk::ITrackHoleSearchTool> m_holeSearchTool{this, "HoleSearch", "InDet::InDetTrackHoleSearchTool"};
 
-  ToolHandle < ISCT_ConfigurationConditionsTool > m_configConditions{this, "ConfigConditions",
+  ToolHandle<ISCT_ConfigurationConditionsTool> m_configConditions{this, "ConfigConditions",
       "SCT_ConfigurationConditionsTool/InDetSCT_ConfigurationConditionsTool", "Tool to retrieve SCT Configuration Tool"};
 
   typedef std::array < TProfile*, SCT_Monitoring::N_REGIONS > TProfArray;
@@ -285,8 +285,8 @@ private:
   const SCT_ID* m_sctId;
   const TRT_ID* m_trtId;
 
-  SG::ReadHandleKey<ComTime> m_comTimeName;
-  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey;
+  SG::ReadHandleKey<ComTime> m_comTimeName{this, "ComTimeKey", "TRT_Phase"};
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfoKey", "EventInfo"};
   SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
 
   /**Convert a layer/disk number (0-21) to a bec index (0,1,2) according to position of that layer
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
index 722645b925c4..ebe9c53a2ca8 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
@@ -60,7 +60,7 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
  public:
   typedef unsigned int  ChipNumberType;
   SCTHitsNoiseMonTool(const std::string& type, const std::string& name,const IInterface* parent); 
-  ~SCTHitsNoiseMonTool();
+  ~SCTHitsNoiseMonTool() = default;
   virtual StatusCode initialize() final;
   /**    @name Book, fill & check (reimplemented from baseclass) */
   //@{
@@ -114,17 +114,17 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   VecProf2_t m_pnoiseoccupancymapHistoVectorECmTrigger;
   
   TH1F* m_nSP;
-  int* m_nSP_buf;
+  std::vector<int> m_nSP_buf;
   int m_nSP_pos;
   TH1F* m_nHits;
-  int* m_nHits_buf;
+  std::vector<int> m_nHits_buf;
   int m_nHits_pos;
   TH1F* m_nmaxHits;
-  int* m_nmaxHits_buf;
-  Identifier* m_nmaxModule_buf;
+  std::vector<int> m_nmaxHits_buf;
+  std::vector<Identifier> m_nmaxModule_buf;
   TH1F* m_nminHits;
-  int* m_nminHits_buf;
-  Identifier* m_nminModule_buf;
+  std::vector<int> m_nminHits_buf;
+  std::vector<Identifier> m_nminModule_buf;
 
   //Histograms with hits per luminosity block
   H1_t m_numBarrelHitsPerLumiBlock;
@@ -198,7 +198,7 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   H1_t m_hitsvsL1ID;
 
   /// Name of the Track collection to use
-  SG::ReadHandleKey<TrackCollection> m_tracksName;
+  SG::ReadHandleKey<TrackCollection> m_tracksName{this, "tracksName", "CombinedInDetTracks"};
 
   /// Name of the L1 Type to use for filling the extra NO histograms
   std::string m_NOTrigger;
@@ -300,7 +300,6 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   Prof_t m_tbinfracVsLB;
   Prof_t m_tbinfracVsLBECp;
   Prof_t m_tbinfracVsLBECm;
-  //std::string m_tracksName;
   bool m_initialize;
  
   //@name Histograms related methods
@@ -337,7 +336,7 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   ///additional maps for track NO to compare with SP NO calc
   std::map<Identifier, int> m_RDOs;
   //CAM adds map for SP NO
-  SG::ReadHandle<SpacePointContainer>  m_SCTSPContainerName;
+  SG::ReadHandleKey<SpacePointContainer> m_SCTSPContainerName{this, "SpacePointKey", "SCT_SpacePoints"};
 
   std::map<Identifier, float> m_occSumUnbiased;
   std::map<Identifier, float> m_occSumUnbiasedTrigger;
@@ -472,7 +471,7 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   //@{
   
   /// Data object name: for the SCT this is "SCT_RDOs"
-  SG::ReadHandleKey<SCT_RDO_Container> m_dataObjectName;
+  SG::ReadHandleKey<SCT_RDO_Container> m_dataObjectName{this, "RDOKey", "SCT_RDOs"};
 
   ///SCT Helper class
   const SCT_ID* m_pSCTHelper;
@@ -513,8 +512,7 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
     positionString(const Identifier& plane) const;
   //@}
 
-  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey;
-  SG::ReadHandleKey<InDet::SCT_ClusterContainer> m_clusContainerKey;
+  SG::ReadHandleKey<InDet::SCT_ClusterContainer> m_clusContainerKey{this, "ClusterKey", "SCT_Clusters"};
 
   // For P->T converter of SCT_Clusters
   SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTLorentzMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTLorentzMonTool.h
index 2397e9675cf5..a094358ac737 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTLorentzMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTLorentzMonTool.h
@@ -80,7 +80,7 @@ private:
   //@{
 
   //for Vertex and perigee
-  ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool;
+  ToolHandle<Reco::ITrackToVertex> m_trackToVertexTool{this, "TrackToVertexTool", "Reco::TrackToVertex"};
 
   /// Vector of pointers to profile histogram of local inc angle (phi) vs nStrips (one/layer)
   Prof_t m_phiVsNstrips[4];
@@ -91,11 +91,10 @@ private:
   Prof_t m_phiVsNstrips_Side_100[4][2];
   Prof_t m_phiVsNstrips_Side_111[4][2];
 
-  std::string m_stream;
   std::string m_path;
   //@}
   /// Name of the Track collection to use
-  SG::ReadHandleKey<TrackCollection> m_tracksName;
+  SG::ReadHandleKey<TrackCollection> m_tracksName{this, "tracksName", "CombinedInDetTracks"};
   SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
 
   //@name Service members
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
index 58fda5162473..7aaa508fc224 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTMotherTrigMonTool.h
@@ -59,10 +59,11 @@ protected:
   bool m_doTrigger;
   /// Check if the event belongs to the SCTNoise Calibration Stream
   bool m_isStream;
+protected:
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfoKey", "EventInfo", "Key of xAOD::EventInfo"};
 private:
   std::bitset<N_TRIGGER_TYPES> m_firedTriggers;
 
-  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfoKey", "EventInfoKey", "Key of xAOD::EventInfo"};
 };
 
 #endif
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTRatioNoiseMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTRatioNoiseMonTool.h
index f1232c2811b1..e14e04111150 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTRatioNoiseMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTRatioNoiseMonTool.h
@@ -223,18 +223,14 @@ private:
   H1_t m_NZ1_vs_modnum;
   H1_t m_N11_vs_modnum;
 
-  std::string m_stream;
   std::string m_path;
   //@}
-  /// Name of the Track collection to use
-  std::string m_tracksName;
   std::string m_NOTrigger;
 
   //@name Service members
   //@{
   /// Data object name: for the SCT this is "SCT_RDOs"
-  SG::ReadHandleKey<SCT_RDO_Container> m_dataObjectName;
-  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey;
+  SG::ReadHandleKey<SCT_RDO_Container> m_dataObjectName{this, "RDOKey", "SCT_RDOs"};
   ///SCT Helper class
   const SCT_ID* m_pSCTHelper;
   ToolHandle<IInDetConditionsTool> m_pSummaryTool{this, "conditionsTol",
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTTracksMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTTracksMonTool.h
index 1fb76d94a26e..115fded36e7b 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTTracksMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTTracksMonTool.h
@@ -69,7 +69,7 @@ private:
   typedef std::vector<H2_t> VecH2_t;
   //@}
   TH1I* m_nTracks;
-  int* m_nTracks_buf;
+  std::vector<int> m_nTracks_buf;
   int m_nTracks_pos;
   TH1I* m_trackTrigger;
   TProfile* m_trackTriggerRate;
@@ -144,7 +144,7 @@ private:
   bool m_useIDGlobal;
   //@}
   /// Name of the Track collection to use
-  SG::ReadHandleKey<TrackCollection> m_tracksName;
+  SG::ReadHandleKey<TrackCollection> m_tracksName{this, "tracksName", "CombinedInDetTracks"};
   /// Cut on number of SCT hits on track
   int m_trackHitCut;
   /// CheckHists() frequency
@@ -154,7 +154,7 @@ private:
 
   bool m_doPositiveEndcap;
   bool m_doNegativeEndcap;
-  ToolHandle < Trk::IResidualPullCalculator >   m_residualPullCalculator;
+  ToolHandle<Trk::IResidualPullCalculator> m_residualPullCalculator{this, "ResPullCalc", "Trk::ResidualPullCalculator/ResidualPullCalculator"};
   bool   m_doUnbiasedCalc;
 
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index 7be62108fb70..32ef5b6d786c 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -133,7 +133,7 @@ namespace {
 // ====================================================================================================
 SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, const IInterface* parent)
   : ManagedMonitorToolBase(type, name, parent),
-    m_firstHit{},
+  m_firstHit{},
   m_secondHit{},
   m_allErrs{},
   m_allErrsPerLumi{},
@@ -150,7 +150,7 @@ SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, c
   m_nLinksWithErrors{},
   m_nErrors_buf{},
   m_nLinksWithErrors_buf{},
-  m_nErrors_pos{},
+  m_nErrors_pos{0},
   m_MaskedAllLinks{},
   m_numberOfEventsLumi{},
   m_numberOfEvents{},
@@ -161,8 +161,7 @@ SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, c
   m_current_lb{},
   m_last_reset_lb{},
   m_sctflag(false),
-  m_dataObjectName(std::string("SCT_RDOs")),
-  m_pSCTHelper{},
+  m_pSCTHelper{nullptr},
   m_Conf{},
   m_ConfRN{},
   m_ConfNew{},
@@ -182,8 +181,6 @@ SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, c
   m_ConfNoiseOnlineRecent{},
   m_DetailedConfiguration{},
   m_thistSvc("THistSvc", name),
-  m_checkBadModules(true),
-  m_ignore_RDO_cut_online(true),
   m_geo{},
   m_SCTHash{{}},
   m_mapSCT{nullptr},
@@ -192,18 +189,7 @@ SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, c
   m_nBinsPhi( 100 ),
   m_WafersThreshold( 3.0 ),
   m_detectorCoverageVsLbs{nullptr},
-  m_PSTripModulesVsLbs{},
-  m_eventInfoKey(std::string("EventInfo")) {
-    /**
-     *  sroe 3 Sept 2015:
-     *  histoPathBase is declared as a property in the base class, assigned to m_path
-     *  with default as empty string.
-     *  Declaring it here as well gives rise to compilation warning
-     *  WARNING duplicated property name 'histoPathBase', see https://its.cern.ch/jira/browse/GAUDI-1023
-     *  declareProperty("histoPathBase", m_stream = "/stat");
-     **/
-
-    m_stream = "/stat";
+  m_PSTripModulesVsLbs{} {
     declareProperty("CheckRate", m_checkrate = 1000);
     declareProperty("runOnline", m_runOnline = false);
     declareProperty("CheckRecent", m_checkrecent = 20);
@@ -221,8 +207,8 @@ SCTErrMonTool::SCTErrMonTool(const std::string& type, const std::string& name, c
 
     declareProperty("DoPerLumiErrors", m_doPerLumiErrors = true);
     declareProperty("DoErr2DPerLumiHists", m_doErr2DPerLumiHists = false);
-    declareProperty("checkBadModules", m_checkBadModules);
-    declareProperty("IgnoreRDOCutOnline", m_ignore_RDO_cut_online);
+    declareProperty("checkBadModules", m_checkBadModules = true);
+    declareProperty("IgnoreRDOCutOnline", m_ignore_RDO_cut_online = true);
     //Detector Coverage Tool switch
     declareProperty("CoverageCheck",m_CoverageCheck= true);
     declareProperty("UseDCS", m_useDCS = true);
@@ -270,15 +256,8 @@ SCTErrMonTool::~SCTErrMonTool() {
         if (m_allErrsPerLumi[errType][reg][layer])LWHist::safeDelete(m_allErrsPerLumi[errType][reg][layer]);
         if (m_pallErrsPerLumi[errType][reg][layer])LWHist::safeDelete(m_pallErrsPerLumi[errType][reg][layer]);
       }
-      // for (int errType(0); errType != CategoryErrors::N_ERRCATEGORY; ++errType) {
-      //   if (m_allErrsCatePerLumi[errType][reg][layer])LWHist::safeDelete(m_allErrsCatePerLumi[errType][reg][layer]);
-      //   if (m_pallErrsCatePerLumi[errType][reg][layer])LWHist::safeDelete(m_pallErrsCatePerLumi[errType][reg][layer]);
-      // }
     }
   }
-
-  free(m_nErrors_buf);
-  free(m_nLinksWithErrors_buf);
 }
 
 // ====================================================================================================
@@ -527,7 +506,6 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent()
 StatusCode
 SCTErrMonTool::fillHistograms() {
 
-  typedef SCT_RDORawData SCTRawDataType;
   SG::ReadHandle<xAOD::EventInfo> pEvent(m_eventInfoKey);
   if (not pEvent.isValid()) {
     ATH_MSG_WARNING("Could not retrieve event info!");
@@ -562,25 +540,21 @@ SCTErrMonTool::fillHistograms() {
   int numFirstHit_ECm = 0, numSecondHit_ECm = 0, numSCTRDOs_ECm = 0;
 
   int count_SCT_RDO = 0;
-  // Use new IDC
-  SCT_RDO_Container::const_iterator lastCol = p_rdocontainer->end();
-  for (SCT_RDO_Container::const_iterator col_it = p_rdocontainer->begin(); col_it != lastCol; ++col_it) {
-    const InDetRawDataCollection<SCT_RDORawData>* SCT_Collection(*col_it);
-    if (!SCT_Collection) continue;  // select only SCT RDOs
-
-    DataVector<SCTRawDataType>::const_iterator p_rdo_end = SCT_Collection->end();
+  for (const InDetRawDataCollection<SCT_RDORawData>*SCT_Collection: *p_rdocontainer) {
+    if (SCT_Collection==nullptr) continue;  // select only SCT RDOs
 
-    Identifier SCT_Identifier = SCT_Collection->identify();
-    for (DataVector<SCTRawDataType>::const_iterator p_rdo = SCT_Collection->begin(); p_rdo != p_rdo_end; ++p_rdo) {
+    for (const SCT_RDORawData* rdo: *SCT_Collection) {
       count_SCT_RDO++;
-      const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(*p_rdo);
-      SCT_Identifier = (*p_rdo)->identify();
+      const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(rdo);
+      if (rdo3==nullptr) continue;
+
+      Identifier SCT_Identifier = rdo3->identify();
       int barrel_ec = m_pSCTHelper->barrel_ec(SCT_Identifier);
       if (barrel_ec == BARREL) ++numSCTRDOs;
       if (barrel_ec == ENDCAP_A && m_doPositiveEndcap) ++numSCTRDOs_ECp;
       if (barrel_ec == ENDCAP_C && m_doNegativeEndcap) ++numSCTRDOs_ECm;
 
-      if ( !(SCT_Identifier.is_valid())) {
+      if (not SCT_Identifier.is_valid()) {
         ATH_MSG_ERROR("The SCT identifier is not valid.");
         return StatusCode::RECOVERABLE;
       }
@@ -603,19 +577,19 @@ SCTErrMonTool::fillHistograms() {
   }// end for (SCT_RDO_Container...
 
   if (numSCTRDOs != 0) {
-    double scale = 100. / double(numSCTRDOs);
-    m_firstHit[iBARREL]->Fill(double(numFirstHit)*scale, 1.);
-    m_secondHit[iBARREL]->Fill(double(numSecondHit)*scale, 1.);
+    double scale = 100. / static_cast<double>(numSCTRDOs);
+    m_firstHit[iBARREL]->Fill(static_cast<double>(numFirstHit)*scale, 1.);
+    m_secondHit[iBARREL]->Fill(static_cast<double>(numSecondHit)*scale, 1.);
   }
   if (numSCTRDOs_ECp != 0 && m_doPositiveEndcap) {
-    double scale = 100. / double(numSCTRDOs_ECp);
-    m_firstHit[iECp]->Fill(double(numFirstHit_ECp)*scale, 1.);
-    m_secondHit[iECp]->Fill(double(numSecondHit_ECp)*scale, 1.);
+    double scale = 100. / static_cast<double>(numSCTRDOs_ECp);
+    m_firstHit[iECp]->Fill(static_cast<double>(numFirstHit_ECp)*scale, 1.);
+    m_secondHit[iECp]->Fill(static_cast<double>(numSecondHit_ECp)*scale, 1.);
   }
   if (numSCTRDOs_ECm != 0 && m_doNegativeEndcap) {
-    double scale = 100. / double(numSCTRDOs_ECm);
-    m_firstHit[iECm]->Fill(double(numFirstHit_ECm)*scale, 1.);
-    m_secondHit[iECm]->Fill(double(numSecondHit_ECm)*scale, 1.);
+    double scale = 100. / static_cast<double>(numSCTRDOs_ECm);
+    m_firstHit[iECm]->Fill(static_cast<double>(numFirstHit_ECm)*scale, 1.);
+    m_secondHit[iECm]->Fill(static_cast<double>(numSecondHit_ECm)*scale, 1.);
   }
   if (m_environment == AthenaMonManager::online) {
     if (m_numberOfEvents == 1 || (m_numberOfEvents > 1 && (m_numberOfEvents % m_checkrate) == 0)) {
@@ -673,7 +647,7 @@ SCTErrMonTool::checkRateHists() {
               content = m_numErrorsPerLumi[reg]->GetBinContent(xb, yb);
               if (num_modules > 0) {
                 m_rateErrorsPerLumi[reg]->Fill(cxb, cyb, 1, content);
-                m_rateErrorsPerLumi[reg]->Fill(cxb, cyb, 0, (evt_lumi * ((double) num_modules) - content));
+                m_rateErrorsPerLumi[reg]->Fill(cxb, cyb, 0, (evt_lumi * (static_cast<double>(num_modules)) - content));
               }
             }
           }
@@ -799,14 +773,12 @@ SCTErrMonTool::fillByteStreamErrorsHelper(const std::set<IdentifierHash>* errors
 
   //--- Count BS errors
   int nerrors = 0;
-  std::set<IdentifierHash>::iterator fit = errors->begin();
-  std::set<IdentifierHash>::iterator fitEnd = errors->end();
-  for (; fit != fitEnd; ++fit) {
+  for (const IdentifierHash& hash: *errors) {
     nerrors++;
-    if (!(fit->is_valid())) continue;
+    if (not hash.is_valid()) continue;
 
     //--- FIll module information with BS error
-    Identifier fitId = m_pSCTHelper->wafer_id(*fit);
+    Identifier fitId = m_pSCTHelper->wafer_id(hash);
     int layer = m_pSCTHelper->layer_disk(fitId);
     int side = m_pSCTHelper->side(fitId);
     int barrel_ec = m_pSCTHelper->barrel_ec(fitId);
@@ -857,7 +829,7 @@ SCTErrMonTool::fillByteStreamErrorsHelper(const std::set<IdentifierHash>* errors
 void
 SCTErrMonTool::numByteStreamErrors(const std::set<IdentifierHash>* errors, int& ntot, int& nbar, int& neca, int& necc) {
 
-  for (auto fit: *errors) {
+  for (const IdentifierHash& fit: *errors) {
     if (fit.is_valid()) {
       Identifier fitId = m_pSCTHelper->wafer_id(fit);
       int layer = m_pSCTHelper->layer_disk(fitId);
@@ -900,8 +872,8 @@ SCTErrMonTool::fillByteStreamErrors() {
                         bs_errs[iGEN],bs_errs[iBARREL],bs_errs[iECp],bs_errs[iECm]);
     // fill number of BS errors vs LBs
     for (int reg = 0; reg != NREGIONS_INC_GENERAL; ++reg) {
-      if (!m_sctflag) m_ByteStreamVsLB[errType][reg]->Fill(current_lb, double (bs_errs[reg]));
-      else m_ByteStreamWithSctFlagVsLB[errType][reg]->Fill(current_lb, double (bs_errs[reg]));
+      if (!m_sctflag) m_ByteStreamVsLB[errType][reg]->Fill(current_lb, static_cast<double>(bs_errs[reg]));
+      else m_ByteStreamWithSctFlagVsLB[errType][reg]->Fill(current_lb, static_cast<double>(bs_errs[reg]));
     }
   }
 
@@ -1026,7 +998,7 @@ SCTErrMonTool::fillByteStreamErrors() {
             // below...
             if (m_numberOfEvents % m_checkrate == 0 && m_runOnline == true) {
               for (int errType(0); errType != CategoryErrors::N_ERRCATEGORY; ++errType) {
-                int content = (int) m_pallErrsCate[errType][reg][lyr]->GetBinContent(xb, yb);
+                int content = static_cast<int>(m_pallErrsCate[errType][reg][lyr]->GetBinContent(xb, yb));
                 int evt = m_numberOfEvents;
                 m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 1, content);
                 m_allErrsCate[errType][reg][lyr]->Fill(cxb, cyb, 0, evt - content);
@@ -1051,12 +1023,12 @@ SCTErrMonTool::fillByteStreamErrors() {
 
   for (int reg = 0; reg != NREGIONS_INC_GENERAL; ++reg) {
     for (int errType(0); errType != CategoryErrors::N_ERRCATEGORY; ++errType) {
-      m_ByteStreamCategorisedVsLB[errType][reg]->Fill((int) current_lb, (bytestreamCate_errs[errType][reg]));
-      m_LinksWithCategorisedErrorsVsLB[errType][reg]->Fill((int) current_lb, (tot_mod_bytestreamCate_errs[errType][reg]));
+      m_ByteStreamCategorisedVsLB[errType][reg]->Fill(current_lb, (bytestreamCate_errs[errType][reg]));
+      m_LinksWithCategorisedErrorsVsLB[errType][reg]->Fill(current_lb, (tot_mod_bytestreamCate_errs[errType][reg]));
       if (reg==NREGIONS_INC_GENERAL-1)continue;
       int nLayers = n_layers[reg]*2;
       for (int lyr = 0; lyr != nLayers; ++lyr) {
-        m_LinksWithCategorisedErrorsVsLBLayer[errType][reg][lyr]->Fill((int) current_lb,
+        m_LinksWithCategorisedErrorsVsLBLayer[errType][reg][lyr]->Fill(current_lb,
                                                                        (tot_mod_bytestreamCate_errs_layer[errType][reg][lyr]));
       }
     }
@@ -1209,8 +1181,8 @@ SCTErrMonTool::bookErrHistos(int reg=-1) { // reg = 0:EC, 1:B, 2:EA
         m_rateErrorsPerLumi[reg]->GetXaxis()->SetBinLabel(bin+1, SCT_ByteStreamErrors::errorTypesDescription[bin].c_str());
       }
       for ( int bin(0); bin < nLayers; bin++) {
-        m_numErrorsPerLumi[reg]->GetYaxis()->SetBinLabel(bin+1, (std::to_string(int(bin/2)) +"_"+ std::to_string(int(bin%2))).c_str());
-        m_rateErrorsPerLumi[reg]->GetYaxis()->SetBinLabel(bin+1, (std::to_string(int(bin/2)) +"_"+ std::to_string(int(bin%2))).c_str());
+        m_numErrorsPerLumi[reg]->GetYaxis()->SetBinLabel(bin+1, (std::to_string(static_cast<int>(bin/2)) +"_"+ std::to_string(static_cast<int>(bin%2))).c_str());
+        m_rateErrorsPerLumi[reg]->GetYaxis()->SetBinLabel(bin+1, (std::to_string(static_cast<int>(bin/2)) +"_"+ std::to_string(static_cast<int>(bin%2))).c_str());
       }
       bool somethingFailed(false);
       if (m_doErr2DPerLumiHists) {
@@ -1311,10 +1283,8 @@ SCTErrMonTool::bookErrHistosGen() {
                                   m_evtsbins, 1, m_evtsbins + 1);
     m_nLinksWithErrors->GetXaxis()->SetTitle("Event Number");
     m_nLinksWithErrors->GetYaxis()->SetTitle("Num of Links with Errors");
-    size_t nErrors_buf_size;
-    nErrors_buf_size = m_evtsbins * sizeof(int);
-    m_nErrors_buf = (int*) malloc(nErrors_buf_size);
-    m_nLinksWithErrors_buf = (int*) malloc(nErrors_buf_size);
+    m_nErrors_buf.reserve(m_evtsbins);
+    m_nLinksWithErrors_buf.reserve(m_evtsbins);
     m_nErrors_pos = 0;
     if (Errors.regHist(m_nErrors).isFailure()) {
       ATH_MSG_WARNING("Couldn't book nErrors vs event number hist");
@@ -1430,8 +1400,8 @@ SCTErrMonTool::bookConfMapsGen() {
           int nLayers = n_layers[reg]*2;
           for (int layer(0); layer != nLayers; ++layer) {
             m_LinksWithCategorisedErrorsVsLBLayer[errType][reg][layer] =
-              TProfile_LW::create("SCT_LinksWith" + errorsString(errType) + "VsLbs" + regLabel[reg] + "lyr" + std::to_string(int(layer/2)) + "_" + std::to_string(int(layer%2)),
-                                  "Ave. num of links with " + errorsString(errType) + " per LB in " + regTitle[reg] + " layer" + std::to_string(int(layer/2)) + "_" + std::to_string(int(layer%2)),
+              TProfile_LW::create("SCT_LinksWith" + errorsString(errType) + "VsLbs" + regLabel[reg] + "lyr" + std::to_string(static_cast<int>(layer/2)) + "_" + std::to_string(static_cast<int>(layer%2)),
+                                  "Ave. num of links with " + errorsString(errType) + " per LB in " + regTitle[reg] + " layer" + std::to_string(static_cast<int>(layer/2)) + "_" + std::to_string(static_cast<int>(layer%2)),
                                   NBINS_LBs, 0.5, NBINS_LBs + 0.5);
             m_LinksWithCategorisedErrorsVsLBLayer[errType][reg][layer]->GetXaxis()->SetTitle("LumiBlock");
           }
@@ -1503,7 +1473,7 @@ SCTErrMonTool::bookConfMapsGen() {
           int nLayers = n_layers[reg]*2;
           for (int layer(0); layer != nLayers; ++layer) {
             if (ConfHist[reg].regHist(m_LinksWithCategorisedErrorsVsLBLayer[errType][reg][layer]).isFailure()) {
-              ATH_MSG_WARNING("Cannot book Histogram:SCTLinksWith" + errorsString(errType) + "VsLbs" + regLabel[reg] + "lyr" + std::to_string(int(layer/2)) + "_" + std::to_string(int(layer%2)) << "with SCT flag");
+              ATH_MSG_WARNING("Cannot book Histogram:SCTLinksWith" + errorsString(errType) + "VsLbs" + regLabel[reg] + "lyr" + std::to_string(static_cast<int>(layer/2)) + "_" + std::to_string(static_cast<int>(layer%2)) << "with SCT flag");
             }
           }
         }
@@ -1553,11 +1523,11 @@ SCTErrMonTool::bookConfMaps(int reg=-1) { // reg = 0:EC, 1:B, 2:EA
     MonGroup confMaps(this, ("SCT/"+regName+"/Conf").c_str(), ManagedMonitorToolBase::run, ATTRIB_UNMANAGED);
     m_p2DmapHistoVectorAll[reg].clear();
     for (int layer(0); layer != nLayers; ++layer) {
-      std::string mapName = "modulemap" + std::string(subDetNameShort[reg].Data()) + std::to_string(int(layer/2)) + "_" + std::to_string(int(layer%2));
+      std::string mapName = "modulemap" + std::string(subDetNameShort[reg].Data()) + std::to_string(static_cast<int>(layer/2)) + "_" + std::to_string(static_cast<int>(layer%2));
       TH2F_LW* hitsHisto_tmp = TH2F_LW::create(TString(mapName.c_str()),
                                                TString(("Module Out of Configuration : "+std::string(subDetName[reg].Data())+", "+
-                                                        std::string(layerName[reg].Data())+" "+std::to_string(int(layer/2))+
-                                                        " side "+std::to_string(int(layer%2))).c_str()),
+                                                        std::string(layerName[reg].Data())+" "+std::to_string(static_cast<int>(layer/2))+
+                                                        " side "+std::to_string(static_cast<int>(layer%2))).c_str()),
                                                n_etabins[reg], f_etabin[reg] - 0.5, l_etabin[reg] + 0.5,
                                                n_phibins[reg], f_phibin[reg] - 0.5, l_phibin[reg] + 0.5);
       hitsHisto_tmp->GetXaxis()->SetTitle("Index in the direction of #eta");
@@ -1583,8 +1553,8 @@ SCTErrMonTool::fillCondDBMaps() {
     0
   };
   int MaskedAllLinks[4] = {
-    (int) m_MaskedAllLinks->GetBinContent(1), (int) m_MaskedAllLinks->GetBinContent(2),
-    (int) m_MaskedAllLinks->GetBinContent(3), (int) m_MaskedAllLinks->GetBinContent(4)
+    static_cast<int>(m_MaskedAllLinks->GetBinContent(1)), static_cast<int>(m_MaskedAllLinks->GetBinContent(2)),
+    static_cast<int>(m_MaskedAllLinks->GetBinContent(3)), static_cast<int>(m_MaskedAllLinks->GetBinContent(4))
   };
   int ModErr[4] = {
     0
@@ -1609,7 +1579,6 @@ SCTErrMonTool::fillCondDBMaps() {
   std::string stem;
   SCT_ID::const_id_iterator planeIterator(m_pSCTHelper->wafer_begin());
   SCT_ID::const_id_iterator planeEnd = m_pSCTHelper->wafer_end();
-
   for (; planeIterator not_eq planeEnd; ++planeIterator) {
     Identifier planeId(*planeIterator);
     int eta = m_pSCTHelper->eta_module(planeId);
@@ -1693,38 +1662,38 @@ SCTErrMonTool::fillCondDBMaps() {
 
   if (m_makeConfHisto) {
     for (int reg = 0; reg <= 3; ++reg) {
-      m_Conf[reg]->Fill(0., double (MOut[reg]));
-      m_ConfRN[reg]->Fill(0., double (MOut[reg]));
-      m_ConfOutModules[reg]->Fill(0., double (MOut[reg]));
-      m_Conf[reg]->Fill(1., double (Flagged[reg]));
-      m_ConfRN[reg]->Fill(1., double (Flagged[reg]));
-      m_ConfNew[reg]->Fill(0., double (Flagged[reg]));
-      m_Conf[reg]->Fill(2., double (MaskedAllLinks[reg]));
-      m_ConfRN[reg]->Fill(2., double (MaskedAllLinks[reg]));
-      m_ConfNew[reg]->Fill(1., double (MaskedAllLinks[reg]));
-      m_Conf[reg]->Fill(3., double (ModErr[reg]));
-      m_ConfRN[reg]->Fill(3., double (ModErr[reg]));
-      m_ConfNew[reg]->Fill(2., double (ModErr[reg]));
-      m_Conf[reg]->Fill(4., double (InEffModules[reg]));
-      m_ConfRN[reg]->Fill(4., double (InEffModules[reg]));
-      m_ConfNew[reg]->Fill(3., double (InEffModules[reg]));
-      m_Conf[reg]->Fill(5., double (NoisyModules[reg]));
-      m_ConfRN[reg]->Fill(5., double (RNoisyModules[reg]));
-      m_ConfNew[reg]->Fill(4., double (NoisyModules[reg]));
+      m_Conf[reg]->Fill(0., static_cast<double>(MOut[reg]));
+      m_ConfRN[reg]->Fill(0., static_cast<double>(MOut[reg]));
+      m_ConfOutModules[reg]->Fill(0., static_cast<double>(MOut[reg]));
+      m_Conf[reg]->Fill(1., static_cast<double>(Flagged[reg]));
+      m_ConfRN[reg]->Fill(1., static_cast<double>(Flagged[reg]));
+      m_ConfNew[reg]->Fill(0., static_cast<double>(Flagged[reg]));
+      m_Conf[reg]->Fill(2., static_cast<double>(MaskedAllLinks[reg]));
+      m_ConfRN[reg]->Fill(2., static_cast<double>(MaskedAllLinks[reg]));
+      m_ConfNew[reg]->Fill(1., static_cast<double>(MaskedAllLinks[reg]));
+      m_Conf[reg]->Fill(3., static_cast<double>(ModErr[reg]));
+      m_ConfRN[reg]->Fill(3., static_cast<double>(ModErr[reg]));
+      m_ConfNew[reg]->Fill(2., static_cast<double>(ModErr[reg]));
+      m_Conf[reg]->Fill(4., static_cast<double>(InEffModules[reg]));
+      m_ConfRN[reg]->Fill(4., static_cast<double>(InEffModules[reg]));
+      m_ConfNew[reg]->Fill(3., static_cast<double>(InEffModules[reg]));
+      m_Conf[reg]->Fill(5., static_cast<double>(NoisyModules[reg]));
+      m_ConfRN[reg]->Fill(5., static_cast<double>(RNoisyModules[reg]));
+      m_ConfNew[reg]->Fill(4., static_cast<double>(NoisyModules[reg]));
       if (m_environment == AthenaMonManager::online) {
-        m_ConfOnline[reg]->Fill(0., double (MOut[reg]));
-        m_ConfOnline[reg]->Fill(1., double (Flagged[reg]));
-        m_ConfOnline[reg]->Fill(2., double (MaskedAllLinks[reg]));
-        m_ConfOnline[reg]->Fill(3., double (ModErr[reg]));
+        m_ConfOnline[reg]->Fill(0., static_cast<double>(MOut[reg]));
+        m_ConfOnline[reg]->Fill(1., static_cast<double>(Flagged[reg]));
+        m_ConfOnline[reg]->Fill(2., static_cast<double>(MaskedAllLinks[reg]));
+        m_ConfOnline[reg]->Fill(3., static_cast<double>(ModErr[reg]));
       }
     }
     if (m_environment == AthenaMonManager::online || testOffline) {
       m_ConfEffOnline->Reset("ICE");
       for (int i(0); i != 4; ++i) {
         const float f(i);
-        m_ConfEffOnline->Fill(f, double (InEffModules[i]));
-        m_ConfNoiseOnline->Fill(f, double (NoisyModules[i]));
-        m_ConfNoiseOnlineRecent->Fill(f, double (NoisyModulesRecent[i]));
+        m_ConfEffOnline->Fill(f, static_cast<double>(InEffModules[i]));
+        m_ConfNoiseOnline->Fill(f, static_cast<double>(NoisyModules[i]));
+        m_ConfNoiseOnlineRecent->Fill(f, static_cast<double>(NoisyModulesRecent[i]));
       }
     }
   }
@@ -1739,9 +1708,9 @@ StatusCode
 SCTErrMonTool::fillConfigurationDetails() {
   ATH_MSG_DEBUG("Inside fillConfigurationDetails()");
   unsigned int nBadMods = m_ConfigurationTool->badModules()->size(); // bad modules
-  const std::map<IdentifierHash, std::pair<bool, bool> > *badLinks = m_ConfigurationTool->badLinks(); // bad links
+  const std::map<IdentifierHash, std::pair<bool, bool>> *badLinks = m_ConfigurationTool->badLinks(); // bad links
   unsigned int nBadLink0(0), nBadLink1(0), nBadLinkBoth(0);
-  for (auto link: *badLinks) {
+  for (const std::pair<IdentifierHash, std::pair<bool, bool>>& link: *badLinks) {
     std::pair<bool, bool> status = link.second;
     if (status.first == false && status.second == true) {
       ++nBadLink0;
@@ -1756,7 +1725,7 @@ SCTErrMonTool::fillConfigurationDetails() {
 
   const std::map<Identifier, unsigned int>* badChips = m_ConfigurationTool->badChips(); // bad chips
   unsigned int nBadChips(0);
-  for (auto chip : *badChips) {
+  for (const std::pair<Identifier, unsigned int>& chip : *badChips) {
     unsigned int status = chip.second;
     for (unsigned int i(0); i != CHIPS_PER_MODULE; i++) {
       nBadChips += ((status & (1 << i)) == 0 ? 0 : 1);
@@ -1773,16 +1742,16 @@ SCTErrMonTool::fillConfigurationDetails() {
   int nBadStripsExclusiveBEC[] = {
     0, 0, 0
   };
-  for (auto strip: badStripsExclusive) {
+  for (const Identifier& strip: badStripsExclusive) {
     int bec(m_pSCTHelper->barrel_ec(strip));
     nBadStripsExclusiveBEC[SCT_Monitoring::bec2Index(bec)] += 1;
   }
 
-  m_DetailedConfiguration->Fill(0., double (nBadMods));
-  m_DetailedConfiguration->Fill(1., double (nBadLink0));
-  m_DetailedConfiguration->Fill(2., double (nBadLink1));
-  m_DetailedConfiguration->Fill(3., double (nBadChips));
-  m_DetailedConfiguration->Fill(4., double (nBadStripsExclusive) / 100.);
+  m_DetailedConfiguration->Fill(0., static_cast<double>(nBadMods));
+  m_DetailedConfiguration->Fill(1., static_cast<double>(nBadLink0));
+  m_DetailedConfiguration->Fill(2., static_cast<double>(nBadLink1));
+  m_DetailedConfiguration->Fill(3., static_cast<double>(nBadChips));
+  m_DetailedConfiguration->Fill(4., static_cast<double>(nBadStripsExclusive) / 100.);
 
   ATH_MSG_DEBUG("-----------------------------------------------------------------------");
   ATH_MSG_DEBUG("Number of bad modules                          = " << nBadMods);
@@ -2131,6 +2100,6 @@ double SCTErrMonTool::calculateDetectorCoverage( const TH2F* histo )
             }
         }
     }
-  detector_coverage = 100. * double( occupancy )/( double( m_nBinsEta ) * double ( m_nBinsPhi ) );
+  detector_coverage = 100. * static_cast<double>( occupancy )/( static_cast<double>( m_nBinsEta ) * static_cast<double>( m_nBinsPhi ) );
   return  detector_coverage;
 }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
index 088d69aa7a9f..53144e5a99f7 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
@@ -43,12 +43,12 @@
 #include "TGraphErrors.h"
 
 // std and STL includes
-#include <cmath>
-#include <sstream>
-#include <limits>
 #include <algorithm>
-#include <limits>       // std::numeric_limits
 #include <array>
+#include <cmath>
+#include <limits>       // std::numeric_limits
+#include <memory>
+#include <sstream>
 
 using namespace SCT_Monitoring;
 
@@ -104,41 +104,9 @@ using std::string;
 // Constructor with parameters:
 SCTHitEffMonTool::SCTHitEffMonTool(const string& type, const string& name, const IInterface* parent) :
   ManagedMonitorToolBase(type, name, parent),
-  m_TrackName(std::string("ResolvedSCTTracks")),// original track collection
   m_chrono(nullptr),
   m_badChips(nullptr),
   m_fieldServiceHandle("AtlasFieldSvc", name),
-  m_bunchCrossingTool("Trig::BunchCrossingTool/BunchCrossingTool", this),
-  m_DetectorMode(1), // Barrel = 1, endcap =2, both =3
-  m_RunningMode(2),
-  m_minPixelHits(-1),
-  m_minTRTHits(-1),
-  m_minSCTHits(-1),    // If all 3 of these -1, defaults depend on cosmic/not
-  m_minOtherHits(6),
-  m_maxPhiAngle(40.), // Degrees, 100 implies no cut.
-  m_maxChi2(3.),
-  m_maxD0(10.), // mm of D0
-  m_minPt(1000.), // minimu pt in MeV/c
-  m_effdistcut(2.),
-  m_maxZ0sinTheta(0.),
-  m_maxTracks(500.),
-  m_insideOutOnly(false),
-  m_usemasks(true),
-  m_detailed(false),
-  m_superDetailed(false),
-  m_isCosmic(false),
-  m_isSim(false),
-  m_useTRTPhase(false),
-  m_useSCTorTRT(false),
-  m_requireEnclosingHits(false),
-  m_requireOtherFace(false),
-  m_requireGuardRing(false), // should be returned to true
-  m_vetoBadChips(true),
-  m_chronotime(false),
-  m_useIDGlobal(false),
-  m_residualPullCalculator("Trk::ResidualPullCalculator/ResidualPullCalculator", this),
-  m_rotcreator("InDet::SCT_ClusterOnTrackTool/SCT_ClusterOnTrackTool", this),
-  m_holeSearchTool("InDet::InDetTrackHoleSearchTool", this),
   m_Eff_Total(nullptr),
   m_Eff_TotalBCID(nullptr),
   m_Eff_hashCodeHisto(nullptr),
@@ -164,48 +132,39 @@ SCTHitEffMonTool::SCTHitEffMonTool(const string& type, const string& name, const
   m_badModFineMap(nullptr),
   m_badModMap(nullptr),
   m_badChipMap(nullptr),
+  m_countEvent{0},
   m_pixelId(nullptr),
   m_sctId(nullptr),
-  m_trtId(nullptr),
-  m_comTimeName(std::string("TRT_Phase")),
-  m_eventInfoKey(std::string("EventInfo")){
-  declareProperty("TrackName", m_TrackName);
-  declareProperty("IsCosmic", m_isCosmic);
-  declareProperty("IsSim", m_isSim);
-  declareProperty("UseMasks", m_usemasks);
-  declareProperty("Detailed", m_detailed);
-  declareProperty("SuperDetailed", m_superDetailed);
-  declareProperty("UseTRTPhase", m_useTRTPhase);
-  declareProperty("MaxPhiAngle", m_maxPhiAngle);
-  declareProperty("MinTRTHits", m_minTRTHits);
-  declareProperty("MinSCTHits", m_minSCTHits);
-  declareProperty("MinPixelHits", m_minPixelHits);
-  declareProperty("UseSCTorTRT", m_useSCTorTRT);
-  declareProperty("MinOtherHits", m_minOtherHits);
-  declareProperty("InsideOutOnly", m_insideOutOnly);
-  declareProperty("MaxChi2", m_maxChi2);
-  declareProperty("Maxd0", m_maxD0);
-  declareProperty("MaxZ0sinTheta", m_maxZ0sinTheta);
-  declareProperty("MaxTracks", m_maxTracks);
-  declareProperty("MinPt", m_minPt);
-  declareProperty("RequireEnclosingHits", m_requireEnclosingHits);
-  declareProperty("RequireOtherFace", m_requireOtherFace);
-  declareProperty("RequireGuardRing", m_requireGuardRing);
-  declareProperty("VetoBadChips", m_vetoBadChips);
-  declareProperty("LookAtDatabase", m_usedatabase);
-  declareProperty("DetectorMode", m_DetectorMode);
-  declareProperty("RunningMode", m_RunningMode);
-  declareProperty("effDistanceCut", m_effdistcut);
-  declareProperty("ChronoTime", m_chronotime);
-  declareProperty("SCT_ClusterContainer", m_sctContainerName = std::string("SCT_Clusters"));
-  declareProperty("ROTCreator", m_rotcreator);
-  declareProperty("HoleSearch", m_holeSearchTool);
-  declareProperty("ResPullCalc", m_residualPullCalculator);
-  declareProperty("useIDGlobal", m_useIDGlobal);
+  m_trtId(nullptr) {
+  declareProperty("IsCosmic", m_isCosmic=false);
+  declareProperty("IsSim", m_isSim=false);
+  declareProperty("UseMasks", m_usemasks=false);
+  declareProperty("Detailed", m_detailed=false);
+  declareProperty("SuperDetailed", m_superDetailed=false);
+  declareProperty("UseTRTPhase", m_useTRTPhase=false);
+  declareProperty("MaxPhiAngle", m_maxPhiAngle=40., "Degrees, 100 implies no cut.");
+  declareProperty("MinTRTHits", m_minTRTHits=-1);
+  declareProperty("MinSCTHits", m_minSCTHits=-1, "If all 3 of these -1, defaults depend on cosmic/not");
+  declareProperty("MinPixelHits", m_minPixelHits=-1);
+  declareProperty("UseSCTorTRT", m_useSCTorTRT=false);
+  declareProperty("MinOtherHits", m_minOtherHits=6);
+  declareProperty("InsideOutOnly", m_insideOutOnly=false);
+  declareProperty("MaxChi2", m_maxChi2=3.);
+  declareProperty("Maxd0", m_maxD0=10., "mm of D0");
+  declareProperty("MaxZ0sinTheta", m_maxZ0sinTheta=0.);
+  declareProperty("MaxTracks", m_maxTracks=500.);
+  declareProperty("MinPt", m_minPt=1000., "minimu pt in MeV/c");
+  declareProperty("RequireEnclosingHits", m_requireEnclosingHits=false);
+  declareProperty("RequireOtherFace", m_requireOtherFace=false);
+  declareProperty("RequireGuardRing", m_requireGuardRing=false, "should be returned to true");
+  declareProperty("VetoBadChips", m_vetoBadChips=true);
+  declareProperty("LookAtDatabase", m_usedatabase=false);
+  declareProperty("DetectorMode", m_DetectorMode=3, "Barrel = 1, endcap =2, both =3");
+  declareProperty("RunningMode", m_RunningMode=2);
+  declareProperty("effDistanceCut", m_effdistcut=2.);
+  declareProperty("ChronoTime", m_chronotime=false);
+  declareProperty("useIDGlobal", m_useIDGlobal=false);
   declareProperty("MagFieldSvc", m_fieldServiceHandle);
-  declareProperty("BunchCrossingTool", m_bunchCrossingTool);
-
-  m_countEvent = 0;
 
   m_Eff_summaryHisto.fill(0);
   m_Eff_summaryHistoFirstBCID.fill(0);
@@ -312,22 +271,22 @@ StatusCode
 SCTHitEffMonTool::initialize() {
   ATH_MSG_INFO("Initializing SCTHitEffMonTool");
 
-  CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
-  CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
-  CHECK(detStore()->retrieve(m_trtId, "TRT_ID"));
+  ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
+  ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
+  ATH_CHECK(detStore()->retrieve(m_trtId, "TRT_ID"));
 
   if (m_chronotime) {
-    CHECK(service("ChronoStatSvc", m_chrono));
+    ATH_CHECK(service("ChronoStatSvc", m_chrono));
   }
-  CHECK(ManagedMonitorToolBase::initialize());
-  CHECK(m_holeSearchTool.retrieve());
+  ATH_CHECK(ManagedMonitorToolBase::initialize());
+  ATH_CHECK(m_holeSearchTool.retrieve());
   ATH_MSG_INFO("Retrieved hole search tool " << m_holeSearchTool);
-  CHECK(m_residualPullCalculator.retrieve());
+  ATH_CHECK(m_residualPullCalculator.retrieve());
   ATH_MSG_INFO("Retrieved pull calculator tool " << m_residualPullCalculator);
-  CHECK(m_rotcreator.retrieve());
+  ATH_CHECK(m_rotcreator.retrieve());
   ATH_MSG_INFO("Retrieved tool " << m_rotcreator);
-  CHECK(m_fieldServiceHandle.retrieve());
-  CHECK(m_bunchCrossingTool.retrieve());
+  ATH_CHECK(m_fieldServiceHandle.retrieve());
+  ATH_CHECK(m_bunchCrossingTool.retrieve());
   ATH_MSG_INFO("Retrieved BunchCrossing tool " << m_bunchCrossingTool);
 
   m_path = (m_useIDGlobal) ? ("/InDetGlobal/") : ("");
@@ -373,9 +332,8 @@ SCTHitEffMonTool::bookHistograms() {
   if (newRunFlag()) {
     m_badChips = m_configConditions->badChips();
     ATH_MSG_INFO("Found " << m_badChips->size() << " bad chips");
-    for (std::map<Identifier, unsigned int>::const_iterator chip(m_badChips->begin()); chip != m_badChips->end();
-         ++chip) {
-      ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip->first) << ", chip " << chip->second);
+    for (const std::pair<Identifier, unsigned int>& chip: *m_badChips) {
+      ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip.first) << ", chip " << chip.second);
     }
 
     std::array < MonGroup, N_REGIONS + 1 > histGroupE = {{
@@ -398,63 +356,63 @@ SCTHitEffMonTool::bookHistograms() {
       MonGroup(this, m_path + histogramPath[GENERAL_INDEX], run, ATTRIB_UNMANAGED)
     }};
 
-    CHECK(bookEffHisto(m_Eff_Total, histGroupE[GENERAL_INDEX], "SctTotalEff", "SCT Total Efficiency", N_REGIONS, 0,
+    ATH_CHECK(bookEffHisto(m_Eff_Total, histGroupE[GENERAL_INDEX], "SctTotalEff", "SCT Total Efficiency", N_REGIONS, 0,
                        N_REGIONS));
     for (Int_t i(0); i != 3; ++i) {
       m_Eff_Total->GetXaxis()->SetBinLabel(i + 1, subDetName[i]);
     }
-    CHECK(bookEffHisto(m_Eff_TotalBCID, histGroupE[GENERAL_INDEX], "SctTotalEffBCID",
+    ATH_CHECK(bookEffHisto(m_Eff_TotalBCID, histGroupE[GENERAL_INDEX], "SctTotalEffBCID",
                        "SCT Total Efficiency for First BCID", N_REGIONS, 0, N_REGIONS));
     for (Int_t i(0); i != 3; ++i) {
       m_Eff_TotalBCID->GetXaxis()->SetBinLabel(i + 1, subDetName[i]);
     }
-    CHECK(bookEffHisto(m_Eff_hashCodeHisto, histGroupE[GENERAL_INDEX], "effHashCode", "Efficiency vs module Hash code",
+    ATH_CHECK(bookEffHisto(m_Eff_hashCodeHisto, histGroupE[GENERAL_INDEX], "effHashCode", "Efficiency vs module Hash code",
                        n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5));
     m_Eff_hashCodeHisto->GetXaxis()->SetTitle("Module Hash Code");
     m_Eff_hashCodeHisto->GetYaxis()->SetTitle("Efficiency");
-    CHECK(bookEffHisto(m_Eff_LumiBlockHisto_Total, histGroupE[GENERAL_INDEX], "effLumiBlock",
+    ATH_CHECK(bookEffHisto(m_Eff_LumiBlockHisto_Total, histGroupE[GENERAL_INDEX], "effLumiBlock",
                        "Efficiency vs Luminosity block", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
     m_Eff_LumiBlockHisto_Total->GetXaxis()->SetTitle("Luminosity block");
     m_Eff_LumiBlockHisto_Total->GetYaxis()->SetTitle("Efficiency");
-    CHECK(bookEffHisto(m_effdistribution, histGroupE[GENERAL_INDEX], "SctEffDistribution",
+    ATH_CHECK(bookEffHisto(m_effdistribution, histGroupE[GENERAL_INDEX], "SctEffDistribution",
                        "SCT Efficiency Distribution", 500, 0, 1));
     m_effdistribution->GetXaxis()->SetTitle("Efficiency");
     m_effdistribution->GetYaxis()->SetTitle("Links");
 
     if (m_detailed) {
-      CHECK(bookEffHisto(m_SCTNHitHisto, histGroupE[BARREL_INDEX], "SCTNHit", "Number of total SCT hits", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_SCTNHitHisto, histGroupE[BARREL_INDEX], "SCTNHit", "Number of total SCT hits", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_barrelNHitHisto, histGroupE[BARREL_INDEX], "barrelNHit", "Number of hits in B", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_barrelNHitHisto, histGroupE[BARREL_INDEX], "barrelNHit", "Number of hits in B", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_pNHitHisto, histGroupE[BARREL_INDEX], "pNHit", "Number of hits in EA", 30, -0.5, 29.5));
-      CHECK(bookEffHisto(m_mNHitHisto, histGroupE[BARREL_INDEX], "mNHit", "Number of hits in EC", 30, -0.5, 29.5));
-      CHECK(bookEffHisto(m_trtNHitHisto, histGroupE[BARREL_INDEX], "trtNHit", "Number of TRT hits", 140, -0.5, 139.5));
-      CHECK(bookEffHisto(m_pixelNHitHisto, histGroupE[BARREL_INDEX], "pixelNHit", "Number of pixel hits", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_pNHitHisto, histGroupE[BARREL_INDEX], "pNHit", "Number of hits in EA", 30, -0.5, 29.5));
+      ATH_CHECK(bookEffHisto(m_mNHitHisto, histGroupE[BARREL_INDEX], "mNHit", "Number of hits in EC", 30, -0.5, 29.5));
+      ATH_CHECK(bookEffHisto(m_trtNHitHisto, histGroupE[BARREL_INDEX], "trtNHit", "Number of TRT hits", 140, -0.5, 139.5));
+      ATH_CHECK(bookEffHisto(m_pixelNHitHisto, histGroupE[BARREL_INDEX], "pixelNHit", "Number of pixel hits", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_hashCodeHisto, histGroupE[BARREL_INDEX], "hashCode", "module Hash code",
+      ATH_CHECK(bookEffHisto(m_hashCodeHisto, histGroupE[BARREL_INDEX], "hashCode", "module Hash code",
                          n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5));
 
-      CHECK(bookEffHisto(m_d0TkHisto, histGroupE[GENERAL], "D0Tk", "Track D0", 50, -500., 500.));
-      CHECK(bookEffHisto(m_z0TkHisto, histGroupE[GENERAL], "Z0Tk", "Track Z0", 500, -500., 500.));
-      CHECK(bookEffHisto(m_PtTkHisto, histGroupE[GENERAL], "PtTk", "log10 Track Pt", 40, 2., 6.));
-      CHECK(bookEffHisto(m_nTrkHisto, histGroupE[GENERAL], "nTrk", "num Tracks", 400, -0.5, 399.5));
-      CHECK(bookEffHisto(m_etaTkHisto, histGroupE[GENERAL], "EtaTk", "Track Eta", 100, -2.5, 2.5));
-      CHECK(bookEffHisto(m_d0PrecTkHisto, histGroupE[GENERAL], "D0Tk-prec", "Track D0 prec", 100, -25., 25.));
-      CHECK(bookEffHisto(m_nTrkParsHisto, histGroupE[GENERAL], "nTrk pars", "num Tracks pars", 400, -0.5, 399.5));
-      CHECK(bookEffHisto(m_nTrkGoodHisto, histGroupE[GENERAL], "nTrk good", "num Tracks good", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_d0TkHisto, histGroupE[GENERAL], "D0Tk", "Track D0", 50, -500., 500.));
+      ATH_CHECK(bookEffHisto(m_z0TkHisto, histGroupE[GENERAL], "Z0Tk", "Track Z0", 500, -500., 500.));
+      ATH_CHECK(bookEffHisto(m_PtTkHisto, histGroupE[GENERAL], "PtTk", "log10 Track Pt", 40, 2., 6.));
+      ATH_CHECK(bookEffHisto(m_nTrkHisto, histGroupE[GENERAL], "nTrk", "num Tracks", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_etaTkHisto, histGroupE[GENERAL], "EtaTk", "Track Eta", 100, -2.5, 2.5));
+      ATH_CHECK(bookEffHisto(m_d0PrecTkHisto, histGroupE[GENERAL], "D0Tk-prec", "Track D0 prec", 100, -25., 25.));
+      ATH_CHECK(bookEffHisto(m_nTrkParsHisto, histGroupE[GENERAL], "nTrk pars", "num Tracks pars", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_nTrkGoodHisto, histGroupE[GENERAL], "nTrk good", "num Tracks good", 400, -0.5, 399.5));
     }
     if (m_superDetailed) {
-      CHECK(bookEffHisto(m_LumiBlock, histGroupE[GENERAL], "LumiBlocks", "Luminosity blocks", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
-      CHECK(bookEffHisto(m_effHashLumiB, histGroupE[GENERAL], "effHashCodeLumiBlock",
+      ATH_CHECK(bookEffHisto(m_LumiBlock, histGroupE[GENERAL], "LumiBlocks", "Luminosity blocks", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
+      ATH_CHECK(bookEffHisto(m_effHashLumiB, histGroupE[GENERAL], "effHashCodeLumiBlock",
                          "Modules efficiencies vs. lumi. block",
                          n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5, NBINS_LBs, 0.5, NBINS_LBs + 0.5));
       m_badModMap = new TGraphErrors();
       m_badModMap->SetName("MapOfDisabledModules");
-      CHECK(histGroupE[GENERAL].regGraph(m_badModMap));
+      ATH_CHECK(histGroupE[GENERAL].regGraph(m_badModMap));
       m_badChipMap = new TGraphErrors();
       m_badChipMap->SetName("MapOfDisabledChips");
-      CHECK(histGroupE[GENERAL].regGraph(m_badChipMap));
-      CHECK(bookEffHisto(m_badModFineMap, histGroupE[GENERAL], "FineMapOfDisabledModules", "", 60, -3, 3, 64, -3.2,
+      ATH_CHECK(histGroupE[GENERAL].regGraph(m_badChipMap));
+      ATH_CHECK(bookEffHisto(m_badModFineMap, histGroupE[GENERAL], "FineMapOfDisabledModules", "", 60, -3, 3, 64, -3.2,
                          3.2));
     }
     // Booking efficiency maps
@@ -497,7 +455,7 @@ SCTHitEffMonTool::bookHistograms() {
         }
         for (Long_t j(0); j != 2; ++j) {
           // book inefficiency histogram
-          CHECK(bookEffHisto(m_ineffMap[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_ineffMap[detIndex][j], histGroupE[isub],
                              ineffMapName[isub] + i + "_" + j,
                              "Hit inefficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -506,7 +464,7 @@ SCTHitEffMonTool::bookHistograms() {
           m_ineffMap[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
           //
 
-          CHECK(bookEffHisto(m_effMap[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_effMap[detIndex][j], histGroupE[isub],
                              mapName[isub] + i + "_" + j,
                              "Hit efficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -514,7 +472,7 @@ SCTHitEffMonTool::bookHistograms() {
           m_effMap[detIndex][j]->GetXaxis()->SetTitle("Index in the direction of #eta");
           m_effMap[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
 
-          CHECK(bookEffHisto(m_effMapFirstBCID[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_effMapFirstBCID[detIndex][j], histGroupE[isub],
                              mapName[isub] + i + "_" + j + "_bcid",
                              "Hit efficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub] + " for first BCID",
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -522,7 +480,7 @@ SCTHitEffMonTool::bookHistograms() {
           m_effMapFirstBCID[detIndex][j]->GetXaxis()->SetTitle("Index in the direction of #eta");
           m_effMapFirstBCID[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
 
-          CHECK(bookEffHisto(m_effLumiBlock[detIndex][j], histGroupL[isub],
+          ATH_CHECK(bookEffHisto(m_effLumiBlock[detIndex][j], histGroupL[isub],
                              effLumiName[isub] + i + "_" + j,
                              "Efficiency vs LumiBlock of" + layerName[isub] + i + " / side " + j + " in " +
                              subDetName[isub],
@@ -532,36 +490,36 @@ SCTHitEffMonTool::bookHistograms() {
         }
 
         if (m_superDetailed) {
-          CHECK(bookEffHisto(m_accMap[detIndex], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_accMap[detIndex], histGroupE[isub],
                              "nDisabledChips_" + subDetNameShort[isub] + "_" + i,
                              "Map of the acceptance for" + layerName[isub] + i + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
           TString resid("xlResidual_");
-          CHECK(bookEffHisto(m_xlResidualHisto[isub][i], histGroupE[isub], resid + i, resid + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualHisto[isub][i], histGroupE[isub], resid + i, resid + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualE0Histo[isub][i], histGroupE[isub], resid + "eta0_" + i, resid + "eta0_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualE0Histo[isub][i], histGroupE[isub], resid + "eta0_" + i, resid + "eta0_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualE1Histo[isub][i], histGroupE[isub], resid + "eta1_" + i, resid + "eta1_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualE1Histo[isub][i], histGroupE[isub], resid + "eta1_" + i, resid + "eta1_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualUnasHisto[isub][i], histGroupE[isub], resid + "unas_" + i, resid + "unas_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualUnasHisto[isub][i], histGroupE[isub], resid + "unas_" + i, resid + "unas_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i], histGroupE[isub], TString("residlayer") + i,
+          ATH_CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i], histGroupE[isub], TString("residlayer") + i,
                              TString("residlayer") + i,
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
-          CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i + 1], histGroupE[isub], TString("residlayer") + i + ".5",
+          ATH_CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i + 1], histGroupE[isub], TString("residlayer") + i + ".5",
                              TString("residlayer") + i + ".5",
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
         }
       }
 
-      CHECK(bookEffHisto(m_Eff_summaryHisto[isub], histGroupShift[isub], sumeff[isub], sumefftitle[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHisto[isub], histGroupShift[isub], sumeff[isub], sumefftitle[isub],
                          2 * n_layers[isub], 0., n_layers[isub]));
-      CHECK(bookEffHisto(m_Eff_summaryHistoFirstBCID[isub], histGroupShift[isub], sumeffBCID[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHistoFirstBCID[isub], histGroupShift[isub], sumeffBCID[isub],
                          sumefftitleBCID[isub], 2 * n_layers[isub], 0., n_layers[isub]));
-      CHECK(bookEffHisto(m_Eff_summaryHisto_old[isub], histGroupShift[isub], sumeff_old[isub], sumefftitle[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHisto_old[isub], histGroupShift[isub], sumeff_old[isub], sumefftitle[isub],
                          2 * n_layers[isub], 0., n_layers[isub]));
       unsigned int limit[3] = {
         N_DISKSx2, N_BARRELSx2, N_DISKSx2
@@ -577,139 +535,139 @@ SCTHitEffMonTool::bookHistograms() {
       m_Eff_summaryHistoFirstBCID[isub]->GetYaxis()->SetTitle("Efficiency");
       m_Eff_summaryHisto_old[isub]->GetYaxis()->SetTitle("Efficiency");
 
-      CHECK(bookEffHisto(m_Eff_LumiBlockHisto[isub], histGroupE[isub], "effLumiBlock",
+      ATH_CHECK(bookEffHisto(m_Eff_LumiBlockHisto[isub], histGroupE[isub], "effLumiBlock",
                          "Efficiency vs Luminosity block in " + subDetName[isub], NBINS_LBs, 0.5, NBINS_LBs + 0.5));
       m_Eff_LumiBlockHisto[isub]->GetXaxis()->SetTitle("Luminosity block");
       m_Eff_LumiBlockHisto[isub]->GetYaxis()->SetTitle("Efficiency");
 
       if (m_detailed) {
-        CHECK(bookEffHisto(m_nTrkUsedHisto[isub], histGroupE[isub], "nTrk Used", "nTrk used", 50, -0.5, 49.5));
-        CHECK(bookEffHisto(m_probEnclosedHisto[isub], histGroupE[isub], "probEnclosed", "Probability Enclosed",
+        ATH_CHECK(bookEffHisto(m_nTrkUsedHisto[isub], histGroupE[isub], "nTrk Used", "nTrk used", 50, -0.5, 49.5));
+        ATH_CHECK(bookEffHisto(m_probEnclosedHisto[isub], histGroupE[isub], "probEnclosed", "Probability Enclosed",
                            2 * n_layers[isub], -.25, n_layers[isub] - .25));
-        CHECK(bookEffHisto(m_EventHisto[isub], histGroupE[isub], "EventNo", "Event No", 800, 0., 40000000.));
-        CHECK(bookEffHisto(m_Eff_EventHisto[isub], histGroupE[isub], "effEventNo", "Efficiency v Event no.", 800, 0.,
+        ATH_CHECK(bookEffHisto(m_EventHisto[isub], histGroupE[isub], "EventNo", "Event No", 800, 0., 40000000.));
+        ATH_CHECK(bookEffHisto(m_Eff_EventHisto[isub], histGroupE[isub], "effEventNo", "Efficiency v Event no.", 800, 0.,
                            40000000.));
-        CHECK(bookEffHisto(m_SelectionHisto[isub], histGroupE[isub], "selectionCuts", "Selection Cuts", 12, -0.5,
+        ATH_CHECK(bookEffHisto(m_SelectionHisto[isub], histGroupE[isub], "selectionCuts", "Selection Cuts", 12, -0.5,
                            11.5));
-        CHECK(bookEffHisto(m_Eff_SelectionHisto[isub], histGroupE[isub], "effSelectionCuts",
+        ATH_CHECK(bookEffHisto(m_Eff_SelectionHisto[isub], histGroupE[isub], "effSelectionCuts",
                            "Efficiency v Selection Cuts", 12, -0.5, 11.5));
         for (Int_t bin(0); bin != 12; ++bin) {
           m_SelectionHisto[isub]->GetXaxis()->SetBinLabel(bin + 1, selecName[bin]);
           m_Eff_SelectionHisto[isub]->GetXaxis()->SetBinLabel(bin + 1, selecName[bin]);
         }
-        CHECK(bookEffHisto(m_ResidualHisto[isub], histGroupE[isub], "residuals", "Residuals", 2000, -10, 10));
-        CHECK(bookEffHisto(m_ResidualUnasHisto[isub], histGroupE[isub], "residualsUnas", "Residuals Unassociated", 2000,
+        ATH_CHECK(bookEffHisto(m_ResidualHisto[isub], histGroupE[isub], "residuals", "Residuals", 2000, -10, 10));
+        ATH_CHECK(bookEffHisto(m_ResidualUnasHisto[isub], histGroupE[isub], "residualsUnas", "Residuals Unassociated", 2000,
                            -10, 10));
-        CHECK(bookEffHisto(m_ResidualMissHisto[isub], histGroupE[isub], "residualsMiss", "Residuals Miss", 2000, -10,
+        ATH_CHECK(bookEffHisto(m_ResidualMissHisto[isub], histGroupE[isub], "residualsMiss", "Residuals Miss", 2000, -10,
                            10));
-        CHECK(bookEffHisto(m_Unas_summaryHisto[isub], histGroupE[isub], "summaryunas",
+        ATH_CHECK(bookEffHisto(m_Unas_summaryHisto[isub], histGroupE[isub], "summaryunas",
                            "Summary Module Unassociated Per Event", 2 * 9, 0., 9.));
-        CHECK(bookEffHisto(m_chi2Histo[isub], histGroupE[isub], "chi2", "Chi2", 50, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_chi2Histo[isub], histGroupE[isub], "effChi2", "Efficiency v Chi2", 25, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_chi2HistoFinal[isub], histGroupE[isub], "effChi2Final", "Efficiency v Chi2, Final", 25,
+        ATH_CHECK(bookEffHisto(m_chi2Histo[isub], histGroupE[isub], "chi2", "Chi2", 50, 0., 10.));
+        ATH_CHECK(bookEffHisto(m_Eff_chi2Histo[isub], histGroupE[isub], "effChi2", "Efficiency v Chi2", 25, 0., 10.));
+        ATH_CHECK(bookEffHisto(m_Eff_chi2HistoFinal[isub], histGroupE[isub], "effChi2Final", "Efficiency v Chi2, Final", 25,
                            0., 10.));
-        CHECK(bookEffHisto(m_localMissHisto[isub], histGroupE[isub], "localMiss", "local position, hole", 40, -40., 40.,
+        ATH_CHECK(bookEffHisto(m_localMissHisto[isub], histGroupE[isub], "localMiss", "local position, hole", 40, -40., 40.,
                            40, -80., 80.));
-        CHECK(bookEffHisto(m_localUnasHisto[isub], histGroupE[isub], "localUnas", "local position, unassociated hit",
+        ATH_CHECK(bookEffHisto(m_localUnasHisto[isub], histGroupE[isub], "localUnas", "local position, unassociated hit",
                            40, -40., 40., 40, -80., 80.));
-        CHECK(bookEffHisto(m_Eff_etaHisto[isub], histGroupE[isub], "effEta", "Efficiency versus track eta", 30, -2.8,
+        ATH_CHECK(bookEffHisto(m_Eff_etaHisto[isub], histGroupE[isub], "effEta", "Efficiency versus track eta", 30, -2.8,
                            2.8));
-        CHECK(bookEffHisto(m_Eff_etaPhiCutHisto[isub], histGroupE[isub], "effEtaPhiCut",
+        ATH_CHECK(bookEffHisto(m_Eff_etaPhiCutHisto[isub], histGroupE[isub], "effEtaPhiCut",
                            "Efficiency versus track eta, phi cut", 30, -2.8, 2.8));
-        CHECK(bookEffHisto(m_Eff_otherFaceHisto[isub], histGroupE[isub], "effOtherFace",
+        ATH_CHECK(bookEffHisto(m_Eff_otherFaceHisto[isub], histGroupE[isub], "effOtherFace",
                            "Efficiency versus other face hit y/n", 3, -1.5, 1.5));
-        CHECK(bookEffHisto(m_Unas_otherFaceHisto[isub], histGroupE[isub], "effOtherFaceUnas",
+        ATH_CHECK(bookEffHisto(m_Unas_otherFaceHisto[isub], histGroupE[isub], "effOtherFaceUnas",
                            "other face hit Unassociated per event", 3, -1.5, 1.5));
-        CHECK(bookEffHisto(m_Eff_nSCTHisto[isub], histGroupE[isub], "effNSCT", "Efficiency versus Number of SCT hits",
+        ATH_CHECK(bookEffHisto(m_Eff_nSCTHisto[isub], histGroupE[isub], "effNSCT", "Efficiency versus Number of SCT hits",
                            30, -0.5, 29.5));
-        CHECK(bookEffHisto(m_Eff_nTRTHisto[isub], histGroupE[isub], "effNTRT", "Efficiency versus Number of TRT hits",
+        ATH_CHECK(bookEffHisto(m_Eff_nTRTHisto[isub], histGroupE[isub], "effNTRT", "Efficiency versus Number of TRT hits",
                            70, -1, 139.));
-        CHECK(bookEffHisto(m_Eff_nOtherHisto[isub], histGroupE[isub], "effNOther",
+        ATH_CHECK(bookEffHisto(m_Eff_nOtherHisto[isub], histGroupE[isub], "effNOther",
                            "Efficiency versus Number of other SCT  sides hit", 30, -0.5, 29.5));
-        CHECK(bookEffHisto(m_nOtherHisto[isub], histGroupE[isub], "nOther", "Number of other SCT barrel sides hit", 30,
+        ATH_CHECK(bookEffHisto(m_nOtherHisto[isub], histGroupE[isub], "nOther", "Number of other SCT barrel sides hit", 30,
                            -0.5, 29.5));
-        CHECK(bookEffHisto(m_timecorHisto[isub], histGroupE[isub], "timecor", "TRT phase", 120, -50.5, 69.5));
-        CHECK(bookEffHisto(m_Eff_timecorHisto[isub], histGroupE[isub], "effTimecor", "Efficiency vs TRT phase", 120,
+        ATH_CHECK(bookEffHisto(m_timecorHisto[isub], histGroupE[isub], "timecor", "TRT phase", 120, -50.5, 69.5));
+        ATH_CHECK(bookEffHisto(m_Eff_timecorHisto[isub], histGroupE[isub], "effTimecor", "Efficiency vs TRT phase", 120,
                            -50.5, 69.5));
-        CHECK(bookEffHisto(m_Eff_xlocHisto[isub], histGroupE[isub], "effXloc", "Module Efficiency by x local", 32, -32.,
+        ATH_CHECK(bookEffHisto(m_Eff_xlocHisto[isub], histGroupE[isub], "effXloc", "Module Efficiency by x local", 32, -32.,
                            32.));
-        CHECK(bookEffHisto(m_Eff_ylocHistos[isub], histGroupE[isub], "effYloc", "Module Efficiency by y local", 32,
+        ATH_CHECK(bookEffHisto(m_Eff_ylocHistos[isub], histGroupE[isub], "effYloc", "Module Efficiency by y local", 32,
                            -64., 64.));
-        CHECK(bookEffHisto(m_Unas_xlocHisto[isub], histGroupE[isub], "unasXloc",
+        ATH_CHECK(bookEffHisto(m_Unas_xlocHisto[isub], histGroupE[isub], "unasXloc",
                            "Unassociated hit per event by x local", 32, -32., 32.));
-        CHECK(bookEffHisto(m_Unas_ylocHisto[isub], histGroupE[isub], "unasYloc",
+        ATH_CHECK(bookEffHisto(m_Unas_ylocHisto[isub], histGroupE[isub], "unasYloc",
                            "Unassociated hit per event by y local", 32, -64., 64.));
-        CHECK(bookEffHisto(m_Eff_ptiHisto[isub], histGroupE[isub], "effPti", "Module Efficiency by q/p", 20, -0.002,
+        ATH_CHECK(bookEffHisto(m_Eff_ptiHisto[isub], histGroupE[isub], "effPti", "Module Efficiency by q/p", 20, -0.002,
                            0.002));
-        CHECK(bookEffHisto(m_Eff_ptHisto[isub], histGroupE[isub], "effPt", "Module Efficiency by log10 |p|", 40, 2.,
+        ATH_CHECK(bookEffHisto(m_Eff_ptHisto[isub], histGroupE[isub], "effPt", "Module Efficiency by log10 |p|", 40, 2.,
                            6.));
-        CHECK(bookEffHisto(m_Unas_ptiHisto[isub], histGroupE[isub], "unasPti", "Unassociated Hit per event by q/p", 20,
+        ATH_CHECK(bookEffHisto(m_Unas_ptiHisto[isub], histGroupE[isub], "unasPti", "Unassociated Hit per event by q/p", 20,
                            -0.002, 0.002));
-        CHECK(bookEffHisto(m_Unas_phiHisto[isub], histGroupE[isub], "unasPhi",
+        ATH_CHECK(bookEffHisto(m_Unas_phiHisto[isub], histGroupE[isub], "unasPhi",
                            "Unassociated hit per event by phi local", 30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_phiHisto[isub], histGroupE[isub], "effPhi", "Module Efficiency by Phi", 30, -90.,
+        ATH_CHECK(bookEffHisto(m_Eff_phiHisto[isub], histGroupE[isub], "effPhi", "Module Efficiency by Phi", 30, -90.,
                            90.));
-        CHECK(bookEffHisto(m_Eff_phiEtaCutHisto[isub], histGroupE[isub], "effPhiEtaCut",
+        ATH_CHECK(bookEffHisto(m_Eff_phiEtaCutHisto[isub], histGroupE[isub], "effPhiEtaCut",
                            "Module Efficiency by Phi, Eta cut", 30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_phiHistoFinal[isub], histGroupE[isub], "effPhiFinal", "Module Efficiency by Phi Final",
+        ATH_CHECK(bookEffHisto(m_Eff_phiHistoFinal[isub], histGroupE[isub], "effPhiFinal", "Module Efficiency by Phi Final",
                            30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_d0Histo[isub], histGroupE[isub], "effD0", "Module Efficiency by D0", 10, -500., 500.));
-        CHECK(bookEffHisto(m_Eff_d0PrecHisto[isub], histGroupE[isub], "effD0Prec", "Module Efficiency by D0 prec", 25,
+        ATH_CHECK(bookEffHisto(m_Eff_d0Histo[isub], histGroupE[isub], "effD0", "Module Efficiency by D0", 10, -500., 500.));
+        ATH_CHECK(bookEffHisto(m_Eff_d0PrecHisto[isub], histGroupE[isub], "effD0Prec", "Module Efficiency by D0 prec", 25,
                            -25., 25.));
-        CHECK(bookEffHisto(m_Eff_z0Histo[isub], histGroupE[isub], "effZ0", "Module Efficiency by Z0", 10, -1000.,
+        ATH_CHECK(bookEffHisto(m_Eff_z0Histo[isub], histGroupE[isub], "effZ0", "Module Efficiency by Z0", 10, -1000.,
                            1000.));
-        CHECK(bookEffHisto(m_etaTkUsedHisto[isub], histGroupE[isub], "EtaTkUsed", "Used Track Eta", 100, -2.8, 2.8));
-        CHECK(bookEffHisto(m_phiTkUsedHisto[isub], histGroupE[isub], "PhiTkUsed", "Used Track Phi", 50, -3.142, 3.142));
-        CHECK(bookEffHisto(m_ptiTkUsedHisto[isub], histGroupE[isub], "PtiTkUsed", "Used Track q/p (MeV)", 50, -0.002,
+        ATH_CHECK(bookEffHisto(m_etaTkUsedHisto[isub], histGroupE[isub], "EtaTkUsed", "Used Track Eta", 100, -2.8, 2.8));
+        ATH_CHECK(bookEffHisto(m_phiTkUsedHisto[isub], histGroupE[isub], "PhiTkUsed", "Used Track Phi", 50, -3.142, 3.142));
+        ATH_CHECK(bookEffHisto(m_ptiTkUsedHisto[isub], histGroupE[isub], "PtiTkUsed", "Used Track q/p (MeV)", 50, -0.002,
                            0.002));
-        CHECK(bookEffHisto(m_ptTkUsedHisto[isub], histGroupE[isub], "PtTkUsed", "Used Track log10|p| (MeV)", 40, 2.0,
+        ATH_CHECK(bookEffHisto(m_ptTkUsedHisto[isub], histGroupE[isub], "PtTkUsed", "Used Track log10|p| (MeV)", 40, 2.0,
                            6.));
-        CHECK(bookEffHisto(m_d0TkUsedHisto[isub], histGroupE[isub], "D0TkUsed", "Used Track D0", 50, -500., 500.));
-        CHECK(bookEffHisto(m_d0PrecTkUsedHisto[isub], histGroupE[isub], "D0PrecTkUsed", "Used Track D0 prec", 100, -25.,
+        ATH_CHECK(bookEffHisto(m_d0TkUsedHisto[isub], histGroupE[isub], "D0TkUsed", "Used Track D0", 50, -500., 500.));
+        ATH_CHECK(bookEffHisto(m_d0PrecTkUsedHisto[isub], histGroupE[isub], "D0PrecTkUsed", "Used Track D0 prec", 100, -25.,
                            25.));
-        CHECK(bookEffHisto(m_z0TkUsedHisto[isub], histGroupE[isub], "Z0TkUsed", "Used Track Z0", 50, -1000., 1000.));
-        CHECK(bookEffHisto(m_localHitXHisto[isub], histGroupE[isub], "localHitX", "local x position, hit", 80, -40.,
+        ATH_CHECK(bookEffHisto(m_z0TkUsedHisto[isub], histGroupE[isub], "Z0TkUsed", "Used Track Z0", 50, -1000., 1000.));
+        ATH_CHECK(bookEffHisto(m_localHitXHisto[isub], histGroupE[isub], "localHitX", "local x position, hit", 80, -40.,
                            40.));
-        CHECK(bookEffHisto(m_localHitYHistos[isub], histGroupE[isub], "localHitY", "local y position, hit", 320, -80.,
+        ATH_CHECK(bookEffHisto(m_localHitYHistos[isub], histGroupE[isub], "localHitY", "local y position, hit", 320, -80.,
                            80.));
-        CHECK(bookEffHisto(m_phiLocalHisto[isub], histGroupE[isub], "phiLocal", "local phi of tracks", 60, -90., 90.));
-        CHECK(bookEffHisto(m_phiLocalCutHisto[isub], histGroupE[isub], "phiLocalCut", "local phi of low D0 tracks", 60,
+        ATH_CHECK(bookEffHisto(m_phiLocalHisto[isub], histGroupE[isub], "phiLocal", "local phi of tracks", 60, -90., 90.));
+        ATH_CHECK(bookEffHisto(m_phiLocalCutHisto[isub], histGroupE[isub], "phiLocalCut", "local phi of low D0 tracks", 60,
                            -90., 90.));
-        CHECK(bookEffHisto(m_Eff_nTrk[isub], histGroupE[isub], "effTrk", "Efficiency versus number of tracks", 200, 0,
+        ATH_CHECK(bookEffHisto(m_Eff_nTrk[isub], histGroupE[isub], "effTrk", "Efficiency versus number of tracks", 200, 0,
                            400.));
-        CHECK(bookEffHisto(m_Eff_nGoodTrk[isub], histGroupE[isub], "effGoodTrk",
+        ATH_CHECK(bookEffHisto(m_Eff_nGoodTrk[isub], histGroupE[isub], "effGoodTrk",
                            "Efficiency versus number of good tracks", 200, 0, 400.));
       }
 
       if (m_superDetailed) {
         // CHECK (bookEffHisto(m_Eff_LumiBlockHisto[isub], histGroupE[isub],"effLumiBlock", "Efficiency v Luminosity
         // block",1000,1,1001));
-        CHECK(bookEffHisto(m_inEffStrip[isub], histGroupE[isub],
+        ATH_CHECK(bookEffHisto(m_inEffStrip[isub], histGroupE[isub],
                            "StripInEfficiency" + subDetNameShort[isub], "Strips inefficiencies in " + subDetName[isub],
                            n_mod[isub] * 2, f_mod[isub] * 2 - 0.5, (f_mod[isub] + n_mod[isub]) * 2 - 0.5, N_STRIPS,
                            FIRST_STRIP - 0.5, LAST_STRIP + 0.5));
-        CHECK(bookEffHisto(m_inEffChip[isub], histGroupE[isub],
+        ATH_CHECK(bookEffHisto(m_inEffChip[isub], histGroupE[isub],
                            "ChipInEfficiency" + subDetNameShort[isub], "Chips ineficiencies in " + subDetName[isub],
                            n_mod[isub] * 2, f_mod[isub] * 2 - 0.5, (f_mod[isub] + n_mod[isub]) * 2 - 0.5, N_CHIPS,
                            FIRST_CHIP - 0.5, LAST_CHIP + 0.5));
-        CHECK(bookEffHisto(m_badModPerSide[isub], histGroupE[isub], "badModPerSide", "Number of bad module per side",
+        ATH_CHECK(bookEffHisto(m_badModPerSide[isub], histGroupE[isub], "badModPerSide", "Number of bad module per side",
                            2 * n_layers[isub], 0., n_layers[isub]));
-        CHECK(bookEffHisto(m_holesPerTrackHisto[isub], histGroupE[isub], "holesPerTrack", "Number of holes per track",
+        ATH_CHECK(bookEffHisto(m_holesPerTrackHisto[isub], histGroupE[isub], "holesPerTrack", "Number of holes per track",
                            2 * n_layers[isub], 0, n_layers[isub]));
-        CHECK(bookEffHisto(m_holesDistPerTrackHisto[isub], histGroupE[isub], "holesDistPerTrack",
+        ATH_CHECK(bookEffHisto(m_holesDistPerTrackHisto[isub], histGroupE[isub], "holesDistPerTrack",
                            "Number of holes per track", 2 * n_layers[isub], 0, n_layers[isub]));
-        CHECK(bookEffHisto(m_chi2vPhiHisto[isub], histGroupE[isub], "Chi2vPhi", "Chi2 v Phi", 30, -90., 90.));
-        CHECK(bookEffHisto(m_localHitHisto[isub], histGroupE[isub], "localHit", "local position, hit", 40, -40., 40.,
+        ATH_CHECK(bookEffHisto(m_chi2vPhiHisto[isub], histGroupE[isub], "Chi2vPhi", "Chi2 v Phi", 30, -90., 90.));
+        ATH_CHECK(bookEffHisto(m_localHitHisto[isub], histGroupE[isub], "localHit", "local position, hit", 40, -40., 40.,
                            40, -80., 80.));
-        CHECK(bookEffHisto(m_localHitGHisto[isub], histGroupE[isub], "localHitG", "local position Guard, hit", 40, -40.,
+        ATH_CHECK(bookEffHisto(m_localHitGHisto[isub], histGroupE[isub], "localHitG", "local position Guard, hit", 40, -40.,
                            40., 40, -80., 80.));
-        CHECK(bookEffHisto(m_TwoSidesResiduals[isub], histGroupE[isub], "TwoSidesResiduals", "Two Sides Residuals", 120,
+        ATH_CHECK(bookEffHisto(m_TwoSidesResiduals[isub], histGroupE[isub], "TwoSidesResiduals", "Two Sides Residuals", 120,
                            -3., 3., 120, -3., 3.));
-        CHECK(bookEffHisto(m_TwoSidesResidualsIneff[isub], histGroupE[isub], "TwoSidesResidualsIneff",
+        ATH_CHECK(bookEffHisto(m_TwoSidesResidualsIneff[isub], histGroupE[isub], "TwoSidesResidualsIneff",
                            "Two Sides Residuals (Inefficient/Unas)", 120, -30., 30., 120, -30., 30.));
-        CHECK(bookEffHisto(m_chi2ResidualHisto[isub], histGroupE[isub], "chi2Residual", "Chi2 v Residual", 200, -10.,
+        ATH_CHECK(bookEffHisto(m_chi2ResidualHisto[isub], histGroupE[isub], "chi2Residual", "Chi2 v Residual", 200, -10.,
                            10., 120, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_summaryIncBadMod[isub], histGroupE[isub], "summaryIncBadMod" + subDetNameShort[isub],
+        ATH_CHECK(bookEffHisto(m_Eff_summaryIncBadMod[isub], histGroupE[isub], "summaryIncBadMod" + subDetNameShort[isub],
                            "Efficiency vs. layer including bad sensors",
                            2 * n_layers[isub], 0., n_layers[isub]));
       }
@@ -730,9 +688,8 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
   if (newRunFlag()) {
     m_badChips = m_configConditions->badChips();
     ATH_MSG_INFO("Found " << m_badChips->size() << " bad chips");
-    for (std::map<Identifier, unsigned int>::const_iterator chip(m_badChips->begin()); chip != m_badChips->end();
-         ++chip) {
-      ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip->first) << ", chip " << chip->second);
+    for (const std::pair<Identifier, unsigned int>& chip: *m_badChips) {
+      ATH_MSG_VERBOSE("Module " << m_sctId->wafer_hash(chip.first) << ", chip " << chip.second);
     }
 
     std::array < MonGroup, N_REGIONS + 1 > histGroupE = {{
@@ -755,57 +712,57 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
       MonGroup(this, m_path + histogramPath[GENERAL_INDEX], run, ATTRIB_UNMANAGED)
     }};
 
-    CHECK(bookEffHisto(m_Eff_Total, histGroupE[GENERAL_INDEX], "SctTotalEff", "SCT Total Efficiency", N_REGIONS, 0,
+    ATH_CHECK(bookEffHisto(m_Eff_Total, histGroupE[GENERAL_INDEX], "SctTotalEff", "SCT Total Efficiency", N_REGIONS, 0,
                        N_REGIONS));
     for (Int_t i(0); i != 3; ++i) {
       m_Eff_Total->GetXaxis()->SetBinLabel(i + 1, subDetName[i]);
     }
-    CHECK(bookEffHisto(m_Eff_TotalBCID, histGroupE[GENERAL_INDEX], "SctTotalEffBCID",
+    ATH_CHECK(bookEffHisto(m_Eff_TotalBCID, histGroupE[GENERAL_INDEX], "SctTotalEffBCID",
                        "SCT Total Efficiency for First BCID", N_REGIONS, 0, N_REGIONS));
     for (Int_t i(0); i != 3; ++i) {
       m_Eff_TotalBCID->GetXaxis()->SetBinLabel(i + 1, subDetName[i]);
     }
-    CHECK(bookEffHisto(m_Eff_hashCodeHisto, histGroupE[GENERAL_INDEX], "effHashCode", "Efficiency vs module Hash code",
+    ATH_CHECK(bookEffHisto(m_Eff_hashCodeHisto, histGroupE[GENERAL_INDEX], "effHashCode", "Efficiency vs module Hash code",
                        n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5));
     m_Eff_hashCodeHisto->GetXaxis()->SetTitle("Module Hash Code");
     m_Eff_hashCodeHisto->GetYaxis()->SetTitle("Efficiency");
-    CHECK(bookEffHisto(m_Eff_LumiBlockHisto_Total, histGroupE[GENERAL_INDEX], "effLumiBlock",
+    ATH_CHECK(bookEffHisto(m_Eff_LumiBlockHisto_Total, histGroupE[GENERAL_INDEX], "effLumiBlock",
                        "Efficiency vs Luminosity block", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
 
     if (m_detailed) {
-      CHECK(bookEffHisto(m_SCTNHitHisto, histGroupE[BARREL_INDEX], "SCTNHit", "Number of total SCT hits", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_SCTNHitHisto, histGroupE[BARREL_INDEX], "SCTNHit", "Number of total SCT hits", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_barrelNHitHisto, histGroupE[BARREL_INDEX], "barrelNHit", "Number of hits in B", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_barrelNHitHisto, histGroupE[BARREL_INDEX], "barrelNHit", "Number of hits in B", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_pNHitHisto, histGroupE[BARREL_INDEX], "pNHit", "Number of hits in EA", 30, -0.5, 29.5));
-      CHECK(bookEffHisto(m_mNHitHisto, histGroupE[BARREL_INDEX], "mNHit", "Number of hits in EC", 30, -0.5, 29.5));
-      CHECK(bookEffHisto(m_trtNHitHisto, histGroupE[BARREL_INDEX], "trtNHit", "Number of TRT hits", 140, -0.5, 139.5));
-      CHECK(bookEffHisto(m_pixelNHitHisto, histGroupE[BARREL_INDEX], "pixelNHit", "Number of pixel hits", 30, -0.5,
+      ATH_CHECK(bookEffHisto(m_pNHitHisto, histGroupE[BARREL_INDEX], "pNHit", "Number of hits in EA", 30, -0.5, 29.5));
+      ATH_CHECK(bookEffHisto(m_mNHitHisto, histGroupE[BARREL_INDEX], "mNHit", "Number of hits in EC", 30, -0.5, 29.5));
+      ATH_CHECK(bookEffHisto(m_trtNHitHisto, histGroupE[BARREL_INDEX], "trtNHit", "Number of TRT hits", 140, -0.5, 139.5));
+      ATH_CHECK(bookEffHisto(m_pixelNHitHisto, histGroupE[BARREL_INDEX], "pixelNHit", "Number of pixel hits", 30, -0.5,
                          29.5));
-      CHECK(bookEffHisto(m_hashCodeHisto, histGroupE[BARREL_INDEX], "hashCode", "module Hash code",
+      ATH_CHECK(bookEffHisto(m_hashCodeHisto, histGroupE[BARREL_INDEX], "hashCode", "module Hash code",
                          n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5));
 
-      CHECK(bookEffHisto(m_d0TkHisto, histGroupE[GENERAL], "D0Tk", "Track D0", 50, -500., 500.));
-      CHECK(bookEffHisto(m_z0TkHisto, histGroupE[GENERAL], "Z0Tk", "Track Z0", 500, -500., 500.));
-      CHECK(bookEffHisto(m_PtTkHisto, histGroupE[GENERAL], "PtTk", "log10 Track Pt", 40, 2., 6.));
-      CHECK(bookEffHisto(m_nTrkHisto, histGroupE[GENERAL], "nTrk", "num Tracks", 400, -0.5, 399.5));
-      CHECK(bookEffHisto(m_etaTkHisto, histGroupE[GENERAL], "EtaTk", "Track Eta", 100, -2.5, 2.5));
-      CHECK(bookEffHisto(m_d0PrecTkHisto, histGroupE[GENERAL], "D0Tk-prec", "Track D0 prec", 100, -25., 25.));
-      CHECK(bookEffHisto(m_nTrkParsHisto, histGroupE[GENERAL], "nTrk pars", "num Tracks pars", 400, -0.5, 399.5));
-      CHECK(bookEffHisto(m_nTrkGoodHisto, histGroupE[GENERAL], "nTrk good", "num Tracks good", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_d0TkHisto, histGroupE[GENERAL], "D0Tk", "Track D0", 50, -500., 500.));
+      ATH_CHECK(bookEffHisto(m_z0TkHisto, histGroupE[GENERAL], "Z0Tk", "Track Z0", 500, -500., 500.));
+      ATH_CHECK(bookEffHisto(m_PtTkHisto, histGroupE[GENERAL], "PtTk", "log10 Track Pt", 40, 2., 6.));
+      ATH_CHECK(bookEffHisto(m_nTrkHisto, histGroupE[GENERAL], "nTrk", "num Tracks", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_etaTkHisto, histGroupE[GENERAL], "EtaTk", "Track Eta", 100, -2.5, 2.5));
+      ATH_CHECK(bookEffHisto(m_d0PrecTkHisto, histGroupE[GENERAL], "D0Tk-prec", "Track D0 prec", 100, -25., 25.));
+      ATH_CHECK(bookEffHisto(m_nTrkParsHisto, histGroupE[GENERAL], "nTrk pars", "num Tracks pars", 400, -0.5, 399.5));
+      ATH_CHECK(bookEffHisto(m_nTrkGoodHisto, histGroupE[GENERAL], "nTrk good", "num Tracks good", 400, -0.5, 399.5));
     }
     if (m_superDetailed) {
-      CHECK(bookEffHisto(m_LumiBlock, histGroupE[GENERAL], "LumiBlocks", "Luminosity blocks", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
-      CHECK(bookEffHisto(m_effHashLumiB, histGroupE[GENERAL], "effHashCodeLumiBlock",
+      ATH_CHECK(bookEffHisto(m_LumiBlock, histGroupE[GENERAL], "LumiBlocks", "Luminosity blocks", NBINS_LBs, 0.5, NBINS_LBs + 0.5));
+      ATH_CHECK(bookEffHisto(m_effHashLumiB, histGroupE[GENERAL], "effHashCodeLumiBlock",
                          "Modules efficiencies vs. lumi. block",
                          n_mod[GENERAL_INDEX] * 2, -0.5, n_mod[GENERAL_INDEX] * 2 - 0.5, NBINS_LBs, 0.5, NBINS_LBs + 0.5));
       m_badModMap = new TGraphErrors();
       m_badModMap->SetName("MapOfDisabledModules");
-      CHECK(histGroupE[GENERAL].regGraph(m_badModMap));
+      ATH_CHECK(histGroupE[GENERAL].regGraph(m_badModMap));
       m_badChipMap = new TGraphErrors();
       m_badChipMap->SetName("MapOfDisabledChips");
-      CHECK(histGroupE[GENERAL].regGraph(m_badChipMap));
-      CHECK(bookEffHisto(m_badModFineMap, histGroupE[GENERAL], "FineMapOfDisabledModules", "", 60, -3, 3, 64, -3.2,
+      ATH_CHECK(histGroupE[GENERAL].regGraph(m_badChipMap));
+      ATH_CHECK(bookEffHisto(m_badModFineMap, histGroupE[GENERAL], "FineMapOfDisabledModules", "", 60, -3, 3, 64, -3.2,
                          3.2));
     }
     // Booking efficiency maps
@@ -849,7 +806,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
         }
         for (Long_t j(0); j != 2; ++j) {
           // book inefficiency histogram
-          CHECK(bookEffHisto(m_ineffMap[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_ineffMap[detIndex][j], histGroupE[isub],
                              ineffMapName[isub] + i + "_" + j,
                              "Hit inefficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -858,7 +815,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
           m_ineffMap[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
           //
 
-          CHECK(bookEffHisto(m_effMap[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_effMap[detIndex][j], histGroupE[isub],
                              mapName[isub] + i + "_" + j,
                              "Hit efficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -866,7 +823,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
           m_effMap[detIndex][j]->GetXaxis()->SetTitle("Index in the direction of #eta");
           m_effMap[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
 
-          CHECK(bookEffHisto(m_effMapFirstBCID[detIndex][j], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_effMapFirstBCID[detIndex][j], histGroupE[isub],
                              mapName[isub] + i + "_" + j + "_bcid",
                              "Hit efficiency of" + layerName[isub] + i + " / side " + j + " in " + subDetName[isub] + " for first BCID",
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
@@ -874,7 +831,7 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
           m_effMapFirstBCID[detIndex][j]->GetXaxis()->SetTitle("Index in the direction of #eta");
           m_effMapFirstBCID[detIndex][j]->GetYaxis()->SetTitle("Index in the direction of #phi");
 
-          CHECK(bookEffHisto(m_effLumiBlock[detIndex][j], histGroupL[isub],
+          ATH_CHECK(bookEffHisto(m_effLumiBlock[detIndex][j], histGroupL[isub],
                              effLumiName[isub] + i + "_" + j,
                              "Efficiency vs LumiBlock" + layerName[isub] + i + " / side " + j + " in " +
                              subDetName[isub],
@@ -883,36 +840,36 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
           m_effLumiBlock[detIndex][j]->GetYaxis()->SetTitle("Efficiency");
         }
         if (m_superDetailed) {
-          CHECK(bookEffHisto(m_accMap[detIndex], histGroupE[isub],
+          ATH_CHECK(bookEffHisto(m_accMap[detIndex], histGroupE[isub],
                              "nDisabledChips_" + subDetNameShort[isub] + "_" + i,
                              "Map of the acceptance for" + layerName[isub] + i + " in " + subDetName[isub],
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
           TString resid("xlResidual_");
-          CHECK(bookEffHisto(m_xlResidualHisto[isub][i], histGroupE[isub], resid + i, resid + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualHisto[isub][i], histGroupE[isub], resid + i, resid + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualE0Histo[isub][i], histGroupE[isub], resid + "eta0_" + i, resid + "eta0_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualE0Histo[isub][i], histGroupE[isub], resid + "eta0_" + i, resid + "eta0_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualE1Histo[isub][i], histGroupE[isub], resid + "eta1_" + i, resid + "eta1_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualE1Histo[isub][i], histGroupE[isub], resid + "eta1_" + i, resid + "eta1_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_xlResidualUnasHisto[isub][i], histGroupE[isub], resid + "unas_" + i, resid + "unas_" + i,
+          ATH_CHECK(bookEffHisto(m_xlResidualUnasHisto[isub][i], histGroupE[isub], resid + "unas_" + i, resid + "unas_" + i,
                              100, -30.5, 30.5, 100, -60., 60.));
-          CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i], histGroupE[isub], TString("residlayer") + i,
+          ATH_CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i], histGroupE[isub], TString("residlayer") + i,
                              TString("residlayer") + i,
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
-          CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i + 1], histGroupE[isub], TString("residlayer") + i + ".5",
+          ATH_CHECK(bookEffHisto(m_layerResidualHistos[isub][2 * i + 1], histGroupE[isub], TString("residlayer") + i + ".5",
                              TString("residlayer") + i + ".5",
                              n_etabins[isub], f_etabin[isub] - .5, l_etabin[isub] + .5,
                              n_phibins[isub], f_phibin[isub] - .5, l_phibin[isub] + .5));
         }
       }
 
-      CHECK(bookEffHisto(m_Eff_summaryHisto[isub], histGroupShift[isub], sumeff[isub], sumefftitle[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHisto[isub], histGroupShift[isub], sumeff[isub], sumefftitle[isub],
                          2 * n_layers[isub], 0., n_layers[isub]));
-      CHECK(bookEffHisto(m_Eff_summaryHistoFirstBCID[isub], histGroupShift[isub], sumeffBCID[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHistoFirstBCID[isub], histGroupShift[isub], sumeffBCID[isub],
                          sumefftitleBCID[isub], 2 * n_layers[isub], 0., n_layers[isub]));
-      CHECK(bookEffHisto(m_Eff_summaryHisto_old[isub], histGroupShift[isub], sumeff_old[isub], sumefftitle[isub],
+      ATH_CHECK(bookEffHisto(m_Eff_summaryHisto_old[isub], histGroupShift[isub], sumeff_old[isub], sumefftitle[isub],
                          2 * n_layers[isub], 0., n_layers[isub]));
       unsigned int limit[3] = {
         N_DISKSx2, N_BARRELSx2, N_DISKSx2
@@ -926,137 +883,137 @@ SCTHitEffMonTool::bookHistogramsRecurrent() {
       m_Eff_summaryHisto[isub]->GetYaxis()->SetTitle("Efficiency");
       m_Eff_summaryHistoFirstBCID[isub]->GetYaxis()->SetTitle("Efficiency");
       m_Eff_summaryHisto_old[isub]->GetYaxis()->SetTitle("Efficiency");
-      CHECK(bookEffHisto(m_Eff_LumiBlockHisto[isub], histGroupE[isub], "effLumiBlock",
+      ATH_CHECK(bookEffHisto(m_Eff_LumiBlockHisto[isub], histGroupE[isub], "effLumiBlock",
                          "Efficiency vs Luminosity block in " + subDetName[isub], NBINS_LBs, 0.5, NBINS_LBs + 0.5));
       m_Eff_LumiBlockHisto[isub]->GetXaxis()->SetTitle("Luminosity block");
       m_Eff_LumiBlockHisto[isub]->GetYaxis()->SetTitle("Efficiency");
 
       if (m_detailed) {
-        CHECK(bookEffHisto(m_nTrkUsedHisto[isub], histGroupE[isub], "nTrk Used", "nTrk used", 50, -0.5, 49.5));
-        CHECK(bookEffHisto(m_probEnclosedHisto[isub], histGroupE[isub], "probEnclosed", "Probability Enclosed",
+        ATH_CHECK(bookEffHisto(m_nTrkUsedHisto[isub], histGroupE[isub], "nTrk Used", "nTrk used", 50, -0.5, 49.5));
+        ATH_CHECK(bookEffHisto(m_probEnclosedHisto[isub], histGroupE[isub], "probEnclosed", "Probability Enclosed",
                            2 * n_layers[isub], -.25, n_layers[isub] - .25));
-        CHECK(bookEffHisto(m_EventHisto[isub], histGroupE[isub], "EventNo", "Event No", 800, 0., 40000000.));
-        CHECK(bookEffHisto(m_Eff_EventHisto[isub], histGroupE[isub], "effEventNo", "Efficiency v Event no.", 800, 0.,
+        ATH_CHECK(bookEffHisto(m_EventHisto[isub], histGroupE[isub], "EventNo", "Event No", 800, 0., 40000000.));
+        ATH_CHECK(bookEffHisto(m_Eff_EventHisto[isub], histGroupE[isub], "effEventNo", "Efficiency v Event no.", 800, 0.,
                            40000000.));
-        CHECK(bookEffHisto(m_SelectionHisto[isub], histGroupE[isub], "selectionCuts", "Selection Cuts", 12, -0.5,
+        ATH_CHECK(bookEffHisto(m_SelectionHisto[isub], histGroupE[isub], "selectionCuts", "Selection Cuts", 12, -0.5,
                            11.5));
-        CHECK(bookEffHisto(m_Eff_SelectionHisto[isub], histGroupE[isub], "effSelectionCuts",
+        ATH_CHECK(bookEffHisto(m_Eff_SelectionHisto[isub], histGroupE[isub], "effSelectionCuts",
                            "Efficiency v Selection Cuts", 12, -0.5, 11.5));
         for (Int_t bin(0); bin != 12; ++bin) {
           m_SelectionHisto[isub]->GetXaxis()->SetBinLabel(bin + 1, selecName[bin]);
           m_Eff_SelectionHisto[isub]->GetXaxis()->SetBinLabel(bin + 1, selecName[bin]);
         }
-        CHECK(bookEffHisto(m_ResidualHisto[isub], histGroupE[isub], "residuals", "Residuals", 2000, -10, 10));
-        CHECK(bookEffHisto(m_ResidualUnasHisto[isub], histGroupE[isub], "residualsUnas", "Residuals Unassociated", 2000,
+        ATH_CHECK(bookEffHisto(m_ResidualHisto[isub], histGroupE[isub], "residuals", "Residuals", 2000, -10, 10));
+        ATH_CHECK(bookEffHisto(m_ResidualUnasHisto[isub], histGroupE[isub], "residualsUnas", "Residuals Unassociated", 2000,
                            -10, 10));
-        CHECK(bookEffHisto(m_ResidualMissHisto[isub], histGroupE[isub], "residualsMiss", "Residuals Miss", 2000, -10,
+        ATH_CHECK(bookEffHisto(m_ResidualMissHisto[isub], histGroupE[isub], "residualsMiss", "Residuals Miss", 2000, -10,
                            10));
-        CHECK(bookEffHisto(m_Unas_summaryHisto[isub], histGroupE[isub], "summaryunas",
+        ATH_CHECK(bookEffHisto(m_Unas_summaryHisto[isub], histGroupE[isub], "summaryunas",
                            "Summary Module Unassociated Per Event", 2 * 9, 0., 9.));
-        CHECK(bookEffHisto(m_chi2Histo[isub], histGroupE[isub], "chi2", "Chi2", 50, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_chi2Histo[isub], histGroupE[isub], "effChi2", "Efficiency v Chi2", 25, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_chi2HistoFinal[isub], histGroupE[isub], "effChi2Final", "Efficiency v Chi2, Final", 25,
+        ATH_CHECK(bookEffHisto(m_chi2Histo[isub], histGroupE[isub], "chi2", "Chi2", 50, 0., 10.));
+        ATH_CHECK(bookEffHisto(m_Eff_chi2Histo[isub], histGroupE[isub], "effChi2", "Efficiency v Chi2", 25, 0., 10.));
+        ATH_CHECK(bookEffHisto(m_Eff_chi2HistoFinal[isub], histGroupE[isub], "effChi2Final", "Efficiency v Chi2, Final", 25,
                            0., 10.));
-        CHECK(bookEffHisto(m_localMissHisto[isub], histGroupE[isub], "localMiss", "local position, hole", 40, -40., 40.,
+        ATH_CHECK(bookEffHisto(m_localMissHisto[isub], histGroupE[isub], "localMiss", "local position, hole", 40, -40., 40.,
                            40, -80., 80.));
-        CHECK(bookEffHisto(m_localUnasHisto[isub], histGroupE[isub], "localUnas", "local position, unassociated hit",
+        ATH_CHECK(bookEffHisto(m_localUnasHisto[isub], histGroupE[isub], "localUnas", "local position, unassociated hit",
                            40, -40., 40., 40, -80., 80.));
-        CHECK(bookEffHisto(m_Eff_etaHisto[isub], histGroupE[isub], "effEta", "Efficiency versus track eta", 30, -2.8,
+        ATH_CHECK(bookEffHisto(m_Eff_etaHisto[isub], histGroupE[isub], "effEta", "Efficiency versus track eta", 30, -2.8,
                            2.8));
-        CHECK(bookEffHisto(m_Eff_etaPhiCutHisto[isub], histGroupE[isub], "effEtaPhiCut",
+        ATH_CHECK(bookEffHisto(m_Eff_etaPhiCutHisto[isub], histGroupE[isub], "effEtaPhiCut",
                            "Efficiency versus track eta, phi cut", 30, -2.8, 2.8));
-        CHECK(bookEffHisto(m_Eff_otherFaceHisto[isub], histGroupE[isub], "effOtherFace",
+        ATH_CHECK(bookEffHisto(m_Eff_otherFaceHisto[isub], histGroupE[isub], "effOtherFace",
                            "Efficiency versus other face hit y/n", 3, -1.5, 1.5));
-        CHECK(bookEffHisto(m_Unas_otherFaceHisto[isub], histGroupE[isub], "effOtherFaceUnas",
+        ATH_CHECK(bookEffHisto(m_Unas_otherFaceHisto[isub], histGroupE[isub], "effOtherFaceUnas",
                            "other face hit Unassociated per event", 3, -1.5, 1.5));
-        CHECK(bookEffHisto(m_Eff_nSCTHisto[isub], histGroupE[isub], "effNSCT", "Efficiency versus Number of SCT hits",
+        ATH_CHECK(bookEffHisto(m_Eff_nSCTHisto[isub], histGroupE[isub], "effNSCT", "Efficiency versus Number of SCT hits",
                            30, -0.5, 29.5));
-        CHECK(bookEffHisto(m_Eff_nTRTHisto[isub], histGroupE[isub], "effNTRT", "Efficiency versus Number of TRT hits",
+        ATH_CHECK(bookEffHisto(m_Eff_nTRTHisto[isub], histGroupE[isub], "effNTRT", "Efficiency versus Number of TRT hits",
                            70, -1, 139.));
-        CHECK(bookEffHisto(m_Eff_nOtherHisto[isub], histGroupE[isub], "effNOther",
+        ATH_CHECK(bookEffHisto(m_Eff_nOtherHisto[isub], histGroupE[isub], "effNOther",
                            "Efficiency versus Number of other SCT  sides hit", 30, -0.5, 29.5));
-        CHECK(bookEffHisto(m_nOtherHisto[isub], histGroupE[isub], "nOther", "Number of other SCT barrel sides hit", 30,
+        ATH_CHECK(bookEffHisto(m_nOtherHisto[isub], histGroupE[isub], "nOther", "Number of other SCT barrel sides hit", 30,
                            -0.5, 29.5));
-        CHECK(bookEffHisto(m_timecorHisto[isub], histGroupE[isub], "timecor", "TRT phase", 120, -50.5, 69.5));
-        CHECK(bookEffHisto(m_Eff_timecorHisto[isub], histGroupE[isub], "effTimecor", "Efficiency vs TRT phase", 120,
+        ATH_CHECK(bookEffHisto(m_timecorHisto[isub], histGroupE[isub], "timecor", "TRT phase", 120, -50.5, 69.5));
+        ATH_CHECK(bookEffHisto(m_Eff_timecorHisto[isub], histGroupE[isub], "effTimecor", "Efficiency vs TRT phase", 120,
                            -50.5, 69.5));
-        CHECK(bookEffHisto(m_Eff_xlocHisto[isub], histGroupE[isub], "effXloc", "Module Efficiency by x local", 32, -32.,
+        ATH_CHECK(bookEffHisto(m_Eff_xlocHisto[isub], histGroupE[isub], "effXloc", "Module Efficiency by x local", 32, -32.,
                            32.));
-        CHECK(bookEffHisto(m_Eff_ylocHistos[isub], histGroupE[isub], "effYloc", "Module Efficiency by y local", 32,
+        ATH_CHECK(bookEffHisto(m_Eff_ylocHistos[isub], histGroupE[isub], "effYloc", "Module Efficiency by y local", 32,
                            -64., 64.));
-        CHECK(bookEffHisto(m_Unas_xlocHisto[isub], histGroupE[isub], "unasXloc",
+        ATH_CHECK(bookEffHisto(m_Unas_xlocHisto[isub], histGroupE[isub], "unasXloc",
                            "Unassociated hit per event by x local", 32, -32., 32.));
-        CHECK(bookEffHisto(m_Unas_ylocHisto[isub], histGroupE[isub], "unasYloc",
+        ATH_CHECK(bookEffHisto(m_Unas_ylocHisto[isub], histGroupE[isub], "unasYloc",
                            "Unassociated hit per event by y local", 32, -64., 64.));
-        CHECK(bookEffHisto(m_Eff_ptiHisto[isub], histGroupE[isub], "effPti", "Module Efficiency by q/p", 20, -0.002,
+        ATH_CHECK(bookEffHisto(m_Eff_ptiHisto[isub], histGroupE[isub], "effPti", "Module Efficiency by q/p", 20, -0.002,
                            0.002));
-        CHECK(bookEffHisto(m_Eff_ptHisto[isub], histGroupE[isub], "effPt", "Module Efficiency by log10 |p|", 40, 2.,
+        ATH_CHECK(bookEffHisto(m_Eff_ptHisto[isub], histGroupE[isub], "effPt", "Module Efficiency by log10 |p|", 40, 2.,
                            6.));
-        CHECK(bookEffHisto(m_Unas_ptiHisto[isub], histGroupE[isub], "unasPti", "Unassociated Hit per event by q/p", 20,
+        ATH_CHECK(bookEffHisto(m_Unas_ptiHisto[isub], histGroupE[isub], "unasPti", "Unassociated Hit per event by q/p", 20,
                            -0.002, 0.002));
-        CHECK(bookEffHisto(m_Unas_phiHisto[isub], histGroupE[isub], "unasPhi",
+        ATH_CHECK(bookEffHisto(m_Unas_phiHisto[isub], histGroupE[isub], "unasPhi",
                            "Unassociated hit per event by phi local", 30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_phiHisto[isub], histGroupE[isub], "effPhi", "Module Efficiency by Phi", 30, -90.,
+        ATH_CHECK(bookEffHisto(m_Eff_phiHisto[isub], histGroupE[isub], "effPhi", "Module Efficiency by Phi", 30, -90.,
                            90.));
-        CHECK(bookEffHisto(m_Eff_phiEtaCutHisto[isub], histGroupE[isub], "effPhiEtaCut",
+        ATH_CHECK(bookEffHisto(m_Eff_phiEtaCutHisto[isub], histGroupE[isub], "effPhiEtaCut",
                            "Module Efficiency by Phi, Eta cut", 30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_phiHistoFinal[isub], histGroupE[isub], "effPhiFinal", "Module Efficiency by Phi Final",
+        ATH_CHECK(bookEffHisto(m_Eff_phiHistoFinal[isub], histGroupE[isub], "effPhiFinal", "Module Efficiency by Phi Final",
                            30, -90., 90.));
-        CHECK(bookEffHisto(m_Eff_d0Histo[isub], histGroupE[isub], "effD0", "Module Efficiency by D0", 10, -500., 500.));
-        CHECK(bookEffHisto(m_Eff_d0PrecHisto[isub], histGroupE[isub], "effD0Prec", "Module Efficiency by D0 prec", 25,
+        ATH_CHECK(bookEffHisto(m_Eff_d0Histo[isub], histGroupE[isub], "effD0", "Module Efficiency by D0", 10, -500., 500.));
+        ATH_CHECK(bookEffHisto(m_Eff_d0PrecHisto[isub], histGroupE[isub], "effD0Prec", "Module Efficiency by D0 prec", 25,
                            -25., 25.));
-        CHECK(bookEffHisto(m_Eff_z0Histo[isub], histGroupE[isub], "effZ0", "Module Efficiency by Z0", 10, -1000.,
+        ATH_CHECK(bookEffHisto(m_Eff_z0Histo[isub], histGroupE[isub], "effZ0", "Module Efficiency by Z0", 10, -1000.,
                            1000.));
-        CHECK(bookEffHisto(m_etaTkUsedHisto[isub], histGroupE[isub], "EtaTkUsed", "Used Track Eta", 100, -2.8, 2.8));
-        CHECK(bookEffHisto(m_phiTkUsedHisto[isub], histGroupE[isub], "PhiTkUsed", "Used Track Phi", 50, -3.142, 3.142));
-        CHECK(bookEffHisto(m_ptiTkUsedHisto[isub], histGroupE[isub], "PtiTkUsed", "Used Track q/p (MeV)", 50, -0.002,
+        ATH_CHECK(bookEffHisto(m_etaTkUsedHisto[isub], histGroupE[isub], "EtaTkUsed", "Used Track Eta", 100, -2.8, 2.8));
+        ATH_CHECK(bookEffHisto(m_phiTkUsedHisto[isub], histGroupE[isub], "PhiTkUsed", "Used Track Phi", 50, -3.142, 3.142));
+        ATH_CHECK(bookEffHisto(m_ptiTkUsedHisto[isub], histGroupE[isub], "PtiTkUsed", "Used Track q/p (MeV)", 50, -0.002,
                            0.002));
-        CHECK(bookEffHisto(m_ptTkUsedHisto[isub], histGroupE[isub], "PtTkUsed", "Used Track log10|p| (MeV)", 40, 2.0,
+        ATH_CHECK(bookEffHisto(m_ptTkUsedHisto[isub], histGroupE[isub], "PtTkUsed", "Used Track log10|p| (MeV)", 40, 2.0,
                            6.));
-        CHECK(bookEffHisto(m_d0TkUsedHisto[isub], histGroupE[isub], "D0TkUsed", "Used Track D0", 50, -500., 500.));
-        CHECK(bookEffHisto(m_d0PrecTkUsedHisto[isub], histGroupE[isub], "D0PrecTkUsed", "Used Track D0 prec", 100, -25.,
+        ATH_CHECK(bookEffHisto(m_d0TkUsedHisto[isub], histGroupE[isub], "D0TkUsed", "Used Track D0", 50, -500., 500.));
+        ATH_CHECK(bookEffHisto(m_d0PrecTkUsedHisto[isub], histGroupE[isub], "D0PrecTkUsed", "Used Track D0 prec", 100, -25.,
                            25.));
-        CHECK(bookEffHisto(m_z0TkUsedHisto[isub], histGroupE[isub], "Z0TkUsed", "Used Track Z0", 50, -1000., 1000.));
-        CHECK(bookEffHisto(m_localHitXHisto[isub], histGroupE[isub], "localHitX", "local x position, hit", 80, -40.,
+        ATH_CHECK(bookEffHisto(m_z0TkUsedHisto[isub], histGroupE[isub], "Z0TkUsed", "Used Track Z0", 50, -1000., 1000.));
+        ATH_CHECK(bookEffHisto(m_localHitXHisto[isub], histGroupE[isub], "localHitX", "local x position, hit", 80, -40.,
                            40.));
-        CHECK(bookEffHisto(m_localHitYHistos[isub], histGroupE[isub], "localHitY", "local y position, hit", 320, -80.,
+        ATH_CHECK(bookEffHisto(m_localHitYHistos[isub], histGroupE[isub], "localHitY", "local y position, hit", 320, -80.,
                            80.));
-        CHECK(bookEffHisto(m_phiLocalHisto[isub], histGroupE[isub], "phiLocal", "local phi of tracks", 60, -90., 90.));
-        CHECK(bookEffHisto(m_phiLocalCutHisto[isub], histGroupE[isub], "phiLocalCut", "local phi of low D0 tracks", 60,
+        ATH_CHECK(bookEffHisto(m_phiLocalHisto[isub], histGroupE[isub], "phiLocal", "local phi of tracks", 60, -90., 90.));
+        ATH_CHECK(bookEffHisto(m_phiLocalCutHisto[isub], histGroupE[isub], "phiLocalCut", "local phi of low D0 tracks", 60,
                            -90., 90.));
-        CHECK(bookEffHisto(m_Eff_nTrk[isub], histGroupE[isub], "effTrk", "Efficiency versus number of tracks", 200, 0,
+        ATH_CHECK(bookEffHisto(m_Eff_nTrk[isub], histGroupE[isub], "effTrk", "Efficiency versus number of tracks", 200, 0,
                            400.));
-        CHECK(bookEffHisto(m_Eff_nGoodTrk[isub], histGroupE[isub], "effGoodTrk",
+        ATH_CHECK(bookEffHisto(m_Eff_nGoodTrk[isub], histGroupE[isub], "effGoodTrk",
                            "Efficiency versus number of good tracks", 200, 0, 400.));
       }
 
       if (m_superDetailed) {
-        CHECK(bookEffHisto(m_inEffStrip[isub], histGroupE[isub],
+        ATH_CHECK(bookEffHisto(m_inEffStrip[isub], histGroupE[isub],
                            "StripInEfficiency" + subDetNameShort[isub], "Strips inefficiencies in " + subDetName[isub],
                            n_mod[isub] * 2, f_mod[isub] * 2 - 0.5, (f_mod[isub] + n_mod[isub]) * 2 - 0.5, N_STRIPS,
                            FIRST_STRIP - 0.5, LAST_STRIP + 0.5));
-        CHECK(bookEffHisto(m_inEffChip[isub], histGroupE[isub],
+        ATH_CHECK(bookEffHisto(m_inEffChip[isub], histGroupE[isub],
                            "ChipInEfficiency" + subDetNameShort[isub], "Chips ineficiencies in " + subDetName[isub],
                            n_mod[isub] * 2, f_mod[isub] * 2 - 0.5, (f_mod[isub] + n_mod[isub]) * 2 - 0.5, N_CHIPS,
                            FIRST_CHIP - 0.5, LAST_CHIP + 0.5));
-        CHECK(bookEffHisto(m_badModPerSide[isub], histGroupE[isub], "badModPerSide", "Number of bad module per side",
+        ATH_CHECK(bookEffHisto(m_badModPerSide[isub], histGroupE[isub], "badModPerSide", "Number of bad module per side",
                            2 * n_layers[isub], 0., n_layers[isub]));
-        CHECK(bookEffHisto(m_holesPerTrackHisto[isub], histGroupE[isub], "holesPerTrack", "Number of holes per track",
+        ATH_CHECK(bookEffHisto(m_holesPerTrackHisto[isub], histGroupE[isub], "holesPerTrack", "Number of holes per track",
                            2 * n_layers[isub], 0, n_layers[isub]));
-        CHECK(bookEffHisto(m_holesDistPerTrackHisto[isub], histGroupE[isub], "holesDistPerTrack",
+        ATH_CHECK(bookEffHisto(m_holesDistPerTrackHisto[isub], histGroupE[isub], "holesDistPerTrack",
                            "Number of holes per track", 2 * n_layers[isub], 0, n_layers[isub]));
-        CHECK(bookEffHisto(m_chi2vPhiHisto[isub], histGroupE[isub], "Chi2vPhi", "Chi2 v Phi", 30, -90., 90.));
-        CHECK(bookEffHisto(m_localHitHisto[isub], histGroupE[isub], "localHit", "local position, hit", 40, -40., 40.,
+        ATH_CHECK(bookEffHisto(m_chi2vPhiHisto[isub], histGroupE[isub], "Chi2vPhi", "Chi2 v Phi", 30, -90., 90.));
+        ATH_CHECK(bookEffHisto(m_localHitHisto[isub], histGroupE[isub], "localHit", "local position, hit", 40, -40., 40.,
                            40, -80., 80.));
-        CHECK(bookEffHisto(m_localHitGHisto[isub], histGroupE[isub], "localHitG", "local position Guard, hit", 40, -40.,
+        ATH_CHECK(bookEffHisto(m_localHitGHisto[isub], histGroupE[isub], "localHitG", "local position Guard, hit", 40, -40.,
                            40., 40, -80., 80.));
-        CHECK(bookEffHisto(m_TwoSidesResiduals[isub], histGroupE[isub], "TwoSidesResiduals", "Two Sides Residuals", 120,
+        ATH_CHECK(bookEffHisto(m_TwoSidesResiduals[isub], histGroupE[isub], "TwoSidesResiduals", "Two Sides Residuals", 120,
                            -3., 3., 120, -3., 3.));
-        CHECK(bookEffHisto(m_TwoSidesResidualsIneff[isub], histGroupE[isub], "TwoSidesResidualsIneff",
+        ATH_CHECK(bookEffHisto(m_TwoSidesResidualsIneff[isub], histGroupE[isub], "TwoSidesResidualsIneff",
                            "Two Sides Residuals (Inefficient/Unas)", 120, -30., 30., 120, -30., 30.));
-        CHECK(bookEffHisto(m_chi2ResidualHisto[isub], histGroupE[isub], "chi2Residual", "Chi2 v Residual", 200, -10.,
+        ATH_CHECK(bookEffHisto(m_chi2ResidualHisto[isub], histGroupE[isub], "chi2Residual", "Chi2 v Residual", 200, -10.,
                            10., 120, 0., 10.));
-        CHECK(bookEffHisto(m_Eff_summaryIncBadMod[isub], histGroupE[isub], "summaryIncBadMod" + subDetNameShort[isub],
+        ATH_CHECK(bookEffHisto(m_Eff_summaryIncBadMod[isub], histGroupE[isub], "summaryIncBadMod" + subDetNameShort[isub],
                            "Efficiency vs. layer including bad sensors",
                            2 * n_layers[isub], 0., n_layers[isub]));
       }
@@ -1091,7 +1048,6 @@ SCTHitEffMonTool::fillHistograms() {
   }
   unsigned BCID = pEvent->bcid();
   int BCIDpos = m_bunchCrossingTool->distanceFromFront(BCID);
-  //bool InTrain = m_bunchCrossingTool->isInTrain(BCID);
 
   if (m_chronotime) {
     m_chrono->chronoStart("SCTHitEff");
@@ -1138,11 +1094,9 @@ SCTHitEffMonTool::fillHistograms() {
   Int_t nTrk(0), nTrkPars(0), nTrkGood(0);
 
   // Loop over track collection to count tracks
-  const TrackCollection::const_iterator endOfTracks(tracks->end());
-  for (TrackCollection::const_iterator itr(tracks->begin()); itr != endOfTracks; ++itr) {
+  for (const Trk::Track* pthisTrack: *tracks) {
     nTrk++;
-    const Trk::Track* pthisTrack(*itr);
-    if (not pthisTrack) {
+    if (pthisTrack==nullptr) {
       continue;
     }
     if (failCut(pthisTrack and pthisTrack->trackParameters() and pthisTrack->trackParameters()->size(),
@@ -1177,11 +1131,9 @@ SCTHitEffMonTool::fillHistograms() {
   }
 
   // Loop over original track collection
-  //  const TrackCollection::const_iterator endOfTracks(tracks->end());
-  for (TrackCollection::const_iterator itr(tracks->begin()); itr != endOfTracks; ++itr) {
+  for (const Trk::Track* pthisTrack: *tracks) {
     ATH_MSG_VERBOSE("Starting new track");
-    const Trk::Track* pthisTrack(*itr);
-    if (not pthisTrack) {
+    if (pthisTrack==nullptr) {
       continue;
     }
     if (failCut(pthisTrack and pthisTrack->trackParameters() and pthisTrack->trackParameters()->size(),
@@ -1225,16 +1177,12 @@ SCTHitEffMonTool::fillHistograms() {
       continue;
     }
 
-    const Trk::Track* trackWithHoles = m_holeSearchTool->getTrackWithHoles(*pthisTrack);
+    std::unique_ptr<const Trk::Track> trackWithHoles(m_holeSearchTool->getTrackWithHoles(*pthisTrack));
     if (not trackWithHoles) {
       ATH_MSG_WARNING("trackWithHoles pointer is invalid");
       continue;
     }
     ATH_MSG_VERBOSE("Found " << trackWithHoles->trackStateOnSurfaces()->size() << " states on track");
-    // loop over all hits on track
-    DataVector<const Trk::TrackStateOnSurface>::const_iterator TSOSItr =
-      trackWithHoles->trackStateOnSurfaces()->begin();
-    DataVector<const Trk::TrackStateOnSurface>::const_iterator TSOSItrE = trackWithHoles->trackStateOnSurfaces()->end();
 
     Int_t NHits[3] = {
       0, 0, 0
@@ -1250,13 +1198,14 @@ SCTHitEffMonTool::fillHistograms() {
     Float_t max_layerSide(-1);
     Identifier surfaceID;
 
-    for (; TSOSItr != TSOSItrE; ++TSOSItr) {
-      surfaceID = surfaceOnTrackIdentifier(*TSOSItr);
+    // loop over all hits on track
+    for (const Trk::TrackStateOnSurface* tsos: *(trackWithHoles->trackStateOnSurfaces())) {
+      surfaceID = surfaceOnTrackIdentifier(tsos);
 
       if (!surfaceID.is_valid()) {
         continue;
       }
-      if ((*TSOSItr)->type(Trk::TrackStateOnSurface::Measurement) or(*TSOSItr)->type(Trk::TrackStateOnSurface::Outlier))
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement) or tsos->type(Trk::TrackStateOnSurface::Outlier))
       {
         if (m_pixelId->is_pixel(surfaceID)) {
           pixelNHits++;
@@ -1266,15 +1215,15 @@ SCTHitEffMonTool::fillHistograms() {
         }
         if (m_sctId->is_sct(surfaceID)) {
           NHits[bec2Index(m_sctId->barrel_ec(surfaceID))]++;
-          mapOfTrackHitResiduals[surfaceID] = getResidual(surfaceID, (*TSOSItr)->trackParameters(), &*p_sctclcontainer);
+          mapOfTrackHitResiduals[surfaceID] = getResidual(surfaceID, tsos->trackParameters(), &*p_sctclcontainer);
         }
       }
 
-      if ((*TSOSItr)->type(Trk::TrackStateOnSurface::Measurement)) { // Determine zmin and zmax taking multiple
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement)) { // Determine zmin and zmax taking multiple
                                                                      // hits/side into account
         if (m_isCosmic) { // If this is cosmics use z, bad method but ok...
-          if ((*TSOSItr)->trackParameters()) {
-            zpos = (*TSOSItr)->trackParameters()->position().z();
+          if (tsos->trackParameters()) {
+            zpos = tsos->trackParameters()->position().z();
             zmax = std::max(zpos, zmax);
             zmin = std::min(zpos, zmin);
           }else {
@@ -1283,7 +1232,7 @@ SCTHitEffMonTool::fillHistograms() {
         }else { // else use layer/side number : better but does not work for cosmics
           if (m_sctId->is_sct(surfaceID)) {
             layerSide = (m_sctId->barrel_ec(surfaceID) != 0) * N_BARRELS +
-                        float(m_sctId->layer_disk(surfaceID)) + (float(m_sctId->side(surfaceID)) == 0) * 0.5;
+              static_cast<float>(m_sctId->layer_disk(surfaceID)) + (static_cast<float>(m_sctId->side(surfaceID)) == 0) * 0.5;
             min_layerSide = std::min(min_layerSide, layerSide);
             max_layerSide = std::max(max_layerSide, layerSide);
           }else if (m_pixelId->is_pixel(surfaceID)) {
@@ -1305,9 +1254,9 @@ SCTHitEffMonTool::fillHistograms() {
       layersCrossedByTrack[i].resize(n_layers[i] * 2, false);
     }
 
-    for (TSOSItr = trackWithHoles->trackStateOnSurfaces()->begin(); TSOSItr != TSOSItrE; ++TSOSItr) {
+    for (const Trk::TrackStateOnSurface* tsos: *(trackWithHoles->trackStateOnSurfaces())) {
       ATH_MSG_VERBOSE("Starting new hit");
-      surfaceID = surfaceOnTrackIdentifier(*TSOSItr);
+      surfaceID = surfaceOnTrackIdentifier(tsos);
 
       if (failCut(m_sctId->is_sct(surfaceID), "hit cut: is in SCT")) {
         continue;
@@ -1330,18 +1279,18 @@ SCTHitEffMonTool::fillHistograms() {
       Int_t eff(0), unas(0);
       IdentifierHash sideHash(m_sctId->wafer_hash(surfaceID));
       Identifier module_id(m_sctId->module_id(surfaceID));
-      Float_t layerPlusHalfSide(float(layer) + float(side) * 0.5);
-      Float_t dedicated_layerPlusHalfSide(float(layer) + float((side + 1) % 2) * 0.5);
-      const Trk::TrackParameters* trkParamOnSurface((*TSOSItr)->trackParameters());
+      Float_t layerPlusHalfSide(static_cast<float>(layer) + static_cast<float>(side) * 0.5);
+      Float_t dedicated_layerPlusHalfSide(static_cast<float>(layer) + static_cast<float>((side + 1) % 2) * 0.5);
+      const Trk::TrackParameters* trkParamOnSurface(tsos->trackParameters());
       Double_t trackHitResidual(getResidual(surfaceID, trkParamOnSurface, &*p_sctclcontainer));
 
 
       Float_t distCut(m_effdistcut);
 
-      if ((*TSOSItr)->type(Trk::TrackStateOnSurface::Measurement) or(*TSOSItr)->type(Trk::TrackStateOnSurface::Outlier))
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement) or tsos->type(Trk::TrackStateOnSurface::Outlier))
       {
         eff = 1;
-      } else if ((*TSOSItr)->type(Trk::TrackStateOnSurface::Hole) and fabs(trackHitResidual) < distCut) {
+      } else if (tsos->type(Trk::TrackStateOnSurface::Hole) and fabs(trackHitResidual) < distCut) {
         eff = 1;
         unas = 1;
       }
@@ -1360,10 +1309,9 @@ SCTHitEffMonTool::fillHistograms() {
       m_sctId->get_other_side(sideHash, otherSideHash);
       m_sctId->get_id(otherSideHash, otherSideSurfaceID, &context);
       otherFaceFound = mapOfTrackHitResiduals.find(otherSideSurfaceID) != mapOfTrackHitResiduals.end();
-      // (std::find(TrackSurfaceID.begin(), TrackSurfaceID.end(), otherSideSurfaceID) != TrackSurfaceID.end());
 
       Int_t nOther(sctNHits);
-      if ((*TSOSItr)->type(Trk::TrackStateOnSurface::Measurement) or(*TSOSItr)->type(Trk::TrackStateOnSurface::Outlier))
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement) or tsos->type(Trk::TrackStateOnSurface::Outlier))
       {
         --nOther;
       }
@@ -1475,8 +1423,8 @@ SCTHitEffMonTool::fillHistograms() {
 
       Bool_t enclosingHits(true);
       if (m_isCosmic) {
-        if ((*TSOSItr)->trackParameters()) {
-          zpos = (*TSOSItr)->trackParameters()->position().z();
+        if (tsos->trackParameters()) {
+          zpos = tsos->trackParameters()->position().z();
           enclosingHits = (zpos > zmin)and(zpos < zmax);
         }else {
           ATH_MSG_WARNING("No track parameters found. Cannot determine whether it is an enclosed hit.");
@@ -1485,12 +1433,12 @@ SCTHitEffMonTool::fillHistograms() {
       }else {
         layerSide =
           (m_sctId->barrel_ec(surfaceID) !=
-           0) * N_BARRELS + float(m_sctId->layer_disk(surfaceID)) + (float(m_sctId->side(surfaceID)) == 0) * 0.5;
+           0) * N_BARRELS + static_cast<float>(m_sctId->layer_disk(surfaceID)) + (static_cast<float>(m_sctId->side(surfaceID)) == 0) * 0.5;
         enclosingHits = layerSide > min_layerSide and layerSide < max_layerSide;
       }
 
       if (m_detailed) {
-        m_probEnclosedHisto[isub]->Fill(layerPlusHalfSide, Int_t(enclosingHits));
+        m_probEnclosedHisto[isub]->Fill(layerPlusHalfSide, static_cast<Int_t>(enclosingHits));
       }
 
       if (m_requireEnclosingHits and not (layerPlusHalfSide == .5)and not (isub == 1 and layerPlusHalfSide ==
@@ -1701,8 +1649,8 @@ SCTHitEffMonTool::fillHistograms() {
       }
       if (m_superDetailed) {
         chipPos = (side == 1) ? 11 - chipPos : chipPos;
-        m_inEffChip[isub]->Fill(sideHash, chipPos, int(eff == 0));
-        m_inEffStrip[isub]->Fill(sideHash, xl / 79.95e-3 + 768. / 2., int(eff == 0));
+        m_inEffChip[isub]->Fill(sideHash, chipPos, static_cast<int>(eff == 0));
+        m_inEffStrip[isub]->Fill(sideHash, xl / 79.95e-3 + 768. / 2., static_cast<int>(eff == 0));
         // Find the opposite side of this module,
         if (side == 0) {
           Double_t trackHitResidual2(999);
@@ -1715,10 +1663,10 @@ SCTHitEffMonTool::fillHistograms() {
             m_TwoSidesResidualsIneff[isub]->Fill(trackHitResidual, trackHitResidual2);
           }
         }
-        const int layerSideIndex = int(layerPlusHalfSide * 2);
+        const int layerSideIndex = static_cast<int>(layerPlusHalfSide * 2);
         layersCrossedByTrack[isub][layerSideIndex] = true;
-        nHolesDistOnLayer[isub][layerSideIndex] += int(eff == 0);
-        nHolesOnLayer[isub][layerSideIndex] += int((*TSOSItr)->type(Trk::TrackStateOnSurface::Hole));
+        nHolesDistOnLayer[isub][layerSideIndex] += static_cast<int>(eff == 0);
+        nHolesOnLayer[isub][layerSideIndex] += static_cast<int>(tsos->type(Trk::TrackStateOnSurface::Hole));
         if (fabs(trackHitResidual) < 65) {
           m_layerResidualHistos[isub][layerSideIndex]->Fill(m_sctId->eta_module(surfaceID),
                                                             m_sctId->phi_module(surfaceID), trackHitResidual);
@@ -1773,16 +1721,14 @@ SCTHitEffMonTool::fillHistograms() {
       for (Int_t isub(0); isub != N_REGIONS; ++isub) {
         for (Int_t i(0); i != n_layers[isub] * 2; ++i) {
           if (layersCrossedByTrack[isub][i]) {
-            m_holesPerTrackHisto[isub]->Fill(float(i) / 2, nHolesOnLayer[isub][i]);
-            m_holesDistPerTrackHisto[isub]->Fill(float(i) / 2, nHolesOnLayer[isub][i]);
+            m_holesPerTrackHisto[isub]->Fill(static_cast<float>(i) / 2, nHolesOnLayer[isub][i]);
+            m_holesDistPerTrackHisto[isub]->Fill(static_cast<float>(i) / 2, nHolesOnLayer[isub][i]);
           }
         }
       }
     }
-    delete trackWithHoles;
-    trackWithHoles = 0;
   }
-  ATH_MSG_VERBOSE("finished loop over tracks = " << (*tracks).size());
+  ATH_MSG_VERBOSE("finished loop over tracks = " << tracks->size());
   if (m_detailed) {
     m_nTrkHisto->Fill(nTrk);
     m_nTrkParsHisto->Fill(nTrkPars);
@@ -1852,7 +1798,7 @@ SCTHitEffMonTool::procHistograms() {
           unsigned int status((*badChip).second);
           for (Int_t i(0); i < 2 * N_CHIPS; ++i) {
             if ((status & (1 << i)) != 0) {
-              accSide[int(i >= N_CHIPS)] -= 1. / N_CHIPS;
+              accSide[static_cast<int>(i >= N_CHIPS)] -= 1. / N_CHIPS;
             }
           }
           eff = (accSide[0] + accSide[1]) / 2;
@@ -1910,7 +1856,7 @@ SCTHitEffMonTool::procHistograms() {
           ATH_MSG_WARNING("Barrel-or-endcap index is invalid");
           return StatusCode::FAILURE;
         }
-        CHECK(bookEffHisto(m_accPhysMap[histnumber], histGroupE[isub],
+        ATH_CHECK(bookEffHisto(m_accPhysMap[histnumber], histGroupE[isub],
                            "nDisabledChipsPhys_" + subDetNameShort[isub] + "_" + i, "",
                            etabins[isub][i].size() - 1, &etabins[isub][i][0], phibins[isub][i].size() - 1,
                            &phibins[isub][i][0]));
@@ -1932,8 +1878,8 @@ SCTHitEffMonTool::procHistograms() {
         }
       }
     }
-    for (std::map< Identifier, Float_t >::const_iterator bMod(mapOfInEff.begin()); bMod != mapOfInEff.end(); ++bMod) {
-      Identifier surfaceID(bMod->first);
+    for (const std::pair<Identifier, Float_t> bMod: mapOfInEff) {
+      Identifier surfaceID(bMod.first);
       Int_t histnumber(becIdxLayer2Index(bec2Index(m_sctId->barrel_ec(surfaceID)), m_sctId->layer_disk(surfaceID)));
       if (histnumber < 0) {
         ATH_MSG_WARNING("Barrel-or-endcap index is invalid");
@@ -1942,7 +1888,7 @@ SCTHitEffMonTool::procHistograms() {
       IdentifierHash waferHash = m_sctId->wafer_hash(surfaceID);
       const InDetDD::SiDetectorElement* element = elements->getDetectorElement(waferHash);
       const Amg::Vector3D position = element->center();
-      m_accPhysMap[histnumber]->Fill(amgPseudoRapidity(position), position.phi(), (1. - bMod->second) * N_CHIPS * 2);
+      m_accPhysMap[histnumber]->Fill(amgPseudoRapidity(position), position.phi(), (1. - bMod.second) * N_CHIPS * 2);
     }
   }
 
@@ -1983,7 +1929,7 @@ SCTHitEffMonTool::previousChip(Double_t xl, Int_t side, bool swap) {
   Float_t stripWidth(79.95e-3);
   Float_t nChips(6.);
   Float_t xLeftEdge(xl + nStrips / 2. * stripWidth); // xl defined wrt center of module, convert to edge of module
-  Int_t chipPos(int(xLeftEdge / (stripWidth * nStrips) * nChips));
+  Int_t chipPos(static_cast<int>(xLeftEdge / (stripWidth * nStrips) * nChips));
 
   if (side == 0) {
     chipPos = swap ? 5 - chipPos : chipPos;
@@ -2027,7 +1973,7 @@ template <class T> StatusCode
 SCTHitEffMonTool::bookEffHisto(T*& histo, MonGroup& MG, TString name, TString title, Int_t nbin, Double_t x1,
                                Double_t x2) {
   histo = new T(name, title, nbin, x1, x2);
-  CHECK(MG.regHist(histo));
+  ATH_CHECK(MG.regHist(histo));
   ATH_MSG_VERBOSE("Registered " << name << " at " << histo);
   return StatusCode::SUCCESS;
 }
@@ -2037,7 +1983,7 @@ SCTHitEffMonTool::bookEffHisto(T*& histo, MonGroup& MG, TString name, TString ti
                                Int_t nbinx, Double_t x1, Double_t x2,
                                Int_t nbiny, Double_t y1, Double_t y2) {
   histo = new T(name, title, nbinx, x1, x2, nbiny, y1, y2);
-  CHECK(MG.regHist(histo));
+  ATH_CHECK(MG.regHist(histo));
   ATH_MSG_VERBOSE("Registered " << name << " at " << histo);
   return StatusCode::SUCCESS;
 }
@@ -2046,7 +1992,7 @@ template <class T> StatusCode
 SCTHitEffMonTool::bookEffHisto(T*& histo, MonGroup& MG, TString name, TString title,
                                Int_t nbinx, Double_t* xbins, Int_t nbiny, Double_t* ybins) {
   histo = new T(name, title, nbinx, xbins, nbiny, ybins);
-  CHECK(MG.regHist(histo));
+  ATH_CHECK(MG.regHist(histo));
   ATH_MSG_VERBOSE("Registered " << name << " at " << histo);
   return StatusCode::SUCCESS;
 }
@@ -2064,28 +2010,23 @@ SCTHitEffMonTool::getResidual(const Identifier& surfaceID, const Trk::TrackParam
   IdentifierHash idh(m_sctId->wafer_hash(surfaceID));
   InDet::SCT_ClusterContainer::const_iterator containerIterator(p_sctclcontainer->indexFind(idh));
   InDet::SCT_ClusterContainer::const_iterator containerEnd(p_sctclcontainer->end());
-  for (; containerIterator != containerEnd; ++containerIterator) {
-    for (InDet::SCT_ClusterCollection::const_iterator rioIterator((*containerIterator)->begin());
-         rioIterator != (*containerIterator)->end(); ++rioIterator) {
-      if (not (*rioIterator) or not (*rioIterator)->detectorElement()) {
+  if (containerIterator != containerEnd) {
+    for (const InDet::SCT_Cluster* cluster: **containerIterator) {
+      if ((cluster==nullptr) or (cluster->detectorElement()==nullptr)) {
         ATH_MSG_WARNING("nullptr to RIO or detElement");
         continue;
       }
-      if (m_sctId->wafer_id(surfaceID) == m_sctId->wafer_id(((*rioIterator)->detectorElement())->identify())) {
-        const Trk::PrepRawData* rioo(dynamic_cast<const Trk::PrepRawData *>(*rioIterator));
-        const Trk::RIO_OnTrack* rio(m_rotcreator->correct(*rioo, *trkParam));
+      if (m_sctId->wafer_id(surfaceID) == m_sctId->wafer_id(cluster->detectorElement()->identify())) {
+        const Trk::PrepRawData* rioo(dynamic_cast<const Trk::PrepRawData *>(cluster));
+        std::unique_ptr<const Trk::RIO_OnTrack> rio(m_rotcreator->correct(*rioo, *trkParam));
         if (!m_residualPullCalculator.empty()) {
-          const Trk::ResidualPull* residualPull(m_residualPullCalculator->residualPull(rio, trkParam,
-                                                                                       Trk::ResidualPull::Unbiased));
-          if (residualPull == 0) {
-            continue;
-          }
+          std::unique_ptr<const Trk::ResidualPull> residualPull(m_residualPullCalculator->residualPull(rio.get(), trkParam,
+                                                                                                       Trk::ResidualPull::Unbiased));
+          if (not residualPull) continue;
           if (fabs(residualPull->residual()[Trk::loc1]) < fabs(trackHitResidual)) {
             trackHitResidual = residualPull->residual()[Trk::loc1];
           }
-          delete residualPull;
         }
-        delete rio;
       }
     }
   }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
index 0fdd7ad6cc72..9e73a88557d4 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
@@ -13,7 +13,6 @@
 
 #include "SCT_Monitoring/SCTHitsNoiseMonTool.h"
 
-#include "cArrayUtilities.h"
 #include "SCT_NameFormatter.h"
 
 #include "AthContainers/DataVector.h"
@@ -135,17 +134,17 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
                                          const IInterface* parent) :
   SCTMotherTrigMonTool(type, name, parent),
   m_nSP(nullptr),
-  m_nSP_buf(nullptr),
+  m_nSP_buf{},
   m_nSP_pos(0),
   m_nHits(nullptr),
-  m_nHits_buf(nullptr),
+  m_nHits_buf{},
   m_nHits_pos(0),
   m_nmaxHits(nullptr),
-  m_nmaxHits_buf(nullptr),
-  m_nmaxModule_buf(nullptr),
+  m_nmaxHits_buf{},
+  m_nmaxModule_buf{},
   m_nminHits(nullptr),
-  m_nminHits_buf(nullptr),
-  m_nminModule_buf(nullptr),
+  m_nminHits_buf{},
+  m_nminModule_buf{},
   m_numBarrelHitsPerLumiBlock(nullptr),
   m_numHitsPerLumiBlockECp(nullptr),
   m_numHitsPerLumiBlockECm(nullptr),
@@ -153,7 +152,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_numSPPerLumiBlockECp(nullptr),
   m_numSPPerLumiBlockECm(nullptr),
   m_rioMap(nullptr),
-  //
   m_BARNO(nullptr),
   m_BARNOTrigger(nullptr),
   m_ECmNO(nullptr),
@@ -162,7 +160,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_ECpNOTrigger(nullptr),
   m_SCTNO(nullptr),
   m_SCTNOTrigger(nullptr),
-  //
   m_NallHitsBAR_vsLB(nullptr),
   m_NSPHitsBAR_vsLB(nullptr),
   m_NallHitsECm_vsLB(nullptr),
@@ -176,7 +173,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_NoisyModules100_vsLB(nullptr),
   m_NoisyModules1000_vsLB(nullptr),
   m_NoisyModules10000_vsLB(nullptr),
-  //
   m_NallHitsTriggerBAR_vsLB(nullptr),
   m_NSPHitsTriggerBAR_vsLB(nullptr),
   m_NallHitsTriggerECm_vsLB(nullptr),
@@ -190,7 +186,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_NoisyModulesTrigger100_vsLB(nullptr),
   m_NoisyModulesTrigger1000_vsLB(nullptr),
   m_NoisyModulesTrigger10000_vsLB(nullptr),
-  //
   m_MaxOccupancyStripHist(nullptr),
   m_MinOccupancyStripHist(nullptr),
   m_clusize(nullptr),
@@ -199,11 +194,11 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_hitsvsL1ID(nullptr),
   m_ncluHisto(nullptr),
   m_coincidenceHist(nullptr),
+  m_stream{"/stat"},
   m_numberOfEvents(0),
   m_numberOfEventsTrigger(0),
   m_numberOfEventsRecent(0),
   m_skipEvents(0),
-  m_booltxscan(false),
   m_current_lb(0),
   m_last_reset_lb(0),
   m_tbinHisto(nullptr),
@@ -212,12 +207,17 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_tbinHistoRecent(nullptr),
   m_tbinHistoRecentECp(nullptr),
   m_tbinHistoRecentECm(nullptr),
+  m_tbinfrac{},
+  m_tbinfracECp{},
+  m_tbinfracECm{},
+  m_clusizedist{},
+  m_clusizedistECp{},
+  m_clusizedistECm{},
   m_tbinfracall(nullptr),
   m_tbinfracVsLB(nullptr),
   m_tbinfracVsLBECp(nullptr),
   m_tbinfracVsLBECm(nullptr),
   m_initialize(false),
-  m_SCTSPContainerName(std::string("SCT_SpacePoints")),
   m_noisyM100{},
   m_noisyM1000{},
   m_noisyM10000{},
@@ -268,7 +268,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_NoisyModulesWithHOTrigger100_vsLB(nullptr),
   m_NoisyModulesWithHOTrigger1000_vsLB(nullptr),
   m_NoisyModulesWithHOTrigger10000_vsLB(nullptr),
-  //
   m_noisyMWithHO100{},
   m_noisyMWithHO1000{},
   m_noisyMWithHO10000{},
@@ -283,25 +282,12 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
   m_hitoccTriggerBAR_lb{},
   m_hitoccTriggerECp_lb{},
   m_hitoccTriggerECm_lb{},
-  //
-  m_dataObjectName(std::string("SCT_RDOs")),
-  m_pSCTHelper(nullptr),
-  m_eventInfoKey(std::string("EventInfo")),
-  m_clusContainerKey("SCT_Clusters") {
-    /** sroe 3 Sept 2015:
-        histoPathBase is declared as a property in the base class, assigned to m_path
-        with default as empty string.
-        Declaring it here as well gives rise to compilation warning
-        WARNING duplicated property name 'histoPathBase', see https://its.cern.ch/jira/browse/GAUDI-1023
-
-        declareProperty("histoPathBase", m_stream = "/stat"); **/
-    m_stream = "/stat";
+  m_pSCTHelper(nullptr) {
     declareProperty("localSummary", m_localSummary = 0);
-    declareProperty("doHitmapHistos", m_boolhitmaps = true);
+    declareProperty("doHitmapHistos", m_boolhitmaps = false);
     declareProperty("doTXScan", m_booltxscan = false);
     declareProperty("CheckRate", m_checkrate = 1000);
     declareProperty("CheckRecent", m_checkrecent = 30);
-    declareProperty("tracksName", m_tracksName = "Combined_Tracks");
     declareProperty("NOTrigger", m_NOTrigger = "L1_RD0_EMPTY");
     declareProperty("numberOfSigma", m_numSigma = 3);
     declareProperty("EvtsBins", m_evtsbins = 5000);
@@ -313,24 +299,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string& type,
     declareProperty("doTrackHits", m_doTrackHits = true);
     declareProperty("MaxTracks", m_maxTracks = 1000);
     declareProperty("doLogXNoise", m_doLogXNoise = true);
-
-    clear1D(m_tbinfrac);
-    clear1D(m_tbinfracECp);
-    clear1D(m_tbinfracECm);
-    clear1D(m_clusizedist);
-    clear1D(m_clusizedistECp);
-    clear1D(m_clusizedistECm);
-  }
-
-// ====================================================================================================
-// ====================================================================================================
-SCTHitsNoiseMonTool::~SCTHitsNoiseMonTool() {
-  free(m_nSP_buf);
-  free(m_nmaxHits_buf);
-  free(m_nminHits_buf);
-  free(m_nmaxModule_buf);
-  free(m_nminModule_buf);
-  free(m_nHits_buf);
 }
 
 // ====================================================================================================
@@ -340,7 +308,6 @@ StatusCode SCTHitsNoiseMonTool::initialize() {
 
   ATH_CHECK(m_SCTSPContainerName.initialize());
   ATH_CHECK(m_dataObjectName.initialize());
-  ATH_CHECK(m_eventInfoKey.initialize());
   ATH_CHECK(m_clusContainerKey.initialize());
   ATH_CHECK(m_tracksName.initialize());
 
@@ -767,7 +734,6 @@ SCTHitsNoiseMonTool::checkHists(bool /*fromFinalize*/) {
 // ====================================================================================================
 StatusCode
 SCTHitsNoiseMonTool::generalHistsandNoise() {
-  typedef SCT_RDORawData SCTRawDataType;
   SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
   SG::ReadHandle<xAOD::EventInfo> pEvent(m_eventInfoKey);
   if (not pEvent.isValid()) {
@@ -785,8 +751,6 @@ SCTHitsNoiseMonTool::generalHistsandNoise() {
   }
   Identifier SCT_Identifier;
   // Use new IDC
-  SCT_RDO_Container::const_iterator col_it = p_rdocontainer->begin();
-  SCT_RDO_Container::const_iterator lastCol = p_rdocontainer->end();
   int local_tothits = 0;
   int totalmodules = 0;
   int meanhits = 0;
@@ -831,65 +795,56 @@ SCTHitsNoiseMonTool::generalHistsandNoise() {
   const bool doThisSubsystem[3] = {
     m_doNegativeEndcap, true, m_doPositiveEndcap
   };
-  //
-  // Define some iterators over the SP container
-  SpacePointContainer::const_iterator spContainerIterator = sctContainer->begin();
-  SpacePointContainer::const_iterator spContainerIteratorEnd = sctContainer->end();
   // Outer Loop on RDO Collection
-  for (; col_it != lastCol; ++col_it) {
-    const InDetRawDataCollection<SCTRawDataType>* SCT_Collection(*col_it);
-    if (!SCT_Collection) {
+  for (const InDetRawDataCollection<SCT_RDORawData>* SCT_Collection: *p_rdocontainer) {
+    if (SCT_Collection==nullptr) {
       continue;  // select only SCT RDOs
     }
     // MJW new code- try getting the ID of the collection using the identify() method
     Identifier tempID = SCT_Collection->identify();
     Identifier theWaferIdentifierOfTheRDOCollection = tempID;
     Identifier theModuleIdentifierOfTheRDOCollection = m_pSCTHelper->module_id(tempID);
+    IdentifierHash theModuleHash0 = m_pSCTHelper->wafer_hash(theModuleIdentifierOfTheRDOCollection);
+    IdentifierHash theModuleHash1;
+    m_pSCTHelper->get_other_side(theModuleHash0, theModuleHash1);
     int Bec = m_pSCTHelper->barrel_ec(tempID);
     int numberOfHitsFromSPs = 0;
     int numberOfHitsFromAllRDOs = 0;
     // Now we want the space point container for this module
     // We have to compare module IDs- the SP collection is defined for the 'normal' (i.e. no stereo) module side
     // Define a set of spIDs
-    set<Identifier>mySetOfSPIds;
-    for (; spContainerIterator != spContainerIteratorEnd; ++spContainerIterator) {
+    set<Identifier> mySetOfSPIds;
+    for (unsigned int side{0}; side<2; side++) {
+      SpacePointContainer::const_iterator spContainerIterator = sctContainer->indexFind(side==0 ? theModuleHash0 : theModuleHash1);
+      if (spContainerIterator==sctContainer->end()) continue;
       Identifier tempSPID = (*spContainerIterator)->identify();
       Identifier theModuleIdentifierOfTheSPCollection = m_pSCTHelper->module_id(tempSPID);
-      if (theModuleIdentifierOfTheSPCollection > theModuleIdentifierOfTheRDOCollection) {
-        break;
-      }
       if (theModuleIdentifierOfTheRDOCollection == theModuleIdentifierOfTheSPCollection) {
-        DataVector<Trk::SpacePoint>::const_iterator nextSpacePoint = (*spContainerIterator)->begin();
-        DataVector<Trk::SpacePoint>::const_iterator nextSpacePointEnd = (*spContainerIterator)->end();
-        for (; nextSpacePoint != nextSpacePointEnd; ++nextSpacePoint) {
-          const Trk::SpacePoint& sp = **nextSpacePoint;
+        for (const Trk::SpacePoint* sp: **spContainerIterator) {
           // the following is nasty; the 'normal' sides (where the sp is defined) swap from layer to layer. To be safe,
           // we get both sides
-          const VecId_t& rdoList0 = sp.clusterList().first->rdoList();
-          const VecId_t& rdoList1 = sp.clusterList().second->rdoList();
+          const VecId_t& rdoList0 = sp->clusterList().first->rdoList();
+          const VecId_t& rdoList1 = sp->clusterList().second->rdoList();
           // copy to mySetOfSPIds. Use inserter(set, iterator_hint) for a set, or back_inserter(vec) for vector...
           copy(rdoList0.begin(), rdoList0.end(), inserter(mySetOfSPIds, mySetOfSPIds.end()));
           copy(rdoList1.begin(), rdoList1.end(), inserter(mySetOfSPIds, mySetOfSPIds.end()));
         }
-        break;
+      } else {
+        ATH_MSG_ERROR("Module identifiers are different. indexFind gives a wrong collection??");
       }
     }
     totalmodules++;
     maxrodhits = 0;
     // Now we loop over the RDOs in the RDO collection, and add to the NO vector any that are in the mySetOfSPIds
-    DataVector<SCTRawDataType>::const_iterator p_rdo = SCT_Collection->begin();
-    DataVector<SCTRawDataType>::const_iterator end_rdo = SCT_Collection->end();
-    for (; p_rdo != end_rdo; ++p_rdo) {
-      const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(*p_rdo);
-      int tbin;// = (*p_rdo)->getTimeBin();
-      if (rdo3 != 0) {
-        tbin = (rdo3)->getTimeBin();
-      }else {
-        tbin = 3;
-      }
-      SCT_Identifier = (*p_rdo)->identify();
+    for (const SCT_RDORawData* rdo: *SCT_Collection) {
+      const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(rdo);
+      int tbin = 3;
+      if (rdo3) {
+        tbin = rdo3->getTimeBin();
+      }
+      SCT_Identifier = rdo->identify();
       const unsigned int firstStrip(m_pSCTHelper->strip(SCT_Identifier));
-      const unsigned int numberOfStrips((*p_rdo)->getGroupSize());
+      const unsigned int numberOfStrips(rdo->getGroupSize());
       int thisBec = m_pSCTHelper->barrel_ec(SCT_Identifier);
       int thisLayerDisk = m_pSCTHelper->layer_disk(SCT_Identifier);
       int thisPhi = m_pSCTHelper->phi_module(SCT_Identifier);
@@ -1227,20 +1182,10 @@ SCTHitsNoiseMonTool::generalHistsandNoise() {
   if (not p_clucontainer.isValid()) {
     ATH_MSG_WARNING("Couldn't retrieve clusters");
   }
-  InDet::SCT_ClusterContainer::const_iterator clucol_it = p_clucontainer->begin();
-  InDet::SCT_ClusterContainer::const_iterator lastcluCol = p_clucontainer->end();
-  for (; clucol_it != lastcluCol; ++clucol_it) {
-    const InDet::SCT_ClusterCollection* SCT_Collection(*clucol_it);
-    if (!SCT_Collection) {
-      continue; // select only SCT RDOs
-    }
-    // Middle Loop on SCT Clusters only
-    DataVector<InDet::SCT_Cluster>::const_iterator p_clu(SCT_Collection->begin());
-    DataVector<InDet::SCT_Cluster>::const_iterator clus_end = SCT_Collection->end();
-    for (; p_clu != clus_end; ++p_clu) {
-      Identifier cluId = (*p_clu)->identify();
-      const InDet::SCT_Cluster& cluster = **p_clu;
-      int GroupSize = cluster.rdoList().size();
+  for (const InDet::SCT_ClusterCollection* SCT_Collection: *p_clucontainer) {
+    for (const InDet::SCT_Cluster* cluster: *SCT_Collection) {
+      Identifier cluId = cluster->identify();
+      int GroupSize = cluster->rdoList().size();
       // Fill  Cluster Size histogram
       int elementIndex = 2 * m_pSCTHelper->layer_disk(cluId) + m_pSCTHelper->side(cluId);
       int thisPhi = m_pSCTHelper->phi_module(cluId);
@@ -1940,10 +1885,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
         }
       }
       if (m_occSumUnbiased.size() && m_numberOfEvents) {
-        for (std::map<Identifier, float>::iterator it = m_occSumUnbiased.begin(); it != m_occSumUnbiased.end(); it++) {
-          Identifier wafer_id = it->first;
+        for (std::pair<const Identifier, float>& val: m_occSumUnbiased) {
+          Identifier wafer_id = val.first;
           int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-          float occ = (m_numberOfEvents > 0) ? it->second / (m_numberOfEvents) :  it->second;
+          float occ = (m_numberOfEvents > 0) ? val.second / (m_numberOfEvents) :  val.second;
           int eta = m_pSCTHelper->eta_module(wafer_id);
           int phi = m_pSCTHelper->phi_module(wafer_id);
           int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -1966,11 +1911,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
       }
       if (m_environment == AthenaMonManager::online) {
         if (m_occSumUnbiasedRecent.size() && m_numberOfEventsRecent) {
-          for (std::map<Identifier, float>::iterator it = m_occSumUnbiasedRecent.begin();
-               it != m_occSumUnbiasedRecent.end(); it++) {
-            Identifier wafer_id = it->first;
+          for (std::pair<const Identifier, float>& val: m_occSumUnbiasedRecent) {
+            Identifier wafer_id = val.first;
             int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-            float occ = (m_numberOfEventsRecent > 0) ? it->second / (m_numberOfEventsRecent) :  it->second;
+            float occ = (m_numberOfEventsRecent > 0) ? val.second / (m_numberOfEventsRecent) :  val.second;
             int eta = m_pSCTHelper->eta_module(wafer_id);
             int phi = m_pSCTHelper->phi_module(wafer_id);
             int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -1988,11 +1932,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
         }
       }
       if (m_occSumUnbiasedTrigger.size() && m_numberOfEventsTrigger) {
-        for (std::map<Identifier, float>::iterator it = m_occSumUnbiasedTrigger.begin();
-             it != m_occSumUnbiasedTrigger.end(); it++) {
-          Identifier wafer_id = it->first;
+        for (std::pair<const Identifier, float>&val: m_occSumUnbiasedTrigger) {
+          Identifier wafer_id = val.first;
           int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-          float occ = (m_numberOfEventsTrigger > 0) ? it->second / (m_numberOfEventsTrigger) :  it->second;
+          float occ = (m_numberOfEventsTrigger > 0) ? val.second / (m_numberOfEventsTrigger) :  val.second;
           int eta = m_pSCTHelper->eta_module(wafer_id);
           int phi = m_pSCTHelper->phi_module(wafer_id);
           int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -2015,11 +1958,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
       }
 
       if (m_hitoccSumUnbiased.size() && m_numberOfEvents) {
-        for (std::map<Identifier, float>::iterator it = m_hitoccSumUnbiased.begin(); it != m_hitoccSumUnbiased.end();
-             it++) {
-          Identifier wafer_id = it->first;
+        for (std::pair<const Identifier, float>& val: m_hitoccSumUnbiased) {
+          Identifier wafer_id = val.first;
           int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-          float hitocc = (m_numberOfEvents > 0) ? it->second / (m_numberOfEvents) :  it->second;
+          float hitocc = (m_numberOfEvents > 0) ? val.second / (m_numberOfEvents) :  val.second;
           int eta = m_pSCTHelper->eta_module(wafer_id);
           int phi = m_pSCTHelper->phi_module(wafer_id);
           int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -2042,11 +1984,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
       }
       if (m_environment == AthenaMonManager::online) {
         if (m_hitoccSumUnbiasedRecent.size() && m_numberOfEventsRecent) {
-          for (std::map<Identifier, float>::iterator it = m_hitoccSumUnbiasedRecent.begin();
-               it != m_hitoccSumUnbiasedRecent.end(); it++) {
-            Identifier wafer_id = it->first;
+          for (std::pair<const Identifier, float>& val: m_hitoccSumUnbiasedRecent) {
+            Identifier wafer_id = val.first;
             int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-            float hitocc = (m_numberOfEventsRecent > 0) ? it->second / (m_numberOfEventsRecent) :  it->second;
+            float hitocc = (m_numberOfEventsRecent > 0) ? val.second / (m_numberOfEventsRecent) :  val.second;
             int eta = m_pSCTHelper->eta_module(wafer_id);
             int phi = m_pSCTHelper->phi_module(wafer_id);
             int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -2064,11 +2005,10 @@ SCTHitsNoiseMonTool::checkNoiseMaps(bool final) {
         }
       }
       if (m_hitoccSumUnbiasedTrigger.size() && m_numberOfEventsTrigger) {
-        for (std::map<Identifier, float>::iterator it = m_hitoccSumUnbiasedTrigger.begin();
-             it != m_hitoccSumUnbiasedTrigger.end(); it++) {
-          Identifier wafer_id = it->first;
+        for (std::pair<const Identifier, float>& val: m_hitoccSumUnbiasedTrigger) {
+          Identifier wafer_id = val.first;
           int element = 2 * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id);
-          float hitocc = (m_numberOfEventsTrigger > 0) ? it->second / (m_numberOfEventsTrigger) :  it->second;
+          float hitocc = (m_numberOfEventsTrigger > 0) ? val.second / (m_numberOfEventsTrigger) :  val.second;
           int eta = m_pSCTHelper->eta_module(wafer_id);
           int phi = m_pSCTHelper->phi_module(wafer_id);
           int barrel_ec = m_pSCTHelper->barrel_ec(wafer_id);
@@ -2487,13 +2427,11 @@ SCTHitsNoiseMonTool::resetNoiseMapHists() {
 // ====================================================================================================
 StatusCode
 SCTHitsNoiseMonTool::resetNoiseMapsRecent() {
-  for (std::map<Identifier, float>::iterator it = m_occSumUnbiasedRecent.begin(); it != m_occSumUnbiasedRecent.end();
-       ++it) {
-    it->second = 0.0;
+  for (std::pair<const Identifier, float>& val: m_occSumUnbiasedRecent) {
+    val.second = 0.0;
   }
-  for (std::map<Identifier, float>::iterator it = m_hitoccSumUnbiasedRecent.begin();
-       it != m_hitoccSumUnbiasedRecent.end(); ++it) {
-    it->second = 0.0;
+  for (std::pair<const Identifier, float>& val: m_hitoccSumUnbiasedRecent) {
+    val.second = 0.0;
   }
   return StatusCode::SUCCESS;
 }
@@ -2942,53 +2880,35 @@ SCTHitsNoiseMonTool::bookNoiseDistributions() {
 StatusCode
 SCTHitsNoiseMonTool::bookSPvsEventNumber() {
   if (newRunFlag()) {
-    free(m_nSP_buf);
-    free(m_nHits_buf);
-    free(m_nmaxHits_buf);
-    free(m_nminHits_buf);
-    free(m_nmaxModule_buf);
-    free(m_nminModule_buf);
     MonGroup BarrelSPHist(this, "SCT/GENERAL/hits", ManagedMonitorToolBase::run, ATTRIB_UNMANAGED);
     // Book a histogram
     m_nSP = th1Factory("sct_sp_vs_en", "Number of Spacepoints vs Event Number", BarrelSPHist, 1, m_evtsbins + 1,
                        m_evtsbins);
     m_nSP->GetXaxis()->SetTitle("Event Number");
     m_nSP->GetYaxis()->SetTitle("Num of Spacepoints");
-    size_t nSP_buf_size;
-    nSP_buf_size = m_evtsbins * sizeof(int);
-    m_nSP_buf = (int*) malloc(nSP_buf_size);
+    m_nSP_buf.reserve(m_evtsbins);
     m_nSP_pos = 0;
 
     m_nHits = th1Factory("sct_av_hits_vs_en", "Number of Average Hits vs Event Number", BarrelSPHist, 1, m_evtsbins + 1,
                          m_evtsbins);
     m_nHits->GetXaxis()->SetTitle("Event Number");
     m_nHits->GetYaxis()->SetTitle("Num of Average Hits");
-    size_t nHits_buf_size;
-    nHits_buf_size = m_evtsbins * sizeof(int);
-    m_nHits_buf = (int*) malloc(nHits_buf_size);
+    m_nHits_buf.reserve(m_evtsbins);
     m_nHits_pos = 0;
 
     m_nmaxHits = th1Factory("sct_max_hits_vs_en", "Max Number of Hits vs Event Number", BarrelSPHist, 1, m_evtsbins + 1,
                             m_evtsbins);
     m_nmaxHits->GetXaxis()->SetTitle("Event Number");
     m_nmaxHits->GetYaxis()->SetTitle("Num of Max Hits");
-    size_t nmaxHits_buf_size;
-    nmaxHits_buf_size = m_evtsbins * sizeof(int);
-    m_nmaxHits_buf = (int*) malloc(nmaxHits_buf_size);
-    size_t nmaxModule_buf_size;
-    nmaxModule_buf_size = m_evtsbins * sizeof(Identifier);
-    m_nmaxModule_buf = (Identifier*) malloc(nmaxModule_buf_size);
+    m_nmaxHits_buf.reserve(m_evtsbins);
+    m_nmaxModule_buf.reserve(m_evtsbins);
 
     m_nminHits = th1Factory("sct_min_hits_vs_en", "Min Number of Hits vs Event Number", BarrelSPHist, 1, m_evtsbins + 1,
                             m_evtsbins);
     m_nminHits->GetXaxis()->SetTitle("Event Number");
     m_nminHits->GetYaxis()->SetTitle("Num of Min Hits");
-    size_t nminHits_buf_size;
-    nminHits_buf_size = m_evtsbins * sizeof(int);
-    m_nminHits_buf = (int*) malloc(nminHits_buf_size);
-    size_t nminModule_buf_size;
-    nminModule_buf_size = m_evtsbins * sizeof(Identifier);
-    m_nminModule_buf = (Identifier*) malloc(nminModule_buf_size);
+    m_nminHits_buf.reserve(m_evtsbins);
+    m_nminModule_buf.reserve(m_evtsbins);
   }
   return StatusCode::SUCCESS;
 }
@@ -3008,11 +2928,8 @@ SCTHitsNoiseMonTool::makeSPvsEventNumber() {
   }
   int sct_nspacepoints(0);
   // loop over SCT space points collections
-  SpacePointContainer::const_iterator it = SCT_spcontainer->begin();
-  SpacePointContainer::const_iterator endit = SCT_spcontainer->end();
-  for (; it != endit; ++it) {
-    const SpacePointCollection* colNext = &(**it);
-    if (!colNext) {
+  for (const SpacePointCollection* colNext: *SCT_spcontainer) {
+    if (colNext==nullptr) {
       continue;
     }
     // Identify the spacepoint collection and gets its barrel_ec to update the num SP histogram
@@ -3027,7 +2944,7 @@ SCTHitsNoiseMonTool::makeSPvsEventNumber() {
     if (thisBec == 2) {
       m_numSPPerLumiBlockECp->Fill(thisLayerDisk, colNext->size());
     }
-    sct_nspacepoints += (int) colNext->size();
+    sct_nspacepoints += static_cast<int>(colNext->size());
   }
 
   if (m_environment == AthenaMonManager::online) {
@@ -3098,7 +3015,7 @@ SCTHitsNoiseMonTool::makeVectorOfTrackRDOIdentifiers() {
     return StatusCode::SUCCESS;
   }
   // assemble list of rdo ids associated with tracks
-  for (int i = 0; i < (int) tracks->size(); i++) {
+  for (int i = 0; i < static_cast<int>(tracks->size()); i++) {
     const Trk::Track* track = (*tracks)[i];
     if (track == 0) {
       ATH_MSG_WARNING("no pointer to track!!!");
@@ -3109,11 +3026,10 @@ SCTHitsNoiseMonTool::makeVectorOfTrackRDOIdentifiers() {
     if (trackStates == 0) {
       ATH_MSG_WARNING("for current track is TrackStateOnSurfaces == Null, no data will be written for this track");
     }else {// Loop over all track states on surfaces
-      for (DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin();
-           it != trackStates->end(); it++) {
+      for (const Trk::TrackStateOnSurface* TSOS: *trackStates) {
         // Get pointer to RIO of right type
         const InDet::SiClusterOnTrack* clus =
-          dynamic_cast<const InDet::SiClusterOnTrack*>((*it)->measurementOnTrack());
+          dynamic_cast<const InDet::SiClusterOnTrack*>(TSOS->measurementOnTrack());
         if (clus) {
           // Get Pointer to prepRawDataObject
           const InDet::SiCluster* RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
index f01a5b140c3f..4b445177caf9 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
@@ -46,25 +46,15 @@ using namespace SCT_Monitoring;
 // ====================================================================================================
 SCTLorentzMonTool::SCTLorentzMonTool(const string& type, const string& name,
                                      const IInterface* parent) : SCTMotherTrigMonTool(type, name, parent),
-  m_trackToVertexTool("Reco::TrackToVertex", this), // for TrackToVertexTool
+  m_numberOfEvents{0},
   m_phiVsNstrips{},
   m_phiVsNstrips_100{},
   m_phiVsNstrips_111{},
   m_phiVsNstrips_Side{},
   m_phiVsNstrips_Side_100{},
   m_phiVsNstrips_Side_111{},
+  m_path{""},
   m_pSCTHelper(nullptr) {
-  /** sroe 3 Sept 2015:
-     histoPathBase is declared as a property in the base class, assigned to m_path
-     with default as empty string.
-     Declaring it here as well gives rise to compilation warning
-     WARNING duplicated property name 'histoPathBase', see https://its.cern.ch/jira/browse/GAUDI-1023
-
-     declareProperty("histoPathBase", m_stream = "/stat"); **/
-  m_stream = "/stat";
-  declareProperty("tracksName", m_tracksName = std::string("CombinedInDetTracks")); // this recommended
-  declareProperty("TrackToVertexTool", m_trackToVertexTool); // for TrackToVertexTool
-  m_numberOfEvents = 0;
 }
 
 // ====================================================================================================
@@ -160,13 +150,9 @@ SCTLorentzMonTool::fillHistograms() {
     ATH_MSG_WARNING(" TrackCollection not found: Exit SCTLorentzTool" << m_tracksName.key());
     return StatusCode::SUCCESS;
   }
-  TrackCollection::const_iterator trkitr = tracks->begin();
-  TrackCollection::const_iterator trkend = tracks->end();
 
-  for (; trkitr != trkend; ++trkitr) {
-    // Get track
-    const Trk::Track* track = (*trkitr);
-    if (not track) {
+  for (const Trk::Track* track: *tracks) {
+    if (track==nullptr) {
       ATH_MSG_ERROR("no pointer to track!!!");
       continue;
     }
@@ -184,11 +170,10 @@ SCTLorentzMonTool::fillHistograms() {
       continue;
     }
 
-    DataVector<const Trk::TrackStateOnSurface>::const_iterator endit = trackStates->end();
-    for (DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin(); it != endit; ++it) {
-      if ((*it)->type(Trk::TrackStateOnSurface::Measurement)) {
+    for (const Trk::TrackStateOnSurface* tsos: *trackStates) {
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement)) {
         const InDet::SiClusterOnTrack* clus =
-          dynamic_cast<const InDet::SiClusterOnTrack*>((*it)->measurementOnTrack());
+          dynamic_cast<const InDet::SiClusterOnTrack*>(tsos->measurementOnTrack());
         if (clus) { // Is it a SiCluster? If yes...
           const InDet::SiCluster* RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
           if (not RawDataClus) {
@@ -216,7 +201,7 @@ SCTLorentzMonTool::fillHistograms() {
             // find cluster size
             const std::vector<Identifier>& rdoList = RawDataClus->rdoList();
             int nStrip = rdoList.size();
-            const Trk::TrackParameters* trkp = dynamic_cast<const Trk::TrackParameters*>((*it)->trackParameters());
+            const Trk::TrackParameters* trkp = dynamic_cast<const Trk::TrackParameters*>(tsos->trackParameters());
             if (not trkp) {
               ATH_MSG_WARNING(" Null pointer to MeasuredTrackParameters");
               continue;
@@ -273,10 +258,9 @@ SCTLorentzMonTool::fillHistograms() {
                 }
               }// end if passesCuts
             }// end if mtrkp
-            //            delete perigee;perigee = 0;
           } // end if SCT..
         } // end if (clus)
-      } // if ((*it)->type(Trk::TrackStateOnSurface::Measurement)){
+      } // if (tsos->type(Trk::TrackStateOnSurface::Measurement)){
     }// end of loop on TrackStatesonSurface (they can be SiClusters, TRTHits,..)
   } // end of loop on tracks
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
index b882276e2f16..bf1c06182b3a 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
@@ -22,10 +22,9 @@ const std::string SCTMotherTrigMonTool::m_triggerNames[] = {
 
 SCTMotherTrigMonTool::SCTMotherTrigMonTool(const std::string& type, const std::string& name, const IInterface* parent)
   : ManagedMonitorToolBase(type, name, parent),
-  m_doTrigger(true),
   m_isStream(false),
   m_firedTriggers(0) {
-  declareProperty("doTrigger", m_doTrigger);
+  declareProperty("doTrigger", m_doTrigger=true);
 }
 
 StatusCode
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
index 3674db6db4c8..2cad34ca67f1 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
@@ -108,7 +108,6 @@ SCTRatioNoiseMonTool::SCTRatioNoiseMonTool(const string& type,
   m_nOneSideEndcapC_ev{},
   m_nTwoSideEndcapC_ev{},
   m_nNonGoodModulesEndcapC_ev{},
-  //
   m_pnoiseoccupancymapHistoVectorECC{},
   m_pnoiseoccupancymapHistoVectorECCSide0{},
   m_pnoiseoccupancymapHistoVectorECCSide1{},
@@ -118,7 +117,6 @@ SCTRatioNoiseMonTool::SCTRatioNoiseMonTool(const string& type,
   m_pnoiseoccupancymapHistoVectorECA{},
   m_pnoiseoccupancymapHistoVectorECASide0{},
   m_pnoiseoccupancymapHistoVectorECASide1{},
-  //
   m_d1(0),
   m_n1(0),
   m_n1Barrel{},
@@ -127,28 +125,21 @@ SCTRatioNoiseMonTool::SCTRatioNoiseMonTool(const string& type,
   m_d1Barrel{},
   m_d1EndcapA{},
   m_d1EndcapC{},
-  //
   m_noSidesHit(false),
   m_oneSideHit(false),
   m_twoSidesHit(false),
   m_correct_TimeBin(false),
-  //
   m_nNoSides{},
   m_nOneSide{},
   m_nOneSide0{},
   m_nOneSide1{},
   m_nTwoSide{},
-  //
   m_nLink0{},
   m_nLink1{},
-  /** goodModules init in ctor body **/
-  //
   m_nLayer{},
   m_nEta{},
   m_nPhi{},
   m_nNonGoodModule{},
-  //
-  m_checkrecent(1),
   m_current_lb(0),
   m_last_reset_lb(0),
   m_set_timebin(-1),
@@ -172,25 +163,21 @@ SCTRatioNoiseMonTool::SCTRatioNoiseMonTool(const string& type,
   m_NZ1(nullptr),
   m_N11(nullptr),
   m_N21(nullptr),
-  //
   m_NZ1BAR{},
   m_N11BAR{},
   m_N21BAR{},
   m_NZ1BAR_vsLB{},
   m_N11BAR_vsLB{},
-  //
   m_NZ1ECC{},
   m_N11ECC{},
   m_N21ECC{},
   m_NZ1ECC_vsLB{},
   m_N11ECC_vsLB{},
-  //
   m_NZ1ECA{},
   m_N11ECA{},
   m_N21ECA{},
   m_NZ1ECA_vsLB{},
   m_N11ECA_vsLB{},
-  //
   m_NO(nullptr),
   m_NOSide(nullptr),
   m_NO_vsLB(nullptr),
@@ -212,33 +199,17 @@ SCTRatioNoiseMonTool::SCTRatioNoiseMonTool(const string& type,
   m_NOECA_disk{},
   m_NOECA_disk_vsLB{},
   m_numberHitsinBarrel{},
-  //
   m_NZ1_vs_modnum(nullptr),
   m_N11_vs_modnum(nullptr),
-  //
-  m_stream("/stat"),
   m_path(""),
-  m_tracksName(""), // never used?
-  m_NOTrigger("L1_RD0_EMPTY"),
-  m_dataObjectName(std::string("SCT_RDOs")),
-  m_eventInfoKey(std::string("EventInfo")),
-  m_pSCTHelper(nullptr),
-  m_checkBadModules(true),
-  m_ignore_RDO_cut_online(true) {
-  /** sroe 3 Sept 2015:
-     histoPathBase is declared as a property in the base class, assigned to m_path
-     with default as empty string.
-     Declaring it here as well gives rise to compilation warning
-     WARNING duplicated property name 'histoPathBase', see https://its.cern.ch/jira/browse/GAUDI-1023
-     declareProperty("histoPathBase", m_stream = "/stat"); **/
-  m_stream = "/stat";
-  declareProperty("checkBadModules", m_checkBadModules);
+  m_pSCTHelper(nullptr) {
+  declareProperty("checkBadModules", m_checkBadModules=true);
   declareProperty("CheckRate", m_checkrate = 1000);
   declareProperty("CheckRecent", m_checkrecent = 1);
   declareProperty("NOTrigger", m_NOTrigger = "L1_RD0_EMPTY");
-  declareProperty("IgnoreRDOCutOnline", m_ignore_RDO_cut_online);
+  declareProperty("IgnoreRDOCutOnline", m_ignore_RDO_cut_online=true);
 
-  for (auto& i:m_goodModules) {
+  for (bool& i: m_goodModules) {
     i = true;
   }
 }
@@ -249,7 +220,6 @@ StatusCode SCTRatioNoiseMonTool::initialize() {
   ATH_CHECK( SCTMotherTrigMonTool::initialize() );
 
   ATH_CHECK( m_dataObjectName.initialize() );
-  ATH_CHECK( m_eventInfoKey.initialize() );
 
   return StatusCode::SUCCESS;
 }
@@ -309,16 +279,12 @@ StatusCode
 SCTRatioNoiseMonTool::fillHistograms() {
   ATH_MSG_DEBUG("enters fillHistograms");
   // lets get the raw hit container
-  typedef SCT_RDORawData SCTRawDataType;
   SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
   if (not p_rdocontainer.isValid()) {
     return StatusCode::FAILURE;
   }
 
   Identifier SCT_Identifier;
-  // Use new IDC
-  SCT_RDO_Container::const_iterator col_it = p_rdocontainer->begin();
-  SCT_RDO_Container::const_iterator lastCol = p_rdocontainer->end();
 
   // Declare Time Bin
   m_set_timebin = 4;
@@ -354,7 +320,8 @@ SCTRatioNoiseMonTool::fillHistograms() {
 
   SG::ReadHandle<xAOD::EventInfo> pEvent(m_eventInfoKey);
   if (not pEvent.isValid()) {
-    return ERROR("Could not find event pointer"), StatusCode::FAILURE;
+    ATH_MSG_ERROR("Could not find event pointer");
+    return StatusCode::FAILURE;
   }
 
   const bool isSelectedTrigger = true;
@@ -368,15 +335,13 @@ SCTRatioNoiseMonTool::fillHistograms() {
   m_current_lb = tmplb;
   int count_SCT_RDO = 0;
   if (isSelectedTrigger == true) {
-    for (; col_it != lastCol; ++col_it) {
+    for (const InDetRawDataCollection<SCT_RDORawData>* rd: *p_rdocontainer) {
       m_correct_TimeBin = false;
-      const InDetRawDataCollection<SCTRawDataType>* SCT_Collection(*col_it);
-      if (!SCT_Collection) {
+      if (rd==nullptr) {
         continue; // select only SCT RDOs
       }
-      const InDetRawDataCollection<SCT_RDORawData>* rd(*col_it);
 
-      Identifier SCT_Identifier = SCT_Collection->identify();
+      Identifier SCT_Identifier = rd->identify();
       int thisBec = m_pSCTHelper->barrel_ec(SCT_Identifier);
       int thisLayerDisk = m_pSCTHelper->layer_disk(SCT_Identifier);
       int thisPhi = m_pSCTHelper->phi_module(SCT_Identifier);
@@ -393,11 +358,10 @@ SCTRatioNoiseMonTool::fillHistograms() {
         m_nNonGoodModule[m_modNum] = 1;
       }
 
-      DataVector<SCTRawDataType>::const_iterator p_rdo_end = SCT_Collection->end();
-      for (DataVector<SCTRawDataType>::const_iterator p_rdo = SCT_Collection->begin(); p_rdo != p_rdo_end; ++p_rdo) {
+      for (const SCT_RDORawData* rdo: *rd) {
         count_SCT_RDO++;
-        const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData *>(*p_rdo);
-        if (rdo3 != 0) {
+        const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(rdo);
+        if (rdo3) {
           m_tbin = (rdo3)->getTimeBin();
         }
         if (timeBinInPattern(m_tbin, XIX) && goodModule) {
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
index af5c55d06ec0..830b748cdfff 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
@@ -70,6 +70,8 @@ SCTTracksMonTool::SCTTracksMonTool(const string& type,
                                    const IInterface* parent)
   : SCTMotherTrigMonTool(type, name, parent),
   m_nTracks(nullptr),
+  m_nTracks_buf{},
+  m_nTracks_pos{0},
   m_trackTrigger(nullptr),
   m_trackTriggerRate(nullptr),
   m_totalBarrelResidual(nullptr),
@@ -114,29 +116,16 @@ SCTTracksMonTool::SCTTracksMonTool(const string& type,
   m_psctpulls_summaryHistoVector{},
   m_psctpulls_summaryHistoVectorECp{},
   m_psctpulls_summaryHistoVectorECm{},
-  m_path(""),
-  m_useIDGlobal(false),
-  m_residualPullCalculator("Trk::ResidualPullCalculator/ResidualPullCalculator", this),
+  m_stream{"/stat"},
+  m_path{""},
   m_pSCTHelper(nullptr) {
-  /** sroe 3 Sept 2015:
-     histoPathBase is declared as a property in the base class, assigned to m_path
-     with default as empty string.
-     Declaring it here as well gives rise to compilation warning
-     WARNING duplicated property name 'histoPathBase', see https://its.cern.ch/jira/browse/GAUDI-1023
-
-     declareProperty("histoPathBase", m_stream = "/stat"); **/
-  m_stream = "/stat";
-  declareProperty("tracksName", m_tracksName = std::string("SCT_Cosmic_Tracks")); // "ExtendedTracks");
   declareProperty("trackHitCut", m_trackHitCut = 3);
   declareProperty("CheckRate", m_checkrate = 1000);
   declareProperty("doPositiveEndcap", m_doPositiveEndcap = true);
-  declareProperty("doNegativeEndcap", m_doNegativeEndcap = false);
-  declareProperty("ResPullCalc", m_residualPullCalculator);
+  declareProperty("doNegativeEndcap", m_doNegativeEndcap = true);
   declareProperty("useIDGlobal", m_useIDGlobal = false);
   declareProperty("doUnbiasedCalc", m_doUnbiasedCalc = true);
   declareProperty("EvtsBins", m_evtsbins = 5000);
-  m_nTracks_buf = nullptr;
-  m_nTracks_pos = 0;
 }
 
 // ====================================================================================================
@@ -145,7 +134,7 @@ StatusCode SCTTracksMonTool::initialize() {
   ATH_CHECK( SCTMotherTrigMonTool::initialize() );
 
   ATH_CHECK( m_tracksName.initialize() );
-  CHECK(m_residualPullCalculator.retrieve());
+  ATH_CHECK(m_residualPullCalculator.retrieve());
   return StatusCode::SUCCESS;
 }
 
@@ -159,12 +148,12 @@ SCTTracksMonTool::bookHistogramsRecurrent() {
   if (newRunFlag()) {
     m_numberOfEvents = 0;
   }
-  CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
+  ATH_CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
   if (m_doUnbiasedCalc) {
-    CHECK(m_updator.retrieve());
+    ATH_CHECK(m_updator.retrieve());
   }
   // Booking  Track related Histograms
-  CHECK(bookGeneralHistos());
+  ATH_CHECK(bookGeneralHistos());
   const bool doThisSubsystem[N_REGIONS] = {
     m_doNegativeEndcap, true, m_doPositiveEndcap
   };
@@ -190,12 +179,12 @@ SCTTracksMonTool::bookHistograms() {
   if (newRunFlag()) {
     m_numberOfEvents = 0;
   }
-  CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
+  ATH_CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
   if (m_doUnbiasedCalc) {
-    CHECK(m_updator.retrieve());
+    ATH_CHECK(m_updator.retrieve());
   }
   // Booking  Track related Histograms
-  CHECK(bookGeneralHistos());
+  ATH_CHECK(bookGeneralHistos());
   const bool doThisSubsystem[N_REGIONS] = {
     m_doNegativeEndcap, true, m_doPositiveEndcap
   };
@@ -272,9 +261,7 @@ SCTTracksMonTool::fillHistograms() {
     return StatusCode::SUCCESS;
   }
   int local_tot_trkhits(0);
-  TrackCollection::const_iterator trkend(tracks->end());
-  TrackCollection::const_iterator trkbegin(tracks->begin());
-  if (trkend == trkbegin) {
+  if (tracks->size()==0) {
     if (m_doTrigger) {
       for (int trig(0); trig != N_TRIGGER_TYPES; ++trig) {
         m_trackTriggerRate->Fill(trig, 0);
@@ -286,13 +273,12 @@ SCTTracksMonTool::fillHistograms() {
   }
   int goodTrks_N = 0;
   ATH_MSG_DEBUG("Begin loop over " << tracks->size() << " tracks");
-  for (TrackCollection::const_iterator trkitr(tracks->begin()); trkitr != trkend; ++trkitr) {
-    int local_scthits = 0;
-    const Trk::Track* track = (*trkitr);
+  for (const Trk::Track* track: *tracks) {
     if (not track) {
       ATH_MSG_ERROR("No pointer to track");
       break;
     }
+    int local_scthits = 0;
     int scthits_on_trk(0);     // Breaks out of loop if track has less than 3 sct hits
     const Trk::TrackSummary* trkSum(track->trackSummary());
     if (trkSum) {
@@ -365,9 +351,9 @@ SCTTracksMonTool::fillHistograms() {
     H1_t residualsSummaryHistogram(0);
     H1_t pullsSummaryHistogram(0);
     DataVector<const Trk::TrackStateOnSurface>::const_iterator endit(trackStates->end());
-    for (DataVector<const Trk::TrackStateOnSurface>::const_iterator it(trackStates->begin()); it != endit; ++it) {
-      if ((*it)->type(Trk::TrackStateOnSurface::Measurement)) {
-        const InDet::SiClusterOnTrack* clus(dynamic_cast<const InDet::SiClusterOnTrack*>((*it)->measurementOnTrack()));
+    for (const Trk::TrackStateOnSurface* tsos: *trackStates) {
+      if (tsos->type(Trk::TrackStateOnSurface::Measurement)) {
+        const InDet::SiClusterOnTrack* clus(dynamic_cast<const InDet::SiClusterOnTrack*>(tsos->measurementOnTrack()));
         if (clus) { // Is it a SiCluster? If yes...
           const InDet::SiCluster* RawDataClus(dynamic_cast<const InDet::SiCluster*>(clus->prepRawData()));
           if (not RawDataClus) {
@@ -384,14 +370,14 @@ SCTTracksMonTool::fillHistograms() {
             const bool doThisDetector(doThisSubsystem[subsystemIndex]);
             hasHits[subsystemIndex] = true;
             const Trk::TrackParameters* trkParameters(0);
-            const Trk::RIO_OnTrack* rio(dynamic_cast<const Trk::RIO_OnTrack*>((*it)->measurementOnTrack()));
+            const Trk::RIO_OnTrack* rio(dynamic_cast<const Trk::RIO_OnTrack*>(tsos->measurementOnTrack()));
             bool updateSucceeds(true);
             if (rio) {
 #ifndef NDEBUG
               ATH_MSG_DEBUG("if rio");
 #endif
               if (m_doUnbiasedCalc) {
-                const Trk::TrackParameters* trkParam((*it)->trackParameters());
+                const Trk::TrackParameters* trkParam(tsos->trackParameters());
                 if (trkParam) {
                   trkParameters = m_updator->removeFromState(*trkParam, rio->localParameters(), rio->localCovariance());
                   updateSucceeds = (trkParameters != 0);
@@ -401,7 +387,7 @@ SCTTracksMonTool::fillHistograms() {
               ATH_MSG_DEBUG("not rio");
             }
             if (!trkParameters) {
-              trkParameters = (*it)->trackParameters();
+              trkParameters = tsos->trackParameters();
             }
             if (trkParameters) {
               const AmgVector(5) LocalTrackParameters(trkParameters->parameters());
@@ -410,11 +396,11 @@ SCTTracksMonTool::fillHistograms() {
               ATH_MSG_DEBUG("Cluster Position Phi= " << clus->localParameters()[Trk::locX]);
 #endif
               if (!m_residualPullCalculator.empty()) {
-                const Trk::ResidualPull* residualPull(m_residualPullCalculator->residualPull(rio, trkParameters,
-                                                                                             m_doUnbiasedCalc ? Trk::ResidualPull::Unbiased : Trk::ResidualPull::Biased));
+                std::unique_ptr<const Trk::ResidualPull> residualPull(m_residualPullCalculator->residualPull(rio, trkParameters,
+                                                                                                             m_doUnbiasedCalc ? Trk::ResidualPull::Unbiased : Trk::ResidualPull::Biased));
                 if (!residualPull) {
                   ATH_MSG_WARNING("Residual Pull Calculator did not succeed!");
-                  return StatusCode::FAILURE;
+                  return StatusCode::SUCCESS;
                 } else {
                   float local_residual(residualPull->residual()[Trk::locX]);
                   float local_pull(residualPull->pull()[Trk::locX]);
@@ -454,8 +440,6 @@ SCTTracksMonTool::fillHistograms() {
                     }
                   }
                 }
-                delete residualPull;
-                residualPull = 0;
               }
             } else { // no measured local parameters, pull won't be calculated
               ATH_MSG_WARNING("No measured local parameters, pull won't be calculated");
@@ -519,7 +503,7 @@ SCTTracksMonTool::fillHistograms() {
             }
           } // end if SCT..
         } // end if (clus)
-      } // if ((*it)->type(Trk::TrackStateOnSurface::Measurement))
+      } // if (tsos->type(Trk::TrackStateOnSurface::Measurement))
     }// end of loop on TrackStatesonSurface (they can be SiClusters, TRTHits,..)
     m_trk_ncluHisto->Fill(local_scthits, 1.);
     // We now know whether this particular track had hits in the barrel or endcaps- update the profile histogram
@@ -538,7 +522,7 @@ SCTTracksMonTool::fillHistograms() {
       }
     }
     // Time Dependent SP plots only online
-    m_nTracks_buf[m_nTracks_pos] = (int) (m_trk_chi2->GetEntries());
+    m_nTracks_buf[m_nTracks_pos] = static_cast<int>(m_trk_chi2->GetEntries());
     m_nTracks_pos++;
     if (m_nTracks_pos == m_evtsbins) {
       m_nTracks_pos = 0;
@@ -652,16 +636,15 @@ SCTTracksMonTool::checkHists(bool /*fromFinalize*/) {
     }
     //  (*residualsRms[0])[0]->GetXaxis()->SetTitle("Index in the direction of #eta");
   }
-    // Now checking RMS and Means of Pulls 1D Histos
+  // Now checking RMS and Means of Pulls 1D Histos
   TF1 pullgaus("pullgaus", "gaus");
   pullgaus.SetParameter(1, 0.);
   pullgaus.SetParameter(2, 1.);
   if (not m_psctpulls_summaryHistoVector.empty()) {
-    VecH1_t::const_iterator endit(m_psctpulls_summaryHistoVector.end());
-    for (VecH1_t::const_iterator it(m_psctpulls_summaryHistoVector.begin()); it != endit; ++it) {
-      if ((*it)->GetEntries() > 2) {// only fit if #entries > 1, otherwise root crashes
-        ATH_MSG_DEBUG("GetEntries = " << (*it)->GetEntries());
-        (*it)->Fit("pullgaus", "Q", "", -2., 2.); // Fit Pulls with a gaussian, Quiet mode ; adding 'N' would aslo do no
+    for (const H1_t h1: m_psctpulls_summaryHistoVector) {
+      if (h1->GetEntries() > 2) {// only fit if #entries > 1, otherwise root crashes
+        ATH_MSG_DEBUG("GetEntries = " << h1->GetEntries());
+        h1->Fit("pullgaus", "Q", "", -2., 2.); // Fit Pulls with a gaussian, Quiet mode ; adding 'N' would aslo do no
                                                   // drawing of the fitted function: the increase in speed is small,
                                                   // though.
         double par[3], epar[3];
@@ -670,10 +653,10 @@ SCTTracksMonTool::checkHists(bool /*fromFinalize*/) {
           epar[i] = pullgaus.GetParError(i);    // error on the params
         }
         if (abs(par[1]) > 5. * epar[1]) {
-          (*it)->SetLineColor(2);
+          h1->SetLineColor(2);
         }
         if ((par[2] - 5. * epar[2]) > 2.) {
-          (*it)->SetLineColor(2);
+          h1->SetLineColor(2);
         }
       }
     }
@@ -689,7 +672,7 @@ SCTTracksMonTool::checkHists(bool /*fromFinalize*/) {
    // use kalman updator to get unbiased states
    IAlgTool*  algTool;
    ListItem ltool("Trk::KalmanUpdator/TrkKalmanUpdator");
-   CHECK(toolSvc()->retrieveTool(ltool.type(), ltool.name(), algTool));
+   ATH_CHECK(toolSvc()->retrieveTool(ltool.type(), ltool.name(), algTool));
    m_updator = dynamic_cast<Trk::IUpdator*>(algTool);
    if (not m_updator ) {
     ATH_MSG_FATAL("Could not get KalmanUpdator for unbiased track states");
@@ -727,28 +710,28 @@ SCTTracksMonTool::bookGeneralHistos() {
     m_tracksPerRegion->GetXaxis()->SetBinLabel(1, "EndCapC");
     m_tracksPerRegion->GetXaxis()->SetBinLabel(2, "Barrel");
     m_tracksPerRegion->GetXaxis()->SetBinLabel(3, "EndCapA");
-    CHECK(Tracks.regHist(m_tracksPerRegion));
+    ATH_CHECK(Tracks.regHist(m_tracksPerRegion));
     m_totalBarrelResidual = new TH1F("totalBarrelResidual", "Overall Residual Distribution for the Barrel", 100, -0.5,
                                      0.5);
     m_totalBarrelResidual->GetXaxis()->SetTitle("Residual [mm]");
-    CHECK(Tracks.regHist(m_totalBarrelResidual));
+    ATH_CHECK(Tracks.regHist(m_totalBarrelResidual));
     m_totalEndCapAResidual = new TH1F("totalEndCapAResidual", "Overall Residual Distribution for the EndCapA", 100,
                                       -0.5, 0.5);
     m_totalEndCapAResidual->GetXaxis()->SetTitle("Residual [mm]");
-    CHECK(Tracks.regHist(m_totalEndCapAResidual));
+    ATH_CHECK(Tracks.regHist(m_totalEndCapAResidual));
     m_totalEndCapCResidual = new TH1F("totalEndCapCResidual", "Overall Residual Distribution for the EndCapC", 100,
                                       -0.5, 0.5);
     m_totalEndCapCResidual->GetXaxis()->SetTitle("Residual [mm]");
-    CHECK(Tracks.regHist(m_totalEndCapCResidual));
+    ATH_CHECK(Tracks.regHist(m_totalEndCapCResidual));
     m_totalBarrelPull = new TH1F("totalBarrelPull", "Overall Pull Distribution for the Barrel", 100, -5, 5);
     m_totalBarrelPull->GetXaxis()->SetTitle("Pull");
-    CHECK(Tracks.regHist(m_totalBarrelPull));
+    ATH_CHECK(Tracks.regHist(m_totalBarrelPull));
     m_totalEndCapAPull = new TH1F("totalEndCapAPull", "Overall Pull Distribution for the EndCapA", 100, -5, 5);
     m_totalEndCapAPull->GetXaxis()->SetTitle("Pull");
-    CHECK(Tracks.regHist(m_totalEndCapAPull));
+    ATH_CHECK(Tracks.regHist(m_totalEndCapAPull));
     m_totalEndCapCPull = new TH1F("totalEndCapCPull", "Overall Pull Distribution for the EndCapC", 100, -5, 5);
     m_totalEndCapCPull->GetXaxis()->SetTitle("Pull");
-    CHECK(Tracks.regHist(m_totalEndCapCPull));
+    ATH_CHECK(Tracks.regHist(m_totalEndCapCPull));
 
     if (m_doTrigger == true) {
       m_trackTrigger = new TH1I("trackTriggers", "Tracks for different trigger types", N_TRIGGER_TYPES, -0.5, 7.5);            //
@@ -762,8 +745,8 @@ SCTTracksMonTool::bookGeneralHistos() {
         m_trackTrigger->GetXaxis()->SetBinLabel(trig + 1, SCTMotherTrigMonTool::m_triggerNames[trig].c_str());
         m_trackTriggerRate->GetXaxis()->SetBinLabel(trig + 1, SCTMotherTrigMonTool::m_triggerNames[trig].c_str());
       }
-      CHECK(Tracks.regHist(m_trackTrigger));
-      CHECK(Tracks.regHist(m_trackTriggerRate));
+      ATH_CHECK(Tracks.regHist(m_trackTrigger));
+      ATH_CHECK(Tracks.regHist(m_trackTriggerRate));
     }
     // Book histogram of track rate for different regions of the detector
     m_trackRate = new TProfile("SCTTrackRate", "Track per event for SCT regions", 3, 0.0, 3.0);
@@ -771,56 +754,54 @@ SCTTracksMonTool::bookGeneralHistos() {
     m_trackRate->GetXaxis()->SetBinLabel(2, "Barrel");
     m_trackRate->GetXaxis()->SetBinLabel(3, "EndcapA");
 
-    CHECK(Tracks.regHist(m_trackRate));
+    ATH_CHECK(Tracks.regHist(m_trackRate));
     //
     m_trk_ncluHisto = new TH1F("trk_sct_hits", "SCT HITS per single Track", N_HIT_BINS, FIRST_HIT_BIN, LAST_HIT_BIN);
     m_trk_ncluHisto->GetXaxis()->SetTitle("Num of Hits");
-    CHECK(Tracks.regHist(m_trk_ncluHisto));
+    ATH_CHECK(Tracks.regHist(m_trk_ncluHisto));
 
     m_trk_nclu_totHisto = new TH1F("sct_hits_onall_tracks", "SCT HITS on all event Tracks", N_HIT_BINS, FIRST_HIT_BIN,
                                    LAST_HIT_BIN);
     m_trk_nclu_totHisto->GetXaxis()->SetTitle("Num of SCT Hits");
     m_trk_nclu_totHisto->GetYaxis()->SetTitle("Num of Events");
-    CHECK(Tracks.regHist(m_trk_nclu_totHisto));
+    ATH_CHECK(Tracks.regHist(m_trk_nclu_totHisto));
 
     m_trk_chi2 = new TH1F("trk_chi2", "Track #chi^{2} div ndf", 150, 0., 150.);
     m_trk_chi2->GetXaxis()->SetTitle("Number of track #chi^{2}/NDF");
-    CHECK(Tracks.regHist(m_trk_chi2));
+    ATH_CHECK(Tracks.regHist(m_trk_chi2));
 
     m_trk_N = new TH1F("trk_N", "Number of tracks", 400, 0, 4000);
     m_trk_N->GetXaxis()->SetTitle("Number of tracks");
-    CHECK(Tracks.regHist(m_trk_N));
+    ATH_CHECK(Tracks.regHist(m_trk_N));
 
 
     m_trk_pt = new TH1F("trk_pt", "Track P_{T}", 150, 0., 150.);
     m_trk_pt->GetXaxis()->SetTitle("P_{T} [GeV]");
-    CHECK(Tracks.regHist(m_trk_pt));
+    ATH_CHECK(Tracks.regHist(m_trk_pt));
 
     m_trk_d0 = new TH1F("trk_d0", "Track d0", 160, -40., 40.);
     m_trk_d0->GetXaxis()->SetTitle("d0 [mm]");
-    CHECK(Tracks.regHist(m_trk_d0));
+    ATH_CHECK(Tracks.regHist(m_trk_d0));
 
     m_trk_z0 = new TH1F("trk_z0", "Track z0", 200, -200., 200.);
     m_trk_z0->GetXaxis()->SetTitle("z0 [mm]");
-    CHECK(Tracks.regHist(m_trk_z0));
+    ATH_CHECK(Tracks.regHist(m_trk_z0));
 
     m_trk_phi = new TH1F("trk_phi", "Track Phi", 160, -4, 4.);
     m_trk_phi->GetXaxis()->SetTitle("#phi [rad]");
-    CHECK(Tracks.regHist(m_trk_phi));
+    ATH_CHECK(Tracks.regHist(m_trk_phi));
 
     m_trk_eta = new TH1F("trk_eta", "Track Eta", 160, -4., 4.);
     m_trk_eta->GetXaxis()->SetTitle("#eta");
-    CHECK(Tracks.regHist(m_trk_eta));
+    ATH_CHECK(Tracks.regHist(m_trk_eta));
 
     if (m_environment == AthenaMonManager::online) {
       m_nTracks = new TH1I("sct_tracks_vs_en", "Number of Tracks vs Event Number", m_evtsbins, 1, m_evtsbins + 1);
       m_nTracks->GetXaxis()->SetTitle("Event Number");
       m_nTracks->GetYaxis()->SetTitle("Num of Tracks");
-      size_t nTracks_buf_size;
-      nTracks_buf_size = m_evtsbins * sizeof(int);
-      m_nTracks_buf = (int*) malloc(nTracks_buf_size);
+      m_nTracks_buf.reserve(m_evtsbins);
       m_nTracks_pos = 0;
-      CHECK(Tracks.regHist(m_nTracks));
+      ATH_CHECK(Tracks.regHist(m_nTracks));
     }
   }
   return StatusCode::SUCCESS;
@@ -884,9 +865,9 @@ SCTTracksMonTool::bookTrackHistos(const SCT_Monitoring::Bec becVal) {
     string streamPull(string("pulls") + abbreviation + streamDelimiter + layerSide.name());
     string titleResidual(string("SCT Residuals for ") + polarityString + ": " + layerSide.title());
     string titlePull(string("SCT Pulls: ") + layerSide.title());
-    CHECK(h1Factory(streamResidual + "_summary", "Summary " + titleResidual, 0.5, endCapTracksResi,
+    ATH_CHECK(h1Factory(streamResidual + "_summary", "Summary " + titleResidual, 0.5, endCapTracksResi,
                     *p_residualsSummary));
-    CHECK(h1Factory(streamPull + "_summary", "Summary " + titlePull, 5., endCapTracksPull, *p_pullsSummary));
+    ATH_CHECK(h1Factory(streamPull + "_summary", "Summary " + titlePull, 5., endCapTracksPull, *p_pullsSummary));
   }
 
 
@@ -922,8 +903,8 @@ SCTTracksMonTool::bookTrackHistos(const SCT_Monitoring::Bec becVal) {
       string titleResidual(string("SCT Residuals for ") + polarityString + ": " + layerSide.title());
       string titlePull(string("SCT Pulls: ") + layerSide.title());
 
-      CHECK(p2Factory(streamResidual, titleResidual, becVal, endCapTracksResi, *p_residuals));
-      CHECK(p2Factory(streamPull, titlePull, becVal, endCapTracksPull, *p_pulls));
+      ATH_CHECK(p2Factory(streamResidual, titleResidual, becVal, endCapTracksResi, *p_residuals));
+      ATH_CHECK(p2Factory(streamPull, titlePull, becVal, endCapTracksPull, *p_pulls));
     }
 
     for (unsigned int i(0); i != limit; ++i) {
@@ -935,8 +916,8 @@ SCTTracksMonTool::bookTrackHistos(const SCT_Monitoring::Bec becVal) {
       string streamPull("pullsRMS" + abbreviation + streamDelimiter + layerString + streamDelimiter + sideString);
       string titleResidual("SCT Residuals RMS for " + polarityString + ": " + layerSide.title());
       string titlePull(string("SCT Pulls RMS for ") + polarityString + ": " + layerSide.title());
-      CHECK(h2Factory(streamResidual, titleResidual, becVal, endCapTracksResi, *p_residualsRms));
-      CHECK(h2Factory(streamPull, titlePull, becVal, endCapTracksPull, *p_pullsRms));
+      ATH_CHECK(h2Factory(streamResidual, titleResidual, becVal, endCapTracksResi, *p_residualsRms));
+      ATH_CHECK(h2Factory(streamPull, titlePull, becVal, endCapTracksPull, *p_pullsRms));
     }
   }
 
@@ -959,7 +940,7 @@ SCTTracksMonTool::h2Factory(const std::string& name, const std::string& title,
   }
   H2_t tmp = new TH2F(TString(name), TString(
                         title), nEta, firstEta - 0.5, lastEta + 0.5, nPhi, firstPhi - 0.5, lastPhi + 0.5);
-  CHECK(registry.regHist(tmp));
+  ATH_CHECK(registry.regHist(tmp));
   storageVector.push_back(tmp);
   return StatusCode::SUCCESS;
 }
@@ -980,7 +961,7 @@ SCTTracksMonTool::p2Factory(const std::string& name, const std::string& title,
   }
   Prof2_t tmp = new TProfile2D(TString(name), TString(
                                  title), nEta, firstEta - 0.5, lastEta + 0.5, nPhi, firstPhi - 0.5, lastPhi + 0.5, "s");
-  CHECK(registry.regHist(tmp));
+  ATH_CHECK(registry.regHist(tmp));
   storageVector.push_back(tmp);
   return StatusCode::SUCCESS;
 }
@@ -992,7 +973,7 @@ SCTTracksMonTool::h1Factory(const std::string& name, const std::string& title, c
   const float lo(-extent), hi(extent);
   H1_t tmp = new TH1F(TString(name), TString(title), nbins, lo, hi);
 
-  CHECK(registry.regHist(tmp));
+  ATH_CHECK(registry.regHist(tmp));
   storageVector.push_back(tmp);
   return StatusCode::SUCCESS;
 }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/cArrayUtilities.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/cArrayUtilities.h
deleted file mode 100644
index d94e20aaf96c..000000000000
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/cArrayUtilities.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef SCT_MonitoringcArrayUtilities_h
-#define SCT_MonitoringcArrayUtilities_h
-
-/**    @file cArrayUtilities.cxx
- *
- *
- *  @author  Shaun Roe
- *  Header amnd implementation for utiities dealing with
- *  C-style arrays
- */
-
-
-namespace SCT_Monitoring {
-  // give the total size of a 3D C-style array
-  template<class T, int Size1, int Size2, int Size3>
-  int
-  extent(T (&/*parray*/)[Size1][Size2][Size3]) {
-    return Size1 * Size2 * Size3;
-  }
-
-  // give the total size of a 2D C-style array
-  template<class T, int Size1, int Size2>
-  int
-  extent(T (&/*parray*/)[Size1][Size2]) {
-    return Size1 * Size2;
-  }
-
-  // give beyond-the-end pointer for 2D C-style array
-  template<class T, int Size1, int Size2>
-  T *
-  endof(T (&parray)[Size1][Size2]) {
-    return &(parray[0][0]) + extent(parray);
-  }
-
-  // give the byte size of a 3D C-style array
-  template<class T, int Size1, int Size2, int Size3>
-  int
-  byte_extent3D(T (&)[Size1][Size2][Size3]) {
-    return Size1 * Size2 * Size3 * sizeof(T);
-  }
-
-  // give the byte size of a 2D C-style array
-  template<class T, int Size1, int Size2>
-  int
-  byte_extent(T (&)[Size1][Size2]) {
-    return Size1 * Size2 * sizeof(T);
-  }
-
-  // give the byte size of a 1D C-style array
-  template<class T, int Size1>
-  int
-  byte_extent1D(T (&)[Size1]) {
-    return Size1 * sizeof(T);
-  }
-
-  template <class T, int Size1, int Size2, int Size3>
-  void
-  clear3D(T (&parray)[Size1][Size2][Size3]) {
-    memset(parray, 0, byte_extent3D(parray));
-  }
-
-  template <class T, int Size1, int Size2>
-  void
-  clear(T (&parray)[Size1][Size2]) {
-    memset(parray, 0, byte_extent(parray));
-  }
-
-  // for 1-D arrays
-  template <class T, int Size1>
-  void
-  clear1D(T (&parray)[Size1]) {
-    memset(parray, 0, byte_extent1D(parray));
-  }
-}
-#endif
-- 
GitLab


From 7124cfb4f553fd7283825d6d61cc4288a9427331 Mon Sep 17 00:00:00 2001
From: Daniele Zanzi <daniele.zanzi@cern.ch>
Date: Wed, 20 Mar 2019 16:27:27 +0000
Subject: [PATCH 141/163] TrigP1Test: HelloWorld test (ATR-19205)

---
 .../TrigP1Test/Testing/TrigP1Test.conf        | 694 -------------
 .../TrigP1Test/Testing/TrigP1Test_ART.conf    | 979 ------------------
 .../Testing/checklogTrigP1Test.conf           |   6 +-
 .../TrigP1Test/test/exec_art_trigp1test.sh    |  62 ++
 .../test/exec_art_trigp1test_merge.sh         |  14 +
 .../test/exec_art_trigp1test_post.sh          | 131 ++-
 .../test/exec_art_trigp1test_summary.sh       |   9 +
 .../exec_athenaHLT_art_trigger_validation.sh  |  57 -
 .../test/test_AthenaP1RDOtoBS_build.sh        |  25 -
 .../test_AthenaTrigBS_L2EFMerging_build.sh    |  25 -
 .../TrigP1Test/test/test_HLT_HIV4_build.sh    |  25 -
 .../test/test_HLT_HIV5_FTK_build.sh           |  25 -
 .../TrigP1Test/test/test_HLT_HIV5_build.sh    |  25 -
 .../TrigP1Test/test/test_HLT_MCHIV5_build.sh  |  25 -
 ...rigEDMCheck_TrigDecTool_physicsV7_build.sh |  47 -
 .../TrigP1Test/test/test_HLT_mcV7_build.sh    |  25 -
 .../test/test_HLT_mcV7_menu_build.sh          |  47 -
 .../test/test_HLT_physicsV7_AFP_build.sh      |  25 -
 .../test/test_HLT_physicsV7_ALFAMon_build.sh  |  25 -
 ...t_HLT_physicsV7_COS_2016IDCOSMICS_build.sh |  25 -
 .../test_HLT_physicsV7_COS_2016MUONS_build.sh |  25 -
 .../test/test_HLT_physicsV7_COS_build.sh      |  25 -
 .../test_HLT_physicsV7_DataScouting_build.sh  |  25 -
 .../test/test_HLT_physicsV7_FTK_build.sh      |  25 -
 .../test_HLT_physicsV7_L1Topo_data_build.sh   |  25 -
 ...T_physicsV7_ROBprefetching_off_on_build.sh |  31 -
 .../test/test_HLT_physicsV7_beamspot_build.sh |  25 -
 .../test/test_HLT_physicsV7_build.sh          |  25 -
 ..._HLT_physicsV7_magField_on_off_on_build.sh |  25 -
 ...HLT_physicsV7_menu_ART_and_ROSsim_build.sh |  42 -
 .../test/test_HLT_physicsV7_menu_ART_build.sh |  26 -
 .../test/test_HLT_physicsV7_menu_build.sh     | 115 --
 .../test_HLT_physicsV7_rerunLVL1_build.sh     |  25 -
 .../test_HLT_physicsV7_run_stop_run_build.sh  |  25 -
 .../test_HelloWorldHLT_OHMonitoring_build.sh  |  12 +
 .../test/test_HelloWorldHLT_build.sh          |  19 +-
 .../test_HelloWorldHLT_forkAndMT_build.sh     |  12 +
 .../test/test_HelloWorldHLT_fork_build.sh     |  12 +
 .../test_HelloWorldHLT_run_stop_run_build.sh  |  24 +-
 ...S_AthenaP1BS_standalone_physicsV7_build.sh |  41 -
 ...test_Trigreco_physicsV7_currentT0_build.sh |  39 -
 ...athenaHLT_CostMonitoring_PhysicsV7_grid.sh |  35 -
 .../test_athenaHLT_LatestRun_HIV5_build.sh    |  25 -
 .../test_athenaHLT_LatestRun_MCV7_build.sh    |  25 -
 .../test_athenaHLT_on_data_leakCheck_grid.sh  |  35 -
 ...hysics_pp_v7_PSed_nightlyDayBefore_grid.sh | 126 ---
 .../test/test_pureSteering_build.sh           |  25 -
 .../test/test_pureSteering_ecodes_build.sh    |  25 -
 .../test_pureSteering_prescaling_build.sh     |  25 -
 49 files changed, 219 insertions(+), 3021 deletions(-)
 delete mode 100644 Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test.conf
 delete mode 100644 Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test_ART.conf
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test.sh
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_merge.sh
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_summary.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/exec_athenaHLT_art_trigger_validation.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_AthenaP1RDOtoBS_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_AthenaTrigBS_L2EFMerging_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV4_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_FTK_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_MCHIV5_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_RAWtoESD_TrigEDMCheck_TrigDecTool_physicsV7_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_menu_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_AFP_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ALFAMon_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016IDCOSMICS_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016MUONS_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_DataScouting_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_FTK_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_L1Topo_data_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ROBprefetching_off_on_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_beamspot_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_magField_on_off_on_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_and_ROSsim_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_rerunLVL1_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_run_stop_run_build.sh
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_OHMonitoring_build.sh
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_forkAndMT_build.sh
 create mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_fork_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_Reco_tf_physicsV7_savedBS_AthenaP1BS_standalone_physicsV7_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_Trigreco_physicsV7_currentT0_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_CostMonitoring_PhysicsV7_grid.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_HIV5_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_MCV7_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_on_data_leakCheck_grid.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_physics_pp_v7_PSed_nightlyDayBefore_grid.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_ecodes_build.sh
 delete mode 100755 Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_prescaling_build.sh

diff --git a/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test.conf b/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test.conf
deleted file mode 100644
index b0c2786aeffa..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test.conf
+++ /dev/null
@@ -1,694 +0,0 @@
-# For a full documentation see:
-# http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/offline/Trigger/TrigValidation/TriggerTest/Testing/trigtest.conf?revision=HEAD&view=markup
-
-
-#
-# Note that references are on /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_
-# the */online/* folder might be merged in the future with offline refernce area
-#
-
-
-################################################
-# Infrastructure tests
-################################################
-test 1
-  name HelloWorldHLT
-  doc HelloWorld in athenaHLT
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 10 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data AthExHelloWorld/HelloWorldOptions.py
-
-test 2
-  name HelloWorldHLT_run_stop_run
-  doc HelloWorld int athenaHLT with start/stop/start transition
-  stdinfile run-stop-run-saveHist.trans
-  checklog --config checklogTrigP1Test.conf --showexcludestats 
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000001_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH  
-  athena_cmd athenaHLT.py -i -M --rewind -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data AthExHelloWorld/HelloWorldOptions.py
-
-test 3
-  name MTMonHistOH
-  doc Histogram publishing test with OH infrastructure
-  # note testMonHistOH.py invokes athenaHLT with  MTMonHist.py job options 
-  # note that MTMonHist.py jo are in the HLT project
-  pre_command get_joboptions MTMonHist.py
-  athena_cmd testMonHistOH.py /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/daq.physicsMCppv2.latest.data
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-
-################################################################################
-# Test of Physics_pp_V5 and Physics_pp_V6 menu, main test of trigger, this is run on the PUs 
-################################################################################
-
-test 10
-  name HLT_physicsV5
-  doc athenaHLT on data with Physics_pp_v5 menu currently from 2015 EB data
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV5  -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_13TeV.00276952.physics_EnhancedBias.merge.RAW._lb0113._SFO-ALL._0001.data    -c 'testPhysicsV5=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV5._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
- 
-
-test 13
-  name HLT_physicsV7_rerunLVL1
-  doc athenaHLT on data with Physics_pp_v6 menu currently from 2016 EB data  
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_rerunLVL1.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_rerunLVL1.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_rerunLVL1.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_rerunLVL1  -n 25 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;rerunLVL1=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_rerunLVL1._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-test 15
-  name HLT_physicsV6_L1Topo_sim
-  doc athenaHLT on simulated data including L1Topo ROI & DAQ ROB decoding with Physics_pp_v6 menu, data is cosmics from M7 with sim L1Topo ROBFs merged in, override ROB Ids as sim data used different convention
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.reference
-  customrootcomp rootcomp_l1topo.sh /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.root
-  extra_failure_codes ROOTCOMP_MISMATCH
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV6_L1Topo_sim  -n 10 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data14_cos.00247688_mergedL1Topo._0001.data --extra-l1r-robs '[9502848,9502864]' --log-level INFO,ERROR -c 'testPhysicsV6=True;doValidation=True;L1TopoCheck=True;fpeAuditor=True'  -C 'L1TopoROBMonitor.L1TopoDAQROBIDs=[0x00910001,0x00910011];  L1TopoROBMonitor.L1TopoROIROBIDs=[0x00910080,0x00910090]; L1TopoROBMonitor.useDetMask=False; svcMgr.ByteStreamAddressProviderSvc.TopoProcModuleID=[0x80,0x90]; from L1TopoByteStream.L1TopoByteStreamConf import L1TopoByteStreamTool; l1TopoByteStreamTool=L1TopoByteStreamTool(); l1TopoByteStreamTool.ROBSourceIDs=[0x00910001,0x00910011]; svcMgr.ToolSvc+=l1TopoByteStreamTool' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_command plotL1TopoROBMonHist.py expert-monitoring.root 2>/dev/null
-
-test 16
-  name HLT_physicsV7_L1Topo_data
-  doc athenaHLT on online test data including L1Topo ROI & DAQ ROB decoding with Physics_pp_v7 menu on events selected from data15_13TeV.00278748.physics_Main
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_L1Topo_data.reference
-  customrootcomp rootcomp_l1topo.sh  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_L1Topo_data.root
-  extra_failure_codes ROOTCOMP_MISMATCH
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_L1Topo_data.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_L1Topo_data  -n 10 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_13TeV.00278748.physics_Main.daq.RAW._lb0103._SFO-1._0001_selected.data --log-level INFO,ERROR -c 'testPhysicsV7=True;doValidation=True;L1TopoCheck=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_command plotL1TopoROBMonHist.py expert-monitoring.root 2>/dev/null
-
-test 17
-  name HLT_physicsV6
-  doc athenaHLT on data with Physics_pp_v6 menu currently from 2015 EB data
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV6  -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data   -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-test 18
-  name Reco_tf_physicsV7_savedBS
-  doc Reco_tf on saved output from HLT_physicsV7
-  pre_condition if [[ $(find ../HLT_physicsV7/HLT_physicsV7._0001.data -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../HLT_physicsV7/HLT_physicsV7._0001.data ; else test -e non_existing_file ; fi   
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py --inputBSFile ../HLT_physicsV7/HLT_physicsV7._0001.data --maxEvents 2 --autoConfiguration='everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01" --preExec 'r2e:from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(True)' --outputESDFile HLT_physicsV7.ESD.pool.root
-  post_command checkFile.py HLT_physicsV7.ESD.pool.root > ESD.txt
-  post_command perl -i.clean -pe 's/^[\d:]+ //' log.RAWtoESD 
-  post_command cat log.RAWtoESD >> Reco_tf_physicsV7_savedBS_test.log 
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-
-################################################################################
-# Test of  MC_pp_V5 menu, will include "slow" cosmics chains from physics_pp_v5 menu--> need to split this test in two  
-# for the time being run this on enhanced bias, will probably time out
-################################################################################
-
-test 11
-  name HLT_mcV5
-  doc AthenaHLT on data, with MC_pp_V5 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.root 
-  athena_cmd athenaHLT.py -o HLT_mcV5 -n 75  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testMCV5=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-#  post_command save_to_refdir.sh HLT_mcV5._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-################################################################################
-# Test of  MC_pp_V6 menu, will include "slow" cosmics chains from physics_pp_v5 menu--> need to split this test in two  
-# for the time being run this on enhanced bias, will probably time out
-################################################################################
-
-test 12
-  name HLT_mcV6
-  doc AthenaHLT on data, with MC_pp_V6 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.root 
-  athena_cmd athenaHLT.py -o HLT_mcV6 -n 50  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testMCV6=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-#  post_command save_to_refdir.sh HLT_mcV6._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-
-################################################
-# Athena test on format writing RDO to BS and comparison to athenaHLT run
-################################################
-
-
-test 20
-  name AthenaP1RDO
-  doc Athena on Monte Carlo events, produces xml file for menu
-  athena_cmd athena.py -c "doRates=False" TrigP1Test/testAthenaP1RDO.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  regtest TrigSteer_HLT.TrigChainMoniValidation  REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO_HLT.TrigChainMoniValidation.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO.root 1 HLT
-  pre_command RecExCommon_links.sh
-  post_command chainDump.py -n -S
-
-test 21
-  name AthenaP1RDOtoBS
-  doc Run RDO->BS using ttbar MC file
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest    REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDOtoBS.reference
-  rootcomp /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDOtoBS.root
-  athena_cmd athena.py -c 'setMenu="MC_pp_v7";writeBS=True;rerunLVL1=True;jp.AthenaCommonFlags.EvtMax.set_Value_and_Lock(10);PoolRDOInput=["root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/valid1.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.RDO.e3099_s2578_r7572_tid07644622_00/RDO.07644622._000001.pool.root.1"];myBSRDOOutput="AppName=Athena, OutputDirectory=./, FileTag="+setMenu+", Run=110401"' TriggerRelease/Trigger_topOptions_writeBS.py
-  post_command test -e  data_test.00110401.Single_Stream.daq.RAW._lb0050._Athena._0001.data
-
-test 22
-  name AthenaP1BS_standalone
-  doc Standalone HLT running in athena and compare to athenaHLT
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1BS_standalone.reference
-  rootcomp ../HLT_physicsV7/expert-monitoring.root expert-monitoring.root
-  checkcount ../HLT_physicsV7/expert-monitoring.root 0 BOTH 
-  athena_cmd athena.py -c "BSRDOInput='root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data';testPhysicsV7=True;writeBS=True;rerunLVL1=True;doValidation=True;EvtMax=25" TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-
-
-
-###########################################################
-# Full menu tests on Monte Carlo using AthenaHLT
-###########################################################
-#
-
-test 30
-  name HLT_MC_BSfromRDO
-  doc athenaHLT on MC with MC menu, input from AthenaP1RDOtoBS
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.root 0 BOTH
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.root
-# note ._0001.data is added automatically
-  pre_condition test -e ../AthenaP1RDOtoBS/data_test.00105200.Single_Stream.daq.RAW._lb0016._Athena._0001.data
-  # The geometry and conditions tag need to match the ones used in AthenaP1RDOtoBS
-  athena_cmd athenaHLT.py -l DEBUG -f ../AthenaP1RDOtoBS/data_test.00105200.Single_Stream.daq.RAW._lb0016._Athena._0001.data -c 'HLTOutputLevel=DEBUG;testMCV6MC=True;rerunLVL1=True;setDetDescr="ATLAS-R1-2012-02-00-00";setGlobalTag="OFLCOND-DR-BS7T-ANom-11";setPrescale="";doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-
-######################################################################################
-#
-# Tests for T0 Reconstruction on a BS file produced with P1HLT cache currently, running on cosmics during M7 and M8 included in physics_v6
-# 
-######################################################################################
-
-
-# todo: get automatically what is currently running from ami
-# conditionsTag and geometryVersion need to be updated from time to time
-test 41
-  name Trigreco_physicsV7_currentT0
-  doc Trig_reco_tf with current T0 config
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd Trig_reco_tf.py --inputBS_RDOFile "root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/data15_13TeV.00272531.physics_Main.daq.RAW._lb0104._SFO-5._0001.data" --precommand "testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True" --maxEvents '15' --outputBSFile "tmp.BS" ; source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py --inputBSFile "tmp.BS" --athenaopts=" --perfmon "  --outputHISTFile 'myHIST.root' --outputAODFile 'myAOD.pool.root' --outputESDFile 'myESD.pool.root' --outputNTUP_MUONCALIBFile 'myNTUP_MUONCALIB.root' --autoConfiguration='everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01" --preExec 'r2e:from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(True)' --triggerConfig r2e=DATARECO:REPR
-  post_command checkFile.py myAOD.pool.root > AOD.txt 
-
-
-test 42
-  name  TrigEDMCheck_physicsV7_currentT0_ESD
-  doc EDMCheck on TrigEDMCheck_physicsV7_currentT0
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigEDMCheck_physicsV7_currentT0.reference  
-  pre_condition if [[ $(find ../Trigreco_physicsV7_currentT0/myESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trigreco_physicsV7_currentT0/myESD.pool.root ; else test -e non_existing_file ; fi
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["../Trigreco_physicsV7_currentT0/myESD.pool.root"]' 
-
-test 43
-  name  TrigEDMCheck_physicsV7_currentT0_AOD
-  doc EDMCheck on TrigEDMCheck_physicsV7_currentT0
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigEDMCheck_physicsV7_currentT0.reference  
-  pre_condition if [[ $(find ../Trigreco_physicsV7_currentT0/myAOD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trigreco_physicsV7_currentT0/myAOD.pool.root ; else test -e non_existing_file ; fi
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["../Trigreco_physicsV7_currentT0/myAOD.pool.root"]' 
-
-
-### this does not work due to conditions...
-test 44
-  name  Trig_reco_mcV6_currentT0
-  doc Trig_reco_tf with current T0 config
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd Trig_reco_tf.py --inputBS_RDOFile=/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data12_8TeV.00212967.physics_EnhancedBias.merge_eb_zee_zmumu_cc.RAW._lb0291._SFO-5._0001.data --precommand 'testMCV6=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00"' --outputHISTFile 'myHIST.root' --outputAODFile 'myAOD.pool.root' --outputESDFile 'myESD.pool.root' --outputNTUP_MUONCALIBFile 'myNTUP_MUONCALIB.root' --asetup r2e:AtlasProduction,20.7.X.Y,latest_copied_release e2a:AtlasProduction,20.7.X.Y,latest_copied_release --beamType 'cosmics' --autoConfiguration='everything' --maxEvents '15' --preExec 'r2e:from CaloRec.CaloCellFlags import jobproperties;jobproperties.CaloCellFlags.doLArHVCorr=False;jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr.set_Value_and_Lock(False);from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doInnerDetectorCommissioning.set_Value_and_Lock(True);InDetFlags.useBroadClusterErrors.set_Value_and_Lock(False);DQMonFlags.doStreamAwareMon=False;DQMonFlags.enableLumiAccess=False;from JetRec.JetRecFlags import jetFlags;jetFlags.useTracks=False;DQMonFlags.doCTPMon=False;' --geometryVersion all:ATLAS-R2-2015-02-00-00 --conditionsTag all:CONDBR2-BLKPA-2015-02 --triggerConfig r2e=DATARECO:REPR  
-  post_command checkFile.py myESD.pool.root > ESD.txt 
-
-
-test 45
-  name  TrigEDMCheck_mcV6_currentT0
-  doc EDMCheck on Trig_reco_mcV6_currentT0
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigEDMCheck_mcV6_currentT0.reference  
-  pre_condition test if [[ $(find ../Trig_reco_mcV6_currentT0/myESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trig_reco_mcV6_currentT0/myESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../Trig_reco_mcV6_currentT0/myESD.pool.root ESD.pool.root
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["ESD.pool.root"]' TrigP1Test/testAthenaP1ESD_TrigEDMCheck_data.py
-
-
-test 46
-  name Trigreco_dbgstream_T0
-  doc Trig_reco_tf using debug_stream setup as is run at T0
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd cp /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data16_cos.00291509.physics_Main.daq.RAW._lb0009._SFO-3._0001.data data16_cos.00291509.physics_Main.daq.RAW._lb0009._SFO-3._0001.data ;   source /afs/cern.ch/user/t/trigcomm/public/tzero/setup_debugrec.sh ; python -u `which Trig_reco_tf.py` --argJSON=/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data16_cos.00291509.physics_Main.daq.RAW.job.argdict.json
-
-  post_command  test -e  data16_cos.00291509.physics_Main.debug_rec.daq.RAW.g49._0001.data
-
-
-
-################################################################################
-#  physics_v6 menu on cosmics 2012/2015  
-################################################################################
-
-
-test 49
-  name HLT_physicsV7_COS
-  doc athenaHLT on data with Physics_pp_v7 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_COS  -n 250 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data16_cos.00306147.physics_Main.daq.RAW._lb0494._SFO-4._0001.data  -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference
-
-
-
-
-
-test 50
-  name HLT_physicsV6_COS_2012
-  doc athenaHLT standalone with physicsV6 menu on COSMICS 2012
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.root 
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2012 -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_cos.00214912.express_express.merge.RAW._lb0184._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doValidation=True;doCosmics=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2012._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-
-
-test 51
-  name HLT_physicsV7_COS_2016MUONS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016MUONS.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016MUONS.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016MUONS.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV7_COS_2016MUONS  -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data16_cos.00306147.physics_CosmicMuons.merge.RAW._lb0494._SFO-ALL._0001.1  -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS_2016MUONS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-test 52
-  name HLT_physicsV7_COS_2016IDCOSMICS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_COS_2016IDCOSMICS   -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data16_cos.00306147.physics_IDCosmic.merge.RAW._lb0494._SFO-ALL._0001.1   -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS_2016IDCOSMICS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-test 53
-  name HLT_physicsV6_COS_2015CALO
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2015
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2015CALO  -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data15_cos.00256721.physics_CosmicCalo.merge.RAW._lb0403._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2015CALO._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-test 54
-  name HLT_physicsV6_COS_2015MBTS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from M9
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2015MBTS  -n 100 -f  root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data15_cos.00257588.physics_L1MinBias.merge.RAW._lb0XXX._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2015MBTS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-################################################################################
-#  DB upload tests on Physics_pp_V6 menu  inclusing running from the db (currently not possible as old triggertool has no cmdline option top run old physics_pp lvl1 menu)
-################################################################################
-
-
-
- 
-test 61
-  name HLT_physicsV7_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -o HLT_physicsV7_menu  -c 'testPhysicsV7=True;trigBase="Default";doDBConfig=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 63
-  name HLT_physicsV7_rerun 
-  doc Recreate trigger configuration and compare with configuration from HLT_physicsV7_menu
-  athena_cmd athenaHLT.py -M -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -o HLT_physicsV7_rerun -c 'testPhysicsV7=True;trigBase="Default";doDBConfig=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 64
-  name CheckKeysV7
-  doc compare the SMK created from the HLT_physicsV7 first and rerun jobs 
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/outputHLT*xml
-  pre_condition test -e ../HLT_physicsV7_rerun/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_rerun/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_rerun/outputHLT*xml
-  checklog --config checklogTrigP1Test.conf --showexcludestats | grep -v "checking for"
-  athena_cmd testCheckKeys.sh --menu HLT_physicsV7
-
-
-## Compare JO vs DB also with rerunLvl1 to test the reprocessing on run1 data
-
-test 71
-  name HLT_physicsV7_rerunLVL1_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 25  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -o HLT_physicsV7_rerunLVL1_menu  -c 'doDBConfig=True;testPhysicsV7=True;rerunLVL1=True;trigBase="Default";enableCostForCAF=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-
-#############################################################################################
-## Transform tests on BS from main  HLT_physicsV7 test
-## conditionsTag and geometryVersion need to be updated from time to time
-#############################################################################################    
-test 80
-  name RAWtoESD_physicsV7
-  doc RAWtoESD on output from HLT_physicsV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  pre_condition test -e '../HLT_physicsV7/HLT_physicsV7._0001.data'
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py  --preExec 'from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(True)' --autoConfiguration 'everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01"  --inputBSFile ../HLT_physicsV7/HLT_physicsV7._0001.data   --maxEvents 5 --outputESDFile RAWtoESD.pool.root
-  post_command checkFile.py RAWtoESD.pool.root > ESD.txt
-
-test 81
-  name TrigEDMCheck_physicsV7
-  doc EDM checker on ESD from RAWtoESD_physicsV7
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest    REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigEDMCheck_physicsV7.reference
-  pre_condition if [[ $(find ../RAWtoESD_physicsV7/RAWtoESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../RAWtoESD_physicsV7/RAWtoESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../RAWtoESD_physicsV7/RAWtoESD.pool.root ESD.pool.root
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["ESD.pool.root"]' 
-
-test 82
-  name TrigDecTool_physicsV7
-  doc  Check of TrigDec for events produced by RAWtoESD_physicsV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest    REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigDecTool_physicsV7.reference
-  pre_condition if [[ $(find ../RAWtoESD_physicsV7/RAWtoESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../RAWtoESD_physicsV7/RAWtoESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../RAWtoESD_physicsV7/RAWtoESD.pool.root ESD.pool.root
-  athena_cmd athena.py -c 'fileList=["ESD.pool.root"]' TrigP1Test/testAthenaP1ESD_TrigDecTool.py
-
-#test 83: Reco_tf_mcV7_savedBS got migrated to test 18: Reco_tf_physicsV7_savedBS 
-test 83
-  name Reco_tf_mcV7_savedBS
-  doc Reco_tf on saved output from HLT_mcV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  pre_command linktoP1HLT.sh mcV7   
-  athena_cmd Reco_tf.py --inputBSFile link_to_file_from_P1HLT.data --maxEvents 10   --outputESDFile data12_mcV7.ESD.pool.root
-  
-
-#############################################################################################
-## Infrastructure tests on run/stop/run transitions
-############################################################################################# 
-test 100
-  name HLT_physicsV7_run_stop_run
-  doc athenaHLT on data with physics_pp_V7 menu with stop/start transition
-  stdinfile run-stop-run-saveHist.trans
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  customregtest regtest_multirun.sh atn_test.log
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000001_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH ATHENA_REGTEST_FAILED  
-  athena_cmd athenaHLT.py -i -M --rewind -n 50 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-
-#############################################################################################
-## Additional Infrastructure tests 
-#############################################################################################
-
-# mrammens: localhost partition test goes to a new test suite-- remove this test here 
-test 111
-  name AllPartition_physicsV6
-  doc Physics_pp_v4 menu in localhost L2+EF partition
-  joboptions runHLT_standalone.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd part_runTest.sh part_lhl2ef 
-  customregtest part_regtest.sh ../HLT_physicsV6/HLT_physicsV6.reference.new ../HLT_physicsV6/HLT_physicsV6.reference.new  
-  customrootcomp part_rootcomp.sh ../HLT_physicsV6/expert-monitoring.root  ../HLT_physicsV6/expert-monitoring.root
-  post_command cleanuplog.sh runHLT_standalone_test.log
-
-test 112
-  name HLT_physicsV7_magField_on_off_on
-  doc athenaHLT on data with physicsV7 menu with On and Off magnetic field transition
-  pre_command  get_files -jo setMagFieldCurrents.py
-  stdinfile magFieldOnOff.trans
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  customregtest regtest_multirun.sh atn_test.log 1 3
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000002_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH ATHENA_REGTEST_FAILED  
-  athena_cmd athenaHLT.py -i -M --rewind -n 50 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  
-
-test 113
-  name HLT_physicsV7_beamspot
-  doc Test of beamspot udpate with athenaHLT
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # DO NOT change the number of events for this test
-  athena_cmd athenaHLT.py -Z TrigP1Test.BeamSpotUpdate -n 50 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testPhysicsV7=True;doValidation=True;BeamspotFromSqlite=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 114
-  name HLT_physicsV6_nocache
-  doc athenaHLT on data with physics_pp_v6 menu, no caching in steering, use HLT_physicsV6 as reference
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  checkcount ../HLT_physicsV6/expert-monitoring.root 0 HLT
-  athena_cmd athenaHLT.py -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data -oHLT_physicsV6_nocache  -c 'testPhysicsV6=True;noCaching=True;HLTOutputLevel=INFO;doValidation=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-
-################################################################################
-# Test of ALFA
-#################################################################################
-
-
-
-test 120
-  name HLT_physicsV7_ALFAMon
-  doc athenaHLT with ALFA monitoring enabled, with Physics_pp_v6 menu, on run 2 data with ALFA in (see ATR-12448)
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_ALFAMon.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_ALFAMon.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_ALFAMon.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_ALFAMon  -n 105 -f  root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data15_13TeV.00277025.physics_MinBias.merge.RAW._lb0500._SFO-1._0001.1 --log-level INFO,ERROR -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;enableALFAMon=True;trigBase="Default";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs  
-
-################################################################################
-# Test of mcV6 menu for CAF reprocessing 
-################################################################################
-
-test 130
-  name HLT_mcV6_caf
-  doc athenaHLT on data with MC_pp_V6 menu for caf reprocessing  
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 1 -M -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data  -oHLT_mcV6_caf  -c 'testMCV6=True;caf=True;trigBase="Default";doDBConfig=True;rerunLVL1=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 131
-  name HLT_physicsV6_caf
-  doc athenaHLT on data with Physics_pp_V6 menu for caf reprocessing  
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 1 -M -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -oHLT_physicsV6_caf  -c 'testPhysicsV6=True;caf=True;trigBase="Default";doDBConfig=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 132
-  name PrepareMenuKeys_physicsV6_caf
-  doc Prepares SMKs created from the HLT_physicsV6_caf  tests
-  pre_condition test -e ../HLT_physicsV6_caf/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_physicsV6_caf/l2_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/ef_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh physicsV6_caf
-
-
-test 133
-  name PrepareMenuKeys_mcV6_caf
-  doc Prepares SMKs created from the All*T_mcV6_caf tests
-  pre_condition test -e ../HLT_mcV6_caf/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_mcV6_caf/l2_Default_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/ef_Default_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh mcV6_caf 
-
-test 134
-  name PrepareMenuKeys_p1
-  doc Prepares SMKs created from the  All*T_physicsV6_menu test 
-  pre_condition test -e ../HLT_physicsV6_menu/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_physicsV6_menu/l2_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh physicsV6_menu
-
-
-
-
-##Heavy Ion menu tests
-#
-#
-#
-#
-test 159
-  name HLT_HIV4
-  doc athenaHLT standalone with HLT_HIV3 menu on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV4.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV4.root 1 L2
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV4.root
-  athena_cmd athenaHLT.py -o HLT_HIV4 -n 25 -f  '/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data16_hip5TeV.00312649.physics_EnhancedBias.merge.RAW._lb0150._SFO-ALL._0001.data' -c 'testHIV4=True;rerunLVL1=False;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_HIV3._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-test 160
-  name HLT_HIV3
-  doc athenaHLT standalone with HLT_HIV3 menu on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.root 1 L2
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.root
-  athena_cmd athenaHLT.py -o HLT_HIV3 -n 25 -f  '/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_hi.00287270.physics_HardProbes.daq.RAW._lb0122._SFO-1._0001.data' -c 'testHIV3=True;rerunLVL1=False;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_HIV3._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-###################################################################################################################################################
-#0 #Steering Group - extremely fast!
-
-test 161
-  name pureSteering_ecodes
-  doc stand-alone test of the steering with useErrorHandlingMenu
-  joboptions pureSteering_jobOptions.py
-  athena_args -c 'useErrorHandlingMenu=True'
-  regtest TrigSteer_HLT.ResultBuilder REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_pureSteering_ecodes_TrigSteer_HLT.ResultBuilder.reference
-
-test 162
-  name pureSteering_prescaling
-  doc stand-alone test of the steering with the PrescaleMenu
-  joboptions pureSteering_jobOptions.py
-  athena_args -c 'repeat=100; usePrescaleMenu=True'
-  regtest TrigSteer_HLT.TrigChainMoniValidation REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_pureSteering_prescaling_TrigSteer_HLT.ChainMoni.reference
-
-test 163
-  name pureSteering
-  doc stand-alone test of the steering
-  joboptions pureSteering_jobOptions.py
-  regtest TrigSteer_HLT.ResultBuilder REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_pureSteering_TrigSteer_HLT.ResultBuilder.reference
-
-
-##########################
-# Steering test: ROBs access , slow 1h
-
-test 164
-  name AthenaTrigBS_L2EFMerging
-  doc testing trigger results w/wo merging L2/EF, based on AthenaTrigRDO with run_standalone.py
-  joboptions testAthenaL2EFMerging.py
-  athena_args -c 'EvtMax=15; testPhysicsV7=True; BSRDOInput="root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data"' 
-  #athena_args -c 'doHLT=True; useCONDBR2=False; setGlobalTag="COMCOND-HLTP-004-03-VAL-01"; setDetDescr="ATLAS-R1-2012-02-01-00"; EvtMax=15; testPhysicsV6=True; BSRDOInput="root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data"'
-  checklog --config checklogTriggerTest.conf --showexcludestats
-  checkmerge expert-monitoring.root /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/triggertest_AthenaTrigBS_L2EFMerging.root 0 
-  post_command chainDump.py -n -S
-
-
-################################################################################
-# Test of physicsV6 menu for DataSouting 
-################################################################################
-test 170
-  name HLT_physicsV7_DataScouting
-  doc athenaHLT on data with Physics_pp_v6 menu, test output of DataScouting containers 
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n50 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -o ds_test_data_out -c 'testJet=True;testMuon=True;testPhysicsV7=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command trigbs_dumpHltDsData.py -v1 ds_test_data_out._0001.data >> atn_test.log
-
-################################################################################
-# Tests of physicsV7 menu
-################################################################################
-
-test 180
-  name HLT_mcV7
-  doc AthenaHLT on data, with MC_pp_V7 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV7.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV7.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV7.root 
-  athena_cmd athenaHLT.py -o HLT_mcV7 -n 50  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testMCV7=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-  post_command chainDump.py -n -S
-
-test 181
-  name HLT_physicsV7
-  doc athenaHLT on data with Physics_pp_v7 menu currently from 2016 EB data
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7  -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data   -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-  extra_failure_codes ATHENA_ERROR_IN_LOG
-
-test 182
-  name HLT_physicsV7_FTK
-  doc athenaHLT on data with Physics_pp_v7 menu and doFTK currently from 2016 EB data with FTK added
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_FTK.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_FTK.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV7_FTK.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_FTK  -n 75 -f  root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/RAW.11043881._020686.pool.root.1 -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.doFTK=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
diff --git a/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test_ART.conf b/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test_ART.conf
deleted file mode 100644
index 4b8963abde12..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/Testing/TrigP1Test_ART.conf
+++ /dev/null
@@ -1,979 +0,0 @@
-# For a full documentation see:
-# http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/offline/Trigger/TrigValidation/TriggerTest/Testing/trigtest.conf?revision=HEAD&view=markup
-
-
-#
-# Note that references are on /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_
-# the */online/* folder might be merged in the future with offline refernce area
-#
-
-#
-# ART tests migrated from TrigP1Test.conf (contact: Daniele Zanzi @ cern.ch) 
-#
-
-################################################
-# Infrastructure tests
-################################################
-test 1
-  name HelloWorldHLT
-  doc HelloWorld in athenaHLT
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 10 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 AthExHelloWorld/HelloWorldOptions.py
-
-test 2
-  name HelloWorldHLT_run_stop_run
-  doc HelloWorld int athenaHLT with start/stop/start transition
-  stdinfile run-stop-run-saveHist.trans
-  checklog --config checklogTrigP1Test.conf --showexcludestats 
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000001_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH  
-  athena_cmd athenaHLT.py -i -M --rewind -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 AthExHelloWorld/HelloWorldOptions.py
-
-# ART not migrated
-#test 3
-#  name MTMonHistOH
-#  doc Histogram publishing test with OH infrastructure
-#  # note testMonHistOH.py invokes athenaHLT with  MTMonHist.py job options 
-#  # note that MTMonHist.py jo are in the HLT project
-#  pre_command get_joboptions MTMonHist.py
-#  athena_cmd testMonHistOH.py /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/daq.physicsMCppv2.latest.data
-#  checklog --config checklogTrigP1Test.conf --showexcludestats
-
-################################################################################
-# Test of Physics_pp_V5 and Physics_pp_V6 menu, main test of trigger, this is run on the PUs 
-################################################################################
-
-# ART not migrated
-#test 10
-#  name HLT_physicsV5
-#  doc athenaHLT on data with Physics_pp_v5 menu currently from 2015 EB data
-#  filterlog filterREGTEST.py
-#  checklog --config checklogTrigP1Test.conf --showexcludestats
-#  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.reference
-#  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.root
-#  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV5.root 1 HLT
-#  athena_cmd athenaHLT.py   -o HLT_physicsV5  -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_13TeV.00276952.physics_EnhancedBias.merge.RAW._lb0113._SFO-ALL._0001.data    -c 'testPhysicsV5=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-##  post_command save_to_refdir.sh HLT_physicsV5._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-#  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-#  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-test 13
-  name HLT_physicsV7_rerunLVL1
-  doc athenaHLT on data with Physics_pp_v7 menu currently from 2016 EB data  
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
- # TODO: fix reference
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_rerunLVL1/trigp1test_HLT_physicsV7_rerunLVL1.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_rerunLVL1/trigp1test_HLT_physicsV7_rerunLVL1.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_rerunLVL1/trigp1test_HLT_physicsV7_rerunLVL1.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_rerunLVL1  -n 25 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;rerunLVL1=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_rerunLVL1._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-# TODO: fix reference
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_rerunLVL1/trigp1test_checkHistathenaHLT.reference 
-
-
-test 15
-  name HLT_physicsV6_L1Topo_sim
-  doc athenaHLT on simulated data including L1Topo ROI & DAQ ROB decoding with Physics_pp_v6 menu, data is cosmics from M7 with sim L1Topo ROBFs merged in, override ROB Ids as sim data used different convention
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.reference
-  customrootcomp rootcomp_l1topo.sh /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.root
-  extra_failure_codes ROOTCOMP_MISMATCH
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_L1Topo_sim.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV6_L1Topo_sim  -n 10 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data14_cos.00247688_mergedL1Topo._0001.data --extra-l1r-robs '[9502848,9502864]' --log-level INFO,ERROR -c 'testPhysicsV6=True;doValidation=True;L1TopoCheck=True;fpeAuditor=True'  -C 'L1TopoROBMonitor.L1TopoDAQROBIDs=[0x00910001,0x00910011];  L1TopoROBMonitor.L1TopoROIROBIDs=[0x00910080,0x00910090]; L1TopoROBMonitor.useDetMask=False; svcMgr.ByteStreamAddressProviderSvc.TopoProcModuleID=[0x80,0x90]; from L1TopoByteStream.L1TopoByteStreamConf import L1TopoByteStreamTool; l1TopoByteStreamTool=L1TopoByteStreamTool(); l1TopoByteStreamTool.ROBSourceIDs=[0x00910001,0x00910011]; svcMgr.ToolSvc+=l1TopoByteStreamTool' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_command plotL1TopoROBMonHist.py expert-monitoring.root 2>/dev/null
-
-test 16
-  name HLT_physicsV7_L1Topo_data
-  doc athenaHLT on online test data including L1Topo ROI & DAQ ROB decoding with Physics_pp_v7 menu on events selected from data15_13TeV.00278748.physics_Main
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_L1Topo_data/trigp1test_HLT_physicsV7_L1Topo_data.reference
-  customrootcomp rootcomp_l1topo.sh  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_L1Topo_data/trigp1test_HLT_physicsV7_L1Topo_data.root
-  extra_failure_codes ROOTCOMP_MISMATCH
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_L1Topo_data/trigp1test_HLT_physicsV7_L1Topo_data.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_L1Topo_data  -n 10 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_13TeV.00278748.physics_Main.daq.RAW._lb0103._SFO-1._0001_selected.data --log-level INFO,ERROR -c 'testPhysicsV7=True;doValidation=True;L1TopoCheck=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_command plotL1TopoROBMonHist.py expert-monitoring.root 2>/dev/null
-
-test 17
-  name HLT_physicsV6
-  doc athenaHLT on data with Physics_pp_v6 menu currently from 2015 EB data
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV6  -n 75 -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data   -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-test 18
-  name Reco_tf_physicsV7_savedBS
-  doc Reco_tf on saved output from HLT_physicsV7
-  pre_condition if [[ $(find ../HLT_physicsV7/HLT_physicsV7._0001.data -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../HLT_physicsV7/HLT_physicsV7._0001.data ; else test -e non_existing_file ; fi   
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py --inputBSFile ../HLT_physicsV7/HLT_physicsV7._0001.data --maxEvents 2 --autoConfiguration='everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01" --preExec 'r2e:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.useDynamicAlignFolders.set_Value_and_Lock(True)' --outputESDFile HLT_physicsV7.ESD.pool.root
-  post_command checkFile.py HLT_physicsV7.ESD.pool.root > ESD.txt
-  post_command perl -i.clean -pe 's/^[\d:]+ //' log.RAWtoESD 
-  post_command cat log.RAWtoESD >> Reco_tf_physicsV7_savedBS_test.log 
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-
-################################################################################
-# Test of  MC_pp_V5 menu, will include "slow" cosmics chains from physics_pp_v5 menu--> need to split this test in two  
-# for the time being run this on enhanced bias, will probably time out
-################################################################################
-
-test 11
-  name HLT_mcV5
-  doc AthenaHLT on data, with MC_pp_V5 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV5.root 
-  athena_cmd athenaHLT.py -o HLT_mcV5 -n 75  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testMCV5=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-#  post_command save_to_refdir.sh HLT_mcV5._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-################################################################################
-# Test of  MC_pp_V6 menu, will include "slow" cosmics chains from physics_pp_v5 menu--> need to split this test in two  
-# for the time being run this on enhanced bias, will probably time out
-################################################################################
-
-test 12
-  name HLT_mcV6
-  doc AthenaHLT on data, with MC_pp_V6 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_mcV6.root 
-  athena_cmd athenaHLT.py -o HLT_mcV6 -n 50  -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -c 'testMCV6=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-#  post_command save_to_refdir.sh HLT_mcV6._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-
-################################################
-# Athena test on format writing RDO to BS and comparison to athenaHLT run
-################################################
-
-
-test 20
-  name AthenaP1RDO
-  doc Athena on Monte Carlo events, produces xml file for menu
-  athena_cmd athena.py -c "doRates=False" TrigP1Test/testAthenaP1RDO.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  regtest TrigSteer_HLT.TrigChainMoniValidation  REGTEST /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO_HLT.TrigChainMoniValidation.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_AthenaP1RDO.root 1 HLT
-  pre_command RecExCommon_links.sh
-  post_command chainDump.py -n -S
-
-test 21
-  name AthenaP1RDOtoBS
-  doc Run RDO->BS using ttbar MC file
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-# TODO: fix references
-  fullregtest    REGTEST /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/AthenaP1RDOtoBS/trigp1test_AthenaP1RDOtoBS.reference
-  rootcomp /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/AthenaP1RDOtoBS/trigp1test_AthenaP1RDOtoBS.root
-  athena_cmd athena.py -c 'setMenu="MC_pp_v7";writeBS=True;rerunLVL1=True;jp.AthenaCommonFlags.EvtMax.set_Value_and_Lock(10);PoolRDOInput=["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/valid1.110401.PowhegPythia_P2012_ttbar_nonallhad.recon.RDO.e3099_s2578_r7572_tid07644622_00/RDO.07644622._000001.pool.root.1"];myBSRDOOutput="AppName=Athena, OutputDirectory=./, FileTag="+setMenu+", Run=110401"' TriggerRelease/Trigger_topOptions_writeBS.py
-  post_command test -e  data_test.00110401.Single_Stream.daq.RAW._lb0050._Athena._0001.data
-
-test 22
-  name AthenaP1BS_standalone
-  doc Standalone HLT running in athena and compare to athenaHLT
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/AthenaP1BS_standalone/trigp1test_AthenaP1BS_standalone.reference
-  rootcomp ../HLT_physicsV7/expert-monitoring.root expert-monitoring.root
-  checkcount ../HLT_physicsV7/expert-monitoring.root 0 BOTH 
-  athena_cmd athena.py -c "BSRDOInput='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1';testPhysicsV7=True;writeBS=True;rerunLVL1=True;doValidation=True;EvtMax=25" TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-
-
-
-###########################################################
-# Full menu tests on Monte Carlo using AthenaHLT
-###########################################################
-#
-
-test 30
-  name HLT_MC_BSfromRDO
-  doc athenaHLT on MC with MC menu, input from AthenaP1RDOtoBS
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.root 0 BOTH
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_MC_BSfromRDO.root
-# note ._0001.data is added automatically
-  pre_condition test -e ../AthenaP1RDOtoBS/data_test.00105200.Single_Stream.daq.RAW._lb0016._Athena._0001.data
-  # The geometry and conditions tag need to match the ones used in AthenaP1RDOtoBS
-  athena_cmd athenaHLT.py -l DEBUG -f ../AthenaP1RDOtoBS/data_test.00105200.Single_Stream.daq.RAW._lb0016._Athena._0001.data -c 'HLTOutputLevel=DEBUG;testMCV6MC=True;rerunLVL1=True;setDetDescr="ATLAS-R1-2012-02-00-00";setGlobalTag="OFLCOND-DR-BS7T-ANom-11";setPrescale="";doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-
-######################################################################################
-#
-# Tests for T0 Reconstruction on a BS file produced with P1HLT cache currently, running on cosmics during M7 and M8 included in physics_v6
-# 
-######################################################################################
-
-
-# todo: get automatically what is currently running from ami
-# conditionsTag and geometryVersion need to be updated from time to time
-test 41
-  name Trigreco_physicsV7_currentT0
-  doc Trig_reco_tf with current T0 config
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix file, conditionsTag, geometryVersion
-  #athena_cmd Trig_reco_tf.py --inputBS_RDOFile "root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/data15_13TeV.00272531.physics_Main.daq.RAW._lb0104._SFO-5._0001.data" --precommand "testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True" --maxEvents '15' --outputBSFile "tmp.BS" ; source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py --inputBSFile "tmp.BS" --athenaopts=" --perfmon "  --outputHISTFile 'myHIST.root' --outputAODFile 'myAOD.pool.root' --outputESDFile 'myESD.pool.root' --outputNTUP_MUONCALIBFile 'myNTUP_MUONCALIB.root' --autoConfiguration='everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01" --preExec 'r2e:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.useDynamicAlignFolders.set_Value_and_Lock(True)' --triggerConfig r2e=DATARECO:REPR
-  athena_cmd export AMIConfig=$(cat /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/T0Config.txt); echo $AMIConfig; Trig_reco_tf.py --inputBS_RDOFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1" --precommand "testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True" --maxEvents '15' --outputBSFile "tmp.BS"; Reco_tf.py --asetup "RAWtoALL:Athena,21.0,latest" --inputBSFile "tmp.BS" --athenaopts=" --perfmon "  --outputHISTFile 'myHIST.root' --outputAODFile 'myAOD.pool.root' --outputESDFile 'myESD.pool.root' --AMIConfig "${AMIConfig}"
-
-  post_command checkFile.py myAOD.pool.root > AOD.txt 
-
-
-test 42
-  name  TrigEDMCheck_physicsV7_currentT0_ESD
-  doc EDMCheck on TrigEDMCheck_physicsV7_currentT0
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/TrigEDMCheck_physicsV7_currentT0_ESD/trigp1test_TrigEDMCheck_physicsV7_currentT0.reference  
-  pre_condition if [[ $(find ../Trigreco_physicsV7_currentT0/myESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trigreco_physicsV7_currentT0/myESD.pool.root ; else test -e non_existing_file ; fi
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["../Trigreco_physicsV7_currentT0/myESD.pool.root"]' 
-
-test 43
-  name  TrigEDMCheck_physicsV7_currentT0_AOD
-  doc EDMCheck on TrigEDMCheck_physicsV7_currentT0
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/TrigEDMCheck_physicsV7_currentT0_AOD/trigp1test_TrigEDMCheck_physicsV7_currentT0.reference  
-  pre_condition if [[ $(find ../Trigreco_physicsV7_currentT0/myAOD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trigreco_physicsV7_currentT0/myAOD.pool.root ; else test -e non_existing_file ; fi
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["../Trigreco_physicsV7_currentT0/myAOD.pool.root"]' 
-
-
-### this does not work due to conditions...
-test 44
-  name  Trig_reco_mcV6_currentT0
-  doc Trig_reco_tf with current T0 config
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd Trig_reco_tf.py --inputBS_RDOFile=/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data12_8TeV.00212967.physics_EnhancedBias.merge_eb_zee_zmumu_cc.RAW._lb0291._SFO-5._0001.data --precommand 'testMCV6=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00"' --outputHISTFile 'myHIST.root' --outputAODFile 'myAOD.pool.root' --outputESDFile 'myESD.pool.root' --outputNTUP_MUONCALIBFile 'myNTUP_MUONCALIB.root' --asetup r2e:AtlasProduction,20.7.X.Y,latest_copied_release e2a:AtlasProduction,20.7.X.Y,latest_copied_release --beamType 'cosmics' --autoConfiguration='everything' --maxEvents '15' --preExec 'r2e:from CaloRec.CaloCellFlags import jobproperties;jobproperties.CaloCellFlags.doLArHVCorr=False;jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr.set_Value_and_Lock(False);from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doInnerDetectorCommissioning.set_Value_and_Lock(True);InDetFlags.useBroadClusterErrors.set_Value_and_Lock(False);DQMonFlags.doStreamAwareMon=False;DQMonFlags.enableLumiAccess=False;from JetRec.JetRecFlags import jetFlags;jetFlags.useTracks=False;DQMonFlags.doCTPMon=False;' --geometryVersion all:ATLAS-R2-2015-02-00-00 --conditionsTag all:CONDBR2-BLKPA-2015-02 --triggerConfig r2e=DATARECO:REPR  
-  post_command checkFile.py myESD.pool.root > ESD.txt 
-
-
-test 45
-  name  TrigEDMCheck_mcV6_currentT0
-  doc EDMCheck on Trig_reco_mcV6_currentT0
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_TrigEDMCheck_mcV6_currentT0.reference  
-  pre_condition test if [[ $(find ../Trig_reco_mcV6_currentT0/myESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../Trig_reco_mcV6_currentT0/myESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../Trig_reco_mcV6_currentT0/myESD.pool.root ESD.pool.root
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["ESD.pool.root"]' TrigP1Test/testAthenaP1ESD_TrigEDMCheck_data.py
-
-
-test 46
-  name Trigreco_dbgstream_T0
-  doc Trig_reco_tf using debug_stream setup as is run at T0
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: setup_debugrec.sh on AFS
-  athena_cmd cp /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00291509.physics_Main.daq.RAW._lb0009._SFO-3._0001.data data16_cos.00291509.physics_Main.daq.RAW._lb0009._SFO-3._0001.data ;   source /afs/cern.ch/user/t/trigcomm/public/tzero/setup_debugrec.sh ; python -u `which Trig_reco_tf.py` --argJSON=/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00291509.physics_Main.daq.RAW.job.argdict.json
-
-  post_command  test -e  data16_cos.00291509.physics_Main.debug_rec.daq.RAW.g49._0001.data
-
-
-
-################################################################################
-#  physics_v6 menu on cosmics 2012/2015  
-################################################################################
-
-
-test 49
-  name HLT_physicsV7_COS
-  doc athenaHLT on data with Physics_pp_v7 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS/trigp1test_HLT_physicsV7_COS.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS/trigp1test_HLT_physicsV7_COS.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS/trigp1test_HLT_physicsV7_COS.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_COS  -n 250 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00306147.physics_Main.daq.RAW._lb0494._SFO-4._0001.data  -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  # TODO: fix ref
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS/trigp1test_checkHistathenaHLT.reference
-
-
-
-
-
-test 50
-  name HLT_physicsV6_COS_2012
-  doc athenaHLT standalone with physicsV6 menu on COSMICS 2012
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.reference
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.root 1 HLT
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2012.root 
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2012 -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_cos.00214912.express_express.merge.RAW._lb0184._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doValidation=True;doCosmics=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2012._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-
-
-test 51
-  name HLT_physicsV7_COS_2016MUONS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016MUONS/trigp1test_HLT_physicsV7_COS_2016MUONS.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016MUONS/trigp1test_HLT_physicsV7_COS_2016MUONS.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016MUONS/trigp1test_HLT_physicsV7_COS_2016MUONS.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV7_COS_2016MUONS  -n 100 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00306147.physics_CosmicMuons.merge.RAW._lb0494._SFO-ALL._0001.1  -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS_2016MUONS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  # TODO: fix ref
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016MUONS/trigp1test_checkHistathenaHLT.reference 
-
-
-test 52
-  name HLT_physicsV7_COS_2016IDCOSMICS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2016
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016IDCOSMICS/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016IDCOSMICS/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016IDCOSMICS/trigp1test_HLT_physicsV7_COS_2016IDCOSMICS.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_COS_2016IDCOSMICS   -n 100 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00306147.physics_IDCosmic.merge.RAW._lb0494._SFO-ALL._0001.1   -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7_COS_2016IDCOSMICS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  # TODO: fix ref
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_COS_2016IDCOSMICS/trigp1test_checkHistathenaHLT.reference 
-
-
-test 53
-  name HLT_physicsV6_COS_2015CALO
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from 2015
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015CALO.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2015CALO  -n 100 -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data15_cos.00256721.physics_CosmicCalo.merge.RAW._lb0403._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2015CALO._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-test 54
-  name HLT_physicsV6_COS_2015MBTS
-  doc athenaHLT on data with Physics_pp_v6 menu currently cosmics from M9
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.reference
-  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.root
-  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_physicsV6_COS_2015MBTS.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_physicsV6_COS_2015MBTS  -n 100 -f  root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data15_cos.00257588.physics_L1MinBias.merge.RAW._lb0XXX._SFO-ALL._0001.1  -c 'testPhysicsV6=True;HLTOutputLevel=INFO;doCosmics=True;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV6_COS_2015MBTS._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_checkHistathenaHLT.reference 
-
-
-################################################################################
-#  DB upload tests on Physics_pp_V6 menu  inclusing running from the db (currently not possible as old triggertool has no cmdline option top run old physics_pp lvl1 menu)
-################################################################################
-
-
-
- 
-test 61
-  name HLT_physicsV7_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 75 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_physicsV7_menu  -c 'testPhysicsV7=True;trigBase="Default";doDBConfig=True;enableCostForCAF=True' TriggerRelease/runHLT_standalone.py
-  post_test checkHist histSizes.py -t r0000000000_part_athenaHLT_mon_HLT-Histogramming.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_menu/trigp1test_checkHistathenaHLT.reference
-
-test 60
-  name HLT_HIV5_menu
-  doc Run athenaHLT on all events to create trigger configuration with HIV5 menu with rerunL1
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -o HLT_HIV5_menu -n 50 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1 -c 'testHIV5=True;rerunLVL1=True;trigBase="Default";doDBConfig=True;enableCostForCAF=True;useCONDBR2=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-  post_test checkHist histSizes.py -t r0000000000_part_athenaHLT_mon_HLT-Histogramming.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_menu/trigp1test_checkHistathenaHLT.reference
-
-
-test 62
-  name UploadMenuKeys
-  doc Generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB.
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_physicsV7 
-
-test 59
-  name UploadMenuKeys_HI
-  doc Generates and uploads SMKs created with HIV5 rerunL1 from the HLT first and compares after rerun jobs from DB.
-  pre_condition test -e ../HLT_HIV5_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_HIV5
-
-test 70
-  name UploadMenuKeys_ART
-  doc Uploads SMKs created from the HLT with rerunL1
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_physicsV7_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_physicsV7 --uploadPrescale --art
-  post_command cp prescaleKeys_17000.txt prescaleKeys_9000.txt /eos/atlas/atlascerngroupdisk/data-art/grid-input/TrigP1Test/.
-
-test 63
-  name HLT_physicsV7_menu_checkkeys 
-  doc Recreate trigger configuration and compare with configuration from HLT_physicsV7_menu
-  athena_cmd athenaHLT.py -M -n 75 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_physicsV7_menu_checkkeys -c 'testPhysicsV7=True;trigBase="Default";doDBConfig=True;enableCostForCAF=True' TriggerRelease/runHLT_standalone.py
-
-test 58
-  name HLT_HIV5_menu_checkkeys
-  doc Recreate trigger configuration and compare with configuration from HLT_HIV5_menu
-  athena_cmd athenaHLT.py -M -o HLT_HIV5_menu_checkkeys -n 50 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1 -c 'testHIV5=True;rerunLVL1=True;trigBase="Default";doDBConfig=True;enableCostForCAF=True;useCONDBR2=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-
-
-test 64
-  name CheckKeysV7
-  doc compare the SMK created from the HLT_physicsV7 first and rerun jobs 
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu/outputHLT*xml
-  pre_condition test -e ../HLT_physicsV7_menu_checkkeys/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu_checkkeys/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_menu_checkkeys/outputHLT*xml
-  checklog --config checklogTrigP1Test.conf --showexcludestats | grep -v "checking for"
-  athena_cmd testCheckKeys.sh --menu HLT_physicsV7
-
-test 57
-  name CheckKeysHIV5
-  doc compare the SMK created from the HLT_HIV5 first and rerun jobs
-  pre_condition test -e ../HLT_HIV5_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu/outputHLT*xml
-  pre_condition test -e ../HLT_HIV5_menu_checkkeys/ef_Default_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu_checkkeys/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_HIV5_menu_checkkeys/outputHLT*xml
-  checklog --config checklogTrigP1Test.conf --showexcludestats | grep -v "checking for"
-  athena_cmd testCheckKeys.sh --menu HLT_HIV5
-
-
-test 65
-  name HLT_physicsV7_menu_rerundb
-  doc athenaHLT from DB, use HLT_physicsV7 as reference
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  rootcomp   ../HLT_physicsV7_menu/r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000000_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH  
-  pre_condition test -e ../UploadMenuKeys/exportMenuKeys.sh
-  athena_cmd unset FRONTIER_SERVER; source ../UploadMenuKeys/exportMenuKeys.sh; athenaHLT.py -M -n 75 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_physicsV7_menu_rerundb -J TrigConf::HLTJobOptionsSvc --use-database --db-type "Coral" --db-server "TRIGGERDBATN" --db-smkey ${smk} --db-hltpskey ${hltpsk} --db-extra "{'lvl1key': ${l1psk}}"
-  post_command chainDump.py -n -S
-  post_test RunMsg check_msg_stat.py --showignored --config checkMsgStat_TrigP1Test.conf $logfile
-
-test 56
-  name HLT_HIV5_menu_rerundb
-  doc athenaHLT from DB, use HLT_HIV5 as reference
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  rootcomp   ../HLT_HIV5_menu/r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000000_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH
-  pre_condition test -e ../UploadMenuKeys_HI/exportMenuKeys.sh
-  athena_cmd unset FRONTIER_SERVER; source ../UploadMenuKeys_HI/exportMenuKeys.sh; athenaHLT.py -M -o HLT_HIV5_menu_rerundb -n 50 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1 -J TrigConf::HLTJobOptionsSvc --use-database --db-type "Coral" --db-server "TRIGGERDBATN" --db-smkey ${smk} --db-hltpskey ${hltpsk} --db-extra "{'lvl1key': ${l1psk}}"
-  post_command chainDump.py -n -S
-  post_test RunMsg check_msg_stat.py --showignored --config checkMsgStat_TrigP1Test.conf $logfile 
-
-test 66
-  name HLT_physicsV6_prescaleChange
-  doc Test of HLT prescale change
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  pre_condition test -e ../UploadMenuKeys/exportMenuKeys.sh
-  pre_condition test -e ../UploadMenuKeys/prescales.txt
-  pre_command ln -sf ../UploadMenuKeys/prescales.txt
-  pre_command get_files -jo testPrescaleChange_postconfig.py
-  athena_cmd source ../UploadMenuKeys/exportMenuKeys.sh; athenaHLT.py -Z TrigP1Test.PrescaleChange -C 'include("testPrescaleChange_postconfig.py");fpeAuditor=True' -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -J TrigConf::HLTJobOptionsSvc --use-database "DBServer=TRIGGERDBATN:Instance=L2:DBSMKey=${smk}:DBHLTPSKey=${hltpsk}:DBLVL1PSKey=${l1psk}"
-
-test 67
-  name TriggerDBAccessTest
-  doc Access TriggerDB using Oracle and Frontier and compare
-# pre_condition test -e ../UploadMenuKeys/exportMenuKeys.sh
-  athena_cmd testAccessDBAndCompare.sh
-
-
-## Compare JO vs DB also with rerunLvl1 to test the reprocessing on run1 data
-
-test 71
-  name HLT_physicsV7_rerunLVL1_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 25  -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_physicsV7_rerunLVL1_menu  -c 'doDBConfig=True;testPhysicsV7=True;rerunLVL1=True;trigBase="Default";enableCostForCAF=True' TriggerRelease/runHLT_standalone.py
-
-test 72
-  name UploadMenuKeys_rerunLVL1
-  doc Generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB.
-  pre_condition test -e ../HLT_physicsV7_rerunLVL1_menu/ef_Default_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_rerunLVL1_menu/ef_Default_setup_setup.txt 
-  pre_condition test -e ../HLT_physicsV7_rerunLVL1_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_physicsV7_rerunLVL1
-
-
-test 73
-  name HLT_physicsV7_rerunLVL1_menu_rerundb
-  doc athenaHLT from DB, use HLT_physicsV7 as reference
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  rootcomp   ../HLT_physicsV7_rerunLVL1_menu/r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000000_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH  
-  pre_condition test -e ../UploadMenuKeys_rerunLVL1/exportMenuKeys.sh
-  athena_cmd unset FRONTIER_SERVER; source ../UploadMenuKeys_rerunLVL1/exportMenuKeys.sh; athenaHLT.py -M -n 25 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_physicsV7_rerunLVL1_menu_rerundb -J TrigConf::HLTJobOptionsSvc --use-database --db-type "Coral" --db-server "TRIGGERDBATN" --db-smkey ${smk} --db-hltpskey ${hltpsk} --db-extra "{'lvl1key': ${l1psk}}"
-  post_command chainDump.py -n -S
-  post_test RunMsg check_msg_stat.py --showignored --config checkMsgStat_TrigP1Test.conf $logfile
-
-test 74
-  name HLT_mcV7_rerunLVL1_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 1  -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_mcV7_rerunLVL1_menu  -c 'doDBConfig=True;testMCV7=True;rerunLVL1=True;trigBase="Default";enableCostForCAF=True;doValidation=True' TriggerRelease/runHLT_standalone.py
-
-test 75
-  name UploadMenuKeys_MC_rerunLVL1
-  doc Generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB.
-  pre_condition test -e ../HLT_mcV7_rerunLVL1_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_mcV7_rerunLVL1_menu/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_mcV7_rerunLVL1_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_mcV7_rerunLVL1 --notUploadMenu
-
-test 76
-  name HLT_mcV7_menu
-  doc Run athenaHLT on all events to create trigger configuration
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -M -n 1 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o HLT_mcV7_menu  -c 'testMCV7=True;trigBase="Default";doDBConfig=True;enableCostForCAF=True;doValidation=True' TriggerRelease/runHLT_standalone.py
-
-test 77
-  name UploadMenuKeys_MC
-  doc Generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB.
-  pre_condition test -e ../HLT_mcV7_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_mcV7_menu/ef_Default_setup_setup.txt
-  pre_condition test -e ../HLT_mcV7_menu/outputHLT*xml
-  athena_cmd testUploadMenuKeys.sh --menu HLT_mcV7 --notUploadMenu
-
-
-#############################################################################################
-## Transform tests on BS from main  HLT_physicsV7 test
-## conditionsTag and geometryVersion need to be updated from time to time
-#############################################################################################    
-test 80
-  name RAWtoESD_physicsV7
-  doc RAWtoESD on output from HLT_physicsV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  pre_condition test -e '../HLT_physicsV7/HLT_physicsV7._0001.data'
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; Reco_tf.py  --preExec 'from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.useDynamicAlignFolders.set_Value_and_Lock(True);' --autoConfiguration 'everything' --conditionsTag "CONDBR2-BLKPA-2017-11" --geometryVersion "ATLAS-R2-2016-01-00-01"  --inputBSFile ../HLT_physicsV7/HLT_physicsV7._0001.data   --maxEvents 5 --outputESDFile RAWtoESD.pool.root
-  post_command checkFile.py RAWtoESD.pool.root > ESD.txt
-
-test 81
-  name TrigEDMCheck_physicsV7
-  doc EDM checker on ESD from RAWtoESD_physicsV7
-  joboptions testAthenaP1ESD_TrigEDMCheck_data.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest    REGTEST  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/TrigEDMCheck_physicsV7/trigp1test_TrigEDMCheck_physicsV7.reference
-  pre_condition if [[ $(find ../RAWtoESD_physicsV7/RAWtoESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../RAWtoESD_physicsV7/RAWtoESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../RAWtoESD_physicsV7/RAWtoESD.pool.root ESD.pool.root
-  athena_cmd source $AtlasSetup/scripts/asetup.sh latest,Athena,21.0 ; athena.py -c 'fileList=["ESD.pool.root"]' 
-
-test 82
-  name TrigDecTool_physicsV7
-  doc  Check of TrigDec for events produced by RAWtoESD_physicsV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest    REGTEST /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/TrigDecTool_physicsV7/trigp1test_TrigDecTool_physicsV7.reference
-  pre_condition if [[ $(find ../RAWtoESD_physicsV7/RAWtoESD.pool.root -type f -size +1000000c 2>/dev/null) ]] ; then test -e ../RAWtoESD_physicsV7/RAWtoESD.pool.root ; else test -e non_existing_file ; fi
-  pre_command ln -s ../RAWtoESD_physicsV7/RAWtoESD.pool.root ESD.pool.root
-  athena_cmd athena.py -c 'fileList=["ESD.pool.root"]' TrigP1Test/testAthenaP1ESD_TrigDecTool.py
-
-#test 83: Reco_tf_mcV7_savedBS got migrated to test 18: Reco_tf_physicsV7_savedBS 
-test 83
-  name Reco_tf_mcV7_savedBS
-  doc Reco_tf on saved output from HLT_mcV7
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  pre_command linktoP1HLT.sh mcV7   
-  athena_cmd Reco_tf.py --inputBSFile link_to_file_from_P1HLT.data --maxEvents 10   --outputESDFile data12_mcV7.ESD.pool.root
-  
-
-#############################################################################################
-## Infrastructure tests on run/stop/run transitions
-############################################################################################# 
-test 100
-  name HLT_physicsV7_run_stop_run
-  doc athenaHLT on data with physics_pp_V7 menu with stop/start transition
-  stdinfile run-stop-run-saveHist.trans
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  customregtest regtest_multirun.sh atn_test.log
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000001_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH ATHENA_REGTEST_FAILED  
-  athena_cmd athenaHLT.py -i -M --rewind -n 50 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-
-#############################################################################################
-## Additional Infrastructure tests 
-#############################################################################################
-
-# mrammens: localhost partition test goes to a new test suite-- remove this test here 
-test 111
-  name AllPartition_physicsV6
-  doc Physics_pp_v4 menu in localhost L2+EF partition
-  joboptions runHLT_standalone.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd part_runTest.sh part_lhl2ef 
-  customregtest part_regtest.sh ../HLT_physicsV6/HLT_physicsV6.reference.new ../HLT_physicsV6/HLT_physicsV6.reference.new  
-  customrootcomp part_rootcomp.sh ../HLT_physicsV6/expert-monitoring.root  ../HLT_physicsV6/expert-monitoring.root
-  post_command cleanuplog.sh runHLT_standalone_test.log
-
-test 112
-  name HLT_physicsV7_magField_on_off_on
-  doc athenaHLT on data with physicsV7 menu with On and Off magnetic field transition
-  pre_command  get_files -jo setMagFieldCurrents.py
-  stdinfile magFieldOnOff.trans
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  customregtest regtest_multirun.sh atn_test.log 1 3
-  customrootcomp rootcomp_stopstart.sh r0000000000_part_athenaHLT_mon_HLT-Histogramming.root r0000000002_part_athenaHLT_mon_HLT-Histogramming.root
-  extra_failure_codes ROOTCOMP_MISMATCH ATHENA_REGTEST_FAILED  
-  athena_cmd athenaHLT.py -i -M --rewind -n 50 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  
-
-test 113
-  name HLT_physicsV7_beamspot
-  doc Test of beamspot udpate with athenaHLT
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # DO NOT change the number of events for this test
-  athena_cmd athenaHLT.py -Z TrigP1Test.BeamSpotUpdate -n 50 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -c 'testPhysicsV7=True;doValidation=True;BeamspotFromSqlite=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-
-test 109
-  name HLT_physicsV7_ROSsim_17000
-  doc athenaHLT on data with physicsV7 menu with ROS simulation. It uses PS keys generated with rerunL1
-  pre_condition test -e ../UploadMenuKeys_ART/prescaleKeys_17000.txt
-  pre_command cp /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ATLASros2rob2018.py .
-  athena_cmd trigp1test_prescaleForROSsim.py --nevents 600 --file /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 --ros2rob ATLASros2rob2018 --keys ../UploadMenuKeys_ART/prescaleKeys_17000.txt
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_17000/trigp1test_HLT_physicsV7_ROSsim_17000.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_17000/trigp1test_HLT_physicsV7_ROSsim_17000.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_17000/trigp1test_HLT_physicsV7_ROSsim_17000.root 0 HLT
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs 
-  post_test ROStest grep "ROS-" atn_test.log; cp post_test_ROStest.log ROStest.reference.new; diff ROStest.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_17000/trigp1test_ROStest.reference 
-
-test 110
-  name HLT_physicsV7_ROSsim_9000
-  doc athenaHLT on data with physicsV7 menu with ROS simulation. It uses PS keys generated with rerunL1
-  pre_condition test -e ../UploadMenuKeys_ART/prescaleKeys_9000.txt
-  pre_command cp /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ATLASros2rob2018.py .
-  athena_cmd trigp1test_prescaleForROSsim.py --nevents 600 --file /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 --ros2rob ATLASros2rob2018 --keys ../UploadMenuKeys_ART/prescaleKeys_9000.txt
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_9000/trigp1test_HLT_physicsV7_ROSsim_9000.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_9000/trigp1test_HLT_physicsV7_ROSsim_9000.root          
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_9000/trigp1test_HLT_physicsV7_ROSsim_9000.root 0 HLT
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs                                               
-  post_test ROStest grep "ROS-" atn_test.log; cp post_test_ROStest.log ROStest.reference.new; diff ROStest.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ROSsim_9000/trigp1test_ROStest.reference
-
-test 114
-  name HLT_physicsV6_nocache
-  doc athenaHLT on data with physics_pp_v6 menu, no caching in steering, use HLT_physicsV6 as reference
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  checkcount ../HLT_physicsV6/expert-monitoring.root 0 HLT
-  athena_cmd athenaHLT.py -f root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data -oHLT_physicsV6_nocache  -c 'testPhysicsV6=True;noCaching=True;HLTOutputLevel=INFO;doValidation=True;useCONDBR2=False;setGlobalTag="COMCOND-HLTP-004-03-VAL-01";setDetDescr="ATLAS-R1-2012-02-00-00";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 115
-  name tfTestPPV6
-  doc Check tf for menu PP V6 data
-  pre_command xrdcp root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data .
-  pre_condition test -e ../UploadMenuKeys/exportMenuKeys.sh
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd source ../UploadMenuKeys/exportMenuKeys.sh; BatchHLTTrf_wrap.py inputBSFile=data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data outputRAWFile=RAW.999999._000001.data.1 doStreaming=True filters="express" stream_out=debug connection=TRIGGERDBATN smk=${smk} lvl1ps=${l1psk} hltps=${hltpsk} outputNTUP_TRIGCOSTEFFile=NTUP_TRIGCOSTEF.root outputNTUP_TRIGCOSTL2File=NTUP_TRIGCOSTL2.root outputNTUP_TRIGRATEEFFile=NTUP_TRIGRATEEF.root outputNTUP_TRIGRATEL2File=NTUP_TRIGRATEL2.root outputHIST_HLTMONEFFile=HIST_HLTMONEF.root outputHIST_HLTMONL2File=HIST_HLTMONL2.root max_events=10
-
-
-
-################################################################################
-# Test of ALFA
-#################################################################################
-
-
-
-test 120
-  name HLT_physicsV7_ALFAMon
-  doc athenaHLT with ALFA monitoring enabled, with Physics_pp_v6 menu, on run 2 data with ALFA in (see ATR-12448)
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ALFAMon/trigp1test_HLT_physicsV7_ALFAMon.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ALFAMon/trigp1test_HLT_physicsV7_ALFAMon.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_ALFAMon/trigp1test_HLT_physicsV7_ALFAMon.root 1 HLT
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_ALFAMon  -n 105 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_13TeV.00277025.physics_MinBias.merge.RAW._lb0500._SFO-1._0001.1 --log-level INFO,ERROR -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;enableALFAMon=True;trigBase="Default";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs  
-
-test 121
-  name HLT_physicsV7_AFP
-  doc athenaHLT on data with AFP included (see ATR-14776)
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_AFP/trigp1test_HLT_physicsV7_AFP.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_AFP/trigp1test_HLT_physicsV7_AFP.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_AFP/trigp1test_HLT_physicsV7_AFP.root 1 HLT
-  #TODO: fix file
-  athena_cmd athenaHLT.py  -o HLT_physicsV7_AFP  -n 105 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_13TeV.00309346.physics_Main.daq.RAW._lb0126._SFO-5._0002.data --log-level INFO,ERROR -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;trigBase="Default";fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-
-################################################################################
-# Test of mcV6 menu for CAF reprocessing 
-################################################################################
-
-test 130
-  name HLT_mcV6_caf
-  doc athenaHLT on data with MC_pp_V6 menu for caf reprocessing  
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 1 -M -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data  -oHLT_mcV6_caf  -c 'testMCV6=True;caf=True;trigBase="Default";doDBConfig=True;rerunLVL1=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 131
-  name HLT_physicsV6_caf
-  doc athenaHLT on data with Physics_pp_V6 menu for caf reprocessing  
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n 1 -M -f /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data17_13TeV.00327265.physics_eb_zmm_egz.merged.RAW.selected._0001.data -oHLT_physicsV6_caf  -c 'testPhysicsV6=True;caf=True;trigBase="Default";doDBConfig=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-
-test 132
-  name PrepareMenuKeys_physicsV6_caf
-  doc Prepares SMKs created from the HLT_physicsV6_caf  tests
-  pre_condition test -e ../HLT_physicsV6_caf/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_physicsV6_caf/l2_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/ef_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_caf/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh physicsV6_caf
-
-
-test 133
-  name PrepareMenuKeys_mcV6_caf
-  doc Prepares SMKs created from the All*T_mcV6_caf tests
-  pre_condition test -e ../HLT_mcV6_caf/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_mcV6_caf/l2_Default_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/ef_Default_setup.txt
-  pre_condition test -e ../HLT_mcV6_caf/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh mcV6_caf 
-
-test 134
-  name PrepareMenuKeys_p1
-  doc Prepares SMKs created from the  All*T_physicsV6_menu test 
-  pre_condition test -e ../HLT_physicsV6_menu/outputHLTconfig_L2PU-1.xml
-  pre_condition test -e ../HLT_physicsV6_menu/l2_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/l2_Default_setup_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/ef_Default_setup.txt
-  pre_condition test -e ../HLT_physicsV6_menu/ef_Default_setup_setup.txt
-
-  athena_cmd testPrepareMenuKeysSelfX.sh physicsV6_menu
-
-
-
-
-##Heavy Ion menu tests
-
-
-test 159
-  name HLT_HIV4
-  doc athenaHLT standalone with HLT_HIV4 menu on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV4/trigp1test_HLT_HIV4.reference
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV4/trigp1test_HLT_HIV4.root 1 L2
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV4/trigp1test_HLT_HIV4.root
-  athena_cmd athenaHLT.py -o HLT_HIV4 -n 50 -f  '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_hip5TeV.00312649.physics_EnhancedBias.merge.RAW._lb0150._SFO-ALL._0001.data' -c 'testHIV4=True;rerunLVL1=True;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_HIV3._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S
-
-test 160
-   name HLT_HIV5
-   doc athenaHLT standalone with HLT_HIV5 menu on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5/trigp1test_HLT_HIV5.reference
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5/trigp1test_HLT_HIV5.root 1 L2
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5/trigp1test_HLT_HIV5.root
-  athena_cmd athenaHLT.py -o HLT_HIV5 -n 50 -f  '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1' -c 'testHIV5=True;rerunLVL1=True;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-test 185
-   name HLT_HIV5_FTK
-   doc athenaHLT standalone with HIV5 menu with doFTK on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_FTK/trigp1test_HLT_HIV5_FTK.reference
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_FTK/trigp1test_HLT_HIV5_FTK.root 1 L2
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_FTK/trigp1test_HLT_HIV5_FTK.root
-  athena_cmd athenaHLT.py -o HLT_HIV5_FTK -n 50 -f  '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1' -c 'testHIV5=True;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.doFTK=True;rerunLVL1=True;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-
-
-test 165
-   name HLT_MCHIV5
-   doc athenaHLT standalone with HLT_MCHIV5 menu on a HI sample
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_MCHIV5/trigp1test_HLT_MCHIV5.reference
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_MCHIV5/trigp1test_HLT_MCHIV5.root 1 L2
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_MCHIV5/trigp1test_HLT_MCHIV5.root
-  athena_cmd athenaHLT.py -o HLT_MCHIV5 -n 50 -f  '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data15_hi.00287843.physics_EnhancedBias.merge.RAW._lb0226._SFO-2._0001.1' -c 'testMCHIV5=True;rerunLVL1=True;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-
-# ART not migrated
-#test 160
-#  name HLT_HIV3
-#  doc athenaHLT standalone with HLT_HIV3 menu on a HI sample
-#  filterlog filterREGTEST.py
-#  checklog --config checklogTrigP1Test.conf --showexcludestats
-#  fullregtest REGTEST|WARNING  /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.reference
-#  checkcount /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.root 1 L2
-#  rootcomp   /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/references/ATN/postrel20/latest/trigp1test_HLT_HIV3.root
-#  athena_cmd athenaHLT.py -o HLT_HIV3 -n 25 -f  '/afs/cern.ch/atlas/project/trigger/pesa-sw/validation/atn-test/data15_hi.00287270.physics_HardProbes.daq.RAW._lb0122._SFO-1._0001.data' -c 'testHIV3=True;rerunLVL1=False;setPrescale="None";HLTOutputLevel=INFO;doValidation=True;useCONDBR2=True;fpeAuditor=True;setDetDescr="ATLAS-R2-2015-04-00-00";setGlobalTag="CONDBR2-HLTP-2016-01";from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags;InDetGeometryFlags.useDynamicAlignFolders.set_Value_and_Lock(False)' TriggerRelease/runHLT_standalone.py
-##  post_command save_to_refdir.sh HLT_HIV3._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-#  post_command chainDump.py -n -S
-
-###################################################################################################################################################
-#0 #Steering Group - extremely fast!
-
-test 161
-  name pureSteering_ecodes
-  doc stand-alone test of the steering with useErrorHandlingMenu
-  joboptions pureSteering_jobOptions.py
-  athena_args -c 'useErrorHandlingMenu=True'
-  # TODO: fix reference
-  regtest TrigSteer_HLT.ResultBuilder REGTEST /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/pureSteering_ecodes/trigp1test_pureSteering_ecodes_TrigSteer_HLT.ResultBuilder.reference
-
-test 162
-  name pureSteering_prescaling
-  doc stand-alone test of the steering with the PrescaleMenu
-  joboptions pureSteering_jobOptions.py
-  athena_args -c 'repeat=100; usePrescaleMenu=True'
-  # TODO: fix reference
-  regtest TrigSteer_HLT.TrigChainMoniValidation REGTEST /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/pureSteering_prescaling/trigp1test_pureSteering_prescaling_TrigSteer_HLT.ChainMoni.reference
-
-test 163
-  name pureSteering
-  doc stand-alone test of the steering
-  joboptions pureSteering_jobOptions.py
-  # TODO: fix reference
-  regtest TrigSteer_HLT.ResultBuilder REGTEST /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/pureSteering/trigp1test_pureSteering_TrigSteer_HLT.ResultBuilder.reference
-
-
-##########################
-# Steering test: ROBs access , slow 1h
-
-test 164
-  name AthenaTrigBS_L2EFMerging
-  doc testing trigger results w/wo merging L2/EF, based on AthenaTrigRDO with run_standalone.py
-  joboptions testAthenaL2EFMerging.py
-  athena_args -c 'EvtMax=15; testPhysicsV7=True; BSRDOInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1"' 
-  #athena_args -c 'doHLT=True; useCONDBR2=False; setGlobalTag="COMCOND-HLTP-004-03-VAL-01"; setDetDescr="ATLAS-R1-2012-02-01-00"; EvtMax=15; testPhysicsV6=True; BSRDOInput="root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/trig-daq/validation/test_data/data12_8TeV.00212967.physics_eb_zee_zmumu_cc._0001.data"'
-  checklog --config checklogTriggerTest.conf --showexcludestats
- # TODO: fix reference
- checkmerge expert-monitoring.root /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/AthenaTrigBS_L2EFMerging/triggertest_AthenaTrigBS_L2EFMerging.root 0 
-  post_command chainDump.py -n -S
-
-
-################################################################################
-# Test of physicsV6 menu for DataSouting 
-################################################################################
-test 170
-  name HLT_physicsV7_DataScouting
-  doc athenaHLT on data with Physics_pp_v7 menu, test output of DataScouting containers 
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd athenaHLT.py -n50 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -o ds_test_data_out -c 'testJet=True;testMuon=True;testPhysicsV7=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-  post_command trigbs_dumpHltDsData.py -v1 ds_test_data_out._0001.data >> atn_test.log
-
-################################################################################
-# Tests of physicsV7 menu
-################################################################################
-
-test 180
-  name HLT_mcV7
-  doc AthenaHLT on data, with MC_pp_V7 menu loose prescale set
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix references
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_mcV7/trigp1test_HLT_mcV7.reference
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_mcV7/trigp1test_HLT_mcV7.root 1 HLT
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_mcV7/trigp1test_HLT_mcV7.root 
-  athena_cmd athenaHLT.py -o HLT_mcV7 -n 50  -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1 -c 'testMCV7=True;rerunLVL1=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py 
-  post_command chainDump.py -n -S
-
-test 181
-  name HLT_physicsV7
-  doc athenaHLT on data with Physics_pp_v7 menu currently from 2016 EB data
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix reference
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7/trigp1test_HLT_physicsV7.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7/trigp1test_HLT_physicsV7.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7/trigp1test_HLT_physicsV7.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7  -n 75 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00349335.physics_EnhancedBias.merge.RAW._lb0200._SFO-1._0001.1   -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True' TriggerRelease/runHLT_standalone.py
-#  post_command save_to_refdir.sh HLT_physicsV7._0001.data /afs/cern.ch/atlas/project/trigger/pesa-sw/validation/online/references/ATN/latest
-  post_command chainDump.py -n -S  --rootDirs=TrigSteer_HLT --rootHists=ChainAcceptance --rootHists=NumberOfActiveTEs
-  post_test checkHist histSizes.py -t expert-monitoring.root ; cp post_test_checkHist.log checkHistathenaHLT.reference.new ; diff checkHistathenaHLT.reference.new /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7/trigp1test_checkHistathenaHLT.reference 
-  extra_failure_codes ATHENA_ERROR_IN_LOG
-
-test 182
-  name HLT_physicsV7_FTK
-  doc athenaHLT on data with Physics_pp_v7 menu and doFTK currently from 2016 EB data with FTK added
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_FTK/trigp1test_HLT_physicsV7_FTK.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_FTK/trigp1test_HLT_physicsV7_FTK.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_physicsV7_FTK/trigp1test_HLT_physicsV7_FTK.root 1 HLT
-  athena_cmd athenaHLT.py   -o HLT_physicsV7_FTK  -n 30 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/RAW_FTK.pool.root -c 'testPhysicsV7=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.doFTK=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-test 184
-  name HLT_HIV5_onFTKdata
-  doc athenaHLT on data with FTK simulation with HIV5 menu with doFTK
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  # TODO: fix ref
-  fullregtest REGTEST|WARNING  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_onFTKdata/trigp1test_HLT_HIV5_onFTKdata.reference
-  rootcomp   /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_onFTKdata/trigp1test_HLT_HIV5_onFTKdata.root
-  checkcount /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/ref/latest/HLT_HIV5_onFTKdata/trigp1test_HLT_HIV5_onFTKdata.root 1 HLT
-  athena_cmd athenaHLT.py -o HLT_HIV5_onFTKdata  -n 30 -f  /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/RAW_FTK.pool.root -c 'testHIV5=True;HLTOutputLevel=INFO;doValidation=True;fpeAuditor=True;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.doFTK=True' TriggerRelease/runHLT_standalone.py
-  post_command chainDump.py -n -S
-
-test 183
-  name athenaHLT_LatestRun_MCV7
-  doc athenaHLT on latest available run
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd trigp1test_athenaHLT.py --nfiles=1 --nevents=100 --dir='/eos/atlas/atlastier0/rucio/data18_13TeV/physics_Main/' --modifiers="testMCV7=True;fpeAuditor=True;from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties ; pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True"
-  post_command chainDump.py -n -S 
-
-test 186
-  name athenaHLT_LatestRun_HIV5
-  doc athenaHLT on latest available 2018 HI run
-  filterlog filterREGTEST.py
-  checklog --config checklogTrigP1Test.conf --showexcludestats
-  athena_cmd trigp1test_athenaHLT.py --nfiles=1 --nevents=100 --dir='/eos/atlas/atlastier0/rucio/data18_hi/physics_HardProbes/' --modifiers="testHIV5=True;fpeAuditor=True;from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties ; pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True"
-  post_command chainDump.py -n -S
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/Testing/checklogTrigP1Test.conf b/Trigger/TrigValidation/TrigP1Test/Testing/checklogTrigP1Test.conf
index 075f43bbb4e2..781c353229d2 100644
--- a/Trigger/TrigValidation/TrigP1Test/Testing/checklogTrigP1Test.conf
+++ b/Trigger/TrigValidation/TrigP1Test/Testing/checklogTrigP1Test.conf
@@ -25,9 +25,9 @@ ignore 'IOVSvc\s+WARNING setRange\(CLID,key,range\) for unregistered proxies is
 ignore 'PoolSvc + WARNING Do not allow this ERROR to propagate to physics jobs.'
 
 # For HelloWorld test
-ignore 'HelloWorld\s*FATAL A FATAL error message'
-ignore 'HelloWorld\s*ERROR An ERROR message'
-ignore 'HelloWorld\s*WARNING A WARNING message'
+ignore 'HelloWorld\s*\d*\s*\d*\s*FATAL A FATAL error message'
+ignore 'HelloWorld\s*\d*\s*\d*\s*ERROR An ERROR message'
+ignore 'HelloWorld\s*\d*\s*\d*\s*WARNING A WARNING message'
 
 # Ignore other messages that contain the string "ERROR"
 ignore '.*VERBOSE.*ERROR.*'
diff --git a/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test.sh b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test.sh
new file mode 100755
index 000000000000..d73b3db3ac08
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+# take inputs
+POSITIONAL=()
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+    -c|--command)
+    ART_CMD="$2"
+    shift # past argument
+    shift # past value
+    ;;
+    -t|--timeout)
+    ART_TIMEOUT="$2"
+    shift # past argument
+    shift # past value
+    ;;
+    *)    # unknown option
+    POSITIONAL+=("$1") # save it in an array for later
+    shift # past argument
+    ;;
+esac
+done
+set -- "${POSITIONAL[@]}" # restore positional parameters
+
+if [ -z ${TEST} ]; then
+  export TEST="TrigP1Test"
+fi
+
+if [ -z ${NAME} ]; then
+  export NAME="UNDEFINED"
+fi
+
+if [ -z ${JOB_LOG} ]; then
+  export JOB_LOG="atn_test.log"
+fi
+
+if [ -z ${ART_FILE_NAME} ]; then
+  export ART_FILE_NAME="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00364485.physics_EnhancedBias.merge.RAW._lb0705._SFO-1._0001.1"
+fi
+
+if [ -z ${JOB_athenaHLT_LOG} ]; then
+  export JOB_athenaHLT_LOG="atn_test_athenaHLT.log"
+fi
+
+ART_CMD="timeout ${ART_TIMEOUT} ${ART_CMD}"
+ART_CMD=${ART_CMD/INPUT_FILE/$ART_FILE_NAME}
+echo "----------------------------------------" 2>&1 | tee -a ${JOB_LOG}
+echo "Running athenaHLT command:" 2>&1 | tee -a ${JOB_LOG}
+echo ${ART_CMD} 2>&1 | tee -a ${JOB_LOG}
+echo "#!/bin/bash" >> run_athenaHLT.sh
+echo ${ART_CMD} >> run_athenaHLT.sh
+echo "echo 'art-result: '\$?' ${NAME}.athena_mother'" >> run_athenaHLT.sh
+source run_athenaHLT.sh 2>&1 | tee -a ${JOB_athenaHLT_LOG}
+echo "----------------------------------------" 2>&1 | tee -a ${JOB_LOG}
+
+source exec_art_trigp1test_merge.sh 2>&1 | tee -a ${JOB_LOG}
+source exec_art_trigp1test_post.sh 2>&1 | tee -a ${JOB_LOG}
+source exec_art_trigp1test_summary.sh 2>&1 | tee -a ${JOB_LOG}
+
diff --git a/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_merge.sh b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_merge.sh
new file mode 100755
index 000000000000..777591d339b0
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_merge.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+echo  $(date "+%FT%H:%M %Z")"     Execute TrigP1Test merging processing"
+
+# Merge log and monitoring files from children
+for f in athenaHLT:*; do
+  cat $f >> ${JOB_athenaHLT_LOG}
+done
+
+if [ -f expert-monitoring.root ]; then
+  mv expert-monitoring.root expert-monitoring_mother.root
+  hadd expert-monitoring.root athenaHLT_workers/*/*.root expert-monitoring_mother.root
+fi
+
diff --git a/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_post.sh b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_post.sh
index 3e5909258cd8..3934ce042e65 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_post.sh
+++ b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_post.sh
@@ -3,6 +3,9 @@
 echo  $(date "+%FT%H:%M %Z")"     Execute TrigP1Test post processing"
 
 ### DEFAULTS
+if [ -z ${NAME} ]; then
+  export NAME="TrigP1Test"
+fi
 
 if [ -z ${JOB_LOG} ]; then
   export JOB_LOG="athena.log"
@@ -12,27 +15,93 @@ if [ -z ${TEST} ]; then
   export TEST="TrigP1Test"
 fi
 
+if [ -n "${AtlasBuildBranch}" ]; then
+  export BRANCH=${AtlasBuildBranch} # available after asetup
+elif [ -n "${gitlabTargetBranch}" ]; then
+  export BRANCH=${gitlabTargetBranch} # available in CI
+else
+  echo "WARNING Cannot determine the branch name, both variables AtlasBuildBranch and gitlabTargetBranch are empty"
+fi
+
 if [ -z ${REF_FOLDER} ]; then
-  export REF_FOLDER="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/${TEST}/ref/${AtlasBuildBranch}/${NAME}"
+  export REF_FOLDER="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/${TEST}/ref/${BRANCH}/${NAME}"
 fi
 
+export ROOTCOMP_CMD="rootcomp.py --pdf --noRoot"
+export ROOTCOMP_LOG="rootcompout.log"
+
 ###
+echo $(date "+%FT%H:%M %Z")"     Checking for athenaHLT log"
+if [ -f ${JOB_athenaHLT_LOG} ]; then
+   echo "art-result: 0 ${NAME}.MissingLog"
+else
+   echo "Cannot find log file"
+   echo "art-result: 1 ${NAME}.MissingLog"
+fi
 
-echo $(date "+%FT%H:%M %Z")"     Running checklog"
-timeout 1m check_log.pl --config checklogTriggerTest.conf --showexcludestats ${JOB_LOG} | tee checklog.log
+# mother process exit code
+grep "art-result:" ${JOB_athenaHLT_LOG}
+
+echo $(date "+%FT%H:%M %Z")"     Checking for timeouts in child processes"
+if [ -f ${JOB_athenaHLT_LOG} ]; then
+   checkTimeut=`grep "CRITICAL stopped by user interrupt|ERROR Keyboard interruption caught|Signal handler: Killing [0-9]+ with 15" ${JOB_athenaHLT_LOG}`
+   if [[ -z "${checkTimeut}" ]]; then
+     echo "art-result: 0 ${NAME}.ChildTimeout"
+   else
+     echo "Timeout found: "
+     echo ${checkTimeut}
+     echo "art-result: 1 ${NAME}.ChildTimeout"
+   fi
+fi 
 
-echo "art-result: ${PIPESTATUS[0]} CheckLog"
+echo $(date "+%FT%H:%M %Z")"     Running checklog"
+timeout 1m check_log.pl --config checklogTrigP1Test.conf --showexcludestats ${JOB_athenaHLT_LOG} 2>&1 | tee -a checklog.log
+echo "art-result: ${PIPESTATUS[0]} ${NAME}.CheckLog"
 
 # TODO
 # add check_statuscode.py ${JOB_LOG}
 # RunMsgFinder
 
 # Run perfmon
-timeout 1m perfmon.py -f 0.90 ntuple.pmon.gz
-timeout 1m convert -density 300 -trim ntuple.perfmon.pdf -quality 100 -resize 50% ntuple.perfmon.png
+if [ -f ntuple.pmon.gz ]; then
+  timeout 1m perfmon.py -f 0.90 ntuple.pmon.gz
+  timeout 1m convert -density 300 -trim ntuple.perfmon.pdf -quality 100 -resize 50% ntuple.perfmon.png
+fi 
+
+if [ -f expert-monitoring.root ]; then
+  echo $(date "+%FT%H:%M %Z")"     Running chainDump"
+  timeout 1m chainDump.py -S --rootFile=expert-monitoring.root
+
+  echo $(date "+%FT%H:%M %Z")"     Running check for zero L1, HLT or TE counts"
+  export COUNT_EXIT=0
+  if [[ `sed 's|.*\(.* \)|\1|' L1AV.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then
+    echo "L1 counts   ERROR  : all entires are ZERO please consult L1AV.txt"
+    (( COUNT_EXIT = COUNT_EXIT || 1 ))
+  fi
+  if [[ `sed 's|.*\(.* \)|\1|' HLTChain.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then
+    echo "HLTChain counts   ERROR  : all entires are ZERO please consult HLTChain.txt"
+    (( COUNT_EXIT = COUNT_EXIT || 1 ))
+  fi
+  if [[ `sed 's|.*\(.* \)|\1|' HLTTE.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then
+    echo "HLTTE counts   ERROR  : all entires are ZERO please consult HLTTE.txt"
+    (( COUNT_EXIT = COUNT_EXIT || 1 ))
+  fi
+  echo "art-result: ${COUNT_EXIT} ${NAME}.ZeroCounts"
+
+  if [ -f ${REF_FOLDER}/expert-monitoring.root ]; then
+    echo $(date "+%FT%H:%M %Z")"     Running rootcomp"
+    timeout 10m ${ROOTCOMP_CMD} ${REF_FOLDER}/expert-monitoring.root 2>&1 | tee -a ${ROOTCOMP_LOG}
+    echo "art-result: ${PIPESTATUS[0]} ${NAME}.RootComp"
+    echo $(date "+%FT%H:%M %Z")"     Running checkcounts"
+    timeout 10m trigtest_checkcounts.sh 0 expert-monitoring.root ${REF_FOLDER}/expert-monitoring.root HLT 2>&1 | tee -a checkcountout.log
+    echo "art-result: ${PIPESTATUS[0]} ${NAME}.CheckCounts"
+  else
+    echo $(date "+%FT%H:%M %Z")"     No reference expert-monitoring.root found in ${REF_FOLDER}"
+  fi
 
-echo $(date "+%FT%H:%M %Z")"     Running chainDump"
-timeout 1m chainDump.py -S --rootFile=expert-monitoring.root
+else
+  echo $(date "+%FT%H:%M %Z")"     No expert-monitoring.root file found. Skipping chainDump.py, RootComp and CheckCounts"
+fi
 
 export JOB_LOG_TAIL=${JOB_LOG%%.*}.tail.${JOB_LOG#*.}
 tail -10000  ${JOB_LOG} > ${JOB_LOG_TAIL}
@@ -40,23 +109,12 @@ tail -10000  ${JOB_LOG} > ${JOB_LOG_TAIL}
 grep REGTEST ${JOB_LOG} > athena.regtest
 if [ -f ${REF_FOLDER}/athena.regtest ]; then
   echo $(date "+%FT%H:%M %Z")"     Running regtest"
-  timeout 1m regtest.pl --inputfile athena.regtest --reffile ${REF_FOLDER}/athena.regtest | tee regtest.log
-  echo "art-result: ${PIPESTATUS[0]} RegTest"
+  timeout 1m regtest.pl --inputfile athena.regtest --reffile ${REF_FOLDER}/athena.regtest 2>&1 | tee -a regtest.log
+  echo "art-result: ${PIPESTATUS[0]} ${NAME}.RegTest"
 else
   echo $(date "+%FT%H:%M %Z")"     No reference athena.regtest found in ${REF_FOLDER}"
 fi
 
-if [ -f ${REF_FOLDER}/expert-monitoring.root ]; then
-  echo $(date "+%FT%H:%M %Z")"     Running rootcomp"
-  timeout 10m rootcomp.py ${REF_FOLDER}/expert-monitoring.root | tee rootcompout.log
-  echo "art-result: ${PIPESTATUS[0]} RootComp"
-  echo $(date "+%FT%H:%M %Z")"     Running checkcounts"
-  timeout 10m trigtest_checkcounts.sh 0 expert-monitoring.root ${REF_FOLDER}/expert-monitoring.root HLT | tee checkcountout.log
-  echo "art-result: ${PIPESTATUS[0]} CheckCounts"
-else
-  echo $(date "+%FT%H:%M %Z")"     No reference expert-monitoring.root found in ${REF_FOLDER}"
-fi
-
 if [ -f trig_cost.root ]; then 
   echo $(date "+%FT%H:%M %Z")"     Running CostMon"
 #  timeout 2h RunTrigCostD3PD -f trig_cost.root --outputTagFromAthena --costMode --ratesMode > costMon.log 2>&1
@@ -65,38 +123,21 @@ else
   echo $(date "+%FT%H:%M %Z")"     file trig_cost.root does not exist thus RunTrigCostD3PD will not be run"
 fi
 
-echo $(date "+%FT%H:%M %Z")"     Running check for zero L1, HLT or TE counts"
-export COUNT_EXIT=0
-if [[ `sed 's|.*\(.* \)|\1|' L1AV.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then 
-  echo "L1 counts   ERROR  : all entires are ZERO please consult L1AV.txt"
-  (( COUNT_EXIT = COUNT_EXIT || 1 ))
-fi
-if [[ `sed 's|.*\(.* \)|\1|' HLTChain.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then 
-  echo "HLTChain counts   ERROR  : all entires are ZERO please consult HLTChain.txt"
-  (( COUNT_EXIT = COUNT_EXIT || 1 ))
-fi
-if [[ `sed 's|.*\(.* \)|\1|' HLTTE.txt | sed 's/^[ \t]*//' |  sed '/^0/'d | wc -l` == 0 ]]; then 
-  echo "HLTTE counts   ERROR  : all entires are ZERO please consult HLTTE.txt"
-  (( COUNT_EXIT = COUNT_EXIT || 1 ))
-fi
-echo "art-result: ${COUNT_EXIT} ZeroCounts"
-
-
 if [ -f ESD.pool.root ]; then 
   echo $(date "+%FT%H:%M %Z")"     Running CheckFile on ESD"
-  timeout 10m checkFile.py ESD.pool.root | tee ESD.pool.root.checkFile
-  echo "art-result: ${PIPESTATUS[0]} CheckFileESD"
+  timeout 10m checkFile.py ESD.pool.root 2>&1 | tee -a ESD.pool.root.checkFile
+  echo "art-result: ${PIPESTATUS[0]} ${NAME}.CheckFileESD"
 else 
   echo $(date "+%FT%H:%M %Z")"     No ESD.pool.root to check"
 fi
 
 if [ -f AOD.pool.root ]; then 
   echo $(date "+%FT%H:%M %Z")"     Running CheckFile on AOD"
-  timeout 10m checkFile.py AOD.pool.root | tee AOD.pool.root.checkFile
-  echo "art-result: ${PIPESTATUS[0]} CheckFileAOD"
+  timeout 10m checkFile.py AOD.pool.root 2>&1 | tee -a AOD.pool.root.checkFile
+  echo "art-result: ${PIPESTATUS[0]} ${NAME}.CheckFileAOD"
   echo $(date "+%FT%H:%M %Z")"     Running CheckxAOD AOD"
-  timeout 10m checkxAOD.py AOD.pool.root | tee AOD.pool.root.checkxAODFile
-  echo "art-result: ${PIPESTATUS[0]} CheckXAOD"
+  timeout 10m checkxAOD.py AOD.pool.root 2>&1 | tee -a AOD.pool.root.checkxAODFile
+  echo "art-result: ${PIPESTATUS[0]} ${NAME}.CheckFileXAOD"
 else 
   echo $(date "+%FT%H:%M %Z")"     No AOD.pool.root to check"
 fi
@@ -106,5 +147,3 @@ ls -lh
 
 echo  $(date "+%FT%H:%M %Z")"     Finished TrigP1Test post processing"
 
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_summary.sh b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_summary.sh
new file mode 100755
index 000000000000..ade4aaa0c896
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/exec_art_trigp1test_summary.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+echo "====================================="
+echo $(date "+%FT%H:%M %Z")"     Test Summary:"
+if [ -f ${JOB_LOG} ]; then
+   grep "art-result:" ${JOB_LOG} | awk '{split($0,a,":"); print a[2] }' > summary.log
+   cat summary.log
+fi
+echo "====================================="
diff --git a/Trigger/TrigValidation/TrigP1Test/test/exec_athenaHLT_art_trigger_validation.sh b/Trigger/TrigValidation/TrigP1Test/test/exec_athenaHLT_art_trigger_validation.sh
deleted file mode 100755
index 835e77fa6348..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/exec_athenaHLT_art_trigger_validation.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash
-
-echo  $(date "+%FT%H:%M %Z")"     Execute AthenaHLT test ${NAME}"
-
-### DEFAULTS
-
-if [ -z ${MENU} ]; then
-  export MENU="Physics_pp_v7_unprescaled_only_physics_prescale"
-fi
-
-if [ -z ${EVENTS} ]; then
-  export EVENTS="1000"
-fi
-
-if [ -z ${JOBOPTION} ]; then
-  export JOBOPTION="TriggerTest/testCommonSliceAthenaTrigRDO.py"
-fi
-
-if [ -z ${JOB_LOG} ]; then
-  export JOB_LOG="athena.log"
-fi
-
-if [ -z ${FILE} ]; then
-  export FILE="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00339070.physics_EnhancedBias.merge.RAW._lb0101._SFO-1._0001.1"
-fi
-
-if [ -z ${TESTOPTION} ]; then
-  export TESTOPTION="setMenu='Physics_pp_v7_unprescaled_only_physics_prescale';setLVL1XML='TriggerMenuXML/LVL1config_Physics_pp_v7.xml';setL1TopoXML=setLVL1XML.replace('/LVL1','/L1Topo');rerunLVL1=True;enableCostD3PD=True;enableCostForCAF=True"
-fi
-
-if [ -z ${ATHENAHLTOPT} ]; then
-  export ATHENAHLTOPT=""
-fi
-
-if [ -z ${ATHENAHLTCMD} ]; then
-  export ATHENAHLTCMD="athenaHLT.py"
-fi
-
-######################################
-
-${ATHENAHLTCMD} ${ATHENAHLTOPT} \
--n ${EVENTS} \
--f "${FILE}" \
--c "${TESTOPTION}" \
-${JOBOPTION} &> ${JOB_LOG}
-
-######################################
-COMMAND=$PREVIOUS_COMMAND ATH_RETURN=$?
-echo ${COMMAND} > command.txt
-echo "Command to reproduce:"
-envsubst < command.txt
-echo "art-result: ${ATH_RETURN} ${JOB_LOG%%.*}"
-echo  $(date "+%FT%H:%M %Z")"     Done executing AthenaHLT test ${NAME}"
-
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_AthenaP1RDOtoBS_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_AthenaP1RDOtoBS_build.sh
deleted file mode 100755
index a044da96314f..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_AthenaP1RDOtoBS_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: Run RDO->BS using ttbar MC file 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=AthenaP1RDOtoBS
-export JOB_LOG="${NAME}.log"
-
-timeout 20m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_AthenaTrigBS_L2EFMerging_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_AthenaTrigBS_L2EFMerging_build.sh
deleted file mode 100755
index 5a4fe1c08749..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_AthenaTrigBS_L2EFMerging_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: testing trigger results w/wo merging L2/EF, based on AthenaTrigRDO with run_standalone.py 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=AthenaTrigBS_L2EFMerging
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV4_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV4_build.sh
deleted file mode 100755
index 390b145508c8..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV4_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT standalone with HLT_HIV4 menu on a HI sample 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_HIV4
-export JOB_LOG="${NAME}.log"
-
-timeout 40m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_FTK_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_FTK_build.sh
deleted file mode 100755
index 834176f1ba0e..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_FTK_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on HI data with HI V5 menu and doFTK (NB: no FTK sim in input data)
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_HIV5_FTK
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_build.sh
deleted file mode 100755
index 1b4fdbd2ad90..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_HIV5_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT standalone with HLT_HIV5 menu on a HI sample 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_HIV5
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_MCHIV5_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_MCHIV5_build.sh
deleted file mode 100755
index 8ee9eb1999c3..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_MCHIV5_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT standalone with HLT_HIV5 menu on a HI sample 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_MCHIV5
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_RAWtoESD_TrigEDMCheck_TrigDecTool_physicsV7_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_RAWtoESD_TrigEDMCheck_TrigDecTool_physicsV7_build.sh
deleted file mode 100755
index 4339e1f922be..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_RAWtoESD_TrigEDMCheck_TrigDecTool_physicsV7_build.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on EB data with Physics_pp_v7 menu, RAWtoESD on output, EDM checker on ESD, and Check of TrigDec 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=RAWtoESD_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=TrigEDMCheck_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=TrigDecTool_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_build.sh
deleted file mode 100755
index aa65bed73f74..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: AthenaHLT on data, with MC_pp_V7 menu loose prescale set 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_mcV7
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_menu_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_menu_build.sh
deleted file mode 100755
index e743376149a6..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_mcV7_menu_build.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-# art-description:  Run athenaHLT with and without rerunL1 to create the menu configurations to create SMK for reprocessings 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_mcV7_menu
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=UploadMenuKeys_MC
-export JOB_LOG="${NAME}.log"
-
-timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_mcV7_rerunLVL1_menu
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=UploadMenuKeys_MC_rerunLVL1
-export JOB_LOG="${NAME}.log"
-
-timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_AFP_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_AFP_build.sh
deleted file mode 100755
index 15dc0c38a357..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_AFP_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with AFP included, with Physics_pp_v7 menu (ATR-14776)
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_AFP
-export JOB_LOG="${NAME}.log"
-
-timeout 40m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ALFAMon_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ALFAMon_build.sh
deleted file mode 100755
index db92c868d337..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ALFAMon_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT with ALFA monitoring enabled, with Physics_pp_v6 menu, on run 2 data with ALFA in (see ATR-12448) 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_ALFAMon
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016IDCOSMICS_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016IDCOSMICS_build.sh
deleted file mode 100755
index de064ed9e45c..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016IDCOSMICS_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu currently cosmics from 2016 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_COS_2016IDCOSMICS
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016MUONS_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016MUONS_build.sh
deleted file mode 100755
index 9b8a1da87285..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_2016MUONS_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu currently cosmics from 2016 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_COS_2016MUONS
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_build.sh
deleted file mode 100755
index c9f29497140f..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_COS_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu currently cosmics from 2016 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_COS
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_DataScouting_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_DataScouting_build.sh
deleted file mode 100755
index 413e2aecaea8..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_DataScouting_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu, test output of DataScouting containers 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_DataScouting
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_FTK_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_FTK_build.sh
deleted file mode 100755
index b059c04f180f..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_FTK_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu and doFTK currently from 2016 EB data with FTK added 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_FTK
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_L1Topo_data_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_L1Topo_data_build.sh
deleted file mode 100755
index f28dc7f69da7..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_L1Topo_data_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on online test data including L1Topo ROI & DAQ ROB decoding with Physics_pp_v7 menu on events selected from data15_13TeV.00278748.physics_Main 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_L1Topo_data
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ROBprefetching_off_on_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ROBprefetching_off_on_build.sh
deleted file mode 100755
index e1d9f8f60ca3..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_ROBprefetching_off_on_build.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with physicsV7 menu with and without ROB prefetching (ATR-17867) 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_ROBprefetching_off
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_physicsV7_ROBprefetching_on
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_beamspot_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_beamspot_build.sh
deleted file mode 100755
index d403801e526f..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_beamspot_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: Test of beamspot udpate with athenaHLT 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_beamspot
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_build.sh
deleted file mode 100755
index d9d62260ee57..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu currently from 2016 EB data 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_magField_on_off_on_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_magField_on_off_on_build.sh
deleted file mode 100755
index f4ca7cf65747..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_magField_on_off_on_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with physicsV7 menu with On and Off magnetic field transition 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_magField_on_off_on
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_and_ROSsim_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_and_ROSsim_build.sh
deleted file mode 100755
index 2daf7732a069..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_and_ROSsim_build.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-# art-description:  Run athenaHLT on all events to create trigger configuration, generates and uploads SMKs with rerunLVL1 physics menu, then run ROS simulation with prescale keys for 17000 and 9000. RB configured such that new chains are unprescaled. Only in 21.1! 
-# art-type: build
-# art-include: 21.1/AthenaP1
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_menu
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=UploadMenuKeys_ART
-export JOB_LOG="${NAME}.log"
-
-timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_physicsV7_ROSsim_17000
-export JOB_LOG="${NAME}.log"
-
-timeout 150m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_physicsV7_ROSsim_9000
-export JOB_LOG="${NAME}.log"
-
-timeout 150m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_build.sh
deleted file mode 100755
index 7f512b93b62c..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_ART_build.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-# art-description:  Run athenaHLT on all events to create trigger configuration, generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB, then compare the SMK created from the HLT_physicsV7 first and rerun jobs.Only in 21.1! 
-# art-type: build
-# art-include: 21.1/AthenaP1
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_menu
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=UploadMenuKeys_ART
-export JOB_LOG="${NAME}.log"
-
-timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_build.sh
deleted file mode 100755
index fa8615eac007..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_menu_build.sh
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/bash
-
-# art-description:  Run athenaHLT on all events to create trigger configuration, generates and uploads SMKs created from the HLT first and compares after rerun jobs from DB, then compare the SMK created from the HLT_physicsV7 first and rerun jobs. Runs the same thing also for the physics HI v5 menu
-# art-type: build
-# art-include: 21.1/AthenaP1
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-#export NAME=HLT_physicsV7_menu
-#export JOB_LOG="${NAME}.log"
-
-#timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=UploadMenuKeys
-#export JOB_LOG="${NAME}.log"
-
-#timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=HLT_physicsV7_menu_rerundb
-#export JOB_LOG="${NAME}.log"
-
-#timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=HLT_physicsV7_menu_checkkeys
-#export JOB_LOG="${NAME}.log"
-
-#timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=CheckKeysV7
-#export JOB_LOG="${NAME}.log"
-
-#timeout 180m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=HLT_physicsV7_rerunLVL1_menu
-#export JOB_LOG="${NAME}.log"
-
-#timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=UploadMenuKeys_rerunLVL1
-#export JOB_LOG="${NAME}.log"
-
-#timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#export NAME=HLT_physicsV7_rerunLVL1_menu_rerundb
-#export JOB_LOG="${NAME}.log"
-
-#timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-#ATH_RETURN=${PIPESTATUS[0]}
-#echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_HIV5_menu
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=UploadMenuKeys_HI
-export JOB_LOG="${NAME}.log"
-
-timeout 120m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_HIV5_menu_rerundb
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=HLT_HIV5_menu_checkkeys
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=CheckKeysHIV5
-export JOB_LOG="${NAME}.log"
-
-timeout 180m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_rerunLVL1_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_rerunLVL1_build.sh
deleted file mode 100755
index 4d03689600de..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_rerunLVL1_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with Physics_pp_v7 menu currently from 2016 EB data 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_rerunLVL1
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_run_stop_run_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_run_stop_run_build.sh
deleted file mode 100755
index ac639511106c..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HLT_physicsV7_run_stop_run_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on data with physics_pp_V7 menu with stop/start transition 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7_run_stop_run
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_OHMonitoring_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_OHMonitoring_build.sh
new file mode 100755
index 000000000000..0964af66a8d2
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_OHMonitoring_build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# art-description: HelloWorld in athenaHLT with OH monitoring
+# art-type: build
+# art-include: master/Athena
+
+export NAME=HelloWorldHLT_OHMonitoring
+# use export ART_FILE_NAME=... to set the INPUT_FILE value
+export ART_CMD="athenaHLT.py -M -n 10 -f INPUT_FILE AthExHelloWorld/HelloWorldOptions.py"
+
+exec_art_trigp1test.sh -c "${ART_CMD}" -t "20m"
+
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_build.sh
index da6e1824616c..21f53042cb59 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_build.sh
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_build.sh
@@ -2,22 +2,11 @@
 
 # art-description: HelloWorld in athenaHLT
 # art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
+# art-include: master/Athena
 
 export NAME=HelloWorldHLT
-export JOB_LOG="${NAME}.log"
-
-timeout 5m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
+# use export ART_FILE_NAME=... to set the INPUT_FILE value 
+export ART_CMD="athenaHLT.py -n 10 -f INPUT_FILE AthExHelloWorld/HelloWorldOptions.py"
 
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
+exec_art_trigp1test.sh -c "${ART_CMD}" -t "20m"
 
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_forkAndMT_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_forkAndMT_build.sh
new file mode 100755
index 000000000000..9414525043d6
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_forkAndMT_build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# art-description: HelloWorld in athenaHLT with forking into 2 children and with 4 threads
+# art-type: build
+# art-include: master/Athena
+
+export NAME=HelloWorldHLT_forkAndMT
+# use export ART_FILE_NAME=... to set the INPUT_FILE value
+export ART_CMD="athenaHLT.py --nprocs 2 --threads 4 -n 10 -f INPUT_FILE AthExHelloWorld/HelloWorldOptions.py"
+
+exec_art_trigp1test.sh -c "${ART_CMD}" -t "20m"
+
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_fork_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_fork_build.sh
new file mode 100755
index 000000000000..12dff9682527
--- /dev/null
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_fork_build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# art-description: HelloWorld in athenaHLT with forking into 2 children
+# art-type: build
+# art-include: master/Athena
+
+export NAME=HelloWorldHLT_fork
+# use export ART_FILE_NAME=... to set the INPUT_FILE value
+export ART_CMD="athenaHLT.py --nprocs 2 -n 10 -f INPUT_FILE AthExHelloWorld/HelloWorldOptions.py"
+
+exec_art_trigp1test.sh -c "${ART_CMD}" -t "20m"
+
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_run_stop_run_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_run_stop_run_build.sh
index 7bba08e2b405..7bcf33d4b6f4 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_run_stop_run_build.sh
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_HelloWorldHLT_run_stop_run_build.sh
@@ -1,25 +1,13 @@
 #!/bin/bash
 
-# art-description: HelloWorld int athenaHLT with start/stop/start transition 
+# art-description: HelloWorld in athenaHLT with start/stop/start transition
 # art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
+# art-include: master/Athena
 
 export NAME=HelloWorldHLT_run_stop_run
-export JOB_LOG="${NAME}.log"
-
-timeout 10m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
+# use export ART_FILE_NAME=... to set the INPUT_FILE value
+export TRANSITIONS="run-stop-run-saveHist.trans"
+export ART_CMD="get_files -data ${TRANSITIONS}; athenaHLT.py -i -M --rewind -f INPUT_FILE AthExHelloWorld/HelloWorldOptions.py < ${TRANSITIONS}"
 
+exec_art_trigp1test.sh -c "${ART_CMD}" -t "20m"
 
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_Reco_tf_physicsV7_savedBS_AthenaP1BS_standalone_physicsV7_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_Reco_tf_physicsV7_savedBS_AthenaP1BS_standalone_physicsV7_build.sh
deleted file mode 100755
index 66d99392c87b..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_Reco_tf_physicsV7_savedBS_AthenaP1BS_standalone_physicsV7_build.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on EB data with Physics_pp_v7 menu, Reco_tf on saved output, and Standalone HLT running in athena and compare to athenaHLT 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=HLT_physicsV7
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=Reco_tf_physicsV7_savedBS
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=AthenaP1BS_standalone
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_Trigreco_physicsV7_currentT0_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_Trigreco_physicsV7_currentT0_build.sh
deleted file mode 100755
index 69befeb29925..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_Trigreco_physicsV7_currentT0_build.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-
-# art-description: Trig_reco_tf with current T0 config, EDMCheck on ESD and AOD  
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=Trigreco_physicsV7_currentT0
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME}  --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=TrigEDMCheck_physicsV7_currentT0_ESD
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-export NAME=TrigEDMCheck_physicsV7_currentT0_AOD
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir  --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_CostMonitoring_PhysicsV7_grid.sh b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_CostMonitoring_PhysicsV7_grid.sh
deleted file mode 100755
index 16d87015854d..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_CostMonitoring_PhysicsV7_grid.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on recent EnhancedBias with cost monitoring enabled
-# art-type: grid
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-# art-output: HLTChain.txt
-# art-output: HLTTE.txt
-# art-output: L1AV.txt
-# art-output: HLTconfig*.xml
-# art-output: L1Topoconfig*.xml
-# art-output: LVL1config*.xml
-# art-output: *.log
-# art-output: costMonitoring_*
-# art-output: *.root
-# art-output: ntuple.pmon.gz
-# art-output: *perfmon*
-# art-output: *.regtest
-# art-output: athena_stdout.txt
-
-export NAME="athenaHLT_CostMonitoring_PhysicsV7_grid"
-export TESTOPTION="setMenu='Physics_pp_v7_unprescaled_only_physics_prescale';setLVL1XML='TriggerMenuXML/LVL1config_Physics_pp_v7.xml';setL1TopoXML=setLVL1XML.replace('/LVL1','/L1Topo');rerunLVL1=True;enableCostD3PD=True;enableCostForCAF=True;HLTOutputLevel=INFO;doValidation=True;"
-export FILE="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00339070.physics_EnhancedBias.merge.RAW._lb0101._SFO-1._0001.1"
-export JOBOPTION="TriggerRelease/runHLT_standalone.py"
-export EVENTS="10000"
-
-source exec_athenaHLT_art_trigger_validation.sh
-source exec_art_trigp1test_post.sh
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_HIV5_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_HIV5_build.sh
deleted file mode 100755
index f0f42221fe1f..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_HIV5_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on latest available run
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME="athenaHLT_LatestRun_HIV5"
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_MCV7_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_MCV7_build.sh
deleted file mode 100755
index cbf3a84b70bf..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_LatestRun_MCV7_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on latest available run
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME="athenaHLT_LatestRun_MCV7"
-export JOB_LOG="${NAME}.log"
-
-timeout 100m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_on_data_leakCheck_grid.sh b/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_on_data_leakCheck_grid.sh
deleted file mode 100755
index 05dbb54c3751..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_athenaHLT_on_data_leakCheck_grid.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-# art-description: athenaHLT on DATA all slices leakCheck 
-# art-type: grid
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-# art-output: HLTChain.txt
-# art-output: HLTTE.txt
-# art-output: L1AV.txt
-# art-output: HLTconfig*.xml
-# art-output: L1Topoconfig*.xml
-# art-output: LVL1config*.xml
-# art-output: *.log
-# art-output: costMonitoring_*
-# art-output: *.root
-# art-output: ntuple.pmon.gz
-# art-output: *perfmon*
-# art-output: *.regtest
-# art-output: LeakCheck.txt
-
-export NAME="athenaHLT_on_data_leakCheck_grid"
-export JOB_LOG="${NAME}.log"
-
-export LD_PRELOAD=/cvmfs/sft.cern.ch/lcg/releases/libunwind/5c2cade-76996/$CMTCONFIG/lib/libunwind.so
-
-athenaHLT.py --stdcmalloc --leak-check-execute  -o HLT_physicsV7 -n 100 -f "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00339070.physics_EnhancedBias.merge.RAW._lb0101._SFO-1._0001.1" -c "setMenu='Physics_pp_v7_tight_physics_prescale';setLVL1XML='TriggerMenuXML/LVL1config_Physics_pp_v7.xml';setL1TopoXML=setLVL1XML.replace('/LVL1','/L1Topo');HLTOutputLevel=WARNING;doValidation=True;rerunLVL1=True;" TrigP1Test/runHLT_standaloneRTT_leakCheck.py &> ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} athena"
-
-source exec_art_trigp1test_post.sh
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_physics_pp_v7_PSed_nightlyDayBefore_grid.sh b/Trigger/TrigValidation/TrigP1Test/test/test_physics_pp_v7_PSed_nightlyDayBefore_grid.sh
deleted file mode 100755
index eed3d8bbb125..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_physics_pp_v7_PSed_nightlyDayBefore_grid.sh
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/bash
-
-# art-description: Physics pp v7 menu with athenaHLT over EnhancedBias data with prescales created in ART build job and read from DB. FROM NIGHTLY OF THE DAY BEFORE!
-# art-type: grid
-# art-include: 21.1/AthenaP1
-# art-output: HLTChain.txt
-# art-output: HLTTE.txt
-# art-output: L1AV.txt
-# art-output: HLTconfig*.xml
-# art-output: L1Topoconfig*.xml
-# art-output: LVL1config*.xml
-# art-output: *.log
-# art-output: costMonitoring_*
-# art-output: *.root
-# art-output: ntuple.pmon.gz
-# art-output: *perfmon*
-# art-output: *.regtest
-# art-output: athena_stdout.txt
-
-export NAME="athenaHLT_prescaled_PhysicsV7"
-export JOB_LOG="${NAME}.log"
-
-#source /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/prescaleKeys_17000.txt | tee ${JOB_LOG} 
-#for testing:
-#source /eos/atlas/atlascerngroupdisk/data-art/grid-input/TrigP1Test/prescaleKeys_17000.txt | tee ${JOB_LOG}
-eval "export $( grep 'smk=' /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/prescaleKeys_17000.txt)"
-eval "export $( grep 'l1psk=' /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/prescaleKeys_17000.txt)"
-eval "export $( grep 'hltpsk=' /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/prescaleKeys_17000.txt)"
-
-#smk=5218
-#l1psk=120
-#hltpsk=420
-echo 'smk' ${smk} | tee ${JOB_LOG} 
-echo 'l1psk' ${l1psk} | tee ${JOB_LOG} 
-echo 'hltpsk' ${hltpsk} | tee ${JOB_LOG} 
-
-echo "Reading release from SMK" | tee ${JOB_LOG} 
-get_files releaseFromSMK.py
-python releaseFromSMK.py TRIGGERDBART ${smk} > releaseFromSMK.log
-cat releaseFromSMK.log  | tee ${JOB_LOG}
-eval "$( grep 'export release=' releaseFromSMK.log)" 
-if [ -z ${release} ]; then
-   echo "Release not found" | tee ${JOB_LOG} 
-fi
-
-l1psk="'lvl1key': ${l1psk}"
-subshellcmd='source $AtlasSetup/scripts/asetup.sh AthenaP1,21.1,'${release}'; athenaHLT.py -n 5000 -f /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00339070.physics_EnhancedBias.merge.RAW._lb0101._SFO-1._0001.1 -o HLT_physicsV7_prescaled -J TrigConf::HLTJobOptionsSvc --use-database --db-type "Coral" --db-server "TRIGGERDBART" --db-smkey '${smk}' --db-hltpskey '${hltpsk}' --db-extra "{'${l1psk}'}"; Trig_reco_tf.py --inputBSFile=HLT_physicsV7_prescaled._0001.data --outputNTUP_TRIGCOST=trig_cost.root; RunTrigCostD3PD -f trig_cost.root --outputTagFromAthena --costMode --monitorRates --isCPUPrediction --useEBWeight --patternsMonitor HLT_costmonitor HLT_mistimemonj400 HLT_mistimemoncaltimenomu HLT_mistimemoncaltime HLT_l1topodebug HLT_l1calooverflow HLT_e5_lhvloose_nod0_bBeexM6000t HLT_2e5_lhvloose_nod0_bBeexM6000t HLT_cscmon_L1All HLT_j0_perf_ds1_L1J100 --patternsInvert  --predictionLumi 1.50e34; chainDump.py -n -S  2>&1 | tee ${JOB_LOG}'
-echo "running in subshell: $subshellcmd"
-(eval $subshellcmd)
-
-grep -r "RATE_" costMonitoring_*/csv/Table_Rate_Group_HLT_All.csv  | awk '{split($0,a,","); print a[1]"\t"a[4] }' >> HLTChain.txt
-grep "TrigSteer_HLT.TrigChainMoni" stdout.txt | awk '{split($0,a,":|\t"); print a[4]" "a[10] }' | sed 's/\s*active\s*/_rerun\t/g' | sed 's/\s*HLT/HLT/g' >> HLTChain.txt
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-#exec_art_trigp1test_post.sh
-
-
-#echo 'ART Grid test with Physics_pp_v7 PSed menu'
-#
-#if ! [ -x "$(command -v athenaHLT.py)" ]; then
-#  echo 'Invalid - not a P1 environment.' >&2
-#  exit 0
-#fi
-#
-#ART_dir=${PWD}
-#echo 'ART_dir: '${ART_dir}
-#
-#MENU='Physics_pp_v7'
-#echo 'Menu:' ${MENU}
-#
-#export ATLAS_LOCAL_ROOT_BASE="/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase"
-#source $ATLAS_LOCAL_ROOT_BASE/packageSetups/localSetup.sh git
-##TODO: at the moment working on RB master
-#git clone https://:@gitlab.cern.ch:8443/atlas-trigger-menu/TrigMenuRulebook.git
-##git clone /afs/cern.ch/user/t/tamartin/public/TrigMenuRulebook/
-#RB_dir=${PWD}/TrigMenuRulebook
-#echo 'RB_dir: '${RB_dir}
-#
-#
-#echo 'getting L1 and L1Topo xml files'
-##get the L1 file 
-#get_files -xmls -copy LVL1config_${MENU}.xml
-#l1menu=`find .  -name LVL1config_${MENU}.xml` 
-##get the L1 Topo configuration
-#get_files -xmls -copy L1Topoconfig_${MENU}.xml 
-#l1topo=`find . -name L1Topoconfig_${MENU}.xml` 
-#
-## generate only hlt xml for RB without DB access
-#echo "Generating menu"
-#athena.py  -c "TriggerMenuSetup='${MENU}'" TriggerMenuXML/runHLT_forXMLgeneration.py
-#hltmenu=`find . -name outputHLTconfig.xml`
-#
-#echo 'l1menu: '${l1menu}
-#echo 'l1topo: '${l1topo}
-#echo 'hltmenu: '${hltmenu}
-#
-#cd ${RB_dir}/scripts
-#
-#rm -f l1.xml hlt.xml
-#ln -s ${ART_dir}/${l1menu}   l1.xml
-#ln -s ${ART_dir}/${hltmenu}   hlt.xml
-#
-##TODO: configure RB properly, which lumi point?
-#sed -i -e 's/ignoreErrors = False/ignoreErrors = True/g' runOptions.py
-#./runRuleBook.py 20000
-#
-#cd ${ART_dir}
-#
-#hltPS=`find  TrigMenuRulebook/scripts -name "RuleBook_HLTPS_${MENU}_*.xml"`
-#l1PS=`find  TrigMenuRulebook/scripts -name "RuleBook_LV1PS_${MENU}_*.xml"`
-#
-#echo "hltPS: "${hltPS}
-#echo "l1PS: "${l1PS}
-#
-##TODO: what to do with missing chains?
-#python ${RB_dir}/scripts/apply_PS.py ${l1menu} ${l1PS} PSed_LVL1_${MENU}.xml
-#python ${RB_dir}/scripts/apply_PS.py ${hltmenu} ${hltPS} PSed_HLT_${MENU}.xml
-#
-#athenaHLT.py -f '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1' -c 'setMenu="'${MENU}'";setLVL1XML="PSed_LVL1_'${MENU}'.xml"; setHLTXML="PSed_HLT_'${MENU}'.xml";rerunLVL1=True;enableCostD3PD=True;enableCostForCAF=True' TriggerRelease/runHLT_standalone.py
-#export ATH_EXIT=$?
-#
-#chainDump.py -S --rootFile=expert-monitoring.root
-#
-#return $ATH_ExXIT
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_build.sh
deleted file mode 100755
index fea72aad6eeb..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: stand-alone test of the steering 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=pureSteering
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_ecodes_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_ecodes_build.sh
deleted file mode 100755
index 48e8be9983eb..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_ecodes_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: stand-alone test of the steering with useErrorHandlingMenu 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=pureSteering_ecodes
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_prescaling_build.sh b/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_prescaling_build.sh
deleted file mode 100755
index 0db08281bdc2..000000000000
--- a/Trigger/TrigValidation/TrigP1Test/test/test_pureSteering_prescaling_build.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# art-description: stand-alone test of the steering with the PrescaleMenu 
-# art-type: build
-# art-include: 21.1/AthenaP1
-# art-include: 21.1-dev/AthenaP1
-# art-include: 21.0/AthenaP1
-# art-include: 21.0-TrigMC/AthenaP1
- 
- 
-
-if [ -z ${TEST} ]; then
-  export TEST="TrigP1Test"
-fi
-
-export NAME=pureSteering_prescaling
-export JOB_LOG="${NAME}.log"
-
-timeout 50m trigtest_ART.pl --cleardir --test ${NAME} --rundir ${NAME} --conf TrigP1Test_ART.conf | tee ${JOB_LOG}
-
-ATH_RETURN=${PIPESTATUS[0]}
-echo "art-result: ${ATH_RETURN} ${NAME}"
-
-
-
-- 
GitLab


From 183ce2fa1c9525a88d5bd483d7ea1fab35c8f7e4 Mon Sep 17 00:00:00 2001
From: Siarhei Harkusha <Siarhei.Harkusha@cern.ch>
Date: Wed, 20 Mar 2019 18:35:08 +0100
Subject: [PATCH 142/163] TileMonitoring: Migrate monitoring Tile time with
 jets for Run 3

New TileJetMonitorAlgorithm algorithm has been added
to monitor Tile time with jets for run 3.
Functionality has just been copied from TileJetMonTool.

New TileJetMonitorAlgorithm python module has been added
to configure this algorithm in new JO style.

New TileMonitoringCfgHelper module has been added
with helper functions which may be usefull for configuring
future Tile monitoring algorithm also.
---
 TileCalorimeter/TileMonitoring/CMakeLists.txt |   1 +
 .../python/TileJetMonitorAlgorithm.py         | 268 ++++++++++
 .../python/TileMonitoringCfgHelper.py         |  91 ++++
 .../src/TileJetMonitorAlgorithm.cxx           | 460 ++++++++++++++++++
 .../src/TileJetMonitorAlgorithm.h             |  93 ++++
 .../src/components/TileMonitoring_entries.cxx |   2 +
 6 files changed, 915 insertions(+)
 create mode 100644 TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
 create mode 100644 TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
 create mode 100644 TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
 create mode 100644 TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.h

diff --git a/TileCalorimeter/TileMonitoring/CMakeLists.txt b/TileCalorimeter/TileMonitoring/CMakeLists.txt
index 517fe6d3d5d4..eb7cffbbde6a 100644
--- a/TileCalorimeter/TileMonitoring/CMakeLists.txt
+++ b/TileCalorimeter/TileMonitoring/CMakeLists.txt
@@ -56,4 +56,5 @@ atlas_add_component( TileMonitoring
 
 # Install files from the package:
 atlas_install_headers( TileMonitoring )
+atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
diff --git a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
new file mode 100644
index 000000000000..267556693d48
--- /dev/null
+++ b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
@@ -0,0 +1,268 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+'''
+@file TileJetMonitorAlgorithm.py
+@author 
+@date 
+@brief Python configuration of TileJetMonitorAlgorithm algorithm for the Run III
+'''
+
+
+def TileJetMonitoringConfig(inputFlags, **kwargs):
+
+    ''' Function to configure TileJetMonitorAlgorithm algorithm in the monitoring system.'''
+
+
+    from AthenaCommon import CfgMgr
+
+    # Define one top-level monitoring algorithm. The new configuration 
+    # framework uses a component accumulator.
+    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+    result = ComponentAccumulator()
+
+    from TileGeoModel.TileGMConfig import TileGMCfg
+    result.merge(TileGMCfg(inputFlags))
+
+    from LArGeoAlgsNV.LArGMConfig import LArGMCfg
+    result.merge(LArGMCfg(inputFlags))
+
+    from TileConditions.TileConditionsConfig import tileCondCfg
+    result.merge(tileCondCfg(inputFlags))
+
+    # The following class will make a sequence, configure algorithms, and link
+    # them to GenericMonitoringTools
+    from AthenaMonitoring import AthMonitorCfgHelper
+    helper = AthMonitorCfgHelper(inputFlags,'TileMonitoring')
+
+    # Adding an TileJetMonitorAlgorithm algorithm to the helper
+    from TileMonitoring.TileMonitoringConf import TileJetMonitorAlgorithm
+    tileJetMonAlg = helper.addAlgorithm(TileJetMonitorAlgorithm, 'TileJetMonAlg')
+
+    from AthenaCommon.Constants import DEBUG, INFO, VERBOSE
+    # tileJetMonAlg.OutputLevel = VERBOSE
+    tileJetMonAlg.TriggerChain = ''
+
+    for k, v in kwargs.items():
+        setattr(tileJetMonAlg, k, v)
+
+    DoEnergyProfiles = kwargs.get('DoEnergyProfiles', tileJetMonAlg.getDefaultProperty('DoEnergyProfiles'))
+    Do1DHistograms = kwargs.get('Do1DHistograms', tileJetMonAlg.getDefaultProperty('Do1DHistograms'))
+    DoEnergyDiffHistograms  = kwargs.get('DoEnergyDiffHistograms', tileJetMonAlg.getDefaultProperty('DoEnergyDiffHistograms'))
+
+
+    if not inputFlags.DQ.DataType == 'heavyioncollision':
+
+        tileJetMonAlg.JVT = CfgMgr.JetVertexTaggerTool()
+
+        jetCleaningTool = CfgMgr.JetCleaningTool()
+        jetCleaningTool.CutLevel = "LooseBad"
+        jetCleaningTool.DoUgly = False
+
+        tileJetMonAlg.JetCleaningTool = jetCleaningTool
+        result.addPublicTool(jetCleaningTool)
+
+        jetPtMin = 20000
+        jetTrackingEtaLimit = 2.4
+        eventCleaningTool = CfgMgr.ECUtils__EventCleaningTool()
+        eventCleaningTool.JetCleaningTool = jetCleaningTool
+        eventCleaningTool.PtCut = jetPtMin
+        eventCleaningTool.EtaCut = jetTrackingEtaLimit
+        eventCleaningTool.JvtDecorator = "passJvt"
+        eventCleaningTool.OrDecorator = "passOR"
+        eventCleaningTool.CleaningLevel = jetCleaningTool.CutLevel
+
+        tileJetMonAlg.EventCleaningTool = eventCleaningTool
+        tileJetMonAlg.JetTrackingEtaLimit = jetTrackingEtaLimit
+        tileJetMonAlg.JetPtMin = jetPtMin
+
+        tileJetMonAlg.DoEventCleaning = True
+        tileJetMonAlg.DoJetCleaning = True
+
+    else:
+
+        tileJetMonAlg.DoEventCleaning = False
+        tileJetMonAlg.DoJetCleaning = False
+
+
+    # 1) Configure histogram with TileJetMonAlg algorithm execution time
+    executeTimeGroup = helper.addGroup(tileJetMonAlg, 'TileJetMonExecuteTime', 'Tile/')
+    executeTimeGroup.defineHistogram('TIME_execute', path = 'Jet', type='TH1F', 
+                                     title = 'Time for execute TileJetMonAlg algorithm;time [#mus]',
+                                     xbins = 300, xmin = 0, xmax = 300000)
+
+
+
+    from TileMonitoring.TileMonitoringCfgHelper import addValueVsModuleAndChannelMaps, getPartitionName
+    runNumber = inputFlags.Input.RunNumber[0]
+
+
+    # 2) Configure 2D histograms (profiles/maps) with Tile channel time vs module and channel per partion (DQ summary)
+    channelTimeDQGroup = helper.addGroup(tileJetMonAlg, 'TileJetChanTimeDQ', 'Tile/Jet/')
+    addValueVsModuleAndChannelMaps(channelTimeDQGroup, name = 'tileJetChanTime', title = 'Average time with jets', 
+                                   path = 'DQ', type = 'TProfile2D', value='time', run = str(runNumber))
+
+
+    gains = ['LG', 'HG']
+    partitions = ['LBA', 'LBC', 'EBA', 'EBC']
+
+    # 3a) Configure 1D histograms with Tile channel time per partition
+    channelTimeGroup = helper.addGroup(tileJetMonAlg, 'TileJetChanTime', 'Tile/Jet/ChanTime/')
+    for partition in partitions:
+        title = 'Partition ' + partition + ': Tile Channel Time;time [ns];N'
+        name = 'channelTime' + partition
+        path = partition
+        channelTimeGroup.defineHistogram(name, title = title, path = path, type = 'TH1F',
+                                         xbins = 600, xmin = -30.0, xmax = 30.0)
+
+    # 3b) Configure 1D histograms with Tile channel time per partition for extended barrels without scintillators
+    for partition in ['EBA', 'EBC']:
+        title = 'Partition ' + partition + ': Tile Channel Time (without scintillators);time [ns];N'
+        name = 'channelTime' + partition + '_NoScint'
+        path = partition
+        channelTimeGroup.defineHistogram(name, title = title, path = path, type = 'TH1F',
+                                         xbins = 600, xmin = -30.0, xmax = 30.0)
+
+
+    # Energy upper limits of the cell-time histograms
+    energiesHG = [500, 1000, 2000, 4000, 6000, 8000, 10000, 13000, 16000, 20000]
+    energiesLG = [25000, 30000, 40000, 50000, 65000, 80000]
+    energiesALL = {'LG' : energiesLG, 'HG' : energiesHG}
+    tileJetMonAlg.CellEnergyUpperLimitsHG = energiesHG
+    tileJetMonAlg.CellEnergyUpperLimitsLG = energiesLG
+
+    # 4) Configure histograms with Tile cell time in energy slices per partition and gain
+    cellTimeGroup = helper.addGroup(tileJetMonAlg, 'TileJetCellTime', 'Tile/Jet/CellTime/')
+    for partition in partitions:
+        for gain in gains:
+            index = 0
+            energies = energiesALL[gain]
+            for index in xrange(0, len(energies) + 1):
+                toEnergy = energies[index] if index < len(energies) else None
+                fromEnergy = energies[index - 1] if index > 0 else None
+                name = 'Cell_time_' + partition + '_' + gain + '_slice_' + str(index)
+                title = 'Partition ' + partition + ': ' + gain + ' Tile Cell time in energy range'
+                if not toEnergy:
+                    title += ' > ' + str(fromEnergy) + ' MeV; time [ns]'
+                elif not fromEnergy:
+                    title += ' < ' + str(toEnergy) + ' MeV; time [ns]'
+                else:
+                    title += ' [' + str(fromEnergy) + ' .. ' + str(toEnergy) + ') MeV; time [ns]'
+                cellTimeGroup.defineHistogram(name, title = title, path = partition, type = 'TH1F',
+                                              xbins = 600, xmin = -30.0, xmax = 30.0)
+        
+
+
+    if DoEnergyProfiles:
+
+        # 5) Configure 1D histograms (profiles) with Tile cell energy profile in energy slices per partition and gain
+        cellEnergyProfileGroup = helper.addGroup(tileJetMonAlg, 'TileJetCellEnergyProfile', 'Tile/Jet/CellTime/')
+        for partition in partitions:
+            for gain in gains:
+                name = 'index_' + partition + '_' + gain
+                name += ',energy_' + partition + '_' + gain
+                name += ';Cell_ene_' + partition + '_' + gain + '_prof'
+                title = 'Partition ' + partition + ': ' + gain + ' Tile Cell energy profile;Slice;Energy [MeV]'
+                xmax = len(energiesALL[gain]) + 0.5
+                nbins = len(energiesALL[gain]) + 1
+                cellEnergyProfileGroup.defineHistogram(name, title = title, path = partition, type = 'TProfile',
+                                                       xbins = nbins, xmin = -0.5, xmax = xmax)
+        
+
+    else:
+
+        # 6) Configure 1D histograms with Tile cell energy in energy slices per partition, gain and slice
+        cellEnergyGroup = helper.addGroup(tileJetMonAlg, 'TileJetCellEnergy', 'Tile/Jet/CellTime/')
+        for partition in partitions:
+            for gain in gains:
+                energies = energiesALL[gain]
+                for index in xrange(0, len(energies) + 1):
+                    toEnergy = energies[index] if index < len(energies) else 2 * energies[index - 1]
+                    fromEnergy = energies[index - 1] if index > 0 else -1000
+                    name = 'Cell_ene_' + partition + '_' + gain + '_slice_' + str(index)
+                    title = 'Partition ' + partition + ': ' + gain + ' Tile Cell Energy'
+                    title += ' in energy range [' + str(fromEnergy) + ' .. ' + str(toEnergy) + ') MeV;Energy [MeV]'
+                    cellEnergyGroup.defineHistogram(name, title = title, path = partition, type = 'TH1F',
+                                                    xbins = 100, xmin = fromEnergy, xmax = toEnergy)
+
+
+
+    from TileCalibBlobObjs.Classes import TileCalibUtils as Tile
+
+    if Do1DHistograms:
+
+        # 7) Configure 1D histograms with Tile channel time per channel
+        channelTime1DGroup = helper.addGroup(tileJetMonAlg, 'TileJetChanTime1D', 'Tile/Jet/ChanTime/')
+
+        for ros in xrange(1, Tile.MAX_ROS):
+            for module in xrange(0, Tile.MAX_DRAWER):
+                for channel in xrange(0, Tile.MAX_CHAN):
+                    moduleName = Tile.getDrawerString(ros, module)
+                    title = 'Time in ' + moduleName + ' channel ' + str(channel) + ';time [ns];N'
+                    name = moduleName + '_ch_' + str(channel) + '_1d'
+                    path = getPartitionName(ros) + '/' + moduleName
+                    channelTime1DGroup.defineHistogram(name, title = title, path = path, type = 'TH1F',
+                                                       xbins = 600, xmin = -30.0, xmax = 30.0)
+
+
+
+    if DoEnergyDiffHistograms:
+    
+        # 7) Configure 1D histograms with Tile cell relative energy difference between two channels per even channel
+        energyDiffGroup = helper.addGroup(tileJetMonAlg, 'TileJetEnergyDiff', 'Tile/Jet/EnergyDiff/')
+
+        for ros in xrange(1, Tile.MAX_ROS):
+            for module in xrange(0, Tile.MAX_DRAWER):
+                for channel in xrange(0, Tile.MAX_CHAN):
+                    if not channel % 2:
+                        for gain in gains:
+                            moduleName = Tile.getDrawerString(ros, module)
+                            title = 'Tile Cell Energy difference in ' + moduleName + ' channel ' + str(channel) + ' ' + gain
+                            title += ';#frac{ene1 - ene2}{ene1 + ene2}'
+                            name = moduleName + '_enediff_' + gain + '_ch1_' + str(channel)
+                            path = getPartitionName(ros) + '/' + moduleName
+                            energyDiffGroup.defineHistogram(name, title = title, path = path, type = 'TH1F',
+                                                            xbins = 100, xmin = -1.0, xmax = 1.0)
+
+
+    
+    accumalator, sequence = helper.result()
+    result.merge(accumalator)
+    return result, sequence
+
+if __name__=='__main__':
+
+    # Setup the Run III behavior
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior = 1
+
+    # Setup logs
+    from AthenaCommon.Logging import log
+    from AthenaCommon.Constants import DEBUG,INFO
+    log.setLevel(INFO)
+
+    # Set the Athena configuration flags
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+
+    # from AthenaConfiguration.TestDefaults import defaultTestFiles
+    # ConfigFlags.Input.Files = defaultTestFiles.ESD
+
+    ConfigFlags.Input.Files = ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q431/21.0/myESD.pool.root']
+    ConfigFlags.Input.isMC = False
+
+    ConfigFlags.Output.HISTFileName = 'TileJetMonitorOutput.root'
+    ConfigFlags.lock()
+
+    # Initialize configuration object, add accumulator, merge, and run.
+    from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg 
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    cfg = MainServicesSerialCfg()
+    cfg.merge(PoolReadCfg(ConfigFlags))
+
+    tileJetMonitorAccumulator, tileMonitoringSequence  = TileJetMonitoringConfig(ConfigFlags, 
+                                                                                 Do1DHistograms = True, 
+                                                                                 DoEnergyDiffHistograms = True)
+    cfg.merge(tileJetMonitorAccumulator)
+
+    cfg.run()
diff --git a/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
new file mode 100644
index 000000000000..b2fb690ed036
--- /dev/null
+++ b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
@@ -0,0 +1,91 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+'''
+@file TileMonitoringHelper.py
+@author 
+@date 
+@brief Helper functions for Run 3 Tile monitoring algorithm configuration
+'''
+
+
+_cellNameEB = ['E3', 'E4', 'D4', 'D4', 'C10', 'C10', 'A12', 'A12', 'B11', 'B11', 'A13', 'A13', 
+               'E1', 'E2', 'B12', 'B12', 'D5', 'D5', 'E3*', 'E4*', 'A14', 'A14', 'B13', 'B13',
+               '',   '',    '',    '',   '',   '', 'B14', 'A15', 'A15',    '',    '', 'B14',
+               'B15', 'D6', 'D6', 'B15', 'A16', 'A16',  '',    '',    '',    '',    '', '']
+
+
+_cellNameLB = ['D0', 'A1', 'B1', 'B1', 'A1', 'A2', 'B2', 'B2', 'A2',  'A3',  'A3', 'B3', 
+               'B3', 'D1', 'D1', 'A4', 'B4', 'B4', 'A4', 'A5', 'A5',  'B5',  'B5', 'A6', 
+               'D2', 'D2', 'A6', 'B6', 'B6', 'A7',   '',   '', 'A7',  'B7',  'B7', 'A8', 
+               'A9', 'A9', 'A8', 'B8', 'B8', 'D3', 'B9',   '', 'D3', 'A10', 'A10', 'B9']
+
+
+_partitionName = {0: 'AUX', 1 : 'LBA', 2 : 'LBC', 3 : 'EBA', 4 : 'EBC'}
+
+
+def getCellName(partition, channel):
+    '''
+    This function returns name of Tile cell for given partition and channel.
+
+    Arguments:
+        partition -- Tile partition name (LBA, LBC, EBA, EBC)
+        channel   -- Tile channel number ([0..47])
+    '''
+    return _cellNameLB[channel] if partition.startswith('L') else _cellNameEB[channel]
+
+
+def getPartitionName(ros):
+    '''
+    This function returns name of Tile partition for given ROS.
+
+    Arguments:
+        ros -- Tile ROS ([0..5])
+    '''
+    return _partitionName[ros]
+
+
+def addValueVsModuleAndChannelMaps(group, name, title, path, subDirectory = False, type = 'TH2D', value = '', trigger = '', run = ''):
+    '''
+    This function configures 2D histograms (maps) with Tile monitored value vs module and channel per partion.
+
+    Arguments:
+        group   -- Group (technically, a GenericMonitoringTool instance)
+        name    -- Name of histogram (actual name is constructed dynamicaly like: name + partition + trigger)
+        title   -- Title of histogram (actual title is constructed dynamicaly like: run + trigger + partion + title)
+        path    -- Path in file for histogram (relative to the path of given group)
+        subDirectory -- Put the configured histograms into sub directory named like partion (True, False)
+        type    -- Type of histogram (TH2D, TProfile2D)
+        value   -- Name of monitored value (needed for TProfile2D)
+        trigger -- Name of trigger (given it will be put into title and name of histogram)
+        run     -- Run number (given it will be put into the title)
+    '''
+
+    from TileCalibBlobObjs.Classes import TileCalibUtils as Tile
+
+    for ros in range(1, Tile.MAX_ROS):
+        partition = getPartitionName(ros)
+        labels = []
+        for module in range(1, Tile.MAX_DRAWER + 1): # modules start from 1
+            label = partition + '0' + str(module) if module < 10 else partition + str(module)
+            labels.append(label)
+            
+        for channel in range(0, Tile.MAX_CHAN):
+            cellName = getCellName(partition, channel)
+            label = cellName + '_' + 'ch' + str(channel) if cellName else 'ch' + str(channel)
+            labels.append(label)
+
+        fullName = 'module' + partition + ',channel' + partition
+        if 'Profile' in type: fullName += (',' + value + partition)
+        fullName += ';' + name + partition + trigger
+
+        fullPath = path + '/' + partition if subDirectory else path
+
+        fullTitle = 'Partition ' + partition + ': ' + title
+        if trigger: fullTitle = 'Trigger ' + trigger + ' ' + fullTitle
+        if run:     fullTitle = 'Run ' + run + ' ' + fullTitle
+
+        group.defineHistogram( fullName, path = fullPath, type = type, title = fullTitle,
+                               xbins = 64, xmin = 0.5, xmax = 64.5, ybins = 48, ymin = -0.5, ymax = 47.5, 
+                               labels = labels )
diff --git a/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
new file mode 100644
index 000000000000..cacfea01c2b8
--- /dev/null
+++ b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
@@ -0,0 +1,460 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TileJetMonitorAlgorithm.h"
+
+#include "TileEvent/TileCell.h"
+#include "TileIdentifier/TileHWID.h"
+#include "TileIdentifier/TileFragHash.h"
+#include "TileCalibBlobObjs/TileCalibUtils.h"
+#include "TileConditions/TileCablingSvc.h"
+#include "TileConditions/TileCablingService.h"
+
+#include "CaloIdentifier/TileID.h"
+#include "CaloEvent/CaloCell.h"
+//#include "CaloEvent/CaloCluster.h"
+
+
+#include "StoreGate/ReadHandle.h"
+#include <xAODCore/ShallowCopy.h>
+#include "xAODCaloEvent/CaloCluster.h"
+//#include "JetUtils/JetCaloQualityUtils.h"
+//#include "JetUtils/JetCellAccessor.h"
+
+
+TileJetMonitorAlgorithm::TileJetMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
+  : AthMonitorAlgorithm(name, pSvcLocator)
+  , m_tileID{nullptr}
+  , m_tileHWID{nullptr}
+  , m_cabling{nullptr}
+{}
+
+
+TileJetMonitorAlgorithm::~TileJetMonitorAlgorithm() {}
+
+
+StatusCode TileJetMonitorAlgorithm::initialize() {
+
+  ATH_CHECK( AthMonitorAlgorithm::initialize() );
+
+  ATH_MSG_INFO("in initialize()");
+
+  ATH_CHECK( detStore()->retrieve(m_tileID) );
+  ATH_CHECK( detStore()->retrieve(m_tileHWID) );
+
+  //=== get TileCablingSvc
+  ServiceHandle<TileCablingSvc> cablingSvc("TileCablingSvc", name());
+  ATH_CHECK( cablingSvc.retrieve() );
+
+  //=== cache pointers to cabling helpers
+  m_cabling = cablingSvc->cablingService();
+ 
+  if (!m_cabling) {
+    ATH_MSG_ERROR( "Pointer to TileCablingService is zero: " << m_cabling);
+    return StatusCode::FAILURE;
+  }
+
+  ATH_MSG_INFO("value of m_doJetCleaning: " << m_doJetCleaning);
+
+  //=== get TileBadChanTool
+  ATH_MSG_DEBUG("::Retrieving tile bad channel tool");
+  ATH_CHECK(m_tileBadChanTool.retrieve());
+  ATH_MSG_DEBUG("::Retrieved tile bad channel tool");
+
+  if (m_doJetCleaning) {
+    ATH_MSG_DEBUG("::initializing JVT updater");
+    ATH_CHECK(m_jvt.retrieve());
+    ATH_MSG_DEBUG("::initialized JVT updater");
+    
+    ATH_MSG_DEBUG("::initializing JetCleaningTool");
+    ATH_CHECK(m_jetCleaningTool.retrieve());
+    ATH_CHECK(m_eventCleaningTool.retrieve());
+    ATH_MSG_DEBUG("::initialized JetCleaningTool");
+  } else {
+    m_jvt.disable();
+    m_jetCleaningTool.disable();
+    m_eventCleaningTool.disable();
+  }
+
+  ATH_CHECK( m_jetContainerKey.initialize() );
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode TileJetMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
+
+  // In case you want to measure the execution time
+  auto timer = Monitored::Timer("TIME_execute");
+
+  if (!isGoodEvent(ctx)) {
+    ATH_MSG_DEBUG("::fillHistograms(), event skipped ");
+    return StatusCode::SUCCESS;
+  } else {
+    ATH_MSG_DEBUG("::fillHistograms(), event accepted ");
+  }
+
+  SG::ReadHandle<xAOD::JetContainer> jetContainer(m_jetContainerKey);
+  if (!jetContainer.isValid()) {
+    ATH_MSG_WARNING("Can't retrieve Jet Container: " << m_jetContainerKey.key());
+    return StatusCode::SUCCESS;
+  }
+
+  uint32_t lumiBlock = GetEventInfo(ctx)->lumiBlock();
+
+  ATH_MSG_VERBOSE("::fillHistograms(), lumiblock " << lumiBlock);
+
+  std::set<Identifier> usedCells;  // cells already used in the given event
+
+  int iJet = 0;
+  for (const xAOD::Jet* jet : *jetContainer) {
+    if ((jet->pt() > m_jetPtMin) && (fabs(jet->eta()) < m_jetEtaMax)) {
+      if (isGoodJet(*jet)) {
+        ATH_MSG_DEBUG("::fillHistograms, jet " << iJet
+			                << ", eta " << jet->eta()
+			                << ", phi " << jet->phi()
+			                << ", constituents " << jet->numConstituents());
+        CHECK(fillTimeHistograms(*jet, lumiBlock, usedCells));
+      } else {
+        ATH_MSG_DEBUG("::fillHistogram, BAD jet " << iJet
+                      << ", eta " << jet->eta()
+                      << ", phi " << jet->phi()
+                      << ", constituents " << jet->numConstituents());
+      }
+    }
+    ++iJet;
+  }
+
+
+  fill("TileJetMonExecuteTime", timer);
+
+  ATH_MSG_VERBOSE("::fillHistograms(), end-of-loops ");
+
+  return StatusCode::SUCCESS;
+}
+
+
+/*---------------------------------------------------------*/  
+StatusCode TileJetMonitorAlgorithm::fillTimeHistograms(const xAOD::Jet& jet, uint32_t lumiBlock, std::set<Identifier>& usedCells) const {
+/*---------------------------------------------------------*/  
+
+  ATH_MSG_VERBOSE( "in fillTimeHistograms()" );
+
+  if( jet.numConstituents() == 0 || !jet.getConstituents().isValid()) return StatusCode::SUCCESS;
+     
+  int cellIndex(-1);
+
+  ToolHandle<GenericMonitoringTool> tileJetChannTimeDQTool = getGroup("TileJetChanTimeDQ");
+
+  std::array<std::string, 2> gainName{"LG", "HG"};
+  std::array<std::string, 5> partitionName{"AUX", "LBA", "LBC", "EBA", "EBC"};
+
+  for (const xAOD::JetConstituent* jet_constituent : jet.getConstituents()) {
+    if( jet_constituent->type() == xAOD::Type::CaloCluster ){
+      const xAOD::CaloCluster* calo_cluster = static_cast<const xAOD::CaloCluster*>(jet_constituent->rawConstituent());
+      if (calo_cluster && calo_cluster->getCellLinks()) {
+        for (const CaloCell* cell : *calo_cluster) {
+          cellIndex++;
+          if (cell->caloDDE()->getSubCalo() == CaloCell_ID::TILE) { // a Tile Cell
+            ATH_MSG_DEBUG("Cell " << cellIndex << " IS TILECAL !!");
+            const TileCell *tilecell = (TileCell*) cell;
+            Identifier id = tilecell->ID();
+            if (usedCells.find(id) == usedCells.end()) {
+              usedCells.insert(id);
+            } else {
+              continue;
+            }
+            //      int section= m_tileID->section(id);
+            // int module = m_tileID->module(id); // ranges 0..63
+            auto module = Monitored::Scalar<int>("module", m_tileID->module(id));
+            int sample = m_tileID->sample(id); // ranges 0..3 (A, BC, D, E)
+            int ros1 = 0;
+            int ros2 = 0;
+            int chan1 = -1;
+            int chan2 = -1;
+            uint32_t bad1 = 0;
+            uint32_t bad2 = 0;
+            int gain1 = tilecell->gain1();
+            int gain2 = tilecell->gain2();
+            unsigned int qbit1 = tilecell->qbit1();
+            unsigned int qbit2 = tilecell->qbit2();
+            
+            const CaloDetDescrElement * caloDDE = tilecell->caloDDE();
+            IdentifierHash hash1 = caloDDE->onl1();
+            if (hash1 != TileHWID::NOT_VALID_HASH) {
+              HWIdentifier adc_id = m_tileHWID->adc_id(hash1, gain1);
+              ros1 = m_tileHWID->ros(adc_id);
+              chan1 = m_tileHWID->channel(adc_id);
+              bad1 = m_tileBadChanTool->encodeStatus(m_tileBadChanTool->getAdcStatus(adc_id));
+            }
+            
+            // How is it here with partition? D0 spans two partitions....
+            // It should be ok to treat it in this way:
+            IdentifierHash hash2 = caloDDE->onl2();
+            if (hash2 != TileHWID::NOT_VALID_HASH) {
+              HWIdentifier adc_id = m_tileHWID->adc_id(hash2, gain2);
+              ros2 = m_tileHWID->ros(adc_id);
+              chan2 = m_tileHWID->channel(adc_id);
+              bad2 = m_tileBadChanTool->encodeStatus(m_tileBadChanTool->getAdcStatus(adc_id));
+            }
+
+            bool is_good1 = isGoodChannel(ros1, module, chan1, bad1, qbit1, id);
+            bool is_good2 = isGoodChannel(ros2, module, chan2, bad2, qbit2, id);
+            float ene1 = is_good1 ? tilecell->ene1() : -1;
+            float ene2 = is_good2 ? tilecell->ene2() : -1;
+            
+            ATH_MSG_DEBUG(".... " << TileCalibUtils::getDrawerString(ros1, module)
+                          << ", ch1 " << chan1
+                          << ", ch2 " << chan2
+                          << ", qbit " << qbit1 << "/" << qbit2
+                          << ", is_bad " << bad1 << "/" << bad2
+                          << ", isGood " << is_good1
+                          << "/" << is_good2
+                          << ", ene " << tilecell->energy());
+            /*
+              Now really fill the histograms time vs lumiblock and 1dim time
+            */
+            
+            // first channel
+            if (is_good1 && (ene1 > m_energyChanMin) && (ene1 < m_energyChanMax)) {
+              if (m_do1DHistograms) {
+                std::string name = TileCalibUtils::getDrawerString(ros1, module) + "_ch_" + std::to_string(chan1) + "_1d";
+                auto channelTime = Monitored::Scalar<float>(name, tilecell->time1());
+                fill("TileJetChanTime1D", channelTime);
+              }
+
+              if (m_do2DHistograms) {
+                ATH_MSG_WARNING("This histograms are not implemented yet!");
+              }
+
+              // info for DQ histograms
+              auto moduleDQ = Monitored::Scalar<int>("module" + partitionName[ros1], module + 1);
+              auto channelDQ = Monitored::Scalar<int>("channel" + partitionName[ros1], chan1);
+              auto timeDQ = Monitored::Scalar<float>("time" + partitionName[ros1], tilecell->time1());
+              Monitored::fill(tileJetChannTimeDQTool, moduleDQ, channelDQ, timeDQ);
+
+              // general histograms, only require non-affected channels
+              if (bad1 < 2) {
+                ATH_MSG_DEBUG( "Filling in time1 for " << TileCalibUtils::getDrawerString(ros1, module)
+                               << ", ch " << chan1
+                               << ", ene " << ene1
+                               << ", LB " << lumiBlock
+                               << ", time: " << tilecell->time1());
+
+                std::string name("channelTime" + partitionName[ros1]);
+                auto channelTime = Monitored::Scalar<float>(name, tilecell->time1());
+                fill("TileJetChanTime", channelTime);
+
+                if ((ros1 >= 3) && (sample < TileID::SAMP_E)) {
+                  std::string nameNoScint("channelTime" + partitionName[ros1] + "_NoScint");
+                  auto channelTimeNoScint = Monitored::Scalar<float>(nameNoScint, tilecell->time1());
+                  fill("TileJetChanTime", channelTimeNoScint);
+                }
+              }
+            }
+
+            // second channel
+            if (is_good2 && (ene2 > m_energyChanMin) && (ene2 < m_energyChanMax)) {
+              if (m_do1DHistograms) {
+                std::string name = TileCalibUtils::getDrawerString(ros2, module) + "_ch_" + std::to_string(chan2) + "_1d";
+                auto channelTime = Monitored::Scalar<float>(name, tilecell->time2());
+                fill("TileJetChanTime1D", channelTime);
+              }
+
+              if (m_do2DHistograms) {
+                ATH_MSG_WARNING("This histograms are not implemented yet!");
+              }
+
+              // info for DQ histograms
+              auto moduleDQ = Monitored::Scalar<int>("module" + partitionName[ros2], module + 1);
+              auto channelDQ = Monitored::Scalar<int>("channel" + partitionName[ros2], chan2);
+              auto timeDQ = Monitored::Scalar<float>("time" + partitionName[ros2], tilecell->time2());
+              Monitored::fill(tileJetChannTimeDQTool, moduleDQ, channelDQ, timeDQ);
+
+              // general histograms, only require non-affected channels
+              if (bad2 < 2) {
+                ATH_MSG_DEBUG( "Filling in time2 for " << TileCalibUtils::getDrawerString(ros2, module)
+                               << ", ch " << chan2
+                               << ", ene " << ene2
+                               << ", LB " << lumiBlock
+                               << ", time: " << tilecell->time2()
+                               <<" (qbit2 " << qbit2 << ", ch1 " << chan1 << ", ene1 " << ene1 << ", bad1 " << bad1 << ", qbit1 " << qbit1 << ")" );
+
+                std::string name("channelTime" + partitionName[ros2]);
+                auto channelTime = Monitored::Scalar<float>(name, tilecell->time2());
+                fill("TileJetChanTime", channelTime);
+
+                if ((ros2 > 2) && (sample < TileID::SAMP_E)) {
+                  std::string nameNoScint("channelTime" + partitionName[ros2] + "_NoScint");
+                  auto channelTimeNoScint = Monitored::Scalar<float>(nameNoScint, tilecell->time2());
+                  fill("TileJetChanTime", channelTimeNoScint);
+                }
+              }
+            }
+
+            /* 
+               Now filling the cell-based histograms,
+               HG-HG and LG-LG combinations only
+            */
+            if ((is_good1) && (is_good2) && (gain1 == gain2)) {
+
+              if (m_doEnergyDiffHistograms && (tilecell->energy() > m_energyDiffThreshold))  { 
+                // EneDiff histograms
+
+                int evenChannnel = (chan1 % 2 == 0) ? chan1 : chan2;
+                std::string name = TileCalibUtils::getDrawerString(ros1, module) + "_enediff_" 
+                                   + gainName[gain1] + "_ch1_" + std::to_string(evenChannnel);
+                auto energyDifference = Monitored::Scalar<float>(name, tilecell->eneDiff() / tilecell->energy());
+                fill("TileJetEnergyDiff", energyDifference);
+              }
+
+              if ((bad1 < 2) && (bad2 < 2)) {
+
+                // cell-time histograms, only overall, require not affected channels
+                if ((ros1 < 3) || (sample != TileID::SAMP_E)) {
+                  int index = findIndex(gain1, tilecell->energy());
+                  ATH_MSG_DEBUG( "Filling in cell-time for " << TileCalibUtils::getDrawerString(ros1, module)
+                                 << ", ch1 " << chan1  
+                                 << ", ch2 " << chan2  
+                                 << ", ene " << tilecell->energy()
+                                 << ", index " << index
+                                 << ", time: " << tilecell->time());
+                  
+                  std::string name("Cell_time_" + partitionName[ros1] + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
+                  auto cellTime = Monitored::Scalar<float>(name, tilecell->time());
+                  fill("TileJetCellTime", cellTime);
+                  
+                  if (m_doEnergyProfiles) {
+                    std::string indexName("index_" + partitionName[ros1] + "_" + gainName[gain1]);
+                    auto energyIndex = Monitored::Scalar<float>(indexName, index);
+                    
+                    std::string energyName("energy_" + partitionName[ros1] + "_" + gainName[gain1]);
+                    auto cellEnergy = Monitored::Scalar<float>(energyName, tilecell->energy());
+                    
+                    fill("TileJetCellEnergyProfile", energyIndex, cellEnergy);
+                  } else {
+                    std::string name("Cell_ene_" + partitionName[ros1] + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
+                    auto cellEnergy = Monitored::Scalar<float>(name, tilecell->energy());
+                    fill("TileJetCellEnergy", cellEnergy);
+                  }
+
+                }
+              }
+            }
+          } else {
+            ATH_MSG_DEBUG("Cell " << cellIndex << " is NOT Tilecal");
+          }
+        }
+      }
+    }
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+
+
+bool TileJetMonitorAlgorithm::isGoodChannel(int ros, int module, int channel, uint32_t bad, unsigned int qbit, Identifier id) const {
+
+  if ((ros < 1) || (ros >= (int) TileCalibUtils::MAX_ROS)) return false; // invalid partition
+
+  if ((module < 0) || (module >= (int) TileCalibUtils::MAX_DRAWER)) return false;  // invalid module number
+
+  if (m_cabling->channel2hole(ros, channel) <= 0) 
+    return false; // non-existing PMT (empty hole)
+
+  if (((qbit & TileCell::MASK_BADCH) != 0) || // masked as bad
+      ((qbit & TileCell::MASK_TIME) != TileCell::MASK_TIME) ||  // flagged
+      ((qbit & TileCell::MASK_ALGO) == TileFragHash::OptFilterDsp)) // in DSP
+
+    return false;
+  /* 
+   bad is the status in the DB (see http://alxr.usatlas.bnl.gov/lxr-stb6/source/atlas/TileCalorimeter/TileConditions/src/TileBadChanTool.cxx#390).
+   Meaning:
+   0 = good, 1 = noisy, 2 = affected, 3 = bad, 4 = otherwise
+   */
+  if (bad > 2) return false;
+
+  /* 
+     Now check for special C10, merged E1, E4'
+     C10 spec is ok only if channel = 5 (i.e. pmt=6). The other is pmt=5
+     E1 merged and E4' should be dropped if channel = 12 (i.e. pmt=13)
+  */
+  return ((( channel != 4) && (channel != 12)) || m_cabling->TileGap_connected(id));
+}
+
+
+bool TileJetMonitorAlgorithm::isGoodEvent(const EventContext& ctx) const {
+  /* check for errors in LAr and Tile, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/DataPreparationCheckListForPhysicsAnalysis
+   */
+  if (! m_doEventCleaning) return true;
+
+  ATH_MSG_DEBUG("::isGoodEvent()....");
+
+  SG::ReadHandle<xAOD::EventInfo> eventInfo = GetEventInfo(ctx);
+
+  if (eventInfo->errorState(xAOD::EventInfo::LAr) == xAOD::EventInfo::Error) return false;
+  if (eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error) return false;
+
+  /* see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJets2017
+  */
+  if (! m_doJetCleaning) return true;
+
+  const xAOD::JetContainer* jetContainer = nullptr;
+  if (! evtStore()->retrieve(jetContainer, "AntiKt4EMTopoJets").isSuccess()){
+    ATH_MSG_INFO("Cannot retrieve AntiKt4EMTopoJets. However, returning true.");
+    return true;
+  }
+
+  auto jetsSC = xAOD::shallowCopyContainer(*jetContainer);
+  std::unique_ptr< xAOD::JetContainer > jetsCopy(jetsSC.first);
+  std::unique_ptr< xAOD::ShallowAuxContainer > jetsCopyAux(jetsSC.second);
+  int iJet = 0;
+  for (auto jet : *jetsCopy) {
+    ATH_MSG_DEBUG("Jet " << iJet << ", pT " << jet->pt()/1000.0 << " GeV, eta " 
+		  << jet->eta());
+    jet->auxdata<char>(m_jvtDecorator) = passesJvt(*jet);
+    jet->auxdata<char>(m_orDecorator) = true;
+    ATH_MSG_DEBUG("... done with jet " << iJet);
+    ++iJet;
+  }
+
+  bool accept = m_eventCleaningTool->acceptEvent(&*jetsCopy);
+
+  return accept;
+}
+
+
+bool TileJetMonitorAlgorithm::passesJvt(const xAOD::Jet& jet) const {
+
+  if (jet.pt() > m_jetPtMin
+      && jet.pt() < m_jetPtMax
+      && fabs(jet.getAttribute<float>("DetectorEta")) < m_jetTrackingEtaLimit
+      && m_jvt->updateJvt(jet) < m_jvtThreshold)
+    return false;
+  return true;
+
+}
+
+bool TileJetMonitorAlgorithm::isGoodJet(const xAOD::Jet& jet) const {
+
+  if (! m_doJetCleaning) return true;
+  if (jet.pt() < m_jetPtMin) return false;
+  if (! passesJvt(jet)) return false;
+  if (! m_jetCleaningTool->keep(jet)) return false;
+  return true;
+
+}
+
+unsigned int TileJetMonitorAlgorithm::findIndex(const int gain, const float energy) const {
+
+  if (gain == 1) {
+    return (std::upper_bound(m_cellEnergyUpperLimitsHG.begin(), m_cellEnergyUpperLimitsHG.end(), energy) 
+            - m_cellEnergyUpperLimitsHG.begin());
+  } else {
+    return (std::upper_bound(m_cellEnergyUpperLimitsLG.begin(), m_cellEnergyUpperLimitsLG.end(), energy) 
+            - m_cellEnergyUpperLimitsLG.begin());
+  }
+
+}
diff --git a/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.h b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.h
new file mode 100644
index 000000000000..96c4ec49c263
--- /dev/null
+++ b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.h
@@ -0,0 +1,93 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TILEMONITORING_TILEJETMONITORALGORITHM
+#define TILEMONITORING_TILEJETMONITORALGORITHM
+
+#include "AthenaMonitoring/AthMonitorAlgorithm.h"
+#include "AthenaMonitoring/Monitored.h"
+
+#include "TileConditions/ITileBadChanTool.h"
+
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODJet/JetContainer.h"
+
+// JVT
+#include "JetInterface/IJetUpdateJvt.h"
+// Jet cleaning
+#include "JetInterface/IJetSelector.h"
+// Event cleaning
+#include "JetSelectorTools/IEventCleaningTool.h"
+
+
+class TileCablingService;
+class TileID;
+class TileHWID;
+
+/** @class TileJetMonitorAlgorithm
+ *  @brief Class for Tile Jet based monitoring
+ */
+
+class TileJetMonitorAlgorithm : public AthMonitorAlgorithm {
+
+  public:
+
+    TileJetMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator );
+    virtual ~TileJetMonitorAlgorithm();
+    virtual StatusCode initialize() override;
+    virtual StatusCode fillHistograms( const EventContext& ctx ) const override;
+
+  private:
+
+    StatusCode fillTimeHistograms(const xAOD::Jet& jet, uint32_t lumiBlock, std::set<Identifier>& usedCells) const;
+    unsigned int findIndex(const int gain, const float energy) const;
+    bool isGoodChannel(int part, int module, int channel, uint32_t bad, unsigned int qbit, Identifier id) const;
+    bool passesJvt(const xAOD::Jet& jet) const;
+    bool isGoodJet(const xAOD::Jet& jet) const;
+    bool isGoodEvent(const EventContext& ctx) const;
+
+    Gaudi::Property<float> m_jetPtMin{this, "JetPtMin", 20000., "Threshold in MeV"};
+    Gaudi::Property<float> m_jetPtMax{this, "JetPtMax", 120000, ""};
+    Gaudi::Property<float> m_jetEtaMax{this, "JetEtaMax", 1.6, ""};
+    Gaudi::Property<float> m_energyChanMin{this, "ChannelEnergyMin", 2000, ""};
+    Gaudi::Property<float> m_energyChanMax{this, "ChannelEnergyMax", 4000, ""};
+    Gaudi::Property<bool> m_do1DHistograms{this, "Do1DHistograms", false, ""};
+    Gaudi::Property<bool> m_do2DHistograms{this, "Do2DHistograms", false, ""};
+    Gaudi::Property<bool> m_doEnergyDiffHistograms{this, "DoEnergyDiffHistograms", false, ""};
+    Gaudi::Property<float> m_energyDiffThreshold{this, "EnergyDiffThreshold", 2000, ""};
+    Gaudi::Property<bool> m_doEnergyProfiles{this, "DoEnergyProfiles", true, ""};
+    Gaudi::Property<bool> m_doEventCleaning{this, "DoEventCleaning", true, ""};
+    Gaudi::Property<bool> m_doJetCleaning{this, "DoJetCleaning", false, ""};
+    Gaudi::Property<float> m_jetTrackingEtaLimit{this, "JetTrackingEtaLimit", 2.4, ""};
+    Gaudi::Property<float> m_jvtThreshold{this, "JvtThreshold", 0.59, ""};
+    Gaudi::Property<std::string> m_jvtDecorator{this, "JvtDecorator", "passJvt", ""};
+    Gaudi::Property<std::string> m_orDecorator{this, "OrDecorator", "passOR", ""};
+    Gaudi::Property<std::vector<float>> m_cellEnergyUpperLimitsHG{this, 
+        "CellEnergyUpperLimitsHG", {}, "Energy upper limits of the HG cell-time histograms"};
+    Gaudi::Property<std::vector<float>> m_cellEnergyUpperLimitsLG{this,
+        "CellEnergyUpperLimitsLG", {}, "Energy upper limits of the LG cell-time histograms"};
+
+    ToolHandle<ITileBadChanTool> m_tileBadChanTool{this, 
+        "TileBadChanTool", "TileBadChanTool", "Tile bad channel tool"};
+
+    // JVT
+    ToolHandle<IJetUpdateJvt> m_jvt{this, "JVT", "", ""};
+
+    // event/jet cleaning
+    ToolHandle<IJetSelector> m_jetCleaningTool{this, "JetCleaningTool", "", ""};
+    ToolHandle<ECUtils::IEventCleaningTool> m_eventCleaningTool{this, "EventCleaningTool", "", ""};
+
+
+    SG::ReadHandleKey<xAOD::JetContainer> m_jetContainerKey{this,
+        "JetContainer", "AntiKt4EMTopoJets", "Jet container for monitoring"};
+
+
+   const TileID* m_tileID;
+   const TileHWID* m_tileHWID;
+
+   const TileCablingService* m_cabling; //!< TileCabling instance
+
+};
+
+#endif // TILEMONITORING_TILEJETMONITORALGORITHM
diff --git a/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx b/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx
index b9951b659034..a60e851c537b 100644
--- a/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx
+++ b/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx
@@ -22,6 +22,7 @@
 #include "TileMonitoring/TileTBBeamMonTool.h"
 #include "TileMonitoring/TileTBMonTool.h"
 #include "TileMonitoring/TileTBCellMonTool.h"
+#include "../TileJetMonitorAlgorithm.h"
 
 DECLARE_COMPONENT( TileFatherMonTool )
 DECLARE_COMPONENT( TilePaterMonTool )
@@ -47,4 +48,5 @@ DECLARE_COMPONENT( TileRawChannelNoiseMonTool )
 DECLARE_COMPONENT( TileTBBeamMonTool )
 DECLARE_COMPONENT( TileTBMonTool )
 DECLARE_COMPONENT( TileTBCellMonTool )
+DECLARE_COMPONENT( TileJetMonitorAlgorithm )
 
-- 
GitLab


From 655bf8da84bd8194cd4e63de17ecb2a463db1193 Mon Sep 17 00:00:00 2001
From: scott snyder <scott.snyder@cern.ch>
Date: Wed, 20 Mar 2019 19:09:44 +0100
Subject: [PATCH 143/163] TrigT1Interfaces: Fix gcc9 warnings.

In C++11, implicit declarations of copy and assignment are deprecated if the
class has a user defined destructor or copy or assignment.  gcc9 now warns
about this by default.
Adjust to avoid the warning.
---
 .../TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h  | 4 ++--
 .../TrigT1Interfaces/TrigT1Interfaces/CoordinateRange.h    | 4 ++--
 .../TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1Topo.h       | 3 ++-
 .../TrigT1Interfaces/MuCTPIL1TopoCandidate.h               | 2 +-
 .../TrigT1/TrigT1Interfaces/TrigT1Interfaces/PhiRange.h    | 2 +-
 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Range.h   | 2 +-
 .../TrigT1Interfaces/TrigT1Interfaces/iRecCoordRoI.h       | 2 +-
 Trigger/TrigT1/TrigT1Interfaces/src/Coordinate.cxx         | 7 +------
 Trigger/TrigT1/TrigT1Interfaces/src/CoordinateRange.cxx    | 5 +----
 Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1Topo.cxx       | 4 ----
 .../TrigT1/TrigT1Interfaces/src/MuCTPIL1TopoCandidate.cxx  | 3 ---
 Trigger/TrigT1/TrigT1Interfaces/src/PhiRange.cxx           | 4 ----
 Trigger/TrigT1/TrigT1Interfaces/src/Range.cxx              | 4 ----
 Trigger/TrigT1/TrigT1Interfaces/src/iRecCoordRoI.cxx       | 2 --
 14 files changed, 12 insertions(+), 36 deletions(-)

diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h
index bd3fc94a31fc..7f91c22ea268 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h
@@ -1,6 +1,6 @@
 // Dear emacs, this is -*- c++ -*-
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          Coordinate.h  -  description
@@ -47,7 +47,7 @@ namespace LVL1 {
    public:
       Coordinate( double phi, double eta );
       Coordinate();
-      virtual ~Coordinate();
+      virtual ~Coordinate() = default;
 
       void setCoords( double phi, double eta );
       double eta() const;
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CoordinateRange.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CoordinateRange.h
index ee78f281f594..4615c274f448 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CoordinateRange.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/CoordinateRange.h
@@ -1,6 +1,6 @@
 // Dear emacs, this is -*- c++ -*-
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          CoordinateRange.h  -  description
@@ -32,7 +32,7 @@ class CoordinateRange : public Coordinate {
  public:
   CoordinateRange(double phiMin, double phiMax, double etaMin, double etaMax);
   CoordinateRange();
-  virtual ~CoordinateRange();
+  virtual ~CoordinateRange() = default;
 
   void setRanges(double phiMin, double phiMax, double etaMin, double etaMax);
   PhiRange phiRange() const;
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1Topo.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1Topo.h
index 82c0162ba4cc..d06eecc2332b 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1Topo.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1Topo.h
@@ -27,7 +27,8 @@ namespace LVL1 {
      //constructor 
       MuCTPIL1Topo();
       MuCTPIL1Topo(std::vector<MuCTPIL1TopoCandidate> candList);
-      ~MuCTPIL1Topo();
+      MuCTPIL1Topo(const MuCTPIL1Topo&) = default;
+      ~MuCTPIL1Topo() = default;
 
      //Return the vector of muon to L1Topo candidates
      std::vector<MuCTPIL1TopoCandidate> getCandidates() const;
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1TopoCandidate.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1TopoCandidate.h
index f7743521fca3..06df7aa77ed3 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1TopoCandidate.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPIL1TopoCandidate.h
@@ -27,7 +27,7 @@ namespace LVL1 {
      MuCTPIL1TopoCandidate();
      
      
-     ~MuCTPIL1TopoCandidate();
+     ~MuCTPIL1TopoCandidate() = default;
      
      // set candidate data
      void setCandidateData(std::string  sectorName, 
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/PhiRange.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/PhiRange.h
index b9e6ce2a4c3a..c8fa26ba8559 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/PhiRange.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/PhiRange.h
@@ -19,7 +19,7 @@ namespace LVL1 {
   public:
     PhiRange();
     PhiRange( double min, double max );
-    virtual ~PhiRange();
+    ~PhiRange() = default;
 
     double min() const;
     double max() const;
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Range.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Range.h
index f413ca52739c..98df82f9fe42 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Range.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Range.h
@@ -19,7 +19,7 @@ namespace LVL1 {
   public:
     Range() ;
     Range( double min, double max );
-    virtual ~Range();
+    ~Range() = default;
 
     double min() const;
     double max() const;
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/iRecCoordRoI.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/iRecCoordRoI.h
index b22be68336bd..35ea8f22f5be 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/iRecCoordRoI.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/iRecCoordRoI.h
@@ -27,7 +27,7 @@ class iRecCoordRoI {
 
 public:
    iRecCoordRoI();
-   virtual ~iRecCoordRoI();
+   virtual ~iRecCoordRoI() = default;
    /** override this method & return eta coord */
    virtual double eta() const = 0;
    /** override this method & return phi coord */
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Coordinate.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Coordinate.cxx
index 5a41447dc4d4..8dc6efc97fdd 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/Coordinate.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/Coordinate.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          Coordinate.cxx  -  description
@@ -27,11 +27,6 @@ namespace LVL1 {
 
   }
 
-  // Destructor
-  Coordinate::~Coordinate() {
-
-  }
-
   /** change coords of an existing Coordinate object*/
   void Coordinate::setCoords( double phi, double eta ) {
 
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/CoordinateRange.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/CoordinateRange.cxx
index 4bf3383ed2b6..aba45f676289 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/CoordinateRange.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/CoordinateRange.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 /***************************************************************************
                          CoordinateRange.cxx  -  description
@@ -22,9 +22,6 @@ CoordinateRange::CoordinateRange(double phiMin, double phiMax, double etaMin,
 CoordinateRange::CoordinateRange()
     : m_phiRange(0.0, 0.0), m_etaRange(0.0, 0.0) {}
 
-// Destructor
-CoordinateRange::~CoordinateRange() {}
-
 /** change coords of an existing CoordinateRange object*/
 void CoordinateRange::setRanges(double phiMin, double phiMax, double etaMin,
                                 double etaMax) {
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1Topo.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1Topo.cxx
index 040504058a00..541e4d09b82c 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1Topo.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1Topo.cxx
@@ -13,10 +13,6 @@ namespace LVL1 {
     m_muonTopoCandidates = candList;
   }
 
-  MuCTPIL1Topo::~MuCTPIL1Topo() {
-
-  }
-
   MuCTPIL1Topo& MuCTPIL1Topo::operator=( const MuCTPIL1Topo& a ) {
     
     clearCandidates();
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1TopoCandidate.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1TopoCandidate.cxx
index 81f3c0e58bc1..d4d43b48ce71 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1TopoCandidate.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPIL1TopoCandidate.cxx
@@ -13,9 +13,6 @@ namespace LVL1 {
     m_bcid(0), m_ptThresholdID(0), m_ptL1TopoCode(0), m_ptValue(0), m_eta(0), m_phi(0), m_etacode(0), m_phicode(0), 
     m_etamin(0), m_etamax(0), m_phimin(0), m_phimax(0), m_roiWord(0), m_mioctID(0), m_ieta(0), m_iphi(0) {}
 
-  MuCTPIL1TopoCandidate::~MuCTPIL1TopoCandidate() {
-
-  }
   void MuCTPIL1TopoCandidate::setCandidateData(std::string  sectorName, 
 					       unsigned int roiID,     
 					       unsigned int bcid,      
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/PhiRange.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/PhiRange.cxx
index f82d1328871c..d8b7be3b46cf 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/PhiRange.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/PhiRange.cxx
@@ -27,10 +27,6 @@ namespace LVL1 {
     checkValues();
   }
 
-  PhiRange::~PhiRange() {
-
-  }
-
   double PhiRange::min() const {
     return m_min;
   }
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Range.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Range.cxx
index 2d4de1344fa8..eba9169d695c 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/Range.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/Range.cxx
@@ -23,10 +23,6 @@ namespace LVL1 {
     checkValues();
   }
 
-  Range::~Range() {
-
-  }
-
   double Range::min() const {
     return m_min;
   }
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/iRecCoordRoI.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/iRecCoordRoI.cxx
index a56186926de4..cfb5a4790fa0 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/iRecCoordRoI.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/iRecCoordRoI.cxx
@@ -12,5 +12,3 @@
 
 iRecCoordRoI::iRecCoordRoI(){
 }
-iRecCoordRoI::~iRecCoordRoI(){
-}
-- 
GitLab


From eb533670eb5b9029ec1730859731261245888abb Mon Sep 17 00:00:00 2001
From: Alison Elliot <alison.elliot@cern.ch>
Date: Wed, 20 Mar 2019 18:15:41 +0000
Subject: [PATCH 144/163] l1calo athenaMT migration to readhandles

---
 .../TrigT1CaloSim/Run2TriggerTowerMaker.h     | 10 ++---
 .../python/TrigT1CaloSimRun2Config.py         |  3 ++
 .../share/TrigT1CaloSimJobOptions_Run2.py     |  3 ++
 .../src/Run2TriggerTowerMaker.cxx             | 39 +++++++++++++------
 .../TrigT1Interfaces/TrigT1CaloDefs.h         |  1 +
 .../TrigT1Interfaces/src/TrigT1CaloDefs.cxx   |  1 +
 6 files changed, 39 insertions(+), 18 deletions(-)

diff --git a/Trigger/TrigT1/TrigT1CaloSim/TrigT1CaloSim/Run2TriggerTowerMaker.h b/Trigger/TrigT1/TrigT1CaloSim/TrigT1CaloSim/Run2TriggerTowerMaker.h
index d94a92a38a21..f655f8c48a4c 100755
--- a/Trigger/TrigT1/TrigT1CaloSim/TrigT1CaloSim/Run2TriggerTowerMaker.h
+++ b/Trigger/TrigT1/TrigT1CaloSim/TrigT1CaloSim/Run2TriggerTowerMaker.h
@@ -131,9 +131,6 @@ private:
   //Flag to enable zero suppression (makes algorithm simulation much faster
   bool m_ZeroSuppress;
 
-  // locations within the TES to store collections of Trigger Towers
-  std::string m_outputLocation;
-
   // require all calorimeters, or allow running with some missing?
   bool m_requireAllCalos;
 
@@ -269,9 +266,10 @@ private:
   SG::ReadHandleKey<xAOD::EventInfo> m_xaodevtKey;
   //  location of input TriggerTowers (for reprocessing)
   SG::ReadHandleKey<xAOD::TriggerTowerContainer> m_inputTTLocation;
-  // locations within the TES to store collections of Trigger Towers
-  //SG::WriteHandleKey<xAOD::TriggerTowerContainer> m_outputLocation;
-  //SG::WriteHandleKey<xAOD::TriggerTowerAuxContainer> m_outputAuxLocation;
+  // locations within StoreGate to store collections of Trigger Towers
+  SG::WriteHandleKey<xAOD::TriggerTowerContainer> m_outputLocation;
+  // locations within StoreGate to store collections of Trigger Towers for reprocessing
+  SG::WriteHandleKey<xAOD::TriggerTowerContainer> m_outputLocationRerun;
 
   // location of LAr TTL1 data
   SG::ReadHandleKey<LArTTL1Container> m_EmTTL1ContainerName;
diff --git a/Trigger/TrigT1/TrigT1CaloSim/python/TrigT1CaloSimRun2Config.py b/Trigger/TrigT1/TrigT1CaloSim/python/TrigT1CaloSimRun2Config.py
index 574d7211dc64..0afdb6d4bab3 100644
--- a/Trigger/TrigT1/TrigT1CaloSim/python/TrigT1CaloSimRun2Config.py
+++ b/Trigger/TrigT1/TrigT1CaloSim/python/TrigT1CaloSimRun2Config.py
@@ -37,6 +37,9 @@ class Run2TriggerTowerMaker(Run2TriggerTowerMakerBase):
         super(Run2TriggerTowerMaker, self).__init__(name)
         self.CellType = 3 # TTL1 input
         self.ZeroSuppress = True
+
+        from SGComps.AddressRemappingSvc import addInputRename
+        addInputRename ( 'xAOD::TriggerTowerContainer', 'xAODTriggerTowers_rerun', 'xAODTriggerTowers')
         
         from AthenaCommon import CfgMgr
         from AthenaCommon.AppMgr import ToolSvc
diff --git a/Trigger/TrigT1/TrigT1CaloSim/share/TrigT1CaloSimJobOptions_Run2.py b/Trigger/TrigT1/TrigT1CaloSim/share/TrigT1CaloSimJobOptions_Run2.py
index 77a4e2bb8daf..d4d3aa4a24cd 100755
--- a/Trigger/TrigT1/TrigT1CaloSim/share/TrigT1CaloSimJobOptions_Run2.py
+++ b/Trigger/TrigT1/TrigT1CaloSim/share/TrigT1CaloSimJobOptions_Run2.py
@@ -22,6 +22,9 @@ job = AlgSequence()
 include('TrigT1CaloCalibConditions/L1CaloCalibConditionsMC_jobOptions.py')
 from TrigT1CaloSim.TrigT1CaloSimRun2Config import Run2TriggerTowerMaker25ns, Run2TriggerTowerMaker50ns
 
+from SGComps.AddressRemappingSvc import addInputRename
+addInputRename ( 'xAOD::TriggerTowerContainer', 'xAODTriggerTowers_rerun', 'xAODTriggerTowers')
+
 # try to determine wheter running with 25ns/50ns bunchspacing
 _bunchSpacing = None
 _doPC = True # do pedestal correction?
diff --git a/Trigger/TrigT1/TrigT1CaloSim/src/Run2TriggerTowerMaker.cxx b/Trigger/TrigT1/TrigT1CaloSim/src/Run2TriggerTowerMaker.cxx
index d8ee708a12e3..916a73f17462 100755
--- a/Trigger/TrigT1/TrigT1CaloSim/src/Run2TriggerTowerMaker.cxx
+++ b/Trigger/TrigT1/TrigT1CaloSim/src/Run2TriggerTowerMaker.cxx
@@ -110,6 +110,7 @@ namespace LVL1 {
     declareProperty("RequireAllCalos",m_requireAllCalos=true,"Should EM,Had and Tile all be available?");
 
     declareProperty("TriggerTowerLocation", m_outputLocation= TrigT1CaloDefs::xAODTriggerTowerLocation);
+    declareProperty("TriggerTowerLocationRerun", m_outputLocationRerun = TrigT1CaloDefs::xAODTriggerTowerRerunLocation);
     declareProperty("CellType", m_cellType = TTL1);
 
     // ADC simulation
@@ -190,13 +191,26 @@ namespace LVL1 {
     ATH_CHECK(m_xaodevtKey.initialize());
 
     ATH_CHECK(m_inputTTLocation.initialize());
-    //ATH_CHECK(m_outputLocation.initialize());
-    //m_outputAuxLocation = m_outputAuxLocation.key() + "Aux.";
-    //ATH_CHECK(m_outputAuxLocation.initialize());
 
     ATH_CHECK(m_EmTTL1ContainerName.initialize());
     ATH_CHECK(m_HadTTL1ContainerName.initialize());
     ATH_CHECK(m_TileTTL1ContainerName.initialize());
+    ATH_CHECK(m_outputLocation.initialize());
+
+    ATH_CHECK(m_outputLocationRerun.initialize());
+    
+    //Rerun on trigger towers
+    if (m_cellType == TRIGGERTOWERS) {
+      renounce(m_EmTTL1ContainerName);
+      renounce(m_HadTTL1ContainerName);
+      renounce(m_TileTTL1ContainerName);
+      renounce(m_outputLocation);
+    }
+    //Start from RDO inputs
+    else if (m_cellType == TTL1) {
+      renounce(m_inputTTLocation);
+      renounce(m_outputLocationRerun);
+    }
 
     return StatusCode::SUCCESS;
   }
@@ -887,9 +901,6 @@ namespace LVL1 {
   StatusCode Run2TriggerTowerMaker::store()
   {
     ATH_MSG_DEBUG("Storing TTs in DataVector");
-    if(m_outputLocation.empty()) return StatusCode::SUCCESS;
-    //if(m_outputLocation.key().empty()) return StatusCode::SUCCESS;
-
     if(m_ZeroSuppress) {
       // remove trigger towers whose energy is 0
       m_xaodTowers->erase(std::remove_if(m_xaodTowers->begin(), m_xaodTowers->end(),
@@ -899,12 +910,16 @@ namespace LVL1 {
                           m_xaodTowers->end());
     }
 
-    CHECK(evtStore()->record(m_xaodTowers.release(), m_outputLocation));
-    CHECK(evtStore()->record(m_xaodTowersAux.release(), m_outputLocation+"Aux."));
-    //SG::WriteHandle<xAOD::TriggerTowerContainer> output(m_outputLocation);
-    //SG::WriteHandle<xAOD::TriggerTowerAuxContainer> outputAux(m_outputAuxLocation);
-    //CHECK(output.record(std::move(m_xaodTowers)));
-    //CHECK(outputAux.record(std::move(m_xaodTowersAux)));
+    
+
+    if (m_cellType == TRIGGERTOWERS) {
+      SG::WriteHandle<xAOD::TriggerTowerContainer> output(m_outputLocationRerun);
+      CHECK(output.record(std::move(m_xaodTowers), std::move(m_xaodTowersAux)));
+    }
+    else if (m_cellType == TTL1) {
+      SG::WriteHandle<xAOD::TriggerTowerContainer> output(m_outputLocation);
+      CHECK(output.record(std::move(m_xaodTowers), std::move(m_xaodTowersAux)));
+    }
 
     return StatusCode::SUCCESS;
   } // end of LVL1::Run2TriggerTowerMaker::store(){
diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/TrigT1CaloDefs.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/TrigT1CaloDefs.h
index 2b5ae2235d4a..70337e3a7e96 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/TrigT1CaloDefs.h
+++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/TrigT1CaloDefs.h
@@ -34,6 +34,7 @@ public:
   
   static const std::string TriggerTowerLocation;
   static const std::string xAODTriggerTowerLocation;
+  static const std::string xAODTriggerTowerRerunLocation;
   static const std::string CPMTowerLocation;
   static const std::string JetElementLocation;
   
diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/TrigT1CaloDefs.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/TrigT1CaloDefs.cxx
index 0ea2624a6fe9..9e8b04eced7c 100644
--- a/Trigger/TrigT1/TrigT1Interfaces/src/TrigT1CaloDefs.cxx
+++ b/Trigger/TrigT1/TrigT1Interfaces/src/TrigT1CaloDefs.cxx
@@ -29,6 +29,7 @@ const std::string TrigT1CaloDefs::AtlfastCellContainerLocation="/Event/AtlfastCe
 
 const std::string TrigT1CaloDefs::TriggerTowerLocation="TriggerTowers";
 const std::string TrigT1CaloDefs::xAODTriggerTowerLocation="xAODTriggerTowers";
+const std::string TrigT1CaloDefs::xAODTriggerTowerRerunLocation="xAODTriggerTowers_rerun";
 const std::string TrigT1CaloDefs::JetElementLocation="JetElements";
 const std::string TrigT1CaloDefs::CPMTowerLocation="CPMTowers";
 
-- 
GitLab


From bd65203c2dfaecac986bbf49cfcd1d8d271ce09a Mon Sep 17 00:00:00 2001
From: scott snyder <scott.snyder@cern.ch>
Date: Wed, 20 Mar 2019 14:35:44 +0100
Subject: [PATCH 145/163] AthenaMP: Fix gcc9 warnings.

In C++11, implicit declarations of copy and assignment are deprecated if the
class has a user defined destructor or copy or assignment.  gcc9 now warns
about this by default.
Adjust to avoid the warning.
---
 Control/AthenaMP/src/memory-monitor/rapidjson/document.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Control/AthenaMP/src/memory-monitor/rapidjson/document.h b/Control/AthenaMP/src/memory-monitor/rapidjson/document.h
index 2dce56c1c996..68166df10e4e 100644
--- a/Control/AthenaMP/src/memory-monitor/rapidjson/document.h
+++ b/Control/AthenaMP/src/memory-monitor/rapidjson/document.h
@@ -325,6 +325,8 @@ struct GenericStringRef {
     GenericStringRef(const CharType* str, SizeType len)
         : s(str), length(len) { RAPIDJSON_ASSERT(s != NULL); }
 
+    GenericStringRef( const GenericStringRef& ) = default;
+
     //! implicit conversion to plain CharType pointer
     operator const Ch *() const { return s; }
 
-- 
GitLab


From 0122e1ba4ecaa66a0f8364d22800707dc073bd9c Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Sun, 24 Feb 2019 22:12:26 +0100
Subject: [PATCH 146/163] Tier0Tests: Add versioning for overlay background RDO
 samples

---
 Tools/PROCTools/python/RunTier0Tests.py      | 29 ++++++++++----------
 Tools/PROCTools/python/RunTier0TestsTools.py | 17 ++++++++++--
 2 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/Tools/PROCTools/python/RunTier0Tests.py b/Tools/PROCTools/python/RunTier0Tests.py
index 9909377f77b0..4e461c9b5878 100755
--- a/Tools/PROCTools/python/RunTier0Tests.py
+++ b/Tools/PROCTools/python/RunTier0Tests.py
@@ -12,7 +12,9 @@ import time
 import uuid
 import logging
 import glob
-from PROCTools.RunTier0TestsTools import ciRefFileMap
+
+from PROCTools.RunTier0TestsTools import ciRefFileMap, \
+    SimInput, OverlayInputHits, OverlayInputBkg
 
 ### Setup global logging
 logging.basicConfig(level=logging.INFO,
@@ -709,9 +711,8 @@ def main():
 #        mysetup=mysetup+",builds"
         logging.info("------------------ Run Athena q-test jobs---------------"                )
 
-        sim_input_file = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/ttbar_muplusjets-pythia6-7000.evgen.pool.root" # For sim test
-        overlay_hit_f  = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.424000.ParticleGun_single_mu_Pt100.simul.HITS.e3580_s3126/HITS.11330296._000376.pool.root.1" # For overlay test
-        overlay_bkg_f  = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/RDO.merged-pileup.100events.pool.root" # For overlay test
+        release = os.environ['AtlasVersion'][0:4]
+        OverlayInputBkgFormatted = OverlayInputBkg.format(release, ciRefFileMap['overlay-bkg-' + release])
 
         if RunFast:
             for qtest in qTestsToRun:
@@ -719,18 +720,18 @@ def main():
 
                 def mycleanqtest(q=q):
                     if RunSim:
-                        RunCleanSTest(q,sim_input_file,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
+                        RunCleanSTest(q,SimInput,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
                     elif RunOverlay:
-                        RunCleanOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
+                        RunCleanOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
                     else:   
                         RunCleanQTest(q,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName,doR2A=r2aMode,trigConfig=trigRun2Config)
                     pass
 
                 def mypatchedqtest(q=q):
                     if RunSim:
-                        RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg)
+                        RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg)
                     elif RunOverlay:
-                        RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg)
+                        RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg)
                     else:
                         RunPatchedQTest(q,mypwd,mysetup,extraArg, doR2A=r2aMode, trigConfig=trigRun2Config)
                     pass
@@ -750,9 +751,9 @@ def main():
 
                 def mypatchedqtest(q=q):
                     if RunSim:
-                        RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg, nosetup=ciMode)
+                        RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg, nosetup=ciMode)
                     elif RunOverlay:
-                        RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg, nosetup=ciMode)
+                        RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg, nosetup=ciMode)
                     else:
                         RunPatchedQTest(q,mypwd,mysetup,extraArg, doR2A=r2aMode, trigConfig=trigRun2Config, nosetup=ciMode)
                     pass
@@ -771,18 +772,18 @@ def main():
 
                 def mycleanqtest(q=q):
                     if RunSim:
-                        RunCleanSTest(q,sim_input_file,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
+                        RunCleanSTest(q,SimInput,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
                     elif RunOverlay:
-                        RunCleanOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
+                        RunCleanOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName)
                     else:   
                         RunCleanQTest(q,mypwd,cleanSetup,extraArg,CleanRunHeadDir,UniqName,doR2A=r2aMode,trigConfig=trigRun2Config)
                     pass
                 
                 def mypatchedqtest(q=q):
                     if RunSim:
-                        RunPatchedSTest(q,sim_input_file,mypwd,cleanSetup,extraArg)
+                        RunPatchedSTest(q,SimInput,mypwd,cleanSetup,extraArg)
                     elif RunOverlay:
-                        RunPatchedOTest(q,overlay_hit_f,overlay_bkg_f,mypwd,cleanSetup,extraArg)
+                        RunPatchedOTest(q,OverlayInputHits,OverlayInputBkgFormatted,mypwd,cleanSetup,extraArg)
                     else:   
                         RunPatchedQTest(q,mypwd,mysetup,extraArg,doR2A=r2aMode,trigConfig=trigRun2Config)
                     pass
diff --git a/Tools/PROCTools/python/RunTier0TestsTools.py b/Tools/PROCTools/python/RunTier0TestsTools.py
index 467e7d7e23b2..7a5b1b65d864 100644
--- a/Tools/PROCTools/python/RunTier0TestsTools.py
+++ b/Tools/PROCTools/python/RunTier0TestsTools.py
@@ -23,6 +23,19 @@ ciRefFileMap = {
                 's3126-21.9'           : 'v1',
                 's3126-22.0'           : 'v3',
                 # OverlayTier0Test_required-test
-                'overlay-d1498-21.0'   : 'v1',
-                'overlay-d1498-22.0'   : 'v11',
+                'overlay-d1498-21.0'   : 'v2',
+                'overlay-d1498-22.0'   : 'v12',
+                'overlay-bkg-21.0'     : 'v1',
+                'overlay-bkg-22.0'     : 'v1',
                }
+
+
+#####
+# CI special input files
+#####
+# Simulation tests
+SimInput = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/ttbar_muplusjets-pythia6-7000.evgen.pool.root"
+
+# Overlay tests
+OverlayInputHits = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.424000.ParticleGun_single_mu_Pt100.simul.HITS.e3580_s3126/HITS.11330296._000376.pool.root.1"
+OverlayInputBkg = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/{}/{}/RDO.merged-pileup.100events.pool.root"
-- 
GitLab


From 66dc0ca0bec6917ed20c7957eda6d9e8f622e0c9 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Wed, 20 Mar 2019 14:21:44 +0100
Subject: [PATCH 147/163] TrigT1CaloTools: Make most methods of L1CPMTools
 const.

Make most methods of L1CPMTools const.  formSums() is still not done.
To avoid ToolHandle constness issues in TrigT1CaloSim.
---
 .../TrigT1CaloTools/L1CPMTools.h              | 54 +++++++++----------
 .../TrigT1/TrigT1CaloTools/src/L1CPMTools.cxx | 16 +++---
 2 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/Trigger/TrigT1/TrigT1CaloTools/TrigT1CaloTools/L1CPMTools.h b/Trigger/TrigT1/TrigT1CaloTools/TrigT1CaloTools/L1CPMTools.h
index 5e01291f0916..9ba991e2dd32 100644
--- a/Trigger/TrigT1/TrigT1CaloTools/TrigT1CaloTools/L1CPMTools.h
+++ b/Trigger/TrigT1/TrigT1CaloTools/TrigT1CaloTools/L1CPMTools.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 ///////////////////////////////////////////////////////////////////
 // L1CPMTools.h, 
@@ -33,9 +33,9 @@ namespace LVL1
       r RoI location from the stored TriggerTowers.
       Used for offline monitoring and trigger reconstruction.
 
-      Useage: L1CPMTools->mapTowers() // set up event for analysis
-              L1CPMTools->formSums(eta, phi) // for each RoI
-              L1CPMTools->EmClus() // etc. Return values
+      Usage: L1CPMTools->mapTowers() // set up event for analysis
+             L1CPMTools->formSums(eta, phi) // for each RoI
+             L1CPMTools->EmClus() // etc. Return values
       
       @author  Alan Watson <Alan.Watson@cern.ch>
   */  
@@ -52,54 +52,54 @@ namespace LVL1
       virtual ~L1CPMTools ();
       
        /** standard Athena-Algorithm method */
-      virtual StatusCode initialize();
+      virtual StatusCode initialize() override;
        /** standard Athena-Algorithm method */
-      virtual StatusCode finalize  ();
+      virtual StatusCode finalize  () override;
       
       /** Tool-based EM/tau algorithm implementation */
       
       /** Map CPMTowers from user-supplied DataVector of inputs */
-      virtual void mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers);
+      virtual void mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers) const override;
        
       /** Find RoIs in user-supplied map of input towers */
-      virtual void findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice = -1);
+      virtual void findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) const override;
       
       /** Find RoIs in user-supplied DataVector of input towers */
-      virtual void findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice = -1);
+      virtual void findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) const override;
      
       /** Form CPM results for specified crate/module using user-supplied map of input towers
           This version fills a vector of CPMTobRoI for the whole detector */
-      virtual void findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice = -1);
+      virtual void findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice = -1) const override;
      
       /** Form CPM results for specified crate/module using user-supplied vector of input towers
           This version fills a vector of CPMTobRoI for the whole detector */
-      virtual void findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice = -1);
+      virtual void findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice = -1) const override;
       
       /** Form CPM results for specified crate/module using user-supplied map of input towers
           This version adds to DataVector of CPMTobRoI and returns backplane data words*/
       virtual void findCPMResults(const xAOD::CPMTowerMap_t* towers, int crate, int module,
                                   DataVector<CPMTobRoI>* rois, std::vector<unsigned int>& emCMXData,
-                                  std::vector<unsigned int>& tauCMXData, int slice = -1);
+                                  std::vector<unsigned int>& tauCMXData, int slice = -1) const override;
       
       /** Return RoI object for a specified location */
-      virtual CPMTobAlgorithm findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1) ;
+      virtual CPMTobAlgorithm findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1)  const override;
       
       /** Form cluster/isolation sums for a given RoI location */
-      virtual void formSums(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1) ;
-      virtual void formSums(uint32_t roiWord, const xAOD::CPMTowerMap_t* towers, int slice = -1) ;
+      virtual void formSums(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1)  override;
+      virtual void formSums(uint32_t roiWord, const xAOD::CPMTowerMap_t* towers, int slice = -1) override;
       /** Methods to return the cluster/isolation ET values */
-      virtual int Core() const;
-      virtual int EMCore() const;
-      virtual int HadCore() const;
-      virtual int EMClus() const;
-      virtual int TauClus() const;
-      virtual int EMIsol() const;
-      virtual int HadIsol() const;
-      virtual bool isEtMax() const;  
-      virtual bool isEMRoI() const;  
-      virtual bool isTauRoI() const;  
-      virtual unsigned int EMIsolWord() const;
-      virtual unsigned int TauIsolWord() const;
+      virtual int Core() const override;
+      virtual int EMCore() const override;
+      virtual int HadCore() const override;
+      virtual int EMClus() const override;
+      virtual int TauClus() const override;
+      virtual int EMIsol() const override;
+      virtual int HadIsol() const override;
+      virtual bool isEtMax() const override;
+      virtual bool isEMRoI() const override;
+      virtual bool isTauRoI() const override; 
+      virtual unsigned int EMIsolWord() const override;
+      virtual unsigned int TauIsolWord() const override;
             
     private:
       
diff --git a/Trigger/TrigT1/TrigT1CaloTools/src/L1CPMTools.cxx b/Trigger/TrigT1/TrigT1CaloTools/src/L1CPMTools.cxx
index 39dfb3e0f8d8..12b13cf25742 100644
--- a/Trigger/TrigT1/TrigT1CaloTools/src/L1CPMTools.cxx
+++ b/Trigger/TrigT1/TrigT1CaloTools/src/L1CPMTools.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 ///////////////////////////////////////////////////////////////////
 // L1CPMTools.cxx,  
@@ -58,7 +58,7 @@ StatusCode L1CPMTools::finalize()
 
 void L1CPMTools::findCPMResults(const xAOD::CPMTowerMap_t* towers, int crate, int module,
                                 DataVector<CPMTobRoI>* rois, std::vector<unsigned int>& emCMXData,
-                                std::vector<unsigned int>& tauCMXData, int slice) {
+                                std::vector<unsigned int>& tauCMXData, int slice) const {
 
   /** This tool appends to an existing DataVector of results, so do not clear that.
    *  But reset & resize the module results vectors, to be safe */
@@ -209,7 +209,7 @@ void L1CPMTools::findCPMResults(const xAOD::CPMTowerMap_t* towers, int crate, in
 
 /** Find all CPMTobRoIs in the event */
 
-void L1CPMTools::findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice) {
+void L1CPMTools::findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice) const {
 
   /** Need a map of CPMTowers as input */
   xAOD::CPMTowerMap_t* towers = new xAOD::CPMTowerMap_t;
@@ -228,7 +228,7 @@ void L1CPMTools::findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::C
 
 /** Find all CPMTobRoIs in the event */
 
-void L1CPMTools::findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice) {
+void L1CPMTools::findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice) const {
 
   /** Clear results vector to be safe */
   rois->clear();
@@ -276,7 +276,7 @@ void L1CPMTools::findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobR
 
 
 /** Find list of TOBs from user-supplied vector of CPMTowers */
-void L1CPMTools::findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice){
+void L1CPMTools::findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice) const {
 
   /** Need a map of CPMTowers as input */
   xAOD::CPMTowerMap_t* towers = new xAOD::CPMTowerMap_t;
@@ -294,7 +294,7 @@ void L1CPMTools::findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CP
  
 
 /** Find list of TOBs from user-supplied map of CPMTowers */
-void L1CPMTools::findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice){
+void L1CPMTools::findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice) const {
 
   /** Clear results vector to be safe */
   tobs->clear();
@@ -330,7 +330,7 @@ void L1CPMTools::findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAl
 }
 
 /** CPMTower map from user-supplied vector of CPMTowers */
-void L1CPMTools::mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers){
+void L1CPMTools::mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers) const {
 
   // Clear map before filling
   towers->clear();
@@ -366,7 +366,7 @@ void L1CPMTools::mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTow
 
 /** Return RoI for given coordinates */
 
-CPMTobAlgorithm L1CPMTools::findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice) {
+CPMTobAlgorithm L1CPMTools::findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice) const {
 
   // Performs all processing for this location
   CPMTobAlgorithm roi(RoIeta, RoIphi, towers, m_configSvc, slice);
-- 
GitLab


From 3ebc3eae8d16d53a53058a9c28722659eed5eeef Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Wed, 20 Mar 2019 14:21:19 +0100
Subject: [PATCH 148/163] TrigT1CaloToolInterfaces: Make most methods of
 IL1CPMTools const.

Make most methods of IL1CPMTools const.  formSums() is still not done.
To avoid ToolHandle constness issues in TrigT1CaloSim.
---
 .../TrigT1CaloToolInterfaces/IL1CPMTools.h    | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/Trigger/TrigT1/TrigT1CaloToolInterfaces/TrigT1CaloToolInterfaces/IL1CPMTools.h b/Trigger/TrigT1/TrigT1CaloToolInterfaces/TrigT1CaloToolInterfaces/IL1CPMTools.h
index 68ab722f6a0d..b0f1ae4d2479 100644
--- a/Trigger/TrigT1/TrigT1CaloToolInterfaces/TrigT1CaloToolInterfaces/IL1CPMTools.h
+++ b/Trigger/TrigT1/TrigT1CaloToolInterfaces/TrigT1CaloToolInterfaces/IL1CPMTools.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 ///////////////////////////////////////////////////////////////////
 // L1CPMTools.h, 
@@ -32,25 +32,25 @@ class CPMTobRoI;
     static const InterfaceID& interfaceID( ) ;
 
     // enter declaration of your interface-defining member functions here
-      virtual void mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers) = 0;
+      virtual void mapTowers(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTowerMap_t* towers) const = 0;
       
-      virtual void findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) = 0;
+      virtual void findRoIs(const xAOD::CPMTowerMap_t* towers, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) const = 0;
       
-      virtual void findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) = 0;
+      virtual void findRoIs(const DataVector<xAOD::CPMTower>* cpmts, DataVector<CPMTobAlgorithm>* tobs, int slice = -1) const = 0;
      
-      virtual void findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice = -1) = 0;
+      virtual void findCPMTobRoIs(const xAOD::CPMTowerMap_t* towers, xAOD::CPMTobRoIContainer* rois, int slice = -1) const = 0;
      
-      virtual void findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice = -1) = 0;
+      virtual void findCPMTobRoIs(const DataVector<xAOD::CPMTower>* cpmts, xAOD::CPMTobRoIContainer* rois, int slice = -1) const = 0;
       
       virtual void findCPMResults(const xAOD::CPMTowerMap_t* towers, int crate, int module,
                                   DataVector<CPMTobRoI>* rois, std::vector<unsigned int>& emCMXData,
-                                  std::vector<unsigned int>& tauCMXData, int slice = -1) = 0;
+                                  std::vector<unsigned int>& tauCMXData, int slice = -1) const = 0;
       
-      virtual CPMTobAlgorithm findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1)  = 0;
+      virtual CPMTobAlgorithm findRoI(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1) const = 0;
       
-      virtual void formSums(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1)  = 0;
+      virtual void formSums(double RoIeta, double RoIphi, const xAOD::CPMTowerMap_t* towers, int slice = -1) = 0;
       
-      virtual void formSums(uint32_t roiWord, const xAOD::CPMTowerMap_t* towers, int slice = -1)  = 0;
+      virtual void formSums(uint32_t roiWord, const xAOD::CPMTowerMap_t* towers, int slice = -1) = 0;
       
       virtual int Core() const = 0;
       
-- 
GitLab


From f7f086e5c90ed9860b548c71f079df6cb0ebad54 Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Tue, 19 Mar 2019 17:31:39 +0100
Subject: [PATCH 149/163] LongLivedParticleDPDMaker: Remove reference to
 xAOD::EventInfo.

Remove unneeded reference to xAOD::EventInfo; use EventContext instead.
---
 .../LongLivedParticleDPDMaker/RPVLLTestRates.h     |  3 ---
 .../src/RPVLLTestRates.cxx                         | 14 +++++---------
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
index 181e682df0af..695d0b2beaa9 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/LongLivedParticleDPDMaker/RPVLLTestRates.h
@@ -15,8 +15,6 @@
 #include "GaudiKernel/IIncidentListener.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ITHistSvc.h"
-#include "StoreGate/ReadHandleKey.h"
-#include "xAODEventInfo/EventInfo.h"
 
 #include "TH1.h"
 #include "TH2.h"
@@ -41,7 +39,6 @@ class RPVLLTestRates : public AthAlgorithm  {
 
    int m_EventCounter;
    ServiceHandle<ITHistSvc> m_tHistSvc;
-   SG::ReadHandleKey<xAOD::EventInfo> m_evt{this, "EvtInfo", "EventInfo", "EventInfo name"};
 
    std::vector<std::string> m_DecisionLabel;
    std::vector<int>         m_EventNumber;
diff --git a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
index cd083a3b9569..fa4da04620b6 100755
--- a/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
+++ b/PhysicsAnalysis/SUSYPhys/LongLivedParticleDPDMaker/src/RPVLLTestRates.cxx
@@ -38,7 +38,6 @@ StatusCode RPVLLTestRates::initialize() {
   m_EventCounter=0;
 
   ATH_CHECK(m_tHistSvc.retrieve());
-  ATH_CHECK( m_evt.initialize() );
 
   m_myTree= new TTree("myTree","myTree");
   StatusCode sc = m_tHistSvc->regTree("/AANT/myTree",m_myTree);
@@ -57,6 +56,8 @@ StatusCode RPVLLTestRates::finalize() {
 
 StatusCode RPVLLTestRates::execute() {
 
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+
   if (m_EventCounter==0) {
 
     ////////// first event! ////////////////////////
@@ -90,14 +91,9 @@ StatusCode RPVLLTestRates::execute() {
 
   m_EventCounter++;
 
-  SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
-  if (!evt.isValid()) {
-    ATH_MSG_ERROR( "Could not retrieve event info" );
-    return StatusCode::FAILURE;
-  }
-  m_runNum    = evt->runNumber();
-  m_evtNum    = evt->eventNumber();
-  m_lumiBlock = evt->lumiBlock();
+  m_runNum    = ctx.eventID().run_number();
+  m_evtNum    = ctx.eventID().event_number();
+  m_lumiBlock = ctx.eventID().lumi_block();
   
   
   //// these are the ones that are useful for RPVLL filters
-- 
GitLab


From 9a7b83b4424695bba0a2cf5be23754bf7c75128d Mon Sep 17 00:00:00 2001
From: sherwood <peter.sherwood@cern.ch>
Date: Wed, 20 Mar 2019 20:23:42 +0100
Subject: [PATCH 150/163] Remove commented out (reminder) code.

---
 .../src/TrigHLTJetHypoUtils/DijetMTCondition.cxx   | 14 --------------
 .../TrigHLTJetHypo/src/TrigJetAndToolMT.h          | 10 ----------
 .../src/TrigJetHypoToolConfig_dijet.h              |  9 ---------
 .../src/TrigJetHypoToolConfig_simple.h             |  9 ---------
 .../TrigHLTJetHypo/src/TrigJetNotToolMT.h          |  9 ---------
 .../TrigHLTJetHypo/src/TrigJetOrToolMT.h           | 10 ----------
 6 files changed, 61 deletions(-)

diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
index 3bb2c8c2269c..6bfcae17c877 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigHLTJetHypoUtils/DijetMTCondition.cxx
@@ -55,20 +55,6 @@ bool DijetMTCondition::isSatisfied(const HypoJetVector& ips) const{
 
   return true;
 
-  /*
-  auto result =  test(et0, et1, absEta0, absEta1, dEta, mass);
-  std::cout << "DijetMTCondition : " << std::boolalpha << result << '\n'
-            << std::setprecision(3) << std::scientific 
-            << "jet 0 et " << m_etThreshold0 << " " << et0 << '\n'
-            << "jet 1 et " << m_etThreshold1 << " " << et1 << '\n'
-            << "jet 0 eta " << m_etaMin0 << " " << eta0 << " " << m_etaMax0 << '\n'
-            << "jet 1 eta " << m_etaMin1 << " " << eta1 << " " << m_etaMax1 << '\n'
-            << "dEta " << m_dEtaMin << " " << dEta << " " << m_dEtaMax << '\n'
-            << "mass " << m_massMin << " " << mass << " " <<m_massMax << '\n';
-
-  return result;
-  */
-
 }
 
 std::string DijetMTCondition::toString() const noexcept {
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
index f2140fc2a757..1536f08fb460 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetAndToolMT.h
@@ -54,15 +54,5 @@ class TrigJetAndToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
   ToolHandle<ITrigJetHypoToolMT> m_rhs {
     this, "rhs", {}, "RHS boolean binary expression"}; 
 
- 
- // Monitored variables...
- /*
-  declareMonitoredVariable("NJet", m_njet);
-  declareMonitoredVariable("Et", m_et);
-  declareMonitoredVariable("Eta", m_eta);
-  declareMonitoredVariable("Phi", m_phi);
-*/
-
-
 };
 #endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
index d89255c9b474..2386b28e4281 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_dijet.h
@@ -62,15 +62,6 @@ public extends<AthAlgTool, ITrigJetHypoToolConfig> {
     m_dPhiMaxs{this, "dphi_maxs", {}, "max dPhi for jets in each dijet"};
 
   virtual StatusCode checkVals()  const override;
- 
- // Monitored variables...
- /*
-  declareMonitoredVariable("NJet", m_njet);
-  declareMonitoredVariable("Et", m_et);
-  declareMonitoredVariable("Eta", m_eta);
-  declareMonitoredVariable("Phi", m_phi);
-*/
-
 
 };
 #endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
index b503b12948e1..0ee3bd73202f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_simple.h
@@ -57,15 +57,6 @@ public extends<AthAlgTool, ITrigJetHypoToolConfig> {
 
 
   virtual StatusCode checkVals()  const override;
- 
- // Monitored variables...
- /*
-  declareMonitoredVariable("NJet", m_njet);
-  declareMonitoredVariable("Et", m_et);
-  declareMonitoredVariable("Eta", m_eta);
-  declareMonitoredVariable("Phi", m_phi);
-*/
-
 
 };
 #endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
index 05504bb51842..9c51b7361396 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetNotToolMT.h
@@ -52,15 +52,6 @@ class TrigJetNotToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
   ToolHandle<ITrigJetHypoToolMT> m_hypoTool {
     this, "hypoTool", {}, "predicate to be inverted"};
 
- 
- // Monitored variables...
- /*
-  declareMonitoredVariable("NJet", m_njet);
-  declareMonitoredVariable("Et", m_et);
-  declareMonitoredVariable("Eta", m_eta);
-  declareMonitoredVariable("Phi", m_phi);
-*/
-
 
 };
 #endif
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h
index 3af3941dc696..db9a8d1cc62f 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetOrToolMT.h
@@ -54,15 +54,5 @@ class TrigJetOrToolMT: public extends<AthAlgTool, ITrigJetHypoToolMT> {
   ToolHandle<ITrigJetHypoToolMT> m_rhs {
     this, "rhs", {}, "RHS boolean binary expression"}; 
 
- 
- // Monitored variables...
- /*
-  declareMonitoredVariable("NJet", m_njet);
-  declareMonitoredVariable("Et", m_et);
-  declareMonitoredVariable("Eta", m_eta);
-  declareMonitoredVariable("Phi", m_phi);
-*/
-
-
 };
 #endif
-- 
GitLab


From 1639db4bda991aadaec8168432526f2afd1a05d6 Mon Sep 17 00:00:00 2001
From: scott snyder <sss@karma>
Date: Wed, 20 Mar 2019 14:24:43 +0100
Subject: [PATCH 151/163] CaloCondPhysAlgs: Use conditions handle to read
 hvcorr information.

Change from using ILArHVCorrTool to using a conditions handle.
Also get online hvcorr from the conditions store rather than the detector store.
---
 .../share/CaloRescaleNoise_jobOptions.py      |  5 +----
 ...CaloRescaleNoise_offlineOnly_jobOptions.py |  5 +----
 .../CaloRescaleNoise_online_jobOptions.py     |  5 +----
 .../share/CaloScaleNoise_jobOptions.py        |  5 +----
 .../share/EMB-EMEC_PS_Energy_Rescale.py       |  4 +---
 .../share/EMBPS_Energy_Rescale.py             |  4 +---
 .../share/EMBPS_Energy_Rescale_1.py           |  4 +---
 .../share/EMB_EMEC_PS_HV_Energy_Rescale.py    |  4 +---
 .../share/EMB_Energy_Rescale.py               |  4 +---
 .../share/FCAL_HV_Energy_Rescale.py           |  5 +----
 .../CaloCondPhysAlgs/src/CaloRescaleNoise.cxx | 17 ++++++++-------
 .../CaloCondPhysAlgs/src/CaloRescaleNoise.h   | 10 ++++-----
 .../src/FCAL_HV_Energy_Rescale.cxx            | 21 +++++++++----------
 .../src/FCAL_HV_Energy_Rescale.h              |  9 ++++++--
 14 files changed, 41 insertions(+), 61 deletions(-)

diff --git a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_jobOptions.py b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_jobOptions.py
index 09823f54f1ee..3ca45caafd88 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_jobOptions.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_jobOptions.py
@@ -78,9 +78,7 @@ from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
 theCaloNoiseTool = CaloNoiseToolDefault()
 ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
@@ -88,7 +86,6 @@ ToolSvc += theLArHVCorrTool
 from CaloCondPhysAlgs.CaloCondPhysAlgsConf import CaloRescaleNoise
 theCaloRescaleNoise = CaloRescaleNoise("CaloRescaleNoise")
 theCaloRescaleNoise.noiseTool = theCaloNoiseTool
-theCaloRescaleNoise.HVCorrTool=theLArHVCorrTool
 
 topSequence += theCaloRescaleNoise
 
diff --git a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_offlineOnly_jobOptions.py b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_offlineOnly_jobOptions.py
index 5e99ea935d04..613d92a407de 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_offlineOnly_jobOptions.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_offlineOnly_jobOptions.py
@@ -97,9 +97,7 @@ theCaloNoiseTool = CaloNoiseToolDefault()
 theCaloNoiseTool.RescaleForHV=False #Turn automatic rescaling off
 ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
@@ -107,7 +105,6 @@ ToolSvc += theLArHVCorrTool
 from CaloCondPhysAlgs.CaloCondPhysAlgsConf import CaloRescaleNoise
 theCaloRescaleNoise = CaloRescaleNoise("CaloRescaleNoise")
 theCaloRescaleNoise.noiseTool = theCaloNoiseTool
-theCaloRescaleNoise.HVCorrTool=theLArHVCorrTool
 
 topSequence += theCaloRescaleNoise
 
diff --git a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_online_jobOptions.py b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_online_jobOptions.py
index bef83e937944..71b5204507f3 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_online_jobOptions.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/CaloRescaleNoise_online_jobOptions.py
@@ -109,9 +109,7 @@ theCaloNoiseTool = CaloNoiseToolDefault()
 theCaloNoiseTool.RescaleForHV=False #Turn automatic rescaling off
 ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
@@ -119,7 +117,6 @@ ToolSvc += theLArHVCorrTool
 from CaloCondPhysAlgs.CaloCondPhysAlgsConf import CaloRescaleNoise
 theCaloRescaleNoise = CaloRescaleNoise("CaloRescaleNoise")
 theCaloRescaleNoise.noiseTool = theCaloNoiseTool
-theCaloRescaleNoise.HVCorrTool=theLArHVCorrTool
 
 topSequence += theCaloRescaleNoise
 
diff --git a/Calorimeter/CaloCondPhysAlgs/share/CaloScaleNoise_jobOptions.py b/Calorimeter/CaloCondPhysAlgs/share/CaloScaleNoise_jobOptions.py
index e585b08164f0..6b9434d5b487 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/CaloScaleNoise_jobOptions.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/CaloScaleNoise_jobOptions.py
@@ -132,9 +132,7 @@ theCaloNoiseTool = CaloNoiseToolDefault()
 theCaloNoiseTool.RescaleForHV=False
 ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
@@ -142,7 +140,6 @@ ToolSvc += theLArHVCorrTool
 from CaloCondPhysAlgs.CaloCondPhysAlgsConf import CaloRescaleNoise
 theCaloRescaleNoise = CaloRescaleNoise("CaloRescaleNoise")
 theCaloRescaleNoise.noiseTool = theCaloNoiseTool
-theCaloRescaleNoise.HVCorrTool=theLArHVCorrTool
 theCaloRescaleNoise.absScaling=True
 
 topSequence += theCaloRescaleNoise
diff --git a/Calorimeter/CaloCondPhysAlgs/share/EMB-EMEC_PS_Energy_Rescale.py b/Calorimeter/CaloCondPhysAlgs/share/EMB-EMEC_PS_Energy_Rescale.py
index c7145e25b72e..17897ba4822c 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/EMB-EMEC_PS_Energy_Rescale.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/EMB-EMEC_PS_Energy_Rescale.py
@@ -91,9 +91,7 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
diff --git a/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale.py b/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale.py
index e729c2750950..36f555ca5f4e 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale.py
@@ -93,9 +93,7 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
diff --git a/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale_1.py b/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale_1.py
index 91b1b4acdd58..b71c8ef02b63 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale_1.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/EMBPS_Energy_Rescale_1.py
@@ -91,9 +91,7 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
diff --git a/Calorimeter/CaloCondPhysAlgs/share/EMB_EMEC_PS_HV_Energy_Rescale.py b/Calorimeter/CaloCondPhysAlgs/share/EMB_EMEC_PS_HV_Energy_Rescale.py
index b8fbb7d83dd0..b26a2cca97f4 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/EMB_EMEC_PS_HV_Energy_Rescale.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/EMB_EMEC_PS_HV_Energy_Rescale.py
@@ -91,9 +91,7 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
diff --git a/Calorimeter/CaloCondPhysAlgs/share/EMB_Energy_Rescale.py b/Calorimeter/CaloCondPhysAlgs/share/EMB_Energy_Rescale.py
index 73a28c92b7e8..4acab9f6c926 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/EMB_Energy_Rescale.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/EMB_Energy_Rescale.py
@@ -93,9 +93,7 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
diff --git a/Calorimeter/CaloCondPhysAlgs/share/FCAL_HV_Energy_Rescale.py b/Calorimeter/CaloCondPhysAlgs/share/FCAL_HV_Energy_Rescale.py
index db0c67c7b860..21717eba2034 100644
--- a/Calorimeter/CaloCondPhysAlgs/share/FCAL_HV_Energy_Rescale.py
+++ b/Calorimeter/CaloCondPhysAlgs/share/FCAL_HV_Energy_Rescale.py
@@ -91,16 +91,13 @@ svcMgr.IOVDbSvc.GlobalTag = GlobalTag
 #theCaloNoiseTool = CaloNoiseToolDefault()
 #ToolSvc += theCaloNoiseTool
 
-from LArRecUtils.LArHVCorrToolDefault import LArHVCorrToolDefault
-theLArHVCorrTool=LArHVCorrToolDefault()
-ToolSvc += theLArHVCorrTool
+from LArConditionsCommon import LArHVDB
 
 #--------------------------------------------------------------
 # Private Application Configuration options
 #--------------------------------------------------------------
 from CaloCondPhysAlgs.CaloCondPhysAlgsConf import FCAL_HV_Energy_Rescale
 theRescaler=FCAL_HV_Energy_Rescale("FCALHVRescaler")
-theRescaler.HVCorrTool=theLArHVCorrTool
 
 topSequence += theRescaler
 
diff --git a/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.cxx b/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.cxx
index ff5d029b70b1..13bc6964bc02 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.cxx
+++ b/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.cxx
@@ -14,8 +14,6 @@ CaloRescaleNoise::CaloRescaleNoise(const std::string& name, ISvcLocator* pSvcLoc
   m_thistSvc(0),
   m_calo_id(0),
   m_noiseTool("CaloNoiseToolDB/calonoisetooldb"),
-  m_hvCorrTool("LArHVCorrTool"),
-  m_keyHVScaleCorr("LArHVScaleCorr"),
   m_iCool(0),
   m_SubHash(0),
   m_Hash(0),
@@ -31,8 +29,6 @@ CaloRescaleNoise::CaloRescaleNoise(const std::string& name, ISvcLocator* pSvcLoc
   m_tree(0)
 {
   declareProperty("noiseTool",m_noiseTool,"noise tool");
-  declareProperty("HVCorrTool",m_hvCorrTool);
-  declareProperty("keyHVScaleCorr",m_keyHVScaleCorr);
   declareProperty("absScaling",m_absScaling=false);
 }
 
@@ -53,9 +49,9 @@ StatusCode CaloRescaleNoise::initialize()
   m_calo_id      = mgr->getCaloCell_ID();
 
   ATH_CHECK( m_noiseTool.retrieve() );
-  ATH_CHECK( m_hvCorrTool.retrieve() );
+  ATH_CHECK( m_scaleCorrKey.initialize() );
   ATH_CHECK( m_cablingKey.initialize());
-  ATH_CHECK( detStore()->regHandle(m_dd_HVScaleCorr,m_keyHVScaleCorr) );
+  ATH_CHECK( m_onlineScaleCorrKey.initialize() );
 
   m_tree = new TTree("mytree","Calo Noise ntuple");
   m_tree->Branch("iCool",&m_iCool,"iCool/I");
@@ -97,6 +93,11 @@ StatusCode CaloRescaleNoise::stop()
 
   FILE* fp = fopen("calonoise.txt","w");
 
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+  SG::ReadCondHandle<ILArHVScaleCorr> scaleCorr (m_scaleCorrKey, ctx);
+  SG::ReadCondHandle<ILArHVScaleCorr> onlineScaleCorr (m_onlineScaleCorrKey, ctx);
+  
+
   int ncell=m_calo_id->calo_cell_hash_max();
   ATH_MSG_INFO ( " start loop over Calo cells " << ncell );
   for (int i=0;i<ncell;i++) {
@@ -151,8 +152,8 @@ StatusCode CaloRescaleNoise::stop()
        float hvonline=1.;
 
        if (iCool<48) {
-          hvcorr = m_hvCorrTool->Scale(id);
-          hvonline = m_dd_HVScaleCorr->HVScaleCorr(hwid);
+          hvcorr = scaleCorr->HVScaleCorr(hwid);
+          hvonline = onlineScaleCorr->HVScaleCorr(hwid);
        }
 
        const double inv_hvonline = (hvonline != 0) ? 1. / hvonline : 1;
diff --git a/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.h b/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.h
index d5e0a756f772..61b23bb36956 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.h
+++ b/Calorimeter/CaloCondPhysAlgs/src/CaloRescaleNoise.h
@@ -20,9 +20,8 @@
 #include "CaloInterface/ICaloNoiseTool.h"
 #include "CaloInterface/ICaloMBAverageTool.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "LArElecCalib/ILArHVCorrTool.h"
 #include "LArElecCalib/ILArHVScaleCorr.h"
-#include "StoreGate/DataHandle.h"  
+#include "StoreGate/ReadCondHandleKey.h"  
 
 #include "LArCabling/LArOnOffIdMapping.h"
 
@@ -57,10 +56,11 @@ class CaloRescaleNoise : public AthAlgorithm {
   const CaloCell_ID*       m_calo_id;
 
   ToolHandle<ICaloNoiseTool> m_noiseTool;
-  ToolHandle<ILArHVCorrTool> m_hvCorrTool;
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_scaleCorrKey
+  { this, "LArHVScaleCorr", "LArHVScaleCorrRecomputed", "" };
   SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingKey{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};
-  std::string m_keyHVScaleCorr;
-  const DataHandle<ILArHVScaleCorr> m_dd_HVScaleCorr;
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_onlineScaleCorrKey
+  { this, "OnlineLArHVScaleCorr", "LArHVScaleCorr", "" };
 
   int m_iCool;
   int m_SubHash;
diff --git a/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.cxx b/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.cxx
index 4ab6f78cab19..0ed56136a155 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.cxx
+++ b/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.cxx
@@ -12,8 +12,8 @@
 // CaloCondPhysAlgs includes
 #include "FCAL_HV_Energy_Rescale.h"
 #include "CaloIdentifier/CaloCell_ID.h"
+#include "StoreGate/ReadCondHandle.h"
 #include "AthenaKernel/errorcheck.h"
-//#include "LArElecCalib/ILArHVCorrTool.h"
 
 #include "LArElecCalib/ILArHVScaleCorr.h"
 #include "AthenaPoolUtilities/AthenaAttributeList.h"
@@ -25,10 +25,8 @@
 
 FCAL_HV_Energy_Rescale::FCAL_HV_Energy_Rescale( const std::string& name, 
 						ISvcLocator* pSvcLocator ) : 
-  AthAlgorithm( name, pSvcLocator ),
-  m_hvCorrTool("LArHVCorrTool")
+  AthAlgorithm( name, pSvcLocator )
 {
-  declareProperty("HVCorrTool",m_hvCorrTool);
   declareProperty("Folder",m_folder="/LAR/CellCorrOfl/EnergyCorr");
 }
 
@@ -39,8 +37,9 @@ FCAL_HV_Energy_Rescale::~FCAL_HV_Energy_Rescale()
 
 StatusCode FCAL_HV_Energy_Rescale::initialize()
 {
-  CHECK(m_hvCorrTool.retrieve());
   ATH_CHECK( m_cablingKey.initialize());
+  ATH_CHECK( m_scaleCorrKey.initialize());
+  ATH_CHECK( m_onlineScaleCorrKey.initialize());
   return StatusCode::SUCCESS;
 }
 
@@ -56,9 +55,9 @@ StatusCode FCAL_HV_Energy_Rescale::execute()
 
 StatusCode FCAL_HV_Energy_Rescale::stop()
 {  
-
-  const ILArHVScaleCorr* upd1HVScaleCorr=0;
-  CHECK(detStore()->retrieve(upd1HVScaleCorr));
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+  SG::ReadCondHandle<ILArHVScaleCorr> scaleCorr (m_scaleCorrKey, ctx);
+  SG::ReadCondHandle<ILArHVScaleCorr> onlineScaleCorr (m_onlineScaleCorrKey, ctx);
 
   const CaloCell_ID*    calocell_id;	
   CHECK(detStore()->retrieve(calocell_id,"CaloCell_ID"));
@@ -84,7 +83,7 @@ StatusCode FCAL_HV_Energy_Rescale::stop()
   // cppcheck-suppress memleak
   spec = nullptr;
 
-  //Blob Defintion Vector
+  //Blob Definition Vector
   std::vector<std::vector<float> > defVec;
   defVec.push_back(std::vector<float>(1,1));
   flt->init(defVec,hashMax,1);
@@ -99,8 +98,8 @@ StatusCode FCAL_HV_Energy_Rescale::stop()
       ++nFCAL;
       Identifier id=calocell_id->cell_id(h);
       HWIdentifier hwid=cabling->createSignalChannelID(id);
-      const float corrNew=m_hvCorrTool->Scale(id);
-      const float upd1corr=upd1HVScaleCorr->HVScaleCorr(hwid);
+      const float corrNew=scaleCorr->HVScaleCorr(hwid);
+      const float upd1corr=onlineScaleCorr->HVScaleCorr(hwid);
       
       const float corr=corrNew/upd1corr;
 
diff --git a/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.h b/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.h
index c38ab34154ff..69150317c70b 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.h
+++ b/Calorimeter/CaloCondPhysAlgs/src/FCAL_HV_Energy_Rescale.h
@@ -9,8 +9,9 @@
 // FrameWork includes
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "LArElecCalib/ILArHVCorrTool.h"
+#include "LArElecCalib/ILArHVScaleCorr.h"
 #include "LArCabling/LArOnOffIdMapping.h"
+#include "StoreGate/ReadCondHandleKey.h"  
 
 class FCAL_HV_Energy_Rescale: public AthAlgorithm
 { 
@@ -35,8 +36,12 @@ class FCAL_HV_Energy_Rescale: public AthAlgorithm
   virtual StatusCode  stop();
 
 private:
-  ToolHandle<ILArHVCorrTool> m_hvCorrTool;
   SG::ReadCondHandleKey<LArOnOffIdMapping> m_cablingKey{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_scaleCorrKey
+  { this, "LArHVScaleCorr", "LArHVScaleCorrRecomputed", "" };
+  SG::ReadCondHandleKey<ILArHVScaleCorr> m_onlineScaleCorrKey
+  { this, "OnlineLArHVScaleCorr", "LArHVScaleCorr", "" };
+  //m_hvCorrTool
 
   std::string m_folder;
 
-- 
GitLab


From d14928e59aef96617b3f530eb583efa00a8fce4b Mon Sep 17 00:00:00 2001
From: Shota Hayashida <hayashida@hepl.phys.nagoya-u.ac.jp>
Date: Thu, 21 Mar 2019 03:01:46 +0100
Subject: [PATCH 152/163] Fixed an issue that L2MuonSA doesn't work in newJO
 test

---
 .../MuonConfig/python/MuonCalibConfig.py      |  9 +-
 .../TrigUpgradeTest/python/MuonMenuConfig.py  | 89 +++++++++++++++----
 2 files changed, 76 insertions(+), 22 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonCalibConfig.py b/MuonSpectrometer/MuonConfig/python/MuonCalibConfig.py
index 39850214cbb3..fd727cca40a8 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonCalibConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonCalibConfig.py
@@ -382,7 +382,7 @@ def _setupMdtCondDB(flags):
     return result, mdt_folder_name_appendix
 # end of function setupMdtCondDB()
 
-def MdtCalibDbToolCfg(flags,**kwargs):
+def MdtCalibDbToolCfg(flags,name="MdtCalibDbTool",**kwargs):
     result=ComponentAccumulator()
     
     # result.merge( IOVDbSvcCfg(flags) )
@@ -400,7 +400,7 @@ def MdtCalibDbToolCfg(flags,**kwargs):
        kwargs.setdefault("TubeFolder", "/MDT/T0"+ mdt_folder_name_appendix)
        kwargs.setdefault("RtFolder",  "/MDT/RT"+ mdt_folder_name_appendix)
     kwargs.setdefault("RT_InputFiles" , ["Muon_RT_default.data"])
-    if not flags.Input.isMC == 'data':
+    if flags.Input.isMC == False: # Should be " if flags.Input.isMC=='data' " ?
         kwargs.setdefault("defaultT0", 40)
     else:
         kwargs.setdefault("defaultT0", 799)
@@ -408,7 +408,7 @@ def MdtCalibDbToolCfg(flags,**kwargs):
     kwargs.setdefault("TimeSlewingCorrection", flags.Muon.Calib.correctMdtRtForTimeSlewing)
     kwargs.setdefault("MeanCorrectionVsR", [ -5.45973, -4.57559, -3.71995, -3.45051, -3.4505, -3.4834, -3.59509, -3.74869, -3.92066, -4.10799, -4.35237, -4.61329, -4.84111, -5.14524 ])
     kwargs.setdefault("PropagationSpeedBeta", flags.Muon.Calib.mdtPropagationSpeedBeta)
-    return result, MuonCalib__MdtCalibDbCoolStrTool(**kwargs)
+    return result, MuonCalib__MdtCalibDbCoolStrTool(name,**kwargs)
 
 def MdtCalibrationDbSvcCfg(flags, **kwargs):
     result=ComponentAccumulator()
@@ -416,7 +416,8 @@ def MdtCalibrationDbSvcCfg(flags, **kwargs):
     kwargs.setdefault( "CreateBFieldFunctions", flags.Muon.Calib.correctMdtRtForBField )
     kwargs.setdefault( "CreateWireSagFunctions", flags.Muon.Calib.correctMdtRtWireSag )
     kwargs.setdefault( "CreateSlewingFunctions", flags.Muon.Calib.correctMdtRtForTimeSlewing)
-    
+    kwargs.setdefault( "DBTool", "MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool")
+ 
     acc, mdt_calib_db_tool = MdtCalibDbToolCfg(flags)
     acc.addPublicTool(mdt_calib_db_tool)
     result.merge(acc)
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/MuonMenuConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/MuonMenuConfig.py
index 154e8c86891f..1ba7e950116c 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/MuonMenuConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/MuonMenuConfig.py
@@ -118,8 +118,8 @@ def CscDataPreparatorCfg( flags, roisKey ):
  
     return acc, CscDataPreparator
 
-# Configure Reco alg of muFast step
-def muFastSteeringCfg( flags, roisKey ):
+# Based on TrigL2MuonSAMTConfig at TrigL2MuonSA/TrigL2MuonSAConfig.py
+def muFastSteeringCfg( flags, roisKey, setup="" ):
 
     acc = ComponentAccumulator()
 
@@ -146,24 +146,77 @@ def muFastSteeringCfg( flags, roisKey ):
                                                                RPCDataPreparator = RpcDataPreparator,
                                                                TGCDataPreparator = TgcDataPreparator )
 
+    # Setup the station fitter
+    from TrigL2MuonSA.TrigL2MuonSAConf import TrigL2MuonSA__MuFastStationFitter,TrigL2MuonSA__PtFromAlphaBeta
+    PtFromAlphaBeta = TrigL2MuonSA__PtFromAlphaBeta()
+    if flags.Trigger.run2Config == '2016':
+        PtFromAlphaBeta.useCscPt = False
+        PtFromAlphaBeta.AvoidMisalignedCSCs = True
+    else:
+        PtFromAlphaBeta.useCscPt = True
+        PtFromAlphaBeta.AvoidMisalignedCSCs = True
+
+    MuFastStationFitter = TrigL2MuonSA__MuFastStationFitter( PtFromAlphaBeta = PtFromAlphaBeta )
+
+    from TrigL2MuonSA.TrigL2MuonSAConf import TrigL2MuonSA__MuFastPatternFinder,TrigL2MuonSA__MuFastTrackFitter,TrigL2MuonSA__MuFastTrackExtrapolator,TrigL2MuonSA__MuCalStreamerTool,TrigL2MuonSA__CscSegmentMaker
+    MuFastPatternFinder     = TrigL2MuonSA__MuFastPatternFinder()
+    MuFastTrackFitter       = TrigL2MuonSA__MuFastTrackFitter()
+    MuFastTrackExtrapolator = TrigL2MuonSA__MuFastTrackExtrapolator()
+    MuCalStreamerTool       = TrigL2MuonSA__MuCalStreamerTool()
+    CscSegmentMaker         = TrigL2MuonSA__CscSegmentMaker()
+
     # Set Reco alg of muFast step
+    from TrigL2MuonSA.TrigL2MuonSAMonitoring import TrigL2MuonSAMonitoring
     from TrigL2MuonSA.TrigL2MuonSAConf import MuFastSteering
-    muFastAlg = MuFastSteering( name                          = "MuFastSteering_Muon",
-                                DataPreparator                = MuFastDataPreparator,
-                                R_WIDTH_TGC_FAILED            = 200,
-                                R_WIDTH_RPC_FAILED            = 400,
-                                DoCalibrationStream           = False,
-                                USE_ROIBASEDACCESS_CSC        = True,
-                                RpcErrToDebugStream           = True,
-                                Timing                        = False,
-                                MonTool                       = "",
-                                # TriggerFlags.run2Config != '2016'
-                                UseEndcapInnerFromBarrel      = True, 
-                                # not 900 GeV
-                                WinPt                         = 6.0,
-                                Scale_Road_BarrelInner        = 1,
-                                Scale_Road_BarrelMiddle       = 1,
-                                Scale_Road_BarrelOuter        = 1 )  
+    muFastAlg = MuFastSteering( name                   = "MuFastSteering_Muon"+setup,
+                                DataPreparator         = MuFastDataPreparator,
+                                StationFitter          = MuFastStationFitter,
+                                PatternFinder          = MuFastPatternFinder,
+                                TrackFitter            = MuFastTrackFitter,
+                                TrackExtrapolator      = MuFastTrackExtrapolator,
+                                CalibrationStreamer    = MuCalStreamerTool, 
+                                CscSegmentMaker        = CscSegmentMaker,
+                                R_WIDTH_TGC_FAILED     = 200,
+                                R_WIDTH_RPC_FAILED     = 400,
+                                DoCalibrationStream    = False,
+                                USE_ROIBASEDACCESS_CSC = True,
+                                RpcErrToDebugStream    = True,
+                                Timing                 = False,
+                                MonTool                = TrigL2MuonSAMonitoring() )
+
+    # Default backextrapolator is for MC Misaligned Detector
+    # Based on MuonBackExtrapolatorForMisalignedDet at TrigMuonBackExtrapolator/TrigMuonBackExtrapolatorConfig.py
+    from TrigMuonBackExtrapolator.TrigMuonBackExtrapolatorConf import TrigMuonBackExtrapolator
+    muFastAlg.BackExtrapolator = TrigMuonBackExtrapolator( name        = "MisalignedBackExtrapolator",
+                                                           Aligned     = False,
+                                                           DataSet     = False )
+
+    if flags.Trigger.run2Config == '2016':
+        muFastAlg.UseEndcapInnerFromBarrel = False
+    else: 
+        muFastAlg.UseEndcapInnerFromBarrel = True
+
+    if setup == '900GeV':
+        muFastAlg.WinPt = 4.0
+        muFastAlg.Scale_Road_BarrelInner  = 3
+        muFastAlg.Scale_Road_BarrelMiddle = 3
+        muFastAlg.Scale_Road_BarrelOuter  = 3
+    else:
+        muFastAlg.WinPt = 6.0
+        muFastAlg.Scale_Road_BarrelInner  = 1
+        muFastAlg.Scale_Road_BarrelMiddle = 1
+        muFastAlg.Scale_Road_BarrelOuter  = 1
+
+    if setup == 'MuonCalib':
+        muFastAlg.DoCalibrationStream = True
+        muFastAlg.MuonCalDataScouting = False
+        muFastAlg.MuonCalBufferSize   = 1024*1024
+
+    if setup == 'MuonCalibDataScouting':
+        muFastAlg.DoCalibrationStream = True
+        muFastAlg.MuonCalDataScouting = True
+        muFastAlg.MuonCalBufferSize   = 1024*1024
+
     return acc, muFastAlg
 
 def PtBarrelLUTSvcCfg( flags ):
-- 
GitLab


From 857e23eefa0ea6d2fe7a2be17bbc17e49e9a739d Mon Sep 17 00:00:00 2001
From: Shota Hayashida <hayashida@hepl.phys.nagoya-u.ac.jp>
Date: Thu, 21 Mar 2019 07:16:21 +0100
Subject: [PATCH 153/163] Update .ref files for muon decoder tests

---
 .../MuonConfig/share/MuonDataDecodeTest.ref   | 739 ++++++++--------
 .../share/MuonDataDecodeTest_Cache.ref        | 787 +++++++++---------
 2 files changed, 782 insertions(+), 744 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index 5a6ded6b6aab..d12fb28dab1d 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -1,11 +1,13 @@
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -15,9 +17,11 @@ Concurrency.NumProcs                     : 0
 Concurrency.NumThreads                   : 0
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : [function]
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -31,6 +35,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -72,16 +77,18 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/ByteStreamAttListMetadataSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
 dynamically loading the flag Detector
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -159,9 +166,11 @@ Detector.SimulateZDC                     : False
 Detector.SimulatesTGC                    : False
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : [function]
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -175,6 +184,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -471,11 +481,13 @@ dynamically loading the flag Muon
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -553,9 +565,11 @@ Detector.SimulateZDC                     : False
 Detector.SimulatesTGC                    : False
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : 'CONDBR2'
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -625,6 +639,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -656,21 +671,14 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
 Py:ConfigurableDb   DEBUG loading confDb files...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libMagFieldServices.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloRec.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloTools.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCabling.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libegammaCaloTools.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArBadChannelTool.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCellRec.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/WorkDir.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigT2CaloCommon.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Gaudi.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigL2MuonSA.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
 Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
-Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
-Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb   DEBUG loaded 1102 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5447 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
@@ -693,14 +701,14 @@ Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.PoolSvc) ... dupe ignored
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup... [DONE]
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -709,7 +717,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -722,7 +730,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
@@ -767,7 +775,7 @@ Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibratio
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -1127,14 +1135,14 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -1143,7 +1151,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -1156,7 +1164,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
@@ -1199,7 +1207,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibra
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
-Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MuonCalib::MdtCalibDbCoolStrTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MdtCalibDbTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -1446,24 +1454,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7f8505b81f90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7f4d61983f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7f8505b81f10 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7f85041a0560 = []  (default: [])
-|-ExtraOutputs               @0x7f85041a05f0 = []  (default: [])
+|-EvtStore                   @0x7f4d61983e90 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f4d5ff68170 = []  (default: [])
+|-ExtraOutputs               @0x7f4d5ff680e0 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7f85041a0128 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7f4d5fed0fc8 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7f85041a0440 = []  (default: [])
+|-NeededResources            @0x7f4d5fed0e18 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7f8507d45b00 = True  (default: False)
+|-Sequential                 @0x7f4d63a90b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -1479,22 +1487,22 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85047a4a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d60562c50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85047a49d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a06c8 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0680 = []  (default: [])
+| |-EvtStore                   @0x7f4d60562bd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68128 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5fed0ef0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0638 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff681b8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f8504c62908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6088a718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7f85047a4ad0 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7f4d60562cd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1506,11 +1514,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f8504c62a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7f8504713890 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f85047138d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f850478e758 = []  (default: [])
-| | |-ExtraOutputs      @0x7f850478e4d0 = []  (default: [])
+| | |-Decoder           @0x7f4d6088a810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f4d604d0a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d604d0ad0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d6054e908 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d6054e680 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -1524,10 +1532,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7f8504713990 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7f85047139d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7f850478e5f0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7f850478e5a8 = []  (default: [])
+| | | |-DetStore            @0x7f4d604d0b90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f4d604d0bd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f4d6054e7a0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f4d6054e758 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1547,19 +1555,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85046f5a10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d604b3c10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85046f5990 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0908 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a09e0 = []  (default: [])
+| |-EvtStore                   @0x7f4d604b3b90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68050 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68200 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0950 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68290 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f850592f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6173c8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1571,12 +1579,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f850592faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7f4d6173c9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7f850473aed0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f850473af10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f8504744710 = []  (default: [])
-| | |-ExtraOutputs      @0x7f8504744560 = []  (default: [])
+| | |-DetStore          @0x7f4d60434110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d60434150 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d604fd908 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d604fd758 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1588,10 +1596,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f850473afd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f850467f050 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85047443b0 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f8504744518 = []  (default: [])
+| | | |-DetStore          @0x7f4d60434210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d60434250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d604fd5a8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d604fd710 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1611,19 +1619,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85046f7c50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d6052ee50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85046f7bd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0a28 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0ab8 = []  (default: [])
+| |-EvtStore                   @0x7f4d6052edd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff682d8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68368 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0998 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68320 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f85049a3a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6063bd50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1636,11 +1644,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7f850592fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7f85042acfd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7f8504234050 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f85042a09e0 = []  (default: [])
-| | |-ExtraOutputs         @0x7f85042a0878 = []  (default: [])
+| | |-Decoder              @0x7f4d6173cc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f4d5fff0b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f4d5fff0b50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4d60061bd8 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4d60061a70 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -1653,10 +1661,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f8504234110 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f8504234150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85042a0908 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85042a08c0 = []  (default: [])
+| | | |-DetStore          @0x7f4d5fff0c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5fff0c50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d60061b00 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d60061ab8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1676,19 +1684,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f850478ab10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d6054cd90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f850478aa90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0b00 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0b48 = []  (default: [])
+| |-EvtStore                   @0x7f4d6054cd10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff683b0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0488 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68248 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f85049a3c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6002f050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1701,12 +1709,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7f85046cf050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7f850426de90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-Decoder              @0x7f4d6173ce60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f4d5ffb29d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7f850426ded0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f85041f19e0 = []  (default: [])
-| | |-ExtraOutputs         @0x7f85041f1c68 = []  (default: [])
+| | |-EvtStore             @0x7f4d5ffb2a10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4d5ffb0b48 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4d5ffb0dd0 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1718,10 +1726,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f850426df90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f850426dfd0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85041f1b48 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85041f1b00 = []  (default: [])
+| | | |-DetStore          @0x7f4d5ffb2ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ffb2b10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ffb0cb0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ffb0c68 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1741,25 +1749,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f8505840e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7f4d607a3d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7f8504227950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffea490 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85042278d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0710 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0c20 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffea410 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff685a8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68518 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0c68 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff683f8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f85042279d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ffea510 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1772,16 +1780,16 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7f8504195b10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7f8504195b90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7f8504202fc8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7f85042027a0 = []  (default: [])
+| | |-DetStore                           @0x7f4d5ff57650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f4d5ff576d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f4d5ffc2758 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f4d5ffc2878 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7f850461a590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7f4d604054b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1799,10 +1807,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f8504195c10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f8504195c50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f8504202680 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85042028c0 = []  (default: [])
+| | | |-DetStore          @0x7f4d5ff57750 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ff57790 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ffc2ab8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ffc2cf8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1820,25 +1828,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f85041a6050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7f4d61bdfe90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7f8504180850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ff43390 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041807d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0a70 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0cb0 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ff43310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff684d0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff685f0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0cf8 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68488 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7f85041808d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f4d5ff43410 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -1852,10 +1860,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7f8504195c90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7f8504195e50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7f85041a5b00 = []  (default: [])
-| | |-ExtraOutputs                            @0x7f85041a5ab8 = []  (default: [])
+| | |-DetStore                                @0x7f4d5ff578d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f4d5ff57990 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f4d5ff62e60 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f4d5ff62e18 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1864,9 +1872,9 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7f85041a5560 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7f4d5ff628c0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7f85041a5b90 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7f4d5ff62ef0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1883,25 +1891,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f8507dee890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7f4d63b369f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7f8504215810 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffd8350 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f8504215790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0d88 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0e18 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffd82d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68758 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68560 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0dd0 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff686c8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f8504215890 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ffd83d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1915,13 +1923,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7f8504195d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7f4d5ff57bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7f8504195fd0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7f85041a4ef0 = []  (default: [])
-| | |-ExtraOutputs            @0x7f85041a4e18 = []  (default: [])
+| | |-EvtStore                @0x7f4d5ff57690 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f4d5ff61dd0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f4d5ff61f38 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1949,25 +1957,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7f8504886380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7f4d605cd380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7f85041fbcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffb2fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041fbbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0ef0 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0b90 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffb2f50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68830 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68680 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0e60 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff687a0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f85041fbd50 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ff7d710 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1980,13 +1988,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7f8507df1860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7f85041a2de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7f4d63b3a860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f4d5ff715c0 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7f85041af090 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f85041af190 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f85041b9290 = []  (default: [])
-| | |-ExtraOutputs      @0x7f85041b9710 = []  (default: [])
+| | |-DetStore          @0x7f4d5ff57b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d5ff57a10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d5ff878c0 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d5ff87f80 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -1999,10 +2007,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7f85041af1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7f85041af210 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7f85041b5fc8 = []  (default: [])
-| | | |-ExtraOutputs       @0x7f85041b58c0 = []  (default: [])
+| | | |-DetStore           @0x7f4d5ff57d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f4d5ff57d50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f4d5ff87320 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f4d5ff87368 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2029,11 +2037,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7f85041af110 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7f85041af0d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f85041af150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85041b92d8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85041b90e0 = []  (default: [])
+| | | |-CscCalibTool      @0x7f4d5ff57a50 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f4d5ff57910 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ff57ad0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ff87200 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ff87248 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2051,21 +2059,21 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85041da650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ff9b210 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041da5d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f8504121050 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0f80 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ff9b190 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff687e8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68638 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0fc8 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68878 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7f850410bf50 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7f4d5fecfb10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
@@ -2084,7 +2092,7 @@ Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
 Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
-Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool,
 Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
@@ -2108,24 +2116,24 @@ Py:Athena            INFO Save Config
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7f8505b81f90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7f4d61983f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7f8505b81f10 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7f85041a0560 = []  (default: [])
-|-ExtraOutputs               @0x7f85041a05f0 = []  (default: [])
+|-EvtStore                   @0x7f4d61983e90 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f4d5ff68170 = []  (default: [])
+|-ExtraOutputs               @0x7f4d5ff680e0 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7f8504749320 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7f4d5ff64bd8 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7f85041a0440 = []  (default: [])
+|-NeededResources            @0x7f4d5fed0e18 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7f8507d45b00 = True  (default: False)
+|-Sequential                 @0x7f4d63a90b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -2141,22 +2149,22 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85047a4a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d60562c50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85047a49d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a06c8 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0680 = []  (default: [])
+| |-EvtStore                   @0x7f4d60562bd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68128 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5fed0ef0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0638 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff681b8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f8504c62908 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6088a718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7f85047a4ad0 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7f4d60562cd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2168,11 +2176,11 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f8504c62a00 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7f8504713890 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f85047138d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f850478e758 = []  (default: [])
-| | |-ExtraOutputs      @0x7f850478e4d0 = []  (default: [])
+| | |-Decoder           @0x7f4d6088a810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f4d604d0a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d604d0ad0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d6054e908 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d6054e680 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -2186,10 +2194,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7f8504713990 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7f85047139d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7f850478e5f0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7f850478e5a8 = []  (default: [])
+| | | |-DetStore            @0x7f4d604d0b90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f4d604d0bd0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f4d6054e7a0 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f4d6054e758 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -2209,19 +2217,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85046f5a10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d604b3c10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85046f5990 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0908 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a09e0 = []  (default: [])
+| |-EvtStore                   @0x7f4d604b3b90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68050 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68200 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0950 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68290 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f850592f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6173c8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2233,12 +2241,12 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f850592faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7f4d6173c9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7f850473aed0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f850473af10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f8504744710 = []  (default: [])
-| | |-ExtraOutputs      @0x7f8504744560 = []  (default: [])
+| | |-DetStore          @0x7f4d60434110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d60434150 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d604fd908 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d604fd758 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -2250,10 +2258,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f850473afd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f850467f050 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85047443b0 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f8504744518 = []  (default: [])
+| | | |-DetStore          @0x7f4d60434210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d60434250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d604fd5a8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d604fd710 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -2273,19 +2281,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85046f7c50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d6052ee50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85046f7bd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0a28 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0ab8 = []  (default: [])
+| |-EvtStore                   @0x7f4d6052edd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff682d8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68368 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0998 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68320 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f85049a3a50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6063bd50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2298,11 +2306,11 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7f850592fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7f85042acfd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7f8504234050 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f85042a09e0 = []  (default: [])
-| | |-ExtraOutputs         @0x7f85042a0878 = []  (default: [])
+| | |-Decoder              @0x7f4d6173cc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f4d5fff0b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f4d5fff0b50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4d60061bd8 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4d60061a70 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -2315,10 +2323,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f8504234110 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f8504234150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85042a0908 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85042a08c0 = []  (default: [])
+| | | |-DetStore          @0x7f4d5fff0c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5fff0c50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d60061b00 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d60061ab8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -2338,19 +2346,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f850478ab10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d6054cd90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f850478aa90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0b00 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0b48 = []  (default: [])
+| |-EvtStore                   @0x7f4d6054cd10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff683b0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0488 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68248 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f85049a3c50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4d6002f050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2363,12 +2371,12 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7f85046cf050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7f850426de90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-Decoder              @0x7f4d6173ce60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f4d5ffb29d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7f850426ded0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f85041f19e0 = []  (default: [])
-| | |-ExtraOutputs         @0x7f85041f1c68 = []  (default: [])
+| | |-EvtStore             @0x7f4d5ffb2a10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4d5ffb0b48 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4d5ffb0dd0 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -2380,10 +2388,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f850426df90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f850426dfd0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85041f1b48 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85041f1b00 = []  (default: [])
+| | | |-DetStore          @0x7f4d5ffb2ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ffb2b10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ffb0cb0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ffb0c68 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -2403,25 +2411,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f8505840e68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7f4d607a3d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7f8504227950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffea490 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85042278d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0710 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0c20 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffea410 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff685a8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68518 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0c68 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff683f8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f85042279d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ffea510 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2434,16 +2442,16 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7f8504195b10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7f8504195b90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7f8504202fc8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7f85042027a0 = []  (default: [])
+| | |-DetStore                           @0x7f4d5ff57650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f4d5ff576d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f4d5ffc2758 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f4d5ffc2878 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7f850461a590 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7f4d604054b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -2461,10 +2469,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f8504195c10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f8504195c50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f8504202680 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85042028c0 = []  (default: [])
+| | | |-DetStore          @0x7f4d5ff57750 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ff57790 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ffc2ab8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ffc2cf8 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -2482,25 +2490,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f85041a6050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7f4d61bdfe90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7f8504180850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ff43390 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041807d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0a70 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0cb0 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ff43310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff684d0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff685f0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0cf8 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68488 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7f85041808d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f4d5ff43410 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -2514,10 +2522,10 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7f8504195c90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7f8504195e50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7f85041a5b00 = []  (default: [])
-| | |-ExtraOutputs                            @0x7f85041a5ab8 = []  (default: [])
+| | |-DetStore                                @0x7f4d5ff578d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f4d5ff57990 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f4d5ff62e60 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f4d5ff62e18 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -2526,9 +2534,9 @@ Py:Athena            INFO Save Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7f85041a5560 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7f4d5ff628c0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7f85041a5b90 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7f4d5ff62ef0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -2545,25 +2553,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f8507dee890 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7f4d63b369f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7f8504215810 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffd8350 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f8504215790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0d88 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0e18 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffd82d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68758 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68560 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0dd0 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff686c8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f8504215890 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ffd83d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2577,13 +2585,13 @@ Py:Athena            INFO Save Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7f8504195d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7f4d5ff57bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7f8504195fd0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7f85041a4ef0 = []  (default: [])
-| | |-ExtraOutputs            @0x7f85041a4e18 = []  (default: [])
+| | |-EvtStore                @0x7f4d5ff57690 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f4d5ff61dd0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f4d5ff61f38 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -2611,25 +2619,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7f8504886380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7f4d605cd380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7f85041fbcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ffb2fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041fbbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f85041a0ef0 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0b90 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ffb2f50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff68830 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68680 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0e60 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff687a0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f8507d45b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f85041fbd50 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f4d63a90b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4d5ff7d710 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2642,13 +2650,13 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7f8507df1860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7f85041a2de8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7f4d63b3a860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f4d5ff715c0 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7f85041af090 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f85041af190 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f85041b9290 = []  (default: [])
-| | |-ExtraOutputs      @0x7f85041b9710 = []  (default: [])
+| | |-DetStore          @0x7f4d5ff57b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4d5ff57a10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4d5ff878c0 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4d5ff87f80 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2661,10 +2669,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7f85041af1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7f85041af210 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7f85041b5fc8 = []  (default: [])
-| | | |-ExtraOutputs       @0x7f85041b58c0 = []  (default: [])
+| | | |-DetStore           @0x7f4d5ff57d10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f4d5ff57d50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f4d5ff87320 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f4d5ff87368 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2691,11 +2699,11 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7f85041af110 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7f85041af0d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f85041af150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f85041b92d8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f85041b90e0 = []  (default: [])
+| | | |-CscCalibTool      @0x7f4d5ff57a50 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f4d5ff57910 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4d5ff57ad0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4d5ff87200 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4d5ff87248 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2713,30 +2721,30 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f85041da650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4d5ff9b210 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f85041da5d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f8504121050 = []  (default: [])
-| |-ExtraOutputs               @0x7f85041a0f80 = []  (default: [])
+| |-EvtStore                   @0x7f4d5ff9b190 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4d5ff687e8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4d5ff68638 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f85041a0fc8 = []  (default: [])
+| |-NeededResources            @0x7f4d5ff68878 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7f850410bf50 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7f4d5fecfb10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
-Wed Mar 13 10:50:38 CET 2019
+Thu Mar 21 07:02:40 CET 2019
 Preloading tcmalloc_minimal.so
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -2744,13 +2752,13 @@ Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
-Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5447 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
-ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
-                                          running on pcaz004 on Wed Mar 13 10:50:42 2019
+                                          running on lxplus047.cern.ch on Thu Mar 21 07:02:56 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -2777,9 +2785,9 @@ ByteStreamAddre...   INFO -- Will fill Store with id =  0
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
-DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus047.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -3061,7 +3069,7 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
-GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.42S
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.78S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
@@ -3110,7 +3118,7 @@ TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
 ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x120ae200]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x1b0f2c00]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
 ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
@@ -3142,10 +3150,14 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
-ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 196 CLIDRegistry entries for module ALL
+ToolSvc.MuonCal...   INFO  Retrieved IdHelpers: (muon, mdt, csc, rpc and tgc) 
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
-ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 372 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
@@ -3156,14 +3168,14 @@ ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
 ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_PED]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_NOISE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_STAT]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_RMS]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_T0BASE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b246d00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b215a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
@@ -3200,6 +3212,10 @@ IOVDbSvc             INFO Disconnecting from COOLOFL_DCS/CONDBR2
 IOVDbSvc             INFO Opening COOL connection for COOLONL_GLOBAL/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to BFieldMap-Run1-14m-v01 for folder /GLOBAL/BField/Maps
 IOVDbSvc             INFO Disconnecting from COOLONL_GLOBAL/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_MDT/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTRT-RUN2-UPD4-21 for folder /MDT/RTBLOB
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTT0-RUN2-UPD4-21 for folder /MDT/T0BLOB
+IOVDbSvc             INFO Disconnecting from COOLOFL_MDT/CONDBR2
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchema_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchemaCorr_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA_CORR
@@ -3286,7 +3302,10 @@ MuonTGC_CablingSvc   INFO updateCableASDToPP called
 ToolSvc.TGCCabl...   INFO loadTGCMap from DB
 ToolSvc.TGCCabl...   INFO CondAttrListCollection from DB folder have been obtained with size 1
 ToolSvc.TGCCabl...   INFO giveASD2PP_DIFF_12 (m_ASD2PP_DIFF_12 is not NULL)
-MdtCalibrationD...   INFO RtKey I=2 TubeKey I=2 
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO MdtCalibDbCoolStrTool::loadRt Read 1188RTs from COOL
 AtlasFieldSvc        INFO reading magnetic field map filenames from COOL
 AtlasFieldSvc        INFO found map of type GlobalMap with soleCur=7730 toroCur=20400 (path file:MagneticFieldMaps/bfieldmap_7730_20400_14m.root)
 AtlasFieldSvc        INFO found map of type SolenoidMap with soleCur=7730 toroCur=0 (path file:MagneticFieldMaps/bfieldmap_7730_0_14m.root)
@@ -3359,34 +3378,34 @@ IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.27 ))s
-IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.76 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     1.37 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.41 ))s
-IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.94 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.55 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.63 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     1.77 ))s
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.23 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.19 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     2.02 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.06 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 1/1 objs/chan/bytes 2372/1186/2251209 ((     1.69 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 1/1 objs/chan/bytes 1186/1186/1374284 ((     0.13 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     1.02 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.04 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.24 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.27 ))s
 IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.97 ))s
-IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.94 ))s
-IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.92 ))s
-IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.26 ))s
-IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.22 ))s
-IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.12 ))s
-IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.22 ))s
-IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.77 ))s
-IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.58 ))s
-IOVDbSvc             INFO  bytes in ((     11.71 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.21 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.13 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.88 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.91 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.91 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.13 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     1.25 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.04 ))s
+IOVDbSvc             INFO  bytes in ((     11.31 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.78 ))s
-IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.90 ))s
-IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.03 ))s
-IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.76 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     2.08 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     1.57 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.82 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.46 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.19 ))s
 IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.97 ))s
-IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.27 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.23 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -3410,8 +3429,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
-ChronoStatSvc        INFO Time User   : Tot= 4.92  [s]                                             #=  1
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 20
+ChronoStatSvc        INFO Time User   : Tot=   10  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
index 411d55dcbaee..c4f3156346a5 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
@@ -1,11 +1,13 @@
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -15,9 +17,11 @@ Concurrency.NumProcs                     : 0
 Concurrency.NumThreads                   : 0
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : [function]
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -31,6 +35,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -73,16 +78,18 @@ Py:ComponentAccumulator   DEBUG Adding component ByteStreamAttListMetadataSvc/By
 Py:ComponentAccumulator   DEBUG Adding component IOVDbMetaDataTool/IOVDbMetaDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component ByteStreamMetadataTool/ByteStreamMetadataTool to the job
 Py:ComponentAccumulator   DEBUG   Merging algorithm MuonCacheCreator to a sequence AthAlgSeq
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
 dynamically loading the flag Detector
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -160,9 +167,11 @@ Detector.SimulateZDC                     : False
 Detector.SimulatesTGC                    : False
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : [function]
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -176,6 +185,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -472,11 +482,13 @@ dynamically loading the flag Muon
 Flag Name                                : Value
 Beam.BunchSpacing                        : 25
 Beam.Energy                              : [function]
-Beam.NumberOfCollisions                  : 0
-Beam.Type                                : 'collisions'
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
 Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
 Calo.Noise.fixedLumiForNoise             : -1
 Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
 Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
 Calo.TopoCluster.doTwoGaussianNoise      : True
 Common.Project                           : 'Athena'
@@ -554,9 +566,11 @@ Detector.SimulateZDC                     : False
 Detector.SimulatesTGC                    : False
 GeoModel.Align.Dynamic                   : [function]
 GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
 GeoModel.Layout                          : 'atlas'
 GeoModel.Run                             : 'RUN2'
 GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
 IOVDb.DatabaseInstance                   : 'CONDBR2'
 IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
 Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
@@ -626,6 +640,7 @@ Output.HISTFileName                      : 'myHIST.root'
 Output.HITSFileName                      : 'myHITS.pool.root'
 Output.RDOFileName                       : 'myROD.pool.root'
 Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
 Scheduler.CheckDependencies              : True
 Scheduler.ShowControlFlow                : True
 Scheduler.ShowDataDeps                   : True
@@ -657,21 +672,14 @@ Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderS
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
 Py:ConfigurableDb   DEBUG loading confDb files...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libMagFieldServices.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloRec.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libCaloTools.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCabling.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libegammaCaloTools.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArBadChannelTool.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libLArCellRec.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/WorkDir.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigT2CaloCommon.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/home/wlampl/master/build/x86_64-centos7-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Gaudi.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigL2MuonSA.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
 Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
-Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
-Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb   DEBUG loaded 1102 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5447 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
@@ -694,14 +702,14 @@ Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.PoolSvc) ... dupe ignored
 Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup... [DONE]
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -710,7 +718,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -723,7 +731,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
@@ -768,7 +776,7 @@ Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibratio
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -1128,14 +1136,14 @@ Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
 Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -1144,7 +1152,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
@@ -1157,7 +1165,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersi
 Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
-Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
@@ -1200,7 +1208,7 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibra
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
-Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MuonCalib::MdtCalibDbCoolStrTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MdtCalibDbTool
 Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
 Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
 Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
@@ -1447,24 +1455,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7f4fdccaff90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7f4688998ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7f4fdccaff10 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7f4fdb241830 = []  (default: [])
-|-ExtraOutputs               @0x7f4fdb2418c0 = []  (default: [])
+|-EvtStore                   @0x7f4688998e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f4686f2fa70 = []  (default: [])
+|-ExtraOutputs               @0x7f4686f2fb00 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7f4fdb2413f8 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7f4686f2f710 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7f4fdb241710 = []  (default: [])
+|-NeededResources            @0x7f4686f2f950 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7f4fdee72b00 = True  (default: False)
+|-Sequential                 @0x7f468aaa5b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -1480,24 +1488,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 0
-| |-CscCacheKey                @0x7f4fdbb9e780 = 'CscCache'  (default: 'StoreGateSvc+')
-| |-DetStore                   @0x7f4fdb9cfed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-CscCacheKey                @0x7f46878c1840 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f46877860d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DisableViewWarning                      = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9cfe50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241908 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241758 = []  (default: [])
+| |-EvtStore                   @0x7f4687786050 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f2fb48 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2f998 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
-| |-MdtCsmCacheKey             @0x7f4fdbb9e480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MdtCsmCacheKey             @0x7f46878c13f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241950 = []  (default: [])
+| |-NeededResources            @0x7f4686f2fb90 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
-| |-RpcCacheKey                @0x7f4fdbb9e4b0 = 'RpcCache'  (default: 'StoreGateSvc+')
-| |-TgcCacheKey                @0x7f4fdbb9e4e0 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-RpcCacheKey                @0x7f46878c1450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f46878c1480 = 'TgcCache'  (default: 'StoreGateSvc+')
 | |-Timeline                                = True
 | \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
@@ -1512,22 +1520,22 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9c1150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877ec310 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9c10d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2415f0 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241a70 = []  (default: [])
+| |-EvtStore                   @0x7f46877ec290 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f2f830 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fcb0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241ab8 = []  (default: [])
+| |-NeededResources            @0x7f4686f2fcf8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbbf8718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7f468789f718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7f4fdb9c11d0 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7f46877ec390 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1539,11 +1547,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f4fdbbf8810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7f4fdb87c890 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb87c8d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb877c20 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb877d40 = []  (default: [])
+| | |-Decoder           @0x7f468789f810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f4687528a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4687528a90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4687524d88 = []  (default: [])
+| | |-ExtraOutputs      @0x7f468750d050 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -1557,10 +1565,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7f4fdb87c990 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7f4fdb87c9d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7f4fdb877dd0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7f4fdb877d88 = []  (default: [])
+| | | |-DetStore            @0x7f4687528b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f4687528b90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f4687524f38 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f4687524ef0 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1580,19 +1588,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9cf110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877fb2d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9cf090 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241cf8 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241dd0 = []  (default: [])
+| |-EvtStore                   @0x7f46877fb250 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33050 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fc20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241d40 = []  (default: [])
+| |-NeededResources            @0x7f4686f2ff38 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdca5f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7f46887508c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1604,12 +1612,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f4fdca5faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7f46887509b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7f4fdb826ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb826f10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb82c8c0 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb82c710 = []  (default: [])
+| | |-DetStore          @0x7f46874920d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4687492110 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4687550a70 = []  (default: [])
+| | |-ExtraOutputs      @0x7f46875508c0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1621,10 +1629,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb826fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb831050 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb82c560 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb82c6c8 = []  (default: [])
+| | | |-DetStore          @0x7f46874921d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687492210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687550710 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687550878 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1644,19 +1652,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9b4350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877df510 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9b42d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241e18 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241ea8 = []  (default: [])
+| |-EvtStore                   @0x7f46877df490 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33098 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fd40 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241d88 = []  (default: [])
+| |-NeededResources            @0x7f4686f33128 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbb9cc50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7f4687651d50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1668,14 +1676,14 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CsmContainerCacheKey @0x7f4fdbb9e480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f4fdca5fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7f4fdb3dafd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7f4fdb363050 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f4fdb3ceb90 = []  (default: [])
-| | |-ExtraOutputs         @0x7f4fdb3cea28 = []  (default: [])
+| | |-CsmContainerCacheKey @0x7f46878c13f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f4688750c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f4687046ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f4687046b10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f46870b4d40 = []  (default: [])
+| | |-ExtraOutputs         @0x7f46870b4bd8 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @   0xa0e1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x247a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
 | | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
 | | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
@@ -1686,10 +1694,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb363110 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb363150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb3ceab8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb3cea70 = []  (default: [])
+| | | |-DetStore          @0x7f4687046bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687046c10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f46870b4c68 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f46870b4c20 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1709,19 +1717,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9c5850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877dea10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9c5790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241f38 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241e60 = []  (default: [])
+| |-EvtStore                   @0x7f46877de950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f330e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33248 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb2419e0 = []  (default: [])
+| |-NeededResources            @0x7f4686f33200 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbb9ce50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4687061050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1733,15 +1741,15 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CscContainerCacheKey @0x7f4fdbb9e780 = 'CscCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f4fdb7fe050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7f4fdb31ee90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-CscContainerCacheKey @0x7f46878c1840 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f4688750e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f4687007990 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7f4fdb31eed0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f4fdb320c68 = []  (default: [])
-| | |-ExtraOutputs         @0x7f4fdb320f80 = []  (default: [])
+| | |-EvtStore             @0x7f46870079d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4687062050 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4687062128 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @   0xa0e1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x247a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
 | | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
 | | | |-AuditFinalize                  = False
@@ -1751,10 +1759,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb31ef90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb31efd0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb320d88 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb320d40 = []  (default: [])
+| | | |-DetStore          @0x7f4687007a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687007ad0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687004ef0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687004ea8 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1774,25 +1782,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdc96ce68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7f468773ad20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7f4fdb355950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f468703f450 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb3558d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251128 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241ef0 = []  (default: [])
+| |-EvtStore                   @0x7f468703f3d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33368 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f332d8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241b00 = []  (default: [])
+| |-NeededResources            @0x7f4686f33290 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb3559d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f468703f4d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1805,16 +1813,16 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7f4fdb2c5b10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7f4fdb2c5b90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7f4fdb333fc8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7f4fdb3338c0 = []  (default: [])
+| | |-DetStore                           @0x7f4686fac610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f4686fac690 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f46870177e8 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f46870177a0 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7f4fdb7374b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7f468745b4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1832,10 +1840,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb2c5c10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb2c5c50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb333a28 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb333ab8 = []  (default: [])
+| | | |-DetStore          @0x7f4686fac710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4686fac750 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687017200 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687017128 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1853,25 +1861,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdb2d3050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7f4688bf6e90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7f4fdb2ae850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686f97350 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb2ae7d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251050 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb251170 = []  (default: [])
+| |-EvtStore                   @0x7f4686f972d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33170 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f333b0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251098 = []  (default: [])
+| |-NeededResources            @0x7f4686f331b8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7f4fdb2ae8d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f4686f973d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -1885,10 +1893,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7f4fdb2c5c90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7f4fdb2c5e50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7f4fdb2d4e18 = []  (default: [])
-| | |-ExtraOutputs                            @0x7f4fdb2d4dd0 = []  (default: [])
+| | |-DetStore                                @0x7f4686fac890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f4686fac950 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f4686fb8248 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f4686fb8128 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1897,9 +1905,9 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7f4fdb2d4878 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7f4686fb8170 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7f4fdb2d4ea8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7f4686fb82d8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1916,25 +1924,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdef1b9f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7f468ab4b9f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7f4fdb345810 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4687030310 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb345790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2512d8 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb2510e0 = []  (default: [])
+| |-EvtStore                   @0x7f4687030290 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33518 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33320 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251248 = []  (default: [])
+| |-NeededResources            @0x7f4686f33488 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb345890 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4687030390 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1948,13 +1956,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7f4fdb2c5d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7f4686fac510 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7f4fdb2c5fd0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7f4fdb2d0dd0 = []  (default: [])
-| | |-ExtraOutputs            @0x7f4fdb2d45a8 = []  (default: [])
+| | |-EvtStore                @0x7f4686fac790 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f4686fb73b0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f4686fb7a70 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1982,25 +1990,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7f4fdb8fa380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7f46875e3380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7f4fdb32bcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686fd1710 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb32bbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2513b0 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb251200 = []  (default: [])
+| |-EvtStore                   @0x7f4687007f90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f335f0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251320 = []  (default: [])
+| |-NeededResources            @0x7f4686f33560 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb32bd50 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4686fd17d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2013,13 +2021,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7f4fdef1e860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7f4fdb2cdde8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7f468ab4f860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f4686fb2d00 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7f4fdb2de050 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb2de150 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb2e5170 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb2e54d0 = []  (default: [])
+| | |-DetStore          @0x7f4686fac650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4686faca50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4686fc8fc8 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4686fc8d40 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2032,10 +2040,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7f4fdb2de190 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7f4fdb2de1d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7f4fdb2e1bd8 = []  (default: [])
-| | | |-ExtraOutputs       @0x7f4fdb2e19e0 = []  (default: [])
+| | | |-DetStore           @0x7f4686fac8d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f4686faca10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f4686fc85a8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f4686fc8cb0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2062,11 +2070,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7f4fdb2de0d0 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7f4fdb2de090 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb2de110 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb2e5248 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb2e52d8 = []  (default: [])
+| | | |-CscCalibTool      @0x7f4686fac7d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f4686fac550 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4686facb10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4686fc8ab8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4686fc8a28 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2084,21 +2092,21 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb307690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686fed1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb307610 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251368 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb2511b8 = []  (default: [])
+| |-EvtStore                   @0x7f4686fed150 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f335a8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f333f8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb2513f8 = []  (default: [])
+| |-NeededResources            @0x7f4686f33638 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7f4fdb238f90 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7f4686f22b10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
@@ -2117,7 +2125,7 @@ Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
 Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
-Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MuonCalib::MdtCalibDbCoolStrTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool,
 Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
 Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
@@ -2141,24 +2149,24 @@ Py:Athena            INFO Save Config
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7f4fdccaff90 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7f4688998ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7f4fdccaff10 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7f4fdb241830 = []  (default: [])
-|-ExtraOutputs               @0x7f4fdb2418c0 = []  (default: [])
+|-EvtStore                   @0x7f4688998e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f4686f2fa70 = []  (default: [])
+|-ExtraOutputs               @0x7f4686f2fb00 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7f4fdb836c68 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7f4686f2f680 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7f4fdb241710 = []  (default: [])
+|-NeededResources            @0x7f4686f2f950 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7f4fdee72b00 = True  (default: False)
+|-Sequential                 @0x7f468aaa5b00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -2174,24 +2182,24 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 0
-| |-CscCacheKey                @0x7f4fdbb9e780 = 'CscCache'  (default: 'StoreGateSvc+')
-| |-DetStore                   @0x7f4fdb9cfed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-CscCacheKey                @0x7f46878c1840 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f46877860d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DisableViewWarning                      = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9cfe50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241908 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241758 = []  (default: [])
+| |-EvtStore                   @0x7f4687786050 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f2fb48 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2f998 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
-| |-MdtCsmCacheKey             @0x7f4fdbb9e480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MdtCsmCacheKey             @0x7f46878c13f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241950 = []  (default: [])
+| |-NeededResources            @0x7f4686f2fb90 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
-| |-RpcCacheKey                @0x7f4fdbb9e4b0 = 'RpcCache'  (default: 'StoreGateSvc+')
-| |-TgcCacheKey                @0x7f4fdbb9e4e0 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-RpcCacheKey                @0x7f46878c1450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f46878c1480 = 'TgcCache'  (default: 'StoreGateSvc+')
 | |-Timeline                                = True
 | \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
 |=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
@@ -2206,22 +2214,22 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9c1150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877ec310 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9c10d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2415f0 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241a70 = []  (default: [])
+| |-EvtStore                   @0x7f46877ec290 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f2f830 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fcb0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241ab8 = []  (default: [])
+| |-NeededResources            @0x7f4686f2fcf8 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbbf8718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7f468789f718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7f4fdb9c11d0 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7f46877ec390 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2233,11 +2241,11 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f4fdbbf8810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7f4fdb87c890 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb87c8d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb877c20 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb877d40 = []  (default: [])
+| | |-Decoder           @0x7f468789f810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore          @0x7f4687528a50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4687528a90 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4687524d88 = []  (default: [])
+| | |-ExtraOutputs      @0x7f468750d050 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
@@ -2251,10 +2259,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7f4fdb87c990 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7f4fdb87c9d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7f4fdb877dd0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7f4fdb877d88 = []  (default: [])
+| | | |-DetStore            @0x7f4687528b50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f4687528b90 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f4687524f38 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f4687524ef0 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -2274,19 +2282,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9cf110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877fb2d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9cf090 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241cf8 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241dd0 = []  (default: [])
+| |-EvtStore                   @0x7f46877fb250 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33050 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fc20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241d40 = []  (default: [])
+| |-NeededResources            @0x7f4686f2ff38 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdca5f9b0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7f46887508c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2298,12 +2306,12 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7f4fdca5faa0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7f46887509b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7f4fdb826ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb826f10 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb82c8c0 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb82c710 = []  (default: [])
+| | |-DetStore          @0x7f46874920d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4687492110 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4687550a70 = []  (default: [])
+| | |-ExtraOutputs      @0x7f46875508c0 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -2315,10 +2323,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb826fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb831050 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb82c560 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb82c6c8 = []  (default: [])
+| | | |-DetStore          @0x7f46874921d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687492210 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687550710 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687550878 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -2338,19 +2346,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9b4350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877df510 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9b42d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241e18 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241ea8 = []  (default: [])
+| |-EvtStore                   @0x7f46877df490 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33098 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f2fd40 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241d88 = []  (default: [])
+| |-NeededResources            @0x7f4686f33128 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbb9cc50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7f4687651d50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2362,14 +2370,14 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CsmContainerCacheKey @0x7f4fdbb9e480 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f4fdca5fd70 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7f4fdb3dafd0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7f4fdb363050 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f4fdb3ceb90 = []  (default: [])
-| | |-ExtraOutputs         @0x7f4fdb3cea28 = []  (default: [])
+| | |-CsmContainerCacheKey @0x7f46878c13f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f4688750c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f4687046ad0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f4687046b10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f46870b4d40 = []  (default: [])
+| | |-ExtraOutputs         @0x7f46870b4bd8 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @   0xa0e1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x247a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
 | | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
 | | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
@@ -2380,10 +2388,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb363110 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb363150 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb3ceab8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb3cea70 = []  (default: [])
+| | | |-DetStore          @0x7f4687046bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687046c10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f46870b4c68 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f46870b4c20 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -2403,19 +2411,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb9c5850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f46877dea10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb9c5790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb241f38 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241e60 = []  (default: [])
+| |-EvtStore                   @0x7f46877de950 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f330e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33248 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb2419e0 = []  (default: [])
+| |-NeededResources            @0x7f4686f33200 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7f4fdbb9ce50 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7f4687061050 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2427,15 +2435,15 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                        = False
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
-| | |-CscContainerCacheKey @0x7f4fdbb9e780 = 'CscCache'  (default: 'StoreGateSvc+')
-| | |-Decoder              @0x7f4fdb7fe050 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7f4fdb31ee90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-CscContainerCacheKey @0x7f46878c1840 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f4688750e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f4687007990 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7f4fdb31eed0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7f4fdb320c68 = []  (default: [])
-| | |-ExtraOutputs         @0x7f4fdb320f80 = []  (default: [])
+| | |-EvtStore             @0x7f46870079d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f4687062050 = []  (default: [])
+| | |-ExtraOutputs         @0x7f4687062128 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
-| | |-OutputLevel          @   0xa0e1d8 = 1  (default: 0)
+| | |-OutputLevel          @  0x247a1d8 = 1  (default: 0)
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
 | | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
 | | | |-AuditFinalize                  = False
@@ -2445,10 +2453,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb31ef90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb31efd0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb320d88 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb320d40 = []  (default: [])
+| | | |-DetStore          @0x7f4687007a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4687007ad0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687004ef0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687004ea8 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -2468,25 +2476,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdc96ce68 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7f468773ad20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7f4fdb355950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f468703f450 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb3558d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251128 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb241ef0 = []  (default: [])
+| |-EvtStore                   @0x7f468703f3d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33368 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f332d8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb241b00 = []  (default: [])
+| |-NeededResources            @0x7f4686f33290 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb3559d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f468703f4d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2499,16 +2507,16 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7f4fdb2c5b10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7f4fdb2c5b90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7f4fdb333fc8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7f4fdb3338c0 = []  (default: [])
+| | |-DetStore                           @0x7f4686fac610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f4686fac690 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f46870177e8 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f46870177a0 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7f4fdb7374b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7f468745b4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -2526,10 +2534,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7f4fdb2c5c10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb2c5c50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb333a28 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb333ab8 = []  (default: [])
+| | | |-DetStore          @0x7f4686fac710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4686fac750 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4687017200 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4687017128 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -2547,25 +2555,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdb2d3050 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7f4688bf6e90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7f4fdb2ae850 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686f97350 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb2ae7d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251050 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb251170 = []  (default: [])
+| |-EvtStore                   @0x7f4686f972d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33170 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f333b0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251098 = []  (default: [])
+| |-NeededResources            @0x7f4686f331b8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7f4fdb2ae8d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f4686f973d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -2579,10 +2587,10 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7f4fdb2c5c90 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7f4fdb2c5e50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7f4fdb2d4e18 = []  (default: [])
-| | |-ExtraOutputs                            @0x7f4fdb2d4dd0 = []  (default: [])
+| | |-DetStore                                @0x7f4686fac890 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f4686fac950 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f4686fb8248 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f4686fb8128 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -2591,9 +2599,9 @@ Py:Athena            INFO Save Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7f4fdb2d4878 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7f4686fb8170 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7f4fdb2d4ea8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7f4686fb82d8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -2610,25 +2618,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7f4fdef1b9f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7f468ab4b9f0 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7f4fdb345810 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4687030310 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb345790 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2512d8 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb2510e0 = []  (default: [])
+| |-EvtStore                   @0x7f4687030290 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f33518 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33320 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251248 = []  (default: [])
+| |-NeededResources            @0x7f4686f33488 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb345890 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4687030390 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2642,13 +2650,13 @@ Py:Athena            INFO Save Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7f4fdb2c5d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7f4686fac510 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7f4fdb2c5fd0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7f4fdb2d0dd0 = []  (default: [])
-| | |-ExtraOutputs            @0x7f4fdb2d45a8 = []  (default: [])
+| | |-EvtStore                @0x7f4686fac790 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f4686fb73b0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f4686fb7a70 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -2676,25 +2684,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7f4fdb8fa380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7f46875e3380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7f4fdb32bcd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686fd1710 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb32bbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb2513b0 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb251200 = []  (default: [])
+| |-EvtStore                   @0x7f4687007f90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f335f0 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f33440 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb251320 = []  (default: [])
+| |-NeededResources            @0x7f4686f33560 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7f4fdee72b20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7f4fdb32bd50 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7f468aaa5b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f4686fd17d0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2707,13 +2715,13 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7f4fdef1e860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7f4fdb2cdde8 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7f468ab4f860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f4686fb2d00 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7f4fdb2de050 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7f4fdb2de150 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7f4fdb2e5170 = []  (default: [])
-| | |-ExtraOutputs      @0x7f4fdb2e54d0 = []  (default: [])
+| | |-DetStore          @0x7f4686fac650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f4686faca50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f4686fc8fc8 = []  (default: [])
+| | |-ExtraOutputs      @0x7f4686fc8d40 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2726,10 +2734,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7f4fdb2de190 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7f4fdb2de1d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7f4fdb2e1bd8 = []  (default: [])
-| | | |-ExtraOutputs       @0x7f4fdb2e19e0 = []  (default: [])
+| | | |-DetStore           @0x7f4686fac8d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f4686faca10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f4686fc85a8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f4686fc8cb0 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2756,11 +2764,11 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7f4fdb2de0d0 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7f4fdb2de090 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7f4fdb2de110 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7f4fdb2e5248 = []  (default: [])
-| | | |-ExtraOutputs      @0x7f4fdb2e52d8 = []  (default: [])
+| | | |-CscCalibTool      @0x7f4686fac7d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f4686fac550 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f4686facb10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f4686fc8ab8 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f4686fc8a28 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2778,30 +2786,30 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7f4fdb307690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7f4686fed1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7f4fdb307610 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7f4fdb251368 = []  (default: [])
-| |-ExtraOutputs               @0x7f4fdb2511b8 = []  (default: [])
+| |-EvtStore                   @0x7f4686fed150 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f4686f335a8 = []  (default: [])
+| |-ExtraOutputs               @0x7f4686f333f8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7f4fdb2513f8 = []  (default: [])
+| |-NeededResources            @0x7f4686f33638 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7f4fdb238f90 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7f4686f22b10 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
-Wed Mar 13 14:28:03 CET 2019
+Thu Mar 21 07:09:56 CET 2019
 Preloading tcmalloc_minimal.so
-Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-centos7-gcc8-opt] [2.0.25/141317d] -- built on [2019-03-11T2107]
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -2809,13 +2817,13 @@ Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode_Cache.pkl  ... 
-Py:ConfigurableDb    INFO Read module info for 5461 configurables from 12 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5447 configurables from 5 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
-ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
-                                          running on pcaz004 on Wed Mar 13 14:28:07 2019
+                                          running on lxplus047.cern.ch on Thu Mar 21 07:10:12 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -2843,8 +2851,8 @@ PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.x
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-11T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus047.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -3126,7 +3134,7 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
-GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.45S
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.8S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
@@ -3175,7 +3183,7 @@ TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
 ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x10cbcc00]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x1be9ac00]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
 ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
@@ -3221,10 +3229,14 @@ RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcR
 TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
 TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
-ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 196 CLIDRegistry entries for module ALL
+ToolSvc.MuonCal...   INFO  Retrieved IdHelpers: (muon, mdt, csc, rpc and tgc) 
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
 AtlasFieldSvc        INFO initialize() ...
 AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
-ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 372 CLIDRegistry entries for module ALL
 AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
 AtlasFieldSvc        INFO initialize() successful
@@ -3235,14 +3247,14 @@ ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
 ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_PED]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_NOISE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_STAT]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_RMS]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_T0BASE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1ae96d00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bf83a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
@@ -3279,6 +3291,10 @@ IOVDbSvc             INFO Disconnecting from COOLOFL_DCS/CONDBR2
 IOVDbSvc             INFO Opening COOL connection for COOLONL_GLOBAL/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to BFieldMap-Run1-14m-v01 for folder /GLOBAL/BField/Maps
 IOVDbSvc             INFO Disconnecting from COOLONL_GLOBAL/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_MDT/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTRT-RUN2-UPD4-21 for folder /MDT/RTBLOB
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTT0-RUN2-UPD4-21 for folder /MDT/T0BLOB
+IOVDbSvc             INFO Disconnecting from COOLOFL_MDT/CONDBR2
 IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchema_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA
 IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchemaCorr_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA_CORR
@@ -3365,7 +3381,10 @@ MuonTGC_CablingSvc   INFO updateCableASDToPP called
 ToolSvc.TGCCabl...   INFO loadTGCMap from DB
 ToolSvc.TGCCabl...   INFO CondAttrListCollection from DB folder have been obtained with size 1
 ToolSvc.TGCCabl...   INFO giveASD2PP_DIFF_12 (m_ASD2PP_DIFF_12 is not NULL)
-MdtCalibrationD...   INFO RtKey I=2 TubeKey I=2 
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO MdtCalibDbCoolStrTool::loadRt Read 1188RTs from COOL
 AtlasFieldSvc        INFO reading magnetic field map filenames from COOL
 AtlasFieldSvc        INFO found map of type GlobalMap with soleCur=7730 toroCur=20400 (path file:MagneticFieldMaps/bfieldmap_7730_20400_14m.root)
 AtlasFieldSvc        INFO found map of type SolenoidMap with soleCur=7730 toroCur=0 (path file:MagneticFieldMaps/bfieldmap_7730_0_14m.root)
@@ -4615,34 +4634,34 @@ IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.19 ))s
-IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     1.04 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.18 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.56 ))s
-IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 0/0 objs/chan/bytes 0/1186/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.10 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.46 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.77 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.16 ))s
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.26 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.88 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     1.40 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     1.72 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 1/1 objs/chan/bytes 2372/1186/2251209 ((     0.24 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 1/1 objs/chan/bytes 1186/1186/1374284 ((     1.17 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.12 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.76 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     1.18 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     1.24 ))s
 IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.03 ))s
-IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.58 ))s
-IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.11 ))s
-IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.99 ))s
-IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     5.85 ))s
-IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.05 ))s
-IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.05 ))s
-IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.04 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.94 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.63 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.11 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     5.80 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.14 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.71 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.03 ))s
 IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.03 ))s
-IOVDbSvc             INFO  bytes in ((     11.19 ))s
+IOVDbSvc             INFO  bytes in ((     17.38 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     0.74 ))s
-IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     1.50 ))s
-IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 1 nFolders: 2 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     7.71 ))s
-IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     1.04 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     3.11 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     3.30 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.41 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     8.38 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.88 ))s
 IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.03 ))s
-IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.19 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.26 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -4666,8 +4685,8 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 18
-ChronoStatSvc        INFO Time User   : Tot= 5.05  [s]                                             #=  1
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 20
+ChronoStatSvc        INFO Time User   : Tot= 10.5  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
-- 
GitLab


From 1afbcc193e63965a2cf8a6b41d3aa23362099e96 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Thu, 21 Mar 2019 12:07:03 +0100
Subject: [PATCH 154/163] GeoPrimitives: Drop backwards compatibility with
 Eigen <= 3.3.0

Drop the support of older Eigen versions and cleanup dictionary rules.
---
 .../GeoPrimitives/GeoPrimitivesDict.h         |  8 +---
 .../GeoPrimitives/GeoPrimitives/selection.xml | 42 -------------------
 2 files changed, 1 insertion(+), 49 deletions(-)

diff --git a/DetectorDescription/GeoPrimitives/GeoPrimitives/GeoPrimitivesDict.h b/DetectorDescription/GeoPrimitives/GeoPrimitives/GeoPrimitivesDict.h
index fefc3d8d6fab..4a56424cb03b 100644
--- a/DetectorDescription/GeoPrimitives/GeoPrimitives/GeoPrimitivesDict.h
+++ b/DetectorDescription/GeoPrimitives/GeoPrimitives/GeoPrimitivesDict.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "GeoPrimitives/GeoPrimitives.h"
@@ -23,12 +23,6 @@ struct GeoPrimitivesInstan
   Eigen::MatrixBase<Eigen::Matrix<double,3,1,0,3,1> > m_vb3;
   Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> > m_vb5;
   Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> > m_db4;
-#if ! EIGEN_VERSION_AT_LEAST( 3, 3, 0 )
-  Eigen::internal::special_scalar_op_base<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,double,double,Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> >,false> m_ss4;
-  Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,2,1,0,2,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,2,1,0,2,1> >,false> m_ssv2;
-  Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,1,0,3,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,3,1,0,3,1> >,false> m_ssv3;
-  Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,5,1,0,5,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> >,false> m_ssv5;
-#endif // EIGEN_VERSION_AT_LEAST
   Eigen::DenseCoeffsBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,2> m_dc4_2;
   Eigen::DenseCoeffsBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,0> m_dc4_0;
   Eigen::PlainObjectBase<Eigen::Matrix<double,3,3,0,3,3> > m_pm3;
diff --git a/DetectorDescription/GeoPrimitives/GeoPrimitives/selection.xml b/DetectorDescription/GeoPrimitives/GeoPrimitives/selection.xml
index a25f5b7a1066..bcf9cf2a9fe9 100644
--- a/DetectorDescription/GeoPrimitives/GeoPrimitives/selection.xml
+++ b/DetectorDescription/GeoPrimitives/GeoPrimitives/selection.xml
@@ -10,7 +10,6 @@
   <class name="Eigen::Matrix<double,2,1,0,2,1>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,2,1,0,2,1> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,2,1,0,2,1> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,2,1,0,2,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,2,1,0,2,1> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,2,1,0,2,1>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,2,1,0,2,1>,1>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,2,1,0,2,1>,0>"/>
@@ -20,8 +19,6 @@
   <class name="Eigen::Matrix<double,3,1,0,3,1>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,3,1,0,3,1> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,3,1,0,3,1> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,1,0,3,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,3,1,0,3,1> >,false>"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,1,0,3,1>,double,double,Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,1,0,3,1>,3>,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,1,0,3,1>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,1,0,3,1>,1>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,1,0,3,1>,0>"/>
@@ -31,7 +28,6 @@
   <class name="Eigen::Matrix<double,5,1,0,5,1>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,5,1,0,5,1> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,5,1,0,5,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,5,1,0,5,1>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,5,1,0,5,1>,1>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,5,1,0,5,1>,0>"/>
@@ -41,7 +37,6 @@
   <class name="Eigen::Matrix<double,3,3,0,3,3>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,3,3,0,3,3> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,3,0,3,3>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,3,3,0,3,3> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>"/>
   <class name="Eigen::PlainObjectBase<Eigen::Matrix<double,3,3,0,3,3> >"/>
@@ -49,7 +44,6 @@
   <class name="Eigen::Matrix<double,4,4,0,4,4>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,4,4,0,4,4> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,4,4,0,4,4> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,4,4,0,4,4>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,4,4,0,4,4> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,4,4,0,4,4>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,4,4,0,4,4>,1>"/>
   <class name="Eigen::PlainObjectBase<Eigen::Matrix<double,4,4,0,4,4> >"/>
@@ -59,14 +53,12 @@
   <class name="Eigen::MapBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,0>"/>
   <class name="Eigen::MatrixBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> >"/>
   <class name="Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,double,double,Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,2>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,0>"/>
 
   <class name="Eigen::Matrix<double,5,5,0,5,5>"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,5,5,0,5,5> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,5,5,0,5,5> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,5,5,0,5,5>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,5,0,5,5> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,5,5,0,5,5>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,5,5,0,5,5>,1>"/>
   <class name="Eigen::PlainObjectBase<Eigen::Matrix<double,5,5,0,5,5> >"/>
@@ -75,7 +67,6 @@
   <class name="Eigen::PlainObjectBase<Eigen::Matrix<double,-1,-1,0,-1,-1> >"/>
   <class name="Eigen::MatrixBase<Eigen::Matrix<double,-1,-1,0,-1,-1> >"/>
   <class name="Eigen::DenseBase<Eigen::Matrix<double,-1,-1,0,-1,-1> >"/>
-  <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,-1,-1,0,-1,-1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,-1,-1,0,-1,-1> >,false>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,-1,-1,0,-1,-1>,3>"/>
   <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,-1,-1,0,-1,-1>,1>"/>
 
@@ -182,10 +173,6 @@
       <method name="trace"/>
     </class>
 
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false>,double,double,Eigen::DenseBase<Eigen::Block<const Eigen::Matrix<double,4,4,0,4,4>,3,1,false> >,false>">
-      <method name="*"/>
-    </class>
-
     <class name="Eigen::PlainObjectBase<Eigen::Matrix<double,3,3,0,3,3> >">
       <method name="resize"/>
       <method name="conservativeResize"/>
@@ -584,35 +571,6 @@
       <method name="Ones"/>
     </class>
 
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,2,1,0,2,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,2,1,0,2,1> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,1,0,3,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,3,1,0,3,1> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,5,1,0,5,1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,3,3,0,3,3>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,1,0,5,1> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,4,4,0,4,4>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,4,4,0,4,4> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,5,5,0,5,5>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,5,5,0,5,5> >,false>">
-      <method name="*"/>
-    </class>
-
-    <class name="Eigen::internal::special_scalar_op_base<Eigen::Matrix<double,-1,-1,0,-1,-1>,double,double,Eigen::MatrixBase<Eigen::Matrix<double,-1,-1,0,-1,-1> >,false>">
-      <method name="*"/>
-    </class>
-
     <class name="Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>">
       <method name="[]"/>
       <method name="x"/>
-- 
GitLab


From 6b82d8e0d7a1a162ec4241359e52ff1e25086d25 Mon Sep 17 00:00:00 2001
From: Rafal Bielski <rafal.bielski@cern.ch>
Date: Thu, 21 Mar 2019 12:58:14 +0000
Subject: [PATCH 155/163] Fix aux collection name to serialise

---
 Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py b/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
index f67fbe813b4e..36ec57e5ef21 100644
--- a/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
+++ b/Trigger/TrigValidation/TrigP1Test/share/testHLT_timeout.py
@@ -90,7 +90,7 @@ from TrigOutputHandling.TrigOutputHandlingConfig import TriggerEDMSerialiserTool
 serialiser = TriggerEDMSerialiserToolCfg("Serialiser")
 serialiser.addCollectionListToMainResult([
   "xAOD::TrigCompositeContainer_v1#"+hypo.HypoOutputDecisions,
-  "xAOD::TrigCompositeAuxContainer_v2#"+hypo.HypoOutputDecisions+"Aux.decisions",
+  "xAOD::TrigCompositeAuxContainer_v2#"+hypo.HypoOutputDecisions+"Aux.",
 ])
 
 # StreamTag definitions
-- 
GitLab


From a2c9944d7e2ab2c2ff072aa371cd3a89ebeb2893 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Thu, 21 Mar 2019 14:22:02 +0100
Subject: [PATCH 156/163] AtlasPyFwdBwdPorts: remove enum34 module

enum34 is provided by LCG_95 now.
---
 External/AtlasPyFwdBwdPorts/CMakeLists.txt      |   9 +--------
 .../AtlasPyFwdBwdPorts/src/enum34-1.1.6.tar.gz  | Bin 40048 -> 0 bytes
 2 files changed, 1 insertion(+), 8 deletions(-)
 delete mode 100644 External/AtlasPyFwdBwdPorts/src/enum34-1.1.6.tar.gz

diff --git a/External/AtlasPyFwdBwdPorts/CMakeLists.txt b/External/AtlasPyFwdBwdPorts/CMakeLists.txt
index 0419f2337f4b..3ba4d63f9cea 100644
--- a/External/AtlasPyFwdBwdPorts/CMakeLists.txt
+++ b/External/AtlasPyFwdBwdPorts/CMakeLists.txt
@@ -1,4 +1,3 @@
-# $Id: CMakeLists.txt 790212 2016-12-16 17:43:15Z ssnyder $
 
 # The name of the package:
 atlas_subdir( AtlasPyFwdBwdPorts )
@@ -101,13 +100,7 @@ _setup_python_package( pyflakes
 _setup_python_package( flake8
    ${CMAKE_CURRENT_SOURCE_DIR}/src/flake8-3.6.0.tar.gz
    178485aed0799655d0cbf2e3bdcfaddc
-   DEPENDS pyflakes pycodestyle mccabe enum34
-   SINGLE_VERSION )
-
-# Install enum34:
-_setup_python_package( enum34
-   ${CMAKE_CURRENT_SOURCE_DIR}/src/enum34-1.1.6.tar.gz
-   5f13a0841a61f7fc295c514490d120d0
+   DEPENDS pyflakes pycodestyle mccabe
    SINGLE_VERSION )
 
 # Install mccabe:
diff --git a/External/AtlasPyFwdBwdPorts/src/enum34-1.1.6.tar.gz b/External/AtlasPyFwdBwdPorts/src/enum34-1.1.6.tar.gz
deleted file mode 100644
index ab548ac6d2b89363304c23093781d8d6c06cac34..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40048
zcmV(uK<mFBiwFo`J~>wc|72-%bT4IYb!{^=Eio=JE;cT7VR8WMy<2zNM$#ynXRI~<
z0g;zCNr!@Y5p|30iEPWU_SmvNNuGQ;8V?1Lkc5Z?H~?swJ1f6n@3-@Qe(R}AccU9<
zkkrMVc#kw0lLY!wU0q#WRb5pbMALD1ZME&Sz4gc6eVM-&{B3OX@Uy+qYw4fz@4I$q
zqrKkgZnV1_-?iG^)_U(dxA)yw_?xDgpSbRKL3ZIsbIL7xF9#w&zmdN{pMU)E_|Gu^
zYprhke*XVG^Z#b=#qR#$?j6tn`ubYc{C76i*0lNW!u<DIYcT(<`}zOke=p+6ED6sq
zGPgcxxE)}<O?MZE>b{yLV?Xkoozcjp5~-U6X^?yhhMwab1j8`RlJInzg>mHi(a@cy
zfg46{8c&l!Ku=D?$WLbOS)7d1rh64;7jB%;XFScEaXbvq!hw$sG+jRl+)0p(!z>Gi
z?j(sng+urPpk(k*0F8`B@l_a|yMs6yhFB?eu+lilwjIZXKNF_Zjn5=7gLnu9VX9#W
znGZl>i~ec+DWHl2g@h>1!a>l4_hIUepfzkH?~q0Xb*WYk5p+8k`QbQ7JUb-NqlOC!
z2@G;L1?X-GOb!Uu&w+8pK!@>QIu4@Dms9l^W+8?*i97bQAPN0ZN>vrsX{xBIHViSg
z{UD^O_&V~(fk7?+bN+^Az>j8PSP{1rCn<D0b58@L7#Kn92GJ0n21pzL!Z^+XmvNIZ
zTtk2n$j&{3myC@xKFh9f_60Gy=_D8+H9^G?X)HlHig;8=RcXp2IC{Nz=pMd%b@a>5
z!LAG6-ygjD``*jlm+tdl-J{pL?u&Qte?8dy`Sp?e`rVtCy9bBv&i+eyx_@-A_x!`r
zJ9x0Na|kt89DK2}|Es(E-|r804-egU2kze6_iy%~F=+i@Xa8t#_ps^i?Z0^Q;pN``
z&rKH^aQELGxo`H~?j1p~qjyd0)G1eU-@S6*?jF2&4L^6D@4eYO`jr5AwRg0SeZ7Lt
zcHH+n2S<A^KD^mEaNmD8c>nHj*TG@E+&g^nW@qp1?n@7PhaTPCzwhoJxreWJ-n_An
z5@9#S_<YxSv$ym7%`W!@qkOq{u>0Z&hm(JM0hj~$-Zb6A_q#9l@XPLh@4{eq4t{My
zn+~*jxcgrppb)%tU+%o!`5DGmUw{&rlNTQjcHbh*?_N2FAD$l`?HzqM+I4?^_wFSj
z`f&H)@32uF{^-7WcSzX!aJbuq9*%afV{8IY1+U@z^ACr6h%{$!|7iE%;KTc)y?6T!
z82K-N78v&qRDDU<eYa0T1q{7A_!S#P91!xG?k}%*;W<q4zC)PWK@=PU#$Fuh#h^bx
z;E^^)cYpWiH+w(t?!VZ@x9_l(U-k}n8!%UUhge{byZvPc`uu=Hra1zr_^U>-O`1t}
z@0Gjr^6z^HHWzka?hp3_oxr2R4=-K|bbHSA_WyoAjKZwn_a?Kivj1<a_1f!&{eQjP
z>)!AGU*m6OW##=0SZL(#!sG`D?GY(Fb)0ZKi4)+gGuUZTw-29=)9?GEQNQm#b&qRU
zq1JS3dr>C8PNVQ&)1dazaXtkJa$G3bZsLFIjx(9TLwImDiv6r!dzg9;)0+E`TJ}VF
zpuMyBc)Rnl;W$|`+a?B%TS)ME5KJ<6AGVd<B#D!4u`$pFQx9Pm^G`=XgCFzmoVdX#
zz<m$*L0KX%fPdkcEMq>$KadorN#q_S)4(Y_dj%V2paDqx(g1ehU?BE;M%}vvcCKLf
zG8|-b0DJUC8-i8_aI+srdc&uF8sG*DTe}?r58S=T6%*Leio38!l2{Q9;0bQ`XYMI%
z`7XR>VJ!+#C=!i?s*x^Ws+PLHp@afun=b6w?iI{GZK2pOl=0dH=m2u~q5&?OUkr6u
zmIcwl9mUZ(&`9tZ#E#Uh8=y4whGmB!>7+oL2Ot6jFYx<L#!^Ob6#opO9{j4ur@z6x
z2+{z`royf-3%dRQa0Idnh(<2A2O>$of6mo`5whHKgmMS`=L6NHgCv{)TANCQ0ZI%b
zt<{tzS082-q}(%@;wT%<+^Y*AlyIjc;3o0(`~oHgPz$^$60);;&M<i{;7q<|fRkVh
zqAW{DAa;%Y5zm%*4M0Jg`7jF&g5(5(JqTe5qJzdD1zUO#nAdQCQuakW{E?+E_-_b=
z>YmQr#1Dxq6y9l?1<H_($Ym<Gm3kVC&YJESH2oB*U0bsF#={rLB;do*D#K4zSK_JZ
z##d305V*y*U}Y<G0=W3rT;d3LPyoB$D6Vt`QeC#z(4k7LP<`@8Qyms-S1SWQssUlc
zXw@987>y5sHDy7m{Usab+Gg7hH5{h>oPu$6XiI}eof6YS6vE3g$rJZu{oxAw_v9=K
zl+_J1U-+q9gs?w|d8{=+)Sp`{U9Ol!QLSN&ZW;kkt)mK3Jv1LNOa+0uvFPG~VJY03
z+^0{e#_?)rn|=T!HC(g?tW=`2-Tml(k0mM!tai6oJC#L7LBzvwpSf%L5Yr`x$mOmz
zz?L??wisRo@a^r+g3)!hv5h50*HNPz`<FqV)^vXwO~S$D2>0#!V3g(~eG6r1e>(@g
zFcJ)H8m+40p22!flfb|1gLE-K=>>LM(7MH{0zET}Ve2mP4_;bFvx!($wTFod3ky_o
z<eAh@FhuDEn`sEPnR<QEdO!F~Qj)c6t@IeQ+)+S9Yfq-pWdt1US<O)!8wyq^8q|lO
zzJ(nn{@~I@aUB@*_!PFx7{v(MID#mhl39eFvmTC`GJ>82xL*nGjBURK2G2VIT5od2
z{VWE;A!`mYz&<zD7mcNArwDSH(dcjy|JRxR6!i1D8fcRd>Z#%lb9*pB0WtJrfggjQ
zH&#6JGMJUwF+lYKWchO(N(4d(ZeNHT<_548g1Cggb*?7{gnxTy#v9^~L&Ip2qE&=U
zBR+Pa&r?(3INzygCy$kV!yI9qHe9rqi~|1?wCG;Mqd;1A2>l_DmWCt{z;V+9fsY2B
zHVUvC@GzLr1Isa2WN*SENc036t^?TjhttUjZFM=^+`1yI!9_5*#4#AiIt1hbxP;ks
z5JTBIv!sSbnVMNq*4vM>U>lKx(&lHFS)y-PCusWt=^8{Sv~&3hA|A0!Fhl`LK4@l}
zgux&viS(o3EQ?VIAw+k)&yG$My6nKZ%Co1?dy7^TP!a-DuL($MwEqaGYK?+yLHtxb
z3P#W(Ho#kjtYp@q_pWMQ2S#J~P^wW<VX*4=T3w4SL)`4|IAemHF?sb3{FBafHqDTI
z;Ce)&s5Q)CX!~m!mI?5z@~Ev`#H{#0Ur;zhXurdCDX8_Y7ST=P%^(2<<B5=BiN|5b
z+wQ{zIW)p)LWQ(a5QB<LLPM>9zl_xfypjxfwSoM#Vj48S{|3$bBiJH_Goe8sHA}#;
z*JFU-W5Z~vj7-m;OoC`wH%3~?SaT++u}9c)9=I>3<ME6i5G@c9!0J*vMerH9K$y*V
zxu;Yr%vkRr<Mb5mxYH;LN6?<C2O|s93s~;SG>Q;UWVQ|y(Co5s%o`7N#@pU74pNk1
zNe}c`^@8S*(~i;@l&Bfj04hc56_A8c-rXn!@!$lekJ^N4IN`X#pE&eH>e*tKmG$Zw
z%#0>vz#}doaUq$+PxP2oB5n7XB*6qA0>qA~YT9(^AJUU`*@DHbd~-L%{wTPzx6owl
zXp#UEp&#kEgV6%E{SoN1unXuLG){U7A~ftGrvXS!g5Z9H7g}q%kTVWH%Uz8R3lKf1
zl}9k)WW;H@K{oIjq-<p<oC7RcQ(*+PLR^+&R6rObR84_f2UqGLYLkNY>*DkPIMQ^K
z$rB9$Sgy66`QZq*HEo?DX!RUD)Fyl}*KC}G=ZKpAkc};>yirO$Me$9WBE1X}#3d{p
zq&lNjkC0q%l$nKU_V^NnYWGvV^@x>>Lum4%=m$)tf(Sg)nqWFW1?<<EnpACpMOfZ2
zvG|>A5`8~8PxTf6ze6gSW2tHMTmpF6zZ~L*Hd_b{vqvU7AetCB5UdZ7AwZs)Oppzv
zWOSIJH3618YW}A_3K3XZYm7u4pcn$ZfHxc^j;3C}Y#K;z@GRjJsmCVUY#7EumV_z`
zn==ZEr`8!3_~>W=Pi7tDzhnf&wu!#!)Q$!9eD-+D)``(WYlGU$8-^etN?Q#YN@{t6
zLQ9zdm2Iy0m%~5<A%N?wF!J8Or@9F&<hsDQBy*CmpN{<T>CmT%-ll(#+aDVrOMMAj
zpxXYHhel3K0SM?DU?}tyfQnmg*@kChdY$U}=3J|p`FJht=KzRr9&8pPAN0^#6J<%a
z*6>o;T#KBBY=xr`*Sr-aauJ|ZLuyA%=5Eo+$4WSUcq*IK>6Z3V-qc5<;2d@lTEapV
z0d0wQg7mK%Sw=u4;ZP}LAYI4_YPkP{ejeAxNnHEbFpYCsHJfEl7gqPUa7l5g!>;P`
zAws=0QpBqFTO3Apqc5P@M#Cv`D$Q<7x&aAKJnI3THoI3KQi5`hpu<<#B;5=+Re?vP
z7eJr`7KPC2jx0`15Nm8gz|l7yWaxbj0LJ05PxEj}z5_J<_|vDKAjDw{{r*Rt<qklO
z1l|fF7%@wd36QntqzzBlvVwh(cqm1mrraq|KwL@!v9xNgC|bfFOCmGV35+5EwF)q8
z@<TwcejuWWZYGUbI)yz2yVR=J8*^55bql}$VF7vd8H>eGX5PpV-+kJ5)lZ$)4gx&q
z3Yf31KBE;2Ez;D2_;i7$E1_6>)^6xsrwFfO2wi9<&O)C|{=vA(iyBFhb|R_AlN|?0
z`CQ*<uL7e!OX&CnG!&BWE1Hr8VPT~DqVV0p6c)nRko98T`B8kPrl!&5EH|DAv%=~s
zQ0U+SfYh6tX7MUu0|t*Ze>6A8yo)lu$d^wIZ1O`x3eYH6<D+I{ObK$5(_^hpX;UD6
zoJ!k0tC>wV1Jnf;AyG(evRGq@olR7s8pX~vDx?EJ>~))&9=gi_d&l{rann0OPFe{S
zegaUERuUjw5c}~UXpEK})Z}c#SK_F&tHJm3IA~r3Z-1)PpnSH<+oEV*o(X6TplyZ_
zQnJigdJ~JPZ$+XV=Zj!%x{q*>Ujt-qitCn6C8=5}JC%(iA!}_L*2+@heth~HTkFl$
zHK&HK>{`Hmz!pm3o5lz>&8j>gJdiHfO`6Imtub!c21P5U!5}7kW5jZgIPYW=12PjJ
zW3Qy+u@nrueH@{cRnB=BRc#;D`X5Yvu^ms$j&*t#5&_Dxg$Auv=mcU3qJH4+2sx9r
zF|;Z9NiJhbDKL&kWE1O)PGRC3o_&efqylNH(jFFR00a|slcclT(>P99heGL7Ktf0B
zSMhW-q~!$r<}ki0G~&B2XV7>!Fx>)xi(UHj9R?Z|Y*d%83o=_7o2hU<(3yhPPE()B
z;`mX{^oL~3)M;xO@x|DS%ysW9R0bcgj{_bypoIm8&J-%dFe#yU?k^+)BasY;`L1ng
zP^>Zlt;rt2vsG?#6vvm-2@AD!#32?oJ0)0J8o?s>llg>Jl8%n)$vi|XR!YgJtxH&R
z03_rZxwW#bjEo%8mdOK#4HB)Hgg;UsE;LFd{P0;K6ch)N^wS$o#}i@g0y$_9K<j8@
z6>mqeKjgPsTR3N)>mK;RJr`IV8T*LM(RmK&Cs*!t;*QYkm%y9EX&Ro6aKaP4DR#6C
zg#R=emrmo%Kj+2-#PaAgpF`FyQqy$fXXcp5gp06hBJKmN#_RYBrQ{}=^>o7zdR4Kr
zR*Kj{=MUF7Z*2mq5z&TnC*THolDvsxQp3iGcsyu!>8vzFZjxNW0OBMG2H9u^c>IO@
zleM<Yvt3OpCcT(}W%U?E>yWgUNfMj^?s4{Jx_yW-NM}*1*}kF}n7ZKzH!GO^0<txv
zX{X~r;Ovv8ajlvGZ%uM8rNM14kQT8#yH1tY1e?A|C}f`wm?YfIxhv`DAs@n%O6y_)
z%BJ=}H+~faDD?Ro=UWrOtdwGw<M}OtSs_qWc^b@<Im>t_|3IBR4C5)jVN(i`KYIGp
z)Se|FY<>BeDX~U0>()p({^TcNJWY+&1ENXFTR5Jal0qa%!fw5+6aFTN#ATYPue7IT
z1tb&J3kYJAF!Er8=a#Lkyln%il&ct~ZQl3D&%!1g7OLiE<?5ORqgQUZM`RnL5cI5d
zWtGsVH9n;^)((42s%f{=6Gk|Mk!2f9D-hV!;W2Dd0_r44<53=91KUe2C!Wd3pONcA
zIMBHiyH!FtI%%O@pyRERdq=-N7*9aobu30pD6{PpksGGz^ppTLU<WuF%Sk*n(It?a
zoL4$MQqOf$939OXM$}uu!`eL0eq^x^Y8(hXaOU%<QMRbW`Qj1_dkOxvs6@1|4HVMm
zmZ{)|c7YYqSC~6Nt_HmdTehn##LD2p$A{B|cI!GYFLd#hXUe*LuW6iU&aV7f12=8|
z+z+Fsay!LCByq07Tu`UwVv|K510hhrQb^Q^BRmKbAxdZmX}AlY24^t~2QdD$(AHoS
zpPrJpkg$63L6)RX7O{%-E05@wUOZBoN5E=L({{z1-EmF8T`PGBSX-1$A+F{(B2K9_
zjb1yX2DNO|?`uwZMIRbrI)BV(#vpj2vgVIqT2nk*#$D61R@B|@wGPRBjye>lQp`fx
z?-z)Y{OH6F>{EQj;EwER+XQl#1K1MbE{Q%S(h4ArF~B?6oGuTm19if#c`32Fq;?qc
zp&~DPbn{l8R_a`yofUnd>W~DQ4K7q`?67TdsjG(`=v*)2QJmDfjRuPn;-vg+8d1!F
zKXP~8@2R%5DzK;GWY=r-t0wVQL)tx0&=KGizyVII4eS?$pN3=aXWKntjGvI04z$)(
z{^WS@LCYc^m@dWFT+QoIY0y8qCpc@C=A>q&T4VP^VRA-2yfiKBJO&L(ASF{kXKUgl
z=<|;5`qYWf-b3WYAEpBm%5_^3k{;0pHHJ>_SN`Zyd9frYGXR|pE`MYW!<=dwk=~Z3
zXVZ~^3FX_Mdo&n+rKDq5x~7Q(6k+8iC5IFvS68ep?r6f}lx>yyI?_*&lxJ|WG~ZW2
z4Sj8JO|YMn{fJ5LiWgA7t}j=$Qu#xyRhAEVt<t}SLk!AQ80a9u7DkhjKaFN)m&+LW
z6D=2ETg%V*O|wbC?Ve*ExHqy0>FzctZzV#Z9;3S<XqU9!@kj%W;Xu+s$}u7Ag0Dqk
zXzkR~ARvh*Xm7PTJ=32BE7$;CB8I`byRSS<x20>30BbitO!ZdWhmt(d_S-Ldk>$sP
z;)pOu5?jo4{Dn!`%U61s<4z;2#jJ)5<AMCD%!%TsU=p>D?hlszvgiZX7eM?3nlgZ#
z%`}iy%jFGA`po;vCnY}94W8oMuf+64;SmKYp`NatO_NAE7)^(?QrM{K5m%Do>|v_A
z|N0d3Elmg@WCaPXJJCl4C(u`#Zh*$7OouWR#KQ!w#S9oYU^|g^!cMyr4&el=oM^j4
zAk>LGJV>*K<PMOe)WRE>4UQa>Hh1X66clQ%Qr<)1BBP6X3;-?U6Pk__V3yb<Znml=
zG4Y`|D%U5(tzTV)pgfPlPl0g~pLg6a!V`?jXfOhT`xK<rT-hFXGIybxI&{e*TQR}M
z<}stNU;ZtaS<IJnx;5!T_=DQ$V?G$Vdw&)rr4=UEy}f$D?<%#gXl_2?qx0cyx{z(u
zEqxiCje@AE9}HTl1Qqya9R05#i8=T~h{@(KCY4xPc|v6OFnLzw$AuV&;&QgeI6NQ4
zgG(vgr0f|D6d#^PI_uX-dPhnUT#Q0z#gb)Fg~mETMUM`F1|o_AH$7%vS{MRg8hDtn
zFXM^bj9@??Ki_~LH#X;9tW6CyQd$Zlj*$d$AO)_Az-b}N6)Q8R2Xg(&^(NtEr_l@S
zI=}zXC`wwIkr4_lvAk+8c$ZbkmUyl$+*I?K)hAV(dnr)~w;bF?x#W#ip%-xkI!Q<o
zBSMjZNfMq!nvho%v56z6C*%lq8fcc9M@U5+6D;JmT&<EKpmYNrx+0Yb83~B6QZwRj
z5Rb<`#=ibN4>r-9KxD{F+td5cgS`uT`Ry92Yb`0y$cY~&sZpsyj&N6>xkX9B8gpXt
zA0*2~KHaQcP#APmDK98PL^9|erf}!*#ok`oex@X3oq9xLjcfRfYS28@et1Ag&{DnT
zr-LxG*zd)5^?`fbrP6bpL2XfZLYG5E8l;%j=9J^1Xv8&QoD!Ud#s|omO)&u>gBD%L
z?ao7|!uyif-8`o<RgyItT-T1xuUxrhYcT`*j1+ymbDvnl%~*QzfaHUkCRu}nU?|jf
zBKf~M_W2h}F%RJ{%)WHz<aM*ySJm2joxF;gBqa;GMX}Iv>*Eqo9M_?h@CVin*+DsM
zy6l-O4JM+&hJm5iu(q4I$}ISeUs&13k|r-pC3~y!!7>wZBO+k}8U6B>VG+)Z6B()j
z<t!eqCbF>L92{ud7{e)kNY@^&&d9{?%eX@?YR?`JQFJcQD>@b@<GHRL4_JmklZ<j}
z*N<?-{`)w0_`y|ATv|<!Q|)NC0I4>AZVbPZF2mws!|pqqFW-`@Y+(%>9<$omkKVm}
zx2??PxgF^O<9aD{`*g(lAwY0KeonpvB#E&#N<S=OyA%@PC$emR3Pzv_4R!3~Wy<W$
z%H&0br<|Pybp!&i-f4Je{qs?L>W@+~8<TumaE2FLzHW*}P0gpfQQ>E?B*@n}x}ER(
zt4Cn-S7(t0{HGK%sSS$ZU*#AbtDynskhYpLX=6sVZCVdhVmIMdE5fKu?X)P8QJ>q~
zJ~?w@$`{&?*j>t(258D|!k({{HpVy;b!8NwJ%<J(h`j{(Oku%M_*J0JFXd4Qn-iri
z6a+zOjCag9OVcQx{^){AkBS8uCZXw&LL52qfjWj7`kAkvrz7GqPK^TKq-k0B_oFN;
zqu_-jh+A|K)_o+Nn!#EWQmAhLWSf@W`=t%Qt@C^4YaD4=$d8blh}5ws)?q|9DvM*8
zqI$Z$Fcx)1=q<r#P_2eK#?uv@Yv)iiKLW5abEsvmYy*FLZb<KnJadsSaL&Y2VS?tM
z?-jeL^Mw5RFy&DFm=+}aAAID6OfjA(D+V`4rBu#1)L2Ce5zcU3$P4<jSe!G;F*S9K
z<$-=I0mIjj!zZ4N1;}A}$buk~@MKY=Q>1m%8gGW@sd|`_Lk2IK0U{+<S)ya;6qzPk
zIBX7tWAxTUtu2nW-MYvOMkn-5;S?vbF<I(LTfsIRU_Bu$*LFZjlL^M2HC^#Ee`0CJ
z{CmQjrH0NEc>~w2%~02#Sv``LA#km@HX~N9I(PQU8kJSRv%7T7@2gB=rLC|cRF%tB
zsj%h!Qtg=wqf+(gQWNsRmMZ-XU~`j+MU4%%VBFR>PD38tE<|bJ5m+)S@0=Bg<LYW9
z!X6c;f#wXsXPSIaOs?zxbd*)B*KK3lL$i#E&V!u_k13Ooju=Y2d2vV2-HH+6whc~;
z5~4U=;&Z6$px7XMB?`@*&XhOBkL=XR@CAM{3WG!wQaIj=^d&#Xg<o{3K<^0R>!#mB
zMI28tURHTFSlz_L>&h&DY$8La1O7Mn`K*ktHqpJGLnggtxJ?C_3DdiBc_~I!)X*GU
z?CW?pZ*t#8rgl!D)vEFdDZ0MUG?Q<t;MjcNVosZMpE(n!=clOIXi?n;ew{gvTV*$x
z96@%kFJ*Mb>dSGHg$6Hr3DZu=>0}2vvKZcv_Lz+dZAhNkG?wU5(unLi_suGkyKd9s
z`ocf*cy5fp>4ar1Ay>oPQty^3wYyZQkJYH5-Hm-lpO##uw&%90EB}(l0mqE2xit-L
zK_1slGeM|TI#5Ol?tx74YC~+yhgDGkfAM4{M2)N)l?~)ed%@VsF+$~_O1oFxb)$@O
zkeJ<h*3Ihy+d!f?S~ZL1sjAT9;tEtsvU!k^=rOCk<&A|8VpNXHa{ep1FQW;9i^=Xt
z6OSuG%d~bVTPDY~In^jM$5KX)mbk-o=dZ@6RwZ|tD<+zeo0y<jwS$$Ly_ePQWwoy^
zs}<X3XVJcrBdU61CtEYkmXy=-xLlogIdc}LowwbkxKl0i+*<6p1JUQ!@`hFBs4vVb
zv{>$trM#tN1`&*+G1|rDh2*<r=>=Q%(z|Z;&U@Y6x4NZj^T7R1{BPWeZR(`+;D&z=
z<x?+t&8f8Th`KJ@)_pgnjGRyfkKW0&cNK^@QRVodoN;8FpY+%m&724FbRsvFlk0Zf
zIQ60fuan%R#Cf2%Esid3JYIBpAXX+bx&8h};n}frEk((G<>w&6JgNF7?foPAM}$-J
zk}j9g?v_zG;6+aNqA8kcu83^KWq)d!;$At0O7UNKoeZ)myqYOP_Hdfy&fw_WlqFM=
zWkfsjh8yXIp5;LYKk7e_tg#G>D->EN6ByPUx%F@uMIoZVZOGtkJ*Y-z)ss2E5HYFl
z2>lB78yUt;85g-d`qxW>VZ$kAp<o9X^St<hSQ`1$2YHlu3IfXDLS#Nt{;1k&7Zt?0
z4@LM2_fFyKr`&PsmK-|_p`r8VG4H}7u@qBY?WI{2e(uZ<G=CstLCIAC1iv9)gdj)1
zy6V2GM-5<$uuMbkv?0$|V{;W}JeP7&D64RueS*GJn#MFlmojs$JWS>0L}4xA(0!Pq
z^P+V6H=N2FmPMMY-*WrGbZcrWGMpwgpK|3fNw<h>OP|TQB~hyM^-*v%#S8i+e{j+b
z8-ya7mO<nn0!Hye07;RyHW&#+f^HdrY#?wDFGE1z1pxfrDda2OUgV5V>8ksZoY1|d
zeEe?}Ptk))W%E_T7$>nMX`Kqf*1axmCWbMdW91p*p^^|C4Ilqf0t_+_T`#^s1{5^i
zkM0izEC^Om-bBJ2_4HjJccgxc>6g*f@_q~ci5^;NN1*fORgtJx1;xo-RJ}#6OHzz%
zvY7|wI4VyUo>rrr4K#pWxWZ93&C})V%FKO~_5oSobfWp`J2JvtChrgrCMx^$DKsp?
z(<mrQn+;BLrsSw?&B-klSF>ompP$t8O!*JwiK^CxDO8DeN_`fa#RB=xVFWs<3HgK<
zqv-QtSz#(Ro@ZMA6zfd=Tuw%FmW#r+Mqi7NCoCZ-iRRwC*@X6GeohI|jrCY!_xPIT
z3M*8y`Ic>4TWvcf(`U9P({N~JhSK@{G$MJFHd~4T#YByD_5s8%^Z6lxYI)PBTBaOL
z&XdRJ&6lY_HxroQ<X?&7rHAw6>6aLd2zz=efYin^Dg*<JvO5^V7a2mnm`0g7gv=bm
z`5jEdvoA6Y=lL|8o6~S!n1=H^n1*LxWC-~*oSV~d&istw$HW5`_?Krj+I2~a)i~8`
zqYNmeK43uct6;qJRVi9`3nS&Xxi*|ppoy!Rw3@@o2^cJbAik(Ckn}|M2JV1=h%Uqr
zB@wIaB>F`*W``ysnv$+q)I~>jo3NW_J&_WxdZNVM{0VGzb91TXR-#zmF00*7M#cjU
zE_`4__i3Sg@tGNn$6kMzK`@bNMB$ZBX`Dc)c|dsJYxr2DH*Xo{+G$2{-}3riVWrn}
ze1|e~kyS+Yi(n2dk%;1Y0+B%KG#L1}$(wD-Hk9jQfVaYNrYVt;N>3F43ZD^MiFY4J
zB%;F28LXxg&vAa5i+v&%PLy1tMvV|lbbwE3`YH7z&N_WrrZ+-LWp^U;WU)VbOdYZ;
zhdm0R)VOMagP<tRCDWtdWH9+zILa{Wo3obbS31cPmKUYSCY7;6rfM2d7?Q8u=ZG}O
zF3)VA@gtEAM7H`s1m9$2^igF*Drvrg8m~5BI2$4<8r>{G5CiuYM+FazpewfK@EGZ8
zr_W^AQ{=+w!cs+F`k{mL3;$7>qtdu(c$}O0%!Cmsjb)-ETp3K%p)^HJlHe0&sFJ2d
z5pTrE5bBli4X3$G(mJ`1^Q-ijKShp_P~Oh1-37&{5>@$E!=fFia%P`Se!!RC3Sh)`
z<T*W+k%!xoc{|xZkLHBJ71YgM9640iBPNQ;4CdSdmj67R<@r=i=)LJ=h*2!!Vlb6k
z(^B+UMqmuYpmW8i%+m#FGCLPPn3KyN@=_Fa4~o3nRk<WJng!XSK`ofi9C70dIas3|
zi=3>5nRA}vB=2DnUY&L2Et)T0YWIrne9@UH9c9+ZYQXNn7!j25^|iz-N{C;uTQZ-+
zs(h7gU1Q`qG%xtbIT*z7CKmZf`QEjZ!&<nuf|Xp_MFgvEgH{)$<*BqO#>>n<Yi6C5
zbu}6(XPuSNtKUD>Q(qMBHBg<(Kplg;J#7I%b9w2!74=MI|Id@|m-NhIG#0KtlLkV{
ziy)%SIikyW0)x$aEc;b83i7pnTY#!pyvy!kB5n&PHK$K=vpB3qMeka8h}`PG`{w@2
z_kRPvv%9<dd*S`xomO|P(=Ocq-RrKm?(hHp8h<3B$P~1EYc-{5ZMu|Ww&}hXvVd?}
ze7*Pc>)pen{`-S>NAF&|d!yYFF24fr%aDjFFZ{OO_idQNddy_7<iyV|JkBCgZy|fB
zHDpiZdrl+ZgEoH3aRw^(fLU=<?QUhm8*y8@da-{x4KdpQO5J%E6kUq$C#UpIJyHgM
zJOq^zcFI`$mXYEC&9gaoS5cx(6)0M0o!cs&-e7>H`vZ4Su-IV-ij#|W8>M`1T<%-C
zU48yt;)M&rzu2AZ57@tkR|=AMn)k)x%V8GB=RsO8M1Q>5IXL(gn#oP6FFqW+!6zN{
z<n6m%_}!HN?a~K8&8>)rafq-UpbV{=dgHkL(J2A}WG~?;icxn1Oy0p#@VvscFCh|_
z##O=Ob+^i3c^f6jy!KkBx3yjYpx&b$#L`rfB9$wG_Q_31HU%Op4WNb=4a~8^5zU<a
zf=^#-S`!qJCfd<zKY#h^4N6WwPs3ph)gt#GPE(M-Rf$(`K5&ueev-`GUqCtXuWA*;
z-{+hR^JeD105H;PWoAJ60HwF9i<rE5IHwtl+*cQ~no@T19AS0<wASYVu@j|NL7tqD
ze<A=Eq42{X9}~XkQJ7U~Reh?)=Jj}V5yZ(%^~gW5#{}byNB$Li&ZMD0#lNQh2#5N#
zmQH-UzY<#g*EAIGt3Xk`R1)4W9#~22RWc2;BKOGRF{l{Eiaqrs_@A+42Y@B&v})CI
z5_@Fm*ma+2zmGe8ANTn>x?3eI{mPW@?7a5Wbk9@QW#d*{lm!|BZrYr16O1wIj;z95
z*$+pgB^hdt$|TR%LY;$_mN)T(p0cJCpOHHpR=RMivDHbWsgrzDm%~&el3yBZMAnQC
z^ZmZA-MmC?qnO02FlX9ZsB&r{sclm+lE{@pK<!~?C^VkB?7oT3<yxJrvOPzidIe?V
zMW8ATy}WlVSNLR8m`SThXn`D=PH5^O1%>{JX)K>%4P+rDBjlDzUVdt=oMQg0(xl3J
z?~IAH9vXd(2^SWeBbf8o!Ds@)eO;;n9zJ~Gr@3dGdG&HryWhI0<<ZN}*NBqL>zWH5
zE%KV)c+P#)WaSrWHN~w3=nGP#yj$WMr^YP1Si>x%9upTGUC3s{<Uvv^*%7<~tWddO
z&&^E4gWsBNyRu;vk>|8q!jiZtynrDbeJY0TvqOyUm&RGyt!z|J`>i$UV}r6;_O=m^
zgzt^~qCKEbOP=zYEFwSDCw!@fw}Ag5zy=*H#E=H3-(Ma}!@ScQAj$vADAJ(S*Dpy&
zRf`wV2-N#wVqbxWfu91Kw8Xz3zCYO8|JjgZ=<$cQZ+8z2S%&1f4@V!~?vp&DKmKKJ
z|A<PjImYm~TX@c2oB~vTlLs;t3J662u&&YG>}<9-jW_T2gwE0KZFSa-S4TS^u$ueG
z)lzR0M5;@8uf7-I`Z@7oIm;{w1%P&-X3u!?+!#11NhJ)uETQrhJZYK0ali1KzZAiG
zNhgz(``N1Q5W02_k5D54d}lRtj&}LYRZx7h|L)-EHNJ{K+rBX09lra(??7(S-x0hT
zKu|>crST%v_VM_Hu9KIBEMH5w%wu~UkHVoptK%!{!1i~4>HoUBLnPU1cY!fC3naVu
za`&+R?p6Qo&cTb<su-5+nP7{)posWZNRuGEHC3)0J{rc9Zf7%jztqVvOiu8KSRK6?
zXKn^(LwCeDVgaDIJPF5gm1t|GidF2Q@>926Q&5L)>RcH_S!;=#Bzd++-PD+EU|HrA
z_>GwZeq(-6`)Gkf+oy^MLc7>k!H>uA-3U#&uPUF$!>2eUzs6uug6o@puC{^ayuV(N
zxrFp_Se<y#RkOSe(tuybprn`HBTQHERT@}(FS_uq{6a;)clT;zkU77{(;{^?*SO|{
z=#zp2w9Un>$QB13ru+$5uuhM8V0AOVJ?!Sj&{t9u8hi-da{#YgNa^&HNlX$KKb+X-
zSwv}I!uw9A*IKub;33u}`J;jk5rQ!K6jDs$62!DJ42SM4o>JH2;IAvzPEV;z)w%6%
zBcJjj7kA|AO{3_@<Ho+oTq@iwnofNa0<mYCCrGz@b51G$6DWD)s)%;DG9}1$0peuL
zmC4aRJd;1G`HkqTYO4Dp1ta=T)EJmF7{nBN7AC_om*Fx{_%xhM!faNvFkPyTMdFGg
z)HauhYjcHuayk@aF#I*pdZZ!JwtlLy1|q;>%zcRB`MA3|yS9!}^|!=0E2JCri(+RI
zcH9sRqGBY&6ur-L5yf{0Ek@1`m0Lhul2+Q)G}5W0jqYNM89-c@ItKB0;wK>p5LPh`
z%bof|Q7o|CH7vvrp>sVeXbsnqbM|Aw*^DOVnJW&^oRrp;!*f#ywqeQS;J){hO2MN-
zZ6xLA&E9+KJU!nzIM{td6LsBTAt>TU<90}Y!fhdtx51Pm3i7fN$HRTlk&2WtcT$Tq
zD%5mSN=3>vpV&Ys`FCEYa|_Nr5h&O$*=eGzy2DbN`KhEwCx^1xj%^Uv0)Iq|0y9`k
zt*06ayc+__H=1-ygjAB|mlvg)?po7b*nvSx#|7e*KS@ziKUrI9np69+iQ_8R@<NP5
zBup4twS^8QO*O(aBUCS$2fXB_@I!IQ2Fg5B4;Ki-L4M;P*N}iU7FCqfUfqLQ`EyIj
z=GY%DEli8m28c*IT%sWD4}rGY<`>tpM+J&N7Ql_cc0mJmW}fpJI*iQkYmWGeQLfmW
zT|s{$`k)}(^jVF=S9sFG`7)?llk62<^i#hrW8t}z7KFz2`H{~1@rZx`B$GV`Cl_yA
z5yu3cxD!DYDK*0kZDBhyX1?4|c?&6KmXpvn-2#gs1tCbHxTfD@uv~)zF@+XO3|3ur
z#)m0*YW8n76_+;hbmET-H}DuIMwR>Kg`XN+2^|B*wT4bABZ(k<<y0EsD_gq8q=-A%
z<diI+^`#qmdGPCPTF7aQw9_Ja(2Yp(ncYgsl(CCfDcA_ZIL<514K`e-s*S2XSqisz
z`XZi2Rw)#3b23cmv_PYvM4#DJY!IiJoq^h)e~d&U5SJU4r6J0$zz)g95nw5CH4sUV
zWI1Tpt?JP)NgSP5N!w!@>el>*J2z;!k5{!MpMqiESg2*<%8#L&mLWB6TC>EZ<eidt
zAVv!b%eMa)D|BUQ16i;T&MtUjx4H!^XR9wvD(Ed$Wj_-%`(uevi+!k8JS=I0*t8z4
zOC_H?#!fg`9<PR?+p{RiA7=9}E4m`A-X@aY%pPC+z4b@U<7Ulmy|Eyxmr*lSj9J!R
zBynN=?HhJosC)g+v3}<k12-z)towi7s{eo99)M@J0^r&00eEsN0G=!aVD9Sa^J(Gy
zvmNq_opS=N@d&R~HhwYFu)MLRKhg4@RG8*#3MN-vl>B||8mn8?_Atn^X>G26H6edd
z{k`<>%C5lBTJ9CLD_2lf0wHQ}1Li}P-xp3CMf_Q&Ek8TfkCH1LJB%?Ao|>`=&p5Ac
zEZxNRU9{1;6G;AfH_be|n`WNeO*0RFbsvuJtReT|+wImoxaN}~N9b7SQ1@do9b2wN
zi>j7)wDaMbG<egxom=(%&)ZdhcDw3NZdX0JP34}~xlQ#mOXc~*2Qs3K^puy9=CgDy
zqT?#wi)+%`4XSl++TTBKT=UtDYd*Pg%^z-9ueJH#H>`PT)|*d9D#w^fN2d2!(V^^G
z6s6Vk(9i9fly!^ho!j>R&s(?f?A9$jscOO0%~hV9W%cr*2%P`@5A)HndFFvf-tA7O
zSF@L5S({3=y6wtRWQF8X8?Cj9Qfw079-*;Xwei_jtto0*58(2s_#%$-TVhw{9NDaV
zX*=wzoi}fm@!X|K`|plk?;i9mU0vtg&1e%UHm`9`=GYE#t%qi2(T|Nqb|FGUeyGZA
zE<T6AYVs7KySO+vJHLW{=-X{92a{f>t=B0YkIx;4ID`={o6An2@`K_V6fT>eaubv-
z?*(P;^<=_}%a4@~mk1NNkQ#J1&!^IwTQ$!KLy2k{<tXppIfcqL{`-d(3=|CND=RCx
zBb||H!nS+y)#%ku0~RG)8niJP^PHRL(EY~dSAl=$38rqbIag2sBA-lk=QLY5b@}E-
zfiqO$W@NKvK+)RQ8u3peIoiy*BgkRXsC^;a0<AYKSqk(^(bMCaWhqd$A}(C<-nKWA
zGivo|vIqf~Uf9qp&TY-n%0t-BvU?A1SI|L$pB%#@!3yykX9YKlRP$hR7?2GRBgPJ@
z0g^=}?-j>zi_0(a#K9PgemY1n4Z9t+lZ%-(>i`|zg{8%o`BM=-GYKn)4{dr-_X#%c
zL5(Wt)Gf(&(5iAvS<e>p(b!{izSLOA408=!R~vH~LTk{{9YeYR?_`oC%+CSVj(b)0
zD~}EI$ZO0&RfH5lS$iMWECAMy{Aumh@GZdnyo?oduwG73@nuIN)~|gGzXZYMOTTIv
z9)8$=x$|p@X}^6Z9-Dj9(TCkbeqK;bc3<wxH>P%S^!mercwzeezdG3C$0qe1?i_tM
z;1?TCHN!pTNYGRKXHffiEC%T@+#l)b9DaQqvbSCy$SxZYBWyqu$1RFn!@Np1jY`y5
z+Lck3Ur<37Yq}eGNp+`GP0W{=A2}a6{uRCjekDF@<+j9ah{F4@=*D;jaNy~Q;m0VF
zE-dA!DCuqqPsK$=(7K5SRLeRW3fPzMHY`n|eO}Vc3!`E18KC%~Jr53QxdkgVfd6kU
z?ZvnV42v5h;G}V#^0fA=HvVdZ$TB>{2s61of!>BK9qoSjnhdH6^@^JaaPlcu45pe3
zNMv^#Qv4Kk=5jPc&6k~7^nBa(A-diVe6J?J#!Ehm6eE+7ShgGUo>t*X-ptc>6sU%C
zW{6@rce19|Dd4y18jk9X8`iEEo8>IU99r%uzi4!M$?JkxbjEMoyn%{gTF)!Zf$C|%
z77bM|dtF%dx;GrI-ozZ5?VnAffz6@T960B~S~O%XbzMlgmUj`38#k-E%<x!^=Qzjt
zLzSt<77bRGyDrSKo_BQ-H*Q+FXh?jD%FEieCGLw{6(jf>3>hPSG?X35JUsogcv=x&
zdqvj?MR@Fj_sji;8Ik#7KMV&{`R2v_XuLU+Kk39D1Qw^EeS&0OIBs?o(tU@uK|CJE
zktO2tB8<?9rIz?fP;=(p&XxCuDHqj`a+UlY)RsBgc>jKwYHw>YZoHfm$y8#jd8#U6
za|`yoQhL-PgoGix1DKKKs#}nUmZY&8b+=~As^y3@>n54@?#cAeNTzp95v^*9$PKKY
zC!-jzuogfRC-=EOe9sv*Wr9WZ1Qp#O-naof0BCP`QSERwT0Na+S&(RgA!jBU`<H=0
zg}8|T<In4=wY<E@hF@<SYki^NSp9P5FLKLz)}k?0D;@&hxPDs&-k^=3WY9spR+~W%
zF9Coz!Ka`)A<x){DNiWz4kqv9^qH8&FdEA1!7nh&DKtp;VgA)z1;4>^je^<OkGP4M
zi<uK>0bT&il*d0#xzPj&uTUM@OoAv2=~9N;WfTuCn=XBPKj-W_AC{Ll&@9$3VoP3(
z0-v@_E+VElNW$0}{ymP92=lWR)w3v$%jX#Yn<#9mWKnp2k(KjMX<C#3phGG$|M0Mj
zYCFFSdE~-qxW`UvMg#byv7pc6niwK1g}kbGR)tJ^O0;W5Lli?c^V^Kds(U69=CksB
z-2k!N(LrPdlI{h<2SJ?bF5|UO<(FU&DzmsLEI!EAT^P!Y_}Ct`D?AP={1Jq!O68$-
z6{7p%QrzLfcxwA7jOt!>5~ySCy&8)COpZr?X7$HVz?mbz_P|M{&~9Gqi_38<V!<#$
z%V!(uVcOk+c)ihdw@j(+RC|jD6ciq5NGw``cGF!gq)`}ZuU9vq{cfjm-8mA#+h#?)
z^8BV8qIa5q9pqn!OOO^w59f(L1|$!1&5d`m5*wM0$3gNoj<O3S9B9u_Jos%28`N)8
zko)}UIY@+>RG>Qo<&~C?!q@673dProQbxDs`m?O*yq<?6Gg|U+nC256vjyoTUncXY
zSeU!Vgjq9azl6|hM(XF#)t9nxi+G2-4!s|nxUY`9x6Ra|@O!<^(!|ZIgmMSp1)a;g
zBHFEcivL0s-*nrp0@dG>_*@bv(z`ZsAJY^tm5(T~zL<!Q_oRK#%>TTUek+b%P4tqp
zckVg+m*ec6d(OTby~`V#mZ0!*x^aW#%a`ZX<r-)M3hQzqbm)f?bBY#jbN25S#{ItV
zr&uTC^hY<x-u*)13u%{KE#J~|(Qec;f+Ut(N_V@QDwov#vikQeE2?@Y>N2+U6dlO!
z_l|F6@A!sk_Rg(6l6<9h(7o3VzMOW@y{&feEmJOsFNjMm=M%3Cj=8tW-!t7m9qBI3
zf|sUZ$$QuCdGD9wy=(uWyjR>ueSK*`R<v;4dosNhna;uNy=Heu^nTMbBV%rA4PzOM
zX2t_KXZOcR_sii=zZ|}(y}h(($dp)GIUVDvoa1{_{Qa8x25s_kVSQQK{OwoPz1jZX
zWVXLwf?r`<yO|w-&eYr+^uOgD=>Gz0z5_eyz2<&T)c+2muApiwA<x_DMMNjYSOTgP
z&UGTE+r<9y`D`#A|KoG8mAr-T>-fSO23&dsz(j35ns1Z_^ZF^8X|2r{X(VsLBowXb
zB0(4fcQFPo#NgJp<(A)hcQfL`*ZW^`+1oKuv2EU{^<|jLt(eRmFq`WMm3J>#&J`|A
zX7nYP(j4ZrB$JxMiR@P%-h_4CjD_8fmC23Q5;kP!de|qZ=jVCAGSwR#zV)8JeDwyH
z&Ck<t7`vbR$UTVDbULn8M^$Ro@N3;tcZte~1{opAL#g3oz3!3`-m1xRgmxB0LklA1
z<+W5G#b9OYB{6d|k5=UZt<D2#&9BNmy^WKAd!v7Cxlm^miM&?6qRc-JqRcO4Ji@<O
zFdD^IM%JT+*X=5tl(9J&O<^}32iZkDtcVoESZj=lv|+9K67G2yaC7=r%#2W#!Bu8%
zjp8O<&h;==DFiC-iR4QMX+=tqJ?@3pr+hX?I#ktgSfVZ-^C>WBm_;OB;iYggQ6Vm4
zd%!Q2H;OL0Vh&GmZDa##_Uj-a+y*$u?r8vgT%?wm#Gqx?mLm-VnySoWS>glfWZ|bU
zo7w3DO5u%z_S9p`Tq4Ni0&C1zNviQ6i7OhPMsca}VVss5Pe>T+R?j?-0k2tViY`59
zys@wX3`JFdo|mYA<5X1;Fbm?781GuDzE*U935>T|Hk@luOI%!`z!OQySarm;V^}UK
zD$cK@(sdH+uE_5&^Ak$Vkj7^PZi3mMDR)UcJ-?_Gl2G$nxbTx<b%svv*~1>nkm5R9
zRC9hMk&t2Jht^<z*hj<B$mg^ZVOC&=#Whk&d4SD&qKz^j@#$|sER6-#E34U<nY@U7
z036Uxf*|L_gNq~vS-~>i(~&>8EL|u{LpMgsZT%cjUIuHz4@$LSHggt;$L%F=%FJPH
zioQH-VgAs^;pbqu90Kg?@SDT|k6NGpe*0^V-`>;>P(YNg!6?Sel}H}QUwQ=85~%2W
zwYBi2@nFLO0b0(1Jv|%E$=dS@-&dri;!6`@8xS`pR?B%ZqoX)vDB{--M{oV;9qB}A
zU3OXA_vm%IBoOfPPDv=>=iT{o0Rm=r?}>gImL&2~465GXf{AASMa&gih)n~rYab=e
zWB&T59-HpkyxWEU7R>b0USFmk>i02UGi<ORuT0bOeb;z>dlF2(;$U;~!hRRh*UB)C
zYMDEWr<{sy6n_fb^n&hQi_bv2`0I*PFQU2XwWWiJQ1HA{Iv*>QSkO1t`s>OPS#D$^
z^f{P*JKLSR6qm!*+Zo>z0o>tX>e&$^`!jAF;O^}jVnGAI^j&2YAc*l+=J_j<Mz1>d
zuq9ZEI?(vYTPd;g=_m^)qX79jZttK}SaIl2vzYlEw*NNBd@CxE<ok8doBhEkMU!cY
zsy1arqjvD9-FEkE5}t>VKcW+UOoSuL+Am5Gr8s9C!t)YO@a=ZI%ce`Ig^ey`QenHP
zPW5qoi5cZSm6Hkv;|V4rN1Zw!mIVN5@5UR5R6!+kvdOxf*toQpsj=WdD%!CR<&%y~
z7>?aEd4}bly7f7C#$ZFC-Fj)YaO;ElbX|ie;<pO-`kdydm^+^^zDs$R`5as=>RB*?
zbUK0kORWdIJD8}w;YsqZY~8vpuuCmd{|+?Fs-sFZnXkQC@olZ?vQY#U`|p1gni0&P
z+=6(4mBrUm{rv9eyvusAcT0k-dO0grx0D8}UfB_VQ`aE8Z3iV&b09(rU<Ze}@{{ul
z;~pAXhX@R6>&2|`W=2n0w1x>zqaYZ<_Kif!)?AfovtZBE*(FiKBLv1mz<qp<QwSfn
z9O!ruLsi`;wsWoAK&~uY^%dF@@HC9?I2z;rdm7M9*5O$g3|H)&tm$g79JfC5@8kCN
zN9$n^a*QbRETgoa4WURZZelVvRkM%)p>M^9T%u6Yg6(|L7w-0XUq*@i{w>Q~5=AW4
zt{CXGMUe+ASCNJ?o#6G6LpO^7%Ve&m1f6PXadUz<XK|%K^DwPH1flj}+CX8Zp1b#`
zB(w`|ueVRo&FV6x=)-SV(356!v4gk3GIAmi%cJvP*rYU`bexpIz(*lUmz-T#pz;hf
z*i+E(%4Zlp8R`Kr>nnr>UgK9!0A^dBvM7{^Pk$3xeseoh)x~x+L!xaRDbAdt`6al8
ztjoxa(r}DdWrW!buNeUxjAn?_Fbc@dhE(lmP!6TULUp8h|D5hw4L(njAjKn-)G|B%
za46txx+JpN@-egMr0yzkf1vN8ybXieIUqMJ8E%6Q^z+x$hW36gautWKq|;jcVG7{E
z`oKe$x=Gy(u=?F-&J`&vXUx@NlK>Fw6}QR#-MzX5+-fQ=ZBDy;*V~sq<L+65v8{fl
zG!>>HTD|176;8GBdv{MVek6903Y&g67AP@T^)uidKk+)D6*W_}I>80+2!saZ%2=`H
zgjSm}igNOYwICpf%Ixl`*ZX@ttyZ1xAcVepb0CK*MuBC|a|_kV?IIH7F@NX!?Gp}d
zx0%{5A*dFT`oU)#*Ig(pEs&Q4gISt5uO&Dw6rL;sRA<hmnRg&W-9V7KfiShSK((Y$
zHBYdz3Rl7B>P^}zV>R{byXVVV%gS3z$z03IU3VvY>GId_f7E~fKKX+buN9APv%do=
z?6#8FGSb+R64@7!$`(jw*OAU{BcWYWN?T4+y8~%$X^HK6QritAw=X2UT}y&vDem{y
z9{}s`?LQhdxyo)T%gvGJ7MsGXa@{p#yK4FF2HWTWX+W00TshA!>s2`~@1?r9*Q^ls
zzJ$PcEun7-!EZU?Zz%zADItxjN-40p@S2|a08~hd*OeBV%iR`KDKsX*a5@O?(yDe{
z^1e5%eSOm!&-#+)FL~Kf^WMyMZ)UqUv)!B7{x31JU2~thrm5}T)^<}{n;~X>9b?-9
z@yKFNyO)suBP1kc8xwN&y{vREE8WXV_p;KxtaL9c-OEabtQ1ePK3@qf8%(E@NnB0^
zdvnq03rI!RlvNBN>giLr_2s0fKbcr`FSy(bF86}Vz2Ndq2`=}(Qg<(t+(@<vWHOL?
zDPXJVYQg-3p&K;u9?OK$dEU%TrIr2^6Pyrj-wQ7Hg3G<&axb{t3oiG9%eN!A+<`4y
zWWQ=E1Qx8?1na$sbhjeXV)M)OYZZl{Y&s!H$DTn|WVeaO!4a0LQ|YBhR@E^H_bf~(
z+hM)kbZckCsRGPq7tCr!_ozV}VHkbAqm@iA;;TZz>>^C4Tvu-qM7F`4v~aXbDiA$_
zij&>RXVrBzR+YEF;5J=C(7YV4c@+Y@X@%QL!Z}8fKGm=5(m-+41$r1xaf5+vqEED$
z_Rqsl0cI!t*EA4GLnu<$N+?>Ssg*=1e;CsTr;?xu@cxiLW+thK5~YAqQN{jzR(@U(
zt}Q%{1=*)04nqlGOdOXD{0(=ua)>kR`cRzreqEw%*h+egNgTDA;;q19q3CV1jEJ5Z
z^Yeb>v*a-@8wLj|)hU)&Y^z(nNHj`l)50n?GF~>BG37<gYZtcY<5IiLQdh(Bqgf%<
zXmwHwoLfpV9Yhzn=7)1~#^k+ps&iHRXA+{GF-1dDkwY+ppoD0k6miZJOe9jX<X0&y
zbD3bJ7+%g8tuIKs&8aLY2kr{x%M#iDFq26z3dTW{rQ7bqA;>=$@pLpqjrZY@RW76c
z-2C21%Ch7!Cs#>OyWy`i0{H{s{%E=EfnvWF-S$8ojr|FyFX0}sOW1T_H|>60g52{g
zQHyB3Tanc1i;;WDj8I6fbW4)AlWNzR<L6ILgNn!sPYBY&GX%4kM-_pqOpv)Vy7Ff!
z4Zt?_!M_&jkplg=Wfa<emkh(mPbw4t_*IF)#GaLdhKWw~);xdCJeUQWuF+0$*$}sa
zRYI9}>?nH2Mdqh3Iu8~i3f8}=c#-izD6itt5;1gQH2@P4b@@TnyzIx>-gv^Kr;(5b
zdG@s-zazj$UmN95?h56juZ{92w*p*b|4aN~P}dg2Jk?;weeS++U%Ic%U4N&PHu`xf
z$@Gg-GMSg9bX>3Ia}L@&30~YW>5I41<Pmt!<(C)o%S-v?)yHaSShNDvE1FqU^cB*J
z=xI^emoP)3gGEK3<H}bcR3sqp+%N<AA*Oz-%0P~7P;R(+k*1SG36N+=XjG;-r>^ev
zoNJTTt+3ow&B?;~&^du6LtgbfV9OWwYy(=mwTCH|8qtZ-_Z2zNmzf9a98}?dKJIz_
ztL{9}iie}YWa&K}VoQolWjaZ#R*+W0x`aNEnWait&~>pe-v#ESPXO_llGo{*K~<oy
zAI-E}rFbGJuBV`rhk(<yrE{Wsec4rIt^zXCP(r&@Pm4Og0v|x;IX~+QkEB*WX2sNO
zlrql8DF?m);OFSwcHM`GySn-eK2{dC2l6$Df<a?p!D^0`cm1W=*4OJ#RG}o_oh8$?
znya9!hlUltf$v9t6lAtl@pkv%#fO7m$pY+kTixJ?4k%C^Z>_tv5v-dt^7q~S4~Osx
zW!JpT^(`p7)^yjsR<FHTEW5jNaP*qX_Pni)by>E%vDscL7Jj>PfbC-8b#JZHW*`8b
zt&L8x?En1me(z}afQ;ZCg0RtqryE{-ZL1S(m}L)ljy@dh3n11vH=*=80o+;NESCLn
zutTGRvYSvA0q!9pdcEFOvF!ft`=by0y9`6Cv&QWL(l*xCi)Ae=XAD!)goQZ_r#6N_
zB!Fe0efp4Rkgx_X!x3G7mD+1@n@~@D5w*ra79`7tO{CN0%pU}O=*D)rLw+PWjlxgR
ztUq$OsE@uR@M{p0fj@KI`nc;}p0BpubhT4n{y*bR;;nCVTdm#IcDrh?``LY@q2#eR
zLK6dgq>p>vQCK{UhIL*B9?_;(7$;wBy5()Q<}_n8Ak4US`Yvy9(S@I0uoke$CbSpr
zyg@noR%W5&D!b6fuWtv{c&i*+X|#V1W2Uk(N~ol%QT)~{j`E3ac$Ciy_Qz5`#U>>&
z9k-XQRmY-*UZJ5P-N9l!gY6<i7c4xsOZ!QX#-mTc5YyMgOxtPkjeiQl9v#@`iJTXc
zW3@OX#y7%tt30r-Z=aOS(dTW6wE_i%>;gVY7tR1T9Rx5_Lvc8}@*#gz@aUTOGgR_n
zW>DX!Z2x#jyYil&!;JFt6}vxxMyEQ2NT>R5PlKsxjKwPgFpuJ@n`|#xtBxu0tC}e(
zWaCLT<3Le)wWB}k`;)LprBqO+z*bk2zKY`-=kc9uDW=K*RSP3!^8C9j^x+kE83N<s
zvlk!;i*8p|R$zyBhjEZ%;&u{@1*zaYkmNZ8)H(%eTf*+9GthuOdr-A7P;nwW7zKWX
z>GK7>y4KZ6wPBprY&RUOd3io<?zv9QH*9@YUNeDioTI>Uv(of*6j&}-!nEp!)T?)m
zeoj`D48x=>bY#iQrtrO_vX!ZVG@}?I4UvQhsg)Up1*P-Qs-d=BU<5Qmf=jy%lpJj}
z9n1t4UZd(aOFj73M{mV?<G8R(k72ohK8+OrdEg1})Jk(zjerC73<g$X0g$R|9Ayqh
z!%7M$?8|~61ObQ%2X=ZH%*yzxpdN#QEHhB1BK3+oD!tOCAk>}dzWyYLVZk);*v*-!
zo;w~FRO7)HCQxHoZ|%&=;aw(89Vg6va?v7D15wb2ZNFdR!K>Q%6vU$M{<HpY^XRUv
zw!OBu{uqBeKG@xP`F8g%`)I-6`uZAvwl{h${geJW-QIWY&PIE^)7@xyyWh3iYa6ZJ
zcW&!zAYcl5TH?Cj1=)ok%|q0J_hKyS^P8G~z8fTPLE?1Z&$0{LwzJ_VJSE}69mm5d
ztYZI@AA*!QB14`i*7epL^qR&f2N}hi1fRkf6jRiU(L)$dpG9$W3_v3RdaHN6uIJ#=
zgL?3)<B|Pfqe<Sp@bZWMw6*x>SpUO#@c3@~!1b`P(W_klxLoq}zk%z&x3T`6+q+-?
z|EBpTl_E*AufhL&-SzcWf&Z^}Tb+CU|26(jPH?VIPTbYiRaZo-@o9~?@0>zBo-X<4
zIG*QjgT@z6(lFgN8gcz3z)O&5J4k2a(|8mP#O+9@Xqv=5fhE_bvY$G_YLa@?GH*ow
z6!wy2d)wW`IdNZ2lQDcep&9xq%|PIXGH2d2ea7JMeX*+6b3aLD?k|3l`d99gQ~dSQ
zgtjLyPR^e-t(A61q5GUJ2uv?$&=>5DLG;r(2#q6e5Ra>BEd<b6E&MsoPNd@vw`L#l
zW<gtB7&RMn5Gc^+y1#_k1?=0t(R!18#<>}H054Ai7mXr58Wm4xZa560j7-C@D?3=&
zfGwlAJW(&q@Hy`0cu_Qn>2FzXcoE};$yw@@hI)iIpb6=MgOE~EIQ2e6fF)myCVHBt
z9PlOrmw3>QBrZmdiZ28@JUQ8AD#wQ>CqlD3IRUinp&28UO{EU%!OE7=gu>i7lyw~0
zjN?4Vm@w8taIp-Mz(@0<0vy1TGk~~143PBM9&++ZS#{i<_j@OO2U~z~`6Iwz1a-M;
zGBxZc*t>%JdH^u$aQV?l^Pp8k*2zg2Wny%4sE$K-MimS@+)NOq(}aTOMl&)R$h+kf
z3HlMgAmk$%ypX`bAhBT!&F>Z&1q}!WL4mVGq$ei?4@@Fsq=^@W4ldlWe@WC4jGe$w
zX9xk*9nw@^p-U>@e<#Oo_(?R5xaG^;5&B_}4iZ??c*^UPrU;riQq)#lK@y)Dm8CGJ
zXd6qng(~{&*)x`XNuCbJ#AXQ>@@>V1kRGs=;(@DtW*)Z6r|O{9*^jee+ue`HK?JRX
zPEEd<tM1W-B%PBJ>JUIiE)%(rw1GWx>oDi^<WWP_!w|0Ubc!*6qB2_CPfnWZCqab|
zf^6Vn@Gu*k^`<4m(YjEN8lLJ)f9_uRFmaD)X+NU5eZ-3!+EC%HF$d`yfZ@naP6Uit
zlFx>S@^hzEDkmy;CGc#ZU^MbH?qUon#(AG#VDKc`Ic=ngG{^)@bDZ+A0k@CDjZOs-
zW+5L*y+|xb!75H($5&L4s=34P>?}xtgZ}lTkE@;98RNb7!ytnV2sTH30huVfnBv}p
zD}pq)l&<WinAadh-xOMMI+?NymBJt+A$J0XeGV@L9?{6dgm61S3cB!91_}*Fm|-0n
zF1M>)3W|+$>rd2!ZMXdlw*{DLJgIqv^JK0!F*>QSn!6F~4Wl?ZhgY%QHN|QbM)ZWJ
zt42?2&s0$@G^^}V&oz~+F_agaQevF=E1}(Y<>9i}xL^<Tp=rM8lu?IaP(-+M(670%
z5%vv6DdjcZc;ON5XPRpMnORmy*dd!G#YDsA`6IG9QLY2!5S6yF<o+Vn{-z5HU)}{O
z`2cJi%F4{EO+ba6u;1rZm<CO`?sO>haVu}L%b?8v3_G^GF@A7?Ny2!)j4v^udmM@@
z_-JzyiN!)1q1IS_<NSv9G;dA1f{Ev%?WgXR_7r<kW><KWGkFZL#zA1eG#Y&z!aWfm
zH;k%OQr=^)JyB5U&ln=@2|~lG#+(c_NyOgC4;`pz4C2|4tt=r^2`rpY5N~)6j0p&>
zt|qET7L6a>i})(|gb~&uN6-sfk+An*b5}495(!0fNH|DKqW21hg)9#}1en+W8fbiG
z$b8Tt-t~!Fa}o+655+#6lKjbJL=z@1l*ymv0W%-vnffrmVEA|{PB%(rY57y>^Tdxp
zvPs7vN7qW7L2nupD>Q9{=WG|6`Xgs5j`Kbt*B0cS1J@tm2_bGKfel$GZ4n>I_vDgf
zb<ID=!Pw3$MEN<)YP3qvrX!N-7#P`m7@5l5L<8I(!Ro7r9teMFm`z2AE8qk{VQ;>o
z`=5s~%<sULyJ_&*A0WeoVv+@2M)6hT02>wEtfF8?f+2v~@LWywBC*TGyT%2`I%%+Y
z)wb?BW|^*021SHzw+rlk?~JaizCz!g94m&T0$LNvDUbLdl(>8aD91=BwT}zIIj#}u
zm?Z@@br>q%bs`-UA`#?*sHXvn5GX)VjGH!b<C7B|B2npSA>t>0l{;Ay*u}TGb3q#@
z`K55tlS+v}w=B9jOHt%&{}au$PzzN%b<&z<yv5{epyA@tIkP2{38i`xM$l<E{Lu-G
z4U+EQzM@zt_7X)D3P;0frWv~BE-9kQ848E8Y0OCBC0&Ds5(<mfQTxE1s8-55-o&!w
zrT>~DH#CKN^{~9}P%|DEU?S0<FzuG0>E0zYM~OcO@F>8okK+_s{QzA#kQ=zrc9u8D
z#if7xw!4#IiVKm$CJAuSTn01XliWiMXh3c_B`RR8mi==xA$zI0XARVKe-24*hq|Jg
zvqNO~yg(}~qSW!#j?ngoJeiFq6lNWXJcF^X9ccOaY?aA=1e@}7g5s*7W90n+7KERT
zs7HjER}*D$6Lw@lt9&$BBp-=+8HWBCDRmGg13bJzu=^mM^aWNI%1PEqm#vz*sOUo@
zOw@D=J?bqjO}CwAg`&k)m#I`2o|olfj<bWrL&gc=@hzoZ7MF%W8YU=@&?X}dBt<(E
z8$}$F^dq!=1fRo{xCiI~egb>qbmSX0)wzZNVb7B9f6{&<YDG{3^src1R!$!muv>t1
zI!zW&yzUCZPuK}Wrvq-!oN#RYrtCoTNpO{Sx3J`$k!2~2q|PQrUVFC9U80)+f&=>?
zD?%`v$dL`(X0Aw*`x4DDNE4qzkuOV3zdkSIU`8av<a1o2pQa=!u`F=sR?m1*AnX0e
z!a3zP1D!t?%TZicj;X>5lMA>rcMResj)w7&DgNcbNM*J!6x>ImgydO5E;r0nTwGey
zEW<_Bg%iL@6*~eM92Gf6g6>4?aSD%yL3ny)V{+@Y68CAA7h^+|WxUlac$6gswre)@
z%QEx&QL2)T`+QdP#f?Z|D+~OXSf%rlRa{Pz>%PK+l+XT{Qr^JS44Ki4s;1zWHU-;6
zRL%g#-Du*O`#mSSV@dJ2jCi2M7i8ZLQ#{$Jvcei0tnEOcB+H_}hy-j(kGiqMR_;{F
zjIUtlt0;*}wNRSXB@qoO;G+S-#AR1#7S$(&#Z4N@BWUbVZlZuWA}g#uTI>!K>foHD
zOq2psw8=^1d!LL<R}DJ?o|GY7iVp$;(5ANX1a#>zdbZL8?gMPNO*-}yJ|cNm6r83J
zae6ZBkz@0=&|Vr6j(UTR<gWZA0@9Np=Qg5_`v?WA86FLtKcXOC#;M4cCv2TauJi)w
zckIs)M{I>eOGgUZAMTI3ZZt#2Y-os?vW#K*5Mh>0Qd5JA0FV?<Gd8Jek-mU(z*;y7
z81s0fuq(0(7*kJDkKlj|czKRaMPQmqr8eTDlHWgFOwVSM1rmLs!*`ArK#~wvE#xWW
zKN35{iX&R23<^%2YB%-ME5I~m;-hqal*TU&&m)#dP6I-=G98a*m}f0;s%TdZqNCwM
z2uH!t(A~5X0L&_(9}{2K*l@(!{+LWC{weI)tTD^QS2%}u)mi2TIu%mo!qiDGP;f%{
zF5sUT3-MxqC%y%Q;ZH{yekJ-U9`Q6-;X}ek8~Fec8lWY6KwM%k5`sO<-`M{xPLTLu
z`~dIjz^8PvbaE&>qX#&7SC~SPIQ<}lDa^G3zj(rn8UbpXy7urWOdkn>5EfL^F%}bU
zQM{Ux(=ba=R*>i9<+C*NjDanGssTO%6P7d~pr~i5Gfe?<UfWlJRIkFcN|crHw(+nm
zm!3_d%UMCNgk5biGsH+;*9gwkxt#6|El;{0a8_7x5+L?Uv@#V=&df06W-(6K(yJxG
zXrZ~<7<kV#%|LR8qTjo}xBf71menFQ3LX4JNMalp`aSbMA!P;qF=8-}ZOTWC;kaZ-
zE1!SZz{J=m!Z9s2W2$hHJhMZgCD9wIMRo(D0zLNBtVn5#9@kVpFD#BpNVyN3cYa>P
zTD!(fAeoK=UhcSN*ci>6hxB`V#mA{`Kb=P8do4U5(0fOmEe{<IWM`$`m)_P?J{`nK
z(4f}v+$;ISOo7w^u^f=q3aRf$2Y2U!VJVlcuWX(a(&P=C+fX`iwK#?#u51n}`81Y$
z)b9^@X#Gc;2Loezf^ik-?m_F)QAhdO+lJ@pCzZSxo9t71SfJ!fu|@0<@t6#PGCmWY
z0c=c6I2kA&xFTY&0XzV@K4)`EtO!u9J!$nv$7|9;GEO=SP^XI1$TLokBjgiJ!X<A6
zxVs+&%z~i}dALqG-Ho;z$2rv6@XO9Mg3?GO797~Xn$#8<eGb|ja|!=2W_}nF`JRTu
zVPIv5wgd#?Oel;lkt=T8(u($iNtp9Fn22(olT^iEit(0#d=<xKrcKeXK+=5@D8e|g
z@kDa8FIslE(dT|rhlY&`lIiOkLFx|;`%rF|u~2~UXc7Jxa<Q=$cZ9wlXqk5b+L14o
zmxE)-cT=(kCm}h<;2K5QSsaM*;V(|@JKpk{4WLxf#FH&@H*rYhrEVw$D!uSYG^SpF
z1AsE>N`xtm#COk=n2mk<?08O{)`KbV78V5tJ;-$QPKDcyP+K{FC;PulBk{{>Zt^(Z
zOfx*aN~U3E78G|fi2|4v6eI}D3!18ORLcXV?qd$}l;75=XkCAY;l<h!I&prIFOVnG
zf~Rq)o1kdDP9`JRhUhoxIXwR|WqfY%AVDjOCqMw7f)Pns!n3T2JHa53$YA$}e@(+g
zxDBzmEQtg9aA@E}V%&nsTG5fNbXAo+`&@G|PBe)zIr7l-lW&M~)=8X_`opX-b^|{R
zf%S+Md3+JO#Y252Kj|L=WZ;;Rt78+Y)o~av!Z0NU!pEvC6iYi0Z>;$1%xG38n4Ks@
zSCywOM;P)?*z9Y#l1>9OnBXDad96{XqB~lMTF(kaJYOVHev<z-&cE`<#sQOIqvJBt
zNM|<GR4oIf!e%EP0N5zt<PTsB+wPh&*9Bu}BOIu09PvWp!x#yX&(nsKt`|KCkL1A*
z2KG)dy3`S;0mQsvqSdU(XbbjPD(*NSEQ<c=q)E0WYduO~Umvh*jKwd8L<jb36b!+4
zt}gIsY63gUY8rrENuG7W6G-|?Hc2u6*EGPTQt{B~tkQ5(mSHY~*<;pKCVq%<pUAV6
z&9WYN=bmQFY~-$)AQmW94o8X`8`+rS3A2D8qP31(|2!f#P*8KQ37v`ln6qkN<kKu(
z<+^C~OmKne>Y|bvX%ubr4|Fi{Mfy7?A&Q5@1oSCmky>hlye_ZeWSFvF8R@SMcT4j{
zGtQL74ItA2@cCVN|K*}-c@Or<*F@hfPlMvQ3@$;_8V|%wt}JTb5UfRdRw^;nT=<e|
zkROA(hO&2pbP7ltTsoo5&n6{G@;@WFTAqbuFiE)goQ3C8c#H-e;i$=ezR;yp5W!9Z
z1Wy76Opj?t`jMPLA1IljaS81MzB|oAwEj3M$QVu4g0dCYCu0Rl$--cTlXZ!aMteyd
z3APLr`#<R$h|jd<;?Yz>1!LhGNoFF&IDt=#Rx`S2%1Mc3rUjmv+L&fjwER?EA>cSK
z1r6>l5_cU(Sc9B@@*fCJE{Qf$uh1!2*+Y0jq|c9^yRgC<mkz<M`_?!*(G5>UM{&A)
zgjd&(4(e4h+gMXRH*JB?qOwd0>1#kot7)va>(K59kkVqCdt@fjU^^}~19=N4mhHJG
zo`v=fkQc&+V{35|r^RJ@9%R*ro@i}rTda@zp+{cEusaru2(UZ^L6fiYQ*(5qN;6zb
zfaY3OoI8|xhki25iAA5Ss#EB@Lu-ZCbJ^#)<ndgI5}SQj_n?>ih_I86!b{EWsKhR^
z#RA)@4ROiiH7y!0(3MZ`wowpGj%z-y_f!05Q2ThSm*wLbc$b$BN$?G^^8~M~sq5!f
z4RM~+YGUph=aoqIUouAy;$hG<);w(UadZxhDnZl47(-ZwO@}379UrH_eJ@kiV5H=O
z3}YOMK!JkhTtA&Tf^QQg@gYRc2b#h`ZAuPNuy+GL$U@9Agrx|*&NNDb5%GMT-Wn{u
z<Qa--XJPd`QZ`C5y0TLlivCGZLoHp3%NKDt2!3P(vOIr-vXNp(d2j^!5G285<PYSg
zXhto;C{Q22g7qQn@>zIF+Ybu`q)CXHh<^40;MK-NlPaX3{Qi!F6i2e_U&xnQp9y5t
zAfQOeP(^6TeGRuoi5fh+VJ9R;zTBRn$6+wR$wt$^q*`8W^YYnn$UKGR41+O+q0oIl
z7pUZh;}E?Vq<|Dylux0L8JKr`7{g(fh~cqb6@CtAot>OO7dU9>3N?2lA_bih*)|9R
z06Fa!oI%|lAPK#R4X)y;H|-^)9fBAd_^5pYD8xGRRl!k9(s@-AdQaJs@2B#m9&<w(
z5@<v$>v>KGLE`DtHb!Aq*Y?gC!G$LT&<#p404+I(keSUN4nrY-aWQ#7EZd;rP^*Gz
z5oP$9D2}ockB{&sfJ4ce=u>Idxh0E~YH}watffL8z$GRCGL8j?<fSQPAwS|ZHuN)}
zFBfBH%Txit5ei~vJ*O)su3Qm=zc5L>8;U?Q<(Fu>F5{ss$&F+v8iVfRrzPVf&njY1
z99purErf2Ax+o%uHbLI|Xh!jH&2!c~_u*=q%|>+kK8D`$xD*HRFjZk=4-=YUXh6<)
zjg6^vSir@2<npdAcm@-IJOEbAX!fIIPw|j!*9vbBL+O|K@B+Sx7!SF@VxAR0D-9T_
zG!qz<wC~YE=fI!$30j|EmU9z?o5`~S-#wk4YYPxY@^Dojx|mEtc^)u^`#3qVqk$<E
zIwVsG1+`3tDefYW>*t{e4#FYQjTt=5DWa0lAaw`N>3Ix|*Y7hVgupsg;0Grs4W2>i
zD=Y_(4deL5gyhxv=ql4}B2<K#jwDnO!4e90FA6)8kv-q1a%#TEGO{Z7z(YW;{!*ns
za&+ljcy8sgc^)d1$JL2@57}?J7<(%=Lttft3o=sb%99wb?#6QN;~cZ8dzL%3W#oPW
zdNQYJrCpExs!mRF-z%Z$q9d%PAPOx{mwoImY5VcZDezxQ{F=P93H{M(`U`bQQw{Wg
z<BhzPDSz<=UCIRH=u*c0V#XQ*%^?*lKt4)3v^cJ=(8dbeK_T3fXq{yO7Q6?!n_4c!
zIog@B41mDJr3#O6hX5SC#<k2xTIe0YmQxbolyc?phFCB;mt$%9)>3p5h>5YNQ+YkO
z6k}t7;^M0aDLzkLD0NRJ@lSC$q}VeuF`7EGmJArxy0ZDoVimDo2qjM*?5QB-+of*^
z(JRbP1X(C)&8?@GDI|id(tWhsiOeDB&YUY|63CT>j+}+mkj1#s!ecWvqz<VTZ;+>U
z?r55(W*sN<vpioEVnh?Ujt~u-GWZMDWTMPI!dQVcqSSaXPd|!{98V=(C8&c=fd!EP
zs?L;EgPQlxGU0~Eh*td|`Q?7s<f%(;P3lbV<us6|o1g%SAWZ3MOs-?8?qt)<cU4e8
zum-MdI^_=kS5N{I*G`^W*;qTA?O25%5U<u)muBJR^Tw$-u@ZvwAdj<li1C+KlRZ7S
zxtc0dgX?r%nHF3xblsHTdR==u@M4L%slbbc?P<V^rEZe~ys9mk{=480Qse@ql-sw6
z{w@^NQf%L18(jt^HR`QKcoAVs97pYFC!8AD|C2Ia2)9FHOUQ&T2zh4sYy>d3Q}kIv
z`)<g=wR8q30;_XvFF)#45;yyLl#Lf`mN1MF<uz1sA&<F;DlX(Htd1q`SSb<mvKR7L
zb|T9qD+S22uMPPf0Y3WLD1UNSC?9=ols~x*;DzN-bumvtf(eG!t9fLp{AwQg<ar?w
zTfdq|K6zQ<f3I{tsUQ{i;N;ib7%{ixh@^D1y)(l>s^}aQrkanj7U@;c&YglU6v-2s
z7gU+8l<y~yV_N2Z0$FyM`w3*(rS2zCKrC@Tfh@bs{RFb?GWQe6vdi30Aj>XuKfxTi
z$8tY`zCf10pP*E0@%;p{ig`bQ4(y!!3H1JMc0YmMg6)0+3!}L1{RD;tRK8Gvol13@
zB$8}-t%ki;0UuNduQBMX_c|ME-EMcI-Pv;JM9i93#i@24<f0;SLHMr1T=~3cIkOTp
zgI4}A8CFs@`J*)%n5?pvlhmWkXexGJIh^ImyePf_Imrtyt;<UP)ct$j0vIPJ8Z>P0
zox~!%f|GG--aeG8LuMjDZq_8;2Fic_19OQ;W2P`yN?R}v)?tS?3M-5;a-SkcghL3O
z5*waJgdaM;kI?}xn@!Nn#dv6HhGXqsQ^|A5>kvdYTpS`xkqYz|BM(!jI9`gx<l#ck
zDEVO~Qga+}B%-t<O->X!g*n_QL2HO^pjG<;Bk4TI;5Vv9^vo$3fei~V&L@z2getON
z`Wn)ud^@<nGd~r%r^0h63WzMdl>Zp$1k_eU4K*b8ojmut3<?~YsW}u$$s_%`f9dD6
z*Dy$|_{StiszRt)!f4|0uwlxXtn$<lV%o`eMM?k25j!JaM`Qlj<0DlzEteAuvA(ag
zS>1RmW=Yxlc^yUWWQr$wa((LiH{gLx2IVka%61z^!URoz&Ww>Pq%+CWnP6|^CWUqu
zcG_lpfumycq{k?_=D}<w?)x~zY<DIO)xyw2&GOYReJu3V!{aN&Va?e4n}QERc9L?b
z7I6!YTW^cc&WSwy=fhOidmOH<nf+Yh@fc`l3xp+MCqWMyUd2fh-DuLFDTCCJ7MT=I
zgESn93<!nMa$Fc1Nw7ikHjERet`WWTpTtC@ZHv<NDhx(L^mevcm)RszRFI|R&lC_-
zw8_{qDC9lxCgfpBc1_e?;X@-TqVP`Jz`Bd#Ohb`HFVCwiI1>%oL&LM4s=^j5%+X>*
zIYI(|84faJQ_6bJiF`=gb!=&#jGR#&Z^PP8sRK|*3YniU7)_jH$n-)!E<HM98geC-
z4vIU?qb#_42a{~5tkKrs=t6_EIKne`4k(T<Nzxnuoj?x5A)ak=xc&^}36<dmgB&=7
zLeaAFk_tX&i7&U4COeN%7c!<nZYFpV+cX7#KEF!wKphqqWe9-5Bqx%W^N5=&W0LeC
z#Rm0d0d>SxOv3NAMxqcpn+Wk6zoOJmpR7XQS0NbVSC+l;8%x$TzS6!%N(4SuswMvz
z#sm3PO^o<Sz6tQ_qXj?~(j=I3+LVpJFI>_1S&;1T5v?$cW8N_sy~yQA=%r<)hj0@L
zO+#~;Bd@Nq(O4LsGM1;<;4IJ6$AJ%|DV!03k}uE`mH8MsNm$uDGCe$0oKUSG6cGiV
zXj7uRF|O}i1S1gk^LtasnN}PZ^4Rb&{VV2wo(#{vLjLDYyWLtV=KqFo-TVB{U*qrL
z`<Jg^_SgR6Jp6zE&;S1a+=Bq!Dc|^~?$1Fa63Idlkn{)ag?^D`lkLZkudc4Vgv!Fs
zg&C0l;<Viso^$=hdGf@4{HhJYYs)==ZymQQzIEL-@omlRiEll3Q+!)@+x+m^v%g>{
zAGOud8^xrzuRwiqAHNPpp8`xZ=04ty1~Dl(kADfH9Z&`G2m2@%ASjOyr>Dg4ALCBl
z<_~y-ZRx#r?Y+H#Z6FMi)#owDP)l^!S-Qiu1;bmq%kI)$_U4XpnZDMR?rYuXizSg`
zc!vM`h<$QmXt&;QAHM{>0$z3m+5Gpf|Bt)g@z%FGTW!$)x4dqryUx`PP&qqxyWO7G
z-fZ>U-o~1@*4gN|YptHwS=;Ekz0Gxg@=*iz4F=i?NO$N&T?cjJOM=?zp)q3(Ana@~
zVBJpJ>vcCa-8CqGO;9%%5zV{P5gy1aGnc)k=W^=?2wJxwsI#%@wTlSalyBSct%K<3
zwAx;4qqF6<x7PT{@(60TbXe(q3Y{=C8}#oM{j0;>6TrR=hN1sF{wxO9+X9-}fR~$V
zZEtgPYZEKI_sMg;Cz#klz%e<gORNtu*XB3xlX!3#;0PZh7kzvLqNDqG5ATJ3E<Rs~
z&pl`u#HPmwafXMzE%z@VFg-p($60Ka-tmCn;{{B{cn#K@k7(mhHX?I0Jidw%b?hVB
z{B}pwwU21)+a1x`9kI-IZv$3%fg`kG{jaxR{civUHa6gG8@{Y}@JX-BPp-icddqCI
z*WjD$OY_b4O*X-v1x?-F7L32R3Brcb?g3JIn?0|GNa=2Y65quqTO0i38ff~WyI^}0
z)Qm0YqucIyZG^0|2K)4ScMXQI#!s#R>!y{-w^_t&GdFK<l=%F5>)Yk?ceMwvw_Dz3
znUvPOHW5y{?RANiaAB_FlTMePEI&P+)|Vvv4op%Tc|m&<B`burweD@SNM6|BC)a?r
zZ6_t>&7D@6hT7jO4R!20>w4##-G@5%oprtY?T%>8KBBd6cSJq=h<e}dh}P{RTK{%O
zwDCoEmlo)`t*te;v$Z7zm9>_)z6Pwc3;WGA1(l9{^Y2);`;BjxRU6y=yJ<F}^i5p}
z1eB*s#bJ<}`J=b-5E}cC2K#tOPmfYHB<|^jpZTNs+%$ceIy2p1Ml=0Fn9W}z`1P0D
zpqQ_>dLVPQI-A}053S8wt5uWbu+Bf~(@34Z{G$P{{uazAQ3AF1o|B_M!Q9q}NPH8X
zQi6w7w`5yv5MBI6XY!@i8J}S`0_eyAYu-(E4Rg!|y?F{V3?%gU6-BFb#g_O6gKT?k
z9f4{tjMj{uRV<Kp%eFw)f$}#tI=n#kk$AdYIfF!ka*oBg3KyvrM$uii-?fd6Qon1~
ze%~j-Cxrk3MDZH00u*aDDB3o44+ON9Vh;>OZw?e)1BzSTkWm1-X9L=%(DXnZT`K^+
zJ_qPE1L!3#Lnr{YZUd}qGpDtCC2VfY0jy`vX`Y_60KkR~fK8ix4&REH*_;Ewx&grT
zGK>~r+_b>hv60-`)~2RIFpOJsVB9cZTrM450k*AWVFR^Svwje4Yppr3ZJNtLBzG};
zUu)TVw=3#BZLj9u+jDx~GI}>tQ59gYG1mo#piSKn#9Vky=fZ1Z1u&de)<xR^!78yR
z*Ptb*N&(`|vRG^P)=G0`GVnE%fvZqnqdyzt?${UkhPK8EUGQK{Ud>4c3f--hC#0SC
zyJq8h>pH6z6VlTsq^D2F`hp2*7bZk{trg(3F=ab=-8Bt7i58Rfa-eFVhxIZh*5-HB
z?X7F;L||e=7Z6$+CVK4!m{==PM=8Lx0P)7MIO%M*OAFd$$7=-+oQEEoU0S)T%|f%j
zR_=1k+9eO(<gQxKliB~)vi;-S6u5h@HK%`*gX)nB=0T~IiCPt&)`o@vYo8|H6plM)
zcNTuxU38STrVX5lvS&!GbEG=~pDsRExkncO?JSFzPP<*27?Vx*OqQU#Jr_E)^2$xC
zaJ^O(hze-v>1gP6$`D8|*?*XBvZ!qsFs&^MQ*WzNW>h8^rj)BYk`_AcS-3dttAE3&
zYbEy!!CQ#3LU0t~n~*}p#wPX~!Ar#YLZT2eD#r6s*HTTrr)O}}H$ilsT>ww$ZBnTe
zlUE4uke18;4#uwg{D?d=0K%g)x4q`Axkqo@-J`!a|H{iM{NWi8;cqae0#G?`4{DBG
z5TZ8PYnuq{(GW)it)U}Er-kja4I?=h8e+pe`i*=hif`wuj!^07k-KVkg&_YI{bvQd
z)nSbb0gvz<opS)v$FKmm*z%yBjoib^mex14mWn876ApmJw%T2o<)bUY>l?;!VT{XP
zFa8f1lJJi?7mTZ<{OW#jiKrIBQNQtJ<L-4X8<%~~pA9^fs>ET}>k$&$jJPfc=J-TM
zT}cgJs?*li5)%ike6u%y;_mdabhmU_x;bs~=5(=C)=JRqY740hE6!hKRV55pRQ8IO
zvb%*#*(+O?!d_Lw%gtDCt8L7fY@jfA9h|xx3ZA&S8rkA**4v8+0}r`2*FaC0OBmO?
zj9$Nso&d#Wyk4ulwce)YOr<U_!=25&tlp#{adZ8W*jVe{9O*hmE$*q)tHwLEe>bQW
z!C^92zm`P_mR%(Y!;XJz`fY989F^J<TG-Lr=GHYjYL^#^O1UdjArZ<rOh*Jq;L?{F
zFVrSP_kKq5g2yF+MJ?eL%)e~@T&h>t+^dOgow@&7x3dn?;M_%Cy46Ld%blh&NUD;i
z7|WGp#p|>w)AVA3dk)D8{B*{5a{8Q4o_y6kcgI}lUa#Bj^=S91OTK{76UyOUxaM<y
zExI^_Vt$t3J_Y9ExkqXrGxJe4^XQD5Zds|xy<}G3<>tBD?Rx)zd*9yNwvp|bzg6Y$
zfMm)=Izz#DKa^<h$g!Px?!?LXai_LSmkJ^w2{B1<0MN2_Hv8GP&*^Tk(Eu6%DLERi
zm>HP_x*LstoIcOrafEsPm(1~2tLYy8pIz2HkDULmCja~DM{>{AuE^hz$e4knmH!5`
z1njkycId(X91nt`2|r1CLDt8UZ+T}cYmP{@0)?v&(qHg>rGM&pyW$RLsUskpOmXa|
zkIKOuOUNd*>m|BL?G8scsn5$lloMoDCuk6@qJVlY(`CFOZ&hrvo&?e+l(>9oOBu@w
zw`D55lDh%Vs&|(6LTH<aHI2_yT=$HA&llf7JG6HhP1Dd_Dm#s*rtg<>)%JShpc46L
z`@A7%_8T5P)lM03k+zct8Ue>{yX>|o*~nGL)A6>wN`+d%M~y4#9}QFFI?YpO?=p4a
zotQbw<+{4-1%YRGi9fMu8B)(BAV0TG=cKDL5+6nNxR~h^JcLzif(yFC)<${$a5#Y4
zg3)`g7^`K){HHG%lMu{qMaP>eA`1g?kO!X1zw#&x@@rX=f$!F*Q_SVjy)2bvrnS0y
zJ&Q;*l~vT<6Ff$D>Wba5GX{_}Ls*~x=yyW4l`+jdkN18jx@EYXeE~n`n?KPF#fH#L
z%d_kb{n0Z4NZ=|iA#V4R8W8IcB@t>hm~7z^DIzdMW2>g1L?uLJoyt-`n<b)28?j8Y
z5~H>!ZET*ZwldxxoMTf;Wu!xwn`N{@$qFO?SvDR34T*D}U!||`VVZ$%-4Wr#_7uVg
zBi{ps4+NZ^ZYk)Nz(|LEe`z4Z0W<ww_(>v&P@EF#TcjY_YXwhv8Rc~4CM$|14VhHy
zZ=s=`g&R>ylZ)SAa&b)Gxj~bQ#cY~i^qPV>s;n$wZGBIRmN$=>n9ADdzu0`EI+R0&
z7nu=32U(d7sb}cm05y4oB?U8S18!51_M|bM#f<D<rh)^;w3)=PWk7MlvA{^Is!)I=
zIX4|oMZsdibRyeF01%;4nbLo)c}8`bhO1;tPdrdsGu$%{M91t(3_(o$4H8o@9J3-`
zA`^Vn-}vEt@#LjkPY6mZ%=qvV%LOL5jfgNV(D9tG%ZgahBXe6fHKt<j!7ApE3>L)E
zwZ9WmTLNfL6R;2|Ta{=LHJD=^(RAw!C#Qr&YCTN1IOr;wg}o2-uY?+!aLGvQe_ySx
zV^BZ8JFrU4z)&qyH`ryJmifFs#BDlS5rKa6F<K>yMFa_!W{_PM%zx>J1aj_>1wU#=
zq?a1xZ5(U9bZ6V@vF6D4*mI7xP`U$878Sy9xkELLi4x$Yp@;bP@>{bFjD>`KD>jYw
zboMsV)$&c`>+~(8t4nV58=%fMg38Kl)RF|D?b~j*mSmq@SAjEQcw||;Oh0lEu!K^Q
zq$u+ZCKp61B&!1yVQf#zv}5|{yDIIt<hkrBxP~Qc98VPqjv=gd4xq(4)6+_5h1DIu
zx3C9NEaCMpDb35%GNni9nnB*E%#xZga8U5h=&g|mE51=*7-I&xs&L!?`}dAbO-sHj
z&)oMwuwW(3V@TGSZt~HP7LZrNHZHPgwYt{wWl~)BYXb5d{96zlq;5>aj2cJM1AcF0
z3wx3U({<Y&<t(S$$~`Q+rtE4x%%-2-!dCPajpMfN61g_?)kF*u#TCgC6CI84gg@V4
z%4PNjB{b=(ng?esye(#5nvN4a*0nq-HmnF{7_6GRLyMd1cU1IVVM4VzBoLWJTn`t2
zie|uDgC&ZA!hTq#S1U5Ayq||)e@AP70^Fp&v#A>`+X%l~rLuIm`l}&=1~r83lbO9a
zHH2Z`88w8bV!-U3_%CK1H~Xs{6tssmX16s4D*q$KCk+=Y1AAvB27}bRifC4Bwka#N
znX~Ig%Z#k$n4sDkh0WHr+Sq&3xii{}+ge8N;FKA?zo~`vjwNqtX^@>=)^4lG4Xg7p
za5Yi2#HyMO5pod5z)uwl;}zQJS_xySQ0LO@LTxqssy)C9<;!K(*i;DVmpj-cT0t+j
zI+Vm^+^^ntPN1kca1lCz(XLYI;Sty?s<)qOVznbJLI)M=WT`_p?ZCG1`2L9{-D6JS
zWq;7)0DUGAdA4NJrjNET(U4cQbhLz=NsFYS<*`xAL+)Yj;VRoe6KnCbWmL0M*AKB&
zk8F)#(&B6M-bb&(oMG~3dC^z!al*T!oC#H%$@F*HO@GqX<p}ojwZn|zZF-z-7WTFq
zLo_Ir<mA!;A>Nbt4Jf8)wR~gybHDL6DcZC-E1J~&w&L}gXGc3J2w$>hsXen8IF%3a
zHIeV=^F{;76Sx}mQAK!-RKX6MFz_i^;JT9<VW7_GGy=b1+WwLlQ0Hpx#{~TbNL60z
z1PR=el6F+3Bga8wIR*ff%|Iv}sdG~1PQr~oeKaA>Q13cSEeD-A(X}VnhqTr<O=Bh3
z(zXL+a#$XM6TM24NE=AawoS0|sDk2^dXkzTKsogfHLw#3V;X^i$^_nC8sK$54KUj~
z^CVgVHJ>Hf43bd5>_OV)Q?}N7X@XlfC~v*)8O)w15i7_QDfK{Zbq9LZuuog$;IPRY
z?-<_A$-!P|-WfS~FUGO)jIeqNCbX73)#~$SP}|e7RhOO>?G2Eh-LPGL<_demcTB_S
zh~ETyjd3VEw>QtniMn^pU=GS=y(>(vT?~=}2WdQx#?t1jSPmSTyJ8(>MKaqgqO3LS
zv#)4m+#Lr4({WVnoMqie3`I56s-@OnrBd5$>pzo8=xevbd|g*yd>~>wWDd^yQRo!&
z#>zw(TB;Lm+IF2X!_#ht*XotgosL_@YlDqc#cyMLL_2mU`GLSo43;DJ@VR(FP49pw
zROW(beAd>bN1LZC>n_dbM!7Ub0DA5($N8c?E+B*4l#*(Jg1@V*1_dGKK>^jGj1Q4C
zXU%0PXClcv<M%_?lF{krVd}Qwo51#W*>w>oFIx2TuP8J6sN-O^w#sX58Lii_a_J5%
z(rpg)7X{Bmmt&SEEKxlnxFo;~x|LWyT9?N)4qNB8;oKRuK&V>h{!Z&0To+(8C#8QM
z<X{7z7q<F!VJdadl;_hi_%+JsgV;zTwVjSfHMYKS<u`9AVHc8?=<XN|*g4huY$uL}
zY}0BB`@BJ4iQTuloHBGHF#N7q-wvOQ9y@ir<3(N$)(&-)CqLHBmR{LclyB+k=6w#}
zC={t`0*N%|lp$U0uwO09|HJ(ki0FI^N76e~Ks0Sw#YTnPVuDs&`}!DbZ>=!z>br92
zAp<E@j6D?J71YRHhJN3xJn%-mYMPK^`s#Bml*R5uz(k-DH9Tu)b0E4PBzc1=rqkWH
zv4u0y)bc!9<b&D(-nF5f4i}eZb&F>-sassj{7isTB{qv~dQOLD3PYD;ixsyFA;-lP
zM7N7%mIW6!#gxL($#(G4(N(YJ-sNFekf`^9M~{|NdpZWoOdiM0&<hMjMUJt8P=PCf
zf9SBZ`{oz#u(9>-;cP_n+8!Y0YT9!MDf*_;YF?0YwetLLCNv|oIjM=d6d9_f>=Nt~
zn-yvVFy0K}9r7dYGD41>hS!-6=YTv{nEh7Q|6p52J)eda*jt>mL-K>n=lQq8qAEQ|
zgw-5YX?lSF*KsJ(^APhBTJ$6|T|Ain8DVZ{<-Q<KFqQnE8H9G&5y>p%=dA~he~hzh
znt)j*5|Ce*lAnp3MVj7#N|4$aC<eg35Yn)M+`OW{4y3?sRqf@a)hNQcn2@?`dUhF;
z#Si(x%Q#b+<OtxKGT9-!C0WN9sC3oly!$u!^IIRf!Pb(1x)(6Ky%j!DxM5VU8$wB;
zOhZemXcwz{TR2XIa1P^<2qU;4{7>baK|2kTvgy?KRTa7Bol(W!8hb=>WSU%6`ZG7!
z#@EOD@L1Ju3}KF%;ikfNzbXzk=mwT=bf}Mh5ZBQKM0=s`|FD5)VOCYNJ}{mfDM}1$
z5)8jkebNaBsBo8+p_$@Op!-cAaXpwjE>_e|aTX&fDx<|0*ArxRhA}WUW)uBl^`zBR
zXEiVSzCkFGN_nUpITZZAmpUQv6@3cm4)9&q>+&goLw&LljGJb1r@p6*vzGB;OB~d<
zh{skIgQ&Diu=c>qU6Mc7)EA=aG+{X=(+Z85h9AXRLcOESqJXchN2n4o4LmG(APh}n
zK=w=w5$BlG{KbknR^-3{{FY{Lgpgq;FM2ow9nJ(SK-I1WPGDKIt6-G?PxcvX`71CF
zqWWi6z{W4VH6j^sR@a_@gP7>lA#*iJ9cP6a%?L{}srvBGWW-s@k7Q>_f%#<Ey!2c>
zuD^#To@WOv-l`7QS4F^}p;4fl!`@PWJQn)Hl=kH{h-V-Jifq|c%$;=P;L70!*MLSk
z-3cX#=><wkw})%X&uKbuvyq-}Rv)e#44jwIdVSsM5yyN~;`0*Da5@HP;wF5%KWPYB
z%!2Tl22czs5s>iEB?*e_R9}c+t1hn1-8elZd;9dXy%((Q(ULHTo4iPuKn%Xt{%!m|
z(kc1`txKQQ67NVG`zwwrU7QVFIgdU96^T!mIP9}U-gxkKX?V;g4G&pA_xKh~a3pM{
zk-^5L)d2a>wjxLs9T)qakQRf46>_q!{sZGSZb1?O+N4WcrtW`)rEr!SylGV}V;y}<
zq^brnygQm`V!TjuV`RfkX)lmq3gu;rVh(k3b={y{V4>`qt(%S+^e}g4n?+3dGUP=t
z+?X<$=;sQzD5R@)nr~L%8&d+^=LPsNA-M0H>>D&^p?hnj0Xw&lcp%#}SOnl08_H*C
z2Hy1W9KdhNK2rV-eK*)i4=fln#C?aRGRYY~FJ<*Bj-=nTgRujaZib;{B4Xm01wIqe
ztKvF>&iWOrdg<#Qf11T>8f<-DW4%sK=X7vt=EZS|70(X7HBH`ARWX-*3kSXy%C><Q
zHYh`k-Cb%1z_~#NA+Jj@V+wuwJaBHI&u6zQsIDr5aJ+nl@pu(qDGkS~`D0ZS)afb2
z>8n~G3v7iO5HypN`zHGfLQUXkx}e_VY0YnZEXH#2SpGFI%itn{71F%qlqrmTqdY`&
z>$JeuGl6a>Ok8CNw5eVox#AweaNjI*{d~RrKHH~7jPd<ajCn2eB&sJ4VdNFv2$?)r
zS&rOmt%U5p-nt0APAQ2>YPj1(beqq6vk125eaRtpT!_hHW|LvyQ8mC4$d^kb8UIE@
zT7IDCR{W`m@nBRf#12)F*GI5!Cg@Mlgn(;>uesjNC3h%B?AD?;o~LP>gbOlRPB?>8
zRE{RFfZBvaAhrV{Cg`J|M5IM{eyu?+L(8&t9?jcgGy1x(1a7;V6%B{dP0J61zMk|A
z^p<7sV1$daRT%rIEg&5N#Ib8+Ko=2bq+pn}QcHy~lvxr9d4iC>VYX?8(gmP>XozJ%
zIV{hZuKhywa+E^^rQrk+ZfIr(w9(<?q5A-1gvK^}I^hAA=}O~sT_vpC?I6-FvXq8I
zi5prcWTN#@RoLmIleGo?w*jd{;VakUxZEZ_?e#R<xe-{OGHulw9v{=J7@HOQ)mQNr
z{_)Xdw`gG~;~aD%)D)*;#KZG!lN4RpTu_}3D6cl(EZ6x&TcpuEAFfNX8gxmnO^)h&
zT~faZ#aYvdj2{uILylmahv^t+g%E$??nJXH5UM*^Ful<2qgiTZT}|C`J;$YCub>h@
z%{hqV$XeqD270w-!~@})u8-(%^oyaie+j^rXItwz^HDF-H6i{V;{}>EST44Sl=Lbg
zB%G533hDf>O_K4HI%uZkrvy9@mph&{w7I^i?EF0xa03M7iaS?Z8As^L%?rrGgcl<)
zO`1w#3>gVIC0S=_0g!wpVw?k5Ppcv$gFd4(Tml_9;Dw9&qjj27pB9LMi}HksIjlXp
zPKc~sVCCu>pyxIRJ0B=(Rz_2y77g||JR59=J+k6?H-Tb26swA|nMsaf3kA`m7E&G^
zLX~>(>%8(-eSKX#|L%kxS}KRda3_bwlT`u${Kx1gIvtPb@6kjX0h4+bLxccekzI^B
z)xflBGcYo1wx@QQme!*!>?Ln)d#68K(Y8(-AdE6*j8<<A8f)#590tY;k|FJgEn@}A
zxXUpw%>~Ki95Fo9ox{p(x63a`_YBK2!X8m&@sbQiGTUmIAx$Kxy_Y~LmC#G`VzXW-
z5_D>BI0%duWfz3)UKJeu0o4|S4(~`um`#l3X{pj{NpGe1RXiztt(dY$w=K^xtv-W_
z;5g+=v+l~u`8?fZvqtdu2IO~C*JCUm6Ivoj@kf~Qbu^0)^LQO$#!3m?FtlCMqpS?g
zNx_rEPSDBoUz->hoVJVBA<l44jSU~->&Mi=V;zx6ooFB{mSKa_ajakHl5}i(0na74
zjWi?&a+#`@ECKFn0|N(&EDT6a*Ob4DSIAd^IDfH19#3)wk?<_@@8o2LJQeS_l);IB
zzA4f}+9pINX21=IZa$>}3E$h)wG+Y|T$TAPvji+c$m{LCeyPot`T_GB4CL)JF&tNE
zHqU7?AnLC~`-|&IwQ<-Hp?Wm%uw?XTOMP{3LGa}(X6e}FZR)oOp{ZpR*jd~JdIINg
zJ$jxHe-RD4ZzQ5^^-;G{18aj6Wrs|AR_a+8$IG*hmbSzy)5R$bh+7}7(dL=~#U<Ng
z_5sA6MZDzMZFtTeEvf;m+P=vk%{T@{LAEdGTF#RTz@h-Ba+a=?Cd96#xPUMlbV6qx
zCJa8MHzii|Ie9o(Ex^?sJo_Sv64_QMNo<M)y{q}lV$dz4pIi*2-iu)H<SzAOKYq|i
z;TKuDV!{QXe}BVofZmF9KV58ihl^AaCBYNyoVxz8*TmyXaDNqy+C3Fv;oVV)TPlYN
zYj<Whm$}`%iQS#BF+Dy#g;6~{9USapdfr|t%%|*FcsAI+XWFVK<H!Z&bKUmr>zxk@
zovM#ugR0#mECT}|RH)iDREA4F2RodBrFSgd{Txz0+NS^AIk~p>a|L%}cYk$C1FIy>
z2)I3BT*j?}HjVKQ-=Vh%SlMz0fPmMlp01={rEfd48_W<nEk~u2*lrxj(9Xyr^hS0j
zbgwDFlyie2mhK%26ucGq#v0y_wDbA^vau?4#-hYQGkamG^?K$j;Nw9eZhh(+%*gd;
zUc|*NaBC2NU=E795%D6bwR^<d$d%da>hMzgXslh=+*vWUg=U1T5P1Q73E9)5Lf+6|
z8k|Sjd{@#b5|X}}G1Is^nlW3sK}}<C=)=#t)09ckn^U4UCPW{&;yXg!`nqz2Mo;YS
z9nMZBqO(x0Me;$2xFJk86LcZejIiyaIq<^qtT$qC=-(NM^cK8{F=LT9=YmeNOBMQV
z6akZb27hLw_wU4Jw%8-&epfpQ8rTw;tSnkx#M27I&h(K0WMWJ-bEqQIQl&xTN;fm?
z#>WB#o5t9uSvrp=dvK_PIZ9U-L^jL7C6`FMbBMpDX2IQg$}_@oeaNYo2UoyWIZQva
zSxRgOAzLPSoHs;YO~-`MWRfu+FA+0u@m)sc*y3`7IT;Evhj~&YA7OAvDZ2kQt1MpB
zRfn$2)6Z3o8xVD06c7am&NCc~i24k!%5WzPH>25BU|zC#1g?YZfwRjrnZ@7Hm^%(T
zM9QwDA#gk*8DR%F13gR8tER}AZ}xf-&A9ra!d$~!gR|TfIb>NJYmuB$u^)ABXvJkU
zVU3{CRub6p{H7!+FGp1GFPS?#%5=Y=lCtM>0!7ef2fOl5%zL~0Dh2^A%1V`fYeTWJ
z6|QgrMGjw6fPz3V<>_kXnkF&}^LP!L5aNN4b`!7fl0Qd>HQcFM`YF4?c^lXjG(mS2
zdZg<6*H`-?;p{b;lx)xJVg11TZ%f#ypij%SOK@vTmdPT@O4WJX;Dg1yGb&_3i`rM!
z>mpMxPwIw|e3GFG6NNT_bXu|A$vc6w;LbXUo(^SRRZBC-83b}?(a@P);zoOxY0)w`
z4O#{t{A6zj$f?seMQlL}cNtEXY<E~SbHZ|!vv;_?+Bme9tsUCR#IC;2&UO`TCh~#k
z$*N>wT9@1eHoze`JfVUKJ)xrYIwpJZEIv=OogF!nf=0r!{EdRm@Qg;9NA+E&JR~|#
zo024eF>I(Cj&BQ@^jdw@!d(}aW$wAUtQ%NeT!CvkzTvoC%S(CmcWXphpu3=Ay~Z^L
z5Cdc#fE9+UJdFmvMe}*WtV*;D$ChLbNGT^Q!}Y0h71t|1ib;~lYD5KV1`R+eQmlxK
z!d0Z<aV0nuZi8IVmk?2KaRcQ{MGcIulx1%|uSERMF&!Yc_Czbn^Uk9p!d_#ZKCtxc
z)^Alb7kP_;XOGHp)9&6dUie2*WBcZ)v1u5tWA&iM^{Gs9<S)P+IZ;!$3NA)R+TA9^
zz%q@C>?;y&gTqTiQY6iiBWtu^aADLHl6e4t6%E!bT2MLK4<h{xUN2sc^<wP2UhI7r
zj5B1xSiU+Dvm16{ygfY3i|Yl##V*O@k^}sxeQ`X@l@XkZikXT?FBUs84I^d9DS}h%
z*x}PtBC{*26Iu-NHjxq**WYn{0g=yZfytd@^kK3a6@7TwUJpc*QnjoBM_bgkUzB6c
zLL>~F^HOvEog~Wex=(cU0@r@c63~RDg8MVozo2bZJKJ1n9paB_RXjZGwVss+80Tpj
zJSt{phsYaLwUKtEiN-vTgaDEOrZHQWaR(#$aIWBn6{|&2OSxP&ianUl*=vH5Y%obR
zx=E_*|6xb4dt*m11kuSb>WyntKRu-jP(?we%H2)tw^x2d&qAKYxw4DZbdmQ=;gay8
zLs7OfRaUAkq{zXh`aqSHdOplUM7Aj(m)4$qo$p3<ziuZyJH9rZ4|;eEMhFnMRV%24
zw-@aC(|DF<k%+m`m26h^Jheu-nsundP#kz&VA;AA_*PfigOm1oqk7ENnVa*GVNw*!
z<}N|>QD5jhj<VS$#@vcG)mybk%7u#vj!hvVl^;jf+e}>r=1R!F1GhuGk;N==QR}m}
zIgix7!H|MgaLZ)AmAx?(g1h63a|>be?Mbv=rcXEPxYd7`#UjuQS|j-;bJ{0&i>tJD
zx42BQ`pwUt{EEGyocxORPRf2oUudX5fbH%Tj7Hew7!)e#WXu3J``YtWIq4}7fE(Hj
z%;c7ITT1bzQ%8y7Ga3x3pU-TY1*{p56CH&ZoK#tO3HmWz!s!gT2r&K$*m-LI1Wauj
z1B<3)*`H9t1fZ%jF@?;W9O^Sf)=g1xDG^f7Ww-%!yvF#E74SjnRo}Q8%Tvs1$FX&?
zDbkl4F{M#g4rzDyFxr!kX)@12+laA<sU|vXQ~eE|K+){7Av~wQwZ*$LD4nh{xZHO3
zh@&Vcu9Xxss7nN}l946LGVq~8f2=Ly6_yhd?GSeT&o$pF`bp1zBbCTsvcUD~bK1)5
zr}!*Lu~@_DEXy&dMN)iMKQUo&8eUmU^!N?1+|*SJAfCVJmE@7ToK*k<`7Q2u)_9Y`
zNNXL5B3g`pZljB_dy~dL)4elnjicgfEUy#evlo~=PL|HrzvwG?dq52PBMby#cf7l6
z-zLI9BY=?8or?EOJwkH;)E+efO+Xf4o(vPvxzS^Gla;|sEM@`@6*1S(cT6#lczdN|
z)7iD`6;^@`LFG}tM~BOh3+!TaUT~0uZ9n0>+h$zHJi(Y`goD04-NZb}+*Kr*#hzh+
z8L%ms-6$79{U=+U<SK=#$SWc6X!5`5xb%3no3nL^>#?njwL2U07R8nRVLG0%$6kFE
zp|2o_!zgBgY$`|?LNGB5KNmGh$Ci@M!%!3==njxM?}~f5Whtq%u?IHWb}G9V8w#vR
z@!2NYw^4S{%Hhl~#tjj>PfzhVY;ns4sh&Xu_l9#J)&=eqcmf481)qpN3>HCaDc}U4
zp$d|?x(aG7w5?=29k&+cpKrJ_h2}h`0F>kvw&Q%HX%92)P!eq)X5VzS{SZ<!OtiRy
zVKk6e6Xv@Sh`q_Tzs0*>WU=g~DywSr!HuXE`V8*~pFOIL@d#gIG+2M2f`IODeBI*G
z_00|(bOB+Qx^27N;DIZiT&p766%2VA(Vipf=)8}501`q#L~*hzAPEn}umC;vVrM_B
zW?VwSKuVFS>n`Hdwpw-V?kmOG=yQB0q*%*TO0nS{Qmn8XyQuv|yruOxux$jGknk#@
zhvkJewwKyTx0qFe3#*l$AM>{8O_c;onEDsouR5N$y;pHJ-s^^6Yw<@<*Y~$GU5nyw
zyw|?3)nD!4HK`p8JG?oygJ*_!$C~1(;>=9T+E?*F3Ez)dG>@m^ajei(#dFkEjZU;D
z+7H@O?Rm{~qMeZYZtdz55ecQd`a>go^t6$idM<Nc9dC#4rT-wUReJSgub|-|+*vxL
z2=_g0!2a&R$uG|LNF=ad5`iQaGFQgiTw=28l$0nyP7}}@smQxKqNuOpPAqp1?u4$J
zcE;rAXRm&E`|5w8Lf6)9!;b%K*%Qsu9Xs@6uR;I&KhIvieNFy_8V-4_kkoJ{WONMI
z3>s@ZJ9+iyCsxDNL*L^yY(Fra#wtIbyn<(76#$VpX}3rZL*Htw@wd0XzIgNO71l6y
z=#)PpmwnxILM!$gYP>#q^Y+zC-YqW(NF5Jf#PWj18gE~n;JZT&m^ye77Y569-LSF7
z%V)p7dHeDi>y=?S^ciG$eaCC8(WDnxl9`+k!Fir+T4i=TW}zT?7XG8L3{gao`;aWs
zi!55^?KNrRq%QlyYLY!Ac;1)Q{<_Z6b(|H~jor^T**TF)Pst-8hO`}ho_27vN&ujh
zNH?@X#DV~L7^eoJt*w2yI5f5V&}y;F{7CvvcBpR~#<N4yRB;nOYTpXO^;l!t3-;#U
ziUTr8CqVa_j>}y_rK~P|T=#}<bfRxoT9k&htV#|QvSM9AUToX;O)DH4UhUd@B{BIa
zy+REx)#aAf<^SrNt-;<sZHc8DVVRYQKA&Z#W(lgu`i&?dL?JyQeS<LFB|75dG-el~
zkq9SRh8?0PU3#BlV04^ha-0&w?T58V72Un_9GRiLv+e`?_5<x(&!<^_H)5sb*`De4
zHheUzAATldt+aeZC9W^{Z>KDEIAU{G(0vs=1fdD26H(~(C#w4MB-^!WQp8;@?NYuj
z%X56o5x^RG01#b^n93ntp_*lmiE&mJ3`0`|Mb!s786SXHcPZq4D6ZGw9Y+`SgvS<1
zy>&y!bo@5oPYRpM^3d!Ucmyd)K1La%ZS)@oqs@Qf0~Efodn~|)Wf!k<YIDQ!0u@=h
zVFGR~^_mwN)TG8IF{K{ngkjxXFGpt!i03TLz{y7I5wg%_*ix?Ii?|@Q!OpO23*C_&
zosPsjz(e6+-Itb{ZY4=qi~R35rGs!>`v&Fzz}ou5s+oU73v9yshmaH|&<@ED@Cf~O
zn33DlAmc%!mD?ouI>W;0vHtkEN1CSxI?#V+#aE6!Y2H+0N(Y|jI%+q4Mv0ZX6}{aq
z0Z*n(#=zoLENy|Q#n8KU8RJ2{SyS&eCNP%X!GOszTWsbHko_1gSIig5S=(y+8~pjL
zkG#jGb-A5b@@t{JrgseShEct42qlFw4K1lMHhA4}b<Xad;Yh_eRN{0TeTcT1i~1)2
z@eHT^`OE>s3C&I;%o{{T%?rd@;Xb5zctX(krl>efP-h7me??udX=={`J;V1nO(?`{
zUOHmR$d67KP+XoX^fRSy8>QL2*gH1@jo#$!=}KE~0Pcpfy}PS$$VNl25(=1|Z!(H`
z10EQprUWm!VsT5D^^q=!B0=Qcvuh@7QD@M_HOoO-@eL8OU-eaNIXf@m=Y(Qp+OKIM
z7{NN8W*Lg7A&RoAI{}9-Zzp!@3FRvl268J_bl{QpSR-_C#F%=M2KAPEAexa!P&O!%
zGnKi<mJM_ppNry$PP=Wge=P+sL17Ll5)?~_OFJOA7W0%iu@E1L>yA1WNtt-9(!U8{
zmnol{O#pj2k0+(wAq7qiR@+&eC-XSpXV<Y_0bl{9G=*+q`VqoKPRGJ2#Zt{wH;So~
z|9aa^0c$V#g0qvb{Dn!pm_ydd_Bagcf7IkU!M%O!%KjW&!z9~4hmvL66RNb)p$$1l
ziBJe`_fN_#Rh0BX_E5hG-?*KGJiWr5DgXpX)uWGO^P#T*6Nhke`zF&c71@O-fi-p8
zcf773vKK-kr%!vnBce+q*rba7GNaeiWL79BUm2N&CNSn-LAld&(D0&{C)}!Kcd&KC
zD3g72u2=VO;NAMYl%fr#frxvhxBHVq2se$_1K(G~&j*e}6>mQ0qb%gpbWH}1)To63
z3H~a{V;EN<?|M0qpE#Y)Z(v0GbYB5j1PAo~gW8luAfXZS%44tBoFk0MJedPz4f1f>
zbzJEE?QB6upr~oc5@TEHbIc`9bD-~dl9!nA@uwn-xJqt9VQ0&s>X%@gsc!%zXi_yo
zQX^#!sCGm!l?BhJ-D{aJL<;TNxxgY#G(w4yq2kGspf`Q3pN4y9te>}#r-h8-l+Br#
z<7<S56o9*B)<XCSrbhgiT0-F~v)aK|Y9xej)c7}=Y=Lpn5(>9UXBhfpp3eB!l7z6I
zh+;{8z3<>jgcqRJpUP_}p2r_RegXFc|4McvxP(l|=>6c_7p4LPno97Y9fVz>mnVD3
zr*wbO?S&i&4^lj5*uHZ3#9j=4t{on-pa<&YSy1Z*4ZM(oFGDAEJd>p%1<<EBBIgTB
zHbYLMON?JYQ32sD_v~53#1Oz+SmQI|gyoL@h~oQImK0zLyNnlWNufP1liFZ%E_Db#
z9r7V@6fIiVK-9v%1Y_Mhz`YL1pI2lJ`38QmG~dK8Hc$rm;%L5&Ur5WEtN9N8@HF4W
zFTUn`_=S)XAHRf}ACwhHe|`1{h^)kK?@{qvb}SS-_F8-Vl>99;vr-6qS1)8$3z?0D
z>}nyav5-?OWH%OatA(7#LSD6y+gQl27V;Vk1=T`+W1+BGC}<u`qgtwE$g5)>G>^Gi
z9rRCGd=854z$AamkLI~9Aw=ifYcLRaXH{M^J)?Hb^6S^^z^+|$Kus%M^9-+c&4*!=
zu7ysmF7QCLYnENBYdZDzOfRTk3&Pqp%QWiOESL-FnqyeCYk;;WUn8<v?OGVr+9QIV
zS-VC)wQH_duj|+QXE!{<F~j;b$EaWP%=$Gyto6?|tlBzoO{-Sdwf)+AxQ<(I&-Lrq
ze51A|-5{uqsRypA@-@?|ts&30YxCwgLA{)3*5=Y{m`if(*UI^ZT`T8<#!$Xyo3(fI
z9kVu8zFQxA->>f@Kd|e43B6i-fl*(lf#uZ8+4a32xJGTP2<KXRkHD|ZrRiF=c{4-T
zl*h%gZBK5`@&ikLu1)r!+@9?lq1<Q3a%=0^@%-9zT{{Tmwc!RvjYfEu8Omejk@=`!
z3tX>$t)Xsc8}(~m?YRNzcm0}U*01?N?V4FzYvh`1)vwj)h8GY5SidID5fKxUMV!$?
z=*3fDDjsUDVo2}w_vlQ!h*vS@RMmcc`dlNtI8EkC7{_^X5ffQ?d|4FhqsNc0uCDY9
zt1Y54eU>gCk(S<#zyJOJ{NIb^)OM|@Z5dO`c8{lI?X0JkWqc%moGDo{kF=iU-jg;T
zzgV58noU`q$FEW%B3hIKdi)yHqXEz86=elIJiWj+><0%AA3po#`GbS6?mu7j2b`&G
z=MbzC-s3zjHfw!$esQzUpvQ~@|C+vQi2w5Q;VaYfO(IYFrtN<Pe2w9Kr5T@N05-7n
zHSH@R*hDMUKy}<_uTuW|AM$w@UtF9fghsqSD58tgvrV#q2vz(shw$%X&A=b|$JJ>T
ze@sAAiWl!m!xy*ze?EEn;`y`JZ}epKIrqQiTf+XgVgGxUalijR%lv;rhbRoHdHn4G
z^N-T#NwB^yFT8qo^7Q9t<xecmLleYuc%#6yiqgfuzxd(V%hys9P0bRv=`noK*Yoq1
zJ6T@blb@U4|MZ7Wj)X%v5+2{+{`Y;i{ro4}rF#Cm9w7;ud%yqx*!ky~vu4+)i)8g7
z*NacZZSa4FS)G5&^qqV9|5-lwWb~f?x9<O6|NF<o7cZaxa=ZMW?c0t-|2^Nom;XM?
z2Rxf0J<Z|&P$!rpNC$QBGFrw*8eI+t;vL;Pc)eLJqwM-fOc;SyN<bb0jTVi=wsnlr
zwcw8lQLaAx!FX4f`ubS9bMRBTj1Sk*1$i21#`2@bkI$0gY%}{17kZjqJkE=B6))oG
zoGs3SlMQ)lcBDOn`OuzkvSqYl7Z2lQlq^WU;nrWvn))U`_<J&oS2=mglh;o*_T%7b
zoX@gkUEs@MRQciIAqAhyiW+$M0goI#?)fPzlwVG&xmeL*h;Z6qp3bkAXXzrDF+k^W
zndj;Z@z%(IQV8ow847z)fjiB0P5Wm8KCTk3`9w^c#i4x5%;IO)S^}vtlj0gDrEHW3
z+LwK$+1prsh<`&hCjb!Z^%q6tZ1Cd6QB9UOps+}qi!v|JY?Bl;qruUE49x|}wb1{w
zcIPZwk^jH}w00}S48-69+WcGyWE<mSA62gZNqhG_Ue@ukWaa;5qOmLVaYvf9y+j{#
zq}hLY-}0Pz)%=*2eu+<#YSen6XyM(678||aqmi-oXph>g6fAYAOXa2d0{~8=yG=xv
zlWOwTd(_5VBUQKR^+30uCq<fFBh7k|=bKmqptTR+m|paxTEZ6jbrBViXyQnF`|`hE
z{_@Y42k1i&9(shTJ&ixci*$`vgV#k=Y;x`BNOQGA?bj@wZ_rQUF}ZQJh%5B~Lmd)L
zYbTp|f_W8>%ErjPuasrv4@&&<`h|9~hKO5I^{7f6#VX|CfElm^pVhyU#l9gF8_Lro
zpi=Zrx+YYN+<Tp#7gykzBD~XpM&TQr5JPLYgKKz$Yxo0ekh5@b4QFr-_uy9yosM&Q
znjP%T|Goa@?W-T2z1~sm>n;D;t|#$-zUx`{{NHEc|F$aM1E!2Cb$=DLov5y>Y5yu(
zzq%5yuDolLG!7I?@Su-+qE@I#*QX1hK>M!Z{}1KA8ydTA{f{f@e+<X;@Av=bn*Vzp
z(Ea|${eMIHp8fSdWc!=<`~P15bFcro*Z<t>f9~}^_xhiE{m;Gr=hpQ<RJ^}&9;4I$
z%XTIIFWYzS`M=M||Fb+&0PDk-6a~X#V9OXuDgZnr0?2}MATWLuz%l-a;CW?SJ>hRy
zabyZCNHLEbqJ98MBbp?GF^4{74#~|w-^-<+S^ndizt6k>UBk9z|4-L<?)U%a_%Pl)
z%^w`Fulcp`9Tr59rVDZjx9*&9%$p)v<oYZHj4Gkng9G>v(nMV6I@|i_S^n<Gdar%2
zjfp7eKRSAFK+%`~wMl3)q<15h6acU>M(-aS#0w&*)r-A{<`?Pe;*^|lGsqt>8ciP@
zbjocH4*Cjg@PHc?(H<P!q-^%!V2Dr#FViZ9@tbwQ>%l=y;@V!?idx%iTN#TtDo9oI
z!tUZ!*<>j|@fORciOukvwYDpTw=zh-@<c%CSFoS3!`lKWr>Q#1HM|gSp|Kz?E?&}t
zA~z(hJUAeG3))*>Tc?PuaIB3V!B1QKxr{!*#J}4vhEbLm)_Q(kch@FcG~E>IO>tZ^
z4~-_<2HsOD0vajOGEju^_9hI>@rd?Oti*`T@d!^b@y;e&9FO|Fv{-FT28=M+`SCk^
z+UR}#9t6ik$Nzp%ksxVl?MNJw@*Xp!iO(tTQO3LRmN<y&0@6^H1(;o~>E8S5rQd}j
z3n~U4j|7=eY+}Auo*j>FKouyqT~c}efbxPk5lq-=nk2+dTr5u6`H>&<gG4A3q0aDl
zBq|a|wfm>2QzWadrc)Hl&Pq{@bVphf14Mdxibfq`eXV>y(Y{tqEnU`%D@FW)jWaQS
zr&{h#wY;5b`8(7i>wc$N&Q7&zqakjHM~pW+Jq02P>6eZXA}C5$r>7%!>LVLB{`OlS
cZIA9lfA2r{pZm}K=ZpUQKP^)jH~>fk06JF8&j0`b

-- 
GitLab


From afee99c836d3d7285688a0b87f664947092906c1 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Thu, 21 Mar 2019 15:07:01 +0100
Subject: [PATCH 157/163] G4DebuggingTools: declare public headers

Add the PUBLIC_HEADERS in the cmake configuration to properly install
them (and to avoid the cmake warning).
---
 Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt b/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
index 5dac3f8c875a..9e56a66df8d9 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
+++ b/Simulation/G4Utilities/G4DebuggingTools/CMakeLists.txt
@@ -28,6 +28,7 @@ find_package( XercesC )
 # Component(s) in the package:
 atlas_add_library( G4DebuggingHelperLib
                    src/G4DebuggingHelper.cxx
+                   PUBLIC_HEADERS G4DebuggingTools
                    INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                    LINK_LIBRARIES ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} )
 
-- 
GitLab


From 41855b833bf6a722589f9de32f65e2e6aeae0c77 Mon Sep 17 00:00:00 2001
From: Shota Hayashida <hayashida@hepl.phys.nagoya-u.ac.jp>
Date: Thu, 21 Mar 2019 15:13:42 +0100
Subject: [PATCH 158/163] Update reference files again because some codes
 changed

---
 .../MuonConfig/share/MuonDataDecodeTest.ref   |  701 +--
 .../share/MuonDataDecodeTest_Cache.ref        | 4494 ++++++++++++++++-
 2 files changed, 4837 insertions(+), 358 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
index c8d0b78f3731..90b1a45af1f2 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest.ref
@@ -674,13 +674,14 @@ Py:ConfigurableDb   DEBUG loading confDb files...
 Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigL2MuonSA.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
 Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-19T2153/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
-Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-19T2153/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
 Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
 Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
-Py:ConfigurableDb    INFO Read module info for 5465 configurables from 7 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5467 configurables from 8 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
 Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
@@ -1456,24 +1457,24 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7fa4cd101f10 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7ff994d00f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7fa4cd101e90 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7fa4cb5dd878 = []  (default: [])
-|-ExtraOutputs               @0x7fa4cb5dd908 = []  (default: [])
+|-EvtStore                   @0x7ff994d00e90 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7ff9931dd368 = []  (default: [])
+|-ExtraOutputs               @0x7ff9931dd758 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7fa4cb5dd518 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7ff9931dd6c8 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7fa4cb5dd758 = []  (default: [])
+|-NeededResources            @0x7ff9931dd518 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7fa4cf20eb00 = True  (default: False)
+|-Sequential                 @0x7ff996e0db00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -1489,42 +1490,44 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbce0cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9938dcdd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbce0c50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5dd9e0 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dd998 = []  (default: [])
+| |-EvtStore                   @0x7ff9938dcd50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd830 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dd7e8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5dd950 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd7a0 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cc008718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff993b97578 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7fa4cbce0d50 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7ff9938dce50 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-Decoder           @0x7fa4cc008810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7fa4cbc4eb10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cbc4eb50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbccb908 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbccb680 = []  (default: [])
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7ff993c07620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7ff99384cc90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7ff99384cc50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7ff9938cab00 = []  (default: [])
+| | |-ExtraOutputs           @0x7ff9938ca830 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel                         = 0
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey                = 'StoreGateSvc+'
+| | |-WriteOutRpcSectorLogic              = True
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -1534,10 +1537,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7fa4cbc4ec10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7fa4cbc4ec50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7fa4cbccb7a0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7fa4cbccb758 = []  (default: [])
+| | | |-DetStore            @0x7ff99384cd10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7ff99384cd50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7ff9938ca950 = []  (default: [])
+| | | |-ExtraOutputs        @0x7ff9938ca908 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -1557,19 +1560,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbc31c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff99382dd90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbc31c10 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5ddc20 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddcf8 = []  (default: [])
+| |-EvtStore                   @0x7ff99382dd10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd878 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dd908 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddc68 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd950 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cceba8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff994ab98c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1581,12 +1584,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7fa4cceba9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7ff994ab99b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7fa4cbbb2190 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cbbb21d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbc7b908 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbc7b758 = []  (default: [])
+| | |-DetStore          @0x7ff99387c290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7ff99387c2d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7ff993879ab8 = []  (default: [])
+| | |-ExtraOutputs      @0x7ff993879908 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -1598,10 +1601,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cbbb2290 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cbbb22d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cbc7b5a8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cbc7b710 = []  (default: [])
+| | | |-DetStore          @0x7ff99387c390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99387c3d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff993879758 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff9938798c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -1621,19 +1624,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbc9bed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993897fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbc9be50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5ddd40 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dddd0 = []  (default: [])
+| |-EvtStore                   @0x7ff993897f50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd998 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dda28 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddcb0 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd8c0 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cbdbae50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7ff9939b9e50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1646,11 +1649,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fa4ccebac80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7fa4cb6b6410 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7fa4cb6b6450 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fa4cb7dfcf8 = []  (default: [])
-| | |-ExtraOutputs         @0x7fa4cb7dfb90 = []  (default: [])
+| | |-Decoder              @0x7ff994ab9c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7ff9932b3610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7ff9932b3650 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7ff9933ddd88 = []  (default: [])
+| | |-ExtraOutputs         @0x7ff9933ddc20 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -1663,10 +1666,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb6b6510 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb6b6550 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb7dfc20 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb7dfbd8 = []  (default: [])
+| | | |-DetStore          @0x7ff9932b3710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff9932b3750 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff9933ddcb0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff9933ddc68 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -1686,19 +1689,19 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbcc7e10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9938c6f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbcc7d90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5dde18 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dde60 = []  (default: [])
+| |-EvtStore                   @0x7ff9938c6e90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dda70 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddab8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5dd7a0 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd638 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cb6cd150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff9932cc150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -1711,12 +1714,12 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fa4ccebae60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7fa4cb6772d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-Decoder              @0x7ff994ab9e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7ff9932764d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7fa4cb677310 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fa4cb66fc68 = []  (default: [])
-| | |-ExtraOutputs         @0x7fa4cb66fef0 = []  (default: [])
+| | |-EvtStore             @0x7ff993276510 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7ff99326d1b8 = []  (default: [])
+| | |-ExtraOutputs         @0x7ff99326d170 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -1728,10 +1731,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb6773d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb677410 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb66fdd0 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb66fd88 = []  (default: [])
+| | | |-DetStore          @0x7ff9932765d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff993276610 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff99326d050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff99326efc8 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -1751,25 +1754,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cbf21d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7ff993b20d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7fa4cb6a3d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9932a3f50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb6a3cd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42050 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddf38 = []  (default: [])
+| |-EvtStore                   @0x7ff9932a3ed0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd5f0 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddb90 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddf80 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddbd8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb6a3dd0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff9932a3fd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1782,16 +1785,16 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7fa4cb611f10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7fa4cb611f90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7fa4cb680ea8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7fa4cb680908 = []  (default: [])
+| | |-DetStore                           @0x7ff99321b150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7ff99321b1d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7ff99327c0e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7ff99327c290 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7fa4cbb834b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7ff9937864b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -1809,10 +1812,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb61d050 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb61d090 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb680680 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb6805f0 = []  (default: [])
+| | | |-DetStore          @0x7ff99321b250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99321b290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff99327c3b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff99327c368 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -1830,25 +1833,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cd35de90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7ff994f5ce90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7fa4cb5fcc50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9931fae50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb5fcbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42128 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddd88 = []  (default: [])
+| |-EvtStore                   @0x7ff9931fadd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd9e0 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddc20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe420e0 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddc68 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7fa4cb5fccd0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7ff9931faed0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -1862,10 +1865,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7fa4cb61d1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7fa4cb61d290 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7fa4cb625128 = []  (default: [])
-| | |-ExtraOutputs                            @0x7fa4cb625098 = []  (default: [])
+| | |-DetStore                                @0x7ff99321b3d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7ff99321b490 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7ff9932245f0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7ff9932245a8 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -1874,9 +1877,9 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7fa4cb624a70 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7ff993224050 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7fa4cb6250e0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7ff993224680 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -1893,25 +1896,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cf2b4b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7ff996eb3b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7fa4cb691c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993292e10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb691b90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42200 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dda28 = []  (default: [])
+| |-EvtStore                   @0x7ff993292d90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931ddcf8 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddd88 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddef0 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddd40 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb691c90 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff993292e90 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1925,13 +1928,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7fa4cb61d110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7ff99321b190 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7fa4cb61d390 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7fa4cb624128 = []  (default: [])
-| | |-ExtraOutputs            @0x7fa4cb624878 = []  (default: [])
+| | |-EvtStore                @0x7ff99321b5d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7ff993222cb0 = []  (default: [])
+| | |-ExtraOutputs            @0x7ff993222950 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -1959,25 +1962,25 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7fa4cbd4b380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7ff99394a380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7fa4cb677950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993276b50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb6778d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe422d8 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cbe42098 = []  (default: [])
+| |-EvtStore                   @0x7ff993276ad0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dde60 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddb00 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe42248 = []  (default: [])
+| |-NeededResources            @0x7ff9931dddd0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb6779d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff993276bd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -1990,13 +1993,13 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7fa4cf2b8860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7fa4cb622d00 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7ff996eb7860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7ff993a33790 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7fa4cb61d550 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cb61d210 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbe38f80 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbe38b48 = []  (default: [])
+| | |-DetStore          @0x7ff99321b690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7ff99321b510 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7ff993a324d0 = []  (default: [])
+| | |-ExtraOutputs      @0x7ff993a32c68 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2009,10 +2012,10 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7fa4cb61d350 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7fa4cb61d3d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7fa4cbe38950 = []  (default: [])
-| | | |-ExtraOutputs       @0x7fa4cbe38170 = []  (default: [])
+| | | |-DetStore           @0x7ff99321b550 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7ff99321b810 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7ff993a32050 = []  (default: [])
+| | | |-ExtraOutputs       @0x7ff993a32170 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2039,11 +2042,11 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7fa4cb61d250 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7fa4cb61d490 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb61d0d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cbe38368 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cbe38320 = []  (default: [])
+| | | |-CscCalibTool      @0x7ff99321b4d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7ff99321b450 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99321b410 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff993a323b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff993a32638 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2061,21 +2064,21 @@ Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ********
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbe57a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993a57d10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbe57a10 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42290 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cbe42170 = []  (default: [])
+| |-EvtStore                   @0x7ff993a57c90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931ddea8 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddef0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe42320 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddf38 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7fa4cb5d5410 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7ff9931de650 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
@@ -2118,24 +2121,24 @@ Py:Athena            INFO Save Config
 |-AuditStop                               = False
 |-Cardinality                             = 0
 |-ContinueEventloopOnFPE                  = False
-|-DetStore                   @0x7fa4cd101f10 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-DetStore                   @0x7ff994d00f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 |-Enable                                  = True
 |-ErrorCounter                            = 0
 |-ErrorMax                                = 1
-|-EvtStore                   @0x7fa4cd101e90 = ServiceHandle('StoreGateSvc')
-|-ExtraInputs                @0x7fa4cb5dd878 = []  (default: [])
-|-ExtraOutputs               @0x7fa4cb5dd908 = []  (default: [])
+|-EvtStore                   @0x7ff994d00e90 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7ff9931dd368 = []  (default: [])
+|-ExtraOutputs               @0x7ff9931dd758 = []  (default: [])
 |-FilterCircularDependencies              = True
 |-IgnoreFilterPassed                      = False
 |-IsIOBound                               = False
-|-Members                    @0x7fa4cb5dd488 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|-Members                    @0x7ff993229368 = ['Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
 |                                            (default: [])
 |-ModeOR                                  = False
 |-MonitorService                          = 'MonitorSvc'
-|-NeededResources            @0x7fa4cb5dd758 = []  (default: [])
+|-NeededResources            @0x7ff9931dd518 = []  (default: [])
 |-OutputLevel                             = 0
 |-RegisterForContextService               = False
-|-Sequential                 @0x7fa4cf20eb00 = True  (default: False)
+|-Sequential                 @0x7ff996e0db00 = True  (default: False)
 |-StopOverride                            = False
 |-TimeOut                                 = 0.0
 |-Timeline                                = True
@@ -2151,42 +2154,44 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbce0cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9938dcdd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbce0c50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5dd9e0 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dd998 = []  (default: [])
+| |-EvtStore                   @0x7ff9938dcd50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd830 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dd7e8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5dd950 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd7a0 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cc008718 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff993b97578 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
 | |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
-| |-RegionSelectionSvc         @0x7fa4cbce0d50 = ServiceHandle('RegSelSvc')
+| |-RegionSelectionSvc         @0x7ff9938dce50 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
 | |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
-| | |-AuditFinalize                  = False
-| | |-AuditInitialize                = False
-| | |-AuditReinitialize              = False
-| | |-AuditRestart                   = False
-| | |-AuditStart                     = False
-| | |-AuditStop                      = False
-| | |-AuditTools                     = False
-| | |-Decoder           @0x7fa4cc008810 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
-| | |-DetStore          @0x7fa4cbc4eb10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cbc4eb50 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbccb908 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbccb680 = []  (default: [])
-| | |-MonitorService                 = 'MonitorSvc'
-| | |-OutputLevel                    = 0
-| | |-RPCSec                         = 'StoreGateSvc+RPC_SECTORLOGIC'
-| | |-RdoLocation                    = 'StoreGateSvc+RPCPAD'
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7ff993c07620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7ff99384cc90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7ff99384cc50 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7ff9938cab00 = []  (default: [])
+| | |-ExtraOutputs           @0x7ff9938ca830 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel                         = 0
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey                = 'StoreGateSvc+'
+| | |-WriteOutRpcSectorLogic              = True
 | | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
 | | | |-AuditFinalize                    = False
 | | | |-AuditInitialize                  = False
@@ -2196,10 +2201,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStop                        = False
 | | | |-AuditTools                       = False
 | | | |-DataErrorPrintLimit              = 1000
-| | | |-DetStore            @0x7fa4cbc4ec10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore            @0x7fa4cbc4ec50 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs         @0x7fa4cbccb7a0 = []  (default: [])
-| | | |-ExtraOutputs        @0x7fa4cbccb758 = []  (default: [])
+| | | |-DetStore            @0x7ff99384cd10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7ff99384cd50 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7ff9938ca950 = []  (default: [])
+| | | |-ExtraOutputs        @0x7ff9938ca908 = []  (default: [])
 | | | |-MonitorService                   = 'MonitorSvc'
 | | | |-OutputLevel                      = 0
 | | | |-Sector13Data                     = False
@@ -2219,19 +2224,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbc31c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff99382dd90 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbc31c10 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5ddc20 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddcf8 = []  (default: [])
+| |-EvtStore                   @0x7ff99382dd10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd878 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dd908 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddc68 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd950 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cceba8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff994ab98c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
 | |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2243,12 +2248,12 @@ Py:Athena            INFO Save Config
 | | |-AuditStart                     = False
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
-| | |-Decoder           @0x7fa4cceba9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |-Decoder           @0x7ff994ab99b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
 | | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
-| | |-DetStore          @0x7fa4cbbb2190 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cbbb21d0 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbc7b908 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbc7b758 = []  (default: [])
+| | |-DetStore          @0x7ff99387c290 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7ff99387c2d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7ff993879ab8 = []  (default: [])
+| | |-ExtraOutputs      @0x7ff993879908 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputLevel                    = 0
 | | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
@@ -2260,10 +2265,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cbbb2290 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cbbb22d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cbc7b5a8 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cbc7b710 = []  (default: [])
+| | | |-DetStore          @0x7ff99387c390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99387c3d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff993879758 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff9938798c0 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ShowStatusWords                = False
@@ -2283,19 +2288,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbc9bed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993897fd0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbc9be50 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5ddd40 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dddd0 = []  (default: [])
+| |-EvtStore                   @0x7ff993897f50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd998 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931dda28 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddcb0 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd8c0 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cbdbae50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |-ProviderTool               @0x7ff9939b9e50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
 | |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2308,11 +2313,11 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CsmContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fa4ccebac80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
-| | |-DetStore             @0x7fa4cb6b6410 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore             @0x7fa4cb6b6450 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fa4cb7dfcf8 = []  (default: [])
-| | |-ExtraOutputs         @0x7fa4cb7dfb90 = []  (default: [])
+| | |-Decoder              @0x7ff994ab9c80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7ff9932b3610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7ff9932b3650 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7ff9933ddd88 = []  (default: [])
+| | |-ExtraOutputs         @0x7ff9933ddc20 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
@@ -2325,10 +2330,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb6b6510 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb6b6550 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb7dfc20 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb7dfbd8 = []  (default: [])
+| | | |-DetStore          @0x7ff9932b3710 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff9932b3750 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff9933ddcb0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff9933ddc68 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
@@ -2348,19 +2353,19 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbcc7e10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9938c6f10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbcc7d90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cb5dde18 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dde60 = []  (default: [])
+| |-EvtStore                   @0x7ff9938c6e90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dda70 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddab8 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5dd7a0 = []  (default: [])
+| |-NeededResources            @0x7ff9931dd638 = []  (default: [])
 | |-OutputLevel                             = 0
-| |-ProviderTool               @0x7fa4cb6cd150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |-ProviderTool               @0x7ff9932cc150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
 | |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
@@ -2373,12 +2378,12 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                         = False
 | | |-AuditTools                        = False
 | | |-CscContainerCacheKey              = 'StoreGateSvc+'
-| | |-Decoder              @0x7fa4ccebae60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
-| | |-DetStore             @0x7fa4cb6772d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-Decoder              @0x7ff994ab9e60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7ff9932764d0 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
-| | |-EvtStore             @0x7fa4cb677310 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs          @0x7fa4cb66fc68 = []  (default: [])
-| | |-ExtraOutputs         @0x7fa4cb66fef0 = []  (default: [])
+| | |-EvtStore             @0x7ff993276510 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7ff99326d1b8 = []  (default: [])
+| | |-ExtraOutputs         @0x7ff99326d170 = []  (default: [])
 | | |-MonitorService                    = 'MonitorSvc'
 | | |-OutputLevel                       = 0
 | | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
@@ -2390,10 +2395,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb6773d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb677410 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb66fdd0 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb66fd88 = []  (default: [])
+| | | |-DetStore          @0x7ff9932765d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff993276610 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff99326d050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff99326efc8 = []  (default: [])
 | | | |-IsCosmics                      = False
 | | | |-IsOldCosmics                   = False
 | | | |-MonitorService                 = 'MonitorSvc'
@@ -2413,25 +2418,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cbf21d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |-DecodingTool               @0x7ff993b20d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
 | |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
-| |-DetStore                   @0x7fa4cb6a3d50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9932a3f50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb6a3cd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42050 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddf38 = []  (default: [])
+| |-EvtStore                   @0x7ff9932a3ed0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd5f0 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddb90 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddf80 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddbd8 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb6a3dd0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff9932a3fd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2444,16 +2449,16 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                       = False
 | | |-AuditTools                                      = False
 | | |-DecodeData                                      = True
-| | |-DetStore                           @0x7fa4cb611f10 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                           @0x7fa4cb611f90 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                        @0x7fa4cb680ea8 = []  (default: [])
-| | |-ExtraOutputs                       @0x7fa4cb680908 = []  (default: [])
+| | |-DetStore                           @0x7ff99321b150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7ff99321b1d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7ff99327c0e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7ff99327c290 = []  (default: [])
 | | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
 | | |-MonitorService                                  = 'MonitorSvc'
 | | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
 | | |-OutputLevel                                     = 0
 | | |-RPCInfoFromDb                                   = False
-| | |-RdoDecoderTool                     @0x7fa4cbb834b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |-RdoDecoderTool                     @0x7ff9937864b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
 | | |                                                    (default: 'Muon::RpcRDO_Decoder')
 | | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
 | | |-etaphi_coincidenceTime                          = 20.0
@@ -2471,10 +2476,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-DetStore          @0x7fa4cb61d050 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb61d090 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cb680680 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cb6805f0 = []  (default: [])
+| | | |-DetStore          @0x7ff99321b250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99321b290 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff99327c3b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff99327c368 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
@@ -2492,25 +2497,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cd35de90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |-DecodingTool               @0x7ff994f5ce90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
 | |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
-| |-DetStore                   @0x7fa4cb5fcc50 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff9931fae50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb5fcbd0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42128 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5ddd88 = []  (default: [])
+| |-EvtStore                   @0x7ff9931fadd0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dd9e0 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddc20 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe420e0 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddc68 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectorSvc          @0x7fa4cb5fccd0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7ff9931faed0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Setting                                 = 0
@@ -2524,10 +2529,10 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                                            = False
 | | |-AuditTools                                           = False
 | | |-DecodeData                                           = True
-| | |-DetStore                                @0x7fa4cb61d1d0 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore                                @0x7fa4cb61d290 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs                             @0x7fa4cb625128 = []  (default: [])
-| | |-ExtraOutputs                            @0x7fa4cb625098 = []  (default: [])
+| | |-DetStore                                @0x7ff99321b3d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7ff99321b490 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7ff9932245f0 = []  (default: [])
+| | |-ExtraOutputs                            @0x7ff9932245a8 = []  (default: [])
 | | |-FillCoinData                                         = True
 | | |-MonitorService                                       = 'MonitorSvc'
 | | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
@@ -2536,9 +2541,9 @@ Py:Athena            INFO Save Config
 | | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
 | | |-TGCHashIdOffset                                      = 26000
 | | |-dropPrdsWithZeroWidth                                = True
-| | |-outputCoinKey                           @0x7fa4cb624a70 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-outputCoinKey                           @0x7ff993224050 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
-| | |-prepDataKeys                            @0x7fa4cb6250e0 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |-prepDataKeys                            @0x7ff993224680 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
 | | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
 | | |-show_warning_level_invalid_A09_SSW6_hit              = False
 | | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
@@ -2555,25 +2560,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DecodingTool               @0x7fa4cf2b4b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |-DecodingTool               @0x7ff996eb3b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
 | |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
-| |-DetStore                   @0x7fa4cb691c10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993292e10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb691b90 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42200 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cb5dda28 = []  (default: [])
+| |-EvtStore                   @0x7ff993292d90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931ddcf8 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddd88 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cb5ddef0 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddd40 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb691c90 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff993292e90 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2587,13 +2592,13 @@ Py:Athena            INFO Save Config
 | | |-AuditTools                           = False
 | | |-CalibratePrepData                    = True
 | | |-DecodeData                           = True
-| | |-DetStore                @0x7fa4cb61d110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DetStore                @0x7ff99321b190 = ServiceHandle('StoreGateSvc/DetectorStore')
 | | |-DiscardSecondaryHitTwin              = False
 | | |-DoPropagationCorrection              = False
 | | |-DoTofCorrection                      = True
-| | |-EvtStore                @0x7fa4cb61d390 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs             @0x7fa4cb624128 = []  (default: [])
-| | |-ExtraOutputs            @0x7fa4cb624878 = []  (default: [])
+| | |-EvtStore                @0x7ff99321b5d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7ff993222cb0 = []  (default: [])
+| | |-ExtraOutputs            @0x7ff993222950 = []  (default: [])
 | | |-MonitorService                       = 'MonitorSvc'
 | | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
 | | |-OutputLevel                          = 0
@@ -2621,25 +2626,25 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-CscRdoToCscPrepDataTool    @0x7fa4cbd4b380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |-CscRdoToCscPrepDataTool    @0x7ff99394a380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 | |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
-| |-DetStore                   @0x7fa4cb677950 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993276b50 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-DoSeededDecoding                        = False
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cb6778d0 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe422d8 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cbe42098 = []  (default: [])
+| |-EvtStore                   @0x7ff993276ad0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931dde60 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddb00 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe42248 = []  (default: [])
+| |-NeededResources            @0x7ff9931dddd0 = []  (default: [])
 | |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
 | |-OutputLevel                             = 0
 | |-PrintInputRdo                           = False
-| |-PrintPrepData              @0x7fa4cf20eb20 = False  (default: False)
-| |-RegionSelectionSvc         @0x7fa4cb6779d0 = ServiceHandle('RegSelSvc')
+| |-PrintPrepData              @0x7ff996e0db20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7ff993276bd0 = ServiceHandle('RegSelSvc')
 | |-RegisterForContextService               = False
 | |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
 | |-Timeline                                = True
@@ -2652,13 +2657,13 @@ Py:Athena            INFO Save Config
 | | |-AuditStop                      = False
 | | |-AuditTools                     = False
 | | |-CSCHashIdOffset                = 22000
-| | |-CscCalibTool      @0x7fa4cf2b8860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
-| | |-CscRdoDecoderTool @0x7fa4cb622d00 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-CscCalibTool      @0x7ff996eb7860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7ff993a33790 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
 | | |-DecodeData                     = True
-| | |-DetStore          @0x7fa4cb61d550 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | |-EvtStore          @0x7fa4cb61d210 = ServiceHandle('StoreGateSvc')
-| | |-ExtraInputs       @0x7fa4cbe38f80 = []  (default: [])
-| | |-ExtraOutputs      @0x7fa4cbe38b48 = []  (default: [])
+| | |-DetStore          @0x7ff99321b690 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7ff99321b510 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7ff993a324d0 = []  (default: [])
+| | |-ExtraOutputs      @0x7ff993a32c68 = []  (default: [])
 | | |-MonitorService                 = 'MonitorSvc'
 | | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
 | | |-OutputLevel                    = 0
@@ -2671,10 +2676,10 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                      = False
 | | | |-AuditStop                       = False
 | | | |-AuditTools                      = False
-| | | |-DetStore           @0x7fa4cb61d350 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore           @0x7fa4cb61d3d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs        @0x7fa4cbe38950 = []  (default: [])
-| | | |-ExtraOutputs       @0x7fa4cbe38170 = []  (default: [])
+| | | |-DetStore           @0x7ff99321b550 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7ff99321b810 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7ff993a32050 = []  (default: [])
+| | | |-ExtraOutputs       @0x7ff993a32170 = []  (default: [])
 | | | |-IsOnline                        = True
 | | | |-Latency                         = 100.0
 | | | |-MonitorService                  = 'MonitorSvc'
@@ -2701,11 +2706,11 @@ Py:Athena            INFO Save Config
 | | | |-AuditStart                     = False
 | | | |-AuditStop                      = False
 | | | |-AuditTools                     = False
-| | | |-CscCalibTool      @0x7fa4cb61d250 = PublicToolHandle('CscCalibTool')
-| | | |-DetStore          @0x7fa4cb61d490 = ServiceHandle('StoreGateSvc/DetectorStore')
-| | | |-EvtStore          @0x7fa4cb61d0d0 = ServiceHandle('StoreGateSvc')
-| | | |-ExtraInputs       @0x7fa4cbe38368 = []  (default: [])
-| | | |-ExtraOutputs      @0x7fa4cbe38320 = []  (default: [])
+| | | |-CscCalibTool      @0x7ff99321b4d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7ff99321b450 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7ff99321b410 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7ff993a323b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7ff993a32638 = []  (default: [])
 | | | |-MonitorService                 = 'MonitorSvc'
 | | | |-OutputLevel                    = 0
 | | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
@@ -2723,28 +2728,28 @@ Py:Athena            INFO Save Config
 | |-AuditStart                              = False
 | |-AuditStop                               = False
 | |-Cardinality                             = 1
-| |-DetStore                   @0x7fa4cbe57a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DetStore                   @0x7ff993a57d10 = ServiceHandle('StoreGateSvc/DetectorStore')
 | |-Enable                                  = True
 | |-ErrorCounter                            = 0
 | |-ErrorMax                                = 1
-| |-EvtStore                   @0x7fa4cbe57a10 = ServiceHandle('StoreGateSvc')
-| |-ExtraInputs                @0x7fa4cbe42290 = []  (default: [])
-| |-ExtraOutputs               @0x7fa4cbe42170 = []  (default: [])
+| |-EvtStore                   @0x7ff993a57c90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7ff9931ddea8 = []  (default: [])
+| |-ExtraOutputs               @0x7ff9931ddef0 = []  (default: [])
 | |-FilterCircularDependencies              = True
 | |-IsIOBound                               = False
 | |-MonitorService                          = 'MonitorSvc'
-| |-NeededResources            @0x7fa4cbe42320 = []  (default: [])
+| |-NeededResources            @0x7ff9931ddf38 = []  (default: [])
 | |-OutputLevel                             = 0
 | |-RegisterForContextService               = False
 | |-Timeline                                = True
-| |-cluster_builder            @0x7fa4cb5d5410 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |-cluster_builder            @0x7ff9931de650 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
 | |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
 | \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
 \----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
 
 JOs reading stage finished, launching Athena from pickle file
 
-Thu Mar 21 08:20:39 CET 2019
+Thu Mar 21 14:51:17 CET 2019
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
@@ -2754,13 +2759,13 @@ Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and
 Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO now loading MuonRdoDecode.pkl  ... 
-Py:ConfigurableDb    INFO Read module info for 5465 configurables from 7 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5467 configurables from 8 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
-                                          running on lxplus047.cern.ch on Thu Mar 21 08:20:56 2019
+                                          running on lxplus126.cern.ch on Thu Mar 21 14:51:35 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -2788,8 +2793,8 @@ PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.x
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-19T2153/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus047.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus126.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -3071,7 +3076,7 @@ MuGM:MuonFactory     INFO  *****************************************************
 
 MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
 MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
-GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.88S
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.64S
 GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
 GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
 GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
@@ -3120,7 +3125,7 @@ TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is
 MuonTGC_CablingSvc   INFO for 1/12 sector initialize
 ToolSvc.TGCCabl...   INFO initialize
 ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x16680100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x161e2100]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
 TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
 MdtRawDataProvider   INFO MdtRawDataProvider::initialize
 ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
@@ -3170,14 +3175,14 @@ ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for
 CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
 MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
 ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_PED]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_NOISE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_PSLOPE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_STAT]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_RMS]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_FTHOLD]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_T0BASE]
-IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1bcc1a00]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b828700]+259 bound to CondAttrListCollection[CSC_T0PHASE]
 CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
@@ -3380,34 +3385,34 @@ IncidentProcAlg2     INFO Finalize
 AtlasFieldSvc        INFO finalize() successful
 EventInfoByteSt...   INFO finalize 
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.20 ))s
-IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.93 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.32 ))s
-IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.79 ))s
-IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 1/1 objs/chan/bytes 2372/1186/2251209 ((     0.29 ))s
-IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 1/1 objs/chan/bytes 1186/1186/1374284 ((     1.03 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.15 ))s
-IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.80 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     1.17 ))s
-IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.30 ))s
-IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.07 ))s
-IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     1.08 ))s
-IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.13 ))s
-IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.77 ))s
-IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.13 ))s
-IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.94 ))s
-IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.94 ))s
-IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.14 ))s
-IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.76 ))s
-IOVDbSvc             INFO  bytes in ((     10.93 ))s
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.14 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.13 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     1.21 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.04 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 1/1 objs/chan/bytes 2372/1186/2251209 ((     1.54 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 1/1 objs/chan/bytes 1186/1186/1374284 ((     0.11 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.93 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.04 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.17 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.17 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     1.05 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.16 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.04 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.15 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.78 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     1.03 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     1.95 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.10 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.53 ))s
+IOVDbSvc             INFO  bytes in ((     10.27 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.11 ))s
-IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     2.41 ))s
-IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.32 ))s
-IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.89 ))s
-IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.93 ))s
-IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.07 ))s
-IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.20 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.25 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     1.31 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.64 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     4.75 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.13 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     1.05 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.14 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.ByteStr...   INFO in finalize()
@@ -3432,7 +3437,7 @@ ToolSvc.TGCCabl...   INFO finalize
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
 cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 20
-ChronoStatSvc        INFO Time User   : Tot= 9.85  [s]                                             #=  1
+ChronoStatSvc        INFO Time User   : Tot= 9.42  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
index bd2f1d9b430e..2a615093cf21 100644
--- a/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
+++ b/MuonSpectrometer/MuonConfig/share/MuonDataDecodeTest_Cache.ref
@@ -274,13 +274,4487 @@ Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
 Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
 Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
-Traceback (most recent call last):
-  File "<string>", line 1, in <module>
-  File "/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/python/MuonConfig/MuonRdoDecodeConfig.py", line 184, in muonRdoDecodeTestData
-    rpcdecodingAcc, rpcdecodingAlg = RpcBytestreamDecodeCfg( ConfigFlags, forTrigger ) 
-  File "/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/python/MuonConfig/MuonBytestreamDecodeConfig.py", line 59, in RpcBytestreamDecodeCfg
-    MuonRpcRawDataProviderTool.RpcContainerCacheKey   = MuonCacheNames.RpcCache
-AttributeError: 'Muon__RPC_RawDataProviderTool' object has no attribute 'RpcContainerCacheKey'
-Exception RuntimeError: RuntimeError('ComponentAccumulator was not merged!',) in <bound method ComponentAccumulator.__del__ of <AthenaConfiguration.ComponentAccumulator.ComponentAccumulator object at 0x7f7b09b83e50>> ignored
-Exception RuntimeError: RuntimeError('ComponentAccumulator was not merged!',) in <bound method ComponentAccumulator.__del__ of <AthenaConfiguration.ComponentAccumulator.ComponentAccumulator object at 0x7f7b0a9f1b50>> ignored
-ERROR in configuration generation stage, stopping
+Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
+Py:Athena            INFO Importing MuonCnvExample.MuonCnvUtils
+Py:Athena            INFO Importing MagFieldServices.MagFieldServicesConfig
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+dynamically loading the flag Muon
+Flag Name                                : Value
+Beam.BunchSpacing                        : 25
+Beam.Energy                              : [function]
+Beam.NumberOfCollisions                  : [function]
+Beam.Type                                : [function]
+Beam.estimatedLuminosity                 : [function]
+Calo.Cell.doLArHVCorr                    : False
+Calo.Noise.fixedLumiForNoise             : -1
+Calo.Noise.useCaloNoiseLumi              : True
+Calo.TopoCluster.doTopoClusterLocalCalib : True
+Calo.TopoCluster.doTreatEnergyCutAsAbsol : False
+Calo.TopoCluster.doTwoGaussianNoise      : True
+Common.Project                           : 'Athena'
+Common.isOnline                          : False
+Concurrency.NumConcurrentEvents          : 0
+Concurrency.NumProcs                     : 0
+Concurrency.NumThreads                   : 0
+Detector.Geometry                        : [function]
+Detector.GeometryAFP                     : False
+Detector.GeometryALFA                    : False
+Detector.GeometryBCM                     : False
+Detector.GeometryBpipe                   : False
+Detector.GeometryCSC                     : False
+Detector.GeometryCalo                    : [function]
+Detector.GeometryCavern                  : False
+Detector.GeometryDBM                     : False
+Detector.GeometryForward                 : [function]
+Detector.GeometryFwdRegion               : False
+Detector.GeometryID                      : [function]
+Detector.GeometryLAr                     : False
+Detector.GeometryLucid                   : False
+Detector.GeometryMDT                     : False
+Detector.GeometryMM                      : False
+Detector.GeometryMuon                    : [function]
+Detector.GeometryPixel                   : False
+Detector.GeometryRPC                     : False
+Detector.GeometrySCT                     : False
+Detector.GeometryTGC                     : False
+Detector.GeometryTRT                     : False
+Detector.GeometryTile                    : False
+Detector.GeometryZDC                     : False
+Detector.GeometrysTGC                    : False
+Detector.Overlay                         : [function]
+Detector.OverlayBCM                      : False
+Detector.OverlayCSC                      : False
+Detector.OverlayCalo                     : [function]
+Detector.OverlayDBM                      : False
+Detector.OverlayID                       : [function]
+Detector.OverlayLAr                      : False
+Detector.OverlayMDT                      : False
+Detector.OverlayMM                       : False
+Detector.OverlayMuon                     : [function]
+Detector.OverlayPixel                    : False
+Detector.OverlayRPC                      : False
+Detector.OverlaySCT                      : False
+Detector.OverlayTGC                      : False
+Detector.OverlayTRT                      : False
+Detector.OverlayTile                     : False
+Detector.OverlaysTGC                     : False
+Detector.Simulate                        : False
+Detector.SimulateAFP                     : False
+Detector.SimulateALFA                    : False
+Detector.SimulateBCM                     : False
+Detector.SimulateBpipe                   : False
+Detector.SimulateCSC                     : False
+Detector.SimulateCalo                    : False
+Detector.SimulateCavern                  : False
+Detector.SimulateDBM                     : False
+Detector.SimulateForward                 : False
+Detector.SimulateFwdRegion               : False
+Detector.SimulateHGTD                    : False
+Detector.SimulateID                      : False
+Detector.SimulateLAr                     : False
+Detector.SimulateLucid                   : False
+Detector.SimulateMDT                     : False
+Detector.SimulateMM                      : False
+Detector.SimulateMuon                    : False
+Detector.SimulatePixel                   : False
+Detector.SimulateRPC                     : False
+Detector.SimulateSCT                     : False
+Detector.SimulateTGC                     : False
+Detector.SimulateTRT                     : False
+Detector.SimulateTile                    : False
+Detector.SimulateZDC                     : False
+Detector.SimulatesTGC                    : False
+GeoModel.Align.Dynamic                   : [function]
+GeoModel.AtlasVersion                    : 'ATLAS-R2-2016-01-00-01'
+GeoModel.IBLLayout                       : 'UNDEFINED'
+GeoModel.Layout                          : 'atlas'
+GeoModel.Run                             : 'RUN2'
+GeoModel.StripGeoType                    : 'GMX'
+GeoModel.Type                            : 'UNDEFINED'
+IOVDb.DatabaseInstance                   : 'CONDBR2'
+IOVDb.GlobalTag                          : 'CONDBR2-BLKPA-2018-13'
+Input.Files                              : ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1']
+Input.ProjectName                        : 'data17_13TeV'
+Input.RunNumber                          : [function]
+Input.isMC                               : False
+Muon.Align.UseALines                     : False
+Muon.Align.UseAsBuilt                    : False
+Muon.Align.UseBLines                     : 'none'
+Muon.Align.UseILines                     : False
+Muon.Calib.CscF001FromLocalFile          : False
+Muon.Calib.CscNoiseFromLocalFile         : False
+Muon.Calib.CscPSlopeFromLocalFile        : False
+Muon.Calib.CscPedFromLocalFile           : False
+Muon.Calib.CscRmsFromLocalFile           : False
+Muon.Calib.CscStatusFromLocalFile        : False
+Muon.Calib.CscT0BaseFromLocalFile        : False
+Muon.Calib.CscT0PhaseFromLocalFile       : False
+Muon.Calib.EventTag                      : 'MoMu'
+Muon.Calib.applyRtScaling                : True
+Muon.Calib.correctMdtRtForBField         : False
+Muon.Calib.correctMdtRtForTimeSlewing    : False
+Muon.Calib.correctMdtRtWireSag           : False
+Muon.Calib.mdtCalibrationSource          : 'MDT'
+Muon.Calib.mdtMode                       : 'ntuple'
+Muon.Calib.mdtPropagationSpeedBeta       : 0.85
+Muon.Calib.readMDTCalibFromBlob          : True
+Muon.Calib.useMLRt                       : True
+Muon.Chi2NDofCut                         : 20.0
+Muon.createTrackParticles                : True
+Muon.doCSCs                              : True
+Muon.doDigitization                      : True
+Muon.doFastDigitization                  : False
+Muon.doMDTs                              : True
+Muon.doMSVertex                          : False
+Muon.doMicromegas                        : False
+Muon.doPseudoTracking                    : False
+Muon.doRPCClusterSegmentFinding          : False
+Muon.doRPCs                              : True
+Muon.doSegmentT0Fit                      : False
+Muon.doTGCClusterSegmentFinding          : False
+Muon.doTGCs                              : True
+Muon.dosTGCs                             : False
+Muon.enableCurvedSegmentFinding          : False
+Muon.enableErrorTuning                   : False
+Muon.optimiseMomentumResolutionUsingChi2 : False
+Muon.patternsOnly                        : False
+Muon.prdToxAOD                           : False
+Muon.printSummary                        : False
+Muon.refinementTool                      : 'Moore'
+Muon.rpcRawToxAOD                        : False
+Muon.segmentOrigin                       : 'Muon'
+Muon.straightLineFitMomentum             : 2000.0
+Muon.strategy                            : []
+Muon.trackBuilder                        : 'Moore'
+Muon.updateSegmentSecondCoordinate       : [function]
+Muon.useAlignmentCorrections             : False
+Muon.useLooseErrorTuning                 : False
+Muon.useSegmentMatching                  : [function]
+Muon.useTGCPriorNextBC                   : False
+Muon.useTrackSegmentMatching             : True
+Muon.useWireSagCorrections               : False
+Output.AODFileName                       : 'myAOD.pool.root'
+Output.ESDFileName                       : 'myESD.pool.root'
+Output.EVNTFileName                      : 'myEVNT.pool.root'
+Output.HISTFileName                      : 'myHIST.root'
+Output.HITSFileName                      : 'myHITS.pool.root'
+Output.RDOFileName                       : 'myROD.pool.root'
+Output.doESD                             : False
+Random.Engine                            : 'dSFMT'
+Scheduler.CheckDependencies              : True
+Scheduler.ShowControlFlow                : True
+Scheduler.ShowDataDeps                   : True
+Scheduler.ShowDataFlow                   : True
+Flag categories that can be loaded dynamically
+Category        :                 Generator name : Defined in
+DQ              :                           __dq : AthenaConfiguration/AllConfigFlags.py
+Egamma          :                       __egamma : AthenaConfiguration/AllConfigFlags.py
+LAr             :                          __lar : AthenaConfiguration/AllConfigFlags.py
+Sim             :                   __simulation : AthenaConfiguration/AllConfigFlags.py
+Trigger         :                      __trigger : AthenaConfiguration/AllConfigFlags.py
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup...
+Py:ConfigurableDb   DEBUG loading confDb files...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigUpgradeTest.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libTrigL2MuonSA.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/WorkDir.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/afs/cern.ch/user/s/shhayash/workspace/Development/GIT2019-03-20/build/x86_64-slc6-gcc8-opt/lib/libMuonRPC_CnvTools.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-18T2151/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Athena.confdb]...
+Py:ConfigurableDb   DEBUG 	-loading [/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/GAUDI/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/lib/Gaudi.confdb]...
+Py:ConfigurableDb   DEBUG loading confDb files... [DONE]
+Py:ConfigurableDb   DEBUG loaded 1103 confDb packages
+Py:ConfigurableDb    INFO Read module info for 5467 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb   DEBUG : Found configurable <class 'GaudiCoreSvc.GaudiCoreSvcConf.MessageSvc'> in module GaudiCoreSvc.GaudiCoreSvcConf
+Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'PoolSvc.PoolSvcConf.PoolSvc'> in module PoolSvc.PoolSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaServices.AthenaServicesConf.MetaDataSvc'> in module AthenaServices.AthenaServicesConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'StoreGate.StoreGateConf.StoreGateSvc'> in module StoreGate.StoreGateConf
+Py:loadBasicAthenaPool   DEBUG Loading basic services for AthenaPool... [DONE]
+Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDbSvc...
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
+Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt...
+EventInfoMgtInit: Got release version  Athena-22.0.1
+Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.EventPersistencySvc) ... dupe ignored
+Py:ConfigurableDb   DEBUG : Found configurable <class 'SGComps.SGCompsConf.ProxyProviderSvc'> in module SGComps.SGCompsConf
+Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.ProxyProviderSvc) ... dupe ignored
+Py:loadBasicEventInfoMgt   DEBUG Loading basic services for EventInfoMgt... [DONE]
+Py:loadBasicIOVDb   DEBUG Loading basic services for IOVDb... [DONE]
+Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
+Py:Configurable     ERROR attempt to add a duplicate (ServiceManager.PoolSvc) ... dupe ignored
+Py:IOVDbSvc.CondDB   DEBUG Loading basic services for CondDBSetup... [DONE]
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component ROBDataProviderSvc/ROBDataProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ROBDataProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component RPCcablingServerSvc/RPCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonRPC_CablingSvc/MuonRPC_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component RPCCablingDbTool/RPCCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonRPC_CnvTools.MuonRPC_CnvToolsConf.Muon__RpcRDO_Decoder'> in module MuonRPC_CnvTools.MuonRPC_CnvToolsConf
+Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component RPCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonRPC_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.RPCCablingDbTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component LVL1TGC::TGCRecRoiSvc/LVL1TGC::TGCRecRoiSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TGCcablingServerSvc/TGCcablingServerSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component LVL1TGC::TGCRecRoiSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TGCcablingServerSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingAlg/MuonMDT_CablingAlg to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonMDT_CablingSvc/MuonMDT_CablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MDTCablingDbTool/MDTCablingDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component AthenaPoolCnvSvc/AthenaPoolCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component MagField::AtlasFieldSvc/AtlasFieldSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationDbSvc/MdtCalibrationDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MdtCalibrationSvc/MdtCalibrationSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingAlg
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MuonMDT_CablingSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AtlasFieldSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component MdtCalibrationSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MDTCablingDbTool
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.MdtCalibDbTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CSCcablingSvc/CSCcablingSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Adding component CondInputLoader/CondInputLoader to the job
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component IOVDbSvc/IOVDbSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component PoolSvc/PoolSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component CondSvc/CondSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Adding component DBReplicaSvc/DBReplicaSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component GeoModelSvc/GeoModelSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component DetDescrCnvSvc/DetDescrCnvSvc to the job
+Py:ComponentAccumulator   DEBUG Adding component EvtPersistencySvc/EventPersistencySvc to the job
+Py:ComponentAccumulator   DEBUG Adding component TagInfoMgr/TagInfoMgr to the job
+Py:ComponentAccumulator   DEBUG Adding component ProxyProviderSvc/ProxyProviderSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Adding component Muon::MuonIdHelperTool/Muon::MuonIdHelperTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ConfigurableDb   DEBUG : Found configurable <class 'MuonCSC_CnvTools.MuonCSC_CnvToolsConf.Muon__CscRDO_Decoder'> in module MuonCSC_CnvTools.MuonCSC_CnvToolsConf
+Py:ConfigurableDb   DEBUG : Found configurable <class 'CscCalibTools.CscCalibToolsConf.CscCalibTool'> in module CscCalibTools.CscCalibToolsConf
+Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondInputLoader
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component GeoModelSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DetDescrCnvSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component EventPersistencySvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component TagInfoMgr
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ProxyProviderSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CSCcablingSvc
+Py:ComponentAccumulator   DEBUG Adding component MuonCalib::CscCoolStrSvc/MuonCalib::CscCoolStrSvc to the job
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component IOVDbSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component PoolSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component CondSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component DBReplicaSvc
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component ToolSvc.Muon::MuonIdHelperTool
+Py:ComponentAccumulator   DEBUG Adding component Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ComponentAccumulator   DEBUG Adding component CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool to the job
+Py:ConfigurableDb   DEBUG : Found configurable <class 'AthenaPoolCnvSvc.AthenaPoolCnvSvcConf.AthenaPoolCnvSvc'> in module AthenaPoolCnvSvc.AthenaPoolCnvSvcConf
+Py:ComponentAccumulator   DEBUG Reconciled configuration of component AthenaPoolCnvSvc
+Py:Athena            INFO Print Config
+Py:ComponentAccumulator    INFO Event Inputs
+Py:ComponentAccumulator    INFO set([])
+Py:ComponentAccumulator    INFO Event Algorithm Sequences
+Py:ComponentAccumulator    INFO /***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f8924f55ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7f8924f55e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f89234c9098 = []  (default: [])
+|-ExtraOutputs               @0x7f89234c9128 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7f8923421bd8 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f89234c9050 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7f8927062b00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7f8923e7e840 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f8923d5d150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DisableViewWarning                      = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d5d0d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9290 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9170 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7f8923e7e3f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c91b8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7f8923e7e450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f8923e7e480 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
+| \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923da8390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding           @0x7f8927062b00 = True  (default: False)
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923da8310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9248 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9200 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9368 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923de5578 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f8923da8410 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                       @0x7f8925e720c0 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7f8923e5c620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7f8923b22bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7f8923b22c10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7f8923b21950 = []  (default: [])
+| | |-ExtraOutputs           @0x7f8923b217e8 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel            @  0x20de1c0 = 2  (default: 0)
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey   @0x7f8923e7e450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| | |-WriteOutRpcSectorLogic @0x7f8927062b20 = False  (default: True)
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f8923b22cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f8923b22d10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f8923b21878 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f8923b21830 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923db7350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923db72d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9560 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9638 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c95a8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8924d0d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f8924d0d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f8923a50250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f8923a50290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f8923acce60 = []  (default: [])
+| | |-ExtraOutputs      @0x7f8923acccb0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8923a50350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8923a50390 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f8923accb00 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923accc68 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923d9c590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d9c510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9680 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9710 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c95f0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923c0ee50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7f8923e7e3f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f8924d0dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f89235485d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f8923548610 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f892354c128 = []  (default: [])
+| | |-ExtraOutputs         @0x7f892354c098 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x20de1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f89235486d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8923548710 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f892354c050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923672fc8 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923d93a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d939d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c97a0 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c96c8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c94d0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923561150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7f8923e7e840 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f8924d0de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f8923509490 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f89235094d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f892350a3b0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f892350a6c8 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x20de1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8923509590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89235095d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f892350a4d0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f892350a488 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8923cf7d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f8923538f10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923538e90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9488 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c98c0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c97e8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923538f90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f89234b1110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f89234b1190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f89235140e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f8923514290 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f89239da4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f89234b1210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89234b1250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f89235143b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923514368 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f89251b3e90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f8923490e10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923490d90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9758 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9908 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9950 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f8923490e90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f89234b1390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f89234b1450 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f89234b9b48 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f89234b9b00 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f89234b95a8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f89234b9bd8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8927108b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f8923528dd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923528d50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c99e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9a70 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9a28 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923528e50 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7f89234b12d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f89234b1290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f89234b88c0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f89234b8b48 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f8923b9e380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f8923509b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923509a90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9b48 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9830 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9ab8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923509b90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f892710c860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f89234b2c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7f89234b1610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f89234b13d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f89234c8c68 = []  (default: [])
+| | |-ExtraOutputs      @0x7f89234c89e0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f89234b1510 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f89234b1550 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f89234c83f8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f89234c8050 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f89234b15d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f89234b1650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89234b1590 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f89234c8440 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f89234c84d0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f89234e9c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f89234e9c10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9b90 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9bd8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9c20 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f8923427610 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+Py:ComponentAccumulator    INFO Condition Algorithms
+Py:ComponentAccumulator    INFO ['CondInputLoader', 'MuonMDT_CablingAlg']
+Py:ComponentAccumulator    INFO Services
+Py:ComponentAccumulator    INFO ['EventSelector', 'ByteStreamInputSvc', 'EventPersistencySvc', 'ByteStreamCnvSvc', 'ROBDataProviderSvc', 'ByteStreamAddressProviderSvc', 'MetaDataStore', 'InputMetaDataStore', 'MetaDataSvc', 'ProxyProviderSvc', 'ByteStreamAttListMetadataSvc', 'GeoModelSvc', 'DetDescrCnvSvc', 'TagInfoMgr', 'RPCcablingServerSvc', 'IOVDbSvc', 'PoolSvc', 'CondSvc', 'DBReplicaSvc', 'MuonRPC_CablingSvc', 'LVL1TGC::TGCRecRoiSvc', 'TGCcablingServerSvc', 'AthenaPoolCnvSvc', 'MuonMDT_CablingSvc', 'AtlasFieldSvc', 'MdtCalibrationDbSvc', 'MdtCalibrationSvc', 'CSCcablingSvc', 'MuonCalib::CscCoolStrSvc']
+Py:ComponentAccumulator    INFO Outputs
+Py:ComponentAccumulator    INFO {}
+Py:ComponentAccumulator    INFO Public Tools
+Py:ComponentAccumulator    INFO [
+Py:ComponentAccumulator    INFO   IOVDbMetaDataTool/IOVDbMetaDataTool,
+Py:ComponentAccumulator    INFO   ByteStreamMetadataTool/ByteStreamMetadataTool,
+Py:ComponentAccumulator    INFO   Muon::MuonIdHelperTool/Muon::MuonIdHelperTool,
+Py:ComponentAccumulator    INFO   RPCCablingDbTool/RPCCablingDbTool,
+Py:ComponentAccumulator    INFO   Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   MDTCablingDbTool/MDTCablingDbTool,
+Py:ComponentAccumulator    INFO   MuonCalib::MdtCalibDbCoolStrTool/MdtCalibDbTool,
+Py:ComponentAccumulator    INFO   Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool,
+Py:ComponentAccumulator    INFO   Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool,
+Py:ComponentAccumulator    INFO   Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool,
+Py:ComponentAccumulator    INFO   CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool,
+Py:ComponentAccumulator    INFO ]
+Py:Athena            INFO Save Config
+/***** Algorithm AthSequencer/AthAlgSeq ************************************************************
+|-Atomic                                  = False
+|-AuditAlgorithms                         = False
+|-AuditBeginRun                           = False
+|-AuditEndRun                             = False
+|-AuditExecute                            = False
+|-AuditFinalize                           = False
+|-AuditInitialize                         = False
+|-AuditReinitialize                       = False
+|-AuditRestart                            = False
+|-AuditStart                              = False
+|-AuditStop                               = False
+|-Cardinality                             = 0
+|-ContinueEventloopOnFPE                  = False
+|-DetStore                   @0x7f8924f55ed0 = ServiceHandle('StoreGateSvc/DetectorStore')
+|-Enable                                  = True
+|-ErrorCounter                            = 0
+|-ErrorMax                                = 1
+|-EvtStore                   @0x7f8924f55e50 = ServiceHandle('StoreGateSvc')
+|-ExtraInputs                @0x7f89234c9098 = []  (default: [])
+|-ExtraOutputs               @0x7f89234c9128 = []  (default: [])
+|-FilterCircularDependencies              = True
+|-IgnoreFilterPassed                      = False
+|-IsIOBound                               = False
+|-Members                    @0x7f8923421c68 = ['MuonCacheCreator/MuonCacheCreator', 'Muon::RpcRawDataProvider/RpcRawDataProvider', 'Muon::TgcRawDataProvider/TgcRawDataProvider', 'Muon::MdtRawDataProvider/MdtRawDataProvider', 'Muon::CscRawDataProvider/CscRawDataProvider', 'RpcRdoToRpcPrepData/RpcRdoToRpcPrepData', 'TgcRdoToTgcPrepData/TgcRdoToTgcPrepData', 'MdtRdoToMdtPrepData/MdtRdoToMdtPrepData', 'CscRdoToCscPrepData/CscRdoToCscPrepData', 'CscThresholdClusterBuilder/CscThesholdClusterBuilder']
+|                                            (default: [])
+|-ModeOR                                  = False
+|-MonitorService                          = 'MonitorSvc'
+|-NeededResources            @0x7f89234c9050 = []  (default: [])
+|-OutputLevel                             = 0
+|-RegisterForContextService               = False
+|-Sequential                 @0x7f8927062b00 = True  (default: False)
+|-StopOverride                            = False
+|-TimeOut                                 = 0.0
+|-Timeline                                = True
+|=/***** Algorithm MuonCacheCreator/MuonCacheCreator *************************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 0
+| |-CscCacheKey                @0x7f8923e7e840 = 'CscCache'  (default: 'StoreGateSvc+')
+| |-DetStore                   @0x7f8923d5d150 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DisableViewWarning                      = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d5d0d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9290 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9170 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MdtCsmCacheKey             @0x7f8923e7e3f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c91b8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-RpcCacheKey                @0x7f8923e7e450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| |-TgcCacheKey                @0x7f8923e7e480 = 'TgcCache'  (default: 'StoreGateSvc+')
+| |-Timeline                                = True
+| \----- (End of Algorithm MuonCacheCreator/MuonCacheCreator) ----------------------------------------
+|=/***** Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923da8390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding           @0x7f8927062b00 = True  (default: False)
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923da8310 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9248 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9200 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9368 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923de5578 = PrivateToolHandle('Muon::RPC_RawDataProviderTool/RPC_RawDataProviderTool')
+| |                                            (default: 'Muon::RPC_RawDataProviderTool/RpcRawDataProviderTool')
+| |-RegionSelectionSvc         @0x7f8923da8410 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                       @0x7f8925e720c0 = 'MURoIs'  (default: 'StoreGateSvc+OutputRoIs')
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool *****
+| | |-AuditFinalize                       = False
+| | |-AuditInitialize                     = False
+| | |-AuditReinitialize                   = False
+| | |-AuditRestart                        = False
+| | |-AuditStart                          = False
+| | |-AuditStop                           = False
+| | |-AuditTools                          = False
+| | |-Decoder                @0x7f8923e5c620 = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+| | |-DetStore               @0x7f8923b22bd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore               @0x7f8923b22c10 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs            @0x7f8923b21950 = []  (default: [])
+| | |-ExtraOutputs           @0x7f8923b217e8 = []  (default: [])
+| | |-MonitorService                      = 'MonitorSvc'
+| | |-OutputLevel            @  0x20de1c0 = 2  (default: 0)
+| | |-RPCSec                              = 'StoreGateSvc+RPC_SECTORLOGIC'
+| | |-RdoLocation                         = 'StoreGateSvc+RPCPAD'
+| | |-RpcContainerCacheKey   @0x7f8923e7e450 = 'RpcCache'  (default: 'StoreGateSvc+')
+| | |-WriteOutRpcSectorLogic @0x7f8927062b20 = False  (default: True)
+| | |=/***** Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder *****
+| | | |-AuditFinalize                    = False
+| | | |-AuditInitialize                  = False
+| | | |-AuditReinitialize                = False
+| | | |-AuditRestart                     = False
+| | | |-AuditStart                       = False
+| | | |-AuditStop                        = False
+| | | |-AuditTools                       = False
+| | | |-DataErrorPrintLimit              = 1000
+| | | |-DetStore            @0x7f8923b22cd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore            @0x7f8923b22d10 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs         @0x7f8923b21878 = []  (default: [])
+| | | |-ExtraOutputs        @0x7f8923b21830 = []  (default: [])
+| | | |-MonitorService                   = 'MonitorSvc'
+| | | |-OutputLevel                      = 0
+| | | |-Sector13Data                     = False
+| | | |-SpecialROBNumber                 = -1
+| | | \----- (End of Private AlgTool Muon::RpcROD_Decoder/RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RPC_RawDataProviderTool/RpcRawDataProvider.RPC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::RpcRawDataProvider/RpcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923db7350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923db72d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9560 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9638 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c95a8 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8924d0d8c0 = PrivateToolHandle('Muon::TGC_RawDataProviderTool/TGC_RawDataProviderTool')
+| |                                            (default: 'Muon::TGC_RawDataProviderTool/TgcRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-Decoder           @0x7f8924d0d9b0 = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+| | |                                   (default: 'Muon::TGC_RodDecoderReadout/TGC_RodDecoderReadout')
+| | |-DetStore          @0x7f8923a50250 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f8923a50290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f8923acce60 = []  (default: [])
+| | |-ExtraOutputs      @0x7f8923acccb0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputLevel                    = 0
+| | |-RdoLocation                    = 'StoreGateSvc+TGCRDO'
+| | |=/***** Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8923a50350 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8923a50390 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f8923accb00 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923accc68 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ShowStatusWords                = False
+| | | |-SkipCoincidence                = False
+| | | \----- (End of Private AlgTool Muon::TGC_RodDecoderReadout/TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::TGC_RawDataProviderTool/TgcRawDataProvider.TGC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::TgcRawDataProvider/TgcRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923d9c590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d9c510 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9680 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9710 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c95f0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923c0ee50 = PrivateToolHandle('Muon::MDT_RawDataProviderTool/MDT_RawDataProviderTool')
+| |                                            (default: 'Muon::MDT_RawDataProviderTool/MdtRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CsmContainerCacheKey @0x7f8923e7e3f0 = 'MdtCsmCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f8924d0dc80 = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+| | |-DetStore             @0x7f89235485d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore             @0x7f8923548610 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f892354c128 = []  (default: [])
+| | |-ExtraOutputs         @0x7f892354c098 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x20de1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                           = 'ConditionStore+MuonMDT_CablingMap'
+| | |=/***** Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f89235486d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f8923548710 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f892354c050 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923672fc8 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | |-ReadKey                        = 'ConditionStore+MuonMDT_CablingMap'
+| | | |-SpecialROBNumber               = -1
+| | | \----- (End of Private AlgTool MdtROD_Decoder/MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::MDT_RawDataProviderTool/MdtRawDataProvider.MDT_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::MdtRawDataProvider/MdtRawDataProvider) ------------------------------
+|=/***** Algorithm Muon::CscRawDataProvider/CscRawDataProvider ***************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f8923d93a90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923d939d0 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c97a0 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c96c8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c94d0 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-ProviderTool               @0x7f8923561150 = PrivateToolHandle('Muon::CSC_RawDataProviderTool/CSC_RawDataProviderTool')
+| |                                            (default: 'Muon::CSC_RawDataProviderTool/CscRawDataProviderTool')
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool *****
+| | |-AuditFinalize                     = False
+| | |-AuditInitialize                   = False
+| | |-AuditReinitialize                 = False
+| | |-AuditRestart                      = False
+| | |-AuditStart                        = False
+| | |-AuditStop                         = False
+| | |-AuditTools                        = False
+| | |-CscContainerCacheKey @0x7f8923e7e840 = 'CscCache'  (default: 'StoreGateSvc+')
+| | |-Decoder              @0x7f8924d0de60 = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+| | |-DetStore             @0x7f8923509490 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EventInfoKey                      = 'StoreGateSvc+EventInfo'
+| | |-EvtStore             @0x7f89235094d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs          @0x7f892350a3b0 = []  (default: [])
+| | |-ExtraOutputs         @0x7f892350a6c8 = []  (default: [])
+| | |-MonitorService                    = 'MonitorSvc'
+| | |-OutputLevel          @  0x20de1d8 = 1  (default: 0)
+| | |-RdoLocation                       = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f8923509590 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89235095d0 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f892350a4d0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f892350a488 = []  (default: [])
+| | | |-IsCosmics                      = False
+| | | |-IsOldCosmics                   = False
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscROD_Decoder/CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CSC_RawDataProviderTool/CscRawDataProvider.CSC_RawDataProviderTool) -----
+| \----- (End of Algorithm Muon::CscRawDataProvider/CscRawDataProvider) ------------------------------
+|=/***** Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8923cf7d20 = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+| |                                            (default: 'Muon::RpcRdoToPrepDataTool/RpcRdoToPrepDataTool')
+| |-DetStore                   @0x7f8923538f10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923538e90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9488 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c98c0 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c97e8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+RPC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923538f90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool ******
+| | |-AuditFinalize                                   = False
+| | |-AuditInitialize                                 = False
+| | |-AuditReinitialize                               = False
+| | |-AuditRestart                                    = False
+| | |-AuditStart                                      = False
+| | |-AuditStop                                       = False
+| | |-AuditTools                                      = False
+| | |-DecodeData                                      = True
+| | |-DetStore                           @0x7f89234b1110 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                           @0x7f89234b1190 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                        @0x7f89235140e0 = []  (default: [])
+| | |-ExtraOutputs                       @0x7f8923514290 = []  (default: [])
+| | |-InputCollection                                 = 'StoreGateSvc+RPC_triggerHits'
+| | |-MonitorService                                  = 'MonitorSvc'
+| | |-OutputCollection                                = 'StoreGateSvc+RPCPAD'
+| | |-OutputLevel                                     = 0
+| | |-RPCInfoFromDb                                   = False
+| | |-RdoDecoderTool                     @0x7f89239da4b0 = PrivateToolHandle('Muon::RpcRDO_Decoder/Muon::RpcRDO_Decoder')
+| | |                                                    (default: 'Muon::RpcRDO_Decoder')
+| | |-TriggerOutputCollection                         = 'StoreGateSvc+RPC_Measurements'
+| | |-etaphi_coincidenceTime                          = 20.0
+| | |-overlap_timeTolerance                           = 10.0
+| | |-processingData                                  = False
+| | |-produceRpcCoinDatafromTriggerWords              = True
+| | |-reduceCablingOverlap                            = True
+| | |-solvePhiAmbiguities                             = True
+| | |-timeShift                                       = -12.5
+| | |=/***** Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-DetStore          @0x7f89234b1210 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89234b1250 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f89235143b0 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f8923514368 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::RpcRDO_Decoder/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool.Muon::RpcRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepData.RpcRdoToRpcPrepDataTool) -----
+| \----- (End of Algorithm RpcRdoToRpcPrepData/RpcRdoToRpcPrepData) ----------------------------------
+|=/***** Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f89251b3e90 = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+| |                                            (default: 'Muon::TgcRdoToPrepDataTool/TgcPrepDataProviderTool')
+| |-DetStore                   @0x7f8923490e10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923490d90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9758 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9908 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9950 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+TGC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectorSvc          @0x7f8923490e90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Setting                                 = 0
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool ******
+| | |-AuditFinalize                                        = False
+| | |-AuditInitialize                                      = False
+| | |-AuditReinitialize                                    = False
+| | |-AuditRestart                                         = False
+| | |-AuditStart                                           = False
+| | |-AuditStop                                            = False
+| | |-AuditTools                                           = False
+| | |-DecodeData                                           = True
+| | |-DetStore                                @0x7f89234b1390 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore                                @0x7f89234b1450 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs                             @0x7f89234b9b48 = []  (default: [])
+| | |-ExtraOutputs                            @0x7f89234b9b00 = []  (default: [])
+| | |-FillCoinData                                         = True
+| | |-MonitorService                                       = 'MonitorSvc'
+| | |-OutputCoinCollection                                 = 'TrigT1CoinDataCollection'
+| | |-OutputCollection                                     = 'TGC_Measurements'
+| | |-OutputLevel                                          = 0
+| | |-RDOContainer                                         = 'StoreGateSvc+TGCRDO'
+| | |-TGCHashIdOffset                                      = 26000
+| | |-dropPrdsWithZeroWidth                                = True
+| | |-outputCoinKey                           @0x7f89234b95a8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-prepDataKeys                            @0x7f89234b9bd8 = ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy']
+| | |                                                         (default: ['StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy', 'StoreGateSvc+dummy'])
+| | |-show_warning_level_invalid_A09_SSW6_hit              = False
+| | \----- (End of Private AlgTool Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool) -----
+| \----- (End of Algorithm TgcRdoToTgcPrepData/TgcRdoToTgcPrepData) ----------------------------------
+|=/***** Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DecodingTool               @0x7f8927108b50 = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+| |                                            (default: 'Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool')
+| |-DetStore                   @0x7f8923528dd0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923528d50 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c99e0 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9a70 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9a28 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+MDT_DriftCircles'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923528e50 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool ******
+| | |-AuditFinalize                        = False
+| | |-AuditInitialize                      = False
+| | |-AuditReinitialize                    = False
+| | |-AuditRestart                         = False
+| | |-AuditStart                           = False
+| | |-AuditStop                            = False
+| | |-AuditTools                           = False
+| | |-CalibratePrepData                    = True
+| | |-DecodeData                           = True
+| | |-DetStore                @0x7f89234b12d0 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-DiscardSecondaryHitTwin              = False
+| | |-DoPropagationCorrection              = False
+| | |-DoTofCorrection                      = True
+| | |-EvtStore                @0x7f89234b1290 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs             @0x7f89234b88c0 = []  (default: [])
+| | |-ExtraOutputs            @0x7f89234b8b48 = []  (default: [])
+| | |-MonitorService                       = 'MonitorSvc'
+| | |-OutputCollection                     = 'StoreGateSvc+MDT_DriftCircles'
+| | |-OutputLevel                          = 0
+| | |-RDOContainer                         = 'StoreGateSvc+MDTCSM'
+| | |-ReadKey                              = 'ConditionStore+MuonMDT_CablingMap'
+| | |-SortPrepData                         = False
+| | |-TimeWindowLowerBound                 = -1000000.0
+| | |-TimeWindowSetting                    = 2
+| | |-TimeWindowUpperBound                 = -1000000.0
+| | |-TwinCorrectSlewing                   = False
+| | |-Use1DPrepDataTwin                    = False
+| | |-UseAllBOLTwin                        = False
+| | |-UseTwin                              = True
+| | \----- (End of Private AlgTool Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool) -----
+| \----- (End of Algorithm MdtRdoToMdtPrepData/MdtRdoToMdtPrepData) ----------------------------------
+|=/***** Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData *******************************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-CscRdoToCscPrepDataTool    @0x7f8923b9e380 = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+| |                                            (default: 'Muon::CscRdoToCscPrepDataTool/CscRdoToPrepDataTool')
+| |-DetStore                   @0x7f8923509b10 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-DoSeededDecoding                        = False
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f8923509a90 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9b48 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9830 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9ab8 = []  (default: [])
+| |-OutputCollection                        = 'StoreGateSvc+CSC_Measurements'
+| |-OutputLevel                             = 0
+| |-PrintInputRdo                           = False
+| |-PrintPrepData              @0x7f8927062b20 = False  (default: False)
+| |-RegionSelectionSvc         @0x7f8923509b90 = ServiceHandle('RegSelSvc')
+| |-RegisterForContextService               = False
+| |-RoIs                                    = 'StoreGateSvc+OutputRoIs'
+| |-Timeline                                = True
+| |=/***** Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool *****
+| | |-AuditFinalize                  = False
+| | |-AuditInitialize                = False
+| | |-AuditReinitialize              = False
+| | |-AuditRestart                   = False
+| | |-AuditStart                     = False
+| | |-AuditStop                      = False
+| | |-AuditTools                     = False
+| | |-CSCHashIdOffset                = 22000
+| | |-CscCalibTool      @0x7f892710c860 = PrivateToolHandle('CscCalibTool/CscCalibTool')
+| | |-CscRdoDecoderTool @0x7f89234b2c18 = PrivateToolHandle('Muon::CscRDO_Decoder/CscRDO_Decoder')
+| | |-DecodeData                     = True
+| | |-DetStore          @0x7f89234b1610 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | |-EvtStore          @0x7f89234b13d0 = ServiceHandle('StoreGateSvc')
+| | |-ExtraInputs       @0x7f89234c8c68 = []  (default: [])
+| | |-ExtraOutputs      @0x7f89234c89e0 = []  (default: [])
+| | |-MonitorService                 = 'MonitorSvc'
+| | |-OutputCollection               = 'StoreGateSvc+CSC_Measurements'
+| | |-OutputLevel                    = 0
+| | |-RDOContainer                   = 'StoreGateSvc+CSCRDO'
+| | |=/***** Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool *******
+| | | |-AuditFinalize                   = False
+| | | |-AuditInitialize                 = False
+| | | |-AuditReinitialize               = False
+| | | |-AuditRestart                    = False
+| | | |-AuditStart                      = False
+| | | |-AuditStop                       = False
+| | | |-AuditTools                      = False
+| | | |-DetStore           @0x7f89234b1510 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore           @0x7f89234b1550 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs        @0x7f89234c83f8 = []  (default: [])
+| | | |-ExtraOutputs       @0x7f89234c8050 = []  (default: [])
+| | | |-IsOnline                        = True
+| | | |-Latency                         = 100.0
+| | | |-MonitorService                  = 'MonitorSvc'
+| | | |-NSamples                        = 4
+| | | |-Noise                           = 3.5
+| | | |-OutputLevel                     = 0
+| | | |-Pedestal                        = 2048.0
+| | | |-ReadFromDatabase                = True
+| | | |-Slope                           = 0.19
+| | | |-SlopeFromDatabase               = False
+| | | |-TimeOffsetRange                 = 1.0
+| | | |-Use2Samples                     = False
+| | | |-integrationNumber               = 12.0
+| | | |-integrationNumber2              = 11.66
+| | | |-samplingTime                    = 50.0
+| | | |-signalWidth                     = 14.4092
+| | | |-timeOffset                      = 46.825
+| | | \----- (End of Private AlgTool CscCalibTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscCalibTool) -----
+| | |=/***** Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder *****
+| | | |-AuditFinalize                  = False
+| | | |-AuditInitialize                = False
+| | | |-AuditReinitialize              = False
+| | | |-AuditRestart                   = False
+| | | |-AuditStart                     = False
+| | | |-AuditStop                      = False
+| | | |-AuditTools                     = False
+| | | |-CscCalibTool      @0x7f89234b15d0 = PublicToolHandle('CscCalibTool')
+| | | |-DetStore          @0x7f89234b1650 = ServiceHandle('StoreGateSvc/DetectorStore')
+| | | |-EvtStore          @0x7f89234b1590 = ServiceHandle('StoreGateSvc')
+| | | |-ExtraInputs       @0x7f89234c8440 = []  (default: [])
+| | | |-ExtraOutputs      @0x7f89234c84d0 = []  (default: [])
+| | | |-MonitorService                 = 'MonitorSvc'
+| | | |-OutputLevel                    = 0
+| | | \----- (End of Private AlgTool Muon::CscRDO_Decoder/CscRdoToCscPrepData.CscRdoToCscPrepDataTool.CscRDO_Decoder) -----
+| | \----- (End of Private AlgTool Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepData.CscRdoToCscPrepDataTool) -----
+| \----- (End of Algorithm CscRdoToCscPrepData/CscRdoToCscPrepData) ----------------------------------
+|=/***** Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder ******************************
+| |-AuditAlgorithms                         = False
+| |-AuditBeginRun                           = False
+| |-AuditEndRun                             = False
+| |-AuditExecute                            = False
+| |-AuditFinalize                           = False
+| |-AuditInitialize                         = False
+| |-AuditReinitialize                       = False
+| |-AuditRestart                            = False
+| |-AuditStart                              = False
+| |-AuditStop                               = False
+| |-Cardinality                             = 1
+| |-DetStore                   @0x7f89234e9c90 = ServiceHandle('StoreGateSvc/DetectorStore')
+| |-Enable                                  = True
+| |-ErrorCounter                            = 0
+| |-ErrorMax                                = 1
+| |-EvtStore                   @0x7f89234e9c10 = ServiceHandle('StoreGateSvc')
+| |-ExtraInputs                @0x7f89234c9b90 = []  (default: [])
+| |-ExtraOutputs               @0x7f89234c9bd8 = []  (default: [])
+| |-FilterCircularDependencies              = True
+| |-IsIOBound                               = False
+| |-MonitorService                          = 'MonitorSvc'
+| |-NeededResources            @0x7f89234c9c20 = []  (default: [])
+| |-OutputLevel                             = 0
+| |-RegisterForContextService               = False
+| |-Timeline                                = True
+| |-cluster_builder            @0x7f8923427610 = PublicToolHandle('CscThresholdClusterBuilderTool/CscThesholdClusterBuilderTool')
+| |                                            (default: 'CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool')
+| \----- (End of Algorithm CscThresholdClusterBuilder/CscThesholdClusterBuilder) ---------------------
+\----- (End of Algorithm AthSequencer/AthAlgSeq) ---------------------------------------------------
+
+JOs reading stage finished, launching Athena from pickle file
+
+Thu Mar 21 14:52:11 CET 2019
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO using release [AthenaExternals-22.0.1] [x86_64-slc6-gcc8-opt] [2.0.26/d4d5e51] -- built on [2019-03-18T2110]
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
+Py:Athena            INFO executing ROOT6Setup
+Py:Athena            INFO configuring AthenaHive with [1] concurrent threads and [1] concurrent events
+Py:AlgScheduler      INFO setting up AvalancheSchedulerSvc/AvalancheSchedulerSvc with 1 threads
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
+Py:Athena            INFO now loading MuonRdoDecode_Cache.pkl  ... 
+Py:ConfigurableDb    INFO Read module info for 5467 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+[?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v31r0)
+                                          running on lxplus126.cern.ch on Thu Mar 21 14:52:24 2019
+====================================================================================================================================
+ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+StatusCodeSvc        INFO initialize
+AthDictLoaderSvc     INFO in initialize...
+AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 3440 CLIDRegistry entries for module ALL
+CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
+CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+ByteStreamAddre...   INFO Initializing ByteStreamAddressProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO Initializing ROBDataProviderSvc - package version ByteStreamCnvSvcBase-00-00-00
+ROBDataProviderSvc   INFO  ---> Filter out empty ROB fragments                               =  'filterEmptyROB':False
+ROBDataProviderSvc   INFO  ---> Filter out specific ROBs by Status Code: # ROBs = 0
+ROBDataProviderSvc   INFO  ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = 0
+ByteStreamAddre...   INFO initialized 
+ByteStreamAddre...   INFO -- Module IDs for: 
+ByteStreamAddre...   INFO    CTP                                  = 0x1
+ByteStreamAddre...   INFO    muCTPi                               = 0x1
+ByteStreamAddre...   INFO    Calorimeter Cluster Processor RoI    = 0xa8, 0xa9, 0xaa, 0xab
+ByteStreamAddre...   INFO    Calorimeter Jet/Energy Processor RoI = 0xac, 0xad
+ByteStreamAddre...   INFO    Topo Processor RoI = 0x81, 0x91
+ByteStreamAddre...   INFO -- Will fill Store with id =  0
+PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
+PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
+PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-20T2149/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus126.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO COOL SQLite replicas will be excluded if matching pattern /DBRelease/
+PoolSvc              INFO Successfully setup replica sorting algorithm
+PoolSvc              INFO Setting up APR FileCatalog and Streams
+PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
+PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_comcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
+IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
+IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
+IOVDbSvc             INFO Global tag: CONDBR2-BLKPA-2018-13 set from joboptions
+IOVDbFolder          INFO Inputfile tag override disabled for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Folder /GLOBAL/BField/Maps will be written to file metadata
+IOVDbSvc             INFO Initialised with 8 connections and 19 folders
+IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+ToolSvc.ByteStr...   INFO Initializing ToolSvc.ByteStreamMetadataTool - package version ByteStreamCnvSvc-00-00-00
+MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool/IOVDbMetaDataTool','ByteStreamMetadataTool/ByteStreamMetadataTool'])
+IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+ClassIDSvc           INFO  getRegistryEntries: read 3314 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 163 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4046 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 129 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 3110 CLIDRegistry entries for module ALL
+IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
+IOVSvcTool           INFO IOVRanges will be checked at every Event
+IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_MDT/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLONL_RPC/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_CSC/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLOFL_MDT/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLONL_GLOBAL/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLOFL_CSC/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLONL_TGC/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLONL_GLOBAL/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_DCS/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLONL_TGC/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLOFL_DCS/CONDBR2
+IOVDbSvc             INFO Added taginfo remove for /EXT/DCS/MAGNETS/SENSORDATA
+IOVDbSvc             INFO Added taginfo remove for /GLOBAL/BField/Maps
+IOVDbSvc             INFO Added taginfo remove for /MDT/CABLING/MAP_SCHEMA
+IOVDbSvc             INFO Added taginfo remove for /MDT/CABLING/MEZZANINE_SCHEMA
+IOVDbSvc             INFO Added taginfo remove for /MDT/RTBLOB
+IOVDbSvc             INFO Added taginfo remove for /MDT/T0BLOB
+IOVDbSvc             INFO Added taginfo remove for /RPC/CABLING/MAP_SCHEMA
+IOVDbSvc             INFO Added taginfo remove for /RPC/CABLING/MAP_SCHEMA_CORR
+IOVDbSvc             INFO Added taginfo remove for /RPC/TRIGGER/CM_THR_ETA
+IOVDbSvc             INFO Added taginfo remove for /RPC/TRIGGER/CM_THR_PHI
+IOVDbSvc             INFO Added taginfo remove for /TGC/CABLING/MAP_SCHEMA
+IOVDbSvc             INFO Added taginfo remove for /CSC/FTHOLD
+IOVDbSvc             INFO Added taginfo remove for /CSC/NOISE
+IOVDbSvc             INFO Added taginfo remove for /CSC/PED
+IOVDbSvc             INFO Added taginfo remove for /CSC/PSLOPE
+IOVDbSvc             INFO Added taginfo remove for /CSC/RMS
+IOVDbSvc             INFO Added taginfo remove for /CSC/STAT
+IOVDbSvc             INFO Added taginfo remove for /CSC/T0BASE
+IOVDbSvc             INFO Added taginfo remove for /CSC/T0PHASE
+DetDescrCnvSvc       INFO  initializing 
+DetDescrCnvSvc       INFO Found DetectorStore service
+DetDescrCnvSvc       INFO  filling proxies for detector managers 
+DetDescrCnvSvc       INFO  filling address for CaloTTMgr with CLID 117659265 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloMgr with CLID 4548337 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloSuperCellMgr with CLID 241807251 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloIdManager with CLID 125856940 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArIdManager with CLID 79554919 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for IdDict with CLID 2411 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for AtlasID with CLID 164875623 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for PixelID with CLID 2516 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for SCT_ID with CLID 2517 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TRT_ID with CLID 2518 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for SiliconID with CLID 129452393 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArEM_ID with CLID 163583365 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArEM_SuperCell_ID with CLID 99488227 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHEC_ID with CLID 3870484 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHEC_SuperCell_ID with CLID 254277678 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArFCAL_ID with CLID 45738051 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArFCAL_SuperCell_ID with CLID 12829437 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArMiniFCAL_ID with CLID 79264204 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArOnlineID with CLID 158698068 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TTOnlineID with CLID 38321944 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArOnline_SuperCellID with CLID 115600394 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHVLineID with CLID 27863673 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArElectrodeID with CLID 80757351 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileID with CLID 2901 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for Tile_SuperCell_ID with CLID 49557789 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileHWID with CLID 2902 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileTBID with CLID 2903 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for MDTIDHELPER with CLID 4170 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CSCIDHELPER with CLID 4171 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for RPCIDHELPER with CLID 4172 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TGCIDHELPER with CLID 4173 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for STGCIDHELPER with CLID 4174 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for MMIDHELPER with CLID 4175 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloLVL1_ID with CLID 108133391 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloCell_ID with CLID 123500438 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloCell_SuperCell_ID with CLID 128365736 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloDM_ID with CLID 167756483 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for ZdcID with CLID 190591643 and storage type 68 to detector store 
+GeoModelSvc.Muo...   INFO Initializing ...
+GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
+GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
+GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
+GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.Muo...   INFO create MuonDetectorTool - package version = MuonGeoModel-00-00-00
+GeoModelSvc.Muo...   INFO (from GeoModelSvc)    AtlasVersion = <ATLAS-R2-2016-01-00-01>  MuonVersion = <>
+GeoModelSvc.Muo...   INFO Keys for Muon Switches are  (key) ATLAS-R2-2016-01-00-01 (node) ATLAS
+GeoModelSvc.Muo...   INFO (from GeoModelSvc) in AtlasVersion = <ATLAS-R2-2016-01-00-01>  default MuonVersion is <MuonSpectrometer-R.08.01>
+GeoModelSvc.Muo...   INFO Properties have been set as follows: 
+GeoModelSvc.Muo...   INFO     LayoutName                     R
+GeoModelSvc.Muo...   INFO     IncludeCutouts                 0
+GeoModelSvc.Muo...   INFO     IncludeCutoutsBog              0
+GeoModelSvc.Muo...   INFO     IncludeCtbBis                  0
+GeoModelSvc.Muo...   INFO     ControlAlines                  111111
+GeoModelSvc.Muo...   INFO     MinimalGeoFlag                 0
+GeoModelSvc.Muo...   INFO     EnableCscIntAlignment          0
+GeoModelSvc.Muo...   INFO     EnableCscIntAlignmentFromGM    1
+GeoModelSvc.Muo...   INFO     ControlCscIntAlines   reset to 0
+GeoModelSvc.Muo...   INFO     EnableMdtDeformations          0
+GeoModelSvc.Muo...   INFO     EnableMdtAsBuiltParameters     0
+MuonGeoModel         INFO MuonDetectorFactory - constructor  MuonSystem OuterRadius 13000 Length 22030
+MuGM:MuonFactory     INFO MuonLayout set to <R.08.01> = Development version for DC3 - infrastructures 
+MuGM:MuonFactory     INFO                    BOG cutouts are activated 1 , all other cutouts are disabled 1
+MuGM:MuonFactory     INFO Manager created for geometry version R.08.01 from DB MuonVersion <MuonSpectrometer-R.08.01>
+MuonGeoModel_MYSQL   INFO GeometryVersion set to <R.08.01>
+MuGM:MuonFactory     INFO Mysql helper class created here for geometry version R.08.01 from DB MuonVersion <MuonSpectrometer-R.08.01>
+EventPersistenc...   INFO Added successfully Conversion service:ByteStreamCnvSvc
+EventPersistenc...   INFO Added successfully Conversion service:AthenaPoolCnvSvc
+EventPersistenc...   INFO Added successfully Conversion service:DetDescrCnvSvc
+MDT_IDDetDescrCnv    INFO in createObj: creating a MdtIdHelper object in the detector store
+IdDictDetDescrCnv    INFO in initialize
+IdDictDetDescrCnv    INFO in createObj: creating a IdDictManager object in the detector store
+IdDictDetDescrCnv    INFO IdDictName:  IdDictParser/ATLAS_IDS.xml
+IdDictDetDescrCnv    INFO Reading InnerDetector    IdDict file InDetIdDictFiles/IdDictInnerDetector_IBL3D25-03.xml
+IdDictDetDescrCnv    INFO Reading LArCalorimeter   IdDict file IdDictParser/IdDictLArCalorimeter_DC3-05-Comm-01.xml
+IdDictDetDescrCnv    INFO Reading TileCalorimeter  IdDict file IdDictParser/IdDictTileCalorimeter.xml
+IdDictDetDescrCnv    INFO Reading Calorimeter      IdDict file IdDictParser/IdDictCalorimeter_L1Onl.xml
+IdDictDetDescrCnv    INFO Reading MuonSpectrometer IdDict file IdDictParser/IdDictMuonSpectrometer_R.03.xml
+IdDictDetDescrCnv    INFO Reading ForwardDetectors IdDict file IdDictParser/IdDictForwardDetectors_2010.xml
+IdDictDetDescrCnv    INFO Found id dicts:
+IdDictDetDescrCnv    INFO Using dictionary tag: null
+IdDictDetDescrCnv    INFO Dictionary ATLAS                version default              DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary Calorimeter          version default              DetDescr tag CaloIdentifier-LVL1-02 file IdDictParser/IdDictCalorimeter_L1Onl.xml
+IdDictDetDescrCnv    INFO Dictionary ForwardDetectors     version default              DetDescr tag ForDetIdentifier-01       file IdDictParser/IdDictForwardDetectors_2010.xml
+IdDictDetDescrCnv    INFO Dictionary InnerDetector        version IBL-DBM              DetDescr tag InDetIdentifier-IBL3D25-02 file InDetIdDictFiles/IdDictInnerDetector_IBL3D25-03.xml
+IdDictDetDescrCnv    INFO Dictionary LArCalorimeter       version fullAtlas            DetDescr tag LArIdentifier-DC3-05-Comm file IdDictParser/IdDictLArCalorimeter_DC3-05-Comm-01.xml
+IdDictDetDescrCnv    INFO Dictionary LArElectrode         version fullAtlas            DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary LArHighVoltage       version fullAtlas            DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary MuonSpectrometer     version R.03                 DetDescr tag MuonIdentifier-08         file IdDictParser/IdDictMuonSpectrometer_R.03.xml
+IdDictDetDescrCnv    INFO Dictionary TileCalorimeter      version fullAtlasAndTestBeam DetDescr tag TileIdentifier-00         file IdDictParser/IdDictTileCalorimeter.xml
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+MdtIdHelper          INFO MultiRange built successfully to Technology: MultiRange size is 210
+MdtIdHelper          INFO MultiRange built successfully to detector element: Multilayer MultiRange size is 241
+MdtIdHelper          INFO MultiRange built successfully to tube: MultiRange size is 241
+MdtIdHelper          INFO Initializing MDT hash indices ... 
+MdtIdHelper          INFO The element hash max is 1188
+MdtIdHelper          INFO The detector element hash max is 2328
+MdtIdHelper          INFO Initializing MDT hash indices for finding neighbors ... 
+MuGM:MuonFactory     INFO MDTIDHELPER retrieved from DetStore
+RPC_IDDetDescrCnv    INFO in createObj: creating a RpcIdHelper object in the detector store
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+RpcIdHelper          INFO MultiRange built successfully to doubletR: MultiRange size is 241
+RpcIdHelper          INFO MultiRange built successfully to detectorElement: DetectorElement MultiRange size is 241
+RpcIdHelper          INFO MultiRange built successfully to rpcStrip: MultiRange size is 241
+RpcIdHelper          INFO Initializing RPC hash indices ... 
+RpcIdHelper          INFO The element hash max is 600
+RpcIdHelper          INFO The detector element hash max is 1122
+RpcIdHelper          INFO Initializing RPC hash indices for finding neighbors ... 
+MuGM:MuonFactory     INFO RPCIDHELPER retrieved from DetStore
+TGC_IDDetDescrCnv    INFO in createObj: creating a TgcIdHelper object in the detector store
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+TgcIdHelper          INFO MultiRange built successfully to Technology: MultiRange size is 210
+TgcIdHelper          INFO MultiRange built successfully to detector element: Multilayer MultiRange size is 210
+TgcIdHelper          INFO MultiRange built successfully to channel: MultiRange size is 241
+TgcIdHelper          INFO Initializing TGC hash indices ... 
+TgcIdHelper          INFO The element hash max is 1578
+TgcIdHelper          INFO The detector element hash max is 1578
+TgcIdHelper          INFO Initializing TGC hash indices for finding neighbors ... 
+MuGM:MuonFactory     INFO TGCIDHELPER retrieved from DetStore
+CSC_IDDetDescrCnv    INFO in createObj: creating a CcscIdHelper object in the detector store
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+CscIdHelper          INFO MultiRange built successfully to Technology: MultiRange size is 210
+CscIdHelper          INFO MultiRange built successfully to detector element: Multilayer MultiRange size is 237
+CscIdHelper          INFO MultiRange built successfully to cscStrip: MultiRange size is 241
+CscIdHelper          INFO Initializing CSC hash indices ... 
+CscIdHelper          INFO The element hash max is 32
+CscIdHelper          INFO The detector element hash max is 64
+CscIdHelper          INFO The channel hash max is 61440
+CscIdHelper          INFO Initializing CSC hash indices for finding neighbors ... 
+MuGM:MuonFactory     INFO CSCIDHELPER retrieved from DetStore
+sTGC_IDDetDescrCnv   INFO in createObj: creating a sTgcIdHelper object in the detector store
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+MuGM:MuonFactory     INFO STGCIDHELPER retrieved from DetStore
+MM_IDDetDescrCnv     INFO in createObj: creating a MmIdHelper object in the detector store
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0
+AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0
+AtlasDetectorID::initLevelsFromDict - there are no sTGC entries in the dictionary! 
+AtlasDetectorID::initLevelsFromDict - there are no MM entries in the dictionary! 
+ AtlasDetectorID::initialize_from_dictionary - OK 
+MuGM:MuonFactory     INFO MMIDHELPER retrieved from DetStore
+MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ************************
+MuGM:MuonFactory     INFO  *** Start building the Muon Geometry Tree **********************
+MuGM:RDBReadAtlas    INFO Start retriving dbObjects with tag = <ATLAS-R2-2016-01-00-01> node <ATLAS>
+RDBAccessSvc      WARNING Could not get the tag for XtomoData node. Returning 0 pointer to IRDBQuery
+MuGM:RDBReadAtlas    INFO After getQuery XtomoData
+In DblQ00Xtomo(data)
+No XtomoData table in the MuonDD Database
+MuGM:RDBReadAtlas    INFO After new DblQ00Xtomo
+MuGM:RDBReadAtlas    INFO After m_dhxtomo.data()
+MuGM:RDBReadAtlas    INFO No Ascii aszt input found: looking for A-lines in ORACLE
+MuGM:RDBReadAtlas    INFO ASZT table found in Oracle
+MuGM:RDBReadAtlas    INFO ASZT size is 32
+MuGM:RDBReadAtlas    INFO No Ascii iacsc input found: looking for A-lines in ORACLE
+RDBAccessSvc      WARNING Could not get the tag for ISZT node. Returning 0 pointer to IRDBQuery
+MuGM:RDBReadAtlas    INFO No ISZT table in Oracle
+MuGM:RDBReadAtlas    INFO Access granted for all dbObjects needed by muon detectors
+MuonGeoModel_MYSQL   INFO LayoutName (from DBAM) set to <R.08>  -- relevant for CTB2004
+MuGM:ProcStations    INFO  Processing Stations and Components
+MuGM:ProcStations    INFO  Processing Stations and Components DONE
+MuGM:ProcTechnol.s   INFO nMDT 13 nCSC 2 nTGC 22 nRPC 25
+MuGM:ProcTechnol.s   INFO nDED 2 nSUP 4 nSPA 2
+MuGM:ProcTechnol.s   INFO nCHV 7 nCRO 7 nCMI 6 nLBI 6
+MuGM:ProcPosition    INFO  *** N. of stations positioned in the setup 234
+MuGM:ProcPosition    INFO  *** N. of stations described in mysql      234
+MuGM:ProcPosition    INFO  *** N. of types  32 size of jtypvec 32
+MuGM:ProcPosition    INFO  *** : 234 kinds of stations (type*sub_type) 
+MuGM:ProcPosition    INFO  *** : 1758 physical stations in space - according to the MuonDD DataBase
+MuGM:ProcCutouts     INFO  Processing Cutouts for geometry layout R.08
+MuGM:ProcCutouts     INFO  Processing Cutouts DONE
+MuGM:RDBReadAtlas    INFO  ProcessTGCreadout - version 7 wirespacing 1.8
+MuGM:RDBReadAtlas    INFO Intermediate Objects built from primary numbers
+MuGM:MuonFactory     INFO  theMaterialManager retrieven successfully from the DetStore
+MuGM:MuonFactory     INFO MuonSystem description from OracleTag=<ATLAS-R2-2016-01-00-01> and node=<ATLAS>
+MuGM:MuonFactory     INFO  TreeTop added to the Manager
+MuGM:MuonFactory     INFO  Muon Layout R.08.01
+MuGM:MuonFactory     INFO Fine Clash Fixing disabled: (should be ON/OFF for Simulation/Reconstruction)
+MuGM:MuonFactory     INFO  **************** MuonDetectorFactory001 ****************************
+MuGM:MuonFactory     INFO  *** The Muon Chamber Geometry Tree is built with 
+MuGM:MuonFactory     INFO  *** 1758 child volumes 
+MuGM:MuonFactory     INFO  *** 1839 independent elements and 
+MuGM:MuonFactory     INFO  *** 11473 elements cloned or shared 
+MuGM:MuonFactory     INFO  *** 234 kinds of stations
+MuGM:MuonFactory     INFO  *** 1758 stations with alignable transforms
+MuGM:MuonFactory     INFO  *** 148 stations are described as Assemblies
+MuGM:MuonFactory     INFO  *** 1758 MuonStations 
+MuGM:MuonFactory     INFO  *** 	 2324 MDT Readout Elements 	 1186 MDT Detector Elements 
+MuGM:MuonFactory     INFO  *** 	 32 CSC Readout Elements 	 32 CSC Detector Elements 
+MuGM:MuonFactory     INFO  *** 	 1122 RPC Readout Elements 	 600 RPC Detector Elements 
+MuGM:MuonFactory     INFO  *** 	 1578 TGC Readout Elements 	 1578 TGC Detector Elements 
+MuGM:MuonFactory     INFO  ********************************************************************
+MuGM:MuonFactory     INFO  *** Inert Material built according to DB switches and config. ****** 
+MuGM:MuonFactory     INFO  *** The Muon Geometry Tree has 1758 child vol.s in total ********
+MuGM:MuonFactory     INFO  ********************************************************************
+
+MGM::MuonDetect...   INFO Init A/B Line Containers - done - size is respectively 1758/0
+MGM::MuonDetect...   INFO No Aline for CSC wire layers loaded 
+GeoModelSvc          INFO GeoModelSvc.MuonDetectorTool	 SZ= 42840Kb 	 Time = 0.69S
+GeoModelSvc.Muo...   INFO CondAttrListCollection not found in the DetectorStore
+GeoModelSvc.Muo...   INFO Unable to register callback on CondAttrListCollection for any folder in the list 
+GeoModelSvc.Muo...   INFO This is OK unless you expect to read alignment and deformations from COOL 
+ClassIDSvc           INFO  getRegistryEntries: read 1455 CLIDRegistry entries for module ALL
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 1794 CLIDRegistry entries for module ALL
+CondInputLoader      INFO Initializing CondInputLoader...
+CondInputLoader      INFO Adding base classes:
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )   ->
+CondInputLoader      INFO Will create WriteCondHandle dependencies for the following DataObjects:
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' ) 
+ClassIDSvc           INFO  getRegistryEntries: read 1370 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 743 CLIDRegistry entries for module ALL
+RpcRawDataProvider   INFO RpcRawDataProvider::initialize
+RpcRawDataProvider   INFO  'DoSeededDecoding':True
+ClassIDSvc           INFO  getRegistryEntries: read 1699 CLIDRegistry entries for module ALL
+RpcRawDataProvi...  DEBUG Property update for OutputLevel : new value = 2
+RpcRawDataProvi...  DEBUG Property update for OutputLevel : new value = 2
+MuonRPC_CablingSvc   INFO Initializing MuonRPC_CablingSvc - package version MuonRPC_Cabling-00-00-00
+ToolSvc.RPCCabl...   INFO Initializing - folders names are: conf /RPC/CABLING/MAP_SCHEMA / corr /RPC/CABLING/MAP_SCHEMA_CORR
+MuonRPC_CablingSvc   INFO RPCCablingDbTool retrieved with statusCode = SUCCESS with handle TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')
+MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
+MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/CABLING/MAP_SCHEMA>     found in the DetStore
+ClassIDSvc           INFO  getRegistryEntries: read 501 CLIDRegistry entries for module ALL
+MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA>
+MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/CABLING/MAP_SCHEMA_CORR>     found in the DetStore
+MuonRPC_CablingSvc   INFO initMappingModel registered for call-back against folder </RPC/CABLING/MAP_SCHEMA_CORR>
+MuonRPC_CablingSvc   INFO RPCTriggerDbTool retrieved with statusCode = SUCCESS pointer = TheRpcTriggerDbTool = PublicToolHandle('RPCTriggerDbTool')
+MuonRPC_CablingSvc   INFO Register call-back  against 2 folders listed below 
+MuonRPC_CablingSvc   INFO  Folder n. 1 </RPC/TRIGGER/CM_THR_ETA>     found in the DetStore
+MuonRPC_CablingSvc   INFO initTrigRoadsModel registered for call-back against folder </RPC/TRIGGER/CM_THR_ETA>
+MuonRPC_CablingSvc   INFO  Folder n. 2 </RPC/TRIGGER/CM_THR_PHI>     found in the DetStore
+MuonRPC_CablingSvc   INFO initTrigRoadsModel registered for call-back against folder </RPC/TRIGGER/CM_THR_PHI>
+RpcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::RpcROD_Decoder/RpcROD_Decoder')
+RpcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
+RpcRawDataProvi...   INFO  Tool = RpcRawDataProvider.RPC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
+RpcRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
+RpcRawDataProvi...   INFO initialize() successful in RpcRawDataProvider.RPC_RawDataProviderTool
+RpcRawDataProvi...  DEBUG Adding private ToolHandle tool RpcRawDataProvider.RPC_RawDataProviderTool.RpcROD_Decoder (Muon::RpcROD_Decoder)
+RegSelSvc            INFO Initializing RegSelSvc - package version RegionSelector-00-00-00
+RegSelSvc            INFO DetectorDescription version ATLAS-R2-2016-01-00-01 (obtained from GeoModelSvc)
+RegSelSvc            INFO DeltaZ = 168
+RegSelSvc            INFO detector switches: indet=disabled calo=disabled muon=disabled
+RegSelSvc            INFO  registered Listener with IncidentSvc
+TgcRawDataProvider   INFO TgcRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 987 CLIDRegistry entries for module ALL
+TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool.TgcROD_Decoder
+TgcRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::TGC_RodDecoderReadout/TgcROD_Decoder')
+TgcRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
+TgcRawDataProvi...   INFO  Tool = TgcRawDataProvider.TGC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
+MuonTGC_CablingSvc   INFO for 1/12 sector initialize
+ToolSvc.TGCCabl...   INFO initialize
+ClassIDSvc           INFO  getRegistryEntries: read 273 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonTGC_CablingSvc[0x1628d600]+219 bound to CondAttrListCollection[/TGC/CABLING/MAP_SCHEMA]
+TgcRawDataProvi...   INFO initialize() successful in TgcRawDataProvider.TGC_RawDataProviderTool
+MdtRawDataProvider   INFO MdtRawDataProvider::initialize
+ClassIDSvc           INFO  getRegistryEntries: read 922 CLIDRegistry entries for module ALL
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
+MdtRawDataProvi...VERBOSE Starting init
+MdtRawDataProvi...VERBOSE Getting m_robDataProvider
+MdtRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
+MdtRawDataProvi...VERBOSE Getting MuonDetectorManager
+MdtRawDataProvi...VERBOSE Getting m_decoder
+MdtRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
+MdtRawDataProvi...   INFO Processing configuration for layouts with BME chambers.
+MdtRawDataProvi...   INFO Processing configuration for layouts with BMG chambers.
+MdtRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('MdtROD_Decoder/MdtROD_Decoder')
+MdtRawDataProvi...   INFO  Tool = MdtRawDataProvider.MDT_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
+MdtRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
+MdtRawDataProvi...   INFO initialize() successful in MdtRawDataProvider.MDT_RawDataProviderTool
+MdtRawDataProvi...  DEBUG Adding private ToolHandle tool MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder (MdtROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 658 CLIDRegistry entries for module ALL
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
+CscRawDataProvi...   INFO Retrieved service ServiceHandle('ROBDataProviderSvc')
+CscRawDataProvi...VERBOSE ServiceLocatorHelper::service: found service JobOptionsSvc
+CscRawDataProvi...   INFO  Tool = CscRawDataProvider.CSC_RawDataProviderTool is connected to JobOptionsSvc Service = JobOptionsSvc
+CscRawDataProvi...  DEBUG Could not find TrigConf::HLTJobOptionsSvc
+CscRawDataProvi...  DEBUG Property update for OutputLevel : new value = 1
+CscRawDataProvi...  DEBUG  Found the CscIdHelper. 
+CscRawDataProvi...   INFO Retrieved tool Decoder = PrivateToolHandle('Muon::CscROD_Decoder/CscROD_Decoder')
+CscRawDataProvi...   INFO The Muon Geometry version is R.08.01
+CscRawDataProvi...   INFO initialize() successful in CscRawDataProvider.CSC_RawDataProviderTool
+CscRawDataProvi...  DEBUG Adding private ToolHandle tool CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder (Muon::CscROD_Decoder)
+ClassIDSvc           INFO  getRegistryEntries: read 53 CLIDRegistry entries for module ALL
+RpcRdoToRpcPrep...   INFO package version = MuonRPC_CnvTools-00-00-00
+RpcRdoToRpcPrep...   INFO properties are 
+RpcRdoToRpcPrep...   INFO processingData                     0
+RpcRdoToRpcPrep...   INFO produceRpcCoinDatafromTriggerWords 1
+RpcRdoToRpcPrep...   INFO reduceCablingOverlap               1
+RpcRdoToRpcPrep...   INFO solvePhiAmbiguities                1
+RpcRdoToRpcPrep...   INFO timeShift                          -12.5
+RpcRdoToRpcPrep...   INFO etaphi_coincidenceTime             20
+RpcRdoToRpcPrep...   INFO overlap_timeTolerance              10
+RpcRdoToRpcPrep...   INFO Correct prd time from cool db      0
+RpcRdoToRpcPrep...   INFO Rpc Cabling Svc name is dataLike
+RpcRdoToRpcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::RpcRdoToPrepDataTool/RpcRdoToRpcPrepDataTool')
+TgcRdoToTgcPrep...   INFO initialize() successful in TgcRdoToTgcPrepData.TgcRdoToTgcPrepDataTool
+TgcRdoToTgcPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::TgcRdoToPrepDataTool/TgcRdoToTgcPrepDataTool')
+MdtCalibrationSvc    INFO Processing configuration for layouts with BMG chambers.
+ClassIDSvc           INFO  getRegistryEntries: read 196 CLIDRegistry entries for module ALL
+ToolSvc.MuonCal...   INFO  Retrieved IdHelpers: (muon, mdt, csc, rpc and tgc) 
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+AtlasFieldSvc        INFO initialize() ...
+AtlasFieldSvc        INFO maps will be chosen reading COOL folder /GLOBAL/BField/Maps
+ClassIDSvc           INFO  getRegistryEntries: read 372 CLIDRegistry entries for module ALL
+AtlasFieldSvc        INFO magnet currents will be read from COOL folder /EXT/DCS/MAGNETS/SENSORDATA
+AtlasFieldSvc        INFO Booked callback for /EXT/DCS/MAGNETS/SENSORDATA
+AtlasFieldSvc        INFO initialize() successful
+MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BME chambers.
+MdtRdoToMdtPrep...   INFO Processing configuration for layouts with BMG chambers.
+MdtRdoToMdtPrep...   INFO Retrieved DecodingTool = PrivateToolHandle('Muon::MdtRdoToPrepDataTool/MdtRdoToMdtPrepDataTool')
+ClassIDSvc           INFO  getRegistryEntries: read 60 CLIDRegistry entries for module ALL
+CscRdoToCscPrep...   INFO The Geometry version is MuonSpectrometer-R.08.01
+MuonCalib::CscC...   INFO Initializing CscCoolStrSvc
+ClassIDSvc           INFO  getRegistryEntries: read 181 CLIDRegistry entries for module ALL
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_PED]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_NOISE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_PSLOPE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_STAT]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_RMS]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_FTHOLD]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_T0BASE]
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for MuonCalib::CscCoolStrSvc[0x1b8fc700]+259 bound to CondAttrListCollection[CSC_T0PHASE]
+CscRdoToCscPrep...   INFO Retrieved CscRdoToCscPrepDataTool = PrivateToolHandle('Muon::CscRdoToCscPrepDataTool/CscRdoToCscPrepDataTool')
+HistogramPersis...WARNING Histograms saving not required.
+EventSelector        INFO Initializing EventSelector - package version ByteStreamCnvSvc-00-00-00
+EventSelector     WARNING InputCollections not properly set, checking EventStorageInputSvc properties
+EventSelector        INFO Retrieved StoreGateSvc name of  '':StoreGateSvc
+EventSelector        INFO reinitialization...
+ClassIDSvc           INFO  getRegistryEntries: read 1126 CLIDRegistry entries for module ALL
+ToolSvc.Luminos...   INFO LuminosityTool::initialize() registering 
+ToolSvc.Luminos...   INFO LumiFolderName is empty, skipping
+ToolSvc.Luminos...   INFO OnlineLumiCalibrationTool.empty() is TRUE, skipping...
+ToolSvc.Luminos...   INFO FillParamsTool.empty() is TRUE, skipping...
+ToolSvc.Luminos...   INFO BunchLumisTool.empty() is TRUE, skipping...
+ToolSvc.Luminos...   INFO BunchGroupTool.empty() is TRUE, skipping...
+ToolSvc.Luminos...   INFO LBLBFolderName is empty, skipping...
+EventSelector        INFO Retrieved InputCollections from InputSvc
+ByteStreamInputSvc   INFO Initializing ByteStreamInputSvc - package version ByteStreamCnvSvc-00-00-00
+EventSelector        INFO reinitialization...
+AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
+ApplicationMgr       INFO Application Manager Initialized successfully
+ByteStreamInputSvc   INFO Picked valid file: /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/EXT/DCS/MAGNETS/SENSORDATA'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MAP_SCHEMA'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA'
+ApplicationMgr       INFO Application Manager Started successfully
+EventInfoByteSt...   INFO UserType : RawEvent
+EventInfoByteSt...   INFO IsSimulation : 0
+EventInfoByteSt...   INFO IsTestbeam : 0
+EventInfoByteSt...   INFO IsCalibration : 0
+EventInfoByteSt...   INFO  EventContext not valid 
+AthenaEventLoopMgr   INFO   ===>>>  start of run 327265    <<<===
+EventPersistenc...   INFO Added successfully Conversion service:TagInfoMgr
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_DCS/CONDBR2
+IOVDbSvc             INFO Disconnecting from COOLOFL_DCS/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLONL_GLOBAL/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to BFieldMap-Run1-14m-v01 for folder /GLOBAL/BField/Maps
+IOVDbSvc             INFO Disconnecting from COOLONL_GLOBAL/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_MDT/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTRT-RUN2-UPD4-21 for folder /MDT/RTBLOB
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTT0-RUN2-UPD4-21 for folder /MDT/T0BLOB
+IOVDbSvc             INFO Disconnecting from COOLOFL_MDT/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLONL_RPC/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchema_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCCablingMapSchemaCorr_2016_2017_01 for folder /RPC/CABLING/MAP_SCHEMA_CORR
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCTriggerCMThrEta_RUN1-RUN2-HI-02 for folder /RPC/TRIGGER/CM_THR_ETA
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to RPCTriggerCMThrPhi_RUN1-RUN2-HI-02 for folder /RPC/TRIGGER/CM_THR_PHI
+IOVDbSvc             INFO Disconnecting from COOLONL_RPC/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLONL_TGC/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to TgcCablingMapschema-RUN2-20100908-ASD2PPONL for folder /TGC/CABLING/MAP_SCHEMA
+IOVDbSvc             INFO Disconnecting from COOLONL_TGC/CONDBR2
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_CSC/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscFthold-RUN2-BLK-UPD1-007-00 for folder /CSC/FTHOLD
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscNoise-RUN2-BLK-UPD1-007-00 for folder /CSC/NOISE
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscPed-RUN2-BLK-UPD1-007-00 for folder /CSC/PED
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscPslope-RUN2-BLK-UPD1-000-00 for folder /CSC/PSLOPE
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscRms-RUN2-BLK-UPD1-003-00 for folder /CSC/RMS
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscStat-RUN2-BLK-UPD1-008-00 for folder /CSC/STAT
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscT0base-RUN2-BLK-UPD1-001-00 for folder /CSC/T0BASE
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to CscT0phase-RUN2-BLK-UPD2-001-00 for folder /CSC/T0PHASE
+IOVDbSvc             INFO Disconnecting from COOLOFL_CSC/CONDBR2
+MuonRPC_CablingSvc   INFO initMappingModel has been called
+MuonRPC_CablingSvc   INFO ToolHandle in initMappingModel - <TheRpcCablingDbTool = PublicToolHandle('RPCCablingDbTool/RPCCablingDbTool')>
+MuonRPC_CablingSvc   INFO Retrieving cabling singleton; to create an empty one or to get the existing one
+RPCcabling           INFO CablingRPC---singleton constructor ---- this must be executed just once
+RPCcabling           INFO CablingRPC---The singleton will fill the maps from the COOL streams
+RPCcabling           INFO CablingRPC---InitMaps from COOL cannot be executed NOW: empty string
+RPCcabling           INFO CablingRPC---The singleton is created here
+RPCcabling           INFO CablingRPC--- cacheCleared: s_status = 0
+MuonRPC_CablingSvc   INFO Cabling singleton cache has been cleared
+MuonRPC_CablingSvc   INFO  Trigger roads will be loaded from COOL
+ToolSvc.RPCCabl...   INFO LoadParameters /RPC/CABLING/MAP_SCHEMA I=2 
+ToolSvc.RPCCabl...   INFO loadRPCMap --- Load Map from DB
+ToolSvc.RPCCabl...   INFO Try to read from folder </RPC/CABLING/MAP_SCHEMA>
+ToolSvc.RPCCabl...   INFO  CondAttrListCollection from DB folder have been obtained with size 1
+ToolSvc.RPCCabl...   INFO Loop over CondAttrListCollection ic = 1
+ToolSvc.RPCCabl...   INFO After Reading folder, Configuration string size is 222202
+ToolSvc.RPCCabl...   INFO LoadParameters /RPC/CABLING/MAP_SCHEMA_CORR I=2 
+ToolSvc.RPCCabl...   INFO loadRPCCorr --- Load Corrections from DB
+ToolSvc.RPCCabl...   INFO Try to read from folder </RPC/CABLING/MAP_SCHEMA_CORR>
+ToolSvc.RPCCabl...   INFO  CondAttrListCollection from DB folder have been obtained with size 1
+ToolSvc.RPCCabl...   INFO After Reading folder, Correction string size is 29369
+MuonRPC_CablingSvc   INFO  InitMappingModel: Trigger roads not yet loaded from COOL - postpone cabling initialization 
+MuonRPC_CablingSvc   INFO initTrigRoadsModel has been called
+MuonRPC_CablingSvc   INFO  Trigger roads will be loaded from COOL
+MuonRPC_CablingSvc   INFO Retrieve the pointer to the cabling singleton 
+RPCcabling           INFO CablingRPC--- cacheCleared: s_status = 0
+MuonRPC_CablingSvc   INFO Cabling singleton cache has been cleared
+ToolSvc.RPCTrig...   INFO LoadParameters /RPC/TRIGGER/CM_THR_ETA I=2 
+ToolSvc.RPCTrig...   INFO LoadParameters /RPC/TRIGGER/CM_THR_PHI I=2 
+MuonRPC_CablingSvc   INFO ======== RPC Trigger Roads from COOL - Header infos ========
+MuonRPC_CablingSvc   INFO 
+RPC LVL1 Configuration 10.6 with roads from Feb 2012
+L1 THRESHOLDS:   MU4 MU6 MU10 MU11 MU15 MU20
+Road version: "road_files_120209"
+CMA            th0    th1   th2
+eta low-pt     mu4    mu6   mu10
+phi low-pt     mu4    mu6   mu10
+eta high-pt    mu11  mu15   mu20
+phi high-pt    mu11  mu15   mu15
+
+
+RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling map from COOL <<
+RPCcabling           INFO CablingRPC--- ReadConf: map has size 222202
+RPCcabling           INFO CablingRPC--- ReadConf: map n. of lines read is 924
+RPCcabling           INFO CablingRPC--- ReadConf: version is 5.0 Atlas R_07_03_RUN2ver104
+RPCcabling           INFO CablingRPC--- buildRDOmap
+RPCcabling           INFO CablingRPC---InitMaps from COOL: going to read corrections to configuration
+RPCcabling           INFO CablingRPC--->> RPC cabling corrections from COOL <<
+RPCcabling           INFO CablingRPC--- ReadCorr: CorrMap has size 29369
+RPCcabling           INFO CablingRPC--- ReadConf: CorrMap n. of lines read is 743
+RPCcabling           INFO CablingRPC---InitMaps from COOL - maps have been parsed
+MuonRPC_CablingSvc   INFO InitTrigRoadsModel: RPC cabling model is loaded!
+Level-1 configuration database version 5.0 Atlas R_07_03_RUN2ver104 read.
+Contains 26 Trigger Sector Types:
+negative sectors  0 - 15 ==> 18  2 24  3 19  2 24  4 20  2 24  1 18  5 25  6 
+negative sectors 16 - 31 ==> 21 13 26  6 21  7 16  8 14  7 16  6 21 13 26  1 
+positive sectors 32 - 47 ==>  9 24  2 22  9 24  2 23 10 24  2 18  1 25  5 18 
+positive sectors 48 - 63 ==>  1 26 13 21  6 17 12 15 11 17 12 21  6 26 13 22 
+
+MuonRPC_CablingSvc   INFO buildOfflineOnlineMap
+MuonRPC_CablingSvc   INFO Applying FeetPadThresholds : 0,2,5
+MuonRPC_CablingSvc   INFO MuonRPC_CablingSvc initialized succesfully
+MuonTGC_CablingSvc   INFO updateCableASDToPP called
+ToolSvc.TGCCabl...   INFO loadTGCMap from DB
+ToolSvc.TGCCabl...   INFO CondAttrListCollection from DB folder have been obtained with size 1
+ToolSvc.TGCCabl...   INFO giveASD2PP_DIFF_12 (m_ASD2PP_DIFF_12 is not NULL)
+ToolSvc.MdtCali...   INFO Creating new MdtTubeCalibContainerCollection
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML -6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO Ignoring nonexistant station in calibration DB: MuonSpectrometer BML stationEta 6 stationPhi 7 MDT multiLayer 1 tubeLayer 1 tube 1
+ToolSvc.MdtCali...   INFO MdtCalibDbCoolStrTool::loadRt Read 1188RTs from COOL
+AtlasFieldSvc        INFO reading magnetic field map filenames from COOL
+AtlasFieldSvc        INFO found map of type GlobalMap with soleCur=7730 toroCur=20400 (path file:MagneticFieldMaps/bfieldmap_7730_20400_14m.root)
+AtlasFieldSvc        INFO found map of type SolenoidMap with soleCur=7730 toroCur=0 (path file:MagneticFieldMaps/bfieldmap_7730_0_14m.root)
+AtlasFieldSvc        INFO found map of type ToroidMap with soleCur=0 toroCur=20400 (path file:MagneticFieldMaps/bfieldmap_0_20400_14m.root)
+AtlasFieldSvc        INFO no need to update map set
+AtlasFieldSvc        INFO Attempt 1 at reading currents from DCS (using channel name)
+AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] CentralSol_Current , 1 , 7729.99
+AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] CentralSol_SCurrent , 2 , 7730
+AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_Current , 3 , 20399.9
+AtlasFieldSvc        INFO Trying to read from DCS: [channel name, index, value] Toroids_SCurrent , 4 , 20397.7
+AtlasFieldSvc        INFO Currents read from DCS: solenoid 7729.99 toroid 20399.9
+AtlasFieldSvc        INFO Initializing the field map (solenoidCurrent=7729.99 toroidCurrent=20399.9)
+AtlasFieldSvc        INFO reading the map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+AtlasFieldSvc        INFO Initialized the field map from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/atlas/offline/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root
+ClassIDSvc           INFO  getRegistryEntries: read 672 CLIDRegistry entries for module ALL
+RegSelSvc            INFO  handle incident type BeginRun
+RegSelSvc            INFO  >>>>>  detectors have been initialized
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186525031, run #327265 0 events processed so far  <<<===
+IOVDbSvc             INFO Opening COOL connection for COOLONL_MDT/CONDBR2
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMapSchema_BMG_01 for folder /MDT/CABLING/MAP_SCHEMA
+IOVDbFolder          INFO HVS tag CONDBR2-BLKPA-2018-13 resolved to MDTCablingMezzanineSchema_M5-RUN2 for folder /MDT/CABLING/MEZZANINE_SCHEMA
+IOVDbSvc             INFO Disconnecting from COOLONL_MDT/CONDBR2
+MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MEZZANINE_SCHEMA' )  readCdoMez->size()= 24
+MuonMDT_CablingAlg   INFO Range of input is {[0,l:0] - [INVALID]}
+MuonMDT_CablingAlg   INFO Size of CondAttrListCollection  ( 'CondAttrListCollection' , 'ConditionStore+/MDT/CABLING/MAP_SCHEMA' )  readCdoMap->size()= 2312
+MuonMDT_CablingAlg   INFO Range of input is {[327264,l:4294640031] - [327265,l:4294640030]}
+MuonMDT_CablingAlg   INFO recorded new MuonMDT_CablingMap with range {[327264,l:4294640031] - [327265,l:4294640030]} into Conditions Store
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG fillCollection: starting
+MdtRawDataProvi...  DEBUG **********Decoder dumping the words******** 
+MdtRawDataProvi...  DEBUG The size of this ROD-read is 
+MdtRawDataProvi...  DEBUG word 0 = 8003e994
+MdtRawDataProvi...  DEBUG word 1 = 81040007
+MdtRawDataProvi...  DEBUG word 2 = 18030370
+MdtRawDataProvi...  DEBUG word 3 = 890003ff
+MdtRawDataProvi...  DEBUG word 4 = a3994153
+MdtRawDataProvi...  DEBUG word 5 = 30a403c0
+MdtRawDataProvi...  DEBUG word 6 = 30a004ce
+MdtRawDataProvi...  DEBUG word 7 = 8a994005
+MdtRawDataProvi...  DEBUG word 8 = 8104000d
+MdtRawDataProvi...  DEBUG word 9 = 18030371
+MdtRawDataProvi...  DEBUG word 10 = 89000fff
+MdtRawDataProvi...  DEBUG word 11 = a2994153
+MdtRawDataProvi...  DEBUG word 12 = 306c0472
+MdtRawDataProvi...  DEBUG word 13 = 306804d5
+MdtRawDataProvi...  DEBUG word 14 = a3994153
+MdtRawDataProvi...  DEBUG word 15 = 20080000
+MdtRawDataProvi...  DEBUG word 16 = a4994153
+MdtRawDataProvi...  DEBUG word 17 = 301c0504
+MdtRawDataProvi...  DEBUG word 18 = 30180562
+MdtRawDataProvi...  DEBUG word 19 = 20000010
+MdtRawDataProvi...  DEBUG word 20 = 8a99400b
+MdtRawDataProvi...  DEBUG word 21 = 81040006
+MdtRawDataProvi...  DEBUG word 22 = 18030372
+MdtRawDataProvi...  DEBUG word 23 = 89003fff
+MdtRawDataProvi...  DEBUG word 24 = a6994153
+MdtRawDataProvi...  DEBUG word 25 = 20008000
+MdtRawDataProvi...  DEBUG word 26 = 8a994004
+MdtRawDataProvi...  DEBUG word 27 = 8104000f
+MdtRawDataProvi...  DEBUG word 28 = 18030373
+MdtRawDataProvi...  DEBUG word 29 = 89003fff
+MdtRawDataProvi...  DEBUG word 30 = a0994153
+MdtRawDataProvi...  DEBUG word 31 = 3034054a
+MdtRawDataProvi...  DEBUG word 32 = 303005c2
+MdtRawDataProvi...  DEBUG word 33 = a7994153
+MdtRawDataProvi...  DEBUG word 34 = 3084023a
+MdtRawDataProvi...  DEBUG word 35 = 3080029e
+MdtRawDataProvi...  DEBUG word 36 = a8994153
+MdtRawDataProvi...  DEBUG word 37 = 307c03f6
+MdtRawDataProvi...  DEBUG word 38 = 30ac03f8
+MdtRawDataProvi...  DEBUG word 39 = 307804c4
+MdtRawDataProvi...  DEBUG word 40 = 30a804cb
+MdtRawDataProvi...  DEBUG word 41 = 8a99400d
+MdtRawDataProvi...  DEBUG word 42 = 81040008
+MdtRawDataProvi...  DEBUG word 43 = 18030374
+MdtRawDataProvi...  DEBUG word 44 = 8903ffff
+MdtRawDataProvi...  DEBUG word 45 = af994153
+MdtRawDataProvi...  DEBUG word 46 = 302c05c7
+MdtRawDataProvi...  DEBUG word 47 = 30280664
+MdtRawDataProvi...  DEBUG word 48 = 305c0673
+MdtRawDataProvi...  DEBUG word 49 = 8a994006
+MdtRawDataProvi...  DEBUG word 50 = 81040031
+MdtRawDataProvi...  DEBUG word 51 = 18030375
+MdtRawDataProvi...  DEBUG word 52 = 8903ffff
+MdtRawDataProvi...  DEBUG word 53 = a0994153
+MdtRawDataProvi...  DEBUG word 54 = 3054055c
+MdtRawDataProvi...  DEBUG word 55 = 305005fb
+MdtRawDataProvi...  DEBUG word 56 = a2994153
+MdtRawDataProvi...  DEBUG word 57 = 20010000
+MdtRawDataProvi...  DEBUG word 58 = a8994153
+MdtRawDataProvi...  DEBUG word 59 = 306c034f
+MdtRawDataProvi...  DEBUG word 60 = 309c0349
+MdtRawDataProvi...  DEBUG word 61 = 308c0394
+MdtRawDataProvi...  DEBUG word 62 = 309803d9
+MdtRawDataProvi...  DEBUG word 63 = 304c03f8
+MdtRawDataProvi...  DEBUG word 64 = 30680422
+MdtRawDataProvi...  DEBUG word 65 = 30880439
+MdtRawDataProvi...  DEBUG word 66 = 30bc03f3
+MdtRawDataProvi...  DEBUG word 67 = 3048049a
+MdtRawDataProvi...  DEBUG word 68 = 30b80479
+MdtRawDataProvi...  DEBUG word 69 = 305c05e9
+MdtRawDataProvi...  DEBUG word 70 = 30580652
+MdtRawDataProvi...  DEBUG word 71 = af994153
+MdtRawDataProvi...  DEBUG word 72 = 30940521
+MdtRawDataProvi...  DEBUG word 73 = 30840583
+MdtRawDataProvi...  DEBUG word 74 = 308c0583
+MdtRawDataProvi...  DEBUG word 75 = 309c0585
+MdtRawDataProvi...  DEBUG word 76 = 308005e7
+MdtRawDataProvi...  DEBUG word 77 = 308805f5
+MdtRawDataProvi...  DEBUG word 78 = 3090061d
+MdtRawDataProvi...  DEBUG word 79 = 309805f1
+MdtRawDataProvi...  DEBUG word 80 = 30a40587
+MdtRawDataProvi...  DEBUG word 81 = 30ac0588
+MdtRawDataProvi...  DEBUG word 82 = 30b40589
+MdtRawDataProvi...  DEBUG word 83 = 30bc058d
+MdtRawDataProvi...  DEBUG word 84 = 30a005fc
+MdtRawDataProvi...  DEBUG word 85 = 30a805f2
+MdtRawDataProvi...  DEBUG word 86 = 30b005e7
+MdtRawDataProvi...  DEBUG word 87 = 30b805d8
+MdtRawDataProvi...  DEBUG word 88 = b0994153
+MdtRawDataProvi...  DEBUG word 89 = 306c0082
+MdtRawDataProvi...  DEBUG word 90 = 3068012b
+MdtRawDataProvi...  DEBUG word 91 = 303c01ed
+MdtRawDataProvi...  DEBUG word 92 = 30380250
+MdtRawDataProvi...  DEBUG word 93 = 306c0556
+MdtRawDataProvi...  DEBUG word 94 = 306805a3
+MdtRawDataProvi...  DEBUG word 95 = 20004000
+MdtRawDataProvi...  DEBUG word 96 = b1994153
+MdtRawDataProvi...  DEBUG word 97 = 20010000
+MdtRawDataProvi...  DEBUG word 98 = 8a99402f
+MdtRawDataProvi...  DEBUG word 99 = f0000064
+MdtRawDataProvi...  DEBUG Found the beginning of buffer 
+MdtRawDataProvi...  DEBUG Level 1 Id : 256404
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 0
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6048000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 1
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6050000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 2
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6248000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 3
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6250000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 4
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6448000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 15
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 0 csmId : 5
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 1
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6450000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 15
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 16
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 17
+MdtRawDataProvi...  DEBUG fillCollection: starting
+MdtRawDataProvi...  DEBUG **********Decoder dumping the words******** 
+MdtRawDataProvi...  DEBUG The size of this ROD-read is 
+MdtRawDataProvi...  DEBUG word 0 = 8003e994
+MdtRawDataProvi...  DEBUG word 1 = 81040004
+MdtRawDataProvi...  DEBUG word 2 = 18030210
+MdtRawDataProvi...  DEBUG word 3 = 890003ff
+MdtRawDataProvi...  DEBUG word 4 = 8a994002
+MdtRawDataProvi...  DEBUG word 5 = 81040014
+MdtRawDataProvi...  DEBUG word 6 = 18030211
+MdtRawDataProvi...  DEBUG word 7 = 89000fff
+MdtRawDataProvi...  DEBUG word 8 = a1994153
+MdtRawDataProvi...  DEBUG word 9 = 20000500
+MdtRawDataProvi...  DEBUG word 10 = a3994153
+MdtRawDataProvi...  DEBUG word 11 = 20000028
+MdtRawDataProvi...  DEBUG word 12 = aa994153
+MdtRawDataProvi...  DEBUG word 13 = 303c0116
+MdtRawDataProvi...  DEBUG word 14 = 3038016f
+MdtRawDataProvi...  DEBUG word 15 = 308c0202
+MdtRawDataProvi...  DEBUG word 16 = 3088026b
+MdtRawDataProvi...  DEBUG word 17 = 20100000
+MdtRawDataProvi...  DEBUG word 18 = ab994153
+MdtRawDataProvi...  DEBUG word 19 = 3074012d
+MdtRawDataProvi...  DEBUG word 20 = 30700187
+MdtRawDataProvi...  DEBUG word 21 = 3084015b
+MdtRawDataProvi...  DEBUG word 22 = 308001ca
+MdtRawDataProvi...  DEBUG word 23 = 20140150
+MdtRawDataProvi...  DEBUG word 24 = 8a994012
+MdtRawDataProvi...  DEBUG word 25 = 81040007
+MdtRawDataProvi...  DEBUG word 26 = 18030212
+MdtRawDataProvi...  DEBUG word 27 = 89003fff
+MdtRawDataProvi...  DEBUG word 28 = a3994153
+MdtRawDataProvi...  DEBUG word 29 = 307c0071
+MdtRawDataProvi...  DEBUG word 30 = 30780094
+MdtRawDataProvi...  DEBUG word 31 = 8a994005
+MdtRawDataProvi...  DEBUG word 32 = 81040014
+MdtRawDataProvi...  DEBUG word 33 = 18030213
+MdtRawDataProvi...  DEBUG word 34 = 89003fff
+MdtRawDataProvi...  DEBUG word 35 = a3994153
+MdtRawDataProvi...  DEBUG word 36 = 30b401cb
+MdtRawDataProvi...  DEBUG word 37 = 30bc0213
+MdtRawDataProvi...  DEBUG word 38 = 30b00256
+MdtRawDataProvi...  DEBUG word 39 = 30b802c7
+MdtRawDataProvi...  DEBUG word 40 = 307c032d
+MdtRawDataProvi...  DEBUG word 41 = 30840397
+MdtRawDataProvi...  DEBUG word 42 = 307803e7
+MdtRawDataProvi...  DEBUG word 43 = 308003f1
+MdtRawDataProvi...  DEBUG word 44 = a6994153
+MdtRawDataProvi...  DEBUG word 45 = 30b40533
+MdtRawDataProvi...  DEBUG word 46 = 30740552
+MdtRawDataProvi...  DEBUG word 47 = 30a40588
+MdtRawDataProvi...  DEBUG word 48 = 307005cb
+MdtRawDataProvi...  DEBUG word 49 = 30a00611
+MdtRawDataProvi...  DEBUG word 50 = 30b0063b
+MdtRawDataProvi...  DEBUG word 51 = 8a994012
+MdtRawDataProvi...  DEBUG word 52 = 8104001c
+MdtRawDataProvi...  DEBUG word 53 = 18030214
+MdtRawDataProvi...  DEBUG word 54 = 8903ffff
+MdtRawDataProvi...  DEBUG word 55 = a2994153
+MdtRawDataProvi...  DEBUG word 56 = 30b0002f
+MdtRawDataProvi...  DEBUG word 57 = 3084019b
+MdtRawDataProvi...  DEBUG word 58 = 30800237
+MdtRawDataProvi...  DEBUG word 59 = 20540100
+MdtRawDataProvi...  DEBUG word 60 = a4994153
+MdtRawDataProvi...  DEBUG word 61 = 306c019f
+MdtRawDataProvi...  DEBUG word 62 = 30680214
+MdtRawDataProvi...  DEBUG word 63 = 30140429
+MdtRawDataProvi...  DEBUG word 64 = 30100474
+MdtRawDataProvi...  DEBUG word 65 = 20000ad4
+MdtRawDataProvi...  DEBUG word 66 = a5994153
+MdtRawDataProvi...  DEBUG word 67 = 30bc0362
+MdtRawDataProvi...  DEBUG word 68 = 30b80481
+MdtRawDataProvi...  DEBUG word 69 = a6994153
+MdtRawDataProvi...  DEBUG word 70 = 20004000
+MdtRawDataProvi...  DEBUG word 71 = a8994153
+MdtRawDataProvi...  DEBUG word 72 = 20000820
+MdtRawDataProvi...  DEBUG word 73 = aa994153
+MdtRawDataProvi...  DEBUG word 74 = 20000002
+MdtRawDataProvi...  DEBUG word 75 = ae994153
+MdtRawDataProvi...  DEBUG word 76 = 20000080
+MdtRawDataProvi...  DEBUG word 77 = b0994153
+MdtRawDataProvi...  DEBUG word 78 = 20000200
+MdtRawDataProvi...  DEBUG word 79 = 8a99401a
+MdtRawDataProvi...  DEBUG word 80 = 81040025
+MdtRawDataProvi...  DEBUG word 81 = 18030215
+MdtRawDataProvi...  DEBUG word 82 = 8903ffff
+MdtRawDataProvi...  DEBUG word 83 = a5994153
+MdtRawDataProvi...  DEBUG word 84 = 304c054e
+MdtRawDataProvi...  DEBUG word 85 = 304805fd
+MdtRawDataProvi...  DEBUG word 86 = a6994153
+MdtRawDataProvi...  DEBUG word 87 = 20000040
+MdtRawDataProvi...  DEBUG word 88 = a8994153
+MdtRawDataProvi...  DEBUG word 89 = 306c0098
+MdtRawDataProvi...  DEBUG word 90 = 30bc0093
+MdtRawDataProvi...  DEBUG word 91 = 308400fd
+MdtRawDataProvi...  DEBUG word 92 = 308c00fe
+MdtRawDataProvi...  DEBUG word 93 = 309400fb
+MdtRawDataProvi...  DEBUG word 94 = 309c00fd
+MdtRawDataProvi...  DEBUG word 95 = 30a400f9
+MdtRawDataProvi...  DEBUG word 96 = 30ac00fc
+MdtRawDataProvi...  DEBUG word 97 = 30b400f9
+MdtRawDataProvi...  DEBUG word 98 = 302c0185
+MdtRawDataProvi...  DEBUG word 99 = 306801a0
+MdtRawDataProvi...  DEBUG word 100 = 30800148
+MdtRawDataProvi...  DEBUG word 101 = 30880147
+MdtRawDataProvi...  DEBUG word 102 = 30900149
+MdtRawDataProvi...  DEBUG word 103 = 30980168
+MdtRawDataProvi...  DEBUG word 104 = 30a00169
+MdtRawDataProvi...  DEBUG word 105 = 30a80163
+MdtRawDataProvi...  DEBUG word 106 = 30b00161
+MdtRawDataProvi...  DEBUG word 107 = 30b801a3
+MdtRawDataProvi...  DEBUG word 108 = 30280271
+MdtRawDataProvi...  DEBUG word 109 = a9994153
+MdtRawDataProvi...  DEBUG word 110 = 301c00b6
+MdtRawDataProvi...  DEBUG word 111 = 309c00d1
+MdtRawDataProvi...  DEBUG word 112 = 301801bc
+MdtRawDataProvi...  DEBUG word 113 = 309801b9
+MdtRawDataProvi...  DEBUG word 114 = 305c01f8
+MdtRawDataProvi...  DEBUG word 115 = 305802ec
+MdtRawDataProvi...  DEBUG word 116 = 8a994023
+MdtRawDataProvi...  DEBUG word 117 = f0000076
+MdtRawDataProvi...  DEBUG Found the beginning of buffer 
+MdtRawDataProvi...  DEBUG Level 1 Id : 256404
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 0
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6049000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 1
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6051000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 10
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 11
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 2
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6249000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 3
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6251000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 3
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 4
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6449000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 2
+MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 2 chan: 22
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 10
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 14
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 16
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 1 csmId : 5
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 2
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6451000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 6
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
+MdtRawDataProvi...  DEBUG fillCollection: starting
+MdtRawDataProvi...  DEBUG **********Decoder dumping the words******** 
+MdtRawDataProvi...  DEBUG The size of this ROD-read is 
+MdtRawDataProvi...  DEBUG word 0 = 8003e994
+MdtRawDataProvi...  DEBUG word 1 = 81040004
+MdtRawDataProvi...  DEBUG word 2 = 180300d0
+MdtRawDataProvi...  DEBUG word 3 = 890003ff
+MdtRawDataProvi...  DEBUG word 4 = 8a994002
+MdtRawDataProvi...  DEBUG word 5 = 81040004
+MdtRawDataProvi...  DEBUG word 6 = 180300d1
+MdtRawDataProvi...  DEBUG word 7 = 89000fff
+MdtRawDataProvi...  DEBUG word 8 = 8a994002
+MdtRawDataProvi...  DEBUG word 9 = 8104000e
+MdtRawDataProvi...  DEBUG word 10 = 180300d2
+MdtRawDataProvi...  DEBUG word 11 = 89000fff
+MdtRawDataProvi...  DEBUG word 12 = a0994153
+MdtRawDataProvi...  DEBUG word 13 = 30a00056
+MdtRawDataProvi...  DEBUG word 14 = 20105050
+MdtRawDataProvi...  DEBUG word 15 = a1994153
+MdtRawDataProvi...  DEBUG word 16 = 30b40578
+MdtRawDataProvi...  DEBUG word 17 = 30b0060a
+MdtRawDataProvi...  DEBUG word 18 = a8994153
+MdtRawDataProvi...  DEBUG word 19 = 20000400
+MdtRawDataProvi...  DEBUG word 20 = a9994153
+MdtRawDataProvi...  DEBUG word 21 = 307c067b
+MdtRawDataProvi...  DEBUG word 22 = 8a99400c
+MdtRawDataProvi...  DEBUG word 23 = 81040011
+MdtRawDataProvi...  DEBUG word 24 = 180300d3
+MdtRawDataProvi...  DEBUG word 25 = 89003fff
+MdtRawDataProvi...  DEBUG word 26 = a5994153
+MdtRawDataProvi...  DEBUG word 27 = 308c0359
+MdtRawDataProvi...  DEBUG word 28 = 30880397
+MdtRawDataProvi...  DEBUG word 29 = 20020000
+MdtRawDataProvi...  DEBUG word 30 = a7994153
+MdtRawDataProvi...  DEBUG word 31 = 30600040
+MdtRawDataProvi...  DEBUG word 32 = 20001000
+MdtRawDataProvi...  DEBUG word 33 = a8994153
+MdtRawDataProvi...  DEBUG word 34 = 302403a8
+MdtRawDataProvi...  DEBUG word 35 = 3020040f
+MdtRawDataProvi...  DEBUG word 36 = a9994153
+MdtRawDataProvi...  DEBUG word 37 = 309c0635
+MdtRawDataProvi...  DEBUG word 38 = 308c0671
+MdtRawDataProvi...  DEBUG word 39 = 8a99400f
+MdtRawDataProvi...  DEBUG word 40 = 81040017
+MdtRawDataProvi...  DEBUG word 41 = 180300d4
+MdtRawDataProvi...  DEBUG word 42 = 8900ffff
+MdtRawDataProvi...  DEBUG word 43 = a1994153
+MdtRawDataProvi...  DEBUG word 44 = 304c0488
+MdtRawDataProvi...  DEBUG word 45 = 308c0498
+MdtRawDataProvi...  DEBUG word 46 = 302c0500
+MdtRawDataProvi...  DEBUG word 47 = 30280581
+MdtRawDataProvi...  DEBUG word 48 = 3048052d
+MdtRawDataProvi...  DEBUG word 49 = 3088056a
+MdtRawDataProvi...  DEBUG word 50 = 301c05a2
+MdtRawDataProvi...  DEBUG word 51 = 30180610
+MdtRawDataProvi...  DEBUG word 52 = 309c0646
+MdtRawDataProvi...  DEBUG word 53 = a4994153
+MdtRawDataProvi...  DEBUG word 54 = 30640517
+MdtRawDataProvi...  DEBUG word 55 = 306005a2
+MdtRawDataProvi...  DEBUG word 56 = 302405e1
+MdtRawDataProvi...  DEBUG word 57 = 30200624
+MdtRawDataProvi...  DEBUG word 58 = a9994153
+MdtRawDataProvi...  DEBUG word 59 = 200000a0
+MdtRawDataProvi...  DEBUG word 60 = ab994153
+MdtRawDataProvi...  DEBUG word 61 = 20041100
+MdtRawDataProvi...  DEBUG word 62 = 8a994015
+MdtRawDataProvi...  DEBUG word 63 = 8104001c
+MdtRawDataProvi...  DEBUG word 64 = 180300d5
+MdtRawDataProvi...  DEBUG word 65 = 8903ffff
+MdtRawDataProvi...  DEBUG word 66 = a0994153
+MdtRawDataProvi...  DEBUG word 67 = 3014000e
+MdtRawDataProvi...  DEBUG word 68 = 30100032
+MdtRawDataProvi...  DEBUG word 69 = 30940069
+MdtRawDataProvi...  DEBUG word 70 = 3090008d
+MdtRawDataProvi...  DEBUG word 71 = 20000400
+MdtRawDataProvi...  DEBUG word 72 = a1994153
+MdtRawDataProvi...  DEBUG word 73 = 3070001a
+MdtRawDataProvi...  DEBUG word 74 = 30040377
+MdtRawDataProvi...  DEBUG word 75 = 30000398
+MdtRawDataProvi...  DEBUG word 76 = 20014001
+MdtRawDataProvi...  DEBUG word 77 = a2994153
+MdtRawDataProvi...  DEBUG word 78 = 20000020
+MdtRawDataProvi...  DEBUG word 79 = a3994153
+MdtRawDataProvi...  DEBUG word 80 = 20000040
+MdtRawDataProvi...  DEBUG word 81 = a9994153
+MdtRawDataProvi...  DEBUG word 82 = 30a40400
+MdtRawDataProvi...  DEBUG word 83 = 30a00424
+MdtRawDataProvi...  DEBUG word 84 = aa994153
+MdtRawDataProvi...  DEBUG word 85 = 20008000
+MdtRawDataProvi...  DEBUG word 86 = ab994153
+MdtRawDataProvi...  DEBUG word 87 = 20080000
+MdtRawDataProvi...  DEBUG word 88 = b0994153
+MdtRawDataProvi...  DEBUG word 89 = 20080000
+MdtRawDataProvi...  DEBUG word 90 = 8a99401a
+MdtRawDataProvi...  DEBUG word 91 = f000005c
+MdtRawDataProvi...  DEBUG Found the beginning of buffer 
+MdtRawDataProvi...  DEBUG Level 1 Id : 256404
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 0
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x604a000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 1
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 0
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6052000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 2
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x624a000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 0
+MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 0 chan: 20
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 3
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 2
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x6252000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 5
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 7
+MdtRawDataProvi...  DEBUG Error: corresponding leading edge not found for the trailing edge tdc: 7 chan: 12
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 8
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 4
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 1
+MdtRawDataProvi...  DEBUG Phi  : 3
+MdtRawDataProvi...  DEBUG  Collection ID = 0x644a000000000000 does not exist, create it 
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 1
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 4
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 9
+MdtRawDataProvi...  DEBUG  Decoding data from TDC number : 11
+MdtRawDataProvi...  DEBUG Found the Beginnning of Link 
+MdtRawDataProvi...  DEBUG subdetId : 97 mrodId : 2 csmId : 5
+MdtRawDataProvi...  DEBUG getOfflineIdfromOnlineID result: 
+MdtRawDataProvi...  DEBUG Name : 4
+MdtRawDataProvi...  DEBUG Eta  : 2
+MdtRawDataProvi...WARNING DEBUG message limit (500) reached for MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder. Suppressing further output.
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x80
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x80 24 8 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 8
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 112
+CscRawDataProvi...  DEBUG RPU Header word 0x5000070
+CscRawDataProvi...  DEBUG RPU ID original = 5
+CscRawDataProvi...  DEBUG RPU ID Updated = 5
+CscRawDataProvi...  DEBUG RPU size = 112
+CscRawDataProvi...  DEBUG SCA Address = 724315438
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20202
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x600006c
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
+CscRawDataProvi...  DEBUG Cluster Data Words = 108
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 12
+CscRawDataProvi...  DEBUG cluster location word 0x10a2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 46
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31725  6  51 :: measphi0 L2 strId 46 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.2.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10a35
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 54
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31733  6  51 :: measphi0 L2 strId 54 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.0.54]
+CscRawDataProvi...  DEBUG cluster location word 0x10c2c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 45
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31916  7  51 :: measphi0 L3 strId 45 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.0.45]
+CscRawDataProvi...  DEBUG cluster location word 0x10c37
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 56
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 31927  7  51 :: measphi0 L3 strId 56 nStr 4 T0 nSampWords 8 [7.51.-1.1.1.2.3.0.56]
+CscRawDataProvi...  DEBUG cluster location word 0x10e2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32109  8  51 :: measphi0 L4 strId 46 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.46]
+CscRawDataProvi...  DEBUG cluster location word 0x10e39
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 58
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 32121  8  51 :: measphi0 L4 strId 58 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.0.58]
+CscRawDataProvi...  DEBUG cluster location word 0x10903
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55491  9  51 :: measphi1 L1 strId 4 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.1.1.4]
+CscRawDataProvi...  DEBUG cluster location word 0x10b08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55544  9  51 :: measphi1 L2 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x10b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55566  9  51 :: measphi1 L2 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10d07
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 8
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55591  9  51 :: measphi1 L3 strId 8 nStr 5 T0 nSampWords 10 [7.51.-1.1.1.2.3.1.8]
+CscRawDataProvi...  DEBUG cluster location word 0x10d1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55614  9  51 :: measphi1 L3 strId 31 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.3.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x10f08
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 8 55640  9  51 :: measphi1 L4 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.1.1.2.4.1.9]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 12 for RPU ID 5
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x81
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x81 16 0 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 0
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 122
+CscRawDataProvi...  DEBUG RPU Header word 0xd00007a
+CscRawDataProvi...  DEBUG RPU ID original = 13
+CscRawDataProvi...  DEBUG RPU ID Updated = 11
+CscRawDataProvi...  DEBUG RPU size = 122
+CscRawDataProvi...  DEBUG SCA Address = 2358087311
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000002
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x7000076
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 7
+CscRawDataProvi...  DEBUG Cluster Data Words = 118
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
+CscRawDataProvi...  DEBUG cluster location word 0x810
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 17
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 784  0  50 :: measphi0 L1 strId 17 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.1.0.17]
+CscRawDataProvi...  DEBUG cluster location word 0x868
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 105
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 872  0  50 :: measphi0 L1 strId 105 nStr 7 T0 nSampWords 14 [7.50.-1.1.1.2.1.0.105]
+CscRawDataProvi...  DEBUG cluster location word 0xe11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000a 18
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1361  3  50 :: measphi0 L4 strId 18 nStr 10 T0 nSampWords 20 [7.50.-1.1.1.2.4.0.18]
+CscRawDataProvi...  DEBUG cluster location word 0xe41
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 66
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 1409  3  50 :: measphi0 L4 strId 66 nStr 4 T0 nSampWords 8 [7.50.-1.1.1.2.4.0.66]
+CscRawDataProvi...  DEBUG cluster location word 0x916
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 23
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24790  4  50 :: measphi1 L1 strId 23 nStr 5 T0 nSampWords 10 [7.50.-1.1.1.2.1.1.23]
+CscRawDataProvi...  DEBUG cluster location word 0xb16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24838  4  50 :: measphi1 L2 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.2.1.23]
+CscRawDataProvi...  DEBUG cluster location word 0xd03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 4
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24867  4  50 :: measphi1 L3 strId 4 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.4]
+CscRawDataProvi...  DEBUG cluster location word 0xd15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24885  4  50 :: measphi1 L3 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.22]
+CscRawDataProvi...  DEBUG cluster location word 0xd2d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 46
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24909  4  50 :: measphi1 L3 strId 46 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.3.1.46]
+CscRawDataProvi...  DEBUG cluster location word 0xf15
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 22
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24933  4  50 :: measphi1 L4 strId 22 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.22]
+CscRawDataProvi...  DEBUG cluster location word 0xf1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 31
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 0 24942  4  50 :: measphi1 L4 strId 31 nStr 3 T0 nSampWords 6 [7.50.-1.1.1.2.4.1.31]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x82
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x82 25 9 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 9
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 50
+CscRawDataProvi...  DEBUG RPU Header word 0x5000032
+CscRawDataProvi...  DEBUG RPU ID original = 5
+CscRawDataProvi...  DEBUG RPU ID Updated = 5
+CscRawDataProvi...  DEBUG RPU size = 50
+CscRawDataProvi...  DEBUG SCA Address = 269554195
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x102
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x200002e
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 2
+CscRawDataProvi...  DEBUG Cluster Data Words = 46
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 5
+CscRawDataProvi...  DEBUG cluster location word 0x12c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33431  7  51 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.51.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x12e16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33622  8  51 :: measphi0 L4 strId 23 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.23]
+CscRawDataProvi...  DEBUG cluster location word 0x12e1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 27
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 33626  8  51 :: measphi0 L4 strId 27 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x12d24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 37
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56004  9  51 :: measphi1 L3 strId 37 nStr 4 T0 nSampWords 8 [7.51.-1.2.1.2.3.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x12f24
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 9 56052  9  51 :: measphi1 L4 strId 37 nStr 3 T0 nSampWords 6 [7.51.-1.2.1.2.4.1.37]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 5 for RPU ID 5
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x83
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x83 17 1 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 1
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 116
+CscRawDataProvi...  DEBUG RPU Header word 0xd000074
+CscRawDataProvi...  DEBUG RPU ID original = 13
+CscRawDataProvi...  DEBUG RPU ID Updated = 11
+CscRawDataProvi...  DEBUG RPU size = 116
+CscRawDataProvi...  DEBUG SCA Address = 1920169077
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010102
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Second cluster word 0x6000070
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
+CscRawDataProvi...  DEBUG Cluster Data Words = 112
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 11
+CscRawDataProvi...  DEBUG cluster location word 0x2818
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2328  0  50 :: measphi0 L1 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2a17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 24
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2519  1  50 :: measphi0 L2 strId 24 nStr 6 T0 nSampWords 12 [7.50.-1.2.1.2.2.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2c17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 24
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2711  2  50 :: measphi0 L3 strId 24 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.3.0.24]
+CscRawDataProvi...  DEBUG cluster location word 0x2e18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 25
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 2904  3  50 :: measphi0 L4 strId 25 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x2ebc
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 189
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 3068  3  50 :: measphi0 L4 strId 189 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.0.189]
+CscRawDataProvi...  DEBUG cluster location word 0x2909
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25161  4  50 :: measphi1 L1 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.1.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2b09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 10
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25209  4  50 :: measphi1 L2 strId 10 nStr 5 T0 nSampWords 10 [7.50.-1.2.1.2.2.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25257  4  50 :: measphi1 L3 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2d16
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 23
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25270  4  50 :: measphi1 L3 strId 23 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.3.1.23]
+CscRawDataProvi...  DEBUG cluster location word 0x2f09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 10
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25305  4  50 :: measphi1 L4 strId 10 nStr 4 T0 nSampWords 8 [7.50.-1.2.1.2.4.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x2f28
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 41
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 1 25336  4  50 :: measphi1 L4 strId 41 nStr 3 T0 nSampWords 6 [7.50.-1.2.1.2.4.1.41]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 11 for RPU ID 11
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x84
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x84 26 10 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 10
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 114
+CscRawDataProvi...  DEBUG RPU Header word 0x5000072
+CscRawDataProvi...  DEBUG RPU ID original = 5
+CscRawDataProvi...  DEBUG RPU ID Updated = 5
+CscRawDataProvi...  DEBUG RPU size = 114
+CscRawDataProvi...  DEBUG SCA Address = 1414878807
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x200
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x400006e
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
+CscRawDataProvi...  DEBUG Cluster Data Words = 110
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 6
+CscRawDataProvi...  DEBUG cluster location word 0x14c03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 34947  7  51 :: measphi0 L3 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.3.1.2.3.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x14c66
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000013 103
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 35046  7  51 :: measphi0 L3 strId 103 nStr 19 T0 nSampWords 38 [7.51.-1.3.1.2.3.0.103]
+CscRawDataProvi...  DEBUG cluster location word 0x1491b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56283  9  51 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x14d09
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 10
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56361  9  51 :: measphi1 L3 strId 10 nStr 6 T0 nSampWords 12 [7.51.-1.3.1.2.3.1.10]
+CscRawDataProvi...  DEBUG cluster location word 0x14d1f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56383  9  51 :: measphi1 L3 strId 32 nStr 3 T0 nSampWords 6 [7.51.-1.3.1.2.3.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x14d23
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x1000000d 36
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 10 56387  9  51 :: measphi1 L3 strId 36 nStr 13 T0 nSampWords 26 [7.51.-1.3.1.2.3.1.36]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 6 for RPU ID 5
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x85
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x85 18 2 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 2
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 90
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005a
+CscRawDataProvi...  DEBUG RPU ID original = 13
+CscRawDataProvi...  DEBUG RPU ID Updated = 11
+CscRawDataProvi...  DEBUG RPU size = 90
+CscRawDataProvi...  DEBUG SCA Address = 1482250843
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x20100
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Second cluster word 0x4000056
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 4
+CscRawDataProvi...  DEBUG Cluster Data Words = 86
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 7
+CscRawDataProvi...  DEBUG cluster location word 0x4a18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 25
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4056  1  50 :: measphi0 L2 strId 25 nStr 8 T0 nSampWords 16 [7.50.-1.3.1.2.2.0.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4a3a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 59
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4090  1  50 :: measphi0 L2 strId 59 nStr 4 T0 nSampWords 8 [7.50.-1.3.1.2.2.0.59]
+CscRawDataProvi...  DEBUG cluster location word 0x4c1a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000006 27
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 4250  2  50 :: measphi0 L3 strId 27 nStr 6 T0 nSampWords 12 [7.50.-1.3.1.2.3.0.27]
+CscRawDataProvi...  DEBUG cluster location word 0x4b11
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 18
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25601  4  50 :: measphi1 L2 strId 18 nStr 3 T0 nSampWords 6 [7.50.-1.3.1.2.2.1.18]
+CscRawDataProvi...  DEBUG cluster location word 0x4b18
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 25
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25608  4  50 :: measphi1 L2 strId 25 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.25]
+CscRawDataProvi...  DEBUG cluster location word 0x4b1e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 31
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25614  4  50 :: measphi1 L2 strId 31 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.2.1.31]
+CscRawDataProvi...  DEBUG cluster location word 0x4d14
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 21
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 2 25652  4  50 :: measphi1 L3 strId 21 nStr 5 T0 nSampWords 10 [7.50.-1.3.1.2.3.1.21]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 7 for RPU ID 11
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x86
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x86 27 11 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 11
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 58
+CscRawDataProvi...  DEBUG RPU Header word 0x500003a
+CscRawDataProvi...  DEBUG RPU ID original = 5
+CscRawDataProvi...  DEBUG RPU ID Updated = 5
+CscRawDataProvi...  DEBUG RPU size = 58
+CscRawDataProvi...  DEBUG SCA Address = 151653132
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x201
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x1000036
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 1
+CscRawDataProvi...  DEBUG Cluster Data Words = 54
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 4
+CscRawDataProvi...  DEBUG cluster location word 0x16c2f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 48
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36527  7  51 :: measphi0 L3 strId 48 nStr 3 T0 nSampWords 6 [7.51.-1.4.1.2.3.0.48]
+CscRawDataProvi...  DEBUG cluster location word 0x16c56
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000008 87
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36566  7  51 :: measphi0 L3 strId 87 nStr 8 T0 nSampWords 16 [7.51.-1.4.1.2.3.0.87]
+CscRawDataProvi...  DEBUG cluster location word 0x16e57
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000007 88
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 36759  8  51 :: measphi0 L4 strId 88 nStr 7 T0 nSampWords 14 [7.51.-1.4.1.2.4.0.88]
+CscRawDataProvi...  DEBUG cluster location word 0x16f04
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 5
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 11 56788  9  51 :: measphi1 L4 strId 5 nStr 5 T0 nSampWords 10 [7.51.-1.4.1.2.4.1.5]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 4 for RPU ID 5
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x87
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x87 19 3 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 3
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 92
+CscRawDataProvi...  DEBUG RPU Header word 0xd00005c
+CscRawDataProvi...  DEBUG RPU ID original = 13
+CscRawDataProvi...  DEBUG RPU ID Updated = 11
+CscRawDataProvi...  DEBUG RPU size = 92
+CscRawDataProvi...  DEBUG SCA Address = 404298267
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x1010101
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x6000058
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 6
+CscRawDataProvi...  DEBUG Cluster Data Words = 88
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 10
+CscRawDataProvi...  DEBUG cluster location word 0x6855
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 86
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5461  0  50 :: measphi0 L1 strId 86 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.1.0.86]
+CscRawDataProvi...  DEBUG cluster location word 0x6a7c
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 125
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5692  1  50 :: measphi0 L2 strId 125 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.0.125]
+CscRawDataProvi...  DEBUG cluster location word 0x6c77
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 120
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 5879  2  50 :: measphi0 L3 strId 120 nStr 5 T0 nSampWords 10 [7.50.-1.4.1.2.3.0.120]
+CscRawDataProvi...  DEBUG cluster location word 0x6e71
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 114
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 6065  3  50 :: measphi0 L4 strId 114 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.0.114]
+CscRawDataProvi...  DEBUG cluster location word 0x691b
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 28
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25947  4  50 :: measphi1 L1 strId 28 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.28]
+CscRawDataProvi...  DEBUG cluster location word 0x691f
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 32
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25951  4  50 :: measphi1 L1 strId 32 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.32]
+CscRawDataProvi...  DEBUG cluster location word 0x6924
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 37
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25956  4  50 :: measphi1 L1 strId 37 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.1.1.37]
+CscRawDataProvi...  DEBUG cluster location word 0x6b17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 24
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 25991  4  50 :: measphi1 L2 strId 24 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.2.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6d17
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000004 24
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26039  4  50 :: measphi1 L3 strId 24 nStr 4 T0 nSampWords 8 [7.50.-1.4.1.2.3.1.24]
+CscRawDataProvi...  DEBUG cluster location word 0x6f2a
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 43
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 3 26106  4  50 :: measphi1 L4 strId 43 nStr 3 T0 nSampWords 6 [7.50.-1.4.1.2.4.1.43]
+CscRawDataProvi...  DEBUG ****Total Cluster count = 10 for RPU ID 11
+CscRawDataProvi...  DEBUG end of CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection()
+CscRawDataProvi...  DEBUG in CscROD_Decoder::fillCollection :ROD version 401
+CscRawDataProvi...  DEBUG  
+CscRawDataProvi...  DEBUG ===================================================
+CscRawDataProvi...  DEBUG in CscROD_Decode::fillCollection() - ROD version 2
+CscRawDataProvi...  DEBUG DetDescr tag = ATLAS-R2-2016-01-00-01
+CscRawDataProvi...  DEBUG Online ROD id is 0x88
+CscRawDataProvi...  DEBUG Online ROD / ROD / collection / subDetector IDs are 0x88 28 12 106
+CscRawDataProvi...  DEBUG CSC RDO collection does not exist - creating a new one with hash = 12
+CscRawDataProvi...  DEBUG Event Type: 5407e04
+CscRawDataProvi...  DEBUG Sampling Time: 50  Number of Samples: 4
+CscRawDataProvi...  DEBUG Is Calibration Enabled?: 0  Calibration Amplitude: 5
+CscRawDataProvi...  DEBUG Calibration Layer: 0  Latency: 126
+CscRawDataProvi...  DEBUG Is neutron rejection ON?: 0  Is sparsified data?: 1
+CscRawDataProvi...  DEBUG CscROD_Decoder Total words received = 74
+CscRawDataProvi...  DEBUG RPU Header word 0x500004a
+CscRawDataProvi...  DEBUG RPU ID original = 5
+CscRawDataProvi...  DEBUG RPU ID Updated = 5
+CscRawDataProvi...  DEBUG RPU size = 74
+CscRawDataProvi...  DEBUG SCA Address = 1499093852
+CscRawDataProvi...  DEBUG Number of Precision Cluster word 0x2000001
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 0 Cluster Counts = 2
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 1 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 2 Cluster Counts = 0
+CscRawDataProvi...  DEBUG Number of precision Cluster Counts - Layer Index = 3 Cluster Counts = 1
+CscRawDataProvi...  DEBUG Second cluster word 0x5000046
+CscRawDataProvi...  DEBUG Summed Number of Clusters for non-precision layers 5
+CscRawDataProvi...  DEBUG Cluster Data Words = 70
+CscRawDataProvi...  DEBUG Total summed Cluster Count for precision and non-precision layers = 8
+CscRawDataProvi...  DEBUG cluster location word 0x18831
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 50
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37681  5  51 :: measphi0 L1 strId 50 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.50]
+CscRawDataProvi...  DEBUG cluster location word 0x188ab
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 172
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 37803  5  51 :: measphi0 L1 strId 172 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.0.172]
+CscRawDataProvi...  DEBUG cluster location word 0x18e03
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000005 4
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 38211  8  51 :: measphi0 L4 strId 4 nStr 5 T0 nSampWords 10 [7.51.-1.5.1.2.4.0.4]
+CscRawDataProvi...  DEBUG cluster location word 0x18908
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 9
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57032  9  51 :: measphi1 L1 strId 9 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.1.1.9]
+CscRawDataProvi...  DEBUG cluster location word 0x1892e
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 47
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57070  9  51 :: measphi1 L1 strId 47 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.1.1.47]
+CscRawDataProvi...  DEBUG cluster location word 0x18b00
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000002 1
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57072  9  51 :: measphi1 L2 strId 1 nStr 2 T0 nSampWords 4 [7.51.-1.5.1.2.2.1.1]
+CscRawDataProvi...  DEBUG cluster location word 0x18d0d
+CscRawDataProvi...  DEBUG  cluster time size word : stripId (CscIdHelper) 0x10000003 14
+CscRawDataProvi...  DEBUG     idColl clusHashid spuID stationId :: 12 57133  9  51 :: measphi1 L3 strId 14 nStr 3 T0 nSampWords 6 [7.51.-1.5.1.2.3.1.14]
+CscRawDataProvi...  DEBUG cluster location word 0x18f1c
+CscRawDataProvi...WARNING DEBUG message limit (500) reached for CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder. Suppressing further output.
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186525031, run #327265 1 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524665, run #327265 1 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524665, run #327265 2 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186542447, run #327265 2 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186542447, run #327265 3 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186543405, run #327265 3 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186543405, run #327265 4 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186548387, run #327265 4 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186548387, run #327265 5 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186515186, run #327265 5 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186515186, run #327265 6 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186556019, run #327265 6 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186556019, run #327265 7 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186542866, run #327265 7 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186542866, run #327265 8 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186537901, run #327265 8 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186537901, run #327265 9 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186517811, run #327265 9 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186517811, run #327265 10 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186534221, run #327265 10 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186534221, run #327265 11 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186540986, run #327265 11 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186540986, run #327265 12 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186535104, run #327265 12 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186535104, run #327265 13 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186539903, run #327265 13 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186539903, run #327265 14 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186552713, run #327265 14 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186552713, run #327265 15 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186524730, run #327265 15 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186524730, run #327265 16 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186547632, run #327265 16 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186547632, run #327265 17 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186555621, run #327265 17 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186555621, run #327265 18 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186568452, run #327265 18 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186568452, run #327265 19 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #186580451, run #327265 19 events processed so far  <<<===
+RpcRawDataProviderWARNING Cannot retrieve muonRoI MURoIs
+MdtRawDataProvi...VERBOSE convert(): 264 ROBFragments.
+MdtRawDataProvi...  DEBUG Created container using cache for MdtCsmCache
+MdtRawDataProvi...  DEBUG After processing numColls=1136
+CscRawDataProvi...VERBOSE Number of ROB ids 32
+CscRawDataProvi...VERBOSE Number of ROB fragments 32
+CscRawDataProvi...  DEBUG Created container using cache for CscCache
+CscRawDataProvi...  DEBUG Before processing numColls=0
+CscRawDataProvi...  DEBUG vector of ROB ID to decode: size = 32
+CscRawDataProvi...  DEBUG After processing numColls=32
+RpcRdoToRpcPrep...WARNING Retrieval of RPC RDO container failed !
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #186580451, run #327265 20 events processed so far  <<<===
+Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
+ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
+CondInputLoader      INFO Finalizing CondInputLoader...
+IncidentProcAlg2     INFO Finalize
+AtlasFieldSvc        INFO finalize() successful
+RegSelSvc            INFO Finalizing RegSelSvc
+EventInfoByteSt...   INFO finalize 
+IdDictDetDescrCnv    INFO in finalize
+IOVDbFolder          INFO Folder /EXT/DCS/MAGNETS/SENSORDATA (AttrListColl) db-read 1/2 objs/chan/bytes 4/4/20 ((     0.19 ))s
+IOVDbFolder          INFO Folder /GLOBAL/BField/Maps (AttrListColl) db-read 1/1 objs/chan/bytes 3/3/202 ((     0.24 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 2312/2437/216520 ((     0.85 ))s
+IOVDbFolder          INFO Folder /MDT/CABLING/MEZZANINE_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 24/24/288 ((     0.06 ))s
+IOVDbFolder          INFO Folder /MDT/RTBLOB (AttrListColl) db-read 1/1 objs/chan/bytes 2372/1186/2251209 ((     1.10 ))s
+IOVDbFolder          INFO Folder /MDT/T0BLOB (AttrListColl) db-read 1/1 objs/chan/bytes 1186/1186/1374284 ((     0.17 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/222235 ((     0.60 ))s
+IOVDbFolder          INFO Folder /RPC/CABLING/MAP_SCHEMA_CORR (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/29402 ((     0.13 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_ETA (AttrListColl) db-read 1/1 objs/chan/bytes 1613/1613/7562651 ((     0.26 ))s
+IOVDbFolder          INFO Folder /RPC/TRIGGER/CM_THR_PHI (AttrListColl) db-read 1/1 objs/chan/bytes 1612/1612/8096306 ((     0.84 ))s
+IOVDbFolder          INFO Folder /TGC/CABLING/MAP_SCHEMA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3704 ((     0.95 ))s
+IOVDbFolder          INFO Folder /CSC/FTHOLD (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/322656 ((     0.12 ))s
+IOVDbFolder          INFO Folder /CSC/NOISE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/350062 ((     0.02 ))s
+IOVDbFolder          INFO Folder /CSC/PED (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411187 ((     0.11 ))s
+IOVDbFolder          INFO Folder /CSC/PSLOPE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/353376 ((     0.56 ))s
+IOVDbFolder          INFO Folder /CSC/RMS (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/411395 ((     0.92 ))s
+IOVDbFolder          INFO Folder /CSC/STAT (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/230496 ((     0.36 ))s
+IOVDbFolder          INFO Folder /CSC/T0BASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/314380 ((     0.08 ))s
+IOVDbFolder          INFO Folder /CSC/T0PHASE (AttrListColl) db-read 1/1 objs/chan/bytes 32/32/3136 ((     0.47 ))s
+IOVDbSvc             INFO  bytes in ((      8.01 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=CONDBR2 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLONL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     0.91 ))s
+IOVDbSvc             INFO Connection COOLONL_RPC/CONDBR2 : nConnect: 2 nFolders: 4 ReadTime: ((     1.82 ))s
+IOVDbSvc             INFO Connection COOLOFL_MDT/CONDBR2 : nConnect: 2 nFolders: 2 ReadTime: ((     1.27 ))s
+IOVDbSvc             INFO Connection COOLOFL_CSC/CONDBR2 : nConnect: 2 nFolders: 8 ReadTime: ((     2.64 ))s
+IOVDbSvc             INFO Connection COOLONL_GLOBAL/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.24 ))s
+IOVDbSvc             INFO Connection COOLONL_TGC/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.95 ))s
+IOVDbSvc             INFO Connection COOLOFL_DCS/CONDBR2 : nConnect: 2 nFolders: 1 ReadTime: ((     0.19 ))s
+AthDictLoaderSvc     INFO in finalize...
+ToolSvc              INFO Removing all tools created by ToolSvc
+ToolSvc.ByteStr...   INFO in finalize()
+TgcRdoToTgcPrep...   INFO finalize(): input RDOs->output PRDs [Hit: 6807->6807, Tracklet: 28->28, TrackletEIFI: 692->692, HiPt: 4031->4031, SL: 3->3]
+RpcROD_Decoder:...   INFO  ============ FINAL RPC DATA FORMAT STAT. =========== 
+RpcROD_Decoder:...   INFO  RX Header Errors.............0
+RpcROD_Decoder:...   INFO  RX SubHeader Errors..........0
+RpcROD_Decoder:...   INFO  PAD Header Errors............0
+RpcROD_Decoder:...   INFO  PAD/SL SubHeader Errors......0
+RpcROD_Decoder:...   INFO  CM Header Errors.............0
+RpcROD_Decoder:...   INFO  CM SubHeader Errors..........0
+RpcROD_Decoder:...   INFO  CM Footer Errors.............0
+RpcROD_Decoder:...   INFO  PAD PreFooter Errors.........0
+RpcROD_Decoder:...   INFO  PAD Footer Errors............0
+RpcROD_Decoder:...   INFO  SL Header Errors.............0
+RpcROD_Decoder:...   INFO  SL Footer Errors.............0
+RpcROD_Decoder:...   INFO  RX Footer Errors.............0
+RpcROD_Decoder:...   INFO  CRC8 check Failures..........0
+RpcROD_Decoder:...   INFO  ==================================================== 
+ToolSvc.TGCCabl...   INFO finalize
+*****Chrono*****     INFO ****************************************************************************************************
+*****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
+*****Chrono*****     INFO ****************************************************************************************************
+cObj_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=    0(+-    0)/    0/    0 [us] #= 20
+ChronoStatSvc        INFO Time User   : Tot= 10.2  [s]                                             #=  1
+*****Chrono*****     INFO ****************************************************************************************************
+ChronoStatSvc.f...   INFO  Service finalized successfully 
+ApplicationMgr       INFO Application Manager Finalized successfully
+ApplicationMgr       INFO Application Manager Terminated successfully
+Listing sources of suppressed message: 
+=====================================================
+ Message Source              |   Level |    Count
+-----------------------------+---------+-------------
+ CscRawDataProvider.CSC_RawDataProviderTool.CscROD_Decoder|   DEBUG |    35169
+ MdtRawDataProvider.MDT_RawDataProviderTool.MdtROD_Decoder|   DEBUG |   854603
+=====================================================
+Py:Athena            INFO leaving with code 0: "successful run"
-- 
GitLab


From 6da16921b4b2638a541c8ec07d9714d1b9141ec5 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <frank.winklmeier@cern.ch>
Date: Thu, 21 Mar 2019 15:51:51 +0100
Subject: [PATCH 159/163] TrigEgammaEmulationTool: Fix variable naming

Change variable names to comply with ATLAS naming convention and to
avoid compilation warnings.
---
 .../Root/TrigEgammaIsolationSelectorTool.cxx  | 34 +++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
index f86173461940..ddd0c4ae6cb0 100644
--- a/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaEmulationTool/Root/TrigEgammaIsolationSelectorTool.cxx
@@ -1,5 +1,5 @@
 /*
- *   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ *   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  *   */
 
 
@@ -149,7 +149,7 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
   //}
 
   // Declare vectors of isolation variables for different cone sizes
-  std::vector<float>  EtCone, PtCone_xAOD, PtCone, _m_PtCone, _m_PtVarCone, PtCone_recalculated; //, PtCone_recalculated_fixed;
+  std::vector<float>  EtCone, PtCone_xAOD, PtCone, PtVarCone, PtCone_recalculated; //, PtCone_recalculated_fixed;
   float val=-99;
   el->isolationValue(val,xAOD::Iso::etcone20);
   //ATH_MSG_DEBUG("el->isolationValue(val,xAOD::Iso::etcone20) = " << val);
@@ -205,8 +205,8 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
   //const ElementLink< TrackParticleContainer* > link  =  el->trackParticleLink( /*0 this is the index of trackparticle*/ );
   //then I think it is 
   // std::str ld = link.dataID();
-  std::string m_trk_container =  el->trackParticleLink().dataID();
-  ATH_MSG_DEBUG("TRacks linked to " <<  m_trk_container << " container"); 
+  std::string trk_container =  el->trackParticleLink().dataID();
+  ATH_MSG_DEBUG("TRacks linked to " <<  trk_container << " container");
   ////that @brief Return the SG key that we reference, as a string.
   //
   const std::set<const xAOD::TrackParticle*> tracksToExclude = xAOD::EgammaHelpers::getTrackParticles(el, false);
@@ -216,37 +216,37 @@ bool TrigEgammaIsolationSelectorTool::emulation(const xAOD::IParticle* part, boo
 
   const xAOD::TrackParticleContainer *TrackParticleContainer=0;
 
-  if ( (m_storeGate->retrieve(TrackParticleContainer,m_trk_container)).isFailure() ){
+  if ( (m_storeGate->retrieve(TrackParticleContainer,trk_container)).isFailure() ){
       ATH_MSG_ERROR("Failed to retrieve EF ID trackParticles ");
       return false;
   } else {
-      ATH_MSG_DEBUG("Retrieved EF ID trackParticles "  << m_trk_container << " of size " << TrackParticleContainer->size());
+      ATH_MSG_DEBUG("Retrieved EF ID trackParticles "  << trk_container << " of size " << TrackParticleContainer->size());
   }
 
   std::vector<const xAOD::TrackParticleContainer*> vectorTrackParticleContainer;
   vectorTrackParticleContainer.push_back(TrackParticleContainer);
 
   xAOD::TrackIsolation result;
-  _m_PtCone.clear();
-  _m_PtVarCone.clear();
+  PtCone.clear();
+  PtVarCone.clear();
   if(m_trackIsolationTool->trackIsolation(result, *el, isoTypes, corrlist, leadTrkVtx, &tracksToExclude, TrackParticleContainer)){
       for(unsigned int i=0; i<isoTypes.size(); i++){
-    _m_PtCone.push_back(result.ptcones[i]);
-    _m_PtVarCone.push_back(result.ptvarcones_10GeVDivPt[i]);
+    PtCone.push_back(result.ptcones[i]);
+    PtVarCone.push_back(result.ptvarcones_10GeVDivPt[i]);
       }
   } else {
       ATH_MSG_ERROR("Hey!!!! Something wrong! Couldn't run TrackIsolationTool " << m_trackIsolationTool);
   }
 
 
-  // So _m_PtCone has the result of ptcone40,30,20 and _m_PtVarCone result of ptvarcone40,30,20 (requested in this order by the tool). So lets build PtCone_recalculated to have (as PtCone) results of ptcone20 30 40 and ptvarcone20 30 40
+  // So PtCone has the result of ptcone40,30,20 and PtVarCone result of ptvarcone40,30,20 (requested in this order by the tool). So lets build PtCone_recalculated to have (as PtCone) results of ptcone20 30 40 and ptvarcone20 30 40
 
-  PtCone_recalculated.push_back( _m_PtCone[2]    );
-  PtCone_recalculated.push_back( _m_PtCone[1]    );
-  PtCone_recalculated.push_back( _m_PtCone[0]    );
-  PtCone_recalculated.push_back( _m_PtVarCone[2] );
-  PtCone_recalculated.push_back( _m_PtVarCone[1] );
-  PtCone_recalculated.push_back( _m_PtVarCone[0] );
+  PtCone_recalculated.push_back( PtCone[2]    );
+  PtCone_recalculated.push_back( PtCone[1]    );
+  PtCone_recalculated.push_back( PtCone[0]    );
+  PtCone_recalculated.push_back( PtVarCone[2] );
+  PtCone_recalculated.push_back( PtVarCone[1] );
+  PtCone_recalculated.push_back( PtVarCone[0] );
 
   if (m_useTrackIsolationTool){
       // If we decide to use rRackIsolation Tool then instead of stored ptCone we will use this recalculated
-- 
GitLab


From c0b62c3d83372c4de85e72397a5f3df5e1bcd6ec Mon Sep 17 00:00:00 2001
From: Siarhei Harkusha <Siarhei.Harkusha@cern.ch>
Date: Thu, 21 Mar 2019 17:40:39 +0100
Subject: [PATCH 160/163] TileMonitoring: Clean up and restructure a bit

---
 .../python/TileJetMonitorAlgorithm.py         |  2 --
 .../python/TileMonitoringCfgHelper.py         |  2 --
 .../src/TileJetMonitorAlgorithm.cxx           | 28 +++++++++++--------
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
index 267556693d48..337718e81408 100644
--- a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
+++ b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
@@ -4,8 +4,6 @@
 
 '''
 @file TileJetMonitorAlgorithm.py
-@author 
-@date 
 @brief Python configuration of TileJetMonitorAlgorithm algorithm for the Run III
 '''
 
diff --git a/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
index b2fb690ed036..6f0f3aea1513 100644
--- a/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
+++ b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py
@@ -4,8 +4,6 @@
 
 '''
 @file TileMonitoringHelper.py
-@author 
-@date 
 @brief Helper functions for Run 3 Tile monitoring algorithm configuration
 '''
 
diff --git a/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
index cacfea01c2b8..87583b6c9923 100644
--- a/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileJetMonitorAlgorithm.cxx
@@ -13,14 +13,10 @@
 
 #include "CaloIdentifier/TileID.h"
 #include "CaloEvent/CaloCell.h"
-//#include "CaloEvent/CaloCluster.h"
-
 
 #include "StoreGate/ReadHandle.h"
 #include <xAODCore/ShallowCopy.h>
 #include "xAODCaloEvent/CaloCluster.h"
-//#include "JetUtils/JetCaloQualityUtils.h"
-//#include "JetUtils/JetCellAccessor.h"
 
 
 TileJetMonitorAlgorithm::TileJetMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
@@ -431,19 +427,29 @@ bool TileJetMonitorAlgorithm::passesJvt(const xAOD::Jet& jet) const {
   if (jet.pt() > m_jetPtMin
       && jet.pt() < m_jetPtMax
       && fabs(jet.getAttribute<float>("DetectorEta")) < m_jetTrackingEtaLimit
-      && m_jvt->updateJvt(jet) < m_jvtThreshold)
+      && m_jvt->updateJvt(jet) < m_jvtThreshold) {
+
     return false;
-  return true;
+
+  } else {
+    return true;
+  }
 
 }
 
 bool TileJetMonitorAlgorithm::isGoodJet(const xAOD::Jet& jet) const {
 
-  if (! m_doJetCleaning) return true;
-  if (jet.pt() < m_jetPtMin) return false;
-  if (! passesJvt(jet)) return false;
-  if (! m_jetCleaningTool->keep(jet)) return false;
-  return true;
+  if (m_doJetCleaning) {
+
+    if (jet.pt() >= m_jetPtMin && passesJvt(jet) && m_jetCleaningTool->keep(jet)) {
+      return true;
+    } else {
+      return false;
+    }
+
+  } else {
+    return true;
+  }
 
 }
 
-- 
GitLab


From 61e652d69f8fa4222d866c702d3311c4cc1b9b31 Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Thu, 21 Mar 2019 17:44:18 +0100
Subject: [PATCH 161/163] Drop keyless retrieve of xAOD::EventInfo in
 CscDigitizationTool

CscDigitizationTool was retrieving an `xAOD::EventInfo` object from the
`evtStore` and storing the event and run numbers in member variables.
These values were only used in two DEBUG messages.
---
 .../CSC_Digitization/CMakeLists.txt               |  3 +--
 .../CSC_Digitization/CscDigitizationTool.h        |  5 -----
 .../CSC_Digitization/src/CscDigitizationTool.cxx  | 15 +++------------
 3 files changed, 4 insertions(+), 19 deletions(-)

diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
index 9500ba5150ae..74b338bb3d5d 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
                           Control/PileUpTools
-                          Event/xAOD/xAODEventInfo
                           GaudiKernel
                           MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
@@ -32,7 +31,7 @@ atlas_add_component( CSC_Digitization
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel PileUpToolsLib xAODEventInfo GaudiKernel MuonReadoutGeometry MuonDigitContainer MuonIdHelpersLib MuonSimData MuonSimEvent HitManagement StoreGateLib SGtests GeneratorObjects )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel PileUpToolsLib GaudiKernel MuonReadoutGeometry MuonDigitContainer MuonIdHelpersLib MuonSimData MuonSimEvent HitManagement StoreGateLib SGtests GeneratorObjects )
 
 # Install files from the package:
 atlas_install_headers( CSC_Digitization )
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
index 3471731333f6..ada19032c6f9 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
@@ -21,9 +21,6 @@
 #include "MuonSimEvent/CSCSimHitCollection.h"
 #include "MuonSimData/CscSimDataCollection.h"
 
-#include "xAODEventInfo/EventInfo.h"             // NEW EDM
-#include "xAODEventInfo/EventAuxInfo.h"          // NEW EDM
-
 #include "PileUpTools/PileUpToolBase.h"
 
 class PileUpMergeSvc;
@@ -113,8 +110,6 @@ private:
   double m_driftVelocity;
   double m_electronEnergy;
   bool   m_NInterFixed;
-  unsigned int m_run{0};
-  unsigned int m_evt{0};
 
   ///////////////////////////////////////////////////////////////////
   // Access to the event methods:
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
index 0a35f25695c4..813ce7281f76 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
@@ -21,8 +21,6 @@
 #include "AthenaKernel/RNGWrapper.h"
 #include "CLHEP/Random/RandFlat.h"
 
-#include "xAODEventInfo/EventInfo.h"
-
 using namespace MuonGM;
 
 static constexpr unsigned int crazyParticleBarcode(
@@ -196,14 +194,6 @@ StatusCode CscDigitizationTool::processAllSubEvents() {
 
 StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData, CLHEP::HepRandomEngine* rndmEngine) {
 
-  // get the iterator pairs for this DetEl
-  //iterate over hits
-  const xAOD::EventInfo* pevt = nullptr;
-  ATH_CHECK( evtStore()->retrieve(pevt) );
-  m_evt = pevt->eventNumber();
-  m_run = pevt->runNumber();
-
-
   std::map <IdentifierHash,deposits> myDeposits;
   csc_map    data_map;
   csc_newmap data_SampleMap, data_SampleMapOddPhase;
@@ -216,6 +206,7 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
     return StatusCode::FAILURE;
   }
 
+  // get the iterator pairs for this DetEl
   while( m_thpcCSC->nextDetectorElement(i, e) ) {
 
     // Loop over the hits:
@@ -393,7 +384,7 @@ FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
     //    CscDigit * newDigitOddPhase  = new CscDigit(digitId, samplesOddPhase);
 
     ATH_MSG_DEBUG ( "NEWDigit sec:measphi:wlay:istr:chg:t(w/latency) "
-                    << m_run << " " << m_evt << " " << m_cscIdHelper->show_to_string(digitId,&context)
+                    << m_cscIdHelper->show_to_string(digitId,&context)
                     << " hash:eleId = " << hashId << " " << elementId << " " << prevId << "   "
                     << sector << " " << measphi << " " <<  wlay << " " << istrip << "   "
                     << int(stripCharge+1) << " " << float(driftTime)
@@ -519,7 +510,7 @@ FillCollectionWithOldDigitEDM(csc_map& data_map, std::map<IdentifierHash,deposit
     Identifier elementId = m_cscIdHelper->parentID(digitId);
 
     ATH_MSG_DEBUG ( "CSC Digit sector:measphi:wlay:istrip:charge "
-                    << m_run << " " << m_evt << " " << sector << " "
+                    << sector << " "
                     << measphi << " " <<  wlay << " " << istrip
                     << " " << int(stripCharge+1) << " " << float(driftTime) << " " << (newDigit->sampleCharges()).size());
 
-- 
GitLab


From f874de6beaf9895082ff1600b97628d97c5cfb1c Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Thu, 21 Mar 2019 21:28:13 +0000
Subject: [PATCH 162/163] Consider bad SCT strips in InDetTrackHoleSearchTool
 (ATLASRECTS-4902)

---
 .../src/SCT_ReadCalibDataTool.cxx             | 42 ++++++++-----------
 .../InDetTrackHoleSearchTool.h                |  4 +-
 .../src/InDetTrackHoleSearchTool.cxx          | 30 +++++++------
 3 files changed, 37 insertions(+), 39 deletions(-)

diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ReadCalibDataTool.cxx b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ReadCalibDataTool.cxx
index 2d96d7161891..acdbeada758d 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ReadCalibDataTool.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ReadCalibDataTool.cxx
@@ -54,9 +54,25 @@ bool SCT_ReadCalibDataTool::canReportAbout(InDetConditions::Hierarchy h) const {
 bool SCT_ReadCalibDataTool::isGood(const Identifier& elementId, const EventContext& ctx, InDetConditions::Hierarchy h) const {
   // Status of the compId
   bool status{true};
-  // Extract the moduleId from the comp identifier
-  Identifier moduleId{m_id_sct->module_id(elementId)};
   switch (h) {
+  case InDetConditions::SCT_STRIP:
+    {
+      // Retrieve isGood Wafer data
+      const SCT_AllGoodStripInfo* condDataInfo{getCondDataInfo(ctx)};
+      if (condDataInfo==nullptr) {
+        ATH_MSG_ERROR("In isGood, SCT_AllGoodStripInfo cannot be retrieved");
+        return false;
+      }
+      // Extract the wafer identifier from the strip identifier
+      Identifier waferId{m_id_sct->wafer_id(elementId)};
+      // Get hashId
+      IdentifierHash waferHash{m_id_sct->wafer_hash(waferId)};
+      // Get strip on wafer to check
+      int strip{m_id_sct->strip(elementId)};
+      // Set value
+      status = (*condDataInfo)[waferHash.value()][strip];
+      break;
+    }
   case InDetConditions::SCT_MODULE:
     {
       // Not applicable for Calibration data
@@ -75,30 +91,8 @@ bool SCT_ReadCalibDataTool::isGood(const Identifier& elementId, const EventConte
       ATH_MSG_WARNING("summary(): Chip good/bad is not applicable for Calibration data");
       break;
     }
-  case InDetConditions::SCT_STRIP:
-    {
-      // Get hashId
-      IdentifierHash hashIdx{m_id_sct->wafer_hash(moduleId)};
-      int side{m_id_sct->side(elementId)};
-      if (side==1) m_id_sct->get_other_side(hashIdx, hashIdx);
-      unsigned int waferIdx{hashIdx};
-      //unsigned int waferIdx=hashIdx+side; //uhm
-      // Get strip on wafer to check
-      int strip{m_id_sct->strip(elementId)};
-      // Retrieve isGood Wafer data
-
-      const SCT_AllGoodStripInfo* condDataInfo{getCondDataInfo(ctx)};
-      if (condDataInfo==nullptr) {
-        ATH_MSG_ERROR("In isGood, SCT_AllGoodStripInfo cannot be retrieved");
-        return false;
-      }
-      // Set value
-      status = (*condDataInfo)[waferIdx][strip];
-      break;
-    }
   default:
     {
-      status = true ;
       ATH_MSG_INFO("Unknown component has been asked for, should be Module/Wafer/Chip or Strip; returning 'good' and continuing");
     }    
   } //end of switch structure
diff --git a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/InDetTrackHoleSearch/InDetTrackHoleSearchTool.h b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/InDetTrackHoleSearch/InDetTrackHoleSearchTool.h
index 0c5705d7b3a2..11a0d9e691ee 100644
--- a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/InDetTrackHoleSearch/InDetTrackHoleSearchTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/InDetTrackHoleSearch/InDetTrackHoleSearchTool.h
@@ -180,8 +180,8 @@ namespace InDet
       const Trk::Track*  addHolesToTrack(const Trk::Track& oldTrack, 
 					 std::vector<const Trk::TrackStateOnSurface*>* listOfHoles) const;
 
-      /** This method checks the SCT ABCD chip where the track passes through is bad or not */
-      bool isBadSCTChip(const Identifier& waferId, const Trk::TrackParameters& parameters, const InDetDD::SiDetectorElement& siElement) const;
+      /** This method checks the SCT ABCD chip and SCT strip where the track passes through is bad or not */
+      bool isBadSCTChipStrip(const Identifier& waferId, const Trk::TrackParameters& parameters, const InDetDD::SiDetectorElement& siElement) const;
     };
 
 } // end of namespace
diff --git a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/src/InDetTrackHoleSearchTool.cxx b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/src/InDetTrackHoleSearchTool.cxx
index 294d9d5772d5..20fb0e6b5ea1 100644
--- a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/src/InDetTrackHoleSearchTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/src/InDetTrackHoleSearchTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -93,7 +93,7 @@ StatusCode InDet::InDetTrackHoleSearchTool::initialize() {
   }
 
   if (m_checkBadSCTChip) {
-    // Check if ITk Strip is used because isBadSCTChip method is valid only for SCT.
+    // Check if ITk Strip is used because isBadSCTChipStrip method is valid only for SCT.
     ATH_CHECK(m_geoModelSvc.retrieve());
     if (m_geoModelSvc->geoConfig()==GeoModel::GEO_RUN4 or
         m_geoModelSvc->geoConfig()==GeoModel::GEO_ITk) {
@@ -845,7 +845,7 @@ bool InDet::InDetTrackHoleSearchTool::isSensitive(const Trk::TrackParameters* pa
         // the track plus its error hits the active material
         if (isActiveElement) {
 
-          if (m_checkBadSCTChip and isBadSCTChip(id, *parameters, *siElement)) {
+          if (m_checkBadSCTChip and isBadSCTChipStrip(id, *parameters, *siElement)) {
             ATH_MSG_VERBOSE("Track is hiting a bad SCT chip, this is not a hole candidate!");
             isgood = false;
             return false;
@@ -938,27 +938,31 @@ const Trk::Track*  InDet::InDetTrackHoleSearchTool::addHolesToTrack(const Trk::T
 }
 
 // ====================================================================================================================
-bool InDet::InDetTrackHoleSearchTool::isBadSCTChip(const Identifier& waferId, 
-                                                   const Trk::TrackParameters& parameters,
-                                                   const InDetDD::SiDetectorElement& siElement) const {
-  // Check if the track passes through a bad SCT ABCD chip
-  // A chip is determined by the extrapolated position.
+bool InDet::InDetTrackHoleSearchTool::isBadSCTChipStrip(const Identifier& waferId, 
+                                                        const Trk::TrackParameters& parameters,
+                                                        const InDetDD::SiDetectorElement& siElement) const {
+  // Check if the track passes through a bad SCT ABCD chip or a bad SCT strip.
+  // A chip and a strip are determined by the extrapolated position.
   // Algorithm is based on InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
 
-  // Check the input
+  // Check the input.
   if (not m_atlasId->is_sct(waferId)) {
     ATH_MSG_WARNING(waferId << " is not an SCT Identifier");
     return true;
   }
 
-  // There is at least one bad chip on the side.
-  // Get strip id from local position
+  // Get strip id from local position.
+  // Due to the limited position resolution, we may pick up a neighboring strip...
   const Amg::Vector2D localPos(parameters.localPosition());
   const Identifier stripIdentifier(siElement.identifierOfPosition(localPos));
   if (not m_atlasId->is_sct(stripIdentifier)) {
     ATH_MSG_WARNING(stripIdentifier << " is not an SCT Identifier");
     return true;
   }
-  
-  return (not m_sctCondSummaryTool->isGood(stripIdentifier, InDetConditions::SCT_CHIP));
+
+  // The extrapolated position is on a bad chip.
+  if (not m_sctCondSummaryTool->isGood(stripIdentifier, InDetConditions::SCT_CHIP)) return true;
+  // The extrapolated position is on a bad strip. (We may need to check neighboring strips.)
+  if (not m_sctCondSummaryTool->isGood(stripIdentifier, InDetConditions::SCT_STRIP)) return true;
+  return false;
 }
-- 
GitLab


From 74ab27ed5bbf3a2de32bc8426953a850474726f6 Mon Sep 17 00:00:00 2001
From: Catrin Bernius <catrin.bernius@cern.ch>
Date: Fri, 22 Mar 2019 10:00:07 +0000
Subject: [PATCH 163/163] Moving code for electron chain setup from TUT to TMMT

---
 .../TrigUpgradeTest/python/MuonSetup.py            |  2 +-
 .../TrigUpgradeTest/python/bjetMenuDefs.py         |  4 ++--
 .../TrigUpgradeTest/python/photonMenuDefs.py       |  2 +-
 .../TrigUpgradeTest/python/tauMenuDefs.py.bkup     |  3 ++-
 .../TrigValidation/TrigUpgradeTest/share/IDCalo.py |  2 +-
 .../TrigUpgradeTest/share/dataScoutingTest.py      |  4 ++--
 .../TrigUpgradeTest/share/egamma.withViews.py      |  5 ++---
 .../TrigUpgradeTest/share/electron.menu.py         |  6 +++---
 .../TrigUpgradeTest/share/fullMenu.py              |  6 +++---
 .../TrigUpgradeTest/share/pebTest.py               |  4 ++--
 .../TrigUpgradeTest/share/photon.menu.py           |  2 +-
 .../CommonSequences/CaloSequenceSetup.py}          |  7 ++++++-
 .../HLTMenuConfig/CommonSequences}/InDetSetup.py   |  8 +++-----
 .../HLTMenuConfig/CommonSequences/__init__.py      |  0
 .../python/HLTMenuConfig/Egamma/ElectronDef.py     |  4 ++--
 .../HLTMenuConfig/Egamma/ElectronSequenceSetup.py} | 14 ++++++--------
 .../python/HLTMenuConfig/Menu/MenuComponents.py    |  2 --
 17 files changed, 37 insertions(+), 38 deletions(-)
 rename Trigger/{TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py => TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py} (93%)
 rename Trigger/{TrigValidation/TrigUpgradeTest/python => TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences}/InDetSetup.py (98%)
 create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/__init__.py
 rename Trigger/{TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py => TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronSequenceSetup.py} (89%)

diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/MuonSetup.py b/Trigger/TrigValidation/TrigUpgradeTest/python/MuonSetup.py
index fed58b913d3d..f5fe90f92c31 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/MuonSetup.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/MuonSetup.py
@@ -363,7 +363,7 @@ def muCombRecoSequence( RoIs, OutputLevel=INFO ):
 
   ### Define input data of Inner Detector algorithms  ###
   ### and Define EventViewNodes to run the algorithms ###
-  from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+  from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
   (viewAlgs, eventAlgs) = makeInDetAlgs()
 
   from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_Muon
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
index a7d50ce3b0db..22a8500d8a1c 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
@@ -71,7 +71,7 @@ def bJetStep1Sequence():
     RoIBuilder.RoIOutputKey = "EMViewRoIs" # Default for Fast Tracking Algs
 
     # Fast Tracking 
-    from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
     (viewAlgs, eventAlgs) = makeInDetAlgs()
 
     from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_Jet    
@@ -147,7 +147,7 @@ def bJetStep1SequenceALLTE():
     RoIBuilder.RoIOutputKey = "EMViewRoIs" # Default for Fast Tracking Algs
 
     # Fast Tracking 
-    from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
     (viewAlgs, eventAlgs) = makeInDetAlgs()
 
     from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_Jet    
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
index ab324f6ae022..05d7706a528f 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
@@ -18,7 +18,7 @@ from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 def photonMenuSequence():
     """ Creates secpond step photon sequence"""
     
-    from TrigUpgradeTest.CaloMenuDefs import CaloMenuDefs
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import CaloMenuDefs
     ViewVerify = CfgMgr.AthViews__ViewDataVerifier("photonViewDataVerifier")
     ViewVerify.DataObjects = [('xAOD::TrigEMClusterContainer','StoreGateSvc+'+ CaloMenuDefs.L2CaloClusters)]
     ViewVerify.OutputLevel = DEBUG
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py.bkup b/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py.bkup
index d97e345e0a65..27710e80e1c7 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py.bkup
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py.bkup
@@ -178,7 +178,8 @@ def tauCaloSequence():
 # #
 
 
-# from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+#  from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
+
 
 # (viewAlgs, eventAlgs) = makeInDetAlgs()
 # from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_eGamma
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
index 096bf0e4ce5e..5b5ce2bd2817 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
@@ -40,7 +40,7 @@ if TriggerFlags.doID:
   # PixelLorentzAngleSvc and SCTLorentzAngleSvc
   include("InDetRecExample/InDetRecConditionsAccess.py")
 
-  from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+  from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
   
   (viewAlgs, eventAlgs) = makeInDetAlgs()
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/dataScoutingTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/dataScoutingTest.py
index 06ad199e389d..b45f4f246861 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/dataScoutingTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/dataScoutingTest.py
@@ -30,8 +30,8 @@ AllowedEventBuildingIdentifiers.extend(['dataScoutingElectronTest','pebtestthree
 # egamma chains
 ##################################################################
 if (doElectron):
-    from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
-    from TrigUpgradeTest.electronMenuDefs import electronMenuSequence,  inDetSetup
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
+    from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import electronMenuSequence, inDetSetup
 
     inDetSetup()
     fastCaloStep= fastCaloMenuSequence("Ele")
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
index 95e00f23213f..81a094002f89 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
@@ -116,11 +116,10 @@ def createFastCaloSequence(rerun=False):
 egammaCaloStep = createFastCaloSequence( rerun=False )
 
 
-from TrigUpgradeTest.InDetSetup import makeInDetAlgs
-
+from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
 (viewAlgs, eventAlgs) = makeInDetAlgs()
-from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_eGamma
 
+from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_eGamma
 theFTF = TrigFastTrackFinder_eGamma()
 theFTF.isRoI_Seeded = True
 viewAlgs.append(theFTF)
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/electron.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/electron.menu.py
index 313caaa72dd1..65fec8c21079 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/electron.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/electron.menu.py
@@ -1,5 +1,5 @@
 #
-#  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
 # import flags
@@ -10,8 +10,8 @@ include("TrigUpgradeTest/testHLT_MT.py")
 ##########################################
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
 
-from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
-from TrigUpgradeTest.electronMenuDefs import electronMenuSequence,  inDetSetup
+from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
+from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import electronMenuSequence, inDetSetup
 
 inDetSetup()
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
index 9e36ab4f49b3..bc04c269bbee 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
@@ -52,8 +52,8 @@ inDetSetup()
 # egamma chains
 ##################################################################
 if (doElectron):
-    from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
-    from TrigUpgradeTest.electronMenuDefs import electronMenuSequence
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
+    from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import electronMenuSequence
     fastCaloStep=fastCaloMenuSequence("Ele")
     electronStep=electronMenuSequence()
 
@@ -72,7 +72,7 @@ if (doElectron):
 # photon chains
 ##################################################################
 if (doPhoton):
-    from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
     from TrigUpgradeTest.photonMenuDefs import photonMenuSequence
 
     fastCaloStep = fastCaloMenuSequence("Gamma")
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
index 45862afb45c4..b89a391dce0d 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
@@ -25,8 +25,8 @@ from TrigUpgradeTest.pebMenuDefs import pebInfoWriterSequence
 # egamma chains
 ##################################################################
 if (doElectron):
-    from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
-    from TrigUpgradeTest.electronMenuDefs import electronMenuSequence,  inDetSetup
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
+    from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import electronMenuSequence, inDetSetup
 
     inDetSetup()
     fastCaloStep= fastCaloMenuSequence("Ele")
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
index bb2c853f159d..d36a2af651fb 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
@@ -9,7 +9,7 @@ include("TrigUpgradeTest/testHLT_MT.py")
 # menu
 ##########################################
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
-from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
+from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
 from TrigUpgradeTest.photonMenuDefs import photonMenuSequence
 
 calostep=fastCaloMenuSequence("Gamma")
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py
similarity index 93%
rename from Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py
index fc01a394e83b..ba875ac04c4a 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/CaloSequenceSetup.py
@@ -1,4 +1,9 @@
-from AthenaCommon.Constants import ERROR, DEBUG
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+
+from AthenaCommon.Constants import DEBUG
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool, MenuSequence
 from AthenaCommon.CFElements import seqAND
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/InDetSetup.py
similarity index 98%
rename from Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/InDetSetup.py
index 9da79e352da6..b1aa29abf870 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/InDetSetup.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/InDetSetup.py
@@ -1,5 +1,5 @@
 #
-#  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
 def makeInDetAlgs( whichSignature='' ):
@@ -204,6 +204,8 @@ def makeInDetAlgs( whichSignature='' ):
                                                       # ChannelStatus         = InDetSCT_ChannelStatusAlg,
                                                       DataObjectName          = InDetKeys.SCT_RDOs(),
                                                       ClustersName            = "SCT_TrigClusters",
+                                                      #Adding the suffix to flagged conditions
+                                                      #SCT_FlaggedCondData     = "SCT_FlaggedCondData_TRIG",
                                                       conditionsTool          = InDetSCT_ConditionsSummaryToolWithoutFlagged)
   InDetSCT_Clusterization.isRoI_Seeded = True
   InDetSCT_Clusterization.RoIs = "EMViewRoIs"
@@ -242,11 +244,9 @@ def makeInDetAlgs( whichSignature='' ):
     condSeq = AthSequencer("AthCondSeq")
     if not hasattr(condSeq, "InDetSiElementPropertiesTableCondAlg"):
       # Setup alignment folders and conditions algorithms
-      from InDetCondFolders import InDetAlignFolders
       from SiSpacePointFormation.SiSpacePointFormationConf import InDet__SiElementPropertiesTableCondAlg
       condSeq += InDet__SiElementPropertiesTableCondAlg(name = "InDetSiElementPropertiesTableCondAlg" + signature)
 
-  from TrigInDetConf.TrigInDetRecCommonTools import InDetTrigFastTrackSummaryTool
   from TrigInDetConf.TrigInDetPostTools import  InDetTrigParticleCreatorToolFTF
 
   from InDetTrigParticleCreation.InDetTrigParticleCreationConf import InDet__TrigTrackingxAODCnvMT
@@ -258,7 +258,5 @@ def makeInDetAlgs( whichSignature='' ):
   theTrackParticleCreatorAlg.roiCollectionName = "EMViewRoIs"
   viewAlgs.append(theTrackParticleCreatorAlg)
 
-
-
   return (viewAlgs, eventAlgs)
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/__init__.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/__init__.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py
index 199e7bb31636..8f4803da9332 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py
@@ -8,8 +8,8 @@ log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.Egamma.ElectronDef")
 from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep, RecoFragmentsPool
 
-from TrigUpgradeTest.CaloMenuDefs import fastCaloMenuSequence
-from TrigUpgradeTest.electronMenuDefs import electronMenuSequence, inDetSetup
+from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCaloMenuSequence
+from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import electronMenuSequence, inDetSetup
 
 #----------------------------------------------------------------
 # fragments generating configuration will be functions in New JO, 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronSequenceSetup.py
similarity index 89%
rename from Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronSequenceSetup.py
index e4693823ef4e..d2aaeae892a8 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronSequenceSetup.py
@@ -1,16 +1,15 @@
 #
-#  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
 from AthenaCommon.Include import include
 from AthenaCommon.Constants import VERBOSE,DEBUG
-from AthenaCommon.AppMgr import ServiceMgr as svcMgr
 import AthenaCommon.CfgMgr as CfgMgr
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
 
 # menu components   
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool
-from AthenaCommon.CFElements import parOR, seqOR, seqAND, stepSeq
+from AthenaCommon.CFElements import parOR, seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 
 
@@ -29,13 +28,12 @@ def inDetSetup():
 
     # PixelLorentzAngleSvc and SCTLorentzAngleSvc
     include("InDetRecExample/InDetRecConditionsAccess.py")
-    from InDetRecExample.InDetKeys import InDetKeys
 
 
 def electronSequence(ConfigFlags):
     """ second step:  tracking....."""
     
-    from TrigUpgradeTest.InDetSetup import makeInDetAlgs
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.InDetSetup import makeInDetAlgs
     (viewAlgs, eventAlgs) = makeInDetAlgs()
     from TrigFastTrackFinder.TrigFastTrackFinder_Config import TrigFastTrackFinder_eGamma
 
@@ -46,7 +44,7 @@ def electronSequence(ConfigFlags):
 
     # A simple algorithm to confirm that data has been inherited from parent view
     # Required to satisfy data dependencies
-    from TrigUpgradeTest.CaloMenuDefs import CaloMenuDefs  
+    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import CaloMenuDefs  
     ViewVerify = CfgMgr.AthViews__ViewDataVerifier("electronViewDataVerifier")
     ViewVerify.DataObjects = [('xAOD::TrigEMClusterContainer','StoreGateSvc+'+ CaloMenuDefs.L2CaloClusters)]
     ViewVerify.OutputLevel = DEBUG
@@ -74,9 +72,9 @@ def electronSequence(ConfigFlags):
 
 
     for viewAlg in viewAlgs:
-        if viewAlg.properties().has_key("RoIs"):
+        if "RoIs" in viewAlg.properties():
             viewAlg.RoIs = l2ElectronViewsMaker.InViewRoIs
-        if viewAlg.properties().has_key("roiCollectionName"):
+        if "roiCollectionName" in viewAlg.properties():
             viewAlg.roiCollectionName = l2ElectronViewsMaker.InViewRoIs
 
     theElectronFex.RoIs = l2ElectronViewsMaker.InViewRoIs    
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
index 9230ddb23139..8f68daca2596 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
@@ -219,9 +219,7 @@ class ComboMaker(AlgNode):
         newdict = {chain : allMultis}
 
         for i in range(1, len(allMultis)):
-            print "MEOW multiplicity ", allMultis[i]
             cval = self.Alg.getProperties()[self.prop]  # check necessary to see if chain was added already?
-            print "MEOW cval ", cval
             if type(cval) is dict:
                 ##cval[chain] = allMultis
                 if chain in cval.keys():
-- 
GitLab